NightHunter
Участник
- Сообщения
- 25
- Реакции
- 2
В чем суть? Если игрок пишет какое-то сообщение с определенным словом, (как я понимаю, с помощью ивента player_say) отловить его и к примеру переписать.
public Action:OnClientSayCommand(client, const String:command[], const String:sArgs[])
{
if(client != 0 && !IsFakeClient(client))
{
decl String:sText[192];
strcopy(sText, sizeof(sText), sArgs);
TrimString(sText);
StripQuotes(sText);
new bool: AllChat = StrEqual(command, "say");
LogMessage("%N написал в %s чат сообщение: %s", client, AllChat ? "общий" : "командный", sText);
}
}
Я же возвратов действия не делаю, значит не обязательно. Можно конечно добавить return Plugin_Continue; перед последней скобкой, но зачем?Action -> return ?
PHP:public Action:OnClientSayCommand(client, const String:command[], const String:sArgs[]) { if(client != 0 && !IsFakeClient(client)) { decl String:sText[192]; strcopy(sText, sizeof(sText), sArgs); TrimString(sText); StripQuotes(sText); new bool: AllChat = StrEqual(command, "say"); LogMessage("%N написал в %s чат сообщение: %s", client, AllChat ? "общий" : "командный", sText); } }
public OnPluginStart()
{
HookEvent("player_say", OnClientSayCommand); //error 100: function prototypes do not match
}
public Action:OnClientSayCommand(client, const String:command[], const String:sArgs[])
{
if(client != 0 && !IsFakeClient(client))
{
decl String:sText[192];
strcopy(sText, sizeof(sText), sArgs);
TrimString(sText);
StripQuotes(sText);
new bool: AllChat = StrEqual(command, "say");
LogMessage("%N написал в %s чат сообщение: %s", client, AllChat ? "общий" : "командный", sText);
}
}
PHP:public OnPluginStart() { HookEvent("player_say", OnClientSayCommand); //error 100: function prototypes do not match } public Action:OnClientSayCommand(client, const String:command[], const String:sArgs[]) { if(client != 0 && !IsFakeClient(client)) { decl String:sText[192]; strcopy(sText, sizeof(sText), sArgs); TrimString(sText); StripQuotes(sText); new bool: AllChat = StrEqual(command, "say"); LogMessage("%N написал в %s чат сообщение: %s", client, AllChat ? "общий" : "командный", sText); } }
По скольку я еще очень туп в этом, то не могли бы Вы подсказать как отловить любое определенное слово?
public Action:OnClientSayCommand(client, const String:command[], const String:sArgs[])
{
if(client != 0 && !IsFakeClient(client))
{
decl String:sText[192];
strcopy(sText, sizeof(sText), sArgs);
TrimString(sText);
StripQuotes(sText);
if(StrEqual(sText, "плохо"))
{
PrintToChat(client, "хорошо");
return Plugin_Handled;
}
}
return Plugin_Continue;
}
По другому никак иначе))ОффтопБудет огромный фейспалм, ну да пофиг.
Человек в чате пишет "Вася: Продам бла-бла-бла", плагин выдает "[TRADE] Вася: Продам бля-бла-бла"
#include <scp>
public Action:OnChatMessage(&author, Handle:recipients, String:name[], String:message[])
{
if(StrContains(message, "продам", false) || StrContains(message, "sell", false))
{
Format(name, 192, "[TRADE] %s", name);
return Plugin_Changed;
}
return Plugin_Continue;
}
PrintToChat(client, "хорошо");
FakeClientCommand(client, "%s хорошо", command);
[TF2] Trade Chat 1.5.1 (2012.10.09) - AlliedModdersОффтопБудет огромный фейспалм, ну да пофиг.
Человек в чате пишет "Вася: Продам бла-бла-бла", плагин выдает "[TRADE] Вася: Продам бля-бла-бла"
По другому никак иначе))
Такое лучше делать модулем с simple chat processor redux что бы проблем никаких не было с другими чат-плагинами.
PHP:#include <scp> public Action:OnChatMessage(&author, Handle:recipients, String:name[], String:message[]) { if(StrContains(message, "продам", false) || StrContains(message, "sell", false)) { Format(name, 192, "[TRADE] %s", name); return Plugin_Changed; } return Plugin_Continue; }
Добавил sell - потому что с русскими буквами StrContains может работать не адекватно. (для теста)
любое сообщение переделывает
if(StrContains(message, "продам", false) || StrContains(message, "sell", false))
if(StrContains(message, "продам") != -1 || StrContains(message, "sell", false) != -1)
if(StrContains(message, "продам") != -1 || StrContains(message, "sell", false) != -1)