Esempio n. 1
0
        public static void HandleQuestPushResult(IRealmClient client, RealmPacketIn packet)
        {
            EntityId  id    = packet.ReadEntityId();
            byte      num   = packet.ReadByte();
            Character giver = client.ActiveCharacter.Map.GetObject(id) as Character;

            if (giver == null || client.ActiveCharacter.Group == null || client.ActiveCharacter.Group != giver.Group)
            {
                return;
            }
            QuestHandler.SendQuestPushResult(client.ActiveCharacter, (QuestPushResponse)num, giver);
        }
Esempio 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);
                }
            }));
        }