Запрет смены ника / No Change Name 1.0.0

Плагины и дополнения / Plugins and add-ons

Модераторы: Dame-danners, Longipongeoos

Аватар пользователя
Longipongeoos
Сообщений: 191
Зарегистрирован: 12 апр 2017, 16:50

Запрет смены ника / No Change Name 1.0.0

Сообщение Longipongeoos » 11 ноя 2021, 17:15

Запрет смены ника / No Change Name 1.0.0
Информация
Плагин 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;
   }
}
Вложения
NoChangeName.zip
(1.92 KiB) Загружено 123 раз

Вернуться в «SourceMod»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 1 гость