Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрипты Morrowind.doc
Скачиваний:
92
Добавлен:
29.10.2018
Размер:
2.81 Mб
Скачать

Отслеживание убийств и нокаутов

OnDeath (returns Boolean/short)

If ( Actor -> OnDeath == 1 )

Возвращает 1 для 1 кадра, когда актер умирает. OnDeath, похоже, сбрасывается, после того как было использовано. Это также значит, что из глобального и локального скрипта, которые используют OnDeath, только в глобальный она заработает. Альтернативой может быть функция GetHealth36. В следующем скрипте появится только первый MessageBox (Информация с форумов / Argent, ThePal):

begin personScript

if ( OnDeath )

messagebox "1"

endif

if ( OnDeath )

messagebox "2"

endif

end

OnMurder (returns Boolean/short)

If ( Actor -> OnMurder == 1 )

Возвращает 1 для 1 кадра, когда актер убит. Условия OnMurder мне не совсем понятны, но из того, как она используется в игре, можно предположить, что OnMurder устанавливается, если вас объявляют, как убийцу ("о вашем преступлении стало известно"). Итак, убийство происходит только если вы убиваете кого-то незаконно И вас видели.

Пример: он устанавливает переменную, что используется в теме диалога «Советник Редорана» ("Redoran Hortator"), чтобы определить, убил ли игрок советника:

begin RedoranCouncilor

;не знаний...

short noLore

;для HT_Monopoly

short mageMonopolyVote

;для диалога «Советник»...

if ( OnDeath == 1 )

if ( OnMurder == 1 )

Set RedoranMurdered to 2

else

Set RedoranMurdered to 1

endif

endif

End

OnKnockout (returns Boolean/short)

If ( Actor -> OnKnockout == 1 )

Возвращает 1 для 1 кадра, когда актера нокаутируют (например, во время кулачного боя).

[no fix] GetDeadCount, "Actor ID" (returns short)

If ( GetDeadCount "divayth fyr" > 0)

Функция возвращает число копий (references) типа "Actor ID", которые были убиты. Полезная функция для квестового скриптования, чтобы отслеживать, какой NPC еще жив. Заметьте, что для диалога есть эквивалентная функция. Можно представить другое использование, например завоевание репутации у некоторых монстров, которые будут убегать от вас, вместо боя, после того, как вы убили больше 100 из них, и т.д.

Пример:

GetDeadCount часто используется для проверки, мертв ли конкретный NPC. Рекомендуется использовать "> 0" в таких случаях, так как никогда не знаешь, не добавит ли чужой мод еще одного актера с тем же ID, так что лучше поостеречься.

Begin araraUvulasScript

short noLore

if ( CellChanged == 0 )

return

endif

if ( GetDeadCount "Neloth" > 0 )

Disable

endif

End

Воскрешение мертвого Актера

Resurrect

gateway_haunt->Resurrect

Эта функция вернет актера к жизни. Его параметры и инвентарь сбросятся37, он просто «переродится». В функции была (или есть, не знаю, была ли она исправлена) ошибка при использовании функции на игроке — это делало невозможным кастовать заклинания как игроку, так и актерам. После сохранения и перезагрузки этот эффект исчезал.

Примечание: Скрипт The Puzzle Canal просто использует выражение GetHealth <10, чтобы определить, когда игрок при смерти, а затем «воскрешает» его, возвращая его полное здоровье, так что игрок реально не умирает.

Пример: некоторые люди выносливее прочих …

Begin dandrasScript

short deathbed

float dandrasHealth

if ( deathbed == -1 )

return

endif

set dandrasHealth to GetHealth

if ( dandrasHealth <= 50 )

if ( dandrasHealth < 1 )

Resurrect

ModHealth 100

endif

set deathbed to 1

endif

if ( deathbed == 1 )

ForceGreeting

endif

End dandrasScript