Запрет смены клан-тега

Тема в разделе "Запросы", создана пользователем SynZilla, 6 окт 2015.

  1. SynZilla

    SynZilla

    Сообщения:
    107
    Симпатии:
    6
    В общем прошу сделать благо для определенного типа администраторов, которые хостят серваки на VDS, и которым нужно администрировать через консоль.

    Суть в том, чтобы игрока кикало с сервера после смены клан-тега с описанием причины.
    Для защиты от так называемого "Анимированного клан-тега", потому что консоль из-за такой фигни забивается напрочь!

    Наверно для опытного человека это строчек 10-15
    Могу отблагодарить за символическую сумму.
     
  2. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.990
  3. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.540
    Симпатии:
    1.984
    Там неправильно, недолго без ошибок проработает и кучу таймеров наделает.
     
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.990
    AlmazON, ну я не проверял код на правильность.
     
  5. Vit_ amin

    Vit_ amin BotManager001

    Сообщения:
    1.060
    Симпатии:
    345
    В чем проблема, найти сигнатуру и сделать ей return Plugin_Stopped (не помню как на SourcePawn) давненько не писал уже.
    На Python для EventScripts это не проблема сделать.
     
  6. nuPAT

    nuPAT

    Сообщения:
    113
    Симпатии:
    2
    Чтобы плодить одинаковые тему пишу здесь...
    Нашел код под снапшот см1.8
    Пишут, что он не должен работать под более младшими версиями, но у меня работает, так пользуйтесь.
     
  7. Rostov114

    Rostov114

    Сообщения:
    3
    Симпатии:
    0
    Держи!

    Код:
    #include <sourcemod>
    #include <sdktools>
    #define PLUGIN_VERSION "0.0.1-dev"
    
    //Handle
    Handle h_ctsf_kick_mode;
    Handle h_ctsf_kick_reason;
    Handle h_ctsf_changed_time;
    Handle h_ctsf_count_changed;
    
    float	clan_changed_time[MAXPLAYERS+1];
    int		clan_count_changed[MAXPLAYERS+1];
    char	kick_reason[128];
    
    public Plugin:myinfo = 
    {
    	name = "ClanTag spam fixed",
    	author = "rostov114",
    	description = "@TODO",
    	version = PLUGIN_VERSION,
    	url = "http://rostov114.ru"
    }
    
    
    public OnPluginStart()
    {
    	h_ctsf_kick_mode     = CreateConVar("ctsf_kick_mode",  "1", "1 - kick on, 0 - kick off");
    	h_ctsf_kick_reason   = CreateConVar("ctsf_kick_reason",  "ClanTag spamed", "Kick reason");
    	h_ctsf_changed_time  = CreateConVar("ctsf_changed_time", "60.0", "");
    	h_ctsf_count_changed = CreateConVar("ctsf_count_changed", "10", "");
    
    	GetConVarString(h_ctsf_kick_reason, kick_reason, sizeof(kick_reason))
    }
    
    public void OnClientConnected(int client) 
    { 
        clan_changed_time[client]	= 0.0;
    	clan_count_changed[client]	= 0;		
    }
    
    public Action OnClientCommandKeyValues(int client, KeyValues kv) 
    {
    	char cmd[64]; 
    
    	if (kv.GetSectionName(cmd, sizeof(cmd)) && StrEqual(cmd, "ClanTagChanged", false)) 
    	{ 
    		if (clan_changed_time[client] && GetGameTime() - clan_changed_time[client] <= GetConVarFloat(h_ctsf_changed_time)) 
    		{
    			if (GetConVarBool(h_ctsf_kick_mode) == true)
    			{
    				if (clan_count_changed[client] < GetConVarInt(h_ctsf_count_changed))
    				{
    					clan_count_changed[client]++;
    					
    					return Plugin_Continue; 
    				}
    				
    				KickClient(client, kick_reason);
    			}
    					
    			return Plugin_Handled;
    		}
    		
    		clan_count_changed[client]	= 0;
    		clan_changed_time[client] 	= GetGameTime(); 
    	}
    	
        return Plugin_Continue; 
    }
    
    Квары:

    ctsf_kick_mode - 1 - кикает, 0 - не кикает ( просто запрещает смену клантега )
    ctsf_kick_reason - причина кика
    ctsf_changed_time - отслеживаемое время ( при ctsf_kick_mode = 0 означает через какое время плагин даст сменить клантег, при ctsf_kick_mode = 1 - время отслеживания )
    ctsf_count_changed - количество смен клан тега за время ctsf_changed_time, после которого игрока кикнет.

    ----

    Совет, при ctsf_kick_mode = 1, ctsf_count_changed должна быть больше 3 т.к. при подключении легитимного игрока клиент посылает как минимум 3 запроса на установку клантега который улавливает плагин.

    P.P.S. В "полях" плагин не сильно тестировался, так что, тестируйте.