#1 06-08-2009 16:26

DimP
Registered: 23-03-2009
Posts: 51

Вопросы по опкодам

У меня 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

#2 06-08-2009 17:31

Gyr
From: Серпухов
Registered: 03-02-2009
Posts: 246
Website

Re: Вопросы по опкодам

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

#3 06-08-2009 17:42

Alien
Registered: 12-10-2008
Posts: 564

Re: Вопросы по опкодам

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

#4 06-08-2009 19:06

Alien
Registered: 12-10-2008
Posts: 564

Re: Вопросы по опкодам

слушайте, а ведь можно вызывать ту же 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

#5 07-08-2009 07:18

DimP
Registered: 23-03-2009
Posts: 51

Re: Вопросы по опкодам

Спасибо всем, все получилось.
У меня еще несколько вопросов.
Почему не работает такая связка опкодов:

....
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

#6 07-08-2009 08:10

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Вопросы по опкодам

//versionB

А если попробовать версию A?

Offline

#7 07-08-2009 08:33

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

Re: Вопросы по опкодам

ни один опкод для записи объекта или педав радиусе толком не работает((((хз почему


GIMS developer

Offline

#8 07-08-2009 09:55

DimP
Registered: 23-03-2009
Posts: 51

Re: Вопросы по опкодам

Смотрел скрипты portal gun и gravy gun там как то работает

Offline

#9 07-08-2009 10:15

flashTrash
From: Н.Новгород
Registered: 21-02-2007
Posts: 260
Website

Re: Вопросы по опкодам

DimP wrote:

Почему не работает такая связка опкодов:

А проверить, найден ли пед?

: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

#10 07-08-2009 10:35

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

Re: Вопросы по опкодам

в скрипте гравипушки не эти опкоды используются


GIMS developer

Offline

#11 13-08-2009 14:35

DimP
Registered: 23-03-2009
Posts: 51

Re: Вопросы по опкодам

У меня появился еще вопрос.
Как сделать так чтоб выводить пиксельные изображения на экран (например d3d9.dll собейта и т.п)
Как написать самую простую d3d9.dll для SA ? или может с помощью cleo можно ?

Offline

#12 13-08-2009 16:37

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Вопросы по опкодам

пиксельные изображения

То есть текстуры...

Как написать самую простую d3d9.dll для SA ?

А ты хоть знаешь для чего она есть?

Offline

#13 13-08-2009 16:52

PIT
Registered: 08-09-2008
Posts: 224

Re: Вопросы по опкодам

Показ текстур в СА очень ограничен настолько, что есть два опкода для показа и нет опкодов для нормального редактирования, т.е. обрезать, изменить цвет
Вывод: 10 опкодов заменяются двумя универсальными. smile


100 постов - 27 августа;

Offline

#14 13-08-2009 19:35

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

Re: Вопросы по опкодам

изменять цвет тебе никто не мешает....а вот без обрезания сложновато риальне


GIMS developer

Offline

#15 14-08-2009 06:29

PIT
Registered: 08-09-2008
Posts: 224

Re: Вопросы по опкодам

я имею ввиду один раз написать драв текстуре и потом дополнительными опкодами уже без него редактировать.
Кстати, ведь есть quick opcode , который у меня не идёт sad, можт кто-нибудь создаст плагин для текстурок...


100 постов - 27 августа;

Offline

#16 14-08-2009 06:30

DimP
Registered: 23-03-2009
Posts: 51

Re: Вопросы по опкодам

Что это за опкоды, напишите пожалуйста.
Мне нужно сделать только крест\точку\квадрат по центру экрана , т.е прицел.

Offline

Board footer

Powered by FluxBB