Fixed GetData now logs exceptions as Terraria will swallow the exception.

Removed FindPlayer(int)
Removed Tools.SendMessage
Added TSPlayer.SendMessage to replace it
Changed FindPlayer(string) now returns List<TSPlayer>
This commit is contained in:
high 2011-06-14 21:08:13 -04:00
parent 760a81f74e
commit f31bae459e
5 changed files with 190 additions and 226 deletions

View file

@ -39,6 +39,11 @@ namespace TShockAPI
/// </summary> /// </summary>
public List<string> Parameters { get; private set; } public List<string> Parameters { get; private set; }
public Player TPlayer
{
get { return Player.TPlayer; }
}
public int PlayerID public int PlayerID
{ {
get { return Player.Index; } get { return Player.Index; }
@ -218,10 +223,6 @@ namespace TShockAPI
ChatCommands.Add(new Command("give", "cheat", Give)); ChatCommands.Add(new Command("give", "cheat", Give));
ChatCommands.Add(new Command("heal", "cheat", Heal)); ChatCommands.Add(new Command("heal", "cheat", Heal));
} }
} }
#region Command Methods #region Command Methods
@ -233,7 +234,7 @@ namespace TShockAPI
public static void ToggleAntiBuild(CommandArgs args) public static void ToggleAntiBuild(CommandArgs args)
{ {
Tools.SendMessage(args.PlayerID, "Toggled world anti-build."); args.Player.SendMessage("Toggled world anti-build.");
if (ConfigurationManager.DisableBuild) if (ConfigurationManager.DisableBuild)
{ {
ConfigurationManager.DisableBuild = false; ConfigurationManager.DisableBuild = false;
@ -259,62 +260,59 @@ namespace TShockAPI
{ {
if (Main.player[i].team == Main.player[args.PlayerID].team) if (Main.player[i].team == Main.player[args.PlayerID].team)
{ {
Tools.SendMessage(i, msg, Main.teamColor[playerTeam].R, Main.teamColor[playerTeam].G, Main.teamColor[playerTeam].B); TShock.Players[i].SendMessage(msg, Main.teamColor[playerTeam].R, Main.teamColor[playerTeam].G, Main.teamColor[playerTeam].B);
} }
} }
} }
else else
{ {
Tools.SendMessage(args.PlayerID, "You are not in a party!", 255, 240, 20); args.Player.SendMessage("You are not in a party!", 255, 240, 20);
} }
} }
public static void ThirdPerson(CommandArgs args) public static void ThirdPerson(CommandArgs args)
{ {
string msg = args.Message.Remove(0, 3); string msg = args.Message.Remove(0, 3);
Tools.Broadcast(string.Format("*{0} {1}", Tools.FindPlayer(args.PlayerID), msg), 205, 133, 63); Tools.Broadcast(string.Format("*{0} {1}", args.Player.Name, msg), 205, 133, 63);
} }
public static void Playing(CommandArgs args) public static void Playing(CommandArgs args)
{ {
Tools.SendMessage(args.PlayerID, string.Format("Current players: {0}.", Tools.GetPlayers()), 255, 240, 20); args.Player.SendMessage(string.Format("Current players: {0}.", Tools.GetPlayers()), 255, 240, 20);
} }
public static void DebugConfiguration(CommandArgs args) public static void DebugConfiguration(CommandArgs args)
{ {
int ply = args.PlayerID; args.Player.SendMessage("TShock Config:");
Tools.SendMessage(ply, "TShock Config:");
string lineOne = string.Format("BanCheater : {0}, KickCheater : {1}, BanGriefer : {2}, KickGriefer : {3}", string lineOne = string.Format("BanCheater : {0}, KickCheater : {1}, BanGriefer : {2}, KickGriefer : {3}",
ConfigurationManager.BanCheater, ConfigurationManager.KickCheater, ConfigurationManager.BanCheater, ConfigurationManager.KickCheater,
ConfigurationManager.BanGriefer, ConfigurationManager.KickGriefer); ConfigurationManager.BanGriefer, ConfigurationManager.KickGriefer);
Tools.SendMessage(ply, lineOne, Color.Yellow); args.Player.SendMessage(lineOne, Color.Yellow);
string lineTwo = string.Format("BanTnt : {0}, KickTnt : {1}, BanBoom : {2}, KickBoom : {3}", string lineTwo = string.Format("BanTnt : {0}, KickTnt : {1}, BanBoom : {2}, KickBoom : {3}",
ConfigurationManager.BanTnt, ConfigurationManager.KickTnt, ConfigurationManager.BanTnt, ConfigurationManager.KickTnt,
ConfigurationManager.BanBoom, ConfigurationManager.KickBoom); ConfigurationManager.BanBoom, ConfigurationManager.KickBoom);
Tools.SendMessage(ply, lineTwo, Color.Yellow); args.Player.SendMessage(lineTwo, Color.Yellow);
string lineThree = string.Format("RangeChecks : {0}, DisableBuild : {1}, ProtectSpawn : {2}, ProtectRadius : {3}", string lineThree = string.Format("RangeChecks : {0}, DisableBuild : {1}, ProtectSpawn : {2}, ProtectRadius : {3}",
ConfigurationManager.RangeChecks, ConfigurationManager.DisableBuild, ConfigurationManager.RangeChecks, ConfigurationManager.DisableBuild,
ConfigurationManager.SpawnProtect, ConfigurationManager.SpawnProtectRadius); ConfigurationManager.SpawnProtect, ConfigurationManager.SpawnProtectRadius);
Tools.SendMessage(ply, lineThree, Color.Yellow); args.Player.SendMessage(lineThree, Color.Yellow);
string lineFour = string.Format("MaxSlots : {0}, SpamChecks : {1}, InvMultiplier : {2}, DMS : {3}, SpawnRate {4}", string lineFour = string.Format("MaxSlots : {0}, SpamChecks : {1}, InvMultiplier : {2}, DMS : {3}, SpawnRate {4}",
ConfigurationManager.MaxSlots, ConfigurationManager.SpamChecks, ConfigurationManager.MaxSlots, ConfigurationManager.SpamChecks,
ConfigurationManager.InvasionMultiplier, ConfigurationManager.DefaultMaxSpawns, ConfigurationManager.InvasionMultiplier, ConfigurationManager.DefaultMaxSpawns,
ConfigurationManager.DefaultSpawnRate); ConfigurationManager.DefaultSpawnRate);
Tools.SendMessage(ply, lineFour, Color.Yellow); args.Player.SendMessage(lineFour, Color.Yellow);
} }
public static void Kick(CommandArgs args) public static void Kick(CommandArgs args)
{ {
int adminplr = args.PlayerID;
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /kick <player> [reason]", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /kick <player> [reason]", Color.Red);
return; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].Length == 0)
{ {
Tools.SendMessage(adminplr, "Missing player name", Color.Red); args.Player.SendMessage("Missing player name", Color.Red);
return; return;
} }
@ -322,18 +320,18 @@ namespace TShockAPI
var player = Tools.FindPlayer(plStr); var player = Tools.FindPlayer(plStr);
if (player.Count == 0) if (player.Count == 0)
{ {
Tools.SendMessage(adminplr, "Invalid player!", Color.Red); args.Player.SendMessage("Invalid player!", Color.Red);
} }
else if (player.Count > 1) else if (player.Count > 1)
{ {
Tools.SendMessage(adminplr, "More than one player matched!", Color.Red); args.Player.SendMessage("More than one player matched!", Color.Red);
} }
else else
{ {
string reason = args.Parameters.Count > 1 ? String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)) : "Misbehaviour."; string reason = args.Parameters.Count > 1 ? String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)) : "Misbehaviour.";
if (!Tools.Kick(player[0], reason)) if (!Tools.Kick(player[0].Index, reason))
{ {
Tools.SendMessage(adminplr, "You can't kick another admin!", Color.Red); args.Player.SendMessage("You can't kick another admin!", Color.Red);
} }
} }
} }
@ -344,12 +342,12 @@ namespace TShockAPI
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /ban <player> [reason]", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /ban <player> [reason]", Color.Red);
return; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].Length == 0)
{ {
Tools.SendMessage(adminplr, "Missing player name", Color.Red); args.Player.SendMessage("Missing player name", Color.Red);
return; return;
} }
@ -357,34 +355,32 @@ namespace TShockAPI
var player = Tools.FindPlayer(plStr); var player = Tools.FindPlayer(plStr);
if (player.Count == 0) if (player.Count == 0)
{ {
Tools.SendMessage(adminplr, "Invalid player!", Color.Red); args.Player.SendMessage("Invalid player!", Color.Red);
} }
else if (player.Count > 1) else if (player.Count > 1)
{ {
Tools.SendMessage(adminplr, "More than one player matched!", Color.Red); args.Player.SendMessage("More than one player matched!", Color.Red);
} }
else else
{ {
string reason = args.Parameters.Count > 1 ? String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)) : "Misbehaviour."; string reason = args.Parameters.Count > 1 ? String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)) : "Misbehaviour.";
if (!Tools.Ban(player[0], reason)) if (!Tools.Ban(player[0].Index, reason))
{ {
Tools.SendMessage(adminplr, "You can't ban another admin!", Color.Red); args.Player.SendMessage("You can't ban another admin!", Color.Red);
} }
} }
} }
public static void BanIP(CommandArgs args) public static void BanIP(CommandArgs args)
{ {
int adminplr = args.PlayerID;
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
Tools.SendMessage(adminplr, "Syntax: /banip <ip> [reason]", Color.Red); args.Player.SendMessage("Syntax: /banip <ip> [reason]", Color.Red);
return; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].Length == 0)
{ {
Tools.SendMessage(adminplr, "Missing IP address", Color.Red); args.Player.SendMessage("Missing IP address", Color.Red);
return; return;
} }
@ -395,16 +391,14 @@ namespace TShockAPI
public static void UnBan(CommandArgs args) public static void UnBan(CommandArgs args)
{ {
int adminplr = args.PlayerID;
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /unban <player>", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /unban <player>", Color.Red);
return; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].Length == 0)
{ {
Tools.SendMessage(adminplr, "Missing player name", Color.Red); args.Player.SendMessage("Missing player name", Color.Red);
return; return;
} }
@ -413,26 +407,24 @@ namespace TShockAPI
if (ban != null) if (ban != null)
{ {
TShock.Bans.RemoveBan(ban); TShock.Bans.RemoveBan(ban);
Tools.SendMessage(adminplr, string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); args.Player.SendMessage(string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red);
} }
else else
{ {
Tools.SendMessage(adminplr, "Invalid player!", Color.Red); args.Player.SendMessage("Invalid player!", Color.Red);
} }
} }
public static void UnBanIP(CommandArgs args) public static void UnBanIP(CommandArgs args)
{ {
int adminplr = args.PlayerID;
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /unbanip <ip>", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /unbanip <ip>", Color.Red);
return; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].Length == 0)
{ {
Tools.SendMessage(adminplr, "Missing ip", Color.Red); args.Player.SendMessage("Missing ip", Color.Red);
return; return;
} }
@ -441,11 +433,11 @@ namespace TShockAPI
if (ban != null) if (ban != null)
{ {
TShock.Bans.RemoveBan(ban); TShock.Bans.RemoveBan(ban);
Tools.SendMessage(adminplr, string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); args.Player.SendMessage(string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red);
} }
else else
{ {
Tools.SendMessage(adminplr, "Invalid player!", Color.Red); args.Player.SendMessage("Invalid player!", Color.Red);
} }
} }
@ -470,7 +462,7 @@ namespace TShockAPI
public static void Reload(CommandArgs args) public static void Reload(CommandArgs args)
{ {
FileTools.SetupConfig(); FileTools.SetupConfig();
Tools.SendMessage(args.PlayerID, "Configuration reload complete. Some changes may require server restart."); args.Player.SendMessage("Configuration reload complete. Some changes may require server restart.");
} }
public static void DropMeteor(CommandArgs args) public static void DropMeteor(CommandArgs args)
@ -498,7 +490,7 @@ namespace TShockAPI
public static void Bloodmoon(CommandArgs args) public static void Bloodmoon(CommandArgs args)
{ {
int ply = args.PlayerID; int ply = args.PlayerID;
Tools.Broadcast(string.Format("{0} turned on blood moon.", Tools.FindPlayer(ply))); Tools.Broadcast(string.Format("{0} turned on blood moon.", args.Player.Name));
Main.bloodMoon = true; Main.bloodMoon = true;
Main.time = 0; Main.time = 0;
Main.dayTime = false; Main.dayTime = false;
@ -510,21 +502,21 @@ namespace TShockAPI
{ {
int ply = args.PlayerID; int ply = args.PlayerID;
Tools.NewNPC((int)ConfigurationManager.NPCList.WORLD_EATER, args.Player.X, args.Player.Y, ply); Tools.NewNPC((int)ConfigurationManager.NPCList.WORLD_EATER, args.Player.X, args.Player.Y, ply);
Tools.Broadcast(string.Format("{0} has spawned an eater of worlds!", Tools.FindPlayer(ply))); Tools.Broadcast(string.Format("{0} has spawned an eater of worlds!", args.Player.Name));
} }
public static void Eye(CommandArgs args) public static void Eye(CommandArgs args)
{ {
int ply = args.PlayerID; int ply = args.PlayerID;
Tools.NewNPC((int)ConfigurationManager.NPCList.EYE, args.Player.X, args.Player.Y, ply); Tools.NewNPC((int)ConfigurationManager.NPCList.EYE, args.Player.X, args.Player.Y, ply);
Tools.Broadcast(string.Format("{0} has spawned an eye!", Tools.FindPlayer(ply))); Tools.Broadcast(string.Format("{0} has spawned an eye!", args.Player.Name));
} }
public static void Skeletron(CommandArgs args) public static void Skeletron(CommandArgs args)
{ {
int ply = args.PlayerID; int ply = args.PlayerID;
Tools.NewNPC((int)ConfigurationManager.NPCList.SKELETRON, args.Player.X, args.Player.Y, ply); Tools.NewNPC((int)ConfigurationManager.NPCList.SKELETRON, args.Player.X, args.Player.Y, ply);
Tools.Broadcast(string.Format("{0} has spawned skeletron!", Tools.FindPlayer(ply))); Tools.Broadcast(string.Format("{0} has spawned skeletron!", args.Player.Name));
} }
public static void Hardcore(CommandArgs args) public static void Hardcore(CommandArgs args)
@ -534,7 +526,7 @@ namespace TShockAPI
{ {
Tools.NewNPC(i, args.Player.X, args.Player.Y, ply); Tools.NewNPC(i, args.Player.X, args.Player.Y, ply);
} }
Tools.Broadcast(string.Format("{0} has spawned all 3 bosses!", Tools.FindPlayer(ply))); Tools.Broadcast(string.Format("{0} has spawned all 3 bosses!", args.Player.Name));
} }
public static void Invade(CommandArgs args) public static void Invade(CommandArgs args)
@ -542,29 +534,27 @@ namespace TShockAPI
int ply = args.PlayerID; int ply = args.PlayerID;
if (Main.invasionSize <= 0) if (Main.invasionSize <= 0)
{ {
Tools.Broadcast(string.Format("{0} has started an invasion.", Tools.FindPlayer(ply))); Tools.Broadcast(string.Format("{0} has started an invasion.", args.Player.Name));
TShock.StartInvasion(); TShock.StartInvasion();
} }
else else
{ {
Tools.Broadcast(string.Format("{0} has ended an invasion.", Tools.FindPlayer(ply))); Tools.Broadcast(string.Format("{0} has ended an invasion.", args.Player.Name));
Main.invasionSize = 0; Main.invasionSize = 0;
} }
} }
public static void Password(CommandArgs args) public static void Password(CommandArgs args)
{ {
int ply = args.PlayerID;
string passwd = args.Message.Remove(0, 9).Trim(); string passwd = args.Message.Remove(0, 9).Trim();
Netplay.password = passwd; Netplay.password = passwd;
Tools.SendMessage(ply, string.Format("Server password changed to: {0}", passwd)); args.Player.SendMessage(string.Format("Server password changed to: {0}", passwd));
} }
public static void Save(CommandArgs args) public static void Save(CommandArgs args)
{ {
int ply = args.PlayerID;
WorldGen.saveWorld(); WorldGen.saveWorld();
Tools.SendMessage(ply, "World saved."); args.Player.SendMessage("World saved.");
} }
public static void Home(CommandArgs args) public static void Home(CommandArgs args)
@ -572,7 +562,7 @@ namespace TShockAPI
int ply = args.PlayerID; int ply = args.PlayerID;
TShock.Teleport(ply, Main.player[args.PlayerID].SpawnX * 16 + 8 - Main.player[ply].width / 2, TShock.Teleport(ply, Main.player[args.PlayerID].SpawnX * 16 + 8 - Main.player[ply].width / 2,
Main.player[args.PlayerID].SpawnY * 16 - Main.player[ply].height); Main.player[args.PlayerID].SpawnY * 16 - Main.player[ply].height);
Tools.SendMessage(ply, "Teleported to your spawnpoint."); args.Player.SendMessage("Teleported to your spawnpoint.");
} }
public static void Spawn(CommandArgs args) public static void Spawn(CommandArgs args)
@ -580,7 +570,7 @@ namespace TShockAPI
int ply = args.PlayerID; int ply = args.PlayerID;
TShock.Teleport(ply, Main.spawnTileX * 16 + 8 - Main.player[ply].width / 2, TShock.Teleport(ply, Main.spawnTileX * 16 + 8 - Main.player[ply].width / 2,
Main.spawnTileY * 16 - Main.player[ply].height); Main.spawnTileY * 16 - Main.player[ply].height);
Tools.SendMessage(ply, "Teleported to the map's spawnpoint."); args.Player.SendMessage("Teleported to the map's spawnpoint.");
} }
public static void AuthToken(CommandArgs args) public static void AuthToken(CommandArgs args)
@ -597,7 +587,7 @@ namespace TShockAPI
Tools.GetRealIP( Tools.GetRealIP(
Convert.ToString(Netplay.serverSock[args.PlayerID].tcpClient.Client.RemoteEndPoint)) + Convert.ToString(Netplay.serverSock[args.PlayerID].tcpClient.Client.RemoteEndPoint)) +
" superadmin"); " superadmin");
Tools.SendMessage(args.PlayerID, "SuperAdmin authenticated. Please re-connect using the same IP."); args.Player.SendMessage("SuperAdmin authenticated. Please re-connect using the same IP.");
ConfigurationManager.AuthToken = 0; ConfigurationManager.AuthToken = 0;
tw.Close(); tw.Close();
} }
@ -609,30 +599,29 @@ namespace TShockAPI
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /tp <player> ", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /tp <player> ", Color.Red);
return; return;
} }
string plStr = String.Join(" ", args.Parameters); string plStr = String.Join(" ", args.Parameters);
var player = Tools.FindPlayer(plStr); var player = Tools.FindPlayer(plStr);
if (player.Count == 0) if (player.Count == 0)
Tools.SendMessage(adminplr, "Invalid player!", Color.Red); args.Player.SendMessage("Invalid player!", Color.Red);
else if (player.Count > 1) else if (player.Count > 1)
Tools.SendMessage(adminplr, "More than one player matched!", Color.Red); args.Player.SendMessage("More than one player matched!", Color.Red);
else else
{ {
TShock.Teleport(adminplr, Main.player[player[0]].position.X, Main.player[player[0]].position.Y); var plr = player[0];
Tools.SendMessage(adminplr, string.Format("Teleported to {0}", Tools.FindPlayer(player[0]))); TShock.Teleport(adminplr, plr.TPlayer.position.X, plr.TPlayer.position.Y);
args.Player.SendMessage(string.Format("Teleported to {0}", plr.Name));
} }
} }
public static void TPHere(CommandArgs args) public static void TPHere(CommandArgs args)
{ {
int adminplr = args.PlayerID;
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /tphere <player> ", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /tphere <player> ", Color.Red);
return; return;
} }
@ -640,32 +629,31 @@ namespace TShockAPI
var player = Tools.FindPlayer(plStr); var player = Tools.FindPlayer(plStr);
if (player.Count == 0) if (player.Count == 0)
{ {
Tools.SendMessage(adminplr, "Invalid player!", Color.Red); args.Player.SendMessage("Invalid player!", Color.Red);
} }
else if (player.Count > 1) else if (player.Count > 1)
{ {
Tools.SendMessage(adminplr, "More than one player matched!", Color.Red); args.Player.SendMessage("More than one player matched!", Color.Red);
} }
else else
{ {
TShock.Teleport(player[0], Main.player[adminplr].position.X, Main.player[adminplr].position.Y); var plr = player[0];
Tools.SendMessage(player[0], string.Format("You were teleported to {0}.", Tools.FindPlayer(adminplr))); TShock.Teleport(plr.Index, args.TPlayer.position.X, args.TPlayer.position.Y);
Tools.SendMessage(adminplr, string.Format("You brought {0} here.", Tools.FindPlayer(player[0]))); plr.SendMessage(string.Format("You were teleported to {0}.", plr.Name));
args.Player.SendMessage(string.Format("You brought {0} here.", plr.Name));
} }
} }
public static void SpawnMob(CommandArgs args) public static void SpawnMob(CommandArgs args)
{ {
int adminplr = args.PlayerID;
if (args.Parameters.Count < 1 || args.Parameters.Count > 2) if (args.Parameters.Count < 1 || args.Parameters.Count > 2)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /spawnmob <mob name/id> [amount]", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /spawnmob <mob name/id> [amount]", Color.Red);
return; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].Length == 0)
{ {
Tools.SendMessage(adminplr, "Missing mob name/id", Color.Red); args.Player.SendMessage("Missing mob name/id", Color.Red);
return; return;
} }
@ -676,7 +664,7 @@ namespace TShockAPI
type = TShock.GetNPCID(args.Parameters[0]); type = TShock.GetNPCID(args.Parameters[0]);
if (args.Parameters.Count == 2 && !int.TryParse(args.Parameters[1], out amount)) if (args.Parameters.Count == 2 && !int.TryParse(args.Parameters[1], out amount))
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /spawnmob <mob name/id> [amount]", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /spawnmob <mob name/id> [amount]", Color.Red);
return; return;
} }
@ -688,7 +676,7 @@ namespace TShockAPI
Tools.Broadcast(string.Format("{0} was spawned {1} time(s).", Main.npc[npcid].name, amount)); Tools.Broadcast(string.Format("{0} was spawned {1} time(s).", Main.npc[npcid].name, amount));
} }
else else
Tools.SendMessage(adminplr, "Invalid mob type!", Color.Red); args.Player.SendMessage("Invalid mob type!", Color.Red);
} }
public static void Item(CommandArgs args) public static void Item(CommandArgs args)
@ -697,12 +685,12 @@ namespace TShockAPI
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /item <item name/id>", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /item <item name/id>", Color.Red);
return; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].Length == 0)
{ {
Tools.SendMessage(adminplr, "Missing item name/id", Color.Red); args.Player.SendMessage("Missing item name/id", Color.Red);
return; return;
} }
@ -712,7 +700,7 @@ namespace TShockAPI
if (type < 1 || type >= Main.maxItemTypes) if (type < 1 || type >= Main.maxItemTypes)
{ {
Tools.SendMessage(adminplr, "Invalid item type!", Color.Red); args.Player.SendMessage("Invalid item type!", Color.Red);
return; return;
} }
@ -721,41 +709,35 @@ namespace TShockAPI
{ {
if (!Main.player[adminplr].inventory[i].active) if (!Main.player[adminplr].inventory[i].active)
{ {
//Main.player[ply].inventory[i].SetDefaults(type);
//Main.player[ply].inventory[i].stack = Main.player[ply].inventory[i].maxStack;
int id = Terraria.Item.NewItem(0, 0, 0, 0, type, 1, true); int id = Terraria.Item.NewItem(0, 0, 0, 0, type, 1, true);
Main.item[id].position.X = args.Player.X; Main.item[id].position.X = args.Player.X;
Main.item[id].position.Y = args.Player.Y; Main.item[id].position.Y = args.Player.Y;
Main.item[id].stack = Main.item[id].maxStack; Main.item[id].stack = Main.item[id].maxStack;
//TShock.SendDataAll(21, -1, "", id);
NetMessage.SendData(21, -1, -1, "", id, 0f, 0f, 0f); NetMessage.SendData(21, -1, -1, "", id, 0f, 0f, 0f);
Tools.SendMessage(adminplr, string.Format("Got some {0}.", Main.item[id].name)); args.Player.SendMessage(string.Format("Got some {0}.", Main.item[id].name));
//TShock.UpdateInventories();
flag = true; flag = true;
break; break;
} }
} }
if (!flag) if (!flag)
Tools.SendMessage(adminplr, "You don't have free slots!", Color.Red); args.Player.SendMessage("You don't have free slots!", Color.Red);
} }
public static void Give(CommandArgs args) public static void Give(CommandArgs args)
{ {
int adminplr = args.PlayerID;
if (args.Parameters.Count != 2) if (args.Parameters.Count != 2)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /give <item type/id> <player>", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /give <item type/id> <player>", Color.Red);
return; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].Length == 0)
{ {
Tools.SendMessage(adminplr, "Missing item name/id", Color.Red); args.Player.SendMessage("Missing item name/id", Color.Red);
return; return;
} }
if (args.Parameters[1].Length == 0) if (args.Parameters[1].Length == 0)
{ {
Tools.SendMessage(adminplr, "Missing player name", Color.Red); args.Player.SendMessage("Missing player name", Color.Red);
return; return;
} }
@ -765,7 +747,7 @@ namespace TShockAPI
if (type < 1 || type >= Main.maxItemTypes) if (type < 1 || type >= Main.maxItemTypes)
{ {
Tools.SendMessage(args.PlayerID, "Invalid item type!", Color.Red); args.Player.SendMessage("Invalid item type!", Color.Red);
return; return;
} }
@ -773,32 +755,32 @@ namespace TShockAPI
var player = Tools.FindPlayer(plStr); var player = Tools.FindPlayer(plStr);
if (player.Count == 0) if (player.Count == 0)
{ {
Tools.SendMessage(adminplr, "Invalid player!", Color.Red); args.Player.SendMessage("Invalid player!", Color.Red);
} }
else if (player.Count > 1) else if (player.Count > 1)
{ {
Tools.SendMessage(adminplr, "More than one player matched!", Color.Red); args.Player.SendMessage("More than one player matched!", Color.Red);
} }
else else
{ {
int plr = player[0]; var plr = player[0];
bool flag = false; bool flag = false;
for (int i = 0; i < 40; i++) for (int i = 0; i < 40; i++)
{ {
if (!Main.player[plr].inventory[i].active) if (!plr.TPlayer.inventory[i].active)
{ {
//Main.player[player].inventory[i].SetDefaults(type); //Main.player[player].inventory[i].SetDefaults(type);
//Main.player[player].inventory[i].stack = Main.player[player].inventory[i].maxStack; //Main.player[player].inventory[i].stack = Main.player[player].inventory[i].maxStack;
int id = Terraria.Item.NewItem(0, 0, 0, 0, type, 1, true); int id = Terraria.Item.NewItem(0, 0, 0, 0, type, 1, true);
Main.item[id].position.X = Main.player[plr].position.X; Main.item[id].position.X = plr.TPlayer.position.X;
Main.item[id].position.Y = Main.player[plr].position.Y; Main.item[id].position.Y = plr.TPlayer.position.Y;
Main.item[id].stack = Main.item[id].maxStack; Main.item[id].stack = Main.item[id].maxStack;
//TShock.SendDataAll(21, -1, "", id); //TShock.SendDataAll(21, -1, "", id);
NetMessage.SendData(21, -1, -1, "", id, 0f, 0f, 0f); NetMessage.SendData(21, -1, -1, "", id, 0f, 0f, 0f);
Tools.SendMessage(adminplr, args.Player.SendMessage(
string.Format("Gave {0} some {1}.", Tools.FindPlayer(plr), Main.item[id].name)); string.Format("Gave {0} some {1}.", plr.Name, Main.item[id].name));
Tools.SendMessage(plr, plr.SendMessage(
string.Format("{0} gave you some {1}.", Tools.FindPlayer(adminplr), string.Format("{0} gave you some {1}.", args.Player.Name,
Main.item[id].name)); Main.item[id].name));
//TShock.UpdateInventories(); //TShock.UpdateInventories();
flag = true; flag = true;
@ -806,7 +788,7 @@ namespace TShockAPI
} }
} }
if (!flag) if (!flag)
Tools.SendMessage(args.PlayerID, "Player does not have free slots!", Color.Red); args.Player.SendMessage("Player does not have free slots!", Color.Red);
} }
} }
@ -820,24 +802,24 @@ namespace TShockAPI
var player = Tools.FindPlayer(plStr); var player = Tools.FindPlayer(plStr);
if (player.Count == 0) if (player.Count == 0)
{ {
Tools.SendMessage(adminplr, "Invalid player!", Color.Red); args.Player.SendMessage("Invalid player!", Color.Red);
} }
else if (player.Count > 1) else if (player.Count > 1)
{ {
Tools.SendMessage(adminplr, "More than one player matched!", Color.Red); args.Player.SendMessage("More than one player matched!", Color.Red);
} }
else else
{ {
int plr = player[0]; var plr = player[0];
DropHearts((int)Main.player[plr].position.X, (int)Main.player[plr].position.Y, 20); DropHearts(plr.TPlayer.position.X, plr.TPlayer.position.Y, 20);
Tools.SendMessage(adminplr, string.Format("You just healed {0}", Tools.FindPlayer(plr))); args.Player.SendMessage(string.Format("You just healed {0}", plr.Name));
Tools.SendMessage(plr, string.Format("{0} just healed you!", Tools.FindPlayer(adminplr))); plr.SendMessage(string.Format("{0} just healed you!", plr.Name));
} }
} }
else else
{ {
DropHearts(args.Player.X, args.Player.Y, 20); DropHearts(args.Player.X, args.Player.Y, 20);
Tools.SendMessage(adminplr, "You just got healed!"); args.Player.SendMessage("You just got healed!");
} }
} }
@ -871,11 +853,10 @@ namespace TShockAPI
public static void MaxSpawns(CommandArgs args) public static void MaxSpawns(CommandArgs args)
{ {
int adminplr = args.PlayerID;
if (args.Parameters.Count != 1) if (args.Parameters.Count != 1)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /maxspawns <maxspawns>", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /maxspawns <maxspawns>", Color.Red);
return; return;
} }
@ -883,16 +864,14 @@ namespace TShockAPI
int.TryParse(args.Parameters[0], out amount); int.TryParse(args.Parameters[0], out amount);
NPC.defaultMaxSpawns = amount; NPC.defaultMaxSpawns = amount;
ConfigurationManager.DefaultMaxSpawns = amount; ConfigurationManager.DefaultMaxSpawns = amount;
Tools.Broadcast(string.Format("{0} changed the maximum spawns to: {1}", Tools.FindPlayer(adminplr), amount)); Tools.Broadcast(string.Format("{0} changed the maximum spawns to: {1}", args.Player.Name, amount));
} }
public static void SpawnRate(CommandArgs args) public static void SpawnRate(CommandArgs args)
{ {
int adminplr = args.PlayerID;
if (args.Parameters.Count != 1) if (args.Parameters.Count != 1)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /spawnrate <spawnrate>", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /spawnrate <spawnrate>", Color.Red);
return; return;
} }
@ -900,20 +879,19 @@ namespace TShockAPI
int.TryParse(args.Parameters[0], out amount); int.TryParse(args.Parameters[0], out amount);
NPC.defaultSpawnRate = amount; NPC.defaultSpawnRate = amount;
ConfigurationManager.DefaultSpawnRate = amount; ConfigurationManager.DefaultSpawnRate = amount;
Tools.Broadcast(string.Format("{0} changed the spawn rate to: {1}", Tools.FindPlayer(adminplr), amount)); Tools.Broadcast(string.Format("{0} changed the spawn rate to: {1}", args.Player.Name, amount));
} }
public static void Help(CommandArgs args) public static void Help(CommandArgs args)
{ {
int ply = args.PlayerID; args.Player.SendMessage("TShock Commands:");
Tools.SendMessage(ply, "TShock Commands:");
int page = 1; int page = 1;
if (args.Parameters.Count > 0) if (args.Parameters.Count > 0)
int.TryParse(args.Parameters[0], out page); int.TryParse(args.Parameters[0], out page);
List<Command> cmdlist = new List<Command>(); var cmdlist = new List<Command>();
for (int j = 0; j < ChatCommands.Count; j++) for (int j = 0; j < ChatCommands.Count; j++)
{ {
if (ChatCommands[j].CanRun(TShock.Players[ply])) if (ChatCommands[j].CanRun(args.Player))
{ {
cmdlist.Add(ChatCommands[j]); cmdlist.Add(ChatCommands[j]);
} }
@ -928,29 +906,27 @@ namespace TShockAPI
sb.Append("/").Append(cmdlist[j].Name); sb.Append("/").Append(cmdlist[j].Name);
if (j == cmdlist.Count - 1) if (j == cmdlist.Count - 1)
{ {
Tools.SendMessage(ply, sb.ToString(), Color.Yellow); args.Player.SendMessage(sb.ToString(), Color.Yellow);
break; break;
} }
if ((j + 1) % 5 == 0) if ((j + 1) % 5 == 0)
{ {
Tools.SendMessage(ply, sb.ToString(), Color.Yellow); args.Player.SendMessage(sb.ToString(), Color.Yellow);
sb.Clear(); sb.Clear();
} }
} }
} }
if (cmdlist.Count > (15 * page)) if (cmdlist.Count > (15 * page))
{ {
Tools.SendMessage(ply, string.Format("Type /help {0} for more commands.", (page + 1)), Color.Yellow); args.Player.SendMessage(string.Format("Type /help {0} for more commands.", (page + 1)), Color.Yellow);
} }
} }
public static void Time(CommandArgs args) public static void Time(CommandArgs args)
{ {
int adminplr = args.PlayerID;
if (args.Parameters.Count != 1) if (args.Parameters.Count != 1)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /time <day/night/dusk/noon/midnight>", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /time <day/night/dusk/noon/midnight>", Color.Red);
return; return;
} }
@ -961,38 +937,38 @@ namespace TShockAPI
Main.dayTime = true; Main.dayTime = true;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY); NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers(); NetMessage.syncPlayers();
Tools.Broadcast(string.Format("{0} set time to day.", Tools.FindPlayer(args.PlayerID))); Tools.Broadcast(string.Format("{0} set time to day.", args.Player.Name));
break; break;
case "night": case "night":
Main.time = 0; Main.time = 0;
Main.dayTime = false; Main.dayTime = false;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY); NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers(); NetMessage.syncPlayers();
Tools.Broadcast(string.Format("{0} set time to night.", Tools.FindPlayer(args.PlayerID))); Tools.Broadcast(string.Format("{0} set time to night.", args.Player.Name));
break; break;
case "dusk": case "dusk":
Main.dayTime = false; Main.dayTime = false;
Main.time = 0.0; Main.time = 0.0;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY); NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers(); NetMessage.syncPlayers();
Tools.Broadcast(string.Format("{0} set time to dusk.", Tools.FindPlayer(args.PlayerID))); Tools.Broadcast(string.Format("{0} set time to dusk.", args.Player.Name));
break; break;
case "noon": case "noon":
Main.dayTime = true; Main.dayTime = true;
Main.time = 27000.0; Main.time = 27000.0;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY); NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers(); NetMessage.syncPlayers();
Tools.Broadcast(string.Format("{0} set time to noon.", Tools.FindPlayer(args.PlayerID))); Tools.Broadcast(string.Format("{0} set time to noon.", args.Player.Name));
break; break;
case "midnight": case "midnight":
Main.dayTime = false; Main.dayTime = false;
Main.time = 16200.0; Main.time = 16200.0;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY); NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers(); NetMessage.syncPlayers();
Tools.Broadcast(string.Format("{0} set time to midnight.", Tools.FindPlayer(args.PlayerID))); Tools.Broadcast(string.Format("{0} set time to midnight.", args.Player.Name));
break; break;
default: default:
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /time <day/night/dusk/noon/midnight>", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /time <day/night/dusk/noon/midnight>", Color.Red);
break; break;
} }
} }
@ -1003,7 +979,7 @@ namespace TShockAPI
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /kill <player>", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /kill <player>", Color.Red);
return; return;
} }
@ -1011,33 +987,31 @@ namespace TShockAPI
var player = Tools.FindPlayer(plStr); var player = Tools.FindPlayer(plStr);
if (player.Count == 0) if (player.Count == 0)
{ {
Tools.SendMessage(adminplr, "Invalid player!", Color.Red); args.Player.SendMessage("Invalid player!", Color.Red);
} }
else if (player.Count > 1) else if (player.Count > 1)
{ {
Tools.SendMessage(adminplr, "More than one player matched!", Color.Red); args.Player.SendMessage("More than one player matched!", Color.Red);
} }
else else
{ {
int plr = player[0]; var plr = player[0];
Tools.SendMessage(adminplr, string.Format("You just killed {0}!", Tools.FindPlayer(plr))); args.Player.SendMessage(string.Format("You just killed {0}!", plr.Name));
Tools.SendMessage(plr, string.Format("{0} just killed you!", Tools.FindPlayer(adminplr))); plr.SendMessage(string.Format("{0} just killed you!", args.Player.Name));
TShock.PlayerDamage(plr, 999999); TShock.PlayerDamage(plr.Index, 999999);
} }
} }
public static void Slap(CommandArgs args) public static void Slap(CommandArgs args)
{ {
int adminplr = args.PlayerID;
if (args.Parameters.Count < 1 || args.Parameters.Count > 2) if (args.Parameters.Count < 1 || args.Parameters.Count > 2)
{ {
Tools.SendMessage(adminplr, "Invalid syntax! Proper syntax: /slap <player> [dmg]", Color.Red); args.Player.SendMessage( "Invalid syntax! Proper syntax: /slap <player> [dmg]", Color.Red);
return; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].Length == 0)
{ {
Tools.SendMessage(adminplr, "Missing player name", Color.Red); args.Player.SendMessage( "Missing player name", Color.Red);
return; return;
} }
@ -1045,29 +1019,30 @@ namespace TShockAPI
var player = Tools.FindPlayer(plStr); var player = Tools.FindPlayer(plStr);
if (player.Count == 0) if (player.Count == 0)
{ {
Tools.SendMessage(adminplr, "Invalid player!", Color.Red); args.Player.SendMessage( "Invalid player!", Color.Red);
} }
else if (player.Count > 1) else if (player.Count > 1)
{ {
Tools.SendMessage(adminplr, "More than one player matched!", Color.Red); args.Player.SendMessage( "More than one player matched!", Color.Red);
} }
else else
{ {
var plr = player[0];
int damage = 5; int damage = 5;
if (args.Parameters.Count == 2) if (args.Parameters.Count == 2)
{ {
int.TryParse(args.Parameters[1], out damage); int.TryParse(args.Parameters[1], out damage);
} }
TShock.PlayerDamage(player[0], damage); TShock.PlayerDamage(plr.Index, damage);
Tools.Broadcast(string.Format("{0} slapped {1} for {2} damage.", Tools.Broadcast(string.Format("{0} slapped {1} for {2} damage.",
Tools.FindPlayer(adminplr), Tools.FindPlayer(player[0]), damage)); args.Player.Name, plr.Name, damage));
} }
} }
public static void ProtectSpawn(CommandArgs args) public static void ProtectSpawn(CommandArgs args)
{ {
ConfigurationManager.SpawnProtect = (ConfigurationManager.SpawnProtect == false); ConfigurationManager.SpawnProtect = (ConfigurationManager.SpawnProtect == false);
Tools.SendMessage(args.PlayerID, args.Player.SendMessage(
string.Format("Spawn is now {0}.", (ConfigurationManager.SpawnProtect ? "protected" : "open"))); string.Format("Spawn is now {0}.", (ConfigurationManager.SpawnProtect ? "protected" : "open")));
} }

View file

@ -24,6 +24,7 @@ namespace TShockAPI
public class TSPlayer public class TSPlayer
{ {
public static readonly TSPlayer Server = new TSPlayer(new Player { name = "Server" }); public static readonly TSPlayer Server = new TSPlayer(new Player { name = "Server" });
public static readonly TSPlayer All = new TSPlayer(new Player { name = "All", whoAmi = -1 });
public uint TileThreshold { get; set; } public uint TileThreshold { get; set; }
@ -44,6 +45,10 @@ namespace TShockAPI
{ {
get { return TPlayer.name; } get { return TPlayer.name; }
} }
public bool Active
{
get { return TPlayer.active; }
}
public float X public float X
{ {
@ -67,5 +72,21 @@ namespace TShockAPI
TilesDestroyed = new Dictionary<Vector2, Tile>(); TilesDestroyed = new Dictionary<Vector2, Tile>();
TPlayer = ply; TPlayer = ply;
} }
public virtual void SendMessage(string msg)
{
SendMessage(msg, 0, 255, 0);
}
public virtual void SendMessage(string msg, Color color)
{
SendMessage(msg, color.R, color.G, color.B);
}
public virtual void SendMessage(string msg, byte red, byte green, byte blue)
{
NetMessage.SendData(0x19, Index, -1, msg, 255, red, green, blue);
}
} }
} }

View file

@ -244,7 +244,14 @@ namespace TShockAPI
{ {
using (var data = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length)) using (var data = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length))
{ {
e.Handled = func(data, e); try
{
e.Handled = func(data, e);
}
catch (Exception ex)
{
Log.Error(ex.ToString());
}
} }
} }
} }
@ -343,8 +350,8 @@ namespace TShockAPI
{ {
if (!Players[e.Msg.whoAmI].Group.HasPermission("editspawn")) if (!Players[e.Msg.whoAmI].Group.HasPermission("editspawn"))
{ {
Tools.SendMessage(e.Msg.whoAmI, "World protected from changes.", Color.Red); Players[e.Msg.whoAmI].SendMessage("World protected from changes.", Color.Red);
RevertPlayerChanges(e.Msg.whoAmI, type, x, y); RevertPlayerChanges(e.Msg.whoAmI, x, y);
return true; return true;
} }
} }
@ -355,8 +362,8 @@ namespace TShockAPI
var flag = CheckSpawn(x, y); var flag = CheckSpawn(x, y);
if (flag) if (flag)
{ {
Tools.SendMessage(e.Msg.whoAmI, "Spawn protected from changes.", Color.Red); Players[e.Msg.whoAmI].SendMessage("Spawn protected from changes.", Color.Red);
RevertPlayerChanges(e.Msg.whoAmI, type, x, y); RevertPlayerChanges(e.Msg.whoAmI, x, y);
return true; return true;
} }
} }
@ -371,7 +378,7 @@ namespace TShockAPI
return false; return false;
} }
private static void RevertPlayerChanges(int player, byte action, int x, int y) private static void RevertPlayerChanges(int player, int x, int y)
{ {
NetMessage.SendData(20, player, -1, "", 10, (float)(x - 5), (float)(y - 5), 0f); NetMessage.SendData(20, player, -1, "", 10, (float)(x - 5), (float)(y - 5), 0f);
} }
@ -497,14 +504,14 @@ namespace TShockAPI
if (lava && !Players[e.Msg.whoAmI].Group.HasPermission("canlava")) if (lava && !Players[e.Msg.whoAmI].Group.HasPermission("canlava"))
{ {
Tools.SendMessage(e.Msg.whoAmI, "You do not have permission to use lava", Color.Red); Players[e.Msg.whoAmI].SendMessage("You do not have permission to use lava", Color.Red);
Tools.SendLogs(string.Format("{0} tried using lava", Main.player[e.Msg.whoAmI].name), Color.Red); Tools.SendLogs(string.Format("{0} tried using lava", Main.player[e.Msg.whoAmI].name), Color.Red);
return true; return true;
} }
if (!lava && !Players[e.Msg.whoAmI].Group.HasPermission("canwater")) if (!lava && !Players[e.Msg.whoAmI].Group.HasPermission("canwater"))
{ {
Tools.SendMessage(e.Msg.whoAmI, "You do not have permission to use water", Color.Red); Players[e.Msg.whoAmI].SendMessage("You do not have permission to use water", Color.Red);
Tools.SendLogs(string.Format("{0} tried using water", Main.player[e.Msg.whoAmI].name), Color.Red); Tools.SendLogs(string.Format("{0} tried using water", Main.player[e.Msg.whoAmI].name), Color.Red);
return true; return true;
} }
@ -538,7 +545,7 @@ namespace TShockAPI
var flag = CheckSpawn(x, y); var flag = CheckSpawn(x, y);
if (flag) if (flag)
{ {
Tools.SendMessage(e.Msg.whoAmI, "The spawn is protected!", Color.Red); Players[e.Msg.whoAmI].SendMessage("The spawn is protected!", Color.Red);
return true; return true;
} }
} }
@ -570,7 +577,7 @@ namespace TShockAPI
if (Main.netMode != 2) if (Main.netMode != 2)
return; return;
Log.Info(string.Format("{0} ({1}) from '{2}' group joined.", Tools.FindPlayer(who), Tools.GetPlayerIP(who), Players[who].Group.Name)); Log.Info(string.Format("{0} ({1}) from '{2}' group joined.", Players[who].Name, Tools.GetPlayerIP(who), Players[who].Group.Name));
Tools.ShowMOTD(who); Tools.ShowMOTD(who);
if (HackedHealth(who)) if (HackedHealth(who))
@ -600,7 +607,9 @@ namespace TShockAPI
return; return;
} }
if (Players[ply].Group.HasPermission("adminchat") && !text.StartsWith("/")) var tsplr = Players[msg.whoAmI];
if (tsplr.Group.HasPermission("adminchat") && !text.StartsWith("/"))
{ {
Tools.Broadcast(ConfigurationManager.AdminChatPrefix + "<" + Main.player[ply].name + "> " + text, (byte)ConfigurationManager.AdminChatRGB[0], (byte)ConfigurationManager.AdminChatRGB[1], (byte)ConfigurationManager.AdminChatRGB[2]); Tools.Broadcast(ConfigurationManager.AdminChatPrefix + "<" + Main.player[ply].name + "> " + text, (byte)ConfigurationManager.AdminChatRGB[0], (byte)ConfigurationManager.AdminChatRGB[1], (byte)ConfigurationManager.AdminChatRGB[2]);
e.Handled = true; e.Handled = true;
@ -632,19 +641,19 @@ namespace TShockAPI
if (cmd == null) if (cmd == null)
{ {
Tools.SendMessage(ply, "That command does not exist, try /help", Color.Red); tsplr.SendMessage("That command does not exist, try /help", Color.Red);
} }
else else
{ {
if (!cmd.CanRun(Players[ply])) if (!cmd.CanRun(tsplr))
{ {
Tools.SendLogs(string.Format("{0} tried to execute {1}", Tools.FindPlayer(ply), cmd.Name), Color.Red); Tools.SendLogs(string.Format("{0} tried to execute {1}", tsplr.Name, cmd.Name), Color.Red);
Tools.SendMessage(ply, "You do not have access to that command.", Color.Red); tsplr.SendMessage("You do not have access to that command.", Color.Red);
} }
else else
{ {
Tools.SendLogs(string.Format("{0} executed: /{1}", Tools.FindPlayer(ply), text), Color.Red); Tools.SendLogs(string.Format("{0} executed: /{1}", tsplr.Name, text), Color.Red);
cmd.Run(text, Players[ply], args); cmd.Run(text, tsplr, args);
} }
} }
e.Handled = true; e.Handled = true;

View file

@ -94,39 +94,18 @@ namespace TShockAPI
/// <param name="msg">string message</param> /// <param name="msg">string message</param>
public static void Broadcast(string msg) public static void Broadcast(string msg)
{ {
Broadcast(msg, 0, 255, 0); Broadcast(msg, Color.Green);
} }
public static void Broadcast(string msg, byte red, byte green, byte blue) public static void Broadcast(string msg, byte red, byte green, byte blue)
{ {
Broadcast(msg, new Color(red, green, blue)); TSPlayer.All.SendMessage(msg, red, green, blue);
Log.Info(string.Format("Broadcast: {0}", msg));
} }
public static void Broadcast(string msg, Color color) public static void Broadcast(string msg, Color color)
{ {
SendMessage(-1, msg, color); Broadcast(msg, color.R, color.G, color.B);
Log.Info(string.Format("Broadcast: {0}", msg));
}
/// <summary>
/// Sends a message out to a single player
/// </summary>
/// <param name="ply">int socket thingy for the player from the server socket</param>
/// <param name="msg">String message</param>
public static void SendMessage(int ply, string msg, byte red, byte green, byte blue)
{
SendMessage(ply, msg, new Color(red, green, blue));
}
/// <summary>
/// Sends a message out to a single player
/// </summary>
/// <param name="ply">int socket thingy for the player from the server socket</param>
/// <param name="msg">String message</param>
/// <param name="color">Float containing red, blue, and green color values</param>
public static void SendMessage(int ply, string msg, Color color)
{
NetMessage.SendData(0x19, ply, -1, msg, 255, color.R, color.G, color.B);
} }
/// <summary> /// <summary>
@ -144,20 +123,10 @@ namespace TShockAPI
if (!TShock.Players[i].Group.HasPermission("logs")) if (!TShock.Players[i].Group.HasPermission("logs"))
continue; continue;
SendMessage(i, log, color); TShock.Players[i].SendMessage(log, color);
} }
} }
/// <summary>
/// Sends a green message to a player
/// </summary>
/// <param name="ply">int socket thingy for the player from the server socket</param>
/// <param name="message">string message</param>
public static void SendMessage(int ply, string message)
{
SendMessage(ply, message, 0, 255, 0);
}
/// <summary> /// <summary>
/// The number of active players on the server. /// The number of active players on the server.
/// </summary> /// </summary>
@ -180,34 +149,24 @@ namespace TShockAPI
/// </summary> /// </summary>
/// <param name="ply"></param> /// <param name="ply"></param>
/// <returns></returns> /// <returns></returns>
public static List<int> FindPlayer(string ply) public static List<TSPlayer> FindPlayer(string ply)
{ {
var found = new List<int>(); var found = new List<TSPlayer>();
ply = ply.ToLower(); ply = ply.ToLower();
for (int i = 0; i < Main.player.Length; i++) for (int i = 0; i < TShock.Players.Length; i++)
{ {
if (Main.player[i] == null) if (TShock.Players[i] == null)
continue; continue;
string name = Main.player[i].name.ToLower(); string name = TShock.Players[i].Name.ToLower();
if (name.Equals(ply)) if (name.Equals(ply))
return new List<int> { i }; return new List<TSPlayer> { TShock.Players[i] };
if (name.Contains(ply)) if (name.Contains(ply))
found.Add(i); found.Add(TShock.Players[i]);
} }
return found; return found;
} }
/// <summary>
/// Gets the given player's name
/// </summary>
/// <param name="ply">int player</param>
/// <returns>string name</returns>
public static string FindPlayer(int ply)
{
return Main.player[ply] != null ? Main.player[ply].name : null;
}
/// <summary> /// <summary>
/// Creates an NPC /// Creates an NPC
/// </summary> /// </summary>
@ -362,7 +321,7 @@ namespace TShockAPI
{ {
try try
{ {
SendMessage(ply, foo, (byte)Convert.ToInt32(pCc[0]), (byte)Convert.ToInt32(pCc[1]), (byte)Convert.ToInt32(pCc[2])); TShock.Players[ply].SendMessage(foo, (byte)Convert.ToInt32(pCc[0]), (byte)Convert.ToInt32(pCc[1]), (byte)Convert.ToInt32(pCc[2]));
continue; continue;
} }
catch (Exception e) catch (Exception e)
@ -371,7 +330,7 @@ namespace TShockAPI
} }
} }
} }
SendMessage(ply, foo); TShock.Players[ply].SendMessage(foo);
} }
tr.Close(); tr.Close();
} }

View file

@ -79,10 +79,10 @@ namespace TShockAPI
{ {
if (!TShock.Players[i].Group.HasPermission("maintenance")) if (!TShock.Players[i].Group.HasPermission("maintenance"))
return; return;
Tools.SendMessage(i, "The server is out of date. To update, type /updatenow."); TShock.Players[i].SendMessage("The server is out of date. To update, type /updatenow.");
for (int j = 4; j < changes.Length; j++) for (int j = 4; j < changes.Length; j++)
{ {
Tools.SendMessage(i, changes[j], Color.Red); TShock.Players[i].SendMessage(changes[j], Color.Red);
} }
} }
} }