Raised This Month: $12 Target: $400
 3% 

Plugin "Knife Zone" and bots ?


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
iveto69
Member
Join Date: Aug 2018
Old 07-17-2019 , 02:25   Plugin "Knife Zone" and bots ?
Reply With Quote #1

I use this plugin Knife Zone: https://forums.alliedmods.net/showthread.php?t=20396, but my server is CSDM with bots ( if it matters-YAPB bots) and bots dont change weapon to knife on knifezone .
Can you add cvar "amx_knifezone_bots enable /disable" please ?
Thanks.

Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>

#define MAX_ZONES	5
#define TASK_ID		1234

#define OriginX		0
#define OriginY		1
#define OriginZ		2

new cvar_delay
new cvar_kzsize
new cvar_kzsizez
new cvar_height
new cvar_nadepro

new bool:g_DirExist
new g_ConfigsDir[64]
new g_KnifeZoneDir[64]

new Float:g_fDelay[33]
new g_ProtectionTime[33]
new bool:g_InTheZone[33]

new zoneID
new sprite_zbeam
new g_KnifeZoneOrgins[MAX_ZONES][3]
new bool:g_KnifeZoneLogos[MAX_ZONES]



static const PLUGIN_NAME[] 	= "Knife Zone"
static const PLUGIN_AUTHOR[] 	= "Cheap_Suit"
static const PLUGIN_VERSION[]	= "1.6"

public plugin_init()
{
	register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
	register_cvar(PLUGIN_NAME, PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER)
	register_clcmd("amx_kzmenu", "open_KnifeZone", ADMIN_LEVEL_A, "Knife Zone Menu")
	register_menucmd(register_menuid("Knife Zone Menu"), 1023, "action_KnifeZone")

	cvar_delay	= register_cvar("amx_kzdelay", 	"3")
	cvar_height	= register_cvar("amx_kzheight", "140")
	cvar_kzsize 	= register_cvar("amx_kzsize", 	"140")
	cvar_kzsizez 	= register_cvar("amx_kzsizez", 	"50")
	cvar_nadepro	= register_cvar("amx_kznadepro", "1")
	
	register_forward(FM_TraceLine, "fwd_TraceLine")
	register_directory()
}

public plugin_precache() 
{
	precache_model("sprites/knifezone.spr")
	sprite_zbeam = precache_model("sprites/zbeam4.spr")
}

register_directory()
{
	get_configsdir(g_ConfigsDir, 63)
	format(g_KnifeZoneDir, 63, "%s/knifezone", g_ConfigsDir)
	
	if(!dir_exists(g_KnifeZoneDir))
	{
		log_amx("Knife Zone directory does not exist")
		g_DirExist = false
	} 
	else 
	{
		g_DirExist = true
		
		new curMap[32]
		get_mapname(curMap, 31)
		load_origins(curMap)
		
		set_task(1.0, "task_visuals", TASK_ID, _, _, "b")
	}
}

public open_KnifeZone(id, level, cid)
{
	if(!cmd_access(id, level, cid, 1))
		return PLUGIN_HANDLED
	
	if(!g_DirExist) 
		console_print(id, "Knife Zone directory does not exist")
	else
		display_KnifeZone(id)
	
	return PLUGIN_HANDLED
}

public display_KnifeZone(id)
{
	new menuBody[512]
	new len = format(menuBody, 511, "\yKnife Zone Menu^n")
	len += format(menuBody[len], 511-len, "^n\w1. Create a zone")
	len += format(menuBody[len], 511-len, "^n\r2. Remove all zones")
	len += format(menuBody[len], 511-len, "^n\d3. Exit menu")

	new keys = (1<<0|1<<1|1<<2)
	show_menu(id, keys, menuBody, -1, "Knife Zone Menu")	
}

public action_KnifeZone(id, key)
{
	switch(key) 
	{
		case 0:	
		{
			if(zoneID >= MAX_ZONES)
			{
				client_print(id, print_chat, "Max Knife Zones reached")
				return PLUGIN_HANDLED
			}
			
			if(!is_user_alive(id)) 
			{
				client_print(id, print_chat, "You have to be alive to make a knife zone")
				return PLUGIN_HANDLED
			}
			
			_makeZone(id)
			display_KnifeZone(id)
			client_print(id, print_chat, "knife zone created")
		}			
		case 1: 
		{
			_removeZones()
			display_KnifeZone(id)
			client_print(id, print_chat, "All Knife Zones removed")
		}
	}
	return PLUGIN_HANDLED
}

public fwd_TraceLine(Float:v1[3], Float:v2[3], noMonsters, id)
{  
	if(!is_user_alive(id))
		return FMRES_IGNORED
	
	new victim = get_tr(TR_pHit)
	if(!is_user_alive(victim))
		return FMRES_IGNORED
		
	new tmp[2], weapon = get_user_weapon(victim, tmp[0], tmp[1]) 
	if(weapon == CSW_KNIFE && g_InTheZone[victim])
		set_tr(TR_flFraction, 1.0)
		
	return FMRES_IGNORED
}

public client_PreThink(id)
{
	if(!task_exists(TASK_ID) || !is_user_alive(id)) 
	{
		g_ProtectionTime[id] = -1
		g_InTheZone[id] = false
		
		return PLUGIN_CONTINUE
	}
	
	if(!check_origin(id))
	{
		g_InTheZone[id] = false
		g_ProtectionTime[id] = -1
		
		return PLUGIN_CONTINUE
	}
	
	new protectionDelay = get_pcvar_num(cvar_delay)
	if(g_ProtectionTime[id] < protectionDelay)
	{
		if(g_fDelay[id] + 1.0 < get_gametime())
		{
			g_ProtectionTime[id] += 1
			g_fDelay[id] = get_gametime()
		}
		
		set_hudmessage(255, 0, 0, -1.0, -1.0, _, _, 0.5, _, _, 4)
		show_hudmessage(id, "Protection in %d...", (protectionDelay - g_ProtectionTime[id]))
	}
	else if(g_ProtectionTime[id] >= protectionDelay)
		g_InTheZone[id] = true
	
	new tmp[2], weap = get_user_weapon(id, tmp[0], tmp[1])
	if(weap != CSW_KNIFE) client_cmd(id, "weapon_knife")
	
	return PLUGIN_CONTINUE
}

stock check_origin(id)
{
	new iOrigin[3]
	get_user_origin(id, iOrigin, 0)
	
	for(new i = 0; i < MAX_ZONES; ++i)
	{
		if((g_KnifeZoneOrgins[i][OriginX] == 0) 
		&& (g_KnifeZoneOrgins[i][OriginY] == 0) 
		&& g_KnifeZoneOrgins[i][OriginZ] == 0)
			continue
		
		new ZoneSizeX = get_pcvar_num(cvar_kzsize)
		new ZoneSizeY = get_pcvar_num(cvar_kzsize)
		new ZoneSizeZ = get_pcvar_num(cvar_kzsizez)
		
		if((g_KnifeZoneOrgins[i][OriginX] - iOrigin[0] > ZoneSizeX) || (g_KnifeZoneOrgins[i][OriginX] - iOrigin[0] < -ZoneSizeX) 
		|| (g_KnifeZoneOrgins[i][OriginY] - iOrigin[1] > ZoneSizeY) || (g_KnifeZoneOrgins[i][OriginY] - iOrigin[1] < -ZoneSizeY)
		|| (g_KnifeZoneOrgins[i][OriginZ] - iOrigin[2] > ZoneSizeZ) || (g_KnifeZoneOrgins[i][OriginZ] - iOrigin[2] < -ZoneSizeZ))
			continue

		return true
	}
	return false
}

stock check_GrenadeOrigin(Origin[3])
{	
	new Ent = -1
	while((Ent = find_ent_by_class(Ent, "grenade")))
	{
		new szModel[32]
		entity_get_string(Ent, EV_SZ_model, szModel, 31)
		if(equal(szModel, "models/w_smokegrenade.mdl") 
		|| equal(szModel, "models/w_hegrenade.mdl") 
		|| equal(szModel, "models/w_flashbang.mdl"))
		{
			new Float:vOrigin[3], iOrigin[3]
			entity_get_vector(Ent, EV_VEC_origin, vOrigin)
			FVecIVec(vOrigin, iOrigin)
 
			if(get_distance(iOrigin, Origin) <= get_pcvar_num(cvar_kzsize))
				remove_entity(Ent)
		}
	}
}

load_origins(mapname[])
{
	new mapFile[64]
	format(mapFile, 63, "%s/%s.cfg", g_KnifeZoneDir, mapname)

	if(!file_exists(mapFile)) 
	{
		server_print("There are no Knife Zone(s) for %s", mapname)
		return PLUGIN_CONTINUE
	}

	new Text[64], Line = 0, Len = 0
	while(read_file(mapFile, Line++, Text, 63, Len))
	{
		if((Text[0]==';') || !Len)
		 	continue
		
		if(zoneID >= MAX_ZONES)
		{
			log_amx("Max Knife Zones reached, increase MAX_ZONES")
			break
		}
		
		new iOrigin[3][16]
		parse(Text, iOrigin[OriginX], 15, iOrigin[OriginY], 15, iOrigin[OriginZ], 15)
		
		g_KnifeZoneOrgins[zoneID][OriginX] = str_to_num(iOrigin[OriginX])
		g_KnifeZoneOrgins[zoneID][OriginY] = str_to_num(iOrigin[OriginY])
		g_KnifeZoneOrgins[zoneID][OriginZ] = str_to_num(iOrigin[OriginZ])
		
		zoneID += 1
	}
	return PLUGIN_CONTINUE
}

save_origin(mapname[], Origin[3])
{
	new mapFile[64], Text[64]
	format(mapFile, 63, "%s/%s.cfg", g_KnifeZoneDir, mapname)
	if(!file_exists(mapFile)) 
	{
		new Comments[64]
		format(Comments, 63, "; Knife Zone origins for %s", mapname)
		write_file(mapFile, Comments, -1)
	}
	
	format(Text, 64, "%i %i %i", Origin[OriginX], Origin[OriginY], Origin[OriginZ])
	write_file(mapFile, Text, -1)
}

public task_visuals()
{
	for(new i = 0; i < MAX_ZONES; ++i)
	{
		if((g_KnifeZoneOrgins[i][OriginX] == 0) 
		&& (g_KnifeZoneOrgins[i][OriginY] == 0) 
		&& g_KnifeZoneOrgins[i][OriginZ] == 0)
				continue
		
		create_kzring(g_KnifeZoneOrgins[i])
		
		if(get_pcvar_num(cvar_nadepro))
			check_GrenadeOrigin(g_KnifeZoneOrgins[i])
		
		if(!g_KnifeZoneLogos[i]) 
		{
			g_KnifeZoneLogos[i] = true
			create_logo(g_KnifeZoneOrgins[i])
		}
	}
}

stock create_kzring(Origin[3])
{
	new shape[4][2] = {{1,1}, {-1,1}, {-1,-1}, {1,-1}}
	new x1, y1, x2, y2, height, i, j
	new ZoneSize = get_cvar_num("amx_kzsize")
	
	for(j = 0; j < 2; j++)
	{
		height = (30 * j - 30)
		for(i = 0; i < 4; i++)
		{
			x1 = (shape[i][0] * ZoneSize)
			y1 = (shape[i][1] * ZoneSize)
			if(i < 3)
			{
				x2 = (shape[i+1][0] * ZoneSize)
				y2 = (shape[i+1][1] * ZoneSize)
			}
			else
			{
				x2 = (shape[0][0] * ZoneSize)
				y2 = (shape[0][1] * ZoneSize)
			}
			
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(0)
			write_coord(Origin[OriginX] + x1)
			write_coord(Origin[OriginY] + y1)
			write_coord(Origin[OriginZ] + height)
			write_coord(Origin[OriginX] + x2)
			write_coord(Origin[OriginY] + y2)
			write_coord(Origin[OriginZ] + height)
			write_short(sprite_zbeam)
			write_byte(0)
			write_byte(0)
			write_byte(30)
			write_byte(15)
			write_byte(0)
			write_byte(255)
			write_byte(0)
			write_byte(0)  
			write_byte(100)
			write_byte(0)
			message_end()
		}
	}
}

stock create_logo(Origin[3]) 
{
	new Float:flOrigin[3]
	IVecFVec(Origin, flOrigin)
	
	new sprite = create_entity("info_target")
	if(is_valid_ent(sprite))
	{
		entity_set_string(sprite, EV_SZ_classname, "kzlogo")
		entity_set_model(sprite, "sprites/knifezone.spr")
		
		flOrigin[2] += get_pcvar_num(cvar_height)
		entity_set_origin(sprite, flOrigin)
	}
}

_makeZone(id)
{
	new iOrigin[3], CurMap[32]
	get_user_origin(id, iOrigin, 0)
	get_mapname(CurMap, 31)

	zoneID = 0
	save_origin(CurMap, iOrigin)
	load_origins(CurMap)
	
	if(task_exists(TASK_ID))
		remove_task(TASK_ID)
		
	set_task(1.0, "task_visuals", TASK_ID, _, _, "b")
}

_removeZones()
{
	new MapFile[64], CurMap[32]
	get_mapname(CurMap, 31)
	format(MapFile, 63, "%s/%s.cfg", g_KnifeZoneDir, CurMap)
	if(file_exists(MapFile))
		delete_file(MapFile)
	
	if(task_exists(TASK_ID))
		remove_task(TASK_ID)
	
	zoneID = 0
	
	for(new i = 0; i < MAX_ZONES; ++i)
	{
		g_KnifeZoneLogos[i] = false
		g_KnifeZoneOrgins[i][OriginX] = 0
		g_KnifeZoneOrgins[i][OriginY] = 0
		g_KnifeZoneOrgins[i][OriginZ] = 0
	}
	
	new logo = -1
	while((logo = find_ent_by_class(logo, "kzlogo")))
		remove_entity(logo)
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0\\ deflang1033{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/

Last edited by iveto69; 07-17-2019 at 02:26.
iveto69 is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 22:30.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode