Ваша функция HurtPlayer() работает, но поскольку вы передаёте литеральное значение методу Damage(), это значение может измениться только при ручном изменении кода. В этом упражнении вы сделаете функцию HurtPlayer() более гибкой, используя возвращаемое значение из другой функции, которую вы создадите.
В Уроке 4: «Практика», вы использовали условные выражения, чтобы рассчитать, какой урон или исцеление должны принести зелья в зависимости от здоровья игрока. Теперь мы вернём часть этого кода в функцию с именем CalculateDamage(). Она будет возвращать значение типа float. Это значение будет храниться в константе, которая затем передаётся в метод Damage().
-
Создайте функцию с названием
CalculateDamage(). Внутри функции объявите две константы типаfloat:MinHealthиPotionDamageAmount. Объявим одну переменную типаfloatс именемPlayerHealth.CalculateDamage() : float = MinHealth : float = 1.0 PotionDamageAmount: float = 80.0 var PlayerHealth : float = 100.0 - Создадим выражение
if…else if…else, которое возвращает одно из трёх значений:PotionDamageAmount, еслиPlayerHealthбольше чемPotionDamageAmountPlayerHealth–MinHealth, еслиPlayerHealthменьше чемPotionDamageAmount, но больше чемMinHealthPlayerHealth, еслиPlayerHealthменьше или равноMinHealth
# Если величина урона не приводит к устранению игрока, нанести урон такой величины if (PlayerHealth > PotionDamageAmount): return PotionDamageAmount else if (PlayerHealth > MinHealth): # Дать игроку ещё один шанс, если у него низкий запас здоровья return PlayerHealth - MinHealth else: # Устранить игрока return PlayerHealthЭтот код даёт игроку второй шанс, если тот выпивает зелье, которое обычно его устраняет.
-
Теперь, когда мы создали функцию, которая возвращает полезный результат, нужно его сохранить. Объявите константу типа
floatс именемDamageToDoи инициализируйте её возвращаемым значениемCalculateDamage(). Добавьте её в функциюHurtPlayer().HurtPlayer() : void = Playspace : fort_playspace = GetPlayspace() AllPlayers : []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): DamageToDo: float = CalculateDamage() FortniteCharacter.Damage(50.0) -
Наконец, пришло время использовать результат! Передайте
DamageToDoв качестве аргумента в методDamage(). ДобавьтеPrint(), чтобы можно было точно видеть, что возвращаетCalculateDamage().HurtPlayer() : void = Playspace : fort_playspace = GetPlayspace() AllPlayers : []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): DamageToDo: float = CalculateDamage() Print("Наносимый урон: {DamageToDo}") FortniteCharacter.Damage(DamageToDo)
Теперь вместо вызова метода Damage() с литеральным значением в этом методе используется значение, возвращаемое функцией CalculateDamage(). У вас уже должен быть готов вызов HurtPlayer() из предыдущего упражнения, но не забудьте проверить код.
Полный сценарий
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):
# Выполняется при запуске устройства в работающей игре
OnBegin<override>()<suspends>:void=
HurtPlayer()
Print("Игрок получил урон")
CalculateDamage() : float =
MaxHealth : float = 100.0
MinHealth : float = 1.0
PotionDamageAmount: float = 80.0
var PlayerHealth : float = 100.0
# Если величина урона не приводит к устранению игрока, нанести урон такой величины
if (PlayerHealth > PotionDamageAmount):
return PotionDamageAmount
else if (PlayerHealth > MinHealth):
# Дать игроку ещё один шанс, если у него низкий запас здоровья
return PlayerHealth - MinHealth
else:
# Устранить игрока
return PlayerHealth
HurtPlayer() : void =
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
DamageToDo: float = CalculateDamage()
Print("Наносимый урон: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
Попробуйте самостоятельно создать функцию, похожую на CalculateDamage(), которая возвращает результат, пригодный для использования в HealPlayer(). Если вы испытываете затруднения, обратитесь к Уроку 4: «Практика», где можно почерпнуть полезные идеи.