Kompletny skrypt
Poniższy kod przedstawia kompletny skrypt gry likwidacyjnej, w której gracze działający drużynowo otrzymują kolejne rodzaje broni ze zdefiniowanej serii.
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Game }
using { /Fortnite.com/Teams }
using { /Verse.org/Simulation }
player_map := [player]int # To jest alias typu!
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 obejmująca mapy drużyn, w której kluczem jest drużyna, a wartością jest mapa
# gracz->liczba całkowita, i składają się one w pary klucz-wartość
var TeamMap : [team]player_map = map{}
OnBegin<override>()<suspends> : void =
set Teams = GetPlayspace().GetTeamCollection().GetTeams()
set EliminationsToEndGame = WeaponGranters.Length
Print("Rozpoczęcie przypisywania graczy")
PopulateTeamsAndPlayers()
for (Spawner : PlayerSpawners):
Spawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # Subskrybuj każdy Panel startowy gracza
for (Sentry : Sentries):
Sentry.EliminatedEvent.Subscribe(TestPlayerEliminated) # Subskrybuj każdego wartownika
# Subskrybuj nowych graczy dołączających do gry
GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded)
PopulateTeamsAndPlayers() : void =
Print("Rozpoczęcie uzupełniania graczy")
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("Przypisano gracza do PlayerMap ze stopniem {WeaponTier}")
FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated)
if(set TeamMap[Team] = PlayerMap):
Print("Ustawiono tę drużynę w TeamMap")
# Określa zachowanie dotyczące nowego gracza dołączającego do gry
OnPlayerAdded(InPlayer : player) : void =
Print("Dołączył nowy gracz!")
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("Ustaw poziom broni nowego gracza na 0 w TeamMap")
FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated) # subskrybuj zdarzenie likwidacji tego gracza
# Podczas spawnowania przyznaje graczom bronie w zależności od ich wartości WeaponTier
OnPlayerSpawn(InPlayer : agent) : void =
Print("Gracz właśnie się zespawnował!")
if:
PlayerTeam := GetPlayspace().GetTeamCollection().GetTeam[InPlayer]
WeaponTier:int := TeamMap[PlayerTeam][InPlayer]
then:
GrantWeapon(option{InPlayer}, WeaponTier)
Print("Zespawnowanemu graczowi przyznano broń poziomu {WeaponTier}")
OnPlayerEliminated(Result : elimination_result) : void =
Print("Gracz został zlikwidowany!")
Eliminator := Result.EliminatingCharacter
if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]):
GiveNextWeapon(EliminatorAgent)
# Zezwalaj na testowanie metody GiveNextWeapon z wykorzystaniem wartowników w charakterze graczy
TestPlayerEliminated(Agent: ?agent) : void =
Print("Wartownik powalony!")
if(TeamPlayer := Agent?):
GiveNextWeapon(TeamPlayer)
GiveNextWeapon(EliminatingPlayer : agent) : void =
Print("Znajdowanie gracza do awansu")
var WeaponTier : int = 0
var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # Gracz, który ma otrzymać broń
var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # Drużyna, do której należy ten gracz
if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]):
for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier):
Print("Znaleziono członka drużyny z niższym poziomem na poziomie {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("Gracz eliminujący jest teraz na poziomie {WeaponTier}")
if(WeaponTier >= EliminationsToEndGame):
EndGame(EliminatingPlayer)
GrantWeapon(MaybePlayerToGrant, WeaponTier)
GrantWeapon(InPlayer : ?agent, WeaponTier : int) : void =
Print("Awansowanie gracza do poziomu {WeaponTier}")
if(ItemGranter := WeaponGranters[WeaponTier], GrantedPlayer := InPlayer?):
ItemGranter.GrantItem(GrantedPlayer)
EndGame(InPlayer : agent) : void =
Print("Gracz osiągnął ostatni poziom broni, aktywowanie urządzenia EndGameDevice")
EndGameDevice.Activate(InPlayer)

We własnym zakresie
Dzięki tej instrukcji wiesz już, jak wykorzystać język Verse do utworzenia urządzenia, które będzie awansowało graczy do kolejnych poziomów z serii broni tak, aby każda likwidacja skutkowała przyznaniem danemu graczowi lub innemu członkowi jego drużyny kolejnej broni.
Wykorzystując zdobytą wiedzę, wykonaj następujące instrukcje:
-
Wypróbuj różne kolejności i kombinacje broni, aby stworzyć optymalne środowisko gry.
-
Rozważ zachowanie wartowników i wykorzystanie ich jako opcjonalnych bossów dla każdej drużyny.
-
Poszukaj innych metod zdobywania punktów, takich jak likwidacja jednego konkretnego gracza w drużynie.