From 8344801128022134b78bd8269c42048b9def5016 Mon Sep 17 00:00:00 2001 From: Maverick Motherfucker Date: Fri, 3 Jun 2011 22:28:05 -0700 Subject: [PATCH] Started work on revamping command system for permissions, but I'm out for the night, cya tomorrow --- TShockAPI/Commands.cs | 32 ++++++++++++++++++++++++++++++++ TShockAPI/Group.cs | 4 ++++ TShockAPI/TSPlayer.cs | 5 +++++ TShockAPI/TShock.cs | 3 ++- TShockAPI/Tools.cs | 26 ++++++++++++++++++++++++++ TShockAPI/config/groups.txt | 1 + 6 files changed, 70 insertions(+), 1 deletion(-) 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