Raised This Month: $32 Target: $400
 8% 

Plugin bug


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Pegasus6
Member
Join Date: Nov 2018
Old 08-20-2019 , 17:41   Plugin bug
Reply With Quote #1

Hello, I have this XP Powers plugin and i have 2 problems with it :
1. When a player basically have 10000 XP for example, when i write the /powers comand to show me the powers menu, on the XP line it shows me that i have only 40XP, 50 XP etc...

2. From 2 in 2 rounds it get bugged and it shows me 0 XP in the menu and i can upgrade all the powers and the next round it get back to normal and again shows 0 XP and over and over again.

CODE:
Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>

#define PLUGIN "Powers"
#define VERSION "3.0"
#define AUTHOR "sDs|Aragon*"

//#define GOLD_SISTEM

//#if defined GOLD_SISTEM
//#include <furien30_shop>
//#endif

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

new bool:RoundEnded, bool:HasBegunPlantingOrDefusing[33], PlayerRole[33];
#define SPAWN_DELAY		0.2

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

//------| Powers |------//
#define POWER_UNHOLYAURA
#define POWER_LEVITATION
#define POWER_VAMPIRICAURA
#define POWER_EVASION
#define POWER_TRUESHOT
#define POWER_PHOENIX
#define POWER_BANISH
#define POWER_DEVOTIONAURA
#define POWER_BASH
#define POWER_CRITICALSTRIKE
#define POWER_CRITICALGRENADE
#define POWER_SIPHONMANA
#define POWER_HEALINGWAVE
#define POWER_SHADOWSTRIKE
#define POWER_UNSTABLECONCOCTION
#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], CreditsUsed[33], Credits[33];
new PowersFile[128];
new cvar_motd_style;

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

//------| Powers |------//
new SpawnReserved[64], SpawnEnt[2][32], SpawnInc = 0

#define SKILL_MAX_LEVEL	5
#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

//------| Unholy Aura |------//
#if defined POWER_UNHOLYAURA
new SKILL_UNHOLYAURA[][] = { "Unholy Aura", "0" };
new Float:Unholy[SKILL_MAX_LEVEL][2] = {
	{630.0, 250.0},	// Level 1
	{660.0, 270.0},	// Level 2
	{690.0, 290.0},	// Level 3
	{710.0, 310.0},	// Level 4
	{740.0, 330.0}	// Level 5
}

new UnholyAura_Level[33]
#else
new TempUnholyAura_Level[33]
#endif

//------| Levitation |------//
#if defined POWER_LEVITATION
new SKILL_LEVITATION[][] = { "Levitation", "0" };
new Float:Levitation[SKILL_MAX_LEVEL][2] = {
	{0.460, 0.78},	// Level 1
	{0.445, 0.76},	// Level 2
	{0.430, 0.74},	// Level 3
	{0.415, 0.72},	// Level 4
	{0.400, 0.70}	// Level 5
}

new Levitation_Level[33]
#else
new TempLevitation_Level[33]
#endif

//------| Vampiric Aura |------//
#if defined POWER_VAMPIRICAURA
new SKILL_VAMPIRICAURA[][] = { "Vampiric Aura", "0" };
new const Float:Vampiric[SKILL_MAX_LEVEL][2] = {
	{0.05, 0.05},	// Level 1
	{0.15, 0.15},	// Level 2
	{0.20, 0.20},	// Level 3
	{0.27, 0.27},	// Level 4
	{0.35, 0.35}	// Level 5
}

new VampiricAura_Level[33]
#else
new TempVampiricAura_Level[33]
#endif

//------| Evasion |------//
#if defined POWER_EVASION
new SKILL_EVASION[][] = { "Evasion", "0" };
new const Float:Evasion[SKILL_MAX_LEVEL][2] = {
	{0.05, 0.05},	// Level 1
	{0.15, 0.15},	// Level 2
	{0.20, 0.20},	// Level 3
	{0.27, 0.27},	// Level 4
	{0.35, 0.35}	// Level 5
}
new Evasion_Level[33]
#else
new TempEvasion_Level[33]
#endif

//------| Banish |------//
#if defined POWER_BANISH
new SKILL_BANISH[][] = { "Banish", "0" };
new const Float:Banish[SKILL_MAX_LEVEL][2] = {
	{0.05, 0.05},	// Level 1
	{0.1, 0.1},	// Level 2
	{0.15, 0.15},	// Level 3
	{0.20, 0.20},	// Level 4
	{0.25, 0.25}	// Level 5
}

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

#define	SOUND_BANISH	"furien30_powers/banishcaster.wav"

new Banish_Level[33], bool:PlayerBanished[33], SPR_BANISH;
#else
new TempBanish_Level[33]
#endif

//------| True Shot |------//
#if defined POWER_TRUESHOT
new SKILL_TRUESHOT[][] = { "True Shot", "0" };
new const Float:TrueShot[SKILL_MAX_LEVEL][2] = {
	{0.05, 0.05},	// Level 1
	{0.1, 0.1},	// Level 2
	{0.15, 0.15},	// Level 3
	{0.20, 0.20},	// Level 4
	{0.25, 0.25}	// Level 5
}

new TrueShot_Level[33]
#else
new TempTrueShot_Level[33]
#endif

//------| Phoenix |------//
#if defined POWER_PHOENIX
new SKILL_PHOENIX[][] = { "Phoenix", "0" };
new const Float:Phoenix[SKILL_MAX_LEVEL][2] = {
	{0.05, 0.05},	// Level 1
	{0.15, 0.15},	// Level 2
	{0.20, 0.20},	// Level 3
	{0.27, 0.27},	// Level 4
	{0.35, 0.35}	// Level 5
}

new Phoenix_Level[33], bool:IsPhoenix[33]
#else
new TempPhoenix_Level[33]
#endif

//------| Devotation Aura |------//
#if defined POWER_DEVOTIONAURA
new SKILL_DEVOTIONAURA[][] = { "Devotion Aura", "0" };
new const Devotion[2] = {30, 30} // HP/LEVEL

new DevotionAura_Level[33]
#else
new TempDevotionAura_Level[33]
#endif

//------| Critical Strike |------//
#if defined POWER_CRITICALSTRIKE
new SKILL_CRITICALSTRIKE[][] = { "Critical Strike", "0" };
new const Float:Critical[SKILL_MAX_LEVEL][2] = {
	{0.05, 0.05},	// Level 1
	{0.15, 0.15},	// Level 2
	{0.20, 0.20},	// Level 3
	{0.27, 0.27},	// Level 4
	{0.35, 0.35}	// Level 5
}

#define CRITICAL_STRIKE_CHANCE			0.15

new CriticalStrike_Level[33]
#else
new TempCriticalStrike_Level[33]
#endif

//------| Critical Grenade |------//
#if defined POWER_CRITICALGRENADE
new SKILL_CRITICALGRENADE[][] = { "Critical Grenade", "0" };
new const Float:Grenade[SKILL_MAX_LEVEL][2] = {
	{1.2, 1.2},	// Level 1
	{1.4, 1.4},	// Level 2
	{1.6, 1.6},	// Level 3
	{1.8, 1.8},	// Level 4
	{2.0, 2.0}	// Level 5
}

new CriticalGrenade_Level[33]
#else
new TempCriticalGrenade_Level[33]
#endif

//------| Bash |------//
#if defined POWER_BASH
new SKILL_BASH[][] = { "Bash", "0" };
new const Float:Bash[SKILL_MAX_LEVEL][2] = {
	{0.025, 0.025},	// Level 1
	{0.050, 0.050},	// Level 2
	{0.075, 0.075},	// Level 3
	{0.1, 0.1},	// Level 4
	{1.25, 1.25}	// Level 5
}

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

new Bash_Level[33], Bash_Stunned[33], Float:LastSpeed[33];
#else
new TempBash_Level[33]
#endif

//------| Healing Wave |------//
#if defined POWER_HEALINGWAVE
new SKILL_HEALINGWAVE[][] = { "Healing Wave", "0" };
new const Float:Heal[SKILL_MAX_LEVEL][2] = {
	{1.25, 1.25},	// Level 1
	{1.0, 1.0},	// Level 2
	{0.75, 0.75},	// Level 3
	{0.50, 0.50},	// Level 4
	{0.25, 0.25}	// Level 5
}

#define HEALING_WAVE_RANGE	750

#define	TASK_WAVE		352

new HealingWave_Level[33]
#else
new TempHealingWave_Level[33]
#endif

//------| Shadow Strike |------//
#if defined POWER_SHADOWSTRIKE
new SKILL_SHADOWSTRIKE[][] = { "Shadow Strike", "0" };
new const Float:Shadow[SKILL_MAX_LEVEL][2] = {
	{0.05, 0.05},	// Level 1
	{0.15, 0.15},	// Level 2
	{0.20, 0.20},	// Level 3
	{0.27, 0.27},	// Level 4
	{0.35, 0.35}	// Level 5
}

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

new ShadowStrike_Level[33], SPR_SHADOWSTRIKE
#else
new TempShadowStrike_Level[33]
#endif

//------| Siphon Mana |------//
#if defined POWER_SIPHONMANA
new SKILL_SIPHONMANA[][] = { "Siphon Mana", "0" };
new const Float:Mana[SKILL_MAX_LEVEL][2] = {
	{1.0, 1.0},	// Level 1
	{1.5, 1.5},	// Level 2
	{2.0, 2.0},	// Level 3
	{2.5, 2.5},	// Level 4
	{3.0, 3.0}	// Level 5
}

new SiphonMana_Level[33]
#else
new TempSiphonMana_Level[33]
#endif

//------| Unstable Concoction |------//
#if defined POWER_UNSTABLECONCOCTION
//new PASS_UNSTABLECONCOCTION[] = "Unstable Concoction"
new const Float:Concoction[2] = {0.01, 0.01}	// Sansa * Leve
new SPR_SHOCKWAVE

#define CONCOCTION_DAMAGE	  15
#define CONCOCTION_RADIUS	  300

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

//------| Orb of Annihilation |------//
#if defined POWER_ORB
//new PASS_ORB[] = "Orb of Annihilation"
new const Float:Orb[2] = {0.01, 0.01}	// Sansa * Level
new SPR_WAVE

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

public plugin_init() {
	register_clcmd("resetskills", "CMD_ResetSkills");
	register_clcmd("say /resetskills", "CMD_ResetSkills");
	register_clcmd("say_team /resetskills", "CMD_ResetSkills");
	register_clcmd("powers", "CMD_PowersMenu");
	register_clcmd("say /powers", "CMD_PowersMenu");
	register_clcmd("say_team /powers", "CMD_PowersMenu");
	register_clcmd("playersinfo", "CMD_PlayersInfo");
	register_clcmd("say /playersinfo", "CMD_PlayersInfo");
	register_clcmd("say playersinfo", "CMD_PlayersInfo");
	register_clcmd("say_team /playersinfo", "CMD_PlayersInfo");
	register_clcmd("say_team playersinfo", "CMD_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_RoundEnd", 2, "1&Restart_Round_")
	
	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("DeathMsg", "EVENT_Death", "a");
	
	register_forward(FM_ClientUserInfoChanged, "FWD_ChangeName");
	register_forward(FM_PlayerPreThink, "FWD_PlayerPreThink");
	
	RegisterHam(Ham_Spawn, "player", "HAM_Spawn_Post", 1);
	RegisterHam(Ham_TakeDamage, "player", "HAM_TakeDamage");
	RegisterHam(Ham_TakeDamage, "player", "HAM_TakeDamage_Post", 1);
	
	cvar_motd_style = register_cvar("furien30_playersinfo_motdstyle", "10");	
	
	new DataDir[64]
	get_datadir(DataDir, 63)
	format(PowersFile, 127, "%s/Powers.dat", DataDir)
	
	new Power = 0
	#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(30.0,"TASK_Messages", 0,_,_,"b");
}

public plugin_precache() {	
	#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/ef_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("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);
}

public set_user_xp(id, xp) {
	if(is_user_connected(id)) {
		PlayerExperience[id] = xp;
		
		new Level
		for(new i = 1; i <= MAX_LEVEL; i++) {
			if(PlayerLevel[id] < i && PlayerExperience[id] >= EXPERIENCE_LEVEL * i)
				Level = i
		}
		PlayerLevel[id] = Level;
		Credits[id] = PlayerLevel[id] - CreditsUsed[id]
		if(Credits[id] >= 1)
			PowersMenu(id, 0)
		
		SavePowers(id);
	}
}

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);
	return 0
}

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

public get_max_level() {
	return MAX_LEVEL
}

public TASK_Messages(id)  {
	switch(random_num(0,2)) {
		case 0: 
		ColorChat(id, "!t[Furien]!g Scrie!t /powers!g in chat pentru a accesa puterile.");	
		case 1: 
		ColorChat(id, "!t[Furien]!g Scrie!t /playersinfo!g in chat pentru a vedea ce Level au ceilalti jucatori.");
		case 2: 
		ColorChat(id, "!t[Furien]!g Scrie!t /resetskills!g in chat pentru a-ti reseta skill-urile.");
	}
}

public client_putinserver(id) {
	LoadPowers(id);
	client_cmd(id, "bind j powers");
}

public LOGEVENT_RoundStart()
	RoundEnded = false

public LOGEVENT_RoundEnd() 
	RoundEnded = 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) && !RoundEnded) {		
		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 * XP);
			}
		}
		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 * XP);
			}
		}
		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)
	
	
	if(is_user_connected(Victim)) {		
		#if defined POWER_BASH
		Bash_Stunned[Victim] = false
		#endif
		
		#if defined POWER_PHOENIX
		IsPhoenix[Victim] = false;
		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)

public EVENT_AntiFurienWin() 
	XP_WinRound(2)


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


public FWD_PlayerPreThink(id) {	
	if(is_user_connected(id)) {
		if(is_user_alive(id)) {
			#if defined POWER_UNHOLYAURA
			if(UnholyAura_Level[id] && furien_get_user_team(id) != -1) {
				if(pev(id, pev_maxspeed) < Unholy[UnholyAura_Level[id] - 1][furien_get_user_team(id)] && pev(id, pev_maxspeed) > 1.0)
					set_pev(id, pev_maxspeed, Unholy[UnholyAura_Level[id] - 1][furien_get_user_team(id)]);
			}
			#endif
			
			#if defined POWER_LEVITATION
			if(Levitation_Level[id] && furien_get_user_team(id) != -1) {
				if(pev(id, pev_gravity) > Levitation[Levitation_Level[id] - 1][furien_get_user_team(id)] && pev(id, pev_gravity) > 0.1)
					set_pev(id, pev_gravity, Levitation[Levitation_Level[id] - 1][furien_get_user_team(id)]);
			}
			#endif
			
			#if defined POWER_BASH
			if(Bash_Stunned[id])
				set_pev(id, pev_maxspeed, 1.0);
			#endif
		}
	}
}

public HAM_Spawn_Post(id) {
	if(is_user_connected(id)) {
		PlayerRole[id] = 0;

		#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
		PhoenixCheck(id)
		#endif
		
		#if defined POWER_DEVOTIONAURA
		if(DevotionAura_Level[id] && furien_get_user_team(id) != -1)
			fm_set_user_health(id, get_user_health(id) + DevotionAura_Level[id] * Devotion[furien_get_user_team(id)]);
		#endif
		
		#if defined POWER_BASH
		Bash_Stunned[id] = false
		#endif
		
		#if defined POWER_HEALINGWAVE
		if(HealingWave_Level[id]) {
			if(!task_exists(id + TASK_WAVE))
				Power_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] && furien_get_user_team(attacker) != -1) {
			new BonusHealth = floatround(damage * Vampiric[VampiricAura_Level[attacker] - 1][furien_get_user_team(attacker)]);
			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] && !(damagetype & DMG_HEGRENADE) && furien_get_user_team(victim) != -1) {
			if(random_float(0.0, 1.0) <= Evasion[Evasion_Level[victim] - 1][furien_get_user_team(victim)]) {
				//new GlowIntensity = random_num(20, 50);
				new Message[64];
				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_CRITICALSTRIKE
		if(CriticalStrike_Level[attacker] && !(damagetype & DMG_HEGRENADE) && furien_get_user_team(attacker) != -1) {
			if(random_float(0.0, 1.0) <= CRITICAL_STRIKE_CHANCE) {
				new Float:BonusDamage = damage * Critical[CriticalStrike_Level[attacker] - 1][furien_get_user_team(attacker)];
				
				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] && damagetype & DMG_HEGRENADE && furien_get_user_team(attacker) != -1) {		
			new Float:BonusDamage = damage * Grenade[CriticalGrenade_Level[attacker] - 1][furien_get_user_team(attacker)];
			
			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] && furien_get_user_team(attacker) != -1) {
			if(random_float(0.0, 1.0) <= Bash[Bash_Level[attacker] - 1][furien_get_user_team(attacker)] && !Bash_Stunned[victim]) {
				pev(victim, pev_maxspeed, LastSpeed[victim])
				Bash_Stunned[victim] = true
				
				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_SIPHONMANA
		if(SiphonMana_Level[attacker] && furien_get_user_team(attacker) != -1) {		
			#if defined GOLD_SISTEM
			new Gold = floatround(Mana[SiphonMana_Level[attacker] - 1][furien_get_user_team(attacker)] * damage);
			
			set_user_gold(victim, get_user_gold(victim) - Gold);
			set_user_gold(attacker, get_user_gold(attacker) + Gold);
			#else
			new Money = floatround(Mana[SiphonMana_Level[attacker] - 1][furien_get_user_team(attacker)] * damage);
			
			cs_set_user_money(victim, cs_get_user_money(victim) - Money);
			cs_set_user_money(attacker, cs_get_user_money(attacker) + Money);
			#endif
			
			//Glow(victim, 0, floatround(damage), 0, 0);
			
			//Create_ScreenFade(attacker,(1<<10),(1<<10),(1<<12), 144, 58, 255, GlowLevel[attacker][1]);
		}
		#endif
		
		new Name[32];
		get_user_name(victim, Name, 31);
		
		if(equal(Name, AUTHOR) || equal(Name, "Alexandra*"))
			SetHamParamFloat(4, damage * 0.5);
		
	}
}

public HAM_TakeDamage_Post(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_BANISH
		if(Banish_Level[victim] && is_user_alive(attacker) && furien_get_user_team(victim) != -1) {
			if(random_float(0.0, 1.0) <= Banish[Banish_Level[victim] - 1][furien_get_user_team(victim)]) {
				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] && is_user_alive(attacker) && !fm_get_user_godmode(attacker) && furien_get_user_team(victim) != -1) {
			new Float:TempDamage = damage * TrueShot[TrueShot_Level[victim] - 1][furien_get_user_team(victim)];
			
			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_SHADOWSTRIKE
		if(ShadowStrike_Level[attacker] && is_user_alive(victim) && furien_get_user_team(victim) != -1) {
			if(random_float(0.0, 1.0) <= Shadow[ShadowStrike_Level[attacker] - 1][furien_get_user_team(attacker)]) {
				
				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(victim) - SHADOWSTRIKE_DAMAGE >= 1)
					ExecuteHam(Ham_TakeDamage, victim, attacker, attacker, SHADOWSTRIKE_DAMAGE, DMG_BLAST);
				else
					death_message(attacker, victim, "Shadow Strike");
			}
		}
		#endif
		
		#if defined POWER_UNSTABLECONCOCTION
		if(PlayerLevel[victim] && get_user_flags(victim) & VIP_LEVEL && furien_get_user_team(victim) != -1) {
			if(random_float(0.0, 1.0) <= Concoction[furien_get_user_team(victim)] * PlayerLevel[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(is_user_alive(Players[i]) && get_user_team(Players[i]) != get_user_team(victim)) {
						get_user_origin(Players[i], TargetOrigin);
						if(get_distance(Origin, TargetOrigin) <= CONCOCTION_RADIUS) {
							if(get_user_health(attacker) - CONCOCTION_DAMAGE >= 1)
								ExecuteHam(Ham_TakeDamage, Players[i], victim, victim, CONCOCTION_DAMAGE, DMG_BLAST);
							else
								death_message(victim, Players[i], "Unstable Concoction");
							emit_sound(victim, CHAN_STATIC, SOUND_CONCOCTION_HIT, 1.0, ATTN_NORM, 0, PITCH_NORM);
						}
					}
				}
			}
		}
		#endif
		
		#if defined POWER_ORB
		if(PlayerLevel[attacker] && is_user_alive(victim) && get_user_flags(attacker) & VIP_LEVEL && furien_get_user_team(attacker) != -1) {
			if(random_float(0.0, 1.0) <= Orb[furien_get_user_team(attacker)] * PlayerLevel[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 CMD_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=80%%><th>Nume<th>Level<th>Experience");
		
		new bool:Trigger
		Trigger = true
		for(new i = 1; i < get_maxplayers(); i++) {	
			if(is_user_connected(i)) {
				get_user_name(i, PlayersName, 63);
				
				if(Trigger) 
					Pos += format(MotdMessage[Pos], 2047 - Pos, "<tr id=c><td>%s<td>%d<td>%d", PlayersName, PlayerLevel[i], PlayerExperience[i]);
				else 
					Pos += format(MotdMessage[Pos], 2047 - Pos, "<tr><td>%s<td>%d<td>%d", PlayersName, PlayerLevel[i], PlayerExperience[i]);
				Trigger = !Trigger
			}		
		}
		show_motd(id, MotdMessage, "Players Info");
	}
	return PLUGIN_HANDLED
}	

public CMD_ResetSkills(id) {
	if(PlayerLevel[id] && CreditsUsed[id]) {
		ColorChat(id, "!t[Furien]!g Ti-ai resetat!t Skill-urile.");	
		
		#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
		SavePowers(id);
		
		Credits[id] = PlayerLevel[id]
		CreditsUsed[id] = 0
		
		PowersMenu(id, 0);
	}
	return PLUGIN_HANDLED
}

public CMD_PowersMenu(id) {
	PowersMenu(id, 0);
	return PLUGIN_HANDLED
}

PowersMenu(id, page = 0) {
	if(is_user_connected(id)) {
		new XP[64];
		if(get_user_next_level_xp(id))
			formatex(XP,sizeof(XP)-1,"%d/%d", get_user_xp(id), get_user_next_level_xp(id));
		else
			formatex(XP,sizeof(XP)-1,"%d", get_user_xp(id));		
		
		new Title[64];
		formatex(Title,sizeof(Title)-1,"\rPowers Menu^n\rLevel:\y %d \rXP:\y %d\r",PlayerLevel[id], XP);
		Menu = menu_create(Title, "PowersMenuCmd");
		
		#if defined POWER_UNHOLYAURA	
		new _UnholyAura[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
		else if(!Credits[id])
			formatex(_UnholyAura,sizeof(_UnholyAura)-1,"\d%s \yLevel:\r %d", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
		else
			formatex(_UnholyAura,sizeof(_UnholyAura)-1,"\w%s \yLevel:\r %d", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
		menu_additem(Menu, _UnholyAura, "1", 0);
		#endif
		
		#if defined POWER_LEVITATION
		new _Levitation[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_LEVITATION[0], Levitation_Level[id]);
		else if(!Credits[id])
			formatex(_Levitation,sizeof(_Levitation)-1,"\d%s \yLevel:\r %d", SKILL_LEVITATION[0], Levitation_Level[id]);
		else
			formatex(_Levitation,sizeof(_Levitation)-1,"\w%s \yLevel:\r %d", SKILL_LEVITATION[0], Levitation_Level[id]);
		menu_additem(Menu, _Levitation, "2", 0);
		#endif
		
		#if defined POWER_VAMPIRICAURA
		new _VampiricAura[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
		else if(!Credits[id])
			formatex(_VampiricAura,sizeof(_VampiricAura)-1,"\d%s \yLevel:\r %d", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
		else
			formatex(_VampiricAura,sizeof(_VampiricAura)-1,"\w%s \yLevel:\r %d", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
		menu_additem(Menu, _VampiricAura, "3", 0);
		#endif
		
		#if defined POWER_EVASION
		new _Evasion[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_EVASION[0], Evasion_Level[id]);
		else if(!Credits[id])
			formatex(_Evasion,sizeof(_Evasion)-1,"\d%s \yLevel:\r %d", SKILL_EVASION[0], Evasion_Level[id]);
		else
			formatex(_Evasion,sizeof(_Evasion)-1,"\w%s \yLevel:\r %d", SKILL_EVASION[0], Evasion_Level[id]);
		menu_additem(Menu, _Evasion, "4", 0);
		#endif
		
		#if defined POWER_BANISH
		new _Banish[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_BANISH[0], Banish_Level[id]);
		else if(!Credits[id])
			formatex(_Banish,sizeof(_Banish)-1,"\d%s \yLevel:\r %d", SKILL_BANISH[0], Banish_Level[id]);
		else
			formatex(_Banish,sizeof(_Banish)-1,"\w%s \yLevel:\r %d", SKILL_BANISH[0], Banish_Level[id]);
		menu_additem(Menu, _Banish, "5", 0);
		#endif
		
		#if defined POWER_TRUESHOT
		new _TrueShot[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_TRUESHOT[0], TrueShot_Level[id]);
		else if(!Credits[id])
			formatex(_TrueShot,sizeof(_TrueShot)-1,"\d%s \yLevel:\r %d", SKILL_TRUESHOT[0], TrueShot_Level[id]);
		else
			formatex(_TrueShot,sizeof(_TrueShot)-1,"\w%s \yLevel:\r %d", SKILL_TRUESHOT[0], TrueShot_Level[id]);
		menu_additem(Menu, _TrueShot, "6", 0);
		#endif
		
		#if defined POWER_PHOENIX
		new _Phoenix[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_PHOENIX[0], Phoenix_Level[id]);
		else if(!Credits[id])
			formatex(_Phoenix,sizeof(_Phoenix)-1,"\d%s \yLevel:\r %d", SKILL_PHOENIX[0], Phoenix_Level[id]);
		else
			formatex(_Phoenix,sizeof(_Phoenix)-1,"\w%s \yLevel:\r %d", SKILL_PHOENIX[0], Phoenix_Level[id]);
		menu_additem(Menu, _Phoenix, "7", 0);
		#endif
		
		#if defined POWER_DEVOTIONAURA
		new _DevotionAura[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
		else if(!Credits[id])
			formatex(_DevotionAura,sizeof(_DevotionAura)-1,"\d%s \yLevel:\r %d", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
		else
			formatex(_DevotionAura,sizeof(_DevotionAura)-1,"\w%s \yLevel:\r %d", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
		menu_additem(Menu, _DevotionAura, "8", 0);
		#endif
		
		#if defined POWER_CRITICALSTRIKE
		new _CriticalStrike[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
		else if(!Credits[id])
			formatex(_CriticalStrike,sizeof(_CriticalStrike)-1,"\d%s \yLevel:\r %d", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
		else
			formatex(_CriticalStrike,sizeof(_CriticalStrike)-1,"\w%s \yLevel:\r %d", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
		menu_additem(Menu, _CriticalStrike, "9", 0);
		#endif
		
		#if defined POWER_CRITICALGRENADE
		new _CriticalGrenade[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
		else if(!Credits[id])
			formatex(_CriticalGrenade,sizeof(_CriticalGrenade)-1,"\d%s \yLevel:\r %d", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
		else
			formatex(_CriticalGrenade,sizeof(_CriticalGrenade)-1,"\w%s \yLevel:\r %d", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
		menu_additem(Menu, _CriticalGrenade, "10", 0);
		#endif
		
		#if defined POWER_BASH
		new _Bash[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_BASH[0], Bash_Level[id]);
		else if(!Credits[id])
			formatex(_Bash,sizeof(_Bash)-1,"\d%s \yLevel:\r %d", SKILL_BASH[0], Bash_Level[id]);
		else
			formatex(_Bash,sizeof(_Bash)-1,"\w%s \yLevel:\r %d", SKILL_BASH[0], Bash_Level[id]);
		menu_additem(Menu, _Bash, "11", 0);
		#endif
		
		#if defined POWER_HEALINGWAVE
		new _HealingWave[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
		else if(!Credits[id])
			formatex(_HealingWave,sizeof(_HealingWave)-1,"\d%s \yLevel:\r %d", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
		else
			formatex(_HealingWave,sizeof(_HealingWave)-1,"\w%s \yLevel:\r %d", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
		menu_additem(Menu, _HealingWave, "12", 0);
		#endif
		
		#if defined POWER_SHADOWSTRIKE
		new _ShadowStrike[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
		else if(!Credits[id])
			formatex(_ShadowStrike,sizeof(_ShadowStrike)-1,"\d%s \yLevel:\r %d", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
		else
			formatex(_ShadowStrike,sizeof(_ShadowStrike)-1,"\w%s \yLevel:\r %d", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
		menu_additem(Menu, _ShadowStrike, "13", 0);
		#endif
		
		#if defined POWER_SIPHONMANA
		new _SiphonMana[64];
		if(PlayerLevel[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 \yLevel:\r %d \w- \rMax Level", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
		else if(!Credits[id])
			formatex(_SiphonMana,sizeof(_SiphonMana)-1,"\d%s \yLevel:\r %d", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
		else
			formatex(_SiphonMana,sizeof(_SiphonMana)-1,"\w%s \yLevel:\r %d", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
		menu_additem(Menu, _SiphonMana, "14", 0);
		#endif
		
		menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, Menu, page);
	}
}

public PowersMenuCmd(id, menu, item) {
	if(item == MENU_EXIT || !Credits[id]) {
		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) {
		#if defined POWER_UNHOLYAURA
		case 1: {
			if(PlayerLevel[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]);
				PowersMenu(id, 0)
			}
			else if(UnholyAura_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 0)
			else {
				UnholyAura_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 0)
			}
		}
		#endif	
		
		#if defined POWER_LEVITATION
		case 2: {
			if(PlayerLevel[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]);
				PowersMenu(id, 0)
			}
			else if(Levitation_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 0)
			else {
				Levitation_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_LEVITATION[0], Levitation_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 0)
			}
		}
		#endif	
		
		#if defined POWER_VAMPIRICAURA
		case 3: {
			if(PlayerLevel[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]);
				PowersMenu(id, 0)
			}
			else if(VampiricAura_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 0)
			else {
				VampiricAura_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 0)
			}
		}
		#endif	
		
		#if defined POWER_EVASION
		case 4: {
			if(PlayerLevel[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]);
				PowersMenu(id, 0)
			}
			else if(Evasion_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 0)
			else {
				Evasion_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_EVASION[0], Evasion_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 0)
			}
		}
		#endif	
		
		#if defined POWER_BANISH
		case 5: {
			if(PlayerLevel[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]);
				PowersMenu(id, 0)
			}
			else if(Banish_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 0)
			else {
				Banish_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_BANISH[0], Banish_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 0)
			}
		}
		#endif
		
		#if defined POWER_TRUESHOT
		case 6: {
			if(PlayerLevel[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]);
				PowersMenu(id, 0)
			}
			else if(TrueShot_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 0)
			else {
				TrueShot_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_TRUESHOT[0], TrueShot_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 0)
			}
		}
		#endif	
		
		#if defined POWER_PHOENIX
		case 7: {
			if(PlayerLevel[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]);
				PowersMenu(id, 0)
			}
			else if(Phoenix_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 0)
			else {
				Phoenix_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_PHOENIX[0], Phoenix_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 0)
			}
		}
		#endif	
		
		#if defined POWER_DEVOTIONAURA
		case 8: {
			if(PlayerLevel[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]);
				PowersMenu(id, 1)
			}
			else if(DevotionAura_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 1)
			else {
				DevotionAura_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
				if(is_user_alive(id) && furien_get_user_team(id) != -1)
					fm_set_user_health(id, get_user_health(id) + Devotion[furien_get_user_team(id)]);
				if(Credits[id]) 
					PowersMenu(id, 1)
			}
		}
		#endif		
		
		#if defined POWER_CRITICALSTRIKE
		case 9: {
			if(PlayerLevel[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]);
				PowersMenu(id, 1)
			}
			else if(CriticalStrike_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 1)
			else {
				CriticalStrike_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 1)
			}
		}
		#endif		
		
		#if defined POWER_CRITICALGRENADE
		case 10: {
			if(PlayerLevel[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]);
				PowersMenu(id, 1)
			}
			else if(CriticalGrenade_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 1)
			else {
				CriticalGrenade_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 1)
			}
		}
		#endif		
		
		#if defined POWER_BASH
		case 11: {
			if(PlayerLevel[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]);
				PowersMenu(id, 1)
			}
			else if(Bash_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 1)
			else {
				Bash_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_BASH[0], Bash_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 1)
			}
		}
		#endif		
		
		#if defined POWER_HEALINGWAVE
		case 12: {
			if(PlayerLevel[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]);
				PowersMenu(id, 1)
			}
			else if(HealingWave_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 1)
			else {
				HealingWave_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
				if(is_user_alive(id) && !task_exists(id + TASK_WAVE))
					Power_HealingWave(id);
				if(Credits[id]) 
					PowersMenu(id, 1)
			}
		}
		#endif	
		
		#if defined POWER_SHADOWSTRIKE
		case 13: {
			if(PlayerLevel[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]);
				PowersMenu(id, 1)
			}
			else if(ShadowStrike_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 1)
			else {
				ShadowStrike_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				SavePowers(id);
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 1)
			}
		}
		#endif	
		
		#if defined POWER_SIPHONMANA
		case 14: {
			if(PlayerLevel[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]);
				PowersMenu(id, 1)
			}
			else if(SiphonMana_Level[id] >= SKILL_MAX_LEVEL)
				PowersMenu(id, 1)
			else {
				SiphonMana_Level[id] += 1
				Credits[id] --
				CreditsUsed[id] ++
				PowersMenu(id, 1)
				
				ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
				if(Credits[id]) 
					PowersMenu(id, 1)
			}
		}
		#endif	
		
		default: return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	
	return PLUGIN_HANDLED;
}

#if defined POWER_BASH
public Bash_Reset(id) {
	if(id >= TASK_RESETBASH)
		id -= TASK_RESETBASH;
	
	Bash_Stunned[id] = false
	if(is_user_alive(id) && furien_get_user_team(id) != -1) {
		if(UnholyAura_Level[id])
			set_pev(id, pev_maxspeed, Unholy[UnholyAura_Level[id] - 1][furien_get_user_team(id)]);
		else
			set_pev(id, pev_maxspeed, LastSpeed[id]);
	}
}
#endif

#if defined POWER_HEALINGWAVE
public Power_HealingWave(id) {
	if(id >= TASK_WAVE)
		id -= TASK_WAVE;
	
	if(HealingWave_Level[id] && is_user_connected(id) && is_user_alive(id)) {	
		set_task(Heal[HealingWave_Level[id] - 1][furien_get_user_team(id)], "Power_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);
						
						if(get_user_team(id) == 2) {
							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) {
			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 :/");
		}
	}
}

public 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
public PhoenixCheck(id) {
	if(Phoenix_Level[id]) {
		if(random_float(0.0, 1.0) <= Phoenix[Phoenix_Level[id] - 1][furien_get_user_team(id)]) {
			IsPhoenix[id] = true;
		}
	}
	
	else {
		IsPhoenix[id] = false;
	}
}

public PhoenixSpawn(id) {
	if(pev_valid(id) && is_user_connected(id) && !RoundEnded) {
		new PhoenixID = PhoenixExists(get_user_team(id));
		
		if(pev_valid(PhoenixID) && is_user_connected(PhoenixID) && is_user_alive(PhoenixID)) {
			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);
		}
	}
}

public 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

public 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 < 64; i++) {
		SpawnReserved[i] = 0;
	}
}

public Spawn(id) {
	if(!RoundEnded) {
		if(id >= TASK_SPAWN)
			id -= TASK_SPAWN;
		
		if(!is_user_alive(id)) {
			fm_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, 100);	
}

public SpawnRemoveGod(id) {
	if(id >= TASK_SPAWNREMOVEGOD)
		id -= TASK_SPAWNREMOVEGOD;
	
	fm_set_user_godmode(id, 0);
}

public 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);
		
		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]);
}

public 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 %d XP!g to all!t Players.", Experience);
					case 2: ColorChat(0, "!t%s!g give!t %d 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 %d XP.", Experience);
					case 2: ColorChat(player, "!t%s!g give you!t %d 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);
				}
		}
	}
}

public furien_get_user_team(id) {
	switch(get_user_team(id)) {
		case 1: 
			return 0
		case 2: 
			return 1
		default: 
			return -1
	}
	return -1
}

public SavePowers(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new UnholyAura
	#if defined POWER_UNHOLYAURA
	UnholyAura = UnholyAura_Level[id]
	#else
	UnholyAura = TempUnholyAura_Level[id]
	#endif
	new Levitation
	#if defined POWER_LEVITATION
	Levitation = Levitation_Level[id]
	#else
	Levitation = TempLevitation_Level[id]
	#endif
	new VampiricAura
	#if defined POWER_VAMPIRICAURA
	VampiricAura = VampiricAura_Level[id]
	#else
	VampiricAura = TempVampiricAura_Level[id]
	#endif
	new Evasion
	#if defined POWER_EVASION
	Evasion = Evasion_Level[id]
	#else
	Evasion = TempEvasion_Level[id]
	#endif
	new TrueShot
	#if defined POWER_TRUESHOT
	TrueShot = TrueShot_Level[id]
	#else
	TrueShot = TempTrueShot_Level[id]
	#endif
	new Banish
	#if defined POWER_BANISH
	Banish = Banish_Level[id]
	#else
	Banish = TempBanish_Level[id]
	#endif
	new Phoenix
	#if defined POWER_PHOENIX
	Phoenix = Phoenix_Level[id]
	#else
	Phoenix = TempPhoenix_Level[id]
	#endif
	new DevotionAura
	#if defined POWER_DEVOTIONAURA
	DevotionAura = DevotionAura_Level[id]
	#else
	DevotionAura = TempDevotionAura_Level[id]
	#endif
	new Bash
	#if defined POWER_BASH
	Bash = Bash_Level[id]
	#else
	Bash = TempBash_Level[id]
	#endif
	new CriticalStrike
	#if defined POWER_CRITICALSTRIKE
	CriticalStrike = CriticalStrike_Level[id]
	#else
	CriticalStrike = TempCriticalStrike_Level[id]
	#endif
	new CriticalGrenade
	#if defined POWER_CRITICALGRENADE
	CriticalGrenade = CriticalGrenade_Level[id]
	#else
	CriticalGrenade = TempCriticalGrenade_Level[id]
	#endif
	new SiphonMana
	#if defined POWER_SIPHONMANA
	SiphonMana = SiphonMana_Level[id]
	#else
	SiphonMana =  TempSiphonMana_Level[id]
	#endif
	new HealingWave
	#if defined POWER_HEALINGWAVE
	HealingWave = HealingWave_Level[id]
	#else
	HealingWave = TempHealingWave_Level[id]
	#endif
	new ShadowStrike
	#if defined POWER_SHADOWSTRIKE
	ShadowStrike = ShadowStrike_Level[id]
	#else
	ShadowStrike = TempShadowStrike_Level[id]
	#endif

	new PowersData[1024]
	formatex(PowersData, sizeof(PowersData) - 1, "^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^"", PlayerExperience[id], UnholyAura, Levitation, VampiricAura, Evasion, TrueShot, Banish, Phoenix, DevotionAura, Bash, CriticalStrike, CriticalGrenade, SiphonMana, HealingWave, ShadowStrike)
	
	new Save[1024]
	format(Save, sizeof(Save) - 1, "^"%s^" %s", Name, PowersData)
	
	new Line[128], Linie, IsPlayer = false, Arg1[32]
	
	new FileOpen = fopen(PowersFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31)
		
		if (equali(Arg1, Name)) {
			write_file(PowersFile, Save, Linie)
			IsPlayer = true
			break
		}
		
		Linie++
	}
	fclose(FileOpen)
	if (!IsPlayer)
		write_file(PowersFile, Save, -1)
}

public LoadPowers(id) {
	new Name[32];
	get_user_name(id, Name, 31);
	
	new Line[128], IsPlayer = false, Arg1[32], Arg2[32], Arg3[32], Arg4[32], Arg5[32], Arg6[32], Arg7[32], Arg8[32], 
	Arg9[32], Arg10[32], Arg11[32], Arg12[32], Arg13[32], Arg14[32], Arg15[32], Arg16[32];
	
	new FileOpen = fopen(PowersFile, "rt")
	while(!feof(FileOpen)) {
		fgets(FileOpen, Line, 127)
		trim(Line)
		
		parse(Line, Arg1, 31, Arg2, 31, Arg3, 31, Arg4, 31, Arg5, 31, Arg6, 31, Arg7, 31, Arg8, 31, Arg9, 31, Arg10, 31, Arg11, 31, Arg12, 31, Arg13, 31, Arg14, 31, Arg15, 31, Arg16, 31)
		
		if (equali(Arg1, Name)) {
			#if defined POWER_UNHOLYAURA
			UnholyAura_Level[id] = str_to_num(Arg3)
			#else
			TempUnholyAura_Level[id] = str_to_num(Arg3)
			#endif
			#if defined POWER_LEVITATION
			Levitation_Level[id] = str_to_num(Arg4)
			#else
			TempLevitation_Level[id] = str_to_num(Arg4)
			#endif
			#if defined POWER_VAMPIRICAURA
			VampiricAura_Level[id] = str_to_num(Arg5)
			#else
			TempVampiricAura_Level[id] = str_to_num(Arg5)
			#endif
			#if defined POWER_EVASION
			Evasion_Level[id] = str_to_num(Arg6)
			#else
			TempEvasion_Level[id] = str_to_num(Arg6)
			#endif
			#if defined POWER_TRUESHOT
			TrueShot_Level[id] = str_to_num(Arg7)
			#else
			TempTrueShot_Level[id] = str_to_num(Arg7)
			#endif
			#if defined POWER_BANISH
			Banish_Level[id] = str_to_num(Arg8)
			#else
			TempBanish_Level[id] = str_to_num(Arg8)
			#endif
			#if defined POWER_PHOENIX
			Phoenix_Level[id] = str_to_num(Arg9)
			#else
			TempPhoenix_Level[id] = str_to_num(Arg9)
			#endif
			#if defined POWER_DEVOTIONAURA
			DevotionAura_Level[id] = str_to_num(Arg10)
			#else
			TempDevotionAura_Level[id] = str_to_num(Arg10)
			#endif
			#if defined POWER_BASH
			Bash_Level[id] = str_to_num(Arg11)
			#else
			TempBash_Level[id] = str_to_num(Arg11)
			#endif
			#if defined POWER_CRITICALSTRIKE
			CriticalStrike_Level[id] = str_to_num(Arg12)
			#else
			TempCriticalStrike_Level[id] = str_to_num(Arg12)
			#endif
			#if defined POWER_CRITICALGRENADE
			CriticalGrenade_Level[id] = str_to_num(Arg13)
			#else
			TempCriticalGrenade_Level[id] = str_to_num(Arg13)
			#endif
			#if defined POWER_SIPHONMANA
			SiphonMana_Level[id] = str_to_num(Arg14)
			#else
			TempSiphonMana_Level[id] = str_to_num(Arg14)
			#endif
			#if defined POWER_HEALINGWAVE
			HealingWave_Level[id] = str_to_num(Arg15)
			#else
			TempHealingWave_Level[id] = str_to_num(Arg15)
			#endif
			#if defined POWER_SHADOWSTRIKE
			ShadowStrike_Level[id] = str_to_num(Arg16)
			#else
			TempShadowStrike_Level[id] = str_to_num(Arg16)
			#endif

			CreditsUsed[id] = (str_to_num(Arg3) + str_to_num(Arg4) + str_to_num(Arg5) + str_to_num(Arg6) + str_to_num(Arg7) + str_to_num(Arg8) + str_to_num(Arg9) + str_to_num(Arg10) + str_to_num(Arg11) + str_to_num(Arg12) + str_to_num(Arg13) + str_to_num(Arg14) + str_to_num(Arg15) + str_to_num(Arg16))
			
			new XP = str_to_num(Arg2)
			set_user_xp(id, XP) 			

			IsPlayer = true
			break
		}
	}
	fclose(FileOpen)
	
	if (!IsPlayer) {		
		#if defined POWER_UNHOLYAURA
		UnholyAura_Level[id] = 0
		#else
		TempUnholyAura_Level[id] = 0
		#endif
		#if defined POWER_LEVITATION
		Levitation_Level[id] = 0
		#else
		TempLevitation_Level[id] = 0
		#endif
		#if defined POWER_VAMPIRICAURA
		VampiricAura_Level[id] = 0
		#else
		TempVampiricAura_Level[id] = 0
		#endif
		#if defined POWER_EVASION
		Evasion_Level[id] = 0
		#else
		TempEvasion_Level[id] = 0
		#endif
		#if defined POWER_TRUESHOT
		TrueShot_Level[id] = 0
		#else
		TempTrueShot_Level[id] = 0
		#endif
		#if defined POWER_BANISH
		Banish_Level[id] = 0
		#else
		TempBanish_Level[id] = 0
		#endif
		#if defined POWER_PHOENIX
		Phoenix_Level[id] = 0
		#else
		TempPhoenix_Level[id] = 0
		#endif
		#if defined POWER_DEVOTIONAURA
		DevotionAura_Level[id] = 0
		#else
		TempDevotionAura_Level[id] = 0
		#endif
		#if defined POWER_BASH
		Bash_Level[id] = 0
		#else
		TempBash_Level[id] = 0
		#endif
		#if defined POWER_CRITICALSTRIKE
		CriticalStrike_Level[id] = 0
		#else
		TempCriticalStrike_Level[id] = 0
		#endif
		#if defined POWER_CRITICALGRENADE
		CriticalGrenade_Level[id] = 0
		#else
		TempCriticalGrenade_Level[id] = 0
		#endif
		#if defined POWER_SIPHONMANA
		SiphonMana_Level[id] = 0
		#else
		TempSiphonMana_Level[id] = 0
		#endif
		#if defined POWER_HEALINGWAVE
		HealingWave_Level[id] = 0
		#else
		TempHealingWave_Level[id] = 0
		#endif
		#if defined POWER_SHADOWSTRIKE
		ShadowStrike_Level[id] = 0
		#else
		TempShadowStrike_Level[id] = 0
		#endif
		
		PlayerExperience[id] = 0
		PlayerLevel[id] = 0
		CreditsUsed[id] = 0
		Credits[id] = 0
	}
}




#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 }
*/

Last edited by Pegasus6; 08-20-2019 at 17:42.
Pegasus6 is offline
Pegasus6
Member
Join Date: Nov 2018
Old 08-21-2019 , 17:46   Re: Plugin bug
Reply With Quote #2

UP someone ?
I can pay for it, no problem, if it gets done.
Pegasus6 is offline
Mordekay
Squirrel of Fortune
Join Date: Apr 2006
Location: Germany
Old 08-22-2019 , 12:05   Re: Plugin bug
Reply With Quote #3

Up for what? 6 or 7 threads? it was still on the first page.
Bumping is not allowed here.
https://forums.alliedmods.net/misc.php?do=showrules
__________________


Last edited by Mordekay; 08-22-2019 at 12:05.
Mordekay is offline
Pegasus6
Member
Join Date: Nov 2018
Old 08-22-2019 , 17:20   Re: Plugin bug
Reply With Quote #4

Quote:
Originally Posted by Mordekay View Post
Up for what? 6 or 7 threads? it was still on the first page.
Bumping is not allowed here.
https://forums.alliedmods.net/misc.php?do=showrules
I just wanted to say that I can pay for this work if it needs time to fix these bugs nothing more. Sorry then..

Last edited by Pegasus6; 08-22-2019 at 18:24.
Pegasus6 is offline
Pegasus6
Member
Join Date: Nov 2018
Old 09-04-2019 , 01:54   Re: Plugin bug
Reply With Quote #5

Up ??
Pegasus6 is offline
Reply


Thread Tools
Display Modes

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

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

Forum Jump


All times are GMT -4. The time now is 12:21.


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