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.
101 lines
2.7 KiB
101 lines
2.7 KiB
3 years ago
|
/**
|
||
|
* Mutator that replicates and diplayes on clients information about how many
|
||
|
* zeds are spawned and with what recent spawn rate.
|
||
|
*/
|
||
|
class KFZedsReportMut extends Mutator;
|
||
|
|
||
|
// 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
|
||
|
}
|