diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs
index f9829ee1..68f9d19c 100644
--- a/TShockAPI/Commands.cs
+++ b/TShockAPI/Commands.cs
@@ -10,6 +10,7 @@ namespace TShockAPI
public class Commands
{
public delegate void CommandDelegate(CommandArgs args);
+ public static Command[] commands;
public struct CommandArgs
{
@@ -24,6 +25,37 @@ namespace TShockAPI
}
}
+ public class Command
+ {
+ private string name;
+ private string permission;
+ CommandDelegate command;
+
+ public Command(string cmdName, string permissionNeeded, CommandDelegate cmd)
+ {
+ name = cmdName;
+ permission = permissionNeeded;
+ command = cmd;
+ }
+
+ public bool Run(string msg, TSPlayer ply)
+ {
+ if (!ply.group.HasPermission(permission))
+ {
+ return false;
+ }
+
+ CommandArgs args = new CommandArgs();
+ args.Message = msg;
+ args.PlayerX = (int)ply.GetPlayer().position.X;
+ args.PlayerY = (int)ply.GetPlayer().position.Y;
+ args.PlayerID = ply.GetPlayerID();
+
+ command(args);
+ return true;
+ }
+ }
+
public static void InitCommands()
{
TShock.admincommandList.Add("kick", new CommandDelegate(Kick));
diff --git a/TShockAPI/Group.cs b/TShockAPI/Group.cs
index fb4b6a5c..e3bb5bcf 100644
--- a/TShockAPI/Group.cs
+++ b/TShockAPI/Group.cs
@@ -35,6 +35,10 @@ namespace TShockAPI
public virtual bool HasPermission(string permission)
{
+ if (permission.Equals(""))
+ {
+ return true;
+ }
if (negatedPermissions.Contains(permission))
{
return false;
diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs
index e098b04f..bef5557c 100644
--- a/TShockAPI/TSPlayer.cs
+++ b/TShockAPI/TSPlayer.cs
@@ -26,6 +26,11 @@ namespace TShockAPI
return Terraria.Main.player[player];
}
+ public int GetPlayerID()
+ {
+ return player;
+ }
+
public bool IsAdmin()
{
if (adminSet)
diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs
index ea540aba..212f5d08 100644
--- a/TShockAPI/TShock.cs
+++ b/TShockAPI/TShock.cs
@@ -52,7 +52,7 @@ namespace TShockAPI
static TShock()
{
- Tools.LoadGroups();
+ //Tools.LoadGroups();
#region Blacklisted tiles
BlacklistTiles = new bool[0x80];
@@ -425,6 +425,7 @@ namespace TShockAPI
Tools.Kick(ply, "Not on whitelist.");
}
players[ply] = new TSPlayer(ply);
+ players[ply].group = Tools.GetGroupForIP(ip);
}
catch (Exception ex)
{
diff --git a/TShockAPI/Tools.cs b/TShockAPI/Tools.cs
index 9c79e0ec..52b31c4b 100644
--- a/TShockAPI/Tools.cs
+++ b/TShockAPI/Tools.cs
@@ -373,6 +373,7 @@ namespace TShockAPI
}
}
}
+ groups.Add(group);
}
}
@@ -405,6 +406,31 @@ namespace TShockAPI
return null;
}
+ ///
+ /// Returns a Group for a ip from users.txt
+ ///
+ /// string ip
+ public static Group GetGroupForIP(string ip)
+ {
+ ip = GetRealIP(ip);
+
+ StreamReader sr = new StreamReader("users.txt");
+ string data = sr.ReadToEnd();
+ data = data.Replace("\r", "");
+ string[] lines = data.Split('\n');
+
+ for (int i = 0; i < lines.Length; i++)
+ {
+ string[] args = lines[i].Split(' ');
+ if (args[0].Equals(ip))
+ {
+ return GetGroup(args[1]);
+ }
+ }
+
+ return GetGroup("default");
+ }
+
public Tools() { }
}
}
\ No newline at end of file
diff --git a/TShockAPI/config/groups.txt b/TShockAPI/config/groups.txt
index 26fc2642..9819f83b 100644
--- a/TShockAPI/config/groups.txt
+++ b/TShockAPI/config/groups.txt
@@ -6,6 +6,7 @@
#currently avaliable permissions: kick ban ignorecheatdetection
#Do not remove the group default
#Do not name a group SuperAdmin, that is hard-coded into the code, it grants total permissions
+#ALWAYS DECLARE A GROUP'S PARENT BEFORE YOU DECLARE THE GROUP
default null
admin default kick ban
trustedadmin admin ignorecheatdetection