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

SynZilla

Хороший мальчик
Сообщения
243
Реакции
68
В общем прошу сделать благо для определенного типа администраторов, которые хостят серваки на VDS, и которым нужно администрировать через консоль.

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

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

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
AlmazON, ну я не проверял код на правильность.
 

Vit_ amin

Добрая душа
Сообщения
1,551
Реакции
739
В чем проблема, найти сигнатуру и сделать ей return Plugin_Stopped (не помню как на SourcePawn) давненько не писал уже.
На Python для EventScripts это не проблема сделать.
 

nuPAT

Участник
Сообщения
163
Реакции
25
Чтобы плодить одинаковые тему пишу здесь...
Нашел код под снапшот см1.8
#pragma semicolon 1
#pragma newdecls required

#include <sourcemod>

float g_TagChangedTime[MAXPLAYERS+1];

public
void OnClientConnected(int client)
{
g_TagChangedTime[client] = 0.0;
}

public
Action OnClientCommandKeyValues(int client, KeyValues kv)
{
char sCmd[64];

if (
kv.GetSectionName(sCmd, sizeof(sCmd)) && StrEqual(sCmd, "ClanTagChanged", false))
{
if (
g_TagChangedTime[client] && GetGameTime() - g_TagChangedTime[client] <= 60.0)
return
Plugin_Handled;

g_TagChangedTime[client] = GetGameTime();
}

return
Plugin_Continue;
}
Пишут, что он не должен работать под более младшими версиями, но у меня работает, так пользуйтесь.
 

Rostov114

Участник
Сообщения
3
Реакции
1
Держи!

C-подобный:
#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. В "полях" плагин не сильно тестировался, так что, тестируйте.
 

DuuuHxGOD

Участник
Сообщения
28
Реакции
8
Держи!

C-подобный:
#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. В "полях" плагин не сильно тестировался, так что, тестируйте.
а можно готовый плагин?
 
Сверху Снизу