91 override bool RplSave(ScriptBitWriter writer)
93 super.RplSave(writer);
96 writer.WriteInt(players);
100 writer.WriteInt(playerId);
101 scoreInfo.RplSave(writer);
105 writer.WriteInt(factions);
107 FactionManager factionManager =
GetGame().GetFactionManager();
110 Print(
"Score serialization fail, no FactionManager present in the world!",
LogLevel.WARNING);
116 int factionId = factionManager.GetFactionIndex(faction);
117 writer.WriteInt(factionId);
118 scoreInfo.RplSave(writer);
130 super.RplLoad(reader);
133 if (!reader.ReadInt(players))
136 array<int> playerIds = {};
137 array<ref SCR_ScoreInfo> playerScores = {};
139 for (
int i = 0; i < players; i++)
144 if (!reader.ReadInt(playerId))
147 if (!scoreInfo.RplLoad(reader))
150 playerIds.Insert(playerId);
151 playerScores.Insert(scoreInfo);
155 if (!reader.ReadInt(factions))
158 array<int> factionIds = {};
159 array<ref SCR_ScoreInfo> factionScores = {};
162 for (
int i = 0; i < factions; i++)
167 if (!reader.ReadInt(factionId))
170 if (!scoreInfo.RplLoad(reader))
173 factionIds.Insert(factionId);
174 factionScores.Insert(scoreInfo);
179 for (
int i = 0; i < players; i++)
184 FactionManager factionManager =
GetGame().GetFactionManager();
187 Print(
"Score deserialization fail, no FactionManager present in the world, faction scoring will not work properly!",
LogLevel.WARNING);
191 array<Faction> _ = {};
192 int facCnt = factionManager.GetFactionsList(_);
195 for (
int i = 0; i < factions; i++)
197 int factionIndex = factionIds[i];
198 Print(
string.Format(
"idx=%1, facIdx=%2, facMan=%3, facCnt=%4", i, factionIndex, factionManager, facCnt),
LogLevel.NORMAL);
199 faction = factionManager.GetFactionByIndex(factionIndex);
210 private int GetPlayerFactionIndex(
int playerId)
215 Faction playerFaction = factionManager.GetPlayerFaction(playerId);
216 return factionManager.GetFactionIndex(playerFaction);
225 private Faction GetFactionByIndex(
int factionIndex)
227 if (factionIndex < 0)
230 return GetGame().GetFactionManager().GetFactionByIndex(factionIndex);
241 return GetGame().GetFactionManager().GetFactionIndex(faction);
246 private void RpcDo_AddKill(
int playerId,
int factionIdx,
int count)
249 playerScore.m_iKills += count;
252 Faction faction = GetFactionByIndex(factionIdx);
256 factionScore.m_iKills += count;
266 void AddKill(
int playerId,
int count = 1)
272 int factionIdx = GetPlayerFactionIndex(playerId);
273 RpcDo_AddKill(playerId, factionIdx, count);
274 Rpc(RpcDo_AddKill, playerId, factionIdx, count);
279 private void RpcDo_AddDeath(
int playerId,
int factionIdx,
int count)
282 playerScore.m_iDeaths += count;
285 Faction faction = GetFactionByIndex(factionIdx);
289 factionScore.m_iDeaths += count;
299 void AddDeath(
int playerId,
int count = 1)
305 int factionIdx = GetPlayerFactionIndex(playerId);
306 RpcDo_AddDeath(playerId, factionIdx, count);
307 Rpc(RpcDo_AddDeath, playerId, factionIdx, count);
312 private void RpcDo_AddTeamKill(
int playerId,
int factionIdx,
int count)
315 playerScore.m_iTeamKills += count;
318 Faction faction = GetFactionByIndex(factionIdx);
322 factionScore.m_iTeamKills += count;
332 void AddTeamKill(
int playerId,
int count = 1)
338 int factionIdx = GetPlayerFactionIndex(playerId);
339 RpcDo_AddTeamKill(playerId, factionIdx, count);
340 Rpc(RpcDo_AddTeamKill, playerId, factionIdx, count);
345 private void RpcDo_AddSuicide(
int playerId,
int factionIdx,
int count)
348 playerScore.m_iSuicides += count;
351 Faction faction = GetFactionByIndex(factionIdx);
355 factionScore.m_iSuicides += count;
365 void AddSuicide(
int playerId,
int count = 1)
371 int factionIdx = GetPlayerFactionIndex(playerId);
372 RpcDo_AddSuicide(playerId, factionIdx, count);
373 Rpc(RpcDo_AddSuicide, playerId, factionIdx, count);
378 private void RpcDo_AddObjective(
int playerId,
int factionIdx,
int count)
381 playerScore.m_iObjectives += count;
384 Faction faction = GetFactionByIndex(factionIdx);
388 factionScore.m_iObjectives += count;
399 void AddObjective(
int playerId,
int count = 1,
bool addToFaction =
true)
407 factionIdx = GetPlayerFactionIndex(playerId);
409 RpcDo_AddObjective(playerId, factionIdx, count);
410 Rpc(RpcDo_AddObjective, playerId, factionIdx, count);
415 private void RpcDo_AddFactionObjective(
int factionIdx,
int count)
417 Faction faction = GetFactionByIndex(factionIdx);
421 factionScore.m_iObjectives += count;
431 void AddFactionObjective(notnull
Faction faction,
int count = 1)
438 RpcDo_AddFactionObjective(factionIdx, count);
439 Rpc(RpcDo_AddFactionObjective, factionIdx, count);
453 statsApi.PlayerScore(playerId, scoreInfo);
473 int val = (info.m_iKills + info.m_iObjectives) - info.m_iSuicides - info.m_iTeamKills;
525 super.OnPlayerRegistered(playerId);
543 super.OnPlayerDisconnected(playerId, cause, timeout);
552 super.EOnDiag(owner, timeSlice);
557 string title =
Type().ToString() +
" Diagnostics";
560 DbgUI.Text(
"--Faction Scoring--");
561 const string factionFormat =
"[%1] Score=%2 || Kills=%3 | Deaths=%4 | TeamKills=%5 | Suicides=%6 | Objectives=%7";
565 string factionText =
string.Format(factionFormat, faction.GetFactionKey(), score, scoreInfo.m_iKills, scoreInfo.m_iDeaths, scoreInfo.m_iTeamKills, scoreInfo.m_iSuicides, scoreInfo.m_iObjectives);
566 DbgUI.Text(factionText);
569 DbgUI.Text(
"--Player Scoring--");
570 const string playerFormat =
"pId=%1: \"%2\" Score=%3 || Kills=%4 | Deaths=%5 | TeamKills=%6 | Suicides=%7 | Objectives=%8";
573 string name =
GetGame().GetPlayerManager().GetPlayerName(playerId);
575 string playerText =
string.Format(playerFormat, playerId, name, score, scoreInfo.m_iKills, scoreInfo.m_iDeaths, scoreInfo.m_iTeamKills, scoreInfo.m_iSuicides, scoreInfo.m_iObjectives);
576 DbgUI.Text(playerText);
582 DbgUI.InputInt(
"Player Id", targetId);
585 DbgUI.InputInt(
"n (count): ", cnt);
587 if (
DbgUI.Button(
"Add n Kills"))
588 AddKill(targetId, cnt);
589 if (
DbgUI.Button(
"Add n Deaths"))
590 AddDeath(targetId, cnt);
591 if (
DbgUI.Button(
"Add n TeamKills"))
592 AddTeamKill(targetId, cnt);
593 if (
DbgUI.Button(
"Add n Suicides"))
594 AddSuicide(targetId, cnt);
595 if (
DbgUI.Button(
"Add n Objectives"))
596 AddObjective(targetId, cnt);
597 if (
DbgUI.Button(
"Add n Faction Objectives (Player Faction Only)"))
599 int facIdx = GetPlayerFactionIndex(targetId);
600 Faction f = GetFactionByIndex(facIdx);
601 AddFactionObjective(f, cnt);
617 super.EOnInit(owner);
619 FactionManager factionManager =
GetGame().GetFactionManager();
622 array<Faction> factions = {};
623 factionManager.GetFactionsList(factions);
625 foreach (
Faction faction : factions)
639 super.OnPostInit(owner);
643 ConnectToDiagSystem(owner);
651 DisconnectFromDiagSystem(owner);
654 super.OnDelete(owner);