Другое Полезные сниппеты и SCM-функции

Opcode.eXe

Известный
84
112
You always wanted to run 2 CLEO in one .cs file?
Its possible! Thanks to Delj?

FUNCTION:
Код:
{
    START NEW THREAD WITHOUT INTERRUPTING MAIN THREAD
    0AB1: call_scm_func @RUN_CLEO_MOD 1 AT LINE @CLEO
}
 
:RUN_CLEO_MOD
0A9F: 32@ = current_thread_pointer
000A: 32@ += 0x10
0A8D: 32@ = read_memory 32@ size 4 virtual_protect 0
0062: 32@ -= 0@
0AA7: call_function 0x464C20 num_params 1 pop 1 32@ 33@
005A: 32@ += 0@
000A: 33@ += 0x10
0A8C: write_memory 33@ size 4 value 32@ virtual_protect 0
000A: 33@ += 0x2C
for 32@ = 0 to 30
    0A8C: write_memory 33@ size 4 value 1@(32@,30i) virtual_protect 0
    000A: 33@ += 4
end
0AB2: ret 0

Howto use this? EXAMPLE:


Код:
{$CLEO .cs}
0000:
0662: NOP "#########################"
0662: NOP "___Made by Opcode.eXe___"  { BASIC THREAD }
0662: NOP "Www.Youtube.Com/OpcodeXe"
0662: NOP "#########################"
 
0AB1: call_scm_func @RUN_CLEO_MOD 1 AT LINE @CLEO
 
 
WHILE TRUE
    wait 0
    if
    0AB0: 49 // X
    then
        0AD1: show_formatted_text_highpriority "CLEO THREAD_1 IS RUNNING! %d" time 1 33@
    end
END
 
 
:CLEO
0000:
WHILE TRUE
    wait 0
    if
    0AB0: 50 // X
    then
        0AD1: show_formatted_text_highpriority "CLEO THREAD_2 IS RUNNING! %d" time 1 33@
    end
END
 
 
:RUN_CLEO
0A9F: 32@ = current_thread_pointer
000A: 32@ += 0x10
0A8D: 32@ = read_memory 32@ size 4 virtual_protect 0
0062: 32@ -= 0@
0AA7: call_function 0x464C20 num_params 1 pop 1 32@ 33@
005A: 32@ += 0@
000A: 33@ += 0x10
0A8C: write_memory 33@ size 4 value 32@ virtual_protect 0
000A: 33@ += 0x2C
for 32@ = 0 to 30
    0A8C: write_memory 33@ size 4 value 1@(32@,30i) virtual_protect 0
    000A: 33@ += 4
end
0AB2: ret 0
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
Получаем позиции ближайших маркеров
CLEO:
0AB1: call @StoreClosestMarkerPos 0 X 30@ Y 29@ Z 28@
0AB1: call @StoreClosestRaceMarkerPos 0 X 30@ Y 29@ Z 28@

:storeclosestmarkerpos
12@ = 9999.0
for 0@ = 0 to 31
    0085: 1@ = 0@
    1@ *= 160
    1@ += 0xC7DD58
    1@ += 48
    0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0
    1@ += 4
    0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0
    1@ += 4
    0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0
    00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@
    050A: 8@ = distance_between_XYZ 2@ 3@ 4@ and_XYZ 5@ 6@ 7@
    if
        0025: 12@ > 8@
    then
        0087: 12@ = 8@
        0087: 9@ = 2@
        0087: 10@ = 3@
        0087: 11@ = 4@
    end
end
0AB2: ret 3 9@ 10@ 11@

:storeclosestracemarkerpos
12@ = 9999.0
for 0@ = 0 to 31
    0085: 1@ = 0@
    1@ *= 56
    1@ += 0xC7F158
    1@ += 16
    0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0
    1@ += 4
    0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0
    1@ += 4
    0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0
    00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@
    050A: 8@ = distance_between_XYZ 2@ 3@ 4@ and_XYZ 5@ 6@ 7@
    if
        0025: 12@ > 8@
    then
        0087: 12@ = 8@
        0087: 9@ = 2@
        0087: 10@ = 3@
        0087: 11@ = 4@
    end
end
0AB2: ret 3 9@ 10@ 11@
 

Opcode.eXe

Известный
84
112
0AB1: @WEAPON_DAT 4 | -> Change Weapon 24 DAT 0x20 VALUE_TO 45 SIZE_OF_DAT 4

Код:
{
Change's the Weapon.dat value of Weapon ID to your custom one.
0AB1: @WEAPON_DAT 4 | -> Change Weapon 24 DAT 0x20 VALUE_TO 45 SIZE_OF_DAT 4 // MaxAmmo in Clip
Get DAT'S from http://hotmist.ddo.jp/struct.html
}
 
:WEAPON_DAT
0@ += 0x24 // UNKNOWN
0@ *= 0x70 // BLOCK SIZE
0@ += 0xC8AAB8 // BASE
005A: 0@ += 1@  // (int)
0A8C: write_memory 0@ size 3@ value 2@ virtual_protect 0
0AB2: ret 0
 

MogAika

Известный
Друг
237
444
Добавление cleo команды на 0.3z, для работы нужен mgf 3.3 и старше:
Код:
:GetCallParam //0AB1: call @GetCallParam 2 params_pntr 1@ param_num 2 to 3@
0012: 1@ *= 4
005A: 0@ += 1@
0A8D: 2@ = read_memory 0@ size 4 virtual_protect 1
0AB2: ret 1 2@
           
:RegisterCommand //0AB1: call @RegisterCommand 3 command "Ololoshka" to_label @on_command var_to_set_hook 0
0AC8: 2@ = allocate_memory_size 5
0DB6: 3@ = create_hook from_addr 2@ to_label 1@ pop_count 0 var_to_set_hook 3@
0DB7: plant_hook 3@
0AA2: 31@ = load_library "kernel32.dll" // IF and SET
0AA4: 30@ = get_proc_address "GetModuleHandleA" library 31@ // IF and SET
0AA7: call_function 30@ num_params 1 pop 0 "samp.dll" 3@
 
0A8E: 4@ = 3@ + 0x212A70
0A8D: 5@ = read_memory 4@ size 4 virtual_protect 1
 
0A8E: 4@ = 3@ + 0x7BC40
0AA6: call_method 4@ struct 5@ num_params 2 pop 0 params 2@ 0@
 
0AB2: ret 0
Перед вызовом данного опкода надо прождать некоторое время, иначе будет вылет
Пример скрипта: Если ввести в чат /test <любойтекст>, то на экран выведет <любойтекст>
Код:
0000:
wait 1000 //ждем, чтобы не вылететь
0AC6: 0@ = label @command offset //т.к. в scm функу текст хер передаш, то юзаем смещение на текст
0AB1: call @RegisterCommand 3 command 0@ to_label @on_command var_to_set_hook 0 //var_set_hook смотрим у опкода 0DB6 из mfg
while true
    wait 0 //уходим в бесконечный цикл
end
 
:command
hex
"test" 00
end
 
:on_command
0DB9: get_hook 0@ last_param_pntr_to 1@
0AB1: call @GetCallParam 2 params_pntr 1@ param_num 1 to 2@ //получаем текст
0ACD: show_text_highpriority 2@ time 1000 //показываем его на экран
0D98: callback_retn
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
Нет. Без SF не работает.
Подробно: получает позицию красного маркера, самого ближнего.

Уже работает :) Кстати при переводе bottera понадобилась такая хрень (взрослым дядькам не смеяться :) ):

PHP:
Массив (array) — набор однотипных элементов, расположенных в памяти
непосредственно друг за другом, доступ к которым осуществляется по номеру элемента.
 
0AC8: 15@ = allocate_memory_size 512 // Выделяем память под массив
0AB1: call @get_array 2 15@ element 10 value_to 13@ // Получаем значение элемента номер 10 в переменную 13@
0AB1: call @put_into_array 3 15@ element 48 value 13@ // Устанавливаем элементу 48 значение из переменной 13@
 
:put_into_array
1@ *= 4
005A: 0@ += 1@
0A8C: write_memory 0@ size 4 value 2@ virtual_protect 1
0AB2: ret 0
 
:get_array
1@ *= 4
005A: 0@ += 1@
0A8D: 1@ = read_memory 0@ size 4 virtual_protect 1
0AB2: ret 1 1@

PHP:
Массив (array) — набор однотипных элементов, расположенных в памяти
непосредственно друг за другом, доступ к которым осуществляется по номеру элемента.
 
const
      INT = 2
      LONG = 4
      FLOAT = 4
      BOOL = 1
      SHORTINT = 1
      STRING = 256
      CHAR = 2
end
 
0AB1: call @create_array 2 element_count 60 size FLOAT result_to 15@ // Создаём массив с количеством элементов 60 по 4 байта каждый и записываем адрес на него в переменную 15@
0AB1: call @get_array 2 15@ element 10 value_to 13@ // Получаем значение элемента номер 10 в переменную 13@
0AB1: call @put_into_array 3 15@ element 48 value 13@ // Устанавливаем элементу 48 значение из переменной 13@
0AC9: free_array 15@ // Удаляем массив
 
:create_array
006A: 0@ *= 1@
0@ += 4
0AC8: 2@ = allocate_memory_size 0@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 1
0AB2: ret 1 2@
 
:put_into_array
0A8D: 3@ = read_memory 0@ size 4 virtual_protect 1
0@ += 4
006A: 1@ *= 3@
005A: 0@ += 1@
0C11: memset destination 0@ value 2@ size 3@
0AB2: ret 0
 
:get_array
0A8D: 2@ = read_memory 0@ size 4 virtual_protect 1
0@ += 4
006A: 1@ *= 2@
005A: 0@ += 1@
if
    2@ < 5
then
    0AC7: 1@ = var 1@ offset
end
0C10: memcpy destination 1@ source 0@ size 2@
0AB2: ret 1 1@
 

MogAika

Известный
Друг
237
444
Написать текст в чат 0.3z
Код:
:write_text_in_chat
0AA2: 31@ = load_library "kernel32.dll" // IF and SET
0AA4: 30@ = get_proc_address "GetModuleHandleA" library 31@ // IF and SET
0AA7: call_function 30@ num_params 1 pop 0 "samp.dll" 3@
0A8E: 2@ = 3@ + 0x212A6C
0A8D: 1@ = read_memory 2@ size 4 virtual_protect 1
0A8E: 2@ = 3@ + 0x7A4F0
0AA6: call_method 2@ struct 1@ num_params 5 pop 0 params 0 0xFFFFFFFF 0 0@ 8
0AB2: ret 0
Пример скрипта:
Код:
{$CLEO .cs}
0000:
wait 1000 //ждем пока структуры инициализируются
while true
    0AC6: 0@ = label @text offset
    0AB1: call @write_text_in_chat 1 text 0@
    wait 500
end
:text
hex
"test" 20 "test," 20 "Motherfucer" 00
end
 

Opcode.eXe

Известный
84
112
Код:
0AB1: @FAKE_KEYPRESS 1 _OFFSET_KEY_ 0x3 {W}
{ W= 0x3, A= 0x1, S= 0x2, D=0x0, AIM=0xC, SHOT=0x8(0x22), JUMP=0x1C, SPRINT: 0x20, C=0x24} 
{ Calculate offset by yourself: KEYPRESS_NUMBER * 2 = Offset }
:FAKE_KEYPRESS
1@ = 0xB73458
005A: 1@ += 0@  // (int)
0A8C: write_memory 1@ size 1 value 255 virtual_protect 0
0AB2: ret 0
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
Код:
0AB1: @FAKE_KEYPRESS 1 _OFFSET_KEY_ 0x3 {W}
{ W= 0x3, A= 0x1, S= 0x2, D=0x0, AIM=0xC, SHOT=0x8(0x22), JUMP=0x1C, SPRINT: 0x20, C=0x24}
{ Calculate offset by yourself: KEYPRESS_NUMBER * 2 = Offset }
:FAKE_KEYPRESS
1@ = 0xB73458
005A: 1@ += 0@  // (int)
0A8C: write_memory 1@ size 1 value 255 virtual_protect 0
0AB2: ret 0

Very good, man. I was recently looking for this. but may be?:
CLEO:
0AB1: @FAKE_KEYPRESS 1 _OFFSET_KEY_ 0x3 PRESSED true
{ W= 0x3, A= 0x1, S= 0x2, D=0x0, AIM=0xC, SHOT=0x8(0x22), JUMP=0x1C, SPRINT: 0x20, C=0x24}
{ Calculate offset by yourself: KEYPRESS_NUMBER * 2 = Offset }
:FAKE_KEYPRESS
2@ = 0xB73458
005A: 2@ += 0@  // (int)
1@ *= 255
0A8C: write_memory 2@ size 1 value 1@ virtual_protect 0
0AB2: ret 0
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
Данная функция будет очень полезна тем, кто хочет делать обработчики событий, типа OnMouseClick, OnMouseOver и т.п.

CLEO:
// if
//  0AB1: call @is_cursor_here 4 start 30@ 29@ end_offset 28@ 27@ cursor_offset_to 26@ 25@
// then
//  //* Actions *//
// end
//
// Функция проверяет находится ли курсор в заданном прямоугольнике координат.
// А также выводит смещение курсора от точки начала (левого верхнего угла)
//
// 30@, 29@ - координаты левого верхнего угла
// 28@, 27@ - оффсеты до правого нижнего угла
// 26@, 25@ - возвращает оффсет мышки от координат левого верхнего угла (необязательные параметры)
//
// 30@ - позиция начала по оси X
// 29@ - позиция начала по оси Y
// 28@ - смещение до конца по оси X
// 27@ - смещение до конца по оси Y
// 26@ - смещение курсора от начала по оси X
// 25@ - смещение курсора от начала по оси Y
//
// Например нам нужно проверить есть ли мышка в прямоуглольнике от (400,1) до (865,250)
// Значит 30@ = 400, 29@ = 1, 28@ = 465, 27@ = 249
 
:is_cursor_here
0AB1: call @GetCursorPos 0 4@ 5@ // Получаем позицию курсора
if and
    001D: 4@ > 0@
    001D: 5@ > 1@
then
    005A: 0@ += 2@
    005A: 1@ += 3@
    if and
        001D: 0@ > 4@
        001D: 1@ > 5@
    then
        0485:  return_true
    else
        059A:  return_false
    end
    0062: 0@ -= 2@
    0062: 1@ -= 3@
else
    059A:  return_false
end
0062: 4@ -= 0@
0062: 5@ -= 1@
0AB2: ret 2 4@ 5@
 
:GetCursorPos
0AA2: 0@ = load_library "user32.dll"
0AA4: 1@ = get_proc_address "GetCursorPos" library 0@
0AC8: 2@ = allocate_memory_size 8
0AA5: call 1@ num_params 1 pop 0 2@
0A8D: 3@ = read_memory 2@ size 4 virtual_protect 0
2@ += 4
0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0
0AC9: free_memory 2@
0AA3: free_library 0@
0AB2: ret 2 3@ 4@
 
  • Нравится
Реакции: itsLegend

san0

Известный
Друг
411
268
Кто нибудь может помочь перевести данную функцию без использования SF?
Код:
:getChatEntryText
1@ = samp.Base()
1@ += 0x212A24 // SAMP_CHAT_INFO_OFFSET  03x
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
1@ += 0x136
0@ *= 252 // size of stChatEntry
005A: 1@ += 0@ // (int)
1@ += 28
0AB2: ret 1 1@

Сразу для 0.3z // 0AB1: call @getChatEntryText 1 id 0@ to 1@
Код:
:getChatEntryText
0ab1: call @GetSampBase 0 retr_base_to 1@
1@ += 0x212A6C
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
1@ += 0x136
0@ *= 252 // size of stChatEntry
005A: 1@ += 0@ // (int)
1@ += 28
0AB2: ret 1 1@
 
:GetSampBase
wait 0
0AA2: 0@ = load_library "kernel32.dll"
0AA4: 1@ = get_proc_address "GetModuleHandleA" library 0@
0AA7: call_function 1@ num_params 1 pop 0 "samp.dll" 2@
0ab2: ret 1 2@
 
  • Нравится
Реакции: tayler882

Opcode.eXe

Известный
84
112
Useful for flying mods O:-)
Код:
//0AB1: @DISABLE_VELOCITY_Z_LIMIT 1 FALSE
//0AB1: @DISABLE_VELOCITY_Z_LIMIT 1 TRUE
:DISABLE_VELOCITY_Z_LIMIT
if
0@ == 1
then
    0A8C: write_memory 0x5E91CE size 1 value 0x90 virtual_protect 1
    0A8C: write_memory 0x5E91CF size 1 value 0x90 virtual_protect 1
    0A8C: write_memory 0x5E91D0 size 1 value 0x90 virtual_protect 1
    0A8C: write_memory 0x5E91D1 size 1 value 0x90 virtual_protect 1
    0A8C: write_memory 0x5E91D2 size 1 value 0x90 virtual_protect 1
    0A8C: write_memory 0x5E91D3 size 1 value 0x90 virtual_protect 1
    0A8C: write_memory 0x5E91D4 size 1 value 0x90 virtual_protect 1
else
    if
    0@ == 0
    then
        0A8C: write_memory 0x5E91CE size 1 value 0xC7 virtual_protect 1
        0A8C: write_memory 0x5E91CF size 1 value 0x46 virtual_protect 1
        0A8C: write_memory 0x5E91D0 size 1 value 0x4C virtual_protect 1
        0A8C: write_memory 0x5E91D1 size 1 value 0    virtual_protect 1
        0A8C: write_memory 0x5E91D2 size 1 value 0    virtual_protect 1
        0A8C: write_memory 0x5E91D3 size 1 value 0x80 virtual_protect 1
        0A8C: write_memory 0x5E91D4 size 1 value 0x3E virtual_protect 1
    end
end
0AB2: ret 0
 
//0AB1: @DISABLE_GROUND_COLLISION_FOR_VELOCITY 0
:DISABLE_GROUND_COLLISION_FOR_VELOCITY
0A96: 23@ = actor $PLAYER_ACTOR struct
0A8E: 22@ = 23@ + 0x46C
0A8C: write_memory 22@ size 1 value 0 virtual_protect 0 // ONFOOT STATE = AIR
0A96: 23@ = actor $PLAYER_ACTOR struct
0A8E: 22@ = 23@ + 0x46D
0A8C: write_memory 22@ size 1 value 3 virtual_protect 0  // JUMP STATE = ONFOOT
0AB2: ret 0
 
  • Нравится
Реакции: _Viktor_ и SR_team

Opcode.eXe

Известный
84
112
Код:
//0AB1: @CREATE_VELOCITY_PUSH 4 FROM ACTOR $PLAYER_ACTOR _TO_OFFSET 0.0 0.0 0.0 STORE_TO 4@ 5@ 6@
:CREATE_VELOCITY_PUSH
04C4: store_coords_to 4@ 5@ 6@ from_actor 0@ with_offset 1@ 2@ 3@
Actor.StorePos(0@, 7@, 8@, 9@)
0063: 4@ -= 7@ // (float)
0063: 5@ -= 8@ // (float)
0063: 6@ -= 9@ // (float)
0AB2: RET 3 4@ 5@ 6@
 
  • Нравится
Реакции: p1cador, fonarik и san0

Opcode.eXe

Известный
84
112
Код:
//0AB1: @CREATE_VELOCITY_IN_LOOKING_DIRECTION 1 POWER 1.0 _STORE_TO 4@ 5@ 6@
:CREATE_VELOCITY_IN_LOOKING_DIRECTION
0087: 13@ = 0@ // (float)
Actor.StorePos($PLAYER_ACTOR, 20@, 21@, 22@)
068D: get_camera_position_to 24@ 25@ 26@
0063: 20@ -= 24@ // (float)
0063: 21@ -= 25@ // (float)
0063: 22@ -= 26@ // (float)
Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@)
006B: 20@ *= 13@ // (float)
006B: 21@ *= 13@ // (float)
006B: 22@ *= 13@ // (float)
005B: 22@ += 13@ // (float)
005B: 0@ += 20@ // (float)
005B: 1@ += 21@ // (float)
005B: 2@ += 22@ // (float)
Actor.StorePos($PLAYER_ACTOR, 3@, 4@, 5@)
0063: 0@ -= 3@ // (float)
0063: 1@ -= 4@ // (float)
0063: 2@ -= 5@ // (float)
0AB2: RET 3 0@ 1@ 2@
 
  • Нравится
Реакции: p1cador и Dragar

Opcode.eXe

Известный
84
112
This function gets the closest player to your crosshair. You can add your own filters.
Its a better version of 0AD2. Function opcode:

0AB1: @GET_AIM_TARGET_ACTOR 1 IN_RADIUS_FROM_CROSSHAIR 400.0 _STORE_TO 0@

FUNCTION + EXAMPLE:

Код:
{$CLEO .cs}
0000:
 
WHILE TRUE
    WAIT 0
    0AB1: @GET_AIM_TARGET_ACTOR 1 IN_RADIUS_FROM_CROSSHAIR 400.0 _STORE_TO 0@
    if
    056D:  actor 0@ defined
    then
        0187: 1@ = create_marker_above_actor 0@
        WAIT 100
        0164: disable_marker 1@
    end
END
 
 
 
 
 
 
 
 
//0AB1: @GET_AIM_TARGET_ACTOR 1 IN_RADIUS_FROM_CROSSHAIR 400.0 _STORE_TO 0@
:GET_AIM_TARGET_ACTOR
FOR 28@ = 0.0 TO 0@ STEP 8.0
    0A8D: 29@ = read_memory 0xB74490 size 4 virtual_protect 0
    000A: 29@ += 0x4
    0A8D: 29@ = read_memory 29@ size 4 virtual_protect 0
    for 30@ = 0 to 35584 step 0x100
        0A8D: 31@ = read_memory 29@ size 1 virtual_protect 0
        000A: 29@ += 0x1
        if and
            0029:  31@ >= 0x00
            001B:  0x80 > 31@
        then
            005A: 31@ += 30@
            if
            056D:  actor 31@ defined
            then
                if
                803C: $PLAYER_ACTOR == 31@ // (int)
                then
                04C4: store_coords_to 27@ 26@ 25@ from_actor 31@ with_offset 0.0 0.0 0.0
                068D: get_camera_position_to 24@ 23@ 22@
                    if and { PUT YOUR CHECKS RIGHT BELOW THIS...}
                    06BD:  no_obstacles_between 27@ 26@ 25@ and 24@ 23@ 22@ solid 1 car 1 actor 0 object 1 particle 0
                    80DF:  actor 31@ driving
                    8118:  actor 31@ dead
                    02CB:  actor 31@ bounding_sphere_visible
                    then
                        04C4: store_coords_to 10@ 11@ 12@ from_actor 31@ 0.0 0.0 0.0 
                        0AB1: call_scm_func @getScreenXYFrom3DCoords 3 3D_coords_X 10@ Y 11@ Z 12@ store_screen_X_to 13@ Y_to 14@
                        0509: 15@ = distance_between_XY 339.1 179.1 and_XY 13@ 14@
                        if
                        0035:  28@ >= 15@ // (float)
                        then
                            0AB2: 1 31@     
                        end 
                    end
                end
            end
        end
    end
END
0AB2: 1 -1
 
//0AB1: call_scm_func @getScreenXYFrom3DCoords 3 3D_coords_X 0@ Y 1@ Z 2@ store_screen_X_to 3@ Y_to 4@
:getScreenXYFrom3DCoords
0AC7: 14@ = var 0@ offset
0AC7: 15@ = var 3@ offset
0AC7: 16@ = var 6@ offset
0AC7: 17@ = var 9@ offset
0AA5: call 0x70CE30 num_params 6 pop 6 {18@ 18@} 0 0 17@ 16@ 15@ 14@
0007: 12@ = 640.0
0007: 13@ = 448.0
0A8D: 14@ = read_memory 0xC17044 size 4 virtual_protect 0
0A8D: 15@ = read_memory 0xC17048 size 4 virtual_protect 0
0093: 14@ = integer 14@ to_float
0093: 15@ = integer 15@ to_float
0073: 12@ /= 14@
0073: 13@ /= 15@
006B: 3@ *= 12@
006B: 4@ *= 13@
0AB2: ret 2 3@ 4@
 

Opcode.eXe

Известный
84
112
Код:
{ EXAMPLE:
    if
    0AB1: @GET_TARGET_CAR 0 _STORE_TO 0@
    then
        0186: 1@ = create_marker_above_car 0@
        wait 500
        0164: disable_marker 1@
    end
    by OpcodeXe for www.ugbase.eu
}   
:GET_TARGET_CAR
8@ = 0 {GOT_CAR?,FALSE}
if
0AE2: 0@ = random_vehicle_near_point 0.0 0.0 0.0 in_radius 99999.0 find_next 0 pass_wrecked 0
then
    REPEAT
        if
        00DF:  actor $PLAYER_ACTOR driving
        then
            03C0: 7@ = actor $PLAYER_ACTOR car
            else
            7@ = -1
        end
        0407: store_coords_to 1@ 2@ 3@ from_car 0@ with_offset 0.0 0.0 0.0
        0AB1: @getScreenXYFrom3DCoords 3 3D_coords_X 1@ 2@ 3@ _to X 4@ Y 5@
        03F0: enable_text_draw 1
        //038E: draw_box_position 320.0 200.0 size 50.0 50.0 RGBA 0 0 0 100 {TARGET_SPOT_POINT}
        0509: 6@ = distance_between_XY 320.0 200.0 and_XY 4@ 5@
        if  and
        803B: 0@ == 7@ NOT_MY_CAR
        02CA: 0@ IN_VIEW
        6@ < 50.0 { ITS NEAR MY TARGET_SPOTTER POINT }
        then
            8@ = 1 {GOT_CAR?,TRUE}
            break
        end 
    UNTIL 8AE2: 0@ = random_vehicle_near_point 0.0 0.0 0.0 in_radius 99999.0 find_next 1 pass_wrecked 0
end
if
8@ == 0
then
    059A:  return_false
else
    0485:  return_true
end
0AB2: 1 0@
 
//0AB1: call_scm_func @getScreenXYFrom3DCoords 3 3D_coords_X 0@ Y 1@ Z 2@ store_screen_X_to 3@ Y_to 4@
:getScreenXYFrom3DCoords
0AC7: 14@ = var 0@ offset
0AC7: 15@ = var 3@ offset
0AC7: 16@ = var 6@ offset
0AC7: 17@ = var 9@ offset
0AA5: call 0x70CE30 num_params 6 pop 6 {18@ 18@} 0 0 17@ 16@ 15@ 14@
0007: 12@ = 640.0
0007: 13@ = 448.0
0A8D: 14@ = read_memory 0xC17044 size 4 virtual_protect 0
0A8D: 15@ = read_memory 0xC17048 size 4 virtual_protect 0
0093: 14@ = integer 14@ to_float
0093: 15@ = integer 15@ to_float
0073: 12@ /= 14@
0073: 13@ /= 15@
006B: 3@ *= 12@
006B: 4@ *= 13@
0AB2: ret 2 3@ 4@