public static void HandleDBQueryBulk(ref PacketReader packet, ref WorldClass session) { var type = (DBTypes)packet.ReadUInt32(); var unknown = packet.ReadInt32(); var id = packet.ReadInt32(); switch (type) { case DBTypes.BroadcastText: { var broadCastText = GossipMgr.GetBroadCastText<Creature>(id); PacketWriter dbReply = new PacketWriter(JAMCMessage.DBReply); BitPack BitPack = new BitPack(dbReply); var textLength = broadCastText.Text.Length; var alternativeTextLength = broadCastText.AlternativeText.Length; var size = 48; if (textLength == 0 || alternativeTextLength == 0) size += 1; size += textLength + alternativeTextLength; dbReply.WriteUInt32((uint)size); dbReply.WriteInt32(broadCastText.Id); dbReply.WriteInt32(broadCastText.Language); dbReply.WriteUInt16((ushort)broadCastText.Text.Length); dbReply.WriteString(broadCastText.Text); dbReply.WriteUInt16((ushort)broadCastText.AlternativeText.Length); dbReply.WriteString(broadCastText.AlternativeText); broadCastText.Emotes.ForEach(emote => dbReply.WriteInt32(emote)); dbReply.WriteUInt32(1); dbReply.WriteUInt32(0); // UnixTime, last change server side dbReply.WriteUInt32((uint)DBTypes.BroadcastText); dbReply.WriteInt32(broadCastText.Id); session.Send(ref dbReply); break; } } }
public static void HandleBroadcastText(ref WorldClass session, int id) { var broadCastText = GossipMgr.GetBroadCastText<Creature>(id); PacketWriter dbReply = new PacketWriter(ServerMessage.DBReply); BitPack BitPack = new BitPack(dbReply); var textLength = broadCastText.Text.Length; var alternativeTextLength = broadCastText.AlternativeText.Length; var size = 48; if (textLength == 0 || alternativeTextLength == 0) size += 1; size += textLength + alternativeTextLength; dbReply.WriteUInt32(0); // UnixTime, last change server side dbReply.WriteUInt32((uint)DBTypes.BroadcastText); dbReply.WriteUInt32((uint)size); dbReply.WriteInt32(broadCastText.Id); dbReply.WriteInt32(broadCastText.Language); dbReply.WriteUInt16((ushort)broadCastText.Text.Length); dbReply.WriteString(broadCastText.Text); dbReply.WriteUInt16((ushort)broadCastText.AlternativeText.Length); dbReply.WriteString(broadCastText.AlternativeText); broadCastText.Emotes.ForEach(emote => dbReply.WriteInt32(emote)); dbReply.WriteUInt32(1); dbReply.WriteInt32(broadCastText.Id); session.Send(ref dbReply); }
public static void HandleRealmSplit(ref PacketReader packet, ref WorldClass session) { uint realmSplitState = 0; var date = "01/01/01"; PacketWriter realmSplit = new PacketWriter(ServerMessage.RealmSplit); BitPack BitPack = new BitPack(realmSplit); BitPack.Write(date.Length, 7); realmSplit.WriteString(date); realmSplit.WriteUInt32(packet.Read<uint>()); realmSplit.WriteUInt32(realmSplitState); session.Send(ref realmSplit); // Crash!!! // Wrong data sent... // AddonMgr.WriteAddonData(ref session); }
public static void HandleRealmSplit(ref PacketReader packet, WorldClass session) { uint realmSplitState = 0; var date = "01/01/01"; PacketWriter realmSplit = new PacketWriter(ServerMessage.RealmSplit); BitPack BitPack = new BitPack(realmSplit); realmSplit.WriteUInt32(packet.Read<uint>()); realmSplit.WriteUInt32(realmSplitState); BitPack.Write(date.Length, 7); BitPack.Flush(); realmSplit.WriteString(date); session.Send(ref realmSplit); AddonHandler.WriteAddonData(session); }
public static void HandleQueryRealmName(ref PacketReader packet, ref WorldClass session) { Character pChar = session.Character; uint realmId = packet.Read<uint>(); SQLResult result = DB.Realms.Select("SELECT name FROM realms WHERE id = ?", WorldConfig.RealmId); string realmName = result.Read<string>(0, "Name"); PacketWriter realmQueryResponse = new PacketWriter(ServerMessage.RealmQueryResponse); BitPack BitPack = new BitPack(realmQueryResponse); realmQueryResponse.WriteUInt8(0); realmQueryResponse.WriteUInt32(realmId); // <= 0 => End of packet BitPack.Write(realmName.Length, 8); BitPack.Write(realmName.Length, 8); BitPack.Write(1); BitPack.Flush(); realmQueryResponse.WriteString(realmName); realmQueryResponse.WriteString(realmName); session.Send(ref realmQueryResponse); }
public static void HandleQueryPlayerName(ref PacketReader packet, ref WorldClass session) { BitUnpack BitUnpack = new BitUnpack(packet); byte[] guidMask = { 2, 1, 5, 7, 4, 3, 6, 0 }; byte[] guidBytes = { 3, 2, 6, 1, 0, 4, 5, 7 }; uint realmId = packet.Read<uint>(); ulong guid = BitUnpack.GetPackedValue(guidMask, guidBytes); var pSession = WorldMgr.GetSession(guid); if (pSession != null) { var pChar = pSession.Character; if (pChar != null) { PacketWriter queryPlayerNameResponse = new PacketWriter(ServerMessage.QueryPlayerNameResponse); BitPack BitPack = new BitPack(queryPlayerNameResponse, guid); BitPack.WriteGuidMask(7, 3, 0, 2, 1, 6); BitPack.Write(pChar.Name.Length, 6); BitPack.WriteGuidMask(4); BitPack.Write(0); BitPack.WriteGuidMask(5); BitPack.Write(0); BitPack.Flush(); BitPack.WriteGuidBytes(2, 7); queryPlayerNameResponse.WriteUInt8(0); BitPack.WriteGuidBytes(5, 6, 4, 1); queryPlayerNameResponse.WriteUInt8(pChar.Gender); queryPlayerNameResponse.WriteUInt8(pChar.Race); queryPlayerNameResponse.WriteUInt32(realmId); queryPlayerNameResponse.WriteUInt8(pChar.Class); BitPack.WriteGuidBytes(3, 0); queryPlayerNameResponse.WriteString(pChar.Name); session.Send(ref queryPlayerNameResponse); } } }
public static void HandleMessageOfTheDay(ref WorldClass session) { PacketWriter motd = new PacketWriter(ServerMessage.MOTD); BitPack BitPack = new BitPack(motd); List<string> motds = new List<string>(); motds.Add("Arctium MoP test"); motds.Add("Welcome to our MoP server test."); motds.Add("Your development team =)"); BitPack.Write<uint>(3, 4); motds.ForEach(m => BitPack.Write(m.Length, 7)); BitPack.Flush(); motds.ForEach(m => motd.WriteString(m)); session.Send(ref motd); }
public static void HandleGenerateRandomCharacterName(ref PacketReader packet, WorldClass session) { var race = packet.ReadByte(); var gender = packet.ReadByte(); List<string> names = CliDB.NameGen.Where(n => n.Race == race && n.Gender == gender).Select(n => n.Name).ToList(); Random rand = new Random(Environment.TickCount); string NewName; SQLResult result; do { NewName = names[rand.Next(names.Count)]; result = DB.Characters.Select("SELECT * FROM characters WHERE name = ?", NewName); } while (result.Count != 0); PacketWriter generateRandomCharacterNameResult = new PacketWriter(ServerMessage.GenerateRandomCharacterNameResult); BitPack BitPack = new BitPack(generateRandomCharacterNameResult); BitPack.Write(1); BitPack.Write(NewName.Length, 6); BitPack.Flush(); generateRandomCharacterNameResult.WriteString(NewName); session.Send(ref generateRandomCharacterNameResult); }
public static void HandleEnumCharactersResult(ref PacketReader packet, WorldClass session) { // Set existing character from last world session to null session.Character = null; DB.Realms.Execute("UPDATE accounts SET online = 1 WHERE id = ?", session.Account.Id); SQLResult result = DB.Characters.Select("SELECT * FROM characters WHERE accountid = ?", session.Account.Id); PacketWriter enumCharacters = new PacketWriter(ServerMessage.EnumCharactersResult); BitPack BitPack = new BitPack(enumCharacters); BitPack.Write(0, 21); BitPack.Write(result.Count, 16); for (int c = 0; c < result.Count; c++) { var name = result.Read<string>(c, "Name"); var loginCinematic = result.Read<bool>(c, "LoginCinematic"); BitPack.Guid = result.Read<ulong>(c, "Guid"); BitPack.GuildGuid = result.Read<ulong>(c, "GuildGuid"); BitPack.WriteGuidMask(0); BitPack.WriteGuildGuidMask(4); BitPack.WriteGuidMask(7); BitPack.WriteGuildGuidMask(3, 7); BitPack.WriteGuidMask(5, 4, 6); BitPack.WriteGuildGuidMask(1); BitPack.WriteGuidMask(3, 2); BitPack.WriteGuildGuidMask(0, 2); BitPack.WriteGuidMask(1); BitPack.WriteGuildGuidMask(5); BitPack.Write(loginCinematic); BitPack.WriteGuildGuidMask(6); BitPack.Write((uint)UTF8Encoding.UTF8.GetBytes(name).Length, 6); } BitPack.Write(1); BitPack.Flush(); for (int c = 0; c < result.Count; c++) { string name = result.Read<string>(c, "Name"); BitPack.Guid = result.Read<ulong>(c, "Guid"); BitPack.GuildGuid = result.Read<ulong>(c, "GuildGuid"); enumCharacters.WriteUInt32(result.Read<uint>(c, "PetLevel")); enumCharacters.WriteUInt8(result.Read<byte>(c, "Level")); BitPack.WriteGuildGuidBytes(2, 3); //TODO: implement items for (int j = 0; j < 23; j++) { enumCharacters.WriteUInt32(0); enumCharacters.WriteUInt32(0); enumCharacters.WriteUInt8(0); } BitPack.WriteGuildGuidBytes(6); enumCharacters.WriteUInt8(0); enumCharacters.WriteUInt8(result.Read<byte>(c, "HairStyle")); enumCharacters.WriteUInt32(result.Read<uint>(c, "CustomizeFlags")); enumCharacters.WriteUInt8(result.Read<byte>(c, "Class")); BitPack.WriteGuildGuidBytes(7); BitPack.WriteGuidBytes(0); enumCharacters.WriteUInt32(result.Read<uint>(c, "PetFamily")); BitPack.WriteGuildGuidBytes(1); BitPack.WriteGuidBytes(3, 7, 2); BitPack.WriteGuildGuidBytes(5); enumCharacters.WriteUInt8(result.Read<byte>(c, "Gender")); enumCharacters.WriteUInt32(result.Read<uint>(c, "PetDisplayId")); enumCharacters.WriteUInt32(result.Read<uint>(c, "Zone")); BitPack.WriteGuidBytes(6); enumCharacters.WriteUInt8(result.Read<byte>(c, "HairColor")); enumCharacters.WriteUInt8(result.Read<byte>(c, "FacialHair")); enumCharacters.WriteString(name); enumCharacters.WriteUInt8(result.Read<byte>(c, "Race")); BitPack.WriteGuildGuidBytes(4); enumCharacters.WriteUInt8(result.Read<byte>(c, "Skin")); enumCharacters.WriteUInt32(result.Read<uint>(c, "Map")); enumCharacters.WriteUInt32(result.Read<uint>(c, "CharacterFlags")); enumCharacters.WriteFloat(result.Read<float>(c, "Y")); BitPack.WriteGuildGuidBytes(0); BitPack.WriteGuidBytes(4, 1); enumCharacters.WriteFloat(result.Read<float>(c, "Z")); BitPack.WriteGuidBytes(5); enumCharacters.WriteUInt8(result.Read<byte>(c, "Face")); enumCharacters.WriteFloat(result.Read<float>(c, "X")); } session.Send(ref enumCharacters); }
public static void SendMessage(ref WorldClass session, ChatMessageValues chatMessage, WorldClass pSession = null) { byte[] GuidMask = { 4, 1, 3, 6, 2, 5, 0, 7 }; byte[] GuidMask3 = { 6, 1, 3, 5, 4, 2, 7, 0 }; byte[] GuidBytes = { 7, 4, 0, 6, 3, 2, 5, 1 }; byte[] GuidBytes3 = { 7, 4, 1, 3, 0, 6, 5, 2 }; var pChar = session.Character; var guid = pChar.Guid; if (pSession != null) guid = pSession.Character.Guid; PacketWriter chat = new PacketWriter(ServerMessage.Chat); BitPack BitPack = new BitPack(chat, guid); BitPack.Write(!chatMessage.HasLanguage); BitPack.Write(1); BitPack.Write(1); BitPack.Write(0, 8); BitPack.Write(1); BitPack.Write(0); BitPack.Write(1); BitPack.Write(1); BitPack.Write(1); BitPack.Write(0, 8); BitPack.Write(0); BitPack.WriteGuidMask(GuidMask3); BitPack.Write(1); BitPack.Write(0); BitPack.Write(1); BitPack.Write(!chatMessage.HasRealmId); BitPack.Write(0); BitPack.WriteStringLength(chatMessage.Message, 12); BitPack.Write(0); BitPack.WriteGuidMask(GuidMask); BitPack.Write(0); BitPack.Write(8, 9); BitPack.Flush(); BitPack.WriteGuidBytes(GuidBytes3); if (chatMessage.HasLanguage) chat.WriteUInt8(chatMessage.Language); BitPack.WriteGuidBytes(GuidBytes); chat.WriteString(chatMessage.Message, false); chat.WriteUInt8((byte)chatMessage.ChatType); chat.WriteInt32(0); if (chatMessage.HasRealmId) chat.WriteInt32(chatMessage.RealmId); switch (chatMessage.ChatType) { case MessageType.ChatMessageSay: WorldMgr.SendByDist(pChar, chat, 625); break; case MessageType.ChatMessageYell: WorldMgr.SendByDist(pChar, chat, 90000); break; default: session.Send(ref chat); break; } }
public static void HandleQueryPlayerName(ref PacketReader packet, WorldClass session) { BitUnpack BitUnpack = new BitUnpack(packet); var guidMask = new bool[8]; var guidBytes = new byte[8]; guidMask[1] = BitUnpack.GetBit(); guidMask[3] = BitUnpack.GetBit(); guidMask[6] = BitUnpack.GetBit(); guidMask[7] = BitUnpack.GetBit(); guidMask[2] = BitUnpack.GetBit(); guidMask[5] = BitUnpack.GetBit(); var hasUnknown = BitUnpack.GetBit(); guidMask[0] = BitUnpack.GetBit(); var hasUnknown2 = BitUnpack.GetBit(); guidMask[4] = BitUnpack.GetBit(); if (guidMask[4]) guidBytes[4] = (byte)(packet.Read<byte>() ^ 1); if (guidMask[6]) guidBytes[6] = (byte)(packet.Read<byte>() ^ 1); if (guidMask[7]) guidBytes[7] = (byte)(packet.Read<byte>() ^ 1); if (guidMask[1]) guidBytes[1] = (byte)(packet.Read<byte>() ^ 1); if (guidMask[2]) guidBytes[2] = (byte)(packet.Read<byte>() ^ 1); if (guidMask[5]) guidBytes[5] = (byte)(packet.Read<byte>() ^ 1); if (guidMask[0]) guidBytes[0] = (byte)(packet.Read<byte>() ^ 1); if (guidMask[3]) guidBytes[3] = (byte)(packet.Read<byte>() ^ 1); if (hasUnknown) packet.Read<uint>(); if (hasUnknown2) packet.Read<uint>(); var guid = BitConverter.ToUInt64(guidBytes, 0); var pSession = WorldMgr.GetSession(guid); if (pSession != null) { var pChar = pSession.Character; if (pChar != null) { PacketWriter queryPlayerNameResponse = new PacketWriter(ServerMessage.QueryPlayerNameResponse); BitPack BitPack = new BitPack(queryPlayerNameResponse, guid); BitPack.WriteGuidMask(3, 2, 6, 0, 4, 1, 5, 7); BitPack.Flush(); BitPack.WriteGuidBytes(7, 1, 2, 6, 3, 5); queryPlayerNameResponse.WriteUInt8(0); queryPlayerNameResponse.WriteUInt8(pChar.Gender); queryPlayerNameResponse.WriteUInt8(pChar.Class); queryPlayerNameResponse.WriteUInt8(pChar.Level); queryPlayerNameResponse.WriteUInt32(1); queryPlayerNameResponse.WriteUInt8(pChar.Race); queryPlayerNameResponse.WriteUInt32(0); BitPack.WriteGuidBytes(4, 0); BitPack.WriteGuidMask(5); BitPack.Write(0); BitPack.Write(0); BitPack.Write(0); BitPack.WriteGuidMask(3, 7, 0, 6); BitPack.Write(0); BitPack.Write(0); BitPack.WriteGuidMask(1); BitPack.Write(0); for (int i = 0; i < 5; i++) BitPack.Write(0, 7); BitPack.WriteGuidMask(2); BitPack.Write(0); BitPack.WriteGuidMask(4); BitPack.Write(0); BitPack.Write(pChar.Name.Length, 6); BitPack.Write(0); BitPack.Flush(); BitPack.WriteGuidBytes(0, 7, 5, 2); queryPlayerNameResponse.WriteString(pChar.Name); BitPack.WriteGuidBytes(4, 1, 3, 6); session.Send(ref queryPlayerNameResponse); } } }
public static void HandleEnumCharactersResult(ref PacketReader packet, ref WorldClass session) { SQLResult result = DB.Characters.Select("SELECT guid, name, race, class, gender, skin, face, hairstyle, " + "haircolor, facialhair, level, zone, map, x, y, z, guildguid, petdisplayid, " + "petlevel, petfamily, characterflags, customizeflags, loginCinematic FROM characters WHERE accountid = {0}", session.Account.Id); PacketWriter enumCharacters = new PacketWriter(JAMCMessage.EnumCharactersResult); BitPack BitPack = new BitPack(enumCharacters); BitPack.Write(0, 23); BitPack.Write(result.Count, 17); if (result.Count != 0) { for (int c = 0; c < result.Count; c++) { string name = result.Read<String>(c, "Name"); bool loginCinematic = result.Read<Boolean>(c, "LoginCinematic"); BitPack.Guid = result.Read<UInt64>(c, "Guid"); BitPack.GuildGuid = result.Read<UInt64>(c, "GuildGuid"); BitPack.WriteGuidMask(7, 0, 4); BitPack.WriteGuildGuidMask(2); BitPack.WriteGuidMask(5, 3); BitPack.Write((uint)Encoding.ASCII.GetBytes(name).Length, 7); BitPack.WriteGuildGuidMask(0, 5, 3); BitPack.Write(loginCinematic); BitPack.WriteGuildGuidMask(6, 7); BitPack.WriteGuidMask(1); BitPack.WriteGuildGuidMask(4, 1); BitPack.WriteGuidMask(2, 6); } BitPack.Write(1); BitPack.Flush(); for (int c = 0; c < result.Count; c++) { string name = result.Read<String>(c, "Name"); BitPack.Guid = result.Read<UInt64>(c, "Guid"); BitPack.GuildGuid = result.Read<UInt64>(c, "GuildGuid"); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "CharacterFlags")); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "PetFamily")); enumCharacters.WriteFloat(result.Read<Single>(c, "Z")); BitPack.WriteGuidBytes(7); BitPack.WriteGuildGuidBytes(6); // Not implanted for (int j = 0; j < 23; j++) { enumCharacters.WriteUInt32(0); enumCharacters.WriteUInt8(0); enumCharacters.WriteUInt32(0); } enumCharacters.WriteFloat(result.Read<Single>(c, "X")); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Class")); BitPack.WriteGuidBytes(5); enumCharacters.WriteFloat(result.Read<Single>(c, "Y")); BitPack.WriteGuildGuidBytes(3); BitPack.WriteGuidBytes(6); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "PetLevel")); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "PetDisplayId")); BitPack.WriteGuidBytes(2); BitPack.WriteGuidBytes(1); enumCharacters.WriteUInt8(result.Read<Byte>(c, "HairColor")); enumCharacters.WriteUInt8(result.Read<Byte>(c, "FacialHair")); BitPack.WriteGuildGuidBytes(2); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "Zone")); enumCharacters.WriteUInt8(0); BitPack.WriteGuidBytes(0); BitPack.WriteGuildGuidBytes(1); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Skin")); BitPack.WriteGuidBytes(4); BitPack.WriteGuildGuidBytes(5); enumCharacters.WriteString(name); BitPack.WriteGuildGuidBytes(0); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Level")); BitPack.WriteGuidBytes(3); BitPack.WriteGuildGuidBytes(7); enumCharacters.WriteUInt8(result.Read<Byte>(c, "HairStyle")); BitPack.WriteGuildGuidBytes(4); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Gender")); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "Map")); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "CustomizeFlags")); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Race")); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Face")); } } else { BitPack.Write(1); BitPack.Flush(); }; session.Send(enumCharacters); }
public static void HandleGenerateRandomCharacterNameResult(ref PacketReader packet, ref WorldClass session) { byte gender = packet.ReadByte(); byte race = packet.ReadByte(); List<string> names = DBCStorage.NameGenStorage.Where(n => n.Value.Race == race && n.Value.Gender == gender).Select(n => n.Value.Name).ToList(); Random rand = new Random(Environment.TickCount); string NewName; SQLResult result; do { NewName = names[rand.Next(names.Count)]; result = DB.Characters.Select("SELECT * FROM characters WHERE name = '{0}'", NewName); } while (result.Count != 0); PacketWriter writer = new PacketWriter(JAMCMessage.GenerateRandomCharacterNameResult); BitPack BitPack = new BitPack(writer); BitPack.Write<int>(NewName.Length, 15); BitPack.Write(true); BitPack.Flush(); writer.WriteString(NewName); session.Send(writer); }
public static void WriteAddonData(WorldClass session) { PacketWriter addonInfo = new PacketWriter(ServerMessage.AddonInfo); BitPack BitPack = new BitPack(addonInfo); int AddOnCount = session.Addons.Count; BitPack.Write<int>(0, 18); BitPack.Write<int>(AddOnCount, 23); session.Addons.ForEach(addon => { BitPack.Write<bool>(addon.Enabled != 0); BitPack.Write<bool>(addon.HasPUBData != 0); BitPack.Write<bool>(addon.HasUrlString != 0); if (addon.HasUrlString != 0) BitPack.Write<int>(addon.UrlString.Length, 8); }); BitPack.Flush(); // Send Addon stored data for session session.Addons.ForEach(addon => { // atm not url string if (addon.HasUrlString != 0x00) addonInfo.WriteString(addon.UrlString, false); if (addon.HasPUBData != 0x00) addonInfo.WriteBytes(addon.PUBData, addon.PUBData.Length); if (addon.Enabled != 0x00) { addonInfo.WriteUInt8(addon.Version); addonInfo.WriteUInt32(addon.UrlStringCRC); } addonInfo.WriteUInt8(addon.AuthType); }); session.Send(ref addonInfo); }
public static void HandleEnumCharactersResult(ref PacketReader packet, ref WorldClass session) { // Set existing character from last world session to null session.Character = null; DB.Realms.Execute("UPDATE accounts SET online = 1 WHERE id = ?", session.Account.Id); SQLResult result = DB.Characters.Select("SELECT * FROM characters WHERE accountid = ?", session.Account.Id); PacketWriter enumCharacters = new PacketWriter(JAMCMessage.EnumCharactersResult); BitPack BitPack = new BitPack(enumCharacters); BitPack.Write(0, 23); BitPack.Write(result.Count, 17); if (result.Count != 0) { for (int c = 0; c < result.Count; c++) { string name = result.Read<String>(c, "Name"); bool loginCinematic = result.Read<Boolean>(c, "LoginCinematic"); BitPack.Guid = result.Read<UInt64>(c, "Guid"); BitPack.GuildGuid = result.Read<UInt64>(c, "GuildGuid"); BitPack.WriteGuidMask(7, 0, 4); BitPack.WriteGuildGuidMask(2); BitPack.WriteGuidMask(5, 3); BitPack.Write((uint)Encoding.ASCII.GetBytes(name).Length, 7); BitPack.WriteGuildGuidMask(0, 5, 3); BitPack.Write(loginCinematic); BitPack.WriteGuildGuidMask(6, 7); BitPack.WriteGuidMask(1); BitPack.WriteGuildGuidMask(4, 1); BitPack.WriteGuidMask(2, 6); } BitPack.Write(1); BitPack.Flush(); for (int c = 0; c < result.Count; c++) { string name = result.Read<String>(c, "Name"); BitPack.Guid = result.Read<UInt64>(c, "Guid"); BitPack.GuildGuid = result.Read<UInt64>(c, "GuildGuid"); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "CharacterFlags")); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "PetFamily")); enumCharacters.WriteFloat(result.Read<Single>(c, "Z")); BitPack.WriteGuidBytes(7); BitPack.WriteGuildGuidBytes(6); // Not implanted for (int j = 0; j < 23; j++) { enumCharacters.WriteUInt32(0); enumCharacters.WriteUInt8(0); enumCharacters.WriteUInt32(0); } enumCharacters.WriteFloat(result.Read<Single>(c, "X")); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Class")); BitPack.WriteGuidBytes(5); enumCharacters.WriteFloat(result.Read<Single>(c, "Y")); BitPack.WriteGuildGuidBytes(3); BitPack.WriteGuidBytes(6); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "PetLevel")); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "PetDisplayId")); BitPack.WriteGuidBytes(2); BitPack.WriteGuidBytes(1); enumCharacters.WriteUInt8(result.Read<Byte>(c, "HairColor")); enumCharacters.WriteUInt8(result.Read<Byte>(c, "FacialHair")); BitPack.WriteGuildGuidBytes(2); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "Zone")); enumCharacters.WriteUInt8(0); BitPack.WriteGuidBytes(0); BitPack.WriteGuildGuidBytes(1); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Skin")); BitPack.WriteGuidBytes(4); BitPack.WriteGuildGuidBytes(5); enumCharacters.WriteString(name); BitPack.WriteGuildGuidBytes(0); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Level")); BitPack.WriteGuidBytes(3); BitPack.WriteGuildGuidBytes(7); enumCharacters.WriteUInt8(result.Read<Byte>(c, "HairStyle")); BitPack.WriteGuildGuidBytes(4); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Gender")); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "Map")); enumCharacters.WriteUInt32(result.Read<UInt32>(c, "CustomizeFlags")); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Race")); enumCharacters.WriteUInt8(result.Read<Byte>(c, "Face")); } } else { BitPack.Write(1); BitPack.Flush(); }; session.Send(ref enumCharacters); }
public static void SendMessage(ref WorldClass session, ChatMessageValues chatMessage) { byte[] GuidMask = { 4, 7, 6, 3, 0, 5, 1, 2 }; byte[] GuidMask3 = { 4, 0, 7, 2, 1, 5, 3, 6 }; byte[] GuidBytes = { 3, 5, 1, 4, 2, 6, 0, 7 }; byte[] GuidBytes3 = { 7, 6, 0, 3, 4, 1, 5, 2 }; var pChar = session.Character; PacketWriter chat = new PacketWriter(ServerMessage.Chat); BitPack BitPack = new BitPack(chat, pChar.Guid); BitPack.Write(1); BitPack.Write(!chatMessage.HasLanguage); BitPack.Write(1); BitPack.Write(0); BitPack.Write(1); BitPack.Write(0); BitPack.Write(0); BitPack.Write(1); BitPack.Write(1); BitPack.Write(0); BitPack.WriteGuidMask(GuidMask); BitPack.Write(0); BitPack.Write(0); BitPack.Write(chatMessage.Message.Length, 12); BitPack.Write(!chatMessage.HasRealmId); BitPack.WriteGuidMask(GuidMask3); BitPack.Write(1); BitPack.Write(0, 8); BitPack.Write(8, 9); BitPack.Write(1); BitPack.Write(1); BitPack.Write(0, 8); BitPack.Flush(); BitPack.WriteGuidBytes(GuidBytes); chat.WriteString(chatMessage.Message); if (chatMessage.HasRealmId) chat.WriteInt32(chatMessage.RealmId); BitPack.WriteGuidBytes(GuidBytes3); if (chatMessage.HasLanguage) chat.WriteUInt8(chatMessage.Language); chat.WriteUInt8((byte)chatMessage.ChatType); switch (chatMessage.ChatType) { case MessageType.ChatMessageSay: WorldMgr.SendByDist(pChar, chat, 625); break; case MessageType.ChatMessageYell: WorldMgr.SendByDist(pChar, chat, 90000); break; default: break; } }