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); } }
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); }
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)]); }
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); }
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 } } }
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); }
public static SerializablePosition GetPosition2(IRocketPlayer caller) => SecondsPositions[PlayerUtil.GetId(caller)];
public static SerializablePosition GetPosition1(IRocketPlayer caller) => FirstPositions[PlayerUtil.GetId(caller)];
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; } }