Added a new Disable method with flags to determine where the message is logged to.

Obsoleted the old disable method
Added a config option to disable OnSecondUpdate logs (disable message is written only to console if set to true)
Updated all instances of the obsolete Disable method to the new Disable method
This commit is contained in:
White 2015-09-12 11:33:17 +09:30
parent 2e5eaae0b3
commit 33739c4f07
4 changed files with 142 additions and 93 deletions

View file

@ -119,8 +119,8 @@ namespace TShockAPI
[Description("Mediumcore players ONLY. This means softcore players cannot join.")]
public bool MediumcoreOnly;
[Description("Kicks a mediumcore player on death.")]
/// <summary>KickOnMediumcoreDeath - Whether or not to kick mediumcore players on death.</summary>
[Description("Kicks a mediumcore player on death.")]
public bool KickOnMediumcoreDeath;
/// <summary>BanOnMediumcoreDeath - Whether or not to ban mediumcore players on death.</summary>
@ -180,6 +180,9 @@ namespace TShockAPI
[Description("Force-disable printing logs to players with the log permission.")]
public bool DisableSpewLogs = true;
[Description("Prevents OnSecondUpdate checks from writing to the log file")]
public bool DisableSecondUpdateLogs = false;
[Description("Valid types are \"sha512\", \"sha256\", \"md5\", append with \"-xp\" for the xp supported algorithms.")]
public string HashAlgorithm = "sha512";

View file

@ -1331,7 +1331,7 @@ namespace TShockAPI
if (max > TShock.Config.MaxHP && !args.Player.Group.HasPermission(Permissions.ignorehp))
{
args.Player.Disable("Maximum HP beyond limit");
args.Player.Disable("Maximum HP beyond limit", DisableFlags.WriteToLogAndConsole);
return true;
}
@ -1360,7 +1360,7 @@ namespace TShockAPI
if (max > TShock.Config.MaxMP && !args.Player.Group.HasPermission(Permissions.ignoremp))
{
args.Player.Disable("Maximum MP beyond limit");
args.Player.Disable("Maximum MP beyond limit", DisableFlags.WriteToLogAndConsole);
return true;
}
@ -2099,14 +2099,14 @@ namespace TShockAPI
if (args.Player.TileKillThreshold >= TShock.Config.TileKillThreshold)
{
args.Player.Disable("Reached TileKill threshold.");
args.Player.Disable("Reached TileKill threshold.", DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquare(tileX, tileY, 4);
return true;
}
if (args.Player.TilePlaceThreshold >= TShock.Config.TilePlaceThreshold)
{
args.Player.Disable("Reached TilePlace threshold.");
args.Player.Disable("Reached TilePlace threshold.", DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquare(tileX, tileY, 4);
return true;
}
@ -2214,7 +2214,7 @@ namespace TShockAPI
if (args.Player.TilePlaceThreshold >= TShock.Config.TilePlaceThreshold)
{
args.Player.Disable("Reached TilePlace threshold.");
args.Player.Disable("Reached TilePlace threshold.", DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquare(x, y, 4);
return true;
}
@ -2443,7 +2443,7 @@ namespace TShockAPI
if (TShock.Itembans.ItemIsBanned(itemName, args.Player))
{
control[5] = false;
args.Player.Disable("using a banned item ({0})".SFormat(itemName));
args.Player.Disable("using a banned item ({0})".SFormat(itemName), DisableFlags.WriteToLogAndConsole);
args.Player.SendErrorMessage("You cannot use {0} on this server. Your actions are being ignored.", itemName);
}
@ -2595,7 +2595,7 @@ namespace TShockAPI
if (TShock.ProjectileBans.ProjectileIsBanned(type, args.Player))
{
args.Player.Disable("Player does not have permission to create that projectile.", true);
args.Player.Disable("Player does not have permission to create that projectile.", DisableFlags.WriteToLogAndConsole);
args.Player.SendErrorMessage("You do not have permission to create that projectile.");
args.Player.RemoveProjectile(ident, owner);
return true;
@ -2603,7 +2603,7 @@ namespace TShockAPI
if (dmg > TShock.Config.MaxProjDamage && !args.Player.Group.HasPermission(Permissions.ignoredamagecap))
{
args.Player.Disable(String.Format("Projectile damage is higher than {0}.", TShock.Config.MaxProjDamage));
args.Player.Disable(String.Format("Projectile damage is higher than {0}.", TShock.Config.MaxProjDamage), DisableFlags.WriteToLogAndConsole);
args.Player.RemoveProjectile(ident, owner);
return true;
}
@ -2633,7 +2633,7 @@ namespace TShockAPI
}
else
{
args.Player.Disable(String.Format("Does not have projectile permission to update projectile. ({0})", type));
args.Player.Disable(String.Format("Does not have projectile permission to update projectile. ({0})", type), DisableFlags.WriteToLogAndConsole);
args.Player.RemoveProjectile(ident, owner);
}
return true;
@ -2641,7 +2641,7 @@ namespace TShockAPI
if (args.Player.ProjectileThreshold >= TShock.Config.ProjectileThreshold)
{
args.Player.Disable("Reached projectile update threshold.");
args.Player.Disable("Reached projectile update threshold.", DisableFlags.WriteToLogAndConsole);
args.Player.RemoveProjectile(ident, owner);
return true;
}
@ -2708,7 +2708,7 @@ namespace TShockAPI
if (TShock.CheckProjectilePermission(args.Player, index, type) && type != 102 && type != 100 && !TShock.Config.IgnoreProjKill)
{
args.Player.Disable("Does not have projectile permission to kill projectile.");
args.Player.Disable("Does not have projectile permission to kill projectile.", DisableFlags.WriteToLogAndConsole);
args.Player.RemoveProjectile(ident, owner);
return true;
}
@ -2810,7 +2810,7 @@ namespace TShockAPI
if (args.Player.TileLiquidThreshold >= TShock.Config.TileLiquidThreshold)
{
args.Player.Disable("Reached TileLiquid threshold.");
args.Player.Disable("Reached TileLiquid threshold.", DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquare(tileX, tileY, 1);
return true;
}
@ -2847,7 +2847,7 @@ namespace TShockAPI
if (type == 1 && !(bucket == 2 || bucket == 0))
{
args.Player.SendErrorMessage("You do not have permission to perform this action.");
args.Player.Disable("Spreading lava without holding a lava bucket");
args.Player.Disable("Spreading lava without holding a lava bucket", DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquare(tileX, tileY, 1);
return true;
}
@ -2855,7 +2855,7 @@ namespace TShockAPI
if (type == 1 && TShock.Itembans.ItemIsBanned("Lava Bucket", args.Player))
{
args.Player.SendErrorMessage("You do not have permission to perform this action.");
args.Player.Disable("Using banned lava bucket without permissions");
args.Player.Disable("Using banned lava bucket without permissions", DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquare(tileX, tileY, 1);
return true;
}
@ -2863,7 +2863,7 @@ namespace TShockAPI
if (type == 0 && !(bucket == 1 || bucket == 0 || bucket == 4))
{
args.Player.SendErrorMessage("You do not have permission to perform this action.");
args.Player.Disable("Spreading water without holding a water bucket");
args.Player.Disable("Spreading water without holding a water bucket", DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquare(tileX, tileY, 1);
return true;
}
@ -2871,7 +2871,7 @@ namespace TShockAPI
if (type == 0 && TShock.Itembans.ItemIsBanned("Water Bucket", args.Player))
{
args.Player.SendErrorMessage("You do not have permission to perform this action.");
args.Player.Disable("Using banned water bucket without permissions");
args.Player.Disable("Using banned water bucket without permissions", DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquare(tileX, tileY, 1);
return true;
}
@ -2879,7 +2879,7 @@ namespace TShockAPI
if (type == 2 && !(bucket == 3 || bucket == 0))
{
args.Player.SendErrorMessage("You do not have permission to perform this action.");
args.Player.Disable("Spreading honey without holding a honey bucket");
args.Player.Disable("Spreading honey without holding a honey bucket", DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquare(tileX, tileY, 1);
return true;
}
@ -2887,7 +2887,7 @@ namespace TShockAPI
if (type == 2 && TShock.Itembans.ItemIsBanned("Honey Bucket", args.Player))
{
args.Player.SendErrorMessage("You do not have permission to perform this action.");
args.Player.Disable("Using banned honey bucket without permissions");
args.Player.Disable("Using banned honey bucket without permissions", DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquare(tileX, tileY, 1);
return true;
}
@ -3328,7 +3328,7 @@ namespace TShockAPI
}
else
{
args.Player.Disable(String.Format("Player damage exceeded {0}.", TShock.Config.MaxDamage));
args.Player.Disable(String.Format("Player damage exceeded {0}.", TShock.Config.MaxDamage), DisableFlags.WriteToLogAndConsole);
}
args.Player.SendData(PacketTypes.PlayerHp, "", id);
args.Player.SendData(PacketTypes.PlayerUpdate, "", id);
@ -3394,7 +3394,7 @@ namespace TShockAPI
}
else
{
args.Player.Disable(String.Format("NPC damage exceeded {0}.", TShock.Config.MaxDamage));
args.Player.Disable(String.Format("NPC damage exceeded {0}.", TShock.Config.MaxDamage), DisableFlags.WriteToLogAndConsole);
}
args.Player.SendData(PacketTypes.NpcUpdate, "", id);
return true;

View file

@ -31,6 +31,30 @@ using Timer = System.Timers.Timer;
namespace TShockAPI
{
/// <summary>
/// Bitflags used with the <see cref="Disable(string, DisableFlags)"></see> method
/// </summary>
[Flags]
public enum DisableFlags
{
/// <summary>
/// Disable the player and leave no messages
/// </summary>
None,
/// <summary>
/// Write the Disable message to the console
/// </summary>
WriteToConsole,
/// <summary>
/// Write the Disable message to the log
/// </summary>
WriteToLog,
/// <summary>
/// Equivalent to WriteToConsole | WriteToLog
/// </summary>
WriteToLogAndConsole
}
public class TSPlayer
{
/// <summary>
@ -794,7 +818,25 @@ namespace TShockAPI
/// </summary>
/// <param name="reason">The reason why the player was disabled.</param>
/// <param name="displayConsole">Whether or not to log this event to the console.</param>
[Obsolete("Use Disable(string, DisableFlags)")]
public virtual void Disable(string reason = "", bool displayConsole = true)
{
if (displayConsole)
{
Disable(reason, DisableFlags.WriteToConsole);
}
else
{
Disable(reason, DisableFlags.WriteToLog);
}
}
/// <summary>
/// Disables the player for the given <paramref name="reason"/>
/// </summary>
/// <param name="reason">The reason why the player was disabled.</param>
/// <param name="flags">Flags to dictate where this event is logged to.</param>
public virtual void Disable(string reason = "", DisableFlags flags = DisableFlags.WriteToLog)
{
LastThreat = DateTime.UtcNow;
SetBuff(BuffID.Frozen, 330, true);
@ -810,14 +852,18 @@ namespace TShockAPI
{
if ((DateTime.UtcNow - LastDisableNotification).TotalMilliseconds > 5000)
{
if (displayConsole)
if (flags.HasFlag(DisableFlags.WriteToConsole))
{
TShock.Log.ConsoleInfo("Player {0} has been disabled for {1}.", Name, reason);
}
else
{
TShock.Log.Info("Player {0} has been disabled for {1}.", Name, reason);
if (flags.HasFlag(DisableFlags.WriteToLog))
{
TShock.Log.ConsoleInfo("Player {0} has been disabled for {1}.", Name, reason);
}
else
{
Server.SendInfoMessage("Player {0} has been disabled for {1}.", Name, reason);
}
}
LastDisableNotification = DateTime.UtcNow;
}
}

View file

@ -875,7 +875,7 @@ namespace TShockAPI
{
if (player.TileKillThreshold >= Config.TileKillThreshold)
{
player.Disable("Reached TileKill threshold.");
player.Disable("Reached TileKill threshold.", DisableFlags.WriteToLogAndConsole);
TSPlayer.Server.RevertTiles(player.TilesDestroyed);
player.TilesDestroyed.Clear();
}
@ -891,7 +891,7 @@ namespace TShockAPI
{
if (player.TilePlaceThreshold >= Config.TilePlaceThreshold)
{
player.Disable("Reached TilePlace threshold");
player.Disable("Reached TilePlace threshold", DisableFlags.WriteToLogAndConsole);
TSPlayer.Server.RevertTiles(player.TilesCreated);
player.TilesCreated.Clear();
}
@ -932,7 +932,7 @@ namespace TShockAPI
if (player.TileLiquidThreshold >= Config.TileLiquidThreshold)
{
player.Disable("Reached TileLiquid threshold");
player.Disable("Reached TileLiquid threshold", DisableFlags.WriteToLogAndConsole);
}
if (player.TileLiquidThreshold > 0)
{
@ -941,7 +941,7 @@ namespace TShockAPI
if (player.ProjectileThreshold >= Config.ProjectileThreshold)
{
player.Disable("Reached projectile threshold");
player.Disable("Reached projectile threshold", DisableFlags.WriteToLogAndConsole);
}
if (player.ProjectileThreshold > 0)
{
@ -950,7 +950,7 @@ namespace TShockAPI
if (player.PaintThreshold >= Config.TilePaintThreshold)
{
player.Disable("Reached paint threshold");
player.Disable("Reached paint threshold", DisableFlags.WriteToLogAndConsole);
}
if (player.PaintThreshold > 0)
{
@ -961,80 +961,80 @@ namespace TShockAPI
{
player.Spawn();
}
string check = "none";
foreach (Item item in player.TPlayer.inventory)
if (!Main.ServerSideCharacter || (Main.ServerSideCharacter && player.IsLoggedIn))
{
if (!player.Group.HasPermission(Permissions.ignorestackhackdetection) && (item.stack > item.maxStack || item.stack < 0) &&
item.type != 0)
string check = "none";
foreach (Item item in player.TPlayer.inventory)
{
check = "Remove item " + item.name + " (" + item.stack + ") exceeds max stack of " + item.maxStack;
player.SendErrorMessage(check);
break;
if (!player.Group.HasPermission(Permissions.ignorestackhackdetection) && (item.stack > item.maxStack || item.stack < 0) &&
item.type != 0)
{
check = "Remove item " + item.name + " (" + item.stack + ") exceeds max stack of " + item.maxStack;
player.SendErrorMessage(check);
break;
}
}
}
player.IgnoreActionsForCheating = check;
check = "none";
// Please don't remove this for the time being; without it, players wearing banned equipment will only get debuffed once
foreach (Item item in player.TPlayer.armor)
{
if (Itembans.ItemIsBanned(item.name, player))
player.IgnoreActionsForCheating = check;
check = "none";
// Please don't remove this for the time being; without it, players wearing banned equipment will only get debuffed once
foreach (Item item in player.TPlayer.armor)
{
player.SetBuff(BuffID.Frozen, 330, true);
player.SetBuff(BuffID.Stoned, 330, true);
player.SetBuff(BuffID.Webbed, 330, true);
check = "Remove armor/accessory " + item.name;
if (Itembans.ItemIsBanned(item.name, player))
{
player.SetBuff(BuffID.Frozen, 330, true);
player.SetBuff(BuffID.Stoned, 330, true);
player.SetBuff(BuffID.Webbed, 330, true);
check = "Remove armor/accessory " + item.name;
player.SendErrorMessage("You are wearing banned equipment. {0}", check);
break;
player.SendErrorMessage("You are wearing banned equipment. {0}", check);
break;
}
}
}
foreach (Item item in player.TPlayer.dye)
{
if (Itembans.ItemIsBanned(item.name, player))
foreach (Item item in player.TPlayer.dye)
{
player.SetBuff(BuffID.Frozen, 330, true);
player.SetBuff(BuffID.Stoned, 330, true);
player.SetBuff(BuffID.Webbed, 330, true);
check = "Remove dye " + item.name;
if (Itembans.ItemIsBanned(item.name, player))
{
player.SetBuff(BuffID.Frozen, 330, true);
player.SetBuff(BuffID.Stoned, 330, true);
player.SetBuff(BuffID.Webbed, 330, true);
check = "Remove dye " + item.name;
player.SendErrorMessage("You are wearing banned equipment. {0}", check);
break;
player.SendErrorMessage("You are wearing banned equipment. {0}", check);
break;
}
}
}
foreach (Item item in player.TPlayer.miscEquips)
{
if (Itembans.ItemIsBanned(item.name, player))
foreach (Item item in player.TPlayer.miscEquips)
{
player.SetBuff(BuffID.Frozen, 330, true);
player.SetBuff(BuffID.Stoned, 330, true);
player.SetBuff(BuffID.Webbed, 330, true);
check = "Remove misc equip " + item.name;
if (Itembans.ItemIsBanned(item.name, player))
{
player.SetBuff(BuffID.Frozen, 330, true);
player.SetBuff(BuffID.Stoned, 330, true);
player.SetBuff(BuffID.Webbed, 330, true);
check = "Remove misc equip " + item.name;
player.SendErrorMessage("You are wearing banned equipment. {0}", check);
break;
player.SendErrorMessage("You are wearing banned equipment. {0}", check);
break;
}
}
}
foreach (Item item in player.TPlayer.miscDyes)
{
if (Itembans.ItemIsBanned(item.name, player))
foreach (Item item in player.TPlayer.miscDyes)
{
player.SetBuff(BuffID.Frozen, 330, true);
player.SetBuff(BuffID.Stoned, 330, true);
player.SetBuff(BuffID.Webbed, 330, true);
check = "Remove misc dye " + item.name;
if (Itembans.ItemIsBanned(item.name, player))
{
player.SetBuff(BuffID.Frozen, 330, true);
player.SetBuff(BuffID.Stoned, 330, true);
player.SetBuff(BuffID.Webbed, 330, true);
check = "Remove misc dye " + item.name;
player.SendErrorMessage("You are wearing banned equipment. {0}", check);
break;
player.SendErrorMessage("You are wearing banned equipment. {0}", check);
break;
}
}
player.IgnoreActionsForDisabledArmor = check;
if (CheckIgnores(player) || Itembans.ItemIsBanned(player.TPlayer.inventory[player.TPlayer.selectedItem].name, player))
{
DisableFlags flags = Config.DisableSecondUpdateLogs ? DisableFlags.WriteToConsole : DisableFlags.WriteToLogAndConsole;
player.Disable("check ignores failed in OnSecondUpdate()", flags);
}
}
player.IgnoreActionsForDisabledArmor = check;
if (CheckIgnores(player))
{
player.Disable("check ignores failed in OnSecondUpdate()", false);
}
else if (Itembans.ItemIsBanned(player.TPlayer.inventory[player.TPlayer.selectedItem].name, player))
{
player.SetBuff(23, 120); //Cursed
}
var oldRegion = player.CurrentRegion;
@ -1044,12 +1044,12 @@ namespace TShockAPI
{
if (oldRegion != null)
{
Hooks.RegionHooks.OnRegionLeft(player, oldRegion);
RegionHooks.OnRegionLeft(player, oldRegion);
}
if (player.CurrentRegion != null)
{
Hooks.RegionHooks.OnRegionEntered(player, player.CurrentRegion);
RegionHooks.OnRegionEntered(player, player.CurrentRegion);
}
}
}