public override void UpdateState(List <UnturnedPlayer> players)
        {
            foreach (var player in players)
            {
                var group = Region.GetGroup(player);
                if (!GetValueSafe(group))
                {
                    continue;
                }

                var id      = PlayerUtil.GetId(player);
                var veh     = player.Player.movement.getVehicle();
                var isInVeh = veh != null;

                if (!_lastVehicleStates.ContainsKey(id))
                {
                    _lastVehicleStates.Add(id, veh);
                }

                var wasDriving = _lastVehicleStates[id];

                if (!isInVeh || wasDriving ||
                    !GetValueSafe(Region.GetGroup(player)))
                {
                    continue;
                }

                veh.forceRemovePlayer(out byte seat, PlayerUtil.GetCSteamId(player), out Vector3 point, out byte angle);
                VehicleManager.instance.channel.send("tellExitVehicle", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, veh.instanceID, seat, point, angle, true);
            }
        }
Exemple #2
0
        public override void UpdateState(List <UnturnedPlayer> players)
        {
            for (int i = 0; i < players.Count; i++)
            {
                var player  = players[i];
                var id      = PlayerUtil.GetId(player);
                var veh     = player.Player.movement.getVehicle();
                var isInVeh = veh != null;

                if (!_lastVehicleStates.ContainsKey(id))
                {
                    _lastVehicleStates.Add(id, veh);
                }

                var wasDriving = _lastVehicleStates[id];

                if (!isInVeh || wasDriving ||
                    !GetValueSafe(Region.GetGroup(player)))
                {
                    continue;
                }
                sbyte index = -1;
                for (var i1 = 0; i1 < veh.passengers.Length; i1++)
                {
                    Passenger p = veh.passengers[i1];
                    index++;
                    if (p.player.playerID.steamID == PlayerUtil.GetCSteamId(player))
                    {
                        break;
                    }
                }

                veh.kickPlayer((byte)index);
            }
        }
        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);
        }
Exemple #4
0
 public bool IsOwner(IRocketPlayer player)
 {
     if (player is ConsolePlayer)
     {
         return(true);
     }
     return(player.HasPermission("regions.overrideowner") || IsOwner(PlayerUtil.GetId(player)));
 }
 private void OnPlayerDisconnect(IRocketPlayer player)
 {
     _lastPositions.Remove(PlayerUtil.GetId(player));
     if (!_playersInRegions.ContainsKey(PlayerUtil.GetId(player)))
     {
         return;
     }
     OnPlayerLeftRegion(player, _playersInRegions[PlayerUtil.GetId(player)]);
 }
Exemple #6
0
 public static void SetPosition2(IRocketPlayer player, SerializablePosition pos)
 {
     if (SecondsPositions.ContainsKey(PlayerUtil.GetId(player)))
     {
         SecondsPositions[PlayerUtil.GetId(player)] = pos;
         return;
     }
     SecondsPositions.Add(PlayerUtil.GetId(player), pos);
 }
Exemple #7
0
        public Group GetGroup(IRocketPlayer player)
        {
            if (IsOwner(player))
            {
                return(Group.OWNERS);
            }
            var id = PlayerUtil.GetId(player);

            return(GetAllMembers().Any(member => member == id) ? Group.MEMBERS : Group.NONMEMBERS);
        }
        private void OnPlayerEnteredRegion(IRocketPlayer player, Region region)
        {
            var id = PlayerUtil.GetId(player);

            _playersInRegions.Add(id, region);

            foreach (RegionFlag f in region.ParsedFlags)
            {
                f.OnRegionEnter((UnturnedPlayer)player);
            }
        }
        private void OnPlayerEnteredRegion(IRocketPlayer player, Region region)
        {
            var id = PlayerUtil.GetId(player);

            _playersInRegions.Add(id, region);

            for (var i = 0; i < region.ParsedFlags.Count; i++)
            {
                region.ParsedFlags[i].OnRegionEnter((UnturnedPlayer)player);
            }
        }
        internal void OnPlayerLeftRegion(IRocketPlayer player, Region region)
        {
            var id = PlayerUtil.GetId(player);

            _playersInRegions.Remove(id);

            for (var i = 0; i < region.ParsedFlags.Count; i++)
            {
                region.ParsedFlags[i].OnRegionLeave((UnturnedPlayer)player);
            }
        }
        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);
            }
        }
        private void OnPlayerEnteredRegion(IRocketPlayer player, Region region)
        {
            var id = PlayerUtil.GetId(player);

            if (!_playersInRegions.ContainsKey(id))
            {
                _playersInRegions.Add(id, region);
            }

            RegionEnter?.Invoke((UnturnedPlayer)player, region);

            foreach (RegionFlag f in region.ParsedFlags)
            {
                f.OnRegionEnter((UnturnedPlayer)player);
            }
        }
        internal void OnPlayerLeftRegion(IRocketPlayer player, Region region)
        {
            var id = PlayerUtil.GetId(player);

            _playersInRegions.Remove(id);

            foreach (RegionFlag f in region.ParsedFlags)
            {
                try
                {
                    f.OnRegionLeave((UnturnedPlayer)player);
                }
                catch (Exception e)
                {
#if DEBUG
                    Logger.LogException(e);
#endif
                }
            }
        }
Exemple #14
0
        public override Region OnCreate(IRocketPlayer player, string name, string[] args)
        {
            if (!HasPositionSet(player))
            {
                UnturnedChat.Say(player, "Please set pos1 (/spos1) and pos2 (/spos2) before using this command", Color.red);
                return(null);
            }

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

            return(region);
        }
Exemple #15
0
 public static SerializablePosition GetPosition2(IRocketPlayer caller) => SecondsPositions[PlayerUtil.GetId(caller)];
Exemple #16
0
 public static SerializablePosition GetPosition1(IRocketPlayer caller) => FirstPositions[PlayerUtil.GetId(caller)];
Exemple #17
0
 public static bool HasPositionSet(IRocketPlayer player) => FirstPositions.ContainsKey(PlayerUtil.GetId(player)) && SecondsPositions.ContainsKey(PlayerUtil.GetId(player));
        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;
            }
        }