Skip to content

Commit a2fc0c4

Browse files
authored
1.0.3
1 parent 673b80f commit a2fc0c4

1 file changed

Lines changed: 120 additions & 7 deletions

File tree

Game_Manager.cs

Lines changed: 120 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
66
using System.Text.Json.Serialization;
77
using System.Drawing;
8+
using CounterStrikeSharp.API.Modules.Timers;
89

910
namespace Game_Manager;
1011

11-
1212
public class GameBMangerConfig : BasePluginConfig
1313
{
1414
[JsonPropertyName("DisableRadio")] public bool DisableRadio { get; set; } = false;
@@ -28,24 +28,46 @@ public class GameBMangerConfig : BasePluginConfig
2828
[JsonPropertyName("IgnoreTeamMateAttackMessages")] public bool IgnoreTeamMateAttackMessages { get; set; } = false;
2929
[JsonPropertyName("IgnorePlayerSavedYouByPlayerMessages")] public bool IgnorePlayerSavedYouByPlayerMessages { get; set; } = false;
3030
[JsonPropertyName("IgnoreDefaultDisconnectMessages")] public bool IgnoreDefaultDisconnectMessages { get; set; } = false;
31+
[JsonPropertyName("RestartServerLastPlayerDisconnect")] public bool RestartServerLastPlayerDisconnect { get; set; } = false;
32+
[JsonPropertyName("RestartMethod")] public int RestartMethod { get; set; } = 1;
33+
[JsonPropertyName("RestartXTimerInMins")] public int RestartXTimerInMins { get; set; } = 5;
34+
[JsonPropertyName("RestartWhenXPlayersInServerORLess")] public int RestartWhenXPlayersInServerORLess { get; set; } = 0;
35+
3136
}
3237

38+
39+
3340
public class GameBManger : BasePlugin, IPluginConfig<GameBMangerConfig>
3441
{
3542
public override string ModuleName => "Game Manager";
36-
public override string ModuleVersion => "1.0.2";
43+
public override string ModuleVersion => "1.0.3";
3744
public override string ModuleAuthor => "Gold KingZ";
38-
public override string ModuleDescription => "Block/Hide , Messages , Ping , Radio , Team , Connect , Disconnect , Sounds";
45+
public override string ModuleDescription => "Block/Hide , Messages , Ping , Radio , Team , Connect , Disconnect , Sounds , Restart On Last Player Disconnect";
3946
public GameBMangerConfig Config { get; set; } = new GameBMangerConfig();
40-
4147
public void OnConfigParsed(GameBMangerConfig config)
4248
{
49+
Config = config;
50+
4351
if (Config.IgnoreRewardMoneyMessages < 0 || Config.IgnoreRewardMoneyMessages > 2)
4452
{
4553
config.IgnoreRewardMoneyMessages = 0;
54+
Console.WriteLine("IgnoreRewardMoneyMessages: is invalid, setting to default value (0) Please Choose 0 or 1 or 2.");
55+
}
56+
if (Config.RestartXTimerInMins < 0 )
57+
{
58+
config.RestartXTimerInMins = 5;
59+
Console.WriteLine("RestartXTimerInMins: is invalid, setting to default value (5) Please Choose 0 OR Above.");
60+
}
61+
if (Config.RestartWhenXPlayersInServerORLess < 0 )
62+
{
63+
config.RestartWhenXPlayersInServerORLess = 0;
64+
Console.WriteLine("RestartWhenXPlayersInServerORLess: is invalid, setting to default value (0) Please Choose 0 OR Above.");
65+
}
66+
if (Config.RestartMethod < 0 || Config.RestartMethod > 2)
67+
{
68+
config.RestartMethod = 1;
69+
Console.WriteLine("RestartMethod: is invalid, setting to default value (1) Please Choose 0 or 1 or 2.");
4670
}
47-
48-
Config = config;
4971
}
5072

5173
/*
@@ -59,6 +81,8 @@ public void HookConVarChange(ConVar convar, bool oldValue, bool newValue)
5981
}
6082
}
6183
*/
84+
private CounterStrikeSharp.API.Modules.Timers.Timer? _restartTimer;
85+
private CounterStrikeSharp.API.Modules.Timers.Timer? _restartTimer2;
6286
private string[] RadioArray = new string[] {
6387
"coverme",
6488
"takepoint",
@@ -208,6 +232,13 @@ public override void Load(bool hotReload)
208232

209233
return HookResult.Continue;
210234
}, HookMode.Pre);
235+
RegisterListener<Listeners.OnMapStart>(mapName =>
236+
{
237+
_restartTimer?.Kill();
238+
_restartTimer = null;
239+
_restartTimer2?.Kill();
240+
_restartTimer2 = null;
241+
});
211242
RegisterEventHandler<EventRoundEnd>((@event, info) =>
212243
{
213244
if (!Config.DisableWinOrLoseSound || @event == null)return HookResult.Continue;
@@ -272,12 +303,94 @@ public override void Load(bool hotReload)
272303
return HookResult.Continue;
273304

274305
});
306+
RegisterListener<Listeners.OnClientConnected>(playerSlot =>
307+
{
308+
if (!Config.RestartServerLastPlayerDisconnect || Config.RestartMethod == 0) return;
309+
var players = Utilities.GetPlayers().Where(x => x.Connected == PlayerConnectedState.PlayerConnected && !x.IsBot);
310+
var playersCount = players.Count();
311+
312+
if(playersCount <= Config.RestartWhenXPlayersInServerORLess)
313+
{
314+
_restartTimer?.Kill();
315+
_restartTimer = null;
316+
_restartTimer2?.Kill();
317+
_restartTimer2 = null;
318+
319+
_restartTimer = AddTimer(0.1f, RestartTimer_Callback, TimerFlags.REPEAT | TimerFlags.STOP_ON_MAPCHANGE);
320+
}else if(playersCount >= Config.RestartWhenXPlayersInServerORLess)
321+
{
322+
_restartTimer?.Kill();
323+
_restartTimer = null;
324+
325+
_restartTimer2?.Kill();
326+
_restartTimer2 = null;
327+
}
328+
329+
});
330+
RegisterListener<Listeners.OnClientDisconnectPost>(playerSlot =>
331+
{
332+
if (!Config.RestartServerLastPlayerDisconnect || Config.RestartMethod == 0) return;
333+
334+
var players = Utilities.GetPlayers().Where(x => x.Connected == PlayerConnectedState.PlayerConnected && !x.IsBot);
335+
var playersCount = players.Count();
336+
337+
if(playersCount <= Config.RestartWhenXPlayersInServerORLess)
338+
{
339+
_restartTimer?.Kill();
340+
_restartTimer = null;
341+
_restartTimer2?.Kill();
342+
_restartTimer2 = null;
343+
344+
_restartTimer = AddTimer(0.1f, RestartTimer_Callback, TimerFlags.REPEAT | TimerFlags.STOP_ON_MAPCHANGE);
345+
}else if(playersCount >= Config.RestartWhenXPlayersInServerORLess)
346+
{
347+
_restartTimer?.Kill();
348+
_restartTimer = null;
349+
350+
_restartTimer2?.Kill();
351+
_restartTimer2 = null;
352+
}
353+
});
275354
for (int i = 0; i < RadioArray.Length; i++)
276355
{
277356
AddCommandListener(RadioArray[i], CommandListener_RadioCommands);
278357
}
279358
}
280-
359+
private void RestartTimer_Callback()
360+
{
361+
var players = Utilities.GetPlayers().Where(x => x.Connected == PlayerConnectedState.PlayerConnected && !x.IsBot);
362+
var playersCount = players.Count();
363+
364+
//Server.PrintToConsole($"playersCount{playersCount} Config.RestartWhenXPlayersInServerORLess{Config.RestartWhenXPlayersInServerORLess}");
365+
if(playersCount <= Config.RestartWhenXPlayersInServerORLess)
366+
{
367+
_restartTimer2 = AddTimer(Config.RestartXTimerInMins * 60, RestartTimer_Callback2, TimerFlags.STOP_ON_MAPCHANGE);
368+
}
369+
}
370+
private void RestartTimer_Callback2()
371+
{
372+
var players = Utilities.GetPlayers().Where(x => x.Connected == PlayerConnectedState.PlayerConnected && !x.IsBot);
373+
var playersCount = players.Count();
374+
375+
if(playersCount <= Config.RestartWhenXPlayersInServerORLess)
376+
{
377+
if(Config.RestartMethod == 1)
378+
{
379+
Server.ExecuteCommand("sv_cheats 1; restart");
380+
}else if(Config.RestartMethod == 2)
381+
{
382+
Server.ExecuteCommand("sv_cheats 1; crash");
383+
}
384+
385+
}else if(playersCount >= Config.RestartWhenXPlayersInServerORLess)
386+
{
387+
_restartTimer?.Kill();
388+
_restartTimer = null;
389+
390+
_restartTimer2?.Kill();
391+
_restartTimer2 = null;
392+
}
393+
}
281394
private HookResult CommandListener_Ping(CCSPlayerController? player, CommandInfo info)
282395
{
283396
if(!Config.DisablePing || player == null || !player.IsValid)return HookResult.Continue;

0 commit comments

Comments
 (0)