Status Protect

R1KO

fuck society
Сообщения
9,458
Реакции
7,789
  • Команда форума
  • #2
Компилится.
 

Вложения

  • status_protect.sp
    7.4 КБ · Просмотры: 333
  • Мне нравится
Реакции: TWRP

TWRP

Участник
Сообщения
317
Реакции
44
Спасибо пошел тестить.
Через час отпишусь, реквизиты кинь в лс, оплачу :)

Добавлено через 5 минут
работает )))
 
Последнее редактирование:

xados

Участник
Сообщения
316
Реакции
32
для кс го такое тоже пойдет?
 

TWRP

Участник
Сообщения
317
Реакции
44
для кс го такое тоже пойдет?

хз он на css как автор писал и то только на v34
но проверив на css v84 (ob) то он работает, пробовал сам командой status и ping сервер спамить то меня сразу же кикает, в smac есть модуль о командах но я добавлял но все равно не пашит, да и если б работал в смаке то он напросто блочил, а это что надо.

P.S. Если есть такие скрипты на v34 то есть и на OB

Добавлено через 12 минут
RIKO можешь еще подправить чтобы заголовок тоже отображался игрокам не только админам

HTML:
ForStatusCmd(client)
{
	PrintToConsole(client, "# UserID Name                             SteamID                IP Adress                   Ping");
	new i = 1;
	while (i <= MaxClients)
	{
		if (IsClientInGame(i) && !IsFakeClient(i))
		{
			DisplayStatusInfo(client, i);
		}
		i++;
	}
	return 0;
}
 
Последнее редактирование:

TWRP

Участник
Сообщения
317
Реакции
44
TWRP, какой заголовок?

Как отображает админам в консоль
http://hostingkartinok.com/show-image.php?id=0ff6d0ec0fc12c487ce6fa77d4d70de1

Как отображет обычному игроку
http://hostingkartinok.com/show-image.php?id=470113510d5b867fe7f60592c3c30516

Видишь нету заголовка Name SteamID IP Adress Ping это когда игроку выводится, а когда админу то отображет.

Вроде и херня но хотелось бы исправить :-D :blush2:
 

R1KO

fuck society
Сообщения
9,458
Реакции
7,789
  • Команда форума
  • #8
изначально должно быть одинаково. Попробуй так:
PHP:
new Handle:g_hCvarCmdSpam;
new Handle:g_hCmds;
new Handle:g_hCvarShowStatus;
new Handle:g_hCvarShowPing;
new g_iCmdCount[66];
new g_iCmdSpam = 4;
new g_iShowStatus;
new bool:g_bShowPing;

public Plugin:myinfo =
{
	name = "Status Protect",
	description = "Status Protect",
	author = "GoDtm666",
	version = "1.0.0",
	url = "http://www.myarena.ru/"
};

public OnPluginStart()
{
	g_hCvarCmdSpam = CreateConVar("sm_antispam_statusping", "4", "Сколько раз разрешить игрокам ввести status и ping в 1 секунду.", 262144, true, 2.0, true, 10.0);
	g_iCmdSpam = GetConVarInt(g_hCvarCmdSpam);
	HookConVarChange(g_hCvarCmdSpam, CmdSpam_OnSettingsChanged);
	g_hCvarShowStatus = CreateConVar("sm_show_status", "1", "Показывать Status: (0 всем, 1 Админам, 2 Только свой Status).", 262144, true, 0.0, true, 2.0);
	g_iShowStatus = GetConVarInt(g_hCvarShowStatus);
	HookConVarChange(g_hCvarShowStatus, ShowStatus_OnSettingsChanged);
	g_hCvarShowPing = CreateConVar("sm_show_ping", "1", "Ping: (0 Не показывать, 1 Показывать).", 262144, true, 0.0, true, 1.0);
	g_bShowPing = GetConVarBool(g_hCvarShowPing);
	HookConVarChange(g_hCvarShowPing, ShowPing_OnSettingsChanged);
	RegConsoleCmd("status", StatusCmd);
	RegConsoleCmd("ping", PingCmd);
	g_hCmds = CreateTrie();
	SetTrieValue(g_hCmds, "status", 1, true);
	SetTrieValue(g_hCmds, "ping", 1, true);
	AddCommandListener(Commands_CommandListener);
	CreateTimer(1.0, Timer_CountReset, _, 1);
	LoadTranslations("common.phrases");
}

public CmdSpam_OnSettingsChanged(Handle:convar, String:oldValue[], String:newValue[])
{
	g_iCmdSpam = GetConVarInt(convar);
}

public ShowStatus_OnSettingsChanged(Handle:convar, String:oldValue[], String:newValue[])
{
	g_iShowStatus = GetConVarInt(convar);
}

public ShowPing_OnSettingsChanged(Handle:convar, String:oldValue[], String:newValue[])
{
	g_bShowPing = GetConVarBool(convar);
}

public OnAllPluginsLoaded()
{
	AutoExecConfig(true, "status_protect", "sourcemod");
	PrintToServer("%s %s has been loaded successfully.", "Status Protect", "1.0.0");
}

public Action:StatusCmd(client, args)
{
	switch (g_iShowStatus)
	{
		case 0:
		{
			DisplayStatus(client);
			ForStatusCmd(client);
		}
		case 1:
		{
			if (CheckCommandAccess(client, "admin_notices", 2, false))
			{
				if (GetCmdReplySource() == SM_REPLY_TO_CHAT)
				{
					ReplyToCommand(client, "[SM] %t", "See console for output");
				}

				DisplayStatus(client);
				ForStatusCmd(client);
			}
		}
		case 2:
		{
			if (GetCmdReplySource() == SM_REPLY_TO_CHAT)
			{
				ReplyToCommand(client, "[SM] %t", "See console for output");
			}
			
			DisplayStatus(client);
			if (CheckCommandAccess(client, "admin_notices", 2, false))
			{
				ForStatusCmd(client);
			}
			else
			{
				DisplayStatusInfo(client, client);
			}
		}
	}

	return Plugin_Handled;
}

ForStatusCmd(client)
{
	PrintToConsole(client, "# userid name                             uniqueid               ip-address                   ping");
	for(new i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i) && !IsFakeClient(i))
		{
			DisplayStatusInfo(client, i);
		}
	}
}

DisplayStatus(client)
{
	new g_iClientInServer;
	decl String:g_sHostName[512];
	decl Handle:g_hHostIp;
	decl Handle:g_hHostPort;
	decl g_iHostIp;
	decl String:g_sServerIpHost[32];
	decl String:g_sServerPort[128];
	decl String:g_sCurrentMap[256];
	decl Handle:g_hHostName;
	decl String:g_ServerTime[64];
	decl Handle:g_hNextMap;
	decl String:g_sNextmap[256];
	g_hHostIp = FindConVar("hostip");
	g_hHostPort = FindConVar("hostport");
	g_iHostIp = GetConVarInt(g_hHostIp);
	GetConVarString(g_hHostPort, g_sServerPort, 128);
	FormatEx(g_sServerIpHost, 32, "%u.%u.%u.%u:%s", g_iHostIp >>> 24 & 255, g_iHostIp >>> 16 & 255, g_iHostIp >>> 8 & 255, g_iHostIp & 255, g_sServerPort);
	GetCurrentMap(g_sCurrentMap, 256);
	g_hNextMap = FindConVar("sm_nextmap");
	GetConVarString(g_hNextMap, g_sNextmap, 256);
	for(new i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i))
		{
			g_iClientInServer++;
		}
	}

	g_hHostName = FindConVar("hostname");
	GetConVarString(g_hHostName, g_sHostName, 512);
	FormatTime(g_ServerTime, 64, NULL_STRING, -1);
	PrintToConsole(client, "hostname: %s", g_sHostName);
	PrintToConsole(client, "udp/ip  : %s", g_sServerIpHost);
	PrintToConsole(client, "map     : %s", g_sCurrentMap);
	if (!StrEqual(g_sNextmap, "", false))
	{
		PrintToConsole(client, "next map: %s", g_sNextmap);
	}
	PrintToConsole(client, "players : %d (%d max)", g_iClientInServer, MaxClients);
	PrintToConsole(client, "the time: %s\n", g_ServerTime);
}

DisplayStatusInfo(client, i)
{
	decl String:g_sName[32];
	decl String:g_sAuthID[32];
	decl String:g_sIP[28];
	decl g_iLatency;
	decl g_iUserID;
	if (!GetClientName(i, g_sName, 32))
	{
		strcopy(g_sName, 32, "Unknown");
	}
	if (!GetClientAuthString(i, g_sAuthID, 32))
	{
		strcopy(g_sAuthID, 32, "Unknown");
	}
	if (!GetClientIP(i, g_sIP, 28, false))
	{
		strcopy(g_sIP, 28, "Unknown");
	}
	g_iLatency = RoundToNearest(GetClientAvgLatency(i, NetFlow:0) * 1000.0);
	g_iUserID = GetClientUserId(i);
	PrintToConsole(client, "# %-6.6i %-32.31s %-22.29s %-28.29s %-4.5i", g_iUserID, g_sName, g_sAuthID, g_sIP, g_iLatency);
}

public Action:Commands_CommandListener(client, String:command[], argc)
{
	if (!client)
	{
		return Plugin_Continue;
	}
	if (IsClientConnected(client) && IsFakeClient(client))
	{
		return Plugin_Continue;
	}
	if (!IsClientInGame(client))
	{
		return Plugin_Stop;
	}
	decl bool:f_bBan;
	decl String:f_sCmd[64];
	strcopy(f_sCmd, 64, command);
	StringToLower(f_sCmd);
	if (g_iCmdSpam && GetTrieValue(g_hCmds, f_sCmd, f_bBan) && ++g_iCmdCount[client] > g_iCmdSpam)
	{
		if (!IsClientInKickQueue(client))
		{
			KickClient(client, "Спам командами status, ping запрещен!");
		}
		return Plugin_Stop;
	}

	return Plugin_Continue;
}

public Action:PingCmd(client, args)
{
	if (g_bShowPing)
	{
		if (GetCmdReplySource() == SM_REPLY_TO_CHAT)
		{
			ReplyToCommand(client, "[SM] %t", "See console for output");
		}
		PrintToConsole(client, "Client ping times:");
		for(new i = 1; i <= MaxClients; ++i)
		{
			if (IsClientInGame(i) && !IsFakeClient(i))
			{
				decl String:g_sName[32];
				decl g_iLatency;
				GetClientName(i, g_sName, 32);
				g_iLatency = RoundToNearest(GetClientAvgLatency(i, NetFlow:0) * 1000.0);
				PrintToConsole(client, "%i ms : %s", g_iLatency, g_sName);
			}
		}
		
	}
	return Plugin_Handled;
}

public Action:Timer_CountReset(Handle:timer, any:args)
{
	for(new i = 1; i <= MaxClients; ++i)
	{
		g_iCmdCount[i] = 0;
	}

	return Plugin_Continue;
}

StringToLower(String:f_sInput[])
{
	new f_iSize = strlen(f_sInput);
	new i;
	while (i < f_iSize)
	{
		f_sInput[i] = CharToLower(f_sInput[i]);
		i++;
	}
}
 
  • Мне нравится
Реакции: TWRP

R1KO

fuck society
Сообщения
9,458
Реакции
7,789
  • Команда форума
  • #10
TWRP, зато код почистил)
 
  • Мне нравится
Реакции: TWRP

R1KO

fuck society
Сообщения
9,458
Реакции
7,789
  • Команда форума
  • #12
TWRP, я щас не соображаю
 

R1KO

fuck society
Сообщения
9,458
Реакции
7,789
  • Команда форума
  • #14
TWRP, вот
PHP:
new Handle:g_hCvarCmdSpam;
new Handle:g_hCmds;
new Handle:g_hCvarShowStatus;
new Handle:g_hCvarShowPing;
new g_iCmdCount[66];
new g_iCmdSpam = 4;
new g_iShowStatus;
new bool:g_bShowPing;

public Plugin:myinfo =
{
	name = "Status Protect",
	description = "Status Protect",
	author = "GoDtm666",
	version = "1.0.0",
	url = "http://www.myarena.ru/"
};

public OnPluginStart()
{
	g_hCvarCmdSpam = CreateConVar("sm_antispam_statusping", "4", "Сколько раз разрешить игрокам ввести status и ping в 1 секунду.", 262144, true, 2.0, true, 10.0);
	g_iCmdSpam = GetConVarInt(g_hCvarCmdSpam);
	HookConVarChange(g_hCvarCmdSpam, CmdSpam_OnSettingsChanged);
	g_hCvarShowStatus = CreateConVar("sm_show_status", "1", "Показывать Status: (0 всем, 1 Админам, 2 Только свой Status).", 262144, true, 0.0, true, 2.0);
	g_iShowStatus = GetConVarInt(g_hCvarShowStatus);
	HookConVarChange(g_hCvarShowStatus, ShowStatus_OnSettingsChanged);
	g_hCvarShowPing = CreateConVar("sm_show_ping", "1", "Ping: (0 Не показывать, 1 Показывать).", 262144, true, 0.0, true, 1.0);
	g_bShowPing = GetConVarBool(g_hCvarShowPing);
	HookConVarChange(g_hCvarShowPing, ShowPing_OnSettingsChanged);
	RegConsoleCmd("status", StatusCmd);
	RegConsoleCmd("ping", PingCmd);
	g_hCmds = CreateTrie();
	SetTrieValue(g_hCmds, "status", 1, true);
	SetTrieValue(g_hCmds, "ping", 1, true);
	AddCommandListener(Commands_CommandListener);
	CreateTimer(1.0, Timer_CountReset, _, 1);
	LoadTranslations("common.phrases");
}

public CmdSpam_OnSettingsChanged(Handle:convar, String:oldValue[], String:newValue[])
{
	g_iCmdSpam = GetConVarInt(convar);
}

public ShowStatus_OnSettingsChanged(Handle:convar, String:oldValue[], String:newValue[])
{
	g_iShowStatus = GetConVarInt(convar);
}

public ShowPing_OnSettingsChanged(Handle:convar, String:oldValue[], String:newValue[])
{
	g_bShowPing = GetConVarBool(convar);
}

public OnAllPluginsLoaded()
{
	AutoExecConfig(true, "status_protect", "sourcemod");
	PrintToServer("%s %s has been loaded successfully.", "Status Protect", "1.0.0");
}

public Action:StatusCmd(client, args)
{
	switch (g_iShowStatus)
	{
		case 0:
		{
			DisplayStatus(client);
			ForStatusCmd(client);
		}
		case 1:
		{
			if (CheckCommandAccess(client, "admin_notices", 2, false))
			{
				if (GetCmdReplySource() == SM_REPLY_TO_CHAT)
				{
					ReplyToCommand(client, "[SM] %t", "See console for output");
				}

				DisplayStatus(client);
				ForStatusCmd(client);
			}
		}
		case 2:
		{
			if (GetCmdReplySource() == SM_REPLY_TO_CHAT)
			{
				ReplyToCommand(client, "[SM] %t", "See console for output");
			}
			
			DisplayStatus(client);
			if (CheckCommandAccess(client, "admin_notices", 2, false))
			{
				ForStatusCmd(client);
			}
			else
			{
				PrintToConsole(client, "# userid name                             uniqueid               ip-address                   ping");
				DisplayStatusInfo(client, client);
			}
		}
	}

	return Plugin_Handled;
}

ForStatusCmd(client)
{
	PrintToConsole(client, "# userid name                             uniqueid               ip-address                   ping");
	for(new i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i) && !IsFakeClient(i))
		{
			DisplayStatusInfo(client, i);
		}
	}
}

DisplayStatus(client)
{
	new g_iClientInServer;
	decl String:g_sHostName[512];
	decl Handle:g_hHostIp;
	decl Handle:g_hHostPort;
	decl g_iHostIp;
	decl String:g_sServerIpHost[32];
	decl String:g_sServerPort[128];
	decl String:g_sCurrentMap[256];
	decl Handle:g_hHostName;
	decl String:g_ServerTime[64];
	decl Handle:g_hNextMap;
	decl String:g_sNextmap[256];
	g_hHostIp = FindConVar("hostip");
	g_hHostPort = FindConVar("hostport");
	g_iHostIp = GetConVarInt(g_hHostIp);
	GetConVarString(g_hHostPort, g_sServerPort, 128);
	FormatEx(g_sServerIpHost, 32, "%u.%u.%u.%u:%s", g_iHostIp >>> 24 & 255, g_iHostIp >>> 16 & 255, g_iHostIp >>> 8 & 255, g_iHostIp & 255, g_sServerPort);
	GetCurrentMap(g_sCurrentMap, 256);
	g_hNextMap = FindConVar("sm_nextmap");
	GetConVarString(g_hNextMap, g_sNextmap, 256);
	for(new i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i))
		{
			g_iClientInServer++;
		}
	}

	g_hHostName = FindConVar("hostname");
	GetConVarString(g_hHostName, g_sHostName, 512);
	FormatTime(g_ServerTime, 64, NULL_STRING, -1);
	PrintToConsole(client, "hostname: %s", g_sHostName);
	PrintToConsole(client, "udp/ip  : %s", g_sServerIpHost);
	PrintToConsole(client, "map     : %s", g_sCurrentMap);
	if (!StrEqual(g_sNextmap, "", false))
	{
		PrintToConsole(client, "next map: %s", g_sNextmap);
	}
	PrintToConsole(client, "players : %d (%d max)", g_iClientInServer, MaxClients);
	PrintToConsole(client, "the time: %s\n", g_ServerTime);
}

DisplayStatusInfo(client, i)
{
	decl String:g_sName[32];
	decl String:g_sAuthID[32];
	decl String:g_sIP[28];
	decl g_iLatency;
	decl g_iUserID;
	if (!GetClientName(i, g_sName, 32))
	{
		strcopy(g_sName, 32, "Unknown");
	}
	if (!GetClientAuthString(i, g_sAuthID, 32))
	{
		strcopy(g_sAuthID, 32, "Unknown");
	}
	if (!GetClientIP(i, g_sIP, 28, false))
	{
		strcopy(g_sIP, 28, "Unknown");
	}
	g_iLatency = RoundToNearest(GetClientAvgLatency(i, NetFlow:0) * 1000.0);
	g_iUserID = GetClientUserId(i);
	PrintToConsole(client, "# %-6.6i %-32.31s %-22.29s %-28.29s %-4.5i", g_iUserID, g_sName, g_sAuthID, g_sIP, g_iLatency);
}

public Action:Commands_CommandListener(client, String:command[], argc)
{
	if (!client)
	{
		return Plugin_Continue;
	}
	if (IsClientConnected(client) && IsFakeClient(client))
	{
		return Plugin_Continue;
	}
	if (!IsClientInGame(client))
	{
		return Plugin_Stop;
	}
	decl bool:f_bBan;
	decl String:f_sCmd[64];
	strcopy(f_sCmd, 64, command);
	StringToLower(f_sCmd);
	if (g_iCmdSpam && GetTrieValue(g_hCmds, f_sCmd, f_bBan) && ++g_iCmdCount[client] > g_iCmdSpam)
	{
		if (!IsClientInKickQueue(client))
		{
			KickClient(client, "Спам командами status, ping запрещен!");
		}
		return Plugin_Stop;
	}

	return Plugin_Continue;
}

public Action:PingCmd(client, args)
{
	if (g_bShowPing)
	{
		if (GetCmdReplySource() == SM_REPLY_TO_CHAT)
		{
			ReplyToCommand(client, "[SM] %t", "See console for output");
		}
		PrintToConsole(client, "Client ping times:");
		for(new i = 1; i <= MaxClients; ++i)
		{
			if (IsClientInGame(i) && !IsFakeClient(i))
			{
				decl String:g_sName[32];
				decl g_iLatency;
				GetClientName(i, g_sName, 32);
				g_iLatency = RoundToNearest(GetClientAvgLatency(i, NetFlow:0) * 1000.0);
				PrintToConsole(client, "%i ms : %s", g_iLatency, g_sName);
			}
		}
		
	}
	return Plugin_Handled;
}

public Action:Timer_CountReset(Handle:timer, any:args)
{
	for(new i = 1; i <= MaxClients; ++i)
	{
		g_iCmdCount[i] = 0;
	}

	return Plugin_Continue;
}

StringToLower(String:f_sInput[])
{
	new f_iSize = strlen(f_sInput);
	new i;
	while (i < f_iSize)
	{
		f_sInput[i] = CharToLower(f_sInput[i]);
		i++;
	}
}
 

TWRP

Участник
Сообщения
317
Реакции
44
TWRP, вот
PHP:
new Handle:g_hCvarCmdSpam;
new Handle:g_hCmds;
new Handle:g_hCvarShowStatus;
new Handle:g_hCvarShowPing;
new g_iCmdCount[66];
new g_iCmdSpam = 4;
new g_iShowStatus;
new bool:g_bShowPing;

public Plugin:myinfo =
{
	name = "Status Protect",
	description = "Status Protect",
	author = "GoDtm666",
	version = "1.0.0",
	url = "http://www.myarena.ru/"
};

public OnPluginStart()
{
	g_hCvarCmdSpam = CreateConVar("sm_antispam_statusping", "4", "Сколько раз разрешить игрокам ввести status и ping в 1 секунду.", 262144, true, 2.0, true, 10.0);
	g_iCmdSpam = GetConVarInt(g_hCvarCmdSpam);
	HookConVarChange(g_hCvarCmdSpam, CmdSpam_OnSettingsChanged);
	g_hCvarShowStatus = CreateConVar("sm_show_status", "1", "Показывать Status: (0 всем, 1 Админам, 2 Только свой Status).", 262144, true, 0.0, true, 2.0);
	g_iShowStatus = GetConVarInt(g_hCvarShowStatus);
	HookConVarChange(g_hCvarShowStatus, ShowStatus_OnSettingsChanged);
	g_hCvarShowPing = CreateConVar("sm_show_ping", "1", "Ping: (0 Не показывать, 1 Показывать).", 262144, true, 0.0, true, 1.0);
	g_bShowPing = GetConVarBool(g_hCvarShowPing);
	HookConVarChange(g_hCvarShowPing, ShowPing_OnSettingsChanged);
	RegConsoleCmd("status", StatusCmd);
	RegConsoleCmd("ping", PingCmd);
	g_hCmds = CreateTrie();
	SetTrieValue(g_hCmds, "status", 1, true);
	SetTrieValue(g_hCmds, "ping", 1, true);
	AddCommandListener(Commands_CommandListener);
	CreateTimer(1.0, Timer_CountReset, _, 1);
	LoadTranslations("common.phrases");
}

public CmdSpam_OnSettingsChanged(Handle:convar, String:oldValue[], String:newValue[])
{
	g_iCmdSpam = GetConVarInt(convar);
}

public ShowStatus_OnSettingsChanged(Handle:convar, String:oldValue[], String:newValue[])
{
	g_iShowStatus = GetConVarInt(convar);
}

public ShowPing_OnSettingsChanged(Handle:convar, String:oldValue[], String:newValue[])
{
	g_bShowPing = GetConVarBool(convar);
}

public OnAllPluginsLoaded()
{
	AutoExecConfig(true, "status_protect", "sourcemod");
	PrintToServer("%s %s has been loaded successfully.", "Status Protect", "1.0.0");
}

public Action:StatusCmd(client, args)
{
	switch (g_iShowStatus)
	{
		case 0:
		{
			DisplayStatus(client);
			ForStatusCmd(client);
		}
		case 1:
		{
			if (CheckCommandAccess(client, "admin_notices", 2, false))
			{
				if (GetCmdReplySource() == SM_REPLY_TO_CHAT)
				{
					ReplyToCommand(client, "[SM] %t", "See console for output");
				}

				DisplayStatus(client);
				ForStatusCmd(client);
			}
		}
		case 2:
		{
			if (GetCmdReplySource() == SM_REPLY_TO_CHAT)
			{
				ReplyToCommand(client, "[SM] %t", "See console for output");
			}
			
			DisplayStatus(client);
			if (CheckCommandAccess(client, "admin_notices", 2, false))
			{
				ForStatusCmd(client);
			}
			else
			{
				PrintToConsole(client, "# userid name                             uniqueid               ip-address                   ping");
				DisplayStatusInfo(client, client);
			}
		}
	}

	return Plugin_Handled;
}

ForStatusCmd(client)
{
	PrintToConsole(client, "# userid name                             uniqueid               ip-address                   ping");
	for(new i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i) && !IsFakeClient(i))
		{
			DisplayStatusInfo(client, i);
		}
	}
}

DisplayStatus(client)
{
	new g_iClientInServer;
	decl String:g_sHostName[512];
	decl Handle:g_hHostIp;
	decl Handle:g_hHostPort;
	decl g_iHostIp;
	decl String:g_sServerIpHost[32];
	decl String:g_sServerPort[128];
	decl String:g_sCurrentMap[256];
	decl Handle:g_hHostName;
	decl String:g_ServerTime[64];
	decl Handle:g_hNextMap;
	decl String:g_sNextmap[256];
	g_hHostIp = FindConVar("hostip");
	g_hHostPort = FindConVar("hostport");
	g_iHostIp = GetConVarInt(g_hHostIp);
	GetConVarString(g_hHostPort, g_sServerPort, 128);
	FormatEx(g_sServerIpHost, 32, "%u.%u.%u.%u:%s", g_iHostIp >>> 24 & 255, g_iHostIp >>> 16 & 255, g_iHostIp >>> 8 & 255, g_iHostIp & 255, g_sServerPort);
	GetCurrentMap(g_sCurrentMap, 256);
	g_hNextMap = FindConVar("sm_nextmap");
	GetConVarString(g_hNextMap, g_sNextmap, 256);
	for(new i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i))
		{
			g_iClientInServer++;
		}
	}

	g_hHostName = FindConVar("hostname");
	GetConVarString(g_hHostName, g_sHostName, 512);
	FormatTime(g_ServerTime, 64, NULL_STRING, -1);
	PrintToConsole(client, "hostname: %s", g_sHostName);
	PrintToConsole(client, "udp/ip  : %s", g_sServerIpHost);
	PrintToConsole(client, "map     : %s", g_sCurrentMap);
	if (!StrEqual(g_sNextmap, "", false))
	{
		PrintToConsole(client, "next map: %s", g_sNextmap);
	}
	PrintToConsole(client, "players : %d (%d max)", g_iClientInServer, MaxClients);
	PrintToConsole(client, "the time: %s\n", g_ServerTime);
}

DisplayStatusInfo(client, i)
{
	decl String:g_sName[32];
	decl String:g_sAuthID[32];
	decl String:g_sIP[28];
	decl g_iLatency;
	decl g_iUserID;
	if (!GetClientName(i, g_sName, 32))
	{
		strcopy(g_sName, 32, "Unknown");
	}
	if (!GetClientAuthString(i, g_sAuthID, 32))
	{
		strcopy(g_sAuthID, 32, "Unknown");
	}
	if (!GetClientIP(i, g_sIP, 28, false))
	{
		strcopy(g_sIP, 28, "Unknown");
	}
	g_iLatency = RoundToNearest(GetClientAvgLatency(i, NetFlow:0) * 1000.0);
	g_iUserID = GetClientUserId(i);
	PrintToConsole(client, "# %-6.6i %-32.31s %-22.29s %-28.29s %-4.5i", g_iUserID, g_sName, g_sAuthID, g_sIP, g_iLatency);
}

public Action:Commands_CommandListener(client, String:command[], argc)
{
	if (!client)
	{
		return Plugin_Continue;
	}
	if (IsClientConnected(client) && IsFakeClient(client))
	{
		return Plugin_Continue;
	}
	if (!IsClientInGame(client))
	{
		return Plugin_Stop;
	}
	decl bool:f_bBan;
	decl String:f_sCmd[64];
	strcopy(f_sCmd, 64, command);
	StringToLower(f_sCmd);
	if (g_iCmdSpam && GetTrieValue(g_hCmds, f_sCmd, f_bBan) && ++g_iCmdCount[client] > g_iCmdSpam)
	{
		if (!IsClientInKickQueue(client))
		{
			KickClient(client, "Спам командами status, ping запрещен!");
		}
		return Plugin_Stop;
	}

	return Plugin_Continue;
}

public Action:PingCmd(client, args)
{
	if (g_bShowPing)
	{
		if (GetCmdReplySource() == SM_REPLY_TO_CHAT)
		{
			ReplyToCommand(client, "[SM] %t", "See console for output");
		}
		PrintToConsole(client, "Client ping times:");
		for(new i = 1; i <= MaxClients; ++i)
		{
			if (IsClientInGame(i) && !IsFakeClient(i))
			{
				decl String:g_sName[32];
				decl g_iLatency;
				GetClientName(i, g_sName, 32);
				g_iLatency = RoundToNearest(GetClientAvgLatency(i, NetFlow:0) * 1000.0);
				PrintToConsole(client, "%i ms : %s", g_iLatency, g_sName);
			}
		}
		
	}
	return Plugin_Handled;
}

public Action:Timer_CountReset(Handle:timer, any:args)
{
	for(new i = 1; i <= MaxClients; ++i)
	{
		g_iCmdCount[i] = 0;
	}

	return Plugin_Continue;
}

StringToLower(String:f_sInput[])
{
	new f_iSize = strlen(f_sInput);
	new i;
	while (i < f_iSize)
	{
		f_sInput[i] = CharToLower(f_sInput[i]);
		i++;
	}
}

спасибо :good:
 

GoDtm666

Участник
Сообщения
581
Реакции
596
Толку от этого?, когда плагин это всего лишь 30% проверки/работы.
 

AZA

/reset
Сообщения
883
Реакции
162
GoDtm666, Так сделай на все 100% и продавай за 30к деревянных:-D
 

GoDtm666

Участник
Сообщения
581
Реакции
596
Он был на 100% рабочим, пока модеры не прикрыли лавочку с темой :)
 

TWRP

Участник
Сообщения
317
Реакции
44
кстати он блокирует соурсбанс
с соурсбанса нельзя игрока кикнуть, пишет мол игрок покинул сервер, а на самом деле он на сервере. Выгрузив плаг все стает норм :)
 

R1KO

fuck society
Сообщения
9,458
Реакции
7,789
  • Команда форума
  • #20
GoDtm666, потому что автор не следил за ней. Ссылки уже не работали.
 
Сверху Снизу