-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathPlayerStatsSystem.cs
More file actions
126 lines (113 loc) · 4.13 KB
/
Copy pathPlayerStatsSystem.cs
File metadata and controls
126 lines (113 loc) · 4.13 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
116
117
118
119
120
121
122
123
124
125
126
namespace CTF.Application.Players.Accounts.Statistics;
public class PlayerStatsSystem(
IWorldService worldService,
IDialogService dialogService,
IPlayerRepository playerRepository,
PlayerRankUpdater playerRankUpdater,
PlayerKillingSpreeUpdater killingSpreeUpdater,
PlayerStatsRenderer playerStatsRenderer) : ISystem
{
[Event]
public void OnPlayerConnect(Player player)
{
playerStatsRenderer.CreateTextDraw(player);
}
[Event]
public void OnPlayerSpawn(Player player)
{
playerStatsRenderer.UpdateTextDraw(player);
}
[Event]
public void OnPlayerDisconnect(Player player, DisconnectReason reason)
{
if (player.IsUnauthenticated())
return;
PlayerInfo playerInfo = player.GetRequiredInfo();
playerInfo.SetLastConnection();
playerRepository.UpdateLastConnection(playerInfo);
}
[Event]
public void OnPlayerDeath(Player victim, Player killer, Weapon reason)
{
PlayerInfo victimInfo = victim.GetRequiredInfo();
victimInfo.StatsPerRound.AddDeaths();
victimInfo.StatsPerRound.ResetKillingSpree();
victimInfo.AddTotalDeaths();
playerRepository.UpdateTotalDeaths(victimInfo);
if (killer.IsInvalidPlayer())
return;
PlayerInfo killerInfo = killer.GetRequiredInfo();
killerInfo.StatsPerRound.AddKills();
killerInfo.AddTotalKills();
killer.AddScore();
playerRepository.UpdateTotalKills(killerInfo);
killingSpreeUpdater.Update(killer);
playerRankUpdater.Update(killer);
playerStatsRenderer.UpdateTextDraw(killer);
}
[Event]
public void OnPlayerKeyStateChange(Player player, Keys newKeys, Keys oldKeys)
{
if (KeyUtils.HasPressed(newKeys, oldKeys, Keys.AnalogRight))
{
ShowStats(player);
}
}
[PlayerCommand("re")]
public void ResetPlayerStats(Player player)
{
PlayerInfo playerInfo = player.GetRequiredInfo();
playerInfo.StatsPerRound.ResetKills();
playerInfo.StatsPerRound.ResetDeaths();
player.SetScore(0);
playerStatsRenderer.UpdateTextDraw(player);
var message = Smart.Format(Messages.ResetPlayerStats, new
{
PlayerName = player.Name
});
worldService.SendClientMessage(Color.Yellow, message);
}
[PlayerCommand("mystats")]
public void ShowStats(Player player)
{
var content = GetPlayerContent(player);
var dialog = new MessageDialog($"Stats: {player.Name}", content, "Close");
dialogService.ShowAsync(player, dialog);
}
[PlayerCommand("stats")]
public void ShowStats(Player currentPlayer, [CommandParameter(Name = "playerId")]Player targetPlayer)
{
var content = GetPlayerContent(targetPlayer);
var dialog = new MessageDialog($"Stats: {targetPlayer.Name}", content, "Close");
dialogService.ShowAsync(currentPlayer, dialog);
}
private static string GetPlayerContent(Player player)
{
PlayerInfo playerInfo = player.GetRequiredInfo();
string createdAt = player.IsUnauthenticated() ?
"None" :
playerInfo.CreatedAt.ToIsoDateString();
var content =
$"""
Current Team: {playerInfo.Team.Name}
Score for Round: {player.Score}
Kills for Round: {playerInfo.StatsPerRound.Kills}
Deaths for Round: {playerInfo.StatsPerRound.Deaths}
Killing Spree for Round: {playerInfo.StatsPerRound.KillingSpree}
Coins: {playerInfo.StatsPerRound.Coins}/100
Max Killing Spree: {playerInfo.MaxKillingSpree}
Total Kills: {playerInfo.TotalKills}
Total Deaths: {playerInfo.TotalDeaths}
Brought Flags: {playerInfo.BroughtFlags}
Captured Flags: {playerInfo.CapturedFlags}
Dropped Flags: {playerInfo.DroppedFlags}
Returned Flags: {playerInfo.ReturnedFlags}
HeadShots: {playerInfo.HeadShots}
GunGame Wins: {playerInfo.GunGameWins}
Role: {playerInfo.RoleId}
Rank: {playerInfo.RankId}
Registration Date: {createdAt}
""";
return content;
}
}