CLEO
August 27, 2020

CLEO: Урок 2 - Пишем свой скрипт

Сегодня мы попробуем написать первый полноценный CLEO-скрипт, используя знания, полученные на прошлом уроке. Наш скрипт должен будет завершать запущенную миссию, если здоровье игрока станет меньше 50.

И так, пишем две строки с которых начинается любой CLEO-скрипт

{$CLEO}
0000:

Наш скрипт будет повторяться бесконечно, поэтому 0A93: end custom thread в конце писать не нужно.

Теперь добавляем метку START и добавляем задержку wait 0, чтобы игра не зависла

{$CLEO}
0000:

:START
wait 0

Далее нужно написать условие, при которых скрипт будет завершать миссию. Напишем условие: если миссия запущена и игрок существует, то идем дальше по скрипту, если нет - возвращаемся на метку START.

if and
$ONMISSION == 1 
0256:   player $PLAYER_CHAR defined
jf @START

Отлично, условие написано, теперь нужно добавить действия, которые будут выполнены, если условие верно.

0226: 1@ = actor $PLAYER_ACTOR health
if
1@ < 50
jf @START
045C: abort_mission
wait 5000

И так, что мы делаем в данном куске кода:
1) Записываем текущее здоровье игрока в переменную 1@
К сожалению в CLEO нельзя сразу проверить здоровье актера одним опкодом, например так:
actor $PLAYER_ACTOR health < 50
Поэтому придется сначала записать здоровье в переменную, а уже потом проверять переменная меньше 50 или нет.
2) Добавляем проверку на то, что переменная 1@ (здоровье) меньше 50
3) Если условие не верно и переменная больше 50, то возвращаемся на метку START
4) Если верно - завершаем миссию
5) Добавляем задержку 5 секунд, чтобы скрипт подождал пока миссия завершится

Теперь нам нужно сделать так, чтобы скрипт постоянно повторялся. Чтобы миссия завершалась каждый раз, когда здоровье игрока будет меньше 50.

Для этого в конце добавим опкод возвращения на метку START.

jump @START

Если мы добавим 0A93: end_custom_thread вместо jump @START, то скрипт отключится сразу после того, как будет завершена миссия. Заново он начнет работать только после перезагрузки игры.

Вот что у нас получилось в итоге:

{$CLEO}
0000:

:START
wait 0
if and
$ONMISSION == 1 
0256:   player $PLAYER_CHAR defined
jf @START
0226: 1@ = actor $PLAYER_ACTOR health
if
1@ <= 50
jf @START
045C: abort_mission
jump @START

Теперь нажимаем вкладку Запуск/Компилировать или жмем клавишу F6. Далее выбираем путь до папки CLEO в GTA SA.
Вот и всё, скрипт создан и установлен в игру. Найти его можно в папке CLEO.

Последний шаг. Запустите игру и проверьте работает ли скрипт. Если он не работает - внимательно сверьте код в статье и тот, что вы написали, наверняка найдете ошибку.
Если скрипт работает - поздравляю! Вы уже на шаг ближе к пониманию устройства CLEO скриптов (Вы же не просто скопировали и вставили весь код, да? МММмм?)

Надеюсь, вам все было понятно. До следующего урока!

К следующему уроку ->