Преработка на Afk & High ping Kicker

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
Nine Finger's
Извън линия
Потребител
Потребител
Мнения: 112
Регистриран на: 13 Фев 2018, 20:45
Местоположение: Майна town
Се отблагодари: 40 пъти
Получена благодарност: 6 пъти

Преработка на Afk & High ping Kicker

Мнение от Nine Finger's » 31 Мар 2018, 23:40

Желая да се преработи плъгина и да остане само High ping Kickerа, другите неща неми трябват за момента.
Ето ви и плъгина:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <cstrike>
#include <engine>
#include <WPMGPrintChatColor>

#define VERSION "1.2a"

#define KICK_IMMUNITY ADMIN_IMMUNITY

enum _:iPunishments
{
	KICK = 1,
	REDIRECT
}

new p_iMaxPing, p_flMaxAfkTime, p_flMaxSpecTime, p_iPingCheckTime, p_iPunishWay, 
p_szRedirectIP, p_bChatMessages, g_iMaxPlayers;
new iPingChecks[33], iUserTotalPing[33], Float:flUserAfkTime[33], bool:blPrintedWarn[33];

new const g_iCheckButtons = ( IN_ATTACK | IN_JUMP | IN_DUCK | IN_FORWARD | IN_BACK | IN_USE | IN_CANCEL | IN_LEFT | IN_RIGHT | IN_MOVELEFT | IN_MOVERIGHT | IN_ATTACK2 | IN_RUN | IN_RELOAD | IN_ALT1 | IN_SCORE );

new const szCheckerClass[] = "kick_manager_checker";

public plugin_init()
{
	register_plugin("Afk & High ping Kicker", VERSION, "TheRedShoko @ AMXX-BG.Info");
	register_cvar("afk_hp_kicker", VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED);
	
	p_iMaxPing = register_cvar("kick_manager_maxping", "120");
	p_flMaxAfkTime = register_cvar("kick_manager_afktime", "90.0");
	p_flMaxSpecTime = register_cvar("kick_manager_spectime", "30.0");
	p_iPingCheckTime = register_cvar("kick_manager_pingtime", "5");
	p_iPunishWay = register_cvar("kick_manager_punish", "1");
	p_szRedirectIP = register_cvar("kick_manager_redirectip", "127.0.0.1:27015");
	p_bChatMessages = register_cvar("kick_manager_chatmessages", "1");

	new iEnt = create_entity("info_target");
	
	if (iEnt)
	{
		register_think(szCheckerClass, "CheckUsersStatus");
		
		entity_set_string(iEnt, EV_SZ_classname, szCheckerClass);
		entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 0.1);
	}
	
	g_iMaxPlayers = get_maxplayers();
}

public client_putinserver(id)
{
	ClearVariables(id);

	if (get_pcvar_num(p_bChatMessages))
	{
		set_task(2.0, "ShowMessages", id);
	}
}

public ShowMessages(id)
{
	new szPunishment[32];
	GetPunishmentString(get_pcvar_num(p_iPunishWay), szPunishment, charsmax(szPunishment));

	PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[!tHighPingKicker!g]!y Players with ping higher than!t %d!y will be %s!", get_pcvar_num(p_iMaxPing), szPunishment);
	PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[!tAFKKicker!g]!y Player who are being AFK for more than!t %.0f!y will be %s", get_pcvar_num(p_flMaxAfkTime), szPunishment);
}

public CheckUsersStatus(iEnt)
{
	if (!is_valid_ent(iEnt)) return;
	
	static iUserPing, iUserLoss;
	
	static Float:flMaxAfkTime;
	flMaxAfkTime = get_pcvar_float(p_flMaxAfkTime);
	
	static Float:flMaxSpecTime;
	flMaxSpecTime = get_pcvar_float(p_flMaxSpecTime);
	
	static iMaxPing;
	iMaxPing = get_pcvar_num(p_iMaxPing);
	
	static iPunishment;
	iPunishment = get_pcvar_num(p_iPunishWay);
	
	static szRedirectIP[16];
	if (iPunishment == REDIRECT)
	{
		get_pcvar_string(p_szRedirectIP, szRedirectIP, charsmax(szRedirectIP));
	}
	
	static szPunishment[32];
	GetPunishmentString(iPunishment, szPunishment, charsmax(szPunishment));
	
	for (new i = 1; i <= g_iMaxPlayers; i++)
	{
		if (!is_user_connected(i)) continue;

#if defined KICK_IMMUNITY
		if (get_user_flags(i) & KICK_IMMUNITY) continue
#endif	

		if (cs_get_user_team(i) == CS_TEAM_SPECTATOR || cs_get_user_team(i) == CS_TEAM_UNASSIGNED)
		{
			flUserAfkTime[i] += 0.1;
			
			if (flMaxSpecTime - flUserAfkTime[i] <= 15.0 && !blPrintedWarn[i] && get_pcvar_num(p_bChatMessages))
			{
				PrintChatColor(i, PRINT_COLOR_PLAYERTEAM, "!g[!tSpecKicker!g]!y You will get %s after!g 15!y seconds for being spectator!",
				szPunishment);
				blPrintedWarn[i] = true;
			}
			
			if (flUserAfkTime[i] >= flMaxSpecTime)
			{
				if (get_pcvar_num(p_bChatMessages))
				{
					new szName[32];
					get_user_name(i, szName, charsmax(szName));
				
					PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!g[!tSpecKicker!g]!y Player!g %s!y got %s for being!t Spectator!y for more than!t %i!y seconds!",
					szName, szPunishment, floatround(flMaxSpecTime));
				}
				
				switch (iPunishment)
				{
					case KICK: server_cmd("kick #%i ^"You got kicked for being afk more than %i seconds!^"", get_user_userid(i), floatround(flMaxSpecTime));
					case REDIRECT: client_cmd(i, "wait;wait;wait;wait;wait;^"connect^" %s", szRedirectIP);
				}
				
				ClearVariables(i);
			}
		}
		else if (!(entity_get_int(i, EV_INT_button) & g_iCheckButtons) && is_user_alive(i))
		{
			flUserAfkTime[i] += 0.1;
			
			if (flMaxAfkTime - flUserAfkTime[i] <= 15.0 && !blPrintedWarn[i] && get_pcvar_num(p_bChatMessages))
			{
				PrintChatColor(i, PRINT_COLOR_PLAYERTEAM, "!g[!tAfkKicker!g]!y You will get %s after!g 15!y seconds for being AFK!",
				szPunishment);
				blPrintedWarn[i] = true;
			}
			
			if (flUserAfkTime[i] >= flMaxAfkTime)
			{
				if (get_pcvar_num(p_bChatMessages))
				{
					new szName[32];
					get_user_name(i, szName, charsmax(szName));
				
					PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!g[!tAfkKicker!g]!y Player!g %s!y got %s for being!t AFK!y for more than!t %i!y seconds!",
					szName, szPunishment, floatround(flMaxAfkTime));
				}
				
				switch (iPunishment)
				{
					case KICK: server_cmd("kick #%i ^"You got kicked for being afk more than %i seconds!^"", get_user_userid(i), floatround(flMaxAfkTime));
					case REDIRECT: client_cmd(i, "wait;wait;wait;wait;wait;^"connect^" %s", szRedirectIP);
				}
				
				ClearVariables(i);
			}
		}
		else
		{
			flUserAfkTime[i] = 0.0;
			blPrintedWarn[i] = false;
		}
		
		get_user_ping(i, iUserPing, iUserLoss);
		iUserTotalPing[i] += iUserPing;
		iPingChecks[i]++;
		
		if (iPingChecks[i] >= get_pcvar_num(p_iPingCheckTime) && (iUserTotalPing[i] / iPingChecks[i]) >= iMaxPing)
		{
			if (get_pcvar_num(p_bChatMessages))
			{
				new szName[32];
				get_user_name(i, szName, charsmax(szName));
				
				PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!g[!tHighPingKicker!g]!y Player!g %s!y got %s for having more than!t %ims!y!",
				szName, szPunishment, iMaxPing);
			}
			
			switch (iPunishment)
			{
				case KICK: server_cmd("kick #%i ^"You got kicked for having more more than %ims!^"", get_user_userid(i), iMaxPing);
				case REDIRECT: client_cmd(i, "wait;wait;wait;wait;wait;^"connect^" %s", szRedirectIP);
			}
			
			ClearVariables(i);
		}
	}
	
	entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 0.1);
}

ClearVariables(id)
{
	flUserAfkTime[id] = 0.0;
	iPingChecks[id] = 0;
	iUserTotalPing[id] = 0;
	blPrintedWarn[id] = false;
}

GetPunishmentString(iPunishment, szString[], len)
{
	switch (iPunishment)
	{
		case KICK: formatex(szString, len, "kicked");
		case REDIRECT: formatex(szString, len, "redirected");
	}
}
Благодаря предварително.
Make everything simple as possible but not simpler.
Albert Einstein

Аватар
Leonardo Da Vinci
Извън линия
Потребител
Потребител
Мнения: 67
Регистриран на: 30 Мар 2018, 20:55
Местоположение: #include <amxmodx>

Преработка на Afk & High ping Kicker

Мнение от Leonardo Da Vinci » 01 Апр 2018, 00:30

data/lang/hpk.txt

Код за потвърждение: Избери целия код

/* AMX Mod script
* 
* (c) 2002-2003, DynAstY
* This file is provided as is (no warranties).
*
* Players with immunity won't be checked
*/
/*
* Full Respect to DynAstY for this little plugin.
* Only Added Multilanguage support and changed the disconnect handling.
* This is a amx port. engine module isn't needed anymore.
* Cheers CRAZyBUg
* v.1.2.2 - amxx port, multilanguage support, disconnect handling
*/

#include <amxmodx>

new HIGHPING_MAX = 90 // set maximal acceptable ping
new HIGHPING_TIME = 15  // set in seconds frequency of ping checking
new HIGHPING_TESTS = 3 // minimal number of checks before doing anything

new iNumTests[33]

public plugin_init() {
	register_plugin("High Ping Kicker","1.2.2","DynAstY")
	register_dictionary("hpk.txt")
	return PLUGIN_CONTINUE
}

public client_disconnect(id) {
	remove_task(id)
	return PLUGIN_CONTINUE
}

public client_putinserver(id) {
	iNumTests[id] = 0
	if (!is_user_bot(id)) {
		new param[1]
		param[0] = id
		set_task(30.0, "showWarn", id, param, 1)
	}
	return PLUGIN_CONTINUE
}

kickPlayer(id) {
	new name[32]
	get_user_name(id, name, 31)
	new uID = get_user_userid(id)
	server_cmd("banid 1 #%d", uID)
	server_cmd("kick #%d %L", uID, id, "PING_KICK_PLAYER_MSG")
//	client_cmd(id, "echo ^"%L ^"; disconnect", id, "PING_KICK_PLAYER_MSG")
	client_print(0, print_chat, "%L", LANG_PLAYER, "PING_KICK_PUBLIC_MSG", name)
	return PLUGIN_CONTINUE
} 

public checkPing(param[]) {
	new id = param[0]
	if ( get_user_flags(id) & ( ADMIN_RESERVATION | ADMIN_LEVEL_A ) ) {
		remove_task(id)
		client_print(id, print_chat, "%L", id, "PING_IMMUNITY_MSG")
		return PLUGIN_CONTINUE
	}
	new p, l
	get_user_ping(id, p, l)
	if (p > HIGHPING_MAX)
		++iNumTests[id]
	else
		if (iNumTests[id] > 0) --iNumTests[id]
	if (iNumTests[id] > HIGHPING_TESTS)
		kickPlayer(id)
	return PLUGIN_CONTINUE
}

public showWarn(param[]) {
	client_print(param[0], print_chat, "%L", param[0], "PING_ANNOUNCE_MSG", HIGHPING_MAX)
	set_task(float(HIGHPING_TIME), "checkPing", param[0], param, 1, "b")
	return PLUGIN_CONTINUE
}
Betrayal stings like salt on a wound.

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 9 госта