Как написать клео скрипт

Думаю у всех бывало желание создать собственное клео. Сегодня мы напишем скрипт, который будет писать в чат при нажатии кнопки на клавиатуре

Вам нужно скачать программу по имени «Sanny Builder» ее надо установить.

Запускаем программу. Нажимаем наверху кнопку «Файл» затем — Создать.

Любое клео начинается с строчки {$CLEO .cs}, если вы ее не вводите в начало скрипта то у вас будет крашить.

У нас получается :
{$CLEO .cs}

Затем нам надо перейти к функции добавляем :

gosub @cheat_master

У нас получается :

{$CLEO .cs}
gosub @cheat_master

Пишем
:cheat_master

У нас теперь получается :

{$CLEO .cs}
gosub @cheat_master
:cheat_master

И чтобы нас не крашило когда мы выполняем функцию

Пишем после функции «:cheat_master» :
wait 0

Получается :
{$CLEO .cs}
gosub @cheat_master
:cheat_master
wait 0

Чтобы на нажатии например кнопки минус наш код выполнялся пишем после этих проделанных действие :

if 0AB0: key_pressed 109

Получается :
{$CLEO .cs}
gosub @cheat_master
:cheat_master
wait 0
if 0AB0: key_pressed 109

Потом пишем ( обязательно!!! ) :

jf @cheat_master

Получается :
{$CLEO .cs}
gosub @cheat_master
:cheat_master
wait 0
if 0AB0: key_pressed 109
jf @cheat_master

Сейчас пишем код :
0AF8: «Hello World!» color 0xFFFFFF // 0xFFFFFF — это ваш цвет сообщение //

И у нас получается :
{$CLEO .cs}
gosub @cheat_master
:cheat_master
wait 0
if 0AB0: key_pressed 109
jf @cheat_master
0AF8: «Hello World!» color 0xFFFFFF // 0xFFFFFF — это ваш цвет сообщение //

Все! Чтобы скомпилировать нажимаем F6

Если вы сделали все правильно и Sanny Builder не выдал ни ошибка!
То я вас поздравляю вы сделали свой первый Cleo-Скрипт!

Заходим в игру и нажимаем кнопку «Минус» и у нас в чате высветиться сообщение «Hello World»

Если кому-то я помог выдайте репутацию пожалуйста smile

Версия 7.5 дарит возможность генерировать CLEO-скрипты! Принцип написания скриптов и основные возможности не отличаются от основной ветки генератора. Но в этом режиме есть некоторые особенности, о которых стоит рассказать.

Подключение и настройка написана в разделе

Установка и настройка. Компиляция скриптов

. Главное отличие в этой настройке: нам надо подключать библиотеки GTA.III.CLEO, GTA.VC.CLEO или GTA.SA.CLEO. Также здесь нужно указывать папку с игрой, так как метод SetMainSCMFolder недоступен:

static void Main( string[] args ) {

// Куда сохранять FXT-файлы

Generator.SetFXTFolder( @»D:ProgrammGTA_SA Career v2.0modloaderwmysteriocleocleo_text» );

Generator.SetGTAFolder( @»D:ProgrammGTA_SA Career v2.0″ );

Generator.SetSannyBuidlerFolder( @»D:ProgrammSanny Builder 3″ );

//Generator.Start<MAIN>();

Generator.Compile<MAIN>( false );

Между символами < и > указывается тип, который наследует Thread, Mission или MissionCustom. Чтобы создать CLEO-поток, достаточно этого кода:

public class MAIN : Thread {

public override void START( LabelJump label ) {

Мы видим, что никак отличий в коде в сравнении с MAIN.scm потоком не наблюдается. Команда end_thread будет заменена на опкод 0A93: end_custom_thread. Такие же манипуляции будут с другими командами, которые используются только в CLEO.

Обратите внимание на название класса. Генератор будет использовать его как название файла. Особых ограничений на название не накладывается, но рекомендую использовать прописные символы в имени класса.

По умолчанию скрипт компилируется с расширением CS или СМ в папку ИГРАCLEO. Если нужно изменить эти свойства, то здесь используется система атрибутов:

public class MAIN : Thread {

public override void START( LabelJump label ) {

Всего таких атрибутов 3; Вы можете использовать только те, которые нужны, игнорируя остальные. Код выше сохранит скрипт по этому пути: ИГРАCLEONEW_DIRMAIN.H.

Убедитесь, что путь содержит все нужные папки на жестком диске!

Атрибут EnableThreadSaving реализует опкод 0A95, но без его явного вызова. Этот атрибут, как и Extension, не применяется к миссиям и будет игнорироваться.

Компиляция нескольких скриптов

Если есть необходимость компиляции целой пачки скриптов, то нам достаточно несколько раз вызывать метод Compile:

Generator.Compile<SCRIPT1>();

Generator.Compile<SCRIPT2>();

Generator.Compile<SCRIPT3>();

Generator.Compile<SCRIPTN>();

Обратите внимание, что если использовать команду

create_thread<SCRIPT_NAME>();

то поток SCRIPT_NAME будет включен в финальную сборку и скомпилируется самостоятельно вместе с исходным скриптом!

Содержание урока:

1. Предыстория
2. Программы
3. Находим персонажа
4. Ставим персонажа

1. Предыстория

Все вы наверняка хотите научиться делать CLEO-скрипты. Этот урок поможет вам воплотить мечту в реальность. Но это не очень быстро и легко!

Чтобы научиться делать годные скрипты потребуются месяцы или даже годы…. Но не буду вас расстраивать, у вас всё точно получится! Это первый урок из нескольких.

2. Программы

В этом разделе я познакомлю вас с программами, которые нужны для создания мода.

Нам понадобятся: Sanny Builder 3 (создание скриптов) и Ped Editor (просмотр моделей персонажей).

3. Находим персонажа

Теперь нам предстоит найти название персонажа. Когда вы откроете Ped Editor, у вас появится интерфейс программы.

Уроки CLEO. Урок №1: ставим персонажа на локацию

Теперь пролистайте строку с персонажами вниз и найдите подходящего. В моём случае это HMORI.

Уроки CLEO. Урок №1: ставим персонажа на локацию

Не закрывая программу, открываем Sanny Builder 3, в которой будем создавать уже сам скрипт, который поставит персонажа на локацию.

3. Ставим персонажа

Теперь пришло время самым интересным действиям — созданию CLEO-cкрипта. Когда вы открыли окно, вы увидите лишь пустой экран. Но нажмите вот на этот значок: Уроки CLEO. Урок №1: ставим персонажа на локацию.

Появится уже немного другое окно, выглядит как простой текстовый документ:

Уроки CLEO. Урок №1: ставим персонажа на локацию

В первой строке нам нужно лишь написать:

{$VERSION 3.1.0027}
{$CLEO .cs}

//————-MAIN—————

Уроки CLEO. Урок №1: ставим персонажа на локацию

Это начало скрипта. Потом нужно написать переход и проверку загрузки персонажа:

:NONAME_1
Model.Load(здесь указывается название модели персонажа после символа «#», в моём случае это: #HMORI)
038B: load_requested_models

Уроки CLEO. Урок №1: ставим персонажа на локацию

Далее пишем:

1@ = Actor.Create(CivMale, #HMORI, )
Actor.Angle(1@) =

Это место, куда должен быть поставлен персонаж и угол разворота.

Чтобы узнать эти координаты, нужно зайти в игру. Просто нажмите на Уроки CLEO. Урок №1: ставим персонажа на локацию, и игра запустится без титров, так быстрее.

Далее загружаем игру, выходим на улицу, встаём на нужное место и скрываем игру.

Разворачиваем Sanny Builder 3, ставим курсор после «CivMale, #HMORI,». Потом нажимаем Shift+Ctrl+C. Координаты будут вставлены. В моём случае это вот так выглядит:

{$VERSION 3.1.0027}
{$CLEO .cs}

//————-MAIN—————

:NONAME_1
Model.Load(#HMORI)
038B: load_requested_models
1@ = Actor.Create(CivMale, #HMORI, 2486.9573, -1656.5065, 13.3479)
Actor.Angle(1@) =

А там, где написано «Actor.Angle(1@) =», нужно нажать Shift+Ctrl+E и появится угол разворота игрока. Вот так получится:

{$VERSION 3.1.0027}
{$CLEO .cs}

//————-MAIN—————

:NONAME_1
Model.Load(#HMORI)
038B: load_requested_models
1@ = Actor.Create(CivMale, #HMORI, 2486.9573, -1656.5065, 13.3479)
Actor.Angle(1@) = 178.8208

end_thread

В конце мы также поставили метку окончания скрипта (end_thread)

Всё, теперь скрипт закончен и игра не вылетит! Можно конвертировать скрипт и посмотреть что получилось, для этого нажмите на Уроки CLEO. Урок №1: ставим персонажа на локацию или F6.

Далее назовите свой файл и сохраните. Если вылетела ошибка, значит вы сделали что-то неправильно! Перепроверьте это:

{$VERSION 3.1.0027}
{$CLEO .cs}

//————-MAIN—————

:NONAME_1
Model.Load(#HMORI)
038B: load_requested_models
1@ = Actor.Create(CivMale, #HMORI, 2486.9573, -1656.5065, 13.3479)
Actor.Angle(1@) = 178.8208
end_thread

Уроки CLEO. Урок №1: ставим персонажа на локацию

Всё, заходим в игру.

Выбранный персонаж стоит.

Уроки CLEO. Урок №1: ставим персонажа на локацию

В следующем уроке мы будем назначать персонажу анимацию.

Дарова, [visitor][/visitor]! В этой теме разберем наболевшую тему для новичков — писать код CLEO не на метках.

Вот вы думаете, что освоили технику написания кода на метках и рады этому. Спешу разочаровать! Писать код на низкоуровневых конструкциях удел психопатов; если Вы психопат, то ладно, можете продолжать то, что делаете.

Разберем пару нюансов низкоуровневых конструкций:

  1. Легко понимаем, если кодер впервые узнал, что сфера программирования вообще существует, но знает пару слов на английском (jump, else и пр.);
  2. Неудобно читаем, и в некоторых моментах сами же теряетесь (не правда ли?; не говорим про код в котором меньше 10 меток);

При написании на высокоуровневых конструкциях код так же легко читаем, конечно же при условии того, что Вы понимаете их. Тяп-ляп тоже не надо делать.

Почему же стоит всё таки писать на высокоуровневых конструкциях?
Если всё таки в CLEO это возможно допустить, то в других языках это недопустимо. Если Вы планируете больше не связываться с языками, то хотя бы займитесь саморазвитием на этом чудо-языке.
Я Вас не убедил? — ну и ладно. Можете проваливать!
Что-то зацепило? — неплохо. А выдержите ли Вы следующий этап? Понять эти высокоуровневые конструкции.

P.S. Все примеры для примеров, скомпилировать просто так их не получится: необходимо добавлять директиву {$CLEO}, нулевой оффсет и прочее для правильной компиляции.

Самая простая конструкция. Имеет суфиксы «and» и «or», которые разделены пробелом между if.
В себе может содержать только какое-то условие, которое верно (true) или ложно (false). В if and и if or этих условий может быть несколько (больше одного).

Пример if:

1@ = 1000
if 1@ > 1000
then
    0AF8: samp add_message_to_chat "Данное условие не выполнится, т.к. 1@ равен 1000, а проверяется строго больше 1000" color 0xFFFFFF
else
    if 1@ == 1000
    then
         0AF8: samp add_message_to_chat "Данное условие выполнится, т.к. 1@ равен 1000" color 0xFFFFFF
    end
end

// Также можно
if 1@ >= 1000
then
    0AF8: samp add_message_to_chat "Данное условие выполнится, т.к. 1@ равен 1000" color 0xFFFFFF
end

1@ = 999
if 1@ >= 1000
then
    0AF8: samp add_message_to_chat "Данное условие не выполнится, т.к. 1@ меньше и не равен 1000" color 0xFFFFFF
else
    0AF8: samp add_message_to_chat "А ответвление от условия сработает, т.к. ветвь else означает то, что условие не было выполнено" color 0xFFFFFF
end

Пример if and

(из-за особенностей CLEO количество условий не должно превышать 8)

:

1@ = 1000
2@ = 15
if and
    1@ >= 1000
    2@ >= 16
then
    0AF8: samp add_message_to_chat "Данное условие не выполнится, т.к. %d равен 15, а условие проверяет больше или равно 16" color 0xFFFFFF 2@
end

if and
    1@ == 1000
    2@ == 15
then
   0AF8: samp add_message_to_chat "Данное условие выполнится, т.к. %d равен 1000 и %d равен 15" color 0xFFFFFF 1@ 2@
end

if and
    1@ < 1000
    2@ > 15
then
    0AF8: samp add_message_to_chat "Данное условие не выполнится, т.к. %d равен 1000, %d равен 15" color 0xFFFFFF 1@ 2@
    0AF8: samp add_message_to_chat "а условие проверяет: %d строго меньше 1000 и %d строго больше 15 " color 0xFFFFFF 1@ 2@
else
    0AF8: samp add_message_to_chat "А ответвление от условия сработает, т.к. ветвь else означает то, что условие не было выполнено" color 0xFFFFFF
end

Пример if or

(из-за особенностей CLEO количество условий не должно превышать 8)

:

1@ = 1000
2@ = 15
if or
    1@ >= 1000
    2@ >= 16
then
    0AF8: samp add_message_to_chat "Данное условие выполнится, т.к. %d больше или равен 1000. Этого достаточно для срабатывания условия" color 0xFFFFFF 1@
end

if or
    1@ == 1000
    2@ == 15
then
   0AF8: samp add_message_to_chat "Данное условие выполнится, т.к. %d равен 1000 ИЛИ %d равен 15" color 0xFFFFFF 1@ 2@
end

if or
    1@ < 1000
    2@ > 15
then
    0AF8: samp add_message_to_chat "Данное условие не выполнится, т.к. %d равен 1000, 2@ равен 15" color 0xFFFFFF 1@
    0AF8: samp add_message_to_chat "а условие проверяет: %d строго меньше 1000 ИЛИ %d строго больше 15" color 0xFFFFFF 1@ 2@
else
    0AF8: samp add_message_to_chat "А ответвление от условия сработает, т.к. ветвь else означает то, что условие не было выполнено" color 0xFFFFFF
end

Обычно используется для перебора чего-либо или ожидания какого-то условия. Цикл, как цикл, но есть несколько типов.

Цикл while, выполняется пока условие верно (true):

while true // выполняется бесконечно
    wait 0
end

1@ = 0
while 1@ < 1000 // выполняется пока 1@ меньше 1000
    1@ += 1
end

1@ = 1000
while 1@ < 1000 // выполняется пока 1@ меньше 1000, т.е. даже не пройдет одну итерацию
    1@ += 1
end

1@ = 0
while true // может выполняться бесконечно, но внутри цикла есть его обрывание
    if 1@ > 1000
    then
        break // обрывание и выход из цикла. На этом моменте 1@ равен 1001.
        // Если изменить условие на 1@ >= 1000, то обрывание произойдет на значении 1@ равном 1000
    end
    1@ += 1
end

1@ = 0
while true // выполняется бесконечно, но тело цикла имеет некоторые особенности
    wait 0
    if 1@ == 1000
    then
        // в данный момент 1@ достигнуло значения 1000
        // но цикл всё ещё продолжает работать и проверяет 1@ на соответствие значения 1000
        continue // цикл начинает новую итерацию, заканчивая данную итерацию не доходя до конца цикла,
        //          т.е. "1@ += 1" не выполнится, пока условие не станет ложным (false)
    end
    1@ += 1
end

Цикл for, выполняет перебирание от a до b с шагом c (с по умолчанию равен 1). Для перебора с возрастанием используется to, для убывания — downto:

for 1@ = 1 to 10 // возрастание - от 1 до 10 (с шагом 1, по умолчанию)
    // данный цикл будет выводить сообщение в чат с текущей итерацией
    0AF8: samp add_message_to_chat "1@ = %d" color 0xFFFFFF 1@
    // 1@ = 1, 1@ = 2, 1@ = 3, ..., 1@ = 10
end

for 1@ = 1 to 10 step 5 // возрастание - от 1 до 10 с шагом 5
    // данный цикл будет выводить сообщение в чат с текущей итерацией
    0AF8: samp add_message_to_chat "1@ = %d" color 0xFFFFFF 1@
    // 1@ = 1, 1@ = 6
end

for 1@ = 10 downto 1 // убывание - от 10 до 1 (с шагом 1, по умолчанию)
    // данный цикл будет выводить сообщение в чат с текущей итерацией
    0AF8: samp add_message_to_chat "1@ = %d" color 0xFFFFFF 1@
    // 1@ = 10, 1@ = 9, 1@ = 8, ..., 1@ = 1
end

for 1@ = 10 downto 1 step 5 // убывание - от 10 до 1 с шагом 5
    // данный цикл будет выводить сообщение в чат с текущей итерацией
    0AF8: samp add_message_to_chat "1@ = %d" color 0xFFFFFF 1@
    // 1@ = 10, 1@ = 5
end

Цикл repeat..until, тот же что и while, но сначала выполняется итерация цикла, а потом только проверка условия (так называемый постусловный цикл). Кстати, чтобы цикл остановился, условие должно вернуть ложь (false), вся суть в примере:

1@ = 1000
repeat
    1@ -= 1
until 1@ == 0 // пока 1@ не равен 0
// после цикла 1@ будет равен 0

1@ = 0
repeat
    1@ -= 1
until 1@ < 0 // пока 1@ строго больше 0
// после цикла 1@ будет равен -1

Кейворд — это некая визуальная замена для опкодов. Каждому кейворду соответствует опкод. Список для CLEO/GTASA хранится в папке Sanny Builderdatasakeywords.txt

Но конечно же не своих придуманных, ну или своих, но с понятными именами, но как показала практика, свои кейворды на показ лучше не выставлять.
К стандартным относятся: wait, goto, jump, else_jump, jf, if, return, gosub

Также в дистрибутиве SAMPFUNCS для разработчиков имеется файл keywords.txt, который имеет несколько полезных:

0ab0=key_down
0ab1=call
0ab2=ret
0ac8=alloc
0ac9=free
0acd=print
0ad1=printf
0ad3=format
0b43=cmdret
0b78=log
059A=return_false
0485=return_true
0AF8=chatmsg
0AF9=say

Все они дают некий процент к скорости написания кода.

Почти тоже, что и кейворды, но имеют более расширенную систему. Никак не относится к классам в ООП.
Более подробно я не буду углубляться, но могу сказать следующее: они существенно сужают поиск нужного опкода с помощью их группировки по отдельным группам.
Структура описания классов хранится в папке Sanny Builderdatasaclasses.db (для игры GTASA соответственно).

Классы имеют следующую структуру — Группа.свойство/метод.
Примеры:
Actor.PutAt($PLAYER_ACTOR, 0.0, 15.0, 50.0) — аналог опкода 00A1: put_actor $PLAYER_ACTOR at 0.0 15.0 50.0
0@ = Car.Health(1@)
— аналог опкода 0227: 0@ = car 1@ health; также данный метод может и устанавливать здоровье машине: Car.Health(1@) = 1000 — аналог 0224: set_car 1@ health_to 1000

Табуляция — Ваш спаситель в чужом коде (ведь свой Вы уже выучили, пока писали его :pardon:).
Обычно табуляция используется для того, чтобы код стал выглядеть по-человечески и хотя бы понятен другому кодеру.
Как

я делаю

табуляцию (4 пробела или 1 нажатие клавиши Tab для одной конструкции, также называют лесенкой):

// данная конструкция не вложена, отступ = 0
while true
    // тело конструкции, отступ = (предыдущий_отступ + 1 табуляция) = 1 (или 4 пробела)
    wait 0
end // конец конструкции (while true), отступ = оступ_начала_данной_конструкции = 0

// данная конструкция не вложена, отступ = 0
for 0@ = 0 to 10
    // тело конструкции, отступ = (предыдущий_отступ + 1 табуляция) = 1 (или 4 пробела)
    // тут что-нибудь, не придумал
end // конец конструкции (for 0@ = 0 to 10), отступ = оступ_начала_данной_конструкции = 0

// данная конструкция не вложена, отступ = 0
if 1@ > 1000
then
    // тело конструкции, отступ = (предыдущий_отступ + 1 табуляция) = 1 (или 4 пробела)
    0AF8: samp add_message_to_chat "Переменная 1@ больше тысячи" color 0xFFFFFF

    // данная конструкция вложена, отступ = предыдущий_отступ = 1 (или 4 пробела)
    if 2@ >= 50
    then
        // тело конструкции, отступ = (предыдущий_отступ + 1 табуляция) = 2 (или 8 пробелов)
        0AF8: samp add_message_to_chat "Переменная 2@ больше/равно пятидесяти" color 0xFFFFFF

        // данная конструкция вложена, отступ = предыдущий_отступ = 2 (или 8 пробелов)
        while true
            // тело конструкции, отступ = (предыдущий_отступ + 1 табуляция) = 3 (или 12 пробелов)
            wait 0
        end // конец конструкции (while true), отступ = оступ_начала_данной_конструкции = 2 (или 8 пробелов)
    end // конец конструкции (if 2@ >= 50), отступ = оступ_начала_данной_конструкции = 1 (или 4 пробела)
end // конец конструкции (if 1@ > 1000), отступ = оступ_начала_данной_конструкции = 0

// данная конструкция не вложена, отступ = 0
if and
    1@ == 1000 // одна из особенностей конструкции, отступ_отд = (предыдущий_отступ + 1 табуляция) = 1 (или 2 пробела)
    2@ == 15 // ..., отступ_отд = (предыдущий_отступ + 1 табуляция) = 1 (или 2 пробела)
    // заметьте что некоторые табуляции не влияют на последующие, как и данная конструкция
then
   // тело конструкции, отступ = (предыдущий_отступ + 1 табуляция) = 2 (или 8 пробелов)
   0AF8: samp add_message_to_chat "Данное условие выполнится, т.к. 1@ равен 1000 и 2@ равен 15" color 0xFFFFFF
end // конец конструкции (if and ...), отступ = оступ_начала_данной_конструкции = 0

Это предложение, скорее всего, заведет Вас в тупик, подумай Всё ещё не поняли как делается табуляция? Очень легко: для каждой конструкции устанавливается количество отступов. Если конструкция вложена в другую, то значит, что для неё будет 1 табуляция; если она вложена дважды, то устанавливается 2 табуляции. Также это касается и для тел конструкций.

Константа — неизменяемое значение. Если в других языках с этим строго, то в CLEO указав значение константы — переменную, Вы сможете менять значение

переменной

(НЕ константы).

Представьте, Вы не знаете что такое RGB, и Вам тяжело сориентироваться в обычных цветах (из примера ниже), то просто тырим инфу из инета и заносим под удобные константы. Пример конечно не очень, но для использования констант сойдет:

const
    WHITE_COLOR = 0xFFFFFF
    RED_COLOR = 0xFF0000
    GREEN_COLOR = 0x00FF00
    MY_COLOR = 0x624206
end

0AF8: samp add_message_to_chat "Красный текст" color RED_COLOR
0AF8: samp add_message_to_chat "Зеленый текст" color GREEN_COLOR
0AF8: samp add_message_to_chat "Синий текст" color 0x0000FF
0AF8: samp add_message_to_chat "Чтобы каждый раз не искать цвет в исходниках, представим его как MY_COLOR" color MY_COLOR

Вам ещё предоставляется возможность посмотреть познавательную видюшечку (от @DarkP1xel):
осторожно, ненормативная лексика :hi:

N1KО

Что такое скриптинг?

От слова script – сценарий, то есть последовательность каких-либо действий. А скриптинг – процесс создания этой последовательности. Для GTA это значит: писать миссии либо более простые вещи (например, давать игроку новые возможности). Тех, кто пишет скрипты, называют скриптерами. Основа любого скрипта – это опкоды (операционные коды), а они сами базируются на переменных, в которые записываются нужные для правильной работы скрипта значения (цифровые, то есть числа целые 1, 2, -1, -2… либо дробные, обязательно с точкой 1.2, -2.3; или аналоговые, то есть люди, авто, объекты). Могут иметь вид 0@, 1@, 2@…33@ или $0, $1, $2… или $»текст на латинице без пробелов и кавычек». Разница между @ и $ такая: первые переменные действуют лишь в рамках одного скрипта (или потока), а вторые можно спокойно использовать на всём протяжении main.scm (наглядный пример: $PLAYER_CHAR).
Как записать значение в переменную?
2@ = 0 // в переменную 2@ записан нуль
00BF: $1 = current_time_hours, $2 = current_time_minutes // в переменные $1, $2 записано текущее игровое время (часы, минуты соответственно).
009A: 2@ = create_actor_pedtype 4 model #MALE01 at 0.0 0.0 0.0 // в переменную 2@ записан актёр
00A5: 0@ = create_car #PONY at 0.0 0.0 0.0 // в переменную 0@ записана машина
Переменную, в которую записывают актёра или авто, принято называть именем. Т.е. в примерах выше 2@ – имя актёра, 0@ – имя транспорта.


Как открыть main.scm?

Самая удобная программа – Sanny Builder. Свежую версию можно найти на sannybuilder.com, и там же на форуме задать интересующий вопрос. Полезные советы: 1) если курсор стоит на модели (она отличается символом # в начале), то в нижней панели слева появляется ID; 2) в современном SB есть много ключевых слов, набрав которые и поставив точку, можно получить список доступных действий, например: Actor, Car, Model; 3) нажатие Сtrl+Alt+1 вызовет Редактор координат, где при запущенной игре будет отображаться текущее положение игрока, а также его можно использовать как телепорт; 4) нажатие Сtrl+Alt+2 вызовет список опкодов; 5) если компиляция скрипта выдала ошибку, не спеши кликать ОК, если не знаешь причину бага, а нажми для начала Помощь; 6) при первом запуске программы нажми F10 или зайди в Сервис > Настройки и выбери себе язык и обязательно укажи папку GTA SA.


 Как писать миссии?

Подробная справка прилагается к SB. Вызвать можно нажатием F12 или Справка > Помощь.


 Как припарковать транспорт и поставить пикап?

Проще через IPL, но некоторым не нравится, что там иногда угол поворота машины бывает не тот, который нужен. И главное: для этих опкодов модель загружать не нужно.
09E2: 0@ = parked_car_generator_w_numberplate #BF400 -1 -1 0 alarm 0 door_lock 0 0 10000 plate «HOMEP_69» at X Y Z angle 0.0 // или…
014B: 0@ = init_parked_car_generator #BF400 -1 -1 1 alarm 0 door_lock 0 0 10000 at X Y Z angle 0.0 // 0@ – имя автогенератора, #BF400 – модель авто (можно писать ID, т.е. в данном случае 581), 2 цифры далее – цвет, X Y Z – координаты, 0.0 – угол; plate – номерной знак (в кавычках, не больше 8 латинских символов)
014C: set_parked_car_generator 0@ cars_to_generate_to 101 // это включает генератор, если вместо 101 написать 0, машина появляться не будет
Для пикапа:
0213: $0 = create_pickup #INFO type 3 at X Y Z // обычный пикап-значок
032B: $0 = create_weapon_pickup #teargas type 15 ammo 15 at X Y Z // оружие
$0 – имя пикапа, #INFO и #teargas – модель (оружие или значок, можно ID); type – тип (3 – одноразовый, 15 – многоразовый); ammo – количество боеприпасов; X Y Z – координаты
Как изменить оружие банд и число гангстеров в определённом районе?
0237: set_gang 0 weapons_to 23 32 1 // 0 – ID банды (0 == Ballas, 1 == Grove Street Families, 2 == Los Santos Vagos, 3 == San Fierro Rifa, 4 == Da Nang Boys, 5 == Mafia, 6 == Mountain Cloud Triad, 7 == Varrio Los Aztecas); 23 32 1 – это оружие (0 – кулaки, 1 – кастет, 2 – клюшка для гольфа, 3 – дубинка для копов, 4 – ножик, 5 – бита, 6 – лопата, 7 – кий, 8 – кaтaнa, 9 – пила, с 10 до 14 – дилдо и цветы, 15 – трость, 16 – гранаты, 17 – слезоточивый газ, 18 – мoлoтoвы, 22 – пистолет, 23 – с глушаком, 24 – Desert Eagle, 25 – дробоган, 26 – обрез, 27 – мощный дробоган, 28 – Mac 10, 29 – MP5, 30 – AK47, 31 – M4, 32 – Tec9, 33 – винтовка, 34 – снайперка, 35 – РПУ, 36 – ракетница с самонаводкой, 37 – огнемёт, 38 – старый добрый Mиниган, 41 – баллончик с краской, 42 – огнетушитель)
076C: set_zone ‘SUN1’ gang 1 density_to 30 // SUN1 – имя района (см. в Справке SB: Документация по SCM > GTA SA > Типы зон); 1 – знакомый ID; 30 – плотность (в процентах от населения этого района)


 Какие есть особые опкоды?

015D: set_gamespeed 0.0 // скорость игры (1.0 – обычная; этот опкод используется в режиме Bullet Time)
01EB: set_traffic_density_multiplier_to 0.0 // отключает движение на дорогах
0110: clear_player $PLAYER_CHAR wanted_level // очистить уровень розыска
01F7: set_player $PLAYER_CHAR ignored_by_cops 1 // копы игнорируют
02AB: set_actor $PLAYER_ACTOR immunities BP 1 FP 1 EP 1 CP 1 MP 1 // установить иммунитет
0330: set_player $PLAYER_CHAR infinite_run 1 // бесконечный спринт
0331: set_player $PLAYER_CHAR fast_reload 1 // быстрая перезарядка оружия (не у всех видов)
0335: enable_free_respray 1 // халявные перекраски
03BF: set_player $PLAYER_CHAR ignored_by_everyone 1 // все игнорируют
03DE: set_pedestrians_density_multiplier_to 0.0 // отключает людской поток на улицах
055D: make_player $PLAYER_CHAR fireproof 1 // огнеупорность
0572: enable_taxi_nitros 1 // все такси с азотоускорением
0629: change_integer_stat 181 to 4 // можно свободно гулять по SA без звёзд розыска
0631: put_actor 0@ in_group $PLAYER_GROUP // актёр будет следовать за игроком
0632: release_group $PLAYER_GROUP // отпустить актёров из группы
06C8: enable_riot 1 // включает бунт (только в LS)
06D0: enable_emergency_traffic 0 // отключает спецслужбы
07A7: put_jetpack_on_actor $PLAYER_ACTOR // джетпак
0879: enable_gang_wars 1 // включает войну за территории
08C6: set_actor $PLAYER_ACTOR stay_on_bike 1 // игрок не падает с байка
08FD: enable_heat_visuals 1 // включение (0 – выключение) эффекта «жарка» при высокой температуре окружающей среды
09C7: change_player $PLAYER_CHAR model_to #MODEL // замена своей модели (сначала надо загрузить новую)
09E6: set_burglary_houses_accessible 1 // доступ в жилые дома
09E9: car 3@ add_single_nitro // одноразовый нитроазот
0A24: enable_military_zones_wanted_level 1 // отключение охраны на военных зонах
0A3D: enable_prostitutes_pay_you 1 // шлюхи платят тебе


 Как убрать эффект NFS MW в моде Night Crimes?

1) открыть в SB файл data/script/main.scm
2) найти строку create_thread @Noname_9 (Сtrl+F)
3) удалить либо закомментировать (Сtrl+Q), чтобы игра игнорировала поток Noname_9
4) компилировать (F6) и запустить игру (F8)
P.S. Для проверки, тот ли это поток, найди Noname_9, там должно быть написано
02E3: 12@ = car $11883 speed
if
12@ >= 30.0
else_jump @Noname_9


 Как изменить количество денег?

0109: player $PLAYER_CHAR money += X // X – положительное или отрицательное целое число, в зависимости от которого денег прибавят или отнимут


 Как сделать, чтобы актёр или автомобиль шёл по определённому пути?

05D6: clear_scmpath
05D7: add_point_to_scmpath X Y Z // X Y Z – координаты добавляемой точки в маршруте
05D8: AS_assign_scmpath to_actor $PLAYER_ACTOR flags 4 0 // для актёра: 4 – скорость (до 7)
06BB: set_actor -1 drive_car 1@ speed 10.0 along_SCM_path // для машины: 10.0 – скорость


 Как выбрать случайного пешехода?

:Noname
wait 0
if and
06FF: any_ped_near_actor $PLAYER_ACTOR in_range 20.0 // радиус
Player.Defined($PLAYER_CHAR)
else_jump @Noname
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to -1 closest_ped_to 1@
if
not 1@ == -1
else_jump @Noname


 Как сделать чтобы банды не приставали?

0746: set_acquaintance 1 of_actors_pedtype 7 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 8 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 9 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 10 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 11 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 12 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 13 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 14 to_actors_pedtype


 Как сделать актёра другом или врагом?

077A: set_actor $Actor acquaintance 4 to_actors_pedtype 0 // acquaintance бывают такие: 1 – уважение, 2 – симпатия, 3 – неприязнь, 4 – вражда


Что такое CLEO?

Библиотека CLEO шагнула в новое измерение, и перед нами четвертая версия этого проекта. Теперь библиотека CLEO поддерживает игры GTA III и GTA VC, что это открывает новые возможности для разработчиков скриптов на данных платформах.

Возможности

Новые опкоды
CLEO 4 имеет в наличии 100 полезных опкодов, которые позволяют работать с внешними файлами, изменять данные в памяти игры, вызывать игровые функции со своими параметрами, а также многое другое. В четвертой версии появились новые опкоды для работы со звуками, форматирования текста, была добавлена возможность выводить на экран тексты без использования внешних текстовых файлов (.gxt, .fxt). Чтобы оценить новые достижения и использовать их в ваших скриптах, установите последнюю версию библиотеки CLEO 4.

Плагины

CLEO-плагины — это обычные DLL-файлы, но имеющие расширение .CLEO. При запуске библиотека CLEO ищет в папке <игра>CLEO файлы с данным расширением и пытается загрузить их. В случае удачной загрузки плагин начинает работать и выполнять те функции, для которых он написан.

CLEO 4 позволяет создавать новые опкоды, используя исходные коды CLEO SDK. В стартовом комплекте библиотеки можно найти три примера таких плагинов:
IniFiles.cleo — работа с INI файлами;
FileSystemOperations.cleo — работа с файлами и папками.
IntOperations.cleo — битовые операции над целыми

Процедура установки плагина очень проста: просто скопируйте файл в папку <игра>CLEO. Чтобы прекратить пользование плагином — удалите файл или измените его расширение. Список доступных плагинов можно найти на этой странице.

Добавление скриптов
Начиная с CLEO 3, в игру можно добавлять новые скрипты, написанные в редакторе Sanny Builder, без необходимости начала новой игры. Все, что требуется для добавления такого скрипта в игру — это поместить его в папку <игра>CLEO. После запуска новой или сохраненной игры скрипт начнет работу. Для удаления скрипта из игры — удалите соответствующий файл.

CLEO 4 разрабатывалась для трех версий exe: 1.0 us, 1.0 eu и 1.01 eu. Таким образом, существует 8 разных exe, с которыми совместима библиотека: 

Оригинальное имя
Описание
Версия игры
Размер

gta_sa.exe
оригинальный 1.0 us
1.0
14 405 632 байт

gta_sa.exe
публичный no-dvd 1.0 us
1.0
14 383 616 байт

gta_sa_compact.exe
listener’s exe
1.0
5 189 632 байт

gta_sa.exe
оригинальный 1.01 eu
1.01
14 405 632 байт

gta_sa.exe
публичный no-dvd 1.01 eu
1.01
15 806 464 байт

gta_sa.exe
версия от 1С
1.01
15 806 464 байт

gta_sa.exe
оригинальный 1.0 eu
1.0
неизвестно

gta_sa.exe
публичный no-dvd 1.0 eu 
1.0
14 386 176 байт


Установка

СLEO 4 распространяется в виде автоматического инсталлятора. Для установки библиотеки запустите инсталлятор и следуйте его инструкциям.

CLEO 4 использует 3 файла в работе: vorbisFile.dll, vorbishooked.dll, cleo.asi.

CLEO 4 для San Andreas для проигрывания звуковых файлов требует установленной библиотеки BASS.dll версии 2.4, которую можно скачать с официального сайта Un4seen Developments Ltd. Устанавливается BASS.dll очень просто — нужно просто скопировать файл bass.dll в корневую директорию игры GTA San Andreas.


Распространение библиотеки CLEO

Если вы написали скрипт, использующий библиотеку CLEO и (или) ее плагины, вы можете также распространять вместе с ним необходимые файлы. Вы можете указать ссылку на данную страницу, чтобы пояснить, как необходимо пользоваться библиотекой и сопутствующими файлами.

Эйоу, здарова гитта тащер.
Сегодня мы будем учиться делать cleo скрипты.
С помощью cleo можно сделать: Миссию и обычный скрипт.
Хорош воду гнать, го учиться.

Подготовка:
-ПК(консолька не подойдет 🙁 )
-ЖТА:СА на твой ПэКа
-Android
-ЖТА:СА на твой Android
-Cleo библиотека на твою ЖТА:СА на Android(Сам ищи)
-Cleo библиотека на твою ЖТА:СА на пк(https://www.cleo.li)
-Sanny Builder(SannyBuilder.com)
-Руки из правильного места и чучуть мозгов(вроде-бы у всех есть)
И так подготовка закончена.

Теперь ставишь ЖТА, cleo и Билдер, после чего открываешь санный билдер, БЕАЧ
Указываешь в настройках место где у тебя стоит ЖТА.
И все ты готов.

Теория(можно не читать):
*.cs — Custom Script — основной вид скриптовтов для ПК версии ГТА
*.cm — Custom Mission — основной вид внешних миссий для ПК версии ГТА
*scm — Хз как расшивровать, но тут сам игровой скрипт, но мы не будем им пользоваться(все внутрении миссии, пикапы и прочее)
*.csa — Custom Script Android — Автозагружаемый вид скриптов для Android версии ГТА
*.csi — Custom Script I(что на i) — Вызываемый(через cleo menu) вид скриптов для Android версии ГТА
Теория кончилась.

Практика:

Открываешь SB.
Жмакаешь Contol+N.
Тут типа надо скрипт писать, кекъ
Ну пишешь значит:
{$Cleo .формат} форматы читай выше,scm не используй
Эта строчка позволяет компилятору узнать, что ему копмилировать и в каком формате.
Дальше
0000:
«0000» — это операционный код(опкод), «:» — это отделение опкода от аргументов. У данного опкода нету аргументов, посему мы ничего не пишим.
Этот опкод нужен, что бы избежать ошибки при прыжке на первую метку.
Но лучше его писать всегда.
thread «MyFirstScritp»
Это можно и не писать, но лучше написать, потом объясню зачем это нужно
И в конец end_thread.
Это что бы когда скрипт закончит свою работу игра не вылетала
Все, первый скрипт готов, но он не сохранен.
Жмем F6 и указываем путь. У меня это «C:Program Files (x86)Advance RolePlaySan Andreas Multiplayercleo»
И название не забудь. Желательно, что бы название совпадало с тем, что написано в thread
Все, скрипт готов, но он ни чего не делает:(. НАДО ИСПРАВИТЬ!
Можно например написать(между thread и end_thread):
Player.Money($PLAYER_CHAR) += 228
или
0109: player $PLAYER_CHAR money += 100
Это одно и тоже. У некоторых опкодов есть более человеко-понятный вид
Теперь разберем:
0109 — опкод.
: — разделение опкода и аргументов.
player — это часть описания опкода, что бы сделать его понятнее, можно не писать(это не аргумент)
$Player_Char — глобальная переменная отвечающая за данные игрока. (это аргумент)
money — это часть описания опкода, что бы сделать его понятнее, можно не писать(это не аргумент)
+= — это действие которое неободимо совершить. (это необходимо писать)
100 — это операнд, количество денег.
И разберем первый вариант:
Player — это сложно объяснить, но это нужно.
Money — это то, что мы будем изменять
$Player_Char — глобальная переменная отвечающая за данные игрока. (это аргумент)
+= — это действие которое неободимо совершить. (это необходимо писать)
228 — это операнд, количество денег.
Итог:
-У нас есть программы для скриптинга
-У нас есть небольшой, но рабочий скрипт.
-Мы знаем уже два опкода.

Урок по cleo №1

CLEO: Структура любого скрипта

Итак, в этом уроке мы разберём структуру любого CLEO-скрипта, также скачайте Sanny Builder по этой ссылке: здесь.
Итак, пример CLEO-скрипта (он создаёт возле ворот зоны 69 маркер перемещающий игрока внутрь):

Код: Выделить всё

// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007

{$VERSION 3.1.0027}
{$CLEO .CS}

//-------------MAIN---------------
0000: NOP 

:NONAME_2
wait 0 
if 
0101:   actor $PLAYER_ACTOR in_sphere 214.0 1875.957 13.1406 radius 1.5 1.5 10.5 sphere 1 stopped 
else_jump @NONAME_2 
select_interior 0 
0860: link_actor $PLAYER_ACTOR to_interior 0 
Actor.PutAt($PLAYER_ACTOR, 214.0, 1870.319, 13.1406)
fade 1 13 
wait 2000 
jump @NONAME_2

К любой строчке можно добавлять комментарий (по правилам C++), выглядит это так:
:NONAME_2 //название потока
wait 0 //ждать 0 милисекунд
if //если
0101: actor $PLAYER_ACTOR in_sphere 214.0 1875.957 13.1406 radius 1.5 1.5 10.5 sphere 1 stopped //игрок остановится в маркере радиусом 1.5 1.5 10.5 находящемся в координатах 214.0 1875.957 13.1406
else_jump @NONAME_2 //иначе вернутся к началу потока
select_interior 0 //если игрок встал в маркер
0860: link_actor $PLAYER_ACTOR to_interior 0 //то переместить его
Actor.PutAt($PLAYER_ACTOR, 214.0, 1870.319, 13.1406) //переместить его в эту точку
fade 1 13
wait 2000 //ждать две секундыjump @NONAME_2 //вернутся к началу потока
Как мы видим скрипт достаточно короткий, хотя создаёт маркер и перемещает игрока с одной точки в другую. А теперь рассмотрим теоретическую структуру скрипта:

Код: Выделить всё

{$cleo .cs}           //Даём понять Sanny Builder, что это именно CLEO-скрипт
//----------------------------------Main------------------------------- 
0000:nop
:potock  //открывает поток, слово стоящее после двоеточия называется [b]меткой[/b]
wait 0    //задержка, её нужно делать Число может быть не более 20000 (20 секунд)
//здесь находится код скрипта
NNNN:           //Здесь находится опкод, их может быть несколько (где N - символ (цифра или буква)). Список опкодов можно посмотреть в справке Sanny Buildera.       
wait 2000           //задержка перед концом скрипта    
end_thread        // Завершает скрипт, можно также использовать эту команду: jump @potok

После того, как закончили написание скрипта, сохраняем его с расширением .cs в папку CLEO. На этом всё. В следующем уроке: CLEO: пикапы оружия

Автор: © Михаил

Понравилась статья? Поделить с друзьями:
  • Как написать книгу пошаговое руководство
  • Как написать килокалории сокращенно
  • Как написать классный трек
  • Как написать книгу пошагово
  • Как написать киловатт час сокращенно