You are not logged in.
Pages: 1
У меня 2 вопроса ,ответьте пожалуйста!
1) Можно ли из cleo скрипта запустить exe файл ?
2) В cleo3 есть следующие опкоды:
0A8C: write_memory 0xC0BC15 size 1 value 1 virtual_protect 0
0A8D: $result = read_memory 1@ size 4 virtual_protect 0
А как быть если адрес памяти не определен, например 0xC0BC15 + 1111 ?
Можно ли записать содержимое адреса 0xC0BC15 в переменную ,потом к ней прибавить смещение 1111 ,и изменить получившийся адрес ?
Offline
1) Можно ли из cleo скрипта запустить exe файл ?
Нет. Клео скрипт - это поток, при запуске игры он как бы интегрируется в MAIN.scm и работает только внутри gta_sa.exe
2) В cleo3 есть следующие опкоды:
0A8C: write_memory 0xC0BC15 size 1 value 1 virtual_protect 0
0A8D: $result = read_memory 1@ size 4 virtual_protect 0А как быть если адрес памяти не определен, например 0xC0BC15 + 1111 ?
Можно ли записать содержимое адреса 0xC0BC15 в переменную ,потом к ней прибавить смещение 1111 ,и изменить получившийся адрес ?
Да, именно так и надо делать. Вот пример:
1@ = 0xC0BC15 0A8E: 2@ = 1@ + 1111 0A8C: write_memory 2@ size 1 value 1 virtual_protect 0
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
1) наверное. Нужно написать dll, в которой будет проэспортирована одна из api функций: ShellExecute или CreateProcess. Такую библиотеку можно будет подключить к процессу (0AA2), получить адрес функции (0AA4) и вызвать ее (0AA5, 0AA7). Потом выгрузить библиотеку (0AA3).
2) конечно можно. Можно так:
0@ = 0xC0BC15 0@ += 1111 0A8C: write_memory 0@ size 1 value 1 virtual_protect 0
А если еще и на калькуляторе посчитать, то вот что получится=)
0A8C: write_memory 0xC0C06C size 1 value 1 virtual_protect 0
Типа правило такое: во всех опкодах можно писать вместо константных значений переменные и наоборот. Хотя есть исключения. Например, опкоды работы со статус-текстами. Они работают с только переменными и только глобальными.
__________________
ой, уже ответили.
Last edited by Alien (06-08-2009 17:43)
Offline
слушайте, а ведь можно вызывать ту же ShellExecute прямо из shell32.dll. У меня все работает.=) Сколько же новых возможностей открылось для меня в скриптописании с открытием возможности вызывать api функции. Про ShellExecute читать тут.
{$CLEO} const //nShowCmd SW_HIDE = 0 SW_SHOWNORMAL = 1 SW_SHOWMINIMIZED = 2 SW_SHOWMAXIMIZED = 3 SW_MAXIMIZE = 3 SW_SHOWNOACTIVATE = 4 SW_SHOW = 5 SW_MINIMIZE = 6 SW_SHOWMINNOACTIVE = 7 SW_SHOWNA = 8 SW_RESTORE = 9 SW_SHOWDEFAULT = 10 //return value No_errors = 0 ERROR_FILE_NOT_FOUND = 2 SE_ERR_FNF = 2 ERROR_PATH_NOT_FOUND = 3 SE_ERR_PNF = 3 ERROR_BAD_FORMAT = 11 SE_ERR_ACCESSDENIED = 5 SE_ERR_ASSOCINCOMPLETE = 27 SE_ERR_DDEBUSY = 30 SE_ERR_DDEFAIL = 29 SE_ERR_DDETIMEOUT = 28 SE_ERR_DLLNOTFOUND = 32 SE_ERR_NOASSOC = 31 SE_ERR_OOM = 8 SE_ERR_SHARE = 26 //------------------- empty_string = 0x858B54 //пустая строка end 0AA2: 0@ = load_library "shell32.dll" 0AA4: 1@ = get_proc_address "ShellExecuteA" library 0@ 0A9F: 30@ = current_thread_pointer 0AB1: call_scm_func @__LabelToOffset 1 @FileName 2@ 0A8D: 30@ = read_memory 0xC97C1C size 4 virtual_protect 0 //хэндл окна СА 0AA7: call_function 1@ num_params 6 pop 0 SW_SHOWMAXIMIZED empty_string empty_string 2@ 0 30@ 3@ if 3@ == ERROR_FILE_NOT_FOUND then 0AB1: call_scm_func @__LabelToOffset 1 @ErrorMessage 2@ 0AA5: call_proc 0x69F2B0 num_params 3 pop 3 style 0 time 5000 PChar 2@ end 0a93: :__LabelToOffset if 0@ == 0 then 0AB2: ret 1 0 end 0A9F: 1@ = current_thread_pointer 1@ += 0x10 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 // baseIP 0062: 1@ -= 0@ // label address 0AB2: ret 1 1@ :FileName hex "test.exe" 00 end :ErrorMessage hex "Can't" 20 "find" 20 "test.exe" 00 end
Last edited by Alien (06-08-2009 19:24)
Offline
Спасибо всем, все получилось.
У меня еще несколько вопросов.
Почему не работает такая связка опкодов:
....
00A0: store_actor $PLAYER_ACTOR position_to 1@ 4@ 5@
089E: get_actor_in_sphere 1@ 4@ 5@ radius 5.0 handle_as 11@ // versionB
if
0457: player $PLAYER_CHAR aiming_at_actor 11@
then
....
Также не работают опкоды:
0467: clear_actor $PLAYER_ACTOR last_weapon_damage
и
02E2: set_actor 2@ weapon_accuracy_to 75
Как их правильно использовать ?
Last edited by DimP (07-08-2009 07:18)
Offline
Offline
Смотрел скрипты portal gun и gravy gun там как то работает
Offline
Почему не работает такая связка опкодов:
А проверить, найден ли пед?
:getactor wait 0 00A0: store_actor $PLAYER_ACTOR position_to 1@ 4@ 5@ 089E: get_actor_in_sphere 1@ 4@ 5@ radius 5.0 handle_as 11@ // versionB if 11@ == -1 jf @runscript goto @getactor :runscript if 0457: player $PLAYER_CHAR aiming_at_actor 11@ then
Насчет 11@ == -1 не уверен, посмотри аналогичные скрипты рокстаров
Offline
У меня появился еще вопрос.
Как сделать так чтоб выводить пиксельные изображения на экран (например d3d9.dll собейта и т.п)
Как написать самую простую d3d9.dll для SA ? или может с помощью cleo можно ?
Offline
пиксельные изображения
То есть текстуры...
Как написать самую простую d3d9.dll для SA ?
А ты хоть знаешь для чего она есть?
Offline
Показ текстур в СА очень ограничен настолько, что есть два опкода для показа и нет опкодов для нормального редактирования, т.е. обрезать, изменить цвет
Вывод: 10 опкодов заменяются двумя универсальными.
100 постов - 27 августа;
Offline
я имею ввиду один раз написать драв текстуре и потом дополнительными опкодами уже без него редактировать.
Кстати, ведь есть quick opcode , который у меня не идёт , можт кто-нибудь создаст плагин для текстурок...
100 постов - 27 августа;
Offline
Что это за опкоды, напишите пожалуйста.
Мне нужно сделать только крест\точку\квадрат по центру экрана , т.е прицел.
Offline
Pages: 1