Dopo aver impostato le mappe, il passaggio successivo è quello di assegnare le armi quando un giocatore realizza un'eliminazione.
Quando un giocatore realizza un'eliminazione, dovrai applicare queste due regole:
-
Se il giocatore non ha ancora raggiunto il livello di arma più alto del suo team, o se tutti i giocatori si trovano allo stesso livello di arma, promuovilo al livello di arma successivo.
-
Altrimenti, se nel suo team c'è un giocatore con un livello di arma inferiore, promuovi quel giocatore.
In questo modo si garantisce che i giocatori ottengano armi sempre migliori come team e che nessun giocatore sia più avanti o più indietro di un'arma rispetto ai suoi compagni di team.
Per ottenere questo risultato, devi sapere quando un giocatore realizza un'eliminazione, quindi confrontare il suo livello di arma con quello di tutti gli altri giocatori del suo team e promuovere un giocatore in base alle due regole precedenti.
Per assegnare armi ai giocatori quando segnano punti con un'eliminazione, attieniti ai passaggi seguenti.
-
Aggiungi un nuovo metodo
GiveNextWeapon
alla classeteam_elimination_game
. Questo metodo assegna a un giocatore un'arma ogni volta che lui o qualcuno del suo team realizza un'eliminazione, in base alle due regole precedenti.GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Ricerca di un giocatore da promuovere")
-
Aggiorna
OnPlayerEliminated
per tenere traccia di quale giocatore ha realizzato un'eliminazione. PoichéOnPlayerEliminated
accetta unelimination_result
, otterrai un riferimento sia a un personaggio eliminato che a uno che realizza l'eliminazione. Poiché i giocatori possono essere eliminati con varie modalità (come danni da caduta, sentinelle, danni auto-inflitti e così via), devi dedurre seEliminatingCharacter
è un vero e proprioFortCharacter
, ossia un giocatore effettivo.- Ottieni un riferimento a
Result.EliminatingCharacter
e salvalo in una variabile locale di opzioneEliminator
. Controlla seEliminator
è unFortCharacter
valido e, in caso affermativo, salva l'agente per quel personaggio in un'altra variabileEliminatorAgent
. Infine, passaEliminatorAgent
aGiveNextWeapon
OnPlayerEliminated(Result : elimination_result) : void = Print("Un giocatore è stato eliminato!") Eliminator := Result.EliminatingCharacter if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]): GiveNextWeapon(EliminatorAgent)
- Ottieni un riferimento a
-
GiveNextWeapon
deve tenere traccia di diverse variabili per assegnare una nuova arma al giocatore giusto. Aggiungi le seguenti dichiarazioni aGiveNextWeapon
:-
Una variabile int
WeaponTier
. La variabile tiene traccia del livello dell'arma del giocatore in modo che l'assegnazione avvenga correttamente. -
Una variabile agente opzionale, denominata
MaybePlayerToGrant
, che rappresenta il giocatore a cui assegnare un'arma. Per impostazione predefinita, si tratta del giocatore passato aGiveNextWeapon
. -
Una variabile opzionale denominata
MaybePlayerTeam
, che rappresenta il team del giocatore a cui assegnare un'arma. Per impostazione predefinita, si tratta del team del giocatore passato aGiveNextWeapon
.
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
-
-
Estrai il valore di
MaybePlayerTeam
in una variabile localePlayerTeam
, quindi impostaWeaponTier
sul valore del punteggio del giocatore inTeamMap
.var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # Il team di appartenenza del giocatore if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]):
-
Scorri tutti i giocatori del team e confronta il relativo livello di arma. Se trovi un giocatore di livello inferiore, imposta
MaybePlayerToGrant
su quel giocatore eWeaponTier
sul suo punteggio. Tieni presente che, poichéTeamMap
è una mappa, puoi estrarre sia la chiave (giocatore) che il valore (livello dell'arma) come variabili locali, usando la sintassiTeammate -> TeammateTier
.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}
-
Una volta trovato il giocatore con il livello d'arma più basso (o pari a quello più basso), incrementa
WeaponTier
di uno, quindi imposta il suo livello d'arma inTeamMap
suWeaponTier
.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}")
-
Questo è un buon punto per verificare se un giocatore ha vinto la partita, perché l'aumento del livello dell'arma può fargli superare il numero di eliminazioni necessarie per terminare la partita.
- Crea un nuovo metodo
EndGame
nella classeteam_elimination_game
. Questo metodo attiva il dispositivoEndGameDevice
sul giocatore in questione, quando raggiunge il livello finale dell'arma. Il metodo completato dovrebbe avere l'aspetto seguente:
EndGame(InPlayer : agent) : void = Print("Il giocatore ha raggiunto il livello di arma finale, attivando EndGameDevice") EndGameDevice.Activate(InPlayer)
- Torna a
GiveNextWeapon
, dopo aver incrementato il livello dell'arma del giocatore e controllase WeaponTier >= EliminationsToEndGame
. In caso affermativo, chiamaEndGame
e passa il giocatore.
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)
- Crea un nuovo metodo
-
Altrimenti, chiama
GrantWeapon
suGrantedPlayer
.if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier)
-
Il metodo completato
GiveNextWeapon
dovrebbe essere simile al codice seguente.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)
Salva lo script in Visual Studio Code, compilalo e fai clic su Avvia sessione nella barra degli strumenti UEFN per eseguire il playtest del livello. Quando esegui il playtest del livello, dovresti far generare di nuovo la prima arma nell'array WeaponGranters
. Verifica questo comportamento con il registro. Se realizzi un'eliminazione di un giocatore nemico, passerai all'arma successiva. Le promozioni devono seguire le due regole sopra descritte. La promozione oltre l'ultima arma della sequenza dovrebbe far terminare la partita con il giocatore che ha realizzato l'eliminazione come vincitore.

Passaggio successivo
Nel [passaggio successivo] (team-elimination-game-6-handling-a-player-joining-a-game-in-progress-in-verse) di questo tutorial, imparerai ad aggiungere giocatori alla mappa e assegnare loro un'arma quando si uniscono a una partita in corso.