Fix for trap doors. Also add in protection in the tile conversion logic to not needless trigger sendtilesquare. Remove existing trapdoor bypass.

This commit is contained in:
DogooFalchion 2016-12-29 21:51:58 -05:00
parent fa0d561a21
commit 3075708c96

View file

@ -1719,15 +1719,7 @@ namespace TShockAPI
var tileX = args.Data.ReadInt16();
var tileY = args.Data.ReadInt16();
bool isTrapdoor = false;
if (Main.tile[tileX, tileY].type == TileID.TrapdoorClosed
|| Main.tile[tileX, tileY].type == TileID.TrapdoorOpen)
{
isTrapdoor = true;
}
if (args.Player.HasPermission(Permissions.allowclientsideworldedit) && !isTrapdoor)
if (args.Player.HasPermission(Permissions.allowclientsideworldedit))
return false;
if (OnSendTileSquare(size, tileX, tileY))
@ -1826,7 +1818,7 @@ namespace TShockAPI
changed = true;
}
if (tile.active() && newtile.Active)
if (tile.active() && newtile.Active && tile.type != newtile.Type)
{
// Grass <-> Grass
if ((TileID.Sets.Conversion.Grass[tile.type] && TileID.Sets.Conversion.Grass[newtile.Type]) ||
@ -1859,6 +1851,17 @@ namespace TShockAPI
Main.tile[realx, realy].wall = newtile.Wall;
changed = true;
}
if ((tile.type == TileID.TrapdoorClosed && (newtile.Type == TileID.TrapdoorOpen || !newtile.Active)) ||
(tile.type == TileID.TrapdoorOpen && (newtile.Type == TileID.TrapdoorClosed || !newtile.Active)) ||
(!tile.active() && newtile.Active && (newtile.Type == TileID.TrapdoorOpen||newtile.Type == TileID.TrapdoorClosed)))
{
Main.tile[realx, realy].type = newtile.Type;
Main.tile[realx, realy].frameX = newtile.FrameX;
Main.tile[realx, realy].frameY = newtile.FrameY;
Main.tile[realx, realy].active(newtile.Active);
changed = true;
}
}
}