Ahora que has configurado tus mapas, el siguiente paso es conceder armas cuando un jugador consigue una eliminación.
Cuando un jugador consigue una eliminación, debes aplicar estas dos reglas:
-
Si el jugador no está en el nivel de armas más alto de su equipo, o todos los jugadores están en el mismo nivel de armas, asciéndelo al siguiente nivel de armas.
-
De lo contrario, si hay un jugador en su equipo con un nivel de armas inferior, asciende a ese jugador en su lugar.
Esto garantizará que los jugadores avancen por las armas como un equipo, y ningún jugador estará más de un arma por delante o por detrás de cualquiera de sus compañeros.
Para ello, tendrás que saber cuándo un jugador consigue una eliminación, luego comparar su nivel de armas con el de todos los demás jugadores de su equipo, y ascender a un jugador basándote en las dos reglas anteriores.
Sigue estos pasos para conceder armas a los jugadores cuando consigan una eliminación.
-
Añade un nuevo método
GiveNextWeapona la claseteam_elimination_game. Este método concede a un jugador un arma siempre que él o alguien de su equipo consiga una eliminación basada en las dos reglas anteriores.GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Buscando a un jugador para ascender") -
Actualiza
OnPlayerEliminatedpara saber qué jugador ha conseguido una eliminación. ComoOnPlayerEliminatedacepta unelimination_result, obtienes referencia tanto a un personaje eliminado como a uno eliminador. Como los jugadores pueden ser eliminados por diversos medios (como daño por caída, centinelas, daño propio, etc.), tienes que deducir siEliminatingCharacteres unFortCharacterreal (es decir, un jugador real).- Obtén una referencia a
Result.EliminatingCharactery guárdala en una variable local de opciónEliminator. Comprueba siEliminatores unFortCharacterválido y, en caso afirmativo, guarda el agente de ese personaje en otra variableEliminatorAgent. Por último, pasaEliminatorAgentaGiveNextWeapon.
OnPlayerEliminated(Result : elimination_result) : void = Print("¡Se ha eliminado un jugador!") Eliminator := Result.EliminatingCharacter if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]): GiveNextWeapon(EliminatorAgent) - Obtén una referencia a
-
GiveNextWeaponnecesita rastrear varias variables para conceder al jugador correcto un arma nueva. Añade las siguientes declaraciones aGiveNextWeapon.-
Una variable int
WeaponTier. Esto rastrea el nivel de armas del jugador al que conceder un arma. -
Una variable de agente opcional nombrada
MaybePlayerToGrant, que es el jugador al que conceder un arma. De forma predeterminada, es el jugador pasado aGiveNextWeapon. -
Una variable de equipo opcional nombrada
MaybePlayerTeam, que es el equipo del jugador al que hay que conceder un arma. De forma predeterminada, es el equipo del jugador pasado aGiveNextWeapon.
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 -
-
Extrae el valor de
MaybePlayerTeamen una variable localPlayerTeam, y luego estableceWeaponTieren el valor de la puntuación del jugador enTeamMap.var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # El equipo en el que está este jugador if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): -
Repasa cada jugador del equipo y compara su nivel de armas. Si encuentras un jugador en un nivel inferior, pon
MaybePlayerToGranta ese jugador, yWeaponTiera su puntuación. Ten en cuenta que, comoTeamMapes un mapa, puedes extraer tanto la clave (jugador) como el valor (nivel de armas) como variables locales utilizando la sintaxisTeammate -> TeammateTier.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} -
Una vez que hayas encontrado al jugador con el nivel de arma más bajo (o empatado con el más bajo), incrementa en uno el valor de
WeaponTiery, a continuación, establece su nivel de arma enTeamMapcomoWeaponTier.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}") -
Este es un buen lugar para comprobar si un jugador ha ganado la partida, porque aumentar su nivel de armas puede hacer que supere el número de eliminaciones necesarias para terminar la partida.
- Crea un nuevo método
EndGameen la claseteam_elimination_game. Este método activa elEndGameDeviceen el jugador dado cuando alcanza el último nivel de armas. El método completo debería tener este aspecto:
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)- En
GiveNextWeapon, después de incrementar el nivel de armas del jugador, compruebaif WeaponTier >= EliminationsToEndGame. Si es así, llama aEndGamepasando al jugador.
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) - Crea un nuevo método
-
En caso contrario, llama a
GrantWeaponen elGrantedPlayer.if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier) -
El método
GiveNextWeaponcompleto debería parecerse al código siguiente.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)
Guarda la secuencia de comandos en Visual Studio Code, compílala y haz clic en Abrir sesión en la barra de herramientas de UEFN para poner a prueba el nivel. Cuando pruebes tu nivel, deberías aparecer de nuevo con la primera arma de la matriz WeaponGranters. Comprueba este comportamiento con el registro. Si consigues la eliminación de un jugador enemigo, pasarás a la siguiente arma. Las promociones deben seguir las dos reglas antes expuestas. Pasar del último arma de la secuencia debería terminar la partida con el jugador eliminado como vencedor.

Siguiente paso
En el siguiente paso de este tutorial, aprenderás a añadir jugadores a tu mapa y a asignarles un arma cuando se unan a una partida en curso.