Информация
Плагин sourcemod для cs:go и cs:s запрещает менять игрокам ник.
Функции плагина:
Блокировать смену ника, либо кикать, либо банить
Разрешать админам менять ник только с определенными правами
Можно для бана и кика сделать предупреждение
Сообщать всем игрокам кроме того кто меняет ник
Настройки:
Код: Выбрать все
// Если "-2" то блокирует смену ника.
// Если "-1" то кикает
// Если больше то бан в минутах, 0 - навсегда
sm_ncn_ban "-1"
// Сообщать в чате всем о блокировке ника, кроме того кто меняет ник
sm_ncn_message "1"
// Сколько попыток дается на блокировку ника до кика или бана игрока(0 - Сразу)
sm_ncn_how_attempt "3"
//Какие админ-права разрешает сменять ник
sm_ncn_сhange_admin_flags "ab"
Установка:
Скомпилировать при необходимости
Раскидать файлы плагина sourcemod по папкам
Исходный код
Код: Выбрать все
#pragma semicolon 1
#include <sourcemod>
#include <admin>
public Plugin:myinfo =
{
name = "No Change Name"
, author = "acik"
, version = "1.5.1"
};
new
Handle:hBan
, iBan
, Handle:hMessagePlugin
, bool:bMessagePlugin
, Handle:hHowAttempts
, iHowAttempts
, Handle:hFlags
, String:sFlags[16]
, bool:bFlags
, bool:EnableAttempts
, Attempts[MAXPLAYERS + 1]
, bool:PlayerChange[MAXPLAYERS + 1]
;
public OnPluginStart()
{
hBan = CreateConVar("sm_ncn_ban", "-1", "Если \"-2\" то блокирует смену ника.\nЕсли \"-1\" то кикает\nЕсли больше то бан в минутах, 0 - навсегда", _, true, -2.0);
hMessagePlugin = CreateConVar("sm_ncn_message", "1", "Сообщать в чате всем о блокировке ника, кроме того кто меняет ник", _, true, 0.0, true, 1.0);
hHowAttempts = CreateConVar("sm_ncn_how_attempt", "3", "Сколько попыток дается на блокировку ника до кика или бана игрока(0 - Сразу)", _, true, 0.0);
hFlags = CreateConVar("sm_ncn_change_admin_flags", "ab", "Какие админ-права разрешают сменять ник");
ExecutedConfigs();
AutoExecConfig(true, "sm_NoChanceName");
HookEvent("player_changename", player_changename, EventHookMode_Pre);
}
public OnConfigsExecuted() ExecutedConfigs();
ExecutedConfigs()
{
iBan = GetConVarInt(hBan);
bMessagePlugin = GetConVarBool(hMessagePlugin);
iHowAttempts = GetConVarInt(hHowAttempts);
GetConVarString(hFlags, sFlags, 16);
decl AdminFlag:fFlagList[16];
bFlags = !StrEqual(sFlags, "none");
if (bFlags)
FlagBitsToArray(ReadFlagString(sFlags), fFlagList, sizeof(fFlagList));
if(iHowAttempts) EnableAttempts = true;
}
public OnClientPutInServer(client)
{
PlayerChange[client] = false;
Attempts[client] = 0;
}
public Action:player_changename(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
decl AdminFlag:fFlagList[16];
if(client && IsClientInGame(client) && !IsFakeClient(client))
{
if (bFlags && HasFlag(client, fFlagList)) return Plugin_Continue;
else
{
if(!PlayerChange[client])
{
decl String:Steam_Id[32], String:NickPlayer[128];
GetClientAuthString(client, Steam_Id, 32);
GetClientName(client, NickPlayer, 128);
if(iBan == -2)
{
PrintToChat(client, "Запрещенно менять ник на сервере");
if(bMessagePlugin)
{
for(new iClient = 1; iClient <= MaxClients; iClient++)
{
if(iClient == client || !IsClientInGame(iClient) || IsFakeClient(iClient)) continue;
PrintToChat(iClient, "Игрок %s (%s) пытался сменить ник", NickPlayer, Steam_Id);
}
}
return Plugin_Handled;
}
else if(iBan >= 0)
{
if(EnableAttempts)
{
if(++Attempts[client] < iHowAttempts)
{
PrintToChat(client, "Запрещенно менять ник на сервере (Попыток осталось: %i)", iHowAttempts - Attempts[client]);
return Plugin_Handled;
}
EnableAttempts = false;
return Plugin_Handled;
}
PlayerChange[client] = true;
decl String:Message[192];
if(iBan > 0)
{
new d = (iBan/1440), h = (iBan/60)%24, m = iBan%60;
new String:min[64], String:hour[64], String:day[64];
Format(min, 64, "%iдн.", d);
Format(hour, 64, "%iчас.", h);
Format(min, 64, "%iмин.", m);
Format(Message, 192, "на %s %s %s", d>0?day:"", h>0?hour:"", m>0?min:"");
}
else Format(Message, 192, "навсегда");
if(bMessagePlugin)
{
for(new iClient = 1; iClient <= MaxClients; iClient++)
{
if(iClient == client || !IsClientInGame(iClient) || IsFakeClient(iClient)) continue;
PrintToChat(iClient, "Игрок %s (%s) пытался сменить ник. Получил бан %s", NickPlayer, Steam_Id, Message);
}
}
BanClient(client, iBan, BANFLAG_AUTO, "Запрещенно менять ник на сервере. Вы забанены %s", Message);
return Plugin_Handled;
}
else if(iBan == -1)
{
if(EnableAttempts)
{
if(++Attempts[client] < iHowAttempts)
{
PrintToChat(client, "Запрещенно менять ник на сервере (Попыток осталось: %i)", iHowAttempts - Attempts[client]);
return Plugin_Handled;
}
EnableAttempts = false;
return Plugin_Handled;
}
PlayerChange[client] = true;
if(bMessagePlugin)
{
for(new iClient = 1; iClient <= MaxClients; iClient++)
{
if(iClient == client || !IsClientInGame(iClient) || IsFakeClient(iClient)) continue;
PrintToChat(iClient, "Игрок %s (%s) пытался сменить ник. Быд кикнут", NickPlayer, Steam_Id);
}
}
KickClient(client, "Запрещенно менять ник на сервере. Вы кикнуты");
return Plugin_Handled;
}
}
}
}
return Plugin_Continue;
}
bool:HasFlag(iClient, AdminFlag:fFlagList[16])
{
new iFlags = GetUserFlagBits(iClient);
if (iFlags & ADMFLAG_ROOT) return true;
else
{
for (new i = 0; i < sizeof(fFlagList); i++)
{
if (iFlags & FlagToBit(fFlagList[i])) return true;
}
return false;
}
}