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

DarkP1xel

Сила воли наше всё.
BH Team
3,638
5,029
В командах нельзя использовать бесконечные цыклы, задержки и у каждой команды должен быть конец cmdret.
 

BlackKnigga

Известный
BH Team
922
448
Подскажите каким опкодом можно засунуть переменную в диалог..
Код:
0B4B: samp set_current_dialog_editbox_text 5@
Не работает

Работает тока тогда место @ стоит " ".
Код:
0B4B: samp set_current_dialog_editbox_text "boom"
Неправильно засовываешь
 

pwned

Участник
142
5
Что не так с кодом?
При вводе ида, пишет 0
Код:
{$CLEO}

const
    DIALOG_STYLE_MSGBOX = 0 // С текстом
    DIALOG_STYLE_INPUT = 1 // С полем для ввода текста
    DIALOG_STYLE_LIST = 2 // Со списком
    DIALOG_STYLE_PASSWORD = 3 // С полем для ввода текста, текст заменяется точками
end

0000:

while not SAMP.Available()
    wait 400
end

0ac8: alloc 2@ size 64 // буфер для хранения введенего текста

while true
    wait 0
    if 0ab0: key_down 66
    then
        while 0ab0: key_down 66
            wait 0
            if 0ab0: key_down 51
            then
                0ac8: alloc 0@ size 64
                0ad3: format_stirng 0@ = "Первый пункт%cВторой пункт%cТретий пункт" 0xA 0xA
                0B3B: samp show_dialog id 47 caption "Первый диалог" text 0@ button_1 "Выбрать" button_2 "Закрыть" style DIALOG_STYLE_LIST
                0ac9: free 0@
                break
            end
        end

        while 0ab0: key_down 66
            wait 0
        end
    end

    // DIALOG_STYLE_LIST
    if 0B3C: samp is_dialog_responded id 47 button 1@ list_item 3@ input_text 0 // Логгируем нажатие кнопки диалога и выбранного элемента из списка диалога 47
    then
        if 1@ == 1 // Была нажата первая кнопка
        then
            0af8: chat "Был выбран элемент номер: {ffff00}%d" -1 3@
            if 3@ == 0
            then
                0B3B: samp show_dialog id 48 caption "Второй диалог" text "Введите ID" button_1 "Закрыть" button_2 "" style DIALOG_STYLE_PASSWORD
            end

            if 3@ == 1
            then
                0af8: chat "Был выбран элемент: {ffff00}Второй пункт" -1
            end

            if 3@ == 2
            then
                0af8: chat "Был выбран элемент: {ffff00}Третий пункт" -1
            end
        else
            0af8: chat "Была нажата вторая кнопка: {ffff00}Закрыть" -1
        end
    end
  
    0ac8: alloc 2@ size 64 // Выделим память для хранения введеного текста // здесь неправильно выбрана позиция этого выделения, его лучше вставить после создания
    // и очистить после обработки
    if 0B3C: samp is_dialog_responded id 48 button 1@ list_item 0 input_text 2@ // Логгируем нажатие кнопки диалога и введеного текста с идом 46
    then
        if 1@ == 1 // Была нажата первая кнопка
        then
        0B35: samp 0@ = get_last_command_params
        0C1A: 11@ = atoi 0@
        0af8: chat "Вы отправили текст ID:{ffff00}%d" -1 11@
        0AF9: samp say_msg "/pm %d Привет" 11@
        else
             0af8: chat "Была нажата вторая кнопка: {ffff00}Закрыть" -1
        end
    end
end
 
Последнее редактирование:
1,417
1,037
Что не так с кодом?
При вводе ида, пишет 0
Код:
{$CLEO}

const
    DIALOG_STYLE_MSGBOX = 0 // С текстом
    DIALOG_STYLE_INPUT = 1 // С полем для ввода текста
    DIALOG_STYLE_LIST = 2 // Со списком
    DIALOG_STYLE_PASSWORD = 3 // С полем для ввода текста, текст заменяется точками
end

0000:

while not SAMP.Available()
    wait 400
end

0ac8: alloc 2@ size 64 // буфер для хранения введенего текста

while true
    wait 0
    if 0ab0: key_down 66
    then
        while 0ab0: key_down 66
            wait 0
            if 0ab0: key_down 51
            then
                0ac8: alloc 0@ size 64
                0ad3: format_stirng 0@ = "Первый пункт%cВторой пункт%cТретий пункт" 0xA 0xA
                0B3B: samp show_dialog id 47 caption "Первый диалог" text 0@ button_1 "Выбрать" button_2 "Закрыть" style DIALOG_STYLE_LIST
                0ac9: free 0@
                break
            end
        end

        while 0ab0: key_down 66
            wait 0
        end
    end

    // DIALOG_STYLE_LIST
    if 0B3C: samp is_dialog_responded id 47 button 1@ list_item 3@ input_text 0 // Логгируем нажатие кнопки диалога и выбранного элемента из списка диалога 47
    then
        if 1@ == 1 // Была нажата первая кнопка
        then
            0af8: chat "Был выбран элемент номер: {ffff00}%d" -1 3@
            if 3@ == 0
            then
                0B3B: samp show_dialog id 48 caption "Второй диалог" text "Введите ID" button_1 "Закрыть" button_2 "" style DIALOG_STYLE_PASSWORD
            end

            if 3@ == 1
            then
                0af8: chat "Был выбран элемент: {ffff00}Второй пункт" -1
            end

            if 3@ == 2
            then
                0af8: chat "Был выбран элемент: {ffff00}Третий пункт" -1
            end
        else
            0af8: chat "Была нажата вторая кнопка: {ffff00}Закрыть" -1
        end
    end
 
    0ac8: alloc 2@ size 64 // Выделим память для хранения введеного текста // здесь неправильно выбрана позиция этого выделения, его лучше вставить после создания
    // и очистить после обработки
    if 0B3C: samp is_dialog_responded id 48 button 1@ list_item 0 input_text 2@ // Логгируем нажатие кнопки диалога и введеного текста с идом 46
    then
        if 1@ == 1 // Была нажата первая кнопка
        then
        0B35: samp 0@ = get_last_command_params
        0C1A: 11@ = atoi 0@
        0af8: chat "Вы отправили текст ID:{ffff00}%d" -1 11@
        0AF9: samp say_msg "/pm %d Привет" 11@
        else
             0af8: chat "Была нажата вторая кнопка: {ffff00}Закрыть" -1
        end
    end
end
потому что ты получаешь параметры последней введенной команды, ид у тебя в переменной 2

Как сделать диалог невидимым? Но cleo могло с ним работать.
через хук Информация - Гайд - Работа с RakNet хуками с помощью SAMPFUNCS(https://blast.hk/threads/17440/) Гайд - RakNet Hook'и в плагине SAMPFuncs(https://blast.hk/threads/14356/)
 

pwned

Участник
142
5
Код:
0ad3: format_stirng 0@ = "Первый пункт%cВторой пункт%cТретий пункт%c Еще пункт%cЕще пункт" 0xA 0xA 0xA 0xA

Когда ввожу еще пункты, код не реагирует на действия
 
1,417
1,037
А как правильно это делать??
CLEO:
:cmd
0AC6: 30@ = label @Buffer offset
0B3B: samp show_dialog id 123 caption "caption" text 30@ button_1 "button" button_2 "" style DIALOG_STYLE_MSGBOX
0B43: samp cmd_ret


:Buffer
HEX
"строка\n"   
"это переход на новую строку->\n"            
"На последней строке обязательно->\0"
END
 

pwned

Участник
142
5
Код:
{$CLEO}
{$INCLUDE SF}
0000:

0BE3: raknet setup_incoming_rpc_hook @hook
0BDE: pause_thread 0

:hook
0BE5: raknet 1@ = get_hook_param PARAM_PACKETID
IF 1@ == RPC_SCRCLIENTMESSAGE
THEN
    0BE5: raknet 1@ = get_hook_param PARAM_BITSTREAM
    0BE7: raknet 2@ = bit_stream_read 1@ type BS_TYPE_INT
    0BE7: raknet 3@ = bit_stream_read 1@ type BS_TYPE_INT
    0AC8: 4@ = allocate_memory_size 260
    0BE8: raknet bit_stream 1@ read_array 4@ size 3@
    0C1E: array 4@ element 3@ el_size 1 = 0
    IF 0C29: 6@ = stristr string1 4@ string2 "Получил зарплату"  
    THEN
        000A: 5@ += 1
        0AF8: samp add_message_to_chat "Ты отыграл за все время {00ff00}%d {ffffff} час(ов)." color -1 5@
        0AF1: write_int 5@ to_ini_file "cleo\ini\config.ini" section "SectionName" key "Ответов"
    END
    0AC9: free_allocated_memory 4@
END
0BE0: raknet hook_ret TRUE

Почему счет после перезахода заново идет? Что не так?
 

BlackKnigga

Известный
BH Team
922
448
Код:
{$CLEO}
{$INCLUDE SF}
0000:

0BE3: raknet setup_incoming_rpc_hook @hook
0BDE: pause_thread 0

:hook
0BE5: raknet 1@ = get_hook_param PARAM_PACKETID
IF 1@ == RPC_SCRCLIENTMESSAGE
THEN
    0BE5: raknet 1@ = get_hook_param PARAM_BITSTREAM
    0BE7: raknet 2@ = bit_stream_read 1@ type BS_TYPE_INT
    0BE7: raknet 3@ = bit_stream_read 1@ type BS_TYPE_INT
    0AC8: 4@ = allocate_memory_size 260
    0BE8: raknet bit_stream 1@ read_array 4@ size 3@
    0C1E: array 4@ element 3@ el_size 1 = 0
    IF 0C29: 6@ = stristr string1 4@ string2 "Получил зарплату" 
    THEN
        000A: 5@ += 1
        0AF8: samp add_message_to_chat "Ты отыграл за все время {00ff00}%d {ffffff} час(ов)." color -1 5@
        0AF1: write_int 5@ to_ini_file "cleo\ini\config.ini" section "SectionName" key "Ответов"
    END
    0AC9: free_allocated_memory 4@
END
0BE0: raknet hook_ret TRUE

Почему счет после перезахода заново идет? Что не так?
А почему он не должен? Ты ведь не получаешь число после запуска