add damage dealt stat instead of assists

This commit is contained in:
GenZmeY 2022-09-26 16:14:49 +03:00
parent 023e1c0be1
commit 402fae7dfa
4 changed files with 103 additions and 71 deletions

View File

@ -24,7 +24,7 @@ var private KFOnlineGameSettings KFOGS;
var private OnlineSubsystemSteamworks OSS; var private OnlineSubsystemSteamworks OSS;
var private Array<YAS_RepInfo> RepInfos; var private Array<YAS_RepInfoOwner> RepInfos;
var private Array<CachedRankRelation> PlayerRelations; var private Array<CachedRankRelation> PlayerRelations;
var private Array<CachedRankRelation> GroupRelations; var private Array<CachedRankRelation> GroupRelations;
@ -268,7 +268,7 @@ private function PostInit()
private function UpdateTimer() private function UpdateTimer()
{ {
local YAS_RepInfo RepInfo; local YAS_RepInfoOwner RepInfo;
foreach RepInfos(RepInfo) foreach RepInfos(RepInfo)
{ {
@ -281,7 +281,7 @@ private function UpdateTimer()
private function MessageOfTheDayTimer() private function MessageOfTheDayTimer()
{ {
local YAS_RepInfo RepInfo; local YAS_RepInfoOwner RepInfo;
local int MessageIndex; local int MessageIndex;
if (CfgMessageOfTheDay.default.bRandomize) if (CfgMessageOfTheDay.default.bRandomize)
@ -313,7 +313,7 @@ private function MessageOfTheDayTimer()
public function NotifyLogin(Controller C) public function NotifyLogin(Controller C)
{ {
local YAS_RepInfo RepInfo; local YAS_RepInfoOwner RepInfo;
`Log_Trace(); `Log_Trace();
@ -329,7 +329,7 @@ public function NotifyLogin(Controller C)
public function NotifyLogout(Controller C) public function NotifyLogout(Controller C)
{ {
local YAS_RepInfo RepInfo; local YAS_RepInfoOwner RepInfo;
`Log_Trace(); `Log_Trace();
@ -341,34 +341,36 @@ public function NotifyLogout(Controller C)
} }
} }
public function YAS_RepInfo CreateRepInfo(Controller C) public function YAS_RepInfoOwner CreateRepInfo(Controller C)
{ {
local YAS_RepInfo OwnerRepInfo; local YAS_RepInfoOwner OwnerRepInfo;
local YAS_RepInfoRank RankRepInfo; local YAS_RepInfoPlayer PlayerRepInfo;
`Log_Trace(); `Log_Trace();
OwnerRepInfo = Spawn(class'YAS_RepInfo', C); OwnerRepInfo = Spawn(class'YAS_RepInfoOwner', C);
RankRepInfo = Spawn(class'YAS_RepInfoRank', C); PlayerRepInfo = Spawn(class'YAS_RepInfoPlayer', C);
if (OwnerRepInfo != None && RankRepInfo != None) if (OwnerRepInfo != None && PlayerRepInfo != None)
{ {
RepInfos.AddItem(OwnerRepInfo); RepInfos.AddItem(OwnerRepInfo);
OwnerRepInfo.RankRepInfo = RankRepInfo; OwnerRepInfo.PlayerRepInfo = PlayerRepInfo;
OwnerRepInfo.YAS = Self; OwnerRepInfo.YAS = Self;
OwnerRepInfo.LogLevel = LogLevel; OwnerRepInfo.LogLevel = LogLevel;
OwnerRepInfo.RankPlayer = CfgRanks.default.Player; OwnerRepInfo.RankPlayer = CfgRanks.default.Player;
OwnerRepInfo.RankAdmin = CfgRanks.default.Admin; OwnerRepInfo.RankAdmin = CfgRanks.default.Admin;
OwnerRepInfo.MessageOfTheDay = CfgMessageOfTheDay.default.Message[LastMessageID]; OwnerRepInfo.MessageOfTheDay = CfgMessageOfTheDay.default.Message[LastMessageID];
return OwnerRepInfo;
} }
return OwnerRepInfo; return None;
} }
private function YAS_RepInfo FindRepInfo(Controller C) private function YAS_RepInfoOwner FindRepInfo(Controller C)
{ {
local YAS_RepInfo RepInfo; local YAS_RepInfoOwner RepInfo;
if (C == None) return None; if (C == None) return None;
@ -383,20 +385,20 @@ private function YAS_RepInfo FindRepInfo(Controller C)
return None; return None;
} }
public function bool DestroyRepInfo(YAS_RepInfo RepInfo) public function bool DestroyRepInfo(YAS_RepInfoOwner RepInfo)
{ {
`Log_Trace(); `Log_Trace();
if (RepInfo == None) return false; if (RepInfo == None) return false;
RepInfos.RemoveItem(RepInfo); RepInfos.RemoveItem(RepInfo);
RepInfo.RankRepInfo.SafeDestroy(); RepInfo.PlayerRepInfo.SafeDestroy();
RepInfo.SafeDestroy(); RepInfo.SafeDestroy();
return true; return true;
} }
private function InitRank(YAS_RepInfo RepInfo) private function InitRank(YAS_RepInfoOwner RepInfo)
{ {
local CachedRankRelation Rel; local CachedRankRelation Rel;
local String JoinedGroupIDs; local String JoinedGroupIDs;
@ -417,12 +419,12 @@ private function InitRank(YAS_RepInfo RepInfo)
{ {
if (Rel.UID.Uid == PRI.UniqueID.Uid) if (Rel.UID.Uid == PRI.UniqueID.Uid)
{ {
RepInfo.RankRepInfo.Rank = Rel.Rank; RepInfo.PlayerRepInfo.Rank = Rel.Rank;
break; break;
} }
} }
if (RepInfo.RankRepInfo.Rank.RankID <= 0 && !KFPC.bIsEosPlayer) if (RepInfo.PlayerRepInfo.Rank.RankID <= 0 && !KFPC.bIsEosPlayer)
{ {
foreach GroupRelations(Rel) foreach GroupRelations(Rel)
{ {

View File

@ -1,4 +1,4 @@
class YAS_RepInfo extends ReplicationInfo; class YAS_RepInfoOwner extends ReplicationInfo;
var public YAS YAS; var public YAS YAS;
@ -7,7 +7,7 @@ var public repnotify SystemRank RankPlayer, RankAdmin;
var public repnotify String DynamicServerName, MessageOfTheDay; var public repnotify String DynamicServerName, MessageOfTheDay;
var public repnotify bool UsesStats, Custom, PasswordRequired; var public repnotify bool UsesStats, Custom, PasswordRequired;
var public YAS_RepInfoRank RankRepInfo; var public YAS_RepInfoPlayer PlayerRepInfo;
var private KFPlayerController KFPC; var private KFPlayerController KFPC;
var private YAS_ScoreBoard SC; var private YAS_ScoreBoard SC;
@ -16,7 +16,8 @@ var private OnlineSubsystemSteamworks OSS;
var private Array<UniqueNetID> PendingGroupIDs; var private Array<UniqueNetID> PendingGroupIDs;
const CheckGroupTimer = 0.2f; const CheckGroupTimer = 0.2f;
const MaxRetries = 3; const UpdatePlayerStatsTimer = 2.0f;
const MaxRetries = 3;
var private int Retries; var private int Retries;
replication replication
@ -92,6 +93,11 @@ public simulated event PreBeginPlay()
GetScoreboard(); GetScoreboard();
} }
if (Role == ROLE_Authority || WorldInfo.NetMode == NM_StandAlone)
{
SetTimer(UpdatePlayerStatsTimer, true, nameof(UpdatePlayerStats));
}
GetOnlineSubsystem(); GetOnlineSubsystem();
} }
@ -102,6 +108,22 @@ public simulated event PostBeginPlay()
Super.PostBeginPlay(); Super.PostBeginPlay();
} }
public function UpdatePlayerStats()
{
if (GetKFPC() == None || KFPC.MatchStats == None) return;
if (WorldInfo.GRI == None || KFGameReplicationInfo(WorldInfo.GRI) == None) return;
// At the end of the wave, TotalDamageDealt is incremented by GetDamageDealtInWave(),
// but GetDamageDealtInWave() is not reset immediately.
// In order not to receive a short-term doubling of damage in statistics,
// Count damage only when the wave is active
if (KFGameReplicationInfo(WorldInfo.GRI).bWaveStarted)
{
PlayerRepInfo.DamageDealt = KFPC.MatchStats.TotalDamageDealt + KFPC.MatchStats.GetDamageDealtInWave();
}
}
public reliable client function CheckGroupRanks(String JoinedGroupIDs) public reliable client function CheckGroupRanks(String JoinedGroupIDs)
{ {
local Array<String> StringGroupIDs; local Array<String> StringGroupIDs;
@ -164,12 +186,12 @@ private reliable server function ServerApplyMembership(UniqueNetId GroupUID)
Rank = YAS.RankByGroupID(GroupUID); Rank = YAS.RankByGroupID(GroupUID);
if (Rank.RankID > 0) if (Rank.RankID > 0)
{ {
RankRepInfo.Rank = Rank; PlayerRepInfo.Rank = Rank;
} }
else else
{ {
`Log_Warn("Cant find related rank for groupUID"); `Log_Warn("Cant find related rank for groupUID");
RankRepInfo.Rank = class'YAS_Types'.static.FromSystemRank(RankPlayer); PlayerRepInfo.Rank = class'YAS_Types'.static.FromSystemRank(RankPlayer);
} }
} }

View File

@ -1,7 +1,8 @@
class YAS_RepInfoRank extends ReplicationInfo; class YAS_RepInfoPlayer extends ReplicationInfo;
var public UniqueNetID UID; var public UniqueNetID UID;
var public Rank Rank; var public Rank Rank;
var public int DamageDealt;
replication replication
{ {
@ -9,7 +10,7 @@ replication
UID; UID;
if (bNetDirty) if (bNetDirty)
Rank; Rank, DamageDealt;
} }
public simulated function bool SafeDestroy() public simulated function bool SafeDestroy()

View File

@ -13,6 +13,8 @@ const ListItemsDefault = 12;
const FontScalarModCompact = 1.0f; const FontScalarModCompact = 1.0f;
const FontScalarModDefault = 1.25f; const FontScalarModDefault = 1.25f;
const ShowDamage = true;
const IconRanked = Texture2D'DailyObjective_UI.KF2_Dailies_Icon_PerkLvl'; // where the hell is the right icon? const IconRanked = Texture2D'DailyObjective_UI.KF2_Dailies_Icon_PerkLvl'; // where the hell is the right icon?
const IconCustom = Texture2D'UI_Menus.ServerBrowserMenu_SWF_I26'; const IconCustom = Texture2D'UI_Menus.ServerBrowserMenu_SWF_I26';
const IconUnranked = Texture2D'UI_Menus.ServerBrowserMenu_SWF_I28'; const IconUnranked = Texture2D'UI_Menus.ServerBrowserMenu_SWF_I28';
@ -51,7 +53,7 @@ var float PingBars;
var localized String Players, Spectators; var localized String Players, Spectators;
// Cache // Cache
var public Array<YAS_RepInfoRank> RepInfos; var public Array<YAS_RepInfoPlayer> RepInfos;
var public YAS_Settings Settings; var public YAS_Settings Settings;
var public String DynamicServerName, MessageOfTheDay; var public String DynamicServerName, MessageOfTheDay;
@ -63,55 +65,44 @@ var public SystemRank RankAdmin;
var private int ListItems; var private int ListItems;
var private float FontScalarMod; var private float FontScalarMod;
function Rank PlayerRank(KFPlayerReplicationInfo KFPRI) function YAS_RepInfoPlayer FindRepInfo(KFPlayerReplicationInfo KFPRI)
{
local YAS_RepInfoPlayer RepInfo;
foreach RepInfos(RepInfo)
{
if (RepInfo.UID.Uid == KFPRI.UniqueId.Uid)
{
return RepInfo;
}
}
foreach KFPRI.DynamicActors(class'YAS_RepInfoPlayer', RepInfo)
{
if (RepInfo.UID.Uid == KFPRI.UniqueId.Uid)
{
RepInfos.AddItem(RepInfo);
return RepInfo;
}
}
return None;
}
function Rank PlayerRank(YAS_RepInfoPlayer RepInfo, bool bAdmin)
{ {
local YAS_RepInfoRank RepInfo;
local Rank Rank; local Rank Rank;
local bool NeedClean, FoundRepInfo;
`Log_Trace(); `Log_Trace();
Rank = class'YAS_Types'.static.FromSystemRank(RankPlayer); Rank = class'YAS_Types'.static.FromSystemRank(RankPlayer);
NeedClean = false; if (RepInfo != None)
FoundRepInfo = false;
foreach RepInfos(RepInfo)
{ {
if (RepInfo == None) Rank = RepInfo.Rank;
{
NeedClean = true;
continue;
}
if (RepInfo.UID.Uid == KFPRI.UniqueId.Uid)
{
Rank = RepInfo.Rank;
FoundRepInfo = true;
break;
}
} }
if (!FoundRepInfo) if (bAdmin && !Rank.OverrideAdmin)
{
foreach KFPRI.DynamicActors(class'YAS_RepInfoRank', RepInfo)
{
if (RepInfo.UID.Uid == KFPRI.UniqueId.Uid)
{
Rank = RepInfo.Rank;
FoundRepInfo = true;
RepInfos.AddItem(RepInfo);
break;
}
}
}
if (NeedClean)
{
RepInfos.RemoveItem(None);
}
if (KFPRI.bAdmin && !Rank.OverrideAdmin)
{ {
Rank = class'YAS_Types'.static.FromSystemRank(RankAdmin); Rank = class'YAS_Types'.static.FromSystemRank(RankAdmin);
} }
@ -504,7 +495,14 @@ function DrawMenu()
DrawTextShadowHLeftVCenter(class'KFGFxHUD_ScoreboardWidget'.default.PlayerString, XPos + PlayerXPos, YPos, BoxH, FontScalar); DrawTextShadowHLeftVCenter(class'KFGFxHUD_ScoreboardWidget'.default.PlayerString, XPos + PlayerXPos, YPos, BoxH, FontScalar);
DrawTextShadowHLeftVCenter(class'KFGFxMenu_Inventory'.default.PerkFilterString, XPos + PerkXPos, YPos, BoxH, FontScalar); DrawTextShadowHLeftVCenter(class'KFGFxMenu_Inventory'.default.PerkFilterString, XPos + PerkXPos, YPos, BoxH, FontScalar);
DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.KillsString, XPos + KillsXPos, YPos, KillsWBox, BoxH, FontScalar); DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.KillsString, XPos + KillsXPos, YPos, KillsWBox, BoxH, FontScalar);
DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.AssistsString, XPos + AssistXPos, YPos, AssistWBox, BoxH, FontScalar); if (ShowDamage)
{
DrawTextShadowHVCenter(class'KFGFxTraderContainer_ItemDetails'.default.DamageTitle, XPos + AssistXPos, YPos, AssistWBox, BoxH, FontScalar);
}
else
{
DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.AssistsString, XPos + AssistXPos, YPos, AssistWBox, BoxH, FontScalar);
}
DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.DoshString, XPos + DoshXPos, YPos, DoshWBox, BoxH, FontScalar); DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.DoshString, XPos + DoshXPos, YPos, DoshWBox, BoxH, FontScalar);
DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.PingString, XPos + PingXPos, YPos, PingWBox, BoxH, FontScalar); DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.PingString, XPos + PingXPos, YPos, PingWBox, BoxH, FontScalar);
@ -580,6 +578,7 @@ function DrawPlayerEntry(Canvas C, int Index, float YOffset, float Height, float
local float FontScalar, XL, YL, PerkIconPosX, PerkIconPosY, PerkIconSize, PrestigeIconScale; local float FontScalar, XL, YL, PerkIconPosX, PerkIconPosY, PerkIconSize, PrestigeIconScale;
local float XPos, BoxWidth, RealPlayerWBox; local float XPos, BoxWidth, RealPlayerWBox;
local KFPlayerReplicationInfo KFPRI; local KFPlayerReplicationInfo KFPRI;
local YAS_RepInfoPlayer RepInfo;
local byte Level, PrestigeLevel; local byte Level, PrestigeLevel;
local Color ColorTMP; local Color ColorTMP;
local bool bIsZED; local bool bIsZED;
@ -599,7 +598,8 @@ function DrawPlayerEntry(Canvas C, int Index, float YOffset, float Height, float
KFPRI = KFPRIArray[Index]; KFPRI = KFPRIArray[Index];
Rank = PlayerRank(KFPRI); RepInfo = FindRepInfo(KFPRI);
Rank = PlayerRank(RepInfo, KFPRI.bAdmin);
if (KFGRI.bVersusGame) if (KFGRI.bVersusGame)
{ {
@ -797,11 +797,18 @@ function DrawPlayerEntry(Canvas C, int Index, float YOffset, float Height, float
// Kill // Kill
C.SetDrawColorStruct(Settings.Style.KillsTextColorMid); C.SetDrawColorStruct(Settings.Style.KillsTextColorMid);
DrawTextShadowHVCenter(string (KFPRI.Kills), KillsXPos, YOffset, KillsWBox, Height, FontScalar); DrawTextShadowHVCenter(GetNiceSize(KFPRI.Kills), KillsXPos, YOffset, KillsWBox, Height, FontScalar);
// Assist // Assist
C.SetDrawColorStruct(Settings.Style.AssistsTextColorMid); C.SetDrawColorStruct(Settings.Style.AssistsTextColorMid);
DrawTextShadowHVCenter(string (KFPRI.Assists), AssistXPos, YOffset, AssistWBox, Height, FontScalar); if (ShowDamage)
{
DrawTextShadowHVCenter((RepInfo == None ? "0" : GetNiceSize(RepInfo.DamageDealt)), AssistXPos, YOffset, AssistWBox, Height, FontScalar);
}
else
{
DrawTextShadowHVCenter(GetNiceSize(KFPRI.Assists), AssistXPos, YOffset, AssistWBox, Height, FontScalar);
}
// Dosh // Dosh
if (bIsZED) if (bIsZED)