Secuencia de comandos completa
El siguiente código es la secuencia de comandos completa para un juego de eliminación que hace avanzar a los jugadores por una serie de armas en equipo.
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Game }
using { /Fortnite.com/Teams }
using { /Verse.org/Simulation }
player_map := [player]int # Esto es un alias de 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{}
# Mapa de mapas de equipos, donde la clave es el equipo y el valor es un mapa de
# pares clave-valor player->int
var TeamMap : [team]player_map = map{}
OnBegin<override>()<suspends> : void =
set Teams = GetPlayspace().GetTeamCollection().GetTeams()
set EliminationsToEndGame = WeaponGranters.Length
Print("Empezando a asignar jugadores")
PopulateTeamsAndPlayers()
para (Spawner : PlayerSpawners):
Spawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # Suscribirse a cada plataforma de aparición de jugador
para (Sentry : Sentries):
Sentry.EliminatedEvent.Subscribe(TestPlayerEliminated) # Subscribirse a cada centinela
# Suscribirse a los nuevos jugadores que se unan a la partida
GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded)
PopulateTeamsAndPlayers() : void =
Print("Empezando a rellenar con jugadores")
para (Team : Teams, TeamPlayers := GetPlayspace().GetTeamCollection().GetAgents[Team]):
var PlayerMap : player_map = map {}
para (Agent : TeamPlayers, TeamPlayer := player[Agent], FortCharacter := Agent.GetFortCharacter[]):
if(set PlayerMap[TeamPlayer] = 0, WeaponTier := PlayerMap[TeamPlayer]):
Print("Jugador asignado al mapa de jugadores con el nivel {WeaponTier}")
FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated)
if(set TeamMap[Team] = PlayerMap):
Print("Este equipo está configurado correctamente en el TeamMap")
# Maneja a un nuevo jugador que se une al juego
OnPlayerAdded(InPlayer : player) : void =
Print("¡Se ha unido un nuevo jugador!")
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("Establecer el nivel de armas del nuevo jugador en 0 en el TeamMap")
FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated) # Suscribirse al evento de eliminación de este jugador
# Concede armas a los jugadores en función de su nivel de armas cuando aparecen
OnPlayerSpawn(InPlayer : agent) : void =
Print("¡Acaba de aparecer un jugador!")
if:
PlayerTeam := GetPlayspace().GetTeamCollection().GetTeam[InPlayer]
WeaponTier:int := TeamMap[PlayerTeam][InPlayer]
then:
GrantWeapon(option{InPlayer}, WeaponTier)
Print("Al jugador generado se le ha concedido un arma de nivel {WeaponTier}")
OnPlayerEliminated(Result : elimination_result) : void =
Print("¡Se ha eliminado un jugador!")
Eliminator := Result.EliminatingCharacter
if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]):
GiveNextWeapon(EliminatorAgent)
# Permite probar GiveNextWeapon suplantando a los centinelas como jugadores
TestPlayerEliminated(Agent: ?agent) : void =
Print("¡Centinela abatido!")
if(TeamPlayer := Agent?):
GiveNextWeapon(TeamPlayer)
GiveNextWeapon(EliminatingPlayer : agent) : void =
Print("Buscando a un jugador para ascender")
var WeaponTier : int = 0
var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # El jugador al que conceder un arma
var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # El equipo en el que está este jugador
if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]):
para (Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier):
Print("Se ha encontrado un compañero con un nivel inferior en el nivel {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("El nivel del jugador que se elimina ahora es {WeaponTier}")
if(WeaponTier >= EliminationsToEndGame):
EndGame(EliminatingPlayer)
GrantWeapon(MaybePlayerToGrant, WeaponTier)
GrantWeapon(InPlayer : ?agent, WeaponTier : int) : void =
Print("Ascendiendo al jugador al nivel {WeaponTier}")
if(ItemGranter := WeaponGranters[WeaponTier], GrantedPlayer := InPlayer?):
ItemGranter.GrantItem(GrantedPlayer)
EndGame(InPlayer : agent) : void =
Print("El jugador ha alcanzado el último nivel de armas y ha activado el dispositivo Fin de partida")
EndGameDevice.Activate(InPlayer)

Por tu cuenta
Al completar esta guía, habrás aprendido a crear un dispositivo utilizando Verse que haga avanzar a los jugadores a través de una serie de armas y cada eliminación les otorgará a ellos o a sus compañeros de equipo el arma siguiente.
Utilizando lo que has aprendido, haz lo siguiente:
-
Prueba diferentes órdenes y combinaciones de armas para crear una experiencia de juego óptima.
-
Considera mantener los centinelas y utilizarlos como jefes opcionales para cada equipo.
-
Averigua si puedes encontrar diferentes métodos de puntuación, como eliminar a un jugador concreto de un equipo.