#1 18-11-2009 21:14

Alien
Registered: 12-10-2008
Posts: 564

San Andreas new opcodes project

Начал разрабатывать плагин для клео, который добавляет новые опкоды. Смысл в том, чтобы упростить выполнение рутинных действий в скрипте путем заведения нового опкода.
Пока сделано немного. В этой теме жду предложений о том, какие еще опкоды можно добавить.
___________________________________________________________________________
Список реализованных опкодов:

0AF0: 0@ = label @label offset
0AF1: 0@ = var 0@ offset
0AF2: 0@ = malloc 0x190 //IF and SET	
0AF3: free 0@
0AF4: show_text_box "Hello, world!"
0AF5: show_styled_text "Hello, world!" time 5000 style 3
0AF6: show_text_lowpriority "Hello, world!" time 5000
0AF7: show_text_highpriority "Hello, world!" time 5000
0AF8: show_formatted_text_box "%d + %d = %d" 2 2 4
0AF9: show_formatted_styled_text "%d + %d = %d" time 5000 style 3 2 2 4
0AFA: show_formatted_text_lowpriority "%s" time 5000 0x969110
0AFB: show_formatted_text_highpriority "%s" time 5000 0x969110
0AFC: 0@ = player -1 targeted_actor //IF and SET
0AFD: sprintf_destination 0@ format "%d + %d = %d" 2 2 4
0AFE: 0@ = sscanf_source 1@ format "%d %g" 2@ 3@
0AFF: 0@ = fopen "cleo\1.txt" mode "r" //IF and SET
0B00: fclose 0@ //IF and SET
0B01: fseek 0@ offset 12 origin SEEK_SET //IF and SET
0B02: fread 0@ destination 1@ size 1 //IF and SET
0B03: fwrite 0@ source 1@ size 12 //IF and SET
0B04:  feof 0@
0B05:  ferror 0@
0B06: 1@ = fscanf 0@ format "%c %s" 2@ 3@
0B07: fprintf 0@ format "%c %s" 2@ 3@
0B08: debug "log started"
0B09: clear_debug
0B0A: fgets 0@ buffer 1@ number_of_chars 16 //IF and SET
0B0B: 1@ = fgetc 0@ //IF and SET
0B0C:  test_cheat "BLOWUP"
0B0D: 0@v = car_model #ADMIRAL GXT
0B0E: 0@ = file 1@ handle
0B0F: add_dynamic_GXT_entry "HELLO" text "Hello, world!"
0B10: remove_dynamic_GXT_entry "HELLO"
0B11: 0@ = random_actor_near_point 1@ 2@ 3@ in_radius 10.0 find_next 1 pass_deads 1 //IF and SET
0B12: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 10.0 find_next 1 pass_wrecked 1 //IF and SET
0B13: 0@ = random_object_near_point 1@ 2@ 3@ in_radius 10.0 find_next 1 //IF and SET

Описание:
0AF0 - берет указатель на метку.
0AF1 - берет указатель на переменную (локальную или глобальную).
0AF2 - выделяет в динамической памяти переданное количество байт, возвращает указатель на полученный буфер и устанавливает результат логической операции в TRUE. Если память выделить не удалось, возвращается 0 и устанавливается FALSE . Полученный буфер можно использовать для своих целей как угодно. После использования надо обязательно освободить память вызвав опкод 0AF3.
0AF3 - высвобождает динамически выделенную память. Принимает один параметр - указатель на буфер, полученный опкодом 0AF2. Если не вызвать этот опкод после 0AF3, будут наблюдаться утечки памяти (приложение будет использовать все больше и больше физической памяти). Поэтому использовать этот опкод надо с большой осторожностью.
0AF4 - выводит на экран бокс с текстом, переданным в строковом параметре.
0AF5 - выводит стилизованный текст.
0AF6 - выводит текст, который не будет выведен сразу, если в данный момент выводится другой текст.
0AF7 - выводит текст незамедлительно.
0AF8 - 0AFB - выводит текст аналогично предыдущим, только текст форматируется.
0AFC - получает актера, находящегося под прицелом игрока. Опкод принимает в качестве параметра индекс игрока $PLAYER_CHAR. Если передать -1, игрок будет выбран автоматически.
0AFD - форматный вывод. Генерирует строку с учетом входных параметров. Принимает указатель на место, куда будет сохранена форматированная строка, шаблон формата и набор параметров, включаемых в строку.
0AFE - форматный ввод. Считывает из строки параметры. Принимает указатель на строку, строку формата и список параметров для приема значений. Возвращает количество удачных преобразований.
0AFF - открывает файл с указанными правами. Если открытие было успешным, возвращается указатель на файловый поток и устанавливает результат логической операции в TRUE. В противном случае FALSE.
0B00 - закрывает ранее открытый файл. Если закрытие успешно, устанавливается результат логической операции в TRUE, иначе - FALSE.
0B01 - передвигает указатель в файловом потоке на указанное количество байт. 3 параметр определяет относительно чего происходит сдвиг (SEEK_SET = 0 -  начала файла, SEEK_CUR = 1 - текущей позиции, SEEK_END = 2 - конца файла). В случае успеха - TRUE, иначе - FALSE.
0B02 - считывает из файла в буфер n-ное количество байт. Аналогично TRUE/FALSE.
0B03 - записывает в файл из буфера n-ное количество байт. Аналогично TRUE/FALSE.
0B04 - проверяет, достигнут ли конец файла.
0B05 - проверяет на не валидность файловый поток.
0B06 - выполняет форматный ввод аналогично 0AFE, но не из строки, а из текстового файла.
0B07 - выполняет форматный вывод аналогично 0AFD, но не из строки, а из текстового файла.
0B08 - опкод для ведения логов работы скрипта. Создается файл cleo\<имя треда>.log, в который выводится строка вот в таком формате: "20/11/2009 02:08:13.375 >> log started" Можно определить, на каком этапе исполнения скрипта произошла ошибка. Строка добавляется в конец файла и не перезаписывает старые логи.
0B09 - чистит log (чтобы сильно не разбухал). Рекомендуется в начале скрипта, использующего 0B08 писать этот опкод, чтобы не смешивались старые и новые логи.
0B0A - считывает из файла строку до символа перевода на новую строку (0D 0A) или указанное количество символов. Записывает полученную строку, адрес которого передается первым параметром.
0B0B - считывает 1 символ.
0B0С - проверяет, набран ли соответсвующий чит-код.
0B0D - получает GXT машины. Насколько я знаю, GXT-entry совпадает с именем dff и txd модели.
0B0E - Получает хэндл файла. Это своего рода "мостик" между опкодами 0AFF-0B0B и клео-опкодами 0A9A-0A9E.
0B0F - Добавляет новый GXT в игру для полноценной работы с текстом. Не перегружает стандартные GXT.
0B10 Удаляет ранее созданный динамический GXT.
0B11 Получает случайного актера, находящегося рядом с точкой в указанном радиусе. Флаг find_next указывает, что поиск следует осуществлять с последнего найденного (чтобы не тыкаться постоянно в одного и того же актера). Флаг pass_deads указывает, что при поиске следует пропускать мертвых актеров.
0B12 Аналогично предыдущему для машин. Флаг pass_wrecked указывает, что при поиске следует пропускать взорванные машины.
0B13 Аналогично предыдущим для объектов.
Внимание: Опкоды 0B0F и 0B10 несовместимы с GXT Hook'ом. Но нечего переживать. SANO выполняет все его функции (парсит fxt-файлы). Поэтому \cleo\GXThook.cleo лучше куда-нибудь переместить.
___________________________________________________________________________
Установка:
Положить SANewOpcodes.cleo в папку ...\cleo\.
Установка в Sanny Builder:
1) Открыть файл ...\Sanny Builder 3\data\sa\SASCM.INI и дописать внизу

; --- SANewOpcodes ---

0AF0=2,%2d% = label %1p% offset
0AF1=2,%2d% = var %1d% offset
0AF2=2,%2d% = malloc %1d% //IF and SET
0AF3=1,free %1d%
0AF4=1,show_text_box %1s%
0AF5=3,show_styled_text %1s% time %2d% style %3d%
0AF6=2,show_text_lowpriority %1s% time %2d%
0AF7=2,show_text_highpriority %1s% time %2d%
0AF8=-1,show_formatted_text_box %1s%
0AF9=-1,show_formatted_styled_text %1s% time %2d% style %3d%
0AFA=-1,show_formatted_text_lowpriority %1s% time %2s%
0AFB=-1,show_formatted_text_highpriority %1s% time %2s%
0AFC=2, %2d% = player %1d% targeted_actor //IF and SET
0AFD=-1, sprintf_destination %1d% format %2s%
0AFE=-1, %3d% = sscanf_source %1d% format %2s%
0AFF=3, %3d% = fopen %1s% mode %2s% //IF and SET
0B00=1, fclose %1d% //IF and SET
0B01=3, fseek %1d% offset %2d% origin %3d% //IF and SET
0B02=3, fread %1d% destination %2d% size %3d% //IF and SET
0B03=3, fwrite %1d% source %2d% size %3d% //IF and SET
0B04=1,  feof %1d%
0B05=1,  ferror %1d%
0B06=-1, %3d% = fscanf %1d% format %2s%
0B07=-1, fprintf %1d% format %2s%
0B08=1, debug %1s%
0B09=0, clear_debug
0B0A=3, %2d% = fgets %1d% number_of_chars %3d% //IF and SET
0B0B=2, %2d% = fgetc %1d% //IF and SET
0B0C=1,  test_cheat %1s%
0B0D=2, %2s% = car_model %1o% GXT
0B0E=2, %2d% = file %1d% handle
0B0F=2, add_dynamic_GXT_entry %1s% text %2s%
0B10=1, remove_dynamic_GXT_entry %1s%
0B11=7, %7d% = random_actor_near_point %1d% %2d% %3d% in_radius %4d% find_next %5h% pass_deads %6h%//IF and SET
0B12=7, %7d% = random_vehicle_near_point %1d% %2d% %3d% in_radius %4d% find_next %5h% pass_wrecked %6h% //IF and SET
0B13=6, %6d% = random_object_near_point %1d% %2d% %3d% in_radius %4d% find_next %5h% //IF and SET

Текущая версия: 0.1.1.335

Last edited by Alien (04-01-2010 12:40)

Offline

#2 18-11-2009 22:41

Alien
Registered: 12-10-2008
Posts: 564

Re: San Andreas new opcodes project

Пример скрипта с использованием новых опкодов.

{$CLEO}
0AF1: 0@ = var 0@ offset
0AFD: sprintf_destination 0@ format "%d + %d = %d" 2 2 4
0AF4: show_text_box 0@v
0a93:

Результат работы видно на картинке: вывелась надпись "2 + 2 = 4".
daa31d4875a7t.jpg
Как это работает:
Первым опкодом получаем указатель на переменную 0@. Передаем этот указатель в 0AFD в качестве указателя на приемник форматированной  строки. Формат вывода имеет вид  "%d + %d = %d". Все %d будут заменены на соответствующие целые, переданные следующими 3 параметрами: 2, 2 и 4. В результате в переменной 0@v оказывается форматированная строка "2 + 2 = 4", которая выводится следующим опкодом 0AF4.

Offline

#3 19-11-2009 05:09

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: San Andreas new opcodes project

Так все з..сь!
Уточните, пожалуйста, ограничения на строку и на опкод 0AFD:.
Т.е. сколько символов может быть в строке и сколько параметров максимум в опкоде 0AFD:.


I know everything and nothing...

Offline

#4 19-11-2009 07:53

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: San Andreas new opcodes project

Как насчёт доработки опкодов манипуляции со звуками? Для привязки к актёру, объекту, координатам, зоне в n
'ом радиусе и т. д.

Примеры (на основе стандартных):

link_mp3 $MyMP3 to_actor $Actor
link_mp3 $MyMP3 to_car $MyCAR
set_mp3  $MyMP3 location 1600.0 1200.0 32.0
attach_mp3 $MyMP3 to_object $MyOBJ

SA (стандартные):

0949: link_wav $MyWAV to_actor $Actor
0A16: link_wav $MyWAV to_car $MyCAR
03D7: set_wav $MyWAV location 1600.0 1200.0 32.0
097C: attach_wav $MyWAV to_object $MyOBJ

В том случае, конечно, если эти стандартные (SA) команды не работают с загруженными звуковыми файлами по средствам опкодов CLEO. Я говорю о:

0AAC: $hMP3 = load_mp3 "CLEO\playlist\01.mp3"
03D7: set_wav $hMP3 location 1600.0 1200.0 32.0
0AAD: set_mp3 $hMP3 perform_action 1

К основному вопросу: чем это должно упростить процесс работы?

Упростит коды вида (дословно): проверка, находится ли актёр в заданной координате, и если истина, то проигрывать звук. Так же и с объектами, транспортом, и прочим, что было ранее перечислено. Так что, думаю, сократит как и кол-во кода, так и времени на его написание, ну и по мелочи, ведь гораздо приятнее выполнить проверку или иное действие по средствам опкода, а не методом IF THEN ELSE END

P.S: Это моё предложение, которое можно как проигнорировать, так и нет. Я это к тем, кто, вдруг, соберётся писать, что это всё бредовая идея. Может и так, своё мнение держу при себе.

Alien, если я правильно поняла, то эти опкоды, предложенные тобою, позволяют выводить текст без использования GXT, FXT? Т. е. напрямую в коде набираешь буквы, а оно тебе их в игре выводит?

Last edited by Ammy (19-11-2009 07:56)

Offline

#5 19-11-2009 08:59

Alien
Registered: 12-10-2008
Posts: 564

Re: San Andreas new opcodes project

mfisto wrote:

Так все з..сь!
Уточните, пожалуйста, ограничения на строку и на опкод 0AFD:.
Т.е. сколько символов может быть в строке и сколько параметров максимум в опкоде 0AFD:.

длина всех строк вида "string" ограничена сотней символов. Можно поднять до 127 (или 255. Я еще не проверял, знаковое там целое или нет). При передаче строки через переменную 0@v, длина естественно ограничивается размерами строковой переменной (а это, если я не ошибаюсь, 16 символов, включая null-termainator). То есть, 15 символов.
Всего в опкоде 0AFD 2 обязательных параметра. Максимальное число параметров - 35 (не проверял, но просто судя по надписи в сроке состояния...) Короче говоря, 33 параметра для включения в строку.

В 0AFD можно передавать float, int и указатель на другую строку. Чтобы включить float, используйте "%g", чтобы int - "%d", чтобы включить 1 символ - "%c", число в 16-ричном формате - "%x", строка - "%s". Можно указать количество символов, например "%.4x".
Пример:

0AFD: sprintf_destination 0@ format "This is %.4x opcode!" 0x0AFD

Тогда будет сформирована строка  "This is 0afd opcode!"

Как насчёт доработки опкодов манипуляции со звуками? Для привязки к актёру, объекту, координатам, зоне в n'ом радиусе и т. д.

Ой, это DirectSound. Да его еще и интегрировать в игру надо. Я слишком глупый исчо для таких весчей.

Alien, если я правильно поняла, то эти опкоды, предложенные тобою, позволяют выводить текст без использования GXT, FXT? Т. е. напрямую в коде набираешь буквы, а оно тебе их в игре выводит?

угум...

Last edited by Alien (19-11-2009 09:03)

Offline

#6 19-11-2009 09:35

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: San Andreas new opcodes project

Два предложения по поводу новых опкодов:

1) опкод проверки св-ва объекта. какого? а именно на св-во переносимости, т.е. его можно брать cj нажимая клавишу "сесть в тачку". Например, такие объекты находятся в домах в миссии ограбления и в миссии где cj с Райдером грабят старика. Надеюсь объяснил.

2) следущее, Seemann уже писал где то, как, набирая текст клавишами, получать в переменную строку, хотелось бы иметь просто один опкод, но так, чтобы в строке были не только буквы, по принципу fonts.txd. И желательно наподобее 0AFD: т.е. чтоб не сразу в строковую переменную.


I know everything and nothing...

Offline

#7 19-11-2009 10:30

GTASA
Registered: 13-09-2008
Posts: 476

Re: San Andreas new opcodes project

Вот еще предложения.

Опкод для придания тачке определенного угла по оси Х.
Для удобного создания таблиц (список товаров) типо как в SA:MP в pawno.
Для создания собственного ключа GXT, как в quick_opcode. Хотелось бы, чтобы это было еще в этом плагине. А так же удаление своего ключа.

Last edited by GTASA (19-11-2009 10:35)

Offline

#8 19-11-2009 11:47

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: San Andreas new opcodes project

таблицы итак легко создаются...жаль, лимит в 2 штуки(((

хорошо бы добавить опкод для 3д текста, как в САМП или в ранней версии ГТА3!!! чтобы текст висел в координатах мира, а не экрана


GIMS developer

Offline

#9 19-11-2009 14:57

Alien
Registered: 12-10-2008
Posts: 564

Re: San Andreas new opcodes project

Таак. Для начала из опкодов реализую чисто технические (для работы со строками, с текстовыми файлами...). Потом примусь непосредственно за игровые классы (CPed, CVehicle, CObject...) и (если мозгов хватит) DirectX.

VcSaJen wrote:

Вот юнит, который я написал когда делал опкоды. Хотя может тебе не надо, но всё же может кому-нибудь пригодится smile.

Я в вижуал студии пишу. Там есть thiscall. До асма опускаться нет необходимости.=)
А вообще, я активно пользую сорсы OpenGTA listener'а. Лежат на паблике.

Offline

#10 19-11-2009 16:11

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: San Andreas new opcodes project

Ammy wrote:

Как насчёт доработки опкодов манипуляции со звуками? Для привязки к актёру, объекту, координатам, зоне в n
'ом радиусе и т. д.

Примеры (на основе стандартных):

link_mp3 $MyMP3 to_actor $Actor
link_mp3 $MyMP3 to_car $MyCAR
set_mp3  $MyMP3 location 1600.0 1200.0 32.0
attach_mp3 $MyMP3 to_object $MyOBJ

SA (стандартные):

0949: link_wav $MyWAV to_actor $Actor
0A16: link_wav $MyWAV to_car $MyCAR
03D7: set_wav $MyWAV location 1600.0 1200.0 32.0
097C: attach_wav $MyWAV to_object $MyOBJ

В том случае, конечно, если эти стандартные (SA) команды не работают с загруженными звуковыми файлами по средствам опкодов CLEO. Я говорю о:

0AAC: $hMP3 = load_mp3 "CLEO\playlist\01.mp3"
03D7: set_wav $hMP3 location 1600.0 1200.0 32.0
0AAD: set_mp3 $hMP3 perform_action 1

К основному вопросу: чем это должно упростить процесс работы?

Упростит коды вида (дословно): проверка, находится ли актёр в заданной координате, и если истина, то проигрывать звук. Так же и с объектами, транспортом, и прочим, что было ранее перечислено. Так что, думаю, сократит как и кол-во кода, так и времени на его написание, ну и по мелочи, ведь гораздо приятнее выполнить проверку или иное действие по средствам опкода, а не методом IF THEN ELSE END

P.S: Это моё предложение, которое можно как проигнорировать, так и нет. Я это к тем, кто, вдруг, соберётся писать, что это всё бредовая идея. Может и так, своё мнение держу при себе.

Alien, если я правильно поняла, то эти опкоды, предложенные тобою, позволяют выводить текст без использования GXT, FXT? Т. е. напрямую в коде набираешь буквы, а оно тебе их в игре выводит?

Viger с gtamaps.net сделал отличный плагин для работы со звуком...но мапс лежит((( не помню, есть ли ЭТО на форуме СБ...


GIMS developer

Offline

#11 19-11-2009 17:15

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: San Andreas new opcodes project

3Doomer wrote:
Ammy wrote:

Как насчёт доработки опкодов манипуляции со звуками? Для привязки к актёру, объекту, координатам, зоне в n
'ом радиусе и т. д.

Примеры (на основе стандартных):

link_mp3 $MyMP3 to_actor $Actor
link_mp3 $MyMP3 to_car $MyCAR
set_mp3  $MyMP3 location 1600.0 1200.0 32.0
attach_mp3 $MyMP3 to_object $MyOBJ

SA (стандартные):

0949: link_wav $MyWAV to_actor $Actor
0A16: link_wav $MyWAV to_car $MyCAR
03D7: set_wav $MyWAV location 1600.0 1200.0 32.0
097C: attach_wav $MyWAV to_object $MyOBJ

В том случае, конечно, если эти стандартные (SA) команды не работают с загруженными звуковыми файлами по средствам опкодов CLEO. Я говорю о:

0AAC: $hMP3 = load_mp3 "CLEO\playlist\01.mp3"
03D7: set_wav $hMP3 location 1600.0 1200.0 32.0
0AAD: set_mp3 $hMP3 perform_action 1

К основному вопросу: чем это должно упростить процесс работы?

Упростит коды вида (дословно): проверка, находится ли актёр в заданной координате, и если истина, то проигрывать звук. Так же и с объектами, транспортом, и прочим, что было ранее перечислено. Так что, думаю, сократит как и кол-во кода, так и времени на его написание, ну и по мелочи, ведь гораздо приятнее выполнить проверку или иное действие по средствам опкода, а не методом IF THEN ELSE END

P.S: Это моё предложение, которое можно как проигнорировать, так и нет. Я это к тем, кто, вдруг, соберётся писать, что это всё бредовая идея. Может и так, своё мнение держу при себе.

Alien, если я правильно поняла, то эти опкоды, предложенные тобою, позволяют выводить текст без использования GXT, FXT? Т. е. напрямую в коде набираешь буквы, а оно тебе их в игре выводит?

Viger с gtamaps.net сделал отличный плагин для работы со звуком...но мапс лежит((( не помню, есть ли ЭТО на форуме СБ...

http://gtamaps.net/files/pafiledb.php?a … ile&id=144

Offline

#12 19-11-2009 21:27

Alien
Registered: 12-10-2008
Posts: 564

Re: San Andreas new opcodes project

Добавил еще несколько опкодов. И еще примеры.
Пример 1.

{$CLEO}
if
    0AF2: 0@ = malloc 100 //IF and SET	
then
    0AFD: sprintf_destination 0@ format "%d + %d = %d" 2 2 4
    0AFE: 1@ = sscanf_source 0@ format "%d + %d = %d" 2@ 3@ 4@
    if
        1@ == 3
    then
        0AF8: show_text_box_with_numbers "~1~ + ~1~ = ~1~" numbers 2@ 3@ 4@ -1 -1 -1
    end
    0AF3: free 0@
end
0a93:

Бредовый в каком-то смысле пример. Заключается в переливании из пустого в порожнее. Сначала формируется строка "2 + 2 = 4", потом из нее извлекаются параметры 2, 2 и 4, форматируются обратно в строку "2 + 2 = 4" и выводятся в боксе на экран.
Пример 2.

{$CLEO}
if
    0AFF: 0@ = fopen "cleo\hello_world.txt" mode "r" //IF and SET
then
    0AF0: 1@ = label @buffer offset
    0085: 2@ = 1@
    //посимвольное чтение из файла в буфер
    while 8B04:  not feof 0@
        0B02: fread 0@ destination 2@ size 1 //IF and SET
        2@ += 1
    end
    0B00: fclose 0@ //IF and SET
    //копирование строки из буфера в переменную 3@v
    0AF1: 3@ = var 3@ offset
    0AFD: sprintf_destination 3@ format "%.15s" 1@
    
    //вывод на экран
    0AF6: show_text_lowpriority 3@v time 5000
end
0a93:

:buffer
hex
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end

Для испытаний этого примера нужен файл в папке cleo с именем hello_world.txt. В нем должна содержаться какая-то не очень длинная строка (до 15 символов). Этот файл открывается опкодом 0AFF. Получается указатель на метку :buffer. В область памяти по этому указателю считывается все содержимое файла. Потом содержимое буфера копируется опкодом 0AFD в переменную 3@v, а оттуда выводится на экран.
Пример 3.

{$CLEO}
if
    0AFF: 0@ = fopen "cleo\sum.txt" mode "w+" //IF and SET
then
    1@ = 16
    2@ = 17
    0A8E: 3@ = 1@ + 2@ // int

    0B07: fprintf 0@ format "%d + %d = %d" 1@ 2@ 3@
    0B00: fclose 0@ //IF and SET
end
0a93:

Создает файл cleo\sum.txt и записывает в него строку "16 + 17 = 33".

Last edited by Alien (20-11-2009 10:53)

Offline

#13 20-11-2009 08:58

reute70
From: Средняя Волга
Registered: 22-08-2009
Posts: 182

Re: San Andreas new opcodes project

Я всё о выводе имени модели машины по ID - можно сделать такой опкод?   clap

Offline

#14 20-11-2009 11:09

Alien
Registered: 12-10-2008
Posts: 564

Re: San Andreas new opcodes project

Я же уже давал где-то этот код. Ну ОК, сделал. Попозже выложу.

Offline

#15 20-11-2009 12:35

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: San Andreas new opcodes project

Я ТОЖЕ ЗА, но надо не только машины, а всех ИД))))) пишешь любой ИД - получаешь имя дффки


GIMS developer

Offline

#16 20-11-2009 14:21

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: San Andreas new opcodes project

Seemann, 3Doomer, спасибо огромное, гибкая штука для работы со звуком!
Alien, респект, очень удобный плагин, вчера пытала! smile

Last edited by Ammy (20-11-2009 14:22)

Offline

#17 20-11-2009 19:20

reute70
From: Средняя Волга
Registered: 22-08-2009
Posts: 182

Re: San Andreas new opcodes project

3Doomer wrote:

Я ТОЖЕ ЗА, но надо не только машины, а всех ИД))))) пишешь любой ИД - получаешь имя дффки

Точь-в- точь - dff файла(имя, сестра!)   crazy

Offline

#18 21-11-2009 07:52

Alien
Registered: 12-10-2008
Posts: 564

Re: San Andreas new opcodes project

Добавил парочку опкодов.
И пример скрипта. CarSpawner. Чтобы соспавнить тачку, надо набрать имя ее модели.

{$CLEO}
0000:
while true
    wait 250
    for 0@ = 400 to 611
        0B0D: 1@v = car_model 0@ GXT
        if
            0B0C:  test_cheat 1@v
        then
            03E5: show_text_box 1@v
            0AA5: call 0x43A0B6 num_params 1 pop 1 0@
        end
    end
end
0a93:

Offline

#19 21-11-2009 16:34

reute70
From: Средняя Волга
Registered: 22-08-2009
Posts: 182

Re: San Andreas new opcodes project

Чё-то не очень хороший скрипт, разве что, для примера?!
211 раз присваивается, если совпадает - выдаёт...
Хотя чё машине(компу) сделается - она ж машина! grin

ЗЫ А скачать когда?!:rolleyes:

Last edited by reute70 (21-11-2009 16:35)

Offline

#20 21-11-2009 18:41

Alien
Registered: 12-10-2008
Posts: 564

Re: San Andreas new opcodes project

reute70 wrote:

Чё-то не очень хороший скрипт, разве что, для примера?!
211 раз присваивается, если совпадает - выдаёт...
Хотя чё машине(компу) сделается - она ж машина! grin

ЗЫ А скачать когда?!:rolleyes:

Ну, раз в 250 мс - это еще нормально. Вот скрипты с нулевым ожиданием в циклах - это зло.
Скачать можешь хоть сейчас (в первом посте ссылка еси что). Вот только плугин-то еще разрабатывается...

Offline

#21 21-11-2009 19:53

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: San Andreas new opcodes project

Alien
А что насчет моих предложений?


I know everything and nothing...

Offline

#22 25-11-2009 19:14

Alien
Registered: 12-10-2008
Posts: 564

Re: San Andreas new opcodes project

mfisto wrote:

Два предложения по поводу новых опкодов:

1) опкод проверки св-ва объекта. какого? а именно на св-во переносимости, т.е. его можно брать cj нажимая клавишу "сесть в тачку". Например, такие объекты находятся в домах в миссии ограбления и в миссии где cj с Райдером грабят старика. Надеюсь объяснил.

2) следущее, Seemann уже писал где то, как, набирая текст клавишами, получать в переменную строку, хотелось бы иметь просто один опкод, но так, чтобы в строке были не только буквы, по принципу fonts.txd. И желательно наподобее 0AFD: т.е. чтоб не сразу в строковую переменную.

1) Не очень "нужный" опкод, не находишь? Можно руками:

if
0AB1: call_scm_func @IsObjectLiftable 1 0@
then

end

:IsObjectLiftable
0A98: 0@ = object 0@ struct
0@ += 0x140
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
if
    08B7:   test 0@ bit 13 
then
    0485: return_true
else
    059A: return_false
end
0AB2: ret 0

2) в смысле получить строку, содержащую последние нажатые символы? Сделать можно. Но только все символы будут в верхнем регистре  и количество символов ограничено 29 (я планирую просто перевернуть чит-строку).

Offline

#23 25-11-2009 19:49

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: San Andreas new opcodes project

Ну вот радость для меня.=)
Большое спасибо.;-)
Я уже пользуюсь библиотекой, супер вещь!:^


I know everything and nothing...

Offline

#24 26-11-2009 05:14

GTASA
Registered: 13-09-2008
Posts: 476

Re: San Andreas new opcodes project

Alien, добавь пожалуйста опкод как в quick_opcode, чтобы можно было собственные gxt создавать и так же опкод для удаления.

Offline

#25 26-11-2009 07:58

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: San Andreas new opcodes project

в QO уже есть такие опкоды


GIMS developer

Offline

Board footer

Powered by FluxBB