diff --git a/TShockAPI/BanManager.cs b/TShockAPI/BanManager.cs
index 8366f205..3750c476 100644
--- a/TShockAPI/BanManager.cs
+++ b/TShockAPI/BanManager.cs
@@ -47,10 +47,17 @@ namespace TShockAPI
public void AddBan(string ip, string name = "", string reason = "")
{
+ if (GetBanByIp(ip) != null)
+ return;
Bans.Add(new Ban(ip, name, reason));
SaveBans();
}
+ public void RemoveBan(Ban ban)
+ {
+ Bans.Remove(ban);
+ }
+
///
/// Reloads the file if it was changed
///
diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs
index 7dbaedc0..12f4af78 100644
--- a/TShockAPI/Commands.cs
+++ b/TShockAPI/Commands.cs
@@ -51,8 +51,8 @@ namespace TShockAPI
CommandArgs args = new CommandArgs();
args.Message = msg;
- args.PlayerX = (int) ply.GetPlayer().position.X;
- args.PlayerY = (int) ply.GetPlayer().position.Y;
+ args.PlayerX = (int)ply.GetPlayer().position.X;
+ args.PlayerY = (int)ply.GetPlayer().position.Y;
args.PlayerID = ply.GetPlayerID();
command(args);
@@ -78,6 +78,8 @@ namespace TShockAPI
{
commands.Add(new Command("kick", "kick", Kick));
commands.Add(new Command("ban", "ban", Ban));
+ commands.Add(new Command("unban", "unban", UnBan));
+ commands.Add(new Command("unbanip", "unbanip", UnBanIP));
commands.Add(new Command("off", "maintenance", Off));
commands.Add(new Command("reload", "cfg", Reload));
commands.Add(new Command("dropmeteor", "causeevents", DropMeteor));
@@ -135,14 +137,14 @@ namespace TShockAPI
}
else
{
- Tools.SendMessage(args.PlayerID, "You are not in a party!", new float[]{ 255f, 240f, 20f});
+ Tools.SendMessage(args.PlayerID, "You are not in a party!", new float[] { 255f, 240f, 20f });
}
}
public static void ThirdPerson(CommandArgs args)
{
string msg = args.Message.Remove(0, 3);
- Tools.Broadcast("*" + Tools.FindPlayer(args.PlayerID) + " " + msg, new float[] {205, 133, 63});
+ Tools.Broadcast("*" + Tools.FindPlayer(args.PlayerID) + " " + msg, new float[] { 205, 133, 63 });
}
public static void Playing(CommandArgs args)
@@ -159,7 +161,7 @@ namespace TShockAPI
lineOne += "BanCheater : " + ConfigurationManager.banCheater + ", ";
lineOne += "KickGriefer : " + ConfigurationManager.kickGriefer + ", ";
lineOne += "BanGriefer : " + ConfigurationManager.banGriefer;
- Tools.SendMessage(ply, lineOne, new[] {255f, 255f, 0f});
+ Tools.SendMessage(ply, lineOne, new[] { 255f, 255f, 0f });
string lineTwo = "";
lineTwo += "BanTnt : " + ConfigurationManager.banTnt + ", ";
lineTwo += "KickTnt : " + ConfigurationManager.kickTnt + ", ";
@@ -191,12 +193,12 @@ namespace TShockAPI
Tools.Broadcast(Tools.FindPlayer(player) + " was kicked by " + Tools.FindPlayer(ply));
}
else
- Tools.SendMessage(ply, "You can't kick another admin!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(ply, "You can't kick another admin!", new[] { 255f, 0f, 0f });
}
else if (Tools.FindPlayer(plStr) == -2)
- Tools.SendMessage(ply, "More than one player matched!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(ply, "More than one player matched!", new[] { 255f, 0f, 0f });
else
- Tools.SendMessage(ply, "Invalid player!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(ply, "Invalid player!", new[] { 255f, 0f, 0f });
}
public static void Ban(CommandArgs args)
@@ -224,12 +226,44 @@ namespace TShockAPI
Tools.Broadcast(Tools.FindPlayer(adminplr) + " banned " + Tools.FindPlayer(player) + " with reason " + reason + "!");
}
else
- Tools.SendMessage(adminplr, "You can't ban another admin!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(adminplr, "You can't ban another admin!", new[] { 255f, 0f, 0f });
}
else if (Tools.FindPlayer(plStr) == -2)
- Tools.SendMessage(adminplr, "More than one player matched!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(adminplr, "More than one player matched!", new[] { 255f, 0f, 0f });
else
- Tools.SendMessage(adminplr, "Invalid player!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(adminplr, "Invalid player!", new[] { 255f, 0f, 0f });
+ }
+
+ public static void UnBan(CommandArgs args)
+ {
+ string plStr = args.Message.Remove(0, 4);
+ int adminplr = args.PlayerID;
+ var ban = TShock.Bans.GetBanByName(plStr);
+ if (ban != null)
+ {
+ TShock.Bans.RemoveBan(ban);
+ Tools.SendMessage(adminplr, string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), new[] { 255f, 0f, 0f });
+ }
+ else
+ {
+ Tools.SendMessage(adminplr, "Invalid player!", new[] { 255f, 0f, 0f });
+ }
+ }
+
+ public static void UnBanIP(CommandArgs args)
+ {
+ string plStr = args.Message.Remove(0, 4);
+ int adminplr = args.PlayerID;
+ var ban = TShock.Bans.GetBanByIp(plStr);
+ if (ban != null)
+ {
+ TShock.Bans.RemoveBan(ban);
+ Tools.SendMessage(adminplr, string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), new[] { 255f, 0f, 0f });
+ }
+ else
+ {
+ Tools.SendMessage(adminplr, "Invalid player!", new[] { 255f, 0f, 0f });
+ }
}
public static void Off(CommandArgs args)
@@ -267,12 +301,12 @@ namespace TShockAPI
int penis56 = 12;
int penis57 = Main.rand.Next(Main.maxTilesX - 50) + 100;
penis57 *= 0x10;
- int penis58 = Main.rand.Next((int) (Main.maxTilesY*0.05))*0x10;
+ int penis58 = Main.rand.Next((int)(Main.maxTilesY * 0.05)) * 0x10;
Vector2 vector = new Vector2(penis57, penis58);
float speedX = Main.rand.Next(-100, 0x65);
float speedY = Main.rand.Next(200) + 100;
- float penis61 = (float) Math.Sqrt(((speedX*speedX) + (speedY*speedY)));
- penis61 = (penis56)/penis61;
+ float penis61 = (float)Math.Sqrt(((speedX * speedX) + (speedY * speedY)));
+ penis61 = (penis56) / penis61;
speedX *= penis61;
speedY *= penis61;
Projectile.NewProjectile(vector.X, vector.Y, speedX, speedY, 12, 0x3e8, 10f, Main.myPlayer);
@@ -294,7 +328,7 @@ namespace TShockAPI
int x = args.PlayerX;
int y = args.PlayerY;
int ply = args.PlayerID;
- Tools.NewNPC((int) ConfigurationManager.NPCList.WORLD_EATER, x, y, ply);
+ Tools.NewNPC((int)ConfigurationManager.NPCList.WORLD_EATER, x, y, ply);
Tools.Broadcast(Tools.FindPlayer(ply) + " has spawned an eater of worlds!");
}
@@ -303,7 +337,7 @@ namespace TShockAPI
int x = args.PlayerX;
int y = args.PlayerY;
int ply = args.PlayerID;
- Tools.NewNPC((int) ConfigurationManager.NPCList.EYE, x, y, ply);
+ Tools.NewNPC((int)ConfigurationManager.NPCList.EYE, x, y, ply);
Tools.Broadcast(Tools.FindPlayer(ply) + " has spawned an eye!");
}
@@ -312,7 +346,7 @@ namespace TShockAPI
int x = args.PlayerX;
int y = args.PlayerY;
int ply = args.PlayerID;
- Tools.NewNPC((int) ConfigurationManager.NPCList.SKELETRON, x, y, ply);
+ Tools.NewNPC((int)ConfigurationManager.NPCList.SKELETRON, x, y, ply);
Tools.Broadcast(Tools.FindPlayer(ply) + " has spawned skeletron!");
}
@@ -366,12 +400,11 @@ namespace TShockAPI
Tools.SendMessage(ply, "Teleported to your spawnpoint.");
}
-
public static void Spawn(CommandArgs args)
{
int ply = args.PlayerID;
- TShock.Teleport(ply, Main.spawnTileX*16 + 8 - Main.player[ply].width/2,
- Main.spawnTileY*16 - Main.player[ply].height);
+ TShock.Teleport(ply, Main.spawnTileX * 16 + 8 - Main.player[ply].width / 2,
+ Main.spawnTileY * 16 - Main.player[ply].height);
Tools.SendMessage(ply, "Teleported to the map's spawnpoint.");
}
@@ -406,7 +439,7 @@ namespace TShockAPI
Tools.SendMessage(ply, "Teleported to " + player);
}
else
- Tools.SendMessage(ply, "Invalid player!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(ply, "Invalid player!", new[] { 255f, 0f, 0f });
}
public static void TPHere(CommandArgs args)
@@ -420,7 +453,7 @@ namespace TShockAPI
Tools.SendMessage(ply, "You brought " + player + " here.");
}
else
- Tools.SendMessage(ply, "Invalid player!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(ply, "Invalid player!", new[] { 255f, 0f, 0f });
}
public static void SpawnMob(CommandArgs args)
@@ -452,7 +485,7 @@ namespace TShockAPI
}
else
Tools.SendMessage(args.PlayerID, "Invalid syntax! Proper syntax: /spawnmob [amount]",
- new[] {255f, 0f, 0f});
+ new[] { 255f, 0f, 0f });
}
public static void Item(CommandArgs args)
@@ -488,14 +521,14 @@ namespace TShockAPI
}
}
if (!flag)
- Tools.SendMessage(args.PlayerID, "You don't have free slots!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(args.PlayerID, "You don't have free slots!", new[] { 255f, 0f, 0f });
}
else
- Tools.SendMessage(args.PlayerID, "Invalid item type!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(args.PlayerID, "Invalid item type!", new[] { 255f, 0f, 0f });
}
else
Tools.SendMessage(args.PlayerID, "Invalid syntax! Proper syntax: /item - ",
- new[] {255f, 0f, 0f});
+ new[] { 255f, 0f, 0f });
}
public static void Give(CommandArgs args)
@@ -539,17 +572,17 @@ namespace TShockAPI
}
}
if (!flag)
- Tools.SendMessage(args.PlayerID, "Player does not have free slots!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(args.PlayerID, "Player does not have free slots!", new[] { 255f, 0f, 0f });
}
else
- Tools.SendMessage(args.PlayerID, "Invalid player!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(args.PlayerID, "Invalid player!", new[] { 255f, 0f, 0f });
}
else
- Tools.SendMessage(args.PlayerID, "Invalid item type!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(args.PlayerID, "Invalid item type!", new[] { 255f, 0f, 0f });
}
else
Tools.SendMessage(args.PlayerID, "Invalid syntax! Proper syntax: /give
- ",
- new[] {255f, 0f, 0f});
+ new[] { 255f, 0f, 0f });
}
public static void Heal(CommandArgs args)
@@ -565,8 +598,8 @@ namespace TShockAPI
{
Tools.SendMessage(ply, string.Format("You just healed {0}", (msgargs[1].TrimEnd('"')).TrimStart('"')));
Tools.SendMessage(player, string.Format("{0} just healed you!", Tools.FindPlayer(ply)));
- x = (int) Main.player[player].position.X;
- y = (int) Main.player[player].position.Y;
+ x = (int)Main.player[player].position.X;
+ y = (int)Main.player[player].position.Y;
}
else
Tools.SendMessage(ply, "You just got healed!");
@@ -673,21 +706,24 @@ namespace TShockAPI
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers();
Tools.Broadcast(Tools.FindPlayer(args.PlayerID) + " set time to night.");
- } else if (arg[1] == "dusk")
+ }
+ else if (arg[1] == "dusk")
{
Main.dayTime = false;
Main.time = 0.0;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers();
Tools.Broadcast(Tools.FindPlayer(args.PlayerID) + " set time to dusk.");
- } else if (arg[1] == "noon")
+ }
+ else if (arg[1] == "noon")
{
Main.dayTime = true;
Main.time = 27000.0;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers();
Tools.Broadcast(Tools.FindPlayer(args.PlayerID) + " set time to noon.");
- } else if (arg[1] == "midnight")
+ }
+ else if (arg[1] == "midnight")
{
Main.dayTime = false;
Main.time = 16200.0;
@@ -697,11 +733,11 @@ namespace TShockAPI
}
else
Tools.SendMessage(args.PlayerID, "Invalid syntax! Proper syntax: /time ",
- new[] {255f, 0f, 0f});
+ new[] { 255f, 0f, 0f });
}
else
Tools.SendMessage(args.PlayerID, "Invalid syntax! Proper syntax: /time ",
- new[] {255f, 0f, 0f});
+ new[] { 255f, 0f, 0f });
}
public static void Kill(CommandArgs args)
@@ -724,15 +760,15 @@ namespace TShockAPI
msgargs[i] = (msgargs[i].TrimStart('"')).TrimEnd('"');
if (msgargs.Length == 1)
Tools.SendMessage(args.PlayerID, "Invalid syntax! Proper syntax: /slap [dmg]",
- new[] {255f, 0f, 0f});
+ new[] { 255f, 0f, 0f });
else if (msgargs.Length == 2)
{
int player = Tools.FindPlayer(msgargs[1]);
if (player == -1)
- Tools.SendMessage(args.PlayerID, "Invalid player!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(args.PlayerID, "Invalid player!", new[] { 255f, 0f, 0f });
else
{
- NetMessage.SendData(26, -1, -1, "", player, ((new Random()).Next(1, 20)), 5, (float) 0);
+ NetMessage.SendData(26, -1, -1, "", player, ((new Random()).Next(1, 20)), 5, (float)0);
Tools.Broadcast(Tools.FindPlayer(args.PlayerID) + " slapped " + Tools.FindPlayer(player) +
" for 5 damage.");
}
@@ -743,17 +779,17 @@ namespace TShockAPI
int damage = 5;
int.TryParse(msgargs[2], out damage);
if (player == -1)
- Tools.SendMessage(args.PlayerID, "Invalid player!", new[] {255f, 0f, 0f});
+ Tools.SendMessage(args.PlayerID, "Invalid player!", new[] { 255f, 0f, 0f });
else
{
- NetMessage.SendData(26, -1, -1, "", player, ((new Random()).Next(-1, 1)), damage, (float) 0);
+ NetMessage.SendData(26, -1, -1, "", player, ((new Random()).Next(-1, 1)), damage, (float)0);
Tools.Broadcast(Tools.FindPlayer(args.PlayerID) + " slapped " + Tools.FindPlayer(player) + " for " +
damage + " damage.");
}
}
else
Tools.SendMessage(args.PlayerID, "Invalid syntax! Proper syntax: /slap [dmg]",
- new[] {255f, 0f, 0f});
+ new[] { 255f, 0f, 0f });
}
public static void ProtectSpawn(CommandArgs args)
diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs
index 48b12108..cd32a89d 100644
--- a/TShockAPI/TShock.cs
+++ b/TShockAPI/TShock.cs
@@ -1,6 +1,7 @@
using System;
using System.IO;
using System.Net;
+using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Terraria;
@@ -206,7 +207,8 @@ namespace TShockAPI
{
Tools.Kick(e.Msg.whoAmI, "You are banned: " + ban.Reason);
}
- if (Main.player[e.Msg.whoAmI].name.Length > 32)
+ string name = Encoding.ASCII.GetString(e.Msg.readBuffer, e.Index + 23, (e.Length - (e.Index + 23)) + e.Index - 1);
+ if (name.Length > 32)
{
Tools.Kick(e.Msg.whoAmI, "Name exceeded 32 characters.");
}
@@ -467,6 +469,10 @@ namespace TShockAPI
byte liquid = br.ReadByte();
bool lava = br.ReadBoolean();
+ //The liquid was picked up.
+ if (liquid == 0)
+ return;
+
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);
diff --git a/TShockAPI/config/groups.txt b/TShockAPI/config/groups.txt
index 14d3a10d..748f5c90 100644
--- a/TShockAPI/config/groups.txt
+++ b/TShockAPI/config/groups.txt
@@ -17,5 +17,5 @@
default null
vip default reservedslot
newadmin default kick editspawn reservedslot
-admin newadmin ban causeevents spawnboss spawnmob tp immunetokick kill
+admin newadmin ban unban unbanip causeevents spawnboss spawnmob tp immunetokick kill
trustedadmin admin maintenance cfg cheat pvpfun ignorecheatdetection immunetoban ignoregriefdetection
\ No newline at end of file