Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AnalyticsDataCollectionXPEventsModule.c
Go to the documentation of this file.
3{
5
6 #ifdef ENABLE_DIAG
7 protected int m_iSelectedPlayerDataIndex;
8 protected SCR_AnalyticsPlayerXPData m_SelectedPlayerData;
9 #endif
10
11 //------------------------------------------------------------------------------------------------
12 protected override void Enable()
13 {
14 super.Enable();
15
16 SCR_CharacterRankComponent.s_OnRankChanged.Insert(OnPlayerRankChanged);
17 }
18
19 //------------------------------------------------------------------------------------------------
20 protected override void Disable()
21 {
22 super.Disable();
23
24 SCR_CharacterRankComponent.s_OnRankChanged.Remove(OnPlayerRankChanged);
25 }
26
27 //------------------------------------------------------------------------------------------------
28 protected override void OnGameModeEnd()
29 {
30 Disable();
31 }
32
33 //------------------------------------------------------------------------------------------------
34 protected override void OnPlayerConnected(int playerId)
35 {
36 PlayerController playerController = GetGame().GetPlayerManager().GetPlayerController(playerId);
37 if (playerController)
38 {
39 SCR_PlayerXPHandlerComponent xpHandlerComponent = SCR_PlayerXPHandlerComponent.Cast(playerController.FindComponent(SCR_PlayerXPHandlerComponent));
40 if (xpHandlerComponent)
41 xpHandlerComponent.GetOnPlayerXPChanged().Insert(OnPlayerXPChanged);
42 }
43
44 if (m_mPlayerXPData.Contains(playerId))
45 return;
46
48 m_mPlayerXPData.Insert(playerId, data);
49
50 SCR_PlayerData playerData = SCR_PlayerData.GetPlayerData(playerId);
51 if (!playerData)
52 return;
53
54 playerData.dataEvent.name_rank_level = SCR_Enum.GetEnumName(SCR_ECharacterRank, data.GetRank());
55 }
56
57 //------------------------------------------------------------------------------------------------
58 protected override void OnPlayerDisconnected(int playerId, KickCauseCode cause, IEntity controlledEntity)
59 {
60 PlayerController playerController = GetGame().GetPlayerManager().GetPlayerController(playerId);
61 if (playerController)
62 {
63 SCR_PlayerXPHandlerComponent xpHandlerComponent = SCR_PlayerXPHandlerComponent.Cast(playerController.FindComponent(SCR_PlayerXPHandlerComponent));
64 if (xpHandlerComponent)
65 xpHandlerComponent.GetOnPlayerXPChanged().Remove(OnPlayerXPChanged);
66 }
67
69 if (!data)
70 return;
71
72 SCR_PlayerData playerData = SCR_PlayerData.GetPlayerData(playerId);
73 if (!playerData)
74 return;
75
76 playerData.dataEvent.name_rank_level = SCR_Enum.GetEnumName(SCR_ECharacterRank, data.GetRank());
77 }
78
79 //------------------------------------------------------------------------------------------------
80 protected void OnPlayerRankChanged(SCR_ECharacterRank prevRank, SCR_ECharacterRank newRank, IEntity playerEntity, bool silent)
81 {
82 int playerId = GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(playerEntity);
83 if (playerId <= 0)
84 return;
85
87 if (!data)
88 return;
89
90 // This event is called on spawn for players with non-default ranks
91 // No need to continue in that case as player rank did not actually change
92 if (data.GetRank() == newRank)
93 return;
94
95 data.SetRank(newRank);
96 m_mPlayerXPData.Set(playerId, data);
97
98 SCR_PlayerData playerData = SCR_PlayerData.GetPlayerData(playerId);
99 if (!playerData)
100 return;
101
102 playerData.dataEvent.name_rank_level = SCR_Enum.GetEnumName(SCR_ECharacterRank, data.GetRank());
103
104 GetGame().GetStatsApi().PlayerRankGained(playerId, playerData.dataEvent);
105 }
106
107 //------------------------------------------------------------------------------------------------
108 protected void OnPlayerXPChanged(int playerId, int currentXP, int XPToAdd, SCR_EXPRewards rewardId)
109 {
110 if (playerId <= 0)
111 return;
112
114 if (!data)
115 return;
116
117 // new XP data added
118 if (rewardId != SCR_EXPRewards.UNDEFINED)
119 {
120 data.AddXPReward(rewardId, XPToAdd);
121 m_mPlayerXPData.Set(playerId, data);
122 }
123
124 SetPlayerXPData(playerId, data);
125 }
126
127 //------------------------------------------------------------------------------------------------
128 protected void SetPlayerXPData(int playerId, SCR_AnalyticsPlayerXPData data)
129 {
130 SCR_PlayerData playerData = SCR_PlayerData.GetPlayerData(playerId);
131 if (!playerData)
132 return;
133
134 map<SCR_EXPRewards, int> rewardData = data.GetXPRewards();
135 array<string> xpRewardsString = {};
136
137 foreach(SCR_EXPRewards reward, int amount : rewardData)
138 {
139 xpRewardsString.Insert(string.Format("%1: %2", SCR_Enum.GetEnumName(SCR_EXPRewards, reward), amount));
140 }
141
142 playerData.dataEvent.amt_xp_gained = data.GetCurrentXP();
143 playerData.dataEvent.array_rank_points_source = SCR_AnalyticsDataCollectionHelper.GetShortDataArray(xpRewardsString.ToString());
144 }
145
146 #ifdef ENABLE_DIAG
147 //------------------------------------------------------------------------------------------------
148 override void DrawContent()
149 {
150 if (!m_bIsEnabled)
151 {
152 DbgUI.Text("Module disabled!");
153 return;
154 }
155
156 if (m_mPlayerXPData.IsEmpty())
157 return;
158
159 if (DbgUI.Button("Previous Player"))
160 OnSetSelectedPlayerIndex(m_iSelectedPlayerDataIndex - 1);
161
162 DbgUI.SameLine();
163
164 if (DbgUI.Button("Next Player"))
165 OnSetSelectedPlayerIndex(m_iSelectedPlayerDataIndex + 1);
166
167 m_SelectedPlayerData = m_mPlayerXPData.GetElement(m_iSelectedPlayerDataIndex);
168
169 DrawPlayerData();
170 }
171
172 //------------------------------------------------------------------------------------------------
173 void DrawPlayerData()
174 {
175 if (!m_SelectedPlayerData)
176 return;
177
178 int playerId = m_mPlayerXPData.GetKey(m_iSelectedPlayerDataIndex);
179 string rankName = SCR_Enum.GetEnumName(SCR_ECharacterRank, m_SelectedPlayerData.GetRank());
180 DbgUI.Text(string.Format("Player %1: %2, XP: %3, RANK: %4", playerId, GetGame().GetPlayerManager().GetPlayerName(playerId), m_SelectedPlayerData.GetCurrentXP(), rankName));
181
182 map<SCR_EXPRewards, int> xpEventsRewards = m_SelectedPlayerData.GetXPRewards();
183 string rewardName;
184
185 foreach (SCR_EXPRewards rewardType, int rewardAmount : xpEventsRewards)
186 {
187 rewardName = SCR_Enum.GetEnumName(SCR_EXPRewards, rewardType);
188 DbgUI.Text(string.Format("%1: %2", rewardName, rewardAmount));
189 }
190 }
191
192 //------------------------------------------------------------------------------------------------
193 private void OnSetSelectedPlayerIndex(int index)
194 {
195 m_iSelectedPlayerDataIndex = Math.Clamp(index, 0, m_mPlayerXPData.Count() - 1);
196 }
197 #endif
198
199 //------------------------------------------------------------------------------------------------
201 {
202 Disable();
203 }
204}
ArmaReforgerScripted GetGame()
Definition game.c:1398
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
void SCR_CharacterRankComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
Get all prefabs that have the spawner data
Definition DbgUI.c:66
override void OnPlayerDisconnected(int playerId, KickCauseCode cause, IEntity controlledEntity)
void SetPlayerXPData(int playerId, SCR_AnalyticsPlayerXPData data)
void OnPlayerXPChanged(int playerId, int currentXP, int XPToAdd, SCR_EXPRewards rewardId)
void OnPlayerRankChanged(SCR_ECharacterRank prevRank, SCR_ECharacterRank newRank, IEntity playerEntity, bool silent)
ref map< int, ref SCR_AnalyticsPlayerXPData > m_mPlayerXPData
map< SCR_EXPRewards, int > GetXPRewards()
ref SCR_PlayerDataEvent dataEvent
static SCR_PlayerData GetPlayerData(int playerID)
Definition Types.c:486