Проверка строки из чата

FelixxxShooter

Новичок
Автор темы
6
0
Добрый день, я бы хотел поинтересоваться, как можно перехватить строку из чата, и возможно ли это сделать с помощью sampfuncs?
Допустим я хочу сделать авто-взятие со склада материалов, когда склад открыт.
Как извлечь строчку из чата, и сравнить в ней значение? Ну тип проверить, есть ли там слова "открыл склад"
 
Решение
Добрый день, я бы хотел поинтересоваться, как можно перехватить строку из чата, и возможно ли это сделать с помощью sampfuncs?
Допустим я хочу сделать авто-взятие со склада материалов, когда склад открыт.
Как извлечь строчку из чата, и сравнить в ней значение? Ну тип проверить, есть ли там слова "открыл склад"
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:

alloc 4@ 256
0BE3: raknet setup_incoming_rpc_hook @TakeMessages

while true
wait 0
end

:TakeMessages
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...

Impossible In Rage

Известный
955
248
Добрый день, я бы хотел поинтересоваться, как можно перехватить строку из чата, и возможно ли это сделать с помощью sampfuncs?
Допустим я хочу сделать авто-взятие со склада материалов, когда склад открыт.
Как извлечь строчку из чата, и сравнить в ней значение? Ну тип проверить, есть ли там слова "открыл склад"
Читать чат можно при помощи 1 криво работающего опкода или RPC хука , сравнение можно сделать просто записав строку из чата в переменную через конвертацию или как её там , а потом просто сравнить
RPC хук :
RPC By DarkP1xel:
{$CLEO}
IF 8028:   NOT $707 >= 17
THEN 0A93:
END
IF 8AF7: NOT samp 0@ = get_base
THEN 0A93:
END
0AC6: 0@ = label @Buffer offset
0BE3: raknet setup_incoming_rpc_hook @iRPC
0BDE: pause_thread 0

:iRPC // 0@ 1@ 2@
0BE5: raknet 1@ = get_hook_param {PARAM_PACKETID}1
IF 0039:   1@ == {RPC_ClientMessage}93
THEN 0AB1: call_scm_func @doHookFunc params 3 | {Type1}{BS_TYPE_INT}3 {Type2}{BS_TYPE_INT}3 {Array}0@ | {dwColor}1@ {dwStrLen}2@ |
END

IF 0039:   1@ == {RPC_Chat}101
THEN 0AB1: call_scm_func @doHookFunc params 3 | {Type1}{BS_TYPE_SHORT}2 {Type2}{BS_TYPE_BYTE}0 {Array}0@ | {PlayerID}1@ {byteTextLen}2@ |
END
0BE0: raknet hook_ret TRUE

:doHookFunc
0BE5: raknet 25@ = get_hook_param {PARAM_BITSTREAM}0
0BF2: raknet 26@ = bit_stream 25@ get_read_offset
0BE9: raknet bit_stream 25@ reset_read_pointer

0BE7: raknet 27@ = bit_stream_read 25@ type 0@ // 1
0BE7: raknet 28@ = bit_stream_read 25@ type 1@ // 2
0BE8: raknet bit_stream 25@ read_array 2@ size 28@ // 3
0C1E: array 2@ element 28@ el_size 1 = 0x0

0BED: raknet bit_stream 25@ set_read_offset 26@
0AB2: _ret 2 | {Param1}27@ {Param2}28@ |

:Buffer // 256 + 1
HEX
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00
END

// By DarkP1xel
 
  • Нравится
Реакции: FelixxxShooter

hnnssy

Известный
Друг
2,684
2,762
Добрый день, я бы хотел поинтересоваться, как можно перехватить строку из чата, и возможно ли это сделать с помощью sampfuncs?
Допустим я хочу сделать авто-взятие со склада материалов, когда склад открыт.
Как извлечь строчку из чата, и сравнить в ней значение? Ну тип проверить, есть ли там слова "открыл склад"
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:

alloc 4@ 256
0BE3: raknet setup_incoming_rpc_hook @TakeMessages

while true
wait 0
end

:TakeMessages
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: 5@ = strstr string1 4@ string2 "открыл склад"
    then
        //0af8: "там склад открылся" -1     
    end
end
0BE0: raknet hook_ret true