#1 Re: Вопросы по скриптингу » Один вопрос » 15-05-2011 01:45

Название анимации хранится в CRC32, а не в текстовом виде, поэтому можно только сравнить, а получить текущее название не удастся. Может и есть способ, но я говорю изучив работу опкода, который ты в пример поставил.
И у stream memory fix вроде нет настроек, он просто прописывает лимиту memory дофига памяти(0x8A5A80 = 0xEFFFFFFF). Кому надо - меняйте значение через память(например cleo скриптом), единица измерения скорее всего в байтах(т.е. максимум ~3 ГБ)

#2 Re: Справочная информация » Адреса и функции gta_sa.exe 1.0 » 13-10-2010 18:59

Сам искал по мере изучения движка, тут по-моему ещё не всё=)

#3 Re: Справочная информация » Адреса и функции gta_sa.exe 1.0 » 13-10-2010 18:03

Вот, нашёл названия кое-каких функций(надо бы добавить в базу=)):

sub_43CEC0  =  DrawRampageText
sub_45C210  =  DrawReplayText
sub_493160  =  RemoveSearchlight
sub_573AE0  =  SetDefaultSettings  (*used to set some options by default, for example - graphic settings)
sub_589650  =  _?DrawStatBox
sub_719510  =  SetFontShadowRGBA   arg_0 = RGBA
sub_71A700  =  DrawText? (*used to redraw? textures on screen)

_allocTobjModel  - arg_0 = model_ID


byte_B6EC2E - keyboard_playing (*address used to check buttons for keyboard or joypad control)

#4 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 17-07-2010 00:41

Deniska, не проще ли использовать мой плеер?:crazy: Нагружаешь Алиена той же работой, которую я сделал, к тому же он не хотел добавлять новые опкоды, но если хочет - пусть делает. Я лично переписываю щас свой плеер под C++ и ещё есть такая функция - синхронизация громкости с громкостью звуков/радио игры, хотя я считаю не особо трудно скриптом сделать.

#5 Re: Программирование » Помогите, пожалуйста, с Си++!! » 16-07-2010 14:37

Можно поподробнее? Я C++ изучаю всего неделю где-то...
Вот допустим код функции:

VARIANT (__stdcall *FUNC_READ_VALUE)(char) = (VARIANT (__stdcall *)(char))GetProcAddress(Lib, "FUNC_READ_VALUE");

И как можно проще?

#6 Re: Программирование » Помогите, пожалуйста, с Си++!! » 16-07-2010 14:06

Может и проще, вобще я использую QuickOpcode Alexander'а, написанный ещё довольно давно и по мне так проще писать, чем через CLEO. В моей версии исправлен вылет, поддерживаются все типы строк, в том числе указатели на строку, возможно писать опкоды-проверки и с переменным колличеством параметров + немного ускорен алгоритм работы.
Руки не доходят выложить(= А насчёт функций, то вот например:

function FUNC_READ_VALUE(TP : Char) : Variant;
function FUNC_WRITE_VALUE(TP : Char; Value : Variant) : Boolean;

Вместо CHAR 'i' или 'f' для обозначения типа. Для чтения в одном случае читаем параметр как float, в другом как integer, а в записе надо тоже разные использовать, чтобы не сбивать с толку и не писать целые числа как дробные... (З.Ы. кстати Boolean надо убрать, а FUNC_ заменить на OPCODE_ тогда будет красиво=))

#7 Re: Программирование » Помогите, пожалуйста, с Си++!! » 16-07-2010 13:21

У меня возник вопрос по C++. Мне нужно воспользоваться типом Variant для возврата одной из функций, написанных в Дельфи. Я где-то читал, что аналогия вроде есть, но сам не нашёл. Кто-нибудь знает, как это можно сделать?

З.Ы. нашёл статью в MSDN, расписывающую структуру Variant'а... Знать бы как применить ещё:
http://msdn.microsoft.com/en-us/library/ms221627.aspx

Вроде бы вторая ссылка была полезнее. Нужно просто подключить к проэкту atlcomcli.h smile:
http://msdn.microsoft.com/en-us/library … 80%29.aspx

#8 Re: Серия GTA » Зависает GTA SA » 13-07-2010 13:27

Если игра чистая, возможно проблема в exe. Попробуй этот:

(gta_sa.exe v.1.0 US 14 383 616 байт)

#9 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 09-06-2010 11:12

У меня так и не работает( Заменил. Скрипт приблизительно такой выполняется:

//код миссии
0AB1: call @FUNC_FADE_IN_1000_MS 0
0AB1: call @FUNC_LOAD_CUTSCENE 1 params 12 // HOMSWET
...

:FUNC_LOAD_CUTSCENE
0@ == 22
jf @FUNC_LOAD_CUTSCENE_CASE_12
...

:FUNC_LOAD_CUTSCENE_CASE_12
0AB1: call @FUNC_FADE_IN 1 wait 500
0@ == 12
jf @FUNC_LOAD_CUTSCENE_END
---------
ЭТОТ КОД УЖЕ НЕ ВЫПОЛЯЕТСЯ!
---------


:FUNC_FADE_IN_1000_MS
0169: set_fade_color_RGB 0 0 1
fade 0 1000

:FUNC_FADE_IN_1000_MS_PROCESS
fading
jf @FUNC_FADE_IN_1000_MS_END
wait 0
jump @FUNC_FADE_IN_1000_MS_PROCESS

:FUNC_FADE_IN_1000_MS_END
0AB2: ret 0

:FUNC_FADE_IN
0169: set_fade_color_RGB 0 0 1
fade 0 0@

:FUNC_FADE_IN_PROCESS
fading
jf @FUNC_FADE_IN_END
wait 0
jump @FUNC_FADE_IN_PROCESS

:FUNC_FADE_IN_END
0AB2: ret 0


З.Ы. если не вызывать 0AB1: call @FUNC_FADE_IN 1 wait 500 то хотя бы катсцена проигрывается! То есть, после возврата функции не имеют предыдущих значения, а обнуляются!

#10 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 09-06-2010 09:02

Вроде опкод, находится ли актёр в поле зрения вот:

89ED: not actor $PLAYER_ACTOR is_within_field_of_view_actor 9@

А опкод

0364:   actor 102@(42@,9i) spotted_actor $PLAYER_ACTOR

означает не задел ли актёр другого актёра

@Alien да, степень вложенности пока ограничена! После вызова call_scm_func из миссии, а затем вызвав из того кода ещё другую функцию, то переменные обнулятся, вместо того, чтобы вернуться как были. При вызове не из миссии - всё нормально работает!

#11 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 08-06-2010 17:53

Спасибо большое! Сейчас протестирую)

#12 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 07-06-2010 07:06

Алиен, но дело в том, то что мне бы использовать опкод call в миссии мейна! А оттуда он слетает. Ты мог бы сделать ну просто, поддержку этого опкода в стандартных миссиях СА? Я думаю это не сложно будет, но при вызове обратного ret с параметрами пусть так и останется 32 локальных переменных, а остальные переменные пусть остаются как были! У меня лично в миссиях этот опкод не работает, в последней версии ещё не пробовал.
Если что, был ведь какой-то код Симана, который позволял ставить таймеры не только на глобальные переменные, но и на локальные? Там вроде и был код, который определяет, запущена ли сейчас миссия или обычный поток, ну может это тебе поможет!:)

#13 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 06-06-2010 11:08

А возможно сделать работу опкода call_scm_func в миссиях? Мне бы просто им в миссии вызывать функции, а возврат параметров - необязательно. Просто чтоб реально в миссии было также вызвать функцию с параметрами, потому что возврат всех переменных сделать не получится - в миссии их больше) Просто очень надо или альтернативу этого опкода для работы в миссиях...

#14 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 17-04-2010 05:13

У меня... блин щас номер версии клео 4 не скажу) (не последня) там вобщем запускается внешний клео-скрипт опкодом 0A92: create_custom_thread "radio.lscr"
И в папке с игрой он отсутствовал - в результате игра слетала, в клео 3 у опкода была проверка на существование файла... Надо бы добавить smile

#15 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 30-03-2010 22:28

Дак а поддержка будет хотя бы для ини строк по указателю? Мне надо для скрипта, я вобще на квик опкоде уже написал)) Ну всё равно в клео лучше было бы иначе вобще смысл там какой, когда из ини считать стринг даже не получится скажем из-за того что указатели не поддерживаются...

а код ретурн иф фалс у меня приблизительно такой и есть, тока я иф не пишу - потому что проверка одна, мб из-за этого не срабатывает, хз... Ещё уточню)

#16 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 26-03-2010 16:40

Я заметил, что в клео-плагинах не работает с ини файлами строка по указателю. С этим не уверен, но помоему return_if_false так и не заработал правильно. У меня обычная крякнутая версия 1.0 US...

#17 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 28-02-2010 10:29

Я говорил о таких вот опкодах! Скачиваем квик опкод новый и смотрим! В архиве описаны все опкоды, там для работы со строками, полностью совместимо с клео4 и не мешает работе игры...

http://www.needforrace.ucoz.ru/load/6-1-0-22

0B10: allocate_string "blabla" at_address 0@
0B11: 1@ = string 0@ length
0B12: allocate_int_to_str 1@ at_address 0@
0B13: allocate_string_sum 0@ + 1@v at_address 0@
0B14: 0@ == 1@v // any strings

#18 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 26-02-2010 13:37

@mfisto, не ну чё надо было ещё объяснять! Нее, люди умные сидят, я кстати тоже не тупой, доработал квик опкод, не знаю, буду ли поддержку для линейки 3-ей гта делать, но для СА 1.0 работает нормалём, пришлось тоже скриптинговую систему изучать... Короче хорош оффтопить и понты гнуть, я лишь упомянул что это отключается, да я сам эту хрень долго найти не мог(= И писал я из под XP, так что я и физически не мог посмотреть где отключается - убрал и забыл...

@Alien а что по поводу добавления опкодов? Типа
00B0: allocate_string "HZHZH" at_address 0@
и
00B1: fill_memory_by 0 at_address 0@ size 255
вот типа того? Удобно - обнулить память одним опкодом! Тут в качестве первого параметра - байт к которому будут приравниваться все аддреса побайтово, начиная от заданного адресса ну и заканчивая, там зависимо от размера... Хотя этого можно не делать, я для себя сам напишу! Для других есть write_memory grin А вот первый опкод я считаю просто необходим!

@GTASA нет, не совсем, ещё модель не получил)) Вот так!(не тестировал)
03C0: 1@ = actor $PLAYER_ACTOR car
0441: 1@ = car 1@ model
0ADB: 0@v = car_model 1@ name
0ADE: 0@ = text_by_GXT_entry 0@v
...

#19 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 24-02-2010 14:25

А я отключил в Винде эту фичю и не парюсь(= Да и кстати, опкод return_if_false опять работать перестал... в предпоследней версии клео 3 он не работал, в последней работал, а в клео 4 опять нет(

#20 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 19-02-2010 18:26

нифига чё мутите))) Вобще респект! Чё не нравилось в 3 клео, то что когда я хотел обнулить сразу несколько байт памяти типа 0A8C: write_memory 0@ size 255 value 0 virtual_protect 0
то ничё не обнулялось, без понятия исправлено ли это в новой версии, щас тестить буду(= И если надо - могу дать исходники своего плеера(bass.dll), хз насколько надо... А так остаётся только пожелать удачи;)

З.Ы. обнаружил опкод 0AD2: $actor = player $PLAYER_CHAR targeted_actor. Тут для "джойстика" тоже работает? Просто адресса памяти разные нужно проверять(я сам пробовал)

#21 Re: Работа с памятью, EXE » [Delphi] Нужна помощь по памяти » 14-08-2009 16:33

А теперь у меня вопрос посложнее. Можно ли определить была ли загружена игра? Может загрузка оставляет за собой какой-нибудь мусор в памяти, по которому можно вычислить была ли недавно загрузка... В памяти игры я ничё поменять не могу в коде загрузки, т.к. нифига не смыслю в асме. Дак вот мне нужно сохранять инфу о звуках вместе с игрой(слот записи можно определить по адрессам 0xC16082 и 0xC16E0A). Слот загрузки можно определить по адрессам 0xC15FB2 и 0xC1601A. Но они всегда постоянны, поэтому даже при обнулении показывают текущий слот(да и кстати потом изменяют своё значение по непонятному для меня алгоритму(возможно последний занятый слот в списке + 1?) ). А как определить загружалась ли игра в ближайшее время не придумал. И нужно чтобы это определялось за  минимальное время, иначе в Аудио Плеере возможны баги:rolleyes:

Первоначально расчитывал при запуске каждого опкода на проигрывание/остановку/проверку/установку параметров из Аудио Плеера проверять не загружалась ли игра. Если не определит, то возможно какой-то звук начнёт проигрываться и при последующей загрузке(если еще проверка сработает) он остановится, хотя должен играть по скрипту и загрузятся звуки по текущему слоту из файла... Вот пример бага, так что очень надеюсь на вашу помосчь:rolleyes:

*с этой проблемой справился

#22 Re: Работа с памятью, EXE » [Delphi] Нужна помощь по памяти » 14-05-2009 11:28

Хм, интересно:

f:=PLongInt($00B7CB64)^;
//f:=0.5;
i:=round(i*f/100);

Поясняю свои действия - Я попробовал поменять на тип PLongInt, звук не воспроизвёлся вобще. Значение адресса по умолчанию 1.0, ну я поставил опкодом на 0.5, значит значение по идее 0.5. НО ничего не заработало, потом я попробовал со строкой f:=0.5 - идеально. Звук проигрался в 2 раза медленнее, когда же я дописал строку /100, то звук воспроизвелся только при обычной скорости игры... Пока не знаю что это означает, надеюсь вы мне поможете разобраться. Впринципе могу исходники своего Аудио Плеера выложить, если сильно надо будет. Но я этого не собирался делать до выхода финальной версии. Для тех кто ещё не знает что он делает, скажу только одно))):

0B51: $GTA3_WAV_SOUND = play_audio "audio\GTA3\LIB_A1.mp3" direct_path 0 volume 100 position 0.0 loop 0 menu_flag 0 temp 0.0 samplerate 0 pitch 0 reverse 0 synchronize speed 1 volume 1

Ссыль на плагин кину в темку как доделаю версию 1.5, если кого заинтересовало. Ну всё, жду помощи:)

#23 Re: Работа с памятью, EXE » [Delphi] Нужна помощь по памяти » 14-05-2009 10:17

listener wrote:

возможно, проблема в том, что double - 8 байт, а нужно четыре.

Ааа. Не подскажешь какой тип использовать? Я уже много попробовал: PInt, PByte, PDouble и т.п. PFloat на Делфи нет и справочников в инете не нашёл по типам хороших. Полазил в Windows.pas, нарыл:

ULONG = Cardinal;
PULONG = ^ULONG;

А Кардинал, помоему и есть что-то типа Float, но не подошло. Вот не знаю что делать(

#24 Работа с памятью, EXE » [Delphi] Нужна помощь по памяти » 14-05-2009 02:43

Viger
Replies: 6

Извиняюсь если вопрос не в ту тему) Вобщем у меня возникла проблема пр чтении памяти с Float значением. Мне нужно для своего плагина узнать скорость игры, но ничё не происходит. Делаю так:

//var f : real ; i : integer;
//i:=22050
//...
VirtualProtect(Ptr($00B7CB64),4,4,op);
f:=PDouble($00B7CB64)^;
i:=round(i*f);
//...

Это для аудио плагина чтобы скорость воспроизведения с игровой сравнять) Адресс вроде работает. Не знаю в чём прблема:(

Board footer

Powered by FluxBB