예제 #1
0
        static void AddBuildPlayer(Player p, string name)
        {
            string[] zoneArgs = name.Split(' ');
            name = zoneArgs[0];
            string reason = zoneArgs.Length > 1 ? zoneArgs[1] : "";

            name = CmdZone.FindZoneOwner(p, "os zone add", name, ref reason);
            if (name == null)
            {
                return;
            }

            CmdZone.ZoneAll(p.level, name);
            Player.Message(p, "Added zone for &b" + name);

            LevelAccessController access = p.level.BuildAccess;

            if (access.Blacklisted.CaselessRemove(name))
            {
                access.OnListChanged(p, name, true, true);
            }
            if (!access.Whitelisted.CaselessContains(name))
            {
                access.Whitelisted.Add(name);
                access.OnListChanged(p, name, true, false);
            }
        }
예제 #2
0
 static void DeleteBuildPlayer(Player p, string name)
 {
     if (name.CaselessEq("all"))
     {
         CmdZone.DeleteAll(p);
     }
     else if (Formatter.ValidName(p, name, "player"))
     {
         CmdZone.DeleteWhere(p, zone => zone.Owner.CaselessEq(name));
         LevelAccessController access = p.level.BuildAccess;
         if (access.Whitelisted.CaselessRemove(name))
         {
             access.OnListChanged(p, name, false, true);
         }
     }
 }
예제 #3
0
        static void AddMap(Player p, string value)
        {
            if (p.group.OverseerMaps == 0)
            {
                Player.Message(p, "Your rank is not allowed to create any /os maps."); return;
            }
            string level = NextLevel(p);

            if (level == null)
            {
                return;
            }

            if (value == "")
            {
                value = "128 64 128 flat";
            }
            else if (value.IndexOf(' ') == -1)
            {
                value = "128 64 128 " + value;
            }

            string[] args = value.TrimEnd().Split(' ');
            if (args.Length == 3)
            {
                value += " flat";
            }

            CmdNewLvl newLvl = (CmdNewLvl)Command.all.Find("newlvl"); // TODO: this is a nasty hack, find a better way

            if (!newLvl.GenerateMap(p, level + " " + value))
            {
                return;
            }

            // Set default perbuild permissions
            CmdLoad.LoadLevel(null, level);
            Level lvl = LevelInfo.FindExact(level);

            if (lvl == null)
            {
                return;
            }

            lvl.RealmOwner = p.name;
            Command.all.Find("perbuild").Use(null, lvl.name + " +" + p.name);
            CmdZone.ZoneAll(lvl, p.name);

            LevelPermission osPerm = Server.osPerbuildDefault;

            if (osPerm == LevelPermission.Nobody)
            {
                osPerm = GrpCommands.MinPerm(Command.all.Find("overseer"));
            }
            Group grp = Group.findPerm(osPerm);

            if (grp == null)
            {
                return;
            }

            Command.all.Find("perbuild").Use(null, lvl.name + " " + grp.name);
            Player.Message(p, "Use %T/os zone add [name] %Sto allow " +
                           "players ranked below " + grp.ColoredName + " %Sto build in the map.");
        }