Exemplo n.º 1
0
        public static string Append(Player p, string ai, string cmd, string[] args)
        {
            using (StreamWriter w = new StreamWriter("bots/" + ai, true)) {
                if (cmd.Length == 0)
                {
                    cmd = "walk";
                }
                if (cmd.CaselessEq("tp"))
                {
                    cmd = "teleport";
                }

                BotInstruction ins = BotInstruction.Find(cmd);
                if (ins == null)
                {
                    p.Message("Could not find instruction \"" + cmd + "\""); return(null);
                }

                CommandExtraPerms killPerms = CommandExtraPerms.Find("BotSet", 1);
                if (ins.Name.CaselessEq("kill") && !killPerms.UsableBy(p.Rank))
                {
                    killPerms.MessageCannotUse(p);
                    return(null);
                }

                try {
                    ins.Output(p, args, w);
                } catch {
                    p.Message("Invalid arguments given for instruction " + ins.Name);
                    return(null);
                }
                return(ins.Name);
            }
        }
Exemplo n.º 2
0
 void UpdateExtraPerms(LevelPermission perm, int num)
 {
     CommandExtraPerms.Load();
     CommandExtraPerms.Set("lavasurvival", perm, "temp desc", num);
     CommandExtraPerms.Save();
     needsSaveSettings = true;
 }
Exemplo n.º 3
0
        public static void Register(Command cmd)
        {
            allCmds.Add(cmd);

            CommandPerms perms = CommandPerms.GetOrAdd(cmd.name, cmd.defaultRank);

            foreach (Group grp in Group.GroupList)
            {
                if (perms.UsableBy(grp.Permission))
                {
                    grp.Commands.Add(cmd);
                }
            }

            CommandPerm[] extra = cmd.ExtraPerms;
            if (extra != null)
            {
                for (int i = 0; i < extra.Length; i++)
                {
                    CommandExtraPerms exPerms = CommandExtraPerms.GetOrAdd(cmd.name, i + 1, extra[i].Perm);
                    exPerms.Desc = extra[i].Description;
                }
            }
            Alias.RegisterDefaults(cmd);
        }
Exemplo n.º 4
0
        public static void PrintCommandInfo(Player p, Command cmd)
        {
            ItemPerms perms = CommandPerms.Find(cmd.name);

            if (perms == null)
            {
                perms = new ItemPerms(cmd.defaultRank, null, null);
            }

            p.Message("Usable by: " + perms.Describe());
            PrintAliases(p, cmd);

            List <CommandExtraPerms> extraPerms = CommandExtraPerms.FindAll(cmd.name);

            if (cmd.ExtraPerms == null)
            {
                extraPerms.Clear();
            }
            if (extraPerms.Count == 0)
            {
                return;
            }

            p.Message("%TExtra permissions:");
            foreach (CommandExtraPerms extra in extraPerms)
            {
                p.Message("{0}) {1} {2}", extra.Num, extra.Describe(), extra.Desc);
            }
        }
Exemplo n.º 5
0
        public static void Append(Player p, string ai, string action, string[] args)
        {
            using (StreamWriter w = new StreamWriter("bots/" + ai, true)) {
                if (action.Length == 0)
                {
                    action = "walk";
                }
                if (action.CaselessEq("tp"))
                {
                    action = "teleport";
                }

                BotInstruction ins = BotInstruction.Find(action);
                if (ins == null)
                {
                    Player.Message(p, "Could not find instruction \"" + action + "\""); return;
                }

                LevelPermission killPerm = CommandExtraPerms.MinPerm("botset");
                if (ins.Name.CaselessEq("kill") && p.Rank < killPerm)
                {
                    Formatter.MessageNeedMinPerm(p, "+ can toggle a bot's killer instinct.", killPerm);
                    return;
                }
                ins.Output(p, args, w);
            }
        }
Exemplo n.º 6
0
        static void ShowAltsTask(SchedulerTask task)
        {
            string name = (string)task.State;
            Player p    = PlayerInfo.FindExact(name);

            if (p == null || p.ip == "127.0.0.1" || p.disconnected)
            {
                return;
            }

            List <string> alts = PlayerInfo.FindAccounts(p.ip);

            // in older versions it was possible for your name to appear multiple times in DB
            while (alts.CaselessRemove(p.name))
            {
            }
            if (alts.Count == 0)
            {
                return;
            }

            LevelPermission adminChatRank = CommandExtraPerms.MinPerm("adminchat", LevelPermission.Admin);
            string          altsMsg       = p.ColoredName + " %Sis lately known as: " + alts.Join();

            if (p.group.Permission < adminChatRank || !ServerConfig.AdminsJoinSilently)
            {
                Chat.MessageOps(altsMsg);
                //IRCBot.Say(temp, true); //Tells people in op channel on IRC
            }
            Logger.Log(LogType.UserActivity, altsMsg);
        }
Exemplo n.º 7
0
        public static void Register(Command cmd)
        {
            allCmds.Add(cmd);

            CommandPerms perms = CommandPerms.Find(cmd.name);

            if (perms == null)
            {
                perms = new CommandPerms(cmd.name, cmd.defaultRank, null, null);
                CommandPerms.List.Add(perms);
            }
            foreach (Group grp in Group.GroupList)
            {
                if (perms.UsableBy(grp.Permission))
                {
                    grp.Commands.Add(cmd);
                }
            }

            CommandPerm[] extra = cmd.ExtraPerms;
            if (extra != null)
            {
                for (int i = 0; i < extra.Length; i++)
                {
                    CommandExtraPerms.Set(cmd.name, i + 1, extra[i].Description,
                                          extra[i].Perm, null, null);
                }
            }
            Alias.RegisterDefaults(cmd);
        }
Exemplo n.º 8
0
        void cmd_cmbExtra_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox box = (ComboBox)sender;

            if (commandItems.SupressEvents)
            {
                return;
            }
            int idx = box.SelectedIndex;

            if (idx == -1)
            {
                return;
            }

            int boxIdx             = Array.IndexOf <ComboBox>(commandExtraBoxes, box);
            CommandExtraPerms orig = extraPermsList[boxIdx];
            CommandExtraPerms copy = LookupExtraPerms(orig.CmdName, orig.Num);

            if (copy == null)
            {
                copy = orig.Copy();
                commandExtraPermsChanged.Add(copy);
            }
            copy.MinRank = GuiPerms.RankPerms[idx];
        }
Exemplo n.º 9
0
        void CommandInitExtraPerms()
        {
            extraPermsList = CommandExtraPerms.FindAll(cmd.name);
            for (int i = 0; i < commandExtraBoxes.Length; i++)
            {
                commandExtraBoxes[i].Visible  = false;
                commandExtraLabels[i].Visible = false;
            }
            if (cmd.ExtraPerms == null)
            {
                extraPermsList.Clear();
            }

            int height = 12;

            for (int i = 0; i < extraPermsList.Count; i++)
            {
                CommandExtraPerms perms = LookupExtraPerms(extraPermsList[i].CmdName, extraPermsList[i].Num);
                if (perms == null)
                {
                    perms = extraPermsList[i];
                }

                GuiPerms.SetDefaultIndex(commandExtraBoxes[i], perms.MinRank);
                commandExtraBoxes[i].Visible  = true;
                commandExtraLabels[i].Text    = "+ " + perms.Desc;
                commandExtraLabels[i].Visible = true;
                height = commandExtraBoxes[i].Bottom + 12;
            }
            cmd_grpExtra.Visible = extraPermsList.Count > 0;
            cmd_grpExtra.Height  = height;
        }
Exemplo n.º 10
0
        static void SetOldReview()
        {
            if (old.clearPerm == -1 && old.nextPerm == -1 && old.viewPerm == -1 &&
                old.opchatPerm == -1 && old.adminchatPerm == -1)
            {
                return;
            }

            // Apply backwards compatibility
            if (old.viewPerm != -1)
            {
                CommandExtraPerms.Find("Review", 1).MinRank = (LevelPermission)old.viewPerm;
            }
            if (old.nextPerm != -1)
            {
                CommandExtraPerms.Find("Review", 2).MinRank = (LevelPermission)old.nextPerm;
            }
            if (old.clearPerm != -1)
            {
                CommandExtraPerms.Find("Review", 3).MinRank = (LevelPermission)old.clearPerm;
            }
            if (old.opchatPerm != -1)
            {
                Chat.OpchatPerms.MinRank = (LevelPermission)old.opchatPerm;
            }
            if (old.adminchatPerm != -1)
            {
                Chat.AdminchatPerms.MinRank = (LevelPermission)old.adminchatPerm;
            }
            CommandExtraPerms.Save();
        }
Exemplo n.º 11
0
        public static void PrintCommandInfo(Player p, Command cmd)
        {
            CommandPerms  perms   = CommandPerms.Find(cmd.name);
            StringBuilder builder = new StringBuilder();

            builder.Append("Usable by: ");
            if (perms == null)
            {
                builder.Append(Group.GetColoredName(cmd.defaultRank) + "%S+");
            }
            else
            {
                PrintRanks(perms.MinRank, perms.Allowed, perms.Disallowed, builder);
            }
            Player.Message(p, builder.ToString());

            PrintAliases(p, cmd);
            List <CommandExtraPerms> extraPerms = CommandExtraPerms.FindAll(cmd.name);

            if (extraPerms.Count == 0)
            {
                return;
            }

            Player.Message(p, "%TExtra permissions:");
            foreach (CommandExtraPerms extra in extraPerms)
            {
                Player.Message(p, "{0}) {1}%S{2}", extra.Number,
                               Group.GetColoredName(extra.MinRank), extra.Description);
            }
        }
Exemplo n.º 12
0
 // this doesn't check access for player vs model,
 // only checks if they can edit a certain field on this model
 public bool CanEdit(Player p, string modelName = null)
 {
     if (this.extra)
     {
         // you can edit these if you're op,
         if (CommandExtraPerms.Find("CustomModel", 1).UsableBy(p.Rank))
         {
             return(true);
         }
         else
         {
             // or if it's not a primary personal model
             if (modelName != null && new StoredCustomModel(modelName, true).IsPersonalPrimary())
             {
                 // is a primary personal model
                 return(false);
             }
             else
             {
                 return(true);
             }
         }
     }
     else
     {
         return(true);
     }
 }
Exemplo n.º 13
0
        public override void Help(Player p)
        {
            p.Message("%T/Patrol");
            ItemPerms except = CommandExtraPerms.Find(name, 1);

            p.Message("%HTeleports you to a random player. {0} %Hare not patrolled", except.Describe());
            p.Message("%HPlayers patrolled within the last 15 seconds are ignored");
        }
Exemplo n.º 14
0
        public override void Help(Player p)
        {
            Player.Message(p, "%T/Patrol");
            LevelPermission perm = CommandExtraPerms.MinPerm(name);

            Player.Message(p, "%HTeleports you to a random {0} %Hor lower", Group.GetColoredName(perm));
            Player.Message(p, "%HPlayers patrolled within the last 15 seconds are ignored");
        }
Exemplo n.º 15
0
        static void LogIPAction(ModAction e, string type)
        {
            ItemPerms perms = CommandExtraPerms.Find("WhoIs", 1);

            Chat.Message(ChatScope.Global, e.FormatMessage("An IP", type), perms,
                         FilterNotItemPerms, true);
            Chat.Message(ChatScope.Global, e.FormatMessage(e.Target, type), perms,
                         Chat.FilterPerms, true);
        }
Exemplo n.º 16
0
        public static void MessageOps(Player p, string message)
        {
            LevelPermission rank = CommandExtraPerms.MinPerm("OpChat", LevelPermission.Operator);

            if (!MessageCmd.CanSpeak(p, "OpChat"))
            {
                return;
            }
            MessageStaff(p, message, rank, "Ops");
        }
Exemplo n.º 17
0
        public static void MessageAdmins(Player p, string message)
        {
            LevelPermission rank = CommandExtraPerms.MinPerm("AdminChat", LevelPermission.Admin);

            if (!MessageCmd.CanSpeak(p, "AdminChat"))
            {
                return;
            }
            MessageStaff(p, message, rank, "Admins");
        }
Exemplo n.º 18
0
        public static void LoadAllSettings()
        {
            // Unload custom plugins
            List <Plugin> plugins = new List <Plugin>(Plugin.all);

            foreach (Plugin p in plugins)
            {
                if (Plugin.core.Contains(p))
                {
                    continue;
                }
                Plugin.Unload(p, false);
            }

            ZSGame.Instance.infectMessages = ZSConfig.LoadInfectMessages();
            Colors.Load();
            Alias.Load();
            BlockDefinition.LoadGlobal();
            ImagePalette.Load();

            SrvProperties.Load();
            AuthService.ReloadDefault();
            Group.LoadAll();
            CommandPerms.Load();
            Command.InitAll();
            Block.SetBlocks();
            AwardsList.Load();
            PlayerAwards.Load();
            Economy.Load();
            WarpList.Global.Filename = "extra/warps.save";
            WarpList.Global.Load();
            CommandExtraPerms.Load();
            ProfanityFilter.Init();
            Team.LoadList();
            ChatTokens.LoadCustom();
            SrvProperties.FixupOldPerms();
            CpeExtension.LoadDisabledList();

            TextFile announcementsFile = TextFile.Files["Announcements"];

            announcementsFile.EnsureExists();
            announcements = announcementsFile.GetText();

            // Reload custom plugins
            foreach (Plugin p in plugins)
            {
                if (Plugin.core.Contains(p))
                {
                    continue;
                }
                Plugin.Load(p, false);
            }

            OnConfigUpdatedEvent.Call();
        }
Exemplo n.º 19
0
        static void DoUnbanIP(ModAction e)
        {
            LevelPermission perm = CommandExtraPerms.MinPerm("whois");

            Chat.MessageWhere(e.FormatMessage("An IP", "&8IP unbanned"), pl => pl.Rank < perm);
            Chat.MessageWhere(e.FormatMessage(e.TargetName, "&8IP unbanned"), pl => pl.Rank >= perm);

            Logger.Log(LogType.UserActivity, "IP-UNBANNED: {0} by {1}.", e.Target, e.ActorName);
            Server.bannedIP.Remove(e.Target);
            Server.bannedIP.Save();
        }
Exemplo n.º 20
0
        protected bool CheckExtraPerm(Player p, int num)
        {
            if (HasExtraPerm(p, num))
            {
                return(true);
            }

            CommandExtraPerms perms = CommandExtraPerms.Find(name, num);

            Formatter.MessageNeedMinPerm(p, perms.Description, perms.MinRank);
            return(false);
        }
Exemplo n.º 21
0
        protected bool CheckExtraPerm(Player p, CommandData data, int num)
        {
            if (HasExtraPerm(p, data.Rank, num))
            {
                return(true);
            }

            CommandExtraPerms perms = CommandExtraPerms.Find(name, num);

            perms.MessageCannotUse(p);
            return(false);
        }
Exemplo n.º 22
0
        public void Add(Command cmd)
        {
            commands.Add(cmd);
            CommandPerm[] perms = cmd.ExtraPerms;
            if (!AddOtherPerms || perms == null)
            {
                return;
            }

            for (int i = 0; i < perms.Length; i++)
            {
                CommandExtraPerms.Set(cmd.name, perms[i].Perm, perms[i].Description, i + 1);
            }
        }
Exemplo n.º 23
0
        public static bool CanEditAny(Player p)
        {
            if (LevelInfo.IsRealmOwner(p.level, p.name))
            {
                return(true);
            }
            ItemPerms perms = CommandExtraPerms.Find("Bot", 1) ?? new ItemPerms(LevelPermission.Operator);

            if (perms.UsableBy(p.Rank))
            {
                return(true);
            }
            return(false);
        }
Exemplo n.º 24
0
        void HandleAdd(Player p, string[] args)
        {
            if (args.Length != 2)
            {
                p.Message("You need to provide a reason for the report."); return;
            }

            string target = PlayerDB.MatchNames(p, args[0]);

            if (target == null)
            {
                return;
            }
            string nick = p.FormatNick(target);

            List <string> reports = new List <string>();

            if (HasReports(target))
            {
                reports = Utils.ReadAllLinesList(ReportPath(target));
            }
            ItemPerms checkPerms = CommandExtraPerms.Find(name, 1);

            if (reports.Count >= 5)
            {
                p.Message("{0} &Walready has 5 reports! Please wait until an {1} &Whas reviewed these reports first!",
                          nick, CommandExtraPerms.Find(name, 1).Describe());
                return;
            }

            string reason = ModActionCmd.ExpandReason(p, args[1]);

            if (reason == null)
            {
                return;
            }

            reports.Add(reason + " - Reported by " + p.name + " at " + DateTime.Now);
            File.WriteAllLines(ReportPath(target), reports.ToArray());
            p.Message("&aReport sent! It should be viewed when a {0} &ais online",
                      checkPerms.Describe());

            string opsMsg = "λNICK &Sreported " + nick + "&S. Reason: " + reason;

            Chat.MessageFrom(ChatScope.Perms, p, opsMsg, checkPerms, null, true);
            string allMsg = "Use &T/Report check " + target + " &Sto see all of their reports";

            Chat.MessageFrom(ChatScope.Perms, p, allMsg, checkPerms, null, true);
        }
Exemplo n.º 25
0
        void HandleEnter(Player p, CommandData data)
        {
            if (p.IsSuper)
            {
                p.Message("{0} cannot enter the review queue.", p.SuperName); return;
            }
            TimeSpan delta = p.NextReviewTime - DateTime.UtcNow;

            if (delta.TotalSeconds >= 0)
            {
                p.Message("You must wait {0} before you can request another review",
                          delta.Shorten(true, true));
                return;
            }

            if (Server.reviewlist.CaselessContains(p.name))
            {
                p.Message("You are already in the review queue!"); return;
            }

            bool opsOn = false;

            Player[]  players   = PlayerInfo.Online.Items;
            ItemPerms nextPerms = CommandExtraPerms.Find("Review", 2);

            foreach (Player pl in players)
            {
                if (nextPerms.UsableBy(pl.Rank) && Entities.CanSee(data, p, pl))
                {
                    opsOn = true; break;
                }
            }

            Server.reviewlist.Add(p.name);
            int pos = Server.reviewlist.IndexOf(p.name) + 1;

            p.Message("You entered the &creview %Squeue at &aposition #" + pos);

            string msg = opsOn ?
                         "The online staff have been notified. Someone should be with you shortly." :
                         "There are currently no staff online. Staff will be notified when they join the server.";

            p.Message(msg);

            Chat.MessageFrom(ChatScope.Perms, p,
                             "λNICK %Srequested a review! &c(Total " + pos + " waiting)", nextPerms, null, true);

            p.NextReviewTime = DateTime.UtcNow.Add(ServerConfig.ReviewCooldown);
        }
Exemplo n.º 26
0
            public static bool CanEditAny(Player p)
            {
                if (LevelInfo.IsRealmOwner(p.name, p.level.name))
                {
                    return(true);
                }
                ItemPerms perms = CommandExtraPerms.Find("EffectSpawner", 1);

                perms = perms == null ? new ItemPerms(LevelPermission.Operator, null, null) : perms;
                if (perms.UsableBy(p.Rank))
                {
                    return(true);
                }
                return(false);
            }
Exemplo n.º 27
0
 protected override void UpdatePerms(ItemPerms perms, Player p, string msg)
 {
     if (perms is CommandPerms)
     {
         CommandPerms.Save();
         CommandPerms.ApplyChanges();
         Announce(p, perms.ItemName + msg);
     }
     else
     {
         CommandExtraPerms.Save();
         CommandExtraPerms ex = (CommandExtraPerms)perms;
         //Announce(p, cmd.name + "&S's extra permission " + idx + " was set to " + grp.ColoredName);
         Announce(p, ex.CmdName + " extra permission #" + ex.Num + msg);
     }
 }
Exemplo n.º 28
0
        void HandleAdd(Player p, string[] args)
        {
            if (args.Length != 2)
            {
                p.Message("You need to provide a reason for the report."); return;
            }
            string target = PlayerDB.MatchNames(p, args[0]);

            if (target == null)
            {
                return;
            }

            List <string> reports = new List <string>();

            if (File.Exists("extra/reported/" + target + ".txt"))
            {
                reports = Utils.ReadAllLinesList("extra/reported/" + target + ".txt");
            }

            ItemPerms checkPerms = CommandExtraPerms.Find(name, 1);

            if (reports.Count >= 5)
            {
                p.Message("{0} %Walready has 5 reports! Please wait until an {1} %Whas reviewed these reports first!",
                          p.FormatNick(target), checkPerms.Describe());
                return;
            }

            string reason = args[1];

            reason = ModActionCmd.ExpandReason(p, reason);
            if (reason == null)
            {
                return;
            }

            reports.Add(reason + " - Reported by " + p.name + " at " + DateTime.Now);
            File.WriteAllLines("extra/reported/" + target + ".txt", reports.ToArray());
            p.Message("&aReport sent! It should be viewed when a {0} &ais online",
                      checkPerms.Describe());

            string opsMsg = "λNICK %Smade a report, view it with %T/Report check " + target;

            Chat.MessageFrom(ChatScope.Perms, p, opsMsg, checkPerms, null, true);
        }
Exemplo n.º 29
0
        public static void LoadAllSettings()
        {
            // Unload custom plugins
            List <Plugin> plugins = Plugin.all;

            foreach (Plugin plugin in plugins)
            {
                if (Plugin.core.Contains(plugin))
                {
                    continue;
                }
                plugin.Unload(false);
            }

            zombie.LoadInfectMessages();
            Colors.LoadList();
            Alias.Load();
            BlockDefinition.LoadGlobal();
            ImagePalette.Load();

            SrvProperties.Load();
            Group.InitAll();
            Command.InitAll();
            CommandPerms.Load();
            Block.SetBlocks();
            BlockDefinition.UpdateGlobalBlockProps();
            Awards.Load();
            Economy.Load();
            WarpList.Global.Filename = "extra/warps.save";
            WarpList.Global.Load();
            CommandExtraPerms.Load();
            ProfanityFilter.Init();
            Team.LoadList();
            ChatTokens.LoadCustom();
            SrvProperties.FixupOldPerms();

            // Reload custom plugins
            foreach (Plugin plugin in plugins)
            {
                if (Plugin.core.Contains(plugin))
                {
                    continue;
                }
                plugin.Load(false);
            }
        }
Exemplo n.º 30
0
        public override void Use(Player p, string message, CommandData data)
        {
            string[] args = message.SplitSpaces(3);
            if (args.Length < 2)
            {
                Help(p); return;
            }

            string cmdName = args[0], cmdArgs = "";

            Command.Search(ref cmdName, ref cmdArgs);
            Command cmd = Command.Find(cmdName);

            if (cmd == null)
            {
                p.Message("Could not find command entered"); return;
            }
            if (!p.CanUse(cmd))
            {
                p.Message("Your rank cannot use this command."); return;
            }

            if (args.Length == 2)
            {
                CommandPerms perms = CommandPerms.Find(cmd.name);
                SetPerms(p, args, data, perms, "command");
            }
            else
            {
                int num = 0;
                if (!CommandParser.GetInt(p, args[2], "Extra permission number", ref num))
                {
                    return;
                }

                CommandExtraPerms perms = CommandExtraPerms.Find(cmd.name, num);
                if (perms == null)
                {
                    p.Message("This command has no extra permission by that number."); return;
                }
                SetPerms(p, args, data, perms, "extra permission");
            }
        }