Move ice tile processing to TSPlayer.
This moves ice tile placement and processing from TShock.CheckTilePermissions to TSPlayer in the form of the new boolean 'HasModifiedIceSuccessfully.' This is such a stupid thing we have to track, but we have to track it. Previously, we duplicated all of the check permission code and inserted special ice code paths. This duplicated a ton of code for little gain. The result of moving everything is that the control flow is easier to follow. In Terraria ice tiles are placed and melt on a timer so it's necessary to track them being placed and removed to permit tile events that would otherwise be blocked due to region checks and stuff. They're usually fairly harmless blocks, and without this code, ice wouldn't work properly. It's not ideal for this to be in TShock at all.
This commit is contained in:
parent
195a23a7e5
commit
7b2a4494b5
3 changed files with 44 additions and 87 deletions
|
|
@ -1757,91 +1757,6 @@ namespace TShockAPI
|
|||
e.Handled = true;
|
||||
}
|
||||
|
||||
/// <summary>CheckTilePermission - Checks to see if a player has permission to modify a tile in general.</summary>
|
||||
/// <param name="player">player - The TSPlayer object.</param>
|
||||
/// <param name="tileX">tileX - The x coordinate of the tile.</param>
|
||||
/// <param name="tileY">tileY - The y coordinate of the tile.</param>
|
||||
/// <param name="tileType">tileType - The tile type.</param>
|
||||
/// <param name="actionType">actionType - The type of edit that took place.</param>
|
||||
/// <returns>bool - True if the player should not be able to modify a tile.</returns>
|
||||
public static bool CheckTilePermission(TSPlayer player, int tileX, int tileY, short tileType, GetDataHandlers.EditAction actionType)
|
||||
{
|
||||
if (!player.HasPermission(Permissions.canbuild))
|
||||
{
|
||||
if (TShock.Config.AllowIce && actionType != GetDataHandlers.EditAction.PlaceTile)
|
||||
{
|
||||
foreach (Point p in player.IceTiles)
|
||||
{
|
||||
if (p.X == tileX && p.Y == tileY && (Main.tile[p.X, p.Y].type == 0 || Main.tile[p.X, p.Y].type == 127))
|
||||
{
|
||||
player.IceTiles.Remove(p);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.BPm) > 2000)
|
||||
{
|
||||
player.SendErrorMessage("You do not have permission to build!");
|
||||
player.BPm = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (TShock.Config.AllowIce && actionType == GetDataHandlers.EditAction.PlaceTile && tileType == 127)
|
||||
{
|
||||
player.IceTiles.Add(new Point(tileX, tileY));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.BPm) > 2000)
|
||||
{
|
||||
player.SendErrorMessage("You do not have permission to build!");
|
||||
player.BPm = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Regions.CanBuild(tileX, tileY, player))
|
||||
{
|
||||
if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.RPm) > 2000)
|
||||
{
|
||||
player.SendErrorMessage("This region is protected from changes.");
|
||||
player.RPm = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (Config.DisableBuild)
|
||||
{
|
||||
if (!player.HasPermission(Permissions.antibuild))
|
||||
{
|
||||
if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.WPm) > 2000)
|
||||
{
|
||||
player.SendErrorMessage("The world is protected from changes.");
|
||||
player.WPm = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (Config.SpawnProtection)
|
||||
{
|
||||
if (!player.HasPermission(Permissions.editspawn))
|
||||
{
|
||||
if (Utils.IsInSpawn(tileX, tileY))
|
||||
{
|
||||
if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.SPm) > 2000)
|
||||
{
|
||||
player.SendErrorMessage("Spawn is protected from changes.");
|
||||
player.SPm = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>Distance - Determines the distance between two vectors.</summary>
|
||||
/// <param name="value1">value1 - The first vector location.</param>
|
||||
/// <param name="value2">value2 - The second vector location.</param>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue