public void Execute(IRocketPlayer caller, string[] command)
        {
            var player = PlayerUtil.GetUnturnedPlayer(caller);
            var pos    = player.Position;

            UnturnedChat.Say(caller, $"Position: X: {pos.x}, Y: {pos.y}, Z: {pos.z}; + Rotation: {player.Player.transform.rotation.eulerAngles.y}", Color.green);
        }
예제 #2
0
        //This is to prevent other plugins overwriting god mode by accident
        private void OnPlayerDamaged(UnturnedPlayer player, ref EDeathCause cause, ref ELimb limb, ref UnturnedPlayer killer, ref Vector3 direction, ref float damage, ref float times, ref bool canDamage)
        {
            if (player.GodMode)
            {
                return;
            }

            var untPlayer = PlayerUtil.GetUnturnedPlayer(player);

            var currentRegion = GetRegionAt(untPlayer.Position);

            if (currentRegion == null)
            {
                return;                        //No region? Not our problem!
            }
            //Flag is stop the process of this function because the user opted to disabled the auto-protection feature
            if (currentRegion.Flags.Exists(fg => fg.Name.Equals("DisableGodModeProtection", StringComparison.OrdinalIgnoreCase)))
            {
                return;
            }
            try //This is just here to prevent the console logging at a lot of errors because exceptions will be generated by using this way
            {
                if (currentRegion != null)
                {
                    OnPlayerEnteredRegion(player, currentRegion);
                }
            } catch (Exception) { }
        }
예제 #3
0
        public override Region OnCreate(IRocketPlayer player, string name, string[] args)
        {
            var pos = PlayerUtil.GetUnturnedPlayer(player).Position;
            var r   = args.GetFloatParameter(0);

            if (r == null)
            {
                UnturnedChat.Say(player, "Usage: /screate circle <radius>", Color.red);
                return(null);
            }

            Radius = r.Value;

            Center = new SerializablePosition(pos);

            var region = new Region
            {
                Name   = name,
                Owners = new List <ulong> {
                    PlayerUtil.GetId(player)
                },
                Type = this
            };

            return(region);
        }
예제 #4
0
        private void OnPlayerConnect(IRocketPlayer player)
        {
            var untPlayer = PlayerUtil.GetUnturnedPlayer(player);

            _lastPositions.Add(PlayerUtil.GetId(player), untPlayer.Position);
            var region = GetRegionAt(untPlayer.Position);

            if (region != null)
            {
                OnPlayerEnteredRegion(player, region);
            }
        }
        public void Execute(IRocketPlayer caller, string[] command)
        {
            if (command.Length == 0)
            {
                this.SendUsage(caller);
                return;
            }

            var name = command.GetStringParameter(0);

            var region = RegionsPlugin.Instance.GetRegion(name, true);

            if (region == null)
            {
                UnturnedChat.Say(caller, "Region \"" + name + "\" not found", Color.red);
                return;
            }

            if (!region.IsOwner(caller) && !PermissionUtil.HasPermission(caller, "redefine.override"))
            {
                UnturnedChat.Say(caller, "You're not the owner of this region!", Color.red);
                return;
            }

            var args = new ArrayList(command);

            args.RemoveAt(0);

            if (region.Type.OnRedefine(PlayerUtil.GetUnturnedPlayer(caller), (string[])args.ToArray(typeof(string))))
            {
                RegionsPlugin.Instance.Regions.Remove(region);
                RegionsPlugin.Instance.Configuration.Save();
                RegionsPlugin.Instance.OnRegionRemoved(region);
                RegionsPlugin.Instance.Regions.Add(region);
                RegionsPlugin.Instance.Configuration.Save();
                RegionsPlugin.Instance.OnRegionCreated(region);

                UnturnedChat.Say(caller, "Successfully redefined region: " + name, Color.green);
                return;
            }

            UnturnedChat.Say(caller, "Redefine of region: " + name + " failed.", Color.red);
        }
예제 #6
0
        public void Execute(IRocketPlayer caller, string[] command)
        {
            if (command.Length < 1 || (command[0] != "1" && command[0] != "2"))
            {
                this.SendUsage(caller);
                return;
            }

            var rawpos = PlayerUtil.GetUnturnedPlayer(caller).Position;
            var pos    = new SerializablePosition(rawpos);

            if (command[0] == "1")
            {
                UnturnedChat.Say(caller, "First position set to: X:" + pos.X + ", Z: " + pos.Y);
                RectangleType.SetPosition1(caller, pos);
            }
            else
            {
                UnturnedChat.Say(caller, "Second position set to: X:" + pos.X + ", Z: " + pos.Y);
                RectangleType.SetPosition2(caller, pos);
            }
        }
예제 #7
0
        public override bool OnRedefine(IRocketPlayer player, string[] args)
        {
            var pos = PlayerUtil.GetUnturnedPlayer(player).Position;

            if (args.Length < 1)
            {
                UnturnedChat.Say(player, "Usage: /sredefine <name> circle <radius>", Color.red);
                return(false);
            }

            var r = args.GetInt32Parameter(0);

            if (r == null)
            {
                UnturnedChat.Say(player, "Usage: /sredefine <name> circle <radius>", Color.red);
                return(false);
            }

            Radius = r.Value;

            Center = new SerializablePosition(pos);
            return(true);
        }
예제 #8
0
        private void OnPlayerUpdatePosition(IRocketPlayer player, Vector3 position)
        {
            var id        = PlayerUtil.GetId(player);
            var untPlayer = PlayerUtil.GetUnturnedPlayer(player);

            if (untPlayer == null)
            {
#if DEBUG
                Logger.LogError("untplayer == null OnPlayerUpdatePosition");
#endif
                return;
            }


            var currentRegion = GetRegionAt(position);
            var oldRegion     = _playersInRegions.ContainsKey(id) ? _playersInRegions[id] : null;

            Vector3?lastPosition = null;
            if (_lastPositions.ContainsKey(id))
            {
                lastPosition = _lastPositions[id];
            }

            if (oldRegion != null && oldRegion != currentRegion)
            {
                //Left a region
                var flag  = oldRegion.GetFlag <NoLeaveFlag>();
                var value = flag?.GetValueSafe(currentRegion.GetGroup(player));
                if (value.HasValue && value.Value && lastPosition != null)
                {
                    //Todo: send message to player (can't leave region)
                    untPlayer.Teleport(lastPosition.Value, untPlayer.Rotation);
                    return;
                }
                OnPlayerLeftRegion(player, oldRegion);
            }
            else if (oldRegion == null && currentRegion != null)
            {
                //Entered a region
                var flag = currentRegion.GetFlag <NoEnterFlag>();
                if (flag != null && flag.GetValueSafe(currentRegion.GetGroup(player)) &&
                    lastPosition != null)
                {
                    //Todo: send message to player (can't enter region)
                    untPlayer.Teleport(lastPosition.Value, untPlayer.Rotation);
                    return;
                }
                OnPlayerEnteredRegion(player, currentRegion);
            }

            if (currentRegion != null)
            {
                for (var i = 0; i < currentRegion.ParsedFlags.Count; i++)
                {
                    currentRegion.ParsedFlags[i]?.OnPlayerUpdatePosition(untPlayer, position);
                }
            }

            if (lastPosition == null)
            {
                _lastPositions.Add(id, untPlayer.Position);
            }
            else
            {
                _lastPositions[id] = untPlayer.Position;
            }
        }