I’m trying to make a game manger, that can handle player stats and call on them. I currently want to be able to trigger events based on Elimination/Kill Streaks eg. end game when agent gets 25 kill streak.
Can anyone explain how I could do this below is the code i’m working. The Stats work currently just don’t understand how to link them.
PlayerStats := class<unique>():
var TotalEliminations : int = 0
var TotalDeaths : int = 0
var CurrentDistance : int = 0
var ElimStreak : int = 0
AddCurrentStreak(c:int):void=
set ElimStreak += c
AddElimination(e:int):void=
set TotalEliminations += e
AddDeath(d:int):void=
set TotalDeaths += d
SetCurrentDistance (distance:int):void=
set CurrentDistance = distance
block:
GetEliminationCount():int=
return TotalEliminations
GetDeathCount():int=
return TotalDeaths
GetElimStreak():int=
return ElimStreak
ResetElimStreak(c:int):void=
set ElimStreak = 0
Game_Manager := class(creative_device):
@editable
Team1Spawner: player_spawner_device = player_spawner_device{}
@editable
Team2Spawner: player_spawner_device = player_spawner_device{}
@editable
var Sentries : []sentry_device = array{}
@editable
StatsButton:button_device = button_device{}
var AllPlayersMap : [player]PlayerStats = map {}
OnBegin<override>()<suspends>:void=
Team1Spawner.SpawnedEvent.Subscribe(OnPlayerAdded)
Team2Spawner.SpawnedEvent.Subscribe(OnPlayerAdded)
GetPlayspace().PlayerRemovedEvent().Subscribe(OnPlayerRemoved)
for (Sentry : Sentries):
Sentry.EliminatedEvent.Subscribe(TestPlayerEliminated)
StatsButton.InteractedWithEvent.Subscribe(OnButtonClick)
OnButtonClick(Agent:agent):void=
Print("Click")
if(PlayerOBJ := player[Agent]):
if(AgentStats:= AllPlayersMap[PlayerOBJ]):
Print ("Current Streak{AgentStats.GetElimStreak()}")
OnPlayerAdded(NewPlayer:agent):void=
Print("new Player Added")
if(PlayerOBJ := player[NewPlayer]):
if(PlayerExist := AllPlayersMap[NewPlayer]):
else:
if(set AllPlayersMap[PlayerOBJ] = PlayerStats{}):
Print("Stats Set Up")
if(AgentStats:= AllPlayersMap[PlayerOBJ]):
Print("My Elims: {AgentStats.GetEliminationCount()}")
if (FortChar: fort_character := NewPlayer.GetFortCharacter[]):
FortChar.EliminatedEvent().Subscribe(OnEliminted)
OnEliminted(Result:elimination_result):void=
Eliminator := Result.EliminatingCharacter
Eliminated := Result.EliminatedCharacter
if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]):
AddElimination(EliminatorAgent)
AddCurrentStreak(EliminatorAgent)
CheckElimStreak(EliminatorAgent)
if (FortCharacter := Eliminated, EliminatedAgent := FortCharacter.GetAgent[]):
AddDeath(EliminatedAgent)
ResetElimStreak(EliminatedAgent)
TestPlayerEliminated(Agent: ?agent) : void =
Print("Sentry Down!")
if(PlayerOBJ := Agent?):
if(AgentStats:= AllPlayersMap[PlayerOBJ]):
AddCurrentStreak(PlayerOBJ)
CheckElimStreak(PlayerOBJ)
Print("Streak {AgentStats.GetEliminationCount()}")
AddElimination(Agent:agent):void=
if(PlayerOBJ := player[Agent]):
if(AgentStats:= AllPlayersMap[PlayerOBJ]):
Print("+ Elimination")
AgentStats.AddElimination(1)
AddDeath(Agent:agent):void=
if(PlayerOBJ := player[Agent]):
if(AgentStats:= AllPlayersMap[PlayerOBJ]):
Print("+ Death")
AgentStats.AddDeath(1)
AddCurrentStreak(Agent:agent):void=
if(PlayerOBJ := player[Agent]):
if(AgentStats:= AllPlayersMap[PlayerOBJ]):
Print("Streak {AgentStats.GetElimStreak()} ")
AgentStats.AddCurrentStreak(1)
ResetElimStreak(Agent:agent):void=
if(PlayerOBJ := player[Agent]):
if(AgentStats:= AllPlayersMap[PlayerOBJ]):
Print("Streak Reset")
AgentStats.ResetElimStreak
GetElimStreak(Agent:agent):void=
if(PlayerOBJ := player[Agent]):
if(AgentStats:= AllPlayersMap[PlayerOBJ]):
AgentStats.GetElimStreak
if (GetElimStreak )
CheckElimStreak(Agent:agent):void=
if(PlayerOBJ := player[Agent]):
if(AgentStats:= AllPlayersMap[PlayerOBJ]):
AgentStats.
OnPlayerRemoved(OutPlayer:player):void=
if(ActualPlayer := AllPlayersMap[OutPlayer]):
var TempAllPlayersMap:[player]PlayerStats = map{}
for (Key -> Value : AllPlayersMap, Key <> OutPlayer):
set TempAllPlayersMap = ConcatenateMaps(TempAllPlayersMap, map{Key => Value})
set AllPlayersMap = TempAllPlayersMap