public static void Teleport(string[] args, WorldClass session) { var pChar = session.Character; Vector4 vector; uint mapId; if (args.Length > 2) { vector = new Vector4() { X = CommandParser.Read<float>(args, 1), Y = CommandParser.Read<float>(args, 2), Z = CommandParser.Read<float>(args, 3), O = CommandParser.Read<float>(args, 4) }; mapId = CommandParser.Read<uint>(args, 5); } else { string location = CommandParser.Read<string>(args, 1); SQLResult result = DB.World.Select("SELECT * FROM teleport_locations WHERE location = ?", location); if (result.Count == 0) { ChatMessageValues chatMessage = new ChatMessageValues(0, "Teleport location '" + location + "' does not exist."); ChatHandler.SendMessage(ref session, chatMessage); return; } vector = new Vector4() { X = result.Read<float>(0, "X"), Y = result.Read<float>(0, "Y"), Z = result.Read<float>(0, "Z"), O = result.Read<float>(0, "O") }; mapId = result.Read<uint>(0, "Map"); } if (pChar.Map == mapId) { MoveHandler.HandleMoveTeleport(ref session, vector); ObjectMgr.SetPosition(ref pChar, vector); } else { MoveHandler.HandleTransferPending(ref session, mapId); MoveHandler.HandleNewWorld(ref session, vector, mapId); ObjectMgr.SetPosition(ref pChar, vector); ObjectMgr.SetMap(ref pChar, mapId); ObjectHandler.HandleUpdateObjectCreate(ref session); } }
public static void Start(string[] args, WorldClass session) { var pChar = session.Character; SQLResult result = DB.Characters.Select("SELECT map, posX, posY, posZ, posO FROM character_creation_data WHERE race = ? AND class = ?", pChar.Race, pChar.Class); Vector4 vector = new Vector4() { X = result.Read<float>(0, "PosX"), Y = result.Read<float>(0, "PosY"), Z = result.Read<float>(0, "PosZ"), O = result.Read<float>(0, "PosO") }; uint mapId = result.Read<uint>(0, "Map"); if (pChar.Map == mapId) { MoveHandler.HandleMoveTeleport(ref session, vector); ObjectMgr.SetPosition(ref pChar, vector); } else { MoveHandler.HandleTransferPending(ref session, mapId); MoveHandler.HandleNewWorld(ref session, vector, mapId); ObjectMgr.SetPosition(ref pChar, vector); ObjectMgr.SetMap(ref pChar, mapId); ObjectHandler.HandleUpdateObjectCreate(ref session); } }
public static void HandleNewWorld(ref WorldClass session, Vector4 vector, uint mapId) { PacketWriter newWorld = new PacketWriter(JAMCMessage.NewWorld); newWorld.WriteUInt32(mapId); newWorld.WriteFloat(vector.Y); newWorld.WriteFloat(vector.W); newWorld.WriteFloat(vector.X); newWorld.WriteFloat(vector.Z); session.Send(newWorld); }
public static void Teleport(string[] args) { var session = GetSession(); var pChar = session.Character; Vector4 vector; uint mapId; if (args.Length > 2) { vector = new Vector4() { X = CommandParser.Read<float>(args, 1), Y = CommandParser.Read<float>(args, 2), Z = CommandParser.Read<float>(args, 3), W = CommandParser.Read<float>(args, 4) }; mapId = CommandParser.Read<uint>(args, 5); } else { string location = CommandParser.Read<string>(args, 1); SQLResult result = DB.World.Select("SELECT * FROM teleport_locations WHERE location = '{0}'", location); vector = new Vector4() { X = result.Read<float>(0, "X"), Y = result.Read<float>(0, "Y"), Z = result.Read<float>(0, "Z"), W = result.Read<float>(0, "O") }; mapId = result.Read<uint>(0, "Map"); } if (pChar.Map == mapId) { MoveHandler.HandleMoveTeleport(ref session, vector); ObjectMgr.SetPosition(ref pChar, vector); } else { MoveHandler.HandleTransferPending(ref session, mapId); MoveHandler.HandleNewWorld(ref session, vector, mapId); ObjectMgr.SetPosition(ref pChar, vector); ObjectMgr.SetMap(ref pChar, mapId); ObjectHandler.HandleUpdateObject(ref session); } }
public static void HandleMoveTeleport(ref WorldClass session, Vector4 vector) { bool IsTransport = false; bool Unknown = false; PacketWriter moveTeleport = new PacketWriter(JAMCMessage.MoveTeleport); BitPack BitPack = new BitPack(moveTeleport, session.Character.Guid); moveTeleport.WriteUInt32(0); moveTeleport.WriteFloat(vector.X); moveTeleport.WriteFloat(vector.Y); moveTeleport.WriteFloat(vector.Z); moveTeleport.WriteFloat(vector.W); BitPack.WriteGuidMask(3, 1, 7); BitPack.Write(Unknown); BitPack.WriteGuidMask(6); // Unknown bits if (Unknown) { BitPack.Write(false); BitPack.Write(false); } BitPack.WriteGuidMask(0, 4); BitPack.Write(IsTransport); BitPack.WriteGuidMask(2); // Transport guid if (IsTransport) BitPack.WriteTransportGuidMask(7, 5, 2, 1, 0, 4, 3, 6); BitPack.WriteGuidMask(5); BitPack.Flush(); if (IsTransport) BitPack.WriteTransportGuidBytes(1, 5, 7, 0, 3, 4, 6, 2); BitPack.WriteGuidBytes(3); if (Unknown) moveTeleport.WriteUInt8(0); BitPack.WriteGuidBytes(2, 1, 7, 5, 6, 4, 0); session.Send(moveTeleport); }