Пример #1
0
        public static void CheckQuestCreatureKill(this Player p, ulong guid)
        {
            foreach (Quest quest in p.Quests.Values)
            {
                QuestTemplate template = Database.QuestTemplates.TryGet(quest.QuestId);
                Creature      creature = Database.Creatures.TryGet(guid);

                if (template == null || creature == null || quest.Status == QuestStatuses.QUEST_STATUS_COMPLETE)
                {
                    continue;
                }

                for (int i = 0; i < 4; i++)
                {
                    if (template.ReqCreatureOrGOId[i] <= 0 || template.ReqSpell[i] != 0)
                    {
                        continue;
                    }

                    uint reqkill = (uint)template.ReqCreatureOrGOId[i];
                    if (reqkill == creature.Entry)
                    {
                        uint curcount = quest.ReqCreatureGo.ContainsKey(reqkill) ? quest.ReqCreatureGo[reqkill] : 0;
                        uint reqcount = template.ReqCreatureOrGOCount[i];
                        if (curcount < reqcount)
                        {
                            p.Quests[quest.QuestId].AddCreatureGO(creature.Entry, 1);

                            //Quest update
                            PacketWriter response = new PacketWriter(Opcodes.SMSG_QUESTUPDATE_ADD_KILL);
                            response.WriteUInt32(quest.QuestId);
                            response.WriteUInt32(creature.Entry);
                            response.WriteUInt32(curcount + 1);
                            response.WriteUInt32(reqcount);
                            response.WriteUInt64(guid);
                            p.Client.Send(response);
                        }

                        if (p.CanCompleteQuest(quest.QuestId))
                        {
                            p.Quests[quest.QuestId].Status = QuestStatuses.QUEST_STATUS_COMPLETE;
                            p.UpdateSurroundingQuestStatus();
                        }
                    }
                }
            }
        }
Пример #2
0
        public static void CheckQuestItemAdded(this Player p, uint entry, uint count)
        {
            foreach (Quest quest in p.Quests.Values)
            {
                QuestTemplate template = Database.QuestTemplates.TryGet(quest.QuestId);
                if (template == null || quest.Status == QuestStatuses.QUEST_STATUS_COMPLETE)
                {
                    continue;
                }

                for (int i = 0; i < 4; i++)
                {
                    if (template.ReqItemId[i] == 0)
                    {
                        continue;
                    }

                    uint reqitem = template.ReqItemId[i];

                    if (reqitem == entry)
                    {
                        uint curcount = (uint)(quest.ReqItems.ContainsKey(reqitem) ? quest.ReqItems[reqitem] : 0);
                        uint reqcount = template.ReqItemCount[i];
                        if (curcount < reqcount)
                        {
                            p.Quests[quest.QuestId].AddItem(entry, count);

                            //Quest update
                            PacketWriter response = new PacketWriter(Opcodes.SMSG_QUESTUPDATE_ADD_ITEM);
                            response.WriteUInt32(entry);
                            response.WriteUInt32(count);
                            p.Client.Send(response);
                        }

                        if (p.CanCompleteQuest(quest.QuestId))
                        {
                            p.Quests[quest.QuestId].Status = QuestStatuses.QUEST_STATUS_COMPLETE;
                            p.UpdateSurroundingQuestStatus();
                        }
                    }
                }
            }
        }
Пример #3
0
        public static void SendQuestGiverRequestItems(this Player p, QuestTemplate quest, QuestStatuses status, ulong guid, bool CloseOnCancel)
        {
            bool completeable = p.CanCompleteQuest(quest.QuestId);

            if (!quest.IsAutoComplete && status != QuestStatuses.QUEST_STATUS_COMPLETE) //Check if it is complete
            {
                completeable = false;
            }

            if (p.Quests.ContainsKey(quest.QuestId))
            {
                if (p.Quests[quest.QuestId]?.Rewarded == true)
                {
                    completeable = false;
                }
            }

            PacketWriter packet = new PacketWriter(Opcodes.SMSG_QUESTGIVER_REQUEST_ITEMS);

            packet.WriteUInt64(guid);
            packet.WriteUInt32(quest.QuestId);
            packet.WriteString(quest.Title);
            packet.WriteString(quest.RequestItemsText);
            packet.WriteUInt32(0);
            packet.WriteUInt32(0);
            packet.WriteUInt32(CloseOnCancel ? (uint)1 : 0);
            packet.WriteUInt32(quest.RewOrReqMoney < 0 ? (uint)-quest.RewOrReqMoney : 0);

            packet.WriteUInt32((uint)quest.GetReqItemCount);
            for (int i = 0; i < 4; i++)
            {
                packet.WriteUInt32(quest.ReqItemId[i]);
                packet.WriteUInt32(quest.ReqItemCount[i]);
                packet.WriteUInt32(Database.ItemTemplates.TryGet(quest.ReqItemId[i])?.DisplayID ?? 0);
            }

            packet.WriteUInt32(2);
            packet.WriteUInt32(completeable ? (uint)3 : 0);
            packet.WriteUInt32(4);
            packet.WriteUInt32(8);
            packet.WriteUInt32(0x10);
            p.Client.Send(packet);
        }
Пример #4
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                var target = trigger.Args.Target;

                if (!(target is Character))
                {
                    trigger.Reply("Invalid target: {0} - Character-target required.", target);
                }
                else
                {
                    var chr = (Character)target;
                    var id  = trigger.Text.NextUInt(0);

                    QuestTemplate templ = null;
                    if (id > 0)
                    {
                        templ = QuestMgr.GetTemplate(id);
                    }

                    if (templ == null)
                    {
                        trigger.Reply("Invalid QuestId: {0}", id);
                    }
                    else
                    {
                        if (!chr.QuestLog.RemoveFinishedQuest(id))
                        {
                            // if its not already been finished, maybe it's still in progress?
                            chr.QuestLog.Cancel(id);
                        }

                        var quest = chr.QuestLog.AddQuest(templ);
                        if (quest == null)
                        {
                            trigger.Reply("Could not add Quest: " + templ);
                        }
                        else
                        {
                            trigger.Reply("Quest added: " + templ);
                        }
                    }
                }
            }
Пример #5
0
        public bool CheckQuestConstraints(Character looter)
        {
            if (!this.HasQuestRequirements)
            {
                return(true);
            }
            if (looter == null ||
                this.QuestHolderInfo != null &&
                this.QuestHolderInfo.QuestStarts.Any <QuestTemplate>(
                    (Func <QuestTemplate, bool>)(quest => looter.QuestLog.HasActiveQuest(quest))) ||
                this.CollectQuests == null)
            {
                return(false);
            }
            for (int index1 = 0; index1 < this.CollectQuests.Length; ++index1)
            {
                QuestTemplate collectQuest = this.CollectQuests[index1];
                if (collectQuest != null && looter.QuestLog.HasActiveQuest(collectQuest.Id))
                {
                    for (int index2 = 0; index2 < collectQuest.CollectableItems.Length; ++index2)
                    {
                        if (collectQuest.CollectableItems[index2].ItemId == this.ItemId &&
                            collectQuest.CollectableItems[index2].Amount >
                            looter.QuestLog.GetActiveQuest(collectQuest.Id).CollectedItems[index2])
                        {
                            return(true);
                        }
                    }

                    for (int index2 = 0; index2 < collectQuest.CollectableSourceItems.Length; ++index2)
                    {
                        if (collectQuest.CollectableSourceItems[index2].ItemId == this.ItemId &&
                            collectQuest.CollectableSourceItems[index2].Amount > looter.QuestLog
                            .GetActiveQuest(collectQuest.Id).CollectedSourceItems[index2])
                        {
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
Пример #6
0
        public static void HandleQuestgiverCompleteQuest(ref PacketReader packet, ref WorldManager manager)
        {
            ulong guid    = packet.ReadUInt64();
            uint  questid = packet.ReadUInt32();

            if (Database.QuestTemplates.ContainsKey(questid))
            {
                QuestTemplate quest = Database.QuestTemplates.TryGet(questid);
                if (manager.Character.Quests.ContainsKey(questid))
                {
                    Quest pQuest = manager.Character.Quests[questid];
                    manager.Character.SendQuestGiverRequestItems(quest, pQuest.Status, guid, false);
                }
                else
                {
                    manager.Character.SendQuestGiverQuestDetails(quest, guid, true);
                }
            }
        }
Пример #7
0
        /// <summary>
        /// Sends the quest giver quest complete.
        /// </summary>
        /// <param name="qt">The quest id.</param>
        /// <param name="chr">The client.</param>
        public static void SendComplete(QuestTemplate qt, Character chr)
        {
            using (var pckt = new RealmPacketOut(RealmServerOpCode.SMSG_QUESTGIVER_QUEST_COMPLETE))
            {
                pckt.Write(qt.Id);


                if (chr.Level >= RealmServerConfiguration.MaxCharacterLevel)
                {
                    pckt.Write(0u);
                    pckt.Write(qt.MoneyAtMaxLevel);
                }
                else
                {
                    pckt.Write(qt.CalcRewardXp(chr));
                    pckt.Write(qt.RewMoney);
                }
                pckt.Write(qt.CalcRewardHonor(chr));
                pckt.Write(qt.RewardTalents);
                pckt.Write(0);                                                                  // since 3.3: Arena reward

                chr.Client.Send(pckt);

                /*if (chr.Level >= LevelMgr.MaxCharacterLevel)
                 * {
                 *      pckt.Write(qt.MoneyAtMaxLevel);
                 * }
                 * else
                 * {
                 *      pckt.Write(qt.RewMoney);
                 * }
                 * pckt.Write((uint)0); // unknown value
                 *
                 * pckt.Write(qt.RewardItems.Length);
                 *
                 * foreach (var reward in qt.RewardItems)
                 * {
                 *      pckt.Write(reward.ItemId);
                 *      pckt.Write(reward.Amount);
                 * }*/
            }
        }
Пример #8
0
        public static void CheckQuestItemRemove(this Player p, uint entry, uint count)
        {
            foreach (Quest quest in p.Quests.Values)
            {
                QuestTemplate template = Database.QuestTemplates.TryGet(quest.QuestId);
                if (template == null || quest.Status == QuestStatuses.QUEST_STATUS_COMPLETE)
                {
                    continue;
                }

                for (int i = 0; i < 4; i++)
                {
                    if (template.ReqItemId[i] == 0)
                    {
                        continue;
                    }

                    uint reqitem = template.ReqItemId[i];

                    if (reqitem == entry)
                    {
                        uint curcount = (uint)(quest.ReqItems.ContainsKey(reqitem) ? quest.ReqItems[reqitem] : 0);
                        uint reqcount = template.ReqItemCount[i];
                        if (curcount < reqcount)
                        {
                            if (p.Quests[quest.QuestId].ReqItems.ContainsKey(entry))
                            {
                                p.Quests[quest.QuestId].ReqItems[entry] -= (count > curcount ? 0 : count);
                            }

                            if (p.Quests[quest.QuestId].Status == QuestStatuses.QUEST_STATUS_COMPLETE)
                            {
                                p.Quests[quest.QuestId].Status = QuestStatuses.QUEST_STATUS_INCOMPLETE;
                            }
                        }

                        return;
                    }
                }
            }
        }
Пример #9
0
        public static bool CheckIsRequiredQuestItem(this Player p, uint entry)
        {
            foreach (Quest quest in p.Quests.Values)
            {
                QuestTemplate template = Database.QuestTemplates.TryGet(quest.QuestId);
                if (template == null || quest.Status == QuestStatuses.QUEST_STATUS_COMPLETE)
                {
                    continue;
                }

                for (int i = 0; i < 4; i++)
                {
                    if (template.ReqItemId[i] == entry)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Пример #10
0
        /// <summary>Sends the quest giver quest complete.</summary>
        /// <param name="qt">The quest id.</param>
        /// <param name="chr">The client.</param>
        public static void SendComplete(QuestTemplate qt, Character chr)
        {
            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUESTGIVER_QUEST_COMPLETE))
            {
                packet.Write(qt.Id);
                if (chr.Level >= RealmServerConfiguration.MaxCharacterLevel)
                {
                    packet.Write(0U);
                    packet.Write(qt.MoneyAtMaxLevel);
                }
                else
                {
                    packet.Write(qt.CalcRewardXp(chr));
                    packet.Write(qt.RewMoney);
                }

                packet.Write(qt.CalcRewardHonor(chr));
                packet.Write(qt.RewardTalents);
                packet.Write(0);
                chr.Client.Send(packet, false);
            }
        }
Пример #11
0
        public static void BuildQuestUpdate(this Player p, ref UpdateClass uc)
        {
            int i = 0;

            foreach (Quest quest in p.Quests.Values)
            {
                if (quest.Status == QuestStatuses.QUEST_STATUS_COMPLETE && quest.Rewarded)
                {
                    continue;
                }

                QuestTemplate template = Database.QuestTemplates.TryGet(quest.QuestId);

                uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, quest.QuestId, i * 6);
                uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, 0, (i * 6) + 1);
                uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, 0, (i * 6) + 2);
                uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, quest.GetProgress(), (i * 6) + 3);
                uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, 0, (i * 6) + 4); //m_questFailureTime
                uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, 0, (i * 6) + 5); //m_qtyMonsterToKill
                i++;
            }
        }
Пример #12
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                Unit target = trigger.Args.Target;

                if (!(target is Character))
                {
                    trigger.Reply("Invalid target: {0} - Character-target required.", (object)target);
                }
                else
                {
                    Character     character = (Character)target;
                    uint          id        = trigger.Text.NextUInt(0U);
                    QuestTemplate qt        = null;
                    if (id > 0U)
                    {
                        qt = QuestMgr.GetTemplate(id);
                    }
                    if (qt == null)
                    {
                        trigger.Reply("Invalid QuestId: {0}", (object)id);
                    }
                    else
                    {
                        if (!character.QuestLog.RemoveFinishedQuest(id))
                        {
                            character.QuestLog.Cancel(id);
                        }
                        if (character.QuestLog.AddQuest(qt) == null)
                        {
                            trigger.Reply("Could not add Quest: " + qt);
                        }
                        else
                        {
                            trigger.Reply("Quest added: " + qt);
                        }
                    }
                }
            }
Пример #13
0
        public static void SendQuestGiverOfferReward(this Player p, QuestTemplate quest, ulong guid, bool enablenext)
        {
            PacketWriter packet = new PacketWriter(Opcodes.SMSG_QUESTGIVER_OFFER_REWARD);

            packet.WriteUInt64(guid);
            packet.WriteUInt32(quest.QuestId);
            packet.WriteString(quest.Title);
            packet.WriteString(quest.OfferRewardText);
            packet.WriteUInt32(enablenext ? (uint)0x1 : 0x0);

            packet.WriteUInt32(0); //Emote count
            for (int i = 0; i < 4; i++)
            {
                packet.WriteUInt32(0);
                packet.WriteUInt32(0);
            }

            packet.WriteUInt32(quest.GetRewChoiceItemCount);
            for (int i = 0; i < quest.GetRewChoiceItemCount; i++)
            {
                packet.WriteUInt32(quest.RewChoiceItemId[i]);
                packet.WriteUInt32(quest.RewChoiceItemCount[i]);
                packet.WriteUInt32(Database.ItemTemplates.TryGet(quest.RewChoiceItemId[i])?.DisplayID ?? 0);
            }

            packet.WriteUInt32((uint)quest.GetReqItemCount);
            for (int i = 0; i < 4; i++)
            {
                packet.WriteUInt32(quest.ReqItemId[i]);
                packet.WriteUInt32(quest.ReqItemCount[i]);
                packet.WriteUInt32(Database.ItemTemplates.TryGet(quest.ReqItemId[i])?.DisplayID ?? 0);
            }

            packet.WriteUInt32(quest.RewOrReqMoney < 0 ? (uint)-quest.RewOrReqMoney : 0);
            packet.WriteUInt32(quest.RewSpell);
            packet.WriteUInt32(quest.RewSpellCast);
            p.Client.Send(packet);
        }
Пример #14
0
        public static void HandleQuestgiverQueryQuestOpcode(ref PacketReader packet, ref WorldManager manager)
        {
            ulong guid    = packet.ReadUInt64();
            uint  questid = packet.ReadUInt32();

            QuestTemplate quest = Database.QuestTemplates.TryGet(questid);

            WorldObject obj = null; //TODO add gameobject check

            obj = Database.Creatures.TryGet <WorldObject>(guid) ??
                  Database.Items.TryGet <WorldObject>(guid);                     //Try to find the object

            if (obj == null || quest == null || obj?.HasQuest(questid) == false) //Check the quest/giver exists
            {
                return;
            }
            if (obj.IsTypeOf(ObjectTypes.TYPE_UNIT) && (((Creature)obj).IsEnemyTo(manager.Character)))
            {
                return;
            }

            manager.Character.SendQuestGiverQuestDetails(quest, guid, true);
        }
Пример #15
0
 /// <summary>
 /// 임무 추가
 /// </summary>
 /// <param name="data"></param>
 public void Add(QuestTemplate data)
 {
     Dispatcher.Invoke(() =>
     {
         if (data.id >= 300)
         {
             this.researchList.Add(data);
             this.ResearchCount.Text = this.researchList.Count().ToString();
         }
         else if (data.id >= 200)
         {
             this.weeklyList.Add(data);
             this.WeeklyCount.Text = this.weeklyList.Count().ToString();
         }
         else if (data.id >= 100)
         {
             this.questList.Add(data);
             this.QuestCount.Text = this.questList.Count().ToString();
         }
         Sort();
         CheckAll();
     });
 }
    public void FullQuestCompleted(GameObject UniqueObject, bool failed = false)
    {
        int temp_loc = 0;

        foreach (GameObject iter in ActiveQuests)
        {
            if (iter == UniqueObject)
            {
                QuestTemplate QuestiterScript = UniqueObject.GetComponent <QuestTemplate>();
                CompletedQuests.Add(iter);
                ActiveQuests.Remove(iter);
                QuestiterScript.questCategory = QuestCategory.Completed;

                if (FocusedQuestReference == UniqueObject)
                {
                    FocusedQuestReference = null;
                    QHud.DisableDisplay();
                }

                if (failed)
                {
                    tempEvent.Setup(EventTypeEnum.QuestFailed, QuestiterScript.QuestName);
                    eventQueue.AddEvent(tempEvent);
                }
                else
                {
                    playerStats.AddEXP(QuestiterScript.xp_reward);
                    tempEvent.Setup(EventTypeEnum.QuestCompleted, QuestiterScript.QuestName);
                    eventQueue.AddEvent(tempEvent);
                }

                break;
            }
            temp_loc += 1;
        }
    }
Пример #17
0
        public static void HandleQuestQueryResponse(Packet packet)
        {
            var id = packet.ReadEntry("Quest ID"); // +4

            if (id.Value)                          // entry is masked
            {
                return;
            }
            //sub_6B9CD3 quest failed 0x0B70

            //sub_6B575B -> 0x0F59
            bool questIsntAutoComplete = packet.ReadBit("Quest Isn't AutoComplete"); // +20

            if (questIsntAutoComplete)
            {
                var questTurnTextWindowLen  = packet.ReadBits(10); // +2113
                var questTitleLen           = packet.ReadBits(9);  // +30
                var questCompletedTextLen   = packet.ReadBits(11); // +2433
                var questDetailsLen         = packet.ReadBits(12); // +908
                var questTurnTargetNameLen  = packet.ReadBits(8);  // +2369
                var questGiverTargetNameLen = packet.ReadBits(8);  // +2049
                var questGiverTextWindowLen = packet.ReadBits(10); // +1793
                var questEndTextLen         = packet.ReadBits(9);  // +1658
                var questObjectivesCount    = packet.ReadBits("Objectives Count", 19);
                var questObjectivesLen      = packet.ReadBits(12); // +158

                uint[,] objectivesCounts = new uint[questObjectivesCount, 2];

                for (var i = 0; i < questObjectivesCount; ++i)
                {
                    objectivesCounts[i, 1] = packet.ReadBits(8);  // +2949 + 20 objectives texts
                    objectivesCounts[i, 0] = packet.ReadBits(22); // +2949 + 0 objectives visuals
                }

                packet.ResetBitReader();

                for (var i = 0; i < questObjectivesCount; ++i)
                {
                    packet.ReadUInt32("Requirement Count ", i);                                   // +2949 + 12
                    packet.ReadUInt32("Objective ID", i);                                         // +2949 + 0
                    packet.ReadWoWString("Objective Text", objectivesCounts[i, 1], i);            // +2949 + 20
                    packet.ReadUInt32("Unk2 UInt32", i);                                          // +2949 + 16
                    packet.ReadByte("Objective", i);                                              // +2949 + 5
                    var reqType = packet.ReadByteE <QuestRequirementType>("Requirement Type", i); // +2949 + 4

                    // +2949 + 8
                    switch (reqType)
                    {
                    case QuestRequirementType.CreatureKill:
                    case QuestRequirementType.CreatureInteract:
                    case QuestRequirementType.PetBattleDefeatCreature:
                        packet.ReadInt32 <UnitId>("Required Creature ID", i);
                        break;

                    case QuestRequirementType.Item:
                        packet.ReadInt32 <ItemId>("Required Item ID", i);
                        break;

                    case QuestRequirementType.GameObject:
                        packet.ReadInt32 <GOId>("Required GameObject ID", i);
                        break;

                    case QuestRequirementType.Currency:
                        packet.ReadUInt32("Required Currency ID", i);
                        break;

                    case QuestRequirementType.Spell:
                        packet.ReadInt32 <SpellId>("Required Spell ID", i);
                        break;

                    case QuestRequirementType.FactionRepHigher:
                    case QuestRequirementType.FactionRepLower:
                        packet.ReadUInt32("Required Faction ID", i);
                        break;

                    case QuestRequirementType.PetBattleDefeatSpecies:
                        packet.ReadUInt32("Required Species ID", i);
                        break;

                    default:
                        packet.ReadInt32("Required ID", i);
                        break;
                    }

                    for (var j = 0; j < objectivesCounts[i, 0]; j++)
                    {
                        packet.ReadUInt32("Objective Visual ID", i, j);
                    }
                }

                packet.ReadUInt32("Required Source Item ID 1"); // +2960
                packet.ReadUInt32("Reward Choice ItemID 2");    // +2980
                packet.ReadUInt32("Reward ItemID 3");           // +2955
                packet.ReadUInt32("Reward ItemID Count2");      // +2957
                packet.ReadUInt32("int2973");                   // +2975

                QuestTemplate quest = new QuestTemplate
                {
                    QuestType = QuestType.Normal
                };

                quest.RewardCurrencyID    = new uint?[4];
                quest.RewardCurrencyCount = new uint?[4];
                for (int i = 0; i < 4; ++i)
                {
                    quest.RewardCurrencyID[i]    = packet.ReadUInt32("Reward Currency ID", i);    // +3001 + 16
                    quest.RewardCurrencyCount[i] = packet.ReadUInt32("Reward Currency Count", i); // +3001 + 0
                }

                packet.ReadUInt32("CharTittleID");                     // +1787
                packet.ReadSingle("Point Y");                          // +28
                quest.SoundTurnIn = packet.ReadUInt32("Sound TurnIn"); // +2947

                const int repCount = 5;
                quest.RewardFactionID       = new uint?[repCount];
                quest.RewardFactionValue    = new int?[repCount];
                quest.RewardFactionOverride = new int?[repCount];

                for (var i = 0; i < repCount; i++)
                {
                    quest.RewardFactionValue[i]    = packet.ReadInt32("Reward Reputation ID", i);                // +2986 + 20
                    quest.RewardFactionOverride[i] = (int)packet.ReadUInt32("Reward Reputation ID Override", i); // +2986 + 0
                    quest.RewardFactionID[i]       = packet.ReadUInt32("Reward Faction ID", i);                  // +2986 + 400
                }

                quest.RewardMoney = packet.ReadInt32("Reward Money");                                               // +16
                packet.ReadUInt32("EmoteOnComplete");                                                               // +2981
                packet.ReadUInt32("Reward Choice ItemID Count5");                                                   // +2972
                packet.ReadUInt32("MinimapTargetMask");                                                             // +25
                quest.AreaDescription = packet.ReadWoWString("QuestEndText", questEndTextLen);                      // +1658
                packet.ReadUInt32("Reward Choice ItemID 2");                                                        // +2971
                quest.RewardBonusMoney = packet.ReadUInt32("Reward Money Max Level");                               // +18
                packet.ReadUInt32("Reward Item1 ID");                                                               // +2952
                quest.QuestCompletionLog = packet.ReadWoWString("QuestCompletedText", questCompletedTextLen);       // +2433
                packet.ReadInt32("Reward Choice ItemID 4");                                                         // +2977
                packet.ReadUInt32("RewardHonorAddition");                                                           // +21
                quest.QuestGiverTextWindow = packet.ReadWoWString("QuestGiverTextWindow", questGiverTextWindowLen); // +1793
                quest.LogDescription       = packet.ReadWoWString("QuestObjectives", questObjectivesLen);           // +158
                packet.ReadUInt32("RewArenaPoints");                                                                // +1790
                packet.ReadUInt32("Reward Choice ItemID 6");                                                        // +2983
                quest.SuggestedGroupNum = packet.ReadUInt32("Suggested Players");                                   // +13
                packet.ReadUInt32("RepObjectiveFaction");                                                           // +6
                packet.ReadUInt32("Required Source Item ID 2");                                                     // +2961
                packet.ReadUInt32("Reward ItemID 2");                                                               // +2953
                packet.ReadUInt32("MinLevel");                                                                      // +10
                packet.ReadUInt32("Reward Choice ItemID Count3");                                                   // +2945
                packet.ReadUInt32("PointOpt");                                                                      // +29

                // +8
                quest.QuestLevel = packet.ReadInt32("Level");                                                       // +8

                packet.ReadUInt32("RepObjectiveFaction2");                                                          // +7
                packet.ReadUInt32("Required Source Item ID Count 3");                                               // +2966
                packet.ReadUInt32("XPId");                                                                          // +17
                quest.QuestDescription = packet.ReadWoWString("QuestDetails", questDetailsLen);                     // +908
                packet.ReadUInt32("Reward ItemID Count1");                                                          // +2956
                packet.ReadUInt32("Reward Choice ItemID Count6");                                                   // +2984
                packet.ReadUInt32("Reward ItemID Count3");                                                          // +2958
                packet.ReadUInt32("RewardSpellCasted");                                                             // +20
                packet.ReadUInt32("dword2E80");                                                                     // +2976
                quest.QuestTurnTargetName = packet.ReadWoWString("QuestTurnTargetName", questTurnTargetNameLen);    // +2369
                packet.ReadUInt32("dword2E74");                                                                     // +2973
                packet.ReadUInt32("Required Source Item ID Count 2");                                               // +2965
                packet.ReadUInt32("Required Source Item ID 3");                                                     // +2962
                packet.ReadUInt32("RewSkillPoints");                                                                // +1792
                quest.LogTitle    = packet.ReadWoWString("QuestTitle", questTitleLen);                              // +30
                quest.QuestInfoID = packet.ReadInt32E <QuestInfo>("Type");                                          // +12
                packet.ReadUInt32("RepObjectiveValue2");                                                            // +15
                packet.ReadUInt32("unk11");                                                                         // +2982
                packet.ReadUInt32("PlayersSlain");                                                                  // +1788
                packet.ReadUInt32("PointMapId");                                                                    // +26
                packet.ReadUInt32("NextQuestInChain");                                                              // +14
                packet.ReadUInt32("Reward Choice ItemID 1");                                                        // +2968
                quest.QuestGiverTargetName = packet.ReadWoWString("QuestGiverTargetName", questGiverTargetNameLen); // +2049
                packet.ReadUInt32("dword2E8C");                                                                     // +2979
                packet.ReadUInt32("Required Source Item ID 4");                                                     // +2963
                packet.ReadSingle("Point X");                                                                       // +27
                packet.ReadUInt32("Reward Choice ItemID 3");                                                        // +2974
                packet.ReadUInt32("unk");                                                                           // +2970
                packet.ReadUInt32("Reward ItemID Count4");                                                          // +2959
                quest.SoundAccept = packet.ReadUInt32("Sound Accept");                                              // +2946
                packet.ReadUInt32("Reward ItemID 3");                                                               // +2954
                packet.ReadSingle("RewardHonorMultiplier");                                                         // +22
                packet.ReadUInt32("RequiredSpellID");                                                               // +1786
                packet.ReadWoWString("QuestTurnTextWindow", questTurnTextWindowLen);                                // +2113
                packet.ReadUInt32("Reward Choice ItemID Count4");                                                   // +2978
                packet.ReadUInt32("Required Source Item ID Count 1");                                               // +2964
                quest.QuestSortID = packet.ReadInt32E <QuestSort>("Sort");                                          // +11
                packet.ReadUInt32("BonusTalents");                                                                  // +1789
                packet.ReadUInt32("Reward Choice ItemID Count1");                                                   // +2969
                packet.ReadUInt32("Rewarded Spell");                                                                // +19
                packet.ReadUInt32("RewSkillID");                                                                    // +1791
                packet.ReadUInt32("unk9");                                                                          // +2985
                packet.ReadUInt32("unk10");                                                                         // +2967
                quest.Flags = packet.ReadUInt32E <QuestFlags>("Flags");                                             // +24
                packet.ReadUInt32("Suggested Players");                                                             // +9
                packet.ReadUInt32("SourceItemID");                                                                  // +23

                packet.AddSniffData(StoreNameType.Quest, id.Key, "QUERY_RESPONSE");

                Storage.QuestTemplates.Add(quest, packet.TimeSpan);
            }
        }
Пример #18
0
 public Quest(QuestTemplate template)
 {
     TemplateId = template.Id;
     Template   = template;
     Objectives = new int[5];
 }
Пример #19
0
        public static void HandleQuestQueryResponse(Packet packet)
        {
            var hasData = packet.ReadBit();

            if (!hasData)
            {
                packet.ReadUInt32("Entry");
                return; // nothing to do
            }

            var quest = new QuestTemplate();

            var bits907 = packet.ReadBits(12);
            var count   = packet.ReadBits(19);

            var len2949_20 = new uint[count];
            var counter    = new uint[count];

            for (var i = 0; i < count; ++i)
            {
                len2949_20[i] = packet.ReadBits(8);
                counter[i]    = packet.ReadBits(22);
            }

            var bits2432 = packet.ReadBits(11);
            var bits2048 = packet.ReadBits(8);
            var bits2112 = packet.ReadBits(10);
            var bits157  = packet.ReadBits(12);
            var bits1657 = packet.ReadBits(9);
            var bits2368 = packet.ReadBits(8);
            var bits1792 = packet.ReadBits(10);
            var bits29   = packet.ReadBits(9);

            packet.ReadInt32("Int2E34");
            packet.ReadInt32("Int4C");
            packet.ReadSingle("Float54");

            for (var i = 0; i < count; ++i)
            {
                packet.ReadInt32("Int2E10", i);
                packet.ReadInt32("IntED", i);
                packet.ReadInt32("IntED", i);
                packet.ReadInt32("IntEA", i);
                packet.ReadWoWString("StringEA", len2949_20[i], i);
                packet.ReadByte("ByteED", i);
                packet.ReadByte("ByteEA", i);

                for (var j = 0; j < counter[i]; ++j)
                {
                    packet.ReadInt32("Int118", i, j);
                }
            }

            packet.ReadInt32("Int58");
            packet.ReadInt32("Int2E54");
            packet.ReadSingle("Float6C");
            packet.ReadWoWString("String2500", bits2368);
            packet.ReadInt32("Int34");
            packet.ReadWoWString("String19E4", bits1657);
            packet.ReadInt32("Int2E74");

            for (var i = 0; i < 4; ++i)
            {
                packet.ReadInt32("int3001+16", i);
                packet.ReadInt32("int3001+0", i);
            }

            packet.ReadInt32("Int1C");
            packet.ReadSingle("Float68");
            packet.ReadInt32("Int2E28");

            for (var i = 0; i < 5; ++i)
            {
                packet.ReadInt32("int2986+40", i);
                packet.ReadInt32("int2986+0", i);
                packet.ReadInt32("int2986+20", i);
            }

            packet.ReadInt32("Int1BE8");
            packet.ReadInt32("Int2E7C");
            packet.ReadInt32("Int1BF8");
            packet.ReadInt32("Int1BFC");
            packet.ReadInt32("Int2E90");
            packet.ReadInt32("Int2E48");
            packet.ReadWoWString("String74", bits29);
            packet.ReadInt32("Int2E2C");
            packet.ReadInt32("Int2E50");
            packet.ReadInt32("Int2E64");
            packet.ReadInt32("Int1BEC");
            packet.ReadInt32("Int60");
            packet.ReadInt32("Int2E88");
            packet.ReadInt32("Int2E94");
            packet.ReadInt32("Int2E6C");
            packet.ReadInt32("Int14");
            packet.ReadInt32("Int2E20");
            packet.ReadInt32("Int2E30");
            packet.ReadInt32("Int2E24");
            packet.ReadInt32("Int1BF0");
            packet.ReadInt32("Int2E4C");
            packet.ReadInt32("Int2E68");
            packet.ReadInt32("Int20");
            packet.ReadInt32("Int1BF4");
            packet.ReadWoWString("String2100", bits2112);
            packet.ReadInt32("Int2E08");
            packet.ReadInt32("Int38");
            packet.ReadInt32("Int5C");
            packet.ReadWoWString("String2600", bits2432);
            packet.ReadInt32("Int24");
            packet.ReadInt32("Int2E58");
            packet.ReadInt32("Int30");
            packet.ReadInt32("Int64");
            packet.ReadInt32("Int44");
            packet.ReadInt32("Int2E00");
            packet.ReadInt32("Int2E44");
            packet.ReadInt32("Int2EA0");
            packet.ReadInt32("Int28");
            packet.ReadInt32("Int2E1C");
            packet.ReadInt32("Int40");
            packet.ReadWoWString("StringE2C", bits907);
            packet.ReadInt32("Int2E60");
            packet.ReadWoWString("String2000", bits2048);
            packet.ReadInt32("Int2E70");
            packet.ReadInt32("Int2E5C");
            packet.ReadInt32("Int18");
            packet.ReadInt32("Int50");
            packet.ReadInt32("Int1BE4");
            packet.ReadWoWString("String1C00", bits1792);
            packet.ReadInt32("Int3C");
            packet.ReadInt32("Int2C");
            packet.ReadWoWString("String274", bits157);
            packet.ReadInt32("Int48");
            packet.ReadInt32("Int2E80");
            packet.ReadInt32("Int2E40");
            packet.ReadInt32("Int2E9C");
            packet.ReadInt32("Int2E84");
            packet.ReadInt32("Int2E38");
            packet.ReadInt32("Int2E04");
            packet.ReadInt32("Int2E98");
            packet.ReadInt32("Int2E3C");
            packet.ReadInt32("Int2E78");
            packet.ReadInt32("Int70");
            packet.ReadInt32("Int2E8C");

            var id = packet.ReadInt32("Int2F00");

            //packet.AddSniffData(StoreNameType.Quest, id.Key, "QUERY_RESPONSE");
            //Storage.QuestTemplates.Add((uint)id.Key, quest, packet.TimeSpan);
        }
Пример #20
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                Unit target = trigger.Args.Target;

                if (target == null)
                {
                    trigger.Reply("No target given.");
                }
                else
                {
                    QuestTemplate template = GetTemplate(trigger);
                    if (template == null)
                    {
                        return;
                    }
                    List <IQuestHolderEntry> starters = template.Starters;
                    if (starters.Count == 0)
                    {
                        trigger.Reply("Quest {0} has no Starters.", (object)template);
                    }
                    else
                    {
                        trigger.Reply("Found {0} Starters: " + starters.ToString(", "),
                                      (object)starters.Count);
                        int index1;
                        if (trigger.Text.HasNext)
                        {
                            index1 = trigger.Text.NextInt(-1);
                            if (index1 < 0 || index1 >= starters.Count)
                            {
                                trigger.Reply("Invalid starter-index.");
                                return;
                            }
                        }
                        else
                        {
                            index1 = 0;
                        }

                        IQuestHolderEntry questHolderEntry = starters[index1];
                        IWorldLocation[]  inWorldTemplates = questHolderEntry.GetInWorldTemplates();
                        if (inWorldTemplates == null)
                        {
                            trigger.Reply("Quest starters are not accessible.");
                        }
                        else
                        {
                            trigger.Reply(
                                "Found {0} templates: " + inWorldTemplates
                                .ToString(", "), (object)inWorldTemplates.Length);
                            int index2;
                            if (trigger.Text.HasNext)
                            {
                                index2 = trigger.Text.NextInt(-1);
                                if (index2 < 0 || index2 >= inWorldTemplates.Length)
                                {
                                    trigger.Reply("Invalid template-index.");
                                    return;
                                }
                            }
                            else
                            {
                                index2 = 0;
                            }

                            IWorldLocation location = inWorldTemplates[index2];
                            if (target.TeleportTo(location))
                            {
                                if (inWorldTemplates.Length <= 1 && starters.Count <= 1)
                                {
                                    return;
                                }
                                trigger.Reply("Going to {0} ({1})", (object)questHolderEntry, (object)location);
                            }
                            else
                            {
                                trigger.Reply("Template is located in {0} ({1}) and not accessible.",
                                              (object)location.MapId, (object)location.Position);
                            }
                        }
                    }
                }
            }
Пример #21
0
        public static bool CanCompleteQuest(this Player p, uint questid)
        {
            QuestTemplate template = Database.QuestTemplates.TryGet(questid);

            if (template == null || !p.Quests.ContainsKey(questid))
            {
                return(false);
            }

            Quest quest = p.Quests[questid];

            if (template.IsAutoComplete)
            {
                return(true);
            }

            //Item check
            for (int i = 0; i < 4; i++)
            {
                uint reqcount = template.ReqItemCount[i];
                uint reqitem  = template.ReqItemId[i];

                if (reqitem == 0 || reqcount == 0)
                {
                    continue;
                }

                if (!quest.ReqItems.ContainsKey(reqitem))
                {
                    return(false);
                }
                if (quest.ReqItems[reqitem] < reqcount)
                {
                    return(false);
                }
            }

            //GO check
            for (int i = 0; i < 4; i++)
            {
                uint reqcount = template.ReqCreatureOrGOCount[i];
                uint reqobj   = (uint)template.ReqCreatureOrGOId[i];

                if (reqcount == 0 || reqobj == 0)
                {
                    continue;
                }

                if (!quest.ReqCreatureGo.ContainsKey(reqobj))
                {
                    return(false);
                }
                if (quest.ReqCreatureGo[reqobj] < reqcount)
                {
                    return(false);
                }
            }

            //Money check
            if (template.RewOrReqMoney < 0 && p.Money < (template.RewOrReqMoney * -1))
            {
                return(false);
            }

            return(true);
        }
Пример #22
0
 /// <summary>Sends SMSG_QUESTGIVER_REQUEST_ITEMS</summary>
 /// <param name="qg">The qg.</param>
 /// <param name="qt">The qt.</param>
 /// <param name="chr">The client.</param>
 public static void SendRequestItems(IQuestHolder qg, QuestTemplate qt, Character chr, bool closeOnCancel)
 {
 }
Пример #23
0
        public static void HandleQuestQueryResponse(Packet packet)
        {
            packet.ReadInt32("Entry");

            Bit hasData = packet.ReadBit("Has Data");

            if (!hasData)
            {
                return; // nothing to do
            }
            var id = packet.ReadEntry("Quest ID");

            QuestTemplate quest = new QuestTemplate
            {
                ID = (uint)id.Key
            };

            quest.QuestType          = packet.ReadInt32E <QuestType>("QuestType");
            quest.QuestLevel         = packet.ReadInt32("QuestLevel");
            quest.QuestPackageID     = packet.ReadUInt32("QuestPackageID");
            quest.MinLevel           = packet.ReadInt32("QuestMinLevel");
            quest.QuestSortID        = (QuestSort)packet.ReadUInt32("QuestSortID");
            quest.QuestInfoID        = packet.ReadInt32E <QuestInfo>("QuestInfoID");
            quest.SuggestedGroupNum  = packet.ReadUInt32("SuggestedGroupNum");
            quest.RewardNextQuest    = packet.ReadUInt32("RewardNextQuest");
            quest.RewardXPDifficulty = packet.ReadUInt32("RewardXPDifficulty");

            quest.RewardXPMultiplier = packet.ReadSingle("RewardXPMultiplier");

            quest.RewardMoney           = packet.ReadInt32("RewardMoney");
            quest.RewardMoneyDifficulty = packet.ReadUInt32("RewardMoneyDifficulty");

            quest.RewardMoneyMultiplier = packet.ReadSingle("RewardMoneyMultiplier");

            quest.RewardBonusMoney   = packet.ReadUInt32("RewardBonusMoney");
            quest.RewardDisplaySpell = packet.ReadUInt32("RewardDisplaySpell");
            quest.RewardSpellWod     = packet.ReadUInt32("RewardSpell");
            quest.RewardHonorWod     = packet.ReadUInt32("RewardHonor");

            quest.RewardKillHonor = packet.ReadSingle("RewardKillHonor");

            quest.StartItem = packet.ReadUInt32("StartItem");
            quest.Flags     = packet.ReadUInt32E <QuestFlags>("Flags");
            quest.FlagsEx   = packet.ReadUInt32E <QuestFlags2>("FlagsEx");

            quest.RewardItem       = new uint?[4];
            quest.RewardAmount     = new uint?[4];
            quest.ItemDrop         = new uint?[4];
            quest.ItemDropQuantity = new uint?[4];
            for (int i = 0; i < 4; ++i)
            {
                quest.RewardItem[i]       = packet.ReadUInt32("RewardItems", i);
                quest.RewardAmount[i]     = packet.ReadUInt32("RewardAmount", i);
                quest.ItemDrop[i]         = packet.ReadUInt32("ItemDrop", i);
                quest.ItemDropQuantity[i] = packet.ReadUInt32("ItemDropQuantity", i);
            }

            quest.RewardChoiceItemID        = new uint?[6];
            quest.RewardChoiceItemQuantity  = new uint?[6];
            quest.RewardChoiceItemDisplayID = new uint?[6];
            for (int i = 0; i < 6; ++i) // CliQuestInfoChoiceItem
            {
                quest.RewardChoiceItemID[i]        = packet.ReadUInt32("RewardChoiceItemID", i);
                quest.RewardChoiceItemQuantity[i]  = packet.ReadUInt32("RewardChoiceItemQuantity", i);
                quest.RewardChoiceItemDisplayID[i] = packet.ReadUInt32("RewardChoiceItemDisplayID", i);
            }

            quest.POIContinent = packet.ReadUInt32("POIContinent");

            quest.POIx = packet.ReadSingle("POIx");
            quest.POIy = packet.ReadSingle("POIy");

            quest.POIPriorityWod      = packet.ReadInt32("POIPriority");
            quest.RewardTitle         = packet.ReadUInt32("RewardTitle");
            quest.RewardTalents       = packet.ReadUInt32("RewardTalents");
            quest.RewardArenaPoints   = packet.ReadUInt32("RewardArenaPoints");
            quest.RewardSkillLineID   = packet.ReadUInt32("RewardSkillLineID");
            quest.RewardNumSkillUps   = packet.ReadUInt32("RewardNumSkillUps");
            quest.QuestGiverPortrait  = packet.ReadUInt32("PortraitGiver");
            quest.QuestTurnInPortrait = packet.ReadUInt32("PortraitTurnIn");

            quest.RewardFactionID       = new uint?[5];
            quest.RewardFactionValue    = new int?[5];
            quest.RewardFactionOverride = new int?[5];
            for (int i = 0; i < 5; ++i)
            {
                quest.RewardFactionID[i]       = packet.ReadUInt32("RewardFactionID", i);
                quest.RewardFactionValue[i]    = packet.ReadInt32("RewardFactionValue", i);
                quest.RewardFactionOverride[i] = packet.ReadInt32("RewardFactionOverride", i);
            }

            quest.RewardFactionFlags = packet.ReadUInt32("RewardFactionFlags");

            quest.RewardCurrencyID    = new uint?[4];
            quest.RewardCurrencyCount = new uint?[4];
            for (int i = 0; i < 4; ++i)
            {
                quest.RewardCurrencyID[i]    = packet.ReadUInt32("RewardCurrencyID");
                quest.RewardCurrencyCount[i] = packet.ReadUInt32("RewardCurrencyQty");
            }

            quest.SoundAccept = packet.ReadUInt32("AcceptedSoundKitID");
            quest.SoundTurnIn = packet.ReadUInt32("CompleteSoundKitID");
            quest.AreaGroupID = packet.ReadUInt32("AreaGroupID");
            quest.TimeAllowed = packet.ReadUInt32("TimeAllowed");
            uint int2946 = packet.ReadUInt32("CliQuestInfoObjective");

            quest.AllowableRacesWod = packet.ReadInt32("AllowableRaces");

            for (int i = 0; i < int2946; ++i)
            {
                var objectiveId = packet.ReadEntry("Id", i);

                QuestObjective questInfoObjective = new QuestObjective
                {
                    ID      = (uint)objectiveId.Key,
                    QuestID = (uint)id.Key
                };
                questInfoObjective.Type         = packet.ReadByteE <QuestRequirementType>("Quest Requirement Type", i);
                questInfoObjective.StorageIndex = packet.ReadSByte("StorageIndex", i);
                questInfoObjective.ObjectID     = packet.ReadInt32("ObjectID", i);
                questInfoObjective.Amount       = packet.ReadInt32("Amount", i);
                questInfoObjective.Flags        = packet.ReadUInt32("Flags", i);
                questInfoObjective.UnkFloat     = packet.ReadSingle("Float5", i);

                int int280 = packet.ReadInt32("VisualEffects", i);
                for (int j = 0; j < int280; ++j)
                {
                    QuestVisualEffect questVisualEffect = new QuestVisualEffect
                    {
                        ID           = questInfoObjective.ID,
                        Index        = (uint)j,
                        VisualEffect = packet.ReadInt32("VisualEffectId", i, j)
                    };

                    Storage.QuestVisualEffects.Add(questVisualEffect, packet.TimeSpan);
                }

                packet.ResetBitReader();

                uint bits6 = packet.ReadBits(8);
                questInfoObjective.Description = packet.ReadWoWString("Description", bits6, i);

                if (BinaryPacketReader.GetLocale() != LocaleConstant.enUS && questInfoObjective.Description != string.Empty)
                {
                    QuestObjectivesLocale localesQuestObjectives = new QuestObjectivesLocale
                    {
                        ID           = (uint)objectiveId.Key,
                        QuestId      = (uint)id.Key,
                        StorageIndex = questInfoObjective.StorageIndex,
                        Description  = questInfoObjective.Description
                    };

                    Storage.LocalesQuestObjectives.Add(localesQuestObjectives, packet.TimeSpan);
                }

                Storage.QuestObjectives.Add(questInfoObjective, packet.TimeSpan);
            }

            packet.ResetBitReader();

            uint bits26   = packet.ReadBits(9);
            uint bits154  = packet.ReadBits(12);
            uint bits904  = packet.ReadBits(12);
            uint bits1654 = packet.ReadBits(9);
            uint bits1789 = packet.ReadBits(10);
            uint bits2045 = packet.ReadBits(8);
            uint bits2109 = packet.ReadBits(10);
            uint bits2365 = packet.ReadBits(8);
            uint bits2429 = packet.ReadBits(11);

            quest.LogTitle             = packet.ReadWoWString("LogTitle", bits26);
            quest.LogDescription       = packet.ReadWoWString("LogDescription", bits154);
            quest.QuestDescription     = packet.ReadWoWString("QuestDescription", bits904);
            quest.AreaDescription      = packet.ReadWoWString("AreaDescription", bits1654);
            quest.QuestGiverTextWindow = packet.ReadWoWString("PortraitGiverText", bits1789);
            quest.QuestGiverTargetName = packet.ReadWoWString("PortraitGiverName", bits2045);
            quest.QuestTurnTextWindow  = packet.ReadWoWString("PortraitTurnInText", bits2109);
            quest.QuestTurnTargetName  = packet.ReadWoWString("PortraitTurnInName", bits2365);
            quest.QuestCompletionLog   = packet.ReadWoWString("QuestCompletionLog", bits2429);

            if (BinaryPacketReader.GetLocale() != LocaleConstant.enUS)
            {
                LocalesQuest localesQuest = new LocalesQuest
                {
                    ID                 = (uint)id.Key,
                    Locale             = BinaryPacketReader.GetClientLocale(),
                    LogTitle           = quest.LogTitle,
                    LogDescription     = quest.LogDescription,
                    QuestDescription   = quest.QuestDescription,
                    AreaDescription    = quest.AreaDescription,
                    PortraitGiverText  = quest.QuestGiverTextWindow,
                    PortraitGiverName  = quest.QuestGiverTargetName,
                    PortraitTurnInText = quest.QuestTurnTextWindow,
                    PortraitTurnInName = quest.QuestTurnTargetName,
                    QuestCompletionLog = quest.QuestCompletionLog
                };

                Storage.LocalesQuests.Add(localesQuest, packet.TimeSpan);
            }

            Storage.QuestTemplates.Add(quest, packet.TimeSpan);
        }
Пример #24
0
        /// <summary>
        /// Offers the reward of the given Quest to the given Character.
        /// When replying the Quest will be complete.
        /// </summary>
        /// <param name="questGiver">The qg.</param>
        /// <param name="qt">The quest id.</param>
        /// <param name="chr">The client.</param>
        public static void SendQuestGiverOfferReward(IEntity questGiver, QuestTemplate qt, Character chr)
        {
            ClientLocale locale = chr.Locale;

            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUESTGIVER_OFFER_REWARD))
            {
                packet.Write(questGiver.EntityId);
                packet.WriteUInt(qt.Id);
                packet.WriteCString(qt.Titles.Localize(locale));
                packet.WriteCString(qt.OfferRewardTexts.Localize(locale));
                packet.WriteByte(qt.FollowupQuestId > 0U ? (byte)1 : (byte)0);
                packet.WriteUInt((uint)qt.Flags);
                packet.WriteUInt(qt.SuggestedPlayers);
                packet.Write(qt.OfferRewardEmotes.Length);
                for (uint index = 0; (long)index < (long)qt.OfferRewardEmotes.Length; ++index)
                {
                    packet.Write(qt.OfferRewardEmotes[index].Delay);
                    packet.Write((uint)qt.OfferRewardEmotes[index].Type);
                }

                packet.Write(qt.RewardChoiceItems.Length);
                for (int index = 0; index < qt.RewardChoiceItems.Length; ++index)
                {
                    packet.Write((uint)qt.RewardChoiceItems[index].ItemId);
                    packet.Write(qt.RewardChoiceItems[index].Amount);
                    ItemTemplate template = qt.RewardChoiceItems[index].Template;
                    if (template != null)
                    {
                        packet.Write(template.DisplayId);
                    }
                    else
                    {
                        packet.Write(0);
                    }
                }

                packet.Write(qt.RewardItems.Length);
                for (int index = 0; index < qt.RewardItems.Length; ++index)
                {
                    packet.Write((uint)qt.RewardItems[index].ItemId);
                    packet.Write(qt.RewardItems[index].Amount);
                    ItemTemplate template = qt.RewardItems[index].Template;
                    if (template != null)
                    {
                        packet.WriteUInt(template.DisplayId);
                    }
                    else
                    {
                        packet.Write(0);
                    }
                }

                if (chr.Level >= RealmServerConfiguration.MaxCharacterLevel)
                {
                    packet.Write(qt.MoneyAtMaxLevel);
                }
                else
                {
                    packet.Write(qt.RewMoney);
                }
                packet.Write(qt.CalcRewardXp(chr));
                packet.Write(qt.CalcRewardHonor(chr));
                packet.Write(qt.RewHonorMultiplier);
                packet.Write(8U);
                packet.Write((uint)qt.RewSpell);
                packet.Write((uint)qt.CastSpell);
                packet.Write((uint)qt.RewardTitleId);
                packet.Write(qt.RewardTalents);
                packet.Write(0);
                packet.Write(0);
                for (uint index = 0; index < 5U; ++index)
                {
                    packet.Write((uint)qt.RewardReputations[index].Faction);
                }
                for (uint index = 0; index < 5U; ++index)
                {
                    packet.Write(qt.RewardReputations[index].ValueId);
                }
                for (uint index = 0; index < 5U; ++index)
                {
                    packet.Write(qt.RewardReputations[index].Value);
                }
                chr.Client.Send(packet, false);
            }
        }
Пример #25
0
        /// <summary>Sends the quest giver quest detail.</summary>
        /// <param name="questGiver">The qg.</param>
        /// <param name="qt">The quest id.</param>
        /// <param name="chr">The client.</param>
        /// <param name="acceptable">if set to <c>true</c> [acceptable].</param>
        public static void SendDetails(IEntity questGiver, QuestTemplate qt, Character chr, bool acceptable)
        {
            ClientLocale locale = chr.Locale;

            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUESTGIVER_QUEST_DETAILS))
            {
                packet.Write(questGiver != null ? questGiver.EntityId : EntityId.Zero);
                packet.Write(EntityId.Zero);
                packet.Write(qt.Id);
                packet.WriteCString(qt.Titles.Localize(locale));
                packet.WriteCString(qt.Details.Localize(locale));
                packet.WriteCString(qt.Instructions.Localize(locale));
                packet.Write(acceptable ? (byte)1 : (byte)0);
                packet.WriteUInt((uint)qt.Flags);
                packet.WriteUInt(qt.SuggestedPlayers);
                packet.Write((byte)0);
                if (qt.Flags.HasFlag(QuestFlags.HiddenRewards))
                {
                    packet.WriteUInt(0U);
                    packet.WriteUInt(0U);
                    packet.WriteUInt(0U);
                    packet.WriteUInt(0U);
                }
                else
                {
                    packet.Write(qt.RewardChoiceItems.Length);
                    for (uint index = 0; (long)index < (long)qt.RewardChoiceItems.Length; ++index)
                    {
                        packet.Write((uint)qt.RewardChoiceItems[index].ItemId);
                        packet.Write(qt.RewardChoiceItems[index].Amount);
                        ItemTemplate template = qt.RewardChoiceItems[index].Template;
                        if (template != null)
                        {
                            packet.Write(template.DisplayId);
                        }
                        else
                        {
                            packet.Write(0);
                        }
                    }

                    packet.Write(qt.RewardItems.Length);
                    for (uint index = 0; (long)index < (long)qt.RewardItems.Length; ++index)
                    {
                        packet.Write((uint)qt.RewardItems[index].ItemId);
                        packet.Write(qt.RewardItems[index].Amount);
                        ItemTemplate template = qt.RewardItems[index].Template;
                        if (template != null)
                        {
                            packet.Write(template.DisplayId);
                        }
                        else
                        {
                            packet.Write(0);
                        }
                    }

                    if (chr.Level >= RealmServerConfiguration.MaxCharacterLevel)
                    {
                        packet.Write(qt.MoneyAtMaxLevel);
                    }
                    else
                    {
                        packet.Write(qt.RewMoney);
                    }
                    packet.Write(qt.CalcRewardXp(chr));
                }

                packet.Write(qt.RewHonorAddition);
                packet.Write(qt.RewHonorMultiplier);
                packet.Write((uint)qt.RewSpell);
                packet.Write((uint)qt.CastSpell);
                packet.Write((uint)qt.RewardTitleId);
                packet.Write(qt.RewardTalents);
                packet.Write(0);
                packet.Write(0);
                for (uint index = 0; index < 5U; ++index)
                {
                    packet.Write((uint)qt.RewardReputations[index].Faction);
                }
                for (uint index = 0; index < 5U; ++index)
                {
                    packet.Write(qt.RewardReputations[index].ValueId);
                }
                for (uint index = 0; index < 5U; ++index)
                {
                    packet.Write(qt.RewardReputations[index].Value);
                }
                packet.Write(4);
                for (int index = 0; index < 4; ++index)
                {
                    EmoteTemplate questDetailedEmote = qt.QuestDetailedEmotes[index];
                    packet.Write((int)questDetailedEmote.Type);
                    packet.Write(questDetailedEmote.Delay);
                }

                chr.Client.Send(packet, false);
            }
        }
Пример #26
0
        /// <summary>Sends the quest query response.</summary>
        /// <param name="qt">The quest id.</param>
        /// <param name="chr">The client.</param>
        public static void SendQuestQueryResponse(QuestTemplate qt, Character chr)
        {
            ClientLocale locale = chr.Client.Info.Locale;

            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUEST_QUERY_RESPONSE))
            {
                packet.Write(qt.Id);
                packet.Write((uint)qt.IsActive);
                packet.Write(qt.Level);
                packet.Write(qt.MinLevel);
                packet.Write(qt.Category);
                packet.Write((uint)qt.QuestType);
                packet.Write(qt.SuggestedPlayers);
                packet.Write((uint)qt.ObjectiveMinReputation.ReputationIndex);
                packet.Write(qt.ObjectiveMinReputation.Value);
                packet.Write((uint)qt.ObjectiveMaxReputation.ReputationIndex);
                packet.Write(qt.ObjectiveMaxReputation.Value);
                packet.Write(qt.FollowupQuestId);
                packet.Write(qt.CalcRewardXp(chr));
                if (qt.Flags.HasFlag(QuestFlags.HiddenRewards))
                {
                    packet.Write(0);
                }
                else
                {
                    packet.Write(qt.RewMoney);
                }
                packet.Write(qt.MoneyAtMaxLevel);
                packet.Write((uint)qt.CastSpell);
                packet.Write((uint)qt.RewSpell);
                packet.Write(qt.RewHonorAddition);
                packet.WriteFloat(qt.RewHonorMultiplier);
                packet.Write((uint)qt.SrcItemId);
                packet.Write((uint)qt.Flags);
                packet.Write((uint)qt.RewardTitleId);
                packet.Write(qt.PlayersSlain);
                packet.Write(qt.RewardTalents);
                packet.Write(0);
                packet.Write(0);
                if (qt.Flags.HasFlag(QuestFlags.HiddenRewards))
                {
                    for (int index = 0; index < 4; ++index)
                    {
                        packet.WriteUInt(0U);
                        packet.WriteUInt(0U);
                    }

                    for (int index = 0; index < 6; ++index)
                    {
                        packet.WriteUInt(0U);
                        packet.WriteUInt(0U);
                    }
                }
                else
                {
                    for (int index = 0; index < 4; ++index)
                    {
                        if (index < qt.RewardItems.Length)
                        {
                            packet.Write((uint)qt.RewardItems[index].ItemId);
                            packet.Write(qt.RewardItems[index].Amount);
                        }
                        else
                        {
                            packet.WriteUInt(0U);
                            packet.WriteUInt(0U);
                        }
                    }

                    for (int index = 0; index < 6; ++index)
                    {
                        if (index < qt.RewardChoiceItems.Length)
                        {
                            packet.Write((uint)qt.RewardChoiceItems[index].ItemId);
                            packet.Write(qt.RewardChoiceItems[index].Amount);
                        }
                        else
                        {
                            packet.WriteUInt(0U);
                            packet.WriteUInt(0U);
                        }
                    }
                }

                for (int index = 0; index < 5; ++index)
                {
                    packet.Write((uint)qt.RewardReputations[index].Faction);
                }
                for (int index = 0; index < 5; ++index)
                {
                    packet.Write(qt.RewardReputations[index].ValueId);
                }
                for (int index = 0; index < 5; ++index)
                {
                    packet.Write(qt.RewardReputations[index].Value);
                }
                packet.Write((uint)qt.MapId);
                packet.Write(qt.PointX);
                packet.Write(qt.PointY);
                packet.Write(qt.PointOpt);
                packet.WriteCString(qt.Titles.Localize(locale));
                packet.WriteCString(qt.Instructions.Localize(locale));
                packet.WriteCString(qt.Details.Localize(locale));
                packet.WriteCString(qt.EndTexts.Localize(locale));
                packet.WriteCString(qt.CompletedTexts.Localize(locale));
                for (int index = 0; index < 4; ++index)
                {
                    packet.Write(qt.ObjectOrSpellInteractions[index].RawId);
                    packet.Write(qt.ObjectOrSpellInteractions[index].Amount);
                    packet.Write((uint)qt.CollectableSourceItems[index].ItemId);
                    packet.Write(qt.CollectableSourceItems[index].Amount);
                }

                for (int index = 0; index < 6; ++index)
                {
                    if (index < qt.CollectableItems.Length)
                    {
                        packet.Write((uint)qt.CollectableItems[index].ItemId);
                        packet.Write(qt.CollectableItems[index].Amount);
                    }
                    else
                    {
                        packet.WriteUInt(0U);
                        packet.WriteUInt(0U);
                    }
                }

                for (int index = 0; index < 4; ++index)
                {
                    QuestObjectiveSet objectiveText = qt.ObjectiveTexts[(int)locale];
                    if (objectiveText != null)
                    {
                        packet.Write(objectiveText.Texts[index]);
                    }
                    else
                    {
                        packet.Write("");
                    }
                }

                chr.Client.Send(packet, false);
            }
        }
Пример #27
0
 /// <summary>
 /// 임무 제거
 /// </summary>
 /// <param name="data"></param>
 public void Remove(QuestTemplate data)
 {
     Remove(data.id);
 }
Пример #28
0
        public static void HandleQuestQueryResponse510(Packet packet)
        {
            var hasData = packet.ReadBit();

            if (!hasData)
            {
                packet.ReadUInt32("Entry");
                return; // nothing to do
            }

            var quest = new QuestTemplate();

            var questTurnTextWindow  = (int)packet.ReadBits(10);
            var details              = (int)packet.ReadBits(12);
            var questGiverTextWindow = (int)packet.ReadBits(10);
            var len1658              = (int)packet.ReadBits(9);
            var completedText        = (int)packet.ReadBits(11);
            var len158 = (int)packet.ReadBits(12);
            var questGiverTargetName = (int)packet.ReadBits(8);
            var title = (int)packet.ReadBits(9);
            var questTurnTargetName = (int)packet.ReadBits(8);
            var count = (int)packet.ReadBits("Requirement Count", 19);

            var len2949_20 = new int[count];
            var counter    = new int[count];

            for (var i = 0; i < count; ++i)
            {
                len2949_20[i] = (int)packet.ReadBits(8);
                counter[i]    = (int)packet.ReadBits(22);
            }
            packet.ResetBitReader();

            for (var i = 0; i < count; ++i)
            {
                packet.ReadWoWString("string2949+20", len2949_20[i], i);
                packet.ReadInt32("int2949+16", i);
                packet.ReadByte("byte2949+5", i);
                packet.ReadByte("byte2949+4", i);
                packet.ReadInt32("int2949+12", i);

                for (var j = 0; j < counter[i]; ++j)
                {
                    packet.ReadInt32("Unk UInt32", i, j);
                }

                packet.ReadInt32("Unk UInt32", i);
                packet.ReadInt32("int2949+8", i);
            }

            packet.ReadWoWString("string158", len158);
            quest.NextQuestIdChain = (uint)packet.ReadEntry <Int32>(StoreNameType.Quest, "Next Chain Quest");
            packet.ReadInt32("int2971");
            quest.RewardSpellCast = packet.ReadEntry <Int32>(StoreNameType.Spell, "Reward Spell Cast");
            packet.ReadInt32("int2955");
            quest.RewardHonorMultiplier = packet.ReadSingle("Reward Honor Multiplier");
            packet.ReadInt32("int2970");
            packet.ReadInt32("int2984");
            packet.ReadInt32("int2979");
            quest.MinLevel           = packet.ReadInt32("Min Level");
            quest.RewardSkillPoints  = packet.ReadUInt32("RewSkillPoints");
            quest.QuestGiverPortrait = packet.ReadUInt32("QuestGiverPortrait");
            packet.ReadInt32("int21");
            quest.Type = packet.ReadEnum <QuestType>("Type", TypeCode.Int32);
            for (var i = 0; i < 5; ++i)
            {
                packet.ReadInt32("int2986+40");
                packet.ReadInt32("int2986+0");
                packet.ReadInt32("int2986+20");
            }

            packet.ReadInt32("int2960");
            for (var i = 0; i < 4; ++i)
            {
                packet.ReadInt32("int3001+16");
                packet.ReadInt32("int3001+0");
            }
            quest.SuggestedPlayers = packet.ReadUInt32("Suggested Players");
            packet.ReadInt32("int2972");
            packet.ReadInt32("int2959");
            quest.Title = packet.ReadWoWString("Title", title);
            packet.ReadInt32("int2965");
            packet.ReadInt32("int2978");
            quest.RewardSkillId = packet.ReadUInt32("RewSkillId");
            packet.ReadInt32("int2982");
            packet.ReadInt32("int2968");
            packet.ReadInt32("int2964");
            packet.ReadInt32("int2957");
            packet.ReadInt32("int2969");
            packet.ReadInt32("int1786");
            quest.SoundAccept = packet.ReadUInt32("Sound Accept");
            packet.ReadInt32("int2981");
            packet.ReadInt32("int2961");
            packet.ReadInt32("int15");
            packet.ReadInt32("int2967");
            quest.CompletedText = packet.ReadWoWString("Completed Text", completedText);
            packet.ReadInt32("int25");
            packet.ReadInt32("Quest Id");
            quest.PointY = packet.ReadSingle("Point Y");
            packet.ReadInt32("int2974");
            packet.ReadInt32("int2952");
            quest.Details    = packet.ReadWoWString("Details", details);
            quest.Level      = packet.ReadInt32("Level");
            quest.PointMapId = packet.ReadUInt32("Point Map ID");
            packet.ReadWoWString("string1658", len1658);
            quest.PointX = packet.ReadSingle("Point X");
            packet.ReadInt32("int17");
            packet.ReadInt32("int2962");
            quest.QuestGiverTextWindow = packet.ReadWoWString("QuestGiver Text Window", questGiverTextWindow);
            packet.ReadInt32("int2963");
            packet.ReadInt32("int2985");
            quest.Method = packet.ReadEnum <QuestMethod>("Method", TypeCode.Int32);
            quest.RewardReputationMask = packet.ReadUInt32("RewRepMask");
            packet.ReadInt32("int2953");
            packet.ReadInt32("int2983");
            packet.ReadInt32("int9");
            quest.QuestGiverTargetName = packet.ReadWoWString("QuestGiver Target Name", questGiverTargetName);
            quest.ZoneOrSort           = packet.ReadEnum <QuestSort>("Sort", TypeCode.Int32);
            packet.ReadInt32("int1788");
            quest.SoundTurnIn         = packet.ReadUInt32("Sound TurnIn");
            quest.SourceItemId        = (uint)packet.ReadEntry <UInt32>(StoreNameType.Item, "Source Item ID");
            quest.QuestTurnTargetName = packet.ReadWoWString("QuestTurn Target Name", questTurnTargetName);
            quest.QuestTurnInPortrait = packet.ReadUInt32("QuestTurnInPortrait");
            quest.Flags = packet.ReadEnum <QuestFlags>("Flags", TypeCode.UInt32);
            packet.ReadInt32("int2954");
            packet.ReadInt32("int2958");
            quest.RewardMoneyMaxLevel = packet.ReadUInt32("Reward Money Max Level");
            packet.ReadInt32("int1787");
            quest.QuestTurnTextWindow = packet.ReadWoWString("QuestTurn Text Window", questTurnTextWindow);
            packet.ReadInt32("int2977");
            packet.ReadInt32("int2980");
            packet.ReadInt32("int2975");
            quest.RewardSpell           = (uint)packet.ReadEntry <Int32>(StoreNameType.Spell, "Reward Spell");
            quest.RewardOrRequiredMoney = packet.ReadInt32("Reward Money");
            packet.ReadInt32("int2973");
            packet.ReadInt32("int2966");
            packet.ReadInt32("int2976");
            quest.PointOption = packet.ReadUInt32("Point Opt");
            packet.ReadInt32("int2956");

            var id = packet.ReadEntry("Quest ID");

            packet.AddSniffData(StoreNameType.Quest, id.Key, "QUERY_RESPONSE");
            Storage.QuestTemplates.Add((uint)id.Key, quest, packet.TimeSpan);
        }
Пример #29
0
        public static void HandleQuestQueryResponse(Packet packet)
        {
            packet.ReadInt32("Entry");

            Bit hasData = packet.ReadBit("Has Data");

            if (!hasData)
            {
                return; // nothing to do
            }
            var id = packet.ReadEntry("Quest ID");

            QuestTemplate quest = new QuestTemplate
            {
                ID = (uint)id.Key
            };

            quest.QuestType  = packet.ReadInt32E <QuestType>("QuestType");
            quest.QuestLevel = packet.ReadInt32("QuestLevel");
            if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_3_5_25848))
            {
                quest.QuestMaxScalingLevel = packet.ReadInt32("QuestMaxScalingLevel");
            }
            quest.QuestPackageID     = packet.ReadUInt32("QuestPackageID");
            quest.MinLevel           = packet.ReadInt32("QuestMinLevel");
            quest.QuestSortID        = (QuestSort)packet.ReadUInt32("QuestSortID");
            quest.QuestInfoID        = packet.ReadInt32E <QuestInfo>("QuestInfoID");
            quest.SuggestedGroupNum  = packet.ReadUInt32("SuggestedGroupNum");
            quest.RewardNextQuest    = packet.ReadUInt32("RewardNextQuest");
            quest.RewardXPDifficulty = packet.ReadUInt32("RewardXPDifficulty");

            quest.RewardXPMultiplier = packet.ReadSingle("RewardXPMultiplier");

            quest.RewardMoney           = packet.ReadInt32("RewardMoney");
            quest.RewardMoneyDifficulty = packet.ReadUInt32("RewardMoneyDifficulty");

            quest.RewardMoneyMultiplier = packet.ReadSingle("RewardMoneyMultiplier");

            quest.RewardBonusMoney = packet.ReadUInt32("RewardBonusMoney");

            quest.RewardDisplaySpellLegion = new uint?[3];
            for (int i = 0; i < 3; ++i)
            {
                quest.RewardDisplaySpellLegion[i] = packet.ReadUInt32("RewardDisplaySpell", i);
            }

            quest.RewardSpellWod = packet.ReadUInt32("RewardSpell");
            quest.RewardHonorWod = packet.ReadUInt32("RewardHonor");

            quest.RewardKillHonor = packet.ReadSingle("RewardKillHonor");

            quest.RewardArtifactXPDifficulty = packet.ReadUInt32("RewardArtifactXPDifficulty");
            quest.RewardArtifactXPMultiplier = packet.ReadSingle("RewardArtifactXPMultiplier");
            quest.RewardArtifactCategoryID   = packet.ReadUInt32("RewardArtifactCategoryID");

            quest.StartItem = packet.ReadUInt32("StartItem");
            quest.Flags     = packet.ReadUInt32E <QuestFlags>("Flags");
            quest.FlagsEx   = packet.ReadUInt32E <QuestFlagsEx>("FlagsEx");

            quest.RewardItem       = new uint?[4];
            quest.RewardAmount     = new uint?[4];
            quest.ItemDrop         = new uint?[4];
            quest.ItemDropQuantity = new uint?[4];
            for (int i = 0; i < 4; ++i)
            {
                quest.RewardItem[i]       = packet.ReadUInt32("RewardItems", i);
                quest.RewardAmount[i]     = packet.ReadUInt32("RewardAmount", i);
                quest.ItemDrop[i]         = packet.ReadUInt32("ItemDrop", i);
                quest.ItemDropQuantity[i] = packet.ReadUInt32("ItemDropQuantity", i);
            }

            quest.RewardChoiceItemID        = new uint?[6];
            quest.RewardChoiceItemQuantity  = new uint?[6];
            quest.RewardChoiceItemDisplayID = new uint?[6];
            for (int i = 0; i < 6; ++i) // CliQuestInfoChoiceItem
            {
                quest.RewardChoiceItemID[i]        = packet.ReadUInt32("RewardChoiceItemID", i);
                quest.RewardChoiceItemQuantity[i]  = packet.ReadUInt32("RewardChoiceItemQuantity", i);
                quest.RewardChoiceItemDisplayID[i] = packet.ReadUInt32("RewardChoiceItemDisplayID", i);
            }

            quest.POIContinent = packet.ReadUInt32("POIContinent");

            quest.POIx = packet.ReadSingle("POIx");
            quest.POIy = packet.ReadSingle("POIy");

            quest.POIPriorityWod      = packet.ReadInt32("POIPriority");
            quest.RewardTitle         = packet.ReadUInt32("RewardTitle");
            quest.RewardArenaPoints   = packet.ReadUInt32("RewardArenaPoints");
            quest.RewardSkillLineID   = packet.ReadUInt32("RewardSkillLineID");
            quest.RewardNumSkillUps   = packet.ReadUInt32("RewardNumSkillUps");
            quest.QuestGiverPortrait  = packet.ReadUInt32("PortraitGiver");
            quest.QuestTurnInPortrait = packet.ReadUInt32("PortraitTurnIn");

            quest.RewardFactionID       = new uint?[5];
            quest.RewardFactionOverride = new int?[5];
            quest.RewardFactionValue    = new int?[5];
            quest.RewardFactionCapIn    = new int?[5];
            for (int i = 0; i < 5; ++i)
            {
                quest.RewardFactionID[i]       = packet.ReadUInt32("RewardFactionID", i);
                quest.RewardFactionValue[i]    = packet.ReadInt32("RewardFactionValue", i);
                quest.RewardFactionOverride[i] = packet.ReadInt32("RewardFactionOverride", i);
                quest.RewardFactionCapIn[i]    = packet.ReadInt32("RewardFactionCapIn", i);
            }

            quest.RewardFactionFlags = packet.ReadUInt32("RewardFactionFlags");

            quest.RewardCurrencyID    = new uint?[4];
            quest.RewardCurrencyCount = new uint?[4];
            for (int i = 0; i < 4; ++i)
            {
                quest.RewardCurrencyID[i]    = packet.ReadUInt32("RewardCurrencyID");
                quest.RewardCurrencyCount[i] = packet.ReadUInt32("RewardCurrencyQty");
            }

            quest.SoundAccept = packet.ReadUInt32("AcceptedSoundKitID");
            quest.SoundTurnIn = packet.ReadUInt32("CompleteSoundKitID");
            quest.AreaGroupID = packet.ReadUInt32("AreaGroupID");
            quest.TimeAllowed = packet.ReadUInt32("TimeAllowed");
            uint cliQuestInfoObjective = packet.ReadUInt32("CliQuestInfoObjective");

            if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_3_5_25848))
            {
                quest.AllowableRacesWod = packet.ReadUInt64("AllowableRaces");
            }
            if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_0_3_22248) && ClientVersion.RemovedInVersion(ClientVersionBuild.V7_3_5_25848))
            {
                quest.AllowableRacesWod = (uint)packet.ReadInt32("AllowableRaces");
            }
            quest.QuestRewardID = packet.ReadInt32("QuestRewardID");

            if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_2_0_23826))
            {
                quest.Expansion = packet.ReadInt32("Expansion");
            }

            packet.ResetBitReader();

            uint logTitleLen             = packet.ReadBits(9);
            uint logDescriptionLen       = packet.ReadBits(12);
            uint questDescriptionLen     = packet.ReadBits(12);
            uint areaDescriptionLen      = packet.ReadBits(9);
            uint questGiverTextWindowLen = packet.ReadBits(10);
            uint questGiverTargetNameLen = packet.ReadBits(8);
            uint questTurnTextWindowLen  = packet.ReadBits(10);
            uint questTurnTargetNameLen  = packet.ReadBits(8);
            uint questCompletionLogLen   = packet.ReadBits(11);

            for (uint i = 0; i < cliQuestInfoObjective; ++i)
            {
                var objectiveId = packet.ReadEntry("Id", i);

                QuestObjective questInfoObjective = new QuestObjective
                {
                    ID      = (uint)objectiveId.Key,
                    QuestID = (uint)id.Key
                };
                questInfoObjective.Type         = packet.ReadByteE <QuestRequirementType>("Quest Requirement Type", i);
                questInfoObjective.StorageIndex = packet.ReadSByte("StorageIndex", i);
                questInfoObjective.Order        = i;
                questInfoObjective.ObjectID     = packet.ReadInt32("ObjectID", i);
                questInfoObjective.Amount       = packet.ReadInt32("Amount", i);
                questInfoObjective.Flags        = packet.ReadUInt32("Flags", i);
                if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_1_0_22900))
                {
                    questInfoObjective.Flags2 = packet.ReadUInt32("Flags2", i);
                }
                questInfoObjective.ProgressBarWeight = packet.ReadSingle("ProgressBarWeight", i);

                int visualEffectsCount = packet.ReadInt32("VisualEffects", i);
                for (uint j = 0; j < visualEffectsCount; ++j)
                {
                    QuestVisualEffect questVisualEffect = new QuestVisualEffect
                    {
                        ID           = questInfoObjective.ID,
                        Index        = j,
                        VisualEffect = packet.ReadInt32("VisualEffectId", i, j)
                    };

                    Storage.QuestVisualEffects.Add(questVisualEffect, packet.TimeSpan);
                }

                packet.ResetBitReader();

                uint bits6 = packet.ReadBits(8);
                questInfoObjective.Description = packet.ReadWoWString("Description", bits6, i);

                if (ClientLocale.PacketLocale != LocaleConstant.enUS && questInfoObjective.Description != string.Empty)
                {
                    QuestObjectivesLocale localesQuestObjectives = new QuestObjectivesLocale
                    {
                        ID           = (uint)objectiveId.Key,
                        QuestId      = (uint)id.Key,
                        StorageIndex = questInfoObjective.StorageIndex,
                        Description  = questInfoObjective.Description
                    };

                    Storage.LocalesQuestObjectives.Add(localesQuestObjectives, packet.TimeSpan);
                }

                Storage.QuestObjectives.Add(questInfoObjective, packet.TimeSpan);
            }

            quest.LogTitle             = packet.ReadWoWString("LogTitle", logTitleLen);
            quest.LogDescription       = packet.ReadWoWString("LogDescription", logDescriptionLen);
            quest.QuestDescription     = packet.ReadWoWString("QuestDescription", questDescriptionLen);
            quest.AreaDescription      = packet.ReadWoWString("AreaDescription", areaDescriptionLen);
            quest.QuestGiverTextWindow = packet.ReadWoWString("PortraitGiverText", questGiverTextWindowLen);
            quest.QuestGiverTargetName = packet.ReadWoWString("PortraitGiverName", questGiverTargetNameLen);
            quest.QuestTurnTextWindow  = packet.ReadWoWString("PortraitTurnInText", questTurnTextWindowLen);
            quest.QuestTurnTargetName  = packet.ReadWoWString("PortraitTurnInName", questTurnTargetNameLen);
            quest.QuestCompletionLog   = packet.ReadWoWString("QuestCompletionLog", questCompletionLogLen);

            if (ClientLocale.PacketLocale != LocaleConstant.enUS)
            {
                LocalesQuest localesQuest = new LocalesQuest
                {
                    ID                 = (uint)id.Key,
                    LogTitle           = quest.LogTitle,
                    LogDescription     = quest.LogDescription,
                    QuestDescription   = quest.QuestDescription,
                    AreaDescription    = quest.AreaDescription,
                    PortraitGiverText  = quest.QuestGiverTextWindow,
                    PortraitGiverName  = quest.QuestGiverTargetName,
                    PortraitTurnInText = quest.QuestTurnTextWindow,
                    PortraitTurnInName = quest.QuestTurnTargetName,
                    QuestCompletionLog = quest.QuestCompletionLog
                };

                Storage.LocalesQuests.Add(localesQuest, packet.TimeSpan);
            }

            Storage.QuestTemplates.Add(quest, packet.TimeSpan);
        }
Пример #30
0
        internal static void EnsureItemQuestRelations()
        {
            foreach (QuestTemplate template1 in QuestMgr.Templates)
            {
                if (template1 != null && template1.CollectableItems != null)
                {
                    foreach (Asda2ItemStackDescription collectableItem in template1.CollectableItems)
                    {
                        ItemTemplate template2 = GetTemplate(collectableItem.ItemId);
                        if (template2 == null)
                        {
                            ContentMgr.OnInvalidDBData("QuestTemplate \"{0}\" refered to non-existing Item: {1}",
                                                       (object)template1, (object)collectableItem);
                        }
                        else if (template2.CollectQuests == null)
                        {
                            template2.CollectQuests = new QuestTemplate[1]
                            {
                                template1
                            };
                        }
                        else
                        {
                            int num = (int)ArrayUtil.AddOnlyOne(ref template2.CollectQuests, template1);
                        }
                    }

                    foreach (Asda2ItemStackDescription collectableSourceItem in template1.CollectableSourceItems)
                    {
                        ItemTemplate template2 = GetTemplate(collectableSourceItem.ItemId);
                        if (template2 == null)
                        {
                            ContentMgr.OnInvalidDBData("QuestTemplate \"{0}\" refered to non-existing Item: {1}",
                                                       (object)template1, (object)collectableSourceItem);
                        }
                        else if (template2.CollectQuests == null)
                        {
                            template2.CollectQuests = new QuestTemplate[1]
                            {
                                template1
                            };
                        }
                        else
                        {
                            int num = (int)ArrayUtil.AddOnlyOne(ref template2.CollectQuests, template1);
                        }
                    }
                }
            }

            foreach (ItemTemplate template1 in Templates)
            {
                if (template1 != null && template1.QuestId != 0U)
                {
                    QuestTemplate template2 = QuestMgr.GetTemplate(template1.QuestId);
                    if (template2 == null)
                    {
                        ContentMgr.OnInvalidDBData("Item {0} had invalid QuestId: {1}", (object)template1,
                                                   (object)template1.QuestId);
                    }
                    else
                    {
                        template2.Starters.Add(template1);
                    }
                }
            }
        }
Пример #31
0
 public void HandleQuestTemplateUpdate(Dictionary<string, object> props)
 {
     questTemplates.Clear ();
     int numTemplates = (int)props ["numTemplates"];
     for (int i = 0; i < numTemplates; i++) {
         QuestTemplate template = new QuestTemplate ();
         template.title = (string)props ["quest_" + i + "Title"];
         template.questID = (int)props ["quest_" + i + "Id"];
         questTemplates.Add (template);
     }
     ClientAPI.Write ("Number of quest templates added: " + questTemplates.Count);
 }
Пример #32
0
    public int SetData(QusetMsgInfo theinfo, OnSelectedCallback selectfunc = null)
    {
        if (BgSprite == null)
        {
            BgSprite = transform.FindChild("Sprite bg").gameObject;
            TitleLabel = transform.FindChild("Label title").gameObject;
            GetLabel = transform.FindChild("Label gift").gameObject;
            RewardItem = transform.FindChild("SignItem").gameObject;
            GetButton = transform.FindChild("Button").gameObject;
            BtnBgScript = transform.FindChild("Button/Background").gameObject;
            BtnLabel = transform.FindChild("Button/Label").gameObject;

            ButtonUIEventListener = UIEventListener.Get(GetButton);
            ButtonUIEventListener.onClick += ClickBtnHandler;

            GotoUIEventListener = UIEventListener.Get(TitleLabel);
            GotoUIEventListener.onClick += GotoBtnHandler;
        }
        OnSelected = selectfunc;
        questInfo = theinfo;
        questTemp = SystemModelLocator.Instance.QuestTemplates.QuestTmpls[questInfo.Id];
        var lb = TitleLabel.GetComponent<UILabel>();
        lb.text = questTemp.Desc;
        //0未完成 1已完成未领取 2 已领取
        if (questInfo.Status == 0)
        {
            BgSprite.SetActive(true);
            GetLabel.SetActive(true);
            RewardItem.SetActive(true);
            var item = RewardItem.GetComponent<SignItemControl>();
            item.SetData(questTemp.RewardId, false, false, SelectHandler);
            RewardTemplate = item.RewardTemplate;
            GetButton.SetActive(false);
            return 0;
        }
        else if (questInfo.Status == 1)
        {
            BgSprite.SetActive(true);
            GetLabel.SetActive(false);
            RewardItem.SetActive(false);
            GetButton.SetActive(true);
            lb = BtnLabel.GetComponent<UILabel>();
            lb.text = "领取";
            lb.color = new Color(250,230,0);
            var btn = GetButton.GetComponent<UIButton>();
            btn.enabled = true;
            BtnBgScript.SetActive(true);
//            var sp = BtnBgScript.GetComponent<UISprite>();
//            sp.color = new Color(255, 255, 255);
            return 0;
        }
        else
        {
            BgSprite.SetActive(false);
            GetLabel.SetActive(false);
            RewardItem.SetActive(false);
            GetButton.SetActive(true);
            lb = BtnLabel.GetComponent<UILabel>();
            lb.text = "已领取";
            lb.color = new Color(100, 100, 100);
            var btn = GetButton.GetComponent<UIButton>();
            btn.enabled = false;
            BtnBgScript.SetActive(false);
            return 1;
        }
    }