Script completo
Il codice seguente è lo script completo per un gioco a eliminazione che fa avanzare i giocatori di un team attraverso una serie di armi.
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Game }
using { /Fortnite.com/Teams }
using { /Verse.org/Simulation }
player_map := [player]int # Questo è un alias tipo!
team_elimination_game := class(creative_device):
@editable
EndGameDevice : end_game_device = end_game_device{}
@editable
var WeaponGranters : []item_granter_device = array{}
@editable
var PlayerSpawners : []player_spawner_device = array{}
@editable
var Sentries : []sentry_device = array{}
var EliminationsToEndGame : int = 0
var Teams : []team = array{}
# Mappa di mappe del team, dove la chiave è il team e il valore è una mappa di
# un giocatore->int key-value pairs
var TeamMap : [team]player_map = map{}
OnBegin<override>()<suspends> : void =
set Teams = GetPlayspace().GetTeamCollection().GetTeams()
set EliminationsToEndGame = WeaponGranters.Length
Print("Avvio dell'assegnazione dei giocatori")
PopulateTeamsAndPlayers()
for (Spawner : PlayerSpawners):
Spawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # Sottoscrivi a ciascuna pedana di generazione giocatore
for (Sentry : Sentries):
Sentry.EliminatedEvent.Subscribe(TestPlayerEliminated) # Sottoscrivi a ogni sentinella
# Sottoscrivi ai nuovi giocatori che si uniscono alla partita
GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded)
PopulateTeamsAndPlayers() : void =
Print("Avvio della popolazione dei giocatori")
for (Team : Teams, TeamPlayers := GetPlayspace().GetTeamCollection().GetAgents[Team]):
var PlayerMap : player_map = map {}
for (Agent : TeamPlayers, TeamPlayer := player[Agent], FortCharacter := Agent.GetFortCharacter[]):
if(set PlayerMap[TeamPlayer] = 0, WeaponTier := PlayerMap[TeamPlayer]):
Print("Giocatore assegnato a PlayerMap con livello {WeaponTier}")
FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated)
if(set TeamMap[Team] = PlayerMap):
Print("Questo team è stato impostato con successo nella TeamMap")
# Gestisce un nuovo giocatore che partecipa alla partita
OnPlayerAdded(InPlayer : player) : void =
Print("Si è unito un nuovo giocatore!")
if:
Team := GetPlayspace().GetTeamCollection().GetTeam[InPlayer]
FortCharacter := InPlayer.GetFortCharacter[]
var PlayerMap : player_map = TeamMap[Team]
set PlayerMap[InPlayer] = 0
set TeamMap[Team] = PlayerMap
then:
GrantWeapon(option{InPlayer}, 0)
Print(“Impostazione di un nuovo livello di arma del giocatore su 0 nella TeamMap")
FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated) # sottoscrivi all'evento di eliminazione di questo giocatore
# Assegna ai giocatori le armi in base al loro WeaponTier quando si generano
OnPlayerSpawn(InPlayer : agent) : void =
Print("Un giocatore è stato appena generato!")
if:
PlayerTeam := GetPlayspace().GetTeamCollection().GetTeam[InPlayer]
WeaponTier:int := TeamMap[PlayerTeam][InPlayer]
then:
GrantWeapon(option{InPlayer}, WeaponTier)
Print("Al giocatore generato è stata conferita una pistola di livello {WeaponTier}")
OnPlayerEliminated(Result : elimination_result) : void =
Print("Un giocatore è stato eliminato!")
Eliminator := Result.EliminatingCharacter
if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]):
GiveNextWeapon(EliminatorAgent)
# Consente di eseguire il test di GiveNextWeapon simulando le sentinelle come giocatori
TestPlayerEliminated(Agent: ?agent) : void =
Print("Sentinella giù!")
if(TeamPlayer := Agent?):
GiveNextWeapon(TeamPlayer)
GiveNextWeapon(EliminatingPlayer : agent) : void =
Print("Ricerca di un giocatore da promuovere")
var WeaponTier : int = 0
var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # Il giocatore a cui assegnare un'arma
var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # Il team di appartenenza del giocatore
if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]):
for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier):
Print("Trovato un compagno di squadra con un livello più basso al livello {TeammateTier}")
if(set WeaponTier = TeamMap[PlayerTeam][Teammate]):
set MaybePlayerToGrant = option{Teammate}
set WeaponTier = WeaponTier + 1
if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier):
Print("Il livello di eliminazione del giocatore è ora {WeaponTier}")
if(WeaponTier >= EliminationsToEndGame):
EndGame(EliminatingPlayer)
GrantWeapon(MaybePlayerToGrant, WeaponTier)
GrantWeapon(InPlayer : ?agent, WeaponTier : int) : void =
Print("Promozione del giocatore al livello {WeaponTier}")
if(ItemGranter := WeaponGranters[WeaponTier], GrantedPlayer := InPlayer?):
ItemGranter.GrantItem(GrantedPlayer)
EndGame(InPlayer : agent) : void =
Print("Il giocatore ha raggiunto il livello di arma finale, attivando EndGameDevice")
EndGameDevice.Activate(InPlayer)

In autonomia
Dopo aver completato questa guida, hai imparato a utilizzare Verse per creare un dispositivo che fa avanzare i giocatori attraverso una serie di armi, e a ogni eliminazione garantisce l'arma successiva a loro o ai loro compagni di team.
Utilizzando quanto appreso, effettua le operazioni seguenti:
-
Prova diversi ordini e combinazioni di armi per creare un'esperienza di gioco ottimale.
-
Considera la possibilità di mantenere le sentinelle e di usarle come boss opzionali per ogni team.
-
Cerca di trovare metodi diversi per segnare punti, ad esempio eliminando un particolare giocatore di un team.