Browse Source

first commit

master
Anton Tarasenko 3 years ago
commit
c8613dc519
  1. 101
      KFZedsReportMut.uc
  2. 38
      ReportInteraction.uc

101
KFZedsReportMut.uc

@ -0,0 +1,101 @@
/**
* 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
}

38
ReportInteraction.uc

@ -0,0 +1,38 @@
class ReportInteraction extends Interaction;
var KFZedsReportMut reportMutator;
event NotifyLevelChange()
{
if (master != none) {
master.RemoveInteraction(self);
}
}
function PostRender(Canvas canvas)
{
local float textWidth, textHeight;
local string maxZedsReport, spawnRateReport;
local string tagWhite, tagGreen;
if (canvas == none) return;
if (reportMutator == none) return;
tagWhite = Chr(27) $ Chr(250) $ Chr(250) $ Chr(250);
tagGreen = Chr(27) $ Chr(1) $ Chr(200) $ Chr(1);
maxZedsReport = tagWhite $ "Current total zeds"
@ tagGreen $ reportMutator.repCurrentTotalZeds
@ tagWhite $ "out of server's total"
@ tagGreen $ reportMutator.repGameInfo_MaxMonsters;
spawnRateReport = tagWhite $ "Current spawn rate is"
@ tagGreen $ reportMutator.repCurrentSpawnRate;
canvas.TextSize(maxZedsReport, textWidth, textHeight);
canvas.SetPos(0, 0);
canvas.DrawText(maxZedsReport);
canvas.SetPos(0, textHeight + 10);
canvas.DrawText(spawnRateReport);
}
defaultproperties
{
bVisible = true
}
Loading…
Cancel
Save