You are not logged in.
Начал разрабатывать плагин для клео, который добавляет новые опкоды. Смысл в том, чтобы упростить выполнение рутинных действий в скрипте путем заведения нового опкода.
Пока сделано немного. В этой теме жду предложений о том, какие еще опкоды можно добавить.
___________________________________________________________________________
Список реализованных опкодов:
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
Пример скрипта с использованием новых опкодов.
{$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".
Как это работает:
Первым опкодом получаем указатель на переменную 0@. Передаем этот указатель в 0AFD в качестве указателя на приемник форматированной строки. Формат вывода имеет вид "%d + %d = %d". Все %d будут заменены на соответствующие целые, переданные следующими 3 параметрами: 2, 2 и 4. В результате в переменной 0@v оказывается форматированная строка "2 + 2 = 4", которая выводится следующим опкодом 0AF4.
Offline
Offline
Как насчёт доработки опкодов манипуляции со звуками? Для привязки к актёру, объекту, координатам, зоне в 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
Так все з..сь!
Уточните, пожалуйста, ограничения на строку и на опкод 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
Два предложения по поводу новых опкодов:
1) опкод проверки св-ва объекта. какого? а именно на св-во переносимости, т.е. его можно брать cj нажимая клавишу "сесть в тачку". Например, такие объекты находятся в домах в миссии ограбления и в миссии где cj с Райдером грабят старика. Надеюсь объяснил.
2) следущее, Seemann уже писал где то, как, набирая текст клавишами, получать в переменную строку, хотелось бы иметь просто один опкод, но так, чтобы в строке были не только буквы, по принципу fonts.txd. И желательно наподобее 0AFD: т.е. чтоб не сразу в строковую переменную.
I know everything and nothing...
Offline
Вот еще предложения.
Опкод для придания тачке определенного угла по оси Х.
Для удобного создания таблиц (список товаров) типо как в SA:MP в pawno.
Для создания собственного ключа GXT, как в quick_opcode. Хотелось бы, чтобы это было еще в этом плагине. А так же удаление своего ключа.
Last edited by GTASA (19-11-2009 10:35)
Offline
Offline
Таак. Для начала из опкодов реализую чисто технические (для работы со строками, с текстовыми файлами...). Потом примусь непосредственно за игровые классы (CPed, CVehicle, CObject...) и (если мозгов хватит) DirectX.
Вот юнит, который я написал когда делал опкоды. Хотя может тебе не надо, но всё же может кому-нибудь пригодится .
Я в вижуал студии пишу. Там есть thiscall. До асма опускаться нет необходимости.=)
А вообще, я активно пользую сорсы OpenGTA listener'а. Лежат на паблике.
Offline
Как насчёт доработки опкодов манипуляции со звуками? Для привязки к актёру, объекту, координатам, зоне в 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 $MyOBJSA (стандартные):
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
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 $MyOBJSA (стандартные):
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 сделал отличный плагин для работы со звуком...но мапс лежит((( не помню, есть ли ЭТО на форуме СБ...
Offline
Добавил еще несколько опкодов. И еще примеры.
Пример 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
Я всё о выводе имени модели машины по ID - можно сделать такой опкод?
Offline
Я же уже давал где-то этот код. Ну ОК, сделал. Попозже выложу.
Offline
Я ТОЖЕ ЗА, но надо не только машины, а всех ИД))))) пишешь любой ИД - получаешь имя дффки
Точь-в- точь - dff файла(имя, сестра!)
Offline
Добавил парочку опкодов.
И пример скрипта. 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
Чё-то не очень хороший скрипт, разве что, для примера?!
211 раз присваивается, если совпадает - выдаёт...
Хотя чё машине(компу) сделается - она ж машина!
ЗЫ А скачать когда?!:rolleyes:
Last edited by reute70 (21-11-2009 16:35)
Offline
Чё-то не очень хороший скрипт, разве что, для примера?!
211 раз присваивается, если совпадает - выдаёт...
Хотя чё машине(компу) сделается - она ж машина!ЗЫ А скачать когда?!:rolleyes:
Ну, раз в 250 мс - это еще нормально. Вот скрипты с нулевым ожиданием в циклах - это зло.
Скачать можешь хоть сейчас (в первом посте ссылка еси что). Вот только плугин-то еще разрабатывается...
Offline
Два предложения по поводу новых опкодов:
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
Alien, добавь пожалуйста опкод как в quick_opcode, чтобы можно было собственные gxt создавать и так же опкод для удаления.
Offline