LofZ Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 В Warcraft III: Frozen Trone у харизматичного героя кровавых магов есть способность "феникс". При ее использовании выбрасывается в мир птица-компаньон. У этого феникса большое здоровье, но оно тут же начинает падать, пока не станет совсем низким, и тогда феникс превращается в яйцо, а через несколько мгновений здоровье снова восстанавливается. Примерно то же самое можно сделать с игроком, используя глобальный скрипт. Я создала его на основе скрипта от инструментов Кагренака, наносящих Нереварину смертельный удар. begin aa_dae_curse short extraDamagefloat timer if ( menumode )returnendif ; 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 endifendif EndСразу после запуска такого скрипта, у игрока начнет медленно падать здоровье, пока не достигнет отметки 15 пунктов. После этого, оно вдруг сразу довольно серьезно повысится, однако тут же начнет падать снова. Сон, ожидание, заклинания никак не смогут снять этот эффект (хотя, конечно, заклинания и зелья восстановления здоровья на секунды увеличивают здоровье, продлевая время каждого цикла). Идеальное проклятье, правда? Чтобы остановить процесс, нужно остановить данный скрипт. В начале я написала варианты, как это можно сделать (по определенной журнальной записи, по получению определенного предмета в инвентарь, можно даже сделать зависимость от времени суток (глобальная переменная GameHour), сделав такое проклятье возможным только ночью. Но в таком случае скрипт понадобится перезапускать заново днем). Остановить скрипт можно и командой stopscript “aa_dae_curse” в диалоге или в другом скрипте. Данный скрипт успешно работает с игроком. Но, возможно, можно сделать такой же локальный скрипт для актера. Однако по отношению к локальным скриптам команда stopscript не работает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Boma Kuro Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 if ( Player->GetHealth player->ModCurrentHealth 500 endifПочему бы тут не определить максимальное здоровье игрока и не использовать его вместо условных пятисот? Данный скрипт успешно работает с игроком. Но, возможно, можно сделать такой же локальный скрипт для актера. Однако по отношению к локальным скриптам команда stopscript не работает.Ничего не мешает использовать глобальный скрипт с неписем, хех. Ссылка на комментарий Поделиться на другие сайты Поделиться
NmLs Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 if ( Player->GetHealth Лучше GetHealthGetRatio Ссылка на комментарий Поделиться на другие сайты Поделиться
Boma Kuro Опубликовано 26 марта, 2009 Жалоба Поделиться Опубликовано 26 марта, 2009 Лучше GetHealthGetRatio Может, 0.15?Да и вообще, GetHealthGetRatio тут может привести к проблемам, если у игрока максимальное значение здоровья невысоко - тогда его значение может оказаться меньше, чем значение ModCurrentHealth. Кстати, по идее, это проклятие может оказаться весьма полезным в бою, хех... Ссылка на комментарий Поделиться на другие сайты Поделиться
NmLs Опубликовано 27 марта, 2009 Жалоба Поделиться Опубликовано 27 марта, 2009 Может, 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? Ссылка на комментарий Поделиться на другие сайты Поделиться
Boma Kuro Опубликовано 27 марта, 2009 Жалоба Поделиться Опубликовано 27 марта, 2009 Это я к чему... можно ведь замутить так:set var1 to ( MaxHealth - CurrentHealth )Player->ModHealth var1?Гм. И что тогда будет? Чегой-то я не догоняю. Ссылка на комментарий Поделиться на другие сайты Поделиться
NmLs Опубликовано 28 марта, 2009 Жалоба Поделиться Опубликовано 28 марта, 2009 Прибавление ровно стольки здоровья, сколько не достает игроку. Ссылка на комментарий Поделиться на другие сайты Поделиться
Boma Kuro Опубликовано 28 марта, 2009 Жалоба Поделиться Опубликовано 28 марта, 2009 Прибавление ровно стольки здоровья, сколько не достает игроку.Аа, верно, пустая моя бошка. ТруЪ. Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 31 октября, 2010 Жалоба Поделиться Опубликовано 31 октября, 2010 Почему бы тут не определить максимальное здоровье игрока и не использовать его вместо условных пятисот? Ничего не мешает использовать глобальный скрипт с неписем, хех. Можно добавить переменную или при записе в журнале пропускать проклятие. if (что-то)returnendif Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения