Ejemplo n.º 1
0
		public static bool CanOffer( PlayerMobile from, BaseQuest quest, bool message )
		{
			if ( !quest.CanOffer() )
				return false;
			
			// if a player wants to start quest chain (already started) again (not osi)			
			if ( quest.ChainID != QuestChain.None && FirstChainQuest( quest, quest.Quester ) && from.Chains.ContainsKey( quest.ChainID ) )
				return false;
				
			if ( !Delayed( from, quest, message ) )
				return false;
		
			for ( int i = quest.Objectives.Count - 1; i >= 0; i -- )
			{
				Type type = quest.Objectives[ i ].Type();
				
				if ( type == null )
					continue;
			
				for ( int j = from.Quests.Count - 1; j >= 0; j -- )
				{
					BaseQuest pQuest = from.Quests[ j ];
					
					for ( int k = pQuest.Objectives.Count - 1; k >= 0; k -- )
					{
						BaseObjective obj = pQuest.Objectives[ k ];
						
						if ( type == obj.Type() )
							return false;					
					}
				}
			}
			
			return true;
		}
Ejemplo n.º 2
0
	// Use this for initialization
	void Start() {
		originalScale = transform.localScale;

		quest = GetComponent<BaseQuest>();

		MasterOfKnowledge.OnActivateQuest += MasterOfKnowledge_OnActivateQuest;
		MasterOfKnowledge.OnDeliverQuest += MasterOfKnowledge_OnDeliverQuest;
	}
Ejemplo n.º 3
0
        public MLQuestFinishGump( PlayerMobile pm, BaseQuest quest, MondainQuester quester )
            : base(75, 25)
        {
            m_Quest = quest;
            m_From = pm;
            m_Quester = quester;

            if ( m_Quest.Complete == null )
            {
                if ( QuestHelper.TryDeleteItems( m_Quest ) )
                {
                    if ( QuestHelper.AnyRewards( m_Quest ) )
                    {
                        m_From.CloseGump( this.GetType() );
                        m_From.SendGump( new MLQuestRewardGump( m_Quest ) );
                    }
                    else
                        m_Quest.GiveRewards();
                }

                return;
            }

            Intern( "" );

            AddPage( 1 );

            Closable = false;
            AddImageTiled( 50, 20, 400, 400, 0x1404 );
            AddImageTiled( 50, 29, 30, 390, 0x28DC );
            AddImageTiled( 34, 140, 17, 279, 0x242F );
            AddImage( 48, 135, 0x28AB );
            AddImage( -16, 285, 0x28A2 );
            AddImage( 0, 10, 0x28B5 );
            AddImage( 25, 0, 0x28B4 );
            AddImageTiled( 83, 15, 350, 15, 0x280A );
            AddImage( 34, 419, 0x2842 );
            AddImage( 442, 419, 0x2840 );
            AddImageTiled( 51, 419, 392, 17, 0x2775 );
            AddImageTiled( 415, 29, 44, 390, 0xA2D );
            AddImageTiled( 415, 29, 30, 390, 0x28DC );
            AddLabelIntern( 100, 50, 0x481, 0 );
            AddImage( 370, 50, 0x589 );
            AddImage( 379, 60, 0x15A9 );
            AddImage( 425, 0, 0x28C9 );
            AddImage( 90, 33, 0x232D );
            AddHtmlLocalized( 130, 45, 270, 16, 3006156, 0xFFFFFF, false, false ); // Quest Conversation
            AddImageTiled( 130, 65, 175, 1, 0x238D );
            AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false );

            AddHtmlObject( 98, 140, 312, 180, quest.Complete, 0x15F90, false, true );
            AddButton( 95, 395, 0x2EE9, 0x2EEB, 4, GumpButtonType.Reply, 0 ); // Continue
            AddKRHtmlLocalized( 0, 0, 0, 0, 1011036, false, false );
            AddKRHtmlLocalized( 0, 0, 0, 0, 1011012, false, false );
            AddButton( 313, 395, 0x2EE6, 0x2EE8, 3, GumpButtonType.Reply, 0 ); // Close
        }
Ejemplo n.º 4
0
		public override void ProcessQuest(Mobile from, BaseQuest quest)
		{
			if(from == null || quest == null)
				return;
				
			Type type = quest.GetType();
				
			if(Entries.ContainsKey(type))
				AwardPoints(from, Entries[type].Item1, true);
		}
Ejemplo n.º 5
0
		public MondainQuestGump( PlayerMobile owner, BaseQuest quest, Section section, bool offer, bool completed, object quester ) : base( 75, 25 )
		{
			m_Quester = quester;
			m_Quest = quest;
			m_Section = section;
			m_Offer = offer;
			m_Completed = completed;
			
			if ( quest != null )
				m_From = quest.Owner;
			else
				m_From = owner;
		
			Closable = false;
			Disposable = true;
			Dragable = true;
			Resizable = false;
			
			AddPage( 0 );
			
			AddImageTiled( 50, 20, 400, 400, 0x1404 );
			AddImageTiled( 50, 29, 30, 390, 0x28DC );
			AddImageTiled( 34, 140, 17, 279, 0x242F );			
			AddImage( 48, 135, 0x28AB );
			AddImage( -16, 285, 0x28A2 );
			AddImage( 0, 10, 0x28B5 );
			AddImage( 25, 0, 0x28B4 );
			AddImageTiled( 83, 15, 350, 15, 0x280A );
			AddImage( 34, 419, 0x2842 );
			AddImage( 442, 419, 0x2840 );
			AddImageTiled( 51, 419, 392, 17, 0x2775 );
			AddImageTiled( 415, 29, 44, 390, 0xA2D );
			AddImageTiled( 415, 29, 30, 390, 0x28DC );
			AddImage( 370, 50, 0x589 );
			
			if ( (int) m_From.AccessLevel > (int) AccessLevel.Counselor && quest != null )
				AddButton( 379, 60, 0x15A9, 0x15A9, (int) Buttons.CompleteQuest, GumpButtonType.Reply, 0 );
			else
				AddImage( 379, 60, 0x15A9 );
						
			AddImage( 425, 0, 0x28C9 );
			AddImage( 90, 33, 0x232D );
			AddImageTiled( 130, 65, 175, 1, 0x238D );
			
			switch ( m_Section )
			{
				case Section.Main: SecMain( ); break;
				case Section.Description: SecDescription(); break;
				case Section.Objectives: SecObjectives(); break; 
				case Section.Rewards: SecRewards(); break;
				case Section.Refuse: SecRefuse(); break;
				case Section.Complete: SecComplete(); break;
				case Section.InProgress: SecInProgress(); break;
			}
		}
Ejemplo n.º 6
0
        public MondainResignGump( BaseQuest quest )
            : base(120, 50)
        {
            if ( quest == null )
                return;

            m_Quest = quest;

            Closable = false;
            Disposable = true;
            Dragable = true;
            Resizable = false;

            AddPage( 0 );

            AddImageTiled( 0, 0, 348, 262, 0xA8E );
            AddAlphaRegion( 0, 0, 348, 262 );
            AddImage( 0, 15, 0x27A8 );
            AddImageTiled( 0, 30, 17, 200, 0x27A7 );
            AddImage( 0, 230, 0x27AA );
            AddImage( 15, 0, 0x280C );
            AddImageTiled( 30, 0, 300, 17, 0x280A );
            AddImage( 315, 0, 0x280E );
            AddImage( 15, 244, 0x280C );
            AddImageTiled( 30, 244, 300, 17, 0x280A );
            AddImage( 315, 244, 0x280E );
            AddImage( 330, 15, 0x27A8 );
            AddImageTiled( 330, 30, 17, 200, 0x27A7 );
            AddImage( 330, 230, 0x27AA );
            AddImage( 333, 2, 0x2716 );
            AddImage( 333, 248, 0x2716 );
            AddImage( 2, 248, 0x216 );
            AddImage( 2, 2, 0x2716 );

            AddHtmlLocalized( 25, 22, 200, 20, 1049000, 0x7D00, false, false ); // Confirm Quest Cancellation
            AddImage( 25, 40, 0xBBF );

            AddHtmlLocalized( 25, 55, 300, 120, 1060836, 0xFFFFFF, false, false ); // This quest will give you valuable information, skills and equipment that will help you advance in the game at a quicker pace.<BR><BR>Are you certain you wish to cancel at this time?

            if ( quest.ChainID != QuestChain.None )
            {
                AddRadio( 25, 145, 0x25F8, 0x25FB, false, (int) Radios.Chain );
                AddHtmlLocalized( 60, 150, 280, 20, 1075023, 0xFFFFFF, false, false ); // Yes, I want to quit this entire chain!
            }

            AddRadio( 25, 180, 0x25F8, 0x25FB, true, (int) Radios.Quest );
            AddHtmlLocalized( 60, 185, 280, 20, 1049005, 0xFFFFFF, false, false ); // Yes, I really want to quit this quest!

            AddRadio( 25, 215, 0x25F8, 0x25FB, false, (int) Radios.None );
            AddHtmlLocalized( 60, 220, 280, 20, 1049006, 0xFFFFFF, false, false ); // No, I don't want to quit.

            AddButton( 265, 220, 0xF7, 0xF8, (int) Buttons.Okay, GumpButtonType.Reply, 0 ); // okay
        }
Ejemplo n.º 7
0
        public MLQuestRewardGump( BaseQuest quest )
            : base(75, 25)
        {
            m_Quest = quest;

            AddPage( 1 );

            Closable = false;
            AddImageTiled( 50, 20, 400, 400, 0x1404 );
            AddImageTiled( 50, 29, 30, 390, 0x28DC );
            AddImageTiled( 34, 140, 17, 279, 0x242F );
            AddImage( 48, 135, 0x28AB );
            AddImage( -16, 285, 0x28A2 );
            AddImage( 0, 10, 0x28B5 );
            AddImage( 25, 0, 0x28B4 );
            AddImageTiled( 83, 15, 350, 15, 0x280A );
            AddImage( 34, 419, 0x2842 );
            AddImage( 442, 419, 0x2840 );
            AddImageTiled( 51, 419, 392, 17, 0x2775 );
            AddImageTiled( 415, 29, 44, 390, 0xA2D );
            AddImageTiled( 415, 29, 30, 390, 0x28DC );
            AddLabel( 100, 50, 0x481, "" );
            AddImage( 370, 50, 0x589 );
            AddImage( 379, 60, 0x15A9 );
            AddImage( 425, 0, 0x28C9 );
            AddImage( 90, 33, 0x232D );
            AddHtmlLocalized( 130, 45, 270, 16, 1072201, 0xFFFFFF, false, false ); // Reward
            AddImageTiled( 130, 65, 175, 1, 0x238D );
            AddButton( 95, 395, 0x2EE0, 0x2EE2, 1, GumpButtonType.Reply, 0 ); // Accept
            AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false );
            AddHtmlLocalized( 98, 140, 312, 16, 1072201, 0x2710, false, false ); // Reward

            if ( quest.Rewards.Count == 1 )
            {
                BaseReward reward = m_Quest.Rewards[0];

                AddImage( 107, 147, 0x4B9 );
                AddHtmlObject( 135, 146, 280, 32, reward.Name, 0x15F90, false, false );
            }
            else
            {
                AddHtmlLocalized( 98, 156, 312, 16, 1072208, 0x2710, false, false ); // All of the following

                for ( int n = 0; n < quest.Rewards.Count; ++n )
                {
                    BaseReward reward = m_Quest.Rewards[n];

                    AddImage( 105, 179 + ( n * 16 ), 0x4B9 );
                    AddHtmlObject( 133, 178 + ( n * 16 ), 280, 32, reward.Name, 0x15F90, false, false );
                }
            }
        }
Ejemplo n.º 8
0
        public MLQuestConversationGump( BaseQuest quest, MLQuestConverType converType )
            : base(75, 25)
        {
            AddPage( 1 );

            Closable = false;
            AddImageTiled( 50, 20, 400, 400, 0x1404 );
            AddImageTiled( 50, 29, 30, 390, 0x28DC );
            AddImageTiled( 34, 140, 17, 279, 0x242F );
            AddImage( 48, 135, 0x28AB );
            AddImage( -16, 285, 0x28A2 );
            AddImage( 0, 10, 0x28B5 );
            AddImage( 25, 0, 0x28B4 );
            AddImageTiled( 83, 15, 350, 15, 0x280A );
            AddImage( 34, 419, 0x2842 );
            AddImage( 442, 419, 0x2840 );
            AddImageTiled( 51, 419, 392, 17, 0x2775 );
            AddImageTiled( 415, 29, 44, 390, 0xA2D );
            AddImageTiled( 415, 29, 30, 390, 0x28DC );
            AddLabel( 100, 50, 0x481, "" );
            AddImage( 370, 50, 0x589 );
            AddImage( 379, 60, 0x15A9 );
            AddImage( 425, 0, 0x28C9 );
            AddImage( 90, 33, 0x232D );
            AddHtmlLocalized( 130, 45, 270, 16, 3006156, 0xFFFFFF, false, false ); // Quest Conversation
            AddImageTiled( 130, 65, 175, 1, 0x238D );
            AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false );

            switch ( converType )
            {
                case MLQuestConverType.Refuse:
                    {
                        AddHtmlObject( 98, 140, 312, 180, quest.Refuse, 0x15F90, false, true );
                        AddButton( 313, 395, 0x2EE6, 0x2EE8, 3, GumpButtonType.Reply, 0 );
                        break;
                    }
                case MLQuestConverType.InProgress:
                    {
                        AddHtmlObject( 98, 140, 312, 180, quest.Uncomplete, 0x15F90, false, true );
                        AddButton( 313, 395, 0x2EE6, 0x2EE8, 3, GumpButtonType.Reply, 0 ); // Close
                        break;
                    }
            }
        }
Ejemplo n.º 9
0
        public override int Damage(int amount, Mobile from, bool informMount, bool checkDisrupt)
        {
            if (from is BaseCreature && ((BaseCreature)from).GetMaster() is PlayerMobile)
            {
                from = ((BaseCreature)from).GetMaster();
            }

            if (from is PlayerMobile pm)
            {
                BaseQuest quest = QuestHelper.GetQuest(pm, typeof(GuiltyQuest));

                if (quest != null && !quest.Completed)
                {
                    return(base.Damage(amount, from, informMount, checkDisrupt));
                }
            }

            from.SendLocalizedMessage(1075456); // You are not allowed to damage this NPC unless your on the Guilty Quest
            return(0);
        }
Ejemplo n.º 10
0
        public override bool CanBeHarmedBy(Mobile from, bool message)
        {
            if (from is BaseCreature && ((BaseCreature)from).GetMaster() is PlayerMobile)
            {
                from = ((BaseCreature)from).GetMaster();
            }

            if (from is PlayerMobile pm)
            {
                BaseQuest quest = QuestHelper.GetQuest(pm, typeof(GuiltyQuest));

                if (quest != null && !quest.Completed)
                {
                    return(base.CanBeHarmedBy(from, message));
                }
            }

            from.SendLocalizedMessage(1075456); // You are not allowed to damage this NPC unless your on the Guilty Quest
            return(false);
        }
Ejemplo n.º 11
0
        public override void OnExit(Mobile m)
        {
            base.OnExit(m);

            if (m is PlayerMobile)
            {
                PlayerMobile player = (PlayerMobile)m;

                for (int i = 0; i < player.Quests.Count; i++)
                {
                    BaseQuest quest = player.Quests[i];

                    for (int j = 0; j < quest.Objectives.Count; j++)
                    {
                        BaseObjective objective = quest.Objectives[j];

                        if (objective is ApprenticeObjective && !objective.Completed)
                        {
                            ApprenticeObjective apprentice = (ApprenticeObjective)objective;

                            if (IsPartOf(apprentice.Region))
                            {
                                if (apprentice.Leave is int)
                                {
                                    player.SendLocalizedMessage((int)apprentice.Leave);
                                }
                                else if (apprentice.Leave is string)
                                {
                                    player.SendMessage((string)apprentice.Leave);
                                }

                                if (m_Table[m] is BuffInfo)
                                {
                                    BuffInfo.RemoveBuff(m, (BuffInfo)m_Table[m]);
                                }
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 12
0
        public bool CheckQuest(PlayerMobile player)
        {
            for (int i = 0; i < _Quests.Length; i++)
            {
                BaseQuest quest = player.Quests.FirstOrDefault(q => q.GetType() == _Quests[i]);

                if (quest != null)
                {
                    if (quest.Completed)
                    {
                        if (quest.GetType() != typeof(TeachingSomethingNewQuest))
                        {
                            quest.GiveRewards();
                        }
                        else
                        {
                            player.SendGump(new MondainQuestGump(quest, MondainQuestGump.Section.Complete, false, true));
                        }

                        return(true);
                    }

                    player.SendGump(new MondainQuestGump(quest, MondainQuestGump.Section.InProgress, false));
                    quest.InProgress();

                    return(false);
                }
            }

            BaseQuest questt = new TamingPetQuest
            {
                Owner   = player,
                Quester = this
            };

            player.CloseGump(typeof(MondainQuestGump));
            player.SendGump(new MondainQuestGump(questt));

            return(true);
        }
Ejemplo n.º 13
0
        public override void OnEnter(Mobile m)
        {
            base.OnEnter(m);

            if (m is PlayerMobile)
            {
                PlayerMobile player = (PlayerMobile)m;

                for (int i = 0; i < player.Quests.Count; i++)
                {
                    BaseQuest quest = player.Quests[i];

                    for (int j = 0; j < quest.Objectives.Count; j++)
                    {
                        BaseObjective objective = quest.Objectives[j];

                        if (objective is ApprenticeObjective && !objective.Completed)
                        {
                            ApprenticeObjective apprentice = (ApprenticeObjective)objective;

                            if (IsPartOf(apprentice.Region))
                            {
                                if (apprentice.Enter is int)
                                {
                                    player.SendLocalizedMessage((int)apprentice.Enter);
                                }
                                else if (apprentice.Enter is string)
                                {
                                    player.SendMessage((string)apprentice.Enter);
                                }

                                BuffInfo info = new BuffInfo(BuffIcon.ArcaneEmpowerment, 1078511, 1078512, apprentice.Skill.ToString()); // Accelerated Skillgain Skill: ~1_val~
                                BuffInfo.AddBuff(m, info);
                                m_Table[m] = info;
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 14
0
        public bool HasQuest(PlayerMobile pm)
        {
            if (pm.Quests == null)
            {
                return(false);
            }

            for (int i = 0; i < pm.Quests.Count; i++)
            {
                BaseQuest quest = pm.Quests[i];

                if (quest is ProfessionalBountyQuest)
                {
                    if (this == quest.Quester)
                    {
                        for (int j = 0; j < quest.Objectives.Count; j++)
                        {
                            if (quest.Objectives[j].Update(pm))
                            {
                                quest.Objectives[j].Complete();
                            }
                        }
                    }

                    if (quest.Completed)
                    {
                        quest.OnCompleted();
                        pm.SendGump(new MondainQuestGump(quest, MondainQuestGump.Section.Complete, false, true));
                    }
                    else
                    {
                        pm.SendGump(new MondainQuestGump(quest, MondainQuestGump.Section.InProgress, false));
                        quest.InProgress();
                    }

                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 15
0
    public void PushQuestToPeasant(int PeasantIndex, int QuestIndex, BaseQuest quest)
    {

        Vector3 pos = Peasants[PeasantIndex].transform.position;
        Peasants[PeasantIndex].transform.GetComponent<Image>().enabled = true;
        Peasants[PeasantIndex].transform.GetComponent<colorLerp>().enabled = true;

        GameObject QuestMarkerObj = Instantiate(QuestMarkerPrefab);

        QuestMarkerObj.transform.position = pos + new Vector3(0, QuestMarkerHeight, 0);
        QuestMarkerObj.transform.SetParent(this.transform);

        PeasantQuest trigger = Peasants[PeasantIndex].AddComponent<PeasantQuest>();

        //hubDataManager.SelectQuest(QuestIndex)
        trigger.delegateOnClickEvent += 
            new PeasantQuest.DelegateOnClickEvent(hubDataManager.SetQuestLetter);
        trigger.delegateOnClickEvent2 +=
            new PeasantQuest.DelegateOnClickEvent(hubDataManager.setCurrSelectedQuest);
        trigger.QuestIndex = QuestIndex;

    }
Ejemplo n.º 16
0
        /// <summary>
        /// private internal Events on quest selections
        /// changed: 02.10.05
        /// </summary>
        private void DoQuestEvents(Character c, BaseQuest bq)
        {
            if (c.QuestDone(bq))
            {
                return;
            }

            if (!c.QuestCompleted(bq))
            {
                if (!c.HaveQuest(bq))
                {
                    if (bq.HaveDeliveryObj && !HaveFreeSlot(c))                         // quest need free slot
                    {
                        c.QuestFailed(qFailedReason.InventoryFull);
                    }
                    else if (AmountActiveQuests(c) >= 20)                         // questLog is full
                    {
                        c.QuestLogIsFull();
                    }
                    else                 // can get quest
                    {                    //need add questEmotion[] on get quest
                        c.ResponseQuestDetails(this, bq.Id, bq.Name, bq.Desc, bq.Details, getEmoteOnStart(bq));
                        //c.ResponseQuestDetails( this, bq.Id, bq.Name, bq.Desc, bq.Details, new qEmote[] { new qEmote( Emote.ONESHOT_TALK, 500 ) } );
                    }
                }
                else
                {
                    //c.QuestInvalid( qInvalidReason.ReadyHaveThatQuest );
                    c.SendGossip(this, OnlyQuests ? (int)NPCMenuId.Quests : (int)NPCMenuId.MainMenu, null, null);
                    //c.ResponseMessage( this, OnlyQuests ? (int)NPCMenuId.Quests : (int)NPCMenuId.MainMenu, bq.ProgressDialog );
                }
            }
            else if (c.QuestCompleted(bq))
            {            //need add questEmotion[] on complete quest
                c.OfferReward(this, bq.Id, bq.FinishTitle, bq.FinishDialog, getEmoteOnEnd(bq));
                //c.OfferReward( this, bq.Id, bq.FinishTitle, bq.FinishDialog, new qEmote[] { new qEmote( Emote.ONESHOT_TALK, 500 ) } );
            }
        }
Ejemplo n.º 17
0
        public override bool CanUse(Mobile from)
        {
            if (!base.CanUse(from))
            {
                return(false);
            }

            PlayerMobile pm = from as PlayerMobile;

            if (pm == null)
            {
                return(false);
            }

            for (int i = pm.Quests.Count - 1; i >= 0; i--)
            {
                BaseQuest quest = pm.Quests[i];

                for (int j = quest.Objectives.Count - 1; j >= 0; j--)
                {
                    BaseObjective objective = quest.Objectives[j];

                    if (objective is ApprenticeObjective)
                    {
                        from.SendMessage("You are already under the effect of an enhanced skillgain quest.");
                        return(false);
                    }
                }
            }

            if (pm.AcceleratedStart > DateTime.UtcNow)
            {
                from.SendLocalizedMessage(1077951); // You are already under the effect of an accelerated skillgain scroll.
                return(false);
            }

            return(true);
        }
Ejemplo n.º 18
0
    private IQuest GenerateDestroyQuest(int numNonSuicide, int numSuicide)
    {
        var destQuest      = new BaseQuest();
        var meleeAvailable = (AvailableEnemies & EnemyTypes.HasMelee) == EnemyTypes.HasMelee;

        for (int i = 0; i < numNonSuicide; i++)
        {
            if (i % 2 == 0 && meleeAvailable)
            {
                destQuest.Objectives.Add(new DestroyTargetObjective(11));
            }
            else
            {
                destQuest.Objectives.Add(new DestroyTargetObjective(12));
            }
        }
        for (int i = 0; i < numSuicide; i++)
        {
            destQuest.Objectives.Add(new DestroyTargetObjective(13));
        }

        return(destQuest);
    }
Ejemplo n.º 19
0
        public bool HaveRewardOnHello(Character c)
        {
            bool result = false;

            ActiveQuest[] list = c.GetActiveQuests;
            if (list != null)
            {
                foreach (ActiveQuest aq in list)
                {
                    if (aq != null && aq.baseQuest != null)
                    {
                        BaseQuest bq = aq.baseQuest;
                        if (bq.HaveNPCTargetId && bq.NPCTargetId == this.Id)
                        {
                            if (bq.HasReward() || bq.HasRewardChoice())
                            {
                                if (HaveFreeSlot(c))
                                {
                                    c.OfferReward(this, bq.Id, bq.FinishTitle, bq.FinishDialog, getEmoteOnEnd(bq));
                                }
                                else
                                {
                                    c.QuestFailed(qFailedReason.InventoryFull);
                                }
                            }
                            else
                            {
                                c.OfferReward(this, bq.Id, bq.FinishTitle, bq.FinishDialog, getEmoteOnEnd(bq));
                            }
                            result = true;
                            break;
                        }
                    }
                }
            }
            return(result);
        }
        public TownCrierQuestCompleteGump(PlayerMobile pm, BaseQuest quest)
            : base(pm, 10, 100)
        {
            Title = quest.Title;
            Body  = quest.Complete;

            TownCryerNewsEntry entry = null;

            for (var index = 0; index < TownCryerSystem.NewsEntries.Count; index++)
            {
                var e = TownCryerSystem.NewsEntries[index];

                if (e.QuestType == quest.GetType())
                {
                    entry = e;
                    break;
                }
            }

            if (entry != null)
            {
                GumpID = entry.GumpImage;
            }
        }
Ejemplo n.º 21
0
        public override bool CanUse(Mobile from)
        {
            if (!base.CanUse(from))
            {
                return(false);
            }

            if (!(from is PlayerMobile pm))
            {
                return(false);
            }

            for (int i = pm.Quests.Count - 1; i >= 0; i--)
            {
                BaseQuest quest = pm.Quests[i];

                for (int j = quest.Objectives.Count - 1; j >= 0; j--)
                {
                    BaseObjective objective = quest.Objectives[j];

                    if (objective is ApprenticeObjective)
                    {
                        from.SendLocalizedMessage(1079254); // You may not use your Scroll of Alacrity while your character is on a new player skill quest.
                        return(false);
                    }
                }
            }

            if (pm.AcceleratedStart > DateTime.UtcNow)
            {
                from.SendLocalizedMessage(1077951); // You are already under the effect of an accelerated skillgain scroll.
                return(false);
            }

            return(true);
        }
Ejemplo n.º 22
0
        public override void OnDoubleClick(Mobile from)
        {
            if (from.InRange(Location, 4))
            {
                if (!m_Conversation.ContainsKey(from))
                {
                    SayTo(from, m_Responses[0]);
                    m_Conversation[from] = 1;
                }

                if (Backpack != null)
                {
                    Backpack.DisplayTo(from);
                }
            }

            if (from is PlayerMobile pm && QuestHelper.CheckDoneOnce(pm, typeof(WishesOfTheWispQuest), null, false))
            {
                WhisperingWithWispsQuest q = QuestHelper.GetQuest <WhisperingWithWispsQuest>(pm);

                if (q == null)
                {
                    BaseQuest quest = QuestHelper.RandomQuest(pm, new Type[] { typeof(WhisperingWithWispsQuest) }, this);

                    if (quest != null)
                    {
                        pm.CloseGump(typeof(MondainQuestGump));
                        pm.SendGump(new MondainQuestGump(quest));
                    }
                }
                else if (q.Completed)
                {
                    q.CompleteQuest();
                }
            }
        }
Ejemplo n.º 23
0
        public override void OnResponse(RelayInfo info)
        {
            switch (info.ButtonID)
            {
            case 0:
                var gump = new TownCryerGump(User, Cryer);
                gump.Category = TownCryerGump.GumpCategory.News;
                BaseGump.SendGump(gump);
                break;

            case 1:
                User.LaunchBrowser(Entry.InfoUrl);
                Refresh();
                break;

            case 2:
                if (QuestHelper.HasQuest(User, Entry.QuestType))
                {
                    Cryer.SayTo(User, 1080107, 1150);     // I'm sorry, I have nothing for you at this time.
                }
                else
                {
                    BaseQuest quest = QuestHelper.Construct(Entry.QuestType) as BaseQuest;

                    if (quest != null && (!QuestHelper.CheckDoneOnce(User, quest, Cryer, true) || User.AccessLevel > AccessLevel.Player))
                    {
                        quest.Owner   = User;
                        quest.Quester = Cryer;

                        User.CloseGump(typeof(MondainQuestGump));
                        User.SendGump(new MondainQuestGump(quest));
                    }
                }
                break;
            }
        }
Ejemplo n.º 24
0
 public static void CompleteQuest(PlayerMobile pm, BaseQuest quest)
 {
     BaseGump.SendGump(new TownCrierQuestCompleteGump(pm, quest));
 }
Ejemplo n.º 25
0
 public MLQuestFinishGump( PlayerMobile pm, BaseQuest quest )
     : this(pm, quest, null)
 {
 }
Ejemplo n.º 26
0
		public static void DeleteItems( BaseQuest quest )
		{			
			for ( int i = 0; i < quest.Objectives.Count; i ++ )
			{				
				BaseObjective objective = quest.Objectives[ i ];				
			
				DeleteItems( quest.Owner, objective.Type(), objective.MaxProgress, true );
				RemoveStatus( quest.Owner, objective.Type() );		
			}
		}
Ejemplo n.º 27
0
        public void Use(Mobile from, bool firstStage)
        {
            PlayerMobile pm = from as PlayerMobile;

            if (Deleted)
            {
                return;
            }

            #region Mondain's Legacy
            for (int i = pm.Quests.Count - 1; i >= 0; i--)
            {
                BaseQuest quest = pm.Quests[i];

                for (int j = quest.Objectives.Count - 1; j >= 0; j--)
                {
                    BaseObjective objective = quest.Objectives[j];

                    if (objective is ApprenticeObjective)
                    {
                        from.SendMessage("You are already under the effect of an enhanced skillgain quest.");
                        return;
                    }
                }
            }
            #endregion

            if (!IsChildOf(from.Backpack))
            {
                from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
            }

            else if (pm.AcceleratedStart > DateTime.Now)
            {
                from.SendLocalizedMessage(1077951); // You are already under the effect of an accelerated skillgain scroll.
                return;
            }

            else
            {
                if (firstStage)
                {
                    from.CloseGump(typeof(StatCapScroll.InternalGump));
                    from.CloseGump(typeof(PowerScroll.InternalGump));
                    #region Scroll of Transcendence
                    from.CloseGump(typeof(ScrollofTranscendence.InternalGump));
                    #endregion
                    from.CloseGump(typeof(ScrollofAlacrity.InternalGump));
                    from.SendGump(new InternalGump(from, this));
                }
                else
                {
                    double tskill = from.Skills[m_Skill].Base;
                    double tcap   = from.Skills[m_Skill].Cap;

                    if (tskill >= tcap || from.Skills[m_Skill].Lock == SkillLock.Locked || from.Skills[m_Skill].Lock == SkillLock.Down)
                    {
                        from.SendLocalizedMessage(1094935); /*You cannot increase this skill at this time. The skill may be locked or set to lower in your skill menu.
                                                             * If you are at your total skill cap, you must use a Powerscroll to increase your current skill cap.*/
                        return;
                    }
                    else
                    {
                        Effects.PlaySound(from.Location, from.Map, 0x1E9);

                        Effects.SendTargetParticles(from, 0x373A, 35, 45, 0x00, 0x00, 9502, (EffectLayer)255, 0x100);

                        from.SendLocalizedMessage(1077956); // You are infused with intense energy. You are under the effects of an accelerated skillgain scroll.

                        pm.AcceleratedStart = DateTime.Now + TimeSpan.FromMinutes(15);

                        Timer t = (Timer)m_Table[from];

                        m_Table[from] = Timer.DelayCall(TimeSpan.FromMinutes(15), new TimerStateCallback(Expire_Callback), from);

                        pm.AcceleratedSkill = m_Skill;

                        Delete();
                    }
                }
            }
        }
Ejemplo n.º 28
0
        public bool TryBound(Mobile from, BaseQuest quest)
        {
            if (from == null || Galleon == null || !Galleon.Contains(this) || quest == null)
                return false;

            if (m_IsCaught)
            {
                from.SendMessage("That pirate is already bound to a ship!");
                return false;
            }

            Combatant = null;
            Warmode = false;
            m_IsCaught = true;
            return true;
        }
Ejemplo n.º 29
0
        public bool TryConstructCreator(out UCreator creator)
        {
            switch (_object.ExportType)
            {
            // Fortnite
            case "AthenaConsumableEmoteItemDefinition":
            case "AthenaSkyDiveContrailItemDefinition":
            case "AthenaLoadingScreenItemDefinition":
            case "AthenaVictoryPoseItemDefinition":
            case "AthenaPetCarrierItemDefinition":
            case "AthenaMusicPackItemDefinition":
            case "AthenaBattleBusItemDefinition":
            case "AthenaCharacterItemDefinition":
            case "AthenaMapMarkerItemDefinition":
            case "AthenaBackpackItemDefinition":
            case "AthenaPickaxeItemDefinition":
            case "AthenaGadgetItemDefinition":
            case "AthenaGliderItemDefinition":
            case "AthenaSprayItemDefinition":
            case "AthenaDanceItemDefinition":
            case "AthenaEmojiItemDefinition":
            case "AthenaItemWrapDefinition":
            case "AthenaToyItemDefinition":
            case "FortHeroType":
            case "FortTokenType":
            case "FortAbilityKit":
            case "FortWorkerType":
            case "RewardGraphToken":
            case "FortBannerTokenType":
            case "FortVariantTokenType":
            case "FortDecoItemDefinition":
            case "FortStatItemDefinition":
            case "FortAmmoItemDefinition":
            case "FortEmoteItemDefinition":
            case "FortBadgeItemDefinition":
            case "FortAwardItemDefinition":
            case "FortGadgetItemDefinition":
            case "AthenaCharmItemDefinition":
            case "FortPlaysetItemDefinition":
            case "FortGiftBoxItemDefinition":
            case "FortOutpostItemDefinition":
            case "FortVehicleItemDefinition":
            case "FortCardPackItemDefinition":
            case "FortDefenderItemDefinition":
            case "FortCurrencyItemDefinition":
            case "FortResourceItemDefinition":
            case "FortBackpackItemDefinition":
            case "FortEventQuestMapDataAsset":
            case "FortWeaponModItemDefinition":
            case "FortCodeTokenItemDefinition":
            case "FortSchematicItemDefinition":
            case "FortWorldMultiItemDefinition":
            case "FortAlterationItemDefinition":
            case "FortExpeditionItemDefinition":
            case "FortIngredientItemDefinition":
            case "FortAccountBuffItemDefinition":
            case "FortWeaponMeleeItemDefinition":
            case "FortPlayerPerksItemDefinition":
            case "FortPlaysetPropItemDefinition":
            case "FortHomebaseNodeItemDefinition":
            case "FortNeverPersistItemDefinition":
            case "RadioContentSourceItemDefinition":
            case "FortPlaysetGrenadeItemDefinition":
            case "FortPersonalVehicleItemDefinition":
            case "FortGameplayModifierItemDefinition":
            case "FortHardcoreModifierItemDefinition":
            case "FortConsumableAccountItemDefinition":
            case "FortConversionControlItemDefinition":
            case "FortAccountBuffCreditItemDefinition":
            case "FortEventCurrencyItemDefinitionRedir":
            case "FortPersistentResourceItemDefinition":
            case "FortHomebaseBannerIconItemDefinition":
            case "FortCampaignHeroLoadoutItemDefinition":
            case "FortConditionalResourceItemDefinition":
            case "FortChallengeBundleScheduleDefinition":
            case "FortWeaponMeleeDualWieldItemDefinition":
            case "FortDailyRewardScheduleTokenDefinition":
            case "FortCreativeRealEstatePlotItemDefinition":
            case "AthenaDanceItemDefinition_AdHocSquadsJoin_C":
                creator = _style switch
                {
                    EIconStyle.Cataba => new BaseCommunity(_object, _style, "Cataba"),
                    _ => new BaseIcon(_object, _style)
                };
                return(true);

            case "FortTrapItemDefinition":
            case "FortTandemCharacterData":
            case "FortSpyTechItemDefinition":
            case "FortAccoladeItemDefinition":
            case "FortContextTrapItemDefinition":
            case "FortWeaponRangedItemDefinition":
            case "Daybreak_LevelExitVehicle_PartItemDefinition_C":
                creator = new BaseIconStats(_object, _style);
                return(true);

            case "FortItemSeriesDefinition":
                creator = new BaseSeries(_object, _style);
                return(true);

            case "MaterialInstanceConstant"
                when _object.Owner != null &&
                (_object.Owner.Name.EndsWith($"/MI_OfferImages/{_object.Name}", StringComparison.OrdinalIgnoreCase) ||
                 _object.Owner.Name.EndsWith($"/RenderSwitch_Materials/{_object.Name}", StringComparison.OrdinalIgnoreCase) ||
                 _object.Owner.Name.EndsWith($"/MI_BPTile/{_object.Name}", StringComparison.OrdinalIgnoreCase)):
                creator = new BaseMaterialInstance(_object, _style);
                return(true);

            case "FortMtxOfferData":
                creator = new BaseMtxOffer(_object, _style);
                return(true);

            case "FortPlaylistAthena":
                creator = new BasePlaylist(_object, _style);
                return(true);

            case "FortFeatItemDefinition":
            case "FortQuestItemDefinition":
            case "AthenaDailyQuestDefinition":
            case "FortUrgentQuestItemDefinition":
                creator = new BaseQuest(_object, _style);
                return(true);

            case "FortCompendiumItemDefinition":
            case "FortChallengeBundleItemDefinition":
                creator = new BaseBundle(_object, _style);
                return(true);

            case "AthenaSeasonItemDefinition":
                creator = new BaseSeason(_object, _style);
                return(true);

            case "FortItemAccessTokenType":
                creator = new BaseItemAccessToken(_object, _style);
                return(true);

            case "PlaylistUserOptionEnum":
            case "PlaylistUserOptionBool":
            case "PlaylistUserOptionString":
            case "PlaylistUserOptionIntEnum":
            case "PlaylistUserOptionIntRange":
            case "PlaylistUserOptionColorEnum":
            case "PlaylistUserOptionFloatEnum":
            case "PlaylistUserOptionFloatRange":
            case "PlaylistUserTintedIconIntEnum":
            case "PlaylistUserOptionPrimaryAsset":
            case "PlaylistUserOptionCollisionProfileEnum":
                creator = new BaseUserControl(_object, _style);
                return(true);

            // Battle Breakers
            case "WExpGenericAccountItemDefinition":
            case "WExpGearAccountItemDefinition":
            case "WExpHQWorkerLodgesDefinition":
            case "WExpPersonalEventDefinition":
            case "WExpUpgradePotionDefinition":
            case "WExpAccountRewardDefinition":
            case "WExpHQBlacksmithDefinition":
            case "WExpHQSecretShopDefinition":
            case "WExpHQMonsterPitDefinition":
            case "WExpHQHeroTowerDefinition":
            case "WExpVoucherItemDefinition":
            case "WExpTreasureMapDefinition":
            case "WExpHammerChestDefinition":
            case "WExpHQWorkshopDefinition":
            case "WExpUnlockableDefinition":
            case "WExpHQSmelterDefinition":
            case "WExpContainerDefinition":
            case "WExpCharacterDefinition":
            case "WExpHQMarketDefinition":
            case "WExpGiftboxDefinition":
            case "WExpStandInDefinition":
            case "WExpRegionDefinition":
            case "WExpHQMineDefinition":
            case "WExpXpBookDefinition":
            case "WExpTokenDefinition":
            case "WExpItemDefinition":
            case "WExpZoneDefinition":
                creator = new BaseBreakersIcon(_object, EIconStyle.Default);
                return(true);

            // Spellbreak
            case "GTargetedTeleportActiveSkill":
            case "GChronomasterV2ActiveSkill":
            case "GShadowstepActiveSkill":
            case "GGatewayActiveSkill":
            case "GStealthActiveSkill":
            case "GFeatherActiveSkill":
            case "GCosmeticDropTrail":
            case "GFlightActiveSkill":
            case "GCosmeticRunTrail":
            case "GCosmeticArtifact":
            case "GCosmeticTriumph":
            case "GWolfsbloodSkill":
            case "GDashActiveSkill":
            case "GCharacterPerk":
            case "GCosmeticTitle":
            case "GCosmeticBadge":
            case "GRMTStoreOffer":
            case "GCosmeticEmote":
            case "GCosmeticCard":
            case "GCosmeticSkin":
            case "GStoreOffer":
            case "GAccolade":
            case "GRuneItem":
            case "GQuest":
                creator = new BaseSpellIcon(_object, EIconStyle.Default);
                return(true);

            case "GLeagueTier":
                creator = new BaseLeague(_object, EIconStyle.Default);
                return(true);

            case "GLeagueDivision":
                creator = new BaseDivision(_object, EIconStyle.Default);
                return(true);

            default:
                creator = null;
                return(false);
            }
        }
Ejemplo n.º 30
0
        public static void ProcessQuest(Mobile from, BaseQuest quest)
        {
            if(from == null || quest == null)
                return;

            Type type = quest.GetType();

            if(PointsEntry.Entries.ContainsKey(type))
                AwardPoints(from, PointsEntry.Entries[type].TopAttackerPoints, true);
        }
Ejemplo n.º 31
0
		public MondainQuestGump( BaseQuest quest ) : this( quest, Section.Description, true )
		{
		}
Ejemplo n.º 32
0
		public static bool FirstChainQuest( BaseQuest quest, object quester )
		{
			Type[] quests = null;
		
			if ( quester is MondainQuester )
			{
				MondainQuester mQuester = (MondainQuester) quester;
				
				quests = mQuester.Quests;
			}
			else if ( quester is BaseQuestItem )
			{
				BaseQuestItem iQuester = (BaseQuestItem) quester;
				
				quests = iQuester.Quests;
			}
			
			if ( quests != null )
			{
				for ( int i = 0; i < quests.Length; i ++ )
				{
					if ( quests[ i ] == quest.GetType() )
						return true;
				}
			}
			
			return false;
		}
Ejemplo n.º 33
0
        public MLQuestLogGump( BaseQuest quest )
            : base(75, 25)
        {
            m_Quest = quest;

            Intern( "" );

            AddPage( 1 );

            Closable = false;

            AddImageTiled( 50, 20, 400, 400, 0x1404 );
            AddImageTiled( 50, 29, 30, 390, 0x28DC );
            AddImageTiled( 34, 140, 17, 279, 0x242F );
            AddImage( 48, 135, 0x28AB );
            AddImage( -16, 285, 0x28A2 );
            AddImage( 0, 10, 0x28B5 );
            AddImage( 25, 0, 0x28B4 );
            AddImageTiled( 83, 15, 350, 15, 0x280A );
            AddImage( 34, 419, 0x2842 );
            AddImage( 442, 419, 0x2840 );
            AddImageTiled( 51, 419, 392, 17, 0x2775 );
            AddImageTiled( 415, 29, 44, 390, 0xA2D );
            AddImageTiled( 415, 29, 30, 390, 0x28DC );
            AddLabelIntern( 100, 50, 0x481, 0 );
            AddImage( 370, 50, 0x589 );
            AddImage( 379, 60, 0x15A9 );
            AddImage( 425, 0, 0x28C9 );
            AddImage( 90, 33, 0x232D );
            AddHtmlLocalized( 130, 45, 270, 16, 1046026, 0xFFFFFF, false, false ); // Quest Log
            AddImageTiled( 130, 65, 175, 1, 0x238D );
            AddButton( 95, 395, 0x2EF5, 0x2EF7, 1, GumpButtonType.Reply, 0 ); // Resign
            AddButton( 313, 395, 0x2EEC, 0x2EEE, 2, GumpButtonType.Reply, 0 ); // Okay

            if ( m_Quest.Failed )
                AddHtmlLocalized( 160, 80, 250, 16, 500039, 0x3C00, false, false ); // Failed!

            AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false );

            if ( m_Quest.ChainID != QuestChain.None )
                AddHtmlLocalized( 98, 140, 312, 16, 1075024, 0x2710, false, false ); // Description (quest chain)
            else
                AddHtmlLocalized( 98, 140, 312, 16, 1072202, 0x2710, false, false ); // Description

            AddHtmlObject( 98, 156, 312, 180, quest.Description, LightGreen, false, true );
            AddButton( 275, 370, 0x2EE9, 0x2EEB, 0, GumpButtonType.Page, 2 ); // Continue

            AddPage( 2 );

            Closable = false;

            AddImageTiled( 50, 20, 400, 400, 0x1404 );
            AddImageTiled( 50, 29, 30, 390, 0x28DC );
            AddImageTiled( 34, 140, 17, 279, 0x242F );
            AddImage( 48, 135, 0x28AB );
            AddImage( -16, 285, 0x28A2 );
            AddImage( 0, 10, 0x28B5 );
            AddImage( 25, 0, 0x28B4 );
            AddImageTiled( 83, 15, 350, 15, 0x280A );
            AddImage( 34, 419, 0x2842 );
            AddImage( 442, 419, 0x2840 );
            AddImageTiled( 51, 419, 392, 17, 0x2775 );
            AddImageTiled( 415, 29, 44, 390, 0xA2D );
            AddImageTiled( 415, 29, 30, 390, 0x28DC );
            AddLabelIntern( 100, 50, 0x481, 0 );
            AddImage( 370, 50, 0x589 );
            AddImage( 379, 60, 0x15A9 );
            AddImage( 425, 0, 0x28C9 );
            AddImage( 90, 33, 0x232D );

            AddHtmlLocalized( 130, 45, 270, 16, 1046026, 0xFFFFFF, false, false ); // Quest Log

            AddImageTiled( 130, 65, 175, 1, 0x238D );

            AddButton( 95, 395, 0x2EF5, 0x2EF7, 1, GumpButtonType.Reply, 0 );
            AddButton( 313, 395, 0x2EEC, 0x2EEE, 2, GumpButtonType.Reply, 0 );

            AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false );

            AddButton( 275, 370, 0x2EE9, 0x2EEB, 0, GumpButtonType.Page, 2 );
            AddButton( 130, 370, 0x2EEF, 0x2EF1, 0, GumpButtonType.Page, 1 );

            AddHtmlLocalized( 98, 140, 312, 16, 1049073, 0x2710, false, false ); // Objective:

            if ( m_Quest.AllObjectives )
                AddHtmlLocalized( 98, 156, 312, 16, 1072208, 0x2710, false, false ); // All of the following
            else
                AddHtmlLocalized( 98, 156, 312, 16, 1072209, 0x2710, false, false ); // Only one of the following

            int offset = 172;
            int internidx = 0;

            for ( int i = 0; i < m_Quest.Objectives.Count; i++ )
            {
                int field = 1;

                BaseObjective objective = m_Quest.Objectives[i];

                if ( objective is ObtainObjective )
                {
                    ObtainObjective obtain = (ObtainObjective) objective;
                    string returnTo = ReturnTo();

                    AddKRHtmlLocalized( 0, 0, 0, 0, -3, false, false );

                    /*1*/
                    Intern( obtain.MaxProgress.ToString() );
                    /*2*/
                    Intern( obtain.Name );
                    /*3*/
                    Intern( obtain.Timed ? obtain.Seconds.ToString() : "" );
                    /*4*/
                    Intern( "" );
                    /*5*/
                    Intern( "" );
                    /*6*/
                    Intern( obtain.CurProgress.ToString() );
                    /*7*/
                    Intern( returnTo );

                    AddHtmlLocalized( 98, offset, 350, 16, 1072205, 0x15F90, false, false ); // Obtain
                    AddLabelIntern( 143, offset, 0x481, 1 + ( internidx * 7 ) );

                    AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                    AddLabelIntern( 173, offset, 0x481, 2 + ( internidx * 7 ) );

                    if ( obtain.Image > 0 )
                        AddItem( 350, offset, obtain.Image ); // Image

                    offset += 16;

                    AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                    AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );

                    if ( obtain.Timed )
                    {
                        AddHtmlLocalized( 103, offset, 120, 16, 1062379, 0x15F90, false, false ); // Est. time remaining:
                        AddLabelIntern( 223, offset, 0x481, 3 + ( internidx * 7 ) ); // %est. time remaining%

                        offset += 16;
                    }
                    else
                    {
                        AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                        AddKRLabel( 0, 0, 0, 0, 3 + ( internidx * 7 ), false, false );
                    }

                    AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                    AddKRLabel( 0, 0, 0, 0, 4 + ( internidx * 7 ), false, false );

                    AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                    AddKRLabel( 0, 0, 0, 0, 5 + ( internidx * 7 ), false, false );

                    AddHtmlLocalized( 103, offset, 120, 16, 3000087, 0x15F90, false, false ); // Total
                    AddLabelIntern( 223, offset, 0x481, 6 + ( internidx * 7 ) );

                    offset += 16;

                    AddHtmlLocalized( 103, offset, 120, 16, 1074782, 0x15F90, false, false ); // Return to
                    AddLabelIntern( 223, offset, 0x481, 7 + ( internidx * 7 ) );

                    offset += 16;
                }
                else if ( objective is SlayObjective )
                {
                    SlayObjective slay = (SlayObjective) objective;
                    int internOffset = internidx * 8;
                    string returnTo = ReturnTo();

                    AddKRHtmlLocalized( 0, 0, 0, 0, -2, false, false );

                    /*1*/
                    Intern( slay.MaxProgress.ToString() );
                    /*2*/
                    Intern( slay.Name );
                    /*3*/
                    Intern( slay.Timed ? slay.Seconds.ToString() : "" );
                    /*4*/
                    Intern( slay.Region != null ? slay.Region.Name : "" );
                    /*5*/
                    Intern( "" );
                    /*6*/
                    Intern( "" );
                    /*7*/
                    Intern( slay.CurProgress.ToString() );
                    /*8*/
                    Intern( returnTo );

                    AddHtmlLocalized( 98, offset, 312, 16, 1072204, 0x15F90, false, false ); // Slay
                    AddLabelIntern( 133, offset, 0x481, 1 + internOffset ); // Amount

                    AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                    AddLabelIntern( slay.MaxProgress > 10 ? 163 : 148, offset, 0x481, 2 + internOffset ); // Type

                    offset += 16;

                    if ( slay.Timed )
                    {
                        AddHtmlLocalized( 103, offset, 120, 16, 1062379, 0x15F90, false, false ); // Est. time remaining:
                        AddLabelIntern( 223, offset, 0x481, 3 + internOffset ); // %est. time remaining%

                        offset += 16;
                    }
                    else
                    {
                        AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                        AddKRLabel( 0, 0, 0, 0, 3 + internOffset, false, false );
                    }

                    if ( slay.Region != null )
                    {
                        AddHtmlLocalized( 103, offset, 312, 20, 1018327, 0x15F90, false, false ); // Location
                        AddLabelIntern( 223, offset, 0x481, 4 + internOffset ); // %est. time remaining%

                        offset += 16;
                    }
                    else
                    {
                        AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                        AddKRLabel( 0, 0, 0, 0, 4 + internOffset, false, false );
                    }

                    AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                    AddKRLabel( 0, 0, 0, 0, 5 + internOffset, false, false );

                    AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                    AddKRLabel( 0, 0, 0, 0, 6 + internOffset, false, false );

                    AddHtmlLocalized( 103, offset, 120, 16, 3000087, 0x15F90, false, false ); // Total
                    AddLabelIntern( 223, offset, 0x481, 7 + internOffset );

                    offset += 16;

                    AddHtmlLocalized( 103, offset, 120, 16, 1074782, 0x15F90, false, false ); // Return to
                    AddLabelIntern( 223, offset, 0x481, 8 + internOffset );

                    offset += 16;
                }
                else if ( objective is DeliverObjective )
                {
                    DeliverObjective deliver = (DeliverObjective) objective;
                    int internOffset = internidx * 5;

                    AddKRHtmlLocalized( 0, 0, 0, 0, -5, false, false );

                    AddHtmlLocalized( 98, offset, 312, 16, 1072207, 0x15F90, false, false ); // Deliver

                    Intern( deliver.MaxProgress.ToString() );
                    Intern( deliver.DeliveryName );

                    AddLabelIntern( 143, offset, 0x481, internOffset + 1 );
                    AddLabelIntern( 158, offset, 0x481, internOffset + 2 );

                    offset += 16;

                    AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                    AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );

                    if ( deliver.Timed )
                    {
                        AddHtmlLocalized( 103, offset, 120, 16, 1062379, 0x15F90, false, false ); // Est. time remaining:
                        Intern( deliver.Seconds.ToString() );
                        AddLabelIntern( 223, offset, 0x481, internOffset + 3 ); // %est. time remaining%

                        offset += 16;
                    }
                    else
                    {
                        AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                        AddKRLabel( 0, 0, 0, 0, internOffset + 3, false, false );
                        Intern( "" );
                    }

                    AddHtmlLocalized( 103, offset, 120, 16, 1072379, 0x15F90, false, false ); // Deliver to
                    Intern( deliver.DestName );
                    AddLabelIntern( 223, offset, 0x481, internOffset + 4 );

                    offset += 16;

                    AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                    AddKRLabel( 0, 0, 0, 0, internOffset + 5, false, false );
                    Intern( "" );
                }
                else if ( objective is EscortObjective )
                {
                    EscortObjective escort = (EscortObjective) objective;

                    AddKRHtmlLocalized( 0, 0, 0, 0, -4, false, false );

                    AddHtmlLocalized( 98, offset, 312, 16, 1072206, 0x15F90, false, false ); // Escort to
                    AddHtmlObject( 173, offset, 312, 20, escort.Region.Name, 0xFFFFFF, false, false );

                    offset += 16;

                    if ( escort.Timed )
                    {
                        AddHtmlLocalized( 103, offset, 120, 16, 1062379, 0x15F90, false, false ); // Est. time remaining:

                        Intern( escort.Seconds.ToString() );

                        AddLabelIntern( 223, offset, 0x481, ( internidx * 3 ) + ( field++ ) ); // %est. time remaining%

                        offset += 16;
                    }

                    for ( int j = field; j < 3; j++ )
                    {
                        AddKRHtmlLocalized( 0, 0, 0, 0, 1078089, false, false );
                        AddKRLabel( 0, 0, 0, 0, j, false, false );
                        Intern( "" );
                    }
                }
                else if ( objective is ApprenticeObjective )
                {
                    ApprenticeObjective apprentice = (ApprenticeObjective) objective;

                    AddKRHtmlLocalized( 0, 0, 0, 0, -9, false, false );

                    AddHtmlLocalized( 98, offset, 200, 16, 1077485, "#" + ( 1044060 + (int) apprentice.Skill ) + "\t" + apprentice.MaxProgress, 0x15F90, false, false ); // Increase ~1_SKILL~ to ~2_VALUE~

                    offset += 16;
                }
                else if ( objective is BaseBardObjective )
                {
                    BaseBardObjective bardObjective = (BaseBardObjective) objective;

                    AddHtmlLocalized( 98, offset, 200, 16, bardObjective.Cliloc, 0x15F90, false, false );

                    offset += 16;
                }

                internidx++;
            }

            AddButton( 275, 370, 0x2EE9, 0x2EEB, 0, GumpButtonType.Page, 3 );

            AddPage( 3 );

            Closable = false;

            AddImageTiled( 50, 20, 400, 400, 0x1404 );
            AddImageTiled( 50, 29, 30, 390, 0x28DC );
            AddImageTiled( 34, 140, 17, 279, 0x242F );
            AddImage( 48, 135, 0x28AB );
            AddImage( -16, 285, 0x28A2 );
            AddImage( 0, 10, 0x28B5 );
            AddImage( 25, 0, 0x28B4 );
            AddImageTiled( 83, 15, 350, 15, 0x280A );
            AddImage( 34, 419, 0x2842 );
            AddImage( 442, 419, 0x2840 );
            AddImageTiled( 51, 419, 392, 17, 0x2775 );
            AddImageTiled( 415, 29, 44, 390, 0xA2D );
            AddImageTiled( 415, 29, 30, 390, 0x28DC );
            AddLabelIntern( 100, 50, 0x481, 0 );
            AddImage( 370, 50, 0x589 );
            AddImage( 379, 60, 0x15A9 );
            AddImage( 425, 0, 0x28C9 );
            AddImage( 90, 33, 0x232D );
            AddHtmlLocalized( 130, 45, 270, 16, 1046026, 0xFFFFFF, false, false ); // Quest Log
            AddImageTiled( 130, 65, 175, 1, 0x238D );
            AddButton( 95, 395, 0x2EF5, 0x2EF7, 1, GumpButtonType.Reply, 0 );
            AddButton( 313, 395, 0x2EEC, 0x2EEE, 2, GumpButtonType.Reply, 0 );
            AddHtmlLocalized( 130, 68, 220, 48, 1114513, String.Format( "#{0}", quest.Title.ToString() ), 0x2710, false, false );
            AddButton( 130, 370, 0x2EEF, 0x2EF1, 0, GumpButtonType.Page, 2 );
            AddHtmlLocalized( 98, 140, 312, 16, 1072201, 0x2710, false, false ); // Reward

            if ( quest.Rewards.Count == 1 )
            {
                BaseReward reward = m_Quest.Rewards[0];

                AddImage( 105, 163, 0x4B9 );
                AddHtmlObject( 133, 162, 280, 32, reward.Name, 0x15F90, false, false );
            }
            else
            {
                AddHtmlLocalized( 98, 156, 312, 16, 1072208, 0x2710, false, false ); // All of the following

                for ( int n = 0; n < quest.Rewards.Count; ++n )
                {
                    BaseReward reward = m_Quest.Rewards[n];

                    AddImage( 105, 179 + ( n * 16 ), 0x4B9 );
                    AddHtmlObject( 133, 178 + ( n * 16 ), 280, 32, reward.Name, 0x15F90, false, false );
                }
            }
        }
Ejemplo n.º 34
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                from.RevealingAction();

                if (targeted is BaseCreature || (from is BaseCreature && ((BaseCreature)from).CanProvoke))
                {
                    BaseCreature creature = targeted as BaseCreature;
                    Mobile       target   = targeted as Mobile;

                    bool questTargets = QuestTargets(creature, from);

                    if (!m_Instrument.IsChildOf(from.Backpack))
                    {
                        from.SendLocalizedMessage(1062488); // The instrument you are trying to play is no longer in your backpack!
                    }
                    else if (m_Creature.Unprovokable)
                    {
                        from.SendLocalizedMessage(1049446); // You have no chance of provoking those creatures.
                    }
                    else if (creature != null && creature.Unprovokable && !(creature is DemonKnight) && !questTargets)
                    {
                        from.SendLocalizedMessage(1049446); // You have no chance of provoking those creatures.
                    }
                    else if (m_Creature.Map != target.Map ||
                             !m_Creature.InRange(target, BaseInstrument.GetBardRange(from, SkillName.Provocation)))
                    {
                        from.SendLocalizedMessage(1049450);
                        // The creatures you are trying to provoke are too far away from each other for your music to have an effect.
                    }
                    else if (m_Creature != target)
                    {
                        from.NextSkillTime = Core.TickCount + 10000;

                        double diff         = ((m_Instrument.GetDifficultyFor(m_Creature) + m_Instrument.GetDifficultyFor(target)) * 0.5) - 5.0;
                        double music        = from.Skills[SkillName.Musicianship].Value;
                        int    masteryBonus = 0;

                        if (from is PlayerMobile)
                        {
                            masteryBonus = Spells.SkillMasteries.BardSpell.GetMasteryBonus((PlayerMobile)from, SkillName.Provocation);
                        }

                        if (masteryBonus > 0)
                        {
                            diff -= (diff * ((double)masteryBonus / 100));
                        }

                        diff += (XmlMobFactions.GetScaledFaction(from, m_Creature, -25, 25, -0.001) +
                                 XmlMobFactions.GetScaledFaction(from, target, -25, 25, -0.001)) * 0.5;

                        if (music > 100.0)
                        {
                            diff -= (music - 100.0) * 0.5;
                        }

                        if (questTargets || from.CanBeHarmful(m_Creature, true) && from.CanBeHarmful(target, true))
                        {
                            if (!BaseInstrument.CheckMusicianship(from))
                            {
                                from.NextSkillTime = Core.TickCount + (10000 - ((masteryBonus / 5) * 1000));
                                from.SendLocalizedMessage(500612); // You play poorly, and there is no effect.
                                m_Instrument.PlayInstrumentBadly(from);
                                m_Instrument.ConsumeUse(from);
                            }
                            else
                            {
                                //from.DoHarmful( m_Creature );
                                //from.DoHarmful( creature );
                                if (!from.CheckTargetSkill(SkillName.Provocation, target, diff - 25.0, diff + 25.0))
                                {
                                    from.NextSkillTime = Core.TickCount + (10000 - ((masteryBonus / 5) * 1000));
                                    from.SendLocalizedMessage(501599); // Your music fails to incite enough anger.
                                    m_Instrument.PlayInstrumentBadly(from);
                                    m_Instrument.ConsumeUse(from);
                                }
                                else
                                {
                                    from.SendLocalizedMessage(501602); // Your music succeeds, as you start a fight.
                                    m_Instrument.PlayInstrumentWell(from);
                                    m_Instrument.ConsumeUse(from);
                                    m_Creature.Provoke(from, target, true);

                                    #region Bard Mastery Quest
                                    if (questTargets)
                                    {
                                        BaseQuest quest = QuestHelper.GetQuest((PlayerMobile)from, typeof(IndoctrinationOfABattleRouserQuest));

                                        if (quest != null)
                                        {
                                            foreach (BaseObjective objective in quest.Objectives)
                                            {
                                                objective.Update(creature);
                                            }
                                        }
                                    }
                                    #endregion
                                }
                            }
                        }
                    }
                    else
                    {
                        from.SendLocalizedMessage(501593); // You can't tell someone to attack themselves!
                    }
                }
                else
                {
                    from.SendLocalizedMessage(501589); // You can't incite that!
                }
            }
Ejemplo n.º 35
0
		public MondainQuestGump( BaseQuest quest, Section section, bool offer ) : this( null, quest, section, offer, false )
		{
		}
Ejemplo n.º 36
0
		public MondainQuestGump( BaseQuest quest, Section section, bool offer, bool completed ) : this( null, quest, section, offer, completed )
		{
		}
Ejemplo n.º 37
0
		public MondainQuestGump( PlayerMobile owner, BaseQuest quest, Section section, bool offer, bool completed ) : this( owner, quest, section, offer, completed, null )
		{
		}
Ejemplo n.º 38
0
 void AddQuest(BaseQuest quest)
 {
     m_QuestDict.Add(quest.id, quest);
     quest.StartNewQuest();
 }
Ejemplo n.º 39
0
 public static void HandleQuest(Mobile from, BaseQuest quest)
 {
     if(PointsEntry.Entries.ContainsKey(quest.GetType()))
         ProcessQuest(from, quest);
 }
Ejemplo n.º 40
0
        public int GetQuestProgress(int idx)
        {
            BaseQuest quest = m_QuestDict[idx];

            return(quest.progress);
        }
Ejemplo n.º 41
0
 public QuestEventArgs(BaseQuest quest) : base()
 {
     Quest = quest;
 }
Ejemplo n.º 42
0
        public override void OnDoubleClick(Mobile m)
        {
            if (m is PlayerMobile && m.InRange(Location, 5))
            {
                GoingGumshoeQuest quest = QuestHelper.GetQuest <GoingGumshoeQuest>((PlayerMobile)m);

                if (quest != null && quest.Completed)
                {
                    quest.GiveRewards();

                    BaseQuest newquest = QuestHelper.RandomQuest((PlayerMobile)m, new Type[] { typeof(GoingGumshoeQuest2) }, this);

                    if (newquest != null)
                    {
                        m.SendGump(new MondainQuestGump(newquest));
                    }
                }
                else
                {
                    GoingGumshoeQuest2 quest2 = QuestHelper.GetQuest <GoingGumshoeQuest2>((PlayerMobile)m);

                    if (quest2 != null)
                    {
                        if (quest2.IsComplete)
                        {
                            quest2.Objectives[0].CurProgress++;
                            quest2.GiveRewards(); // TODO: Does this quest end here?

                            BaseQuest newquest = QuestHelper.RandomQuest((PlayerMobile)m, new Type[] { typeof(GoingGumshoeQuest3) }, this);

                            if (newquest != null)
                            {
                                m.SendGump(new MondainQuestGump(newquest));
                            }
                        }
                        else
                        {
                            m.SendGump(new MondainQuestGump(quest2, MondainQuestGump.Section.InProgress, false));
                            quest2.InProgress();
                        }
                    }
                    else
                    {
                        GoingGumshoeQuest3 quest3 = QuestHelper.GetQuest <GoingGumshoeQuest3>((PlayerMobile)m);

                        if (quest3 != null)
                        {
                            if (quest3.IsComplete)
                            {
                                quest3.Objectives[0].CurProgress++;
                                quest3.GiveRewards(); // TODO: Does this quest end here?

                                BaseQuest newquest = QuestHelper.RandomQuest((PlayerMobile)m, new Type[] { typeof(GoingGumshoeQuest4) }, this);

                                if (newquest != null)
                                {
                                    m.SendGump(new MondainQuestGump(newquest));
                                }
                            }
                            else
                            {
                                m.SendGump(new MondainQuestGump(quest3, MondainQuestGump.Section.InProgress, false));
                                quest3.InProgress();
                            }
                        }
                        else
                        {
                            GoingGumshoeQuest4 quest4 = QuestHelper.GetQuest <GoingGumshoeQuest4>((PlayerMobile)m);

                            if (quest4 != null && !quest4.IsComplete)
                            {
                                m.SendGump(new MondainQuestGump(quest4, MondainQuestGump.Section.InProgress, false));
                                quest4.InProgress();
                            }
                            else if (quest4 == null)
                            {
                                SayTo(m, 1080107); // I'm sorry, I have nothing for you at this time.
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 43
0
        public QAndAGump(Mobile owner, BaseQuest quest)
            : base(160, 100)
        {
            m_From     = owner;
            m_Quest    = quest;
            Closable   = false;
            Disposable = false;

            foreach (BaseObjective objective in quest.Objectives)
            {
                if (objective is QuestionAndAnswerObjective answerObjective)
                {
                    m_Objective = answerObjective;
                    break;
                }
            }

            if (m_Objective == null)
            {
                return;
            }

            QuestionAndAnswerEntry entry = m_Objective.GetRandomQandA();

            if (entry == null)
            {
                return;
            }

            AddImage(0, 0, 0x4CC);
            AddImage(40, 78, 0x5F);
            AddImageTiled(49, 87, 301, 3, 0x60);
            AddImage(350, 78, 0x61);

            object answer = entry.Answers[Utility.Random(entry.Answers.Length)];

            List <object> selections = new List <object>(entry.WrongAnswers);

            m_Index = Utility.Random(selections.Count); //Gets correct answer
            selections.Insert(m_Index, answer);

            AddHtmlLocalized(30, 40, 340, 36, entry.Question, 0x0, false, false); //question

            for (int i = 0; i < selections.Count; i++)
            {
                object selection = selections[i];

                AddImage(50, 112 + (i * 32), 0x8B0);

                AddButton(49, 111 + (i * 32), 2224, 2224, selection == answer ? 1 : 0, GumpButtonType.Reply, 0);

                if (selection is int iSelection)
                {
                    AddHtmlLocalized(80, 109 + (i * 32), 275, 36, iSelection, 0x0, false, false);
                }
                else
                {
                    AddHtml(80, 109 + (i * 32), 275, 36, string.Format("<BASEFONT COLOR=#{0:X6}>{1}</BASEFONT>", 0x0, selection), false, false);
                }
            }
        }
Ejemplo n.º 44
0
        public QAndAGump(Mobile owner, BaseQuest quest) : base(50, 50)
        {
            m_From        = owner;
            m_Quest       = quest;
            this.Closable = false;

            foreach (BaseObjective objective in quest.Objectives)
            {
                if (objective is QuestionAndAnswerObjective)
                {
                    m_Objective = (QuestionAndAnswerObjective)objective;
                    break;
                }
            }

            if (m_Objective == null)
            {
                return;
            }

            QuestionAndAnswerEntry entry = m_Objective.GetRandomQandA();

            if (entry == null)
            {
                return;
            }

            AddPage(0);

            int    question = entry.Question;
            object answer   = entry.Answers[Utility.Random(entry.Answers.Length)];

            List <object> selections = new List <object>(entry.WrongAnswers);

            m_Index = Utility.Random(selections.Count); //Gets correct answer
            selections.Insert(m_Index, answer);

            AddBackground(0, 0, 305, 145 + (selections.Count * 35), 9270);
            AddHtmlLocalized(104, 25, 200, 26, (int)m_Quest.Title, FontColor, false, false); //La Insep Om
            AddHtmlLocalized(20, 55, 250, 36, question, FontColor, false, false);            //question

            int y = 105;

            for (int i = 0; i < selections.Count; i++)
            {
                //AddButton(82, y, 2152, 2153, i + 1, GumpButtonType.Reply, 0);
                AddRadio(20, y, 2152, 2153, false, i + 1);

                object selection = selections[i];

                if (selection is int)
                {
                    AddHtmlLocalized(70, y - 2, 200, 18, (int)selection, FontColor, false, false);
                }
                else
                {
                    AddHtml(70, y - 2, 200, 18, String.Format("<BASEFONT COLOR=#{0:X6}>{1}</BASEFONT>", FontColor, selections[i]), false, false);
                }

                y += 35;
            }

            AddButton(129, y, 2074, 2076, 1, GumpButtonType.Reply, 0);
        }
Ejemplo n.º 45
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                from.RevealingAction();

                if (!(targeted is Mobile))
                {
                    from.SendLocalizedMessage(1049528); // You cannot calm that!
                }
                else if (!m_Instrument.IsChildOf(from.Backpack))
                {
                    from.SendLocalizedMessage(1062488); // The instrument you are trying to play is no longer in your backpack!
                }
                else
                {
                    m_SetSkillTime = false;

                    int masteryBonus = 0;

                    if (from is PlayerMobile)
                    {
                        masteryBonus = Spells.SkillMasteries.BardSpell.GetMasteryBonus((PlayerMobile)from, SkillName.Peacemaking);
                    }

                    if (targeted == from)
                    {
                        // Standard mode : reset combatants for everyone in the area
                        if (from.Player && !BaseInstrument.CheckMusicianship(from))
                        {
                            from.SendLocalizedMessage(500612); // You play poorly, and there is no effect.
                            m_Instrument.PlayInstrumentBadly(from);
                            m_Instrument.ConsumeUse(from);

                            from.NextSkillTime = Core.TickCount + (10000 - ((masteryBonus / 5) * 1000));
                        }
                        else if (!from.CheckSkill(SkillName.Peacemaking, 0.0, 120.0))
                        {
                            from.SendLocalizedMessage(500613); // You attempt to calm everyone, but fail.
                            m_Instrument.PlayInstrumentBadly(from);
                            m_Instrument.ConsumeUse(from);

                            from.NextSkillTime = Core.TickCount + (10000 - ((masteryBonus / 5) * 1000));
                        }
                        else
                        {
                            from.NextSkillTime = Core.TickCount + 5000;
                            m_Instrument.PlayInstrumentWell(from);
                            m_Instrument.ConsumeUse(from);

                            Map map = from.Map;

                            if (map != null)
                            {
                                int range = BaseInstrument.GetBardRange(from, SkillName.Peacemaking);

                                bool calmed             = false;
                                IPooledEnumerable eable = from.GetMobilesInRange(range);

                                foreach (Mobile m in eable)
                                {
                                    if ((m is BaseCreature && ((BaseCreature)m).Uncalmable) ||
                                        (m is BaseCreature && ((BaseCreature)m).AreaPeaceImmune) || m == from || !from.CanBeHarmful(m, false))
                                    {
                                        continue;
                                    }

                                    calmed = true;

                                    m.SendLocalizedMessage(500616); // You hear lovely music, and forget to continue battling!
                                    m.Combatant = null;
                                    m.Warmode   = false;

                                    if (m is BaseCreature && !((BaseCreature)m).BardPacified)
                                    {
                                        ((BaseCreature)m).Pacify(from, DateTime.UtcNow + TimeSpan.FromSeconds(1.0));
                                    }
                                }
                                eable.Free();

                                if (!calmed)
                                {
                                    from.SendLocalizedMessage(1049648); // You play hypnotic music, but there is nothing in range for you to calm.
                                }
                                else
                                {
                                    from.SendLocalizedMessage(500615); // You play your hypnotic music, stopping the battle.
                                }
                            }
                        }
                    }
                    else
                    {
                        // Target mode : pacify a single target for a longer duration
                        Mobile targ = (Mobile)targeted;

                        if (!from.CanBeHarmful(targ, false))
                        {
                            from.SendLocalizedMessage(1049528);
                            m_SetSkillTime = true;
                        }
                        else if (targ is BaseCreature && ((BaseCreature)targ).Uncalmable)
                        {
                            from.SendLocalizedMessage(1049526); // You have no chance of calming that creature.
                            m_SetSkillTime = true;
                        }
                        else if (targ is BaseCreature && ((BaseCreature)targ).BardPacified)
                        {
                            from.SendLocalizedMessage(1049527); // That creature is already being calmed.
                            m_SetSkillTime = true;
                        }
                        else if (from.Player && !BaseInstrument.CheckMusicianship(from))
                        {
                            from.SendLocalizedMessage(500612); // You play poorly, and there is no effect.
                            from.NextSkillTime = Core.TickCount + 5000;
                            m_Instrument.PlayInstrumentBadly(from);
                            m_Instrument.ConsumeUse(from);
                        }
                        else
                        {
                            double diff  = m_Instrument.GetDifficultyFor(targ) - 10.0;
                            double music = from.Skills[SkillName.Musicianship].Value;

                            if (music > 100.0)
                            {
                                diff -= (music - 100.0) * 0.5;
                            }

                            if (masteryBonus > 0)
                            {
                                diff -= (diff * ((double)masteryBonus / 100));
                            }

                            if (!from.CheckTargetSkill(SkillName.Peacemaking, targ, diff - 25.0, diff + 25.0))
                            {
                                from.SendLocalizedMessage(1049531); // You attempt to calm your target, but fail.
                                m_Instrument.PlayInstrumentBadly(from);
                                m_Instrument.ConsumeUse(from);

                                from.NextSkillTime = Core.TickCount + (10000 - ((masteryBonus / 5) * 1000));
                            }
                            else
                            {
                                m_Instrument.PlayInstrumentWell(from);
                                m_Instrument.ConsumeUse(from);

                                from.NextSkillTime = Core.TickCount + (5000 - ((masteryBonus / 5) * 1000));

                                if (targ is BaseCreature)
                                {
                                    BaseCreature bc = (BaseCreature)targ;

                                    from.SendLocalizedMessage(1049532); // You play hypnotic music, calming your target.

                                    targ.Combatant = null;
                                    targ.Warmode   = false;

                                    double seconds = 100 - (diff / 1.5);

                                    if (seconds > 120)
                                    {
                                        seconds = 120;
                                    }
                                    else if (seconds < 10)
                                    {
                                        seconds = 10;
                                    }

                                    bc.Pacify(from, DateTime.UtcNow + TimeSpan.FromSeconds(seconds));

                                    #region Bard Mastery Quest
                                    if (from is PlayerMobile)
                                    {
                                        BaseQuest quest = QuestHelper.GetQuest((PlayerMobile)from, typeof(TheBeaconOfHarmonyQuest));

                                        if (quest != null)
                                        {
                                            foreach (BaseObjective objective in quest.Objectives)
                                            {
                                                objective.Update(bc);
                                            }
                                        }
                                    }
                                    #endregion
                                }
                                else
                                {
                                    from.SendLocalizedMessage(1049532); // You play hypnotic music, calming your target.

                                    targ.SendLocalizedMessage(500616);  // You hear lovely music, and forget to continue battling!
                                    targ.Combatant = null;
                                    targ.Warmode   = false;
                                }
                            }
                        }
                    }
                }
            }
Ejemplo n.º 46
0
		public static bool Delayed( PlayerMobile player, BaseQuest quest, bool message )
		{
			List<QuestRestartInfo> doneQuests = player.DoneQuests;
																					
			for ( int i = doneQuests.Count - 1; i >= 0; i -- )
			{							
				QuestRestartInfo restartInfo = doneQuests[ i ];

				if ( restartInfo.QuestType == quest.GetType() )
				{
					if ( quest.DoneOnce )
					{
						if ( message && quest.StartingMobile != null )
							quest.StartingMobile.Say( 1075454 ); // I can not offer you the quest again.
					
						return false;
					}
						
					DateTime endTime = restartInfo.RestartTime;
					
					if ( DateTime.Now < endTime )
						return false;
					
					if ( quest.RestartDelay > TimeSpan.Zero )
						doneQuests.RemoveAt( i );
													
					return true;
				}	
			}
			
			return true;
		}
Ejemplo n.º 47
0
        public override bool SpecialHarvest(Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc)
        {
            if (from is PlayerMobile player)
            {
                QuestSystem qs = player.Quest;

                if (qs is CollectorQuest)
                {
                    QuestObjective obj = qs.FindObjective(typeof(FishPearlsObjective));

                    if (obj != null && !obj.Completed)
                    {
                        if (Utility.RandomDouble() < 0.5)
                        {
                            player.SendLocalizedMessage(1055086, "", 0x59); // You pull a shellfish out of the water, and find a rainbow pearl inside of it.

                            obj.CurProgress++;
                        }
                        else
                        {
                            player.SendLocalizedMessage(1055087, "", 0x2C); // You pull a shellfish out of the water, but it doesn't have a rainbow pearl.
                        }

                        return(true);
                    }
                }

                if (from.Region.IsPartOf("Underworld"))
                {
                    for (var index = 0; index < player.Quests.Count; index++)
                    {
                        BaseQuest quest = player.Quests[index];

                        if (quest is SomethingFishy && Utility.RandomDouble() < 0.1)
                        {
                            Item red = new RedHerring();
                            from.AddToBackpack(red);
                            player.SendLocalizedMessage(1095047, "", 0x23); // You pull a shellfish out of the water, but it doesn't have a rainbow pearl.
                            return(true);
                        }

                        if (quest is ScrapingtheBottom && Utility.RandomDouble() < 0.1)
                        {
                            Item mug = new MudPuppy();
                            from.AddToBackpack(mug);
                            player.SendLocalizedMessage(1095064, "", 0x23); // You pull a shellfish out of the water, but it doesn't have a rainbow pearl.
                            return(true);
                        }
                    }
                }

                #region High Seas Charydbis
                if (tool is FishingPole pole && CharydbisSpawner.SpawnInstance != null && CharydbisSpawner.SpawnInstance.IsSummoned)
                {
                    Item             oracle = from.Backpack.FindItemByType(typeof(OracleOfTheSea));
                    CharydbisSpawner sp     = CharydbisSpawner.SpawnInstance;

                    if (oracle != null && sp != null)
                    {
                        if (from.Map != sp.Map)
                        {
                            from.SendLocalizedMessage(1150861); //Charybdis have never been seen in these waters, try somewhere else.
                        }
                        else if (pole.BaitType == typeof(Charydbis) && from.Skills[SkillName.Fishing].Value >= 100)
                        {
                            if (sp.Charydbis == null && !sp.HasSpawned && sp.CurrentLocation.Contains(loc))
                            {
                                Multis.BaseBoat boat = Multis.BaseBoat.FindBoatAt(from, from.Map);
                                sp.SpawnCharydbis(from, loc, sp.Map, boat);
                                sp.HasSpawned = true;
                                pole.OnFishedHarvest(from, true);
                                return(true);
                            }

                            if (sp.LastLocation.Contains(loc))
                            {
                                from.SendLocalizedMessage(1150862); //The charybdis has moved on from this location, consult Oracle Of The Seas again.
                            }
                        }
                        else
                        {
                            from.SendLocalizedMessage(1150858); //You see a few bubbles, but no charybdis.
                        }
                    }
                }
                #endregion
            }

            return(false);
        }
	public QuestEventArgs( BaseQuest quest ) : base() {
		Quest = quest;
	}
Ejemplo n.º 49
0
		public static void CompleteQuest( PlayerMobile from, BaseQuest quest )
		{
			if ( quest == null )
				return;
				
			for ( int i = 0; i < quest.Objectives.Count; i ++ )
			{
				BaseObjective obj = quest.Objectives[ i ];
				
				obj.Complete();
			}
			
			from.SendLocalizedMessage( 1046258, null, 0x23 ); // Your quest is complete.							
			from.SendGump( new MondainQuestGump( quest, MondainQuestGump.Section.Complete, false, true ) );							
			from.PlaySound( quest.CompleteSound );
			
			quest.OnCompleted();
		}
Ejemplo n.º 50
0
 public BindingPole(BaseQuest quest) : base(5696)
 {
     m_Quest = quest;
     Movable = false;
 }
Ejemplo n.º 51
0
		public static Type FindFirstChainQuest( BaseQuest quest )
		{
			if ( quest == null )
				return null;
				
			Type[] quests = null;
		
			if ( quest.Quester is MondainQuester )
			{
				MondainQuester mQuester = (MondainQuester) quest.Quester;
				
				quests = mQuester.Quests;
			}
			else if ( quest.Quester is BaseQuestItem )
			{
				BaseQuestItem iQuester = (BaseQuestItem) quest.Quester;
				
				quests = iQuester.Quests;
			}
			
			if ( quests != null )
			{
				for ( int i = 0; i < quests.Length; i ++ )
				{
					BaseQuest fQuest = Construct( quests[ i ] ) as BaseQuest;
					
					if ( fQuest != null && fQuest.ChainID == quest.ChainID )
						return fQuest.GetType();
				}
			}
			
			return null;
		}
Ejemplo n.º 52
0
		public static bool TryDeleteItems( BaseQuest quest )
		{
			if ( quest == null )
				return false;
				
			for ( int i = 0; i < quest.Objectives.Count; i ++ )
			{
				if ( quest.Objectives[ i ] is ObtainObjective )
				{
					ObtainObjective obtain = (ObtainObjective) quest.Objectives[ i ];
					
					if ( obtain.MaxProgress > CountQuestItems( quest.Owner, obtain.Obtain ) )
						return false;
				}				
				else if ( quest.Objectives[ i ] is DeliverObjective )
				{
					DeliverObjective deliver = (DeliverObjective) quest.Objectives[ i ];
					
					if ( quest.StartingItem != null )
						continue;
					else if ( deliver.MaxProgress > CountQuestItems( quest.Owner, deliver.Delivery ) )
					{						
						quest.Owner.SendLocalizedMessage( 1074813 );  // You have failed to complete your delivery.
						deliver.Fail();
						
						return false;
					}			
				}				
			}
			
			DeleteItems( quest );
			
			return true;
		}		
Ejemplo n.º 53
0
            protected override void OnTarget(Mobile from, object target)
            {
                from.RevealingAction();
                from.NextSkillTime = Core.TickCount + 1000;

                if (!m_Instrument.IsChildOf(from.Backpack))
                {
                    from.SendLocalizedMessage(1062488);                     // The instrument you are trying to play is no longer in your backpack!
                }
                else if (target is Mobile)
                {
                    Mobile targ = (Mobile)target;

                    if (targ == from ||
                        (targ is BaseCreature && (((BaseCreature)targ).BardImmune || !from.CanBeHarmful(targ, false)) &&
                         ((BaseCreature)targ).ControlMaster != from))
                    {
                        from.SendLocalizedMessage(1049535);              // A song of discord would have no effect on that.
                    }
                    else if (m_Table.Contains(targ))                     //Already discorded
                    {
                        from.SendLocalizedMessage(1049537);              // Your target is already in discord.
                    }
                    else if (!targ.Player || (from is BaseCreature) && ((BaseCreature)from).CanDiscord)
                    {
                        double diff         = m_Instrument.GetDifficultyFor(targ) - 10.0;
                        double music        = from.Skills[SkillName.Musicianship].Value;
                        int    masteryBonus = 0;

                        diff += XmlMobFactions.GetScaledFaction(from, targ, -25, 25, -0.001);

                        if (music > 100.0)
                        {
                            diff -= (music - 100.0) * 0.5;
                        }

                        if (from is PlayerMobile)
                        {
                            masteryBonus = Spells.SkillMasteries.BardSpell.GetMasteryBonus((PlayerMobile)from, SkillName.Discordance);
                        }

                        if (masteryBonus > 0)
                        {
                            diff -= (diff * ((double)masteryBonus / 100));
                        }

                        if (!BaseInstrument.CheckMusicianship(from))
                        {
                            from.SendLocalizedMessage(500612);                             // You play poorly, and there is no effect.
                            m_Instrument.PlayInstrumentBadly(from);
                            m_Instrument.ConsumeUse(from);
                        }
                        else if (from.CheckTargetSkill(SkillName.Discordance, target, diff - 25.0, diff + 25.0))
                        {
                            from.SendLocalizedMessage(1049539);                             // You play the song surpressing your targets strength
                            m_Instrument.PlayInstrumentWell(from);
                            m_Instrument.ConsumeUse(from);

                            ArrayList mods = new ArrayList();
                            int       effect;
                            double    scalar;

                            if (Core.AOS)
                            {
                                double discord = from.Skills[SkillName.Discordance].Value;

                                if (discord > 100.0)
                                {
                                    effect = -20 + (int)((discord - 100.0) / -2.5);
                                }
                                else
                                {
                                    effect = (int)(discord / -5.0);
                                }

                                if (Core.SE && BaseInstrument.GetBaseDifficulty(targ) >= 160.0)
                                {
                                    effect /= 2;
                                }

                                scalar = effect * 0.01;

                                mods.Add(new ResistanceMod(ResistanceType.Physical, effect));
                                mods.Add(new ResistanceMod(ResistanceType.Fire, effect));
                                mods.Add(new ResistanceMod(ResistanceType.Cold, effect));
                                mods.Add(new ResistanceMod(ResistanceType.Poison, effect));
                                mods.Add(new ResistanceMod(ResistanceType.Energy, effect));

                                for (int i = 0; i < targ.Skills.Length; ++i)
                                {
                                    if (targ.Skills[i].Value > 0)
                                    {
                                        mods.Add(new DefaultSkillMod((SkillName)i, true, targ.Skills[i].Value * scalar));
                                    }
                                }
                            }
                            else
                            {
                                effect = (int)(from.Skills[SkillName.Discordance].Value / -5.0);
                                scalar = effect * 0.01;

                                mods.Add(new StatMod(StatType.Str, "DiscordanceStr", (int)(targ.RawStr * scalar), TimeSpan.Zero));
                                mods.Add(new StatMod(StatType.Int, "DiscordanceInt", (int)(targ.RawInt * scalar), TimeSpan.Zero));
                                mods.Add(new StatMod(StatType.Dex, "DiscordanceDex", (int)(targ.RawDex * scalar), TimeSpan.Zero));

                                for (int i = 0; i < targ.Skills.Length; ++i)
                                {
                                    if (targ.Skills[i].Value > 0)
                                    {
                                        mods.Add(new DefaultSkillMod((SkillName)i, true, targ.Skills[i].Value * scalar));
                                    }
                                }
                            }

                            DiscordanceInfo info = new DiscordanceInfo(from, targ, Math.Abs(effect), mods);
                            info.m_Timer = Timer.DelayCall(TimeSpan.Zero, TimeSpan.FromSeconds(1.25), ProcessDiscordance, info);

                            #region Bard Mastery Quest
                            if (from is PlayerMobile)
                            {
                                BaseQuest quest = QuestHelper.GetQuest((PlayerMobile)from, typeof(WieldingTheSonicBladeQuest));

                                if (quest != null)
                                {
                                    foreach (BaseObjective objective in quest.Objectives)
                                    {
                                        objective.Update(targ);
                                    }
                                }
                            }
                            #endregion

                            m_Table[targ] = info;
                        }
                        else
                        {
                            from.SendLocalizedMessage(1049540);                             // You fail to disrupt your target
                            m_Instrument.PlayInstrumentBadly(from);
                            m_Instrument.ConsumeUse(from);
                        }

                        from.NextSkillTime = Core.TickCount + 12000;
                    }
                    else
                    {
                        m_Instrument.PlayInstrumentBadly(from);
                    }
                }
                else
                {
                    from.SendLocalizedMessage(1049535);                     // A song of discord would have no effect on that.
                }
            }
Ejemplo n.º 54
0
		public BindingPole(BaseQuest quest) : base(5696)
		{
			m_Quest = quest;
			Movable = false;
		}
Ejemplo n.º 55
0
	public static void ActivateQuest( BaseQuest quest ) {
		Invoke( OnActivateQuest, new QuestEventArgs( quest ) );
	}
Ejemplo n.º 56
0
	public static void DeliverQuest( BaseQuest quest ) {
		Invoke( OnDeliverQuest, new QuestEventArgs( quest ) );
	}
Ejemplo n.º 57
0
            protected override void OnTarget(Mobile from, object target)
            {
                from.RevealingAction();
                from.NextSkillTime = Core.TickCount + 1000;

                if (!m_Instrument.IsChildOf(from.Backpack))
                {
                    from.SendLocalizedMessage(1062488);                     // The instrument you are trying to play is no longer in your backpack!
                }
                else if (target is Mobile)
                {
                    Mobile targ = (Mobile)target;

                    if (targ == from || !from.CanBeHarmful(targ, false) ||
                        (targ is BaseCreature && ((BaseCreature)targ).BardImmune && ((BaseCreature)targ).ControlMaster != from))
                    {
                        from.SendLocalizedMessage(1049535);                 // A song of discord would have no effect on that.
                    }
                    else if (m_Table.ContainsKey(targ))                     //Already discorded
                    {
                        from.SendLocalizedMessage(1049537);                 // Your target is already in discord.
                    }
                    else if (!targ.Player || (from is BaseCreature && ((BaseCreature)from).CanDiscord) || (targ.Player && from.Player && CanDiscordPVP(from)))
                    {
                        double diff  = m_Instrument.GetDifficultyFor(targ) - 10.0;
                        double music = from.Skills[SkillName.Musicianship].Value;

                        if (from is BaseCreature)
                        {
                            music = 120.0;
                        }

                        int masteryBonus = 0;

                        if (music > 100.0)
                        {
                            diff -= (music - 100.0) * 0.5;
                        }

                        if (from is PlayerMobile)
                        {
                            masteryBonus = Spells.SkillMasteries.BardSpell.GetMasteryBonus((PlayerMobile)from, SkillName.Discordance);
                        }

                        if (masteryBonus > 0)
                        {
                            diff -= (diff * ((double)masteryBonus / 100));
                        }

                        if (!BaseInstrument.CheckMusicianship(from))
                        {
                            from.SendLocalizedMessage(500612);                             // You play poorly, and there is no effect.
                            m_Instrument.PlayInstrumentBadly(from);
                            m_Instrument.ConsumeUse(from);
                        }
                        else if (from.CheckTargetSkill(SkillName.Discordance, target, diff - 25.0, diff + 25.0))
                        {
                            from.SendLocalizedMessage(1049539);                             // You play the song surpressing your targets strength

                            if (targ.Player)
                            {
                                targ.SendLocalizedMessage(1072061); // You hear jarring music, suppressing your strength.
                            }
                            m_Instrument.PlayInstrumentWell(from);
                            m_Instrument.ConsumeUse(from);

                            DiscordanceInfo info;

                            if (targ.Player && from.Player)
                            {
                                info = new DiscordanceInfo(from, targ, 0, null, true, from.Skills.CurrentMastery == SkillName.Discordance ? 6 : 4);
                                from.DoHarmful(targ);
                            }
                            else
                            {
                                ArrayList mods = new ArrayList();
                                int       effect;
                                double    scalar;

                                double discord = from.Skills[SkillName.Discordance].Value;

                                effect = (int)Math.Max(-28.0, (discord / -4.0));

                                if (BaseInstrument.GetBaseDifficulty(targ) >= 160.0)
                                {
                                    effect /= 2;
                                }

                                scalar = (double)effect / 100;

                                mods.Add(new ResistanceMod(ResistanceType.Physical, effect));
                                mods.Add(new ResistanceMod(ResistanceType.Fire, effect));
                                mods.Add(new ResistanceMod(ResistanceType.Cold, effect));
                                mods.Add(new ResistanceMod(ResistanceType.Poison, effect));
                                mods.Add(new ResistanceMod(ResistanceType.Energy, effect));

                                for (int i = 0; i < targ.Skills.Length; ++i)
                                {
                                    if (targ.Skills[i].Value > 0)
                                    {
                                        mods.Add(new DefaultSkillMod((SkillName)i, true, targ.Skills[i].Value * scalar));
                                    }
                                }

                                info = new DiscordanceInfo(from, targ, Math.Abs(effect), mods);

                                #region Bard Mastery Quest
                                if (from is PlayerMobile)
                                {
                                    BaseQuest quest = QuestHelper.GetQuest((PlayerMobile)from, typeof(WieldingTheSonicBladeQuest));

                                    if (quest != null)
                                    {
                                        foreach (BaseObjective objective in quest.Objectives)
                                        {
                                            objective.Update(targ);
                                        }
                                    }
                                }
                                #endregion
                            }

                            info.m_Timer = Timer.DelayCall(TimeSpan.Zero, TimeSpan.FromSeconds(1.25), ProcessDiscordance, info);

                            m_Table[targ]      = info;
                            from.NextSkillTime = Core.TickCount + (8000 - ((masteryBonus / 5) * 1000));
                        }
                        else
                        {
                            if (from is BaseCreature && PetTrainingHelper.Enabled)
                            {
                                from.CheckSkill(SkillName.Discordance, 0, from.Skills[SkillName.Discordance].Cap);
                            }

                            from.SendLocalizedMessage(1049540);                             // You attempt to disrupt your target, but fail.

                            if (targ.Player)
                            {
                                targ.SendLocalizedMessage(1072064); // You hear jarring music, but it fails to disrupt you.
                            }
                            m_Instrument.PlayInstrumentBadly(from);
                            m_Instrument.ConsumeUse(from);

                            from.NextSkillTime = Core.TickCount + 5000;
                        }
                    }
                    else
                    {
                        m_Instrument.PlayInstrumentBadly(from);
                    }
                }
                else
                {
                    from.SendLocalizedMessage(1049535);                     // A song of discord would have no effect on that.
                }
            }
Ejemplo n.º 58
0
		public static bool AnyRewards( BaseQuest quest )
		{
			for ( int i = 0; i < quest.Rewards.Count; i ++ )
			{
				BaseReward reward = quest.Rewards[ i ];
				
				if ( reward.Type != null )
					return true;
			}
			
			return false;
		}