Ahora que has configurado los mapas, el siguiente paso es otorgar armas cuando un jugador logra una eliminación.
Cuando un jugador logra una eliminación, deberás aplicar estas dos reglas.
-
Si el jugador no está en el nivel más alto de armas en su equipo o todos los jugadores están en el mismo nivel de armas, promoverlos al siguiente nivel de armas.
-
De lo contrario, si hay un jugador en el equipo en un nivel de armas inferior, promueve a dicho jugador.
Esto garantizará que los jugadores avancen en armas como equipo y ningún jugador esté más de un arma por delante o por detrás del resto de sus compañeros.
Para ello, necesitarás saber cuando un jugador logre una eliminación, después comparar su nivel de arma con el resto de los jugadores del equipo y promover al jugador con base en las dos reglas anteriores.
Realiza estos pasos para otorgar armas a los jugadores cuando logran una eliminación.
-
Añade un nuevo método
GiveNextWeapona la claseteam_elimination_game. Este método otorga un arma a un jugador siempre que este o alguien de su equipo logre una eliminación según las dos reglas anteriores.GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Buscando a un jugador para promoverlo") -
Actualiza
OnPlayerEliminatedpara rastrear qué jugador logró una eliminación. ComoOnPlayerEliminatedacepta unelimination_result, obtienes las referencias al personaje eliminado y a quien lo elimina. Debido a que es posible eliminar jugadores de distintas maneras (como lesión por caída, centinelas, lesión autoinflingida, etc.), necesitas deducir siEliminatingCharacteres unFortCharacterreal (es decir, un jugador real).- Obtén una referencia a
Result.EliminatingCharactery guárdala en la variable opcional localEliminator. Comprueba siEliminatores unFortCharacterválido y, si lo es, guarda el agente de dicho personaje en otra variableEliminatorAgent. Por último, pasaEliminatorAgentaGiveNextWeapon
OnPlayerEliminated(Result : elimination_result) : void = Print("¡Se eliminó a un jugador!") Eliminator := Result.EliminatingCharacter if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]): GiveNextWeapon(EliminatorAgent) - Obtén una referencia a
-
GiveNextWeapondebe realizar un seguimiento de distintas variables para otorgar una nueva arma al jugador correcto. Añade la siguiente declaración aGiveNextWeapon.-
Una variable entera
WeaponTier. Esto realiza un seguimiento del nivel de arma del jugador para otorgarle un arma. -
Una variable agente opcional denominada
MaybePlayerToGrant, el jugador a quien se otorgará el arma. De manera predeterminada, es el jugador pasado aGiveNextWeapon. -
Una variable de equipo opcional denominada
MaybePlayerTeam, el equipo del jugador a quien otorgar el arma. De manera predeterminada, es el equipo del jugador pasado aGiveNextWeapon.
GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Buscando a un jugador para promoverlo") var WeaponTier : int = 0 var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # El jugador a quién otorgar una pistola var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # El equipo en el que está el jugador -
-
Extrae el valor de
MaybePlayerTeamen una variable localPlayerTeam; a continuación, defineWeaponTiercon el valor de la puntuación del jugador enTeamMap.var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # El equipo en el que está el jugador if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): -
Itera a través de todos los jugadores del equipo y compara sus niveles de arma. Si encuentras un jugador en un nivel inferior, establece
MaybePlayerToGranten ese jugador yWeaponTieren su puntuación. Ten presente que comoTeamMapes un mapa, puedes extraer la clave (jugador) y el valor (nivel de arma) como variables locales con la sintaxisTeammate -> TeammateTier.if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Se encontró a un compañero con un Nivel menor en el Nivel {TeammateTier}") if(set WeaponTier = TeamMap[PlayerTeam][Teammate]): set MaybePlayerToGrant = option{Teammate} -
Una vez que encuentras al jugador en el nivel de arma más bajo (o empatado en el más bajo), aumenta el valor de
WeaponTieren uno y, luego, establece su nivel de arma enTeamMapaWeaponTier.if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Se encontró a un compañero con un Nivel menor 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 eliminado ahora es {WeaponTier}") -
Este es un buen lugar para comprobar si el jugador ha ganado el juego, porque aumentar su nivel de arma puede hacerle superar el número de eliminaciones necesarias para finalizar el juego.
- Crea un nuevo método
EndGameen la claseteam_elimination_game. Este método activaEndGameDeviceen el jugador dado cuando llega al nivel de arma final. El método completo debería ser:
EndGame(InPlayer : agent) : void = Print("El jugador llegó al Nivel final de Arma, activando EndGameDevice") EndGameDevice.Activate(InPlayer)- De regreso en
GiveNextWeapon, después de aumentar el nivel de arma del jugador, comprueba siif WeaponTier >= EliminationsToEndGame. Si es así, llama alEndGameque pasa el jugador.
if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier): Print("El Nivel del jugador eliminado ahora es {WeaponTier}") if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) - Crea un nuevo método
-
De lo contrario, llama a
GrantWeaponen elGrantedPlayer.if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier) -
El método
GiveNextWeaponcompleto debería ser:GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Buscando a un jugador para promoverlo") var WeaponTier : int = 0 var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # El jugador a quién otorgar una pistola var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # El equipo en el que está el jugador if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Se encontró a un compañero con un Nivel menor 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 eliminado ahora es {WeaponTier}") if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier)
Guarda la secuencia de comandos en Visual Studio Code, compílala y haz clic en Comenzar sesión en la barra de herramientas de UEFN para probar el nivel. Cuando pruebes el nivel, deberías aparecer con la primera arma de la matriz WeaponGranters. Comprueba este comportamiento en el registro. Al lograr una eliminación de un jugador enemigo debería promoverte a la siguiente arma. Las promociones deberían respetar las dos reglas explicadas anteriormente. La promoción siguiente al arma final de la secuencia debería finalizar la partida y marcar al jugador que logró la eliminación como el ganador.

Próximo paso
En el siguiente paso de este tutorial, aprenderás cómo agregar jugadores al mapa y asignarles armas cuando se unen al juego en curso.