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

Управление и тестирование заклинаний

GetSpell, "Spell_ID" (returns Boolean/short)

If ( Player -> GetSpell, "heal companion" == 1 )

Возвращает «истину», если у объекта есть Spell_ID в инвентаре. Тем не менее, это, похоже, работает не для всех типов заклинаний. Способности и другие заклинания, относящиеся к расе/знаку рождения, не регистрируются этой функцией, а только те, что располагаются в главной части окна заклинаний. Пример смотри ниже.

GetSpellEffects, "Spell_ID" (returns Boolean/short)

if ( Player -> GetSpellEffects, "flame" == 1 )

Возвращает «истину», если Spell_ID наложен на вызывающий объект39. Следующее может быть добавлено в скрипт "trap_script", обсуждавшийся в главе "Кастование заклинаний" выше:

if ( Player -> GetSpellEffects, "flame" == 1 )

MessageBox "Вас подожгли."

endif

Это любимая возможность добавлять новые эффекты ("spell effects"). Создается простенькое заклинание, дающее минимальный эффект, например поднимающее удачу на 1 пункт в секунду. Функция GetSpellEffects используется, чтобы определить, наложено ли заклинание на игрока, и скрипт берет на себя все остальное. Смотри пример ниже.

Управление и тестирование эффектов заклинаний

GetEffect, Effect_ID (returns short)

If ( GetEffect, sEffectRestoreHealth == 1)

Эта функция возвращает ИСТИНУ, если вызывающий актер «поражен» эффектом. Внимание: эффекты, это не заклинания, а их составная часть. В Приложении вы найдете спиок всех эффектов.

RemoveEffects, Effect_ID#_enum

Player -> RemoveEffects, 75

Удаляет все заклинания с актера, которые включают этот Эффект. Для этой функции вам нужен номер ID-эффекта, в отличие от функции GetEffect, где вам нужен сам ID-эффекта (Браво, Bethesda!). И то, и то вы найдете в Приложении.

Важно: Эффекты, это не заклинания, а их составные элементы. В Приложении вы найдете список всех эффектов.

Пример: Это демонстрационный скрипт, позволяющий вам проверить, есть ли заклинание у игрока в списке, активно ли оно на игроке, действует ли оно на игрока эффектом и тогда убирает этот эффект. Запустите его, набрав в консоли "StartScript Magicscript".

Begin Magictest

short var_1

short var_2

short var_3

if ( Player -> GetSpell, "hearth heal" )

set var_1 to 1

else

set var_1 to 0

endif

if ( Player -> GetSpellEffects, "hearth heal" )

set var_2 to 1

else

set var_2 to 0

endif

if ( Player -> GetEffect, sEffectRestoreHealth )

Player -> RemoveEffects, 75 ; удалите эту строку, чтобы увидеть, что происходит

; обычно

set var_3 to 1

else

set var_3 to 0

endif

MessageBox "GetSpell: %.0f GetSpellEffects, %.0f GetEffect: %.0f ", var_1, var_2, var_3

End

Тестирование болезней

GetBlightDisease (returns Boolean/short)

GetCommonDisease (returns Boolean/short)

If ( Actor -> GetBlightDisease == 1 )

Обе функции возвращают 1, если вызывающий актер поражен либо Моровой болезнью, либо обычной, иначе возвращают 040. Они используются в скриптах болезни, которые дают больным или моровым животным их болезни:

Пример:

Begin diseaseBlackHeart

DontSaveObject

if ( CellChanged == 0 )

return

endif

if ( GetBlightDisease == 0 )

AddSpell "black-heart blight"

endif

End

Взрыв

ExplodeSpell “spellName”

ExplodeSpell "proj_trap_spell"

ExplodeSpell заставляет копию кастовать данное заклинание с дальностью касание на себя. Если при этом у заклинания есть зона поражение, то заклинание «взорвется». См TrapProjScript в секции Советов и Трюков.