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

Evgeniy13

Новичок
40
1
Я использовал такой способ. Можно еще сканированием строки.
CLEO:
{$CLEO}
0000:

while 8AFA:
wait 0
end

0AC8: 10@ = allocate_memory_size 64
0AC8: 11@ = allocate_memory_size 64
0AD3: 11@ = format "- qq all (Ivan_Molot)[733]" // Строка, из которой нужно извлечь ID.

0006: 0@ = -1
while 8C18: 0 = strstr string1 11@ string2 10@
000A: 0@ += 1
0AD3: 10@ = format "[%i]" 0@
end

0B78: log "ID -> %i" 0@

0AC9: free_allocated_memory 10@
0AC9: free_allocated_memory 11@
0A93: end_custom_thread
Вот меня и интересует способ по сканированию строки, не подскажите как это сделать?
 

AWRage

Активный
642
141
Почему не работает? У меня 5 звезд, но кол-во звезд считывается не правильно. Оно постоянно по 0.
CLEO:
{$CLEO}
0000:

while 8AFA:
wait 0
end

while true
if 0ADC: "1"
then
    0A8D: 0@ = read_memory 0xBAA420 size 1 virtual_protect 0
    01C0: 1@ = player $PLAYER_CHAR wanted_level
    log "0A8D: -> %i | 01C0: -> %i " 0@ 1@
end
wait 0
end
 

Lightkiller

Известный
Всефорумный модератор
557
398
Почему не работает? У меня 5 звезд, но кол-во звезд считывается не правильно. Оно постоянно по 0.
CLEO:
{$CLEO}
0000:

while 8AFA:
wait 0
end

while true
if 0ADC: "1"
then
    0A8D: 0@ = read_memory 0xBAA420 size 1 virtual_protect 0
    01C0: 1@ = player $PLAYER_CHAR wanted_level
    log "0A8D: -> %i | 01C0: -> %i " 0@ 1@
end
wait 0
end
CLEO:
{$CLEO}
0000:

while 8AFA:
wait 0
end

while true
wait 0
if 0ADC: "1"
then
    0AB1: @getWantedLevel 0 return_to 0@
    0af8: "Wanted Level: %d" -1 0@
end
wait 0
end                      



:getWantedLevel
0A8D: 0@ = read_memory 0x58DB60 size 1 virtual_protect 0
0AB2: ret 1 0@
fKsfwDwaaAw.jpg
 
  • Нравится
Реакции: AWRage

Bogach

Активный
558
27
Допустим, мне нужно прочитать с файла chatlog (samp'a) строку, где какой - то игрок мне что- то написал, я незнаю какой игрок мне что - то напишет в чат и соотв. не могу знать его ид, каким образом, я могу получить с чатлога ид того игрока который мне написал и просканировать тот текст, что он мне написал, отправить ему ответ, т.е по типу автоответчика. буду признателен за помощь.
 

SR_team

like pancake
BH Team
4,726
6,382
Допустим, мне нужно прочитать с файла chatlog (samp'a) строку, где какой - то игрок мне что- то написал, я незнаю какой игрок мне что - то напишет в чат и соотв. не могу знать его ид, каким образом, я могу получить с чатлога ид того игрока который мне написал и просканировать тот текст, что он мне написал, отправить ему ответ, т.е по типу автоответчика. буду признателен за помощь.
Хук incommingRPC и там чекаешь информацию в RPC_Chat
 

Dark_Knight

Me, me and me.
Друг
4,070
2,086
CLEO:
{$CLEO}
{$NOSOURCE}
{$INCLUDE SF}
{$INCLUDE KEYS}
if not 31@ = samp.Base()
then
end_thread
else
    while not samp.Available()
    wait 100
    end
end

0BE3: raknet setup_incoming_rpc_hook @hook
0BE3: raknet setup_incoming_rpc_hook @hook_2

while true
wait 0
gosub @reload
end

:reload
if and
0adc: "hook"
not samp.ChatInputOpened()
not samp.IsDialogActive(-1)
then
    free 5@
    free 7@
    message "reload" -1
    run "hook chat.cs"
    0a93:
end
return

var
31@ : int
5@ : int
end

:hook_2
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
if 0@ == 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
    alloc 4@ 145
    0BE8: raknet bit_stream 1@ read_array 4@ size 3@
    0C1E: array 4@ element 3@ el_size 1 = 0x0
    0B15: 2@ = 2@ SHR 8
    0B10: 2@ = 2@ AND 0x00FFFFFF
    if and
    0c18: strstr 31@ 4@ "Сделка:"
    0c18: strstr 31@ 4@ "предлагает купить тебе лекарство"
    then
        0af9: say "/accept meds"                
    end
    free 4@
end
0BE0: raknet hook_ret true

:hook
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
if 0@ == 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
    alloc 4@ 145
    0BE8: raknet bit_stream 1@ read_array 4@ size 3@
    0C1E: array 4@ element 3@ el_size 1 = 0x0
    0B15: 2@ = 2@ SHR 8
    0B10: 2@ = 2@ AND 0x00FFFFFF
        if or
            0c18: strstr 31@ 4@ "tabl"
            0c18: strstr 31@ 4@ "meds"
            0c18: strstr 31@ 4@ "медс"
            0c18: strstr 31@ 4@ "таблетки"
            0c18: strstr 31@ 4@ "табл"
        then
            alloc 5@ 0x100
            if 0C19: 31@ = strcspn string1 4@ string2 "]"
            then
                0C2D: strrev in 4@ out 5@
                5@ += 31@
                0C2D: strrev in 5@ out 5@
                    if 0C19: 31@ = strcspn string1 4@ string2 "["
                    then
                        5@ ++
                        5@ += 31@
                        0C1A: 5@ = atoi 5@
                        message "%d" -1 5@
                        0af9: say "/sellmeds %d 2000" 5@
                    end
               
            end
            free 5@
        end
    free 4@
end
0BE0: raknet hook_ret true
[/cleo]
 

Bogach

Активный
558
27
CLEO:
{$CLEO}
{$NOSOURCE}
{$INCLUDE SF}
{$INCLUDE KEYS}
if not 31@ = samp.Base()
then
end_thread
else
    while not samp.Available()
    wait 100
    end
end

0BE3: raknet setup_incoming_rpc_hook @hook
0BE3: raknet setup_incoming_rpc_hook @hook_2

while true
wait 0
gosub @reload
end

:reload
if and
0adc: "hook"
not samp.ChatInputOpened()
not samp.IsDialogActive(-1)
then
    free 5@
    free 7@
    message "reload" -1
    run "hook chat.cs"
    0a93:
end
return

var
31@ : int
5@ : int
end

:hook_2
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
if 0@ == 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
    alloc 4@ 145
    0BE8: raknet bit_stream 1@ read_array 4@ size 3@
    0C1E: array 4@ element 3@ el_size 1 = 0x0
    0B15: 2@ = 2@ SHR 8
    0B10: 2@ = 2@ AND 0x00FFFFFF
    if and
    0c18: strstr 31@ 4@ "Сделка:"
    0c18: strstr 31@ 4@ "предлагает купить тебе лекарство"
    then
        0af9: say "/accept meds"               
    end
    free 4@
end
0BE0: raknet hook_ret true

:hook
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
if 0@ == 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
    alloc 4@ 145
    0BE8: raknet bit_stream 1@ read_array 4@ size 3@
    0C1E: array 4@ element 3@ el_size 1 = 0x0
    0B15: 2@ = 2@ SHR 8
    0B10: 2@ = 2@ AND 0x00FFFFFF
        if or
            0c18: strstr 31@ 4@ "tabl"
            0c18: strstr 31@ 4@ "meds"
            0c18: strstr 31@ 4@ "медс"
            0c18: strstr 31@ 4@ "таблетки"
            0c18: strstr 31@ 4@ "табл"
        then
            alloc 5@ 0x100
            if 0C19: 31@ = strcspn string1 4@ string2 "]"
            then
                0C2D: strrev in 4@ out 5@
                5@ += 31@
                0C2D: strrev in 5@ out 5@
                    if 0C19: 31@ = strcspn string1 4@ string2 "["
                    then
                        5@ ++
                        5@ += 31@
                        0C1A: 5@ = atoi 5@
                        message "%d" -1 5@
                        0af9: say "/sellmeds %d 2000" 5@
                    end
              
            end
            free 5@
        end
    free 4@
end
0BE0: raknet hook_ret true
[/cleo]
Ничего себе лёгкие)
Ну... Попробую разобраться)