00083. Запуск другого потока с Cleo-скрипта
Запуск другого потока с Cleo-скрипта|Сегодня мы научимся запускать Cleo-скрипты с других скриптов. Хотя точнее было бы сказать - запуск других потоков с Cleo-срипта.|wmysterio|wmysterio||||Всем привет! Начнём очередной урок по скриптингу. Наверное, Вы видели в файловом архиве мой скрипт "Универсальная стрелка", суть которого было облегчить жизнь скриптерам с удалением маркеров. Сегодня мы напишем похожий скрипт.
Начнём с того, что нам потребуется написать скрипт-запуск. Для примера, мы напишем скрипт "Бомба". Когда СЖ садится в машину и нажимает клавишу J, то автомобиль будет заминирован. Когда игрок нажмёт клавишу <kbd>K
- произойдёт взрыв! Начнём с простенького - проверим находится ли игрок в машине и т.п.
Скрипт готов на 99%! Нам осталось написать только сам скрипт бомбы. Это значит нам нужно написать ещё один Cleo-скрипт, который будет имитировать взрыв, поэтому напишем его:
Обратите внимание на выражение:
В этом случае санник скомпилирует скрипт с расширением "*.s" и загружатся скрипт вместе с игрой не будет. Назовём его "BOMB", что бы файл соответствовал названию файла ( для удобства ).
Суть скрипта проста: когда нажимаем кнопку K` - переменной "1@" задаётся значение 1 и будет осуществлён выход с цикла командой "break". После этого обязательно ставим проверку на то, что переменная действительно равна единице, что бы выполнить блок со взрывом. Если это условие не выполняется, значит машина не существует и переменная "1@" никак не сможет изменить своё первоначальное значение.
От сюда и главный вопрос: как скрипт будет знать, что эта машина существует, если в скрипте нигде не создавалась она? Ответ кроется в запуске нашего скрипта бомбы. Чтобы запустить его, нужно воспользоваться опкодом.
Здесь: BOMB.s" - имя файла, что мы скомпилировали. Этот файл обязательно должен находится в папке "CLEO", иначе игра вылетит при попытке запуска
Так как же наш скрипт бомбы узнает о машине? Всё очень просто! К опкоду "0A92" нужно добавить параметр с переменной нашей машины. Для этого мы должны в скрипте-стартере получить машину игрока и передать эту переменную в опкод "0A92":
Из этого можно сделать вывод, что запуск нового потока осуществляется за принципом с scm-функциями. Передать можно до 34 параметров. Впрочем, эта возможность доступна и обычному "create_thread" из "main.scm", но есть главная проблема...
Самое интересное то, что вызывать один и тот же поток можно очень много раз. В нашем скрипте-стартере доступна такая возможность. Мы можем сесть в машину и нажать кнопку J, затем сесть в другую машину и снова нажать кнопку <kbd>J
. Обе машины будут "заминированы". После этого нужно нажать всего 1 раз кнопку K`, как все машины, которые заминированы, будут взорваны! Но не всё так будет в мейне. Это и есть проблема. С запуском всё получится, но если сохраниться с активными двумя и больше потоками приведёт к вылету игры при загрузке, так как в мейне можно сохранять только 1 активный поток с тем же именем.
Вот вам небольшое задание: написать скрипт-стартер, который будет узнавать текущую машину игрока и написать скрипт, который будет осуществлять перекраску автомобиля. В качестве параметров должно быть машина и два параметра цвета, в который машина будет окрашена. Тоесть, нужно будет реализовать такой код запуска:
|2059|1|0||zapusk_drugogo_potoka_s_cleo_skripta|1499844974
Last updated