Esempio n. 1
0
        // update/set the jail position in the world
        public static void setJailPosition(Players.Player causedBy, uint range = DEFAULT_RANGE)
        {
            // if an old jail position existed remove its protection area
            if (validJail)
            {
                Pipliz.Vector3Int    oldPos  = new Pipliz.Vector3Int(jailPosition);
                CustomProtectionArea oldJail = null;
                foreach (CustomProtectionArea area in AntiGrief.CustomAreas)
                {
                    if (area.Equals(oldPos, range))
                    {
                        oldJail = area;
                    }
                }
                if (oldJail != null)
                {
                    AntiGrief.RemoveCustomArea(oldJail);
                    Chat.Send(causedBy, String.Format("Removed old jail protection area at {0} {1}", (int)jailPosition.x, (int)jailPosition.z));
                }
            }

            jailPosition.x = causedBy.Position.x;
            jailPosition.y = causedBy.Position.y + 1; // one block higher to prevent clipping
            jailPosition.z = causedBy.Position.z;
            jailRange      = range;
            validJail      = true;
            Save();

            Pipliz.Vector3Int playerPos = new Pipliz.Vector3Int(causedBy.Position);
            AntiGrief.AddCustomArea(new CustomProtectionArea(playerPos, (int)range, (int)range));
            Chat.Send(causedBy, "Created new custom protection area");

            return;
        }
        public bool TryDoCommand(Players.Player causedBy, string chattext, List <string> splits)
        {
            if (!splits[0].Equals("/antigrief"))
            {
                return(false);
            }
            var matched = Regex.Match(chattext, @"/antigrief (?<accesslevel>[^ ]+) ((?<playername>['].+[']|[^ ]+)|((?<rangex>\d+) (?<rangez>\d+))|((?<rangexn>\d+) (?<rangexp>\d+) (?<rangezn>\d+) (?<rangezp>\d+)))$");

            if (!matched.Success)
            {
                Chat.Send(causedBy, "Command didn't match, use /antigrief [spawn|nospawn|banner|deny] [playername] or /antigrief area [rangex rangez|rangexn rangexp rangezn rangezp]");
                return(true);
            }
            var accesslevel      = matched.Groups ["accesslevel"].Value;
            var targetPlayerName = matched.Groups ["playername"].Value;

            if (accesslevel.Equals("area"))
            {
                if (causedBy == null || causedBy.ID == NetworkID.Server)
                {
                    Log.WriteError("You can't define custom protection areas as server (missing center)");
                    return(true);
                }
                else if (!PermissionsManager.CheckAndWarnPermission(causedBy, AntiGrief.PERMISSION_SUPER))
                {
                    return(true);
                }
                var rangex = matched.Groups ["rangex"].Value;
                var rangez = matched.Groups ["rangez"].Value;
                int rx, rz;
                var rangexn = matched.Groups ["rangexn"].Value;
                var rangexp = matched.Groups ["rangexp"].Value;
                var rangezn = matched.Groups ["rangezn"].Value;
                var rangezp = matched.Groups ["rangezp"].Value;
                int rxn, rxp, rzn, rzp;
                if (rangex.Length > 0 && int.TryParse(rangex, out rx) && rangez.Length > 0 && int.TryParse(rangez, out rz))
                {
                    AntiGrief.AddCustomArea(new CustomProtectionArea(causedBy.VoxelPosition, rx, rz));
                    Chat.Send(causedBy, $"Added anti grief area at {causedBy.VoxelPosition} with x-range {rx} and z-range {rz}");
                }
                else if (rangexn.Length > 0 && int.TryParse(rangexn, out rxn) && rangexp.Length > 0 && int.TryParse(rangexp, out rxp) && rangezn.Length > 0 && int.TryParse(rangezn, out rzn) && rangezp.Length > 0 && int.TryParse(rangezp, out rzp))
                {
                    AntiGrief.AddCustomArea(new CustomProtectionArea(causedBy.VoxelPosition, rxn, rxp, rzn, rzp));
                    Chat.Send(causedBy, $"Added anti grief area at {causedBy.VoxelPosition} from x- {rxn} to x+ {rxp} and from z- {rzn} to z+ {rzp}");
                }
                else
                {
                    Chat.Send(causedBy, $"Could not parse protection area ranges {rangex} {rangez} {rangexn} {rangexp} {rangezn} {rangezp}");
                }
            }
            else
            {
                Players.Player targetPlayer;
                string         error;
                if (!PlayerHelper.TryGetPlayer(targetPlayerName, out targetPlayer, out error, true))
                {
                    Chat.Send(causedBy, $"Could not find target player '{targetPlayerName}'; {error}");
                    return(true);
                }
                if (accesslevel.Equals("spawn"))
                {
                    if (PermissionsManager.CheckAndWarnPermission(causedBy, AntiGrief.PERMISSION_SUPER))
                    {
                        PermissionsManager.AddPermissionToUser(causedBy, targetPlayer, AntiGrief.PERMISSION_SPAWN_CHANGE);
                        Chat.Send(causedBy, $"You granted [{targetPlayer.Name}] permission to change the spawn area");
                        Chat.Send(targetPlayer, "You got permission to change the spawn area");
                    }
                }
                else if (accesslevel.Equals("nospawn"))
                {
                    if (PermissionsManager.HasPermission(causedBy, AntiGrief.PERMISSION_SUPER))
                    {
                        PermissionsManager.RemovePermissionOfUser(causedBy, targetPlayer, AntiGrief.PERMISSION_SPAWN_CHANGE);
                        Chat.Send(causedBy, $"You revoked permission for [{targetPlayer.Name}] to change the spawn area");
                        Chat.Send(targetPlayer, "You lost permission to change the spawn area");
                    }
                }
                else if (accesslevel.Equals("banner"))
                {
                    if (causedBy.Equals(targetPlayer))
                    {
                        Chat.Send(causedBy, "You already have this permission");
                        return(true);
                    }
                    PermissionsManager.AddPermissionToUser(causedBy, targetPlayer, AntiGrief.PERMISSION_BANNER_PREFIX + causedBy.ID.steamID);
                    Chat.Send(causedBy, $"You granted [{targetPlayer.Name}] permission to change your banner area");
                    Chat.Send(targetPlayer, $"You got permission to change banner area of [{causedBy.Name}]");
                }
                else if (accesslevel.Equals("deny"))
                {
                    if (causedBy.Equals(targetPlayer))
                    {
                        Chat.Send(causedBy, "You can't revoke the permission for yourself");
                        return(true);
                    }
                    PermissionsManager.RemovePermissionOfUser(causedBy, targetPlayer, AntiGrief.PERMISSION_BANNER_PREFIX + causedBy.ID.steamID);
                    Chat.Send(causedBy, $"You revoked permission for [{targetPlayer.Name}] to change your banner area");
                    Chat.Send(targetPlayer, $"You lost permission to change banner area of [{causedBy.Name}]");
                }
                else
                {
                    Chat.Send(causedBy, "Unknown access level, use /antigrief [spawn|nospawn|banner|deny] steamid");
                }
            }
            return(true);
        }