Mutator for debugging purposes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

97 lines
2.8 KiB

/**
* 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
config(KFZedsReport);
// How often should we update our information?
var config float updateInterval;
// Over what interval do we count average spawn rate?
var config float smoothingInterval;
var bool interactionAdded;
var array<float> zedSpawnTimes;
var int repCurrentTotalZeds, repGameInfo_MaxMonsters;
var float repCurrentSpawnRate;
replication {
reliable if (role == ROLE_Authority)
repCurrentTotalZeds, repGameInfo_MaxMonsters, repCurrentSpawnRate;
}
function PostBeginPlay() {
if (updateInterval <= 0) {
updateInterval = 0.25;
}
if (smoothingInterval <= 0) {
smoothingInterval = 10.0;
}
SetTimer(updateInterval, true);
}
function bool CheckReplacement(Actor other, out byte bSuperRelevant) {
if (Monster(other) != none) {
zedSpawnTimes[zedSpawnTimes.length] = level.timeSeconds;
}
return true;
}
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) {
myInteraction.reportMutator = self;
interactionAdded = true;
}
}
function Timer() {
local int i;
local float cutOffTime;
local Monster nextMonster;
cutOffTime = level.timeSeconds - smoothingInterval;
while (i < zedSpawnTimes.length) {
if (zedSpawnTimes[i] < cutOffTime) {
zedSpawnTimes.Remove(i, 1);
} else {
i += 1;
}
}
// Update replicated values
repGameInfo_MaxMonsters = KFGameType(level.game).maxMonsters;
repCurrentSpawnRate = zedSpawnTimes.length / smoothingInterval;
repCurrentTotalZeds = 0;
foreach level.DynamicActors(class'Monster', nextMonster) {
if (nextMonster.health > 0) {
repCurrentTotalZeds += 1;
}
}
}
defaultproperties {
// Mutator description
GroupName = "Test mutatros"
FriendlyName = "Zed report mutator"
Description = "Mutator that provides clients with information about how many zeds (and their spawn rate) are present on the map."
bAddToServerPackages = true
bAlwaysRelevant = true
RemoteRole = ROLE_SimulatedProxy
// Default config values
updateInterval = 0.25
smoothingInterval = 10.0
}