-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAutoRestart.cs
More file actions
115 lines (95 loc) · 3.91 KB
/
Copy pathAutoRestart.cs
File metadata and controls
115 lines (95 loc) · 3.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Translations;
using CounterStrikeSharp.API.Modules.Timers;
using CounterStrikeSharp.API.Modules.Utils;
using CounterStrikeSharp.API.Modules.Config;
using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Admin;
using System.Text.Json.Serialization;
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Localization;
namespace AutoRestart
{
public class AutoRestartConfig : BasePluginConfig
{
[JsonPropertyName("AutoRestartEnabled")]
public bool AutoRestartEnabled { get; set; } = true;
[JsonPropertyName("EnableManualRestart")]
public bool EnableManualRestart { get; set; } = true;
[JsonPropertyName("Flag")]
public string Flag { get; set; } = "@css/root";
[JsonPropertyName("AutoRestartTime")]
public string AutoRestartTime { get; set; } = "01:00:00";
}
public class AutoRestart : BasePlugin, IPluginConfig<AutoRestartConfig>
{
public override string ModuleName => "AutoRestart";
public override string ModuleVersion => "1.0.0";
public override string ModuleAuthor => "M1k@c";
public required AutoRestartConfig Config { get; set; }
private static IStringLocalizer? _Localizer;
public void OnConfigParsed(AutoRestartConfig config)
{
Config = config;
}
public override void Load(bool hotReload)
{
Console.WriteLine("[AutoRestart] Plugin loaded successfully!");
_Localizer = Localizer;
AddCommand("css_restart", "Restart the server immediately", (player, info) => RestartCommand(player));
if (Config.AutoRestartEnabled)
{
ScheduleAutoRestart();
}
}
private bool HasAdminPermission(CCSPlayerController? player)
{
return player != null && AdminManager.PlayerHasPermissions(player, Config.Flag);
}
private void ScheduleAutoRestart()
{
if (!TimeSpan.TryParse(Config.AutoRestartTime, out TimeSpan restartTime))
{
Console.WriteLine($"[AutoRestart] Invalid AutoRestartTime format: {Config.AutoRestartTime}. Expected format: HH:mm:ss");
return;
}
TimeSpan currentTime = DateTime.Now.TimeOfDay;
TimeSpan delay = restartTime > currentTime
? restartTime - currentTime
: restartTime.Add(TimeSpan.FromDays(1)) - currentTime;
Console.WriteLine($"[AutoRestart] Server will restart at {restartTime} ({delay.TotalSeconds} seconds from now).");
AddTimer((float)delay.TotalSeconds, RestartServer);
}
private void RestartServer()
{
Console.WriteLine("[AutoRestart] Restarting server via command...");
Server.ExecuteCommand("quit");
}
private void RestartCommand(CCSPlayerController? player)
{
if (!HasAdminPermission(player))
{
Console.WriteLine("[AutoRestart] Player has no admin permission for restart.");
return;
}
if (!Config.EnableManualRestart)
{
Server.NextFrame(() =>
{
if (player?.IsValid == true)
player.PrintToChat(_Localizer?.ForPlayer(player, "manual_restart_disabled") ?? "Manual restart is disabled.");
});
return;
}
Console.WriteLine("[AutoRestart] Admin executed 'css_restart' command.");
Server.NextFrame(() =>
{
if (player?.IsValid == true)
player.PrintToChat(_Localizer?.ForPlayer(player, "restarting_now") ?? "Restarting server now...");
});
RestartServer();
}
}
}