×
Menu

TES CS - Scripts

Руководство по (нативным) скриптам МВ для чайноков:
https://www.nexusmods.com/morrowind/mods/13969 Morrowind Scripting For Dummies
9ая версия.
В ру-нете, в основном, можно найти в основном 8ую, а также еще более старые.
См. на фулрест, или тесалл (tesall.ru).
Также см. здесь:
@_Notes_for_Modmaking_ver.__\Additional_Files\TXT_files
Morrowind_Scripting_for_Dummies_9 - Word-EN.zip
Т.е. архив MWSFD9 добавлен в заметки (на всякий случай и для полноты картины).
 
https://www.nexusmods.com/morrowind/mods/43828
Edits over 365 scripts to amend many issues, with the Tribunal and Bloodmoon expansions being the primary focus.
 
Взято с Фуллрест(С) Larkin(С)
http://www.fullrest.ru/forum/topic/18520-openmw-ili-mechty-inogda-sbyvayutsya/page-94#entry967388
Насколько я знаю скрипты запускаются в каждом кадре не в алфавитном порядке а в порядке их создания в редакторе (в порядке их внутренних ID). При этом вроде нет разницы глобальный\локальный скрипт.
startscript не передает управление в другой скрипт (это не вызов функции) а дает указание что скрипт должен начать исполнятся со следующего кадра.
stopscript предотвращает запуск скрипта и снимает цель на которую скрипт запущен. Важный момент, startscript не меняет цель если цель уже есть, даже если попытаться перенаправить его на другую цель. Чтобы это правильно работало, нужно перед вызовом startscript FOO вызвать stopsript FOO. stopsript очистит цель и startscript сможет принять новую цель.
Я обнаружил это, когда клепал плагин про отображение урона.
 
Примечание.
Все скрипты, как и диалоги начинают писаться с низу!
Т.е. самое первое тригерное условие скрипта, должно находится в низу оного, а последующие Return отсекают его  от повторного выполнения.
Это оптимизирует скрипт и предотвращает повторное срабатывание.
Условия требующие постоянного мониторинга, должны находится выше.
А оптимизаторы:
;************************************************************
if ( MenuMode == 1 )
    return
endif
;************************************************************
If ( framecounter < 10 )
    set framecounter to ( framecounter + 1 )
    Return
Endif
set framecounter to 0
 Хотя скрипт и пишется с конца, но читается Игрой, от своего начала! 
Тоже самое и с диалогами!
 
Примечание.
- скрипты локально\глобальные после остановки пишутся в сейву еще какое-то время.
Вероятно дня 3. Когда происходит очистка памяти от НПСов и прочего, вероятно удаляются и такие скрипты.
 
Примечание.
- скрипты  выгружается ПОСЛЕ перезагрузки сейва если в них есть команды стоп.
Т.е. в следующую сейву, такой скрипт НЕ записывается.
 
Примечание.
- скрипты начинают работать сразу при загрузке ячейки локации в ОЗУ. Т.е. много раньше того, как вы войдете в саму ячейку!
Предположительно +2, 4 ячейки во все стороны от игрока.
Так что, для локальных скриптов объектов находящихся в мире игры, обязательно ставить блок на дистанцию!
<= 2048 Return.
 
Примечание.
- при работе между скриптами в одном окне, используйте опцию ВЫРЕЗАТЬ, а не копировать.
Т.е. если скопировать текст одного скрипта, затем нажать кнопку "следующий скрипт" - то текст не будет в него вставлен!
Но если вырезать, нажать - отказаться от сохранения изменений - можно вставить вырезанный фрагмент в следующий скрипт.
Либо работать в двух окнах.
 
Примечание.
- Странный глюк.. сделал перемещение НПС скриптом по миру, через ПОЗИЩЕН. Так они не перемещались!
Поменял на позишен Целл все заработало... хотя это должно лишь для экстерьеров работать. фз. странно.
Т.е. лучше всегда использовать ПозишенЦелл, а не "позишен" без целл.