protected void HandleGameObjectQueryResponse(InPacket packet) { uint entry = packet.ReadUInt32(); uint type = packet.ReadUInt32(); uint displayId = packet.ReadUInt32(); var name = packet.ReadCString(); packet.ReadByte(); packet.ReadByte(); packet.ReadByte(); var IconName = packet.ReadCString(); var CastBarCaption = packet.ReadCString(); var unk1 = packet.ReadCString(); var size = packet.ReadSingle(); WorldObject[] worldObjects = new WorldObject[Exchange.gameClient.Objects.Count]; Exchange.gameClient.Objects.Values.CopyTo(worldObjects, 0); foreach (WorldObject obj in worldObjects) { if (obj.ObjectEntry == entry) { obj.Name = name; } } }
public Character(InPacket packet) { GUID = packet.ReadUInt64(); Name = packet.ReadCString(); Race = (Race)packet.ReadByte(); Class = (Class)packet.ReadByte(); Gender = (Gender)packet.ReadByte(); Bytes = packet.ReadBytes(5); Level = packet.ReadByte(); ZoneId = packet.ReadUInt32(); MapId = packet.ReadUInt32(); X = packet.ReadSingle(); Y = packet.ReadSingle(); Z = packet.ReadSingle(); GuildId = packet.ReadUInt32(); Flags = packet.ReadUInt32(); packet.ReadUInt32(); // customize (rename, etc) packet.ReadByte(); // first login PetInfoId = packet.ReadUInt32(); PetLevel = packet.ReadUInt32(); PetFamilyId = packet.ReadUInt32(); // read items for (int i = 0; i < Items.Length - 1; ++i) Items[i] = new Item(packet); // read bags for (int i = 0; i < 4; ++i) { packet.ReadUInt32(); packet.ReadByte(); packet.ReadUInt32(); } }
protected void HandleCreatureQueryResponse(InPacket packet) { var entry = packet.ReadUInt32(); var name = packet.ReadCString(); packet.ReadByte(); packet.ReadByte(); packet.ReadByte(); var Subname = packet.ReadCString(); var IconName = packet.ReadCString(); uint type_flags = packet.ReadUInt32(); uint type = packet.ReadUInt32(); uint family = packet.ReadUInt32(); uint rank = packet.ReadUInt32(); uint KillCredit = packet.ReadUInt32(); uint KillCredit2 = packet.ReadUInt32(); uint Modelid1 = packet.ReadUInt32(); uint Modelid2 = packet.ReadUInt32(); uint Modelid3 = packet.ReadUInt32(); uint Modelid4 = packet.ReadUInt32(); float ModHealth = packet.ReadSingle(); float ModMana = packet.ReadSingle(); byte RacialLeader = packet.ReadByte(); //for (uint i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i) //data << uint32(ci->questItems[i]); // itemId[6], quest drop uint movementId = packet.ReadUInt32(); WorldObject[] worldObjects = new WorldObject[Exchange.gameClient.Objects.Count]; Exchange.gameClient.Objects.Values.CopyTo(worldObjects, 0); foreach (WorldObject obj in worldObjects) { if (obj.ObjectEntry == entry) { obj.Name = name; } } }
protected void HandleNameQueryResponse(InPacket packet) { var pguid = packet.ReadPackedGuid(); var ukn = packet.ReadByte(); var name = packet.ReadCString(); WorldObject[] worldObjects = new WorldObject[Exchange.gameClient.Objects.Count]; Exchange.gameClient.Objects.Values.CopyTo(worldObjects, 0); foreach (WorldObject obj in worldObjects) { if (obj.GUID == pguid) { obj.Name = name; } } if (!Game.World.PlayerNameLookup.ContainsKey(pguid)) { //! Add name definition per GUID Game.World.PlayerNameLookup.Add(pguid, name); //! See if any queued messages for this GUID are stored Queue <ChatMessage> messageQueue = null; if (Game.World.QueuedChatMessages.TryGetValue(pguid, out messageQueue)) { ChatMessage m; while (messageQueue.GetEnumerator().MoveNext()) { //! Print with proper name and remove from queue m = messageQueue.Dequeue(); m.Sender.Sender = name; //Game.UI.PresentChatMessage(m); } } } /* * var realmName = packet.ReadCString(); * var race = (Race)packet.ReadByte(); * var gender = (Gender)packet.ReadByte(); * var cClass = (Class)packet.ReadByte(); * var decline = packet.ReadBoolean(); * * if (!decline) * return; * * for (var i = 0; i < 5; i++) * var declinedName = packet.ReadCString(); */ }
void HandleNameQueryResponse(InPacket packet) { var pguid = packet.ReadPackedGuid(); var end = packet.ReadBoolean(); if (end) //! True if not found, false if found { return; } var name = packet.ReadCString(); if (!Game.World.PlayerNameLookup.ContainsKey(pguid)) { //! Add name definition per GUID Game.World.PlayerNameLookup.Add(pguid, name); //! See if any queued messages for this GUID are stored Queue <ChatMessage> messageQueue = null; if (Game.World.QueuedChatMessages.TryGetValue(pguid, out messageQueue)) { ChatMessage m; while (messageQueue.GetEnumerator().MoveNext()) { //! Print with proper name and remove from queue m = messageQueue.Dequeue(); m.Sender.Sender = name; Game.UI.PresentChatMessage(m); } } } /* * var realmName = packet.ReadCString(); * var race = (Race)packet.ReadByte(); * var gender = (Gender)packet.ReadByte(); * var cClass = (Class)packet.ReadByte(); * var decline = packet.ReadBoolean(); * * if (!decline) * return; * * for (var i = 0; i < 5; i++) * var declinedName = packet.ReadCString(); */ }
protected void HandleNameQueryResponse(InPacket packet) { var pguid = packet.ReadPackedGuid(); var end = packet.ReadBoolean(); if (end) //! True if not found, false if found return; var name = packet.ReadCString(); if (!Game.World.PlayerNameLookup.ContainsKey(pguid)) { //! Add name definition per GUID Game.World.PlayerNameLookup.Add(pguid, name); //! See if any queued messages for this GUID are stored Queue<ChatMessage> messageQueue = null; if (Game.World.QueuedChatMessages.TryGetValue(pguid, out messageQueue)) { ChatMessage m; while (messageQueue.GetEnumerator().MoveNext()) { //! Print with proper name and remove from queue m = messageQueue.Dequeue(); m.Sender.Sender = name; Game.UI.PresentChatMessage(m); } } } /* var realmName = packet.ReadCString(); var race = (Race)packet.ReadByte(); var gender = (Gender)packet.ReadByte(); var cClass = (Class)packet.ReadByte(); var decline = packet.ReadBoolean(); if (!decline) return; for (var i = 0; i < 5; i++) var declinedName = packet.ReadCString(); */ }
void HandleMessageChat(InPacket packet) { var type = (ChatMessageType)packet.ReadByte(); var lang = (Language)packet.ReadInt32(); var guid = packet.ReadUInt64(); var unkInt = packet.ReadInt32(); switch (type) { case ChatMessageType.Say: case ChatMessageType.Yell: case ChatMessageType.Party: case ChatMessageType.PartyLeader: case ChatMessageType.Raid: case ChatMessageType.RaidLeader: case ChatMessageType.RaidWarning: case ChatMessageType.Guild: case ChatMessageType.Officer: case ChatMessageType.Emote: case ChatMessageType.TextEmote: case ChatMessageType.Whisper: case ChatMessageType.WhisperInform: case ChatMessageType.System: case ChatMessageType.Channel: case ChatMessageType.Battleground: case ChatMessageType.BattlegroundNeutral: case ChatMessageType.BattlegroundAlliance: case ChatMessageType.BattlegroundHorde: case ChatMessageType.BattlegroundLeader: case ChatMessageType.Achievement: case ChatMessageType.GuildAchievement: { ChatChannel channel = new ChatChannel(); channel.Type = type; if (type == ChatMessageType.Channel) channel.ChannelName = packet.ReadCString(); var sender = packet.ReadUInt64(); ChatMessage message = new ChatMessage(); var textLen = packet.ReadInt32(); message.Message = packet.ReadCString(); message.Language = lang; message.ChatTag = (ChatTag)packet.ReadByte(); message.Sender = channel; //! If we know the name of the sender GUID, use it //! For system messages sender GUID is 0, don't need to do anything fancy string senderName = null; if (type == ChatMessageType.System || Game.World.PlayerNameLookup.TryGetValue(sender, out senderName)) { message.Sender.Sender = senderName; Game.UI.PresentChatMessage(message); return; } //! If not we place the message in the queue, //! .. either existent Queue<ChatMessage> messageQueue = null; if (Game.World.QueuedChatMessages.TryGetValue(sender, out messageQueue)) messageQueue.Enqueue(message); //! or non existent else { messageQueue = new Queue<ChatMessage>(); messageQueue.Enqueue(message); Game.World.QueuedChatMessages.Add(sender, messageQueue); } //! Furthermore we send CMSG_NAME_QUERY to the server to retrieve the name of the sender OutPacket response = new OutPacket(WorldCommand.CMSG_NAME_QUERY); response.Write(sender); Game.SendPacket(response); //! Enqueued chat will be printed when we receive SMSG_NAME_QUERY_RESPONSE break; } default: return; } }
void HandleChatPlayerNotFound(InPacket packet) { Game.UI.LogLine(String.Format("Player {0} not found!", packet.ReadCString())); }
protected void HandlePartyList(InPacket packet) { GroupType groupType = (GroupType)packet.ReadByte(); packet.ReadByte(); packet.ReadByte(); packet.ReadByte(); if (groupType.HasFlag(GroupType.GROUPTYPE_LFG)) { packet.ReadByte(); packet.ReadUInt32(); } packet.ReadUInt64(); packet.ReadUInt32(); uint membersCount = packet.ReadUInt32(); GroupMembersGuids.Clear(); for (uint index = 0; index < membersCount; index++) { packet.ReadCString(); UInt64 memberGuid = packet.ReadUInt64(); GroupMembersGuids.Add(memberGuid); packet.ReadByte(); packet.ReadByte(); packet.ReadByte(); packet.ReadByte(); } GroupLeaderGuid = packet.ReadUInt64(); }
protected void HandleChatPlayerNotFound(InPacket packet) { Game.UI.LogLine(String.Format("Player {0} not found!", packet.ReadCString())); }
protected void HandleMessageChat(InPacket packet) { var chatType = (ChatMessageType)packet.ReadByte(); var language = (Language)packet.ReadInt32(); UInt64 senderGuid = packet.ReadUInt64(); var unkInt = packet.ReadUInt32(); UInt32 senderNameLen = 0; string senderName = null; UInt64 receiverGuid = 0; UInt32 receiverNameLen = 0; string receiverName = null; string channelName = null; switch (chatType) { case ChatMessageType.MonsterSay: case ChatMessageType.MonsterParty: case ChatMessageType.MonsterYell: case ChatMessageType.MonsterWhisper: case ChatMessageType.MonsterEmote: case ChatMessageType.RaidBossEmote: case ChatMessageType.RaidBossWhisper: case ChatMessageType.BattleNet: senderNameLen = packet.ReadUInt32(); senderName = packet.ReadCString(); receiverGuid = packet.ReadUInt64(); if (receiverGuid != 0 && !receiverGuid.IsPlayer() && !receiverGuid.IsPet()) { receiverNameLen = packet.ReadUInt32(); receiverName = packet.ReadCString(); } break; case ChatMessageType.WhisperForeign: senderNameLen = packet.ReadUInt32(); senderName = packet.ReadCString(); receiverGuid = packet.ReadUInt64(); break; case ChatMessageType.BattlegroundNeutral: case ChatMessageType.BattlegroundAlliance: case ChatMessageType.BattlegroundHorde: receiverGuid = packet.ReadUInt64(); if (receiverGuid != 0 && !receiverGuid.IsPlayer()) { receiverNameLen = packet.ReadUInt32(); receiverName = packet.ReadCString(); } break; case ChatMessageType.Achievement: case ChatMessageType.GuildAchievement: receiverGuid = packet.ReadUInt64(); break; default: if (packet.Header.Command == WorldCommand.SMSG_GM_MESSAGECHAT) { senderNameLen = packet.ReadUInt32(); senderName = packet.ReadCString(); } if (chatType == ChatMessageType.Channel) { channelName = packet.ReadCString(); } receiverGuid = packet.ReadUInt64(); break; } UInt32 messageLen = packet.ReadUInt32(); string message = packet.ReadCString(); var chatTag = (ChatTag)packet.ReadByte(); if (chatType == ChatMessageType.Achievement || chatType == ChatMessageType.GuildAchievement) { var achievementId = packet.ReadUInt32(); } ChatChannel channel = new ChatChannel(); channel.Type = chatType; if (chatType == ChatMessageType.Channel) { channel.ChannelName = channelName; } ChatMessage chatMessage = new ChatMessage(); chatMessage.Message = message; chatMessage.Language = language; chatMessage.ChatTag = chatTag; chatMessage.Sender = channel; //! If we know the name of the sender GUID, use it //! For system messages sender GUID is 0, don't need to do anything fancy if (senderGuid == 0 || !string.IsNullOrEmpty(senderName) || Game.World.PlayerNameLookup.TryGetValue(senderGuid, out senderName)) { chatMessage.Sender.Sender = senderName; Game.UI.PresentChatMessage(chatMessage); return; } //! If not we place the message in the queue, //! .. either existent Queue <ChatMessage> messageQueue = null; if (Game.World.QueuedChatMessages.TryGetValue(senderGuid, out messageQueue)) { messageQueue.Enqueue(chatMessage); } //! or non existent else { messageQueue = new Queue <ChatMessage>(); messageQueue.Enqueue(chatMessage); Game.World.QueuedChatMessages.Add(senderGuid, messageQueue); } //! Furthermore we send CMSG_NAME_QUERY to the server to retrieve the name of the sender OutPacket response = new OutPacket(WorldCommand.CMSG_NAME_QUERY); response.Write(senderGuid); Game.SendPacket(response); //! Enqueued chat will be printed when we receive SMSG_NAME_QUERY_RESPONSE }
protected void HandleItemQueryResponse(InPacket packet) { var entry = packet.ReadUInt32(); var Class = packet.ReadUInt32(); var SubClass = packet.ReadUInt32(); var SoundOverrideSubclass = packet.ReadUInt32(); var name = packet.ReadCString(); var DisplayID = packet.ReadUInt32(); var Quality = packet.ReadUInt32(); var Flags = packet.ReadUInt32(); var FlagsExtra = packet.ReadUInt32(); var BuyPrice = packet.ReadUInt32(); var SellPrice = packet.ReadUInt32(); var InventoryType = packet.ReadUInt32(); var AllowedClasses = packet.ReadUInt32(); var AllowedRaces = packet.ReadUInt32(); var ItemLevel = packet.ReadUInt32(); var RequiredLevel = packet.ReadUInt32(); var RequiredSkillId = packet.ReadUInt32(); var RequiredSkillLevel = packet.ReadUInt32(); var RequiredSpell = packet.ReadUInt32(); var RequiredHonorRank = packet.ReadUInt32(); var RequiredCityRank = packet.ReadUInt32(); var RequiredRepFaction = packet.ReadUInt32(); WorldObject[] worldObjects = new WorldObject[Exchange.gameClient.Objects.Count]; Exchange.gameClient.Objects.Values.CopyTo(worldObjects, 0); foreach (WorldObject obj in worldObjects) { if (obj.ObjectEntry == entry) { obj.Name = name; } } /* item.RequiredRepValue = packet.ReadUInt32("Required Rep Value"); * * item.MaxCount = packet.ReadInt32("Max Count"); * * item.MaxStackSize = packet.ReadInt32("Max Stack Size"); * * item.ContainerSlots = packet.ReadUInt32("Container Slots"); * * item.StatsCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056) ? packet.ReadUInt32("Stats Count") : 10; * item.StatTypes = new ItemModType?[item.StatsCount.GetValueOrDefault()]; * item.StatValues = new int?[item.StatsCount.GetValueOrDefault()]; * for (int i = 0; i < item.StatsCount; i++) * { * ItemModType type = packet.ReadInt32E<ItemModType>("Stat Type", i); * item.StatTypes[i] = type == ItemModType.None ? ItemModType.Mana : type; // TDB * item.StatValues[i] = packet.ReadInt32("Stat Value", i); * } * * if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) * { * item.ScalingStatDistribution = packet.ReadInt32("SSD ID"); * item.ScalingStatValue = packet.ReadUInt32("SSD Value"); * } * * int dmgCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767) ? 2 : 5; * item.DamageMins = new float?[dmgCount]; * item.DamageMaxs = new float?[dmgCount]; * item.DamageTypes = new DamageType?[dmgCount]; * for (int i = 0; i < dmgCount; i++) * { * item.DamageMins[i] = packet.ReadSingle("Damage Min", i); * item.DamageMaxs[i] = packet.ReadSingle("Damage Max", i); * item.DamageTypes[i] = packet.ReadInt32E<DamageType>("Damage Type", i); * } * * * item.Armor = packet.ReadUInt32("Armor"); * item.HolyResistance = packet.ReadUInt32("HolyResistance"); * item.FireResistance = packet.ReadUInt32("FireResistance"); * item.NatureResistance = packet.ReadUInt32("NatureResistance"); * item.FrostResistance = packet.ReadUInt32("FrostResistance"); * item.ShadowResistance = packet.ReadUInt32("ShadowResistance"); * item.ArcaneResistance = packet.ReadUInt32("ArcaneResistance"); * * item.Delay = packet.ReadUInt32("Delay"); * * item.AmmoType = packet.ReadInt32E<AmmoType>("Ammo Type"); * * item.RangedMod = packet.ReadSingle("Ranged Mod"); * * item.TriggeredSpellIds = new int?[5]; * item.TriggeredSpellTypes = new ItemSpellTriggerType?[5]; * item.TriggeredSpellCharges = new int?[5]; * item.TriggeredSpellCooldowns = new int?[5]; * item.TriggeredSpellCategories = new uint?[5]; * item.TriggeredSpellCategoryCooldowns = new int?[5]; * for (int i = 0; i < 5; i++) * { * item.TriggeredSpellIds[i] = packet.ReadInt32<SpellId>("Triggered Spell ID", i); * item.TriggeredSpellTypes[i] = packet.ReadInt32E<ItemSpellTriggerType>("Trigger Spell Type", i); * item.TriggeredSpellCharges[i] = packet.ReadInt32("Triggered Spell Charges", i); * item.TriggeredSpellCooldowns[i] = packet.ReadInt32("Triggered Spell Cooldown", i); * item.TriggeredSpellCategories[i] = packet.ReadUInt32("Triggered Spell Category", i); * item.TriggeredSpellCategoryCooldowns[i] = packet.ReadInt32("Triggered Spell Category Cooldown", i); * } * * item.Bonding = packet.ReadInt32E<ItemBonding>("Bonding"); * * item.Description = packet.ReadCString(); * * item.PageText = packet.ReadUInt32("Page Text"); * * item.Language = packet.ReadInt32E<Language>("Language"); * * item.PageMaterial = packet.ReadInt32E<PageMaterial>("Page Material"); * * item.StartQuestId = (uint)packet.ReadInt32<QuestId>("Start Quest"); * * item.LockId = packet.ReadUInt32("Lock ID"); * * item.Material = packet.ReadInt32E<Material>("Material"); * * item.SheathType = packet.ReadInt32E<SheathType>("Sheath Type"); * * item.RandomPropery = packet.ReadInt32("Random Property"); * * item.RandomSuffix = packet.ReadUInt32("Random Suffix"); * * item.Block = packet.ReadUInt32("Block"); * * item.ItemSet = packet.ReadUInt32("Item Set"); * * item.MaxDurability = packet.ReadUInt32("Max Durability"); * * item.AreaID = packet.ReadUInt32<AreaId>("Area"); * * // In this single (?) case, map 0 means no map * item.MapID = packet.ReadInt32<MapId>("Map"); * * item.BagFamily = packet.ReadInt32E<BagFamilyMask>("Bag Family"); * * item.TotemCategory = packet.ReadInt32E<TotemCategory>("Totem Category"); * * item.ItemSocketColors = new ItemSocketColor?[3]; * item.SocketContent = new uint?[3]; * for (int i = 0; i < 3; i++) * { * item.ItemSocketColors[i] = packet.ReadInt32E<ItemSocketColor>("Socket Color", i); * item.SocketContent[i] = packet.ReadUInt32("Socket Item", i); * } * * item.SocketBonus = packet.ReadInt32("Socket Bonus"); * * item.GemProperties = packet.ReadInt32("Gem Properties"); * * item.RequiredDisenchantSkill = packet.ReadInt32("Required Disenchant Skill"); * * item.ArmorDamageModifier = packet.ReadSingle("Armor Damage Modifier"); * * if (ClientVersion.AddedInVersion(ClientVersionBuild.V2_4_2_8209)) * item.Duration = packet.ReadUInt32("Duration"); * * if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) * item.ItemLimitCategory = packet.ReadInt32("Limit Category"); * * if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) * item.HolidayID = packet.ReadInt32E<Holiday>("Holiday"); * * packet.AddSniffData(StoreNameType.Item, entry.Key, "QUERY_RESPONSE"); * * Storage.ItemTemplates.Add(item, packet.TimeSpan);*/ }
protected void HandleMessageChat(InPacket packet) { var type = (ChatMessageType)packet.ReadByte(); var lang = (Language)packet.ReadInt32(); var guid = packet.ReadUInt64(); var unkInt = packet.ReadInt32(); switch (type) { case ChatMessageType.Say: case ChatMessageType.Yell: case ChatMessageType.Party: case ChatMessageType.PartyLeader: case ChatMessageType.Raid: case ChatMessageType.RaidLeader: case ChatMessageType.RaidWarning: case ChatMessageType.Guild: case ChatMessageType.Officer: case ChatMessageType.Emote: case ChatMessageType.TextEmote: case ChatMessageType.Whisper: case ChatMessageType.WhisperInform: case ChatMessageType.System: case ChatMessageType.Channel: case ChatMessageType.Battleground: case ChatMessageType.BattlegroundNeutral: case ChatMessageType.BattlegroundAlliance: case ChatMessageType.BattlegroundHorde: case ChatMessageType.BattlegroundLeader: case ChatMessageType.Achievement: case ChatMessageType.GuildAchievement: { ChatChannel channel = new ChatChannel(); channel.Type = type; if (type == ChatMessageType.Channel) { channel.ChannelName = packet.ReadCString(); } var sender = packet.ReadUInt64(); ChatMessage message = new ChatMessage(); var textLen = packet.ReadInt32(); message.Message = packet.ReadCString(); message.Language = lang; message.ChatTag = (ChatTag)packet.ReadByte(); message.Sender = channel; //! If we know the name of the sender GUID, use it //! For system messages sender GUID is 0, don't need to do anything fancy string senderName = null; if (type == ChatMessageType.System || Game.World.PlayerNameLookup.TryGetValue(sender, out senderName)) { message.Sender.Sender = senderName; Game.UI.PresentChatMessage(message); return; } //! If not we place the message in the queue, //! .. either existent Queue <ChatMessage> messageQueue = null; if (Game.World.QueuedChatMessages.TryGetValue(sender, out messageQueue)) { messageQueue.Enqueue(message); } //! or non existent else { messageQueue = new Queue <ChatMessage>(); messageQueue.Enqueue(message); Game.World.QueuedChatMessages.Add(sender, messageQueue); } //! Furthermore we send CMSG_NAME_QUERY to the server to retrieve the name of the sender OutPacket response = new OutPacket(NetworkOperationCode.CMSG_NAME_QUERY); response.Write(sender); Game.SendPacket(response); //! Enqueued chat will be printed when we receive SMSG_NAME_QUERY_RESPONSE break; } default: return; } }