00054. Внешние скрипты в main.scm
Внешние скрипты в main.scm|Начинаем новый урок по Sanny Builder. И на этот раз мы рассмотрим внешние скрипты.|wmysterio|wmysterio||||Всем привет! Что значит"внешние"? Это те скрипты, которые загружаются из файлы "script.img". Например: скрипт авто-тюнинга, парашюта или казино. Сегодня мы создадим один такой скрипт и рассмотрим основные опкоды для загрузки таких скриптов.
Прежде всего нужно написать сам скрипт ( пишутся как и обычные потоки в мейне ). Для примера у меня будет внешний скрипт, суть которого заключается в том, что когда машина игрока перевернута, то при нажатии кнопки CTRL` машина будет перекидываться обратно на колёса.
Прежде всего напишем поток ":NOFLIP". И переместим его в самый конец мейна ( все внешние скрипты пишутся после блока с миссиями ). Вот сам код:
Можно было и запустить этот поток командой "create_thread", но раз мы учимся создавать внешние скрипты, то мы запускать его мы будем иным образом. Прежде всего нужно объявить этот поток как внешний. Находим стоку вначале мейна:
Меняем значение 0 на 1, это указывается общее количество внешних скриптов. Так, как мы планируем создать новый внешний скрипт, то значение нужно прибавить. Далее нужно написать сам потом и дать имя нашему внешнему скрипту. Сразу после этого допишем строку:
Здесь: NO_FLIPPED - имя нашего внешнего скрипта @NOFLIP - указываем метку с которой будет начинаться сам скрипт // 0 - это обычный комментарий, но я специально его написал, так как каждый скрипт имеет свой номер, счёт которых начинается с нуля. Дальше вы увидите зачем я это сделал.
Таким образом мы получим:
Теперь рассмотрим основные опкоды для работы внешних скриптов. Опкод записует в переменную текущий статус внешнего скрипта:
Далее:
Опкод загружает внешний скрипт.
Проверка: "Внешний скрипт загружен?"
Опкод запускает внешний скрипт.
Опкод выгружает с памяти внешний скрипт ( завершает его ).
Здесь: 0 - номер внешнего скрипта NO_FLIPPED - указываем имя нашего внешнего скрипта
Это основные команды. Давайте теперь напишем поток, который будет запускать, написанный нами, внешний скрипт. Создадим поток с именем ":TRIGGER" и напишем необходимые условия:
Как видите сначала мы запишем в переменную статус внешнего скрипта, дале мы проверяем: "СЖ в машине?" и "внешний скрипт отключен?". Если эти условие выполняются, то проверяем "Внешний скрипт загружен?". Если скрипт не загружен, то загружаем его, и так дальше, пока скрипт всё таки не загрузится. После загрузки идёт старт внешнего скрипта опкодом 0913. Дальше игра ждёт окончания потока ":NOFLIP". То есть, когда СЖ выйдет с тачки, то поток завершится, а затем и завершится внешний скрипт опкодом 090F.
Теперь запускаем поток ":TRIGGER" командой "create_thread" из потока "MAIN". В результате мы получили неплохую палочку-выручалочку. Теперь машина всегда будет под вашим контролем ;) Вот код мейна: main.txt. Это один из самых простых примеров, по этому разобраться в них думаю сложно не будет.
Теперь поговорим о том, зачем они нужны. Я сначала не понимал зачем они вообще нужны. Работал только с обычными потоками. Но вдруг игра начала сильно тормозить. Я не мог понять с чего это вдруг. Потом увидел статью о внешних скриптах и попробовал сделать несколько. На моё удивление, игра перестала тормозить. Как оказалось, игра выделяет дополнительную память под внешние скрипты, что значительно увеличивает быстродействие.
Особенно помогает, если в потоке идёт очень много проверок и арифметических операций. Максимальное количество внешних скриптов - 70 ( одновременно работающих ), то есть мы так же получаем дополнительный бонус в потоках ( 70+96=166 ) 166 штук!!! Однако не стоит злоупотреблять этим, поэтому старайтесь максимально снизить количество потоков. Например, не нужно делать потоки для каждого внешнего скрипта, а стараться объединять их в один.
И напоследок рассмотрим ещё несколько полезных опкодов:
Внешние скрипты инициализируются как строки ( задают им строковые имена ( не больше 7 символов! ) ). Привязываются к интерьеру, однако точный принцип работы этих опкодов я точно не знаю.
Внешний скрипт будут выполнять актёры с определённой моделью. В оригинальном мейне эти опкоды идут в паре. Здесь:
Здесь: #BMYDRUG - модель актёра, который будет выполнять действия во внешнем скрипте 'DEALER' - строковое имя скрипта 19 (DEALER) - номер и имя скрипта 100 - приоритет в процентах ( целое число )
Внешний скрипт привязывается к объекту.
× **Примечание:** опкоды 08E8, 0928 и 0929 не требуют запуска. Они запускаются автоматически× **ВАЖНО:** Если Вы добавили внешний скрипт, то компилировать его нужно после выхода с игры ( полностью )!
P.S Попробуйте тоже сделать какой-то примитивный внешний скипт, чтобы попрактиковаться. На этом урок окончен. Спасибо за внимание! :)|1621|1|0||vneshnie_skripty_v_main_scm|1499523457
Last updated