Merge branch 'general-devel' of github.com:NyxStudios/TShock into general-devel
This commit is contained in:
commit
049abd9146
4 changed files with 169 additions and 99 deletions
|
|
@ -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";
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
@ -1648,7 +1648,8 @@ namespace TShockAPI
|
|||
TileID.MinecartTrack,
|
||||
TileID.WeaponsRack,
|
||||
TileID.ItemFrame,
|
||||
TileID.LunarMonolith
|
||||
TileID.LunarMonolith,
|
||||
TileID.TargetDummy
|
||||
};
|
||||
|
||||
private static bool HandleSendTileSquare(GetDataHandlerArgs args)
|
||||
|
|
@ -2099,14 +2100,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 +2215,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 +2444,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 +2596,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 +2604,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 +2634,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 +2642,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 +2709,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 +2811,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 +2848,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 +2856,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 +2864,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 +2872,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 +2880,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 +2888,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 +3329,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 +3395,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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -854,6 +854,8 @@ namespace TShockAPI
|
|||
/// <summary>OnSecondUpdate - Called effectively every second for all time based checks.</summary>
|
||||
private void OnSecondUpdate()
|
||||
{
|
||||
DisableFlags flags = Config.DisableSecondUpdateLogs ? DisableFlags.WriteToConsole : DisableFlags.WriteToLogAndConsole;
|
||||
|
||||
if (Config.ForceTime != "normal")
|
||||
{
|
||||
switch (Config.ForceTime)
|
||||
|
|
@ -875,7 +877,7 @@ namespace TShockAPI
|
|||
{
|
||||
if (player.TileKillThreshold >= Config.TileKillThreshold)
|
||||
{
|
||||
player.Disable("Reached TileKill threshold.");
|
||||
player.Disable("Reached TileKill threshold.", flags);
|
||||
TSPlayer.Server.RevertTiles(player.TilesDestroyed);
|
||||
player.TilesDestroyed.Clear();
|
||||
}
|
||||
|
|
@ -891,7 +893,7 @@ namespace TShockAPI
|
|||
{
|
||||
if (player.TilePlaceThreshold >= Config.TilePlaceThreshold)
|
||||
{
|
||||
player.Disable("Reached TilePlace threshold");
|
||||
player.Disable("Reached TilePlace threshold", flags);
|
||||
TSPlayer.Server.RevertTiles(player.TilesCreated);
|
||||
player.TilesCreated.Clear();
|
||||
}
|
||||
|
|
@ -932,7 +934,7 @@ namespace TShockAPI
|
|||
|
||||
if (player.TileLiquidThreshold >= Config.TileLiquidThreshold)
|
||||
{
|
||||
player.Disable("Reached TileLiquid threshold");
|
||||
player.Disable("Reached TileLiquid threshold", flags);
|
||||
}
|
||||
if (player.TileLiquidThreshold > 0)
|
||||
{
|
||||
|
|
@ -941,7 +943,7 @@ namespace TShockAPI
|
|||
|
||||
if (player.ProjectileThreshold >= Config.ProjectileThreshold)
|
||||
{
|
||||
player.Disable("Reached projectile threshold");
|
||||
player.Disable("Reached projectile threshold", flags);
|
||||
}
|
||||
if (player.ProjectileThreshold > 0)
|
||||
{
|
||||
|
|
@ -950,7 +952,7 @@ namespace TShockAPI
|
|||
|
||||
if (player.PaintThreshold >= Config.TilePaintThreshold)
|
||||
{
|
||||
player.Disable("Reached paint threshold");
|
||||
player.Disable("Reached paint threshold", flags);
|
||||
}
|
||||
if (player.PaintThreshold > 0)
|
||||
{
|
||||
|
|
@ -961,80 +963,98 @@ namespace TShockAPI
|
|||
{
|
||||
player.Spawn();
|
||||
}
|
||||
string check = "none";
|
||||
foreach (Item item in player.TPlayer.inventory)
|
||||
{
|
||||
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.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;
|
||||
}
|
||||
}
|
||||
foreach (Item item in player.TPlayer.dye)
|
||||
if (Main.ServerSideCharacter && !player.IsLoggedIn)
|
||||
{
|
||||
if (Itembans.ItemIsBanned(item.name, player))
|
||||
if (CheckIgnores(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.Disable("not being logged in while SSC is enabled", flags);
|
||||
}
|
||||
}
|
||||
foreach (Item item in player.TPlayer.miscEquips)
|
||||
{
|
||||
if (Itembans.ItemIsBanned(item.name, player))
|
||||
else if (Itembans.ItemIsBanned(player.TPlayer.inventory[player.TPlayer.selectedItem].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.Disable($"holding banned item: {player.TPlayer.inventory[player.TPlayer.selectedItem].name}", flags);
|
||||
player.SendErrorMessage($"You are holding a banned item: {player.TPlayer.inventory[player.TPlayer.selectedItem].name}");
|
||||
}
|
||||
}
|
||||
foreach (Item item in player.TPlayer.miscDyes)
|
||||
else if (!Main.ServerSideCharacter || (Main.ServerSideCharacter && player.IsLoggedIn))
|
||||
{
|
||||
if (Itembans.ItemIsBanned(item.name, player))
|
||||
string check = "none";
|
||||
foreach (Item item in player.TPlayer.inventory)
|
||||
{
|
||||
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;
|
||||
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.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;
|
||||
}
|
||||
}
|
||||
foreach (Item item in player.TPlayer.dye)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
foreach (Item item in player.TPlayer.miscEquips)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
foreach (Item item in player.TPlayer.miscDyes)
|
||||
{
|
||||
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.IgnoreActionsForDisabledArmor = check;
|
||||
|
||||
if (CheckIgnores(player))
|
||||
{
|
||||
player.Disable("check ignores failed in OnSecondUpdate()", flags);
|
||||
}
|
||||
else if (Itembans.ItemIsBanned(player.TPlayer.inventory[player.TPlayer.selectedItem].name, player))
|
||||
{
|
||||
player.Disable($"holding banned item: {player.TPlayer.inventory[player.TPlayer.selectedItem].name}", flags);
|
||||
player.SendErrorMessage($"You are holding a banned item: {player.TPlayer.inventory[player.TPlayer.selectedItem].name}");
|
||||
}
|
||||
}
|
||||
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 +1064,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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue