CLEO 2 добавляет много полезных опкодов, среди которых есть опкоды чтения файлов, изменения игровой памяти, вызова процедур и функций и многое-многое другое.
Более того, функционал данной библиотеки практически неограничен, поскольку может быть расширен при помощи плагинов. Подробнее о плагинах CLEO читайте ниже.
Какие версии игры поддерживаются ?
CLEO 2 поддерживает версию 1.0 и 1.01. Абсолютно точно CLEO 2 работает на американских версиях (US). Если вы имеете европейскую или немецкую версии игры, сообщите о том, как там работает CLEO 2.
Как установить CLEO 2 ?
Способ 1: через asi loader Вы можете использовать SA ASI plugin loader, написанный JernejL. Он позволяет загружать библиотеки, имеющие расширение .ASI. Для того чтобы использовать этот способ, установите asi loader, следуя инструкциям, указанным в readme файле к нему. После этого переименуйте файл CLEO.DLL в CLEO.ASI и поместите его в корневую папку игры. Это все. Вы можете использовать новые опкоды и устанавливать плагины. SA ASI plugin loader : http://www.gtatools.com/filedb/action.php?action=file&id=19 Этот способ лучше чем второй, но требует замены оригинального файла vorbisfile.dll
Способ 2: через main.scm Во-первых, вы должны вставить следующий код в самое начало исходника main.scm. Обычно первым опкодом в исходнике идет опкод
03A4: name_thread 'MAIN'
Вы должны вставить приведенный код ПЕРЕД данным опкодом.
:CLEO2_RUN 0@ = -429566 &0(0@,1i) == 4611680 jf @CLEO2_v2 // 1.0 0@ = -429539 &0(0@,1i) == 0xFFFF jf @CLEO2_Continue 0@ = -429863 &0(0@,1i) = 0xA49960 &0(0@,1i) += @__CLEO2_v1 jump @CLEO2_Load
:CLEO2_v2 0@ = -430793 &0(0@,1i) == 0xFFFF jf @CLEO2_Continue 0@ = -431117 &0(0@,1i) = 0xA4BFE0 &0(0@,1i) += @__CLEO2_v2
:CLEO2_Load 0572: 1 &0(0@,1i) = 0 jump @CLEO2_Continue
:__CLEO2_Dll hex "CLEO\CLEO.DLL" 00 end
:__CLEO2_v1 hex BF 60 99 A4 00 // mov edi, 0xA49960 81 C7 @__CLEO2_Dll // add edi, label 57 // push edi FF 15 70 80 85 00 // call LoadLibraryA C3 // ret end
:__CLEO2_v2 hex BF E0 BF A4 00 // mov edi, 0xA4BFE0 81 C7 @__CLEO2_Dll // add edi, label 57 // push edi FF 15 70 90 85 00 // call LoadLibraryA C3 // ret end
:CLEO2_Continue
После этого создайте в корневой папке игры папку CLEO и скопируйте туда файл CLEO.DLL. Скачать его можно тут : http://cleo.sannybuilder.com/cleo2.rar , если какая-то ссылка не работает , то ищем её тут http://sannybuilder.com Теперь вы можете свободно использовать новые опкоды в ваших скриптах, а также устанавливать плагины.
Какие опкоды добавлены ? (v 2.0.0.32)
Список опкодов (с указанием параметров):
0A8C: write_memory [dword] size [byte] value [dword] virtual_protect [bool] 0A8D: [var] = read_memory [int32] size [byte] virtual_protect [bool] 0A8E: [var] = [valA] + [valB] // int 0A8F: [var] = [valA] - [valB] // int 0A90: [var] = [valA] * [valB] // int 0A91: [var] = [valA] / [valB] // int 0A96: [var] = actor [handle] struct 0A97: [var] = car [handle] struct 0A98: [var] = object [handle] struct
0A99: chdir [flag] 0A9A: [var] = openfile "path" mode [dword] 0A9B: closefile [hFile] 0A9C: [var] = file [hFile] size 0A9D: readfile [hFile] size [dword] to [var] 0A9E: writefile [hFile] size [dword] from [var]
0A9F: [var] = current_thread_address 0AA0: gosub_if_false [label] 0AA1: return_if_false
0AA2: [var] = load_library "path" 0AA3: free_library [hLib] 0AA4: [var] = get_proc_address "name" library [hLib]
0AA5: call [address] num_params [byte] pop [byte] [param1, param2...] 0AA6: call_method [address] struct [address] num_params [byte] pop [byte] [param1, param2...] 0AA7: call_function [address] num_params [byte] pop [byte] [param1,param2...] result [var] 0AA8: call_function_method [address] num_params [byte] pop [byte] [param1,param2...] result [var] 0AA9: is_game_version_original
0AAB: file_exists "path"
Нужно ли менять SASCM.INI ?
Да, для компиляции новых опкодов вам потребуется добавить следующие строки в файл SASCM.INI (он лежит в папке sanny builder\data\sa). На момент времени , в который Вы читаете мой мануал данные строки могут уже быть включены в SASCM.INI .
; CLEO 2 Opcodes 0A8C=4,write_memory %1d% size %2d% value %3d% virtual_protect %4d% 0A8D=4,%4d% = read_memory %1d% size %2d% virtual_protect %3d% 0A8E=3,%3d% = %1d% + %2d% ; int 0A8F=3,%3d% = %1d% - %2d% ; int 0A90=3,%3d% = %1d% * %2d% ; int 0A91=3,%3d% = %1d% / %2d% ; int 0A96=2,%2d% = actor %1d% struct 0A97=2,%2d% = car %1d% struct 0A98=2,%2d% = object %1d% struct 0A99=1,chdir %1b:userdir/rootdir% 0A9A=3,%3d% = openfile %1s% mode %2d% 0A9B=1,closefile %1d% 0A9C=2,%2d% = file %1d% size 0A9D=3,readfile %1d% size %2d% to %3d% 0A9E=3,writefile %1d% size %2d% from %3d% 0A9F=1,%1d% = current_thread_pointer 0AA0=1,gosub_if_false %1p% 0AA1=0,return_if_false 0AA2=2,%2h% = load_library %1s% 0AA3=1,free_library %1h% 0AA4=3,%3d% = get_proc_address %1s% library %2d% 0AA5=-1,call %1d% num_params %2h% pop %3h% 0AA6=-1,call_method %1d% struct %2d% params %3h% pop %4h% 0AA7=-1,call_function %1d% params %2h% pop %3h% 0AA8=-1,call_function_method %1d% struct %2d% params %3h% pop %4h% 0AA9=0, is_game_version_original 0AAB=1, file_exists %1s%
Что там насчет плагинов ?
Плагины - это обычные DLL-файлы, имеющие расширение .CLEO. При запуске библиотека CLEO 2 ищет в той папке, где она расположена (GTA SA\CLEO\), файлы с данным расширением и пытается загрузить их. После удачной загрузки плагин начинает работать и выполнять те функции, для которых он написан.
Процедура установки плагина очень проста: просто скопируйте файл в папку с основной библиотекой (CLEO.DLL). Чтобы прекратить пользование плагином - удалите файл.
Вы можете скачать первый, пробный плагин тут: http://cleo.sannybuilder.com/plugins/scmlog.rar Это плагин SCMLog, который позволяет отследить, какие опкоды выполняются скриптом. ScmLog создает файл scmlog.log в папке, где он расположен, и записывает туда какой опкод выполняется в настоящий момент и его позиция в файле main.scm.
Пример лога:
************ SCM LOG ************ > Logging started: 14:06:08 *********************************
> parsing thread noname 00000794: opcode 0004, 0000079F: opcode 0002, 000007DA: opcode 03A4,
> parsing thread main 000007E5: opcode 01F0, 000007E9: opcode 0111,
Автор библиотеки CLEO 2 - Seemann. Автор не несет никакой ответственности за возможные негативные последствия, вызванные использованием данного продукта. Используйте его на свой страх и риск. Автор также благодарит Станислава Головина (aka listener) за поддержку и полезную информацию.
|