serhiyrubin
Известный
- 396
- 106
Вот я ловлю сообщения в хуке через RPC_SCRCLIENTMESSAGE
А как ловить клиентские сообщения? Для вывода в свой чатлог
А как ловить клиентские сообщения? Для вывода в свой чатлог
Diamond Rp.что за сервер?Кинь пример сообщения которое тебе приходит.
Попробуй так
CLEO::hook alloc 4@ 256 memset 4@ 0 256 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 0B2B: samp 29@ = get_player_id_by_actor_handle $PLAYER_ACTOR 0B36: samp 30@ = get_player_nickname 29@ if 0C29: 5@ = stristr string1 4@ string2 "для %s[%d]:{FFFFFF} " 30@ 29@ then free 4@ // code end end 0BE0: raknet hook_ret true
0AC8: 11@ = allocate_memory_size 256
0C11: memset destination 11@ value 0x0 size 256
0B2B: samp 29@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0B36: samp 30@ = get_player_nickname 29@
for 15@ = 0 to 40
0B75: samp get_chat_string 98 text_to 11@ prefix_to 0 color_to 0 prefix_color_to 0
if 0C29: 1@ = stristr string1 11@ string2 "для %s[%d]:{FFFFFF} " 30@ 29@
then
0@ = 2
20@ = 2
else
0B75: samp get_chat_string 99 text_to 11@ prefix_to 0 color_to 0 prefix_color_to 0
if 0C29: 1@ = stristr string1 11@ string2 "для %s[%d]:{FFFFFF} " 30@ 29@
then
0@ = 2
20@ = 2
end
end
0AB2: ret 1 20@
Зачем тебе это, хук лучше.Без хука вот так вот заюзать можно?
У меня эта функция на другие слова заточена и стабильно работает, без хука.
CLEO:0AC8: 11@ = allocate_memory_size 256 0C11: memset destination 11@ value 0x0 size 256 0B2B: samp 29@ = get_player_id_by_actor_handle $PLAYER_ACTOR 0B36: samp 30@ = get_player_nickname 29@ for 15@ = 0 to 40 0B75: samp get_chat_string 98 text_to 11@ prefix_to 0 color_to 0 prefix_color_to 0 if 0C29: 1@ = stristr string1 11@ string2 "для %s[%d]:{FFFFFF} " 30@ 29@ then 0@ = 2 20@ = 2 else 0B75: samp get_chat_string 99 text_to 11@ prefix_to 0 color_to 0 prefix_color_to 0 if 0C29: 1@ = stristr string1 11@ string2 "для %s[%d]:{FFFFFF} " 30@ 29@ then 0@ = 2 20@ = 2 end end 0AB2: ret 1 20@
0AC8: 11@ = allocate_memory_size 256
0C11: memset destination 11@ value 0x0 size 256
0B2B: samp 29@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0B36: samp 30@ = get_player_nickname 29@
for 15@ = 0 to 40
0B75: samp get_chat_string 98 text_to 11@ prefix_to 0 color_to 0 prefix_color_to 0
if 0C29: 1@ = stristr string1 11@ string2 "для %s[%d]:{FFFFFF} " 30@ 29@
then
0@ = 2
20@ = 2
else
0B75: samp get_chat_string 99 text_to 11@ prefix_to 0 color_to 0 prefix_color_to 0
if 0C29: 1@ = stristr string1 11@ string2 "для %s[%d]:{FFFFFF} " 30@ 29@
then
0@ = 2
20@ = 2
end
end
end
0AB2: ret 1 20@
Конечно можно. Хук на ClientMessage в котором есть как цвет, длина и сама строка.Возможно ли сделать автоответчик чекая чат на слово "администратор"? Слово "администратор" выводится при бане/кике красным цветом , что мне не подходит. Можно ли сканировать только ту строку, которая написана оранжевым цветом?
068D: get_camera_position_to 0@ 1@ 2@
00A0: store_actor 10@ position_to 3@ 4@ 5@
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
0063: 2@ -= 5@
0604: get_Z_angle_for_point 6@ 2@ store_to 7@
7@ -= 90.0
0017: 7@ /= 57.2957795
{$CLEO}
0000:NOP
repeat
wait 100
until Samp.Available()
while true
wait 0
0AC8: 4@ = allocate_memory_size 256
0C11: memset destination 4@ value 0x0 size 256
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
0B2B: samp 29@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0B36: samp 30@ = get_player_nickname 29@
if 0C29: 5@ = stristr string1 4@ string2 "??? %s[%d]:{FFFFFF} " 30@ 29@
then
free 4@
// code
end
end
0BE0: raknet hook_ret true
end
{$INCLUDE SF} после {$CLEO} напишиЖалуется на строку "0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM" - недостаточно параметров. Ожидалось два параметра
CLEO:{$CLEO} 0000:NOP repeat wait 100 until Samp.Available() while true wait 0 0AC8: 4@ = allocate_memory_size 256 0C11: memset destination 4@ value 0x0 size 256 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 0B2B: samp 29@ = get_player_id_by_actor_handle $PLAYER_ACTOR 0B36: samp 30@ = get_player_nickname 29@ if 0C29: 5@ = stristr string1 4@ string2 "??? %s[%d]:{FFFFFF} " 30@ 29@ then free 4@ // code end end 0BE0: raknet hook_ret true end
Вопрос - Вопросы по CLEO-скриптингу (https://blast.hk/threads/13410/page-302#post-149094)Как узнать координаты по модели пикапа
Сначала проверять переменную $707, потом использовать опкоды SF.Помогите. С проверкой на СФ в скрипте, и когда его нету в игре фризит игра. Вода мерцает, и скорость игры уменьшается. Что делать?
While true
Wait 0
if
21@ = true
Then
For 10@ = 0 to 1000 size 1
if
0B20: samp 11@ = actor_handle_by_samp_player_id 10@
Then
//Actor.StorePos(11@, 1@, 2@, 3@)
0B36: samp 14@ = get_player_nickname 10@
050A: 13@ = distance_between_XYZ 4@ 5@ 6@ and_XYZ 1@ 2@ 3@
0B25: samp 17@ = get_player_health 10@
jump @gun
if 16@ == true
Then
0AF8: samp add_message_to_chat "Dist: %d, Nick: %s[%d], HP: %d" color 0xFF0000 13@ 14@ 10@ 17@
16@ = false
End
End
End
Wait 1000
End
End
:gun // 15@ 16@ 27@
if
031D: actor $PLAYER_ACTOR hit_by_weapon 0
Then
15@v = "hand"
16@ = true
End
if
031D: actor $PLAYER_ACTOR hit_by_weapon 5
Then
15@v = "bat"
16@ = true
End
if
031D: actor $PLAYER_ACTOR hit_by_weapon 8
Then
15@v = "katana"
16@ = true
End
if
031D: actor $PLAYER_ACTOR hit_by_weapon 24
Then
15@v = "desert eagle"
16@ = true
End
if
031D: actor $PLAYER_ACTOR hit_by_weapon 25
Then
15@v = "shotgun"
16@ = true
End
if
031D: actor $PLAYER_ACTOR hit_by_weapon 28
Then
15@v = "uzi"
16@ = true
End
if
031D: actor $PLAYER_ACTOR hit_by_weapon 31
Then
15@v = "m4"
16@ = true
End
if
031D: actor $PLAYER_ACTOR hit_by_weapon 33
Then
15@v = "rifle"
16@ = true
End
if
031D: actor $PLAYER_ACTOR hit_by_weapon 33
Then
15@v = "rifle"
16@ = true
End
if
031D: actor $PLAYER_ACTOR hit_by_weapon 34
Then
15@v = "sniper"
16@ = true
27@ = true
End