Exemplo n.º 1
0
        /// <summary>Handles the quest giver query quest.</summary>
        public static void HandleQuestGiverQueryQuest(IRealmClient client, RealmPacketIn packet)
        {
            EntityId      guid            = packet.ReadEntityId();
            Character     activeCharacter = client.ActiveCharacter;
            uint          num             = packet.ReadUInt32();
            IQuestHolder  questGiver      = activeCharacter.QuestLog.GetQuestGiver(guid);
            QuestTemplate template        = QuestMgr.GetTemplate(num);

            if (questGiver == null || template == null)
            {
                return;
            }
            if (!activeCharacter.QuestLog.HasActiveQuest(num))
            {
                bool flag = template.Flags.HasFlag((Enum)QuestFlags.AutoAccept);
                QuestHandler.SendDetails((IEntity)questGiver, template, activeCharacter, !flag);
                if (!flag)
                {
                    return;
                }
                activeCharacter.QuestLog.TryAddQuest(template, questGiver);
            }
            else
            {
                QuestHandler.SendRequestItems(questGiver, template, activeCharacter, false);
            }
        }
Exemplo n.º 2
0
        public static void HandlePushQuestToParty(IRealmClient client, RealmPacketIn packet)
        {
            QuestTemplate qt = QuestMgr.GetTemplate(packet.ReadUInt32());

            if (qt == null || !qt.Sharable || client.ActiveCharacter.QuestLog.GetActiveQuest(qt.Id) == null)
            {
                return;
            }
            Group group = client.ActiveCharacter.Group;

            if (group == null)
            {
                return;
            }
            group.ForeachCharacter((Action <Character>)(chr =>
            {
                if (chr == null)
                {
                    return;
                }
                if (chr.QuestLog.ActiveQuestCount >= 25)
                {
                    QuestHandler.SendQuestPushResult(chr, QuestPushResponse.QuestlogFull, client.ActiveCharacter);
                }
                else if (chr.QuestLog.GetActiveQuest(qt.Id) != null)
                {
                    QuestHandler.SendQuestPushResult(chr, QuestPushResponse.AlreadyHave, client.ActiveCharacter);
                }
                else if (chr.QuestLog.FinishedQuests.Contains(qt.Id) && !qt.Repeatable)
                {
                    QuestHandler.SendQuestPushResult(chr, QuestPushResponse.AlreadyFinished, client.ActiveCharacter);
                }
                else if (qt.CheckBasicRequirements(chr) != QuestInvalidReason.Ok || !chr.IsAlive)
                {
                    QuestHandler.SendQuestPushResult(chr, QuestPushResponse.CannotTake, client.ActiveCharacter);
                }
                else if (!chr.IsInRadius((WorldObject)client.ActiveCharacter, 30f))
                {
                    QuestHandler.SendQuestPushResult(chr, QuestPushResponse.TooFar, client.ActiveCharacter);
                }
                else
                {
                    QuestHandler.SendQuestPushResult(chr, QuestPushResponse.Sharing, client.ActiveCharacter);
                    QuestHandler.SendDetails((IEntity)client.ActiveCharacter, qt, chr, true);
                }
            }));
        }