I found this free code online and it seems to be working for solos but it doesn’t work for teams even though it has a “useteam” function and team damage doesn’t track. By the way i know nothing about verse just hoping someone can be helpful and maybe re write it for me.
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Game }
using { /Fortnite.com/Teams }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
UTILS
TextToMessage(Text : string):message=“{Text}”
(MessageDevice : hud_message_device).SetText(Text : string):void=
MessageDevice.SetText(TextToMessage(Text))
UEFN snippets, by BrendannnD Sep 07, 2023 •Last Updated: Sep 07, 2023 #######################################################
(Map:[keytype]valuetype where keytype:subtype(comparable), valuetype:type).RemoveKey(ElementToRemove:keytype):[keytype]valuetype=
var NewMap:[keytype]valuetype = map{}
for (Key → Value : Map, Key <> ElementToRemove):
set NewMap = ConcatenateMaps(NewMap, map{Key => Value})
return NewMap
Surge Trigger Class
surge_start_trigger:= class:
@editable
Trigger:trigger_device = trigger_device{}
@editable
DamageThreshold:float = 150.0
@editable
PlayersAboveToActivate:int = 30
var Backref:VD_StormSurge = VD_StormSurge{}
Init(B:VD_StormSurge):void =
set Backref = B
Trigger.TriggeredEvent.Subscribe(OnTriggered)
OnTriggered(MaybePlayer:?agent):void =
Backref.StartSurge(DamageThreshold,PlayersAboveToActivate)
Storm Surge Main Logic
VD_StormSurge := class(creative_device):
@editable
UseTeams:logic = false
@editable
StormSurgeDamageTickTimer:float = 5.0
@editable
StormSurgeDamageAmount:float = 10.0
@editable
StormSurgeStartTriggers:[]surge_start_trigger = array{}
@editable
StormSurgeGlobalEndTrigger:trigger_device = trigger_device{}
@editable
StormSurgeVFX:trigger_device = trigger_device{}
@editable
StormSurgeStarts_HMD:hud_message_device = hud_message_device {}
@editable
StormSurgeActive_HMD:hud_message_device = hud_message_device {}
@editable
StormSurgeAbove_HMD:hud_message_device = hud_message_device {}
@editable
StormSurgeBelow_HMD:hud_message_device = hud_message_device {}
@editable
GuardSpawners:[]guard_spawner_device = array{}
var PlayerDamageListeners:[player][]cancelable = map{}
var PlayersDamageDealt:[player]float = map{}
var TeamDamageDealt:[team]float = map{}
var CurrentThreshold:float = 0.0
var PlayerThreshold:int = 0
var MaybeTeamCollection:?fort_team_collection = false
OnBegin<override>()<suspends>:void=
#populate teams
if(UseTeams?):
set MaybeTeamCollection = option{GetPlayspace().GetTeamCollection()}
ZeroOutTeamDamage()
#init players on game start
for (InPlayer : GetPlayspace().GetPlayers()):
OnPlayerAdded(InPlayer)
#connect surge ends trigger
StormSurgeGlobalEndTrigger.TriggeredEvent.Subscribe(EndSurge)
#connect damaged guards
for(GS:GuardSpawners):
GS.SpawnedEvent.Subscribe(OnGuardSpawned)
# Subscribe to new players joining the game
GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded)
GetPlayspace().PlayerRemovedEvent().Subscribe(OnPlayerRemoved)
# Connect Surge Triggers
for(T:StormSurgeStartTriggers):
T.Init(Self)
#process the storm surge loop
loop:
if:
CurrentThreshold > 0.0
then:
ProcessStormSurge()
#check if the player threshold is above or below
Total := CountPlayersAlive()
if(Total <= PlayerThreshold):
EndSurge(false)
Sleep(StormSurgeDamageTickTimer)
CountPlayersAlive():int =
var Total:int = 0
for(InPlayer : GetPlayspace().GetPlayers()):
if(InPlayer.IsActive[]):
set Total += 1
Total
ProcessStormSurge()<suspends>:void =
for(P->D:PlayersDamageDealt, F := P.GetFortCharacter[]):
if(D < CurrentThreshold):
F.Damage(StormSurgeDamageAmount)
if(P.IsActive[]): #sleep and players loop, needs to check for the player if active
StormSurgeVFX.Trigger(P)
Sleep(0.1)
OnPlayerAdded(InPlayer:player):void =
if:
set PlayerDamageListeners[InPlayer] = array{}
F := InPlayer.GetFortCharacter[]
then:
L_HealthDamaged := F.DamagedEvent().Subscribe(OnDamagedEvent)
L_ShieldDamaged := F.DamagedShieldEvent().Subscribe(OnDamagedEvent)
#save for later
if:
set PlayerDamageListeners[InPlayer] += array{L_HealthDamaged}
set PlayerDamageListeners[InPlayer] += array{L_ShieldDamaged}
#add to map
if:
set PlayersDamageDealt[InPlayer] = 0.0
OnPlayerRemoved(InPlayer:player):void =
#stop listening
if:
All_L := PlayerDamageListeners[InPlayer]
then:
for(L:All_L):
L.Cancel()
#remove from maps (listeners and surge damage dealt)
set PlayerDamageListeners = PlayerDamageListeners.RemoveKey(InPlayer)
set PlayersDamageDealt = PlayersDamageDealt.RemoveKey(InPlayer)
StartSurge(Threshold:float, PlayersAboveToActivate:int):void =
Total := CountPlayersAlive()
set PlayerThreshold = Total
if:
#above the player threshold
Total > PlayersAboveToActivate
then:
set CurrentThreshold = Threshold
#clear out team damage
ZeroOutTeamDamage()
#clear all players damage
for(P->D:PlayersDamageDealt):
if:
set PlayersDamageDealt[P] = 0.0
then:
IncreaseDamageCounter(P,0.0)
#show UI
StormSurgeStarts_HMD.Show()
StormSurgeActive_HMD.Show()
ZeroOutTeamDamage():void =
if(TeamCollection:=MaybeTeamCollection?):
for(T:TeamCollection.GetTeams(),TeamDamageDealt[T] = 0):
#zero out the team damage
EndSurge(MaybePlayer:?agent):void =
set CurrentThreshold = 0.0
set PlayerThreshold = 0
#clear the UI layers is connected on the HUD devices via the clear layer event from StormSurgeGlobalEndTrigger
OnDamagedEvent(DamRes:damage_result):void =
Print("Damaged event registered")
# look for damage receiving player
if:
DamagedCharacter:fort_character = fort_character[DamRes.Target]
DamagedAgent:agent = DamagedCharacter.GetAgent[]
DamAmount:float = DamRes.Amount
then:
Print("Damaged event Resolved")
# look for damage dealing player
if:
DamagingInstigator := DamRes.Instigator?
DamagingAgent := DamagingInstigator.GetInstigatorAgent[]
DamagingGameFortChar := DamagingAgent.GetFortCharacter[]
DamagedAgent <> DamagingAgent
then:
#if the damaging entity was a player, add the threshold
if:
P := player[DamagingAgent]
then:
if(UseTeams?):
IncreaseTeamDamageCounter(P,DamAmount)
else:
IncreaseDamageCounter(P,DamAmount)
OnGuardSpawned(GuardAgent:agent):void =
if:
F := GuardAgent.GetFortCharacter[]
then:
F.DamagedEvent().Subscribe(OnDamagedEvent)
# TODO remove the listeners
IncreaseDamageCounter(InPlayer:player, Amount:float):void =
if:
set PlayersDamageDealt[InPlayer] += Amount
CurDam := PlayersDamageDealt[InPlayer]
then:
Diff := Abs(CurrentThreshold - CurDam)
#update the UI
if:
CurDam >= CurrentThreshold
DiffInt := Round[Diff]
then:
StormSurgeAbove_HMD.SetText("ABOVE {DiffInt}")
StormSurgeAbove_HMD.Show(InPlayer)
else if:
DiffInt := Round[Diff]
then:
StormSurgeBelow_HMD.SetText("BELOW {DiffInt}")
StormSurgeBelow_HMD.Show(InPlayer)
IncreaseTeamDamageCounter(InTeamPlayer:player, Amount:float):void =
if:
TeamCollection:=MaybeTeamCollection?
MyTeam := TeamCollection.GetTeam[InTeamPlayer]
set TeamDamageDealt[MyTeam] += Amount
TeamTotal := TeamDamageDealt[MyTeam]
then:
#update all team members
for(A:TeamCollection.GetAgents[MyTeam], InPlayer:=player[A]):
if:
set PlayersDamageDealt[InPlayer] = TeamTotal
CurDam := PlayersDamageDealt[InPlayer]
then:
Diff := Abs(CurrentThreshold - CurDam)
#update the UI
if:
CurDam >= CurrentThreshold
DiffInt := Round[Diff]
then:
StormSurgeAbove_HMD.SetText("ABOVE {DiffInt}")
StormSurgeAbove_HMD.Show(InPlayer)
else if:
DiffInt := Round[Diff]
then:
StormSurgeBelow_HMD.SetText("BELOW {DiffInt}")
StormSurgeBelow_HMD.Show(InPlayer)