Maintenant que vous avez configuré vos cartes, l'étape suivante consiste à accorder des armes à un joueur lorsque celui-ci parvient à éliminer une cible.
Lorsqu'un joueur élimine une cible, vous devez appliquer les deux règles suivantes.
-
Si le joueur n'a pas le niveau d’armement le plus élevé de son équipe, ou si tous les joueurs ont le même niveau d'armement, il est promu au niveau d’armement suivant.
-
Sinon, si l'un des joueurs de l'équipe a un niveau d'armement inférieur, il est nécessaire de promouvoir ce joueur.
Les joueurs peuvent ainsi passer aux niveaux d’armement supérieurs en tant qu’équipe, et aucun joueur n’a plus d'une arme d'avance ou de retard sur l'un de ses coéquipiers.
Pour ce faire, vous devez savoir quand un joueur élimine un adversaire, puis comparer son niveau d'armement à celui de tous les autres joueurs de son équipe, et promouvoir un joueur en fonction des deux règles ci-dessus.
Procédez comme suit pour accorder des armes aux joueurs lorsqu'ils parviennent à éliminer une cible.
-
Ajoutez une méthode
GiveNextWeaponà la classeteam_elimination_game. Cette méthode accorde à un joueur une arme chaque fois que lui ou un membre de son équipe élimine une cible selon les deux règles ci-dessus.GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Finding a player to promote") -
Mettez à jour
OnPlayerEliminatedpour savoir quel joueur est à l'origine d'une élimination. Étant donné qu'OnPlayerEliminatedaccepte unelimination_result, vous obtenez une référence à la fois au personnage éliminé et à celui qui l'a éliminé. Dans la mesure où les joueurs peuvent être éliminés de diverses façons (comme les dégâts de chute, les sentinelles, les dégâts auto-infligés, etc.), vous devez déduire siEliminatingCharacterest un véritable joueur (c'est-à-dire unFortCharacter).- Obtenez une référence à
Result.EliminatingCharacteret enregistrez-la dans une variable d'option localeEliminator. Vérifiez si l’éliminateur (Eliminator) est un personnage réel (FortCharacter) valide et, si c'est le cas, enregistrez l'agent de ce personnage dans une autre variableEliminatorAgent. Enfin, transmettezEliminatorAgentàGiveNextWeapon.
OnPlayerEliminated(Result : elimination_result) : void = Print("A Player was eliminated!") Eliminator := Result.EliminatingCharacter if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]): GiveNextWeapon(EliminatorAgent) - Obtenez une référence à
-
GiveNextWeapondoit suivre plusieurs variables afin d'accorder une nouvelle arme au bon joueur. Ajoutez les déclarations suivantes àGiveNextWeapon.-
Une variable int
WeaponTier. Cette variable permet de connaître le niveau d'armement du joueur à qui accorder une arme. -
Une variable d’agent facultative nommée
MaybePlayerToGrant, qui est le joueur à qui accorder une arme. Il s’agit par défaut du joueur transmis àGiveNextWeapon. -
Une variable d'équipe facultative nommée
MaybePlayerTeam, qui est l'équipe du joueur à qui accorder une arme. Il s’agit par défaut de l'équipe du joueur transmise àGiveNextWeapon.
GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Finding a player to promote") var WeaponTier : int = 0 var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # The player to grant a gun to var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # The team this player is on -
-
Extrayez la valeur de
MaybePlayerTeamdans une variable localePlayerTeam, puis définissezWeaponTiersur la valeur du score du joueur dansTeamMap.var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # The team this player is on if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): -
Passez en revue tous les joueurs de l'équipe et comparez leur niveau d'armement. Si vous trouvez un joueur à un niveau inférieur, attribuez
MaybePlayerToGrantà ce joueur etWeaponTierà son score. Notez queTeamMapétant un mappage, vous pouvez extraire la clé (joueur) et la valeur (niveau d'armement) en tant que variables locales en utilisant la syntaxeTeammate -> TeamTier.if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Found a Teammate with a lower Tier at Tier {TeammateTier}") if(set WeaponTier = TeamMap[PlayerTeam][Teammate]): set MaybePlayerToGrant = option{Teammate} -
Une fois que vous avez trouvé le(s) joueur(s) ayant le niveau d'armement le plus bas, augmentez son/leur
WeaponTierd'une unité, puis définissez son/leur niveau d'armement dansTeamMapsurWeaponTier.if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Found a Teammate with a lower Tier at Tier {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("Eliminating Player Tier is now {WeaponTier}") -
À ce stade, il est bon de vérifier si un joueur a gagné la partie, car son passage à un niveau d'armement supérieur peut le pousser à dépasser le nombre d'éliminations nécessaires pour terminer la partie.
- Créez une nouvelle méthode
EndGamedans la classeteam_elimination_game. Cette méthode active l’appareilEndGameDevicesur le joueur donné lorsqu'il atteint le dernier niveau d’armement. La méthode complète doit être similaire à celle-ci :
EndGame(InPlayer : agent) : void = Print("Player reached final Weapon Tier, activating EndGameDevice") EndGameDevice.Activate(InPlayer)- Revenez à
GiveNextWeapon, après avoir augmenté le niveau d’armement du joueur, puis vérifiez siif WeaponTier >= EliminationsToEndGame. Si c'est le cas, appelezEndGameen transmettant le joueur.
if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier): Print("Eliminating Player Tier is now {WeaponTier}") if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) - Créez une nouvelle méthode
-
Sinon, appelez
GrantWeaponsur leGrantedPlayer.if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier) -
La méthode
GiveNextWeaponcomplète doit être similaire à celle-ci.GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Finding a player to promote") var WeaponTier : int = 0 var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # The player to grant a gun to var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # The team this player is on if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Found a Teammate with a lower Tier at Tier {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("Eliminating Player Tier is now {WeaponTier}") if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier)
Enregistrez le script dans Visual Studio Code, compilez-le et cliquez sur Lancer la session dans la barre d'outils de l'UEFN pour tester votre niveau. Lorsque vous testez votre niveau, vous devez à nouveau apparaître avec la première arme de la matrice WeaponGranters. Vérifiez ce comportement à l'aide du journal. L'élimination d'un adversaire vous permet de passer à l'arme suivante. Les octrois d’armes doivent suivre les deux règles décrites ci-dessus. Les attributions d'armes au-delà de la dernière arme de la séquence doivent mettre fin au jeu, le joueur qui a réussi à éliminer ses adversaires est déclaré vainqueur.

Étape suivante
Dans l'étape suivante de ce tutoriel, vous apprendrez à ajouter des joueurs à votre carte et à leur accorder une arme lorsqu'ils rejoignent une partie en cours.