Перейти к содержанию

Эффект феникса из Warcraft III


Рекомендуемые сообщения

В Warcraft III: Frozen Trone у харизматичного героя кровавых магов есть способность "феникс". При ее использовании выбрасывается в мир птица-компаньон. У этого феникса большое здоровье, но оно тут же начинает падать, пока не станет совсем низким, и тогда феникс превращается в яйцо, а через несколько мгновений здоровье снова восстанавливается.

Примерно то же самое можно сделать с игроком, используя глобальный скрипт. Я создала его на основе скрипта от инструментов Кагренака, наносящих Нереварину смертельный удар.

 

begin aa_dae_curse

 

short extraDamage

float timer

 

if ( menumode )

return

endif

 

; if ( getjournalindex “такой-сякой” >= 1 )

; или if ( player->GetItemCount “пределенный предмет” >= 1 ), или другой ограничитель, например, другая глобальная переменная.

; stopscript “aa_dae_curse”

; return

; endif

 

 

if ( Player->GetHealth <= 15 )

player->ModCurrentHealth 500

endif

 

if ( timer < 1 )

set timer to ( timer + GetSecondsPassed )

return

endif

 

set timer to 0

Set extraDamage to Random 10

Set extraDamage to ( 0 - extraDamage )

Set extraDamage to ( extraDamage - 5 )

player->ModCurrentHealth extraDamage

 

endif

endif

endif

 

 

End

Сразу после запуска такого скрипта, у игрока начнет медленно падать здоровье, пока не достигнет отметки 15 пунктов. После этого, оно вдруг сразу довольно серьезно повысится, однако тут же начнет падать снова. Сон, ожидание, заклинания никак не смогут снять этот эффект (хотя, конечно, заклинания и зелья восстановления здоровья на секунды увеличивают здоровье, продлевая время каждого цикла). Идеальное проклятье, правда?

Чтобы остановить процесс, нужно остановить данный скрипт. В начале я написала варианты, как это можно сделать (по определенной журнальной записи, по получению определенного предмета в инвентарь, можно даже сделать зависимость от времени суток (глобальная переменная GameHour), сделав такое проклятье возможным только ночью. Но в таком случае скрипт понадобится перезапускать заново днем). Остановить скрипт можно и командой stopscript “aa_dae_curse” в диалоге или в другом скрипте.

Данный скрипт успешно работает с игроком. Но, возможно, можно сделать такой же локальный скрипт для актера. Однако по отношению к локальным скриптам команда stopscript не работает.

Ссылка на комментарий
Поделиться на другие сайты

if ( Player->GetHealth

player->ModCurrentHealth 500

endif

Почему бы тут не определить максимальное здоровье игрока и не использовать его вместо условных пятисот?

 

Данный скрипт успешно работает с игроком. Но, возможно, можно сделать такой же локальный скрипт для актера. Однако по отношению к локальным скриптам команда stopscript не работает.
Ничего не мешает использовать глобальный скрипт с неписем, хех.
Ссылка на комментарий
Поделиться на другие сайты

Лучше GetHealthGetRatio Может, 0.15?

Да и вообще, GetHealthGetRatio тут может привести к проблемам, если у игрока максимальное значение здоровья невысоко - тогда его значение может оказаться меньше, чем значение ModCurrentHealth.

 

Кстати, по идее, это проклятие может оказаться весьма полезным в бою, хех...

Ссылка на комментарий
Поделиться на другие сайты

Может, 0.15?
Это я как всегда образно, без конкретики.

 

Да и вообще, GetHealthGetRatio тут может привести к проблемам, если у игрока максимальное значение здоровья невысоко - тогда его значение может оказаться меньше, чем значение ModCurrentHealth.
Дык проверять.

Float MaxHealth

Float CurrentHealth

Set CurrentHealth to "Actor ID"->GetHealth 

Set MaxHealth to (CurrentHealth / "Actor ID" -> GetHealthGetRatio)

© MSfD

 

Это я к чему... можно ведь замутить так:

set var1 to ( MaxHealth - CurrentHealth )

Player->ModHealth var1

?

Ссылка на комментарий
Поделиться на другие сайты

Это я к чему... можно ведь замутить так:

set var1 to ( MaxHealth - CurrentHealth )

Player->ModHealth var1

?

Гм. И что тогда будет? Чегой-то я не догоняю.
Ссылка на комментарий
Поделиться на другие сайты

Прибавление ровно стольки здоровья, сколько не достает игроку.
Аа, верно, пустая моя бошка. ТруЪ.
Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Почему бы тут не определить максимальное здоровье игрока и не использовать его вместо условных пятисот?

 

Ничего не мешает использовать глобальный скрипт с неписем, хех.

 

Можно добавить переменную или при записе в журнале пропускать проклятие.

 

if (что-то)

return

endif

Ссылка на комментарий
Поделиться на другие сайты

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...