Players who get disabled by internal anti spam and anti banned item checks will now get visual debuffs lasting 5 seconds. Note client can't bypass already, server drops many packets for the wait period.

This commit is contained in:
Zidonuke 2011-12-29 19:32:28 -05:00
parent d5affa3ba5
commit e8a4cb6ae9
3 changed files with 30 additions and 18 deletions

View file

@ -609,6 +609,7 @@ namespace TShockAPI
} }
if (tiletype == 48 && !args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned("Spike", args.Player)) if (tiletype == 48 && !args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned("Spike", args.Player))
{ {
args.Player.Disable();
args.Player.SendTileSquare(tileX, tileY); args.Player.SendTileSquare(tileX, tileY);
return true; return true;
} }
@ -620,6 +621,7 @@ namespace TShockAPI
} }
if (tiletype == 141 && !args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned("Explosives", args.Player)) if (tiletype == 141 && !args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned("Explosives", args.Player))
{ {
args.Player.Disable();
args.Player.SendTileSquare(tileX, tileY); args.Player.SendTileSquare(tileX, tileY);
return true; return true;
} }
@ -650,14 +652,14 @@ namespace TShockAPI
if (args.Player.TileKillThreshold >= TShock.Config.TileKillThreshold) if (args.Player.TileKillThreshold >= TShock.Config.TileKillThreshold)
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.SendTileSquare(tileX, tileY); args.Player.SendTileSquare(tileX, tileY);
return true; return true;
} }
if (args.Player.TilePlaceThreshold >= TShock.Config.TilePlaceThreshold) if (args.Player.TilePlaceThreshold >= TShock.Config.TilePlaceThreshold)
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.SendTileSquare(tileX, tileY); args.Player.SendTileSquare(tileX, tileY);
return true; return true;
} }
@ -800,7 +802,7 @@ namespace TShockAPI
if (!args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned(args.TPlayer.inventory[item].name, args.Player)) if (!args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned(args.TPlayer.inventory[item].name, args.Player))
{ {
control -= 32; control -= 32;
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.SendMessage(string.Format("You cannot use {0} on this server. Your actions are being ignored.", args.TPlayer.inventory[item].name), Color.Red); args.Player.SendMessage(string.Format("You cannot use {0} on this server. Your actions are being ignored.", args.TPlayer.inventory[item].name), Color.Red);
} }
} }
@ -869,14 +871,14 @@ namespace TShockAPI
if (args.Player.Index != owner) if (args.Player.Index != owner)
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.RemoveProjectile(ident, owner); args.Player.RemoveProjectile(ident, owner);
return true; return true;
} }
if (dmg > 175) if (dmg > 175)
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.RemoveProjectile(ident, owner); args.Player.RemoveProjectile(ident, owner);
return true; return true;
} }
@ -889,14 +891,14 @@ namespace TShockAPI
if (TShock.CheckProjectilePermission(args.Player, index, type)) if (TShock.CheckProjectilePermission(args.Player, index, type))
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.RemoveProjectile(ident, owner); args.Player.RemoveProjectile(ident, owner);
return true; return true;
} }
if (args.Player.ProjectileThreshold >= TShock.Config.ProjectileThreshold) if (args.Player.ProjectileThreshold >= TShock.Config.ProjectileThreshold)
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.RemoveProjectile(ident, owner); args.Player.RemoveProjectile(ident, owner);
return true; return true;
} }
@ -922,7 +924,7 @@ namespace TShockAPI
if (args.Player.Index != owner) if (args.Player.Index != owner)
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
return true; return true;
} }
@ -937,7 +939,7 @@ namespace TShockAPI
if (args.Player.Index != Main.projectile[index].owner) if (args.Player.Index != Main.projectile[index].owner)
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.RemoveProjectile(ident, owner); args.Player.RemoveProjectile(ident, owner);
return true; return true;
} }
@ -950,7 +952,7 @@ namespace TShockAPI
if (TShock.CheckProjectilePermission(args.Player, index, type)) if (TShock.CheckProjectilePermission(args.Player, index, type))
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.RemoveProjectile(ident, owner); args.Player.RemoveProjectile(ident, owner);
return true; return true;
} }
@ -1010,7 +1012,7 @@ namespace TShockAPI
if (args.Player.TileLiquidThreshold >= TShock.Config.TileLiquidThreshold) if (args.Player.TileLiquidThreshold >= TShock.Config.TileLiquidThreshold)
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.SendTileSquare(tileX, tileY); args.Player.SendTileSquare(tileX, tileY);
return true; return true;
} }
@ -1032,14 +1034,14 @@ namespace TShockAPI
if (lava && bucket != 2 && !args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned("Lava Bucket", args.Player)) if (lava && bucket != 2 && !args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned("Lava Bucket", args.Player))
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.SendTileSquare(tileX, tileY); args.Player.SendTileSquare(tileX, tileY);
return true; return true;
} }
if (!lava && bucket != 1 && !args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned("Water Bucket", args.Player)) if (!lava && bucket != 1 && !args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned("Water Bucket", args.Player))
{ {
args.Player.LastThreat = DateTime.UtcNow; args.Player.Disable();
args.Player.SendTileSquare(tileX, tileY); args.Player.SendTileSquare(tileX, tileY);
return true; return true;
} }
@ -1081,7 +1083,6 @@ namespace TShockAPI
if (Main.tile[tileX, tileY].type != 0x15 && (!TShock.Utils.MaxChests() && Main.tile[tileX, tileY].type != 0)) //Chest if (Main.tile[tileX, tileY].type != 0x15 && (!TShock.Utils.MaxChests() && Main.tile[tileX, tileY].type != 0)) //Chest
{ {
args.Player.LastThreat = DateTime.UtcNow;
args.Player.SendTileSquare(tileX, tileY); args.Player.SendTileSquare(tileX, tileY);
return true; return true;
} }
@ -1340,6 +1341,7 @@ namespace TShockAPI
if (dmg > 175) if (dmg > 175)
{ {
args.Player.Disable();
args.Player.SendData(PacketTypes.PlayerHp, "", id); args.Player.SendData(PacketTypes.PlayerHp, "", id);
args.Player.SendData(PacketTypes.PlayerUpdate, "", id); args.Player.SendData(PacketTypes.PlayerUpdate, "", id);
return true; return true;
@ -1389,6 +1391,7 @@ namespace TShockAPI
if (dmg > 175) if (dmg > 175)
{ {
args.Player.Disable();
args.Player.SendData(PacketTypes.NpcUpdate, "", id); args.Player.SendData(PacketTypes.NpcUpdate, "", id);
return true; return true;
} }

View file

@ -350,6 +350,15 @@ namespace TShockAPI
SendData(PacketTypes.PlayerTeam, "", Index); SendData(PacketTypes.PlayerTeam, "", Index);
} }
public virtual void Disable()
{
LastThreat = DateTime.UtcNow;
SetBuff(35, 330); //Silenced
SetBuff(33, 330); //Weak
SetBuff(32, 330); //Slow
SetBuff(23, 330); //Cursed
}
public virtual void Whoopie(object time) public virtual void Whoopie(object time)
{ {
var time2 = (int)time; var time2 = (int)time;

View file

@ -489,7 +489,7 @@ namespace TShockAPI
{ {
if (player.TileKillThreshold >= Config.TileKillThreshold) if (player.TileKillThreshold >= Config.TileKillThreshold)
{ {
player.LastThreat = DateTime.UtcNow; player.Disable();
TSPlayer.Server.RevertTiles(player.TilesDestroyed); TSPlayer.Server.RevertTiles(player.TilesDestroyed);
player.TilesDestroyed.Clear(); player.TilesDestroyed.Clear();
} }
@ -502,7 +502,7 @@ namespace TShockAPI
{ {
if (player.TilePlaceThreshold >= Config.TilePlaceThreshold) if (player.TilePlaceThreshold >= Config.TilePlaceThreshold)
{ {
player.LastThreat = DateTime.UtcNow; player.Disable();
TSPlayer.Server.RevertTiles(player.TilesCreated); TSPlayer.Server.RevertTiles(player.TilesCreated);
player.TilesCreated.Clear(); player.TilesCreated.Clear();
} }
@ -513,7 +513,7 @@ namespace TShockAPI
} }
if(player.TileLiquidThreshold >= Config.TileLiquidThreshold) if(player.TileLiquidThreshold >= Config.TileLiquidThreshold)
{ {
player.LastThreat = DateTime.UtcNow; player.Disable();
} }
if (player.TileLiquidThreshold > 0) if (player.TileLiquidThreshold > 0)
{ {
@ -521,7 +521,7 @@ namespace TShockAPI
} }
if (player.ProjectileThreshold >= Config.ProjectileThreshold) if (player.ProjectileThreshold >= Config.ProjectileThreshold)
{ {
player.LastThreat = DateTime.UtcNow; player.Disable();
} }
if (player.ProjectileThreshold > 0) if (player.ProjectileThreshold > 0)
{ {