public static void HandleDestroyObject(Packet packet) { packet.ReadGuid("GUID"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) packet.ReadBoolean("Despawn Animation"); }
public static void Handle41694(Packet packet) { var count = packet.ReadInt32("Count"); for (var i = 0; i < count; i++) packet.ReadInt32("Unk"); for (var i = 0; i < count; i++) packet.ReadGuid("Unk"); for (var i = 0; i < count; i++) { var count2 = packet.ReadInt32("Unk"); for (var j = 0; j < count2; j++) packet.ReadInt64("Unk"); } for (var i = 0; i < count; i++) packet.ReadInt32("Unk"); for (var i = 0; i < count; i++) { packet.ReadInt32("Unk"); packet.ReadInt32("Unk"); } for (var i = 0; i < count; i++) packet.ReadInt32("Unk"); for (var i = 0; i < count; i++) packet.WriteLine(packet.ReadPackedTime()); }
public static void HandleActivateTaxiExpress(Packet packet) { packet.ReadGuid("GUID"); var count = packet.ReadUInt32("Node Count"); for (var i = 0; i < count; ++i) packet.ReadUInt32("Node ID", i); }
public static void HandleVoiceRosterUpdate(Packet packet) { packet.ReadGuid("Group GUID"); packet.ReadInt16("Channel ID"); packet.ReadByte("Channel Type"); // 0: channel, 2: party packet.ReadCString("Channel Name"); packet.ReadBytes("Encryption Key", 16); packet.ReadIPAddress("IP"); packet.ReadInt16("Voice Server Port"); var count = packet.ReadByte("Player Count"); packet.ReadGuid("Leader GUID"); var leaderFlags1 = packet.ReadByte(); packet.AddValue("Leader Flags 1", "0x" + leaderFlags1.ToString("X2")); var leaderFlags2 = packet.ReadByte(); packet.AddValue("Leader Flags 2", "0x" + leaderFlags2.ToString("X2")); for (var i = 0; i < count - 1; i++) { packet.ReadGuid("Player GUID"); packet.ReadByte("Index"); var flags1 = packet.ReadByte(); packet.AddValue("Flags 1", "0x" + flags1.ToString("X2")); var flags2 = packet.ReadByte(); packet.AddValue("Flags 2", "0x" + flags2.ToString("X2")); } }
public static void HandleVoiceRosterUpdate(Packet packet) { packet.ReadGuid("Group GUID"); packet.ReadInt16("Channel ID"); packet.ReadByte("Channel Type"); // 0: channel, 2: party packet.ReadCString("Channel Name"); packet.WriteLine("Encryption Key: " + Utilities.ByteArrayToHexString(packet.ReadBytes(16))); packet.WriteLine("IP: " + packet.ReadIPAddress()); packet.ReadInt16("Voice Server Port"); var count = packet.ReadByte("Player Count"); packet.ReadGuid("Leader GUID"); var leaderFlags1 = packet.ReadByte(); packet.WriteLine("Leader Flags 1: 0x" + leaderFlags1.ToString("X2")); var leaderFlags2 = packet.ReadByte(); packet.WriteLine("Leader Flags 2: 0x" + leaderFlags2.ToString("X2")); for (var i = 0; i < count - 1; i++) { packet.ReadGuid("Player GUID"); packet.ReadByte("Index"); var flags1 = packet.ReadByte(); packet.WriteLine("Flags 1: 0x" + flags1.ToString("X2")); var flags2 = packet.ReadByte(); packet.WriteLine("Flags 2: 0x" + flags2.ToString("X2")); } }
public static void HandleAvailableVoiceChannel(Packet packet) { packet.ReadGuid("Group GUID"); packet.ReadByte("Channel Type"); packet.ReadCString("Channel Name"); packet.ReadGuid("Player GUID"); }
public static void HandlePetAction(Packet packet) { packet.ReadGuid("GUID"); var action = (uint)packet.ReadUInt16() + (packet.ReadByte() << 16); packet.Writer.WriteLine("Action: {0}", action); packet.ReadEnum<ActionButtonType>("Type", TypeCode.Byte); packet.ReadGuid("GUID"); }
public static void HandleAuraCastLog(Packet packet) { packet.ReadGuid("Caster GUID"); packet.ReadGuid("Target GUID"); packet.ReadEntryWithName<UInt32>(StoreNameType.Spell, "Spell ID"); packet.ReadSingle("Unk 1"); packet.ReadSingle("Unk 2"); }
public static void HandleAuraCastLog(Packet packet) { packet.ReadGuid("Caster GUID"); packet.ReadGuid("Target GUID"); packet.ReadUInt32<SpellId>("Spell ID"); packet.ReadSingle("Unk 1"); packet.ReadSingle("Unk 2"); }
public static void HandlePetAction(Packet packet) { packet.ReadGuid("GUID"); var action = (uint)packet.ReadUInt16() + (packet.ReadByte() << 16); packet.AddValue("Action", action); packet.ReadByteE<ActionButtonType>("Type"); packet.ReadGuid("GUID"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_6_13596)) packet.ReadVector3("Position"); }
public static void HandlePetAction(Packet packet) { packet.ReadGuid("GUID"); var action = (uint)packet.ReadUInt16() + (packet.ReadByte() << 16); packet.WriteLine("Action: {0}", action); packet.ReadEnum<ActionButtonType>("Type", TypeCode.Byte); packet.ReadGuid("GUID"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_2_14545)) packet.ReadVector3("Position"); }
public static void HandleBuyItemInSlot(Packet packet) { packet.ReadGuid("Vendor GUID"); packet.ReadUInt32("Item ID"); packet.ReadUInt32("Slot"); packet.ReadUInt32("Count"); packet.ReadGuid("Bag GUID"); packet.ReadByte("Bag Slot"); packet.ReadByte("Count"); }
public static void HandleBuyItemInSlot(Packet packet) { packet.ReadGuid("Vendor GUID"); packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry"); packet.ReadUInt32("Slot"); packet.ReadUInt32("Count"); packet.ReadGuid("Bag GUID"); packet.ReadByte("Bag Slot"); packet.ReadByte("Count"); }
public static void HandleInspectTalent(Packet packet) { if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_6a_13623)) packet.ReadGuid("GUID"); else packet.ReadPackedGuid("GUID"); if (packet.Opcode == Opcodes.GetOpcode(Opcode.SMSG_INSPECT_TALENT)) ReadTalentInfo(ref packet); var slotMask = packet.ReadUInt32("Slot Mask"); var slot = 0; while (slotMask > 0) { if ((slotMask & 0x1) > 0) { var name = "[" + (EquipmentSlotType)slot + "] "; packet.ReadEntryWithName<UInt32>(StoreNameType.Item, name + "Item Entry"); var enchantMask = packet.ReadUInt16(); if (enchantMask > 0) { var enchantName = name + "Item Enchantments: "; while (enchantMask > 0) { if ((enchantMask & 0x1) > 0) { enchantName += packet.ReadUInt16(); if (enchantMask > 1) enchantName += ", "; } enchantMask >>= 1; } packet.WriteLine(enchantName); } packet.ReadUInt16(name + "Unk Uint16"); packet.ReadPackedGuid(name + "Creator GUID"); packet.ReadUInt32(name + "Unk Uint32"); } ++slot; slotMask >>= 1; } if (packet.Opcode == Opcodes.GetOpcode(Opcode.SMSG_INSPECT_TALENT) && packet.CanRead()) // otherwise it would fail for players without a guild { packet.ReadGuid("Guild GUID"); packet.ReadUInt32("Guild Level"); packet.ReadUInt64("Guild Xp"); packet.ReadUInt32("Guild Members"); } }
public static void HandleGroupList(Packet packet) { var grouptype = packet.ReadEnum<GroupTypeFlag>("Group Type", TypeCode.Byte); packet.ReadByte("Sub Group"); packet.ReadEnum<GroupUpdateFlag>("Flags", TypeCode.Byte); packet.ReadByte("Player's Role"); if (grouptype.HasAnyFlag(GroupTypeFlag.LookingForDungeon)) { packet.ReadEnum<InstanceStatus>("Group Type Status", TypeCode.Byte); packet.ReadLfgEntry("LFG Entry"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_2_14545)) packet.ReadBoolean("Unk bool"); } packet.ReadGuid("Group GUID"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_0_10958)) packet.ReadInt32("Counter"); var numFields = packet.ReadInt32("Member Count"); for (var i = 0; i < numFields; i++) { packet.ReadCString("[" + i + "] Name"); packet.ReadGuid("[" + i + "] GUID"); packet.ReadEnum<GroupMemberStatusFlag>("[" + i + "] Status", TypeCode.Byte); packet.ReadByte("[" + i + "] Sub Group"); packet.ReadEnum<GroupUpdateFlag>("[" + i + "] Update Flags", TypeCode.Byte); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_0_10958)) packet.ReadEnum<LfgRoleFlag>("[" + i + "] Role", TypeCode.Byte); } packet.ReadGuid("Leader GUID"); if (numFields <= 0) return; packet.ReadEnum<LootMethod>("Loot Method", TypeCode.Byte); packet.ReadGuid("Looter GUID"); packet.ReadEnum<ItemQuality>("Loot Threshold", TypeCode.Byte); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_2_0_10192)) packet.ReadEnum<MapDifficulty>("Dungeon Difficulty", TypeCode.Byte); packet.ReadEnum<MapDifficulty>("Raid Difficulty", TypeCode.Byte); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_0_10958) && ClientVersion.RemovedInVersion(ClientVersionBuild.V4_2_2_14545)) // Removed somewhere between wotlk and cataclysm packet.ReadByte("Unk Byte"); // Has something to do with difficulty too }
public static void HandleAttackStartStart(Packet packet) { Misc.Guid creature = packet.ReadGuid("GUID"); packet.ReadGuid("Victim GUID"); if (creature.HasEntry() && creature.GetObjectType() == ObjectType.Unit) { CombatState combatState = new CombatState(packet.Time, packet.Number, "Attack Start"); if (packet.SniffFileInfo.Stuffing.combatStates.ContainsKey(creature)) packet.SniffFileInfo.Stuffing.combatStates[creature].combateStates.Enqueue(combatState); else packet.SniffFileInfo.Stuffing.combatStates.TryAdd(creature, new CombateStates(combatState)); } }
public static void HandleAllAchievementData422(Packet packet) { var count1 = packet.ReadUInt32("Count1"); for (var i = 0; i < count1; ++i) packet.ReadBits("Flag", 2, 0, i); for (var i = 0; i < count1; ++i) packet.ReadUInt64("Counter", 0, i); var count2 = packet.ReadUInt32("Count2"); for (var i = 0; i < count2; ++i) packet.ReadPackedTime("Achievement Time", 1, i); for (var i = 0; i < count1; ++i) packet.ReadGuid("Player GUID", 0, i); for (var i = 0; i < count1; ++i) packet.ReadPackedTime("Criteria Time", 0, i); for (var i = 0; i < count1; ++i) packet.ReadUInt32("Timer 1", 0, i); for (var i = 0; i < count2; ++i) packet.ReadUInt32("Achievement Id", 1, i); for (var i = 0; i < count1; ++i) packet.ReadUInt32("Criteria Id", 0, i); for (var i = 0; i < count1; ++i) packet.ReadUInt32("Timer 2", 0, i); }
public static void HandleArenaTeamRoster(Packet packet) { packet.ReadUInt32("Team Id"); var unk = packet.ReadByte("Unk Byte"); var count = packet.ReadUInt32("Member count"); packet.ReadUInt32("Type"); for (var i = 0; i < count; i++) { packet.ReadGuid("[" + i + "] GUID"); packet.ReadBoolean("[" + i + "] Online"); packet.ReadCString("[" + i + "] Name"); packet.ReadUInt32("[" + i + "] Captain"); packet.ReadByte("[" + i + "] Level"); packet.ReadByte("[" + i + "] Class"); packet.ReadUInt32("[" + i + "] Week Games"); packet.ReadUInt32("[" + i + "] Week Win"); packet.ReadUInt32("[" + i + "] Seasonal Games"); packet.ReadUInt32("[" + i + "] Seasonal Wins"); packet.ReadUInt32("[" + i + "] Personal Rating"); if (unk > 0) { packet.ReadSingle("[" + i + "] Unk float 1"); packet.ReadSingle("[" + i + "] Unk float 2"); } } }
public static void HandleServerFirstAchievement(Packet packet) { packet.ReadCString("Player Name"); packet.ReadGuid("Player GUID"); packet.ReadInt32("Achievement"); packet.ReadInt32("Linked Name"); }
public static void HandleArenaTeamRoster(Packet packet) { packet.ReadUInt32("Team Id"); var unk = packet.ReadByte("Unk Byte"); var count = packet.ReadUInt32("Member count"); packet.ReadUInt32("Type"); for (var i = 0; i < count; i++) { packet.ReadGuid(" GUID", i); packet.ReadBoolean("Online", i); packet.ReadCString("Name", i); packet.ReadUInt32("Captain", i); packet.ReadByte("Level", i); packet.ReadByte("Class", i); packet.ReadUInt32("Week Games", i); packet.ReadUInt32("Week Win", i); packet.ReadUInt32("Seasonal Games", i); packet.ReadUInt32("Seasonal Wins", i); packet.ReadUInt32("Personal Rating", i); if (unk > 0) { packet.ReadSingle("Unk float 1", i); packet.ReadSingle("Unk float 2", i); } } }
public static void HandleContactList(Packet packet) { packet.ReadEnum<ContactListFlag>("List Flags", TypeCode.Int32); var count = packet.ReadInt32("Count"); for (var i = 0; i < count; i++) { packet.ReadGuid("GUID"); packet.ReadInt32("Unk int1"); packet.ReadInt32("Unk int2"); var flag = packet.ReadEnum<ContactEntryFlag>("Flags", TypeCode.Int32); packet.ReadCString("Note"); if (!flag.HasAnyFlag(ContactEntryFlag.Friend)) continue; var status = packet.ReadEnum<ContactStatus>("Status", TypeCode.Byte); if (status == 0) // required any flag continue; packet.ReadEntry<Int32>(StoreNameType.Area, "Area"); packet.ReadInt32("Level"); packet.ReadEnum<Class>("Class", TypeCode.Int32); } // still needed? if (packet.CanRead()) CoreParsers.WardenHandler.ReadCheatCheckDecryptionBlock(ref packet); }
public static void HandleFriendStatus(Packet packet) { var result = packet.ReadByteE<ContactResult>("Result"); packet.ReadGuid("GUID"); switch (result) { case ContactResult.FriendAddedOffline: packet.ReadCString("Note"); break; case ContactResult.FriendAddedOnline: { packet.ReadCString("Note"); ReadSingleContactBlock(packet, false); break; } case ContactResult.Online: ReadSingleContactBlock(packet, false); break; case ContactResult.Unknown2: packet.ReadByte("Unk byte 1"); break; case ContactResult.Unknown3: packet.ReadInt32("Unk int"); break; } }
public static void HandleContactList(Packet packet) { packet.ReadInt32E<ContactListFlag>("List Flags"); var count = packet.ReadInt32("Count"); for (var i = 0; i < count; i++) { packet.ReadGuid("GUID"); packet.ReadInt32("Realm Id"); packet.ReadInt32("Realm Id"); var flag = packet.ReadInt32E<ContactEntryFlag>("Flags"); packet.ReadCString("Note"); if (!flag.HasAnyFlag(ContactEntryFlag.Friend)) continue; var status = packet.ReadByteE<ContactStatus>("Status"); if (status == 0) // required any flag continue; packet.ReadInt32<AreaId>("Area"); packet.ReadInt32("Level"); packet.ReadInt32E<Class>("Class"); } // still needed? if (packet.CanRead()) CoreParsers.WardenHandler.ReadCheatCheckDecryptionBlock(packet); }
public static void HandleLootResponse(Packet packet) { var loot = new Loot(); var guid = packet.ReadGuid("GUID"); var lootType = packet.ReadEnum<LootType>("Loot Type", TypeCode.Byte); if (lootType == LootType.Unk0) { packet.ReadByte("Slot"); return; } loot.Gold = packet.ReadUInt32("Gold"); var count = packet.ReadByte("Drop Count"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_0_14333)) packet.ReadByte("unk"); loot.LootItems = new List<LootItem>(count); for (var i = 0; i < count; ++i) { var lootItem = new LootItem(); packet.ReadByte("Slot", i); lootItem.ItemId = (uint) packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry", i); lootItem.Count = packet.ReadUInt32("Count", i); packet.ReadUInt32("Display ID", i); packet.ReadInt32("Random Suffix", i); packet.ReadInt32("Random Property Id", i); lootItem.SlotType = packet.ReadEnum<LootSlotType>("Slot Type", TypeCode.Byte, i); loot.LootItems.Add(lootItem); } Stuffing.Loots.TryAdd(new Tuple<uint, LootType>(guid.GetEntry(), lootType), loot); }
public static void HandleAllAchievementData406(Packet packet) { var achievements = packet.ReadUInt32("Achievement count"); var criterias = packet.ReadUInt32("Criterias count"); for (var i = 0; i < achievements; ++i) packet.ReadUInt32("Achievement Id", i); for (var i = 0; i < achievements; ++i) packet.ReadPackedTime("Achievement Time", i); for (var i = 0; i < criterias; ++i) packet.ReadUInt64("Counter", i); for (var i = 0; i < criterias; ++i) packet.ReadUInt32("Criteria Timer 1", i); for (var i = 0; i < criterias; ++i) packet.ReadPackedTime("Criteria Time", i); for (var i = 0; i < criterias; ++i) packet.ReadGuid("Player GUID", i); for (var i = 0; i < criterias; ++i) packet.ReadUInt32("Criteria Timer 2", i); for (var i = 0; i < criterias; ++i) packet.ReadBits("Flag", 2, i); for (var i = 0; i < criterias; ++i) packet.ReadUInt32("Criteria Id", i); }
public static void HandleAuctionListBidderResult(Packet packet) { var count = packet.ReadUInt32("Count"); for (var i = 0; i < count; ++i) { packet.ReadUInt32("Auction Id", i); packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Item Entry", i); for (var j = 0; j < 7; ++j) { packet.ReadUInt32("Item Enchantment ID", i, j); packet.ReadUInt32("Item Enchantment Duration", i, j); packet.ReadUInt32("Item Enchantment Charges", i, j); } packet.ReadInt32("Item Random Property ID", i); packet.ReadUInt32("Item Suffix", i); packet.ReadUInt32("Item Count", i); packet.ReadInt32("Item Spell Charges", i); //packet.ReadEnum<ItemFlag>("Item Flags", TypeCode.UInt32, i); packet.ReadUInt32("Unk UInt32 1", i); packet.ReadGuid("Owner", i); packet.ReadUInt32("Start Bid", i); packet.ReadUInt32("Out Bid", i); packet.ReadUInt32("Buyout ", i); packet.ReadUInt32("Time Left", i); packet.ReadGuid("Bidder", i); packet.ReadUInt32("Bid", i); } packet.ReadUInt32("Own Count"); packet.ReadUInt32("Unk UInt32 1"); }
public static void HandleContactList(Packet packet) { packet.ReadInt32E<ContactListFlag>("List Flags"); var count = packet.ReadInt32("Count"); for (var i = 0; i < count; i++) { packet.ReadGuid("GUID"); packet.ReadInt32("Realm Id"); packet.ReadInt32("Realm Id"); var flag = packet.ReadInt32E<ContactEntryFlag>("Flags"); packet.ReadCString("Note"); if (!flag.HasAnyFlag(ContactEntryFlag.Friend)) continue; var status = packet.ReadByteE<ContactStatus>("Status"); if (status == 0) // required any flag continue; packet.ReadInt32<AreaId>("Area"); packet.ReadInt32("Level"); packet.ReadInt32E<Class>("Class"); } }
public static void HandleBuyItemResponse(Packet packet) { packet.ReadGuid("Vendor GUID"); packet.ReadUInt32("Slot"); packet.ReadInt32("New Count"); packet.ReadUInt32("Count"); }
public static void HandleUpdateObject(Packet packet) { uint map = MovementHandler.CurrentMapId; if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_1_13164)) map = packet.ReadUInt16("Map"); var count = packet.ReadUInt32("Count"); if (ClientVersion.RemovedInVersion(ClientVersionBuild.V3_0_2_9056)) packet.ReadBoolean("Has Transport"); for (var i = 0; i < count; i++) { var type = packet.ReadByte(); var typeString = ClientVersion.AddedInVersion(ClientType.Cataclysm) ? ((UpdateTypeCataclysm)type).ToString() : ((UpdateType)type).ToString(); packet.WriteLine("[" + i + "] UpdateType: " + typeString); switch (typeString) { case "Values": { var guid = packet.ReadPackedGuid("GUID", i); WoWObject obj; var updates = ReadValuesUpdateBlock(ref packet, guid.GetObjectType(), i, false); if (Storage.Objects.TryGetValue(guid, out obj)) { if (obj.ChangedUpdateFieldsList == null) obj.ChangedUpdateFieldsList = new List<Dictionary<int, UpdateField>>(); obj.ChangedUpdateFieldsList.Add(updates); } break; } case "Movement": { var guid = ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_2_9901) ? packet.ReadPackedGuid("GUID", i) : packet.ReadGuid("GUID", i); ReadMovementUpdateBlock(ref packet, guid, i); // Should we update Storage.Object? break; } case "CreateObject1": case "CreateObject2": // Might != CreateObject1 on Cata { var guid = packet.ReadPackedGuid("GUID", i); ReadCreateObjectBlock(ref packet, guid, map, i); break; } case "FarObjects": case "NearObjects": case "DestroyObjects": { ReadObjectsBlock(ref packet, i); break; } } } }
public static void HandleCharEnum(Packet packet) { var count = packet.ReadByte("Count"); for (var i = 0; i < count; i++) { var guid = packet.ReadGuid("GUID"); var name = packet.ReadCString("Name"); var race = packet.ReadEnum<Race>("Race", TypeCode.Byte); var clss = packet.ReadEnum<Class>("Class", TypeCode.Byte); packet.ReadEnum<Gender>("Gender", TypeCode.Byte); packet.ReadByte("Skin"); packet.ReadByte("Face"); packet.ReadByte("Hair Style"); packet.ReadByte("Hair Color"); packet.ReadByte("Facial Hair"); var level = packet.ReadByte("Level"); var zone = packet.ReadEntryWithName<UInt32>(StoreNameType.Zone, "Zone Id"); var mapId = packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map Id"); var pos = packet.ReadVector3("Position"); packet.ReadInt32("Guild Id"); packet.ReadEnum<CharacterFlag>("Character Flags", TypeCode.Int32); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) packet.ReadEnum<CustomizationFlag>("Customization Flags", TypeCode.Int32); var firstLogin = packet.ReadBoolean("First Login"); packet.ReadInt32("Pet Display Id"); packet.ReadInt32("Pet Level"); packet.ReadEnum<CreatureFamily>("Pet Family", TypeCode.Int32); for (var j = 0; j < 19; j++) { packet.ReadInt32("Equip Display Id"); packet.ReadEnum<InventoryType>("Equip Inventory Type", TypeCode.Byte); packet.ReadInt32("Equip Aura Id"); } int bagCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_3_11685) ? 4 : 1; for (var j = 0; j < bagCount; j++) { packet.ReadInt32("Bag Display Id"); packet.ReadEnum<InventoryType>("Bag Inventory Type", TypeCode.Byte); packet.ReadInt32("Bag Aura Id"); } if (firstLogin) { var startPos = new StartPosition {Map = mapId, Position = pos, Zone = zone}; packet.SniffFileInfo.Storage.StartPositions.TryAdd(new Tuple<Race, Class>(race, clss), startPos); } var playerInfo = new Player {Race = race, Class = clss, Name = name, FirstLogin = firstLogin, Level = level}; packet.SniffFileInfo.Storage.Objects.AddOrUpdate(guid, playerInfo); } }