本文整理汇总了C#中Framework.Network.Packets.PacketWriter.WriteString方法的典型用法代码示例。如果您正苦于以下问题:C# PacketWriter.WriteString方法的具体用法?C# PacketWriter.WriteString怎么用?C# PacketWriter.WriteString使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Framework.Network.Packets.PacketWriter
的用法示例。
在下文中一共展示了PacketWriter.WriteString方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: HandleDBQueryBulk
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;
}
}
}
示例2: HandleBroadcastText
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);
}
示例3: HandleRealmSplit
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);
}
示例4: HandleRealmSplit
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);
}
示例5: HandleQueryRealmName
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);
}
示例6: HandleQueryPlayerName
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);
}
}
}
示例7: HandleMessageOfTheDay
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);
}
示例8: HandleGenerateRandomCharacterName
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);
}
示例9: HandleEnumCharactersResult
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);
//.........这里部分代码省略.........
示例10: SendMessage
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;
}
}
示例11: HandleQueryPlayerName
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);
}
}
}
示例12: HandleEnumCharactersResult
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"));
//.........这里部分代码省略.........
示例13: HandleGenerateRandomCharacterNameResult
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);
}
示例14: WriteAddonData
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);
}
示例15: HandleEnumCharactersResult
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);
//.........这里部分代码省略.........