public override bool Start(IReadOnlyList <IPlayerSession> readyPlayers) { if (readyPlayers.Count < MinPlayers) { _chatManager.DispatchServerAnnouncement($"Not enough players readied up for the game! There were {readyPlayers.Count} players readied up out of {MinPlayers} needed."); return(false); } var list = new List <IPlayerSession>(readyPlayers); var numTraitors = Math.Max(readyPlayers.Count() % PlayersPerTraitor, MinTraitors); for (var i = 0; i < numTraitors; i++) { var traitor = _random.PickAndTake(list); var mind = traitor.Data.ContentData().Mind; mind.AddRole(new SuspicionTraitorRole(mind)); } foreach (var player in list) { var mind = player.Data.ContentData().Mind; mind.AddRole(new SuspicionInnocentRole(mind)); } _gameTicker.AddGameRule <RuleSuspicion>(); return(true); }
public override bool Start(IReadOnlyList <IPlayerSession> readyPlayers, bool force = false) { if (!force && readyPlayers.Count < MinPlayers) { _chatManager.DispatchServerAnnouncement($"Not enough players readied up for the game! There were {readyPlayers.Count} players readied up out of {MinPlayers} needed."); return(false); } var list = new List <IPlayerSession>(readyPlayers); var prefList = new List <IPlayerSession>(); foreach (var player in list) { if (!readyProfiles.ContainsKey(player.Name)) { continue; } var profile = readyProfiles[player.Name]; if (profile.AntagPreferences.Contains(_prototypeManager.Index <AntagPrototype>(TraitorID).Name)) { prefList.Add(player); } } var numTraitors = FloatMath.Clamp(readyPlayers.Count % PlayersPerTraitor, MinTraitors, readyPlayers.Count); for (var i = 0; i < numTraitors; i++) { IPlayerSession traitor; if (prefList.Count() == 0) { traitor = _random.PickAndTake(list); Logger.InfoS("preset", "Insufficient preferred traitors, picking at random."); } else { traitor = _random.PickAndTake(prefList); list.Remove(traitor); Logger.InfoS("preset", "Selected a preferred traitor."); } var mind = traitor.Data.ContentData().Mind; var antagPrototype = _prototypeManager.Index <AntagPrototype>(TraitorID); mind.AddRole(new SuspicionTraitorRole(mind, antagPrototype)); } foreach (var player in list) { var mind = player.Data.ContentData().Mind; var antagPrototype = _prototypeManager.Index <AntagPrototype>(InnocentID); mind.AddRole(new SuspicionInnocentRole(mind, antagPrototype)); } _gameTicker.AddGameRule <RuleSuspicion>(); return(true); }
public override bool Start(IReadOnlyList <IPlayerSession> readyPlayers, bool force = false) { MinPlayers = _cfg.GetCVar(CCVars.SuspicionMinPlayers); MinTraitors = _cfg.GetCVar(CCVars.SuspicionMinTraitors); PlayersPerTraitor = _cfg.GetCVar(CCVars.SuspicionPlayersPerTraitor); TraitorStartingBalance = _cfg.GetCVar(CCVars.SuspicionStartingBalance); if (!force && readyPlayers.Count < MinPlayers) { _chatManager.DispatchServerAnnouncement($"Not enough players readied up for the game! There were {readyPlayers.Count} players readied up out of {MinPlayers} needed."); return(false); } if (readyPlayers.Count == 0) { _chatManager.DispatchServerAnnouncement("No players readied up! Can't start Suspicion."); return(false); } var list = new List <IPlayerSession>(readyPlayers); var prefList = new List <IPlayerSession>(); foreach (var player in list) { if (!ReadyProfiles.ContainsKey(player.UserId)) { continue; } var profile = ReadyProfiles[player.UserId]; if (profile.AntagPreferences.Contains(_prototypeManager.Index <AntagPrototype>(TraitorID).Name)) { prefList.Add(player); } player.AttachedEntity?.EnsureComponent <SuspicionRoleComponent>(); } var numTraitors = MathHelper.Clamp(readyPlayers.Count / PlayersPerTraitor, MinTraitors, readyPlayers.Count); var traitors = new List <SuspicionTraitorRole>(); for (var i = 0; i < numTraitors; i++) { IPlayerSession traitor; if (prefList.Count == 0) { if (list.Count == 0) { Logger.InfoS("preset", "Insufficient ready players to fill up with traitors, stopping the selection."); break; } traitor = _random.PickAndTake(list); Logger.InfoS("preset", "Insufficient preferred traitors, picking at random."); } else { traitor = _random.PickAndTake(prefList); list.Remove(traitor); Logger.InfoS("preset", "Selected a preferred traitor."); } var mind = traitor.Data.ContentData().Mind; var antagPrototype = _prototypeManager.Index <AntagPrototype>(TraitorID); var traitorRole = new SuspicionTraitorRole(mind, antagPrototype); mind.AddRole(traitorRole); traitors.Add(traitorRole); // creadth: we need to create uplink for the antag. // PDA should be in place already, so we just need to // initiate uplink account. var uplinkAccount = new UplinkAccount(mind.OwnedEntity.Uid, TraitorStartingBalance); var inventory = mind.OwnedEntity.GetComponent <InventoryComponent>(); if (!inventory.TryGetSlotItem(EquipmentSlotDefines.Slots.IDCARD, out ItemComponent pdaItem)) { continue; } var pda = pdaItem.Owner; var pdaComponent = pda.GetComponent <PDAComponent>(); if (pdaComponent.IdSlotEmpty) { continue; } pdaComponent.InitUplinkAccount(uplinkAccount); } foreach (var player in list) { var mind = player.Data.ContentData().Mind; var antagPrototype = _prototypeManager.Index <AntagPrototype>(InnocentID); mind.AddRole(new SuspicionInnocentRole(mind, antagPrototype)); } foreach (var traitor in traitors) { traitor.GreetSuspicion(traitors, _chatManager); } _gameTicker.AddGameRule <RuleSuspicion>(); return(true); }
#pragma warning restore 649 public override void Start() { _gameTicker.AddGameRule <RuleDeathMatch>(); }
public override bool Start(IReadOnlyList <IPlayerSession> readyPlayers, bool force = false) { _gameTicker.AddGameRule <RuleDeathMatch>(); return(true); }
public override bool Start(IReadOnlyList <IPlayerSession> readyPlayers, bool force = false) { MinPlayers = _cfg.GetCVar <int>("game.suspicion_min_players"); MinTraitors = _cfg.GetCVar <int>("game.suspicion_min_traitors"); PlayersPerTraitor = _cfg.GetCVar <int>("game.suspicion_players_per_traitor"); if (!force && readyPlayers.Count < MinPlayers) { _chatManager.DispatchServerAnnouncement($"Not enough players readied up for the game! There were {readyPlayers.Count} players readied up out of {MinPlayers} needed."); return(false); } if (readyPlayers.Count == 0) { _chatManager.DispatchServerAnnouncement($"No players readied up! Can't start Suspicion."); return(false); } var list = new List <IPlayerSession>(readyPlayers); var prefList = new List <IPlayerSession>(); foreach (var player in list) { if (!readyProfiles.ContainsKey(player.Name)) { continue; } var profile = readyProfiles[player.Name]; if (profile.AntagPreferences.Contains(_prototypeManager.Index <AntagPrototype>(TraitorID).Name)) { prefList.Add(player); } player.AttachedEntity?.EnsureComponent <SuspicionRoleComponent>(); } var numTraitors = MathHelper.Clamp(readyPlayers.Count / PlayersPerTraitor, MinTraitors, readyPlayers.Count); var traitors = new List <SuspicionTraitorRole>(); for (var i = 0; i < numTraitors; i++) { IPlayerSession traitor; if (prefList.Count == 0) { if (list.Count == 0) { Logger.InfoS("preset", "Insufficient ready players to fill up with traitors, stopping the selection."); break; } traitor = _random.PickAndTake(list); Logger.InfoS("preset", "Insufficient preferred traitors, picking at random."); } else { traitor = _random.PickAndTake(prefList); list.Remove(traitor); Logger.InfoS("preset", "Selected a preferred traitor."); } var mind = traitor.Data.ContentData().Mind; var antagPrototype = _prototypeManager.Index <AntagPrototype>(TraitorID); var traitorRole = new SuspicionTraitorRole(mind, antagPrototype); mind.AddRole(traitorRole); traitors.Add(traitorRole); } foreach (var player in list) { var mind = player.Data.ContentData().Mind; var antagPrototype = _prototypeManager.Index <AntagPrototype>(InnocentID); mind.AddRole(new SuspicionInnocentRole(mind, antagPrototype)); } foreach (var traitor in traitors) { traitor.GreetSuspicion(traitors, _chatManager); } _gameTicker.AddGameRule <RuleSuspicion>(); return(true); }