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

Gabriel__

Известный
Проверенный
411
181
CLEO:
:getmarkerpos
// call @getmarkerpos 0 5@ 6@ 7@
8AF7: get_samp_base_to 0@
0@ += 0x21A10C
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 1
0085: 1@ = 0@
1@ += 0x24
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 1
if 1@ == 0
then                                
ret 0
else
0085: 2@ = 0@
0085: 3@ = 0@
0085: 4@ = 0@
2@ += 0xC
3@ += 0x10
4@ += 0x14
0A8D: 2@ = read_memory 2@ size 4 virtual_protect 1
0A8D: 3@ = read_memory 3@ size 4 virtual_protect 1
0A8D: 4@ = read_memory 4@ size 4 virtual_protect 1
end
ret 3 2@ 3@ 4@
Спасибо работает! Жаль репутацию поставить не могу (
 

:notCoder:

Новичок
19
0
Как сделать так, чтобы я не видел открывающихся диалогов? У меня они довольно быстро открываются, но я их вижу все равно.
CLEO:
{$CLEO}
0000:
repeat
wait 0
until SAMP.Available()

while true
wait 0
     if and
         0AB0:   key_pressed 49
         8B21: not samp is_chat_opened
         8B4C: not samp is_dialog_active -1 
     then
             repeat
             wait 0
             until 8AB0:   key_pressed 49
         0C72: set_virtual_key 18 down true
         wait 50
         0C72: set_virtual_key 18 down false
             repeat
             wait 0
             until 0B4C: samp is_dialog_active -1  
         0B49: samp set_current_dialog_list_item 1 
         0B47: samp close_current_dialog_with_button 1

     end 
end
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Всё крутится около хуков.
Хукаешь RPC ShowDialog, читаешь данные, которые пришли(если надо) и "отказываешься" от приходящего RPC(hook ret false)
 

hnnssy

Известный
Друг
2,684
2,745
0BE3: raknet setup_incoming_rpc_hook @RPC
.....
:RPC
0BE5: raknet 0@ = get_hook_param 1
if
0039: 0@ == 12
jf @RPC_Ret
0BE0: raknet hook_ret 0

:RPC_Ret
0BE0: raknet hook_ret 1
забудь про метки в условиях
CLEO:
0BE3: raknet setup_incoming_rpc_hook @RPC

while true
wait 0
end

:RPC
0BE5: raknet 0@ = get_hook_param 1
if
0039:   0@ == 12
then
0BE0: raknet hook_ret 0
end
0BE0: raknet hook_ret 1
 
  • Нравится
Реакции: kennex

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Пример можно?:d
CLEO:
{$INCLUDE SF}

0BE3: raknet setup_incoming_rpc_hook @incoming_rpc

/*while true
    wait 0
end*/

:incoming_rpc
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID // Получаем RPC ID
if 0@ == RPC_SCRSHOWDIALOG
then
    /*
        C++: RakSAMP code
        bsData.Read(sampDialog.wDialogID);
        bsData.Read(sampDialog.bDialogStyle);
  
        bsData.Read(sampDialog.bTitleLength);
        bsData.Read(sampDialog.szTitle, sampDialog.bTitleLength);
        sampDialog.szTitle[sampDialog.bTitleLength] = 0;
  
        bsData.Read(sampDialog.bButton1Len);
        bsData.Read(sampDialog.szButton1, sampDialog.bButton1Len);
        sampDialog.szButton1[sampDialog.bButton1Len] = 0;
  
        bsData.Read(sampDialog.bButton2Len);
        bsData.Read(sampDialog.szButton2, sampDialog.bButton2Len);
        sampDialog.szButton2[sampDialog.bButton2Len] = 0;
  
        stringCompressor->DecodeString(sampDialog.szInfo, 256, &bsData);
    */
  
 
    // Получаем данные
    0BE5: raknet 1@ = get_hook_param PARAM_BITSTREAM // Получаем BitStream
    0BE7: raknet 2@ = bit_stream_read 1@ type BS_TYPE_SHORT // WORD(DialogId)
    0BE7: raknet 3@ = bit_stream_read 1@ type BS_TYPE_BYTE // byte(DialogStyle)

    0BE7: raknet 4@ = bit_stream_read 1@ type BS_TYPE_BYTE // byte(TitleLength)
    0AB1: call @allocate_memory 2 size 4@ reserve 1 ret_to 5@
    0BE8: raknet bit_stream 1@ read_array 5@ size 4@ // Title

    0BE7: raknet 4@ = bit_stream_read 1@ type BS_TYPE_BYTE // byte(Button1Length)
    0AB1: call @allocate_memory 2 size 4@ reserve 1 ret_to 6@
    0BE8: raknet bit_stream 1@ read_array 6@ size 4@ // Button1
   
    0BE7: raknet 4@ = bit_stream_read 1@ type BS_TYPE_BYTE // byte(Button2Length)
    0AB1: call @allocate_memory 2 size 4@ reserve 1 ret_to 7@
    0BE8: raknet bit_stream 1@ read_array 7@ size 4@ // Button2
   
    0AB1: call @allocate_memory 2 size 4096 reserve 1 ret_to 8@ // Info
    0BF4: raknet bit_stream 1@ decode_string 8@ size 4096 // Т.к. текст диалога сжат(закодирован), то нужно его раскодировать
   
    // Итак: 5@ - заголовок диалога, 6@, 7@ - первая и вторая кнопка соответственно, 8@ - текст диалога
    0AF8: samp add_message_to_chat "Открыт диалог №%d, тип: %d. Заголовок: '%s'. Кнопки: '%s' / '%s'" color -1 params 2@ 3@ 5@ 6@ 7@
    //
   
    // Освобождаем ранее выделенную память(больше не используется, в данное время)
    0AC9: free_allocated_memory 5@
    0AC9: free_allocated_memory 6@
    0AC9: free_allocated_memory 7@
    0AC9: free_allocated_memory 8@
end
0BE0: raknet hook_ret true

:allocate_memory
// call @allocate_memory 2 size 0@ reserve 1@ ret_to 2@
005A: 0@ += 1@
0AC8: 2@ = allocate_memory_size 0@
0C11: memset destination 2@ value 0 size 0@
0AB2: ret 1 2@
 
  • Нравится
Реакции: Coghweel

Pawka_SS

Новичок
7
1
Как можно обойти игнор wait в командах 0B34? Пробовал и call scm function вызывать и gosub с wait, нигде wait не работает. Кроме такого:
CLEO:
0B34: "lol" @Noname
while true
    if 1@ == true
    then
    say "lol"
    wait 5000
    end
end
0BDE: 0
:Noname
1@ = true
SAMP.CmdRet()
^ Вот этот вариант в моем случае не подходит, т.к надо много таких условий, больше 30
 
  • Нравится
Реакции: Gabriel__