Пример #1
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                QuestInvalidReason reason = trigger.Text.NextEnum(QuestInvalidReason.Ok);
                Character          target = trigger.Args.Character.Target as Character;

                if (target != null)
                {
                    QuestHandler.SendQuestInvalid(target, reason);
                }
                trigger.Reply("Done.");
            }
Пример #2
0
        public Quest TryAddQuest(QuestTemplate template, IQuestHolder questGiver)
        {
            var slot = m_Owner.QuestLog.FindFreeSlot();

            if (slot == INVALID_SLOT)
            {
                QuestHandler.SendQuestLogFull(m_Owner);
            }
            else
            {
                var err = template.CheckBasicRequirements(m_Owner);
                if (err != QuestInvalidReason.Ok)
                {
                    QuestHandler.SendQuestInvalid(m_Owner, err);
                }
                else if (m_Owner.QuestLog.GetActiveQuest(template.Id) != null)
                {
                    QuestHandler.SendQuestInvalid(m_Owner, QuestInvalidReason.AlreadyHave);
                }
                else if (!template.Repeatable && m_Owner.QuestLog.FinishedQuests.Contains(template.Id))
                {
                    QuestHandler.SendQuestInvalid(m_Owner, QuestInvalidReason.AlreadyCompleted);
                }
                else if (!questGiver.CanGiveQuestTo(m_Owner))
                {
                    // cheat protection
                    QuestHandler.SendQuestInvalid(m_Owner, QuestInvalidReason.Tired);
                }
                else
                {
                    var quest = m_Owner.QuestLog.AddQuest(template, slot);
                    if (quest.Template.Flags.HasFlag(QuestFlags.Escort))
                    {
                        AutoComplete(quest, m_Owner);
                    }
                    return(quest);
                }
            }
            return(null);
        }
Пример #3
0
        public Quest TryAddQuest(QuestTemplate template, IQuestHolder questGiver)
        {
            int freeSlot = m_Owner.QuestLog.FindFreeSlot();

            if (freeSlot == -1)
            {
                QuestHandler.SendQuestLogFull(m_Owner);
            }
            else
            {
                QuestInvalidReason reason = template.CheckBasicRequirements(m_Owner);
                if (reason != QuestInvalidReason.Ok)
                {
                    QuestHandler.SendQuestInvalid(m_Owner, reason);
                }
                else if (m_Owner.QuestLog.GetActiveQuest(template.Id) != null)
                {
                    QuestHandler.SendQuestInvalid(m_Owner, QuestInvalidReason.AlreadyHave);
                }
                else if (!template.Repeatable && m_Owner.QuestLog.FinishedQuests.Contains(template.Id))
                {
                    QuestHandler.SendQuestInvalid(m_Owner, QuestInvalidReason.AlreadyCompleted);
                }
                else if (!questGiver.CanGiveQuestTo(m_Owner))
                {
                    QuestHandler.SendQuestInvalid(m_Owner, QuestInvalidReason.Tired);
                }
                else
                {
                    Quest quest = m_Owner.QuestLog.AddQuest(template, freeSlot);
                    if (quest.Template.Flags.HasFlag(QuestFlags.Escort))
                    {
                        AutoComplete(quest, m_Owner);
                    }
                    return(quest);
                }
            }

            return(null);
        }
Пример #4
0
        public Quest AddQuest(Quest quest)
        {
            var qt = quest.Template;

            if (!quest.IsSaved)
            {
                if (!qt.GiveInitialItems(m_Owner))
                {
                    // could not add all required items
                    QuestHandler.SendQuestInvalid(m_Owner, QuestInvalidReason.NoRequiredItems);
                    return(null);
                }
            }

            if ((qt.TimeLimit > 0) && m_timedQuest == null)
            {
                m_timedQuest = quest;
                //m_questTimer = new SimpleTimer(qt.TimeLimit);
            }
            Owner.SetQuestId((byte)quest.Slot, quest.Template.Id);
            m_ActiveQuests[quest.Slot] = quest;
            m_activeQuestCount++;

            if (qt.HasGOEvent)
            {
                m_RequireGOsQuests.Add(quest);
            }
            if (qt.HasNPCInteractionEvent)
            {
                m_NPCInteractionQuests.Add(quest);
            }
            if (qt.RequiresSpellCasts)
            {
                m_RequireSpellCastsQuests.Add(quest);
            }

            if (quest.CollectedItems != null)
            {
                m_RequireItemsQuests.Add(quest);
                for (var i = 0; i < quest.Template.CollectableItems.Length; i++)
                {
                    var item = quest.Template.CollectableItems[i];
                    if (item.ItemId != ItemId.None)
                    {
                        // find items that are already there
                        quest.CollectedItems[i] = m_Owner.Inventory.GetAmount(item.ItemId);
                    }
                }
            }

            if (quest.CollectedSourceItems != null)
            {
                if (!m_RequireItemsQuests.Contains(quest))
                {
                    m_RequireItemsQuests.Add(quest);
                }
                for (var i = 0; i < quest.Template.CollectableSourceItems.Length; i++)
                {
                    var item = quest.Template.CollectableSourceItems[i];
                    if (item.ItemId != ItemId.None)
                    {
                        // find items that are already there
                        quest.CollectedSourceItems[i] = m_Owner.Inventory.GetAmount(item.ItemId);
                    }
                }
            }

            quest.UpdateStatus();

            qt.NotifyStarted(quest);
            return(quest);
        }