Merge branch 'general-devel' into patch-18
This commit is contained in:
commit
f1392cfa52
5 changed files with 77 additions and 32 deletions
|
|
@ -295,7 +295,8 @@ namespace TShockAPI
|
|||
}
|
||||
// If the tile is a pickaxe tile and they aren't selecting a pickaxe, they're hacking.
|
||||
// Item frames can be modified without pickaxe tile.
|
||||
else if (tile.type != TileID.ItemFrame
|
||||
//also add an exception for snake coils, they can be removed when the player places a new one or after x amount of time
|
||||
else if (tile.type != TileID.ItemFrame && tile.type != TileID.MysticSnakeRope
|
||||
&& !Main.tileAxe[tile.type] && !Main.tileHammer[tile.type] && tile.wall == 0 && args.Player.TPlayer.mount.Type != 8 && selectedItem.pick == 0 && !ItemID.Sets.Explosives[selectedItem.netID] && args.Player.RecentFuse == 0)
|
||||
{
|
||||
TShock.Log.ConsoleDebug("Bouncer / OnTileEdit rejected from (pick) {0} {1} {2}", args.Player.Name, action, editData);
|
||||
|
|
@ -383,14 +384,6 @@ namespace TShockAPI
|
|||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
if ((TShock.Utils.TilePlacementValid(tileX, tileY + 1) && Main.tile[tileX, tileY + 1].type == TileID.Boulder) ||
|
||||
(TShock.Utils.TilePlacementValid(tileX + 1, tileY + 1) && Main.tile[tileX + 1, tileY + 1].type == TileID.Boulder))
|
||||
{
|
||||
TShock.Log.ConsoleDebug("Bouncer / OnTileEdit rejected from (validplacement) {0} {1} {2}", args.Player.Name, action, editData);
|
||||
args.Player.SendTileSquare(tileX, tileY, 3);
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (action == EditAction.PlaceWire || action == EditAction.PlaceWire2 || action == EditAction.PlaceWire3)
|
||||
|
|
@ -465,9 +458,10 @@ namespace TShockAPI
|
|||
return;
|
||||
}
|
||||
|
||||
if (!args.Player.IsInRange(tileX, tileY))
|
||||
//make sure it isnt a snake coil related edit so it doesnt spam debug logs with range check failures
|
||||
if ((action == EditAction.PlaceTile && editData != TileID.MysticSnakeRope) || (action == EditAction.KillTile && tile.type != TileID.MysticSnakeRope) && !args.Player.IsInRange(tileX, tileY))
|
||||
{
|
||||
if (action == EditAction.PlaceTile && (editData == TileID.Rope || editData == TileID.SilkRope || editData == TileID.VineRope || editData == TileID.WebRope))
|
||||
if (action == EditAction.PlaceTile && (editData == TileID.Rope || editData == TileID.SilkRope || editData == TileID.VineRope || editData == TileID.WebRope || editData == TileID.MysticSnakeRope))
|
||||
{
|
||||
args.Handled = false;
|
||||
return;
|
||||
|
|
@ -536,23 +530,27 @@ namespace TShockAPI
|
|||
return;
|
||||
}
|
||||
|
||||
if ((action == EditAction.PlaceTile || action == EditAction.ReplaceTile || action == EditAction.PlaceWall || action == EditAction.ReplaceWall) && !args.Player.HasPermission(Permissions.ignoreplacetiledetection))
|
||||
//snake coil can allow massive amounts of tile edits so it gets an exception
|
||||
if (!((action == EditAction.PlaceTile && editData == TileID.MysticSnakeRope) || (action == EditAction.KillTile && tile.type == TileID.MysticSnakeRope)))
|
||||
{
|
||||
args.Player.TilePlaceThreshold++;
|
||||
var coords = new Vector2(tileX, tileY);
|
||||
lock (args.Player.TilesCreated)
|
||||
if (!args.Player.TilesCreated.ContainsKey(coords))
|
||||
args.Player.TilesCreated.Add(coords, Main.tile[tileX, tileY]);
|
||||
}
|
||||
if ((action == EditAction.PlaceTile || action == EditAction.ReplaceTile || action == EditAction.PlaceWall || action == EditAction.ReplaceWall) && !args.Player.HasPermission(Permissions.ignoreplacetiledetection))
|
||||
{
|
||||
args.Player.TilePlaceThreshold++;
|
||||
var coords = new Vector2(tileX, tileY);
|
||||
lock (args.Player.TilesCreated)
|
||||
if (!args.Player.TilesCreated.ContainsKey(coords))
|
||||
args.Player.TilesCreated.Add(coords, Main.tile[tileX, tileY]);
|
||||
}
|
||||
|
||||
if ((action == EditAction.KillTile || action == EditAction.KillTileNoItem || action == EditAction.ReplaceTile || action == EditAction.KillWall || action == EditAction.ReplaceWall) && Main.tileSolid[Main.tile[tileX, tileY].type] &&
|
||||
!args.Player.HasPermission(Permissions.ignorekilltiledetection))
|
||||
{
|
||||
args.Player.TileKillThreshold++;
|
||||
var coords = new Vector2(tileX, tileY);
|
||||
lock (args.Player.TilesDestroyed)
|
||||
if (!args.Player.TilesDestroyed.ContainsKey(coords))
|
||||
args.Player.TilesDestroyed.Add(coords, Main.tile[tileX, tileY]);
|
||||
if ((action == EditAction.KillTile || action == EditAction.KillTileNoItem || action == EditAction.ReplaceTile || action == EditAction.KillWall || action == EditAction.ReplaceWall) && Main.tileSolid[Main.tile[tileX, tileY].type] &&
|
||||
!args.Player.HasPermission(Permissions.ignorekilltiledetection))
|
||||
{
|
||||
args.Player.TileKillThreshold++;
|
||||
var coords = new Vector2(tileX, tileY);
|
||||
lock (args.Player.TilesDestroyed)
|
||||
if (!args.Player.TilesDestroyed.ContainsKey(coords))
|
||||
args.Player.TilesDestroyed.Add(coords, Main.tile[tileX, tileY]);
|
||||
}
|
||||
}
|
||||
args.Handled = false;
|
||||
return;
|
||||
|
|
@ -1644,7 +1642,8 @@ namespace TShockAPI
|
|||
if ((type != TileID.Rope
|
||||
|| type != TileID.SilkRope
|
||||
|| type != TileID.VineRope
|
||||
|| type != TileID.WebRope)
|
||||
|| type != TileID.WebRope
|
||||
|| type != TileID.MysticSnakeRope)
|
||||
&& !args.Player.IsInRange(x, y))
|
||||
{
|
||||
TShock.Log.ConsoleDebug("Bouncer / OnPlaceObject rejected range checks from {0}", args.Player.Name);
|
||||
|
|
|
|||
|
|
@ -521,7 +521,7 @@ namespace TShockAPI
|
|||
{
|
||||
HelpText = "Changes the wind speed."
|
||||
});
|
||||
add(new Command(Permissions.worldinfo, WorldInfo, "world")
|
||||
add(new Command(Permissions.worldinfo, WorldInfo, "worldinfo")
|
||||
{
|
||||
HelpText = "Shows information about the current world."
|
||||
});
|
||||
|
|
@ -1155,9 +1155,11 @@ namespace TShockAPI
|
|||
|
||||
private static void WorldInfo(CommandArgs args)
|
||||
{
|
||||
args.Player.SendInfoMessage("World name: " + (TShock.Config.UseServerName ? TShock.Config.ServerName : Main.worldName));
|
||||
args.Player.SendInfoMessage("World size: {0}x{1}", Main.maxTilesX, Main.maxTilesY);
|
||||
args.Player.SendInfoMessage("World ID: " + Main.worldID);
|
||||
args.Player.SendInfoMessage("Information of the currently running world");
|
||||
args.Player.SendInfoMessage("Name: " + (TShock.Config.UseServerName ? TShock.Config.ServerName : Main.worldName));
|
||||
args.Player.SendInfoMessage("Size: {0}x{1}", Main.maxTilesX, Main.maxTilesY);
|
||||
args.Player.SendInfoMessage("ID: " + Main.worldID);
|
||||
args.Player.SendInfoMessage("Seed: " + WorldGen.currentWorldSeed);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
@ -3749,6 +3751,14 @@ namespace TShockAPI
|
|||
}
|
||||
#endregion
|
||||
return;
|
||||
default:
|
||||
#region Default
|
||||
{
|
||||
args.Player.SendErrorMessage("Invalid subcommand! Type {0}itemban help for more information on valid subcommands.", Specifier);
|
||||
}
|
||||
#endregion
|
||||
return;
|
||||
|
||||
}
|
||||
}
|
||||
#endregion Item Management
|
||||
|
|
@ -3919,6 +3929,13 @@ namespace TShockAPI
|
|||
}
|
||||
#endregion
|
||||
return;
|
||||
default:
|
||||
#region Default
|
||||
{
|
||||
args.Player.SendErrorMessage("Invalid subcommand! Type {0}projban help for more information on valid subcommands.", Specifier);
|
||||
}
|
||||
#endregion
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endregion Projectile Management
|
||||
|
|
@ -4088,6 +4105,13 @@ namespace TShockAPI
|
|||
}
|
||||
#endregion
|
||||
return;
|
||||
default:
|
||||
#region Default
|
||||
{
|
||||
args.Player.SendErrorMessage("Invalid subcommand! Type {0}tileban help for more information on valid subcommands.", Specifier);
|
||||
}
|
||||
#endregion
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endregion Tile Management
|
||||
|
|
@ -5066,7 +5090,7 @@ namespace TShockAPI
|
|||
{
|
||||
if (displayIdsRequested)
|
||||
{
|
||||
players.Add(String.Format("{0} (ID: {1}{2})", ply.Name, ply.Index, ply.Account != null ? ", ID: " + ply.Account.ID : ""));
|
||||
players.Add(String.Format("{0} (Index: {1}{2})", ply.Name, ply.Index, ply.Account != null ? ", Account ID: " + ply.Account.ID : ""));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -56,6 +56,13 @@ namespace TShockAPI.Handlers.NetModules
|
|||
|
||||
string permission = PowerToPermissionMap[powerType];
|
||||
|
||||
//prevent being told about the spawnrate permission on join until relogic fixes
|
||||
if (!player.HasReceivedNPCPermissionError && powerType == CreativePowerTypes.SetSpawnRate)
|
||||
{
|
||||
player.HasReceivedNPCPermissionError = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!player.HasPermission(permission))
|
||||
{
|
||||
player.SendErrorMessage("You do not have permission to {0}.", PermissionToDescriptionMap[permission]);
|
||||
|
|
|
|||
|
|
@ -111,6 +111,11 @@ namespace TShockAPI
|
|||
return found;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used in preventing players from seeing the npc spawnrate permission error on join.
|
||||
/// </summary>
|
||||
internal bool HasReceivedNPCPermissionError { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The amount of tiles that the player has killed in the last second.
|
||||
/// </summary>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue