En el ejercicio anterior has creado 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, este es el aspecto actual de la función:
CalculateDamage() : float =
MinHealth : float = 1.0
PotionDamageAmount : float = 80.0
var PlayerHealth : float = 100.0
# Si la cantidad de daño no elimina al jugador, haz esa cantidad de daño
if (PlayerHealth > PotionDamageAmount):
return PotionDamageAmount
else if (PlayerHealth > MinHealth):
# Dar al jugador una oportunidad más si su salud es baja
return PlayerHealth - MinHealth
else:
# Eliminar al jugador
return PlayerHealth
Tu versión actualizada de la función tomará tres parámetros:
PlayerHealth: la salud actual del jugador.DesiredDamageAmount: cantidad máxima de daño que se puede hacer al jugador.MinHealth: La salud que debería tener el jugador siDesiredDamageAmountredujera su salud a "0,0" o 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 elimina al jugador, haz esa cantidad de daño
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Dar al jugador una oportunidad más si su salud es baja
return PlayerHealth - MinHealth
else:
# Eliminar al jugador
return PlayerHealth
¡Genial! Ahora tu función calcula el daño que debe recibir tu jugador cuando se le dan tres parámetros, en lugar de utilizar variables y constantes declaradas dentro de la función.
En este punto, puede que veas un garabato rojo debajo del () en tu llamada a CalculateDamage() en HurtPlayer(). Esto se debe a que has actualizado la declaración de CalculateDamage() para que requiera 3 parámetros, pero no estás pasando ningún argumento en tu llamada a CalculateDamage(). Lo arreglarás en los próximos pasos.
-
Antes de que puedas pasar un argumento para
PlayerHealthaCalculateDamage(), tienes que saber cuál es la salud del personaje. Para ello utilizarás el métodoGetHealth(). La llamarás de la misma forma que aDamage()yHeal(), pero devolverá un valor que deberás 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 para hacer: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) -
Para el segundo parámetro de
CalculateDamage(), vas a necesitar un parámetro deHurtPlayer(). Ahora crearás ese parámetro. Añade un parámetrofloatllamadoDamageAmount.HurtPlayer()debería tener ahora el siguiente aspecto: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("DamageToDo: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) -
Ahora tienes los tres argumentos listos para añadirlos a
CalculateDamage().MyCharacterHealthpara el parámetroPlayerHealth.DamageAmountpara el parámetroDesiredDamageAmount.1.0para el parámetroMinHealth.
HurtPlayer() debería parecerse a lo siguiente y no debería haber 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 a causar: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
Llama a HurtPlayer() unas cuantas veces para ver los distintos efectos que tiene según la salud del jugador.
¿Qué pasa con la función HealPlayer()? ¿Se te ocurren formas de actualizarla ahora que sabes cómo utilizar los parámetros?
Hay otro método que puede ser útil. Se llama SetMaxHealth(), y se llama igual que a Damage(), Heal() y GetHealth(). A ver si puedes utilizar SetMaxHealth() y todo lo que sabes sobre parámetros y funciones para actualizar la función HealPlayer(). Piensa en lo que podría ser interesante o divertido 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 se inicia el dispositivo 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 elimina al jugador, haz esa cantidad de daño
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Dar al jugador una oportunidad más si su salud es baja
return PlayerHealth - MinHealth
else:
# Eliminar 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} de daño infligido 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)