private void Player_InteractingDoor(Exiled.Events.EventArgs.InteractingDoorEventArgs ev) { var door = ev.Door; var doorType = door.Type(); var player = ev.Player; // If door closed and access denied and they are an SCP and they aren't already trying to escape. if (door.IsConsideredOpen() || ev.IsAllowed || (Config.SCPOnly && (!Config.SCPOnly || player.Team != Team.SCP)) || player.Role == RoleType.Scp079 || player.Role == RoleType.Scp106 || ScpTryingToEscape.ContainsKey(doorType)) { return; } if (_fixedPoints.TryGetValue(doorType, out var point)) { var roomCheckPos = point.Position; var playerDistanceToRoom = Vector3.Distance(roomCheckPos, player.Position); var doorDistanceToRoom = Vector3.Distance(roomCheckPos, door.transform.position); if (playerDistanceToRoom < doorDistanceToRoom) { ScpTryingToEscape.Add(doorType, StuckInRoom.SetPlayerStuck(ev.Player, door, this)); } } }
public static void InitializePool() { for (int i = 0; i < Config.CacheSize; i++) { CachedClasses[i] = new StuckInRoom(); } }
public static StuckInRoom SetPlayerStuck(Player player, DoorVariant door, PlayerUnstuck plugin) { for (int i = 0; i < Config.CacheSize; i++) { var c = CachedClasses[i]; if (c.Coroutine.IsRunning) { continue; } c.Initialize(player, door, plugin); return(c); } var createNew = new StuckInRoom(); createNew.Initialize(player, door, plugin); return(createNew); }
public PlayerUnstuck() { StuckInRoom.InitializePool(); }