Добавяне на функция към "Nice Aim Detector"

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Добавяне на функция към "Nice Aim Detector"

Мнение от iv69 » 26 Апр 2020, 17:32

Може ли в плъгина който съм приложил, да се добави функция, с която примерния надпис:
"...[RELAX] Your hits: 0 - 1 - 1 - 3 - 0 - 2 - 1..."
, който излиза на всеки играч при "прераждане"(ако квара в nad.cfg: nad_type - е на 0) , да е достъпен ,т.е. да се вижда и да излиза и на онзи който го "наблюдава"като spectator и е с админ-флаг за бан "d" ?
Ако е по-трудно: ще помоля за готов пренаписан нплъгин, а ако е нещо по-елементарно: бих могъл и сам да го добавя? Само , ще помоля, обяснете ми подробно кое , къде и как се добавя/променя?

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

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define nPlugin "Nice Aim Detector"

#define nHead "Head aim hack"
#define nBody "Body aim hack"

new nAD_Head[33]
new nAD_Chest[33]
new nAD_Stomach[33]
new nAD_Larm[33]
new nAD_Rarm[33]
new nAD_Lleg[33]
new nAD_Rleg[33]

new nAD_Head_Warns[33]
new nAD_Hits_Warns[33]

new nTimes[33]
new nReason[64]
new nAction[129]

new nHitsGroup = 75

new nAD_Flag_Cvar
new nAD_Head_Cvar
new nAD_Hits_Cvar
new nAD_Type_Cvar
new nAD_Time_Cvar
new nAD_Warns_Cvar
new nAD_Bantime_Cvar
new nAD_Punishment_Cvar

public plugin_init() 
{
	register_plugin(nPlugin, "1.7", "sector")
	
	register_dictionary("nad.txt")
	
	server_cmd("exec addons/amxmodx/configs/nad/nad.cfg")
	
	RegisterHam(Ham_Spawn, "player", "nice_aim_detector_spawn", 1)
	RegisterHam(Ham_Killed, "player", "nice_aim_detector_head", 1)
	RegisterHam(Ham_TraceAttack, "player", "nice_aim_detector_hits", 1)
	
	nAD_Flag_Cvar = register_cvar("nad_flag", "")
	nAD_Head_Cvar = register_cvar("nad_head", "")
	nAD_Hits_Cvar = register_cvar("nad_hits", "")
	nAD_Type_Cvar = register_cvar("nad_type", "")
	nAD_Time_Cvar = register_cvar("nad_time", "")
	nAD_Warns_Cvar = register_cvar("nad_warns", "")
	nAD_Bantime_Cvar = register_cvar("nad_bantime", "")
	nAD_Punishment_Cvar = register_cvar("nad_punishment", "")
}

public client_putinserver(i)
{
	nAD_Head_Warns[i] = 0
	nAD_Hits_Warns[i] = 0
	
	nTimes[i] = 0
	
	set_task(60.0, "nice_aim_detector_time", i, _, _, "b")
}

public nice_aim_detector_spawn(i)
{
	new nType = get_pcvar_num(nAD_Type_Cvar)
	
	switch(nType)
	{
		case 0:
		{
			nChatPrint(i, "^1[^4RELAX^1] %L", LANG_PLAYER, "NAD_TEST", nAD_Head[i], nAD_Chest[i], nAD_Stomach[i], nAD_Larm[i], nAD_Rarm[i], nAD_Lleg[i], nAD_Rleg[i])
		}
		case 1:
		{
			new nLen[33]
			
			new nHeads = get_pcvar_num(nAD_Head_Cvar)
			new nHits = get_pcvar_num(nAD_Hits_Cvar)
			new nWarns = get_pcvar_num(nAD_Warns_Cvar)
			
			get_pcvar_string(nAD_Flag_Cvar, nLen, 32)
			
			if(strlen(nLen) && get_user_flags(i) & read_flags(nLen))
			{
				return HAM_HANDLED
			}
			else
			if(nAD_Head[i] >= nHeads)
			{
				nAD_Head_Warns[i]++
				
				nChatPrint(i, "^1[^4%s^1] %L", nPlugin, LANG_PLAYER, "NAD_WARNS", nAD_Head_Warns[i], nWarns, nHead)
				
				if(nAD_Head_Warns[i] == nWarns)
				{
					nReason = nHead
					
					nice_aim_detector_punishment(i, nReason)
				}
			}
			else
			if((nAD_Chest[i] >= nHits) || (nAD_Stomach[i]  >= nHits) || (nAD_Larm[i]  >= nHits) || (nAD_Rarm[i]  >= nHits) || (nAD_Lleg[i]  >= nHits) || (nAD_Rleg[i]  >= nHits))
			{
				nAD_Hits_Warns[i]++
				
				nChatPrint(i, "^1[^4%s^1] %L", nPlugin, LANG_PLAYER, "NAD_WARNS", nAD_Hits_Warns[i], nWarns, nBody)
				
				if(nAD_Hits_Warns[i] == nWarns)
				{
					nReason = nBody
					
					nice_aim_detector_punishment(i, nReason)
				}
			}
		}
	}
	
	nAD_Head[i] = 0
	nAD_Chest[i] = 0
	nAD_Stomach[i] = 0
	nAD_Larm[i] = 0
	nAD_Rarm[i] = 0
	nAD_Lleg[i] = 0
	nAD_Rleg[i] = 0
	
	return HAM_SUPERCEDE
}

public nice_aim_detector_head(id, i, shouldgib)
{
	if(is_user_alive(i))
	{
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_HEAD)
		{
			nAD_Head[i]++
		}
	}
}

public nice_aim_detector_hits(id, i, shouldgib)
{
	if(is_user_alive(i))
	{
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_CHEST)
		{
			nAD_Chest[i]++
		}
		else
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_STOMACH)
		{
			nAD_Stomach[i]++
		}
		else
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_LEFTARM)
		{
			nAD_Larm[i]++
		}
		else
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_RIGHTARM)
		{
			nAD_Rarm[i]++
		}
		else
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_LEFTLEG)
		{
			nAD_Lleg[i]++
		}
		else
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_RIGHTLEG)
		{
			nAD_Rleg[i]++
		}
	}
}

public nice_aim_detector_time(i)
{
	new nTime = get_pcvar_num(nAD_Time_Cvar)
	
	nTimes[i]++
	
	if(nTimes[i] == nTime)
	{
		nAD_Head_Warns[i] = 0
		nAD_Hits_Warns[i] = 0
		
		nTimes[i] = 0
	}
}

public nice_aim_detector_punishment(i, nReason[])
{
	new nAid[35], nName[33], nIP[33], nUid[33], nBantime[11]
	
	get_user_authid(i, nAid, 34)
	get_user_name(i, nName, 32)
	get_user_ip(i, nIP, 32, 1)
	
	num_to_str(get_user_userid(i), nUid, 32)
	num_to_str(nAD_Bantime_Cvar, nBantime, 10)
	
	get_pcvar_string(nAD_Punishment_Cvar, nAction, 128)
	
	nChatPrint(0, "^1[^4%s^1] %L", nPlugin, LANG_PLAYER, "NAD_PUNISH", nName, nReason)
	
	log_to_file("addons/amxmodx/configs/nad/nad.txt", "   [%s]   '%s'  -  <%s>", nPlugin, nName, nReason)
	
	client_cmd(i, "snapshot")
	
	replace_all(nAction, 128, "%userid%", nUid)
	replace_all(nAction, 128, "%ip%", nIP)
	replace_all(nAction, 128, "%steamid%", nAid)
	replace_all(nAction, 128, "%name%", nName)
	replace_all(nAction, 128, "%reason%", nReason)
	replace_all(nAction, 128, "%time%", nBantime)
	
	server_cmd(nAction)
}

stock nChatPrint(const id, const input[], any:...)
{
	 new nCount = 1, nNum[32]
	 
	 static nMsgs[191]
	 
	 vformat(nMsgs, 190, input, 3)
	 
	 replace_all(nMsgs, 190, "!g", "^4")
	 replace_all(nMsgs, 190, "!n", "^1")
	 replace_all(nMsgs, 190, "!t", "^3")

	 
	 if(id) nNum[0] = id; else get_players(nNum, nCount, "ch")
	 {
	 	for(new i = 0; i < nCount; i++)
		{
			if(is_user_connected(nNum[i]))
			{
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, nNum[i])
				
				write_byte(nNum[i])
				
				write_string(nMsgs)
				
				message_end()
			}
		}
	}
}
Благодаря!

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Добавяне на функция към "Nice Aim Detector"

Мнение от OciXCrom » 26 Апр 2020, 20:31

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

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define nPlugin "Nice Aim Detector"

#define nHead "Head aim hack"
#define nBody "Body aim hack"

new nAD_Head[33]
new nAD_Chest[33]
new nAD_Stomach[33]
new nAD_Larm[33]
new nAD_Rarm[33]
new nAD_Lleg[33]
new nAD_Rleg[33]

new nAD_Head_Warns[33]
new nAD_Hits_Warns[33]

new nTimes[33]
new nReason[64]
new nAction[129]

new nHitsGroup = 75

new nAD_Flag_Cvar
new nAD_Head_Cvar
new nAD_Hits_Cvar
new nAD_Type_Cvar
new nAD_Time_Cvar
new nAD_Warns_Cvar
new nAD_Bantime_Cvar
new nAD_Punishment_Cvar

public plugin_init() 
{
	register_plugin(nPlugin, "1.7", "sector")
	
	register_dictionary("nad.txt")
	
	server_cmd("exec addons/amxmodx/configs/nad/nad.cfg")
	
	RegisterHam(Ham_Spawn, "player", "nice_aim_detector_spawn", 1)
	RegisterHam(Ham_Killed, "player", "nice_aim_detector_head", 1)
	RegisterHam(Ham_TraceAttack, "player", "nice_aim_detector_hits", 1)
	
	nAD_Flag_Cvar = register_cvar("nad_flag", "")
	nAD_Head_Cvar = register_cvar("nad_head", "")
	nAD_Hits_Cvar = register_cvar("nad_hits", "")
	nAD_Type_Cvar = register_cvar("nad_type", "")
	nAD_Time_Cvar = register_cvar("nad_time", "")
	nAD_Warns_Cvar = register_cvar("nad_warns", "")
	nAD_Bantime_Cvar = register_cvar("nad_bantime", "")
	nAD_Punishment_Cvar = register_cvar("nad_punishment", "")
}

public client_putinserver(i)
{
	nAD_Head_Warns[i] = 0
	nAD_Hits_Warns[i] = 0
	
	nTimes[i] = 0
	
	set_task(60.0, "nice_aim_detector_time", i, _, _, "b")
}

public nice_aim_detector_spawn(i)
{
	new nType = get_pcvar_num(nAD_Type_Cvar)
	
	switch(nType)
	{
		case 0:
		{
			nChatPrint(i, "^1[^4RELAX^1] %L", i, "NAD_TEST", nAD_Head[i], nAD_Chest[i], nAD_Stomach[i], nAD_Larm[i], nAD_Rarm[i], nAD_Lleg[i], nAD_Rleg[i])

			new spectator = pev(i, pev_iuser2)

			if(is_user_connected(spectator) && get_user_flags(spectator) & ADMIN_BAN)
			{
				nChatPrint(spectator, "^1[^4RELAX^1] %L", spectator, "NAD_TEST", nAD_Head[i], nAD_Chest[i], nAD_Stomach[i], nAD_Larm[i], nAD_Rarm[i], nAD_Lleg[i], nAD_Rleg[i])
			}
		}
		case 1:
		{
			new nLen[33]
			
			new nHeads = get_pcvar_num(nAD_Head_Cvar)
			new nHits = get_pcvar_num(nAD_Hits_Cvar)
			new nWarns = get_pcvar_num(nAD_Warns_Cvar)
			
			get_pcvar_string(nAD_Flag_Cvar, nLen, 32)
			
			if(strlen(nLen) && get_user_flags(i) & read_flags(nLen))
			{
				return HAM_HANDLED
			}
			else
			if(nAD_Head[i] >= nHeads)
			{
				nAD_Head_Warns[i]++
				
				nChatPrint(i, "^1[^4%s^1] %L", nPlugin, i, "NAD_WARNS", nAD_Head_Warns[i], nWarns, nHead)
				
				if(nAD_Head_Warns[i] == nWarns)
				{
					nReason = nHead
					
					nice_aim_detector_punishment(i, nReason)
				}
			}
			else
			if((nAD_Chest[i] >= nHits) || (nAD_Stomach[i]  >= nHits) || (nAD_Larm[i]  >= nHits) || (nAD_Rarm[i]  >= nHits) || (nAD_Lleg[i]  >= nHits) || (nAD_Rleg[i]  >= nHits))
			{
				nAD_Hits_Warns[i]++
				
				nChatPrint(i, "^1[^4%s^1] %L", nPlugin, i, "NAD_WARNS", nAD_Hits_Warns[i], nWarns, nBody)
				
				if(nAD_Hits_Warns[i] == nWarns)
				{
					nReason = nBody
					
					nice_aim_detector_punishment(i, nReason)
				}
			}
		}
	}
	
	nAD_Head[i] = 0
	nAD_Chest[i] = 0
	nAD_Stomach[i] = 0
	nAD_Larm[i] = 0
	nAD_Rarm[i] = 0
	nAD_Lleg[i] = 0
	nAD_Rleg[i] = 0
	
	return HAM_SUPERCEDE
}

public nice_aim_detector_head(id, i, shouldgib)
{
	if(is_user_alive(i))
	{
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_HEAD)
		{
			nAD_Head[i]++
		}
	}
}

public nice_aim_detector_hits(id, i, shouldgib)
{
	if(is_user_alive(i))
	{
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_CHEST)
		{
			nAD_Chest[i]++
		}
		else
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_STOMACH)
		{
			nAD_Stomach[i]++
		}
		else
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_LEFTARM)
		{
			nAD_Larm[i]++
		}
		else
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_RIGHTARM)
		{
			nAD_Rarm[i]++
		}
		else
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_LEFTLEG)
		{
			nAD_Lleg[i]++
		}
		else
		if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_RIGHTLEG)
		{
			nAD_Rleg[i]++
		}
	}
}

public nice_aim_detector_time(i)
{
	new nTime = get_pcvar_num(nAD_Time_Cvar)
	
	nTimes[i]++
	
	if(nTimes[i] == nTime)
	{
		nAD_Head_Warns[i] = 0
		nAD_Hits_Warns[i] = 0
		
		nTimes[i] = 0
	}
}

public nice_aim_detector_punishment(i, nReason[])
{
	new nAid[35], nName[33], nIP[33], nUid[33], nBantime[11]
	
	get_user_authid(i, nAid, 34)
	get_user_name(i, nName, 32)
	get_user_ip(i, nIP, 32, 1)
	
	num_to_str(get_user_userid(i), nUid, 32)
	num_to_str(nAD_Bantime_Cvar, nBantime, 10)
	
	get_pcvar_string(nAD_Punishment_Cvar, nAction, 128)
	
	nChatPrint(0, "^1[^4%s^1] %L", nPlugin, LANG_PLAYER, "NAD_PUNISH", nName, nReason)
	
	log_to_file("addons/amxmodx/configs/nad/nad.txt", "   [%s]   '%s'  -  <%s>", nPlugin, nName, nReason)
	
	client_cmd(i, "snapshot")
	
	replace_all(nAction, 128, "%userid%", nUid)
	replace_all(nAction, 128, "%ip%", nIP)
	replace_all(nAction, 128, "%steamid%", nAid)
	replace_all(nAction, 128, "%name%", nName)
	replace_all(nAction, 128, "%reason%", nReason)
	replace_all(nAction, 128, "%time%", nBantime)
	
	server_cmd(nAction)
}

stock nChatPrint(const id, const input[], any:...)
{
	 new nCount = 1, nNum[32]
	 
	 static nMsgs[191]
	 
	 vformat(nMsgs, 190, input, 3)
	 
	 replace_all(nMsgs, 190, "!g", "^4")
	 replace_all(nMsgs, 190, "!n", "^1")
	 replace_all(nMsgs, 190, "!t", "^3")

	 
	 if(id) nNum[0] = id; else get_players(nNum, nCount, "ch")
	 {
	 	for(new i = 0; i < nCount; i++)
		{
			if(is_user_connected(nNum[i]))
			{
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, nNum[i])
				
				write_byte(nNum[i])
				
				write_string(nMsgs)
				
				message_end()
			}
		}
	}
}

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Добавяне на функция към "Nice Aim Detector"

Мнение от iv69 » 26 Апр 2020, 20:59

Благодаря, веднага ще тествам.

Добавено преди 17 минути 40 секунди:
iv69 написа: 26 Апр 2020, 20:41 Благодаря, веднага ще тествам.
Krome, плъгина се компилира без грешка, пуснах го , показва че е включен в amxx list-а, и когато играя - си ми показва моите попадения в чата (след всяко мое умиране)както си му е реда... , но ако аз наблюдавам някого, и съм с админ-права за бан - не се виждат резултатите на наблюдавания след всяка негова смърт - точно което много ми се искаше да стане.

p.s. Идеята, както може би много тук вече се досещат е, че това може да служи прекрасно на всеки админ за улавяне на хакер с активиран аим-бот, но дали може да стане не знам ?

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Добавяне на функция към "Nice Aim Detector"

Мнение от OciXCrom » 26 Апр 2020, 21:33

Ти никъде не си написал, че трябва да се показва когато някой умре. Направил съм го да се показва заедно със съобщението което вижда другия играч. И, не разбирам каква точно "защита" трябва да представлява тази глупост.

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Добавяне на функция към "Nice Aim Detector"

Мнение от iv69 » 26 Апр 2020, 22:18

Онова за което говорим , че се показва(и съм го цитирал в първия пост) - си се показваше и в плъгина който ползвам без преработки... Просто идеята ми е - ако може това съобщение в чата което е за всеки играч след смъртта му - да е видно и за този който го "наблюдава", т.е. е spectator, ако може разбира се да е "видно", защото сега ако си админ, и следиш някого, това съобщение не се вижда от spectator-a. Само това искам , игнорирай предишното ми мнение.......

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Добавяне на функция към "Nice Aim Detector"

Мнение от OciXCrom » 26 Апр 2020, 22:52

В плъгина няма никакво съобщение което се показва "след смъртта". Съобщението за всеки играч се показва при неговото прераждане, а не умиране, съответно и в този момент играчът който го наблюдава ще види съобщението.

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Добавяне на функция към "Nice Aim Detector"

Мнение от iv69 » 26 Апр 2020, 23:27

Добре де, така да е , грешно съм се изразил(понеже сървъра е респаун и не се забелязва разликата) и не знам дали съобщеието е след умиране или при прераждането,....просто въпроса е , че изобщо не виждам такова съобщение когато съм spectator, а дали точно е при прераждане или след умиране не знам с голяма точност. Нищо не излиза на екрана ми, когато гледам когото и да е ? Дали защото ползвам твоя crx_chatmanager.amxx, или е от някой друг плъгин , не знам , или ти нещо пропускаш, но ?! Съобщението което е адресирано до играча си излиза явно, но исках и на мен да илиза това ,което вижда и той -= тогава когато мина spectator.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Добавяне на функция към "Nice Aim Detector"

Мнение от OciXCrom » 27 Апр 2020, 15:19

Нормално, че щом се показва при прераждане, не можеш да наблюдаваш играч в същия момент когато се преродил. Последно - кога трябва администраторът да види съобщението?... Нямат логика нещата които си написал.

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Добавяне на функция към "Nice Aim Detector"

Мнение от iv69 » 27 Апр 2020, 16:06

OciXCrom написа: 27 Апр 2020, 15:19 Нормално, че щом се показва при прераждане, не можеш да наблюдаваш играч в същия момент когато се преродил. Последно - кога трябва администраторът да види съобщението?... Нямат логика нещата които си написал.
Когато прецениш, че може, нека тогава администраторът да види съобщението. След прераждане , или след убиването му, или преди прераждането му.... Така както го направиш, така ще го ползвам !?
Просто ако може админа, когато наблюдава някого за хак, (това е по-продължително време и ще рече поне няколко подред раждания и умирания на наблюдавания от админа играч) - да може и да види какви попадения е правил наблюдавания играч за един негов "рунд" или между едно и друго негово прераждане или умиране, не знам как е правилното... Но нека просто информацията да е достъпна и за администратора. Плъгина изкарва доста точно информация за всяко едно попадение във всичките 7 точки/цели по тялото на всички простреляни играчи за един негов живот, или рунд: в глава, гърди, стомах, лява, дясна ръка и лев и десен крак. Ето тази информация искам да я получава И АДМИНА НЯКАК СИ - ако прецениш , може и да не минава "6"-ца, а да пише команда някаква и да му излиза и на него в чата... все тая ми е ...както може и прецениш , че е добре и правилно - така го направи.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Добавяне на функция към "Nice Aim Detector"

Мнение от OciXCrom » 27 Апр 2020, 16:58

Нито при умиране, нито при прераждане има логика. Добавих HUD съобщение което е постоянно:

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

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define CC_COLORS_TYPE CC_COLORS_SHORT
#include <cromchat>

#define nPlugin "Nice Aim Detector"

#define nHead "Head aim hack"
#define nBody "Body aim hack"

new nAD_Head[33]
new nAD_Chest[33]
new nAD_Stomach[33]
new nAD_Larm[33]
new nAD_Rarm[33]
new nAD_Lleg[33]
new nAD_Rleg[33]

new nAD_Head_Warns[33]
new nAD_Hits_Warns[33]

new nTimes[33]
new nReason[64]
new nAction[129]

new nHitsGroup = 75

new nAD_Flag_Cvar
new nAD_Head_Cvar
new nAD_Hits_Cvar
new nAD_Type_Cvar
new nAD_Time_Cvar
new nAD_Warns_Cvar
new nAD_Bantime_Cvar
new nAD_Punishment_Cvar

new nAD_SyncObject

public plugin_init()
{
    register_plugin(nPlugin, "1.7", "sector")

    register_dictionary("nad.txt")

    server_cmd("exec addons/amxmodx/configs/nad/nad.cfg")

    RegisterHam(Ham_Spawn, "player", "nice_aim_detector_spawn", 1)
    RegisterHam(Ham_Killed, "player", "nice_aim_detector_head", 1)
    RegisterHam(Ham_TraceAttack, "player", "nice_aim_detector_hits", 1)

    nAD_Flag_Cvar = register_cvar("nad_flag", "")
    nAD_Head_Cvar = register_cvar("nad_head", "")
    nAD_Hits_Cvar = register_cvar("nad_hits", "")
    nAD_Type_Cvar = register_cvar("nad_type", "")
    nAD_Time_Cvar = register_cvar("nad_time", "")
    nAD_Warns_Cvar = register_cvar("nad_warns", "")
    nAD_Bantime_Cvar = register_cvar("nad_bantime", "")
    nAD_Punishment_Cvar = register_cvar("nad_punishment", "")

    nAD_SyncObject = CreateHudSyncObj()
}

public client_putinserver(i)
{
    nAD_Head_Warns[i] = 0
    nAD_Hits_Warns[i] = 0

    nTimes[i] = 0

    set_task(60.0, "nice_aim_detector_time", i, _, _, "b")
    set_task(1.0, "show_spectator_info", i, _, _, "b")
}

public show_spectator_info(id)
{
    if(!is_user_alive(id) && get_user_flags(id) & ADMIN_BAN)
    {
        new target = pev(id, pev_iuser2)

        if(is_user_connected(target))
        {
            new szMessage[128]
            formatex(szMessage, charsmax(szMessage), "%L", id, "NAD_TEST", nAD_Head[target], nAD_Chest[target], nAD_Stomach[target], nAD_Larm[target], nAD_Rarm[target], nAD_Lleg[target], nAD_Rleg[target])
            CC_RemoveColors(szMessage, charsmax(szMessage))
            set_hudmessage(0, 255, 0, -1.0, 0.7, .holdtime = 1.0)
            ShowSyncHudMsg(id, nAD_SyncObject, szMessage)
        }
    }
}

public nice_aim_detector_spawn(i)
{
    new nType = get_pcvar_num(nAD_Type_Cvar)

    switch(nType)
    {
        case 0:
        {
            CC_SendMessage(i, "^1[^4RELAX^1] %L", i, "NAD_TEST", nAD_Head[i], nAD_Chest[i], nAD_Stomach[i], nAD_Larm[i], nAD_Rarm[i], nAD_Lleg[i], nAD_Rleg[i])
        }
        case 1:
        {
            new nLen[33]

            new nHeads = get_pcvar_num(nAD_Head_Cvar)
            new nHits = get_pcvar_num(nAD_Hits_Cvar)
            new nWarns = get_pcvar_num(nAD_Warns_Cvar)

            get_pcvar_string(nAD_Flag_Cvar, nLen, 32)

            if(strlen(nLen) && get_user_flags(i) & read_flags(nLen))
            {
                return HAM_HANDLED
            }
            else
            if(nAD_Head[i] >= nHeads)
            {
                nAD_Head_Warns[i]++

                CC_SendMessage(i, "^1[^4%s^1] %L", nPlugin, i, "NAD_WARNS", nAD_Head_Warns[i], nWarns, nHead)

                if(nAD_Head_Warns[i] == nWarns)
                {
                    nReason = nHead

                    nice_aim_detector_punishment(i, nReason)
                }
            }
            else
            if((nAD_Chest[i] >= nHits) || (nAD_Stomach[i]  >= nHits) || (nAD_Larm[i]  >= nHits) || (nAD_Rarm[i]  >= nHits) || (nAD_Lleg[i]  >= nHits) || (nAD_Rleg[i]  >= nHits))
            {
                nAD_Hits_Warns[i]++

                CC_SendMessage(i, "^1[^4%s^1] %L", nPlugin, i, "NAD_WARNS", nAD_Hits_Warns[i], nWarns, nBody)

                if(nAD_Hits_Warns[i] == nWarns)
                {
                    nReason = nBody

                    nice_aim_detector_punishment(i, nReason)
                }
            }
        }
    }

    nAD_Head[i] = 0
    nAD_Chest[i] = 0
    nAD_Stomach[i] = 0
    nAD_Larm[i] = 0
    nAD_Rarm[i] = 0
    nAD_Lleg[i] = 0
    nAD_Rleg[i] = 0

    return HAM_SUPERCEDE
}

public nice_aim_detector_head(id, i, shouldgib)
{
    if(is_user_alive(i))
    {
        if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_HEAD)
        {
            nAD_Head[i]++
        }
    }
}

public nice_aim_detector_hits(id, i, shouldgib)
{
    if(is_user_alive(i))
    {
        if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_CHEST)
        {
            nAD_Chest[i]++
        }
        else
        if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_STOMACH)
        {
            nAD_Stomach[i]++
        }
        else
        if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_LEFTARM)
        {
            nAD_Larm[i]++
        }
        else
        if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_RIGHTARM)
        {
            nAD_Rarm[i]++
        }
        else
        if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_LEFTLEG)
        {
            nAD_Lleg[i]++
        }
        else
        if(1 <= i <= get_maxplayers() && get_pdata_int(id, nHitsGroup, 5) == HIT_RIGHTLEG)
        {
            nAD_Rleg[i]++
        }
    }
}

public nice_aim_detector_time(i)
{
    new nTime = get_pcvar_num(nAD_Time_Cvar)

    nTimes[i]++

    if(nTimes[i] == nTime)
    {
        nAD_Head_Warns[i] = 0
        nAD_Hits_Warns[i] = 0

        nTimes[i] = 0
    }
}

public nice_aim_detector_punishment(i, nReason[])
{
    new nAid[35], nName[33], nIP[33], nUid[33], nBantime[11]

    get_user_authid(i, nAid, 34)
    get_user_name(i, nName, 32)
    get_user_ip(i, nIP, 32, 1)

    num_to_str(get_user_userid(i), nUid, 32)
    num_to_str(nAD_Bantime_Cvar, nBantime, 10)

    get_pcvar_string(nAD_Punishment_Cvar, nAction, 128)

    CC_SendMessage(0, "^1[^4%s^1] %L", nPlugin, LANG_PLAYER, "NAD_PUNISH", nName, nReason)

    log_to_file("addons/amxmodx/configs/nad/nad.txt", "   [%s]   '%s'  -  <%s>", nPlugin, nName, nReason)

    client_cmd(i, "snapshot")

    replace_all(nAction, 128, "%userid%", nUid)
    replace_all(nAction, 128, "%ip%", nIP)
    replace_all(nAction, 128, "%steamid%", nAid)
    replace_all(nAction, 128, "%name%", nName)
    replace_all(nAction, 128, "%reason%", nReason)
    replace_all(nAction, 128, "%time%", nBantime)

    server_cmd(nAction)
}

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

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

Кой е на линия

Потребители разглеждащи този форум: Semrush [Bot] и 19 госта