void INotifyCreated.Created(Actor self) { separateTeamSpawns = self.World.LobbyInfo.GlobalSettings .OptionOrDefault("separateteamspawns", info.SeparateTeamSpawnsCheckboxEnabled); var spawns = new List <CPos>(); foreach (var n in self.World.Map.ActorDefinitions) { if (n.Value.Value == "mpspawn") { spawns.Add(new ActorReference(n.Key, n.Value.ToDictionary()).GetValue <LocationInit, CPos>()); } } spawnLocations = spawns.ToArray(); // Initialize the list of unoccupied spawn points for AssignSpawnLocations to pick from availableSpawnPoints = LobbyUtils.AvailableSpawnPoints(spawnLocations.Length, self.World.LobbyInfo); foreach (var kv in self.World.LobbyInfo.Slots) { var client = self.World.LobbyInfo.ClientInSlot(kv.Key); if (client == null || client.SpawnPoint == 0) { continue; } availableSpawnPoints.Remove(client.SpawnPoint); occupiedSpawnPoints.Add(client.SpawnPoint, client); } }
object IAssignSpawnPointsInfo.InitializeState(MapPreview map, Session lobbyInfo) { var state = new AssignSpawnLocationsState(); // Initialize the list of unoccupied spawn points for AssignSpawnLocations to pick from state.SpawnLocations = map.SpawnPoints; state.AvailableSpawnPoints = LobbyUtils.AvailableSpawnPoints(map.SpawnPoints.Length, lobbyInfo); foreach (var kv in lobbyInfo.Slots) { var client = lobbyInfo.ClientInSlot(kv.Key); if (client == null || client.SpawnPoint == 0) { continue; } state.AvailableSpawnPoints.Remove(client.SpawnPoint); state.OccupiedSpawnPoints.Add(client.SpawnPoint, client); } return(state); }