Suspicion improvements:
1. pull settings from cvars. 2. Fix greet. Fixes #1823
This commit is contained in:
@@ -13,6 +13,7 @@ using System.Linq;
|
|||||||
using Content.Server.GameObjects.Components.Suspicion;
|
using Content.Server.GameObjects.Components.Suspicion;
|
||||||
using Content.Shared.Roles;
|
using Content.Shared.Roles;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.GameObjects;
|
||||||
|
using Robust.Shared.Interfaces.Configuration;
|
||||||
using Robust.Shared.Log;
|
using Robust.Shared.Log;
|
||||||
using Robust.Shared.Maths;
|
using Robust.Shared.Maths;
|
||||||
|
|
||||||
@@ -24,20 +25,32 @@ namespace Content.Server.GameTicking.GamePresets
|
|||||||
[Dependency] private readonly IChatManager _chatManager;
|
[Dependency] private readonly IChatManager _chatManager;
|
||||||
[Dependency] private readonly IGameTicker _gameTicker;
|
[Dependency] private readonly IGameTicker _gameTicker;
|
||||||
[Dependency] private readonly IRobustRandom _random;
|
[Dependency] private readonly IRobustRandom _random;
|
||||||
|
[Dependency] private readonly IConfigurationManager _cfg;
|
||||||
[Dependency] private IPrototypeManager _prototypeManager;
|
[Dependency] private IPrototypeManager _prototypeManager;
|
||||||
#pragma warning restore 649
|
#pragma warning restore 649
|
||||||
|
|
||||||
public int MinPlayers { get; set; } = 5;
|
public int MinPlayers { get; set; }
|
||||||
public int MinTraitors { get; set; } = 2;
|
public int MinTraitors { get; set; }
|
||||||
public int PlayersPerTraitor { get; set; } = 5;
|
public int PlayersPerTraitor { get; set; }
|
||||||
|
|
||||||
public override bool DisallowLateJoin => true;
|
public override bool DisallowLateJoin => true;
|
||||||
|
|
||||||
private static string TraitorID = "SuspicionTraitor";
|
private static string TraitorID = "SuspicionTraitor";
|
||||||
private static string InnocentID = "SuspicionInnocent";
|
private static string InnocentID = "SuspicionInnocent";
|
||||||
|
|
||||||
|
public static void RegisterCVars(IConfigurationManager cfg)
|
||||||
|
{
|
||||||
|
cfg.RegisterCVar("game.suspicion_min_players", 5);
|
||||||
|
cfg.RegisterCVar("game.suspicion_min_traitors", 2);
|
||||||
|
cfg.RegisterCVar("game.suspicion_players_per_traitor", 5);
|
||||||
|
}
|
||||||
|
|
||||||
public override bool Start(IReadOnlyList<IPlayerSession> readyPlayers, bool force = false)
|
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)
|
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.");
|
_chatManager.DispatchServerAnnouncement($"Not enough players readied up for the game! There were {readyPlayers.Count} players readied up out of {MinPlayers} needed.");
|
||||||
@@ -71,6 +84,8 @@ namespace Content.Server.GameTicking.GamePresets
|
|||||||
var numTraitors = MathHelper.Clamp(readyPlayers.Count / PlayersPerTraitor,
|
var numTraitors = MathHelper.Clamp(readyPlayers.Count / PlayersPerTraitor,
|
||||||
MinTraitors, readyPlayers.Count);
|
MinTraitors, readyPlayers.Count);
|
||||||
|
|
||||||
|
var traitors = new List<SuspicionTraitorRole>();
|
||||||
|
|
||||||
for (var i = 0; i < numTraitors; i++)
|
for (var i = 0; i < numTraitors; i++)
|
||||||
{
|
{
|
||||||
IPlayerSession traitor;
|
IPlayerSession traitor;
|
||||||
@@ -87,7 +102,9 @@ namespace Content.Server.GameTicking.GamePresets
|
|||||||
}
|
}
|
||||||
var mind = traitor.Data.ContentData().Mind;
|
var mind = traitor.Data.ContentData().Mind;
|
||||||
var antagPrototype = _prototypeManager.Index<AntagPrototype>(TraitorID);
|
var antagPrototype = _prototypeManager.Index<AntagPrototype>(TraitorID);
|
||||||
mind.AddRole(new SuspicionTraitorRole(mind, antagPrototype));
|
var traitorRole = new SuspicionTraitorRole(mind, antagPrototype);
|
||||||
|
mind.AddRole(traitorRole);
|
||||||
|
traitors.Add(traitorRole);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var player in list)
|
foreach (var player in list)
|
||||||
@@ -97,6 +114,11 @@ namespace Content.Server.GameTicking.GamePresets
|
|||||||
mind.AddRole(new SuspicionInnocentRole(mind, antagPrototype));
|
mind.AddRole(new SuspicionInnocentRole(mind, antagPrototype));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var traitor in traitors)
|
||||||
|
{
|
||||||
|
traitor.GreetSuspicion(traitors, _chatManager);
|
||||||
|
}
|
||||||
|
|
||||||
_gameTicker.AddGameRule<RuleSuspicion>();
|
_gameTicker.AddGameRule<RuleSuspicion>();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,6 +134,8 @@ namespace Content.Server.GameTicking
|
|||||||
_configurationManager.RegisterCVar("game.defaultpreset", "Suspicion", CVar.ARCHIVE);
|
_configurationManager.RegisterCVar("game.defaultpreset", "Suspicion", CVar.ARCHIVE);
|
||||||
_configurationManager.RegisterCVar("game.fallbackpreset", "Sandbox", CVar.ARCHIVE);
|
_configurationManager.RegisterCVar("game.fallbackpreset", "Sandbox", CVar.ARCHIVE);
|
||||||
|
|
||||||
|
PresetSuspicion.RegisterCVars(_configurationManager);
|
||||||
|
|
||||||
_playerManager.PlayerStatusChanged += _handlePlayerStatusChanged;
|
_playerManager.PlayerStatusChanged += _handlePlayerStatusChanged;
|
||||||
|
|
||||||
_netManager.RegisterNetMessage<MsgTickerJoinLobby>(nameof(MsgTickerJoinLobby));
|
_netManager.RegisterNetMessage<MsgTickerJoinLobby>(nameof(MsgTickerJoinLobby));
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
using Content.Server.GameObjects.Components.Suspicion;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using Content.Server.Interfaces.Chat;
|
using Content.Server.Interfaces.Chat;
|
||||||
using Content.Shared.Roles;
|
using Content.Shared.Roles;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.Localization;
|
||||||
using Robust.Shared.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
|
|
||||||
namespace Content.Server.Mobs.Roles
|
namespace Content.Server.Mobs.Roles
|
||||||
{
|
{
|
||||||
@@ -22,26 +21,25 @@ namespace Content.Server.Mobs.Roles
|
|||||||
public string Objective => Prototype.Objective;
|
public string Objective => Prototype.Objective;
|
||||||
public override bool Antagonist { get; }
|
public override bool Antagonist { get; }
|
||||||
|
|
||||||
public override void Greet()
|
public void GreetSuspicion(List<SuspicionTraitorRole> traitors, IChatManager chatMgr)
|
||||||
{
|
{
|
||||||
base.Greet();
|
chatMgr.DispatchServerMessage(Mind.Session, Loc.GetString("You're a {0}!", Name));
|
||||||
|
chatMgr.DispatchServerMessage(Mind.Session, Loc.GetString("Objective: {0}", Objective));
|
||||||
|
|
||||||
var chat = IoCManager.Resolve<IChatManager>();
|
if (traitors.Count == 1)
|
||||||
chat.DispatchServerMessage(Mind.Session, $"You're a {Name}!");
|
|
||||||
chat.DispatchServerMessage(Mind.Session, $"Objective: {Objective}");
|
|
||||||
|
|
||||||
var traitors = "";
|
|
||||||
|
|
||||||
foreach (var sus in IoCManager.Resolve<IComponentManager>().EntityQuery<SuspicionRoleComponent>())
|
|
||||||
{
|
{
|
||||||
if (!sus.IsTraitor()) continue;
|
// Only traitor.
|
||||||
if (traitors.Length > 0)
|
chatMgr.DispatchServerMessage(Mind.Session, Loc.GetString("You're on your own. Good luck!"));
|
||||||
traitors += $", {sus.Owner.Name}";
|
return;
|
||||||
else
|
|
||||||
traitors += sus.Owner.Name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
chat.DispatchServerMessage(Mind.Session, $"The traitors are: {traitors}");
|
var text = string.Join(", ", traitors.Where(p => p != this).Select(p => p.Mind.CharacterName));
|
||||||
|
|
||||||
|
var pluralText = Loc.GetPluralString("Your partner in crime is: {0}",
|
||||||
|
"Your partners in crime are: {0}",
|
||||||
|
traitors.Count-1, text);
|
||||||
|
|
||||||
|
chatMgr.DispatchServerMessage(Mind.Session, pluralText);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user