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

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,261
1,743
Я читал про этот Опкод на вики и там сказано, что "Данный опкод не поддерживает сохранения какого-либо просканированного текста в выделенный буфер. Для сохранения используйте локальные переменные(1@s, 1@v), но не забывайте о том, что они имеют лимит(15-16 символов)" и подумал, что он не подойдет.
Допусти: 0AD4: 30@ = = scan_string 0@ format "Ваша «Сытость»: %i / 100" 2@
То %i запишется в 2@ ?

4828fa9ee1.png

CLEO:
while true
wait 0
    if 0ADC: "check"
    then
        alloc 0@ 128
        0AD3: 0@ = format "Ваша «Сытость»: / 100"

        if 0AD4: 1@ = scan_string 0@ format "Ваша «Сытость»: %d / 100" 2@ //IF and SET
        then
            chatmsg "Сытость равна: %d" -1 2@
        else
            chatmsg "Не удалось чёт вытащить значение" -1
        end
       
        free 0@    
    end    
end
 
Последнее редактирование:
  • Нравится
Реакции: 01EG

iTz_WEEZY

Известный
298
85
Расскажи подробнее
и.. никуя не поня как правильно использовать
Это
CLEO:
0C18: 2@ = strstr string1 0@ string2 1@
и как правельно его тут вставить
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:

wait 2000

alloc 4@ 256
0c11: 4@ 0 256

0BE3: raknet setup_incoming_rpc_hook @ClientMessage

while true
wait 0
end

: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: 7@ = strstr string1 4@ string2 "Ля Ля Ля Ля"
    then
        say "угу"
    end                                                
end
0BE0: raknet hook_ret true
 

hnnssy

Известный
Друг
2,684
2,754
Расскажи подробнее
и.. никуя не поня как правильно использовать
Это
CLEO:
0C18: 2@ = strstr string1 0@ string2 1@
и как правельно его тут вставить
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:

wait 2000

alloc 4@ 256
0c11: 4@ 0 256

0BE3: raknet setup_incoming_rpc_hook @ClientMessage

while true
wait 0
end

: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: 7@ = strstr string1 4@ string2 "Ля Ля Ля Ля"
    then
        say "угу"
    end                                               
end
0BE0: raknet hook_ret true
А ничего, что он тут уже есть?
 

01EG

Известный
Проверенный
631
346
Вот тоже так думаю..
Но всётаки как сделать чтобы он читал сообшение не целиком а частисно..
Ни хуя не понял
я заебал наверно с этой хуйней
1)Если тебе в чат придет сообщение со стороны сервере и в нем будет заданное значение после string2 "слово какое-то(Привет)"
И в какой-то строке в которой сервер тебе пришлет, найдут записанное в string2, то код отреагирует и сделает указанное.
Вот например в этом скрипте(я только что проверил), я написал в чат Ывффыафыа Привет Ывфафыа, скрипт отыскал слово Привет и отреагировал ответом:"Хует". Все работает, я тебе сразу скинул рабочил код в котором нужно только поменять значения искаемого. Единственное, что я не понимаю почему если убрать {$INCLUDE SF} и wait 2000, все это заменять проверкой на repeat wait 0 until 0afa , то скрипт не будет компилиться, да ладно.
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:

wait 2000

alloc 4@ 256
0c11: memset 4@ 0 256

0BE3: raknet setup_incoming_rpc_hook @ClientMessage

while true
wait 0
end

: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: 7@ = strstr string1 4@ string2 "Привет"
    then
        say "Хует"
    end                                               
end
0BE0: raknet hook_ret true
2) Если тебе понадобиться отыскать какую-то строку, то ты должен сначала знать что это за строка. Например ты ждешь, бля я даже не знаю что, ну например какую-то строку. Ты получил ее на сервере, заходишь в chatlog.txt (в документах сампа) там смотришь на эту строку. И копируешь ее, со всем {цветами}, если они будут, если их нету, то цвет стандартный. И так же записываешь в string2.
Надеюсь я помог тебе.
 
  • Нравится
Реакции: iTz_WEEZY

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,261
1,743
1)Если тебе в чат придет сообщение со стороны сервере и в нем будет заданное значение после string2 "слово какое-то(Привет)"
И в какой-то строке в которой сервер тебе пришлет, найдут записанное в string2, то код отреагирует и сделает указанное.
Вот например в этом скрипте(я только что проверил), я написал в чат Ывффыафыа Привет Ывфафыа, скрипт отыскал слово Привет и отреагировал ответом:"Хует". Все работает, я тебе сразу скинул рабочил код в котором нужно только поменять значения искаемого. Единственное, что я не понимаю почему если убрать {$INCLUDE SF} и wait 2000, все это заменять проверкой на repeat wait 0 until 0afa , то скрипт не будет компилиться, да ладно.
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:

wait 2000

alloc 4@ 256
0c11: memset 4@ 0 256

0BE3: raknet setup_incoming_rpc_hook @ClientMessage

while true
wait 0
end

: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: 7@ = strstr string1 4@ string2 "Привет"
    then
        say "Хует"
    end                                              
end
0BE0: raknet hook_ret true
2) Если тебе понадобиться отыскать какую-то строку, то ты должен сначала знать что это за строка. Например ты ждешь, бля я даже не знаю что, ну например какую-то строку. Ты получил ее на сервере, заходишь в chatlog.txt (в документах сампа) там смотришь на эту строку. И копируешь ее, со всем {цветами}, если они будут, если их нету, то цвет стандартный. И так же записываешь в string2.
Надеюсь я помог тебе.
в {INCLUDE SF} хранятся константы на подобии
Код:
PARAM_BITSTREAM, PARAM_PACKETID
wait 2000 можно убрать, инклуд можно убрать только если заменить константы на числа
 
  • Нравится
Реакции: 01EG

2Shae

Известный
149
8
Создал скрипт с диалогами по туториалу легенды (https://www.blast.hk/threads/506/), переделал под себя сделав открытие с DIALOG_STYLE_LIST (в нём 4 пункта влепил). При выборе в главном диалоге пункты работают. Но, если сделать, к примеру, при выборе там 2 пункта переход на другой диалог с ещё одним DIALOG_STYLE_LIST, то пункты уже в новом не работают (просто пропадает и всё). Надеюсь обьяснил нормально. Оно так и работает или я таки что-то пропустил в коде?
В кратце что хочу сделать, чтобы новые диалоги открывались не по нажатию клавиш, как в туториале.
 
Последнее редактирование:

hnnssy

Известный
Друг
2,684
2,754
Создал скрипт с диалогами по туториалу легенды (https://www.blast.hk/threads/506/), переделал под себя сделав открытие с DIALOG_STYLE_LIST (в нём 4 пункта влепил). При выборе в главном диалоге пункты работают. Но, если сделать, к примеру, при выборе там 2 пункта переход на другой диалог с ещё одним DIALOG_STYLE_LIST, то пункты уже в новом не работают (просто пропадает и всё). Надеюсь обьяснил нормально. Оно так и работает или я таки что-то пропустил в коде?
В кратце что хочу сделать, чтобы новые диалоги открывались не по нажатию клавиш, как в туториале.
Так может код приложишь хотя бы?
 

VADE

Новичок
36
1
Можно ли каким либо образом визуально выдать себе кейс? Заранее спасибо :3
 

Perojek)0

Известный
205
3
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:

repeat
    wait 5000
until 0AFA:  is_samp_available
0B34: samp register_client_command "player" to_label @player
while true
wait 0
end

:player
2@=0
    for 0@ = 0 to 999 step 1
        if
        0B23: samp is_player_connected 0@
        then
        0B20: samp 1@ = actor_handle_by_samp_player_id 0@
            if
            1@==0
            then
            else
            2@++
            end
        end
    end
0AF8: samp add_message_to_chat "В зоне стрима %d игроков" color -1 2@   
0B43: samp cmd_ret
В чём ошибка?
 

BlackKnigga

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

repeat
    wait 5000
until 0AFA:  is_samp_available
0B34: samp register_client_command "player" to_label @player
while true
wait 0
end

:player
2@=0
    for 0@ = 0 to 999 step 1
        if
        0B23: samp is_player_connected 0@
        then
        0B20: samp 1@ = actor_handle_by_samp_player_id 0@
            if
            1@==0
            then
            else
            2@++
            end
        end
    end
0AF8: samp add_message_to_chat "В зоне стрима %d игроков" color -1 2@ 
0B43: samp cmd_ret
В чём ошибка?
Если хендл не найден, то возвращается -1 а не 0.
И еще большие циклы не стоит вставлять в тело команды.
 
  • Нравится
Реакции: itsLegend и Perojek)0