diff --git a/KFZedsReportMut.uc b/Classes/KFZedsReportMut.uc similarity index 74% rename from KFZedsReportMut.uc rename to Classes/KFZedsReportMut.uc index b736ab8..4269cad 100644 --- a/KFZedsReportMut.uc +++ b/Classes/KFZedsReportMut.uc @@ -1,8 +1,12 @@ /** * Mutator that replicates and diplayes on clients information about how many * zeds are spawned and with what recent spawn rate. + * + * Author: dkanus + * Home repo: https://insultplayers.ru/git/dkanus/KFZedsReport */ -class KFZedsReportMut extends Mutator; +class KFZedsReportMut extends Mutator + config(KFZedsReport); // How often should we update our information? var config float updateInterval; @@ -13,17 +17,15 @@ var bool interactionAdded; var array zedSpawnTimes; -var int repCurrentTotalZeds, repGameInfo_MaxMonsters; -var float repCurrentSpawnRate; +var int repCurrentTotalZeds, repGameInfo_MaxMonsters; +var float repCurrentSpawnRate; -replication -{ - reliable if(Role == ROLE_Authority) +replication { + reliable if (role == ROLE_Authority) repCurrentTotalZeds, repGameInfo_MaxMonsters, repCurrentSpawnRate; } -function PostBeginPlay() -{ +function PostBeginPlay() { if (updateInterval <= 0) { updateInterval = 0.25; } @@ -33,44 +35,40 @@ function PostBeginPlay() SetTimer(updateInterval, true); } -function bool CheckReplacement(Actor other, out byte bSuperRelevant) -{ +function bool CheckReplacement(Actor other, out byte bSuperRelevant) { if (Monster(other) != none) { zedSpawnTimes[zedSpawnTimes.length] = level.timeSeconds; } return true; } -simulated function Tick(float delta) -{ +simulated function Tick(float delta) { local ReportInteraction myInteraction; - local Player localPlayer; + local Player localPlayer; + if (role == Role_AUTHORITY) return; if (interactionAdded) return; localPlayer = level.GetLocalPlayerController().player; if (localPlayer == none) return; myInteraction = ReportInteraction(localPlayer.interactionMaster - .AddInteraction("KFZedsReport.ReportInteraction", localPlayer)); - if (myInteraction != none) - { + .AddInteraction(string(class'ReportInteraction'), localPlayer)); + if (myInteraction != none) { myInteraction.reportMutator = self; interactionAdded = true; } } -function Timer() -{ - local int i; - local float cutOffTime; - local Monster nextMonster; +function Timer() { + local int i; + local float cutOffTime; + local Monster nextMonster; + cutOffTime = level.timeSeconds - smoothingInterval; - while (i < zedSpawnTimes.length) - { + while (i < zedSpawnTimes.length) { if (zedSpawnTimes[i] < cutOffTime) { zedSpawnTimes.Remove(i, 1); - } - else { + } else { i += 1; } } @@ -78,16 +76,14 @@ function Timer() repGameInfo_MaxMonsters = KFGameType(level.game).maxMonsters; repCurrentSpawnRate = zedSpawnTimes.length / smoothingInterval; repCurrentTotalZeds = 0; - foreach level.DynamicActors(class'Monster', nextMonster) - { + foreach level.DynamicActors(class'Monster', nextMonster) { if (nextMonster.health > 0) { repCurrentTotalZeds += 1; } } } -defaultproperties -{ +defaultproperties { // Mutator description GroupName = "Test mutatros" FriendlyName = "Zed report mutator" diff --git a/ReportInteraction.uc b/Classes/ReportInteraction.uc similarity index 74% rename from ReportInteraction.uc rename to Classes/ReportInteraction.uc index 02bfeca..ac8f813 100644 --- a/ReportInteraction.uc +++ b/Classes/ReportInteraction.uc @@ -1,19 +1,22 @@ +/** + * Author: dkanus + * Home repo: https://insultplayers.ru/git/dkanus/KFZedsReport + */ class ReportInteraction extends Interaction; var KFZedsReportMut reportMutator; -event NotifyLevelChange() -{ +event NotifyLevelChange() { if (master != none) { master.RemoveInteraction(self); } } -function PostRender(Canvas canvas) -{ - local float textWidth, textHeight; - local string maxZedsReport, spawnRateReport; - local string tagWhite, tagGreen; +function PostRender(Canvas canvas) { + local float textWidth, textHeight; + local string maxZedsReport, spawnRateReport; + local string tagWhite, tagGreen; + if (canvas == none) return; if (reportMutator == none) return; @@ -32,7 +35,6 @@ function PostRender(Canvas canvas) canvas.DrawText(spawnRateReport); } -defaultproperties -{ +defaultproperties { bVisible = true } \ No newline at end of file diff --git a/Configs/KFZedsReport.ini b/Configs/KFZedsReport.ini new file mode 100644 index 0000000..54a7cab --- /dev/null +++ b/Configs/KFZedsReport.ini @@ -0,0 +1,6 @@ +[KFZedsReport.KFZedsReportMut] +;= Home repo: https://insultplayers.ru/git/dkanus/KFZedsReport +;= How often should we update our information? +updateInterval=0.25 +;= Over what interval do we count average spawn rate? +smoothingInterval=10.0