public static void HandleChatMessageWhisper(ref PacketReader packet, ref WorldClass session) { BitUnpack BitUnpack = new BitUnpack(packet); var language = packet.Read <int>(); var nameLength = BitUnpack.GetBits <byte>(9); var messageLength = BitUnpack.GetBits <byte>(8); string message = packet.ReadString(messageLength); string receiverName = packet.ReadString(nameLength); WorldClass rSession = WorldMgr.GetSession(receiverName); if (rSession == null) { return; } ChatMessageValues chatMessage = new ChatMessageValues(MessageType.ChatMessageWhisperInform, message, false, true); SendMessage(ref session, chatMessage, rSession); chatMessage = new ChatMessageValues(MessageType.ChatMessageWhisper, message, false, true); SendMessage(ref rSession, chatMessage, session); }
public static void HandleSetSelection(ref PacketReader packet, ref WorldClass session) { byte[] guidMask = { 2, 6, 1, 7, 4, 5, 3, 0 }; byte[] guidBytes = { 0, 6, 3, 2, 1, 4, 7, 5 }; BitUnpack GuidUnpacker = new BitUnpack(packet); ulong fullGuid = GuidUnpacker.GetPackedValue(guidMask, guidBytes); ulong guid = SmartGuid.GetGuid(fullGuid); if (session.Character != null) { var sess = WorldMgr.GetSession(session.Character.Guid); if (sess != null) { sess.Character.TargetGuid = fullGuid; } if (guid == 0) { Log.Message(LogType.DEBUG, "Character (Guid: {0}) removed current selection.", session.Character.Guid); } else { Log.Message(LogType.DEBUG, "Character (Guid: {0}) selected a {1} (Guid: {2}, Id: {3}).", session.Character.Guid, SmartGuid.GetGuidType(fullGuid), guid, SmartGuid.GetId(fullGuid)); } } }
public static void Save(string[] args) { var session = WorldMgr.GetSession(WorldMgr.Session.Character.Guid); ObjectMgr.SavePositionToDB(session.Character); ChatHandler.SendMessageByType(ref session, 0, 0, "Your character is successfully saved to the database!"); }
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 HandleChatMessageWhisper(ref PacketReader packet, ref WorldClass session) { BitUnpack BitUnpack = new BitUnpack(packet); int language = packet.ReadInt32(); uint messageLength = BitUnpack.GetBits <uint>(9); uint nameLength = BitUnpack.GetNameLength <uint>(9); string chatMessage = packet.ReadString(messageLength); string receiverName = packet.ReadString(nameLength); WorldClass rSession = WorldMgr.GetSession(receiverName); SendMessageByType(ref rSession, MessageType.ChatMessageWhisper, language, chatMessage); SendMessageByType(ref session, MessageType.ChatMessageWhisperInform, language, chatMessage); }
public static void HandleMoveUpdate(ulong guid, ObjectMovementValues movementValues, Vector4 vector) { PacketWriter moveUpdate = new PacketWriter(ServerMessage.MoveUpdate); BitPack BitPack = new BitPack(moveUpdate, guid); BitPack.WriteGuidMask(0); BitPack.Write(!movementValues.HasRotation); BitPack.Write(!movementValues.HasMovementFlags2); BitPack.WriteGuidMask(5); if (movementValues.HasMovementFlags2) { BitPack.Write((uint)movementValues.MovementFlags2, 13); } BitPack.Write(!movementValues.HasMovementFlags); BitPack.Write(0); BitPack.Write <uint>(0, 22); BitPack.Write(1); BitPack.Write(1); BitPack.Write(0); BitPack.Write(0); BitPack.WriteGuidMask(7); BitPack.Write(movementValues.IsTransport); BitPack.Write(1); BitPack.WriteGuidMask(4, 1); BitPack.Write(movementValues.IsFallingOrJumping); if (movementValues.HasMovementFlags) { BitPack.Write((uint)movementValues.MovementFlags, 30); } BitPack.Write(movementValues.Time == 0); if (movementValues.IsFallingOrJumping) { BitPack.Write(movementValues.HasJumpData); } BitPack.WriteGuidMask(2, 3, 6); BitPack.Flush(); BitPack.WriteGuidBytes(6); if (movementValues.Time != 0) { moveUpdate.WriteUInt32(movementValues.Time); } if (movementValues.IsFallingOrJumping) { moveUpdate.WriteFloat(movementValues.JumpVelocity); if (movementValues.HasJumpData) { moveUpdate.WriteFloat(movementValues.Cos); moveUpdate.WriteFloat(movementValues.CurrentSpeed); moveUpdate.WriteFloat(movementValues.Sin); } moveUpdate.WriteUInt32(movementValues.FallTime); } moveUpdate.WriteFloat(vector.X); BitPack.WriteGuidBytes(1); moveUpdate.WriteFloat(vector.Y); BitPack.WriteGuidBytes(2, 7, 5); moveUpdate.WriteFloat(vector.Z); BitPack.WriteGuidBytes(0, 4, 3); if (movementValues.HasRotation) { moveUpdate.WriteFloat(vector.O); } var session = WorldMgr.GetSession(guid); if (session != null) { Character pChar = session.Character; ObjectMgr.SetPosition(ref pChar, vector, false); WorldMgr.SendToInRangeCharacter(pChar, moveUpdate); } }
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 HandleMoveUpdate(ulong guid, ObjectMovementValues movementValues, Vector4 vector) { PacketWriter moveUpdate = new PacketWriter(ServerMessage.MoveUpdate); BitPack BitPack = new BitPack(moveUpdate, guid); BitPack.WriteGuidMask(2); BitPack.Write(0); BitPack.WriteGuidMask(1); BitPack.Write(!movementValues.HasMovementFlags2); BitPack.Write(true); BitPack.Write(true); BitPack.Write <uint>(0, 22); BitPack.WriteGuidMask(3); BitPack.Write(!movementValues.IsAlive); BitPack.Write(!movementValues.HasMovementFlags); BitPack.WriteGuidMask(6); if (movementValues.HasMovementFlags2) { BitPack.Write((uint)movementValues.MovementFlags2, 13); } BitPack.WriteGuidMask(4, 7); BitPack.Write(movementValues.IsInterpolated); BitPack.Write(0); if (movementValues.HasMovementFlags) { BitPack.Write((uint)movementValues.MovementFlags, 30); } BitPack.Write(!movementValues.HasRotation); BitPack.Write(movementValues.IsTransport); BitPack.WriteGuidMask(5); if (movementValues.IsInterpolated) { BitPack.Write(movementValues.IsInterpolated2); } BitPack.Write(true); BitPack.Write(0); BitPack.WriteGuidMask(0); BitPack.Flush(); moveUpdate.WriteFloat(vector.Z); BitPack.WriteGuidBytes(3); moveUpdate.WriteFloat(vector.X); BitPack.WriteGuidBytes(0, 7); moveUpdate.WriteFloat(vector.Y); BitPack.WriteGuidBytes(5); if (movementValues.IsInterpolated) { moveUpdate.WriteFloat(0); if (movementValues.IsInterpolated2) { moveUpdate.WriteFloat(0); moveUpdate.WriteFloat(0); moveUpdate.WriteFloat(0); } moveUpdate.WriteUInt32(0); } BitPack.WriteGuidBytes(6, 2); if (movementValues.IsAlive) { moveUpdate.WriteUInt32(movementValues.Time); } BitPack.WriteGuidBytes(1, 4); if (movementValues.HasRotation) { moveUpdate.WriteFloat(vector.O); } var session = WorldMgr.GetSession(guid); if (session != null) { Character pChar = session.Character; ObjectMgr.SetPosition(ref pChar, vector, false); WorldMgr.SendToInRangeCharacter(pChar, moveUpdate); } }
public static void HandleMoveUpdate(ulong guid, ObjectMovementValues movementValues, Vector4 vector) { PacketWriter moveUpdate = new PacketWriter(JAMCMessage.MoveUpdate); BitPack BitPack = new BitPack(moveUpdate, guid); BitPack.WriteGuidMask(0); BitPack.Write(!movementValues.HasMovementFlags); BitPack.Write(!movementValues.HasRotation); BitPack.WriteGuidMask(2, 6); BitPack.Write(!movementValues.HasMovementFlags2); BitPack.WriteGuidMask(7); BitPack.Write <uint>(0, 24); BitPack.WriteGuidMask(1); if (movementValues.HasMovementFlags) { BitPack.Write((uint)movementValues.MovementFlags, 30); } BitPack.WriteGuidMask(4); BitPack.Write(!movementValues.IsAlive); BitPack.Write(0); if (movementValues.HasMovementFlags2) { BitPack.Write((uint)movementValues.MovementFlags2, 13); } BitPack.Write(0); BitPack.WriteGuidMask(5); BitPack.Write(true); BitPack.Write(0); BitPack.Write(movementValues.IsInterpolated); BitPack.Write(0); BitPack.Write(true); BitPack.WriteGuidMask(3); BitPack.Write(true); if (movementValues.IsInterpolated) { BitPack.Write(movementValues.IsInterpolated2); } BitPack.Flush(); if (movementValues.IsInterpolated) { moveUpdate.WriteUInt32(0); if (movementValues.IsInterpolated2) { moveUpdate.WriteFloat(0); moveUpdate.WriteFloat(0); moveUpdate.WriteFloat(0); } moveUpdate.WriteFloat(0); } if (movementValues.IsAlive) { moveUpdate.WriteUInt32(movementValues.Time); } BitPack.WriteGuidBytes(5, 7); moveUpdate.WriteFloat(vector.Z); BitPack.WriteGuidBytes(4, 3, 2, 6, 0); moveUpdate.WriteFloat(vector.X); if (movementValues.HasRotation) { moveUpdate.WriteFloat(vector.W); } moveUpdate.WriteFloat(vector.Y); Character pChar = WorldMgr.GetSession(guid).Character; ObjectMgr.SetPosition(ref pChar, vector, false); WorldMgr.SendToAllInZone(guid, moveUpdate); }