00055. Cleo. Основные понятия, отличия от main'а, простые примеры
Cleo. Основные понятия, отличия от main'а, простые примеры|Здравствуйте, уважаемые пользователи сайта. Пришло время немного оставить скриптить main.scm и перейти к Cleo.|wmysterio|wmysterio||||Большинство приёмов и возможностей мы рассмотрели, и дальше нет смысла писать их в мейне, так как постоянное начало новой игры думаю достаёт. Поэтому уроки дальше будут на Cleo.
Действуют Cleo-скрипты также, как и внешние скрипты из main.scm, только загружать их не нужно. Они сами загружаются в начале игры. Особенностью этих скриптов в том, что не нужно начинать новую игру, как это было в мейне. Так же важно, что в клео нельзя создавать новые потоки. То есть "create_thread" здесь не пройдёт. Один скрипт - один поток. Рассмотрим написание простейшего скрипта:
Здесь: {$CLEO} - указываем компилятору, что это будет cleo-скрипт ( обязательно ставьте эту строку, иначе компилятор скомпилирует его как "*.scm" и закинет его папку игры "data/script", указанной в настройке СБ ). Такую конструкцию принято называть директивой. 0000: - опкод, который устраняет ошибку "Переход на нулевой оффсет". Эта ошибка возникает, когда идёт переход на первую метку потока. В нашем случаи такого перехода нет, но я всегда его пишу, что бы не приходилось его добавлять в будущем. Эта ошибка унаследовалась от внешних скриптов, которые также не поддерживают переход на первую метку потока. 0A93: end_custom_thread - именно этим опкодом завершаются клео-скрипты. Это очень важно, потому что end_thread вызывает ошибку при загрузке ( сохранении ) игры.
В Cleo-скриптах не рекомендуется использовать глобальные переменные. Это нужно, как минимум, для того, что бы случайно не изменить переменную в main.scm. То есть глобальные переменные действуют и на CLEO. Однако некоторые переменные всё же можно ( и нужно :) ) используются в CLEO. Это такие, как "$PLAYER_CHAR", "$PLAYER_ACTOR", "$ONMISSION" и "$PLAYER_GROUP". Если всё-же можно использовать собственные глобальные переменные, создавайте как можно длинные и запутанные имена или такие, каких нет в main.scm. Например: "$KOLICHESTVO".
Но всё же рекомендую использовать локальные переменные. Переменные от "0@" до "31@" Вы можете свободно использовать для хранения даных. А переменные "32@" и "33@" - использовать в качестве таймера, которые, кстати ( как написано в справке ), не запускаются опкодом "03C3", также не рекомендовано использовать опкоды "03C4" и "04F7" ( статус-тексты ). У меня, например, постоянные проблемы с ней, хотя в других ничего плохого не происходит. Можете протестировать. Если у вас в всё окей, то юзайте на здоровье :) Особенности потоков те же, что и в мейне. Можно использовать циклы, переходы, массивы и т.п.
Скрипт мы написали. Когда мы компилируем его в первый раз, то компилятор предложит нам сохранить его. Указываем папку CLEO ( что в папке с игрой ). Другой способ - создать текстовый файл в папке "Cleo" и переместить его на санник, затем скомпилировать. Имя файла может быть любое, но обычно его называют так же, как и поток. Потоки, кстати, можно и не называть, то есть сразу писать скрипт без "thread".
Раз мы будем писать на CLEO , то полностью отредактируем мейн, сделаем его минимальным и работоспособным. Немного позже я скажу зачем мы это сделали. Вот код нашего мейна:
Компилируем его и запускаем новую игру. Как видим, никаких ошибок не возникало. По этому смело закрываем мейн и начинаем писать Cleo-скрипты ;)
Прежде всего напишем скрипт спавна транспорта. Создаем в папке CLEO текстовый файл и называем его, например, "CAR.txt". Дальше запускаем ярлык санника и ожидаем запуска программы. После этого перемещаем файл в окно программы:
Как видим появилось поле редактора :) Дальше уже пишем сам скрипт:
Суть скрипта проста - нажимаем кнопку 2` и перед СЖ появится кар "Bullet". Как видите, мы не использовали опкод "0A93" в нашем скрипте, так как мы возвращаемся постоянно на метку "@CAR". В таких случаях обычно не пишут опкод завершения потока, так как он никогда не выполнится :) Компилируем. Думаю вы заметите, что в папке создался и "*.cs"-файл, так что клео-скрипт создан :)
Давайте удалим опкод "0000" и попробуем скомпилировать. Как видите, в нас ошибка: "Переход на нулевой оффсет". Как уже было написано выше, это случается когда идёт переход на первую метку. Именно для этого создан опкод "0000" - он делает небольшое смещение от начала потока, что позволяет избежать перехода нулевой оффсет. Также можно написать вместо него задержку "wait 0" или любой другой опкод, не влияющий на процесс игры. Это тоже помогает ;)
Давайте протестируем скрипт. Результат виден на лицо - тачка отлично "спавнится" возле Карла:
В нас ещё есть много материала, поэтому в ближайшие дня напишу ещё парочку уроков.|3456|1|0|43780319png
600375
400250``\|01129892
png393
270
Last updated