Merge branch 'master' of github.com:TShock/TShock

Conflicts:
	TShockAPI/Commands.cs
This commit is contained in:
Shank 2011-06-07 11:13:47 -06:00
commit d5072af087
5 changed files with 144 additions and 74 deletions

View file

@ -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);
}
/// <summary>
/// Reloads the file if it was changed
/// </summary>

View file

@ -79,6 +79,8 @@ namespace TShockAPI
commands.Add(new Command("kick", "kick", Kick));
commands.Add(new Command("ban", "ban", Ban));
commands.Add(new Command("banip", "ban", BanIP));
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));
@ -255,6 +257,38 @@ namespace TShockAPI
Tools.SendMessage(adminplr, "Invalid player!", new[] { 255f, 0f, 0f });
}
public static void UnBan(CommandArgs args)
{
string plStr = args.Message.Remove(0, 6);
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, 8);
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)
{
for (int player = 0; player < Main.maxPlayers; player++)
@ -389,7 +423,6 @@ namespace TShockAPI
Tools.SendMessage(ply, "Teleported to your spawnpoint.");
}
public static void Spawn(CommandArgs args)
{
int ply = args.PlayerID;
@ -696,21 +729,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;

View file

@ -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;
@ -199,26 +200,37 @@ namespace TShockAPI
private void GetData(GetDataEventArgs e)
{
e.Handled = HandleGetData(e);
}
private bool HandleGetData(GetDataEventArgs e)
{
if (!Netplay.serverSock[e.Msg.whoAmI].active || Netplay.serverSock[e.Msg.whoAmI].kill)
return true;
if (e.MsgID == 4)
{
var ban = Bans.GetBanByName(Main.player[e.Msg.whoAmI].name);
if (ban != null)
{
Tools.Kick(e.Msg.whoAmI, "You are banned: " + ban.Reason);
return true;
}
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.");
return true;
}
if (players[e.Msg.whoAmI] == null)
{
Tools.Kick(e.Msg.whoAmI, "Player doesn't exist");
e.Handled = true;
return true;
}
else if (players[e.Msg.whoAmI].receivedInfo)
{
Tools.Kick(e.Msg.whoAmI, "Sent client info more than once");
e.Handled = true;
return true;
}
else
{
@ -239,7 +251,7 @@ namespace TShockAPI
if (size > 5 || Math.Abs(plyX - tileX) > 10 || Math.Abs(plyY - tileY) > 10)
{
Ban(e.Msg.whoAmI, "Send Tile Square Abuse");
e.Handled = true;
return true;
}
}
}
@ -263,12 +275,13 @@ namespace TShockAPI
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.");
e.Handled = true;
return true;
}
}
if (type == 0 || type == 1)
{
if (ConfigurationManager.spawnProtect)
{
if (!players[e.Msg.whoAmI].group.HasPermission("editspawn"))
{
var flag = CheckSpawn(x, y);
@ -276,7 +289,9 @@ namespace TShockAPI
{
Tools.SendMessage(e.Msg.whoAmI, "Spawn protected from changes.",
new[] { 255f, 0f, 0f });
e.Handled = true;
return true;
}
}
}
}
@ -285,7 +300,6 @@ namespace TShockAPI
players[e.Msg.whoAmI].tileThreshold++;
players[e.Msg.whoAmI].tilesDestroyed.Add(new Position(x, y), Main.tile[x, y]);
}
return;
}
}
else if (e.MsgID == 0x1e)
@ -301,8 +315,7 @@ namespace TShockAPI
if (ConfigurationManager.permaPvp)
Main.player[e.Msg.whoAmI].hostile = true;
NetMessage.SendData(30, -1, -1, "", e.Msg.whoAmI);
e.Handled = true;
return;
return true;
}
}
else if (e.MsgID == 0x0A) //SendSection
@ -310,14 +323,14 @@ namespace TShockAPI
Tools.Broadcast(string.Format("{0}({1}) attempted sending a section", Main.player[e.Msg.whoAmI].name,
e.Msg.whoAmI));
Tools.Kick(e.Msg.whoAmI, "SendSection abuse.");
e.Handled = true;
return true;
}
else if (e.MsgID == 0x17) //Npc Data
{
Tools.Broadcast(string.Format("{0}({1}) attempted spawning an NPC", Main.player[e.Msg.whoAmI].name,
e.Msg.whoAmI));
Tools.Kick(e.Msg.whoAmI, "Spawn NPC abuse");
e.Handled = true;
return true;
}
else if (e.MsgID == 0x0D) //Update Player
{
@ -325,7 +338,7 @@ namespace TShockAPI
if (plr != e.Msg.whoAmI)
{
Tools.Kick(e.Msg.whoAmI, "Update Player abuse");
e.Handled = true;
return true;
}
}
else if (e.MsgID == 0x10)
@ -350,7 +363,7 @@ namespace TShockAPI
Tools.Kick(ply, "Abnormal life increase");
Tools.Broadcast(playerName + " was " + (ConfigurationManager.banCheater ? "banned" : "kicked") +
" because they gained an abnormal amount of health.");
e.Handled = true;
return true;
}
}
}
@ -383,7 +396,7 @@ namespace TShockAPI
Tools.Kick(ply, "Abnormal mana increase");
Tools.Broadcast(playerName + " was " + (ConfigurationManager.banCheater ? "banned" : "kicked") +
" because they gained an abnormal amount of mana.");
e.Handled = true;
return true;
}
}
}
@ -421,7 +434,7 @@ namespace TShockAPI
Tools.Broadcast(Main.player[i].name + " was " +
(ConfigurationManager.banBoom ? "banned" : "kicked") +
" for throwing an explosive device.");
e.Handled = true;
return true;
}
}
}
@ -441,7 +454,7 @@ namespace TShockAPI
Ban(e.Msg.whoAmI, "Griefer");
Log.Info(Tools.FindPlayer(e.Msg.whoAmI) +
" was kicked for trying to execute KillMe on someone else.");
e.Handled = true;
return true;
}
}
}
@ -455,7 +468,7 @@ namespace TShockAPI
byte pvp = br.ReadByte();
if (!Main.player[playerid].hostile)
e.Handled = true;
return true;
}
}
else if (e.MsgID == 0x30)
@ -467,6 +480,10 @@ namespace TShockAPI
byte liquid = br.ReadByte();
bool lava = br.ReadBoolean();
//The liquid was picked up.
if (liquid == 0)
return false;
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);
@ -486,19 +503,19 @@ namespace TShockAPI
if (lava && lavacount <= 0)
{
TShock.Ban(e.Msg.whoAmI, "Placing lava they didn't have.");
e.Handled = true;
return true;
}
else if (!lava && watercount <= 0)
{
TShock.Ban(e.Msg.whoAmI, "Placing water they didn't have.");
e.Handled = true;
return true;
}
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.");
e.Handled = true;
return true;
}
if (ConfigurationManager.spawnProtect)
@ -509,7 +526,7 @@ namespace TShockAPI
if (flag)
{
Tools.SendMessage(e.Msg.whoAmI, "The spawn is protected!", new[] { 255f, 0f, 0f });
e.Handled = true;
return true;
}
}
}
@ -517,8 +534,10 @@ namespace TShockAPI
}
else if (e.MsgID == 0x22) // Client only KillTile
{
e.Handled = true; // Client only uses it for chests, but sends regular 17 as well.
return true; // Client only uses it for chests, but sends regular 17 as well.
}
return false;
}
private void OnGreetPlayer(int who, HandledEventArgs e)
@ -605,7 +624,6 @@ namespace TShockAPI
}
string ip = Tools.GetPlayerIP(ply);
;
players[ply] = new TSPlayer(ply);
players[ply].group = Tools.GetGroupForIP(ip);
@ -613,6 +631,7 @@ namespace TShockAPI
!players[ply].group.HasPermission("reservedslot"))
{
Tools.Kick(ply, "Server is full");
handler.Handled = true;
return;
}
@ -620,10 +639,14 @@ namespace TShockAPI
if (ban != null)
{
Tools.Kick(ply, "You are banned: " + ban.Reason);
handler.Handled = true;
return;
}
if (!FileTools.OnWhitelist(ip))
{
Tools.Kick(ply, "Not on whitelist.");
handler.Handled = true;
return;
}
}
@ -656,7 +679,7 @@ namespace TShockAPI
{
return;
}
for (uint i = 0; i < Main.maxPlayers; i++)
for (int i = 0; i < Main.maxPlayers; i++)
{
if (Main.player[i].active == false)
{
@ -669,12 +692,15 @@ namespace TShockAPI
if (ConfigurationManager.kickTnt || ConfigurationManager.banTnt)
{
if (ConfigurationManager.banTnt)
Ban((int)i, "Explosives");
Tools.Kick((int)i, "Kill tile abuse detected.");
Ban(i, "Kill Tile Abuse");
else
Tools.Kick(i, "Kill tile abuse detected.");
Tools.Broadcast(Main.player[i].name + " was " +
(ConfigurationManager.banTnt ? "banned" : "kicked") +
" for kill tile abuse.");
RevertKillTile((int)i);
RevertKillTile(i);
players[i].tileThreshold = 0;
players[i].tilesDestroyed.Clear();
}
else if (players[i].tileThreshold > 0)
{

View file

@ -85,7 +85,6 @@ namespace TShockAPI
Log.Info("Broadcast: " + msg);
}
public static void Broadcast(string msg, float[] color)
{
for (int i = 0; i < Main.player.Length; i++)
@ -215,6 +214,8 @@ namespace TShockAPI
/// <param name="reason">string reason</param>
public static void Kick(int ply, string reason)
{
if (!Netplay.serverSock[ply].active || Netplay.serverSock[ply].kill)
return;
if (!TShock.players[ply].group.HasPermission("immunetokick") || reason.Contains("Banned: "))
{
string displayName = FindPlayer(ply).Equals("") ? GetPlayerIP(ply) : FindPlayer(ply);

View file

@ -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