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

astap_

Известный
Всефорумный модератор
626
597
Как мне записать из переменной текст "Your kills: 4" в другую переменную только цифру 4
sscanf
я хочу сделать некий патч, который позволяет брать маскировку (нубо рп) на расстоянии, нужно сделать так, чтобы перехватывалась отправка диалога, если кпопка равна 1 и лист айтем равна 4, чтобы вызвать мой диалог, как это сделать? тоесть, если я хочу отправить RPC DIALOGRESPONSE, нужно проверить, что диалог с определенным идом, если он равен, допустим, 9, то нужно получить кнопку и лист айтем. на луа это выглядит так, нужно перевести в клео.


Lua:
function sampev.onSendDialogResponse(dialogId,button,listbox,input)
    if dialogId == 9 then
        if button == 1 and listbox == 1 then -- действие     
    end
    end
end
CLEO:
if 0B3C:  samp is_dialog_responded id 9 button 1 list_item 4 input_text ""
then ...
end
хуком:
CLEO:
0BE1: raknet setup_outcoming_rpc_hook @hook
0BDE: pause_thread 0

:hook
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
    IF 0@ == RPC_SENDDIALOGRESPONCE
    THEN
        0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM 
        0BE7: raknet 1@ = bit_stream_read 0@ type BS_TYPE_SHORT 
        0BE7: raknet 2@ = bit_stream_read 0@ type BS_TYPE_BYTE 
        0BE7: raknet 3@ = bit_stream_read 0@ type BS_TYPE_SHORT 
        IF AND
            1@ == 9
            2@ == TRUE
            3@ == 4
        THEN ...
        END
    END
0BE0: raknet hook_ret TRUE
 

sdfaw

Активный
718
150
как закрепить игрока на водительском месте? чтобы например на дрп на 1 лвле садился в мопед и меня с него не викидывало
 

astap_

Известный
Всефорумный модератор
626
597
как закрепить игрока на водительском месте? чтобы например на дрп на 1 лвле садился в мопед и меня с него не викидывало
сервер может выкидывать тебя из тачки по разному, поэтому нужно игнорировать все эти рпс:
4BfT8QU.png
 

Magov1733

Новичок
20
0
Привет, есть скрипт с кодом:
Код:
{$CLEO .cs}

{$INCLUDE SF}
0000:
repeat
wait 150
until 0afa:
0B34: samp register_client_command "fn" to_label @fn
0B34: samp register_client_command "rn" to_label @rn
0B34: samp register_client_command "bkn" to_label @bkn
while true
wait 0
end

:fn
0B35: samp 0@ = get_last_command_params
0AD4: 3@ = scan_string 0@ format "%s" 5@s
if 3@ > 0
then
say "/f (( %s ))" 0@
else
chatmsg "Используйте: /fn [нон-рп сообщение]" color 0xD6CFD6
end
SAMP.CmdRet()

:rn
0B35: samp 1@ = get_last_command_params
0AD4: 4@ = scan_string 1@ format "%s" 6@s
if 4@ > 0
then
say "/r (( %s ))" 1@
else
chatmsg "Используйте: /rn [нон-рп сообщение]" color 0xD6CFD6
end
SAMP.CmdRet()

:bkn
0B35: samp 1@ = get_last_command_params
0AD4: 4@ = scan_string 1@ format "%s" 6@s
if 4@ > 0
then
say "/bk (( %s ))" 1@
else
chatmsg "Используйте: /bkn [нон-рп сообщение]" color 0xD6CFD6
end
SAMP.CmdRet()
Надо поменять bkn на psn.
Пробовал сам, но в итоге когда компилирую и захожу в ГТА, получается такое:
OfA_xVDkduU.jpg
 

astap_

Известный
Всефорумный модератор
626
597
Привет, есть скрипт с кодом:
Код:
{$CLEO .cs}

{$INCLUDE SF}
0000:
repeat
wait 150
until 0afa:
0B34: samp register_client_command "fn" to_label @fn
0B34: samp register_client_command "rn" to_label @rn
0B34: samp register_client_command "bkn" to_label @bkn
while true
wait 0
end

:fn
0B35: samp 0@ = get_last_command_params
0AD4: 3@ = scan_string 0@ format "%s" 5@s
if 3@ > 0
then
say "/f (( %s ))" 0@
else
chatmsg "Используйте: /fn [нон-рп сообщение]" color 0xD6CFD6
end
SAMP.CmdRet()

:rn
0B35: samp 1@ = get_last_command_params
0AD4: 4@ = scan_string 1@ format "%s" 6@s
if 4@ > 0
then
say "/r (( %s ))" 1@
else
chatmsg "Используйте: /rn [нон-рп сообщение]" color 0xD6CFD6
end
SAMP.CmdRet()

:bkn
0B35: samp 1@ = get_last_command_params
0AD4: 4@ = scan_string 1@ format "%s" 6@s
if 4@ > 0
then
say "/bk (( %s ))" 1@
else
chatmsg "Используйте: /bkn [нон-рп сообщение]" color 0xD6CFD6
end
SAMP.CmdRet()
Надо поменять bkn на psn.
Пробовал сам, но в итоге когда компилирую и захожу в ГТА, получается такое:
OfA_xVDkduU.jpg
настройки SB > Форматирование > Регистр букв > "как есть"
Ребят, не пойму в чём проблема. Не работает задержка(т.е. wait ? и 0001: wait ? ms) У меня есть 3 переменные, 1-ая - она отвечает за регистрацию команды, а затем переход на следующую переменную, 2-ую - там скрипт должен писать в чат слова, которые я указал заранее, а потом уже включать 3-ую переменную, которая будет активироваться только после написания слов, но у меня всё иначе, сначала активируется 2-ая переменная, а потом 1-ая. Пытался ставить задержку, то же самое, помогите пожалуйста, если можно покажите примерный код решения проблемы.
код. мы не экстрасенсы
 

astap_

Известный
Всефорумный модератор
626
597
CLEO:
<{$CLEO}

0000: NOP


:startuem
0001: wait 0 ms
0AFA: is_samp_available
004D: jump_if_false @startuem
0B34: samp_register_client_command "(Тут типо активация)" to_label @func1
0AF8: samp add_message_to_chat "(тут текст)" color R G B 0xFFA500
0BDE: pause_thread 0

:func1
0AF9: samp say_msg "(команда с рп отыгровкой)"
jump @func2

:func2
0001: wait 1000 ms (тут я пробовал задержку поставить, не робит)
0AF8: samp add_message_to_chat "privet" color R G B 0xFFA500
0B43: samp cmd_ret>
Тоесть сначала выполняется func2, а потом уже func1, а должно получиться наоборот.
в теле команды задержки игнорируются.
решение:
CLEO:
0b34: "cmd" @cmd
// в данном случае ставить поток на паузу не нужно!

while true
    wait 0
    if 31@ == true
    then
        say "привет"
        wait 1000
        say "я пидорас"
        31@ = false
    end
end

:cmd
31@ = true
cmdret
если понимаешь только на метках, просто декомпилируй скрипт
 

|| NN - NoName ||

Известный
1,049
628
Сорри за тупой вопрос, ну какой я, такой и вопрос, как сделать проверку на то что тебя ударили кулаком.
 

astap_

Известный
Всефорумный модератор
626
597
Сорри за тупой вопрос, ну какой я, такой и вопрос, как сделать проверку на то что тебя ударили кулаком.
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:
thread "astap"

WHILE NOT SAMP.Available()
    0001: 0
END
0BE1: raknet setup_outcoming_rpc_hook @HOOK
0BDE: pause_thread 0

:HOOK
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
    IF 0@ == RPC_GIVETAKEDAMAGE
    THEN
        0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM  
        0BE7: raknet 1@ = bit_stream_read 0@ type 1 // give/take
        IF 1@ == TRUE
        THEN
            0BE7: raknet 2@ = bit_stream_read 0@ type 2 // id
            0B2B: samp 3@ = get_player_id_by_actor_handle $PLAYER_ACTOR
            IF 003B:   3@ == 2@  // (int)
            THEN
                0BE7: raknet 4@ = bit_stream_read 0@ type 3 // damage
                0BE7: raknet 5@ = bit_stream_read 0@ type 2 // weapID
                IF 003B:   5@ == 0 // fist
                THEN
                    SAY "меня ударили кулаком :("
                END
            END                      
        END
    END                          
0BE0: raknet hook_ret TRUE
 

|| NN - NoName ||

Известный
1,049
628
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:
thread "astap"

WHILE NOT SAMP.Available()
    0001: 0
END
0BE1: raknet setup_outcoming_rpc_hook @HOOK
0BDE: pause_thread 0

:HOOK
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
    IF 0@ == RPC_GIVETAKEDAMAGE
    THEN
        0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM 
        0BE7: raknet 1@ = bit_stream_read 0@ type 1 // give/take
        IF 1@ == TRUE
        THEN
            0BE7: raknet 2@ = bit_stream_read 0@ type 2 // id
            0B2B: samp 3@ = get_player_id_by_actor_handle $PLAYER_ACTOR
            IF 003B:   3@ == 2@  // (int)
            THEN
                0BE7: raknet 4@ = bit_stream_read 0@ type 3 // damage
                0BE7: raknet 5@ = bit_stream_read 0@ type 2 // weapID
                IF 003B:   5@ == 0 // fist
                THEN
                    SAY "меня ударили кулаком :("
                END
            END                     
        END
    END                         
0BE0: raknet hook_ret TRUE
upload_2019-3-5_20-53-2.png
 

astap_

Известный
Всефорумный модератор
626
597
Окей, но у меня ещё, когда я пишу /rn || /fn || /psn "Text" - выводится сообщение с пустыми скобками.
/rn (( )) || /fn (( )) || /ps (( ))
он выводится пустым из-за хуевого форматирования, перекомпилируй и все будет норм
у тебя не установлены константы сампфункса
 
  • Нравится
Реакции: Magov1733

|| NN - NoName ||

Известный
1,049
628
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:
thread "as"

WHILE NOT SAMP.Available()
    0001: 0
END
0BE1: raknet setup_outcoming_rpc_hook @HOOK
0BDE: pause_thread 0

:HOOK
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
    IF 0@ == RPC_GIVETAKEDAMAGE
    THEN
        0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM 
        0BE7: raknet 1@ = bit_stream_read 0@ type 1 // give/take
        IF 1@ == TRUE
        THEN
            0BE7: raknet 4@ = bit_stream_read 0@ type 3 // damage
            0BE7: raknet 5@ = bit_stream_read 0@ type 2 // weapID
            IF 003B:   5@ == 0 // fist
            THEN
                0AF9: samp say_msg "Только не на кулак."
               
            END                     
        END
    END                         
0BE0: raknet hook_ret TRUE
Почему крашит?
 

astap_

Известный
Всефорумный модератор
626
597
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:
thread "as"

WHILE NOT SAMP.Available()
    0001: 0
END
0BE1: raknet setup_outcoming_rpc_hook @HOOK
0BDE: pause_thread 0

:HOOK
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
    IF 0@ == RPC_GIVETAKEDAMAGE
    THEN
        0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM
        0BE7: raknet 1@ = bit_stream_read 0@ type 1 // give/take
        IF 1@ == TRUE
        THEN
            0BE7: raknet 4@ = bit_stream_read 0@ type 3 // damage
            0BE7: raknet 5@ = bit_stream_read 0@ type 2 // weapID
            IF 003B:   5@ == 0 // fist
            THEN
                0AF9: samp say_msg "Только не на кулак."
              
            END                    
        END
    END                        
0BE0: raknet hook_ret TRUE
Почему крашит?
я кое-что напутал. вот это точно работает:
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:
thread "astap"

WHILE NOT SAMP.Available()
    0001: 0
END
0BE1: raknet setup_outcoming_rpc_hook @HOOK
0BDE: pause_thread 0

:HOOK
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
    IF 0@ == RPC_GIVETAKEDAMAGE
    THEN
        0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM 
        0BE7: raknet 1@ = bit_stream_read 0@ type 1 // give/take
        IF 1@ == TRUE
        THEN
            0BE7: raknet 2@ = bit_stream_read 0@ type BS_TYPE_SHORT
            0BE7: raknet 4@ = bit_stream_read 0@ type BS_TYPE_FLOAT 
            0BE7: raknet 5@ = bit_stream_read 0@ type BS_TYPE_SHORT 
            IF 5@ == 0
            THEN
                chatmsg "кулак" -1
            END               
        END
    END                         
0BE0: raknet hook_ret TRUE
 

D[a]Ni

Участник
63
3
Такая проблема, есть например строка с текстом "Привет, тут живёт BlastHack?" есть ли такая функция или опкод что бы заменить слово из строки например на "Привет, тут обитает BlastHack?" И должно быть не важно в каком месте находится это слово