Nell'esercizio precedente, hai creato un buon punto di partenza per CalculateDamage(), ma il corpo della funzione contiene costanti e variabili che funzionerebbero meglio come parametri. Come promemoria, ecco come appare ora la funzione:
CalculateDamage() : float =
MinHealth : float = 1.0
PotionDamageAmount : float = 80.0
var PlayerHealth : float = 100.0
# Se la quantità di danni non elimina il giocatore, infliggi quella quantità
if (PlayerHealth > PotionDamageAmount):
return PotionDamageAmount
else if (PlayerHealth > MinHealth):
# Dà al giocatore un'altra possibilità se la sua salute è bassa
return PlayerHealth - MinHealth
else:
# Elimina il giocatore
return PlayerHealth
La versione aggiornata della funzione richiederà questi tre parametri:
PlayerHealth: La salute attuale del giocatoreDesiredDamageAmount: La quantità massima di danni che possono essere inflitti al giocatoreMinHealth: La salute che il giocatore dovrebbe avere seDesiredDamageAmountriducesse la sua salute a0.0o meno.
Aggiorna la funzione in modo che corrisponda a quanto segue:
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Se la quantità di danni non elimina il giocatore, infliggi quella quantità
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Dà al giocatore un'altra possibilità se la sua salute è bassa
return PlayerHealth - MinHealth
else:
# Elimina il giocatore
return PlayerHealth
Grande! La tua funzione calcola ora la quantità di danni che il tuo giocatore dovrebbe subire quando riceve tre parametri invece di utilizzare variabili e costanti dichiarate all'interno della funzione.
A questo punto, potresti vedere uno scarabocchio rosso sotto () nella tua chiamata a CalculateDamage() in HurtPlayer(). Questo accade perché è stata aggiornata la dichiarazione di CalculateDamage() per richiedere 3 parametri, ma non stai passando alcun argomento nella chiamata a CalculateDamage(). Risolverai questo problema nei prossimi passaggi.
-
Prima di poter passare un argomento per
PlayerHealthaCalculateDamage(), devi sapere qual è la salute del personaggio. Per questo utilizzerai il metodoGetHealth(). Lo chiamerai allo stesso modo diDamage()eHeal()ma restituirà un valore che dovrai salvare all'interno della tua funzioneHurtPlayer()`.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("Danni da infliggere: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) -
Per il secondo parametro in
CalculateDamage(), avrai bisogno di un parametro daHurtPlayer(). Ora creerai quel parametro. Aggiungi un parametrofloatchiamatoDamageAmount.HurtPlayer()dovrebbe ora apparire così: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("Danni da infliggere: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) -
A questo punto tutti e tre gli argomenti sono pronti da aggiungere a
CalculateDamage().MyCharacterHealthper il parametroPlayerHealthDamageAmountper il parametroDesiredDamageAmount1.0per il parametroMinHealth
HurtPlayer() dovrebbe apparire come segue e non dovrebbero esserci altri errori:
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("Danni da infliggere: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
Chiama HurtPlayer() un paio di volte per vedere i diversi effetti che ha, a seconda della salute del giocatore.
E la funzione HealPlayer()? Riesci a pensare a modi per aggiornarla ora che sai come utilizzare i parametri?
C'è un altro metodo che potrebbe essere utile. Si chiama SetMaxHealth() e viene chiamato allo stesso modo di Damage(), Heal() e GetHealth(). Verifica se puoi utilizzare SetMaxHealth() e tutto ciò che sai su parametri e funzioni per aggiornare la funzione HealPlayer(). Pensa a cosa potrebbe essere interessante o divertente per il giocatore.
Script completo
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):
# Viene eseguito quando il dispositivo viene avviato in un gioco in esecuzione
OnBegin<override>()<suspends>:void=
HurtPlayer(80.0)
Print("Giocatore ferito")
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Se la quantità di danni non elimina il giocatore, infliggi quella quantità
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Dà al giocatore un'altra possibilità se la sua salute è bassa
return PlayerHealth - MinHealth
else:
# Elimina il giocatore
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} danno inflitto al giocatore")
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)