Here is my current code:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /Verse.org/Random }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Game }
using { /Verse.org/Simulation/Tags }
using { /Fortnite.com/UI }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /UnrealEngine.com/Temporary/Diagnostics }
using {/UnrealEngine.com/Temporary/UI }
using { /Verse.org/Colors/NamedColors }
# See https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse for how to create a verse device.
# A Verse-authored creative device that can be placed in a level
spawner := class(tag){}
sentries := class(tag){}
TextForUI< localizes>(InText : string, Agent : agent) : message = "💀 {Agent}'s Kills: {InText}"
TextForUI2< localizes>(InText : string) : message = "🎯 Goal For \n Next Rank: {InText}"
KillTrackUI := class(creative_device):
var playerMap : [player]KillTrackUI = map{}
var CurrentGoal : int = 0
@editable Tracker : tracker_device = tracker_device{}
@editable Bronze : hud_message_device = hud_message_device{}
@editable SilverR : hud_message_device = hud_message_device{}
InitSpawners():void =
Spawners := GetCreativeObjectsWithTag(spawner{})
for (Obj : Spawners):
if (Spawner := player_spawner_device[Obj]):
Spawner.SpawnedEvent.Subscribe(OnPlayerAdded)
# Runs when the device is started in a running game
OnBegin< override>()< suspends>:void=
# TODO: Replace this with your code
Print("Kill ui device has started")
InitSpawners()
GetPlayspace().PlayerRemovedEvent().Subscribe(OnPlayerRemoved)
SpawnKillLoop(Player : player, TextBlock : text_block, Agent : agent)<suspends>:void =
loop:
Sleep(0.1)
if (AgentStats := playerMap[Player]):
TextBlock.SetText(TextForUI("{Tracker.GetValue(Player)}", Agent))
RankSpawnLoop(Player: player, Agent : agent, TextBlock : text_block)<suspends>:void =
loop:
Sleep(0.1)
if (Tracker.GetValue(Player) >= 15):
if (PlayerUi := GetPlayerUI[Player]):
Bronze.Show(Agent)
TextBlock.SetText(TextForUI2("50"))
break
loop:
Sleep(0.1)
if (Tracker.GetValue(Player) >= 50):
if (PlayerUi := GetPlayerUI[Player]):
SilverR.Show(Agent)
TextBlock.SetText(TextForUI2("150"))
break
OnPlayerAdded(NewPlayer : agent): void =
Print("Player Added")
if (PlayerObj := player[NewPlayer]):
if (PlayerExists := playerMap[NewPlayer]):
else:
if (set playerMap[PlayerObj] = KillTrackUI{}):
if(AgentStats := playerMap[PlayerObj]):
if (FortChar:fort_character := NewPlayer.GetFortCharacter[]):
if (PlayerUi := GetPlayerUI[PlayerObj]):
var TextBlock2 : text_block = text_block{DefaultTextColor:= Beige}
#Does Player Have Rank?
if (Tracker.GetValue(PlayerObj) < 15):
MyCanvas2:=canvas:
Slots:=array:
canvas_slot:
Anchors := anchors{Minimum := vector2{X := 0.025, Y := 0.35}, Maximum := vector2{X := 0.025, Y := 0.35}}
Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0}
Alignment := vector2{X := 0.025, Y := 0.35}
SizeToContent := true
Widget := TextBlock2
Print("Canvas Should be added")
PlayerUi.AddWidget(MyCanvas2)
TextBlock2.SetText(TextForUI2("15"))
#Check If Is On Bronze Rank
if (Tracker.GetValue(PlayerObj) >= 15):
Bronze.Show(NewPlayer)
MyCanvas2:=canvas:
Slots:=array:
canvas_slot:
Anchors := anchors{Minimum := vector2{X := 0.025, Y := 0.35}, Maximum := vector2{X := 0.025, Y := 0.35}}
Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0}
Alignment := vector2{X := 0.025, Y := 0.35}
SizeToContent := true
Widget := TextBlock2
Print("Canvas Should be added")
PlayerUi.AddWidget(MyCanvas2)
TextBlock2.SetText(TextForUI2("50"))
if (Tracker.GetValue(PlayerObj) >= 50):
SilverR.Show(NewPlayer)
TextBlock2.SetText(TextForUI2("150"))
#Creating Total Kills Ui
var TextBlock : text_block = text_block{DefaultTextColor:= White}
MyCanvas:=canvas:
Slots:=array:
canvas_slot:
Anchors := anchors{Minimum := vector2{X := 0.5, Y := 0.05}, Maximum := vector2{X := 0.5, Y := 0.05}}
Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0}
Alignment := vector2{X := 0.5, Y := 0.05}
SizeToContent := true
Widget := TextBlock
Print("Canvas Should be added")
PlayerUi.AddWidget(MyCanvas)
spawn{SpawnKillLoop(PlayerObj, TextBlock, NewPlayer)}
spawn{RankSpawnLoop(PlayerObj, NewPlayer, TextBlock2)}
OnPlayerRemoved(PlayerLeave : player):void =
if(ActualPlayer := playerMap[PlayerLeave]):
var TempPlayerMap:[player]KillTrackUI = map{}
for(Key -> Value : playerMap, Key <> PlayerLeave):
set TempPlayerMap = ConcatenateMaps(TempPlayerMap, map{Key => Value})
set playerMap = TempPlayerMap