Вопросы по CLEO-скриптингу

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Можно ли как-то узнать версию клео через клео-скрипт?
CLEO:
0C71: 0@ = get_module "CLEO.asi" proc "_CLEO_GetVersion@0" address
if 0@ > 0
then
    0AA7: call_function 0@ num_params 0 pop 0 save_to 1@
    0AF8: samp add_message_to_chat "CLEO version: %p" color -1 1@
end
Если CLEO 4.2 возвращает 0x04020000
... 4.1.1.30: 0x0401011E
 
  • Нравится
Реакции: XyJluraH_J

AWRage

Активный
642
141
Что я не правильно сделал? Хотел сделать, чтобы RPC_SCRCLIENTMESSAGE "Вы далеко друг от друга" не принималось, а все остальные RPC_SCRCLIENTMESSAGE принимались.
CLEO:
{$CLEO}
0000:

repeat
wait 400
until samp.available
repeat
wait 0
until 0ADC: "RPC"
0BE3: raknet setup_incoming_rpc_hook @RPC_Chat

0BDE: pause_thread 0

:RPC_Chat
0BE5: 0@ = get_hook_param 1
if 0@ == 93
then
    0BE5: 1@ = get_hook_param 0
    0BE7: 2@ = bit_stream_read 1@ type 0
    0AC8: 3@ = allocate_memory_size 512
    0BE8: bit_stream 1@ read_array 3@ size 2@
    if 0C18: 0 = strstr string1 3@ string2 "Âû äàëåêî äðóã îò äðóãà"
    then
        0006: 4@ = false
    else
        0006: 4@ = true
    end
end
0BE0: raknet hook_ret 4@

P.S. В 3@ почему-то записывается "Д".
 
Последнее редактирование:

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Там 3 параметра для чтения.
int color, strlen
string text
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,961
Если CLEO 4.2 возвращает 0x04020000
... 4.1.1.30: 0x0401011E
У некоторых почему-то не работает опкод 0C71. В том числе и у меня.
Это код для тех у кого не работает.

CLEO:
0AA2: 25@ = load_library "CLEO.ASI"
0AA4: 26@ = get_proc_address "_CLEO_GetVersion@0" library 25@
0AA7: call_function 26@ num_params 0 pop 0 || VersionTo 27@ |
0AA3: free_library 25@

P.S. Если CLEO 4.3, то вернёт - 0x4031300
 

AWRage

Активный
642
141
CLEO:
    0BE7: raknet 2@ = bit_stream_read 0@ type BS_TYPE_INT  // color
    0BE7: raknet 3@ = bit_stream_read 0@ type BS_TYPE_INT  // strLen
    0C11: memset destination 4@ value 0 size 256
    0BE8: raknet bit_stream 0@ read_array 4@ size 3@ // Text
    0C0F: array 4@ element 3@ = 0x00
Теперь крашит..
CLEO:
{$CLEO}
0000:

repeat
wait 400
until samp.available
repeat
wait 0
until 0ADC: "RPC"
0BE3: raknet setup_incoming_rpc_hook @RPC_Chat

0BDE: pause_thread 0

:RPC_Chat
0BE5: 0@ = get_hook_param 1
if 0@ == 93
then
    0BE5: 1@ = get_hook_param 0
    0BE7: 2@ = bit_stream_read 0@ type 3 // color
    0BE7: 3@ = bit_stream_read 0@ type 3 // strLen
    0AC8: 4@ = allocate_memory_size 256
    0BE8: bit_stream 1@ read_array 4@ size 3@ // Text
    0C0F: array 4@ element 3@ = 0x00
    0AF8: add_message_to_chat 4@ color -1
    if 0C18: 0 = strstr string1 4@ string2 "Вы далеко друг от друга"
    then
        0006: 5@ = false
    else
        0006: 5@ = true
    end
end
0BE0: hook_ret 5@
 

hnnssy

Известный
Друг
2,684
2,748
Теперь крашит..
CLEO:
{$CLEO}
0000:

repeat
wait 400
until samp.available
repeat
wait 0
until 0ADC: "RPC"
0BE3: raknet setup_incoming_rpc_hook @RPC_Chat

0BDE: pause_thread 0

:RPC_Chat
0BE5: 0@ = get_hook_param 1
if 0@ == 93
then
    0BE5: 1@ = get_hook_param 0
    0BE7: 2@ = bit_stream_read 0@ type 3 // color
    0BE7: 3@ = bit_stream_read 0@ type 3 // strLen
    0AC8: 4@ = allocate_memory_size 256
    0BE8: bit_stream 1@ read_array 4@ size 3@ // Text
    0C0F: array 4@ element 3@ = 0x00
    0AF8: add_message_to_chat 4@ color -1
    if 0C18: 0 = strstr string1 4@ string2 "Вы далеко друг от друга"
    then
        0006: 5@ = false
    else
        0006: 5@ = true
    end
end
0BE0: hook_ret 5@
CLEO:
:ClientMessage
0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM
0BE5: raknet 1@ = get_hook_param PARAM_PACKETID
if
1@ == RPC_ScrClientMessage // DWORD color, DWORD strLen, char[] msg
then
    0BE7: raknet 2@ = bit_stream_read 0@ type BS_TYPE_INT  // color
    0BE7: raknet 3@ = bit_stream_read 0@ type BS_TYPE_INT  // strLen
    0C11: memset destination 4@ value 0 size 256
    0BE8: raknet bit_stream 0@ read_array 4@ size 3@ // Text
    0C0F: array 4@ element 3@ = 0x00
    if
    0C18: 0 = strstr string1 4@ string2 "Вы далеко друг от друга"
    then
        0BE0: raknet hook_ret false
    end                                                    
end
0BE0: raknet hook_ret true
 
  • Нравится
Реакции: AWRage

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
CLEO:
0C0F: array 4@ element 3@ = 0x00
Здесь лучше
0C0D: struct 4@ offset 3@ size 1 = 0x00
или
0C1E: array 4@ element 3@ el_size 1 = 0x00

Память ещё выделить для неё.
 

AWRage

Активный
642
141
CLEO:
:ClientMessage
0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM
0BE5: raknet 1@ = get_hook_param PARAM_PACKETID
if
1@ == RPC_ScrClientMessage // DWORD color, DWORD strLen, char[] msg
then
    0BE7: raknet 2@ = bit_stream_read 0@ type BS_TYPE_INT  // color
    0BE7: raknet 3@ = bit_stream_read 0@ type BS_TYPE_INT  // strLen
    0C11: memset destination 4@ value 0 size 256
    0BE8: raknet bit_stream 0@ read_array 4@ size 3@ // Text
    0C0F: array 4@ element 3@ = 0x00
    if
    0C18: 0 = strstr string1 4@ string2 "Вы далеко друг от друга"
    then
        0BE0: raknet hook_ret false
    end                                                   
end
0BE0: raknet hook_ret true
Все работает, от души!
 

VLnet

Новичок
16
0
Как указатель перевести в строку?
CLEO:
if and
0AD2: 9@ = player $PLAYER_CHAR targeted_actor
       0ab0: 81
    then
        while 0ab0: 81
        wait 0
        end
        0B2B: samp 8@ = get_player_id_by_actor_handle 9@
        0B36: samp 7@ = get_player_nickname 8@
        chatmsg "ID: %d " 8@
        chatmsg "name: %s " 7@ // выводит нулл
chatmsg "name: %d " 7@ // выводит 9 цифр (я так понимаю указатель)
end
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
https://www.blast.hk/wiki/opcodes:0af8
1 параметр - строка
2 параметр - цвет строки
3 параметр(ы) - значения(для форматирования строки)
У тебя 7@ указан как цвет, а не как значение
 

AWRage

Активный
642
141
Не подскажете как сканировать строку на строку? Тема вроде бы была, но не найду.