Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Перехват сообщения в чате
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_, ну, это да) я скинул пример блокировки определённых сообщений.
 
  • Страница 1 из 1
  • 1
Поиск: