public static void HandleNpcGossip(Packet packet) { GossipMenu gossip = new GossipMenu(); WowGuid guid = packet.ReadPackedGuid128("GossipGUID"); gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); int menuId = packet.ReadInt32("GossipID"); gossip.Entry = (uint)menuId; packet.ReadInt32("FriendshipFactionID"); gossip.TextID = (uint)packet.ReadInt32("TextID"); int int44 = packet.ReadInt32("GossipOptions"); int int60 = packet.ReadInt32("GossipText"); for (int i = 0; i < int44; ++i) ReadGossipOptionsData((uint)menuId, packet, i, "GossipOptions"); for (int i = 0; i < int60; ++i) ReadGossipQuestTextData(packet, i, "GossipQuestText"); if (guid.GetObjectType() == ObjectType.Unit) if (Storage.Objects.ContainsKey(guid)) ((Unit)Storage.Objects[guid].Item1).GossipId = (uint)menuId; Storage.Gossips.Add(gossip, packet.TimeSpan); packet.AddSniffData(StoreNameType.Gossip, menuId, guid.GetEntry().ToString(CultureInfo.InvariantCulture)); }
public static void HandleNpcGossip(Packet packet) { GossipMenu gossip = new GossipMenu(); WowGuid guid = packet.ReadGuid("GUID"); gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); uint menuId = packet.ReadUInt32("Menu Id"); gossip.Entry = menuId; if (ClientVersion.AddedInVersion(ClientType.MistsOfPandaria)) packet.ReadUInt32("Friendship Faction"); gossip.TextID = packet.ReadUInt32("Text Id"); uint count = packet.ReadUInt32("Amount of Options"); for (int i = 0; i < count; i++) { GossipMenuOption gossipOption = new GossipMenuOption { MenuID = menuId, ID = packet.ReadUInt32("Index", i), OptionIcon = packet.ReadByteE<GossipOptionIcon>("Icon", i), BoxCoded = packet.ReadBool("Box", i), BoxMoney = packet.ReadUInt32("Required money", i), OptionText = packet.ReadCString("Text", i), BoxText = packet.ReadCString("Box Text", i) }; Storage.GossipMenuOptions.Add(gossipOption, packet.TimeSpan); } uint questgossips = packet.ReadUInt32("Amount of Quest gossips"); for (int i = 0; i < questgossips; i++) { packet.ReadUInt32<QuestId>("Quest ID", i); packet.ReadUInt32("Icon", i); packet.ReadInt32("Level", i); packet.ReadUInt32E<QuestFlags>("Flags", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V5_1_0_16309)) packet.ReadUInt32E<QuestFlags2>("Flags 2", i); packet.ReadBool("Change Icon", i); packet.ReadCString("Title", i); } if (guid.GetObjectType() == ObjectType.Unit) if (Storage.Objects.ContainsKey(guid)) ((Unit)Storage.Objects[guid].Item1).GossipId = menuId; Storage.Gossips.Add(gossip, packet.TimeSpan); packet.AddSniffData(StoreNameType.Gossip, (int)menuId, guid.GetEntry().ToString(CultureInfo.InvariantCulture)); }
public static void HandleNpcGossip(Packet packet) { var guid = packet.ReadGuid("GUID"); var menuid = packet.ReadUInt32("Menu id"); var textid = packet.ReadUInt32("Text id"); GossipMenu gossip = new GossipMenu { MenuId = menuid, GossipOptions = new List<GossipOption>(), NpcTextId = textid }; gossip = Stuffing.Gossips.GetOrAdd(Tuple.Create<uint,uint>(guid.GetEntry(),menuid), gossip); var count = packet.ReadUInt32("Amount of Options"); for (var i = 0; i < count; i++) { GossipOption opt = new GossipOption { Index = packet.ReadUInt32("Index", i), OptionIcon = packet.ReadByte("Icon", i), Box = packet.ReadBoolean("Box", i), RequiredMoney = packet.ReadUInt32("Required money", i), OptionText = packet.ReadCString("Text", i), BoxText = packet.ReadCString("Box Text", i) }; gossip.GossipOptions.Add(opt); } Stuffing.Gossips.AddOrUpdate(Tuple.Create<uint,uint>(guid.GetEntry(),menuid), gossip, (a,b) => { b.GossipOptions = gossip.GossipOptions; b.NpcTextId = gossip.NpcTextId; return b; }); var questgossips = packet.ReadUInt32("Amount of Quest gossips"); for (var i = 0; i < questgossips; i++) { packet.ReadEntryWithName<UInt32>(StoreNameType.Quest, "Quest ID", i); packet.ReadUInt32("Icon", i); packet.ReadInt32("Level", i); packet.ReadEnum<QuestFlags>("Flags", TypeCode.UInt32, i); packet.ReadBoolean("Unk Bool", i); packet.ReadCString("Title", i); } }
public static void HandleNpcGossip(Packet packet) { var guidBytes = new byte[8]; uint menuId = packet.ReadUInt32("Menu Id"); packet.ReadUInt32("Friendship Faction"); uint textId = packet.ReadUInt32("Text Id"); packet.StartBitStream(guidBytes, 0, 1); uint amountOfOptions = packet.ReadBits("Amount of Options", 20); packet.StartBitStream(guidBytes, 6, 7); var optionTextLen = new uint[amountOfOptions]; var boxTextLen = new uint[amountOfOptions]; for (int i = 0; i < amountOfOptions; ++i) { optionTextLen[i] = packet.ReadBits(12); boxTextLen[i] = packet.ReadBits(12); } packet.StartBitStream(guidBytes, 4, 3, 2); uint questgossips = packet.ReadBits("Amount of Quest gossips", 19); var titleLen = new uint[questgossips]; for (int i = 0; i < questgossips; ++i) { titleLen[i] = packet.ReadBits(9); packet.ReadBit("Change Icon", i); } guidBytes[5] = packet.ReadBit(); packet.ResetBitReader(); for (int i = 0; i < questgossips; i++) { packet.ReadUInt32E<QuestFlags2>("Flags 2", i); packet.ReadUInt32("Icon", i); packet.ReadWoWString("Title", titleLen[i], i); packet.ReadUInt32E<QuestFlags>("Flags", i); packet.ReadInt32("Level", i); packet.ReadUInt32<QuestId>("Quest ID", i); } for (int i = 0; i < amountOfOptions; ++i) { GossipMenuOption gossipOption = new GossipMenuOption { MenuID = menuId, BoxMoney = packet.ReadUInt32("Required money", i), ID = packet.ReadUInt32("Index", i), BoxText = packet.ReadWoWString("Box Text", boxTextLen[i], i), BoxCoded = packet.ReadBool("Box", i), OptionText = packet.ReadWoWString("Text", optionTextLen[i], i), OptionIcon = packet.ReadByteE<GossipOptionIcon>("Icon", i) }; Storage.GossipMenuOptions.Add(gossipOption, packet.TimeSpan); } packet.ParseBitStream(guidBytes, 3, 4, 7, 2, 1, 6, 0, 5); GossipMenu gossip = new GossipMenu { Entry = menuId, TextID = textId }; WowGuid guid = packet.WriteGuid("GUID", guidBytes); gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); if (guid.GetObjectType() == ObjectType.Unit) if (Storage.Objects.ContainsKey(guid)) ((Unit)Storage.Objects[guid].Item1).GossipId = menuId; Storage.Gossips.Add(gossip, packet.TimeSpan); packet.AddSniffData(StoreNameType.Gossip, (int)menuId, guid.GetEntry().ToString(CultureInfo.InvariantCulture)); }
public static void HandleNpcGossip(Packet packet) { var guidBytes = new byte[8]; guidBytes[7] = packet.ReadBit(); guidBytes[6] = packet.ReadBit(); guidBytes[0] = packet.ReadBit(); int questgossips = (int)packet.ReadBits(19); guidBytes[4] = packet.ReadBit(); var titleLen = new uint[questgossips]; for (int i = 0; i < questgossips; ++i) { titleLen[i] = packet.ReadBits(9); packet.ReadBit("Change Icon", i); } guidBytes[3] = packet.ReadBit(); guidBytes[2] = packet.ReadBit(); uint amountOfOptions = packet.ReadBits(20); var boxTextLen = new uint[amountOfOptions]; var optionTextLen = new uint[amountOfOptions]; for (int i = 0; i < amountOfOptions; ++i) { boxTextLen[i] = packet.ReadBits(12); optionTextLen[i] = packet.ReadBits(12); } guidBytes[1] = packet.ReadBit(); guidBytes[5] = packet.ReadBit(); packet.ReadXORByte(guidBytes, 2); var gossipOptions = new List<GossipMenuOption>((int)amountOfOptions); for (int i = 0; i < amountOfOptions; ++i) { GossipMenuOption gossipOption = new GossipMenuOption { BoxText = packet.ReadWoWString("Box Text", boxTextLen[i], i), OptionText = packet.ReadWoWString("Text", optionTextLen[i], i), ID = packet.ReadUInt32("Index", i), BoxCoded = packet.ReadBool("Box", i), OptionIcon = packet.ReadByteE<GossipOptionIcon>("Icon", i), BoxMoney = packet.ReadUInt32("Required money", i) }; gossipOptions.Add(gossipOption); } for (int i = 0; i < questgossips; ++i) { packet.ReadInt32("Level", i); packet.ReadUInt32E<QuestFlags>("Flags", i); packet.ReadUInt32("Icon", i); packet.ReadWoWString("Title", titleLen[i], i); packet.ReadUInt32<QuestId>("Quest ID", i); packet.ReadUInt32E<QuestFlags2>("Flags 2", i); } packet.ReadXORByte(guidBytes, 7); packet.ReadUInt32("Friendship Faction"); packet.ReadXORByte(guidBytes, 3); packet.ReadXORByte(guidBytes, 1); uint textId = packet.ReadUInt32("Text Id"); packet.ReadXORByte(guidBytes, 5); uint menuId = packet.ReadUInt32("Menu Id"); packet.ReadXORByte(guidBytes, 6); packet.ReadXORByte(guidBytes, 4); packet.ReadXORByte(guidBytes, 0); GossipMenu gossip = new GossipMenu { Entry = menuId, TextID = textId }; WowGuid guid = packet.WriteGuid("Guid", guidBytes); gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); if (guid.GetObjectType() == ObjectType.Unit) if (Storage.Objects.ContainsKey(guid)) ((Unit)Storage.Objects[guid].Item1).GossipId = menuId; gossipOptions.ForEach(g => { g.MenuID = menuId; Storage.GossipMenuOptions.Add(g, packet.TimeSpan); }); Storage.Gossips.Add(gossip, packet.TimeSpan); packet.AddSniffData(StoreNameType.Gossip, (int)menuId, guid.GetEntry().ToString(CultureInfo.InvariantCulture)); }
public static void HandleNpcGossip(Packet packet) { var guid = new byte[8]; uint[] titleLen; uint[] BoxTextLen; uint[] OptionTextLen; var questgossips = packet.ReadBits(19); titleLen = new uint[questgossips]; for (var i = 0; i < questgossips; ++i) { packet.ReadBit("Change Icon", i); titleLen[i] = packet.ReadBits(9); } guid[5] = packet.ReadBit(); guid[7] = packet.ReadBit(); guid[4] = packet.ReadBit(); guid[0] = packet.ReadBit(); var AmountOfOptions = packet.ReadBits(20); guid[6] = packet.ReadBit(); guid[2] = packet.ReadBit(); BoxTextLen = new uint[AmountOfOptions]; OptionTextLen = new uint[AmountOfOptions]; for (var i = 0; i < AmountOfOptions; ++i) { BoxTextLen[i] = packet.ReadBits(12); OptionTextLen[i] = packet.ReadBits(12); } guid[3] = packet.ReadBit(); guid[1] = packet.ReadBit(); for (var i = 0; i < questgossips; ++i) { packet.ReadWoWString("Title", titleLen[i], i); packet.ReadUInt32E<QuestFlags>("Flags", i);//528 packet.ReadInt32("Level", i);//8 packet.ReadUInt32("Icon", i);//4 packet.ReadUInt32<QuestId>("Quest ID", i); //528 packet.ReadUInt32E<QuestFlags2>("Flags 2", i);//532 } packet.ReadXORByte(guid, 1); packet.ReadXORByte(guid, 0); var gossipOptions = new List<GossipMenuOption>((int)AmountOfOptions); for (var i = 0; i < AmountOfOptions; ++i) { GossipMenuOption gossipMenuOption = new GossipMenuOption { BoxMoney = packet.ReadUInt32("Required money", i),//3012 BoxText = packet.ReadWoWString("Box Text", BoxTextLen[i], i),//12 ID = packet.ReadUInt32("Index", i),//0 BoxCoded = packet.ReadBool("Box", i), OptionText = packet.ReadWoWString("Text", OptionTextLen[i], i), OptionIcon = packet.ReadByteE<GossipOptionIcon>("Icon", i),//4 }; gossipOptions.Add(gossipMenuOption); } packet.ReadXORByte(guid, 5); packet.ReadXORByte(guid, 3); var menuId = packet.ReadUInt32("Menu Id"); packet.ReadXORByte(guid, 2); packet.ReadXORByte(guid, 6); packet.ReadXORByte(guid, 4); packet.ReadUInt32("Friendship Faction"); packet.ReadXORByte(guid, 7); var textId = packet.ReadUInt32("Text Id"); packet.WriteGuid("Guid", guid); GossipMenu gossip = new GossipMenu { Entry = menuId, TextID = textId }; WowGuid guidb = packet.WriteGuid("Guid", guid); gossip.ObjectType = guidb.GetObjectType(); gossip.ObjectEntry = guidb.GetEntry(); if (guidb.GetObjectType() == ObjectType.Unit) if (!Storage.Objects.IsEmpty() && Storage.Objects.ContainsKey(guidb)) ((Unit)Storage.Objects[guidb].Item1).GossipId = menuId; gossipOptions.ForEach(g => { g.MenuID = menuId; Storage.GossipMenuOptions.Add(g, packet.TimeSpan); }); Storage.Gossips.Add(gossip, packet.TimeSpan); packet.AddSniffData(StoreNameType.Gossip, (int)menuId, guidb.GetEntry().ToString(CultureInfo.InvariantCulture)); }