Change Teleport to not modify spawnTileX/Y (not tested.)
This commit is contained in:
parent
2eb1084566
commit
552970c8d5
2 changed files with 49 additions and 7 deletions
|
|
@ -42,6 +42,8 @@ namespace TShockAPI
|
|||
public Vector2 oldSpawn = Vector2.Zero;
|
||||
public TSPlayer LastWhisper;
|
||||
public int LoginAttempts { get; set; }
|
||||
public bool Teleporting = false;
|
||||
public Vector2 TeleportCoords = new Vector2(-1, -1);
|
||||
|
||||
Player FakePlayer = null;
|
||||
|
||||
|
|
@ -148,10 +150,8 @@ namespace TShockAPI
|
|||
public bool Teleport(int tileX, int tileY)
|
||||
{
|
||||
InitSpawn = false;
|
||||
int spawnTileX = Main.spawnTileX;
|
||||
int spawnTileY = Main.spawnTileY;
|
||||
Main.spawnTileX = tileX;
|
||||
Main.spawnTileY = tileY;
|
||||
Teleporting = true;
|
||||
TeleportCoords = new Vector2(tileX, tileY);
|
||||
|
||||
SendData(PacketTypes.WorldInfo);
|
||||
|
||||
|
|
@ -189,9 +189,7 @@ namespace TShockAPI
|
|||
}
|
||||
}
|
||||
|
||||
Main.spawnTileX = spawnTileX;
|
||||
Main.spawnTileY = spawnTileY;
|
||||
|
||||
Teleporting = false;
|
||||
SendData(PacketTypes.WorldInfo);
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ namespace TShockAPI
|
|||
ServerHooks.Command += ServerHooks_OnCommand;
|
||||
NetHooks.GetData += GetData;
|
||||
NetHooks.GreetPlayer += OnGreetPlayer;
|
||||
NetHooks.SendData += OnSendData;
|
||||
NpcHooks.StrikeNpc += NpcHooks_OnStrikeNpc;
|
||||
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
||||
|
||||
|
|
@ -128,6 +129,7 @@ namespace TShockAPI
|
|||
ServerHooks.Command -= ServerHooks_OnCommand;
|
||||
NetHooks.GetData -= GetData;
|
||||
NetHooks.GreetPlayer -= OnGreetPlayer;
|
||||
NetHooks.SendData -= OnSendData;
|
||||
NpcHooks.StrikeNpc -= NpcHooks_OnStrikeNpc;
|
||||
}
|
||||
|
||||
|
|
@ -435,6 +437,48 @@ namespace TShockAPI
|
|||
}
|
||||
}
|
||||
|
||||
private void OnSendData(SendDataEventArgs e)
|
||||
{
|
||||
//TODO - Clean this code up
|
||||
switch (e.MsgID)
|
||||
{
|
||||
case PacketTypes.WorldInfo:
|
||||
if (e.remoteClient >= 0 && Players[e.remoteClient] != null && Players[e.remoteClient].Teleporting)
|
||||
{
|
||||
var stream = new MemoryStream();
|
||||
var writer = new BinaryWriter(stream);
|
||||
stream.Position = 4;
|
||||
writer.Write(BitConverter.GetBytes(7), 0, 1);
|
||||
writer.Write(Main.dayTime);
|
||||
writer.Write((byte)Main.moonPhase);
|
||||
writer.Write(Main.bloodMoon);
|
||||
writer.Write((int)Main.time);
|
||||
writer.Write(Main.maxTilesX);
|
||||
writer.Write(Main.maxTilesY);
|
||||
writer.Write((int)Players[e.remoteClient].TeleportCoords.X);
|
||||
writer.Write((int)Players[e.remoteClient].TeleportCoords.Y);
|
||||
writer.Write((int)Main.worldSurface);
|
||||
writer.Write((int)Main.rockLayer);
|
||||
writer.Write(Main.worldID);
|
||||
writer.Write(0 + (WorldGen.shadowOrbSmashed ? 1 : 0) + (NPC.downedBoss1 ? 2 : 0) + (NPC.downedBoss2 ? 4 : 0) + (NPC.downedBoss3 ? 8 : 0));
|
||||
writer.Write(Main.worldName);
|
||||
var length = stream.Position - 5;
|
||||
stream.Position = 0;
|
||||
writer.Write(length);
|
||||
try
|
||||
{
|
||||
NetMessage.buffer[e.remoteClient].spamCount++;
|
||||
Netplay.serverSock[e.remoteClient].networkStream.BeginWrite(stream.GetBuffer(), 0, (int)stream.Length, new AsyncCallback(Netplay.serverSock[e.remoteClient].ServerWriteCallBack), Netplay.serverSock[e.remoteClient].networkStream);
|
||||
}
|
||||
catch { }
|
||||
e.Handled = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnGreetPlayer(int who, HandledEventArgs e)
|
||||
{
|
||||
var player = Players[who];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue