Kill tile abuse now reverts the tiles.
Water acts glitchy (as if there was no tiles) Things like trees and doors are not reverted
This commit is contained in:
parent
2a2fbe62d5
commit
39edac96b0
2 changed files with 25 additions and 0 deletions
|
|
@ -8,6 +8,7 @@ namespace TShockAPI
|
||||||
public class TSPlayer
|
public class TSPlayer
|
||||||
{
|
{
|
||||||
public uint tileThreshold;
|
public uint tileThreshold;
|
||||||
|
public Dictionary<TShock.Position, Terraria.Tile> tilesDestroyed = new Dictionary<TShock.Position, Terraria.Tile>();
|
||||||
public bool syncHP = false;
|
public bool syncHP = false;
|
||||||
public bool syncMP = false;
|
public bool syncMP = false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -200,7 +200,10 @@ namespace TShockAPI
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == 0 && BlacklistTiles[Main.tile[x, y].type] && Main.player[e.Msg.whoAmI].active)
|
if (type == 0 && BlacklistTiles[Main.tile[x, y].type] && Main.player[e.Msg.whoAmI].active)
|
||||||
|
{
|
||||||
players[e.Msg.whoAmI].tileThreshold++;
|
players[e.Msg.whoAmI].tileThreshold++;
|
||||||
|
players[e.Msg.whoAmI].tilesDestroyed.Add(new Position((float)x, (float)y), Main.tile[x, y]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -510,6 +513,7 @@ namespace TShockAPI
|
||||||
FileTools.WriteGrief((int)i);
|
FileTools.WriteGrief((int)i);
|
||||||
Tools.Kick((int)i, "Kill tile abuse detected.");
|
Tools.Kick((int)i, "Kill tile abuse detected.");
|
||||||
Tools.Broadcast(Main.player[i].name + " was " + (ConfigurationManager.banTnt ? "banned" : "kicked") + " for kill tile abuse.");
|
Tools.Broadcast(Main.player[i].name + " was " + (ConfigurationManager.banTnt ? "banned" : "kicked") + " for kill tile abuse.");
|
||||||
|
RevertKillTile((int)i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
players[i].tileThreshold = 0;
|
players[i].tileThreshold = 0;
|
||||||
|
|
@ -733,5 +737,25 @@ namespace TShockAPI
|
||||||
else
|
else
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class Position
|
||||||
|
{
|
||||||
|
public float X;
|
||||||
|
public float Y;
|
||||||
|
public Position(float x, float y) { X = x; Y = y; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void RevertKillTile(int ply)
|
||||||
|
{
|
||||||
|
Tile[] tiles = new Tile[players[ply].tilesDestroyed.Count];
|
||||||
|
players[ply].tilesDestroyed.Values.CopyTo(tiles, 0);
|
||||||
|
Position[] positions = new Position[players[ply].tilesDestroyed.Count];
|
||||||
|
players[ply].tilesDestroyed.Keys.CopyTo(positions, 0);
|
||||||
|
for (int i = (players[ply].tilesDestroyed.Count - 1); i >= 0; i--)
|
||||||
|
{
|
||||||
|
Main.tile[(int)positions[i].X, (int)positions[i].Y] = tiles[i];
|
||||||
|
NetMessage.SendData(17, -1, -1, "", 1, positions[i].X, positions[i].Y, (float)0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue