first commit
This commit is contained in:
commit
c8613dc519
101
KFZedsReportMut.uc
Normal file
101
KFZedsReportMut.uc
Normal file
@ -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
Normal file
38
ReportInteraction.uc
Normal file
@ -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…
Reference in New Issue
Block a user