public static void HandlePong(ref PacketReader packet, ref WorldClass session) { uint sequence = packet.ReadUInt32(); uint latency = packet.ReadUInt32(); PacketWriter pong = new PacketWriter(JAMCCMessage.Pong); pong.WriteUInt32(sequence); session.Send(ref pong); }
//[Opcode(ClientMessage.SetSpecialization, "16357")] public static void HandleSetSpecialization(ref PacketReader packet, ref WorldClass session) { var pChar = session.Character; uint specGroupId = packet.ReadUInt32(); uint specId = SpecializationMgr.GetSpecIdByGroup(pChar, (byte)specGroupId); // check if new spec is primary or secondary if (pChar.SpecGroupCount == 1 && pChar.PrimarySpec == 0) { pChar.ActiveSpecGroup = 0; pChar.PrimarySpec = (ushort)specId; } else { pChar.ActiveSpecGroup = 1; pChar.SecondarySpec = (ushort)specId; pChar.SpecGroupCount = (byte)(pChar.SpecGroupCount + 1); } SpecializationMgr.SaveSpecInfo(pChar); SendSpecializationSpells(ref session); HandleTalentUpdate(ref session); pChar.SetUpdateField<Int32>((int)PlayerFields.CurrentSpecID, (int)pChar.GetActiveSpecId()); ObjectHandler.HandleUpdateObjectValues(ref session); Log.Message(LogType.DEBUG, "Character (Guid: {0}) choosed spectialization {1} for spec group {2}.", pChar.Guid, pChar.GetActiveSpecId(), pChar.ActiveSpecGroup); }
public static void HandleCreateCharacter(ref PacketReader packet, WorldClass session) { BitUnpack BitUnpack = new BitUnpack(packet); packet.Skip(1); var facialHair = packet.ReadByte(); var skin = packet.ReadByte(); var race = packet.ReadByte(); var hairStyle = packet.ReadByte(); var pClass = packet.ReadByte(); var face = packet.ReadByte(); var gender = packet.ReadByte(); var hairColor = packet.ReadByte(); var nameLength = BitUnpack.GetBits<uint>(6); var hasUnknown = BitUnpack.GetBit(); var name = Character.NormalizeName(packet.ReadString(nameLength)); if (hasUnknown) packet.ReadUInt32(); var result = DB.Characters.Select("SELECT * from characters WHERE name = ?", name); var createChar = new PacketWriter(ServerMessage.CreateChar); if (result.Count != 0) { // Name already in use createChar.WriteUInt8(0x32); session.Send(ref createChar); return; } result = DB.Characters.Select("SELECT map, zone, posX, posY, posZ, posO FROM character_creation_data WHERE race = ? AND class = ?", race, pClass); if (result.Count == 0) { createChar.WriteUInt8(0x31); session.Send(ref createChar); return; } var map = result.Read<uint>(0, "map"); var zone = result.Read<uint>(0, "zone"); var posX = result.Read<float>(0, "posX"); var posY = result.Read<float>(0, "posY"); var posZ = result.Read<float>(0, "posZ"); var posO = result.Read<float>(0, "posO"); // Allow declined names for now var characterFlags = CharacterFlag.Decline; DB.Characters.Execute("INSERT INTO characters (name, accountid, realmId, race, class, gender, skin, zone, map, x, y, z, o, face, hairstyle, haircolor, facialhair, characterFlags) VALUES (" + "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", name, session.Account.Id, WorldConfig.RealmId, race, pClass, gender, skin, zone, map, posX, posY, posZ, posO, face, hairStyle, hairColor, facialHair, characterFlags); // Success createChar.WriteUInt8(0x2F); session.Send(ref createChar); }
public static void HandleLoadingScreenNotify(ref PacketReader packet, ref WorldClass session) { BitUnpack BitUnpack = new BitUnpack(packet); uint mapId = packet.ReadUInt32(); bool loadingScreenState = BitUnpack.GetBit(); Log.Message(LogType.DEBUG, "Loading screen for map '{0}' is {1}.", mapId, loadingScreenState ? "enabled" : "disabled"); }
public static void HandleAreatrigger(ref PacketReader packet, ref WorldClass session) { var pChar = session.Character; uint triggerId = packet.ReadUInt32(); AreaTrigger areaTrigger = DBCStorage.AreaTriggerStorage[triggerId]; Log.Message(LogType.DEBUG, "Character (Guid: {0}) reached Areatrigger Id: {1}.", pChar.Guid, areaTrigger.Id); }
public static void HandleItemItemNameQuery(ref PacketReader packet, ref WorldClass session) { uint itemID = packet.ReadUInt32();//this from old structure Item pItem = Globals.ItemMgr.FindData(itemID); if (pItem != null) { SendItemNameQueryResponse(session,pItem); } }
public static void HandleDisconnectReason(ref PacketReader packet, ref WorldClass session) { var pChar = session.Character; uint disconnectReason = packet.ReadUInt32(); if (pChar != null) WorldMgr.DeleteSession(pChar.Guid); DB.Realms.Execute("UPDATE accounts SET online = 0 WHERE id = ?", session.Account.Id); Log.Message(LogType.DEBUG, "Account with Id {0} disconnected. Reason: {1}", session.Account.Id, disconnectReason); }
public static void HandleRealmSplitStateResponse(ref PacketReader packet, ref WorldClass session) { uint realmSplitState = 0; PacketWriter realmSplitStateResp = new PacketWriter(LegacyMessage.RealmSplitStateResponse); realmSplitStateResp.WriteUInt32(packet.ReadUInt32()); realmSplitStateResp.WriteUInt32(realmSplitState); realmSplitStateResp.WriteCString("01/01/01"); session.Send(ref realmSplitStateResp); }
public static void HandleAreatrigger(ref PacketReader packet, ref WorldClass session) { var pChar = session.Character; uint triggerId = packet.ReadUInt32(); AreaTrigger areaTrigger = DBCStorage.AreaTriggerStorage[triggerId]; Areatrigger_Teleport tele = Globals.DataMgr.FindAreatrigger_Tele((int)triggerId); if (tele != null) { //todo check level and more session.Character.session.Character.TeleportTo(tele.Target_Pos, tele.TargetMap); } Log.Message(LogType.DEBUG, "Character (Guid: {0}) reached Areatrigger Id: {1}.", pChar.Guid, areaTrigger.Id); }
public static void HandleRealmSplitStateResponse(ref PacketReader packet, ref WorldClass session) { uint realmSplitState = 0; PacketWriter realmSplitStateResp = new PacketWriter(LegacyMessage.RealmSplitStateResponse); realmSplitStateResp.WriteUInt32(packet.ReadUInt32()); realmSplitStateResp.WriteUInt32(realmSplitState); realmSplitStateResp.WriteCString("01/01/01"); session.Send(ref realmSplitStateResp); // Crash!!! // Wrong data sent... // AddonMgr.WriteAddonData(ref session); }
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 HandleRealmCache(ref PacketReader packet, ref WorldClass session) { Character pChar = session.Character; uint realmId = packet.ReadUInt32(); SQLResult result = DB.Realms.Select("SELECT name FROM realms WHERE id = '{0}'", WorldConfig.RealmId); string realmName = result.Read<string>(0, "Name"); PacketWriter nameCache = new PacketWriter(LegacyMessage.RealmCache); nameCache.WriteUInt32(realmId); nameCache.WriteUInt8(0); // < 0 => End of packet nameCache.WriteUInt8(1); // Unknown nameCache.WriteCString(realmName); nameCache.WriteCString(realmName); session.Send(nameCache); }
public static void HandleNameCache(ref PacketReader packet, ref WorldClass session) { Character pChar = session.Character; ulong guid = packet.ReadUInt64(); uint realmId = packet.ReadUInt32(); PacketWriter nameCache = new PacketWriter(LegacyMessage.NameCache); nameCache.WriteGuid(guid); nameCache.WriteUInt8(0); nameCache.WriteCString(pChar.Name); nameCache.WriteUInt32(realmId); nameCache.WriteUInt8(pChar.Race); nameCache.WriteUInt8(pChar.Gender); nameCache.WriteUInt8(pChar.Class); nameCache.WriteUInt8(0); session.Send(nameCache); }
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); realmSplit.WriteUInt32(packet.ReadUInt32()); realmSplit.WriteUInt32(realmSplitState); BitPack.Write(date.Length, 15); realmSplit.WriteString(date); session.Send(ref realmSplit); // Crash!!! // Wrong data sent... // AddonMgr.WriteAddonData(ref session); }
public static void HandleNameCache(ref PacketReader packet, ref WorldClass session) { ulong guid = packet.ReadUInt64(); uint realmId = packet.ReadUInt32(); var pSession = WorldMgr.GetSession(guid); if (pSession != null) { var pChar = pSession.Character; if (pChar != null) { PacketWriter nameCache = new PacketWriter(LegacyMessage.NameCache); nameCache.WriteGuid(guid); nameCache.WriteUInt8(0); nameCache.WriteCString(pChar.Name); nameCache.WriteUInt32(realmId); nameCache.WriteUInt8(pChar.Race); nameCache.WriteUInt8(pChar.Gender); nameCache.WriteUInt8(pChar.Class); nameCache.WriteUInt8(0); session.Send(ref nameCache); } } }
public static void HandleMoveStopTurn(ref PacketReader packet, ref WorldClass session) { ObjectMovementValues movementValues = new ObjectMovementValues(); BitUnpack BitUnpack = new BitUnpack(packet); bool[] guidMask = new bool[8]; byte[] guidBytes = new byte[8]; Vector4 vector = new Vector4() { X = packet.ReadFloat(), Z = packet.ReadFloat(), Y = packet.ReadFloat() }; bool HasTime = !BitUnpack.GetBit(); guidMask[5] = BitUnpack.GetBit(); bool Unknown = BitUnpack.GetBit(); movementValues.IsTransport = BitUnpack.GetBit(); bool Unknown2 = BitUnpack.GetBit(); guidMask[3] = BitUnpack.GetBit(); bool HasSplineElevation = !BitUnpack.GetBit(); guidMask[0] = BitUnpack.GetBit(); bool HasPitch = !BitUnpack.GetBit(); uint counter = BitUnpack.GetBits<uint>(24); guidMask[1] = BitUnpack.GetBit(); guidMask[7] = BitUnpack.GetBit(); movementValues.HasMovementFlags = !BitUnpack.GetBit(); movementValues.IsAlive = !BitUnpack.GetBit(); guidMask[2] = BitUnpack.GetBit(); guidMask[6] = BitUnpack.GetBit(); movementValues.HasRotation = !BitUnpack.GetBit(); bool Unknown3 = BitUnpack.GetBit(); movementValues.HasMovementFlags2 = !BitUnpack.GetBit(); bool Unknown4 = BitUnpack.GetBit(); guidMask[4] = BitUnpack.GetBit(); /*if (movementValues.IsTransport) { } if (IsInterpolated) { }*/ if (movementValues.HasMovementFlags) movementValues.MovementFlags = (MovementFlag)BitUnpack.GetBits<uint>(30); if (movementValues.HasMovementFlags2) movementValues.MovementFlags2 = (MovementFlag2)BitUnpack.GetBits<uint>(13); if (guidMask[6]) guidBytes[6] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[0]) guidBytes[0] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[5]) guidBytes[5] = (byte)(packet.ReadUInt8() ^ 1); for (int i = 0; i < counter; i++) packet.ReadUInt32(); if (guidMask[1]) guidBytes[1] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[7]) guidBytes[7] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[3]) guidBytes[3] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[4]) guidBytes[4] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[2]) guidBytes[2] = (byte)(packet.ReadUInt8() ^ 1); /*if (movementValues.IsTransport) { }*/ if (movementValues.HasRotation) vector.W = packet.ReadFloat(); if (movementValues.IsAlive) movementValues.Time = packet.ReadUInt32(); /*if (IsInterpolated) { }*/ if (HasPitch) packet.ReadFloat(); if (HasSplineElevation) packet.ReadFloat(); if (HasTime) movementValues.Time = packet.ReadUInt32(); var guid = BitConverter.ToUInt64(guidBytes, 0); HandleMoveUpdate(guid, movementValues, vector); }
public static void HandleForceWalkSpeedChangeAck(ref PacketReader packet, ref WorldClass session) { ObjectMovementValues movementValues = new ObjectMovementValues(); BitUnpack BitUnpack = new BitUnpack(packet); bool[] guidMask = new bool[8]; byte[] guidBytes = new byte[8]; Vector4 vector = new Vector4() { Y = packet.ReadFloat(), Z = packet.ReadFloat(), X = packet.ReadFloat() }; uint zeroes = packet.ReadUInt32(); float walkspeed = packet.ReadFloat(); bool Unknown2 = BitUnpack.GetBit(); guidMask[6] = BitUnpack.GetBit(); bool HasPitch = !BitUnpack.GetBit(); movementValues.IsTransport = BitUnpack.GetBit(); bool Unknown3 = BitUnpack.GetBit(); guidMask[1] = BitUnpack.GetBit(); guidMask[2] = BitUnpack.GetBit(); movementValues.IsAlive = !BitUnpack.GetBit(); bool HasTime = !BitUnpack.GetBit(); uint counter = BitUnpack.GetBits<uint>(24); guidMask[0] = BitUnpack.GetBit(); movementValues.HasMovementFlags = !BitUnpack.GetBit(); guidMask[5] = BitUnpack.GetBit(); bool Unknown4 = BitUnpack.GetBit(); bool HasSplineElevation = !BitUnpack.GetBit(); guidMask[3] = BitUnpack.GetBit(); movementValues.HasRotation = !BitUnpack.GetBit(); movementValues.HasMovementFlags2 = !BitUnpack.GetBit(); guidMask[7] = BitUnpack.GetBit(); guidMask[4] = BitUnpack.GetBit(); bool Unknown = BitUnpack.GetBit(); /*if (movementValues.IsTransport) { vehicleGuidMask[2] = BitUnpack.GetBit(); vehicleGuidMask[5] = BitUnpack.GetBit(); vehicleGuidMask[4] = BitUnpack.GetBit(); vehicleGuidMask[1] = BitUnpack.GetBit(); vehicleGuidMask[0] = BitUnpack.GetBit(); vehicleGuidMask[3] = BitUnpack.GetBit(); vehicleGuidMask[7] = BitUnpack.GetBit(); vehicleGuidMask[6] = BitUnpack.GetBit(); bool vehicleUnknown1 = BitUnpack.GetBit(); bool vehicleUnknown2 = BitUnpack.GetBit(); }*/ if (movementValues.HasMovementFlags) movementValues.MovementFlags = (MovementFlag)BitUnpack.GetBits<uint>(30); /*if (movementValues.IsInterpolated) movementValues.IsInterpolated2 = BitUnpack.GetBit();*/ if (movementValues.HasMovementFlags2) movementValues.MovementFlags2 = (MovementFlag2)BitUnpack.GetBits<uint>(13); if (guidMask[3]) guidBytes[3] = (byte)(packet.ReadUInt8() ^ 1); for (int i = 0; i < counter; i++) packet.ReadUInt32(); if (guidMask[0]) guidBytes[0] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[4]) guidBytes[4] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[1]) guidBytes[1] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[2]) guidBytes[2] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[7]) guidBytes[7] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[6]) guidBytes[6] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[5]) guidBytes[5] = (byte)(packet.ReadUInt8() ^ 1); /*if (movementValues.IsTransport) { Vector4 vehiclevector = new Vector4(); if (vehicleGuidMask[7]) vehicleGuidBytes[7] = (byte)(packet.ReadUInt8() ^ 1); if (vehicleGuidMask[5]) vehicleGuidBytes[5] = (byte)(packet.ReadUInt8() ^ 1); vehiclevector.Z = packet.ReadFloat(); if (vehicleGuidMask[3]) vehicleGuidBytes[3] = (byte)(packet.ReadUInt8() ^ 1); byte _88 = packet.ReadUInt8(); // (BYTE)DATA[88] if (vehicleGuidMask[1]) vehicleGuidBytes[1] = (byte)(packet.ReadUInt8() ^ 1); if (vehicleGuidMask[0]) vehicleGuidBytes[0] = (byte)(packet.ReadUInt8() ^ 1); vehiclevector.X = packet.ReadFloat(); if (vehicleGuidMask[4]) vehicleGuidBytes[4] = (byte)(packet.ReadUInt8() ^ 1); if ( vehicleUnknown1 ) packet.ReadUInt32(); vehiclevector.Y = packet.ReadFloat(); if (vehicleGuidMask[6]) vehicleGuidBytes[6] = (byte)(packet.ReadUInt8() ^ 1); uint _23 = packet.ReadUInt32(); if (vehicleGuidMask[2]) vehicleGuidBytes[2] = (byte)(packet.ReadUInt8() ^ 1); if ( vehicleUnknown2 ) packet.ReadUInt32(); vehiclevector.O = packet.ReadFloat(); } if (movementValues.IsInterpolated) { float _31 = packet.ReadFloat(); if (movementValues.IsInterpolated2) { float _34 = packet.ReadFloat(); float _33 = packet.ReadFloat(); float _35 = packet.ReadFloat(); } uint _30 = packet.ReadUInt32(); }*/ if (HasTime) movementValues.Time = packet.ReadUInt32(); if (movementValues.IsAlive) movementValues.Time = packet.ReadUInt32(); if (HasPitch) packet.ReadFloat(); if (movementValues.HasRotation) vector.O = packet.ReadFloat(); if (HasSplineElevation) packet.ReadFloat(); var guid = BitConverter.ToUInt64(guidBytes, 0); HandleMoveUpdate(guid, movementValues, vector); Log.Message(LogType.DEBUG, "Character with Guid: {0}, AccountId: {1} changed walk speed to {2}", guid, session.Account.Id, walkspeed); }
public static void HandleMoveFallLand(ref PacketReader packet, ref WorldClass session) { ObjectMovementValues movementValues = new ObjectMovementValues(); BitUnpack BitUnpack = new BitUnpack(packet); bool[] guidMask = new bool[8]; byte[] guidBytes = new byte[8]; Vector4 vector = new Vector4() { Y = packet.ReadFloat(), X = packet.ReadFloat(), Z = packet.ReadFloat() }; uint counter = BitUnpack.GetBits<uint>(24); guidMask[2] = BitUnpack.GetBit(); bool HasTime = !BitUnpack.GetBit(); bool HasSplineElevation = !BitUnpack.GetBit(); guidMask[6] = BitUnpack.GetBit(); guidMask[0] = BitUnpack.GetBit(); movementValues.IsTransport = BitUnpack.GetBit(); bool Unknown3 = BitUnpack.GetBit(); bool Unknown = BitUnpack.GetBit(); guidMask[4] = BitUnpack.GetBit(); movementValues.HasMovementFlags2 = !BitUnpack.GetBit(); bool HasPitch = !BitUnpack.GetBit(); movementValues.HasRotation = !BitUnpack.GetBit(); bool Unknown2 = BitUnpack.GetBit(); guidMask[1] = BitUnpack.GetBit(); movementValues.IsAlive = !BitUnpack.GetBit(); movementValues.HasMovementFlags = !BitUnpack.GetBit(); guidMask[5] = BitUnpack.GetBit(); guidMask[7] = BitUnpack.GetBit(); guidMask[3] = BitUnpack.GetBit(); bool Unknown4 = BitUnpack.GetBit(); /*if (movementValues.IsTransport) { vehicleGuidMask[4] = BitUnpack.GetBit(); vehicleGuidMask[1] = BitUnpack.GetBit(); bool vehicleUnknown2 = BitUnpack.GetBit(); vehicleGuidMask[2] = BitUnpack.GetBit(); vehicleGuidMask[3] = BitUnpack.GetBit(); vehicleGuidMask[7] = BitUnpack.GetBit(); vehicleGuidMask[0] = BitUnpack.GetBit(); bool vehicleUnknown1 = BitUnpack.GetBit(); vehicleGuidMask[5] = BitUnpack.GetBit(); vehicleGuidMask[6] = BitUnpack.GetBit(); } if (movementValues.IsInterpolated) movementValues.IsInterpolated2 = BitUnpack.GetBit();*/ if (movementValues.HasMovementFlags2) movementValues.MovementFlags2 = (MovementFlag2)BitUnpack.GetBits<uint>(13); if (movementValues.HasMovementFlags) movementValues.MovementFlags = (MovementFlag)BitUnpack.GetBits<uint>(30); if (guidMask[0]) guidBytes[0] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[2]) guidBytes[2] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[1]) guidBytes[1] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[4]) guidBytes[4] = (byte)(packet.ReadUInt8() ^ 1); for (int i = 0; i < counter; i++) packet.ReadUInt32(); if (guidMask[6]) guidBytes[6] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[5]) guidBytes[5] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[7]) guidBytes[7] = (byte)(packet.ReadUInt8() ^ 1); if (guidMask[3]) guidBytes[3] = (byte)(packet.ReadUInt8() ^ 1); /*if (movementValues.IsTransport) { Vector4 vehiclevector = new Vector4(); vehiclevector.X = packet.ReadFloat(); if (vehicleGuidMask[0]) vehicleGuidBytes[0] = (byte)(packet.ReadUInt8() ^ 1); if ( vehicleUnknown1 ) uint _25 = packet.ReadUInt32(); if (vehicleGuidMask[4]) vehicleGuidBytes[4] = (byte)(packet.ReadUInt8() ^ 1); if (vehicleGuidMask[5]) vehicleGuidBytes[5] = (byte)(packet.ReadUInt8() ^ 1); if (vehicleGuidMask[3]) vehicleGuidBytes[3] = (byte)(packet.ReadUInt8() ^ 1); byte _88 = packet.ReadUInt8(); if (vehicleGuidMask[7]) vehicleGuidBytes[7] = (byte)(packet.ReadUInt8() ^ 1); vehiclevector.O = packet.ReadFloat(); vehiclevector.Z = packet.ReadFloat(); vehiclevector.Y = packet.ReadFloat(); if (vehicleGuidMask[6]) vehicleGuidBytes[6] = (byte)(packet.ReadUInt8() ^ 1); uint _23 = packet.ReadUInt32(); if (vehicleGuidMask[2]) vehicleGuidBytes[2] = (byte)(packet.ReadUInt8() ^ 1); if ( vehicleUnknown2 ) uint _27 = packet.ReadUInt32(); if (vehicleGuidMask[1]) vehicleGuidBytes[1] = (byte)(packet.ReadUInt8() ^ 1); }*/ // return if (HasPitch) packet.ReadFloat(); // float _28 /*if (movementValues.IsInterpolated) { if (movementValues.IsInterpolated2) { float _33 = packet.ReadFloat(); float _34 = packet.ReadFloat(); float _35 = packet.ReadFloat(); } float _ 31 = packet.ReadFloat(); uint _30 = packet.ReadUInt32(); }*/ if (movementValues.HasRotation) vector.O = packet.ReadFloat(); if (HasTime) movementValues.Time = packet.ReadUInt32(); if (HasSplineElevation) packet.ReadFloat(); if (movementValues.IsAlive) movementValues.Time = packet.ReadUInt32(); var guid = BitConverter.ToUInt64(guidBytes, 0); HandleMoveUpdate(guid, movementValues, vector); }
public static void HandleDBQueryBulk(ref PacketReader packet, ref WorldClass session) { List<int> IdList = new List<int>(); BitUnpack BitUnpack = new BitUnpack(packet); var type = (DBTypes)packet.ReadUInt32(); var count = BitUnpack.GetBits<uint>(21); bool[][] Mask = new bool[count][]; byte[][] Bytes = new byte[count][]; for (int i = 0; i < count; i++) { Mask[i] = new bool[8]; Bytes[i] = new byte[8]; } for (int i = 0; i < count; i++) { Mask[i][7] = BitUnpack.GetBit(); Mask[i][2] = BitUnpack.GetBit(); Mask[i][3] = BitUnpack.GetBit(); Mask[i][5] = BitUnpack.GetBit(); Mask[i][4] = BitUnpack.GetBit(); Mask[i][6] = BitUnpack.GetBit(); Mask[i][0] = BitUnpack.GetBit(); Mask[i][1] = BitUnpack.GetBit(); } for (int i = 0; i < count; i++) { if (Mask[i][5]) Bytes[i][5] = (byte)(packet.ReadUInt8() ^ 1); IdList.Add(packet.ReadInt32()); if (Mask[i][7]) Bytes[i][7] = (byte)(packet.ReadByte() ^ 1); if (Mask[i][3]) Bytes[i][3] = (byte)(packet.ReadByte() ^ 1); if (Mask[i][0]) Bytes[i][0] = (byte)(packet.ReadByte() ^ 1); if (Mask[i][1]) Bytes[i][1] = (byte)(packet.ReadByte() ^ 1); if (Mask[i][6]) Bytes[i][6] = (byte)(packet.ReadByte() ^ 1); if (Mask[i][2]) Bytes[i][2] = (byte)(packet.ReadByte() ^ 1); if (Mask[i][4]) Bytes[i][4] = (byte)(packet.ReadByte() ^ 1); } switch (type) { case DBTypes.BroadcastText: { foreach (var id in IdList) HandleBroadcastText(ref session, id); break; } default: break; } }
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.ReadUInt32(); 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 HandleZoneUpdate(ref PacketReader packet, ref WorldClass session) { var pChar = session.Character; uint zone = packet.ReadUInt32(); ObjectMgr.SetZone(ref pChar, zone); }
public static void HandleDisconnectReason(ref PacketReader packet, ref WorldClass session) { uint disconnectReason = packet.ReadUInt32(); Log.Message(LogType.DEBUG, "Account with Id {0} disconnected. Reason: {1}", session.Account.Id, disconnectReason); }
public static void HandleQueryRealmName(ref PacketReader packet, ref WorldClass session) { Character pChar = session.Character; uint realmId = packet.ReadUInt32(); 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); }