En el ejercicio anterior, creaste un buen punto de partida para CalculateDamage(), pero el cuerpo de la función contiene constantes y variables que funcionarían mejor como parámetros. A modo de recordatorio, la función ahora se ve de la siguiente manera
CalculateDamage() : float =
MinHealth : float = 1.0
PotionDamageAmount : float = 80.0
var PlayerHealth : float = 100.0
# Si la cantidad de daño no eliminaría al jugador, inflige esa cantidad de daño
if (PlayerHealth > PotionDamageAmount):
return PotionDamageAmount
else if (PlayerHealth > MinHealth):
# Otorga al jugador una oportunidad adicional si su nivel de vida es bajo
return PlayerHealth - MinHealth
else:
# Elimina al jugador
return PlayerHealth
Tu versión actualizada de la función tomará tres parámetros:
PlayerHealth: la vida actual del jugadorDesiredDamageAmount: la cantidad máxima de daño que se le puede infligir al jugadorMinHealth: la vida que el jugador debería tener siDesiredDamageAmountredujera su estado a0.0o menos.
Actualiza la función para que coincida con lo siguiente:
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Si la cantidad de daño no eliminaría al jugador, inflige esa cantidad de daño
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Otorga al jugador una oportunidad adicional si su nivel de vida es bajo
return PlayerHealth - MinHealth
else:
# Elimina al jugador
return PlayerHealth
¡Genial! Tu función ahora calcula el daño que tu jugador debe recibir cuando se dan tres parámetros, en vez de usar las variables y constantes declaradas dentro de la función.
En este punto, quizás veas un subrayado rojo debajo de () en tu llamada a CalculateDamage() en HurtPlayer(). Esto es porque actualizaste la declaración de CalculateDamage() para que requiera 3 parámetros, pero no pasarás ningún argumento en la llamada a CalculateDamage(). Lo arreglarás en los próximos pasos.
-
Antes de pasar un argumento desde
PlayerHealthaCalculateDamage(), debes saber cómo está la vida del personaje. Para eso, utilizarás el métodoGetHealth(). Lo llamarás de la misma manera queDamage()yHeal(), pero devolverá un valor que necesitas guardar dentro de tu funciónHurtPlayer().HurtPlayer() : void = Playspace : fort_playspace = GetPlayspace() AllPlayers : []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): MyCharacterHealth : float = FortniteCharacter.GetHealth() DamageToDo: float = CalculateDamage() Print("Daño por causar: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) -
Para el segundo parámetro en
CalculateDamage(), necesitarás un parámetro deHurtPlayer(). Ahora crearás ese parámetro. Añade un parámetrofloatllamadoDamageAmount.HurtPlayer()debería verse de la siguiente manera:HurtPlayer(DamageAmount : float) : void = Playspace: fort_playspace = GetPlayspace() AllPlayers: []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): MyCharacterHealth : float = FortniteCharacter.GetHealth() DamageToDo : float = CalculateDamage() Print("Daño por causar: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) -
Ahora ya tienes los tres argumentos listos para que los agregues a
CalculateDamage().MyCharacterHealthpara el parámetroPlayerHealthDamageAmountpara el parámetroDesiredDamageAmount1.0para el parámetroMinHealth
HurtPlayer() deberá verse de la siguiente manera y ya no deberías tener más errores:
HurtPlayer(DamageAmount : float) : void =
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
MyCharacterHealth : float = FortniteCharacter.GetHealth()
DamageToDo : float = CalculateDamage(MyCharacterHealth, DamageAmount, 1.0)
Print("Daño por causar: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
Llama a HurtPlayer() varias veces para ver los distintos efectos que tiene, dependiendo del estado de salud del jugador.
¿Y qué dices de la función HealPlayer()? ¿Se te ocurren formas de actualizarla ahora que sabes cómo usar parámetros?
Existe un método más que puede ser útil. Se denomina SetMaxHealth(), y se llama de la misma forma que Damage(), Heal() y GetHealth(). Fíjate si puedes usar SetMaxHealth() y todo lo demás que sabes sobre los parámetros y funciones para actualizar la función HealPlayer(). Piensa en lo que puede ser interesante o entretenido para el jugador.
Secuencia de comandos completa
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Playspaces }
using { /Verse.org/Simulation }
using { /Verse.org/Verse }
hello_world_device := class(creative_device):
# Se ejecuta cuando el dispositivo se inicia en un juego en ejecución
OnBegin<override>()<suspends>:void=
HurtPlayer(80.0)
Print("Jugador herido")
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Si la cantidad de daño no eliminaría al jugador, inflige esa cantidad de daño
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Otorga al jugador una oportunidad adicional si su nivel de vida es bajo
return PlayerHealth - MinHealth
else:
# Elimina al jugador
return PlayerHealth
HurtPlayer(DamageAmount : float) : void =
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
MyCharacterHealth : float = FortniteCharacter.GetHealth()
DamageToDo : float = CalculateDamage(MyCharacterHealth, DamageAmount, 1.0)
FortniteCharacter.Damage(DamageToDo)
Print("{DamageToDo} daño producido al jugador")
HealPlayer(HealAmount : float) : void =
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
FortniteCharacter.Heal(HealAmount)