|
|
|
@ -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; |
|
|
|
@ -16,14 +20,12 @@ var array<float> zedSpawnTimes;
|
|
|
|
|
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; |
|
|
|
|
|
|
|
|
|
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() |
|
|
|
|
{ |
|
|
|
|
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" |