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

Vovich

HOT
Проверенный
717
197
Ты наверно ужасно долго искал эту функу.
0BC9: samp send_dialog_response dialog 0@ button 1@ listitem 2@ input 3@
И потом, нужно сделать задержку перед каждым открытием диалога, иначе сервер может проигнорировать.
Я пытался опкодом, но ничего не происходит вообще(
 

Vovich

HOT
Проверенный
717
197
Твои 30 байт никак не повлияют, если ты будешь ими правильно пользоваться.
Получилось немного, но есть одно но, диалог после отправки сообщения не закрывается(, а если вручную писать - закроывается
Код:
{$CLEO}
{$INCLUDE SF}
0000:
0B34: samp register_client_command "fmn" to_label @cmd

while true
wait 0
  if 22@ == 1
  then
  say "/mn"
  0BC9: samp send_dialog_response dialog 27 button 1 listitem 4 input " "
  wait 100
  0BC9: samp send_dialog_response dialog 80 button 1 listitem 0 input 1@
  free alloc 3@
  22@ = 0
  end
end

:cmd
0B35: samp 1@ = get_last_command_params
22@ = 1
SAMP.CmdRet()
 

hnnssy

Известный
Друг
2,684
2,750
Получилось немного, но есть одно но, диалог после отправки сообщения не закрывается(, а если вручную писать - закроывается
Код:
{$CLEO}
{$INCLUDE SF}
0000:
0B34: samp register_client_command "fmn" to_label @cmd

while true
wait 0
  if 22@ == 1
  then
  say "/mn"
  0BC9: samp send_dialog_response dialog 27 button 1 listitem 4 input " "
  wait 100
  0BC9: samp send_dialog_response dialog 80 button 1 listitem 0 input 1@
  free alloc 3@
  22@ = 0
  end
end

:cmd
0B35: samp 1@ = get_last_command_params
22@ = 1
SAMP.CmdRet()
Код:
{$CLEO}
{$INCLUDE SF}
0000:
wait 2000

0B34: samp register_client_command "fmn" to_label @cmd

while true
wait 0
  if 22@ == 1
  then
  say "/mn"
  repeat  
  wait 0
  until 0B4C:  samp is_dialog_active 27
  0BC9: samp send_dialog_response dialog 27 button 1 listitem 4 input 0
  repeat  
  wait 0
  until 0B4C:  samp is_dialog_active 80
  0BC9: samp send_dialog_response dialog 80 button 1 listitem 0 input 1@
  22@ = 0
  end
end

:cmd
0B35: samp 1@ = get_last_command_params
22@ = 1
SAMP.CmdRet()
 

Vovich

HOT
Проверенный
717
197
Код:
{$CLEO}
{$INCLUDE SF}
0000:
wait 2000

0B34: samp register_client_command "fmn" to_label @cmd

while true
wait 0
  if 22@ == 1
  then
  say "/mn"
  repeat 
  wait 0
  until 0B4C:  samp is_dialog_active 27
  0BC9: samp send_dialog_response dialog 27 button 1 listitem 4 input 0
  repeat 
  wait 0
  until 0B4C:  samp is_dialog_active 80
  0BC9: samp send_dialog_response dialog 80 button 1 listitem 0 input 1@
  22@ = 0
  end
end

:cmd
0B35: samp 1@ = get_last_command_params
22@ = 1
SAMP.CmdRet()
эффект тот же:
samp173png_7455409_18407668.png
 

Vovich

HOT
Проверенный
717
197
0B47: samp close_current_dialog_with_button 1@
Я вроде не настолько тупой, не закрывается диалог опкодом
Сам возьми и попробуй)

З.Ы. Можно закрыть, если поставить проверку на открытость диалога...
Но в оригинальном скрипте диалога вообще не видно.
:c
 
Последнее редактирование:

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Код:
// Hide dialog
0BB0: samp 0@ = get_dialog_info_ptr
0C0D: struct 0@ offset 40 size 4 = 0
0B8D: samp set_cursor_mode 0
 

SR_team

like pancake
BH Team
4,720
6,373
Нашел в этой теме https://www.blast.hk/threads/897/
в 4 сообщении есть скрипт который сравнивает строки, но сейчас он не работает, я не могу найти ошибку, помогите пожалуйста.
Функция рабочая, вероятно ты не правильно ее используешь
нужно сделать задержку перед каждым открытием диалога, иначе сервер может проигнорировать.
не проигнорит
 

Goldfish

Известный
106
22
как определить координаты задней части авто(багажник, фара, капот), что бы потом с офсетом можно было, например, "подсветить" что-нибудь в этой найденной точки?
--------
0407: store_coords_to 4@ 5@ 6@ from_car 0@ with_offset 0.0 -3.0 0.0 не катить, т.к. длина авто у всех разная..
 

Vovich

HOT
Проверенный
717
197
Код:
// Hide dialog
0BB0: samp 0@ = get_dialog_info_ptr
0C0D: struct 0@ offset 40 size 4 = 0
0B8D: samp set_cursor_mode 0
Все равно одно и тоже(

Код:
{$CLEO}
{$INCLUDE SF}
0000:
0B34: samp register_client_command "rep" to_label @cmd

while true
wait 0
  if 22@ == 1
  then
  say "/mn"
  0BC9: samp send_dialog_response dialog 27 button 1 listitem 4 input " "
  0BC9: samp send_dialog_response dialog 80 button 1 listitem 0 input 1@
  wait 100
  0BB0: samp 0@ = get_dialog_info_ptr
  0C0D: struct 0@ offset 40 size 4 = 0
  0B8D: samp set_cursor_mode 0
  22@ = 0
  end
end

:cmd
0B35: samp 1@ = get_last_command_params
22@ = 1
SAMP.CmdRet()
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Код:
{$CLEO}
{$I SF}

const
    DIALOG_MENU = 27
    DIALOG_REPORT = 80
end

0000:

repeat 
    wait 400
until 0AFA: is_samp_structures_available

reg_cmd "rt" @report

:load
while true
    wait 0
    if 0@ == 1
    then
        say "/mn"
       
        33@ = 0
        while not SAMP.IsDialogActive(DIALOG_MENU)
            wait 0
            if 33@ > 2500
            then 
                0@ = 0
                jump @load
            end
        end

        call @sndDlgResponse 4 id DIALOG_MENU btn true list 4 text 0
       
        33@ = 0
        while not SAMP.IsDialogActive(DIALOG_REPORT)
            wait 0
            if 33@ > 2500
            then 
                0@ = 0
                jump @load
            end
        end
       
        call @sndDlgResponse 4 id DIALOG_REPORT btn true list 0xffff text 1@
        wait 0
        call @hideDlg 0
       
        0@ = 0
    end
end

:report
gcp 1@
strlen 2@ 1@
if 1@ > 0
then 0@ = 1
end
cmdret

:hideDlg
0@ = SAMP.Base()
0@ += 0x212A40 
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0@ += 40  
0A8C: write_memory 0@ size 4 value 0 virtual_protect 0

0B8D: samp set_cursor_mode 0
ret 0

:sndDlgResponse
// call @sndDlgResponse 4 id 0@ btn 1@ list 2@ text 3@
if 3@ == 0
then
    alloc 3@ 2
    memset 3@ 0 2
    5@ = 0
else strlen 5@ 3@  
end

0B3D: raknet 4@ = new_bit_stream
0B40: raknet bit_stream 4@ write 0@ type BS_TYPE_SHORT size 2
0B40: raknet bit_stream 4@ write 1@ type BS_TYPE_BYTE size 1
0B40: raknet bit_stream 4@ write 2@ type BS_TYPE_SHORT size 2
0B40: raknet bit_stream 4@ write 5@ type BS_TYPE_BYTE size 1
0B40: raknet bit_stream 4@ write 3@ type BS_TYPE_ARRAY size 5@

0B41: send_rpc RPC_DIALOGRESPONSE 4@ HIGH_PRIORITY RELIABLE_ORDERED 0 0
0B3E: raknet delete_bit_stream 4@

free 3@ 
ret 0
Полностью рабочий код на 0.3z.
 

Goldfish

Известный
106
22
имеется часть защищенного кода, при декомпиляции некоторая часть этого кода преобразовывается в блок HEX END , а опкоды находящиеся возле него становятся не верными, возможно снять такую защиту?
 

hnnssy

Известный
Друг
2,684
2,750
имеется часть защищенного кода, при декомпиляции некоторая часть этого кода преобразовывается в блок HEX END , а опкоды находящиеся возле него становятся не верными, возможно снять такую защиту?
Любую "защиту" с клео можно снять.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
как определить координаты задней части авто(багажник, фара, капот), что бы потом с офсетом можно было, например, "подсветить" что-нибудь в этой найденной точки?
--------
0407: store_coords_to 4@ 5@ 6@ from_car 0@ with_offset 0.0 -3.0 0.0 не катить, т.к. длина авто у всех разная..
https://sannybuilder.com/forums/viewtopic.php?pid=22367#p22367
0AA7: call_function 0x4C5400 num_params 2 pop 2 _nodename "myname" _rwObject 0@ _store_to 1@
myname - наименование компонента
0@ - указатель на rwObject(имеется в структуре авто по оффсету 0x18)
1@ - структура rwFrame.
 
  • Нравится
Реакции: Goldfish