public MLQuestInstance( MLQuest quest, IQuestGiver quester, PlayerMobile player ) { m_Quest = quest; m_Quester = quester; m_QuesterType = ( quester == null ) ? null : quester.GetType(); m_Player = player; m_Accepted = DateTime.UtcNow; m_Flags = MLQuestInstanceFlags.None; m_ObjectiveInstances = new BaseObjectiveInstance[quest.Objectives.Count]; BaseObjectiveInstance obj; bool timed = false; for ( int i = 0; i < quest.Objectives.Count; ++i ) { m_ObjectiveInstances[i] = obj = quest.Objectives[i].CreateInstance( this ); if ( obj.IsTimed ) timed = true; } Register(); if ( timed ) m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 5 ), TimeSpan.FromSeconds( 5 ), Slice ); }
public MLQuestInstance(MLQuest quest, IQuestGiver quester, PlayerMobile player) { Quest = quest; m_Quester = quester; QuesterType = quester?.GetType(); Player = player; Accepted = DateTime.UtcNow; m_Flags = MLQuestInstanceFlags.None; Objectives = new BaseObjectiveInstance[quest.Objectives.Count]; BaseObjectiveInstance obj; var timed = false; for (var i = 0; i < quest.Objectives.Count; ++i) { Objectives[i] = obj = quest.Objectives[i].CreateInstance(this); if (obj.IsTimed) { timed = true; } } Register(); if (timed) { m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5), Slice); } }
private static bool FindQuest( IQuestGiver quester, PlayerMobile pm, MLQuestContext context, out MLQuest quest, out MLQuestInstance entry ) { quest = null; entry = null; var quests = quester.MLQuests; var questerType = quester.GetType(); // 1. Check quests in progress with this NPC (overriding deliveries is intended) if (context != null) { foreach (var questEntry in quests) { var instance = context.FindInstance(questEntry); if (instance != null && (instance.Quester == quester || !questEntry.IsEscort && instance.QuesterType == questerType)) { entry = instance; quest = questEntry; return(true); } } } // 2. Check deliveries (overriding chain offers is intended) if ((entry = HandleDelivery(pm, quester, questerType)) != null) { quest = entry.Quest; return(true); } // 3. Check chain quest offers if (context != null) { foreach (var questEntry in quests) { if (questEntry.IsChainTriggered && context.ChainOffers.Contains(questEntry)) { quest = questEntry; return(true); } } } // 4. Random quest quest = RandomStarterQuest(quester, pm, context); return(quest != null); }
private static bool FindQuest( IQuestGiver quester, PlayerMobile pm, MLQuestContext context, out MLQuest quest, out MLQuestInstance entry ) { quest = null; entry = null; List<MLQuest> quests = quester.MLQuests; Type questerType = quester.GetType(); // 1. Check quests in progress with this NPC (overriding deliveries is intended) if ( context != null ) { foreach ( MLQuest questEntry in quests ) { MLQuestInstance instance = context.FindInstance( questEntry ); if ( instance != null && ( instance.Quester == quester || ( !questEntry.IsEscort && instance.QuesterType == questerType ) ) ) { entry = instance; quest = questEntry; return true; } } } // 2. Check deliveries (overriding chain offers is intended) if ( ( entry = HandleDelivery( pm, quester, questerType ) ) != null ) { quest = entry.Quest; return true; } // 3. Check chain quest offers if ( context != null ) { foreach ( MLQuest questEntry in quests ) { if ( questEntry.IsChainTriggered && context.ChainOffers.Contains( questEntry ) ) { quest = questEntry; return true; } } } // 4. Random quest quest = RandomStarterQuest( quester, pm, context ); return ( quest != null ); }