-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRankingSystemPlugin.cs
More file actions
105 lines (79 loc) · 3.3 KB
/
Copy pathRankingSystemPlugin.cs
File metadata and controls
105 lines (79 loc) · 3.3 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
using CounterStrikeSharp.API.Core;
using RankingSystemBySeen.Storage;
using RankingSystemBySeen.Handlers;
using RankingSystemBySeen.Helpers;
using CounterStrikeSharp.API.Modules.Utils;
using CounterStrikeSharp.API.Modules.Commands;
namespace RankingSystemBySeen;
public class RankingSystemBySeen : BasePlugin
{
public override string ModuleName => "RankingSystem";
public override string ModuleVersion => "1.0.0";
public override string ModuleAuthor => "Seen";
public override string ModuleDescription => "Ranks players on server and displays numeric ranks in scoreboard + !rank";
private KillHandler? _killHandler;
private RoundHandler? _roundHandler;
private StorageRepository? _storage;
public override void OnAllPluginsLoaded(bool hotReload)
{
Console.WriteLine("[RankingSystem] Plugin loaded successfully!");
}
public override void Load(bool hotReload)
{
_storage = new StorageRepository();
_killHandler = new KillHandler(_storage);
_roundHandler = new RoundHandler(_storage);
RegisterEventHandler<EventPlayerDeath>(OnPlayerDeath);
RegisterEventHandler<EventRoundEnd>(OnRoundEnds);
AddCommand("rank", "Prints the rank message to chat", OnRankCommand);
AddCommand("!rank", "Prints the rank message to chat", OnRankCommand);
AddCommand("!top15", "Prints the top 15 list", OnTop15Command);
AddCommand("top15", "Prints the top 15 list", OnTop15Command);
}
public override void Unload(bool hotReload)
{
_storage?.SaveLeaderboard();
}
private HookResult OnPlayerDeath(EventPlayerDeath ev, GameEventInfo info)
{
var attacker = ev.Attacker;
var victim = ev.Userid;
if (attacker == null || victim == null || attacker == victim)
return HookResult.Continue;
_killHandler?.HandleKill(attacker, victim);
return HookResult.Continue;
}
private void OnRankCommand(CCSPlayerController? player, CommandInfo command)
{
if (player == null || !player.IsValid || _storage == null)
return;
var steamId = player.SteamID;
var (Score, Position, TotalPlayers) = _storage.GetPlayerInfo(steamId);
ChatHelper.PrintRankMessage(player, Score, Position, TotalPlayers);
}
private void OnTop15Command(CCSPlayerController? player, CommandInfo command)
{
if (player == null || !player.IsValid || _storage == null)
return;
ChatHelper.PrintTopList(player, _storage.GetSortedUserItems());
}
private HookResult OnRoundEnds(EventRoundEnd ev, GameEventInfo info)
{
_storage?.SaveLeaderboard();
if (ev.Winner == 0)
return HookResult.Continue;
var winningTeam = (CsTeam)ev.Winner;
var winners = GameHelper.GetPlayersByTeam(winningTeam);
winners.ForEach((winner) =>
{
_roundHandler?.HandleRound(winner, Points.RankingActions.RoundWin);
});
var losingTeam = winningTeam == CsTeam.CounterTerrorist ? CsTeam.Terrorist : CsTeam.CounterTerrorist;
var losers = GameHelper.GetPlayersByTeam(losingTeam);
losers.ForEach((loser) =>
{
_roundHandler?.HandleRound(loser, Points.RankingActions.RoundLoss);
});
return HookResult.Continue;
}
}