Furien30_level_sisms.amxx licentiat? [rezolvat]

Discutii despre tot ce nu se incadreaza in celelalte categorii (dar legat de Counter-Strike !)

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
luchian2000
Membru, skill 0
Membru, skill 0
Posts: 50
Joined: 23 Dec 2013, 22:31
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Has thanked: 18 times
Contact:

22 Jun 2014, 12:40

Salut, ma puteti ajuta si pe mine sa fac rost de pluginul furien30_level_sistems.amxx licentiat, deoarce al menu nu este licentiat si imi pica server din cauza lui . Sunt dispus sa platesc pentru cei care ma ajuta.
RoyalServer
User avatar
Te-am_prins
Membru, skill +3
Membru, skill +3
Posts: 1227
Joined: 25 Jan 2014, 16:32
Detinator Steam: Da
Detinator server CS: 89.40.233.130
SteamID: Fix pe asta il stiu
Reputatie: Fost moderator
Membru Club eXtreamCS (7 luni)
1 avertisment scos (-2 luni club)
-1 warn (anti-tepari shop)
Location: Bucuresti
Has thanked: 34 times
Been thanked: 90 times
Contact:

22 Jun 2014, 13:17

zi-mi ip la server si ti-l fac eu.
Image
Moderatorul anului 2k17 in actiune
Image
luchian2000
Membru, skill 0
Membru, skill 0
Posts: 50
Joined: 23 Dec 2013, 22:31
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Has thanked: 18 times
Contact:

22 Jun 2014, 14:55

86.124.128.54:27015 Multumesc >:D<
User avatar
Doctor whO? <3
Membru, skill +3
Membru, skill +3
Posts: 1197
Joined: 21 Jun 2013, 12:40
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Reputatie: Fost Membru Club eXtreamCS (doua luni)
Has thanked: 111 times
Been thanked: 76 times
Contact:

22 Jun 2014, 18:29

| Afiseaza codul
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>

// VIP
#define VIP_LEVEL		ADMIN_LEVEL_H
#define VIP_XP_MULTIPLIER	2.0

// Objective Modifiers
#define DEFUSING_BOMB		20.0			// XP awarded when the user starts to defuse the bomb
#define DEFUSED_BOMB		40.0			// XP awarded when the user defuses the bomb
#define PLANTING_BOMB		20.0			// XP awarded when the user starts planting the bomb
#define PLANT_BOMB		40.0			// XP awarded when the user plants the bomb
#define BOMB_PICKUP		20.0			// XP awarded when the user picks up the bomb
#define TOUCH_HOSTAGE		20.0			// XP awarded when the user touches a hostage
#define RESCUE_HOSTAGE		40.0			// XP awarded when the user rescues the hostage
#define KILL_HOSTAGE		20.0			// XP lost when killing a hostage
#define SPAWN_VIP		20.0			// XP awarded for spawning as the VIP
#define ESCAPE_VIP		40.0			// XP awarded for escaping as the VIP

// Kill modifiers
#define KILL			35.0			// XP awarded for getting a headshot
#define KILL_HEADSHOT		20.0			// XP awarded for getting a headshot
#define KILL_HOSTAGE_SAVER	20.0			// XP awarded for killing the hostage saver
#define	KILL_DEFUSER		20.0			// XP awarded for killing the defuser
#define KILL_PLANTER		20.0			// XP awarded for killing the planter
#define KILL_BOMB_CARRIER	20.0			// XP awarded for killing the bomb carrier
#define KILL_VIP		40.0			// XP awarded for killing the VIP

#define WIN_ROUND		40.0			// XP awarded for winning the round

enum {
	PLR_BOMB_DEFUSER = 1,
	PLR_BOMB_PLANTER,
	PLR_HOSTAGE_RESCUER,
	PLR_VIP,
	PLR_BOMB_CARRIER,
};

forward bomb_planting(planter);
forward bomb_planted(planter);
forward bomb_defusing(defuser);
forward bomb_defused(defuser);

new bool:HasBegunPlantingOrDefusing[33], PlayerRole[33];

//------| Ultimates |------//
#define ULT_SUICIDE
#define ULT_BLINK
#define ULT_CHAINLIGHTNING
#define ULT_ENTANGLE
#define ULT_IMMOLATE
#define ULT_BIGBADVOODOO
#define ULT_VENGEANCE
#define ULT_LOCUSTSWARM

//------| Furien Powers |------//
#define POWER_UNHOLYAURA
#define POWER_LEVITATION
#define POWER_VAMPIRICAURA
#define POWER_EVASION
#define POWER_TRUESHOT
#define POWER_PHOENIX
#define POWER_BANISH
#define POWER_UNSTABLECONCOCTION

//------| Anti Furien Powers |------//
#define POWER_DEVOTIONAURA
#define POWER_BASH
#define POWER_CRITICALSTRIKE
#define POWER_CRITICALGRENADE
#define POWER_SIPHONMANA
#define POWER_HEALINGWAVE
#define POWER_SHADOWSTRIKE
#define POWER_ORB

new MAX_LEVEL
#define EXPERIENCE_LEVEL	200

#define DESIGN1_STYLE "<meta charset=UTF-8><style>body{background:#112233;font-family:Arial}th{background:#558866;color:#FFF;padding:10px 2px;text-align:left}td{padding:4px 3px}table{background:#EEEECC;font-size:12px;font-family:Arial}h2,h3{color:#FFF;font-family:Verdana}#c{background:#E2E2BC}img{height:10px;background:#09F;margin:0 3px}#r{height:10px;background:#B6423C}#clr{background:none;color:#FFF;font-size:20px}</style>"
#define DESIGN2_STYLE "<meta charset=UTF-8><style>body{font-family:Arial}th{background:#575757;color:#FFF;padding:5px;border-bottom:2px #BCE27F solid;text-align:left}td{padding:3px;border-bottom:1px #E7F0D0 solid}table{color:#3C9B4A;background:#FFF;font-size:12px}h2,h3{color:#333;font-family:Verdana}#c{background:#F0F7E2}img{height:10px;background:#62B054;margin:0 3px}#r{height:10px;background:#717171}#clr{background:none;color:#575757;font-size:20px}</style>"
#define DESIGN3_STYLE "<meta charset=UTF-8><style>body{background:#E6E6E6;font-family:Verdana}th{background:#F5F5F5;color:#A70000;padding:6px;text-align:left}td{padding:2px 6px}table{color:#333;background:#E6E6E6;font-size:10px;font-family:Georgia;border:2px solid #D9D9D9}h2,h3{color:#333;}#c{background:#FFF}img{height:10px;background:#14CC00;margin:0 3px}#r{height:10px;background:#CC8A00}#clr{background:none;color:#A70000;font-size:20px;border:0}</style>"
#define DESIGN4_STYLE "<meta charset=UTF-8><style>body{background:#E8EEF7;margin:2px;font-family:Tahoma}th{color:#0000CC;padding:3px}tr{text-align:left;background:#E8EEF7}td{padding:3px}table{background:#CCC;font-size:11px}h2,h3{font-family:Verdana}img{height:10px;background:#09F;margin:0 3px}#r{height:10px;background:#B6423C}#clr{background:none;color:#000;font-size:20px}</style>"
#define DESIGN5_STYLE "<meta charset=UTF-8><style>body{background:#555;font-family:Arial}th{border-left:1px solid #ADADAD;border-top:1px solid #ADADAD}table{background:#3C3C3C;font-size:11px;color:#FFF;border-right:1px solid #ADADAD;border-bottom:1px solid #ADADAD;padding:3px}h2,h3{color:#FFF}#c{background:#FF9B00;color:#000}img{height:10px;background:#00E930;margin:0 3px}#r{height:10px;background:#B6423C}#clr{background:none;color:#FFF;font-size:20px;border:0}</style>"
#define DESIGN6_STYLE "<meta charset=UTF-8><style>body{background:#FFF;font-family:Tahoma}th{background:#303B4A;color:#FFF}table{padding:6px 2px;background:#EFF1F3;font-size:12px;color:#222;border:1px solid #CCC}h2,h3{color:#222}#c{background:#E9EBEE}img{height:7px;background:#F8931F;margin:0 3px}#r{height:7px;background:#D2232A}#clr{background:none;color:#303B4A;font-size:20px;border:0}</style>"
#define DESIGN7_STYLE "<meta charset=UTF-8><style>body{background:#FFF;font-family:Verdana}th{background:#2E2E2E;color:#FFF;text-align:left}table{padding:6px 2px;background:#FFF;font-size:11px;color:#333;border:1px solid #CCC}h2,h3{color:#333}#c{background:#F0F0F0}img{height:7px;background:#444;margin:0 3px}#r{height:7px;background:#999}#clr{background:none;color:#2E2E2E;font-size:20px;border:0}</style>"
#define DESIGN8_STYLE "<meta charset=UTF-8><style>body{background:#242424;margin:20px;font-family:Tahoma}th{background:#2F3034;color:#BDB670;text-align:left} table{padding:4px;background:#4A4945;font-size:10px;color:#FFF}h2,h3{color:#D2D1CF}#c{background:#3B3C37}img{height:12px;background:#99CC00;margin:0 3px}#r{height:12px;background:#999900}#clr{background:none;color:#FFF;font-size:20px}</style>"
#define DESIGN9_STYLE "<meta charset=UTF-8><style>body{background:#FFF;font-family:Tahoma}th{background:#056B9E;color:#FFF;padding:3px;text-align:left;border-top:4px solid #3986AC}td{padding:2px 6px}table{color:#006699;background:#FFF;font-size:12px;border:2px solid #006699}h2,h3{color:#F69F1C;}#c{background:#EFEFEF}img{height:5px;background:#1578D3;margin:0 3px}#r{height:5px;background:#F49F1E}#clr{background:none;color:#056B9E;font-size:20px;border:0}</style>"
#define DESIGN10_STYLE "<meta charset=UTF-8><style>body{background:#4C5844;font-family:Tahoma}th{background:#1E1E1E;color:#C0C0C0;padding:2px;text-align:left;}td{padding:2px 10px}table{color:#AAC0AA;background:#424242;font-size:13px}h2,h3{color:#C2C2C2;font-family:Tahoma}#c{background:#323232}img{height:3px;background:#B4DA45;margin:0 3px}#r{height:3px;background:#6F9FC8}#clr{background:none;color:#FFF;font-size:20px}</style>"
#define DESIGN11_STYLE "<meta charset=UTF-8><style>body{background:#F2F2F2;font-family:Arial}th{background:#175D8B;color:#FFF;padding:7px;text-align:left}td{padding:3px;border-bottom:1px #BFBDBD solid}table{color:#153B7C;background:#F4F4F4;font-size:11px;border:1px solid #BFBDBD}h2,h3{color:#153B7C}#c{background:#ECECEC}img{height:8px;background:#54D143;margin:0 3px}#r{height:8px;background:#C80B0F}#clr{background:none;color:#175D8B;font-size:20px;border:0}</style>"
#define DESIGN12_STYLE "<meta charset=UTF-8><style>body{background:#283136;font-family:Arial}th{background:#323B40;color:#6ED5FF;padding:10px 2px;text-align:left}td{padding:4px 3px;border-bottom:1px solid #DCDCDC}table{background:#EDF1F2;font-size:10px;border:2px solid #505A62}h2,h3{color:#FFF}img{height:10px;background:#A7CC00;margin:0 3px}#r{height:10px;background:#CC3D00}#clr{background:none;color:#6ED5FF;font-size:20px;border:0}</style>"
#define DESIGN13_STYLE "<meta charset=UTF-8><style>body{background:#220000;font-family:Tahoma}th{background:#3E0909;color:#FFF;padding:5px 2px;text-align:left;border-bottom:1px solid #DEDEDE}td{padding:2px 2px;}table{background:#FFF;font-size:11px;border:1px solid #791616}h2,h3{color:#FFF}#c{background:#F4F4F4;color:#7B0000}img{height:7px;background:#a00000;margin:0 3px}#r{height:7px;background:#181818}#clr{background:none;color:#CFCFCF;font-size:20px;border:0}</style>"
#define DEFAULT_STYLE "<meta charset=UTF-8><style>body{background:#000}tr{text-align:left}table{font-size:13px;color:#FFB000;padding:2px}h2,h3{color:#FFF;font-family:Verdana}img{height:5px;background:#0000FF;margin:0 3px}#r{height:5px;background:#FF0000}</style>"

new Menu, PlayerLevel[33], PlayerExperience[33], PlayerCredits[33], Credits[33];
new ExperienceFile[128];
new cvar_motd_style;


new GlowLevel[33][4]
#define MAX_HEALTH	250
#define	TASK_GLOW	416
#define MAXGLOW		150

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

#define TASK_DELAY 		2131241
#define TASK_SEARCHING		1738

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

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

#define EXPLOSION_MAX_DAMAGE	200.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[][] = { "Blink", "2", "item_longjump" };
new SPR_TELEPORT, SPR_TELEPORT_GIB	

#define BLINK_COUNTDOWN		2.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[][] = { "Chain Lightning", "3", "dmg_shock" };
new SPR_LIGHTNING

#define CHAINLIGHTNING_DAMAGE		100
#define CHAINLIGHTNING_LINEWIDTH	60
#define LIGHTNING_RANGE			500

#define	TASK_LIGHTNING			960
#define	TASK_LIGHTNINGNEXT		1024

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

//------| Entangle |------//
#if defined ULT_ENTANGLE
new ULTIMATE_ENTANGLE[][] = { "Entangling Roots", "4", "item_healthkit" };
new SPR_TRAIL, SPR_BEAM

#define	ENTANGLE_TIME		10.0

#define	TASK_RESETSPEED		512
#define	TASK_ENTANGLEWAIT	928

#define SOUND_ENTANGLING	"furien30_levelssistem/entanglingrootstarget1.wav"
new IsStunned[33], Float:LastSpeed[33];
#endif

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

#define IMMOLATE_DAMAGE			65
#define IMMOLATE_DOT_DAMAGE		5
#define IMMOLATE_DOT			6

#define TASK_BURNING			1684

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

//------| Big Bad Voodoo |------//
#if defined ULT_BIGBADVOODOO
new ULTIMATE_BIGBADVOODOO[][] = 	{ "Big Bad Voodoo", "6", "suit_full" };

#define BIGBADVOODOO_DURATION  	2

#define	TASK_RESETGOD		608

#define SOUND_VOODOO		"furien30_levelssistem/divineshield.wav"
#endif

//------| Vengeance |------//
#if defined ULT_VENGEANCE
new ULTIMATE_VENGEANCE[][] = { "Vengeance", "7", "cross" };
#define VENGEANCE_HEALTH	75

#define TOTAL_SPAWNS		64
#define SPAWN_DELAY		0.2

#define TASK_RESETSPAWNS	3001
#define TASK_SPAWN		32
#define TASK_SPAWNPLAYER	1056
#define TASK_GIVEITEMS		1088
#define TASK_SPAWNREMOVEGOD	128

#define SOUND_VENGEANCE		"furien30_levelssistem/MiniSpiritPissed1.wav"
new SpawnReserved[TOTAL_SPAWNS], SpawnEnt[2][32], SpawnInc = 0
#endif

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

#define LOCUSTSWARM_DMG_MIN	50
#define LOCUSTSWARM_DMG_MAX	75

#define	TASK_FUNNELS		1354

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

//------| Powers |------//
#define SKILL_MAX_LEVEL	3
#define DMG_HEGRENADE 	(1<<24)

#define HITGROUP_GENERIC		0 // none
#define HITGROUP_HEAD			1 // 1 << 1 = 2
#define HITGROUP_CHEST			2 // 1 << 2 = 4
#define HITGROUP_STOMACH		3 // 8
#define HITGROUP_LEFTARM		4 // 16
#define HITGROUP_RIGHTARM		5 // 32
#define HITGROUP_LEFTLEG		6 // 64
#define HITGROUP_RIGHTLEG		7 // 128

//------| Furien Powers |------//
//------| Unholy Aura |------//
#if defined POWER_UNHOLYAURA
new SKILL_UNHOLYAURA[][] = { "Unholy Aura", "1" };
new Float:Unholy[SKILL_MAX_LEVEL] = {630.0,660.0,700.0}

new UnholyAura_Level[33]
new UnholyAuraFile[128];
#endif

//------| Levitation |------//
#if defined POWER_LEVITATION
new SKILL_LEVITATION[][] = { "Levitation", "4" };
new Float:Levitation[SKILL_MAX_LEVEL] = {0.450,0.425,0.400}

new Levitation_Level[33]
new LevitationFile[128];
#endif

//------| Vampiric Aura |------//
#if defined POWER_VAMPIRICAURA
new SKILL_VAMPIRICAURA[][] = { "Vampiric Aura", "8" };
new const Float:Vampiric[SKILL_MAX_LEVEL] = {0.1,0.2,0.3}

new VampiricAura_Level[33]
new VampiricAuraFile[128];
#endif

//------| Evasion |------//
#if defined POWER_EVASION
new SKILL_EVASION[][] = { "Evasion", "12" };
new const Float:Evasion[SKILL_MAX_LEVEL] = {0.1,0.2,0.3}

new Evasion_Level[33]
new EvasionFile[128];
#endif

//------| Banish |------//
#if defined POWER_BANISH
new SKILL_BANISH[][] = { "Banish", "16" };
new const Float:Banish[SKILL_MAX_LEVEL] = {0.1,0.2,0.3}

#define BANISH_DAMAGE			1
#define BANISH_HOLDTIME			0.7
#define TASK_BANISH			96
#define TASK_BANISHRETURN		345

#define	SOUND_BANISH	"furien30_levelssistem/banishcaster.wav"

new Banish_Level[33], bool:PlayerBanished[33], SPR_BANISH;
new BanishFile[128];
#endif

//------| True Shot |------//
#if defined POWER_TRUESHOT
new SKILL_TRUESHOT[][] = { "True Shot", "20" };
new const Float:TrueShot[SKILL_MAX_LEVEL] = {0.1,0.2,0.3}

new TrueShot_Level[33]
new TrueShotFile[128];
#endif

//------| Phoenix |------//
#if defined POWER_PHOENIX
new SKILL_PHOENIX[][] = { "Phoenix", "24" };
new const Float:Phoenix[SKILL_MAX_LEVEL] = {0.1,0.2,0.3}

new Phoenix_Level[33], bool:IsPhoenix[33]
new PhoenixFile[128];
#endif

//------| Unstable Concoction |------//
#if defined POWER_UNSTABLECONCOCTION
new PASS_UNSTABLECONCOCTION[] = "Unstable Concoction"
new const Float:Concoction = 0.015
new SPR_SHOCKWAVE

#define CONCOCTION_DAMAGE	  15
#define CONCOCTION_RADIUS	  300

#define SOUND_CONCOCTION_CAST	"furien30_levelssistem/PossessionMissileLaunch1.wav"
#define SOUND_CONCOCTION_HIT	"furien30_levelssistem/PossessionMissileHit1.wav"
#endif

//------| Anti Furien Powers |------//
#if defined POWER_DEVOTIONAURA
new SKILL_DEVOTIONAURA[][] = { "Devotion Aura", "1" };
new const Devotion = 30

new DevotionAura_Level[33]
new DevotionAuraFile[128];
#endif

//------| Critical Strike |------//
#if defined POWER_CRITICALSTRIKE
new SKILL_CRITICALSTRIKE[][] = { "Critical Strike", "4" };
new const Float:Critical[SKILL_MAX_LEVEL] = {0.2,0.4,0.6}

#define CRITICAL_STRIKE_CHANCE			0.15

new CriticalStrike_Level[33]
new CriticalStrikeFile[128];
#endif

//------| Critical Grenade |------//
#if defined POWER_CRITICALGRENADE
new SKILL_CRITICALGRENADE[][] = { "Critical Grenade", "8" };
new const Float:Grenade[SKILL_MAX_LEVEL] = {1.3,1.6,2.0}

new CriticalGrenade_Level[33]
new CriticalGrenadeFile[128];
#endif

//------| Bash |------//
#if defined POWER_BASH
new SKILL_BASH[][] = { "Bash", "12" };
new const Float:Bash[SKILL_MAX_LEVEL] = {0.1,0.2,0.3}

#define BASH_GLOW_INTENSITY	20
#define BASH_HOLD_TIME		0.7
#define	TASK_RESETBASH		512

new Bash_Level[33], Bash_Stunned[33], Float:Bash_LastSpeed[33]
new BashFile[128];
#endif

//------| Healing Wave |------//
#if defined POWER_HEALINGWAVE
new SKILL_HEALINGWAVE[][] = { "Healing Wave", "16" };
new const Float:Heal[SKILL_MAX_LEVEL] =	 {3.0,2.0,1.0}

#define HEALING_WAVE_RANGE	750

#define	TASK_WAVE		352

new HealingWave_Level[33]
new HealingWaveFile[128];
#endif

//------| Shadow Strike |------//
#if defined POWER_SHADOWSTRIKE
new SKILL_SHADOWSTRIKE[][] = { "Shadow Strike", "20" };
new const Float:Shadow[SKILL_MAX_LEVEL] = {0.1,0.2,0.3}

#define SHADOWSTRIKE_DAMAGE	10
#define	SOUND_SHADOWSTRIKE	"furien30_levelssistem/shadowstrikebirth.wav"

new ShadowStrike_Level[33], SPR_SHADOWSTRIKE
new ShadowStrikeFile[128];
#endif

//------| Siphon Mana |------//
#if defined POWER_SIPHONMANA
new SKILL_SIPHONMANA[][] = { "Siphon Mana", "24" };
new const Float:Mana[SKILL_MAX_LEVEL] = {0.02,0.04,0.06}

new SiphonMana_Level[33]
new SiphonManaFile[128];
#endif

//------| Orb of Annihilation |------//
#if defined POWER_ORB
new PASS_ORB[] = "Orb of Annihilation"
new const Float:Orb = 0.015
new SPR_WAVE

#define ORB_DAMAGE	20
#define	SOUND_ANNIHILATION	"furien30_levelssistem/PurgeTarget1.wav"
#endif

static const ServerLicensedIp[ ] = "86.124.128.54";
public plugin_init() {
	register_plugin("Furien Levels Sistem", "3.0", "Aragon*")
	
	new ServerIp[20];
	get_user_ip(0, ServerIp, charsmax(ServerIp), 1); 
	
	if(equal(ServerIp, ServerLicensedIp))
		plugin_init2() 
	else 
		pause( "ade" ); 
}

public plugin_init2() {
	register_clcmd("ultimate", "CMD_Ultimate");
	register_clcmd("resetskills", "CMD_ResetSkills");
	register_clcmd("say /resetskills", "CMD_ResetSkills");
	register_clcmd("say_team /resetskills", "CMD_ResetSkills");
	register_clcmd("powers", "PowersMenu");
	register_clcmd("say /powers", "PowersMenu");
	register_clcmd("say_team /powers", "PowersMenu");
	register_clcmd("playersinfo", "PlayersInfo");
	register_clcmd("say /playersinfo", "PlayersInfo");
	register_clcmd("say playersinfo", "PlayersInfo");
	register_clcmd("say_team /playersinfo", "PlayersInfo");
	register_clcmd("say_team playersinfo", "PlayersInfo");
	
	
	register_concmd("amx_give_xp", "GiveExperience", ADMIN_CVAR, "Name/@All -> Amount");
	register_concmd("amx_reset_xp", "ResetExperience", ADMIN_CVAR, "Name/@All -> Amount");
	
	register_logevent("LOGEVENT_RoundStart", 2, "1=Round_Start");
	register_logevent("LOGEVENT_RoundEnd", 2, "1=Round_End");
	register_logevent("LOGEVENT_PlayerAction", 3, "1=triggered");
	
	register_event("SendAudio","EVENT_FurienWin","a","2=%!MRAD_terwin");
	register_event("SendAudio","EVENT_AntiFurienWin","a","2=%!MRAD_ctwin");
	register_event("HLTV", "EVENT_NewRound", "a", "1=0", "2=0")
	register_event("DeathMsg", "EVENT_Death", "a");
	
	register_forward(FM_ClientUserInfoChanged, "FWD_ChangeName");
	register_forward(FM_TraceLine , "FWD_TraceLine"	);
	register_forward(FM_PlayerPreThink, "FWD_PlayerPreThink");
	
	RegisterHam(Ham_Spawn, "player", "HAM_Spawn_Post", 1);
	RegisterHam(Ham_TakeDamage, "player", "HAM_TakeDamage");
	
	cvar_motd_style = register_cvar("furien30_playersinfo_motdstyle", "10");
	
	cvar_ultimate_countdown = register_cvar("furien30_ultimate_delay", "25");			//| Ultimate CountDown |//
	cvar_ultimate_countdown_start = register_cvar("furien30_ultimate_delay_startround", "10");	//| Ultimate CountDown Start |//
	
	
	#if defined ULT_VENGEANCE
	copy(SpawnEnt[0], 31, "info_player_start");
	copy(SpawnEnt[1], 31, "info_player_deathmatch");
	#endif
	
	new DataDir[64]
	get_datadir(DataDir, 63)
	format(ExperienceFile, 127, "%s/Experience.dat", DataDir)
	
	#if defined POWER_UNHOLYAURA
	format(UnholyAuraFile, 127, "%s/UnholyAura.dat", DataDir)
	#endif
	
	#if defined POWER_LEVITATION
	format(LevitationFile, 127, "%s/Levitation.dat", DataDir)
	#endif
	
	#if defined POWER_VAMPIRICAURA
	format(VampiricAuraFile, 127, "%s/VampiricAura.dat", DataDir)
	#endif
	
	#if defined POWER_EVASION
	format(EvasionFile, 127, "%s/Evasion.dat", DataDir)
	#endif
	
	#if defined POWER_BANISH
	format(BanishFile, 127, "%s/Banish.dat", DataDir)
	#endif
	
	#if defined POWER_PHOENIX
	format(PhoenixFile, 127, "%s/Phoenix.dat", DataDir)
	#endif
	
	#if defined POWER_TRUESHOT
	format(TrueShotFile, 127, "%s/TrueShot.dat", DataDir)
	#endif
	
	
	#if defined POWER_DEVOTIONAURA
	format(DevotionAuraFile, 127, "%s/DevotionAura.dat", DataDir)
	#endif
	
	#if defined POWER_CRITICALSTRIKE
	format(CriticalStrikeFile, 127, "%s/CriticalStrike.dat", DataDir)
	#endif
	
	#if defined POWER_CRITICALGRENADE
	format(CriticalGrenadeFile, 127, "%s/CriticalGrenade.dat", DataDir)
	#endif
	
	#if defined POWER_BASH
	format(BashFile, 127, "%s/Bash.dat", DataDir)
	#endif
	
	#if defined POWER_HEALINGWAVE
	format(HealingWaveFile, 127, "%s/HealingWave.dat", DataDir)
	#endif
	
	#if defined POWER_SHADOWSTRIKE
	format(ShadowStrikeFile, 127, "%s/ShadowStrike.dat", DataDir)
	#endif
	
	#if defined POWER_SIPHONMANA
	format(SiphonManaFile, 127, "%s/SiphonMana.dat", DataDir)
	#endif
	
	new Power
	#if defined POWER_UNHOLYAURA
	Power++
	#endif
	#if defined POWER_LEVITATION
	Power++
	#endif
	#if defined POWER_VAMPIRICAURA
	Power++
	#endif
	#if defined POWER_EVASION
	Power++
	#endif
	#if defined POWER_BANISH
	Power++
	#endif
	#if defined POWER_TRUESHOT
	Power++
	#endif
	#if defined POWER_PHOENIX
	Power++
	#endif
	#if defined POWER_DEVOTIONAURA
	Power++
	#endif
	#if defined POWER_CRITICALSTRIKE
	Power++
	#endif
	#if defined POWER_CRITICALGRENADE
	Power++
	#endif
	#if defined POWER_BASH
	Power++
	#endif
	#if defined POWER_HEALINGWAVE
	Power++
	#endif
	#if defined POWER_SHADOWSTRIKE
	Power++
	#endif
	#if defined POWER_SIPHONMANA
	Power++
	#endif
	
	MAX_LEVEL = Power * SKILL_MAX_LEVEL
	
	set_task(320.0,"TASK_Messages", 0,_,_,"b");
}

public plugin_precache() {
	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/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/lgtning.spr");
	precache_sound(SOUND_LIGHTNING)
	#endif
	
	#if defined ULT_ENTANGLE
	SPR_TRAIL = precache_model("sprites/smoke.spr");
	SPR_BEAM = precache_model("sprites/zbeam4.spr");
	precache_sound(SOUND_ENTANGLING)
	#endif
	
	#if defined ULT_IMMOLATE
	SPR_IMMOLATE = precache_model("sprites/furien30_levelssistem/fireball.spr");
	SPR_BURNING = precache_model("sprites/xfire.spr");
	SPR_FIRE = precache_model("sprites/explode1.spr");
	precache_sound(SOUND_IMMOLATE)
	precache_sound(SOUND_IMMOLATE_BURNING)
	#endif
	
	#if defined ULT_BIGBADVOODOO
	precache_sound(SOUND_VOODOO)
	#endif
	
	#if defined ULT_VENGEANCE
	precache_sound(SOUND_VENGEANCE)
	#endif
	
	#if defined ULT_LOCUSTSWARM
	SPR_SNOW = precache_model("sprites/snow.spr");
	precache_sound(SOUND_LOCUSTSWARM);
	#endif
	
	#if defined POWER_BANISH
	precache_sound(SOUND_BANISH)
	SPR_BANISH = precache_model("sprites/nhth1.spr")
	#endif
	
	#if defined POWER_UNSTABLECONCOCTION
	precache_sound(SOUND_CONCOCTION_CAST)
	precache_sound(SOUND_CONCOCTION_HIT)
	SPR_SHOCKWAVE = precache_model("sprites/shockwave.spr")
	#endif
	
	#if defined POWER_SHADOWSTRIKE
	precache_sound(SOUND_SHADOWSTRIKE)
	SPR_SHADOWSTRIKE = precache_model("sprites/animglow01.spr");
	#endif
	
	#if defined POWER_ORB
	SPR_WAVE = precache_model("sprites/gwave1.spr");
	precache_sound(SOUND_ANNIHILATION)
	#endif
}

public plugin_natives() {
	register_native("set_user_xp", "set_user_xp", 1);
	register_native("set_user_ultimate", "set_user_ultimate", 1);
	register_native("get_user_xp", "get_user_xp", 1);
	register_native("get_user_next_level_xp", "get_user_next_level_xp", 1);
	register_native("get_user_level", "get_user_level", 1);
	register_native("get_max_level", "get_max_level", 1);
	register_native("get_user_ultimate", "get_user_ultimate", 1);
	register_native("get_user_ultimate_name", "get_user_ultimate_name", 1);
}

public set_user_xp(id, xp) {
	if(is_user_connected(id)) {
		PlayerExperience[id] = xp;
		
		SaveExperience(id);
	}
}

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

public get_user_xp(id) {
	return is_user_connected(id) ? PlayerExperience[id] : 0
}

public get_user_next_level_xp(id) {
	if(is_user_connected(id) && (PlayerLevel[id] + 1) <= MAX_LEVEL)
		return EXPERIENCE_LEVEL * (PlayerLevel[id] + 1);
	else
		return 0
	return 0
}

public get_user_level(id) {
	return is_user_connected(id) ? PlayerLevel[id] : 0
}

public get_max_level() {
	return MAX_LEVEL
}

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

public get_user_ultimate_name(id) {
	new None[256];
	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[256];
			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[256];			
			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[256];
			formatex(ChainLighthing,sizeof(ChainLighthing)-1,"%s", ULTIMATE_CHAINLIGHTNING[0]);
			
			return ChainLighthing
		}
		#endif
		
		#if defined ULT_ENTANGLE
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_ENTANGLE[1])) {
			new Entangle[256];
			formatex(Entangle,sizeof(Entangle)-1,"%s", ULTIMATE_ENTANGLE[0]);
			
			return Entangle
		}
		#endif
		
		#if defined ULT_IMMOLATE
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_IMMOLATE[1])) {
			new Immolate[256];
			formatex(Immolate,sizeof(Immolate)-1,"%s", ULTIMATE_IMMOLATE[0]);
			
			return Immolate
		}
		#endif
		
		#if defined ULT_BIGBADVOODOO
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_BIGBADVOODOO[1])) {
			new BigBadVoodoo[256];
			formatex(BigBadVoodoo,sizeof(BigBadVoodoo)-1,"%s", ULTIMATE_BIGBADVOODOO[0]);
			
			return BigBadVoodoo
		}
		#endif
		
		#if defined ULT_VENGEANCE
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_VENGEANCE[1])) {
			new Vengeance[256];
			formatex(Vengeance,sizeof(Vengeance)-1,"%s", ULTIMATE_VENGEANCE[0]);
			
			return Vengeance
		}
		#endif
		
		#if defined ULT_LOCUSTSWARM
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_LOCUSTSWARM[1])) {
			new LocustWarm[256];
			formatex(LocustWarm,sizeof(LocustWarm)-1,"%s", ULTIMATE_LOCUSTSWARM[0]);
			
			return LocustWarm
		}
		#endif
		
		return None
	}
	return None
}

public TASK_Messages(id)  {
	ColorChat(id, "!t[Furien]!g Scrie!t /powers!g in chat pentru a accesa puterile.");	
	ColorChat(id, "!t[Furien]!g Scrie!t /playersinfo!g in chat pentru a vedea ce Level au ceilalti jucatori.");
}

public client_putinserver(id) {
	client_cmd(id, "bind j powers");
	NextUltimate[id] = false;
	LoadExperience(id);
	#if defined POWER_UNHOLYAURA
	LoadUnholyAura(id)
	#endif
	#if defined POWER_LEVITATION
	LoadLevitation(id)
	#endif
	#if defined POWER_VAMPIRICAURA
	LoadVampiricAura(id)
	#endif
	#if defined POWER_EVASION
	LoadEvasion(id)
	#endif
	#if defined POWER_BANISH
	LoadBanish(id)
	#endif
	#if defined POWER_TRUESHOT
	LoadTrueShot(id)
	#endif
	#if defined POWER_PHOENIX
	LoadPhoenix(id)
	#endif
	
	#if defined POWER_DEVOTIONAURA
	LoadDevotionAura(id)
	#endif
	#if defined POWER_CRITICALSTRIKE
	LoadCriticalStrike(id)
	#endif
	#if defined POWER_CRITICALGRENADE
	LoadCriticalGrenade(id)
	#endif
	#if defined POWER_BASH
	LoadBash(id)
	#endif
	#if defined POWER_HEALINGWAVE
	LoadHealingWave(id)
	#endif
	#if defined POWER_SHADOWSTRIKE
	LoadShadowStrike(id)
	#endif
	#if defined POWER_SIPHONMANA
	LoadSiphonMana(id)
	#endif
}

public LOGEVENT_RoundStart() {
	EndRound = false
}

public LOGEVENT_RoundEnd() {
	EndRound = true
}

public LOGEVENT_PlayerAction() {
	new Arg[64], Action[64], Name[64];
	new UserId, id;
	
	read_logargv(0, Arg, 64);
	read_logargv(2, Action, 64);
	parse_loguser(Arg, Name, 64, UserId);
	id = find_player("k", UserId);
	
	if(is_user_connected(id) && !EndRound) {		
		if(equal(Action,"Dropped_The_Bomb")) {
			PlayerRole[id] = 0;
			
			new Float:BonusXP
			(get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (BOMB_PICKUP * VIP_XP_MULTIPLIER)) : (BonusXP = BOMB_PICKUP)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(id, get_user_xp(id) - XP)
				ColorChat(id, "!gYou have lost!t %d XP!g for dropping the bomb", -1 * BonusXP);
			}
		}
		else if(equal(Action,"Got_The_Bomb")) { 
			PlayerRole[id] = PLR_BOMB_CARRIER;
			
			new Float:BonusXP
			(get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (BOMB_PICKUP * VIP_XP_MULTIPLIER)) : (BonusXP = BOMB_PICKUP)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(id, get_user_xp(id) + XP)
				ColorChat(id, "!gYou have been awarded!t %d XP for picking up the bomb", XP);
			}
		}
		else if(equal(Action,"Touched_A_Hostage")) {
			PlayerRole[id] = PLR_HOSTAGE_RESCUER;
			
			new Float:BonusXP
			(get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (TOUCH_HOSTAGE * VIP_XP_MULTIPLIER)) : (BonusXP = TOUCH_HOSTAGE)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(id, get_user_xp(id) + XP)
				ColorChat(id, "!gYou have been awarded!t %d XP!g for starting to rescue a hostage", XP);
			}
		}
		else if(equal(Action,"Rescued_A_Hostage")) {
			
			new Float:BonusXP
			(get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (RESCUE_HOSTAGE * VIP_XP_MULTIPLIER)) : (BonusXP = RESCUE_HOSTAGE)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(id, get_user_xp(id) + XP)
				ColorChat(id, "!gYou have been awarded!t %d XP!g for rescuing a hostage", XP);
			}
		}
		else if(equal(Action,"Killed_A_Hostage")) {
			new Float:BonusXP
			(get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (KILL_HOSTAGE * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_HOSTAGE)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(id, get_user_xp(id) - XP)
				ColorChat(id, "!gYou have lost!t %d XP!g for killing a hostage", -1 * BonusXP);
			}
		}
		else if(equal(Action,"Became_VIP")) { 
			PlayerRole[id] = PLR_VIP;
			new Float:BonusXP
			(get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (SPAWN_VIP * VIP_XP_MULTIPLIER)) : (BonusXP = SPAWN_VIP)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(id, get_user_xp(id) + XP)
				ColorChat(id, "!gYou have gained!t %d XP!g for spawning as the VIP", XP);
			}
		}
		else if(equal(Action,"Escaped_As_VIP")) {
			new Float:BonusXP
			(get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (ESCAPE_VIP * VIP_XP_MULTIPLIER)) : (BonusXP = ESCAPE_VIP)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(id, get_user_xp(id) + XP)
				ColorChat(id, "!gYou have gained!t %d XP!g for escaping as the VIP", XP);
			}
		}
	}
}

public EVENT_Death() {
	new Attacker = read_data(1)
	new Victim = read_data(2)
	new Headshot= read_data(4)
	
	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] && !EndRound)				
				Ultimate_Vengeance(Victim);
		}
		#endif
		
		#if defined POWER_BASH
		Bash_Stunned[Victim] = false
		#endif
		
		#if defined POWER_PHOENIX
		if(get_user_team(Victim) == 1)
			PhoenixSpawn(Victim)
		#endif
		
		#if defined POWER_BANISH
		PlayerBanished[Victim] = false;
		task_exists(TASK_BANISH + Victim) ? remove_task(TASK_BANISH + Victim) : 0
		task_exists(TASK_BANISHRETURN + Victim) ? remove_task(TASK_BANISHRETURN + Victim) : 0
		#endif
	}
	if(is_user_connected(Attacker) && Attacker != Victim) {
		new Float:BonusXP
		(get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL * VIP_XP_MULTIPLIER)) : (BonusXP = KILL)
		
		if(BonusXP) {
			new XP = floatround(BonusXP)
			set_user_xp(Attacker, get_user_xp(Attacker) + XP)
			ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the enemy", XP);
		}
		
		if(Headshot) {
			(get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_HEADSHOT * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_HEADSHOT)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(Attacker, get_user_xp(Attacker) + XP)
				ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for getting a headshot", XP);
			}
		}
		
		if(PlayerRole[Victim] == PLR_HOSTAGE_RESCUER) {
			(get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_HOSTAGE_SAVER * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_HOSTAGE_SAVER)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(Attacker, get_user_xp(Attacker) + XP)
				ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the hostage rescuer", XP);
			}
		}
		else if(PlayerRole[Victim] == PLR_BOMB_DEFUSER) {
			(get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_DEFUSER * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_DEFUSER)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(Attacker, get_user_xp(Attacker) + XP)
				ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the bomb defuser", XP);
			}
		}
		else if(PlayerRole[Victim] == PLR_BOMB_PLANTER) {
			(get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_PLANTER * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_PLANTER)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(Attacker, get_user_xp(Attacker) + XP)
				ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the bomb planter", XP);
			}
		}
		else if(PlayerRole[Victim] == PLR_BOMB_CARRIER) {
			(get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_BOMB_CARRIER * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_BOMB_CARRIER)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(Attacker, get_user_xp(Attacker) + XP)
				ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the bomb carrier", XP);
			}
		}
		else if(PlayerRole[Victim] == PLR_VIP) {
			(get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_VIP * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_VIP)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(Attacker, get_user_xp(Attacker) + XP)
				ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the VIP", XP);
			}
		}
	}
	PlayerRole[Victim] = 0;
}

public EVENT_FurienWin() {
	XP_WinRound(1)
	EndRound = true
}

public EVENT_AntiFurienWin() {	
	XP_WinRound(2)
	EndRound = true
}

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

public FWD_ChangeName(id, buffer) {
	if(is_user_connected(id)) {
		static Name[32], Val[32];
		get_user_name(id, Name, sizeof Name - 1);
		engfunc(EngFunc_InfoKeyValue, buffer, "name", Val, sizeof Val - 1);
		
		if(equal(Val, Name))
			return FMRES_IGNORED;
		
		set_task(0.2, "client_putinserver", id);
	}
	return FMRES_SUPERCEDE;
}

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_ENTANGLE
				if(get_user_ultimate(Attacker) == str_to_num(ULTIMATE_ENTANGLE[1]))
					Ultimate_Entangle(Attacker, Victim);
				#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
		}
		if(get_user_xp(id) >= EXPERIENCE_LEVEL * (get_user_level(id) + 1)) {
			if((get_user_level(id) + 1) <= MAX_LEVEL) {
				PlayerLevel[id] += 1;
			}
		}
		else if(get_user_xp(id) < EXPERIENCE_LEVEL * (get_user_level(id)))
			PlayerLevel[id] -= 1;
		
		if(PlayerCredits[id] < PlayerLevel[id]) {
			Credits[id] = PlayerLevel[id] - PlayerCredits[id]
		}
		
		else if(PlayerCredits[id] > PlayerLevel[id]) {
			Credits[id] = PlayerLevel[id] - PlayerCredits[id]
		}
		
		#if defined ULT_ENTANGLE
		if(IsStunned[id])
			set_user_maxspeed(id, 1.0);
		#endif
		
		#if defined POWER_UNHOLYAURA
		if(UnholyAura_Level[id] && get_user_team(id) == 1) {
			if(fm_get_user_maxspeed(id) < Unholy[UnholyAura_Level[id] - 1] && fm_get_user_maxspeed(id) > 1.0)
				fm_set_user_maxspeed(id, Unholy[UnholyAura_Level[id] - 1]);
		}
		#endif
		
		#if defined POWER_LEVITATION
		if(Levitation_Level[id] && get_user_team(id) == 1) {
			if(fm_get_user_gravity(id) > Levitation[Levitation_Level[id] - 1] && fm_get_user_gravity(id) > 0.1)
				fm_set_user_gravity(id, Levitation[Levitation_Level[id] - 1]);
		}
		#endif
		
		#if defined POWER_BASH
		if(Bash_Stunned[id] && get_user_team(id) == 1) {
			fm_set_user_maxspeed(id, 1.0);
		}
		#endif
	}
}

public HAM_Spawn_Post(id) {
	if(is_user_connected(id)) {
		PlayerRole[id] = 0;
		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(UltimateDelay[id] && !task_exists(id+TASK_DELAY))
				Ultimate_Delay(id)
		}
		
		#if defined POWER_BANISH
		PlayerBanished[id] = false;
		task_exists(TASK_BANISH + id) ? remove_task(TASK_BANISH + id) : 0
		task_exists(TASK_BANISHRETURN + id) ? remove_task(TASK_BANISHRETURN + id) : 0
		#endif
		
		#if defined POWER_PHOENIX
		if(get_user_team(id) == 1)
			PhoenixCheck(id)
		#endif
		
		#if defined POWER_DEVOTIONAURA
		if(DevotionAura_Level[id] && get_user_team(id) == 2) {
			fm_set_user_health(id, get_user_health(id) + DevotionAura_Level[id] * Devotion);
		}
		#endif
		
		#if defined POWER_BASH
		Bash_Stunned[id] = false
		#endif
		
		#if defined POWER_HEALINGWAVE
		if(HealingWave_Level[id] && get_user_team(id) == 2) {
			if(!task_exists(id + TASK_WAVE)) {
				HealingWave(id);
			}
		}
		#endif
	}
}

public HAM_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && is_user_connected(victim) && get_user_team(attacker) != get_user_team(victim)) {
		#if defined POWER_VAMPIRICAURA
		if(VampiricAura_Level[attacker] && get_user_team(attacker) == 1) {
			new BonusHealth = floatround(damage * Vampiric[VampiricAura_Level[attacker] - 1]);
			if(get_user_health(attacker) + BonusHealth > MAX_HEALTH)
				fm_set_user_health(attacker, MAX_HEALTH)
			else
				fm_set_user_health(attacker, get_user_health(attacker) + BonusHealth);
			
			Glow(attacker, 0,(2 * BonusHealth), 0, 0);
			
			Create_ScreenFade(attacker,(1<<10),(1<<10),(1<<12), 0, 255, 0, BonusHealth);
		}
		#endif
		#if defined POWER_EVASION
		if(Evasion_Level[victim] && get_user_team(victim) == 1 && !(damagetype & DMG_HEGRENADE)) {
			if(random_float(0.0, 1.0) <= Evasion[Evasion_Level[victim] - 1]) {
				new GlowIntensity = random_num(20, 50);
				new Message[256];
				formatex(Message,sizeof(Message)-1,"You have evaded a shot!");
				
				HudMessage(victim, Message, 0, 0, 255, -1.0, 0.40)
				
				SetHamParamFloat(4, 0.0);
				
				Glow(victim, 0, 0, GlowIntensity, 0);
				
				Create_ScreenFade(victim,(1<<10),(1<<10),(1<<12), 0, 0, 255, GlowLevel[victim][1]);	
			}
		}
		#endif
		
		#if defined POWER_BANISH
		if(Banish_Level[victim] && get_user_team(victim) == 1) {
			if(random_float(0.0, 1.0) <= Banish[Banish_Level[victim] - 1]) {
				if(!PlayerBanished[attacker] && !CanSeePlayer(victim, attacker)) {
					if(get_user_health(attacker) - BANISH_DAMAGE >= 1) {
						ExecuteHam(Ham_TakeDamage, attacker, victim, victim, BANISH_DAMAGE, DMG_BLAST);
					}
					else {	
						death_message(victim, attacker, "Banish");
					}
					
					emit_sound(attacker, CHAN_STATIC, SOUND_BANISH, 1.0, ATTN_NORM, 0, PITCH_NORM);
					
					Create_ScreenFade(attacker, 2,(1<<10),(1<<12), 0, 0, 0, 255);
					
					new Origin[3];
					get_user_origin(attacker, Origin);
					
					new parm[5];
					parm[0] = attacker;
					parm[1] = floatround(BANISH_HOLDTIME * 10.0);
					parm[2] = Origin[0];
					parm[3] = Origin[1];
					parm[4] = Origin[2];
					
					message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
					write_byte(TE_SPRITE) 
					write_coord(Origin[0])		// position)
					write_coord(Origin[1]) 
					write_coord(Origin[2]) 
					write_short(SPR_BANISH)			// sprite index
					write_byte(10)				// scale in 0.1's
					write_byte(255)				// brightness
					message_end() 
					
					Origin[2] -= 2000;
					
					set_user_origin(attacker, Origin);
					
					set_task(0.1, "BanishReturn", TASK_BANISH + attacker, parm, 5);
				}
			}
		}
		#endif
		
		#if defined POWER_TRUESHOT
		if(TrueShot_Level[victim] && get_user_team(victim) == 1 && !fm_get_user_godmode(attacker)) {
			new Float:TempDamage = damage * TrueShot[TrueShot_Level[victim] - 1];
			
			if(get_user_health(attacker) - TempDamage >= 1) {
				ExecuteHam(Ham_TakeDamage, attacker, victim, victim, TempDamage, DMG_BLAST);
			}
			else {	
				death_message(victim, attacker, "True Shot");
			}
			
			Glow(victim, 2 * floatround(TempDamage), 0, 0, 0);
			
			Create_ScreenFade(victim,(1<<10),(1<<10),(1<<12), 255, 0, 0, floatround(TempDamage));
		}
		#endif
		
		#if defined POWER_UNSTABLECONCOCTION
		if(get_user_level(victim) && get_user_team(victim) == 1 && get_user_flags(victim) & VIP_LEVEL) {
			if(random_float(0.0, 1.0) <= Concoction * get_user_level(victim)){
				new Origin[3], InitOrigin[3], AxisOrigin[3];
				
				get_user_origin(victim, Origin);
				
				emit_sound(attacker, CHAN_STATIC, SOUND_CONCOCTION_CAST, 1.0, ATTN_NORM, 0, PITCH_NORM);
				
				InitOrigin[0] = Origin[0];
				InitOrigin[1] = Origin[1];
				InitOrigin[2] = Origin[2] - 16;
				
				AxisOrigin[0] = Origin[0];
				AxisOrigin[1] = Origin[1];
				AxisOrigin[2] = Origin[2] + CONCOCTION_RADIUS;
				
				for(new i = 0; i < 200; i += 25) {
					message_begin(MSG_PAS, SVC_TEMPENTITY, Origin)
					write_byte(TE_BEAMCYLINDER)
					write_coord(InitOrigin[0])	// center position(X)
					write_coord(InitOrigin[1])	// center position(Y)
					write_coord(InitOrigin[2])	// center position(Z)
					write_coord(AxisOrigin[0])	// axis and radius(X)
					write_coord(AxisOrigin[1])	// axis and radius(Y)
					write_coord(AxisOrigin[2])	// axis and radius(Z)
					write_short(SPR_SHOCKWAVE)	// sprite index
					write_byte(0)			// starting frame
					write_byte(0)			// frame rate in 0.1's
					write_byte(9)			// life in 0.1's
					write_byte(20)			// line width in 0.1's
					write_byte(0)			// noise amplitude in 0.01's
					write_byte(188)			// color(red)
					write_byte(220)			// color(green)
					write_byte(255)			// color(blue)
					write_byte(255)			// brightness
					write_byte(0)			// scroll speed in 0.1's
					message_end()
					
					InitOrigin[2] += 25;
				}
				
				new Players[32], Num, TargetOrigin[3];
				get_players(Players, Num, "a");
				
				for(new i = 0; i < Num; i++) {
					if(get_user_team(Players) != get_user_team(victim)) {
						get_user_origin(Players, TargetOrigin);
						if(get_distance(Origin, TargetOrigin) <= CONCOCTION_RADIUS) {
							if(get_user_health(attacker) - CONCOCTION_DAMAGE >= 1) {
								ExecuteHam(Ham_TakeDamage, Players, victim, victim, CONCOCTION_DAMAGE, DMG_BLAST);
							}
							else {	
								death_message(victim, Players, "Unstable Concoction");
							}
							emit_sound(victim, CHAN_STATIC, SOUND_CONCOCTION_HIT, 1.0, ATTN_NORM, 0, PITCH_NORM);
						}
					}
				}
			}
		}
		#endif
		
		
		#if defined POWER_CRITICALSTRIKE
		if(CriticalStrike_Level[attacker] && get_user_team(attacker) == 2 && !(damagetype & DMG_HEGRENADE)) {
			if(random_float(0.0, 1.0) <= CRITICAL_STRIKE_CHANCE) {
				new Float:BonusDamage = damage * Critical[CriticalStrike_Level[attacker] - 1];
				
				SetHamParamFloat(4, damage + BonusDamage);
				
				Glow(victim, floatround(BonusDamage), 0, 0, 0);
				
				Create_ScreenFade(victim,(1<<10),(1<<10),(1<<12), 255, 0, 0, GlowLevel[victim][0]);
			}
		}
		#endif
		
		#if defined POWER_CRITICALGRENADE
		if(CriticalGrenade_Level[attacker] && get_user_team(attacker) == 2 && damagetype & DMG_HEGRENADE) {		
			new Float:BonusDamage = damage * Grenade[CriticalGrenade_Level[attacker] - 1];
			
			SetHamParamFloat(4, damage + BonusDamage);
			
			Glow(victim, floatround(BonusDamage), 0, 0, 0);
			
			Create_ScreenFade(victim,(1<<10),(1<<10),(1<<12), 255, 0, 0, GlowLevel[victim][0]);
		}
		#endif
		
		#if defined POWER_BASH
		if(Bash_Level[attacker] && get_user_team(attacker) == 2) {
			if(random_float(0.0, 1.0) <= Bash[Bash_Level[attacker] - 1] && !Bash_Stunned[victim]) {
				Bash_Stunned[victim] = true
				pev(victim, pev_maxspeed, Bash_LastSpeed);
				
				set_task(BASH_HOLD_TIME, "Bash_Reset", TASK_RESETBASH + victim);
				
				Glow(victim, 0, 0, 0, BASH_GLOW_INTENSITY);
				
				Create_ScreenFade(victim,(1<<10),(1<<10),(1<<12), 255, 255, 255, GlowLevel[victim][3])
			}
		}
		#endif
		
		#if defined POWER_SHADOWSTRIKE
		if(ShadowStrike_Level[attacker] && get_user_team(attacker) == 2) {
			if(random_float(0.0, 1.0) <= Shadow[ShadowStrike_Level[attacker] - 1]) {
				
				new VictimOrigin[3], AttackerOrigin[3]
				get_user_origin(victim, VictimOrigin);
				get_user_origin(attacker, AttackerOrigin);
				
				message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
				write_byte(TE_SPRITETRAIL)
				write_coord(AttackerOrigin[0])		// start position(X)
				write_coord(AttackerOrigin[1])		// start position(Y)
				write_coord(AttackerOrigin[2])		// start position(Z)
				write_coord(VictimOrigin[0])		// end position(X)
				write_coord(VictimOrigin[1])		// end position(Y)
				write_coord(VictimOrigin[2])		// end position(Z)
				write_short(SPR_SHADOWSTRIKE)		// sprite index
				write_byte(50)				// count
				write_byte(15)				// life in 0.1's
				write_byte(1)				// scale in 0.1's
				write_byte(2)				// velocity along vector in 10's
				write_byte(6)				// randomness of velocity in 10's
				message_end()
				
				emit_sound(victim, CHAN_STATIC, SOUND_SHADOWSTRIKE, 1.0, ATTN_NORM, 0, PITCH_NORM);
				
				if(get_user_health(attacker) - SHADOWSTRIKE_DAMAGE >= 1) {
					ExecuteHam(Ham_TakeDamage, attacker, victim, victim, SHADOWSTRIKE_DAMAGE, DMG_BLAST);
				}
				else {	
					death_message(attacker, victim, "Shadow Strike");
				}
			}
		}
		#endif
		
		#if defined POWER_SIPHONMANA
		if(SiphonMana_Level[attacker] && get_user_team(attacker) == 2) {		
			new Money = floatround(Mana[SiphonMana_Level[attacker] - 1] * cs_get_user_money(victim));
			
			cs_set_user_money(victim, cs_get_user_money(victim) - Money);
			cs_set_user_money(attacker, cs_get_user_money(attacker) + Money);
			
			Glow(victim, 0, floatround(damage), 0, 0);
			
			Create_ScreenFade(attacker,(1<<10),(1<<10),(1<<12), 144, 58, 255, GlowLevel[attacker][1]);
		}
		#endif
		
		#if defined POWER_ORB
		if(get_user_level(attacker) && get_user_team(attacker) == 2 && get_user_flags(attacker) & VIP_LEVEL) {
			if(random_float(0.0, 1.0) <= Orb * get_user_level(attacker)) {
				new VictimOrigin[3];
				get_user_origin(victim, 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(SPR_WAVE)			// sprite index
				write_byte(10)				// scale in 0.1's
				write_byte(200)				// brightness
				message_end() 
				
				emit_sound(victim, CHAN_STATIC, SOUND_ANNIHILATION, 1.0, ATTN_NORM, 0, PITCH_NORM);
				
				if(get_user_health(victim) - ORB_DAMAGE >= 1) {
					ExecuteHam(Ham_TakeDamage, victim, attacker, attacker, ORB_DAMAGE, DMG_BLAST);
				}
				else {	
					death_message(attacker, victim, "Orb of Annihilation");
				}
			}		
		}
		#endif
		
	}
}

public bomb_defusing(defuser) {
	if(is_user_connected(defuser) && !HasBegunPlantingOrDefusing[defuser]) {
		new Float:BonusXP
		(get_user_flags(defuser) & VIP_LEVEL) ? (BonusXP = (DEFUSING_BOMB * VIP_XP_MULTIPLIER)) : (BonusXP = DEFUSING_BOMB)
		
		if(BonusXP) {
			new XP = floatround(BonusXP)
			set_user_xp(defuser, get_user_xp(defuser) + XP)
			ColorChat(defuser, "!gYou have been awarded!t %d XP!g for starting to defuse the bomb", XP);
		}
		PlayerRole[defuser] = PLR_BOMB_DEFUSER;
		HasBegunPlantingOrDefusing[defuser] = true;
	}
}

public bomb_defused(defuser) {
	if(is_user_connected(defuser)) {
		new Float:BonusXP
		(get_user_flags(defuser) & VIP_LEVEL) ? (BonusXP = (DEFUSED_BOMB * VIP_XP_MULTIPLIER)) : (BonusXP = DEFUSED_BOMB)
		
		if(BonusXP) {
			new XP = floatround(BonusXP)
			set_user_xp(defuser, get_user_xp(defuser) + XP)
			ColorChat(defuser, "!gYou have been awarded!t %d XP!g for defusing the bomb", XP);
		}
		PlayerRole[defuser] = 0;
	}
}

public bomb_planting(planter) {
	if(is_user_connected(planter) && !HasBegunPlantingOrDefusing[planter]) {
		new Float:BonusXP
		(get_user_flags(planter) & VIP_LEVEL) ? (BonusXP = (PLANTING_BOMB * VIP_XP_MULTIPLIER)) : (BonusXP = PLANTING_BOMB)
		
		if(BonusXP) {
			new XP = floatround(BonusXP)
			set_user_xp(planter, get_user_xp(planter) + XP)
			ColorChat(planter, "!gYou have been awarded!t %d XP!g for starting to plant the bomb", XP);
		}
		PlayerRole[planter] = PLR_BOMB_PLANTER;
		HasBegunPlantingOrDefusing[planter] = true;
	}
}

public bomb_planted(planter) {
	if(is_user_connected(planter)) {
		new Float:BonusXP
		(get_user_flags(planter) & VIP_LEVEL) ? (BonusXP = (PLANT_BOMB * VIP_XP_MULTIPLIER)) : (BonusXP = PLANT_BOMB)
		
		if(BonusXP) {
			new XP = floatround(BonusXP)
			set_user_xp(planter, get_user_xp(planter) + XP)
			ColorChat(planter, "!gYou have been awarded!t %d XP!g for planting the bomb", XP);
		}
		PlayerRole[planter] = 0;		
	}
}

public PlayersInfo(id) {
	if(is_user_connected(id)) {
		new MotdMessage[2048];
		
		new Pos = 0, Name[64], PlayersName[64];
		get_user_name(id, Name, 63);
		
		switch(get_pcvar_num(cvar_motd_style)) {
			case 1: Pos = format(MotdMessage, 2047, DESIGN1_STYLE)
				
			case 2: Pos = format(MotdMessage, 2047, DESIGN2_STYLE)
				
			case 3: Pos = format(MotdMessage, 2047, DESIGN3_STYLE)
				
			case 4: Pos = format(MotdMessage, 2047, DESIGN4_STYLE)
				
			case 5: Pos = format(MotdMessage, 2047, DESIGN5_STYLE)
				
			case 6: Pos = format(MotdMessage, 2047, DESIGN6_STYLE)
				
			case 7: Pos = format(MotdMessage, 2047, DESIGN7_STYLE)
				
			case 8: Pos = format(MotdMessage, 2047, DESIGN8_STYLE)
				
			case 9: Pos = format(MotdMessage, 2047, DESIGN9_STYLE)
				
			case 10: Pos = format(MotdMessage, 2047, DESIGN10_STYLE)
				
			case 11: Pos = format(MotdMessage, 2047, DESIGN11_STYLE)
				
			case 12: Pos = format(MotdMessage, 2047, DESIGN12_STYLE)
				
			case 13: Pos = format(MotdMessage, 2047, DESIGN13_STYLE)
				
			default: Pos = format(MotdMessage, 2047, DEFAULT_STYLE)
		}
		
		Pos += format(MotdMessage[Pos], 2047 - Pos, "<body><center><table border=0 width=75%%><th>Nume<th>Level<th>Experience");
		
		for(new i = 0; i < get_maxplayers(); i++) {	
			if(is_user_connected(i)) {
				get_user_name(i, PlayersName, 63);
				
				if(equal(Name, PlayersName)) 
					Pos += format(MotdMessage[Pos], 2047 - Pos, "<tr id=c><td>%s<td>%d<td>%d", PlayersName, get_user_level(i), get_user_xp(i));
				else 
					Pos += format(MotdMessage[Pos], 2047 - Pos, "<tr><td>%s<td>%d<td>%d", PlayersName, get_user_level(i), get_user_xp(i))
				
			}		
		}
		show_motd(id, MotdMessage, "Players Info");
	}	
}	

public CMD_ResetSkills(id) {
	if(PlayerLevel[id]) {
		ColorChat(id, "!t[Furien]!g Ti-ai resetat!t Skill-urile!g, scrie!t /powers!g pentru a le seta.");	
		Credits[id] = PlayerLevel[id]	
		PlayerCredits[id] = 0
		
		#if defined POWER_UNHOLYAURA
		UnholyAura_Level[id] = 0
		#endif
		#if defined POWER_LEVITATION
		Levitation_Level[id] = 0
		#endif
		#if defined POWER_VAMPIRICAURA
		VampiricAura_Level[id] = 0
		#endif
		#if defined POWER_EVASION
		Evasion_Level[id] = 0
		#endif
		#if defined POWER_BANISH
		Banish_Level[id] = 0
		#endif
		#if defined POWER_TRUESHOT
		TrueShot_Level[id] = 0
		#endif
		#if defined POWER_PHOENIX
		Phoenix_Level[id] = 0
		#endif
		
		#if defined POWER_DEVOTIONAURA
		DevotionAura_Level[id] = 0
		#endif
		#if defined POWER_CRITICALSTRIKE
		CriticalStrike_Level[id] = 0
		#endif
		#if defined POWER_CRITICALGRENADE
		CriticalGrenade_Level[id] = 0
		#endif
		#if defined POWER_BASH
		Bash_Level[id] = 0
		#endif
		#if defined POWER_HEALINGWAVE
		HealingWave_Level[id] = 0
		#endif
		#if defined POWER_SHADOWSTRIKE
		ShadowStrike_Level[id] = 0
		#endif
		#if defined POWER_SIPHONMANA
		SiphonMana_Level[id] = 0
		#endif
		PowersMenu(id)
	}
}

public PowersMenu(id) { 
	if(is_user_connected(id)) {
		new Title[256];
		formatex(Title,sizeof(Title)-1,"\rPowers Menu^n\rLevel:\y %i \rXP:\y %i\r",get_user_level(id), get_user_xp(id));
		Menu = menu_create(Title, "PowersMenuCmd");
		
		new FurienPowers[256];
		formatex(FurienPowers,sizeof(FurienPowers)-1,"\yFurien Powers");
		menu_additem(Menu, FurienPowers, "1", 0);
		
		new AntiFurienPowers[256];
		formatex(AntiFurienPowers,sizeof(AntiFurienPowers)-1,"\yAnti Furien Powers^n");
		menu_additem(Menu, AntiFurienPowers, "2", 0);
		
		new Ultimate[256];
		formatex(Ultimate,sizeof(Ultimate)-1,"\rChose Ultimate");
		menu_additem(Menu, Ultimate, "3", 0);
		
		menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, Menu, 0);
	}
}

public PowersMenuCmd(id, menu, item) {
	
	if(item == MENU_EXIT) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new Data[6], Name[64];
	new Access, CallBack;
	menu_item_getinfo(menu, item, Access, Data,5, Name, 63, CallBack);
	new Key = str_to_num(Data);
	switch(Key) {
		case 1: FurienPowersMenu(id);
			
		case 2: AntiFurienPowersMenu(id);
			
		case 3: UltimateMenu(id);
			
		default: return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public UltimateMenu(id) {
	if(is_user_connected(id)) {
		new Title[256];
		formatex(Title,sizeof(Title)-1,"\rUltimate Menu^n\rLevel:\y %i \rXP:\y %i\r",get_user_level(id), get_user_xp(id));
		Menu = menu_create(Title, "UltimateMenuCmd");
		
		#if defined ULT_SUICIDE
		new Suicide[256];
		if(!(get_user_flags(id) & VIP_LEVEL))
			formatex(Suicide,sizeof(Suicide)-1,"\d%s \w- \rLocked", ULTIMATE_SUICIDE[0]);
		else if(get_user_ultimate(id) == str_to_num(ULTIMATE_SUICIDE[1]))
			formatex(Suicide,sizeof(Suicide)-1,"\y%s", ULTIMATE_SUICIDE[0]);
		else if(NextUltimate[id] == str_to_num(ULTIMATE_SUICIDE[1]))
			formatex(Suicide,sizeof(Suicide)-1,"\r%s", ULTIMATE_SUICIDE[0]);
		else
			formatex(Suicide,sizeof(Suicide)-1,"\w%s", ULTIMATE_SUICIDE[0]);
		menu_additem(Menu, Suicide, "1", 0);
		#endif
		
		#if defined ULT_BLINK
		new Blink[256];
		if(!(get_user_flags(id) & VIP_LEVEL))
			formatex(Blink,sizeof(Blink)-1,"\d%s \w- \rLocked", ULTIMATE_BLINK[0]);
		else if(get_user_ultimate(id) == str_to_num(ULTIMATE_BLINK[1]))
			formatex(Blink,sizeof(Blink)-1,"\y%s", ULTIMATE_BLINK[0]);
		else if(NextUltimate[id] == str_to_num(ULTIMATE_BLINK[1]))
			formatex(Blink,sizeof(Blink)-1,"\r%s", ULTIMATE_BLINK[0]);
		else
			formatex(Blink,sizeof(Blink)-1,"\w%s", ULTIMATE_BLINK[0]);
		menu_additem(Menu, Blink, "2", 0);
		#endif
		
		#if defined ULT_CHAINLIGHTNING
		new ChainLighthing[256];
		if(!(get_user_flags(id) & VIP_LEVEL))
			formatex(ChainLighthing,sizeof(ChainLighthing)-1,"\d%s \w- \rLocked", ULTIMATE_CHAINLIGHTNING[0]);
		else if(get_user_ultimate(id) == str_to_num(ULTIMATE_CHAINLIGHTNING[1]))
			formatex(ChainLighthing,sizeof(ChainLighthing)-1,"\y%s", ULTIMATE_CHAINLIGHTNING[0]);
		else if(NextUltimate[id] == str_to_num(ULTIMATE_CHAINLIGHTNING[1]))
			formatex(ChainLighthing,sizeof(ChainLighthing)-1,"\r%s", ULTIMATE_CHAINLIGHTNING[0]);
		else
			formatex(ChainLighthing,sizeof(ChainLighthing)-1,"\w%s", ULTIMATE_CHAINLIGHTNING[0]);
		menu_additem(Menu, ChainLighthing, "3", 0);
		#endif
		
		#if defined ULT_ENTANGLE
		new Entangle[256];
		if(!(get_user_flags(id) & VIP_LEVEL))
			formatex(Entangle,sizeof(Entangle)-1,"\d%s \w- \rLocked", ULTIMATE_ENTANGLE[0]);
		else if(get_user_ultimate(id) == str_to_num(ULTIMATE_ENTANGLE[1]))
			formatex(Entangle,sizeof(Entangle)-1,"\y%s", ULTIMATE_ENTANGLE[0]);
		else if(NextUltimate[id] == str_to_num(ULTIMATE_ENTANGLE[1]))
			formatex(Entangle,sizeof(Entangle)-1,"\r%s", ULTIMATE_ENTANGLE[0]);
		else
			formatex(Entangle,sizeof(Entangle)-1,"\w%s", ULTIMATE_ENTANGLE[0]);
		menu_additem(Menu, Entangle, "4", 0);
		#endif
		
		#if defined ULT_IMMOLATE
		new Immolate[256];
		if(!(get_user_flags(id) & VIP_LEVEL))
			formatex(Immolate,sizeof(Immolate)-1,"\d%s \w- \rLocked", ULTIMATE_IMMOLATE[0]);
		else if(get_user_ultimate(id) == str_to_num(ULTIMATE_IMMOLATE[1]))
			formatex(Immolate,sizeof(Immolate)-1,"\y%s", ULTIMATE_IMMOLATE[0]);
		else if(NextUltimate[id] == str_to_num(ULTIMATE_IMMOLATE[1]))
			formatex(Immolate,sizeof(Immolate)-1,"\r%s", ULTIMATE_IMMOLATE[0]);
		else
			formatex(Immolate,sizeof(Immolate)-1,"\w%s", ULTIMATE_IMMOLATE[0]);
		menu_additem(Menu, Immolate, "5", 0);
		#endif
		
		#if defined ULT_BIGBADVOODOO
		new BigBadVoodoo[256];
		if(!(get_user_flags(id) & VIP_LEVEL))
			formatex(BigBadVoodoo,sizeof(BigBadVoodoo)-1,"\d%s \w- \rLocked", ULTIMATE_BIGBADVOODOO[0]);
		else if(get_user_ultimate(id) == str_to_num(ULTIMATE_BIGBADVOODOO[1]))
			formatex(BigBadVoodoo,sizeof(BigBadVoodoo)-1,"\y%s", ULTIMATE_BIGBADVOODOO[0]);
		else if(NextUltimate[id] == str_to_num(ULTIMATE_BIGBADVOODOO[1]))
			formatex(BigBadVoodoo,sizeof(BigBadVoodoo)-1,"\r%s", ULTIMATE_BIGBADVOODOO[0]);
		else
			formatex(BigBadVoodoo,sizeof(BigBadVoodoo)-1,"\w%s", ULTIMATE_BIGBADVOODOO[0]);
		menu_additem(Menu, BigBadVoodoo, "6", 0);
		#endif
		
		#if defined ULT_VENGEANCE
		new Vengeance[256];
		if(!(get_user_flags(id) & VIP_LEVEL))
			formatex(Vengeance,sizeof(Vengeance)-1,"\d%s \w- \rLocked", ULTIMATE_VENGEANCE[0]);
		else if(get_user_ultimate(id) == str_to_num(ULTIMATE_VENGEANCE[1]))
			formatex(Vengeance,sizeof(Vengeance)-1,"\y%s", ULTIMATE_VENGEANCE[0]);
		else if(NextUltimate[id] == str_to_num(ULTIMATE_VENGEANCE[1]))
			formatex(Vengeance,sizeof(Vengeance)-1,"\r%s", ULTIMATE_VENGEANCE[0]);
		else
			formatex(Vengeance,sizeof(Vengeance)-1,"\w%s", ULTIMATE_VENGEANCE[0]);
		menu_additem(Menu, Vengeance, "7", 0);
		#endif
		
		#if defined ULT_LOCUSTSWARM
		new LocustWarm[256];
		if(!(get_user_flags(id) & VIP_LEVEL))
			formatex(LocustWarm,sizeof(LocustWarm)-1,"\d%s \w- \rLocked", ULTIMATE_LOCUSTSWARM[0]);
		else if(get_user_ultimate(id) == str_to_num(ULTIMATE_LOCUSTSWARM[1]))
			formatex(LocustWarm,sizeof(LocustWarm)-1,"\y%s", ULTIMATE_LOCUSTSWARM[0]);
		else if(NextUltimate[id] == str_to_num(ULTIMATE_LOCUSTSWARM[1]))
			formatex(LocustWarm,sizeof(LocustWarm)-1,"\r%s", ULTIMATE_LOCUSTSWARM[0]);
		else
			formatex(LocustWarm,sizeof(LocustWarm)-1,"\w%s", ULTIMATE_LOCUSTSWARM[0]);
		menu_additem(Menu, LocustWarm, "8", 0);
		#endif
		
		menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, Menu, 0);
	}
}

public UltimateMenuCmd(id, menu, item) {
	
	if(item == MENU_EXIT) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(!(get_user_flags(id) & VIP_LEVEL)) {
		ColorChat(id,"!t[Furien]!g Aceste puteri le pot folosi doar!t VIP's");
		return PLUGIN_HANDLED;
	}
	new Data[6], Name[64];
	new Access, CallBack;
	menu_item_getinfo(menu, item, Access, Data,5, Name, 63, CallBack);
	new Key = str_to_num(Data);
	switch(Key) {
		#if defined ULT_SUICIDE
		case 1: {
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_SUICIDE[1]))
				ColorChat(id,"!t[Furien]!g Ai deja!t %s.", ULTIMATE_SUICIDE[0]);
			else {
				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 {
					ColorChat(id,"!t[Furien]!g Puterea ti se va activa la urmatorul spawn.");
				}
				NextUltimate[id] = str_to_num(ULTIMATE_SUICIDE[1])
			}
		}
		#endif
		
		#if defined ULT_BLINK
		case 2: {
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_BLINK[1]))
				ColorChat(id,"!t[Furien]!g Ai deja!t %s.", ULTIMATE_BLINK[0]);
			else {
				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 {
					ColorChat(id,"!t[Furien]!g Puterea ti se va activa la urmatorul spawn.");
				}
				NextUltimate[id] = str_to_num(ULTIMATE_BLINK[1])
			}
		}
		#endif
		
		#if defined ULT_CHAINLIGHTNING
		case 3:{
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_CHAINLIGHTNING[1]))
				ColorChat(id,"!t[Furien]!g Ai deja!t %s.", ULTIMATE_CHAINLIGHTNING[0]);
			else {
				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 {
					ColorChat(id,"!t[Furien]!g Puterea ti se va activa la urmatorul spawn.");
				}
				NextUltimate[id] = str_to_num(ULTIMATE_CHAINLIGHTNING[1])
			}
		}
		#endif
		
		#if defined ULT_ENTANGLE
		case 4:{
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_ENTANGLE[1]))
				ColorChat(id,"!t[Furien]!g Ai deja!t %s.", ULTIMATE_ENTANGLE[0]);
			else {
				if(!PlayerUltimate[id]) {
					PlayerUltimate[id] = str_to_num(ULTIMATE_ENTANGLE[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 {
					ColorChat(id,"!t[Furien]!g Puterea ti se va activa la urmatorul spawn.");
				}
				NextUltimate[id] = str_to_num(ULTIMATE_ENTANGLE[1])
			}
		}
		#endif
		
		#if defined ULT_IMMOLATE
		case 5:{
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_IMMOLATE[1]))
				ColorChat(id,"!t[Furien]!g Ai deja!t %s.", ULTIMATE_IMMOLATE[0]);
			else {
				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 {
					ColorChat(id,"!t[Furien]!g Puterea ti se va activa la urmatorul spawn.");
				}
				NextUltimate[id] = str_to_num(ULTIMATE_IMMOLATE[1])
			}
		}
		#endif
		
		#if defined ULT_BIGBADVOODOO
		case 6:{
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_BIGBADVOODOO[1]))
				ColorChat(id,"!t[Furien]!g Ai deja!t %s.", ULTIMATE_BIGBADVOODOO[0]);
			else {
				if(!PlayerUltimate[id]) {
					PlayerUltimate[id] = str_to_num(ULTIMATE_BIGBADVOODOO[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 {
					ColorChat(id,"!t[Furien]!g Puterea ti se va activa la urmatorul spawn.");
				}
				NextUltimate[id] = str_to_num(ULTIMATE_BIGBADVOODOO[1])
			}
		}
		#endif
		
		#if defined ULT_VENGEANCE
		case 7:{
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_VENGEANCE[1]))
				ColorChat(id,"!t[Furien]!g Ai deja!t %s.", ULTIMATE_VENGEANCE[0]);
			else {
				if(!PlayerUltimate[id]) {
					PlayerUltimate[id] = str_to_num(ULTIMATE_VENGEANCE[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 {
					ColorChat(id,"!t[Furien]!g Puterea ti se va activa la urmatorul spawn.");
				}
				NextUltimate[id] = str_to_num(ULTIMATE_VENGEANCE[1])
			}
		}
		#endif
		
		#if defined ULT_LOCUSTSWARM
		case 8:{
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_LOCUSTSWARM[1]))
				ColorChat(id,"!t[Furien]!g Ai deja!t %s.", ULTIMATE_LOCUSTSWARM[0]);
			else {
				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 {
					ColorChat(id,"!t[Furien]!g Puterea ti se va activa la urmatorul spawn.");
				}
				NextUltimate[id] = str_to_num(ULTIMATE_LOCUSTSWARM[1])
			}
		}
		#endif
		
		default: return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public FurienPowersMenu(id) {
	if(is_user_connected(id)) {
		new Title[256];
		formatex(Title,sizeof(Title)-1,"\rFurien Powers Menu^n\rLevel:\y %i \rXP:\y %i\r",get_user_level(id), get_user_xp(id));
		Menu = menu_create(Title, "FurienPowersMenuCmd");
		
		#if defined POWER_UNHOLYAURA	
		new _UnholyAura[256];
		if(get_user_level(id) < str_to_num(SKILL_UNHOLYAURA[1]))
			formatex(_UnholyAura,sizeof(_UnholyAura)-1,"\d%s \w- \rLocked", SKILL_UNHOLYAURA[0]);
		else if(UnholyAura_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_UnholyAura,sizeof(_UnholyAura)-1,"\d%s Level: %d \w- \rMax Level", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
		else if(!Credits[id])
			formatex(_UnholyAura,sizeof(_UnholyAura)-1,"\d%s Level: %d", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
		else
			formatex(_UnholyAura,sizeof(_UnholyAura)-1,"\w%s \yLevel: %d", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
		menu_additem(Menu, _UnholyAura, "1", 0);
		#endif
		
		#if defined POWER_LEVITATION
		new _Levitation[256];
		if(get_user_level(id) < str_to_num(SKILL_LEVITATION[1]))
			formatex(_Levitation,sizeof(_Levitation)-1,"\d%s \w- \rLocked", SKILL_LEVITATION[0]);
		else if(Levitation_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_Levitation,sizeof(_Levitation)-1,"\d%s Level: %d \w- \rMax Level", SKILL_LEVITATION[0], Levitation_Level[id]);
		else if(!Credits[id])
			formatex(_Levitation,sizeof(_Levitation)-1,"\d%s Level: %d", SKILL_LEVITATION[0], Levitation_Level[id]);
		else
			formatex(_Levitation,sizeof(_Levitation)-1,"\w%s \yLevel: %d", SKILL_LEVITATION[0], Levitation_Level[id]);
		menu_additem(Menu, _Levitation, "2", 0);
		#endif
		
		#if defined POWER_VAMPIRICAURA
		new _VampiricAura[256];
		if(get_user_level(id) < str_to_num(SKILL_VAMPIRICAURA[1]))
			formatex(_VampiricAura,sizeof(_VampiricAura)-1,"\d%s \w- \rLocked", SKILL_VAMPIRICAURA[0]);
		else if(VampiricAura_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_VampiricAura,sizeof(_VampiricAura)-1,"\d%s Level: %d \w- \rMax Level", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
		else if(!Credits[id])
			formatex(_VampiricAura,sizeof(_VampiricAura)-1,"\d%s Level: %d", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
		else
			formatex(_VampiricAura,sizeof(_VampiricAura)-1,"\w%s \yLevel: %d", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
		menu_additem(Menu, _VampiricAura, "3", 0);
		#endif
		
		#if defined POWER_EVASION
		new _Evasion[256];
		if(get_user_level(id) < str_to_num(SKILL_EVASION[1]))
			formatex(_Evasion,sizeof(_Evasion)-1,"\d%s \w- \rLocked", SKILL_EVASION[0]);
		else if(Evasion_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_Evasion,sizeof(_Evasion)-1,"\d%s Level: %d \w- \rMax Level", SKILL_EVASION[0], Evasion_Level[id]);
		else if(!Credits[id])
			formatex(_Evasion,sizeof(_Evasion)-1,"\d%s Level: %d", SKILL_EVASION[0], Evasion_Level[id]);
		else
			formatex(_Evasion,sizeof(_Evasion)-1,"\w%s \yLevel: %d", SKILL_EVASION[0], Evasion_Level[id]);
		menu_additem(Menu, _Evasion, "4", 0);
		#endif
		
		#if defined POWER_BANISH
		new _Banish[256];
		if(get_user_level(id) < str_to_num(SKILL_BANISH[1]))
			formatex(_Banish,sizeof(_Banish)-1,"\d%s \w- \rLocked", SKILL_BANISH[0]);
		else if(Banish_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_Banish,sizeof(_Banish)-1,"\d%s Level: %d \w- \rMax Level", SKILL_BANISH[0], Banish_Level[id]);
		else if(!Credits[id])
			formatex(_Banish,sizeof(_Banish)-1,"\d%s Level: %d", SKILL_BANISH[0], Banish_Level[id]);
		else
			formatex(_Banish,sizeof(_Banish)-1,"\w%s \yLevel: %d", SKILL_BANISH[0], Banish_Level[id]);
		menu_additem(Menu, _Banish, "5", 0);
		#endif
		
		#if defined POWER_TRUESHOT
		new _TrueShot[256];
		if(get_user_level(id) < str_to_num(SKILL_TRUESHOT[1]))
			formatex(_TrueShot,sizeof(_TrueShot)-1,"\d%s \w- \rLocked", SKILL_TRUESHOT[0]);
		else if(TrueShot_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_TrueShot,sizeof(_TrueShot)-1,"\d%s Level: %d \w- \rMax Level", SKILL_TRUESHOT[0], TrueShot_Level[id]);
		else if(!Credits[id])
			formatex(_TrueShot,sizeof(_TrueShot)-1,"\d%s Level: %d", SKILL_TRUESHOT[0], TrueShot_Level[id]);
		else
			formatex(_TrueShot,sizeof(_TrueShot)-1,"\w%s \yLevel: %d", SKILL_TRUESHOT[0], TrueShot_Level[id]);
		menu_additem(Menu, _TrueShot, "6", 0);
		#endif
		
		#if defined POWER_PHOENIX
		new _Phoenix[256];
		if(get_user_level(id) < str_to_num(SKILL_PHOENIX[1]))
			formatex(_Phoenix,sizeof(_Phoenix)-1,"\d%s \w- \rLocked", SKILL_PHOENIX[0]);
		else if(Phoenix_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_Phoenix,sizeof(_Phoenix)-1,"\d%s Level: %d \w- \rMax Level", SKILL_PHOENIX[0], Phoenix_Level[id]);
		else if(!Credits[id])
			formatex(_Phoenix,sizeof(_Phoenix)-1,"\d%s Level: %d", SKILL_PHOENIX[0], Phoenix_Level[id]);
		else
			formatex(_Phoenix,sizeof(_Phoenix)-1,"\w%s \yLevel: %d", SKILL_PHOENIX[0], Phoenix_Level[id]);
		menu_additem(Menu, _Phoenix, "7", 0);
		#endif
		
		menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, Menu, 0);
	}
}

public FurienPowersMenuCmd(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(!Credits[id]) {
		FurienPowersMenu(id)
		return PLUGIN_HANDLED;
	}
	new Data[6], Name[64];
	new Access, CallBack;
	menu_item_getinfo(menu, item, Access, Data,5, Name, 63, CallBack);
	new Key = str_to_num(Data);
	switch(Key) {
		#if defined POWER_UNHOLYAURA
		case 1: {
			if(get_user_level(id) < str_to_num(SKILL_UNHOLYAURA[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_UNHOLYAURA[1]) , SKILL_UNHOLYAURA[0]);
				
				FurienPowersMenu(id)
			}
			else if(UnholyAura_Level[id] >= SKILL_MAX_LEVEL)
				FurienPowersMenu(id)
			else {
				UnholyAura_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveUnholyAura(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
			}
		}
		#endif	
		
		#if defined POWER_LEVITATION
		case 2: {
			if(get_user_level(id) < str_to_num(SKILL_LEVITATION[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_LEVITATION[1]), SKILL_LEVITATION[0]);
				FurienPowersMenu(id)
			}
			else if(Levitation_Level[id] >= SKILL_MAX_LEVEL)
				FurienPowersMenu(id)
			else {
				Levitation_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveLevitation(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_LEVITATION[0], Levitation_Level[id]);
			}
		}
		#endif	
		
		#if defined POWER_VAMPIRICAURA
		case 3: {
			if(get_user_level(id) < str_to_num(SKILL_VAMPIRICAURA[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_VAMPIRICAURA[1]), SKILL_VAMPIRICAURA[0]);
				FurienPowersMenu(id)
			}
			else if(VampiricAura_Level[id] >= SKILL_MAX_LEVEL)
				FurienPowersMenu(id)
			else {
				VampiricAura_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveVampiricAura(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
			}
		}
		#endif	
		
		#if defined POWER_EVASION
		case 4: {
			if(get_user_level(id) < str_to_num(SKILL_EVASION[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_EVASION[1]), SKILL_EVASION[0]);
				FurienPowersMenu(id)
			}
			else if(Evasion_Level[id] >= SKILL_MAX_LEVEL)
				FurienPowersMenu(id)
			else {
				Evasion_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveEvasion(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_EVASION[0], Evasion_Level[id]);
			}
		}
		#endif	
		
		#if defined POWER_BANISH
		case 5: {
			if(get_user_level(id) < str_to_num(SKILL_BANISH[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_BANISH[1]), SKILL_BANISH[0]);
				FurienPowersMenu(id)
			}
			else if(Banish_Level[id] >= SKILL_MAX_LEVEL)
				FurienPowersMenu(id)
			else {
				Banish_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveBanish(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_BANISH[0], Banish_Level[id]);
			}
		}
		#endif
		
		#if defined POWER_TRUESHOT
		case 6: {
			if(get_user_level(id) < str_to_num(SKILL_TRUESHOT[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_TRUESHOT[1]), SKILL_TRUESHOT[0]);
				FurienPowersMenu(id)
			}
			else if(TrueShot_Level[id] >= SKILL_MAX_LEVEL)
				FurienPowersMenu(id)
			else {
				TrueShot_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveTrueShot(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_TRUESHOT[0], TrueShot_Level[id]);
			}
		}
		#endif	
		
		#if defined POWER_PHOENIX
		case 7: {
			if(get_user_level(id) < str_to_num(SKILL_PHOENIX[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_PHOENIX[1]), SKILL_PHOENIX[0]);
				FurienPowersMenu(id)
			}
			else if(Phoenix_Level[id] >= SKILL_MAX_LEVEL)
				FurienPowersMenu(id)
			else {
				Phoenix_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SavePhoenix(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_PHOENIX[0], Phoenix_Level[id]);
			}
		}
		#endif	
		
		default: return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public AntiFurienPowersMenu(id) {
	if(is_user_connected(id)) {
		new Title[256];
		formatex(Title,sizeof(Title)-1,"\rAnti Furien Powers Menu^n\rLevel:\y %i \rXP:\y %i\r",get_user_level(id), get_user_xp(id));
		Menu = menu_create(Title, "AntiFurienPowersMenuCmd");
		
		#if defined POWER_DEVOTIONAURA
		new _DevotionAura[256];
		if(get_user_level(id) < str_to_num(SKILL_DEVOTIONAURA[1]))
			formatex(_DevotionAura,sizeof(_DevotionAura)-1,"\d%s \w- \rLocked", SKILL_DEVOTIONAURA[0]);
		else if(DevotionAura_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_DevotionAura,sizeof(_DevotionAura)-1,"\d%s Level: %d \w- \rMax Level", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
		else if(!Credits[id])
			formatex(_DevotionAura,sizeof(_DevotionAura)-1,"\d%s Level: %d", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
		else
			formatex(_DevotionAura,sizeof(_DevotionAura)-1,"\w%s \yLevel: %d", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
		menu_additem(Menu, _DevotionAura, "1", 0);
		#endif
		
		#if defined POWER_CRITICALSTRIKE
		new _CriticalStrike[256];
		if(get_user_level(id) < str_to_num(SKILL_CRITICALSTRIKE[1]))
			formatex(_CriticalStrike,sizeof(_CriticalStrike)-1,"\d%s \w- \rLocked", SKILL_CRITICALSTRIKE[0]);
		else if(CriticalStrike_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_CriticalStrike,sizeof(_CriticalStrike)-1,"\d%s Level: %d \w- \rMax Level", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
		else if(!Credits[id])
			formatex(_CriticalStrike,sizeof(_CriticalStrike)-1,"\d%s Level: %d", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
		else
			formatex(_CriticalStrike,sizeof(_CriticalStrike)-1,"\w%s \yLevel: %d", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
		menu_additem(Menu, _CriticalStrike, "2", 0);
		#endif
		
		#if defined POWER_CRITICALGRENADE
		new _CriticalGrenade[256];
		if(get_user_level(id) < str_to_num(SKILL_CRITICALGRENADE[1]))
			formatex(_CriticalGrenade,sizeof(_CriticalGrenade)-1,"\d%s \w- \rLocked", SKILL_CRITICALGRENADE[0]);
		else if(CriticalGrenade_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_CriticalGrenade,sizeof(_CriticalGrenade)-1,"\d%s Level: %d \w- \rMax Level", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
		else if(!Credits[id])
			formatex(_CriticalGrenade,sizeof(_CriticalGrenade)-1,"\d%s Level: %d", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
		else
			formatex(_CriticalGrenade,sizeof(_CriticalGrenade)-1,"\w%s \yLevel: %d", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
		menu_additem(Menu, _CriticalGrenade, "3", 0);
		#endif
		
		#if defined POWER_BASH
		new _Bash[256];
		if(get_user_level(id) < str_to_num(SKILL_BASH[1]))
			formatex(_Bash,sizeof(_Bash)-1,"\d%s \w- \rLocked", SKILL_BASH[0]);
		else if(Bash_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_Bash,sizeof(_Bash)-1,"\d%s Level: %d \w- \rMax Level", SKILL_BASH[0], Bash_Level[id]);
		else if(!Credits[id])
			formatex(_Bash,sizeof(_Bash)-1,"\d%s Level: %d", SKILL_BASH[0], Bash_Level[id]);
		else
			formatex(_Bash,sizeof(_Bash)-1,"\w%s \yLevel: %d", SKILL_BASH[0], Bash_Level[id]);
		menu_additem(Menu, _Bash, "4", 0);
		#endif
		
		#if defined POWER_HEALINGWAVE
		new _HealingWave[256];
		if(get_user_level(id) < str_to_num(SKILL_HEALINGWAVE[1]))
			formatex(_HealingWave,sizeof(_HealingWave)-1,"\d%s \w- \rLocked", SKILL_HEALINGWAVE[0]);
		else if(HealingWave_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_HealingWave,sizeof(_HealingWave)-1,"\d%s Level: %d \w- \rMax Level", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
		else if(!Credits[id])
			formatex(_HealingWave,sizeof(_HealingWave)-1,"\d%s Level: %d", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
		else
			formatex(_HealingWave,sizeof(_HealingWave)-1,"\w%s \yLevel: %d", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
		menu_additem(Menu, _HealingWave, "5", 0);
		#endif
		
		#if defined POWER_SHADOWSTRIKE
		new _ShadowStrike[256];
		if(get_user_level(id) < str_to_num(SKILL_SHADOWSTRIKE[1]))
			formatex(_ShadowStrike,sizeof(_ShadowStrike)-1,"\d%s \w- \rLocked", SKILL_SHADOWSTRIKE[0]);
		else if(ShadowStrike_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_ShadowStrike,sizeof(_ShadowStrike)-1,"\d%s Level: %d \w- \rMax Level", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
		else if(!Credits[id])
			formatex(_ShadowStrike,sizeof(_ShadowStrike)-1,"\d%s Level: %d", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
		else
			formatex(_ShadowStrike,sizeof(_ShadowStrike)-1,"\w%s \yLevel: %d", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
		menu_additem(Menu, _ShadowStrike, "6", 0);
		#endif
		
		#if defined POWER_SIPHONMANA
		new _SiphonMana[256];
		if(get_user_level(id) < str_to_num(SKILL_SIPHONMANA[1]))
			formatex(_SiphonMana,sizeof(_SiphonMana)-1,"\d%s \w- \rLocked", SKILL_SIPHONMANA[0]);
		else if(SiphonMana_Level[id] >= SKILL_MAX_LEVEL)
			formatex(_SiphonMana,sizeof(_SiphonMana)-1,"\d%s Level: %d \w- \rMax Level", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
		else if(!Credits[id])
			formatex(_SiphonMana,sizeof(_SiphonMana)-1,"\d%s Level: %d", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
		else
			formatex(_SiphonMana,sizeof(_SiphonMana)-1,"\w%s \yLevel: %d", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
		menu_additem(Menu, _SiphonMana, "7", 0);
		#endif
		
		menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, Menu, 0);
	}
}

public AntiFurienPowersMenuCmd(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(!Credits[id]) {
		AntiFurienPowersMenu(id)
		return PLUGIN_HANDLED;
	}
	new Data[6], Name[64];
	new Access, CallBack;
	menu_item_getinfo(menu, item, Access, Data,5, Name, 63, CallBack);
	new Key = str_to_num(Data);
	switch(Key) {
		#if defined POWER_DEVOTIONAURA
		case 1: {
			if(get_user_level(id) < str_to_num(SKILL_DEVOTIONAURA[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_DEVOTIONAURA[1]), SKILL_DEVOTIONAURA[0]);
				AntiFurienPowersMenu(id)
			}
			else if(DevotionAura_Level[id] >= SKILL_MAX_LEVEL)
				AntiFurienPowersMenu(id)
			else {
				DevotionAura_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveDevotionAura(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
				if(is_user_alive(id) && get_user_team(id) == 2)
					fm_set_user_health(id, get_user_health(id) + Devotion);
			}
		}
		#endif		
		
		#if defined POWER_CRITICALSTRIKE
		case 2: {
			if(get_user_level(id) < str_to_num(SKILL_CRITICALSTRIKE[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_CRITICALSTRIKE[1]), SKILL_CRITICALSTRIKE[0]);
				AntiFurienPowersMenu(id)
			}
			else if(CriticalStrike_Level[id] >= SKILL_MAX_LEVEL)
				AntiFurienPowersMenu(id)
			else {
				CriticalStrike_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveCriticalStrike(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
			}
		}
		#endif		
		
		#if defined POWER_CRITICALGRENADE
		case 3: {
			if(get_user_level(id) < str_to_num(SKILL_CRITICALGRENADE[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_CRITICALGRENADE[1]), SKILL_CRITICALGRENADE[0]);
				AntiFurienPowersMenu(id)
			}
			else if(CriticalGrenade_Level[id] >= SKILL_MAX_LEVEL)
				AntiFurienPowersMenu(id)
			else {
				CriticalGrenade_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveCriticalGrenade(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
			}
		}
		#endif		
		
		#if defined POWER_BASH
		case 4: {
			if(get_user_level(id) < str_to_num(SKILL_BASH[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_BASH[1]), SKILL_BASH[0]);
				AntiFurienPowersMenu(id)
			}
			else if(Bash_Level[id] >= SKILL_MAX_LEVEL)
				AntiFurienPowersMenu(id)
			else {
				Bash_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveBash(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_BASH[0], Bash_Level[id]);
			}
		}
		#endif		
		
		#if defined POWER_HEALINGWAVE
		case 5: {
			if(get_user_level(id) < str_to_num(SKILL_HEALINGWAVE[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_HEALINGWAVE[1]), SKILL_HEALINGWAVE[0]);
				AntiFurienPowersMenu(id)
			}
			else if(HealingWave_Level[id] >= SKILL_MAX_LEVEL)
				AntiFurienPowersMenu(id)
			else {
				HealingWave_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveHealingWave(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
			}
			if(is_user_alive(id) && get_user_team(id) == 2) {
				if(!task_exists(id + TASK_WAVE)) {
					HealingWave(id);
				}
			}
		}
		#endif	
		
		#if defined POWER_SHADOWSTRIKE
		case 6: {
			if(get_user_level(id) < str_to_num(SKILL_SHADOWSTRIKE[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_SHADOWSTRIKE[1]), SKILL_SHADOWSTRIKE[0]);
				AntiFurienPowersMenu(id)
			}
			else if(ShadowStrike_Level[id] >= SKILL_MAX_LEVEL)
				AntiFurienPowersMenu(id)
			else {
				ShadowStrike_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveShadowStrike(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
			}
		}
		#endif	
		
		#if defined POWER_SIPHONMANA
		case 7: {
			if(get_user_level(id) < str_to_num(SKILL_SIPHONMANA[1])) {
				ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_SIPHONMANA[1]), SKILL_SIPHONMANA[0]);
				AntiFurienPowersMenu(id)
			}
			else if(SiphonMana_Level[id] >= SKILL_MAX_LEVEL)
				AntiFurienPowersMenu(id)
			else {
				SiphonMana_Level[id] += 1
				Credits[id] --
				PlayerCredits[id] ++
				SaveSiphonMana(id)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
			}
		}
		#endif	
		
		default: return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public CMD_Ultimate(id) {
	if(is_user_connected(id) && is_user_alive(id)) {
		if(!get_user_ultimate(id)) {
			new Message[256];
			formatex(Message,sizeof(Message)-1,"Ultimate not found.");
			
			HudMessage(id, Message, _, _, _, _, _, _, _, 1.0);
			
			client_cmd(id, "speak %s", SOUND_ERROR);
		}
		else if(UltimateGlobalDelay > 0) {
			new Message[256];
			formatex(Message,sizeof(Message)-1,"Ultimate not ready.^n(%d seconds remaining).", UltimateGlobalDelay);
			
			HudMessage(id, Message, _, _, _, _, _, _, _, 1.0);
			client_cmd(id, "speak %s", SOUND_ERROR);
		}
		else if(UltimateDelay[id] > 0) {
			new Message[256];
			formatex(Message,sizeof(Message)-1,"Ultimate not ready.^n(%d seconds remaining).", UltimateDelay[id]);
			
			HudMessage(id, Message, _, _, _, _, _, _, _, 1.0);
			client_cmd(id, "speak %s", SOUND_ERROR);
		}
		else if(UltimateIsUsed[id]) {
			new Message[256];
			formatex(Message,sizeof(Message)-1,"Ultimate not ready.^n(%d seconds remaining).", UltimateDelay[id]);
			
			HudMessage(id, Message, _, _, _, _, _, _, _, 1.0);
			client_cmd(id, "speak %s", SOUND_ERROR);
		}
		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[256];
					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_ENTANGLE
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_ENTANGLE[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_BIGBADVOODOO
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_BIGBADVOODOO[1]))
				Ultimate_BigBadVoodoo(id);
			#endif
			
			#if defined ULT_VENGEANCE
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_VENGEANCE[1]))
				Ultimate_Vengeance(id);
			#endif
			
			#if defined ULT_LOCUSTSWARM
			if(get_user_ultimate(id) == str_to_num(ULTIMATE_LOCUSTSWARM[1]))
				Ultimate_LocustSwarm(id);
			#endif
		}
	}
}

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)) {
				client_cmd(Players, "speak %s", SOUND_ULTIMATEREADY)
				Ultimate_Icon(Players[i], 1);
				new Message[256];
				formatex(Message,sizeof(Message)-1,"Ultimate is ready.");
				
				HudMessage(Players[i], Message, _, _, _, _, _, _, _, 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;
			client_cmd(id, "speak %s", SOUND_ULTIMATEREADY)
			
			new Message[256];
			formatex(Message,sizeof(Message)-1,"Ultimate is ready.");
			
			HudMessage(id, Message, _, _, _, _, _, _, _, 1.0);
			Ultimate_Icon(id, 1);
		}
	}
}

stock Ultimate_Icon(id, flag) {
	if(get_user_ultimate(id)) {
		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_ENTANGLE
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_ENTANGLE[1])) {
			Red=0,		Green=0,	Blue=255;
			
			Create_StatusIcon(id, flag, ULTIMATE_ENTANGLE[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_BIGBADVOODOO
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_BIGBADVOODOO[1])) {
			Red=0,		Green=200,	Blue=200;
			
			Create_StatusIcon(id, flag, ULTIMATE_BIGBADVOODOO[2], Red, Green, Blue);
			
		}
		#endif
		
		#if defined ULT_VENGEANCE
		if(get_user_ultimate(id) == str_to_num(ULTIMATE_VENGEANCE[1])) {
			Red=255,	Green=0,	Blue=0;
			
			Create_StatusIcon(id, flag, ULTIMATE_VENGEANCE[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);
	}
}

stock 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_ENTANGLE
	task_exists(TASK_ENTANGLEWAIT + id) ? remove_task(TASK_ENTANGLEWAIT + id) : 0;
	IsStunned[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)
}

stock 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(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");
				}
			}
		}
	}
	
	--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 
bool: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(PlayerBanished[id] || IsStunned[id]) {
		new Message[256];
		formatex(Message,sizeof(Message)-1,"You can't blink when you're stunned!");
		
		HudMessage(id, Message, 255, 208, 0, -1.0, 0.85, _, _, 1.0);
		
		return false
	}
	
	if(is_restricted_area(id, NewOrigin)) {
		ColorChat(id, "!t[Teleport]!g Pozitia de teleportare este invalida.")
		return false
	}
	
	new Float:SpriteOrigin[3]
	pev(id, pev_origin, SpriteOrigin)
	
	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;
}

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;
}

stock bool: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)) //get_tr2(tr, TR_InOpen))
		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) {
				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;
					}
				}
			}
		}
		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(15)			// frame rate
	write_byte(10)			// life
	write_byte(LineWidth)		// line width
	write_byte(10)			// noise amplitude
	write_byte(255)			// red
	write_byte(255)			// green
	write_byte(255)			// blue
	write_byte(255)			// 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_ENTANGLE
public Ultimate_Entangle(Caster, Enemy) {
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMFOLLOW)
	write_short(Enemy)			// entity
	write_short(SPR_TRAIL)			// model
	write_byte(10)				// life
	write_byte(5)				// width
	write_byte(10)				// red
	write_byte(108)				// green
	write_byte(23)				// blue
	write_byte(255)				// brightness
	message_end()
	
	LastSpeed[Enemy] = get_user_maxspeed(Enemy);
	
	set_user_maxspeed(Enemy, 1.0);
	
	new parm[4];
	parm[0] = Enemy;
	parm[1] = 0;
	parm[2] = 0;
	parm[3] = 0;
	EntangleWait(parm);
}

public EntangleWait(parm[4]) {
	new id = parm[0];
	
	if(id >= TASK_ENTANGLEWAIT) {
		id -= TASK_ENTANGLEWAIT;
	}
	
	if(is_user_connected(id)) {	
		new Origin[3];
		get_user_origin(id, Origin);
		
		if(Origin[0] == parm[1] && Origin[1] == parm[2] && Origin[2] == parm[3]) {
			set_user_maxspeed(id, 1.0);
			IsStunned[id] = true;
			
			set_task(ENTANGLE_TIME, "Entangle_ResetMaxSpeed", TASK_RESETSPEED + id);
			
			EntangleEffect(id)
		}
		else {
			parm[1] = Origin[0];
			parm[2] = Origin[1];
			parm[3] = Origin[2];
			
			set_task(0.001, "EntangleWait", TASK_ENTANGLEWAIT + id, parm, 4);
		}
	}
}

public EntangleEffect(id) {
	new Origin[3];
	get_user_origin(id, Origin);
	
	emit_sound(id, CHAN_STATIC, SOUND_ENTANGLING, 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(SPR_BEAM)				// model
			write_byte(0)					// start frame
			write_byte(0)					// framerate
			write_byte((floatround(ENTANGLE_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 Entangle_ResetMaxSpeed(id) {
	if(id >= TASK_RESETSPEED) {
		id -= TASK_RESETSPEED;
	}
	
	IsStunned[id] = false;
	set_user_maxspeed(id, LastSpeed[id]);
	task_exists(TASK_ENTANGLEWAIT + id) ? remove_task(TASK_ENTANGLEWAIT + id) : 0;
}
#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))  {
		Immolate_Remove(Target);
		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_BIGBADVOODOO
//Chain Big Bad Voodoo
public Ultimate_BigBadVoodoo(id) {
	if(is_user_connected(id)) {
		set_user_godmode(id, true)
		
		UltimateDelay[id] = get_pcvar_num(cvar_ultimate_countdown) + BIGBADVOODOO_DURATION;
		Ultimate_Delay(id)
		
		Ultimate_Icon(id, 2);
		
		message_begin(MSG_ONE, get_user_msgid("BarTime"), {0,0,0}, id)
		write_byte(BIGBADVOODOO_DURATION) 	// duration 
		write_byte(0)
		message_end() 
		
		emit_sound(id, CHAN_STATIC, SOUND_VOODOO, 1.0, ATTN_NORM, 0, PITCH_NORM);
		
		set_user_rendering(id, kRenderFxGlowShell, 255, 245, 50, kRenderNormal, 16);
		
		new Origin[3];
		get_user_origin(id, Origin);
		Origin[2] += 75;
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_ELIGHT)
		write_short(id)				// 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(245)				// green
		write_byte(200)				// blue
		write_byte(BIGBADVOODOO_DURATION)	// life
		write_coord(0)				// decay rate
		message_end()
		
		set_task(float(BIGBADVOODOO_DURATION), "BigBadVoodoo_Remove", TASK_RESETGOD + id);
	}
}

public BigBadVoodoo_Remove(id) {
	if(id >= TASK_RESETGOD) {
		id -= TASK_RESETGOD;
	}
	
	set_user_rendering(id);
	set_user_godmode(id, false)
}
#endif

#if defined ULT_VENGEANCE
Ultimate_Vengeance(id) {
	if(!is_user_alive(id))  {
		if(task_exists(TASK_DELAY + id))
			remove_task(TASK_DELAY + id);
		
		UltimateDelay[id] = get_pcvar_num(cvar_ultimate_countdown);
		Ultimate_Delay(id)
		
		set_task(SPAWN_DELAY, "Spawn", TASK_SPAWN + id);
	}
	
	else {		
		new ent = FindFreeSpawn(id);
		
		if(ent) {
			new Origin[3], NewOrigin[3], Float:SpawnOrigin[3];
			
			get_user_origin(id, Origin);
			
			entity_get_vector(ent, EV_VEC_origin, SpawnOrigin);
			
			FVecIVec(SpawnOrigin, NewOrigin);
			
			set_user_origin(id, NewOrigin);
			
			message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
			write_byte(TE_TELEPORT) 
			write_coord(Origin[0]) 
			write_coord(Origin[1]) 
			write_coord(Origin[2]) 
			message_end()
			
			fm_set_user_health(id, VENGEANCE_HEALTH);
			
			emit_sound(id, CHAN_STATIC, SOUND_VENGEANCE, 1.0, ATTN_NORM, 0, PITCH_NORM);
			
			UltimateDelay[id] = get_pcvar_num(cvar_ultimate_countdown);
			Ultimate_Delay(id)
		}
	}
}

FindFreeSpawn(id) {
	new PlayersInVicinity, SpawnID, EntList[1], Origin[3];
	new ent = -1;
	new Float:SpawnOrigin[3];
	new Float:Vicinity = 96.0;
	new bool:Found = false;	
	new Team = get_user_team(id);
	
	SpawnID = ((Team == 2) ? 0 : 1);
	
	do {	
		ent = find_ent_by_class(ent, SpawnEnt[SpawnID]);
		
		if(ent) {
			entity_get_vector(ent, EV_VEC_origin, SpawnOrigin);
			
			FVecIVec(SpawnOrigin, Origin);
			
			PlayersInVicinity = find_sphere_class(0, "player", Vicinity, EntList, 1, SpawnOrigin);
			
			if(PlayersInVicinity == 0) {				
				SpawnReserved[SpawnInc++] = ent;
				
				Found = true;
			}
		}
	}
	while(ent && !Found)
		
	if(!task_exists(TASK_RESETSPAWNS))
		set_task(0.3, "SpawnReset", TASK_RESETSPAWNS);
	
	if(!Found) {
		return -1;
	}
	
	return ent;
}

public SpawnReset() {
	new i;
	
	SpawnInc = 0;
	for(i = 0; i < TOTAL_SPAWNS; i++) {
		SpawnReserved[i] = 0;
	}
}

public Spawn(id) {
	if(id >= TASK_SPAWN) {
		id -= TASK_SPAWN;
	}
	
	if(!is_user_alive(id)) {
		set_user_godmode(id, 1);
		
		ExecuteHamB(Ham_CS_RoundRespawn,id);
		
		set_task(0.2, "Spawn_Final", TASK_SPAWNPLAYER + id);
		set_task(1.0, "SpawnRemoveGod", TASK_SPAWNREMOVEGOD + id);
	}
}

public Spawn_Final(id) {
	if(id >= TASK_SPAWNPLAYER) {
		id -= TASK_SPAWNPLAYER;
	}
	
	give_item(id, "item_suit");
	fm_set_user_health(id, VENGEANCE_HEALTH);	
}

public SpawnRemoveGod(id) {
	if(id >= TASK_SPAWNREMOVEGOD) {
		id -= TASK_SPAWNREMOVEGOD;
	}
	
	set_user_godmode(id, 0);
}
#endif

#if defined ULT_LOCUSTSWARM
Ultimate_LocustSwarm(id) {
	new Victim = LocustGetTarget(id);
	
	if(Victim == -1) {
		new Message[256];
		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);
	}
}

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) {
			Targets[TotalTargets++] = TargetID;
		}
	}
	
	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)) {
		ColorChat(Attacker, "!tVictim is no longer targetable for Locust Swarm, finding new target!");
		
		new Victim = LocustGetTarget(Attacker);
		
		if(Victim == -1) {
			new Message[256];
			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];
			
			ColorChat(Attacker, "!tVictim is no longer targetable, try casting again!");
			
			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);
		
		ColorChat(Attacker, "!t[Furien]!g Locust Swarm hit!t %s!g for!t %d!g damage!", Name, Damage);
	}
}

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

#if defined POWER_BASH
public Bash_Reset(id) {
	if(id >= TASK_RESETBASH) {
		id -= TASK_RESETBASH;
	}
	
	Bash_Stunned[id] = false
	set_pev(id, pev_maxspeed, Bash_LastSpeed);
	
	set_user_rendering(id);
}
#endif

#if defined POWER_HEALINGWAVE
public HealingWave(id) {
	if(id >= TASK_WAVE) {
		id -= TASK_WAVE;
	}
	
	if(HealingWave_Level[id] && is_user_connected(id) && is_user_alive(id) && get_user_team(id) == 2) {	
		set_task(Heal[HealingWave_Level[id] - 1], "HealingWave", TASK_WAVE + id);
		
		new Players[32], Num, Targetid, TargetOrigin[3], Origin[3];
		new Team = get_user_team(id);
		
		get_user_origin(id, Origin);
		get_players(Players, Num, "a");
		
		for(new i = 0; i < Num; i++) {
			Targetid = Players[i];
			
			if(is_user_connected(Targetid) && get_user_team(Targetid) == Team) {
				get_user_origin(Targetid, TargetOrigin);
				
				if(get_distance(Origin, TargetOrigin) < HEALING_WAVE_RANGE) {
					get_user_origin(Targetid, Origin)
					if(get_user_health(Targetid) + 1 <= MAX_HEALTH) {
						fm_set_user_health(Targetid, get_user_health(Targetid) + 1);
						
						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 (8)			// count
						write_byte (1)			// life in 0.1's
						message_end()
					}
				}
			}
		}
	}
}
#endif

#if defined POWER_BANISH
public BanishReturn(parm[]) {
	new id = parm[0];
	
	if(is_user_connected(id)) {
		if(parm[1] > 0 && !EndRound) {
			parm[1]--;
			
			Create_ScreenFade(id, 2,(1<<10),(1<<12), 0, 0, 0, 255);
			
			set_task(0.1, "BanishReturn", TASK_BANISH + id, parm, 5);
		}
		else {
			new Origin[3];
			Origin[0] = parm[2];
			Origin[1] = parm[3];
			Origin[2] = parm[4];
			
			Origin[2] += 15;
			
			set_user_origin(id, Origin);
			
			new Parm[4];
			Parm[0] = Origin[0];
			Parm[1] = Origin[1];
			Parm[2] = Origin[2];
			Parm[3] = id;
			
			set_task(0.1, "_BanishReturn", TASK_BANISHRETURN + id, Parm, 4);
			
			Glow(id, 0, 0, 0, 100);
			
			Create_ScreenFade(id, 0, 0, 0, 0, 0, 0, 0);
			
			PlayerBanished[id] = false;
		}
	}
}

public _BanishReturn(parm[]) {
	new id = parm[3];
	new Origin[3];
	
	get_user_origin(id, Origin);
	
	if(Origin[2] == parm[2]) {
		new SpawnEnt = FindFreeSpawn(id);
		
		if(SpawnEnt > 0) {
			new Float:SpawnOrigin[3], Origin[3];
			
			entity_get_vector(SpawnEnt, EV_VEC_origin, SpawnOrigin);
			
			FVecIVec(SpawnOrigin, Origin);
			
			Origin[2] += 15;
			
			set_user_origin(id, Origin);
			
			new Parm[4];
			Parm[0] = Origin[0];
			Parm[1] = Origin[1];
			Parm[2] = Origin[2];
			Parm[3] = id;
			
			set_task(0.1, "_BanishReturn", TASK_BANISHRETURN + id, Parm, 4);
			
			ColorChat(id, "You are stuck! Ahhh! Moving you back to your spawn!");
		}
		else {
			ColorChat(id, "Sorry, I know you're stuck, but I can't move you right now :/");
		}
	}
}

stock CanSeePlayer(id, TargetID) {
	new Float:Origin[3];
	entity_get_vector( TargetID, EV_VEC_origin, Origin );
	
	return is_in_viewcone( id, Origin );
}
#endif

#if defined POWER_PHOENIX
PhoenixCheck(id) {
	if(Phoenix_Level[id]) {
		if(random_float(0.0, 1.0) <= Phoenix[Phoenix_Level[id] - 1]) {
			IsPhoenix[id] = true;
		}
	}
	
	else {
		IsPhoenix[id] = false;
	}
}
PhoenixSpawn(id) {
	if(!EndRound) {
		new Team = get_user_team(id);
		new PhoenixID = PhoenixExists(Team);
		
		if(PhoenixID != -1) {
			if(PhoenixID != id) {
				IsPhoenix[PhoenixID] = false;
				
				set_task(SPAWN_DELAY, "Spawn", TASK_SPAWN + id);
				
				new Castername[32], SpawnerName[32];
				
				get_user_name(PhoenixID, Castername,31)
				get_user_name(id, SpawnerName, 31)
				
				ColorChat(id, "!t%s!g has revived you", Castername);
				ColorChat(PhoenixID, "!gYou have revived!t %s!g, way to go !", SpawnerName);
			}
		}
	}
}

PhoenixExists(Team) {
	new Players[32], Num, id;
	get_players(Players, Num, "a");
	
	for(new i = 0; i < Num; i++) {
		id = Players[i];
		
		if(get_user_team(id) == Team) {
			if(IsPhoenix[id]) {
				return id;
			}
		}
	}
	
	return -1;
}
#endif

Glow(id, Red, Green, Blue, All) {	
	if(!task_exists(TASK_GLOW + id)) {
		if(All) {
			GlowLevel[id][0]	= 0;
			GlowLevel[id][1]	= 0;
			GlowLevel[id][2]	= 0;
			GlowLevel[id][3]	+= All;
		}
		else if(Red) {
			GlowLevel[id][0]	+= Red;
			GlowLevel[id][1]	= 0;
			GlowLevel[id][2]	= 0;
			GlowLevel[id][3]	= 0;
		}
		else if(Green) {
			GlowLevel[id][0]	= 0;
			GlowLevel[id][1]	+= Green;
			GlowLevel[id][2]	= 0;
			GlowLevel[id][3]	= 0;
		}
		else if(Blue) {
			GlowLevel[id][0]	= 0;
			GlowLevel[id][1]	= 0;
			GlowLevel[id][2]	+= Blue;
			GlowLevel[id][3]	= 0;
		}
		
		GlowLevel[id][0] = ((GlowLevel[id][0] > MAXGLOW) ? MAXGLOW : GlowLevel[id][0]);
		GlowLevel[id][1] = ((GlowLevel[id][1] > MAXGLOW) ? MAXGLOW : GlowLevel[id][1]);
		GlowLevel[id][2] = ((GlowLevel[id][2] > MAXGLOW) ? MAXGLOW : GlowLevel[id][2]);
		GlowLevel[id][3] = ((GlowLevel[id][3] > MAXGLOW) ? MAXGLOW : GlowLevel[id][3]);
		
		_Glow(id);
	}
}

public _Glow(id) {
	if(id >= TASK_GLOW) {
		id -= TASK_GLOW;
	}
	
	if(is_user_connected(id)) {
		new Red	= GlowLevel[id][0];
		new Green = GlowLevel[id][1];
		new Blue = GlowLevel[id][2];
		new All	= GlowLevel[id][3];
		
		if(Red || Green || Blue) {
			
			GlowLevel[id][0] = ((Red > 5) ? Red - 5 : 0);
			GlowLevel[id][1] = ((Green > 5) ? Green - 5 : 0);
			GlowLevel[id][2] = ((Blue > 5) ? Blue - 5	: 0);
			
			set_user_rendering(id, kRenderFxGlowShell, Red, Green, Blue, kRenderNormal, 16);
			set_task(0.2, "_Glow", TASK_GLOW + id);
			
		}
		
		else if(All) {
			GlowLevel[id][3] = ((All > 5)		? All - 5		: 0);
			
			set_user_rendering(id, kRenderFxGlowShell, All, All, All, kRenderNormal, 16);
			set_task(0.2, "_Glow", TASK_GLOW + id);
			
		}
		
		else {
			set_user_rendering(id);
		}
		
	}
}

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);
		cs_set_user_money(Killer, cs_get_user_money(Killer) + 300);
		
		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]);
}

XP_WinRound(Winner) {
	new Players[32], Num, i, id;
	get_players(Players, Num);
	
	for(i = 0; i < Num; i++) {
		id = Players[i];
		if(get_user_team(id) == Winner) {
			new Float:BonusXP
			(get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (WIN_ROUND * VIP_XP_MULTIPLIER)) : (BonusXP = WIN_ROUND)
			
			if(BonusXP) {
				new XP = floatround(BonusXP)
				set_user_xp(id, get_user_xp(id) + XP)
				ColorChat(id, "!gYou recieved!t %d XP!g for winning the round", XP);
			}
		}
	}
}

public GiveExperience(id, level, cid) {
	if(cmd_access(id, level, cid, 2)) {
		new arg[23], gplayers[32], num, i, players, name[32];
		get_user_name(id, name, 31);
		read_argv(1, arg, 23);
		new give_xp[10];
		read_argv(2, give_xp, charsmax(give_xp));
		new Experience = str_to_num(give_xp);
		if(equali(arg, "@All")) {
			get_players(gplayers, num, "ch");
			for(i = 0; i < num; i++) {
				players = gplayers[i];
				if(!is_user_connected(players))
					continue;
				set_user_xp(players, get_user_xp(players) + Experience);	
			}
			switch(get_cvar_num("amx_show_activity")) {
				case 1: ColorChat(0, "!tADMIN!g give!t %i XP!g to all!t Players.", Experience);
					case 2: ColorChat(0, "!t%s!g give!t %i XP!g to all!t Players.", name, Experience);
				}
		}
		new player = cmd_target(id, arg, 11);
		if(!player) {
			console_print(id, "Juctorul cu acel nume nu exista.");
		}
		else {
			set_user_xp(player, get_user_xp(player) + Experience);
			switch(get_cvar_num("amx_show_activity")) {
				case 1: ColorChat(player, "!tADMIN!g give you!t %i XP.", Experience);
					case 2: ColorChat(player, "!t%s!g give you!t %i XP.", name, Experience);
				}
		}
	}
}

public ResetExperience(id, level, cid) {
	if(cmd_access(id, level, cid, 2)) {
		new arg[23], gplayers[32], num, i, players, name[32];
		get_user_name(id, name, 31);
		read_argv(1, arg, 23);
		if(equali(arg, "@All")) {
			get_players(gplayers, num, "ch");
			for(i = 0; i < num; i++) {
				players = gplayers[i];
				if(!is_user_connected(players))
					continue;
				set_user_xp(players, 0);	
			}
			switch(get_cvar_num("amx_show_activity")) {
				case 1: ColorChat(0, "!tADMIN!g reset!t XP!g to all!t Players.");
					case 2: ColorChat(0, "!t%s!g reset!t XP!g to all!t Players.", name);
				}
		}
		new player = cmd_target(id, arg, 11);
		if(!player) {
			console_print(id, "Juctorul cu acel nume nu exista.");
		}
		else {
			set_user_xp(player, 0);	
			switch(get_cvar_num("amx_show_activity")) {
				case 1: ColorChat(player, "!tADMIN!g reset your!t Experience.");
					case 2: ColorChat(player, "!t%s!g reset your!t Experience.", name);
				}
		}
	}
}

// Save Experience
public SaveExperience(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", PlayerExperience[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(ExperienceFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(ExperienceFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(ExperienceFile, Save, -1)
	}
}

// Load Experience
public LoadExperience(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(ExperienceFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			PlayerExperience[id] = str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		PlayerExperience[id] = EXPERIENCE_LEVEL * 2
	}
}

#if defined POWER_UNHOLYAURA
// Save Unhloy Aura
public SaveUnholyAura(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", UnholyAura_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(UnholyAuraFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(UnholyAuraFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(UnholyAuraFile, Save, -1)
	}
}

// Load Unhloy Aura
public LoadUnholyAura(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(UnholyAuraFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			UnholyAura_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		UnholyAura_Level[id] = 1
	}
}
#endif

#if defined POWER_LEVITATION
// Save Levitation
public SaveLevitation(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", Levitation_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(LevitationFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(LevitationFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(LevitationFile, Save, -1)
	}
}

// Load Levitation
public LoadLevitation(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(LevitationFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			Levitation_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		Levitation_Level[id] = 0
	}
}
#endif

#if defined POWER_VAMPIRICAURA
// Save Vampiric Aura
public SaveVampiricAura(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", VampiricAura_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(VampiricAuraFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(VampiricAuraFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(VampiricAuraFile, Save, -1)
	}
}

// Load Vampiric Aura
public LoadVampiricAura(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(VampiricAuraFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			VampiricAura_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		VampiricAura_Level[id] = 0
	}
}
#endif

#if defined POWER_EVASION
// Save Evasion
public SaveEvasion(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", Evasion_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(EvasionFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(EvasionFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(EvasionFile, Save, -1)
	}
}

// Load Evasion
public LoadEvasion(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(EvasionFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			Evasion_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		Evasion_Level[id] = 0
	}
}
#endif

#if defined POWER_TRUESHOT
// Save True Shot
public SaveTrueShot(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", TrueShot_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(TrueShotFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(TrueShotFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(TrueShotFile, Save, -1)
	}
}

// Load True Shot
public LoadTrueShot(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(TrueShotFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			TrueShot_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		TrueShot_Level[id] = 0
	}
}
#endif

#if defined POWER_PHOENIX
// Save Phoenix
public SavePhoenix(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", Phoenix_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(PhoenixFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(PhoenixFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(PhoenixFile, Save, -1)
	}
}

// Load Phoenix
public LoadPhoenix(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(PhoenixFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			Phoenix_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		Phoenix_Level[id] = 0
	}
}
#endif

#if defined POWER_BANISH
// Save Banish
public SaveBanish(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", Banish_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(BanishFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(BanishFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(BanishFile, Save, -1)
	}
}

// Load Banish
public LoadBanish(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(BanishFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			Banish_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		Banish_Level[id] = 0
	}
}
#endif

#if defined POWER_DEVOTIONAURA
// Save Devotion Aura
public SaveDevotionAura(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", DevotionAura_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(DevotionAuraFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(DevotionAuraFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(DevotionAuraFile, Save, -1)
	}
}

// Load Devotion Aura
public LoadDevotionAura(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(DevotionAuraFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			DevotionAura_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		DevotionAura_Level[id] = 1
	}
}
#endif

#if defined POWER_BASH
// Save Bash
public SaveBash(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", Bash_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(BashFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(BashFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(BashFile, Save, -1)
	}
}

// Load Bash
public LoadBash(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(BashFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			Bash_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		Bash_Level[id] = 0
	}
}
#endif

#if defined POWER_CRITICALSTRIKE
// Save Critical Strike
public SaveCriticalStrike(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", CriticalStrike_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(CriticalStrikeFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(CriticalStrikeFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(CriticalStrikeFile, Save, -1)
	}
}

// Load Critical Strike
public LoadCriticalStrike(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(CriticalStrikeFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			CriticalStrike_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		CriticalStrike_Level[id] = 0
	}
}
#endif

#if defined POWER_CRITICALGRENADE
// Save Critical Grenade
public SaveCriticalGrenade(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", CriticalGrenade_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(CriticalGrenadeFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(CriticalGrenadeFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(CriticalGrenadeFile, Save, -1)
	}
}

// Load Critical Grenade
public LoadCriticalGrenade(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(CriticalGrenadeFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			CriticalGrenade_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		CriticalGrenade_Level[id] = 0
	}
}
#endif

#if defined POWER_SIPHONMANA
// Save Siphon Mana
public SaveSiphonMana(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", SiphonMana_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(SiphonManaFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(SiphonManaFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(SiphonManaFile, Save, -1)
	}
}

// Load Siphon Mana
public LoadSiphonMana(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(SiphonManaFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			SiphonMana_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		SiphonMana_Level[id] = 0
	}
}
#endif

#if defined POWER_HEALINGWAVE
// Save Healing Wave
public SaveHealingWave(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", HealingWave_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(HealingWaveFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(HealingWaveFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(HealingWaveFile, Save, -1)
	}
}

// Load Healing Wave
public LoadHealingWave(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(HealingWaveFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			HealingWave_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		HealingWave_Level[id] = 0
	}
}
#endif

#if defined POWER_SHADOWSTRIKE
// Save Shadow Strike
public SaveShadowStrike(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	static Data[1024]
	formatex(Data, sizeof(Data) - 1, "^"%i^"", ShadowStrike_Level[id])
	
	new Save[512]
	format(Save, 511, "^"%s^" %s", Name, Data)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(ShadowStrikeFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(ShadowStrikeFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer) {
		write_file(ShadowStrikeFile, Save, -1)
	}
}

// Load Shadow Strike
public LoadShadowStrike(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32];
	
	new FileOpen = fopen(ShadowStrikeFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31)
		
		if (equali(Arg1, Name)) {
			ShadowStrike_Level[id] = str_to_num(Arg2)
			PlayerCredits[id] += str_to_num(Arg2)
			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {
		ShadowStrike_Level[id] = 0
	}
}
#endif

#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 ColorChat(const id, const input[], any:...) {
	new count = 1, players[32];
	static msg[191];
	vformat(msg, 190, input, 3);
	
	replace_all(msg, 190, "!g", "^4");
	replace_all(msg, 190, "!y", "^1");
	replace_all(msg, 190, "!t", "^3");
	
	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\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
luchian2000
Membru, skill 0
Membru, skill 0
Posts: 50
Joined: 23 Dec 2013, 22:31
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Has thanked: 18 times
Contact:

22 Jun 2014, 19:42

Am bagat pluginul , tot imi zice ca nu este licentiat :(
Dupa ce mi se blocheaza imi arata acest lucru in consola http://imgur.com/X15xnX0
User avatar
Doctor whO? <3
Membru, skill +3
Membru, skill +3
Posts: 1197
Joined: 21 Jun 2013, 12:40
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Reputatie: Fost Membru Club eXtreamCS (doua luni)
Has thanked: 111 times
Been thanked: 76 times
Contact:

22 Jun 2014, 21:34

Ce host ai?
User avatar
Emi eXtream
Membru eXtream
Membru eXtream
Posts: 2233
Joined: 08 Feb 2012, 11:52
Detinator Steam: Da
CS Status: No status available.
SteamID: Privat.
Reputatie: Utilizator neserios(tepar)
Restrictie moderator
Fost moderator
Nume anterior: Synk12
Location: Neverland
Has thanked: 90 times
Been thanked: 49 times
Contact:

23 Jun 2014, 09:03

User avatar
SkillartzHD
Membru, skill +3
Membru, skill +3
Posts: 1096
Joined: 08 Feb 2013, 19:43
Detinator Steam: Da
CS Status: HLDS Vulnerability
Detinator server CS: GoldSrc
SteamID: SkillartzHD_hlds
Reputatie: Fost Moderator ajutator
Location: Bucuresti
Has thanked: 14 times
Been thanked: 28 times
Contact:

24 Jun 2014, 12:58

Code: Select all

static const ServerLicensedIp[ ] = "86.124.128.54";
Acolo iti bagi ip-ul la server (fara port)
Project by HLDS-Project 2017
Static Emulator : Native | Random Emulator : SettiEmu/AVSMP1/AVSMP0/SteamEmu/oldRevEmu/RevEmu is done
KickASS-HLDS v2 (hlds)
KickASS-HLDS v1 (fakedetector)
HL-ClientSteam exploit (pure hlds)
PLCore exploit (dproto&hlds)
FakeConnect 2.0(reunion&rehlds)
KickASS-HLDS v3 in amxx(hlds&rehlds)
...... time passes and evidence are many
Special thanks to Spanwer and Magister
Skype : spyware.spyware1
Steam : Click

SV_CheckForDuplicateNames V2 download
User avatar
Doctor whO? <3
Membru, skill +3
Membru, skill +3
Posts: 1197
Joined: 21 Jun 2013, 12:40
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Reputatie: Fost Membru Club eXtreamCS (doua luni)
Has thanked: 111 times
Been thanked: 76 times
Contact:

25 Jun 2014, 19:26

I-am rezolvat eu, dati TC.
Post Reply

Return to “Diverse”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 21 guests