using System; using System.Collections.Generic; using InfinityScript; using Utility; using System.IO; namespace Permissions { public class Permissions : BaseScript { List admins = new List(); public List Admins; public List UserGroups; public Permissions() { CheckForFile(); initUserGroups(); Log.Info("Script Permission by frst_ v1.0.0.2 | Mordekai74.3dn.ru"); } public override EventEat OnSay2(Entity player, string name, string Message) { string userIsInGroup = getUserGroup((player.GUID.ToString().ToLower())); if (Message.ToLower().StartsWith("!help", StringComparison.InvariantCultureIgnoreCase) || Message.ToLower().StartsWith("!cmdlist", StringComparison.InvariantCultureIgnoreCase)) { List allowed_commands = getCommandsAllowedInGroup(userIsInGroup); string msg = "^2Команды, которые вы можете использовать^7: "; for (int i = 0; i < allowed_commands.Count; i++) { if (i == (allowed_commands.Count - 2)) msg += allowed_commands[i] + "^2 и^7 "; else if (i == (allowed_commands.Count - 1)) msg += allowed_commands[i] + "^2."; else msg += allowed_commands[i] + "^2,^7 "; } Utilities.RawSayTo(player, msg); return EventEat.EatGame; } if (userIsInGroup != "Admin") { if (!Message.StartsWith("!")) return EventEat.EatNone; List allowed_commands = getCommandsAllowedInGroup(userIsInGroup); if (allowed_commands.Contains(Message.ToLower().Split(' ')[0])) return EventEat.EatNone; else { Utilities.RawSayTo(player, "^2У вас нет прав для использования этой команды или неправильная команда."); return EventEat.EatGame; } } return EventEat.EatNone; } void initUserGroups() { UserGroups = new List(); string UserGroups_string = UL.GET.GetServerCFG("Permission", "Usergroups", "Admin,Moderator,User"); foreach (string Group in UserGroups_string.Split(',')) UserGroups.Add(Group); } private List getUsersInGroup(string groupname) { List group = new List(); string group_string = UL.GET.GetServerCFG("Permission", groupname + "_guids", ""); if (group_string != "") foreach (string GUID in group_string.Split(',')) group.Add(GUID.ToLower()); else if (groupname != "User") Log.Info("Нет игроков, установленных для группы: ^1" + groupname); return group; } private List getCommandsAllowedInGroup(string groupname) { List group = new List(); string group_string = UL.GET.GetServerCFG("Permission", groupname + "_commands", " "); if (group_string != " ") foreach (string cmd in group_string.Split(',')) group.Add(cmd); else Log.Info("Нет команд, установленных для группы: ^1" + groupname); return group; } string getUserGroup(string GUID) { foreach (string group in UserGroups) { List usersInGroup = new List(); usersInGroup = getUsersInGroup(group); if (usersInGroup.Contains(GUID.ToLower())) return group; } return "User"; } void CheckForFile() { if (!File.Exists("scripts\\sv_config.ini")) { Log.Info("SV_CONFIG.INI HAS CREATED (SCRIPTS\\SV_CONFIG.INI)"); using (StreamWriter sw = new StreamWriter("scripts\\sv_config.ini", true)) { sw.WriteLine("[Permission]"); sw.WriteLine("Usergroups=Admin,Moderator,User"); sw.WriteLine("Admin_guids="); sw.WriteLine("Admin_commands=*ALL*"); sw.WriteLine("Moderator_guids="); sw.WriteLine("Moderator_commands=!cmds,!help,!ban,!kick,!tmpban"); sw.WriteLine("User_commands=!maplist"); sw.WriteLine("User_guids=*EVERYONE*"); } } } } }