Skip to content

Commit

Permalink
Merge pull request #126 from dollannn/master
Browse files Browse the repository at this point in the history
Remove player from game and queue if they are moved to spectator
  • Loading branch information
B3none authored May 20, 2024
2 parents 363d86f + b33ee87 commit 87c5ec9
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 6 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ When the plugin is first loaded it will create a `retakes_config.json` file in t
| IsDebugMode | Whether to enable debug output to the server console or not. | false | false | true |
| ShouldForceEvenTeamsWhenPlayerCountIsMultipleOf10 | Whether to force even teams when the active players is a multiple of 10 or not. (this means you will get 5v5 @ 10 players / 10v10 @ 20 players) | true | false | true |
| EnableFallbackBombsiteAnnouncement | Whether to enable the fallback bombsite announcement. | true | false | true |
| ShouldRemoveSpectators | When a player is moved to spectators, remove them from all retake queues. Ensures that AFK plugins work as expected. | false | false | true |

## Commands
| Command | Arguments | Description | Permissions |
Expand Down
3 changes: 2 additions & 1 deletion RetakesPlugin/Modules/Configs/RetakesConfigData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

public class RetakesConfigData
{
public static int CurrentVersion = 8;
public static int CurrentVersion = 9;

public int Version { get; set; } = CurrentVersion;
public int MaxPlayers { get; set; } = 9;
Expand All @@ -19,4 +19,5 @@ public class RetakesConfigData
public bool IsDebugMode { get; set; } = false;
public bool ShouldForceEvenTeamsWhenPlayerCountIsMultipleOf10 { get; set; } = true;
public bool EnableFallbackBombsiteAnnouncement { get; set; } = true;
public bool ShouldRemoveSpectators { get; set; } = true;
}
30 changes: 28 additions & 2 deletions RetakesPlugin/Modules/Managers/GameManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,18 @@ public class GameManager
public readonly QueueManager QueueManager;
private readonly int _consecutiveRoundWinsToScramble;
private readonly bool _isScrambleEnabled;

private readonly bool _removeSpectatorsEnabled;
public const int ScoreForKill = 50;
public const int ScoreForAssist = 25;
public const int ScoreForDefuse = 50;

public GameManager(Translator translator, QueueManager queueManager, int? roundsToScramble, bool? isScrambleEnabled)
public GameManager(Translator translator, QueueManager queueManager, int? roundsToScramble, bool? isScrambleEnabled, bool? RemoveSpectatorsEnabled)
{
_translator = translator;
QueueManager = queueManager;
_consecutiveRoundWinsToScramble = roundsToScramble ?? 5;
_isScrambleEnabled = isScrambleEnabled ?? true;
_removeSpectatorsEnabled = RemoveSpectatorsEnabled ?? false;
}

private bool _scrambleNextRound;
Expand Down Expand Up @@ -245,4 +246,29 @@ private void SetTeams(List<CCSPlayerController>? terrorists, List<CCSPlayerContr
}
}
}

public HookResult RemoveSpectators(EventPlayerTeam @event, HashSet<CCSPlayerController> _hasMutedVoices)
{
if (_removeSpectatorsEnabled)
{
CCSPlayerController? player = @event.Userid;

if (!Helpers.IsValidPlayer(player))
{
return HookResult.Continue;
}
int team = @event.Team;

if (team == (int)CsTeam.Spectator)
{
// Ensure player is active ingame.
if (QueueManager.ActivePlayers.Contains(player))
{
QueueManager.RemovePlayerFromQueues(player);
_hasMutedVoices.Remove(player);
}
}
}
return HookResult.Continue;
}
}
13 changes: 10 additions & 3 deletions RetakesPlugin/RetakesPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace RetakesPlugin;
[MinimumApiVersion(220)]
public class RetakesPlugin : BasePlugin
{
private const string Version = "2.0.4";
private const string Version = "2.0.5";

#region Plugin info
public override string ModuleName => "Retakes Plugin";
Expand Down Expand Up @@ -487,7 +487,8 @@ private void OnMapStart(string mapName)
_retakesConfig?.RetakesConfigData?.ShouldForceEvenTeamsWhenPlayerCountIsMultipleOf10
),
_retakesConfig?.RetakesConfigData?.RoundsToScramble,
_retakesConfig?.RetakesConfigData?.IsScrambleEnabled
_retakesConfig?.RetakesConfigData?.IsScrambleEnabled,
_retakesConfig?.RetakesConfigData?.ShouldRemoveSpectators
);

_breakerManager = new BreakerManager(
Expand Down Expand Up @@ -815,7 +816,13 @@ public HookResult OnPlayerTeam(EventPlayerTeam @event, GameEventInfo info)
// Ensure all team join events are silent.
@event.Silent = true;

return HookResult.Continue;
if (_gameManager == null)
{
Helpers.Debug($"Game manager not loaded.");
return HookResult.Continue;
}

return _gameManager.RemoveSpectators(@event, _hasMutedVoices);
}

private HookResult OnCommandJoinTeam(CCSPlayerController? player, CommandInfo commandInfo)
Expand Down

0 comments on commit 87c5ec9

Please sign in to comment.