diff --git a/TShockAPI/ConfigurationManager.cs b/TShockAPI/ConfigurationManager.cs index 93fa6fa7..2b06d766 100644 --- a/TShockAPI/ConfigurationManager.cs +++ b/TShockAPI/ConfigurationManager.cs @@ -17,7 +17,6 @@ namespace TShockAPI public static bool infiniteInvasion; public static bool permaPvp; public static int killCount; - public static bool startedInvasion; public static bool kickCheater = true; public static bool banCheater = true; public static bool kickGriefer = true; diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index 679bc559..18416a60 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -1,32 +1,30 @@ -using System.Collections.Generic; -using Terraria; - -namespace TShockAPI -{ - public class TSPlayer - { - public uint tileThreshold; - public Dictionary tilesDestroyed = new Dictionary(); - public bool syncHP; - public bool syncMP; - public Group group; - public int lavaCount = 0; - public int waterCount = 0; - private int player; - - public TSPlayer(int ply) - { - player = ply; - } - - public Player GetPlayer() - { - return Main.player[player]; - } - - public int GetPlayerID() - { - return player; - } - } +using System.Collections.Generic; +using Terraria; + +namespace TShockAPI +{ + public class TSPlayer + { + public uint tileThreshold; + public Dictionary tilesDestroyed = new Dictionary(); + public bool syncHP; + public bool syncMP; + public Group group; + private int player; + + public TSPlayer(int ply) + { + player = ply; + } + + public Player GetPlayer() + { + return Main.player[player]; + } + + public int GetPlayerID() + { + return player; + } + } } \ No newline at end of file diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 3a044197..58b64efc 100644 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -209,15 +209,18 @@ namespace TShockAPI byte typetile = br.ReadByte(); if (type == 1 || type == 3) { - int plyX = Math.Abs((int) Main.player[e.Msg.whoAmI].position.X/16); - int plyY = Math.Abs((int) Main.player[e.Msg.whoAmI].position.Y/16); - int tileX = Math.Abs(x/16); - int tileY = Math.Abs(y/16); + int plyX = Math.Abs((int)Main.player[e.Msg.whoAmI].position.X / 16); + int plyY = Math.Abs((int)Main.player[e.Msg.whoAmI].position.Y / 16); + int tileX = Math.Abs(x); + int tileY = Math.Abs(y); - if ((plyX - tileX > 6) || (plyY - tileY > 6)) + if ((Math.Abs(plyX - tileX) > 6) || (Math.Abs(plyY - tileY) > 6)) + { TShock.Ban(e.Msg.whoAmI, "Placing impossible to place blocks."); - Tools.Broadcast(Main.player[e.Msg.whoAmI].name + " was banned for placing impossible to place blocks."); + Tools.Broadcast(Main.player[e.Msg.whoAmI].name + + " was banned for placing impossible to place blocks."); e.Handled = true; + } } if (type == 0 || type == 1) @@ -420,33 +423,39 @@ namespace TShockAPI byte liquid = br.ReadByte(); bool lava = br.ReadBoolean(); - int plyX = Math.Abs((int)Main.player[e.Msg.whoAmI].position.X/16); - int plyY = Math.Abs((int)Main.player[e.Msg.whoAmI].position.Y/16); + int plyX = Math.Abs((int)Main.player[e.Msg.whoAmI].position.X / 16); + int plyY = Math.Abs((int)Main.player[e.Msg.whoAmI].position.Y / 16); int tileX = Math.Abs(x); int tileY = Math.Abs(y); + int lavacount = 0; + int watercount = 0; + for (int i = 0; i < 44; i++) { if (Main.player[e.Msg.whoAmI].inventory[i].name == "Lava Bucket") - TShock.players[e.Msg.whoAmI].lavaCount++; + lavacount++; else if (Main.player[e.Msg.whoAmI].inventory[i].name == "Water Bucket") - TShock.players[e.Msg.whoAmI].waterCount++; + watercount++; } - if (lava && TShock.players[e.Msg.whoAmI].lavaCount <= 0) + if (lava && lavacount <= 0) { TShock.Ban(e.Msg.whoAmI, "Placing lava they didn't have."); e.Handled = true; } - else if (!lava && TShock.players[e.Msg.whoAmI].waterCount <= 0) + else if (!lava && watercount <= 0) { TShock.Ban(e.Msg.whoAmI, "Placing water they didn't have."); e.Handled = true; } - if ((plyX - tileX > 6) || (plyY - tileY > 6)) + if ((Math.Abs(plyX - tileX) > 6) || (Math.Abs(plyY - tileY) > 6)) + { TShock.Ban(e.Msg.whoAmI, "Placing impossible to place liquid."); - Tools.Broadcast(Main.player[e.Msg.whoAmI].name + " was banned for placing impossible to place liquid."); + Tools.Broadcast(Main.player[e.Msg.whoAmI].name + + " was banned for placing impossible to place liquid."); e.Handled = true; + } if (ConfigurationManager.spawnProtect) { @@ -492,8 +501,7 @@ namespace TShockAPI Main.player[who].hostile = true; NetMessage.SendData(30, -1, -1, "", who); } - if (players[who].group.HasPermission("causeevents") && ConfigurationManager.infiniteInvasion && - !ConfigurationManager.startedInvasion) + if (players[who].group.HasPermission("causeevents") && ConfigurationManager.infiniteInvasion) { StartInvasion(); } @@ -834,8 +842,11 @@ namespace TShockAPI public static void Ban(int plr, string reason = "") { - Tools.Kick(plr, reason); - Bans.AddBan(Tools.GetPlayerIP(plr), Main.player[plr].name, reason); + if (!players[plr].group.HasPermission("immunetoban")) + { + Tools.Kick(plr, "Banned: " + reason); + Bans.AddBan(Tools.GetPlayerIP(plr), Main.player[plr].name, reason); + } } public class Position diff --git a/TShockAPI/Tools.cs b/TShockAPI/Tools.cs index 2a2bee95..513e3961 100644 --- a/TShockAPI/Tools.cs +++ b/TShockAPI/Tools.cs @@ -215,9 +215,12 @@ namespace TShockAPI /// string reason public static void Kick(int ply, string reason) { - string displayName = FindPlayer(ply).Equals("") ? GetPlayerIP(ply) : FindPlayer(ply); - NetMessage.SendData(0x2, ply, -1, reason, 0x0, 0f, 0f, 0f); - Log.Info("Kicked " + displayName + " for : " + reason); + if (!TShock.players[ply].group.HasPermission("immunetokick") || reason.Contains("Banned: ")) + { + string displayName = FindPlayer(ply).Equals("") ? GetPlayerIP(ply) : FindPlayer(ply); + NetMessage.SendData(0x2, ply, -1, reason, 0x0, 0f, 0f, 0f); + Log.Info("Kicked " + displayName + " for : " + reason); + } } ///