Estou aprendendo verse e criei um codigo de rank, funciona do jeito que eu quero mas esta pesado por causa do loop, quero substituir o loop do codigo por um gatilho mas não consigo, pfvr me ajuda
esse e meu codigo completo: using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Random }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Game }
using { /Fortnite.com/UI }
using { /Verse.org/Simulation/Tags }
using { /UnrealEngine.com/Temporary/UI }
using { /Verse.org/Colors/NamedColors }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Colors }
spawner := class(tag){}
sentries := class(tag){}
TextForUI(InText : string, Agent : agent) : message = " {Agent} Fez {InText} Kills"
TextForRank(Rank : string) : message = “{Rank}”
TextForRankLabel() : message = “rank atual:”
TextForInfo(NextRankKills : string, CurrentKills : string) : message = “próximo \nrank: {NextRankKills} pts”
RankDeviceManager := class(creative_device):
var PlayerMap : [player]RankDeviceManager = map{}
var CurrentRank : string = “”
@editable Tracker : tracker_device = tracker_device{}
@editable Spawners : []player_spawner_device = array{}
@editable Sentries : []sentry_device = array{}
@editable InicianteLabel : string = "INICIANTE"
@editable BronzeLabel : string = "BRONZE"
@editable PrataLabel : string = "PRATA"
@editable OuroLabel : string = "OURO"
@editable PlatinaLabel : string = "PLATINA"
@editable DiamanteLabel : string = "DIAMANTE"
@editable EliteLabel : string = "ELITE"
@editable LendaLabel : string = "LENDA"
@editable SurrealLabel : string = "SURREAL"
@editable TopWinnerLabel : string = "TOP WINNER"
@editable InicianteColor : color = color{R := 0.3, G := 0.0, B := 0.0}
@editable BronzeColor : color = color{R := 0.85, G := 0.45, B := 0.15}
@editable PrataColor : color = color{R := 0.9, G := 0.8, B := 0.9}
@editable OuroColor : color = color{R := 1.0, G := 0.8, B := 0.1}
@editable PlatinaColor : color = color{R := 0.65, G := 0.85, B := 1.0}
@editable DiamanteColor : color = color{R := 0.1, G := 0.9, B := 1.0}
@editable EliteColor : color = color{R := 0.7, G := 0.1, B := 0.9}
@editable LendaColor : color = color{R := 1.0, G := 0.6, B := 0.1}
@editable SurrealColor : color = color{R := 0.9, G := 0.1, B := 0.1}
@editable TopWinnerColor : color = color{R := 0.0, G := 1.0, B := 1.0}
@editable BronzePoints : int = 45
@editable PrataPoints : int = 150
@editable OuroPoints : int = 300
@editable PlatinaPoints : int = 525
@editable DiamantePoints : int = 825
@editable ElitePoints : int = 1200
@editable LendaPoints : int = 1700
@editable SurrealPoints : int = 2400
@editable TopWinnerPoints : int = 3000
GetRankColor(Rank : string) : color =
case (Rank):
"INICIANTE" => InicianteColor
"BRONZE" => BronzeColor
"PRATA" => PrataColor
"OURO" => OuroColor
"PLATINA" => PlatinaColor
"DIAMANTE" => DiamanteColor
"ELITE" => EliteColor
"LENDA" => LendaColor
"SURREAL" => SurrealColor
"TOP WINNER" => TopWinnerColor
_ => color{R := 1.0, G := 1.0, B := 1.0} # Default color for unknown ranks
InitSpawners():void =
for (Spawner : Spawners):
Spawner.SpawnedEvent.Subscribe(OnPlayerSpawned)
OnPlayerSpawned(NewPlayer : agent):void =
spawn{OnPlayerAdded(NewPlayer)}
OnBegin<override>()<suspends>:void =
InitSpawners()
GetPlayspace().PlayerRemovedEvent().Subscribe(OnPlayerRemoved)
RankSpawnLoop(Player : player, RankLabelBlock : text_block, RankTextBlock : text_block, RankShadowBlock : text_block, InfoTextBlock : text_block, Agent : agent)<suspends>:void =
loop:
Sleep(5.0)
if (PlayerUi := GetPlayerUI[Player]):
Kills := Tracker.GetValue(Player)
var NewRank : string = ""
var NextRankKills : string = ""
if (Kills < BronzePoints):
set NewRank = "INICIANTE"
set NextRankKills = ToString(BronzePoints)
else if (Kills >= BronzePoints and Kills < PrataPoints):
set NewRank = "BRONZE"
set NextRankKills = ToString(PrataPoints)
else if (Kills >= PrataPoints and Kills < OuroPoints):
set NewRank = "PRATA"
set NextRankKills = ToString(OuroPoints)
else if (Kills >= OuroPoints and Kills < PlatinaPoints):
set NewRank = "OURO"
set NextRankKills = ToString(PlatinaPoints)
else if (Kills >= PlatinaPoints and Kills < DiamantePoints):
set NewRank = "PLATINA"
set NextRankKills = ToString(DiamantePoints)
else if (Kills >= DiamantePoints and Kills < ElitePoints):
set NewRank = "DIAMANTE"
set NextRankKills = ToString(ElitePoints)
else if (Kills >= ElitePoints and Kills < LendaPoints):
set NewRank = "ELITE"
set NextRankKills = ToString(LendaPoints)
else if (Kills >= LendaPoints and Kills < SurrealPoints):
set NewRank = "LENDA"
set NextRankKills = ToString(SurrealPoints)
else if (Kills >= SurrealPoints and Kills < TopWinnerPoints):
set NewRank = "SURREAL"
set NextRankKills = ToString(TopWinnerPoints)
else if (Kills >= TopWinnerPoints):
set NewRank = "TOP WINNER"
set NextRankKills = ToString(TopWinnerPoints)
StoredRank := GetPlayerRank(Player)
if (NewRank <> StoredRank):
SetPlayerRank(Player, NewRank)
RankLabelBlock.SetText(TextForRankLabel())
RankLabelBlock.SetTextColor(color{R := 0.6, G := 0.6, B := 0.6}) # Gray for label
RankTextBlock.SetText(TextForRank(NewRank))
RankTextBlock.SetTextColor(GetRankColor(NewRank))
RankShadowBlock.SetText(TextForRank(NewRank))
RankShadowBlock.SetTextColor(color{R := 0.0, G := 0.0, B := 0.0}) # Black for shadow
InfoTextBlock.SetText(TextForInfo(NextRankKills, ToString(Kills)))
InfoTextBlock.SetTextColor(color{R := 0.6, G := 0.6, B := 0.6}) # Gray for info
GetPlayerRank(Player : player) : string =
if (Data := PlayerMap[Player]):
return Data.CurrentRank
return ""
SetPlayerRank(Player : player, Rank : string):void =
if (Data := PlayerMap[Player]):
set Data.CurrentRank = Rank
OnPlayerAdded(NewPlayer : agent)<suspends>:void =
if (PlayerObj := player[NewPlayer]):
if (PlayerExists := PlayerMap[NewPlayer]):
else:
if (set PlayerMap[PlayerObj] = RankDeviceManager{}):
if(PlayerUI := GetPlayerUI[PlayerObj]):
Kills := Tracker.GetValue(PlayerObj)
var InitialRank : string = ""
var NextRankKills : string = ""
if (Kills < BronzePoints):
set InitialRank = "INICIANTE"
set NextRankKills = ToString(BronzePoints)
else if (Kills >= BronzePoints and Kills < PrataPoints):
set InitialRank = "BRONZE"
set NextRankKills = ToString(PrataPoints)
else if (Kills >= PrataPoints and Kills < OuroPoints):
set InitialRank = "PRATA"
set NextRankKills = ToString(OuroPoints)
else if (Kills >= OuroPoints and Kills < PlatinaPoints):
set InitialRank = "OURO"
set NextRankKills = ToString(PlatinaPoints)
else if (Kills >= PlatinaPoints and Kills < DiamantePoints):
set InitialRank = "PLATINA"
set NextRankKills = ToString(DiamantePoints)
else if (Kills >= DiamantePoints and Kills < ElitePoints):
set InitialRank = "DIAMANTE"
set NextRankKills = ToString(ElitePoints)
else if (Kills >= ElitePoints and Kills < LendaPoints):
set InitialRank = "ELITE"
set NextRankKills = ToString(LendaPoints)
else if (Kills >= LendaPoints and Kills < SurrealPoints):
set InitialRank = "LENDA"
set NextRankKills = ToString(SurrealPoints)
else if (Kills >= SurrealPoints and Kills < TopWinnerPoints):
set InitialRank = "SURREAL"
set NextRankKills = ToString(TopWinnerPoints)
else if (Kills >= TopWinnerPoints):
set InitialRank = "TOP WINNER"
set NextRankKills = ToString(TopWinnerPoints)
var RankLabelBlock : text_block = text_block{DefaultTextColor := color{R := 0.6, G := 0.6, B := 0.6}}
var RankTextBlock : text_block = text_block{DefaultTextColor := GetRankColor(InitialRank)}
var RankShadowBlock : text_block = text_block{DefaultTextColor := color{R := 0.0, G := 0.0, B := 0.0}} # Black shadow
var InfoTextBlock : text_block = text_block{DefaultTextColor := color{R := 0.6, G := 0.6, B := 0.6}}
MyCanvas := canvas:
Slots := array:
canvas_slot: # Slot for "RANK:"
Anchors := anchors{Minimum := vector2{X := 0.025, Y := 0.32}, Maximum := vector2{X := 0.025, Y := 0.32}}
Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0}
Alignment := vector2{X := 0.025, Y := 0.32}
SizeToContent := true
Widget := RankLabelBlock
canvas_slot: # Slot for shadow of rank name
Anchors := anchors{Minimum := vector2{X := 0.026, Y := 0.351}, Maximum := vector2{X := 0.026, Y := 0.351}}
Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0}
Alignment := vector2{X := 0.026, Y := 0.351}
SizeToContent := true
Widget := RankShadowBlock
canvas_slot: # Slot for rank name
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 := RankTextBlock
canvas_slot: # Slot for info
Anchors := anchors{Minimum := vector2{X := 0.025, Y := 0.42}, Maximum := vector2{X := 0.025, Y := 0.42}}
Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0}
Alignment := vector2{X := 0.025, Y := 0.42}
SizeToContent := true
Widget := InfoTextBlock
PlayerUI.AddWidget(MyCanvas)
RankLabelBlock.SetText(TextForRankLabel())
RankLabelBlock.SetTextColor(color{R := 0.6, G := 0.6, B := 0.6})
RankTextBlock.SetText(TextForRank(InitialRank))
RankTextBlock.SetTextColor(GetRankColor(InitialRank))
RankShadowBlock.SetText(TextForRank(InitialRank))
RankShadowBlock.SetTextColor(color{R := 0.0, G := 0.0, B := 0.0}) # Black shadow
InfoTextBlock.SetText(TextForInfo(NextRankKills, ToString(Kills)))
InfoTextBlock.SetTextColor(color{R := 0.6, G := 0.6, B := 0.6})
SetPlayerRank(PlayerObj, InitialRank)
spawn{RankSpawnLoop(PlayerObj, RankLabelBlock, RankTextBlock, RankShadowBlock, InfoTextBlock, NewPlayer)}
OnPlayerRemoved(PlayerLeaving : player):void =
if (ActualPlayer := PlayerMap[PlayerLeaving]):
var TempPlayerMap : [player]RankDeviceManager = map{}
for (Key -> Value : PlayerMap, Key <> PlayerLeaving):
set TempPlayerMap = ConcatenateMaps(TempPlayerMap, map{Key => Value})
set PlayerMap = TempPlayerMap