Перехват сообщения в чате
|
|
BarD
|
Дата: Среда, 12.03.2014, 12:58:35 | Сообщение # 1 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Мне нужно перехватить и удалить сообщение из чата или заменить его на пустое. Возможно, вопрос глупый, но все же... Например: BarD написал сообщение "Привет" ("BarD: Привет"), а в чате никто его не увидел или увидели "BarD: "
Сообщение отредактировал BarD - Среда, 12.03.2014, 12:58:56 |
|
| |
хвостег
|
Дата: Среда, 12.03.2014, 15:12:55 | Сообщение # 2 |
|
Сообщений: 161
Репутация: 53 [ +/- ]
|
|
Код public OnPluginStart() { HookUserMessage(GetUserMessageId("SayText2"), SayHook, true); // перехватываем }
public Action:SayHook(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init) { return Plugin_Handled; // блочим сообщение }
|
|
| |
BarD
|
Дата: Среда, 12.03.2014, 15:53:26 | Сообщение # 3 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Спасибо большое! А GetUserMessageId("SayText2") - Это что?
|
|
| |
хвостег
|
Дата: Среда, 12.03.2014, 16:12:53 | Сообщение # 4 |
|
Сообщений: 161
Репутация: 53 [ +/- ]
|
|
https://wiki.alliedmods.net/User_Messages
|
|
| |
BarD
|
Дата: Среда, 12.03.2014, 17:13:43 | Сообщение # 5 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Спасибо еще раз!
|
|
| |
DEMO-Stalker
|
Дата: Среда, 12.03.2014, 19:06:31 | Сообщение # 6 |
|
Сообщений: 49
Репутация: 0 [ +/- ]
|
|
хвостег, А как поймать определенное слово, а не каждое?
|
|
| |
хвостег
|
Дата: Среда, 12.03.2014, 19:45:15 | Сообщение # 7 |
|
Сообщений: 161
Репутация: 53 [ +/- ]
|
|
а конкретнее?
|
|
| |
BarD
|
Дата: Четверг, 13.03.2014, 11:07:53 | Сообщение # 8 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Demo-Stalker, Поймать определенное слово можно так: Код public OnPluginStart() { HookEvent("player_say", Say); }
public Action:Say(Handle:event, const String:name[], bool:dontBroadcast) { new String:text[64]; GetEventString(event, "text", text, sizeof(text)); // Ловим строку, написанную игроком в чат и записываем в text new String:yourtext[64]; FormatEx(yourtext, sizeof(yourtext), "Твой текст"); // Пишешь свою строку, которую хочешь поймать, она записывается в yourtext
if (StrEqual(text, yourtext, true)) // Сравниваем 2 строки (text и yourtext) { PrintToChatAll("Строки равны"); // Если они равны, то пишем, что равны } else { PrintToChatAll("Строки не равны"); // Если не равны, то пишем, что не равны } }
Сообщение отредактировал BarD - Четверг, 13.03.2014, 11:08:06 |
|
| |
DEMO-Stalker
|
Дата: Четверг, 13.03.2014, 20:01:07 | Сообщение # 9 |
|
Сообщений: 49
Репутация: 0 [ +/- ]
|
|
BarD, Спасибо
|
|
| |
BarD
|
Дата: Воскресенье, 16.03.2014, 08:50:54 | Сообщение # 10 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
По поводу темы: можно перехватывать сообщения вот так: Код public OnPluginStart() { AddCommandListener(HookPlayerChat, "say"); }
public Action:HookPlayerChat(client, const String:command[], args) // Если поступило сообщение в чат, то вызывается это событие { new String:text[256]; new String:yourtext[256];
GetCmdArg(1, text, sizeof(rtext)); // Получаем текст сообщения и записываем его в text
Format(yourtext, sizeof(yourtext), "Наш текст"); // Пишем наше сообщение и записываем его в yourtext
if (StrEqual(text, yourtext)) // Сравниваем. Если они равны (значит, что игрок написал "Наш текст"), то... { PrintToChatAll(""); // ... Заменяем на пустое return Plugin_Hadled; // Удаляем старое } } P.S Все остальные сообщения, кроме "Наш текст", пропускаются!
|
|
| |
_R1KO_
|
Дата: Понедельник, 25.05.2015, 21:26:14 | Сообщение # 11 |
|
Сообщений: 200
Репутация: 30 [ +/- ]
|
|
BarD, не забывай что нужно написать ник, и в частных случаях "убит" и команду
|
|
| |
BarD
|
Дата: Вторник, 26.05.2015, 10:13:14 | Сообщение # 12 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
_R1KO_, ну, это да) я скинул пример блокировки определённых сообщений.
|
|
| |