oleg_nelasy
Участник
- Сообщения
- 664
- Реакции
- 46
Нужно прихватить и заблокировать сообщения. Игрок подключился, отключится и сменил команду.
Последнее редактирование:
HookEvent("player_team", Event_PlayerTeam, EventHookMode_Pre);
public Action:Event_PlayerTeam(Handle:event, const String:name[], bool:dontBroadcast)
{
if(!dontBroadcast)
{
SetEventBroadcast(event, true);
}
}
HookEvent("player_team", Event_PlayerTeam, EventHookMode_Pre);
public Action:Event_PlayerTeam(Handle:event, const String:name[], bool:dontBroadcast)
{
if (!dontBroadcast)
{
SetEventBroadcast(event, true);
}
int client = GetClientOfUserId(GetEventInt(event, "userid"));
int oldTeam = GetEventInt(event, "oldteam");
int newTeam = GetEventInt(event, "team");
if (client > 0 && client <= MaxClients && IsClientInGame(client) && oldTeam != newTeam)
{
CreateTimer(0.1, Timer_ShowTeamChangeMessage, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
}
return Plugin_Continue;
}
public Action Timer_ShowTeamChangeMessage(Handle timer, int userid)
{
int client = GetClientOfUserId(userid);
if (client > 0 && IsClientInGame(client))
{
int team = GetClientTeam(client);
char teamName[32];
switch (team)
{
case 1: teamName = "Spectators";
case 2: teamName = "Terrorists";
case 3: teamName = "Counter-Terrorists";
default: teamName = "Unknown";
}
PrintToChatAll("%N has joined %s team", client, teamName);
}
return Plugin_Stop;
}
если это имеется в виду проблема в CS:GO, то решение более 3 лет существует без таймеровНе мешает игроку нормально сменить команду
public Action Event_Team(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(event.GetInt("userid"));
if(client && !dontBroadcast)
{
event.BroadcastDisabled = true;
switch(event.GetInt("team"))
{
case 1: PrintToChatAll("Игрок %N перешёл в Наблюдение", client);
case 2: PrintToChatAll("Игрок %N зашёл за Террористов", client);
case 3: PrintToChatAll("Игрок %N зашёл за Спецназ", client);
}
}
return Plugin_Continue;
}
если что-то в событии меняется, то должно бытьreturn Plugin_Continue;
return Plugin_Changed;
return Plugin_Handled;
public void OnPluginStart(){
HookEvent("player_connect", OnPlayerConnect, EventHookMode_Pre);
HookEvent("player_disconnect", OnPlayerDisconnect, EventHookMode_Pre);
HookEvent("player_team", OnPlayerTeam, EventHookMode_Pre);
HookUserMessage(GetUserMessageId("TextMsg"), OnTextMsg, true);
}
public void OnPlayerConnect(Event event, const char[] name, bool dontBroadcast){
if(!dontBroadcast)
event.BroadcastDisabled = true;
// Игрок подключается на сервер
}
public Action OnPlayerDisconnect(Event event, const char[] name, bool dontBroadcast){
if(!dontBroadcast)
event.BroadcastDisabled = true;
// Игрок отключился от сервера
return Plugin_Handled;
}
public Action OnPlayerTeam(Event event, const char[] name, bool dontBroadcast){
if(!dontBroadcast && !event.GetBool("disconnect") && !event.GetBool("silent")){
event.BroadcastDisabled = true;
int client = GetClientOfUserId(event.GetInt("userid"));
if(client){
switch(event.GetInt("team")){
case 1: ChatCore_PrintToChat(other, "{-}{nick_grd}%N{!nick_grd}{text} переходит к {lightgreen}Наблюдателям {#960000}ϟ", client);
case 2: ChatCore_PrintToChat(other, "{-}{nick_grd}%N{!nick_grd}{text} переходит к {red}Террористам {#960000}ϟ", client);
case 3: ChatCore_PrintToChat(other, "{-}{nick_grd}%N{!nick_grd}{text} переходит к {blue}Спецназовцам {#960000}ϟ", client);
}
}
}
return Plugin_Handled;
}
public Action OnTextMsg(UserMsg msg_id, Handle bf, const players[], int playersNum, bool reliable, bool init){
if(BfReadByte(bf) == 1){
char message[64];
int len = BfReadString(bf, message, sizeof(message));
if((len == 15 && message[0] == '#' && message[1] == 'G' && message[6] == 'c') || (len == 33 && message[0] == '#' && message[19] == 'G' && message[24] == 'c')) // блокировка чего-то, не помню чего
return Plugin_Handled;
}
return Plugin_Continue;
}
если нужно только заблочить сообщения в чате (и выбор команды будет правильно работать), то должен работать такой код:
public void OnPluginStart()
{
HookEvent("player_connect", Event_Block, EventHookMode_Pre);
HookEvent("player_connect_client", Event_Block, EventHookMode_Pre);
HookEvent("player_disconnect", Event_Block, EventHookMode_Pre);
HookEvent("player_team", Event_Block, EventHookMode_Pre);
}
public Action Event_Block(Event event, const char[] name, bool dontBroadcast)
{
if(dontBroadcast)
return Plugin_Continue;
event.BroadcastDisabled = true;
static int userid, client;
if(name[7] == 't' && event.GetInt("team") && (client = GetClientOfUserId((userid = event.GetInt("userid")))))
{
Event send = CreateEvent("player_team");
send.SetInt("userid", userid);
send.FireToClient(client);
CancelCreatedEvent(send);
}
return Plugin_Changed;
}
public Action Event_Team(Event event, const char[] name, bool dontBroadcast)
{
if(dontBroadcast)
return Plugin_Continue;
event.BroadcastDisabled = true;
static int userid, client;
if(name[7] == 't' && event.GetInt("team") && (client = GetClientOfUserId((userid = event.GetInt("userid")))))
{
Event send = CreateEvent("player_team");
send.SetInt("userid", userid);
send.FireToClient(client);
CancelCreatedEvent(send);
}
switch(event.GetInt("team"))
{
case 1: PrintToChatAll("Игрок %N перешёл в Наблюдение", client);
case 2: PrintToChatAll("Игрок %N зашёл за Террористов", client);
case 3: PrintToChatAll("Игрок %N зашёл за Спецназ", client);
}
return Plugin_Changed;
}