From ba67148ed801a96e3a3f63f1b4026de96c8294ae Mon Sep 17 00:00:00 2001 From: high Date: Tue, 9 Aug 2011 23:24:02 -0400 Subject: [PATCH] Reverted teleport method. Fixed server.dat corruption --- TShockAPI/Net/WorldInfoMsg.cs | 26 ++++++------ TShockAPI/TSPlayer.cs | 79 ++++++++++++++++------------------- 2 files changed, 50 insertions(+), 55 deletions(-) diff --git a/TShockAPI/Net/WorldInfoMsg.cs b/TShockAPI/Net/WorldInfoMsg.cs index 118f9582..c3a8fb8d 100644 --- a/TShockAPI/Net/WorldInfoMsg.cs +++ b/TShockAPI/Net/WorldInfoMsg.cs @@ -61,19 +61,19 @@ namespace TShockAPI.Net } public void Pack(Stream stream) { - stream.Write(Time); - stream.Write(DayTime); - stream.Write(MoonPhase); - stream.Write(BloodMoon); - stream.Write(MaxTilesX); - stream.Write(MaxTilesY); - stream.Write(SpawnX); - stream.Write(SpawnY); - stream.Write(WorldSurface); - stream.Write(RockLayer); - stream.Write(WorldID); - stream.Write((byte)WorldFlags); - stream.Write(Encoding.ASCII.GetBytes(WorldName)); + stream.WriteInt32(Time); + stream.WriteBoolean(DayTime); + stream.WriteInt8(MoonPhase); + stream.WriteBoolean(BloodMoon); + stream.WriteInt32(MaxTilesX); + stream.WriteInt32(MaxTilesY); + stream.WriteInt32(SpawnX); + stream.WriteInt32(SpawnY); + stream.WriteInt32(WorldSurface); + stream.WriteInt32(RockLayer); + stream.WriteInt32(WorldID); + stream.WriteInt8((byte)WorldFlags); + stream.WriteBytes(Encoding.ASCII.GetBytes(WorldName)); } public void Unpack(Stream stream) diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index b5784ba3..b3efbbd7 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -189,57 +189,52 @@ namespace TShockAPI public bool Teleport(int tilex, int tiley) { - if (!TpLock) + InitSpawn = false; + + SendTeleport(tilex, tiley); + + //150 Should avoid all client crash errors + //The error occurs when a tile trys to update which the client hasnt load yet, Clients only update tiles withen 150 blocks + //Try 300 if it does not work (Higher number - Longer load times - Less chance of error) + if (!SendTileSquare(tilex, tiley, 150)) { - InitSpawn = false; + SendMessage("Warning, teleport failed due to being too close to the edge of the map.", Color.Red); + return false; + } - SendTeleport(tilex, tiley); - - //150 Should avoid all client crash errors - //The error occurs when a tile trys to update which the client hasnt load yet, Clients only update tiles withen 150 blocks - //Try 300 if it does not work (Higher number - Longer load times - Less chance of error) - if (!SendTileSquare(tilex, tiley)) + if (TPlayer.SpawnX > 0 && TPlayer.SpawnY > 0) + { + int spX = TPlayer.SpawnX; + int spY = TPlayer.SpawnY; + Main.tile[spX, spY].active = false; + SendTileSquare(spX, spY); + Spawn(); + Main.tile[spX, spY].active = true; + SendTileSquare(spX, spY); + oldSpawn = new Vector2(spX, spY); + } + else + { + //Checks if Player has spawn point set (Server may think player does not have spawn) + if (oldSpawn != Vector2.Zero) { - SendMessage("Warning, teleport failed due to being too close to the edge of the map.", Color.Red); - return false; - } - - if (TPlayer.SpawnX > 0 && TPlayer.SpawnY > 0) - { - int spX = TPlayer.SpawnX; - int spY = TPlayer.SpawnY; - Main.tile[spX, spY].active = false; - SendTileSquare(spX, spY); + Main.tile[(int)oldSpawn.X, (int)oldSpawn.Y].active = false; + SendTileSquare((int)oldSpawn.X, (int)oldSpawn.Y); Spawn(); - Main.tile[spX, spY].active = true; - SendTileSquare(spX, spY); - oldSpawn = new Vector2(spX, spY); + Main.tile[(int)oldSpawn.X, (int)oldSpawn.Y].active = true; + SendTileSquare((int)oldSpawn.X, (int)oldSpawn.Y); + NetMessage.syncPlayers(); } + //Player has no spawn point set else { - //Checks if Player has spawn point set (Server may think player does not have spawn) - if (oldSpawn != Vector2.Zero) - { - Main.tile[(int)oldSpawn.X, (int)oldSpawn.Y].active = false; - SendTileSquare((int)oldSpawn.X, (int)oldSpawn.Y); - Spawn(); - Main.tile[(int)oldSpawn.X, (int)oldSpawn.Y].active = true; - SendTileSquare((int)oldSpawn.X, (int)oldSpawn.Y); - NetMessage.syncPlayers(); - } - //Player has no spawn point set - else - { - Spawn(); - } + Spawn(); } - - SendTeleport(Main.spawnTileX, Main.spawnTileY); - - return true; } - SendMessage("Cannot teleport due to TP Lock", Color.Red); - return false; + + SendTeleport(Main.spawnTileX, Main.spawnTileY); + + return true; } public void Spawn()