mirror of
https://github.com/MSWS/TTT.git
synced 2025-12-08 07:16:33 -08:00
Compare commits
4 Commits
0.16.1-dev
...
0.17.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
83e90deb44 | ||
|
|
658eecef02 | ||
|
|
c90af8dfcf | ||
|
|
6cd1788992 |
@@ -64,6 +64,7 @@ public static class CS2ServiceCollection {
|
||||
collection.AddModBehavior<MapZoneRemover>();
|
||||
collection.AddModBehavior<BuyMenuHandler>();
|
||||
collection.AddModBehavior<TeamChangeHandler>();
|
||||
collection.AddModBehavior<TraitorChatHandler>();
|
||||
|
||||
// Damage Cancelers
|
||||
collection.AddModBehavior<OutOfRoundCanceler>();
|
||||
|
||||
@@ -39,4 +39,18 @@ public class RoundStart_GameStartHandler(IServiceProvider provider)
|
||||
game?.Start(config.RoundCfg.CountDownDuration);
|
||||
return HookResult.Continue;
|
||||
}
|
||||
|
||||
[UsedImplicitly]
|
||||
[GameEventHandler]
|
||||
public HookResult OnWarmupEnd(EventWarmupEnd ev, GameEventInfo _1) {
|
||||
if (games.ActiveGame is { State: State.IN_PROGRESS or State.COUNTDOWN })
|
||||
return HookResult.Continue;
|
||||
|
||||
var count = finder.GetOnline().Count;
|
||||
if (count < config.RoundCfg.MinimumPlayers) return HookResult.Continue;
|
||||
|
||||
var game = games.CreateGame();
|
||||
game?.Start(config.RoundCfg.CountDownDuration);
|
||||
return HookResult.Continue;
|
||||
}
|
||||
}
|
||||
61
TTT/CS2/GameHandlers/TraitorChatHandler.cs
Normal file
61
TTT/CS2/GameHandlers/TraitorChatHandler.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Core.Attributes.Registration;
|
||||
using CounterStrikeSharp.API.Modules.Commands;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using TTT.API;
|
||||
using TTT.API.Game;
|
||||
using TTT.API.Messages;
|
||||
using TTT.API.Player;
|
||||
using TTT.API.Role;
|
||||
using TTT.CS2.lang;
|
||||
using TTT.Game.Listeners;
|
||||
using TTT.Game.Roles;
|
||||
using TTT.Locale;
|
||||
|
||||
namespace TTT.CS2.GameHandlers;
|
||||
|
||||
public class TraitorChatHandler(IServiceProvider provider) : IPluginModule {
|
||||
private readonly IGameManager game =
|
||||
provider.GetRequiredService<IGameManager>();
|
||||
|
||||
private readonly IRoleAssigner roles =
|
||||
provider.GetRequiredService<IRoleAssigner>();
|
||||
|
||||
private readonly IPlayerConverter<CCSPlayerController> converter =
|
||||
provider.GetRequiredService<IPlayerConverter<CCSPlayerController>>();
|
||||
|
||||
private readonly IMessenger messenger =
|
||||
provider.GetRequiredService<IMessenger>();
|
||||
|
||||
private readonly IMsgLocalizer locale =
|
||||
provider.GetRequiredService<IMsgLocalizer>();
|
||||
|
||||
public void Start(BasePlugin? plugin) {
|
||||
plugin?.AddCommandListener("say_team", onSay);
|
||||
}
|
||||
|
||||
private HookResult onSay(CCSPlayerController? player,
|
||||
CommandInfo commandInfo) {
|
||||
if (player == null
|
||||
|| game.ActiveGame is not { State: State.IN_PROGRESS or State.FINISHED }
|
||||
|| converter.GetPlayer(player) is not IOnlinePlayer apiPlayer
|
||||
|| !roles.GetRoles(apiPlayer).Any(r => r is TraitorRole))
|
||||
return HookResult.Continue;
|
||||
|
||||
var teammates = game.ActiveGame?.Players.Where(p
|
||||
=> roles.GetRoles(p).Any(r => r is TraitorRole))
|
||||
.ToList();
|
||||
if (teammates == null) return HookResult.Continue;
|
||||
|
||||
var msg = commandInfo.ArgString;
|
||||
if (msg.StartsWith('\\') && msg.EndsWith('\\') && msg.Length >= 2)
|
||||
msg = msg[1..^1];
|
||||
var formatted = locale[CS2Msgs.TRAITOR_CHAT_FORMAT(apiPlayer, msg)];
|
||||
|
||||
foreach (var mate in teammates) messenger.Message(mate, formatted);
|
||||
return HookResult.Stop;
|
||||
}
|
||||
|
||||
public void Dispose() { }
|
||||
public void Start() { }
|
||||
}
|
||||
@@ -14,4 +14,8 @@ public static class CS2Msgs {
|
||||
return MsgFactory.Create(nameof(TASER_SCANNED),
|
||||
rolePrefix + scannedPlayer.Name, role.Name);
|
||||
}
|
||||
|
||||
public static IMsg TRAITOR_CHAT_FORMAT(IOnlinePlayer player, string msg) {
|
||||
return MsgFactory.Create(nameof(TRAITOR_CHAT_FORMAT), player.Name, msg);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
ROLE_SPECTATOR: "Spectator"
|
||||
TRAITOR_CHAT_FORMAT: "{darkred}[TRAITORS] {red}{0}: {default}{1}"
|
||||
TASER_SCANNED: "%PREFIX%You scanned {0}{grey}, they are %an% {1}{grey}!"
|
||||
DNA_PREFIX: "{darkblue}D{blue}N{lightblue}A{grey} | {grey}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user