W poprzednim ćwiczeniu stworzyliśmy dobry punkt wyjścia dla funkcji CalculateDamage(), ale ciało funkcji zawiera stałe i zmienne, które działałyby lepiej jako parametry. Przypomnijmy sobie, jak teraz wygląda ta funkcja:
CalculateDamage() : float =
MinHealth : float = 1.0
PotionDamageAmount : float = 80.0
var PlayerHealth : float = 100.0
# Jeśli wartość zadanych obrażeń nie wyeliminuje gracza, zadaj mu taką ilość obrażeń
if (PlayerHealth > PotionDamageAmount):
return PotionDamageAmount
else if (PlayerHealth > MinHealth):
# Daj graczowi jeszcze jedną szansę, jeśli ma niski poziom zdrowia
return PlayerHealth - MinHealth
else:
# Wyeliminuj gracza
return PlayerHealth
Zaktualizowana wersja funkcji będzie przyjmować trzy parametry:
PlayerHealth: aktualny poziom zdrowia graczaDesiredDamageAmount: maksymalne obrażenia, jakie mogą zostać zadane graczowiMinHealth: poziom zdrowia, jaki powinien mieć gracz, jeśliDesiredDamageAmountzmniejszy jego poziom zdrowia do0.0lub mniej.
Zaktualizuj funkcję zgodnie z poniższym kodem:
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Jeśli wartość zadanych obrażeń nie wyeliminuje gracza, zadaj mu taką ilość obrażeń
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Daj graczowi jeszcze jedną szansę, jeśli ma niski poziom zdrowia
return PlayerHealth - MinHealth
else:
# Wyeliminuj gracza
return PlayerHealth
Świetnie! Funkcja oblicza teraz obrażenia, jakie otrzyma gracz po podaniu trzech parametrów, zamiast używania zmiennych i stałych zadeklarowanych w funkcji.
Na tym etapie możesz zauważyć czerwone podkreślenie pod () w wywołaniu CalculateDamage() w HurtPlayer(). Dzieje się tak, ponieważ deklaracja funkcji CalculateDamage() została zaktualizowana tak, aby wymagała 3 parametrów, ale nie przekazujesz żadnych argumentów w wywołaniu funkcji CalculateDamage(). Naprawisz to w kolejnych krokach.
-
Zanim przekażesz argument
PlayerHealthdoCalculateDamage(), musisz wiedzieć, jaki jest stan zdrowia postaci. W tym celu użyj metodyGetHealth(). Wywołasz ją tak samo jakDamage()iHeal(), ale zwróci ona wartość, którą musisz zapisać w funkcjiHurtPlayer().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("Obrażenia do zadania: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) -
W przypadku drugiego parametru w
CalculateDamage()potrzebny będzie parametr zHurtPlayer(). Utworzysz teraz ten parametr. Dodaj parametrfloato nazwieDamageAmount. FunkcjaHurtPlayer()powinna teraz wyglądać następująco: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("Obrażenia do zadania: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) -
Teraz wszystkie trzy argumenty są gotowe do dodania do funkcji
CalculateDamage().MyCharacterHealthdla parametruPlayerHealthDamageAmountdla parametruDesiredDamageAmount1.0dla parametruMinHealth
Funkcja HurtPlayer() powinna wyglądać jak poniżej i nie powinno być więcej błędów:
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("Obrażenia do zadania: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
Wywołaj funkcję HurtPlayer() kilka razy, aby zobaczyć różne efekty, w zależności od poziomu zdrowia gracza.
A co z funkcją HealPlayer()? Czy przychodzą ci do głowy sposoby na zaktualizowanie jej teraz, gdy wiesz, jak używać parametrów?
Jest jeszcze jedna metoda, która może okazać się przydatna. Nazywa się ona SetMaxHealth() i wywołuje się ją tak samo, jak Damage(), Heal() i GetHealth(). Przekonaj się, czy potrafisz użyć metody SetMaxHealth() i wszystkich innych znanych ci parametrów i funkcji, aby zaktualizować funkcję HealPlayer(). Pomyśl o tym, co może zainteresować gracza lub sprawić mu przyjemność.
Kompletny skrypt
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):
# Działa po uruchomieniu urządzenia w aktywnej grze
OnBegin<override>()<suspends>:void=
HurtPlayer(80.0)
Print("Gracz doznał obrażeń")
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Jeśli wartość zadanych obrażeń nie wyeliminuje gracza, zadaj mu taką ilość obrażeń
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Daj graczowi jeszcze jedną szansę, jeśli ma niski poziom zdrowia
return PlayerHealth - MinHealth
else:
# Wyeliminuj gracza
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("Zadano graczowi {DamageToDo} pkt. obrażeń")
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)