[BAD] [CLEO] Hook RPC Client Message

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Example hook.
{$CLEO}
{$INCLUDE SF}
0001: wait 0 ms
0662: "by legend2360"
0662: "BlastHack - cheating is art"
while not SAMP.Available()
wait 400
end
0BE3: raknet setup_incoming_rpc_hook @in_rpc
// -- Пример использования локальных переменных в основном цикле при используемом хуке...
// -- т.к. хук перезаписывает переменные, которые используются в его теле.
0@ = 0 // счетчик
0BFA: push_vars // сохраняем
while true
wait 0
// здесь используются все переменные, кроме тех, которые используются в хуке.
// ИНАЧЕ можно использовать 0BFB: pop_vars и 0BFA: push_vars
0BFB: pop_vars // восстанавливаем
0@++
0AD1: show_formatted_text_highpriority "~p~Count ~g~%d" time 0 0@
0BFA: push_vars // снова сохраняем
end
:in_rpc
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 // длина сообщения
0AC8: 4@ = allocate_memory_size 145
0BE8: raknet bit_stream 1@ read_array 4@ size 3@ // сообщение
0C0D: struct 4@ offset 3@ size 1 = 0 // завершаем строку нулевым символом(чтобы не было лишних символов при чтении, к примеру)
0C29: 5@ = stristr string1 4@ string2 "привет" // проверяем, содержит ли сообщение слово "привет"
if 5@ <> 0 // если слово найдено(здесь возвращается указатель на начало. К примеру: "Арсений, привет. Как дела?", то в 5@ будет храниться "привет. Как дела?"
then
0AF9: samp say_msg "Здрасьте"
end
0AC9: free_allocated_memory 4@
end
0BE0: raknet hook_ret true