Negasire Comenzi :(

Discutii legate de instalarea, configurarea si modificarea unui server de Counter-Strike.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
User avatar
JuNNNNkieWho
Membru, skill +1
Membru, skill +1
Posts: 106
Joined: 20 Dec 2015, 08:25
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

12 Dec 2016, 13:03

Salut am si eu un plugin war3ft si nu gasesc comenzile de dat xp si tot ce trebuie
| Afiseaza codul
/* Plugin generated by AMXX-Studio 



 #####                #     # 		 _               _               _  _                                          
#     #  ####  #####  ##   ## _		| |             | |            _| || |_                                        
#       #      #    # # # # #(_)	| |__   __ _  __| | ___  ___  |_  __  _|   _____      ___ __   __ _  __ _  ___ 
#        ####  #    # #  #  #  		| '_ \ / _` |/ _` |/ _ \/ __|  _| || |_   / _ \ \ /\ / / '_ \ / _` |/ _` |/ _ \
#            # #    # #     # _ 	| | | | (_| | (_| |  __/\__ \ |_  __  _| | (_) \ V  V /| | | | (_| | (_| |  __/
#     # #    # #    # #     #(_) 	|_| |_|\__,_|\__,_|\___||___/   |_||_|    \___/ \_/\_/ |_| |_|\__,_|\__, |\___|
 #####   ####  #####  #     #     	                                                                     __/ |     
					                                                                    |___/      
*/
#include  /*           __  ______      	              */< amxmodx >
#include  /*          / / / / / /____________  	      */< amxmisc >
#include  /*         / / / / / __/ ___/ __  /         */< cstrike >
#include  /*        / /_/ / / /_/ /  / /_/ / 	      */< colorchat >
#include  /*        \____/_/\__/_/   \__,_/  	      */<  xs  >
#include  /*         -- !! LEVEL M00D !! --           */< engine >

#include                           		      < hamsandwich >
#include                           		      < fakemeta_util >

#define 		PLUGIN 				"CSDM: Ultra Level Mod"
#define 		VERSION				"0.Ox"
#define 		AUTHOR 				"Hades Ownage"
#define 		VIP_LEVEL			ADMIN_LEVEL_H
#define 		MAX_LEVELS			56
#define			szPrefix			"!g[CSDM Ultra]!t -"
#define 		IsPlayer(%1)			( 1 <= %1 <= g_iMaxPlayers )

#define							SELECT_ULTIMATE

#define							UPGRADE_SPAWNHEALTH
#define							UPGRADE_SPAWNARMOR
#define 						UPGRADE_SPAWNSPEED
#define							UPGRADE_SPAWNGRAVITY
#define							UPGRADE_KILLBONUS
#define 						UPGRADE_DAMAGEMULTIPLIER
#define							UPGRADE_CRITICALHIT
#define							UPGRADE_SHIELD
#define 						UPGRADE_DEADLYSHOT
#define 						UPGRADE_STUNNING
#define 						UPGRADE_REGENERATION

#define 						UPGRADELVL_SOUND
#define							ULTIMATE_KILLSTREAK
#define							AIM_MESSAGE
#define							DONATE_GOLD
#define							VIP_MULTIJUMP
//#define						NADE_DROPS
#define							TEAM_SEMICLIP
#define							LEVEL_ON_CHAT

#define			LEVELUP_SOUND			"csdm_ultra/levelup.wav"
#define			GOLDCOIN_SOUND			"csdm_ultra/gold_coin.wav"
#define			NECKLACE_SOUND			"csdm_ultra/necklace.wav"

#if defined 		UPGRADELVL_SOUND
#define			UPGRADELVL_SOUND1		"csdm_ultra/level_upgrade1.wav"
#define			UPGRADELVL_SOUND2		"csdm_ultra/level_upgrade2.wav"
#define			UPGRADELVL_SOUND3		"csdm_ultra/level_upgrade3.wav"
#endif

native							csdm_shop_get_user_necklace ( id );

enum _: UserStats {
	
	Xp,
	Level,
	Gold,
	UpgradePoints
	
}

enum _: UpgradeItems {
	
	#if defined UPGRADE_SPAWNHEALTH
	SpawnHealth,
	#else
	TempSpawnHealth,
	#endif
	#if defined UPGRADE_SPAWNARMOR
	SpawnArmor,
	#else
	TempSpawnArmor,
	#endif
	#if defined UPGRADE_SPAWNSPEED
	SpawnSpeed,
	#else
	TempSpawnSpeed,
	#endif
	#if defined UPGRADE_SPAWNGRAVITY
	SpawnGravity,
	#else
	TempSpawnGravity,
	#endif
	#if defined UPGRADE_KILLBONUS
	KillBonus,
	#else
	TempKillBonus,
	#endif
	#if defined UPGRADE_DAMAGEMULTIPLIER
	DamageMultiplier,
	#else
	TempDamageMultiplier,
	#endif
	#if defined UPGRADE_CRITICALHIT
	CriticalHit,
	#else
	TempCriticalHit,
	#endif
	#if defined UPGRADE_SHIELD
	Shield,
	#else
	TempShield,
	#endif
	#if defined UPGRADE_DEADLYSHOT
	DeadlyShot,
	#else
	TempDeadlyShot,
	#endif
	#if defined UPGRADE_STUNNING
	Stunning,
	#else
	TempStunning,
	#endif
	#if defined UPGRADE_REGENERATION
	Regeneration
	#else
	TempRegeneration,
	#endif
	
}

#if defined UPGRADE_SPAWNHEALTH
new const SpawnHealth_ [ ] = { 
	
	/*++*/	0,  /* health */
	/*++*/	15, /* health */
	/*++*/	25, /* health */
	/*++*/	35, /* health */
	/*++*/	45, /* health */
	/*++*/	65  /* health */
	
}
#endif

#if defined UPGRADE_SPAWNARMOR
new const SpawnArmor_ [ ] = { 
	
	/*++*/	0,  /* armor */
	/*++*/	25, /* armor */
	/*++*/	35, /* armor */
	/*++*/	45, /* armor */
	/*++*/	75, /* armor */
	/*++*/	95  /* armor */
	
}
#endif

#if defined UPGRADE_SPAWNSPEED
new const SpawnSpeed_ [ ] = { 
	
	/*++*/	0,  /* speed */
	/*++*/	15, /* speed */
	/*++*/	25, /* speed */
	/*++*/	40, /* speed */
	/*++*/	60, /* speed */
	/*++*/	80  /* speed */
	
}
#endif

#if defined UPGRADE_SPAWNGRAVITY
new const SpawnGravity_ [ ] = { 
	
	/*FIX*/	800, /* gravity */
	/*FIX*/	770, /* gravity */
	/*FIX*/	745, /* gravity */
	/*FIX*/	720, /* gravity */
	/*FIX*/	700, /* gravity */
	/*FIX*/	680  /* gravity */
	
}
#endif

#if defined UPGRADE_KILLBONUS
new const KillBonus_ [ ] = { 
	
	/*++*/	0,  /* hp */
	/*++*/	3,  /* hp */
	/*++*/	6,  /* hp */
	/*++*/	10, /* hp */
	/*++*/	15, /* hp */
	/*++*/	20  /* hp */
	
}

new KillBonusSync;
#endif

#if defined UPGRADE_DAMAGEMULTIPLIER
new const DamageMultiplier_ [ ] = { 
	
	/*++*/	0,  /* damage */
	/*++*/	15, /* damage */
	/*++*/	30, /* damage */
	/*++*/	40, /* damage */
	/*++*/	45, /* damage */
	/*++*/	50  /* damage */
	
}
#endif

#if defined UPGRADE_CRITICALHIT
new const CriticalHit_ [ ] = { 
	
	/*FIX*/	0,  /* critical chance */
	/*FIX*/	4, /* critical chance */
	/*FIX*/	6, /* critical chance */
	/*FIX*/	10, /* critical chance */
	/*FIX*/	13, /* critical chance */
	/*FIX*/	17  /* critical chance */
	
}

#define CRITICALHIT_TIME	0.8

new const CriticalHit_Sound [ ] = "csdm_ultra/criticalhit.wav";
new CriticalHitOn [ 33 ], CriticalHit_Message [ 33 ], CRITICALHIT_SPR_WAVE;

#endif

#if defined UPGRADE_SHIELD
new const Shield_ [ ] = { 
	
	/*FIX*/	0,  /* shield chance */
	/*FIX*/	4, /* shield chance */
	/*FIX*/	6, /* shield chance */
	/*FIX*/	10, /* shield chance */
	/*FIX*/ 13, /* shield chance */
	/*FIX*/	17  /* shield chance */
	
}

new const Shield_Sound [ ] = "csdm_ultra/shield.wav";
new Shield_Message [ 33 ];
#endif

#if defined UPGRADE_DEADLYSHOT
new const DeadlyShot_ [ ] = { 
	
	/*FIX*/	0,  /* deadly chance */
	/*FIX*/	4, /* deadly chance */
	/*FIX*/	6, /* deadly chance */
	/*FIX*/	10, /* deadly chance */
	/*FIX*/	13, /* deadly chance */
	/*FIX*/ 17  /* deadly chance */
	
}

#define DEADLY_FADE_TIME	1.0

new const DeadlyShot_Sound [ ] = "csdm_ultra/deadlyshot.wav";
new DEADLYSHOT_SPR, DeadlyShot_Message [ 33 ];

#endif

#if defined UPGRADE_STUNNING
new const Stunning_ [ ] = { 
	
	/*FIX*/	0,  /* stunning chance */
	/*FIX*/ 4, /* stunning chance */
	/*FIX*/	6, /* stunning chance */
	/*FIX*/	10, /* stunning chance */
	/*FIX*/	13, /* stunning chance */
	/*FIX*/	17  /* stunning chance */
	
}

#define STUNNING_TIME		2.0
new IsStunned [ 33 ];
new const Stunning_Sound [ ] = "csdm_ultra/stunning.wav";
new STUNNING_SPR_BEAM, Stunning_Message [ 33 ];
#endif

#if defined UPGRADE_REGENERATION
new const Regeneration_ [ ] = { 
	
	/*++*/	0, /* hp regen */
	/*++*/	1, /* hp regen */
	/*++*/	2, /* hp regen */
	/*++*/	3, /* hp regen */
	/*++*/	4, /* hp regen */
	/*++*/	5  /* hp regen */
	
}

#define REGENERATION_TIME	3.7
#define REGENERATION_TASKID	83713
#define REGENERATION_MAXHEALTH	130
#define REGENERATION_FADE_TIME	0.4

#endif

#if defined SELECT_ULTIMATE

#define ULT_SUICIDE
#define ULT_BLINK
#define ULT_CHAINLIGHTNING
#define ULT_IMMOLATE
#define ULT_LOCUSTSWARM


//------| Ultimates |------//
#define SOUND_ERROR		"csdm_ultra/error.wav"
#define SOUND_ULTIMATEREADY	"csdm_ultra/resurrecttarget.wav"
#define SOUND_SEARCHING		"turret/tu_ping.wav"							

#define SPAWN_DELAY		0.2

#define TASK_DELAY 		2131241
#define TASK_SEARCHING		1738
#define TASK_RESETSPAWNS	3001
#define TASK_SPAWNREMOVEGOD	128
#define TASK_SPAWN		32
#define TASK_SPAWNPLAYER	1056

new PlayerUltimate[33], NextUltimate[33], UltimateGlobalDelay = 0, UltimateDelay[33], UltimateIsUsed[33],
Ultimate_Is_Searching[33];
new cvar_ultimate_countdown, cvar_ultimate_countdown_start;

//------| Suicide Bomb |------//
#if defined ULT_SUICIDE
new ULTIMATE_SUICIDE[][] = { "", "1", "dmg_rad" };
new SPR_SUICIDE_EXPLODE, SPR_SUICIDE_SMOKE, SPR_SUICIDE_BLAST

#define EXPLOSION_MAX_DAMAGE	100.0
#define EXPLOSION_KNOCKBACK	5.0
#define EXPLOSION_BLAST_RADIUS	250.0

#define TASK_EXPLOSION		160
#define TASK_BEAMCYLINDER	192

#define SOUND_SUICIDE	"ambience/particle_suck1.wav"
new SuicideBombArmed[33], BloodSpray, BloodDrop
#endif

//------| Blink |------//
#if defined ULT_BLINK
new ULTIMATE_BLINK[][] = { "", "2", "item_longjump" };
new SPR_TELEPORT, SPR_TELEPORT_GIB	

#define BLINK_COUNTDOWN		1.0
#define SOUND_BLINK		"weapons/flashbang-1.wav"
new const Float:Size[][3] = {
	{0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},
	{0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},
	{0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},
	{0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},
	{0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}
}
#endif

//------| Chain Lightning |------//
#if defined ULT_CHAINLIGHTNING
new ULTIMATE_CHAINLIGHTNING[][] = { "", "3", "dmg_shock" };
new SPR_LIGHTNING

#define CHAINLIGHTNING_DAMAGE		70
#define CHAINLIGHTNING_LINEWIDTH	60
#define LIGHTNING_RANGE			500

#define	TASK_LIGHTNING			960
#define	TASK_LIGHTNINGNEXT		1024

#define SOUND_LIGHTNING			"csdm_ultra/lightningbolt.wav"
new LightningHit[33]
#endif



//------| Immolate |------//
#if defined ULT_IMMOLATE
new ULTIMATE_IMMOLATE[][] = { "", "5", "dmg_heat" };
new SPR_IMMOLATE, SPR_BURNING, SPR_FIRE

#define IMMOLATE_DAMAGE			75
#define IMMOLATE_DOT_DAMAGE		5
#define IMMOLATE_DOT			6

#define TASK_BURNING			1684

#define SOUND_IMMOLATE			"csdm_ultra/ImmolationDecay1.wav"
#define SOUND_IMMOLATE_BURNING		"ambience/flameburst1.wav"
#endif

//------| Locust Swarm |------//
#if defined ULT_LOCUSTSWARM
new ULTIMATE_LOCUSTSWARM[][] = { "", "8", "dmg_gas" };
new SPR_SNOW

#define LOCUSTSWARM_DMG_MIN	60
#define LOCUSTSWARM_DMG_MAX	120

#define	TASK_FUNNELS		1354

#define SOUND_LOCUSTSWARM	"csdm_ultra/locustswarmloop.wav"
#endif


new const CSDM_Ultimates [ ] [ ] = {
	
	"",
	#if defined ULT_SUICIDE
	"Boomer Sinucigas",
	#endif
	#if defined ULT_BLINK
	"Teleporter",
	#endif
	#if defined ULT_CHAINLIGHTNING
	"Lant De Fulger",
	#endif
	#if defined ULT_IMMOLATE
	"Jertfi",
	#endif
	#if defined ULT_LOCUSTSWARM
	"Rouiul Roscov"
	#endif
}
#endif

new const CSDM_Levels [ MAX_LEVELS ] = {
	
	150,
	250,
	300,
	480,
	520,
	680,
	780,
	920,
	1000,
	1200,
	1450,
	1900,
	2400,
	2700,
	3200,
	3800,
	4400,
	4950,
	5800,
	7000,
	7975,
	8880,
	9500,
	10000,
	11000,
	12800,
	15500,
	18750,
	20000,
	20800,
	22000,
	22900,
	23500,
	24750,
	26000,
	28000,
	29500,
	30000,
	31900,
	33000,
	35000,
	35950,
	37300,
	38200,
	40100,
	41200,
	42400,
	43000,
	44800,
	45200,
	46900,
	48350,
	49200,
	50000,
	55000
	
}

new User [ 33 ] [ UserStats ], Item [ 33 ] [ UpgradeItems ], g_iMaxPlayers;
new csdm_hskill_xp, csdm_kill_xp, csdm_knifekill_gold, csdm_hegrenadekill_gold;
new SaveDataFile [ 128 ];

#if defined ULTIMATE_KILLSTREAK

new kills [ 33 ] = {0,...};
new deaths [ 33 ] = {0,...};

new kill [ 33 ] [ 24 ];

#define 	LEVELS 13
#define 	hsounds 2
#define 	knsounds 2
#define 	fbsounds 2
#define 	prpsounds 3
#define 	suicidesounds 4
#define 	maxdbsounds 2
#define 	TASK_CLEAR_KILL    100

new hsenable, knifeenable, nadecvar, cvardouble, rnstartcvar, killstreaktype;
new levels [ LEVELS ] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };

new const ULTIMATE_KILLSTREAK_GOLD [ LEVELS + 1 ] = {
	
	3,
	5,
	10,
	15,
	20,
	25,
	30,
	35,
	50,
	75,
	100,
	120,
	135,
	150

}

new sounds [ LEVELS ] [ ] = {
	
	"ultimate_sounds/triplekill_ultimate", 
	"ultimate_sounds/maniac",
	"ultimate_sounds/WhickedSick", 
	"ultimate_sounds/eagleeye", 
	"ultimate_sounds/pancake", 
	"ultimate_sounds/holyshit_ultimate",
	"ultimate_sounds/ludicrouskill_ultimate",
	"ultimate_sounds/GodLike",
	"ultimate_sounds/rampage_ultimate",
	"ultimate_sounds/Ownage",
	"ultimate_sounds/unstoppable_ultimate",
	"ultimate_sounds/Combowhore",
	"ultimate_sounds/monsterkill_ultimate"
};

new messages [ LEVELS ] [ ] =  {
	
	"%s: Triple Kill !", 
	"%s: Maniac Kill !", 
	"%s: Whicked Sick !", 
	"%s: Eagle Eye !",
	"%s: Pancake Kill !",
	"%s: Holy Shit !",
	"%s: Ludicrous Kill !", 
	"%s: GodLike !", 
	"%s: Rampage !",
	"%s: Ownage !",
	"%s: Unstoppable !", 
	"%s: Combowhore !", 
	"%s: M o n s t e R  K i L L ! ! !"
	
};

new hslist [ hsounds ] [ ] = {
	
	"ultimate_sounds/headshot1_ultimate",
	"ultimate_sounds/headshot2_ultimate"
}

new preplist [ prpsounds ] [ ]= {
	
	"ultimate_sounds/prepare1_ultimate",
	"ultimate_sounds/prepare2_ultimate",
	"ultimate_sounds/prepare3_ultimate"
}

new hsmessages [ 4 ] [ ] = {
	
	"%s removed %s head !!",
	"%s had a superb aim with %s !",
	"%s Made a superb headshot to %s!",
	"%s down %s with a superb headshot !"
}

new knlist [ knsounds ] [ ] = {
	
	"ultimate_sounds/knife1_ultimate",
	"ultimate_sounds/knife2_ultimate"
}

new knmessages [ 3 ] [ ] = {
	
	"%s sliced and diced %s",
	"%s pulled out knife and gutted %s",	
	"%s knifed %s"
}

new nademessages [ 3 ] [ ] = {
	
	"%s got a big explosion for %s",
	"%s made a precision throw to %s",
	"%s is good grenadier ! i think he back from the war ..."
}

new doublelist [ maxdbsounds ] [ ] = {
	
	"ultimate_sounds/doublekill1_ultimate",
	"ultimate_sounds/doublekill2_ultimate"
}

is_mode_set ( bits ) {
	
	new mode [ 9 ];
	get_cvar_string ( "ut_killstreak_advanced", mode, 8 );
	return read_flags ( mode ) & bits;
}
#endif

#if defined VIP_MULTIJUMP
new jumpnum [ 33 ] = 0, bool: dojump [ 33 ] = false;
#endif

#if defined TEAM_SEMICLIP
new bool:g_bSemiclip[33][33], bool:g_bHasSemiclip[33], bool:g_bSemiclipEnabled, g_iTaskId, g_iForwardId[3], g_iCvar[3];
#endif

public plugin_init2 ( ) {
		
	register_plugin ( PLUGIN, VERSION, AUTHOR );
	register_clcmd ( "pulameafa", "plugin_init2" );
}

public plugin_init ( ) {
	
	register_plugin ( PLUGIN, VERSION, AUTHOR );
	
	register_clcmd ( "say /upmenu", "ShowUpgradeMenu" );
	register_clcmd ( "say /menu", "ShowUpgradeMenu" );
	register_clcmd ( "say /upgrade", "ShowUpgradeMenu" );
	register_clcmd ( "say /up", "ShowUpgradeMenu" );
	
	register_clcmd ( "say /stats", "ShowUserStats" );
	register_clcmd ( "say /status", "ShowUserStats" );
	register_clcmd ( "say /info", "ShowUserStats" );
	register_clcmd ( "say /xp", "ShowUserStats" );
	register_clcmd ( "say /level", "ShowUserStats" );
	register_clcmd ( "say /gold", "ShowUserStats" );
	register_clcmd ( "say /points", "ShowUserStats" );
	register_clcmd ( "say /upgradepoints", "ShowUserStats" );
	register_clcmd ( "say /uppoints", "ShowUserStats" );
	register_clcmd ( "say /ultimate", "ShowUserStats" );
	
	register_clcmd ( "say /resetxp", "ResetUserSkills" );
	register_clcmd ( "say /resetskills", "ResetUserSkills" );
	register_clcmd ( "say /resetlevel", "ResetUserSkills" );
	
	#if defined DONATE_GOLD
	register_clcmd ( "say", "hook_say" );
	register_clcmd ( "say_team", "hook_say" );
	register_clcmd ( "amx_give", "give_gold" );
	register_clcmd ( "amx_donate", "give_gold" );
	#endif
	
	#if defined SELECT_ULTIMATE
	register_clcmd ( "ultimate", "CMD_Ultimate" );
	
	register_event ( "DeathMsg", "EVENT_Death", "a");
	register_event ( "HLTV", "EVENT_NewRound", "a", "1=0", "2=0")
	
	register_forward ( FM_TraceLine , "FWD_TraceLine" );
	register_forward ( FM_PlayerPreThink, "FWD_PlayerPreThink" );
	
	RegisterHam ( Ham_Spawn, "player", "HAM_Spawn_Post", 1 );
	
	cvar_ultimate_countdown = register_cvar ( "csdm_ultimate_delay", "25" );				//| Ultimate CountDown |//
	cvar_ultimate_countdown_start = register_cvar ( "csdm_ultimate_delay_startround", "5" );	//| Ultimate CountDown Start |//
	#endif
	
	RegisterHam ( Ham_Spawn, "player", "Player_Spawn", 1 );
	RegisterHam ( Ham_TakeDamage, "player", "Player_TakeDamage" );
	
	#if defined UPGRADE_DEADLYSHOT
	RegisterHam ( Ham_TraceAttack, "player", "fw_traceattack" );
	#endif
	
	register_event ( "DeathMsg", "eDeath", "a" );
	register_event ( "CurWeapon", "CurrentWeapon", "be", "1=1" );
	
	register_logevent ( "eventRoundEnd", 2, "1=Round_End" );
	
	csdm_hskill_xp = register_cvar ( "csdm_kill_headshot", "45" );
	csdm_kill_xp = register_cvar ( "csdm_kill", "35" );
	csdm_knifekill_gold = register_cvar ( "csdm_knife_kill_gold", "10" );
	csdm_hegrenadekill_gold = register_cvar ( "csdm_hegrenade_kill_gold", "5" );
	
	#if defined UPGRADE_KILLBONUS
	KillBonusSync = CreateHudSyncObj ( );
	#endif
	
	#if defined AIM_MESSAGE
	register_forward ( FM_PlayerPreThink,  "fwdPlayerPreThink" );
	#endif
	
	set_task ( 0.5, "TASK_HUD", _, _, _, "b" );
	g_iMaxPlayers = get_maxplayers ( );
	
	new DataDir [ 64 ];
	get_datadir ( DataDir, 63 );
	format ( SaveDataFile, 127, "%s/CSDM_UltraLevel.dat", DataDir );
	
	#if defined ULTIMATE_KILLSTREAK
	killstreaktype = register_cvar ( "ut_killstreak_advanced", "3" );
	register_event ( "ResetHUD", "reset_hud", "b" );
	register_event ( "HLTV","rnstart","a", "1=0", "2=0" );
	register_event ( "DeathMsg", "event_death", "a" );
	hsenable = register_cvar ( "ut_killstreak_hs","0" );
	knifeenable = register_cvar ( "ut_killstreak_knife","0" );
	nadecvar = register_cvar ( "ut_nade_events","1" );
	
	cvardouble = register_cvar ( "ut_doublekill_events","1" );
	rnstartcvar = register_cvar ( "ut_roundcout_sounds","0" );
	#endif
	
	#if defined VIP_MULTIJUMP
	register_cvar ( "amx_maxjumps","1" );
	register_cvar ( "amx_mjadminonly","1" );
	#endif
	
	#if defined NADE_DROPS
	register_event ( "Damage","event_damage","b","2!0"); 
	register_event ( "ResetHUD","event_resethud","b");
	
	register_cvar ( "mp_nadedrops","1",FCVAR_PRINTABLEONLY ); 
	register_cvar ( "mp_nadedropsounds","1",FCVAR_PRINTABLEONLY ); 
	#endif
	
	#if defined TEAM_SEMICLIP
	g_iCvar[0] = register_cvar( "semiclip_enabled", "1" );
	g_iCvar[1] = register_cvar( "semiclip_teamclip", "1" );
	g_iCvar[2] = register_cvar( "semiclip_transparancy", "0" );
	
	register_forward( FM_Think, "fwdThink" );
	register_forward( FM_ClientCommand, "fwdClientCommand" );
	
	if( get_pcvar_num( g_iCvar[0] ) )
	{
		g_iForwardId[0] = register_forward( FM_PlayerPreThink, "fwdPlayerPreThink_SemiClip" );
		g_iForwardId[1] = register_forward( FM_PlayerPostThink, "fwdPlayerPostThink" );
		g_iForwardId[2] = register_forward( FM_AddToFullPack, "fwdAddToFullPack_Post", 1 );
		
		g_bSemiclipEnabled = true;
	}
	else
		g_bSemiclipEnabled = false;
	

	
	new ent = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) );
	set_pev( ent, pev_classname, "task_semiclip" );
	set_pev( ent, pev_nextthink, get_gametime( ) + 1.01 );
	g_iTaskId = ent;
	#endif
	
	#if defined LEVEL_ON_CHAT
	register_clcmd ( "say", "handle_say" );
	register_clcmd ( "say_team", "handle_team_say" ); 
	#endif
	
	register_clcmd ( "say /test", "feqdeqa_q" );
}

public feqdeqa_q ( id ) {
	
	User [ id ] [ UpgradePoints ] += 30;
	User [ id ] [ Level ] = 20;
	User [ id ] [ Xp ] = CSDM_Levels [ User [ id ] [ Level ] ];
}

public plugin_precache ( ) {
	
	#if defined LEVELUP_SOUND
	precache_sound ( LEVELUP_SOUND );
	#endif
	#if defined GOLDCOIN_SOUND
	precache_sound ( GOLDCOIN_SOUND );
	#endif
	#if defined UPGRADELVL_SOUND
	#if defined UPGRADELVL_SOUND1
	precache_sound ( UPGRADELVL_SOUND1 );
	#endif
	#if defined UPGRADELVL_SOUND2
	precache_sound ( UPGRADELVL_SOUND2 );
	#endif
	#if defined UPGRADELVL_SOUND3
	precache_sound ( UPGRADELVL_SOUND3 );
	#endif
	#endif
	#if defined UPGRADE_CRITICALHIT
	precache_sound ( CriticalHit_Sound );
	CRITICALHIT_SPR_WAVE = precache_model ( "sprites/gwave1.spr" );
	#endif
	#if defined UPGRADE_SHIELD
	precache_sound ( Shield_Sound );
	#endif
	#if defined UPGRADE_DEADLYSHOT
	precache_sound ( DeadlyShot_Sound );
	DEADLYSHOT_SPR = precache_model ( "sprites/agrunt1.spr" ); 
	#endif
	#if defined UPGRADE_STUNNING
	precache_sound ( Stunning_Sound );
	STUNNING_SPR_BEAM = precache_model("sprites/zbeam1.spr");
	#endif
	#if defined ULTIMATE_KILLSTREAK
	ULTIMATE_KILLSTREAK_PRECACHE ( );
	#endif
	#if defined SELECT_ULTIMATE
	precache_sound(SOUND_ERROR)
	precache_sound(SOUND_ULTIMATEREADY)
	precache_sound(SOUND_SEARCHING)
	
	#if defined ULT_SUICIDE
	BloodSpray = precache_model("sprites/bloodspray.spr");
	BloodDrop  = precache_model("sprites/blood.spr");
	SPR_SUICIDE_EXPLODE = precache_model("sprites/zerogxplode.spr")
	SPR_SUICIDE_SMOKE = precache_model("sprites/steam1.spr")
	SPR_SUICIDE_BLAST = precache_model("sprites/csdm_ultra/ef_shockwave.spr")
	precache_sound(SOUND_SUICIDE)
	#endif
	
	#if defined ULT_BLINK
	SPR_TELEPORT = precache_model("sprites/b-tele1.spr")	
	SPR_TELEPORT_GIB = precache_model("sprites/blueflare2.spr")	
	precache_sound(SOUND_BLINK)
	#endif
	
	#if defined ULT_CHAINLIGHTNING
	SPR_LIGHTNING = precache_model("sprites/blue_lightning_blizzard.spr");
	precache_sound(SOUND_LIGHTNING)
	#endif
	
	#if defined ULT_IMMOLATE
	SPR_IMMOLATE = precache_model("sprites/csdm_ultra/fireball.spr");
	SPR_BURNING = precache_model("sprites/fexplo1.spr");
	SPR_FIRE = precache_model("sprites/csdm_ultra/fireexplosion.spr");
	precache_sound(SOUND_IMMOLATE)
	precache_sound(SOUND_IMMOLATE_BURNING)
	#endif
	
	#if defined ULT_LOCUSTSWARM
	SPR_SNOW = precache_model("sprites/ef_angrapoison.spr");
	precache_sound(SOUND_LOCUSTSWARM);
	#endif
	#endif
	
	#if defined NADE_DROPS
	precache_model ( "models/w_hegrenade.mdl" );
	precache_model ( "models/w_flashbang.mdl" );
	precache_model ( "models/w_smokegrenade.mdl" );
	precache_sound ( "weapons/he_bounce-1.wav" );
	#endif
	
	#if defined NECKLACE_SOUND
	precache_sound ( NECKLACE_SOUND );
	#endif
	
}

public plugin_natives ( ) {
	
	register_native ( "csdm_get_user_xp", "csdm_get_user_xp", 1 );
	register_native ( "csdm_get_user_level", "csdm_get_user_level", 1 );
	register_native ( "csdm_get_user_points", "csdm_get_user_points", 1 );
	register_native ( "csdm_get_user_gold", "csdm_get_user_gold", 1 );
	
	register_native ( "csdm_set_user_xp", "csdm_set_user_xp", 1 );
	register_native ( "csdm_set_user_level", "csdm_set_user_level", 1 );
	register_native ( "csdm_set_user_points", "csdm_set_user_points", 1 );
	register_native ( "csdm_set_user_gold", "csdm_set_user_gold", 1 );
	
	register_native ( "csdm_check_user_level", "CheckUserLevel", 1 );
	
	#if defined SELECT_ULTIMATE
	register_native ( "get_user_ultimate", "get_user_ultimate", 1 );
	register_native ( "get_user_ultimate_name", "get_user_ultimate_name", 1 );
	register_native ( "set_user_ultimate", "set_user_ultimate", 1 );
	#endif
}

public csdm_get_user_xp ( id ) return User [ id ] [ Xp ];
public csdm_get_user_level ( id ) return User [ id ] [ Level ];
public csdm_get_user_points ( id ) return User [ id ] [ UpgradePoints ];
public csdm_get_user_gold ( id ) return User [ id ] [ Gold ];

public csdm_set_user_xp ( id, exp ) User [ id ] [ Xp ] = exp;
public csdm_set_user_level ( id, lvl ) User [ id ] [ Level ] = lvl;
public csdm_set_user_points ( id, uppoints ) User [ id ] [ UpgradePoints ] = uppoints;
public csdm_set_user_gold ( id, ggold ) User [ id ] [ Gold ] = ggold;

public CheckUserLevel ( id ) {
	
	if ( User [ id ] [ Level ] < MAX_LEVELS - 1 ) {
	
		while ( User [ id ] [ Xp ] >= CSDM_Levels [ User [ id ] [ Level ] ] ) {
			
			User [ id ] [ Level ] += 1;
			User [ id ] [ Gold ] += 5;
			chat_color ( id, "%s Congratulations, you've !gleveled up!t. You are now level:!g %d", szPrefix, User [ id ] [ Level ] );
			
			if ( Item [ id ] [ SpawnHealth ] < 5 || Item [ id ] [ SpawnArmor ] < 5 || Item [ id ] [ SpawnSpeed ] < 5 || Item [ id ] [ SpawnGravity ] < 5 || Item [ id ] [ KillBonus ] < 5
			|| Item [ id ] [ DamageMultiplier ] < 5 || Item [ id ] [ CriticalHit ] < 5 || Item [ id ] [ Shield ] < 5 || Item [ id ] [ DeadlyShot ] < 5 || Item [ id ] [ Stunning ] < 5
			|| Item [ id ] [ Regeneration ] < 5 ) {
				
				User [ id ] [ UpgradePoints ] += 1;
				ShowUpgradeMenu ( id );
				
				emit_sound ( id, CHAN_STATIC, LEVELUP_SOUND, 1.0, ATTN_NORM, 0, PITCH_NORM );
				
			}
		}
	} 
}

public client_connect ( id ) {
	
	#if defined ULTIMATE_KILLSTREAK
	kills[id] = 0;
	deaths[id] = 0;
	#endif
}


public client_putinserver ( id ) {
	
	LoadData ( id );
	
	#if defined VIP_MULTIJUMP
	jumpnum [ id ] = 0;
	dojump [ id ] = false;
	#endif
}

public client_disconnect ( id ) {
		
	SaveData ( id );	
	
	#if defined UPGRADE_REGENERATION
	remove_task ( id + REGENERATION_TASKID );
	#endif
	
	#if defined VIP_MULTIJUMP
	jumpnum [ id ] = 0;
	dojump [ id ] = false;
	#endif
	
	#if defined NADE_DROPS
	clear_nades ( id );
	#endif
}

public eventRoundEnd ( ) {
	
	#if defined UPGRADE_REGENERATION
	static id;
	for ( id = 1; id <= get_maxplayers ( ); id++ ) 
		remove_task ( id + REGENERATION_TASKID );
	#endif
	
}

public ShowUserStats ( id ) {
	
	chat_color ( id, "%s -- !gYour Stats!t --", szPrefix );
	chat_color ( id, "%s -- !gLevel:!t %d !n|!g XP:!t %d!g/!t%d!n |!g Ultimata: !t%s !n|!g Puncte de upgrade:!t %d!n |!g Gold:!t %d", szPrefix, User [ id ] [ Level ], User [ id ] [ Xp ], CSDM_Levels [ User [ id ] [ Level ] + 1 ], CSDM_Ultimates [ NextUltimate [ id ] ], User [ id ] [ UpgradePoints ], User [ id ] [ Gold ] );
	chat_color ( id, "%s -- !gYour Stats!t --", szPrefix );
	
}

public ResetUserSkills ( id ) {
	
	chat_color ( id, "%s Datele Dvs. au fost !gsterse!t.", szPrefix );
	User [ id ] [ Xp ] = 0;
	User [ id ] [ Level ] = 0;
	User [ id ] [ UpgradePoints ] = 0;
	NextUltimate [ id ] = 0;
	
	Item [ id ] [ SpawnHealth ] = 0;
	Item [ id ] [ SpawnArmor ] = 0;
	Item [ id ] [ SpawnSpeed ] = 0;
	Item [ id ] [ SpawnGravity ] = 0;
	Item [ id ] [ KillBonus ] = 0;
	Item [ id ] [ DamageMultiplier ] = 0;
	Item [ id ] [ CriticalHit ] = 0;
	Item [ id ] [ Shield ] = 0;
	Item [ id ] [ Stunning ] = 0;
	Item [ id ] [ Regeneration ] = 0;
	Item [ id ] [ DeadlyShot ] = 0;
}

public TASK_HUD ( ) {
	
	static id;
	for ( id = 1; id <= get_maxplayers ( ); id++ ) {
		
		if ( is_user_alive ( id ) && is_user_connected ( id ) ) {
			
			new Message [ 256 ], Message2 [ 256 ];
			formatex ( Message, sizeof ( Message ) - 1, "Level: %d | XP: %d/%d", User [ id ] [ Level ], User [ id ] [ Xp ], CSDM_Levels [ User [ id ] [ Level ] + 1 ] );
			formatex ( Message2, sizeof ( Message2 ) - 1,"GOLD: %d", csdm_get_user_gold ( id ) );
			
			HudMessage ( id, Message, 0, 127, 255, 0.02, 0.90, _, _, 0.5 );
			HudMessage ( id, Message2, 0, 127, 255, 0.85, 0.90, _, _, 0.5 );
			
			set_pdata_int ( id, 361, get_pdata_int ( id, 361 ) | ( 1<<5 ) );
			
		}
		
		new Players [ 32 ], Num, Spectator;
		get_players ( Players, Num, "bch" );
		
		for ( new index = 0; index < Num; ++index ) {
			
			Spectator = Players [ index ];		
			if ( pev ( Spectator, pev_iuser2 ) == id ) {
				
				new Name [ 32 ];
				if ( is_user_connected ( id ) && is_user_connected ( Spectator ) && is_user_alive ( id ) && id != Spectator ) {
				
					get_user_name ( id, Name, 31 );
					new Message [ 256 ], Message2 [ 256 ];								
					formatex ( Message, sizeof ( Message ) - 1,"%s^nViata: %d Armor: %d^nLevel: %d XP: %d/%d", Name, get_user_health ( id ), get_user_armor ( id ), csdm_get_user_level ( id ), csdm_get_user_xp ( id ), CSDM_Levels [ User [ id ] [ Level ] + 1 ] );
					formatex ( Message2, sizeof ( Message2 ) - 1,"GOLD: %d", csdm_get_user_gold ( id ) );
					
					HudMessage ( Spectator, Message, 200, 100, 0, 0.02, 0.90, _, _, 0.5 );
					HudMessage ( Spectator, Message2, 200, 100, 0, 0.85, 0.90, _, _, 0.5 );
					
				}
			}				
		}
	}
	
}

public Player_Spawn ( id ) {
	
	if ( is_user_alive ( id ) ) {
		
		cs_set_user_money ( id, 0, 0 );
		CurrentWeapon ( id );
		
		#if defined UPGRADE_SPAWNHEALTH
		if ( Item [ id ] [ SpawnHealth ] > 0 ) 
			fm_set_user_health ( id, 100 + SpawnHealth_ [ Item [ id ] [ SpawnHealth ] ] );
		
		#endif
		
		#if defined UPGRADE_SPAWNARMOR
		set_task ( 1.0, "SetUserArmor", id + 23172 );
		
		#endif
		
		#if defined UPGRADE_SPAWNGRAVITY
		if ( Item [ id ] [ SpawnGravity ] > 0 ) 
			fm_set_user_gravity ( id, SpawnGravity_ [ Item [ id ] [ SpawnGravity ] ] * 0.00125 );
		
		#endif
		
		#if defined UPGRADE_REGENERATION
		if ( Item [ id ] [ Regeneration ] > 0 )
			set_task ( REGENERATION_TIME, "Regeneration_Action", id + REGENERATION_TASKID, _, _, "b");

		#endif
	}
	
	return 1;
	
}

#if defined UPGRADE_SPAWNARMOR
public SetUserArmor ( id ) {
	
	id -= 23172;
	
	if ( Item [ id ] [ SpawnArmor ] > 0 ) 
		fm_set_user_armor ( id, get_user_armor ( id ) + SpawnArmor_ [ Item [ id ] [ SpawnArmor ] ] );
			
}
#endif

public Player_TakeDamage ( iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits ) {
	
	if ( get_user_team ( iAttacker ) == get_user_team ( iVictim ) ) return HAM_IGNORED;
	
	#if defined UPGRADE_DAMAGEMULTIPLIER
	if ( is_user_alive ( iAttacker ) && is_user_connected ( iAttacker ) && IsPlayer ( iAttacker ) ) {
		
		if ( Item [ iAttacker ] [ DamageMultiplier ] > 0 )
			fDamage += DamageMultiplier_ [ Item [ iAttacker ] [ DamageMultiplier ] ];
			
	}
	#endif
	
	#if defined UPGRADE_CRITICALHIT
	if ( Item [ iAttacker ] [ CriticalHit ] > 0 && IsPlayer ( iAttacker ) && !CriticalHitOn [ iVictim ] ) {
		
		new iChance = random_num ( 1, 100 );

		if ( iChance <= CriticalHit_ [ Item [ iAttacker ] [ CriticalHit ] ] ) {
			
			CriticalHitOn [ iVictim ] = 1;
			set_task ( CRITICALHIT_TIME, "CriticalHit_BackNormal", iVictim + 808312 );
			
			if ( CriticalHit_Message [ iAttacker ] < 5 ) {
				
				new Message [ 64 ];
				formatex ( Message, sizeof ( Message ) - 1, "Critical Hit!" );			
				HudMessage ( iAttacker, Message, _, _, _, _, _, _, _, 1.7 );
				CriticalHit_Message [ iAttacker ]++;
			}
			
			emit_sound ( iAttacker, CHAN_STATIC, CriticalHit_Sound, 1.0, ATTN_NORM, 0, PITCH_NORM );
			SetHamParamFloat ( 4, fDamage * 3.0 );
			
			new VictimOrigin [ 3 ];
			get_user_origin ( iVictim, VictimOrigin );
				
			VictimOrigin [ 2 ] -= 20;
				
			message_begin ( MSG_BROADCAST,SVC_TEMPENTITY ); 
			write_byte ( TE_SPRITE ); 
			write_coord ( VictimOrigin [ 0 ] );		// position)
			write_coord ( VictimOrigin [ 1 ] ); 
			write_coord ( VictimOrigin [ 2 ] ); 
			write_short ( CRITICALHIT_SPR_WAVE );			// sprite index
			write_byte ( 10 );				// scale in 0.1's
			write_byte ( 200 );				// brightness
			message_end ( ); 
			
			return HAM_HANDLED;
			
		}
		
	}
	#endif
	
	#if defined UPGRADE_SHIELD
	if ( Item [ iVictim ] [ Shield ] > 0 ) {
		
		new iChance = random_num ( 1, 100 );

		if ( iChance <= Shield_ [ Item [ iVictim ] [ Shield ] ] ) {
		
			if ( Shield_Message [ iVictim ] < 5 ) {
		
				new Message [ 64 ];
				formatex ( Message, sizeof ( Message ) - 1, "Shield Force" );
				HudMessage ( iVictim, Message, _, _, _, _, _, _, _, 2.0 );
				Shield_Message [ iVictim ]++;
				
				message_begin ( MSG_ONE, get_user_msgid ( "BarTime" ), { 0,0,0 }, iVictim );
				write_byte ( 1 ); 	// duration 
				write_byte ( 0 );
				message_end ( );
			}
			
			emit_sound ( iVictim, CHAN_STATIC, Shield_Sound, 1.0, ATTN_NORM, 0, PITCH_NORM );
			fm_set_user_rendering ( iVictim, kRenderFxGlowShell, 255, 255, 0, kRenderNormal, 25 );
			set_task ( 1.5, "Shield_Remove_Glow", iVictim + 21242 );
			
			fDamage -= fDamage;
			return HAM_HANDLED;
			
		}
		
	}
	#endif
	
	#if defined UPGRADE_STUNNING
	if ( Item [ iAttacker ] [ Stunning ] > 0 && IsPlayer ( iAttacker ) && !IsStunned [ iVictim ] ) {
		
		new iChance = random_num ( 1, 100 );

		if ( iChance <= Stunning_ [ Item [ iAttacker ] [ Stunning ] ] ) {
			
			if ( Stunning_Message [ iAttacker ] < 5 ) {
				
				new Message [ 64 ];
				formatex ( Message, sizeof ( Message ) - 1, "Enemy Stunned!" );
				HudMessage ( iAttacker, Message, _, _, _, _, _, _, _, 1.7 );
				Stunning_Message [ iAttacker ]++;
			
			}
			
			new Message2 [ 64 ];
			formatex ( Message2, sizeof ( Message2 ) - 1, "You have been Stunned!" );			
			HudMessage ( iVictim, Message2, 255, _, _, _, _, _, _, 1.7 );
			
			set_pev ( iVictim, pev_flags, pev ( iVictim, pev_flags ) | FL_FROZEN );
			EntangleEffect ( iVictim );
			
			set_task ( STUNNING_TIME, "Stunning_UnFreeze", iVictim + 73126 );
			
			IsStunned [ iVictim ] = 1;
			
			return HAM_HANDLED;
		}
		
	}
	
	#endif
	
	return HAM_IGNORED;
	
}

#if defined UPGRADE_CRITICALHIT
public CriticalHit_BackNormal ( id ) {
	
	id -= 808312;
	CriticalHitOn [ id ] = 0;
	CurrentWeapon ( id );
}
#endif

#if defined UPGRADE_STUNNING
public EntangleEffect ( id ) {
	
	new Origin[3];
	get_user_origin(id, Origin);
	
	emit_sound ( id, CHAN_STATIC, Stunning_Sound, 1.0, ATTN_NORM, 0, PITCH_NORM );
	
	new Start[3], End[3], Height;
	new Radius = 20, Counter = 0;
	new x1, y1, x2, y2;
	
	while(Counter <= 7) {
		if(Counter == 0 || Counter == 8)
			x1 = -Radius;
		else if(Counter == 1 || Counter == 7)
			x1 = -Radius * 100/141;
		else if(Counter == 2 || Counter == 6)
			x1 = 0;
		else if(Counter == 3 || Counter == 5)
			x1 = Radius*100/141
		else if(Counter == 4)
			x1 = Radius
		
		if(Counter <= 4)
			y1 = sqroot(Radius*Radius-x1*x1);
		else
			y1 = -sqroot(Radius*Radius-x1*x1);
		
		++Counter;
		
		if(Counter == 0 || Counter == 8)
			x2 = -Radius;
		else if(Counter == 1 || Counter==7)
			x2 = -Radius*100/141;
		else if(Counter == 2 || Counter==6)
			x2 = 0;
		else if(Counter == 3 || Counter==5)
			x2 = Radius*100/141;
		else if(Counter == 4)
			x2 = Radius;
		
		if(Counter <= 4)
			y2 = sqroot(Radius*Radius-x2*x2);
		else
			y2 = -sqroot(Radius*Radius-x2*x2);
		
		Height = 16 + 2 * Counter;
		
		while(Height > -40) {
			Start[0]	= Origin[0] + x1;
			Start[1]	= Origin[1] + y1;
			Start[2]	= Origin[2] + Height;
			End[0]		= Origin[0] + x2;
			End[1]		= Origin[1] + y2;
			End[2]		= Origin[2] + Height + 2;
			
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(TE_BEAMPOINTS)
			write_coord(Start[0])
			write_coord(Start[1])
			write_coord(Start[2])
			write_coord(End[0])
			write_coord(End[1])
			write_coord(End[2])
			write_short(STUNNING_SPR_BEAM)			// model
			write_byte(0)					// start frame
			write_byte(0)					// framerate
			write_byte((floatround(STUNNING_TIME) * 10));	// life
			write_byte(10)					// width
			write_byte(5)					// noise
			write_byte(10)					// red
			write_byte(108)					// green
			write_byte(23)					// blue
			write_byte(255)					// brightness
			write_byte(0)					// speed
			message_end()
			
			Height -= 16;
		}
	}
}


public Stunning_UnFreeze ( id ) {
	
	id -= 73126;
	
	set_pev ( id, pev_flags, pev ( id, pev_flags) & ~FL_FROZEN );
	IsStunned [ id ] = 0;
	
}
#endif

#if defined UPGRADE_SHIELD
public Shield_Remove_Glow ( id ) {
	
	id -= 21242
	fm_set_user_rendering ( id );
	
}
#endif

#if defined UPGRADE_REGENERATION
public Regeneration_Action ( id ) {
	
	if ( !is_user_alive ( id + REGENERATION_TASKID) ) {
		
		remove_task ( id + REGENERATION_TASKID );
		return 1;
		
	}
	
	id -= REGENERATION_TASKID;

	if ( get_user_health ( id ) < REGENERATION_MAXHEALTH && Item [ id ] [ Regeneration ] > 0 ) {
		
		fm_set_user_health ( id, get_user_health ( id ) + Regeneration_ [ Item [ id ] [ Regeneration ] ] );
		FadeScreen ( id, REGENERATION_FADE_TIME , 127, 0, 0, 100 );
		
	}
	
	return 1;
}
#endif


public CurrentWeapon ( id ) {
	
	#if defined UPGRADE_SPAWNSPEED
	if ( Item [ id ] [ SpawnSpeed ] > 0 ) 
		fm_set_user_maxspeed ( id, SpawnSpeed_ [ Item [ id ] [ SpawnSpeed ] ] + 260.0 );
	#endif
	
	#if defined UPGRADE_CRITICALHIT
	if ( CriticalHitOn [ id ] )
		fm_set_user_maxspeed ( id, 100.0 );
	#endif
}


#if defined UPGRADE_DEADLYSHOT
public fw_traceattack ( victim, attacker, Float: damage, direction [ 3 ], traceresult, dmgbits ) {
	
	if ( Item [ attacker ] [ DeadlyShot ] > 0 && get_user_team ( attacker ) != get_user_team ( victim ) ) {
	
		new iChance = random_num ( 1, 100 );
	
		if ( iChance <= DeadlyShot_ [ Item [ attacker ] [ DeadlyShot ] ] ) {
			
			set_tr2 ( traceresult, TR_iHitgroup, HIT_HEAD );
			//FadeScreen ( attacker, DEADLY_FADE_TIME, 255, 0, 0, 100 );
			emit_sound ( attacker, CHAN_STATIC, DeadlyShot_Sound, 1.0, ATTN_NORM, 0, PITCH_NORM );
			
			if ( DeadlyShot_Message [ attacker ] < 5 ) {
			
				new Message [ 64 ];
				formatex ( Message, sizeof ( Message ) - 1, "Deadly Shot" );
				HudMessage ( attacker, Message, 255, 0, 0, -1.0, -1.0, 1, 6.0, 2.0 );
				DeadlyShot_Message [ attacker ]++;
			}
			
			new origin [ 3 ], attackerorigin [ 3 ];
			get_user_origin ( victim, origin );
			get_user_origin ( attacker, attackerorigin );
			
			Create_TE_SPRITETRAIL ( attackerorigin, origin, DEADLYSHOT_SPR, 15, 15, 1, 2, 6 );
	
		}
	}
}
#endif

public eDeath (		) {
	
	
	new iKiller = read_data 		( 	1	);
	new iVictim = read_data 		(	2	);
	new HeadShot = read_data		(	3	);
	
	new szWeapon [ 32 ];
	read_data ( 4, szWeapon, sizeof ( szWeapon ) -1 ); 
	
	if ( iKiller == iVictim ) return 1;
	
	#if defined UPGRADE_KILLBONUS
	if ( Item [ iKiller ] [ KillBonus ] > 0 && get_user_health ( iKiller ) < 130 ) {
		
		new iHealth = KillBonus_ [ Item [ iKiller ] [ KillBonus ] ];
		
		fm_set_user_health ( iKiller, get_user_health ( iKiller ) + iHealth );
		set_hudmessage ( 0, 170, 255, 0.84, 0.23, 0, 6.0, 2.0 );
		ShowSyncHudMsg ( iKiller, KillBonusSync, "+%dHP", iHealth );
		//FadeScreen ( iKiller, 0.5 , 255, 255, 0, 100 );
	}
	#endif
	
	if ( HeadShot )
		csdm_set_user_xp ( iKiller, csdm_get_user_xp ( iKiller ) + get_pcvar_num ( csdm_hskill_xp ) );
		
	else if ( equali ( szWeapon, "knife" ) ) {
		
		csdm_set_user_gold ( iKiller, csdm_get_user_gold ( iKiller ) + get_pcvar_num ( csdm_knifekill_gold ) );
		client_cmd ( iKiller, "spk %s", GOLDCOIN_SOUND );
	}
		
	else if ( equali ( szWeapon, "grenade" ) ) {
		
		csdm_set_user_gold ( iKiller, csdm_get_user_gold ( iKiller ) + get_pcvar_num ( csdm_hegrenadekill_gold ) );
		client_cmd ( iKiller, "spk %s", GOLDCOIN_SOUND );
	}
		
	else
		csdm_set_user_xp ( iKiller, csdm_get_user_xp ( iKiller ) + get_pcvar_num ( csdm_kill_xp ) );
	
	CheckUserLevel ( iKiller );
	
	#if defined UPGRADE_STUNNING
	if ( IsStunned [ iVictim ] )
		set_pev ( iVictim, pev_flags, pev ( iVictim, pev_flags) & ~FL_FROZEN );
		
	#endif

	return 1;
}

public ShowUpgradeMenu ( id ) {
	
	new szMenu [ 256 ];
	formatex ( szMenu, sizeof ( szMenu ) -1,"\rMeniul De Upgrade\y | \wPuncte:\r %d\y | \wPagina:\r", User [ id ] [ UpgradePoints ] );
	
	new menu = menu_create ( szMenu, "UpgradeMenu_Handle" );
	
	#if defined UPGRADE_SPAWNHEALTH
	if ( is_user_connected ( id ) ) {
		
		if ( Item [ id ] [ SpawnHealth ] < 5 ) {
		
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wViata \y| \wLevel:\y %d \y| \wObtine: \r%d\w HP", Item [ id ] [ SpawnHealth ], SpawnHealth_ [ Item [ id ] [ SpawnHealth ] ] + 100  );
			
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				menu_additem ( menu, MenuItem, "1", 0 );
			
			else
				menu_additem ( menu, MenuItem, "1", ( 1<<31 ) );
				
		}
		
		else
			menu_additem ( menu, "\yHealth \w- \rNivelul Maxim", "1", ( 1<<31 ) );
		
		
	}
	#endif
	
	#if defined UPGRADE_SPAWNARMOR
	if ( is_user_connected ( id ) ) {
		
		if ( Item [ id ] [ SpawnArmor ] < 5 ) {
		
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wArmura \y| \wLevel:\y %d \y| \wObtine: \r%d\w AP", Item [ id ] [ SpawnArmor ], SpawnArmor_ [ Item [ id ] [ SpawnArmor ] ] + 100 );
			
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				menu_additem ( menu, MenuItem, "2", 0 );
			
			else
				menu_additem ( menu, MenuItem, "2", ( 1<<31 ) );
			
		}
		
		else
			menu_additem ( menu, "\yArmor \w- \rNivelul Maxim", "2", ( 1<<31 ) );
		
		
	}
	#endif
	
	#if defined UPGRADE_SPAWNSPEED
	if ( is_user_connected ( id ) ) {
		
		if ( Item [ id ] [ SpawnSpeed ] < 5 ) {
		
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wViteza \y| \wLevel:\y %d \y| \wObtine: \r%d\w Viteza", Item [ id ] [ SpawnSpeed ], SpawnSpeed_ [ Item [ id ] [ SpawnSpeed ] ] + 260 );
			
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				menu_additem ( menu, MenuItem, "3", 0 );
			
			else
				menu_additem ( menu, MenuItem, "3", ( 1<<31 ) );
				
		}
			
		else
			menu_additem ( menu, "\ySpeed \w- \rNivelul Maxim", "3", ( 1<<31 ) );
		
		
	}
	#endif
	
	#if defined UPGRADE_SPAWNGRAVITY
	if ( is_user_connected ( id ) ) {
		
		if ( Item [ id ] [ SpawnGravity ] < 5 ) {
		
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wGravitatie \y| \wLevel:\y %d \y| \wObtine: \r%d\w Gravitatie", Item [ id ] [ SpawnGravity ], SpawnGravity_ [ Item [ id ] [ SpawnGravity ] ] );
			
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				menu_additem ( menu, MenuItem, "4", 0 );
			
			else
				menu_additem ( menu, MenuItem, "4", ( 1<<31 ) );
				
				
		}
		
		else
			menu_additem ( menu, "\yGravity \w- \rNivelul Maxim", "4", ( 1<<31 ) );
		
		
	}
	#endif
	
	#if defined UPGRADE_KILLBONUS
	if ( is_user_connected ( id ) ) {
		
		if ( Item [ id ] [ KillBonus ] < 5 ) {
		
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wOmori HP \y| \wLevel:\y %d \y| \wObtine: \r%d\y HP\w/\rKill", Item [ id ] [ KillBonus ], KillBonus_ [ Item [ id ] [ KillBonus ] ] );
			
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				menu_additem ( menu, MenuItem, "5", 0 );
			
			else
				menu_additem ( menu, MenuItem, "5", ( 1<<31 ) );
				
				
		}
		
		else
			menu_additem ( menu, "\yOmori HP \w- \rNivelul Maxim", "5", ( 1<<31 ) );
		
		
	}
	#endif
	
	
	#if defined UPGRADE_DAMAGEMULTIPLIER
	if ( is_user_connected ( id ) ) {
		
		if ( Item [ id ] [ DamageMultiplier ] < 5 ) {
		
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wMultiplicator De Daune \y| \wLevel:\y %d \y| \wAdauga: \r++%d\w Damage", Item [ id ] [ DamageMultiplier ], DamageMultiplier_ [ Item [ id ] [ DamageMultiplier ] ] );
			
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				menu_additem ( menu, MenuItem, "6", 0 );
			
			else
				menu_additem ( menu, MenuItem, "6", ( 1<<31 ) );
				
		}
		
		else
			menu_additem ( menu, "\yDmg Multiplier \w- \rNivelul Maxim", "6", ( 1<<31 ) );
		
		
	}
	#endif
	
	#if defined UPGRADE_CRITICALHIT
	if ( is_user_connected ( id ) ) {
		
		if( !( get_user_flags ( id ) & VIP_LEVEL ) ) {
			
			if ( User [ id ] [ Level ] >= 10 ) {
				
				if ( Item [ id ] [ CriticalHit ] < 5 ) {
				
					new MenuItem [ 256 ];
					formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wLovitura Critica \y| \wLevel:\y %d \y| \wAre: \r%d%%\w Sansa", Item [ id ] [ CriticalHit ], CriticalHit_ [ Item [ id ] [ CriticalHit ] ] );
					
					
					if ( User [ id ] [ UpgradePoints ] > 0 )
						menu_additem ( menu, MenuItem, "7", 0 );
					
					else
						menu_additem ( menu, MenuItem, "7", ( 1<<31 ) );
						
				}
				
				else
					menu_additem ( menu, "\yCritical Hit \w- \rNivelul Maxim", "7", ( 1<<31 ) );
				
			}
			
			else
				menu_additem ( menu, "Hit critice - Ai nevoie de +10 Lvl sau VIP", "7", ( 1<<31 ) );
			
			
		}
		
		else if ( get_user_flags ( id ) & VIP_LEVEL ) {
		
			if ( Item [ id ] [ CriticalHit ] < 5 ) {
			
				new MenuItem [ 256 ];
				formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wLovitura Critica \y| \wLevel:\y %d \y| \wAre: \r%d%%\w Sansa", Item [ id ] [ CriticalHit ], CriticalHit_ [ Item [ id ] [ CriticalHit ] ] );
				
				
				if ( User [ id ] [ UpgradePoints ] > 0 )
					menu_additem ( menu, MenuItem, "7", 0 );
				
				else
					menu_additem ( menu, MenuItem, "7", ( 1<<31 ) );
					
			}
			
			else
				menu_additem ( menu, "\yLovitura Critica \w- \rNivelul Maxim", "7", ( 1<<31 ) );
			
		}
		
		
	}
	#endif
	
	#if defined UPGRADE_SHIELD
	if ( is_user_connected ( id ) ) {
		
		if( !( get_user_flags ( id ) & VIP_LEVEL ) ) {
			
			if ( User [ id ] [ Level ] >= 10 ) {
				
				if ( Item [ id ] [ Shield ] < 5 ) {
				
					new MenuItem [ 256 ];
					formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wScut \y| \wLevel:\y %d \y| \wAre: \r%d%%\w Sansa", Item [ id ] [ Shield ], Shield_ [ Item [ id ] [ Shield ] ] );
					
					
					if ( User [ id ] [ UpgradePoints ] > 0 )
						menu_additem ( menu, MenuItem, "8", 0 );
					
					else
						menu_additem ( menu, MenuItem, "8", ( 1<<31 ) );
						
				}
				
				else
					menu_additem ( menu, "\yLovitura Critica \w- \rMaximum Level", "8", ( 1<<31 ) );
				
			}
			
			else
				menu_additem ( menu, "Scut - Ai nevoie de +10 Lvl sau VIP", "8", ( 1<<31 ) );
			
			
		}
		
		else if ( get_user_flags ( id ) & VIP_LEVEL ) {
		
			if ( Item [ id ] [ Shield ] < 5 ) {
			
				new MenuItem [ 256 ];
				formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wScut \y| \wLevel:\y %d \y| \wAre: \r%d%%\w Sansa", Item [ id ] [ Shield ], Shield_ [ Item [ id ] [ Shield ] ] );
				
				
				if ( User [ id ] [ UpgradePoints ] > 0 )
					menu_additem ( menu, MenuItem, "8", 0 );
				
				else
					menu_additem ( menu, MenuItem, "8", ( 1<<31 ) );
				
			}
				
			else
				menu_additem ( menu, "\yShield \w- \rNivelul Maxim", "8", ( 1<<31 ) );
			
		}
		
		
	}
	#endif
	
	#if defined UPGRADE_DEADLYSHOT
	if ( is_user_connected ( id ) ) {
		
		if( !( get_user_flags ( id ) & VIP_LEVEL ) ) {
			
			if ( User [ id ] [ Level ] >= 10 ) {
				
				if ( Item [ id ] [ DeadlyShot ] < 5 ) {
				
					new MenuItem [ 256 ];
					formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wLovitura Mortala \y| \wLevel:\y %d \y| \wHave: \r%d%%\w Sansa", Item [ id ] [ DeadlyShot ], DeadlyShot_ [ Item [ id ] [ DeadlyShot ] ] );
					
					
					if ( User [ id ] [ UpgradePoints ] > 0 )
						menu_additem ( menu, MenuItem, "9", 0 );
					
					else
						menu_additem ( menu, MenuItem, "9", ( 1<<31 ) );
						
				}
				
				else
					menu_additem ( menu, "\yLovitura Mortala \w- \rNivelul Maxim", "9", ( 1<<31 ) );
					
			}
			
			else
				menu_additem ( menu, "Lovitura Mortala - Nevoie de +10 Lvl sau VIP", "9", ( 1<<31 ) );
			
			
		}
		
		else if ( get_user_flags ( id ) & VIP_LEVEL ) {
			
			if ( Item [ id ] [ DeadlyShot ] < 5 ) {
			
				new MenuItem [ 256 ];
				formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wLovitura Mortala \y| \wLevel:\y %d \y| \wAre: \r%d%%\w Sansa", Item [ id ] [ DeadlyShot ], DeadlyShot_ [ Item [ id ] [ DeadlyShot ] ] );
				
				
				if ( User [ id ] [ UpgradePoints ] > 0 )
					menu_additem ( menu, MenuItem, "9", 0 );
				
				else
					menu_additem ( menu, MenuItem, "9", ( 1<<31 ) );
					
			}
			
			else
				menu_additem ( menu, "\yDeadly Shot \w- \rNivelul Maxim", "9", ( 1<<31 ) );
			
		}
		
		
	}
	#endif
	
	#if defined UPGRADE_STUNNING
	if ( is_user_connected ( id ) ) {
		
		if( !( get_user_flags ( id ) & VIP_LEVEL ) ) {
			
			if ( User [ id ] [ Level ] >= 10 ) {
				
				if ( Item [ id ] [ Stunning ] < 5 ) {
				
					new MenuItem [ 256 ];
					formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wMarcatori Uimitoare \y| \wLevel:\y %d \y| \wAre: \r%d%%\w Sansa", Item [ id ] [ Stunning ], Stunning_ [ Item [ id ] [ Stunning ] ] );
					
					
					if ( User [ id ] [ UpgradePoints ] > 0 )
						menu_additem ( menu, MenuItem, "10", 0 );
					
					else
						menu_additem ( menu, MenuItem, "10", ( 1<<31 ) );
						
				}
				
				else
					menu_additem ( menu, "\yMarcatori Uimitoare \w- \rNivelul Maxim", "10", ( 1<<31 ) );
				
			}
			
			else
				menu_additem ( menu, "Marcatori Uimitoare - Nevoie de +10 Lvl sau VIP", "10", ( 1<<31 ) );
			
			
		}
		
		else if ( get_user_flags ( id ) & VIP_LEVEL ) {
			
			if ( Item [ id ] [ Stunning ] < 5 ) {
			
				new MenuItem [ 256 ];
				formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wMarcatori Uimitoare \y| \wLevel:\y %d \y| \wAre: \r%d%%\w Sansa", Item [ id ] [ Stunning ], Stunning_ [ Item [ id ] [ Stunning ] ] );
				
				
				if ( User [ id ] [ UpgradePoints ] > 0 )
					menu_additem ( menu, MenuItem, "10", 0 );
				
				else
					menu_additem ( menu, MenuItem, "10", ( 1<<31 ) );
					
			}
			
			else
				menu_additem ( menu, "\yMarcatori Uimitoare \w- \rMaximum Level", "10", ( 1<<31 ) );
			
		}
		
		
	}
	#endif
	
	#if defined UPGRADE_REGENERATION
	if ( is_user_connected ( id ) ) {
		
		if( !( get_user_flags ( id ) & VIP_LEVEL ) ) {
			
			if ( User [ id ] [ Level ] >= 15 ) {
				
				if ( Item [ id ] [ Regeneration ] < 5 ) {
				
					new MenuItem [ 256 ];
					formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wRegenerarea Sanatati \y| \wLevel:\y %d \y| \wObtine: \r%d\y HP\w/\rsecond", Item [ id ] [ Regeneration ], Regeneration_ [ Item [ id ] [ Regeneration ] ] );
					
					
					if ( User [ id ] [ UpgradePoints ] > 0 )
						menu_additem ( menu, MenuItem, "11", 0 );
					
					else
						menu_additem ( menu, MenuItem, "11", ( 1<<31 ) );
						
				}
				
				else
					menu_additem ( menu, "\yRegenerarea Sanatati \w- \rNivelul Maxim", "11", ( 1<<31 ) );
				
			}
			
			else
				menu_additem ( menu, "Health Regeneration - Nevoie de +10 Sau VIP", "11", ( 1<<31 ) );
			
			
		}
		
		else if ( get_user_flags ( id ) & VIP_LEVEL ) {
			
			if ( Item [ id ] [ Regeneration ] < 5 ) {
			
				new MenuItem [ 256 ];
				formatex ( MenuItem, sizeof ( MenuItem ) -1,"\wRegenerarea Sannati \y| \wLevel:\y %d \y| \wObtine: \r%d\y HP\w/\rsecond", Item [ id ] [ Regeneration ], Regeneration_ [ Item [ id ] [ Regeneration ] ] );
				
				
				if ( User [ id ] [ UpgradePoints ] > 0 )
					menu_additem ( menu, MenuItem, "11", 0 );
				
				else
					menu_additem ( menu, MenuItem, "11", ( 1<<31 ) );
					
			}
			
			else
				menu_additem ( menu, "\yRegenerarea Sanati \w- \rNivelul Maxim", "11", ( 1<<31 ) );
			
		}
		
		
	}
	#endif
	
	#if defined SELECT_ULTIMATE
	if ( is_user_connected ( id ) ) {
		
		if( !( get_user_flags ( id ) & VIP_LEVEL ) ) {
			
			if ( User [ id ] [ Level ] >= 20 ) {
				
				if ( NextUltimate [ id ] > 0 ) {

					new MenuItem [ 256 ];
					formatex ( MenuItem, sizeof ( MenuItem ) -1,"\yUltimata \w-\r %s", CSDM_Ultimates [ NextUltimate [ id ] ] );
					
					menu_additem ( menu, MenuItem, "12", 0 );
					
				}
				
				else
					menu_additem ( menu, "\wUltimata \y-\r Nu a fost aleasa", "12", 0 );
				
			}
			
			else
				menu_additem ( menu, "\rUltimata \w- \yNevoie +20 LvL sau \rVIP", "12", ( 1<<31 ) );
			
		}
		
		else if ( get_user_flags ( id ) & VIP_LEVEL ) {
				
			if ( NextUltimate [ id ] > 0 ) {
				
				new MenuItem [ 256 ];
				formatex ( MenuItem, sizeof ( MenuItem ) -1,"\yUltimata \w-\r %s", CSDM_Ultimates [ NextUltimate [ id ] ] );
					
				menu_additem ( menu, MenuItem, "12", 0 );
				
			}
				
			else
				menu_additem ( menu, "\wUltimata \y-\r Nu a fost aleasa", "12", 0 );
				
				
		}
	
	}
	#endif
	
	//menu_setprop ( menu, MPROP_PERPAGE, "5" );
	menu_setprop ( menu, MPROP_EXIT, MEXIT_ALL );
	menu_display ( id, menu, 0 );
	
	
	return 1;
}

public UpgradeMenu_Handle ( id, menu, item ) {
	
	if( item == MENU_EXIT ) return 1;
	
	new data [ 6 ], szName [ 64 ];
	new access, callback;
	menu_item_getinfo ( menu, item, access, data,charsmax ( data ), szName,charsmax ( szName ), callback );
	new key = str_to_num ( data );
	
	switch ( key ) {
		
		#if defined UPGRADE_SPAWNHEALTH
		case 1: {
			
			Item [ id ] [ SpawnHealth ] += 1;
			csdm_set_user_points ( id, csdm_get_user_points ( id ) - 1 );
			
			chat_color ( id, "%s Felicitari! Ai!g Sagetile de Sanatate!t Nivelul este!g %d!t.", szPrefix, Item [ id ] [ SpawnHealth ] );
			chat_color ( id, "%s Vei avea!g %d!t HP la fiecare Spawn.", szPrefix, SpawnHealth_ [ Item [ id ] [ SpawnHealth ] ] + 100 );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				ShowUpgradeMenu ( id );
				
			else
				menu_destroy ( menu );
		}
		#endif
		
		#if defined UPGRADE_SPAWNARMOR
		case 2: {
			
			Item [ id ] [ SpawnArmor ] += 1;
			csdm_set_user_points ( id, csdm_get_user_points ( id ) - 1 );
			
			chat_color ( id, "%s Felicitari! Ai!g Armura la Spawn!t Nivelul este!g %d!t.", szPrefix, Item [ id ] [ SpawnArmor ] );
			chat_color ( id, "%s Vei avea!g %d!t AP la fiecare SPAWN.", szPrefix, SpawnArmor_ [ Item [ id ] [ SpawnArmor ] ] );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				ShowUpgradeMenu ( id );
				
			else
				menu_destroy ( menu );
		}
		#endif
		
		#if defined UPGRADE_SPAWNSPEED
		case 3: {
			
			Item [ id ] [ SpawnSpeed ] += 1;
			csdm_set_user_points ( id, csdm_get_user_points ( id ) - 1 );
			
			chat_color ( id, "%s Felicitari! Ai!g Viteza la Spawn!t Nivelul este!g %d!t.", szPrefix, Item [ id ] [ SpawnSpeed ] );
			chat_color ( id, "%s Vei avea!g %d!t Viteza la fiecare SPAWN.", szPrefix, SpawnSpeed_ [ Item [ id ] [ SpawnSpeed ] ] + 260 );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				ShowUpgradeMenu ( id );
				
			else
				menu_destroy ( menu );
		}
		#endif
		
		#if defined UPGRADE_SPAWNGRAVITY
		case 4: {
			
			Item [ id ] [ SpawnGravity ] += 1;
			csdm_set_user_points ( id, csdm_get_user_points ( id ) - 1 );
			
			chat_color ( id, "%s Felicitari! Ai!g Gravitatie la Spawn!t level is!g %d!t.", szPrefix, Item [ id ] [ SpawnGravity ] );
			chat_color ( id, "%s Vei avea!g %d!t Gravitatie la fiecare Spawn.", szPrefix, SpawnGravity_ [ Item [ id ] [ SpawnGravity ] ] );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				ShowUpgradeMenu ( id );
				
			else
				menu_destroy ( menu );
		}
		#endif
		
		#if defined UPGRADE_KILLBONUS
		case 5: {
			
			Item [ id ] [ KillBonus ] += 1;
			csdm_set_user_points ( id, csdm_get_user_points ( id ) - 1 );
			
			chat_color ( id, "%s Felicitari! Ai!g Kill HP!t level is!g %d!t.", szPrefix, Item [ id ] [ KillBonus ] );
			chat_color ( id, "%s Vei avea!g %d!t HP!g/!tkill", szPrefix, KillBonus_ [ Item [ id ] [ KillBonus ] ] );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				ShowUpgradeMenu ( id );
				
			else
				menu_destroy ( menu );
		}
		#endif
		
		#if defined UPGRADE_DAMAGEMULTIPLIER
		case 6: {
			
			Item [ id ] [ DamageMultiplier ] += 1;
			csdm_set_user_points ( id, csdm_get_user_points ( id ) - 1 );
			
			chat_color ( id, "%s Felicitari! Damage-ul!g Tau a fost Multiplicat!t level is!g %d!t.", szPrefix, Item [ id ] [ DamageMultiplier ] );
			chat_color ( id, "%s Vei face mai multe daune!g %d!t mai mari.", szPrefix, DamageMultiplier_ [ Item [ id ] [ DamageMultiplier ] ] );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				ShowUpgradeMenu ( id );
				
			else
				menu_destroy ( menu );
		}
		#endif
		
		#if defined UPGRADE_CRITICALHIT
		case 7: {
			
			Item [ id ] [ CriticalHit ] += 1;
			csdm_set_user_points ( id, csdm_get_user_points ( id ) - 1 );
			
			chat_color ( id, "%s Felicitari! Ai!g Lovitura Critica!t level is!g %d!t.", szPrefix, Item [ id ] [ CriticalHit ] );
			chat_color ( id, "%s Vei avea!g %d%%!t Sansa de a face o !gLovitura Crtica!t.", szPrefix, CriticalHit_ [ Item [ id ] [ CriticalHit ] ] );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				ShowUpgradeMenu ( id );
				
			else
				menu_destroy ( menu );
		}
		#endif
		
		#if defined UPGRADE_SHIELD
		case 8: {
			
			Item [ id ] [ Shield ] += 1;
			csdm_set_user_points ( id, csdm_get_user_points ( id ) - 1 );
			
			chat_color ( id, "%s Felicitari! Ai!g Scut!t Nivelul este!g %d!t.", szPrefix, Item [ id ] [ Shield ] );
			chat_color ( id, "%s Vei avea!g %d%%!t sanss de a bloca daune inamice.", szPrefix, Shield_ [ Item [ id ] [ Shield ] ] );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				ShowUpgradeMenu ( id );
				
			else
				menu_destroy ( menu );
		}
		#endif
		
		#if defined UPGRADE_DEADLYSHOT
		case 9: {
			
			Item [ id ] [ DeadlyShot ] += 1;
			csdm_set_user_points ( id, csdm_get_user_points ( id ) - 1 );
			
			chat_color ( id, "%s Felicitari! Ai!g Lovitura Mortala!t Nivelul este!g %d!t.", szPrefix, Item [ id ] [ DeadlyShot ] );
			chat_color ( id, "%s Vei avea!g %d%%!t Sansa de a face !gLovitura Mortala.", szPrefix, DeadlyShot_ [ Item [ id ] [ DeadlyShot ] ] );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				ShowUpgradeMenu ( id );
				
			else
				menu_destroy ( menu );
		}
		#endif
		
		#if defined UPGRADE_STUNNING
		case 10: {
			
			Item [ id ] [ Stunning ] += 1;
			csdm_set_user_points ( id, csdm_get_user_points ( id ) - 1 );
			
			chat_color ( id, "%s Felicitari! Ai!g Marcatori uimitoare!t Nivelul este!g %d!t.", szPrefix, Item [ id ] [ Stunning ] );
			chat_color ( id, "%s Vei avea!g %d%%!t Sansa de!g Inghetare!t a unui inamic.", szPrefix, Stunning_ [ Item [ id ] [ Stunning ] ] );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				ShowUpgradeMenu ( id );
				
			else
				menu_destroy ( menu );
		}
		#endif
		
		#if defined UPGRADE_REGENERATION
		case 11: {
			
			Item [ id ] [ Regeneration ] += 1;
			csdm_set_user_points ( id, csdm_get_user_points ( id ) - 1 );
			
			chat_color ( id, "%s Felicitari! Ai!g Regenerarea Sanatii!t Nivelul este!g %d!t.", szPrefix, Item [ id ] [ Regeneration ] );
			chat_color ( id, "%s Vei avea!g %d !tHP!g/!tsecond", szPrefix, Regeneration_ [ Item [ id ] [ Regeneration ] ] );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
			if ( User [ id ] [ UpgradePoints ] > 0 )
				ShowUpgradeMenu ( id );
				
			else
				menu_destroy ( menu );
		}
		#endif
		
		#if defined SELECT_ULTIMATE
		case 12: ShowUltimatesMenu ( id );
		#endif
	}
	
	return 1;
}

#if defined UPGRADELVL_SOUND
public PlayUpgradeLevelSound ( id ) {
	
	switch ( random_num ( 1, 3 ) ) {
		
		case 1: client_cmd ( id, "spk %s", UPGRADELVL_SOUND1 );
		case 2: client_cmd ( id, "spk %s", UPGRADELVL_SOUND2 );
		case 3: client_cmd ( id, "spk %s", UPGRADELVL_SOUND3 );
		
	}
	
}
#endif

#if defined SELECT_ULTIMATE
public ShowUltimatesMenu ( id ) {
	
	new szMenu [ 256 ];
	formatex ( szMenu, sizeof ( szMenu ) -1,"\rMeniul Ultimatei" );
	
	new menu = menu_create ( szMenu, "UltimateMenu_Handle" );
	
	#if defined ULT_SUICIDE
	if ( is_user_connected ( id ) ) {
		
		new _ult = 1;
		
		if ( NextUltimate [ id ] == _ult ) {
			
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\r%s \w-\y Selectat", CSDM_Ultimates [ NextUltimate [ id ] ] );
			
			menu_additem ( menu, MenuItem, "1", ( 1<<31 ) );
			
		}
			
		else {
			
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\w%s", CSDM_Ultimates [ _ult ] );
			
			menu_additem ( menu, MenuItem, "1", 0 );
			
		}
		
		
	}
	#endif
	
	#if defined ULT_BLINK
	if ( is_user_connected ( id ) ) {
		
		new _ult = 2;
		
		if ( NextUltimate [ id ] == _ult ) {
			
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\r%s \w-\y Selectat", CSDM_Ultimates [ NextUltimate [ id ] ] );
			
			menu_additem ( menu, MenuItem, "2", ( 1<<31 ) );
			
		}
			
		else {
			
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\w%s", CSDM_Ultimates [ _ult ] );
			
			menu_additem ( menu, MenuItem, "2", 0 );
			
		}
		
		
	}
	#endif
	
	#if defined ULT_CHAINLIGHTNING
	if ( is_user_connected ( id ) ) {
		
		new _ult = 3;
		
		if ( NextUltimate [ id ] == _ult ) {
			
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\r%s \w-\y Selectat", CSDM_Ultimates [ NextUltimate [ id ] ] );
			
			menu_additem ( menu, MenuItem, "3", ( 1<<31 ) );
			
		}
			
		else {
			
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\w%s", CSDM_Ultimates [ _ult ] );
			
			menu_additem ( menu, MenuItem, "3", 0 );
			
		}
		
		
	}
	#endif
	
	#if defined ULT_IMMOLATE
	if ( is_user_connected ( id ) ) {
		
		new _ult = 4;
		
		if ( NextUltimate [ id ] == _ult ) {
			
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\r%s \w-\y Selectat", CSDM_Ultimates [ NextUltimate [ id ] ] );
			
			menu_additem ( menu, MenuItem, "4", ( 1<<31 ) );
			
		}
			
		else {
			
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\w%s", CSDM_Ultimates [ _ult ] );
			
			menu_additem ( menu, MenuItem, "4", 0 );
			
		}
		
		
	}
	#endif
	
	#if defined ULT_LOCUSTSWARM
	if ( is_user_connected ( id ) ) {
		
		new _ult = 5;
		
		if ( NextUltimate [ id ] == _ult ) {
			
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\r%s \w-\y Selectat", CSDM_Ultimates [ NextUltimate [ id ] ] );
			
			menu_additem ( menu, MenuItem, "5", ( 1<<31 ) );
			
		}
			
		else {
			
			new MenuItem [ 256 ];
			formatex ( MenuItem, sizeof ( MenuItem ) -1,"\w%s", CSDM_Ultimates [ _ult ] );
			
			menu_additem ( menu, MenuItem, "5", 0 );
			
		}
		
		
	}
	#endif
	
	menu_setprop ( menu, MPROP_EXIT, MEXIT_ALL );
	menu_display ( id, menu, 0 );
}

public UltimateMenu_Handle ( id, menu, item ) {
	
	if( item == MENU_EXIT ) return 1;
	
	new data [ 6 ], szName [ 64 ];
	new access, callback;
	menu_item_getinfo ( menu, item, access, data,charsmax ( data ), szName,charsmax ( szName ), callback );
	new key = str_to_num ( data );
	
	switch ( key ) {
		
		#if defined ULT_SUICIDE
		case 1:
		{
			if ( !PlayerUltimate [ id ] ) {
				
				PlayerUltimate [ id ] = str_to_num ( ULTIMATE_SUICIDE [ 1 ] );
				if ( !UltimateGlobalDelay && !UltimateDelay [ id ] )
					Ultimate_Icon ( id, 1 );
					
				else if ( UltimateGlobalDelay && UltimateDelay [ id ] )
					UltimateDelay [ id ] = 0;
					
				else if ( !UltimateGlobalDelay && UltimateDelay [ id ] && !task_exists ( id+TASK_DELAY ) )
					Ultimate_Delay ( id );
			}
			
			else
				chat_color ( id, "%s Ultimata !gVa fi activata!t La urmatorul!g Spawn!t.", szPrefix );
				
			NextUltimate [ id ] = str_to_num ( ULTIMATE_SUICIDE [ 1 ] );
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
		}
		#endif
		
		#if defined ULT_BLINK
		case 2:
		{
			if ( !PlayerUltimate [ id ] ) {
				
				PlayerUltimate [ id ] = str_to_num ( ULTIMATE_BLINK [ 1 ] );
				if ( !UltimateGlobalDelay && !UltimateDelay [ id ] ) 
					Ultimate_Icon ( id, 1 );
					
				else if ( UltimateGlobalDelay && UltimateDelay [ id ] )
					UltimateDelay [ id ] = 0;
					
				else if ( !UltimateGlobalDelay && UltimateDelay [ id ] && !task_exists ( id+TASK_DELAY ) )
					Ultimate_Delay ( id );
			}
			
			else
				chat_color ( id, "%s Ultimata !gVa fi activata!t La urmatorul!g Spawn!t.", szPrefix );
				
			NextUltimate [ id ] = str_to_num ( ULTIMATE_BLINK [ 1 ] );
		
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
		}
		#endif
		
		#if defined ULT_CHAINLIGHTNING
		case 3:
		{
			if ( !PlayerUltimate [ id ] ) {
				
				PlayerUltimate [ id ] = str_to_num ( ULTIMATE_CHAINLIGHTNING [ 1 ] );
				if ( !UltimateGlobalDelay && !UltimateDelay [ id ] ) 
					Ultimate_Icon ( id, 1 );
					
				else if ( UltimateGlobalDelay && UltimateDelay [ id ] )
					UltimateDelay [ id ] = 0;
					
				else if ( !UltimateGlobalDelay && UltimateDelay [ id ] && !task_exists ( id+TASK_DELAY ) )
					Ultimate_Delay ( id );
			}
			
			else
				chat_color ( id, "%s The !gUltimate!t will be active in the!g next spawn!t.", szPrefix );
				
			NextUltimate [ id ] = str_to_num ( ULTIMATE_CHAINLIGHTNING [ 1 ] );
			
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
		}
		#endif
		
		#if defined ULT_IMMOLATE
		case 4:
		{
			if ( !PlayerUltimate [ id ] ) {
				
				PlayerUltimate [ id ] = str_to_num ( ULTIMATE_IMMOLATE [ 1 ] );
				if ( !UltimateGlobalDelay && !UltimateDelay [ id ] ) 
					Ultimate_Icon ( id, 1 );
					
				else if ( UltimateGlobalDelay && UltimateDelay [ id ] )
					UltimateDelay [ id ] = 0;
					
				else if ( !UltimateGlobalDelay && UltimateDelay [ id ] && !task_exists ( id+TASK_DELAY ) )
					Ultimate_Delay ( id );
			}
			
			else
				chat_color ( id, "%s Ultimata !gVa fi activata!t La urmatorul!g Spawn!t.", szPrefix );
				
			NextUltimate [ id ] = str_to_num ( ULTIMATE_IMMOLATE [ 1 ] );

			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
		}
		#endif
		
		#if defined ULT_LOCUSTSWARM
		case 5:
		{
			if ( !PlayerUltimate [ id ] ) {
				
				PlayerUltimate [ id ] = str_to_num ( ULTIMATE_LOCUSTSWARM [ 1 ] );
				if ( !UltimateGlobalDelay && !UltimateDelay [ id ] ) 
					Ultimate_Icon ( id, 1 );
					
				else if ( UltimateGlobalDelay && UltimateDelay [ id ] )
					UltimateDelay [ id ] = 0;
					
				else if ( !UltimateGlobalDelay && UltimateDelay [ id ] && !task_exists ( id+TASK_DELAY ) )
					Ultimate_Delay ( id );
			}
			
			else
				chat_color ( id, "%s The !gUltimate!t will be active in the!g next spawn!t.", szPrefix );
				
			NextUltimate [ id ] = str_to_num ( ULTIMATE_LOCUSTSWARM [ 1 ] );
			
			
			#if defined UPGRADELVL_SOUND
			PlayUpgradeLevelSound ( id );
			#endif
			
		}
		#endif
		
	}
	
	menu_destroy ( menu );
	return 1;
	
}

#endif

#if defined AIM_MESSAGE

public fwdPlayerPreThink(  id  )
{
	
	if(  is_user_alive(  id  )  )
	{
		
		new target, body; 
		get_user_aiming(  id,  target,  body,  9999  );
		
		new CsTeams:team  =  cs_get_user_team(  id  );
		
		if(   is_user_alive(  target  )  )
		{
			if(  IsPlayer(  target  )  )
			{
			
				new CsTeams:targetTeam  =  cs_get_user_team(  target  );
				
				new sName[  32  ];
				get_user_name(  target,   sName,  sizeof  (  sName  )  -1  );
							
				new sMessage[  64  ];
				if(  targetTeam  ==  team  )
				{
					formatex(  sMessage, sizeof  (  sMessage  )  -1, "%s: %s HP: %i | AP: %i^nLevel: %d", IsUserVip(  target  ) ?  "VIP" : "Friend",  sName,  get_user_health(  target  ), get_user_armor ( target ), csdm_get_user_level ( target )  );
				}
					
				if(  targetTeam  ==  CS_TEAM_CT  )
				{
					set_hudmessage( 0, 63, 127, -1.0, -1.0, 0, 0.0, 0.1, 0.0, 0.0, -1 );
				}
				else if( targetTeam == CS_TEAM_T )
				{
					set_hudmessage( 127, 0, 0, -1.0, -1.0, 0, 0.0, 0.1, 0.0, 0.0, -1 );
				}	
				
				
				show_hudmessage(  id,  "%s",  sMessage  );
			}
		}
	}
	
	return FMRES_IGNORED;
}
#endif

#if defined DONATE_GOLD
public hook_say ( id ) {
	
	static s_Args [ 32 ];
	
	read_args ( s_Args, sizeof ( s_Args ) - 1 );
	remove_quotes ( s_Args );
	
	if ( equal ( s_Args, "/give", 5 ) || equal ( s_Args, "/donate", 5 ) ) {
		
		replace ( s_Args, sizeof ( s_Args ) - 1, "/", "" );
		client_cmd ( id, "amx_%s", s_Args );
	}

	return 0;
}

public give_gold ( id ) {
	
	new s_Arg1 [ 32 ], s_Arg2 [ 6 ];
	
	read_argv ( 1, s_Arg1, 31 );
	read_argv ( 2, s_Arg2, 5 );
	
	new iTarget = cmd_target ( id, s_Arg1, 8 );
	new iAmmount = str_to_num ( s_Arg2 );
	
	if ( iTarget == id ) {
		
		chat_color ( id, "%s Eroare! Nu iti poti dona !ggold !ttie insuti.", szPrefix );
		return 1;
	}
		
	
	if ( !iTarget ) {
		
		chat_color ( id, "%s Eroare! Acest!g jucator!t nu exista.", szPrefix );
		return 1;
	}
	
	new iCurrentMoney = csdm_get_user_gold ( id );
	
	if ( iAmmount <= 0 ) {
		
		chat_color ( id, "%s Eroare! Nu poti dona o suma!g negativa!t sau egala cu!g 0!t.", szPrefix );
		return 1;
	}
		
	
	if ( iAmmount > iCurrentMoney ) {
		
		chat_color ( id, "%s Eroare! Aceasta suma este mai mare decat detii.", szPrefix );
		return 1;
	}
	
	new iFinalMoney;
	iFinalMoney = iCurrentMoney - iAmmount;
	
	csdm_set_user_gold ( id, iFinalMoney );
	
	new iTargetName [ 32 ], iName [ 32 ];
	get_user_name ( iTarget, iTargetName, 31 );
	get_user_name ( id, iName, 31 );
	
	chat_color ( id, "%s I-ai donat lui!g %s!t suma de!g %d!t gold.", szPrefix, iTargetName, iAmmount );
	
	new iTargetFinalMoney, iTargetCurrMoney; 
	
	iTargetCurrMoney = csdm_get_user_gold ( iTarget );
	iTargetFinalMoney = iTargetCurrMoney + iAmmount;
	
	csdm_set_user_gold ( iTarget, iTargetFinalMoney );
	
	chat_color ( id, "%s Ai primit de la!g %s!t suma de!g %d!t gold.", szPrefix, iName, iAmmount );
	
	return PLUGIN_CONTINUE;
	
}
#endif

public SaveData ( id ) {
	
	new Name [ 32 ];
	get_user_name ( id, Name, 31 );
	
	new _UserXp = User [ id ] [ Xp ];
	new _UserLevel = User [ id ] [ Level ];
	new _UserUpPoints =  User [ id ] [ UpgradePoints ];
	new _UserGold = User [ id ] [ Gold ];
	new _UserUltimate = NextUltimate [ id ];

	new _SpawnHealth;
	#if defined UPGRADE_SPAWNHEALTH
	_SpawnHealth = Item [ id ] [ SpawnHealth ];
	#else
	_SpawnHealth = Item [ id ] [ TempSpawnHealth ];
	#endif
	
	new _SpawnArmor;
	#if defined UPGRADE_SPAWNARMOR
	_SpawnArmor = Item [ id ] [ SpawnArmor ];
	#else
	_SpawnArmor = Item [ id ] [ TempSpawnArmor ];
	#endif
	
	new _SpawnSpeed;
	#if defined UPGRADE_SPAWNSPEED
	_SpawnSpeed = Item [ id ] [ SpawnSpeed ];
	#else
	_SpawnSpeed = Item [ id ] [ TempSpawnSpeed ];
	#endif
	
	new _SpawnGravity;
	#if defined UPGRADE_SPAWNGRAVITY
	_SpawnGravity = Item [ id ] [ SpawnGravity ];
	#else
	_SpawnGravity = Item [ id ] [ TempSpawnGravity ];
	#endif
	
	new _KillBonus;
	#if defined UPGRADE_KILLBONUS
	_KillBonus = Item [ id ] [ KillBonus ];
	#else
	_KillBonus = Item [ id ] [ TempKillBonus ];
	#endif
	
	new _DamageMultiplier;
	#if defined UPGRADE_DAMAGEMULTIPLIER
	_DamageMultiplier = Item [ id ] [ DamageMultiplier ];
	#else
	_DamageMultiplier = Item [ id ] [ TempDamageMultiplier ];
	#endif
	
	new _CriticalHit;
	#if defined UPGRADE_CRITICALHIT
	_CriticalHit = Item [ id ] [ CriticalHit ];
	#else
	_CriticalHit = Item [ id ] [ TempCriticalHit ];
	#endif
	
	new _Shield;
	#if defined UPGRADE_SHIELD
	_Shield = Item [ id ] [ Shield ];
	#else
	_Shield = Item [ id ] [ TempShield ];
	#endif
	
	new _DeadlyShot;
	#if defined UPGRADE_DEADLYSHOT
	_DeadlyShot = Item [ id ] [ DeadlyShot ];
	#else
	_DeadlyShot = Item [ id ] [ TempDeadlyShot ];
	#endif
	
	new _Stunning;
	#if defined UPGRADE_DEADLYSHOT
	_Stunning = Item [ id ] [ Stunning ];
	#else
	_Stunning = Item [ id ] [ TempStunning ];
	#endif
	
	new _Regeneration;
	#if defined UPGRADE_REGENERATION
	_Regeneration = Item [ id ] [ Regeneration ];
	#else
	_Regeneration = Item [ id ] [ TempRegeneration ];
	#endif
	
	new StrongData [ 1024 ];
	formatex ( StrongData, sizeof ( StrongData ) - 1, "^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^" ^"%i^"", _UserXp, _UserLevel, _UserUpPoints, _UserGold, _SpawnHealth, _SpawnArmor,
	_SpawnSpeed, _SpawnGravity, _KillBonus, _DamageMultiplier, _CriticalHit, _Shield, _DeadlyShot, _Stunning, _Regeneration, _UserUltimate );
	
	new Save [ 1024 ];
	format ( Save, sizeof ( Save ) - 1, "^"%s^" %s", Name, StrongData );
	
	new Line [ 128 ], Linie, IsPlayer = false, Arg1 [ 32 ];
	
	new FileOpen = fopen ( SaveDataFile, "rt" );
	while ( !feof ( FileOpen ) ) {
		fgets ( FileOpen, Line, 127 );
		trim ( Line );
		
		parse ( Line, Arg1, 31 );
		
		if ( equali ( Arg1, Name ) ) {
			write_file ( SaveDataFile, Save, Linie );
			IsPlayer = true;
			break
		}
		
		Linie++;
	}
	
	fclose ( FileOpen )
	if ( !IsPlayer )
		write_file ( SaveDataFile, Save, -1 );
}

public LoadData ( id ) {
	
	new Name [ 32 ];
	get_user_name ( id, Name, 31 );
	
	new Line [ 128 ], IsPlayer = false, Arg1 [ 32 ], Arg2 [ 32 ], Arg3 [ 32 ], Arg4 [ 32 ], Arg5 [ 32 ], Arg6 [ 32 ], Arg7 [ 32 ], Arg8 [ 32 ], Arg9 [ 32 ], Arg10 [ 32 ],
	Arg11 [ 32 ], Arg12 [ 32 ], Arg13 [ 32 ], Arg14 [ 32 ], Arg15 [ 32 ], Arg16 [ 32 ], Arg17 [ 32 ];
	new FileOpen = fopen ( SaveDataFile, "rt" );

	while ( !feof ( FileOpen ) ) {
		
		fgets ( FileOpen, Line, 127 );
		trim ( Line );
		
		parse ( Line, Arg1, 31, Arg2, 31, Arg3, 31, Arg4, 31, Arg5, 31, Arg6, 31, Arg7, 31, Arg8, 31, Arg9, 31, Arg10, 31, Arg11, 31, Arg12, 31, Arg13, 31, Arg14, 31, Arg15, 31, Arg16, 31, Arg17, 31 );
		
		if ( equali ( Arg1, Name ) ) {
			
			User [ id ] [ Xp ] = str_to_num ( Arg2 );
			User [ id ] [ Level ] = str_to_num ( Arg3 );
			User [ id ] [ UpgradePoints ] = str_to_num ( Arg4 );
			User [ id ] [ Gold ] = str_to_num ( Arg5 );
			NextUltimate [ id ] = str_to_num ( Arg17 );
			
			#if defined UPGRADE_SPAWNHEALTH
			Item [ id ] [ SpawnHealth ] = str_to_num ( Arg6 );
			#else
			Item [ id ] [ TempSpawnHealth ]  = str_to_num ( Arg6 );
			#endif
			
			#if defined UPGRADE_SPAWNARMOR
			Item [ id ] [ SpawnArmor ] = str_to_num ( Arg7 );
			#else
			Item [ id ] [ TempSpawnArmor ]  = str_to_num ( Arg7 );
			#endif
			
			#if defined UPGRADE_SPAWNSPEED
			Item [ id ] [ SpawnSpeed ] = str_to_num ( Arg8 );
			#else
			Item [ id ] [ TempSpawnSpeed ]  = str_to_num ( Arg8 );
			#endif
			
			#if defined UPGRADE_SPAWNGRAVITY
			Item [ id ] [ SpawnGravity ] = str_to_num ( Arg9 );
			#else
			Item [ id ] [ TempSpawnGravity ]  = str_to_num ( Arg9 );
			#endif
			
			#if defined UPGRADE_KILLBONUS
			Item [ id ] [ KillBonus ] = str_to_num ( Arg10 );
			#else
			Item [ id ] [ TempKillBonus ] = str_to_num ( Arg10 );
			#endif
			
			#if defined UPGRADE_DAMAGEMULTIPLIER
			Item [ id ] [ DamageMultiplier ] = str_to_num ( Arg11 );
			#else
			Item [ id ] [ TempDamageMultiplier ] = str_to_num ( Arg11 );
			#endif
			
			#if defined UPGRADE_CRITICALHIT
			Item [ id ] [ CriticalHit ] = str_to_num ( Arg12 );
			#else
			Item [ id ] [ TempCriticalHit ] = str_to_num ( Arg12 );
			#endif
			
			#if defined UPGRADE_SHIELD
			Item [ id ] [ Shield ] = str_to_num ( Arg13 );
			#else
			Item [ id ] [ TempShield ] = str_to_num ( Arg13 );
			#endif
			
			#if defined UPGRADE_DEADLYSHOT
			Item [ id ] [ DeadlyShot ] = str_to_num ( Arg14 );
			#else
			Item [ id ] [ TempDeadlyShot ] = str_to_num ( Arg14 );
			#endif
			
			#if defined UPGRADE_STUNNING
			Item [ id ] [ Stunning ] = str_to_num ( Arg15 );
			#else
			Item [ id ] [ TempStunning ] = str_to_num ( Arg15 );
			#endif
			
			#if defined UPGRADE_REGENERATION
			Item [ id ] [ Regeneration ] = str_to_num ( Arg16 );
			#else
			Item [ id ] [ TempRegeneration ] = str_to_num ( Arg16 );
			#endif
			
			IsPlayer = true;
			break;
		}
	}
	
	fclose ( FileOpen );
	
	if ( !IsPlayer ) {
		
		User [ id ] [ Xp ] = 0;
		User [ id ] [ Level ] = 0;
		User [ id ] [ UpgradePoints ] = 0;
		User [ id ] [ Gold ] = 50;
		NextUltimate [ id ] = 0;
		
		#if defined UPGRADE_SPAWNHEALTH
		Item [ id ] [ SpawnHealth ] = 0;
		#else
		Item [ id ] [ TempSpawnHealth ] = 0;
		#endif
		
		#if defined UPGRADE_SPAWNARMOR
		Item [ id ] [ SpawnArmor ] = 0;
		#else
		Item [ id ] [ TempSpawnArmor ] = 0;
		#endif
		
		#if defined UPGRADE_SPAWNSPEED
		Item [ id ] [ SpawnSpeed ] = 0;
		#else
		Item [ id ] [ TempSpawnSpeed ] = 0;
		#endif
		
		#if defined UPGRADE_SPAWNGRAVITY
		Item [ id ] [ SpawnGravity ] = 0;
		#else
		Item [ id ] [ TempSpawnGravity ] = 0;
		#endif
		
		#if defined UPGRADE_KILLBONUS
		Item [ id ] [ KillBonus ] = 0;
		#else
		Item [ id ] [ TempKillBonus ] = 0;
		#endif
		
		#if defined UPGRADE_DAMAGEMULTIPLIER
		Item [ id ] [ DamageMultiplier ] = 0;
		#else
		Item [ id ] [ TempDamageMultiplier ] = 0;
		#endif
		
		#if defined UPGRADE_CRITICALHIT
		Item [ id ] [ CriticalHit ] = 0;
		#else
		Item [ id ] [ TempCriticalHit ] = 0;
		#endif
		
		#if defined UPGRADE_SHIELD
		Item [ id ] [ Shield ] = 0;
		#else
		Item [ id ] [ TempShield ] = 0;
		#endif
		
		#if defined UPGRADE_DEADLYSHOT
		Item [ id ] [ DeadlyShot ] = 0;
		#else
		Item [ id ] [ TempDeadlyShot ] = 0;
		#endif
		
		#if defined UPGRADE_STUNNING
		Item [ id ] [ Stunning ] = 0;
		#else
		Item [ id ] [ TempStunning ] = 0;
		#endif
		
		#if defined UPGRADE_REGENERATION
		Item [ id ] [ Regeneration ] = 0;
		#else
		Item [ id ] [ TempRegeneration ] = 0;
		#endif
	}
}

#if defined ULTIMATE_KILLSTREAK

public event_death(id) {
	new killer = read_data(1);
	new victim = read_data(2);
	new headshot = read_data(3);
	new weapon[24], vicname[32], killname[32]
	read_data(4,weapon,23)
	get_user_name(victim,vicname,31)
	get_user_name(killer,killname,31)
	
	
	
	if(headshot == 1 && get_pcvar_num(hsenable) ==1) 
	{ 
		set_hudmessage(0, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)
		show_hudmessage(0, (hsmessages[random_num(0,3)]), killname, vicname)
		new i
		i = random_num(0,hsounds-1)
		client_cmd(0,"spk %s",hslist)
	} 
	
	
	if(weapon[0] == 'k'  && get_pcvar_num(knifeenable) ==1)
	{ 
		set_hudmessage(255, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)
		show_hudmessage(0, (knmessages[random_num(0,2)]), killname, vicname)
		new r
		r = random_num(0,knsounds-1)
		client_cmd(0,"spk %s",knlist[r])   
	} 

	if(weapon[1] == 'r' && get_pcvar_num(nadecvar) ==1)
	{
		set_hudmessage(255, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)
		show_hudmessage(0,(nademessages[random_num(0,2)]),killname,vicname)
		client_cmd(0,"spk ultimate_sounds/nade_ultimate")
	}
	
	
	if(kill[killer][0] && equal(kill[killer],weapon) && get_pcvar_num(cvardouble) == 1)
	{
		set_hudmessage(255, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)
		show_hudmessage(0,"Wow %s made a double kill", killname)
		kill[killer][0] = 0;
		new q
		q= random_num(0,maxdbsounds-1)
		client_cmd(0,"spk %s",doublelist[q])
	}
	
	else
	{
		kill[killer] = weapon;
		set_task(0.1,"clear_kill",TASK_CLEAR_KILL+killer);
	}
	
	
	
	kills[killer] += 1;
	kills[victim] = 0;
	deaths[killer] = 0;
	deaths[victim] += 1;
	
	for (new i = 0; i < LEVELS; i++) 
	{
		if (kills[killer] == levels) 
		{
			announce(killer, i);
			return PLUGIN_CONTINUE;
		}
	}
	
	return PLUGIN_CONTINUE;
}

announce(killer, level) {
	
	new name[33]
	new r = random(256)
	new g = random(256)
	new b = random(256)
	new Ult_Gold = ULTIMATE_KILLSTREAK_GOLD [ level ];
	
	csdm_set_user_gold ( killer, csdm_get_user_gold ( killer ) + Ult_Gold );
	
	new Message2 [ 256 ];
	formatex ( Message2, sizeof ( Message2 ) - 1,"+%d", Ult_Gold );
	HudMessage ( killer, Message2, 0, 127, 255, 0.85, 0.85, _, _, 0.5 );
	
	get_user_name(killer, name, 32);
	set_hudmessage(r,g,b, 0.05, 0.65, 2, 0.02, 6.0, 0.01, 0.1, 2);
	
	if( (get_pcvar_num(killstreaktype) <= 0 ) || get_pcvar_num(killstreaktype) > 3)
		return PLUGIN_HANDLED;
	
	
	
	if(get_pcvar_num(killstreaktype) == 1)
	{
		show_hudmessage(0, messages[level], name);
	}
	
	if(get_pcvar_num(killstreaktype) == 2)
	{
		client_cmd(0, "spk %s", sounds[level]);
	}
	
	if(get_pcvar_num(killstreaktype) == 3)
	{
		show_hudmessage(0, messages[level], name);
		client_cmd(0, "spk %s", sounds[level]);
	}
	
	return PLUGIN_CONTINUE;
	
}


public reset_hud(id) 
{
	
	if (is_mode_set(16)) {
		if (kills[id] > levels[0]) {
			client_print(id, print_chat, 
			"* You are on a killstreak with %d kills.", kills[id]);
			} else if (deaths[id] > 1) {
			client_print(id, print_chat, 
			"* Take care, you are on a deathstreak with %d deaths in a row.", deaths[id]);
			
		}
	}
}

public rnstart(id)
{
	if(get_pcvar_num(rnstartcvar) == 1)
	{
		 
		set_hudmessage(255, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)
		show_hudmessage(0, "Prepare To Fight!")
		new q
		q = random_num(0,prpsounds-1)
		client_cmd(0,"spk %s",preplist[q])
	}
}

public clear_kill(taskid)
{
	new id = taskid-TASK_CLEAR_KILL;
	kill[id][0] = 0;
}

ULTIMATE_KILLSTREAK_PRECACHE ( ) {
	
	precache_sound ( "ultimate_sounds/triplekill_ultimate.wav" );
	precache_sound ( "ultimate_sounds/maniac.wav" );
	precache_sound ( "ultimate_sounds/WhickedSick.wav" );
	precache_sound ( "ultimate_sounds/eagleeye.wav" );
	precache_sound ( "ultimate_sounds/pancake.wav" );
	precache_sound ( "ultimate_sounds/holyshit_ultimate.wav" );
	precache_sound ( "ultimate_sounds/ludicrouskill_ultimate.wav" );
	precache_sound ( "ultimate_sounds/GodLike.wav" );
	precache_sound ( "ultimate_sounds/rampage_ultimate.wav" );
	precache_sound ( "ultimate_sounds/unstoppable_ultimate.wav" );
	precache_sound ( "ultimate_sounds/monsterkill_ultimate.wav" );
	precache_sound ( "ultimate_sounds/headshot1_ultimate.wav" );
	precache_sound ( "ultimate_sounds/headshot2_ultimate.wav" );
	precache_sound ( "ultimate_sounds/Ownage.wav" );
	precache_sound ( "ultimate_sounds/knife1_ultimate.wav" );
	precache_sound ( "ultimate_sounds/knife2_ultimate.wav" );
	precache_sound ( "ultimate_sounds/prepare1_ultimate.wav" );
	precache_sound ( "ultimate_sounds/prepare2_ultimate.wav" );
	precache_sound ( "ultimate_sounds/prepare3_ultimate.wav" );
	precache_sound ( "ultimate_sounds/nade_ultimate.wav" );
	precache_sound ( "ultimate_sounds/suicide1_ultimate.wav" );
	precache_sound ( "ultimate_sounds/suicide2_ultimate.wav" );
	precache_sound ( "ultimate_sounds/suicide3_ultimate.wav" );
	precache_sound ( "ultimate_sounds/suicide4_ultimate.wav" );
	precache_sound ( "ultimate_sounds/doublekill1_ultimate.wav" );
	precache_sound ( "ultimate_sounds/doublekill2_ultimate.wav" );
	precache_sound ( "ultimate_sounds/Combowhore.wav" );
	
}
#endif

#if defined SELECT_ULTIMATE

public set_user_ultimate(id, ultimate) {
	if(is_user_connected(id))
		NextUltimate[id] = ultimate
}


public get_user_ultimate(id) {
	return is_user_connected(id) ? PlayerUltimate[id] : 0
}

public get_user_ultimate_name(id) {
	new None[64];
	formatex(None,sizeof(None)-1,"None");
	
	if(is_user_connected(id)) {
		#if defined ULT_SUICIDE
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_SUICIDE[1])) {
			new Suicide[64];
			formatex(Suicide,sizeof(Suicide)-1,"%s", ULTIMATE_SUICIDE[0]);
			
			return Suicide
		}
		#endif
		
		#if defined ULT_BLINK
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_BLINK[1])) {
			new Blink[64];			
			formatex(Blink,sizeof(Blink)-1,"%s", ULTIMATE_BLINK[0]);
			
			return Blink
		}
		#endif
		
		#if defined ULT_CHAINLIGHTNING
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_CHAINLIGHTNING[1])) {
			new ChainLighthing[64];
			formatex(ChainLighthing,sizeof(ChainLighthing)-1,"%s", ULTIMATE_CHAINLIGHTNING[0]);
			
			return ChainLighthing
		}
		#endif
		
		#if defined ULT_IMMOLATE
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_IMMOLATE[1])) {
			new Immolate[64];
			formatex(Immolate,sizeof(Immolate)-1,"%s", ULTIMATE_IMMOLATE[0]);
			
			return Immolate
		}
		#endif
		
		#if defined ULT_LOCUSTSWARM
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_LOCUSTSWARM[1])) {
			new LocustWarm[64];
			formatex(LocustWarm,sizeof(LocustWarm)-1,"%s", ULTIMATE_LOCUSTSWARM[0]);
			
			return LocustWarm
		}
		#endif
		
		return None
	}
	return None
}

public EVENT_Death ( ) {
	
	new Victim = read_data ( 2 );
	
	Ultimate_Reset(Victim);
	
	if(is_user_connected(Victim)) {
		#if defined ULT_SUICIDE
		if(get_user_ultimate(Victim) == str_to_num(ULTIMATE_SUICIDE[1])) {
			if(!UltimateGlobalDelay && !UltimateDelay[Victim])			
				Ultimate_SuicideExplode(Victim)
		}
		#endif
		
		#if defined ULT_VENGEANCE
		if(get_user_ultimate(Victim) == str_to_num(ULTIMATE_VENGEANCE[1])) {
			if(!UltimateGlobalDelay && !UltimateDelay[Victim])				
				Ultimate_Vengeance(Victim);
		}
		#endif
		
	}
	
}

public EVENT_NewRound() {
	UltimateGlobalDelay = get_pcvar_num(cvar_ultimate_countdown_start)
	Ultimate_GlobalDelay();
}

public FWD_TraceLine(Float:v1[3], Float:v2[3], noMonsters, pentToSkip) {
	new Attacker = pentToSkip;
	new Victim = get_tr(TR_pHit);
	new HitZone = (1 << get_tr(TR_iHitgroup));
	
	if(is_user_connected(Victim) && is_user_alive(Victim) && is_user_connected(Attacker) && is_user_alive(Attacker)) {
		if(Ultimate_Is_Searching[Attacker]) {
			if(get_user_team(Attacker) != get_user_team(Victim)) {
				#if defined ULT_CHAINLIGHTNING
				if(get_user_ultimate(Attacker) == str_to_num(ULTIMATE_CHAINLIGHTNING[1]))
					Ultimate_ChainLightning(Attacker, Victim, HitZone);
				#endif
				
				#if defined ULT_IMMOLATE
				if(get_user_ultimate(Attacker) == str_to_num(ULTIMATE_IMMOLATE[1]))
					Ultimate_Immolate(Attacker, Victim);
				#endif
				
				Ultimate_Is_Searching[Attacker] = false;
				
				UltimateDelay[Attacker] = get_pcvar_num(cvar_ultimate_countdown);
				Ultimate_Delay(Attacker)
			}
		}
	}
}

public FWD_PlayerPreThink(id) {	
	if(is_user_connected(id)) {
		if(get_user_ultimate(id) && !(get_user_flags(id) & VIP_LEVEL)) {
			PlayerUltimate[id] = 0
			NextUltimate[id] = 0
		}
	}
}

public HAM_Spawn_Post(id) {
	if(is_user_connected(id)) {
		
		task_exists(TASK_SEARCHING + id) ? remove_task(TASK_SEARCHING + id) : 0;		
		task_exists(TASK_DELAY + id) ? remove_task(TASK_DELAY + id) : 0;	
		
		UltimateDelay[id] = 0;
		Ultimate_Is_Searching[id] = false;
		
		Ultimate_Icon(id, 0)
		
		if(NextUltimate[id] != get_user_ultimate(id))
			PlayerUltimate[id] = NextUltimate[id]
		
		if(!UltimateGlobalDelay) {
			if(!UltimateDelay[id])
				UltimateDelay[id] = get_pcvar_num(cvar_ultimate_countdown_start);
			
			if(!task_exists(id+TASK_DELAY))
				Ultimate_Delay(id)
		}
		
	}
	
}

public CMD_Ultimate(id) {
	if(is_user_connected(id) && is_user_alive(id)) {
		if(!get_user_ultimate(id)) {
			new Message[64];
			formatex(Message,sizeof(Message)-1,"Ultimate not found.");
			
			HudMessage(id, Message, _, _, _, _, _, _, _, 1.0);
			
			emit_sound(id, CHAN_ITEM, SOUND_ERROR, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		}
		else if(UltimateGlobalDelay > 0) {
			new Message[64];
			formatex(Message,sizeof(Message)-1,"Ultimate not ready.^n(%d seconds remaining).", UltimateGlobalDelay);
			
			HudMessage(id, Message, _, _, _, _, _, _, _, 1.0);
			emit_sound(id, CHAN_ITEM, SOUND_ERROR, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		}
		else if(UltimateDelay[id] > 0) {
			new Message[64];
			formatex(Message,sizeof(Message)-1,"Ultimate not ready.^n(%d seconds remaining).", UltimateDelay[id]);
			
			HudMessage(id, Message, _, _, _, _, _, _, _, 1.0);
			emit_sound(id, CHAN_ITEM, SOUND_ERROR, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		}
		else if(UltimateIsUsed[id]) {
			new Message[64];
			formatex(Message,sizeof(Message)-1,"Ultimate not ready.^n(%d seconds remaining).", UltimateDelay[id]);
			
			HudMessage(id, Message, _, _, _, _, _, _, _, 1.0);
			emit_sound(id, CHAN_ITEM, SOUND_ERROR, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		}
		else {
			#if defined ULT_SUICIDE
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_SUICIDE[1])) {				
				if(SuicideBombArmed[id]) {
					set_msg_block(get_user_msgid("DeathMsg"), BLOCK_ONCE);
					user_kill(id, 1);
					UltimateDelay[id] = get_pcvar_num(cvar_ultimate_countdown);
					Ultimate_Delay(id)
					Ultimate_SuicideExplode(id)
					SuicideBombArmed[id] = false
				}
				else {
					SuicideBombArmed[id] = true
					Ultimate_Icon(id, 2);
					
					new Message[64];
					formatex(Message,sizeof(Message)-1,"Suicide Bomb Armed^nPress Again To Detonate");
					
					HudMessage(id, Message, 178, 14, 41, _, _, _, _, 2.0);
				}
			}
			#endif
			
			#if defined ULT_BLINK
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_BLINK[1])) {
				if(Ultimate_Blink(id)) {
					UltimateDelay[id] = get_pcvar_num(cvar_ultimate_countdown);
					Ultimate_Delay(id)
				}
				else {
					UltimateDelay[id] = 2;
					Ultimate_Delay(id)
					client_print(id, print_center,"Pozitia de teleportare este invalida.")
				}
			}
			#endif
			
			#if defined ULT_CHAINLIGHTNING
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_CHAINLIGHTNING[1])) {
				if(!Ultimate_Is_Searching[id]) {
					Ultimate_Is_Searching[id] = true;
					
					if(!task_exists(TASK_SEARCHING + id)) {
						new Parm[2];
						Parm[0] = id;
						Parm[1] = 5;
						
						Ultimate_Searching(Parm);
					}
				}
			}
			#endif
			

			
			#if defined ULT_IMMOLATE
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_IMMOLATE[1])) {
				if(!Ultimate_Is_Searching[id]) {
					Ultimate_Is_Searching[id] = true;
					
					if(!task_exists(TASK_SEARCHING + id)) {
						new Parm[2];
						Parm[0] = id;
						Parm[1] = 5;
						
						Ultimate_Searching(Parm);
					}
				}
			}
			#endif
			
		
			
			#if defined ULT_LOCUSTSWARM
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_LOCUSTSWARM[1]))
				Ultimate_LocustSwarm(id);
			#endif
			
			
		}
	}
	
	return 1;
}

public Ultimate_GlobalDelay() {
	if(UltimateGlobalDelay > 1) {
		UltimateGlobalDelay--;
		
		new Players[32], Num;
		get_players(Players, Num);
		
		for(new i = 0; i < Num; i++) {
			if(is_user_connected(Players))
				Ultimate_Icon(Players, 0);
		}
		
		set_task(1.0, "Ultimate_GlobalDelay")
	}
	else if(UltimateGlobalDelay <= 1) {
		UltimateGlobalDelay = 0;
		new Players[32], Num;
		get_players(Players, Num);
		
		for(new i = 0; i < Num; i++) {
			if(is_user_connected(Players) && is_user_alive(Players) && get_user_ultimate(Players)) {
				emit_sound(Players, CHAN_ITEM, SOUND_ULTIMATEREADY, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
				Ultimate_Icon(Players, 1);
				new Message[64];
				formatex(Message,sizeof(Message)-1,"Ultimate is ready.");
				
				HudMessage(Players, Message, 255, 127, 0, -1.0, 0.85, 0, 6.0, 1.0);
	
				
			}
		}
	}
}

public Ultimate_Delay(id) {
	if(id >= TASK_DELAY)
		id -= TASK_DELAY;
	
	if(is_user_connected(id) && is_user_alive(id) && get_user_ultimate(id)) {
		if(UltimateDelay[id] > 1) {
			UltimateDelay[id]--;
			Ultimate_Icon(id, 0);
			set_task(1.0, "Ultimate_Delay", id+TASK_DELAY);
		}
		else if(UltimateDelay[id] <= 1) {
			UltimateDelay[id] = 0;
			emit_sound(id, CHAN_ITEM, SOUND_ULTIMATEREADY, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			
			new Message[64];
			formatex(Message,sizeof(Message)-1,"Ultimate is ready.");
			
			HudMessage(id, Message, 255, 127, 0, -1.0, 0.85, 0, 6.0, 1.0);
			Ultimate_Icon(id, 1);
		}
	}
}

public Ultimate_Icon(id, flag) {
	if(get_user_ultimate(id)) {
		if(!is_user_alive(id))
			flag = 0
		
		new Red, Green, Blue;
		#if defined ULT_SUICIDE
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_SUICIDE[1])) {
			Red=255,	Green=0,	Blue=0;
			
			if(flag == 2 && SuicideBombArmed[id])
				Red=255, 	Green=255, 	Blue=255;
			
			Create_StatusIcon(id, flag, ULTIMATE_SUICIDE[2], Red, Green, Blue);
		}
		#endif
		
		#if defined ULT_BLINK
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_BLINK[1])) {
			Red=0,		Green=120,	Blue=120;
			
			Create_StatusIcon(id, flag, ULTIMATE_BLINK[2], Red, Green, Blue);
		}
		#endif
		
		#if defined ULT_CHAINLIGHTNING	
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_CHAINLIGHTNING[1])) {
			Red=255,	Green=255,	Blue=255;
			
			Create_StatusIcon(id, flag, ULTIMATE_CHAINLIGHTNING[2], Red, Green, Blue);
			
		}
		#endif
		
		
		
		#if defined ULT_IMMOLATE
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_IMMOLATE[1])) {
			Red=255,	Green=0,	Blue=0;
			
			if(flag == 2)
				Red=255, 	Green=255, 	Blue=255;	
			
			Create_StatusIcon(id, flag, ULTIMATE_IMMOLATE[2], Red, Green, Blue);
		}
		#endif
		
		
		
		#if defined ULT_LOCUSTSWARM
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_LOCUSTSWARM[1])) {
			Red=0,		Green=255,	Blue=0;
			
			Create_StatusIcon(id, flag, ULTIMATE_LOCUSTSWARM[2], Red, Green, Blue);
			
		}
		#endif
		
	}
}

public Ultimate_Searching(parm[]) {
	new id = parm[0];
	new TimeLeft = parm[1];
	
	parm[1]--;
	
	if(!is_user_connected(id) || !is_user_alive(id))
		Ultimate_Is_Searching[id] = false;
	
	if(TimeLeft == 0) {
		Ultimate_Is_Searching[id] = false;
		Ultimate_Icon(id, 1);
	}
	
	if(Ultimate_Is_Searching[id]) {
		Ultimate_Icon(id, 2);
		
		emit_sound(id, CHAN_STATIC, SOUND_SEARCHING, 1.0, ATTN_NORM, 0, PITCH_NORM);
		
		set_task(1.0, "Ultimate_Searching", TASK_SEARCHING + id, parm, 2);
	}
}

public Ultimate_Reset(id) {
	#if defined ULT_SUICIDE
	task_exists(TASK_EXPLOSION + id) ? remove_task(TASK_EXPLOSION + id) : 0;
	task_exists(TASK_BEAMCYLINDER + id) ? remove_task(TASK_BEAMCYLINDER + id) : 0;
	SuicideBombArmed[id] = false;
	#endif	
	
	#if defined ULT_CHAINLIGHTNING
	task_exists(TASK_LIGHTNINGNEXT + id) ? remove_task(TASK_LIGHTNINGNEXT + id) : 0;
	LightningHit[id] = false;
	#endif	
	

	#if defined ULT_IMMOLATE
	task_exists(TASK_BURNING + id) ? remove_task(TASK_BURNING + id) : 0;
	#endif	
	
	#if defined ULT_VENGEANCE
	task_exists(TASK_SPAWN + id) ? remove_task(TASK_SPAWN + id) : 0;
	task_exists(TASK_SPAWNPLAYER + id) ? remove_task(TASK_SPAWNPLAYER + id) : 0;
	#endif	
	
	#if defined ULT_LOCUSTSWARM
	task_exists(TASK_FUNNELS + id) ? remove_task(TASK_FUNNELS + id) : 0;
	#endif	
	

	task_exists(TASK_SEARCHING + id) ? remove_task(TASK_SEARCHING + id) : 0;		
	task_exists(TASK_DELAY + id) ? remove_task(TASK_DELAY + id) : 0;	
	
	UltimateDelay[id] = 0;
	Ultimate_Is_Searching[id] = false;
	
	Ultimate_Icon(id, 0)
}

public Create_StatusIcon(id, status, sprite[], red, green, blue){
	message_begin(MSG_ONE, get_user_msgid("StatusIcon"), {0,0,0}, id) 
	write_byte(status)			// status 
	write_string(sprite)			// sprite name 
	write_byte(red)				// red 
	write_byte(green)			// green 
	write_byte(blue)			// blue 
	message_end()
}

#if defined ULT_SUICIDE
// Suicide Explosion
public Ultimate_SuicideExplode(id) {
	emit_sound(id, CHAN_STATIC, SOUND_SUICIDE, 1.0, ATTN_NORM, 0, PITCH_NORM);
	new parm[5], Origin[3];
	get_user_origin(id, Origin);
	
	parm[0] = id;
	parm[1] = 6;
	parm[2] = Origin[0];
	parm[3] = Origin[1];
	parm[4] = Origin[2];
	
	set_task(0.50, "SuicideExplode", TASK_EXPLOSION + id, parm, 5);
	set_task(0.50, "SuicideBlastCircles", TASK_BEAMCYLINDER + id, parm, 5);
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_IMPLOSION)
	write_coord(Origin[0])			// position(X)
	write_coord(Origin[1])			// position(Y)
	write_coord(Origin[2])			// position(Z)
	write_byte(100)				// radius
	write_byte(20)				// count
	write_byte(5)				// life in 0.1's
	message_end()
}

public SuicideExplode(parm[5]) {
	new id = parm[0];
	
	new Origin[3];
	Origin[0] = parm[2];
	Origin[1] = parm[3];
	Origin[2] = parm[4];
	
	new Float:Origin2[3];
	IVecFVec(Origin, Origin2);
	
	message_begin(MSG_PVS, SVC_TEMPENTITY, Origin)
	write_byte(TE_EXPLOSION)
	write_coord(Origin[0])			// position(X)
	write_coord(Origin[1])			// position(Y)
	write_coord(Origin[2])			// position(Z)
	write_short(SPR_SUICIDE_EXPLODE)	// sprite index
	write_byte((random_num(0,20) + 20))	// scale in 0.1's
	write_byte(12)				// framerate
	write_byte(TE_EXPLFLAG_NONE)		// flags
	message_end()
	
	message_begin(MSG_PVS, SVC_TEMPENTITY, Origin)
	write_byte(TE_SMOKE)
	write_coord(Origin[0])		// position(X)
	write_coord(Origin[1])		// position(Y)
	write_coord(Origin[2])		// position(Z)
	write_short(SPR_SUICIDE_SMOKE)	// Sprite index
	write_byte(60)			// scale * 10
	write_byte(10)			// framerate
	message_end()
	
	for(new Victim = 1; Victim < get_maxplayers(); Victim++) {
		if(is_user_connected(Victim) && is_user_alive(Victim) && !fm_get_user_godmode(Victim) && get_user_team(Victim) != get_user_team(id) && Victim != id ) {
			
			
			new Float:VictimOrigin[3], Float:Distance_F, Distance;
			pev(Victim, pev_origin, VictimOrigin);
			Distance_F = get_distance_f(Origin2, VictimOrigin);
			Distance = floatround(Distance_F);
			
			if(Distance <= EXPLOSION_BLAST_RADIUS) {
				new Float:DistanceRatio, Float:Damage;
				DistanceRatio = floatdiv(float(Distance), EXPLOSION_BLAST_RADIUS);
				Damage = EXPLOSION_MAX_DAMAGE - floatround(floatmul(EXPLOSION_MAX_DAMAGE, DistanceRatio));
				
				new BloodColor = ExecuteHam(Ham_BloodColor, Victim);
				if(BloodColor != -1) {
					new Amount = floatround(Damage);
					
					Amount *= 2; //according to HLSDK
					
					message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
					write_byte(TE_BLOODSPRITE);
					write_coord(floatround(VictimOrigin[0]));
					write_coord(floatround(VictimOrigin[1]));
					write_coord(floatround(VictimOrigin[2]));
					write_short(BloodSpray);
					write_short(BloodDrop);
					write_byte(BloodColor);
					write_byte(min(max(3, Amount/10), 16));
					message_end();
				}
				
				if ( !csdm_shop_get_user_necklace ( Victim ) ) {
					
					if(parm[1] == 6)
						make_knockback(Victim, Origin2, EXPLOSION_KNOCKBACK*Damage);
					
					if(get_user_health(Victim) - Damage >= 1) {
						ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_BLAST);
						
						Create_ScreenFade(id,(1<<13),(1<<14), 0x0000, 255, 255, 255, 100);
						Create_ScreenShake(Victim,(1<<14),(1<<13),(1<<14));
					}
					else			
						death_message(id, Victim, "Suicide Explode");
						
				}
				
				else
					emit_sound ( id, CHAN_STATIC, NECKLACE_SOUND, 1.0, ATTN_NORM, 0, PITCH_NORM );
			}
		}
	}
	
	--parm[1];
	
	if(parm[1] > 0)
		set_task(0.1, "SuicideExplode", TASK_EXPLOSION + id, parm, 5);
}

public SuicideBlastCircles(parm[5]) {
	new Origin[3];
	Origin[0] = parm[2];
	Origin[1] = parm[3];
	Origin[2] = parm[4]-16;
	
	new Float:Origin2[3];
	IVecFVec(Origin, Origin2);
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin2, 0)
	write_byte(TE_BEAMCYLINDER) // TE id
	engfunc(EngFunc_WriteCoord, Origin2[0]) // x
	engfunc(EngFunc_WriteCoord, Origin2[1]) // y
	engfunc(EngFunc_WriteCoord, Origin2[2]) // z
	engfunc(EngFunc_WriteCoord, Origin2[0]) // x axis
	engfunc(EngFunc_WriteCoord, Origin2[1]) // y axis
	engfunc(EngFunc_WriteCoord, Origin2[2]+385.0) // z axis
	write_short(SPR_SUICIDE_BLAST) // sprite
	write_byte(0) // startframe
	write_byte(0) // framerate
	write_byte(4) // life
	write_byte(60) // width
	write_byte(0) // noise
	write_byte(255) // red
	write_byte(255) // green
	write_byte(255) // blue
	write_byte(200) // brightness
	write_byte(0) // speed
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin2, 0)
	write_byte(TE_BEAMCYLINDER) // TE id
	engfunc(EngFunc_WriteCoord, Origin2[0]) // x
	engfunc(EngFunc_WriteCoord, Origin2[1]) // y
	engfunc(EngFunc_WriteCoord, Origin2[2]) // z
	engfunc(EngFunc_WriteCoord, Origin2[0]) // x axis
	engfunc(EngFunc_WriteCoord, Origin2[1]) // y axis
	engfunc(EngFunc_WriteCoord, Origin2[2]+470.0) // z axis
	write_short(SPR_SUICIDE_BLAST) // sprite
	write_byte(0) // startframe
	write_byte(0) // framerate
	write_byte(4) // life
	write_byte(60) // width
	write_byte(0) // noise
	write_byte(255) // red
	write_byte(255) // green
	write_byte(255) // blue
	write_byte(200) // brightness
	write_byte(0) // speed
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin2, 0)
	write_byte(TE_BEAMCYLINDER) // TE id
	engfunc(EngFunc_WriteCoord, Origin2[0]) // x
	engfunc(EngFunc_WriteCoord, Origin2[1]) // y
	engfunc(EngFunc_WriteCoord, Origin2[2]) // z
	engfunc(EngFunc_WriteCoord, Origin2[0]) // x axis
	engfunc(EngFunc_WriteCoord, Origin2[1]) // y axis
	engfunc(EngFunc_WriteCoord, Origin2[2]+555.0) // z axis
	write_short(SPR_SUICIDE_BLAST) // sprite
	write_byte(0) // startframe
	write_byte(0) // framerate
	write_byte(4) // life
	write_byte(60) // width
	write_byte(0) // noise
	write_byte(255) // red
	write_byte(255) // green
	write_byte(255) // blue
	write_byte(200) // brightness
	write_byte(0) // speed
	message_end()
	
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
	write_byte(TE_DLIGHT);
	write_coord(Origin[0]); // x
	write_coord(Origin[1]); // y
	write_coord(Origin[2]); // z
	write_byte(floatround(EXPLOSION_BLAST_RADIUS/10.0)); // radius
	write_byte(255) // red
	write_byte(255) // green
	write_byte(255) // blue
	write_byte(8); // life
	write_byte(60); // decay rate
	message_end();	
}
#endif


#if defined ULT_BLINK
//Blink 
public Ultimate_Blink(id) {
	new Origin[3], NewOrigin[3];
	get_user_origin(id, NewOrigin, 3);
	get_user_origin(id, Origin);
	
	Origin[2] += 15;
	NewOrigin[2] += 15;	
	
	if(IsStunned[id]) {
		new Message[64];
		formatex(Message,sizeof(Message)-1,"Esti orbit din cauza luminii!");
		
		HudMessage(id, Message, 255, 208, 0, -1.0, 0.85, _, _, 1.0);
		
		return false
	}
	
	if(is_restricted_area(id, NewOrigin)) {
		chat_color ( id, "%s Pozitia !gde teleport!t este !ginvalida!t!", szPrefix );
		return false
	}
	
	new Float:SpriteOrigin[3]
	pev(id, pev_origin, SpriteOrigin)
	
	fm_set_user_origin(id, NewOrigin);
	
	new Float:SpriteOrigin2[3]
	pev(id, pev_origin, SpriteOrigin2)
	
	if(is_player_stuck(id)) {				
		if(is_user_connected(id)) {
			static Float:origin[3]
			static Float:mins[3], hull
			static Float:vec[3]
			static o
			pev(id, pev_origin, origin)
			hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
			if(!is_hull_vacant(origin, hull, id) && !(pev(id, pev_solid) & SOLID_NOT)) {
				pev(id, pev_mins, mins)
				vec[2] = origin[2]
				for(o=0; o < sizeof Size; ++o) {
					vec[0] = origin[0] - mins[0] * Size[o][0]
					vec[1] = origin[1] - mins[1] * Size[o][1]
					vec[2] = origin[2] - mins[2] * Size[o][2]
					if(is_hull_vacant(vec, hull, id)) {
						engfunc(EngFunc_SetOrigin, id, vec)
						set_pev(id, pev_velocity,{0.0,0.0,0.0})
						o = sizeof Size
					}
				}
			}
		}
	}
	emit_sound(id, CHAN_STATIC, SOUND_BLINK, 1.0, ATTN_NORM, 0, PITCH_NORM);
	
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST,SVC_TEMPENTITY, SpriteOrigin, 0)
	write_byte(TE_EXPLOSION)
	engfunc(EngFunc_WriteCoord, SpriteOrigin[0]) // x axis
	engfunc(EngFunc_WriteCoord, SpriteOrigin[1]) // y axis
	engfunc(EngFunc_WriteCoord, SpriteOrigin[2]) // z axis
	write_short(SPR_TELEPORT)
	write_byte(22)
	write_byte(35)
	write_byte(TE_EXPLFLAG_NOSOUND)
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST,SVC_TEMPENTITY, SpriteOrigin2, 0)
	write_byte(TE_EXPLOSION)
	engfunc(EngFunc_WriteCoord, SpriteOrigin2[0]) // x axis
	engfunc(EngFunc_WriteCoord, SpriteOrigin2[1]) // y axis
	engfunc(EngFunc_WriteCoord, SpriteOrigin2[2]) // z axis
	write_short(SPR_TELEPORT)
	write_byte(22)
	write_byte(35)
	write_byte(TE_EXPLFLAG_NOSOUND)
	message_end()
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(TE_SPRITETRAIL);
	write_coord(floatround(SpriteOrigin2[0]));
	write_coord(floatround(SpriteOrigin2[1]));
	write_coord(floatround(SpriteOrigin2[2])+40);
	write_coord(floatround(SpriteOrigin2[0]));
	write_coord(floatround(SpriteOrigin2[1]));
	write_coord(floatround(SpriteOrigin2[2]));
	write_short(SPR_TELEPORT_GIB);
	write_byte(30);
	write_byte(10);
	write_byte(1);
	write_byte(50);
	write_byte(10);
	message_end();
	
	Create_ScreenFade(id,(1<<15),(1<<10),(1<<12), 0, 0, 255, 180);
	Create_ScreenShake(id,(1<<14),(1<<13),(1<<14));
	return true;
}

public 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 is_restricted_area(id, Origin[3]) {	
	new MapName[32];
	get_mapname(MapName, 32);
	
	new x = Origin[0];
	new y = Origin[1];
	new z = Origin[2];
	
	if(equali(MapName, "de_dust")) {
		if(z > 220)
			return true;
	}
	
	else if(equali(MapName, "awp_assault")) {
		if(z > 520 && y > 2400 && y < 2600)
			return true;
	}
	
	else if(equali(MapName, "de_dust_cz")) {
		if(z > 220)
			return true;
	}
	
	else if(equali(MapName, "de_aztec_cz")) {
		if(z > 300)
			return true;
	}
	
	else if(equali(MapName, "cs_assault_upc")) {
		if(z > 650)
			return true;
	}
	
	else if(equali(MapName, "de_aztec")) {
		if(z > 300)
			return true;
	}
	
	else if(equali(MapName, "de_cbble") || equali(MapName, "de_cbble_cz")) {
		if(z > 315) {
			if(!((x > -1320 && x < -1150) &&(y > 2600 && y < 2900)))
				return true;
		}           
	}
	
	else if(equali(MapName, "cs_assault")) {
		if(z > 700)
			return true;
	}
	
	else if(equali(MapName, "cs_militia") || equali(MapName, "cs_militia_cz")) {
		if(z > 500)
			return true;
	}
	
	else if(equali(MapName, "cs_italy")) {
		if(z > -220 && y < -2128)
			return true;
		else if(z > 250) {
			if((x < -1000 && x > -1648) &&(y > 1900 && y < 2050))
				return true;
			else if((x < -1552 && x > -1648) &&(y > 1520 && y < 2050))
				return true;
		}
	}
	
	else if(equali(MapName, "cs_italy_cz")) {
		if(y > 2608)
			return true;
	}
	
	else if(equali(MapName, "de_dust2")) {
		if(z > 270)
			return true;
	}
	
	else if(equali(MapName, "de_dust2_cz")) {
		if(z > 270)
			return true;
	}
	
	else if(equali(MapName, "fy_dustworld")) {
		if(z > 82)
			return true;
	}
	
	else if(equali(MapName, "fy_pool_day")) {
		if(z > 190)
			return true;
	}
	
	else if(equali(MapName, "as_oilrig")) {
		if(x > 1700)
			return true;
	}
	
	return false;
}

public is_hull_vacant(const Float:origin[3], hull,id) {
	static tr
	engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr)
	if(!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid))
		return true
	return false
}
#endif

#if defined ULT_CHAINLIGHTNING
//Chain Lightning
public Ultimate_ChainLightning(Caster, Target, BodyPart) {
	ChainEffect(Caster, Target, CHAINLIGHTNING_LINEWIDTH, CHAINLIGHTNING_DAMAGE, BodyPart);
	
	new parm[5];
	parm[0] = Target;
	parm[1] = CHAINLIGHTNING_DAMAGE;
	parm[2] = CHAINLIGHTNING_LINEWIDTH;
	parm[3] = Caster;
	parm[4] = BodyPart;
	
	set_task(0.2, "ChainLightning", TASK_LIGHTNING + Target, parm, 5);
}

public ChainLightning(parm[5]) {
	new Enemy = parm[0];
	
	if(is_user_connected(Enemy)) {
		
		new Caster = parm[3];
		new BodyPart = parm[4];
		new CasterTeam	= get_user_team(Caster)
		
		new Origin[3];
		get_user_origin(Enemy, Origin);
		
		new Players[32], Num;
		get_players(Players, Num, "a");
		
		
		new i, Target = 0;
		new ClosestTarget = 0, ClosestDistance = 0;
		new DistanceBetween = 0;
		new TargetOrigin[3]
		
		for(i = 0; i < Num; i++) {
			Target = Players[i];
			
			if(get_user_team(Target) != CasterTeam ) {
				
				if ( !csdm_shop_get_user_necklace ( Target ) ) {
				
					get_user_origin(Target, TargetOrigin)
					
					DistanceBetween = get_distance(Origin, TargetOrigin);
					
					if(DistanceBetween < LIGHTNING_RANGE && !LightningHit[Target]) {
						if(DistanceBetween < ClosestDistance || ClosestTarget == 0) {
							ClosestDistance = DistanceBetween;
							ClosestTarget = Target;
						}
					}
					
				}
				
				else
					emit_sound ( Target, CHAN_STATIC, NECKLACE_SOUND, 1.0, ATTN_NORM, 0, PITCH_NORM );
			}
		}
		if(ClosestTarget) {
			parm[1] = floatround(float(parm[2])*2/3);
			parm[2] = floatround(float(parm[2])*2/3);
			
			ChainEffect(Caster, ClosestTarget, parm[2], parm[1], BodyPart);
			
			parm[0] = ClosestTarget;
			set_task(0.2, "ChainLightning", TASK_LIGHTNINGNEXT + Caster, parm, 5);
		}
		
		else {
			for(i = 0; i < Num; i++) {
				LightningHit[Players[i]] = false;
			}
		}
	}
}

public ChainEffect(Caster, Target, LineWidth, Damage, BodyPart) {
	LightningHit[Target] = true;
	
	if(get_user_health(Target) - Damage >= 1) {
		ExecuteHam(Ham_TakeDamage, Target, Caster, Caster, float(Damage), DMG_BLAST);
		
		Create_ScreenFade(Target,(1<<13),(1<<14), 0x0000, 255, 255, 255, 100);
		Create_ScreenShake(Target,(1<<14),(1<<13),(1<<14));
	}
	else			
		death_message(Caster, Target, "Chain Lightning");
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMENTS)
	write_short(Caster) // start entity
	write_short(Target) // end entity
	write_short(SPR_LIGHTNING) // model
	write_byte(0) // starting frame
	write_byte(30) // frame rate
	write_byte(10) // life
	write_byte(LineWidth) // line width
	write_byte(50) // noise amplitude
	write_byte(255) // red
	write_byte(255) // green
	write_byte(255) // blue
	write_byte(200) // brightness
	write_byte(0) // scroll speed
	message_end()
		
	new Origin[3]
	get_user_origin(Target, Origin);
	
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_ELIGHT)
	write_short(Target)			// entity
	write_coord(Origin[0])			// initial position
	write_coord(Origin[1])			// initial position
	write_coord(Origin[2])			// initial position
	write_coord(100)			// radius
	write_byte(255)				// red
	write_byte(255)				// green
	write_byte(255)				// blue
	write_byte(10)				// life
	write_coord(0)				// decay rate
	message_end()
	
	emit_sound(Caster, CHAN_STATIC, SOUND_LIGHTNING, 1.0, ATTN_NORM, 0, PITCH_NORM);
}
#endif


#if defined ULT_IMMOLATE
//Immolate
public Ultimate_Immolate(Caster, Target) {
	emit_sound(Caster, CHAN_STATIC, SOUND_IMMOLATE, 0.5, ATTN_NORM, 0, PITCH_NORM);
	
	new TargetOrigin[3];
	get_user_origin(Target, TargetOrigin);
	
	message_begin(MSG_PVS, SVC_TEMPENTITY, TargetOrigin)
	write_byte(TE_EXPLOSION)
	write_coord(TargetOrigin[0])			// position(X)
	write_coord(TargetOrigin[1])			// position(Y)
	write_coord(TargetOrigin[2])			// position(Z)
	write_short(SPR_IMMOLATE)			// sprite index
	write_byte(20)					// scale in 0.1's
	write_byte(24)					// framerate
	write_byte(4)					// flags
	message_end()
	
	message_begin(MSG_PVS, SVC_TEMPENTITY, TargetOrigin)
	write_byte(TE_EXPLOSION)
	write_coord(TargetOrigin[0])			// position(X)
	write_coord(TargetOrigin[1])			// position(Y)
	write_coord(TargetOrigin[2])			// position(Z)
	write_short(SPR_BURNING)			// sprite index
	write_byte(30)					// scale in 0.1's
	write_byte(24)					// framerate
	write_byte(4)					// flags
	message_end()
	
	if(get_user_health(Target) - float(IMMOLATE_DAMAGE) >= 1) {
		ExecuteHam(Ham_TakeDamage, Target, Caster, Caster, float(IMMOLATE_DAMAGE), DMG_BURN);
		
		Create_ScreenFade(Target,(1<<13),(1<<14), 0x0000, 255, 108, 0, 160);
		Create_ScreenShake(Target, 0xFFFF,(1<<13), 0xFFFF);
		
	}
	else			
		death_message(Caster, Target, "Immolate");
	
	new parm[3];
	parm[0] = Caster;
	parm[1] = Target;
	parm[2] = 1;
	
	set_task(1.0, "Immolate_DoT", TASK_BURNING + Target, parm, 3);
}

public Immolate_DoT(parm[3]) {
	new Caster = parm[0];
	new Target = parm[1];
	new Counter = parm[2];
	
	if(Counter > IMMOLATE_DOT || !is_user_alive(Target) || !is_user_connected(Target) || csdm_shop_get_user_necklace ( Target ) )  {
		Immolate_Remove(Target);
		if ( csdm_shop_get_user_necklace ( Target ) )
			emit_sound ( Target, CHAN_STATIC, NECKLACE_SOUND, 1.0, ATTN_NORM, 0, PITCH_NORM );
			
		return
	}
	
	new TargetOrigin[3];
	get_user_origin(Target, TargetOrigin);
	
	emit_sound(Target, CHAN_STATIC, SOUND_IMMOLATE_BURNING, 0.5, ATTN_NORM, 0, PITCH_NORM);
	
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
	write_byte(TE_SPRITE) 
	write_coord(TargetOrigin[0])		// position
	write_coord(TargetOrigin[1]) 
	write_coord(TargetOrigin[2]) 
	write_short(SPR_FIRE)			// sprite index
	write_byte(3)				// scale in 0.1's
	write_byte(200)				// brightness
	message_end() 
	
	if(get_user_health(Target) - float(IMMOLATE_DOT_DAMAGE) >= 1) {
		ExecuteHam(Ham_TakeDamage, Target, Caster, Caster, float(IMMOLATE_DOT_DAMAGE), DMG_BURN);
		
		Create_ScreenFade(Target,(1<<13),(1<<14), 0x0000, 255, 108, 0, 160);
		Create_ScreenShake(Target, 0xFFFF,(1<<13), 0xFFFF);
	}
	else
		death_message(Caster, Target, "Immolate Burn");
	
	parm[2]++;
	
	set_task(1.0, "Immolate_DoT", TASK_BURNING + Target, parm, 3);
	return
}

public Immolate_Remove(Target) {	
	remove_task(TASK_BURNING + Target);
	return PLUGIN_HANDLED;
}
#endif


#if defined ULT_LOCUSTSWARM
public Ultimate_LocustSwarm(id) {
	new Victim = LocustGetTarget(id);
	
	if(Victim == -1) {
		new Message[64];
		formatex(Message,sizeof(Message)-1, "No valid targets found");
		
		HudMessage(id, Message, _, _, _, _, _, _, _, 2.0);
	}
	else {
		new CasterOrigin[3];
		get_user_origin(id, CasterOrigin);
		
		Ultimate_Icon(id, 2);
		
		UltimateDelay[id] = get_pcvar_num(cvar_ultimate_countdown);
		
		new parm[10];
		parm[0] = id;	// caster
		parm[1] = Victim;		// victim
		parm[2] = CasterOrigin[0];
		parm[3] = CasterOrigin[1];
		parm[4] = CasterOrigin[2];
		
		LocustEffect(parm);
	}
}

public LocustGetTarget(id) {
	new Team = get_user_team(id);
	new Players[32], Num, TargetID;
	new Targets[33], TotalTargets = 0;
	
	get_players(Players, Num, "a");
	
	for(new i = 0; i < Num; i++) {
		TargetID = Players[i];
		
		if(get_user_team(TargetID) != Team ) {
			
			if ( !csdm_shop_get_user_necklace ( TargetID ) ) 
				Targets[TotalTargets++] = TargetID;
				
			else
				emit_sound ( TargetID, CHAN_STATIC, NECKLACE_SOUND, 1.0, ATTN_NORM, 0, PITCH_NORM );
		}
	}
	
	if(TotalTargets == 0) {
		return -1;
	}
	
	new Victim = 0, RandomSpot;
	while(Victim == 0) {
		RandomSpot = random_num(0, TotalTargets);
		
		Victim = Targets[RandomSpot];
	}
	return Victim;
}


public LocustEffect(parm[]) {
	new Attacker = parm[0];
	new Victim = parm[1];
	if(Attacker >= TASK_FUNNELS) {
		Attacker -= TASK_FUNNELS;
	}
	
	if(!is_user_alive(Victim) || !is_user_connected(Victim)) {
		chat_color(Attacker, "%s Victim is no longer targetable for !gLocust Swarm!t, finding new target!", szPrefix);
		
		new Victim = LocustGetTarget(Attacker);
		
		if(Victim == -1) {
			new Message[64];
			formatex(Message,sizeof(Message)-1, "No valid targets found");
			
			HudMessage(Attacker, Message, _, _, _, _, _, _, _, 2.0);
			
			UltimateDelay[Attacker] = 2;
			Ultimate_Delay(Attacker)
		}
		else {
			new CasterOrigin[3];
			get_user_origin(Attacker, CasterOrigin);
			parm[1] = Victim;	// victim
			parm[2] = CasterOrigin[0];
			parm[3] = CasterOrigin[1];
			parm[4] = CasterOrigin[2];
			
			chat_color(Attacker, "%s Victim is no longer !gtargetable!t, try casting again!", szPrefix);
			
			UltimateDelay[Attacker] = 2;
			Ultimate_Delay(Attacker)
		}
	}
	
	new MULTIPLIER = 150
	
	new VictimOrigin[3], Funnel[3];
	get_user_origin(Victim, VictimOrigin);
	
	Funnel[0] = parm[2];
	Funnel[1] = parm[3];
	Funnel[2] = parm[4];
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)	
	write_byte(TE_LARGEFUNNEL)
	write_coord(Funnel[0])		// origin, x
	write_coord(Funnel[1])		// origin, y
	write_coord(Funnel[2])		// origin, z
	write_short(SPR_SNOW)		// sprite(0 for none)
	write_short(0)			// 0 for collapsing, 1 for sending outward
	message_end() 
	
	new Dist[3];
	Dist[0] = HLP_Diff(VictimOrigin[0], Funnel[0]);
	Dist[1] = HLP_Diff(VictimOrigin[1], Funnel[1]);
	Dist[2] = HLP_Diff(VictimOrigin[2], Funnel[2]);	
	
	for(new i = 0; i < 3; i++) {
		if(HLP_Diff(VictimOrigin[i], Funnel[i] - MULTIPLIER) < Dist[i]) {
			Funnel[i] -= MULTIPLIER;
		}
		else if(HLP_Diff(VictimOrigin[i], Funnel[0] + MULTIPLIER) < Dist[i]) {
			Funnel[i] += MULTIPLIER;
		}
		else {
			Funnel[i] = VictimOrigin[i];
		}
	}
	
	parm[2] = Funnel[0];
	parm[3] = Funnel[1];
	parm[4] = Funnel[2];
	
	
	if(!(Dist[0] < 50 && Dist[1] < 50 && Dist[2] < 50)) {
		
		new Float:Time = 0.2;
		set_task(Time, "LocustEffect", Attacker + TASK_FUNNELS, parm, 5);
	}
	else {
		new Damage = random_num(LOCUSTSWARM_DMG_MIN, LOCUSTSWARM_DMG_MAX);
		
		new Float:FDamage = float(Damage);
		
		if(get_user_health(Victim) - Damage >= 1) {
			ExecuteHam(Ham_TakeDamage, Victim, Attacker, Attacker, FDamage, DMG_BLAST);
			
			Create_ScreenFade(Victim,(1<<13),(1<<14), 0x0000, 0, 200, 0, 100);
			Create_ScreenShake(Victim, 0xFFFF,(1<<13), 0xFFFF);
		}
		else			
			death_message(Attacker, Victim, "Locust Swarm");
		
		Ultimate_Icon(Attacker, 0);
		
		Ultimate_Delay(Attacker)
		
		emit_sound(Victim, CHAN_STATIC, SOUND_LOCUSTSWARM, 1.0, ATTN_NORM, 0, PITCH_NORM);
		
		new Name[32];
		get_user_name(Victim, Name, 31);
		
		chat_color ( Attacker, "%s!g Locust Swarm !thit !g%s !tfor !g%d!t damage!", szPrefix, Name, Damage);
	}
}

public HLP_Diff(iNum, iNum2) {
	if(iNum > iNum2) {
		return(iNum-iNum2);
	}
	else {
		return(iNum2-iNum);
	}
	
	return 0;
}
#endif

#if defined VIP_MULTIJUMP
public client_PreThink(id)
{
	if(!is_user_alive(id)) return PLUGIN_CONTINUE
	if(get_cvar_num("amx_mjadminonly") && (!access(id,VIP_LEVEL))) return PLUGIN_CONTINUE
	new nbut = get_user_button(id)
	new obut = get_user_oldbutton(id)
	if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
	{
		if(jumpnum[id] < get_cvar_num("amx_maxjumps"))
		{
			dojump[id] = true
			jumpnum[id]++
			return PLUGIN_CONTINUE
		}
	}
	if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
	{
		jumpnum[id] = 0
		return PLUGIN_CONTINUE
	}
	return PLUGIN_CONTINUE
}

public client_PostThink(id)
{
	if(!is_user_alive(id)) return PLUGIN_CONTINUE
	if(get_cvar_num("amx_mjadminonly") && (!access(id,VIP_LEVEL))) return PLUGIN_CONTINUE
	if(dojump[id] == true)
	{
		new Float:velocity[3]	
		entity_get_vector(id,EV_VEC_velocity,velocity)
		velocity[2] = random_float(265.0,285.0)
		entity_set_vector(id,EV_VEC_velocity,velocity)
		dojump[id] = false
		return PLUGIN_CONTINUE
	}
	return PLUGIN_CONTINUE
}	
#endif

#if defined NADE_DROPS
public event_damage(id) {
	
	// if player is still alive or plugin is disabled
	if(get_user_health(id) > 0 || get_cvar_num("mp_nadedrops") < 1) {
		return PLUGIN_CONTINUE;
	}
	
	// if player had HE grenade
	if(hasweapon(id,"weapon_hegrenade") > 0) {
		new grenade = create_entity("info_target"); // create grenade entity
		entity_set_string(grenade,EV_SZ_classname,"fake_hegrenade"); // change name
		entity_set_int(grenade,EV_ENT_owner,id); // set owner
		entity_set_int(grenade,EV_INT_iuser1,0); // hasn't bounced yet
		
		// set grenade entity's size
		new Float:minbox[3] = { -2.5, -2.5, -2.5 }
		new Float:maxbox[3] = { 2.5, 2.5, 2.5 };
		entity_set_vector(grenade,EV_VEC_mins,minbox);
		entity_set_vector(grenade,EV_VEC_maxs,maxbox);
		
		// set grenade's overall being of a whole
		entity_set_int(grenade,EV_INT_solid,SOLID_TRIGGER);
		entity_set_int(grenade,EV_INT_movetype,MOVETYPE_TOSS);
		
		// set a random angle
		new Float:angles[3] = { 0.0, 0.0, 0.0 };
		angles[1] = float(random_num(0,180));
		entity_set_vector(grenade,EV_VEC_angles,angles);
		
		// get player's origin
		new Float:origin[3];
		entity_get_vector(id,EV_VEC_origin,origin);
		origin[0] += 10; // offset
		
		// set model and origin
		entity_set_model(grenade,"models/w_hegrenade.mdl");
		entity_set_vector(grenade,EV_VEC_origin,origin);
	}
	
	// if player had smoke grenade
	if(hasweapon(id,"weapon_smokegrenade") > 0) {
		new grenade = create_entity("info_target"); // create grenade entity
		entity_set_string(grenade,EV_SZ_classname,"fake_smokegrenade"); // change name
		entity_set_int(grenade,EV_ENT_owner,id); // set owner
		entity_set_int(grenade,EV_INT_iuser1,0); // hasn't bounced yet
		
		// set grenade entity's size
		new Float:minbox[3] = { -2.5, -2.5, -2.5 }
		new Float:maxbox[3] = { 2.5, 2.5, 2.5 };
		entity_set_vector(grenade,EV_VEC_mins,minbox);
		entity_set_vector(grenade,EV_VEC_maxs,maxbox);
		
		// set grenade's overall being of a whole
		entity_set_int(grenade,EV_INT_solid,SOLID_TRIGGER);
		entity_set_int(grenade,EV_INT_movetype,MOVETYPE_TOSS);
		
		// set a random angle
		new Float:angles[3] = { 0.0, 0.0, 0.0 };
		angles[1] = float(random_num(0,180));
		entity_set_vector(grenade,EV_VEC_angles,angles);
		
		// get player's origin
		new Float:origin[3];
		entity_get_vector(id,EV_VEC_origin,origin);
		origin[0] -= 10; // offset
		
		// set model and origin
		entity_set_model(grenade,"models/w_smokegrenade.mdl");
		entity_set_vector(grenade,EV_VEC_origin,origin);
	}
	
	// if player had at least one flashbang
	if(hasweapon(id,"weapon_flashbang") > 0) {
		new grenade = create_entity("info_target"); // create grenade entity
		entity_set_string(grenade,EV_SZ_classname,"fake_flashbang"); // change name
		entity_set_int(grenade,EV_ENT_owner,id); // set owner
		entity_set_int(grenade,EV_INT_iuser1,0); // hasn't bounced yet
		
		// set grenade entity's size
		new Float:minbox[3] = { -2.5, -2.5, -2.5 }
		new Float:maxbox[3] = { 2.5, 2.5, 2.5 };
		entity_set_vector(grenade,EV_VEC_mins,minbox);
		entity_set_vector(grenade,EV_VEC_maxs,maxbox);
		
		// set grenade's overall being of a whole
		entity_set_int(grenade,EV_INT_solid,SOLID_TRIGGER);
		entity_set_int(grenade,EV_INT_movetype,MOVETYPE_TOSS);
		
		// set a random angle
		new Float:angles[3] = { 0.0, 0.0, 0.0 };
		angles[1] = float(random_num(0,180));
		entity_set_vector(grenade,EV_VEC_angles,angles);
		
		// get player's origin
		new Float:origin[3];
		entity_get_vector(id,EV_VEC_origin,origin);
		origin[1] += 10; // offset
		
		// set model and origin
		entity_set_model(grenade,"models/w_flashbang.mdl");
		entity_set_vector(grenade,EV_VEC_origin,origin);
	}
	
	// if player had two flashbangs, drop another
	if(hasweapon(id,"weapon_flashbang") > 1) {
		new grenade = create_entity("info_target"); // create grenade entity
		entity_set_string(grenade,EV_SZ_classname,"fake_flashbang"); // change name
		entity_set_int(grenade,EV_ENT_owner,id); // set owner
		entity_set_int(grenade,EV_INT_iuser1,0); // hasn't bounced yet
		
		// set grenade entity's size
		new Float:minbox[3] = { -2.5, -2.5, -2.5 }
		new Float:maxbox[3] = { 2.5, 2.5, 2.5 };
		entity_set_vector(grenade,EV_VEC_mins,minbox);
		entity_set_vector(grenade,EV_VEC_maxs,maxbox);
		
		// set grenade's overall being of a whole
		entity_set_int(grenade,EV_INT_solid,SOLID_TRIGGER);
		entity_set_int(grenade,EV_INT_movetype,MOVETYPE_TOSS);
		
		// set a random angle
		new Float:angles[3] = { 0.0, 0.0, 0.0 };
		angles[1] = float(random_num(0,180));
		entity_set_vector(grenade,EV_VEC_angles,angles);
		
		// get player's origin
		new Float:origin[3];
		entity_get_vector(id,EV_VEC_origin,origin);
		origin[1] -= 10; // offset
		
		// set model and origin
		entity_set_model(grenade,"models/w_flashbang.mdl");
		entity_set_vector(grenade,EV_VEC_origin,origin);
	}
	
	return PLUGIN_CONTINUE;
}

// ResetHUD
public event_resethud(id) {
	if(is_user_connected(id) == 1 && get_user_team(id) < 3) {
		set_task(0.5,"checkalive",id); // delay, because client is technically dead on ResetHUD
	}
}

// check if user is alive
public checkalive(id) {
	if(is_user_alive(id) == 1) { // if so
		clear_nades(id); // clear nades (they just spawned)
	}
}

// entity touching
public pfn_touch(pentru,ptd) {
	if(!is_valid_ent(ptd)) { // invalid toucher
		return PLUGIN_CONTINUE;
	}
	
	new classname[32];
	entity_get_string(ptd,EV_SZ_classname,classname,31); // get name of toucher
	
	new bounced = entity_get_int(ptd,EV_INT_iuser1); // bounced yet?
	
	// check if one of our fake grenades is colliding with world and mp_nadedropsounds is positive
	if((equal(classname,"fake_hegrenade") || equal(classname,"fake_flashbang") || equal(classname,"fake_smokegrenade")) && pentru == 0 && bounced == 0 && get_cvar_num("mp_nadedropsounds") > 0) {
		emit_sound(ptd,CHAN_ITEM,"weapons/he_bounce-1.wav",0.5,ATTN_NORM,0,PITCH_LOW); // play sound
		entity_set_int(ptd,EV_INT_iuser1,1); // has bounced
		return PLUGIN_CONTINUE;
	}
	
	// now check for more invalid entities or players
	if(!is_valid_ent(pentru) || !is_valid_ent(ptd) || !is_user_connected(ptd)) {
		return PLUGIN_CONTINUE;
	}
	
	entity_get_string(pentru,EV_SZ_classname,classname,31); // get name of touched
	
	// if player is touching hegrenade and doesn't have one
	if(equal(classname,"fake_hegrenade") && hasweapon(ptd,"weapon_hegrenade") == 0) {
		fm_give_item(ptd,"weapon_hegrenade");
		remove_entity(pentru);
		return PLUGIN_CONTINUE;
	}
	
	// if player is touching smokegrenade and doesn't have one
	if(equal(classname,"fake_smokegrenade") && hasweapon(ptd,"weapon_smokegrenade") == 0) {
		fm_give_item(ptd,"weapon_smokegrenade");
		remove_entity(pentru);
		return PLUGIN_CONTINUE;
	}
	
	// if player is touching flashbang and has room for another
	if(equal(classname,"fake_flashbang") && hasweapon(ptd,"weapon_flashbang") < 2) {
		fm_give_item(ptd,"weapon_flashbang");
		remove_entity(pentru);
		return PLUGIN_CONTINUE;
	}
	
	return PLUGIN_CONTINUE;
}


// function to check if player has a specific weapon.
// returns the amount of ammo for that weapon in backpack.
// we use this so we can check for multiple flashbangs as well
public hasweapon(id,weaponname[32]) {
	if(is_user_connected(id) == 0 || get_user_team(id) > 2) {
		return 0;
	}
	
	new weapons[32], num;
	get_user_weapons(id,weapons,num); // get weapons
	
	new foundweapon; // if we found the weapon yet (and if we did how much ammo for it)
	
	// loop through weapons
	for(new i=0;i<num;i++) {
		new checkweaponname[32];
		get_weaponname(weapons[i],checkweaponname,31);
		
		if(equal(weaponname,checkweaponname)) { // compare names
			new clip, ammo; // clip and ammo
			get_user_ammo(id,weapons[i],clip,ammo); // get clip and ammo
			foundweapon = ammo; // return amount in clip (for multiple FBs)
			break;
		}
	}
	
	return foundweapon;
}

// clear user's grenades
public clear_nades(id) {
	new currnade;
	
	// go through fake HE grenades
	currnade = -1;
	while((currnade = find_ent_by_class(currnade,"fake_hegrenade")) > 0) {
		if(entity_get_int(currnade,EV_ENT_owner) == id) {
			remove_entity(currnade);
		}
	}
	
	// go through fake smoke grenades
	currnade = -1;
	while((currnade = find_ent_by_class(currnade,"fake_smokegrenade")) > 0) {
		if(entity_get_int(currnade,EV_ENT_owner) == id) {
			remove_entity(currnade);
		}
	}
	
	// go through fake flashbangs
	currnade = -1;
	while((currnade = find_ent_by_class(currnade,"fake_flashbang")) > 0) {
		if(entity_get_int(currnade,EV_ENT_owner) == id) {
			remove_entity(currnade);
		}
	}
}
#endif

#if defined TEAM_SEMICLIP
public fwdPlayerPreThink_SemiClip( plr )
{
	static id;
	
	if( is_user_alive( plr ) )
	{
		for( id = 1 ; id <= g_iMaxPlayers ; id++ )
		{
			if( pev( id, pev_solid ) == SOLID_SLIDEBOX && g_bSemiclip[plr][id] && id != plr )
			{
				set_pev( id, pev_solid, SOLID_NOT );
				g_bHasSemiclip[id] = true;
			}
		}
	}
}

public fwdPlayerPostThink( plr )
{
	static id;

	if( is_user_alive( plr ) )
	{
		for( id = 1 ; id <= g_iMaxPlayers ; id++ )
		{
			if( g_bHasSemiclip[id] )
			{
				set_pev( id, pev_solid, SOLID_SLIDEBOX );
				g_bHasSemiclip[id] = false;
			}
		}
	}
}

public fwdThink( ent )
{
	static i, j;
	static team[33];
	static Float:origin[33][3];
	
	if( ent == g_iTaskId )
	{
		if( get_pcvar_num( g_iCvar[0] ) )
		{
			for( i = 1 ; i <= g_iMaxPlayers ; i++ )
			{
				if( is_user_alive( i ) )
				{
					pev( i, pev_origin, origin[i] );
						
					if( get_pcvar_num( g_iCvar[1] ) )
						team[i] = get_user_team( i );
					
					for( j = 1 ; j <= g_iMaxPlayers ; j++ )
					{
						if( is_user_alive( j ) )
						{
							if( get_pcvar_num( g_iCvar[1] ) && team[i] != team[j] )
							{
								g_bSemiclip[i][j] = false;
								g_bSemiclip[j][i] = false;
								
							}	
							else if( floatabs( origin[i][0] - origin[j][0] ) < 120.0 && floatabs( origin[i][1] - origin[j][1] ) < 120.0 && floatabs( origin[i][2] - origin[j][2] ) < ( 120.0 * 2 ) )
							{
								g_bSemiclip[i][j] = true;
								g_bSemiclip[j][i] = true;
							}
							else
							{
								g_bSemiclip[i][j] = false;
								g_bSemiclip[j][i] = false;
							}
						}
					}
				}
			}
		}
		
		set_pev( ent, pev_nextthink, get_gametime( ) + 0.2 );
	}
}

public fwdAddToFullPack_Post( es_handle, e, ent, host, hostflags, player, pset )
{
	if( player )
	{
		if( g_bSemiclip[host][ent] )
		{
			set_es( es_handle, ES_Solid, SOLID_NOT ); // makes semiclip flawless
			
			if( get_pcvar_num( g_iCvar[2] ) == 1 )
			{
				set_es( es_handle, ES_RenderMode, kRenderTransAlpha );
				set_es( es_handle, ES_RenderAmt, 85 );
			}
			else if( get_pcvar_num( g_iCvar[2] ) == 2 )
			{
				set_es( es_handle, ES_Effects, EF_NODRAW );
				set_es( es_handle, ES_Solid, SOLID_NOT );
			}
		}
	}
}

// is there a better way to detect changings of g_iCvar[0]?
public fwdClientCommand( plr )
{
	// use the forwards just when needed, for good performance
	if( !get_pcvar_num( g_iCvar[0] ) && g_bSemiclipEnabled )
	{
		unregister_forward( FM_PlayerPreThink, g_iForwardId[0] );
		unregister_forward( FM_PlayerPostThink, g_iForwardId[1] );
		unregister_forward( FM_AddToFullPack, g_iForwardId[2], 1 );
		
		g_bSemiclipEnabled = false;
	}
	else if( get_pcvar_num( g_iCvar[0] ) && !g_bSemiclipEnabled )
	{
		g_iForwardId[0] = register_forward( FM_PlayerPreThink, "fwdPlayerPreThink" );
		g_iForwardId[1] = register_forward( FM_PlayerPostThink, "fwdPlayerPostThink" );
		g_iForwardId[2] = register_forward( FM_AddToFullPack, "fwdAddToFullPack_Post", 1 );
		
		g_bSemiclipEnabled = true;
	}
}
#endif

#if defined LEVEL_ON_CHAT
public handle_say(id) 
{ 
    new chat[192], none[2][32], message[192], name[192] 
    read_argv(1, chat, sizeof(chat) -1) 
    formatex(none[0], sizeof(none) -1, ""), formatex(none[1], sizeof(none) -1, " ") 
     
    if(!equali(chat, none[0]) && !equali(chat, none[1])) 
    { 
        get_user_name(id, name, sizeof(name) -1) 
        if(!is_user_alive(id)) 
        { 
            formatex(message, sizeof(message) -1, "^4[LVL: %d]^1 *DEAD*^3 %s : ^1%s", User [ id ] [ Level ], name, chat) 
        } 
        else 
        { 
            formatex(message, sizeof(message) -1, "^4[LVL: %d]^3 %s ^1 : %s", User [ id ] [ Level ], name , chat) 
        } 
        switch(cs_get_user_team(id)) 
        { 
            case CS_TEAM_CT: ColorChat(0, BLUE, message) 
            case CS_TEAM_T: ColorChat(0, RED, message) 
        } 
        return PLUGIN_HANDLED_MAIN 
    } 
    return PLUGIN_CONTINUE     
} 
public handle_team_say(id) 
{ 
    new chat[192], none[2][32], message[192], message2[192], name[192] 
    read_argv(1, chat, sizeof(chat) -1) 
    formatex(none[0], sizeof(none) -1, ""), formatex(none[1], sizeof(none) -1, " ") 
     
    if(!equali(chat, none[0]) && !equali(chat, none[1])) 
    { 
        get_user_name(id, name, sizeof(name) -1) 
        switch(cs_get_user_team(id)) 
        { 
            case CS_TEAM_CT: { 
                if(!is_user_alive(id)) 
                    formatex(message, sizeof(message) -1, "^4[LVL: %d]^1 (Counter-Terrorists) *DEAD*^3 %s : ^1%s", User [ id ] [ Level ], name, chat) 
                else 
                    formatex(message, sizeof(message) -1, "^4[LVL: %d]^1 (Counter-Terrorists)^3 %s : ^1%s", User [ id ] [ Level ], name, chat) 
                new iPlayers[32], iNum, iPid 
                get_players(iPlayers, iNum) 
                for(new i; i < iNum; i++) 
                { 
                    iPid = iPlayers[i] 
                    if(cs_get_user_team(iPid) != CS_TEAM_CT) 
                        continue; 
                     
                    ColorChat(iPid, BLUE, message) 
                } 
            } 
            case CS_TEAM_T: { 
                if(!is_user_alive(id)) 
                    formatex(message2, sizeof(message2) -1, "^4[LVL: %d]^1 (Terrorists) *DEAD*^3 %s : ^1%s", User [ id ] [ Level ], name, chat) 
                else  
                    formatex(message2, sizeof(message2) -1, "^4[LVL: %d]^1 (Terrorists)^3 %s : ^1%s", User [ id ] [ Level ], name, chat) 
                new iPlayers[32], iNum, iPid 
                get_players(iPlayers, iNum) 
                for(new i; i< iNum; i++) 
                { 
                    iPid = iPlayers[i] 
                    if(cs_get_user_team(iPid) != CS_TEAM_T) 
                        continue 
                     
                    ColorChat(iPid, RED, message2) 
                } 
            } 
        } 
        return PLUGIN_HANDLED_MAIN 
    } 
    return PLUGIN_CONTINUE     
} 
#endif

stock Create_ScreenFade(id, duration, holdtime, fadetype, red, green, blue, alpha){
	if(is_user_connected(id)) {
		message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)			
		write_short(duration)			// fade lasts this long duration
		write_short(holdtime)			// fade lasts this long hold time
		write_short(fadetype)			// fade type(in / out)
		write_byte(red)				// fade red
		write_byte(green)				// fade green
		write_byte(blue)				// fade blue
		write_byte(alpha)				// fade alpha
		message_end()
	}
}

stock Create_ScreenShake(id, amount, duration, frequency){
	if(is_user_connected(id)) {
		message_begin(MSG_ONE,get_user_msgid("ScreenShake"),{0,0,0},id) 
		write_short(amount)				// ammount 
		write_short(duration)				// lasts this long 
		write_short(frequency)			// frequency
		message_end()
	}
}

stock death_message(Killer, Victim, const Weapon[]) {
	if(is_user_connected(Killer) && is_user_connected(Victim)) {
		set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET);
		ExecuteHamB(Ham_Killed, Victim, Killer, 2);
		set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT);
		
		make_deathmsg(Killer, Victim, 0, Weapon);
		
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"));
		write_byte(Killer); // id
		write_short(pev(Killer, pev_frags)); // frags
		write_short(cs_get_user_deaths(Killer)); // deaths
		write_short(0); // class?
		write_short(get_user_team(Killer)); // team
		message_end();
		
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"));
		write_byte(Victim); // id
		write_short(pev(Victim, pev_frags)); // frags
		write_short(cs_get_user_deaths(Victim)); // deaths
		write_short(0); // class?
		write_short(get_user_team(Victim)); // team
		message_end();
	}
}

public make_knockback(Victim, Float:origin[3], Float:maxspeed) {
	new Float:fVelocity[3];
	kickback(Victim, origin, maxspeed, fVelocity);
	entity_set_vector(Victim, EV_VEC_velocity, fVelocity);
	
	return(1);
}

stock kickback(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3]) {
	new Float:fEntOrigin[3];
	entity_get_vector(ent, EV_VEC_origin, fEntOrigin);
	
	new Float:fDistance[3];
	fDistance[0] = fEntOrigin[0] - fOrigin[0];
	fDistance[1] = fEntOrigin[1] - fOrigin[1];
	fDistance[2] = fEntOrigin[2] - fOrigin[2];
	new Float:fTime = (vector_distance(fEntOrigin,fOrigin) / fSpeed);
	fVelocity[0] = fDistance[0] / fTime;
	fVelocity[1] = fDistance[1] / fTime;
	fVelocity[2] = fDistance[2] / fTime;
	
	return(fVelocity[0] && fVelocity[1] && fVelocity[2]);
}
#endif

stock ShakeScreen( id, const Float:seconds )
{
	message_begin( MSG_ONE, get_user_msgid( "ScreenShake" ), { 0, 0, 0 }, id );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( 1<<13 );
	message_end( );
	
}

stock FadeScreen( id, const Float:seconds, const redd, const greenn, const bluee, const alpha )
{      
	message_begin( MSG_ONE, get_user_msgid( "ScreenFade" ), _, id );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( 0x0000 );
	write_byte( redd );
	write_byte( greenn );
	write_byte( bluee );
	write_byte( alpha );
	message_end( );
	
}

stock Create_TE_SPRITETRAIL(start[3], end[3], iSprite, count, life, scale, velocity, random ){

	message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte( TE_SPRITETRAIL )
	write_coord( start[0] )				// start position (X)
	write_coord( start[1] )				// start position (Y)
	write_coord( start[2] )				// start position (Z)
	write_coord( end[0] )				// end position (X)
	write_coord( end[1] )				// end position (Y)
	write_coord( end[2] )				// end position (Z)
	write_short( iSprite )				// sprite index
	write_byte( count )					// count
	write_byte( life)					// life in 0.1's
	write_byte( scale)					// scale in 0.1's
	write_byte( velocity )				// velocity along vector in 10's
	write_byte( random )				// randomness of velocity in 10's
	message_end()
}

stock bool:IsUserVip(  id  )
{
	
	if ( get_user_flags (  id  )  &  VIP_LEVEL )
		return true;
	
	return false;
	
}


#define clamp_byte(%1)       ( clamp( %1, 0, 255 ) )
#define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )

stock HudMessage(const id, const message[], red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 0.01, Float:holdtime = 3.0, Float:fadeintime = 0.01, Float:fadeouttime = 0.01) {
	new count = 1, players[32];
	
	if(id) players[0] = id;
	else get_players(players, count, "ch"); {
		for(new i = 0; i < count; i++) {
			if(is_user_connected(players[i])) {	
				new color = pack_color(clamp_byte(red), clamp_byte(green), clamp_byte(blue))
				
				message_begin(MSG_ONE_UNRELIABLE, SVC_DIRECTOR, _, players[i]);
				write_byte(strlen(message) + 31);
				write_byte(DRC_CMD_MESSAGE);
				write_byte(effects);
				write_long(color);
				write_long(_:x);
				write_long(_:y);
				write_long(_:fadeintime);
				write_long(_:fadeouttime);
				write_long(_:holdtime);
				write_long(_:fxtime);
				write_string(message);
				message_end();
			}
		}
	}
}

stock chat_color(const id, const input[], any:...)
{
	new count = 1, players[32]
	static msg[320]
	vformat(msg, 190, input, 3)
	replace_all(msg, 190, "!g", "^4")
	replace_all(msg, 190, "!n", "^1")
	replace_all(msg, 190, "!t", "^3")
	replace_all(msg, 190, "!t2", "^0")
	
	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()
		}
	}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang2057\\ f0\\ fs16 \n\\ par }
*/
RoyalServer
User avatar
Diktator
Membru, skill 0
Membru, skill 0
Posts: 83
Joined: 02 Dec 2016, 16:44
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

12 Dec 2016, 13:09

le-ai gasit sau le mai cauti?
give_gold
give_xp
0.70$ pe dealskins [dot] com, foloseste promo code: CSGO4ITEMS
User avatar
JuNNNNkieWho
Membru, skill +1
Membru, skill +1
Posts: 106
Joined: 20 Dec 2015, 08:25
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

12 Dec 2016, 13:33

Nu merg mane alea
User avatar
JuNNNNkieWho
Membru, skill +1
Membru, skill +1
Posts: 106
Joined: 20 Dec 2015, 08:25
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

12 Dec 2016, 13:36

Nu cred ca sunt bagate pentru ca amx_give si amx_donate,pot sa isi dau playerii intre ei.Si ei daca au logic
Post Reply

Return to “Probleme la servere dedicate de Counter-Strike”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 66 guests