Probleme cu flagurile.. [Rezolvat]

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

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Florinutzu21
Membru, skill 0
Membru, skill 0
Posts: 75
Joined: 27 Jul 2014, 16:06
Detinator Steam: Nu
CS Status: Furien MOD !
Fond eXtream: 0
Location: In urzici :)
Has thanked: 1 time
Contact:

14 Oct 2014, 15:00

Salut , am o problema am un plugin de arme CSO la care sunt : Arme admini
Arme vip
Arme player
Si nu stiu care e litera ca sa dau acces doar Moderatorilor accesul armelor de admin? Ma poate ajuta careva?

Rangurile fiind

"---==[ Detinator ]==---",
"---==[ Staff ]==---",
"---==[ Owner ]==---",
"---==[ Co-Owner ]==---",
"---==[ God`s ]==---",
"---==[ Moderator ]==---",
"---==[ Administrator ]==---",
"---==[ Helper ]==---",
"---==[ Slot ]==---",
"---==[ V.I.P ]==---"

"abcdefghijklmnopqrstu",
"abcdegfhijmnopqrs",
"bcdefijmnopqrs",
"bcdefijmnopqr",
"bcdefijmnopq",
"bcdefijmno",
"bcefijmno",
"bcefojm",
"b",
"t"
Last edited by Jorj on 14 Oct 2014, 20:04, edited 1 time in total.
Reason: Rezolvat .
RoyalServer 2
Cosmin
Fost moderator
Fost moderator
Posts: 9362
Joined: 06 Jul 2013, 22:08
Detinator Steam: Da
Detinator server CS: Nu
Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn
Has thanked: 492 times
Been thanked: 547 times

14 Oct 2014, 16:28

posteaza sursa,cum vrei sa stim ce flag ai tu acolo ?
Florinutzu21
Membru, skill 0
Membru, skill 0
Posts: 75
Joined: 27 Jul 2014, 16:06
Detinator Steam: Nu
CS Status: Furien MOD !
Fond eXtream: 0
Location: In urzici :)
Has thanked: 1 time
Contact:

14 Oct 2014, 18:35

Sursa fiind? Ca nu stiu :(
Cosmin
Fost moderator
Fost moderator
Posts: 9362
Joined: 06 Jul 2013, 22:08
Detinator Steam: Da
Detinator server CS: Nu
Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn
Has thanked: 492 times
Been thanked: 547 times

14 Oct 2014, 18:43

de la acel shop,sa inteleg ca tu nu sti care e flagul la "arme admini",nU ?
Florinutzu21
Membru, skill 0
Membru, skill 0
Posts: 75
Joined: 27 Jul 2014, 16:06
Detinator Steam: Nu
CS Status: Furien MOD !
Fond eXtream: 0
Location: In urzici :)
Has thanked: 1 time
Contact:

14 Oct 2014, 18:44

nu e shop , nu stiu flagul . iti dau pm
Cosmin
Fost moderator
Fost moderator
Posts: 9362
Joined: 06 Jul 2013, 22:08
Detinator Steam: Da
Detinator server CS: Nu
Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn
Has thanked: 492 times
Been thanked: 547 times

14 Oct 2014, 18:50

are flagul "o" arme admini
Florinutzu21
Membru, skill 0
Membru, skill 0
Posts: 75
Joined: 27 Jul 2014, 16:06
Detinator Steam: Nu
CS Status: Furien MOD !
Fond eXtream: 0
Location: In urzici :)
Has thanked: 1 time
Contact:

14 Oct 2014, 18:51

Moderator nu ?
Cosmin
Fost moderator
Fost moderator
Posts: 9362
Joined: 06 Jul 2013, 22:08
Detinator Steam: Da
Detinator server CS: Nu
Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn
Has thanked: 492 times
Been thanked: 547 times

14 Oct 2014, 18:56

au acces inca de la helper
"bcefojm",
Florinutzu21
Membru, skill 0
Membru, skill 0
Posts: 75
Joined: 27 Jul 2014, 16:06
Detinator Steam: Nu
CS Status: Furien MOD !
Fond eXtream: 0
Location: In urzici :)
Has thanked: 1 time
Contact:

14 Oct 2014, 18:56

Nooppp nu merge compilat , si vreau doar de la Moderator in sus sa aiba acces
Cosmin
Fost moderator
Fost moderator
Posts: 9362
Joined: 06 Jul 2013, 22:08
Detinator Steam: Da
Detinator server CS: Nu
Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn
Has thanked: 492 times
Been thanked: 547 times

14 Oct 2014, 19:00

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

#define PLUGIN "Anti-Furien Weapons Menu"
#define VERSION "3.0"
#define AUTHOR "Aragon*"

#define ADMIN_LEVEL	ADMIN_BAN
#define VIP_LEVEL		ADMIN_LEVEL_H

#define OICW
#define JANUS7
//#define SPEARGUN
#define SALAMANDER
#define AT4
#define ETHEREAL

//#define CROSSBOW
#define QUADBARREL
#define DUALMP7A1
#define K1ASES
#define F2000

#define HK416
#define AK47KNIFE
//#define TAR21
#define M134
#define THOMPSON
#define DUALBARREL
#define M1887
//#define L85
//#define SKULL5
#define SL8
//#define AW50

#define JANUS1
#define M79
#define DUALDEAGLE
#define INFINITY
//#define DEAGLEGOLD
//#define K5
#define SKULL1
//#define ANACONDA

new Menu
new bool:ShowMenu[33], bool:HavePrimaryWeapon[33], bool:HaveSecondaryWeapon[33], PrimaryWeapon[33], SecondaryWeapon[33];

//------| Weapons Menu |------//
#define AMMOWP_NULL 		(1<<0 | 1<<CSW_KNIFE | 1<<CSW_FLASHBANG | 1<<CSW_HEGRENADE | 1<<CSW_SMOKEGRENADE | 1<<CSW_C4)
#define DMG_HEGRENADE 		(1<<24)
new Shell;
new Float:cl_pushangle[33][3];
new BloodSpray, BloodDrop;

new const WeaponsAmmo[][] = {
	{ -1, -1 },
	{ 13, 52 },
	{ -1, -1 },
	{ 10, 90 },
	{ -1, -1 },
	{ 7, 32 },
	{ -1, -1 },
	{ 30, 100 },
	{ 30, 90 },
	{ -1, -1 },
	{ 30, 120 },
	{ 20, 100 },
	{ 25, 100 },
	{ 30, 90 },
	{ 35, 90 },
	{ 25, 90 },
	{ 12, 100 },
	{ 20, 120 },
	{ 10, 30 },
	{ 30, 120 },
	{ 100, 200 },
	{ 8, 32 },
	{ 30, 90 },
	{ 30, 120 },
	{ 20, 90 },
	{ -1, -1 },
	{ 7, 35 },
	{ 30, 90 },
	{ 30, 90 },
	{ -1, -1 },
	{ 50, 100 }
}

//--| Primary Weapons |--//
new PRIMARY_WEAPONS_BITSUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90);

#if defined OICW
#define OICW_WEAPONKEY		99
#define weapon_oicw		"weapon_galil"
#define CSW_OICW		CSW_GALIL
#define OICW_CLASS		"oicw_grenade"
#define oicw_shotdelay		3.0 // Refire rate
new OICWModel_V[] = "models/furien30_weapons/Primary/v_oicw.mdl";
new OICWModel_P[] = "models/furien30_weapons/Primary/p_oicw.mdl";
new OICWModel_W[] = "models/furien30_weapons/Primary/w_oicw.mdl";
new OICWModel_S[] = "models/furien30_weapons/Primary/s_oicwgrenade.mdl";
new OICW_Sound[][] = {
	"weapons/oicw_shoot1.wav",
	"weapons/oicw_grenade_shoot1.wav",
	//"weapons/oicw_grenade_shoot2.wav",
	"weapons/oicw_foley1.wav",
	"weapons/oicw_foley2.wav",
	"weapons/oicw_foley3.wav",
	"weapons/oicw_move_carbine.wav",
	"weapons/oicw_move_grenade.wav"
};
new OICW_Generic[][] = {
	"sprites/furien30_oicw.txt",
	"sprites/furien30_weapons/OICW.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};

new bool:HaveOICW[33], OICWCarabineAmmo[33], bool:oicw_launcher[33], oicw_clip[33], oicw_reload[33], oicw_event, oicw_trail, oicw_explode;
new oicwdamage, oicwdamage2, oicwclip, oicwrecoil, oicwradius, oicwknockback, oicwreloadtime, oicwreloadtime2;
#endif

#if defined JANUS7
#define JANUS7_WEAPONKEY	345435
#define weapon_janus7		"weapon_m249"
#define CSW_JANUS7		CSW_M249
#define janus7_shotdelay	0.20 // Refire rate
new Janus7Model_V[] = "models/furien30_weapons/Primary/v_janus7.mdl";
new Janus7Model_P[] = "models/furien30_weapons/Primary/p_janus7.mdl";
new Janus7Model_W[] = "models/furien30_weapons/Primary/w_janus7.mdl";
new Janus7_Sound[][] = {
	"weapons/janus7_shoot1.wav",
	"weapons/janus7_shoot2.wav",
	"weapons/janus7_change1.wav",
	"weapons/janus7_change2.wav",
	"weapons/mg3_open.wav",
	"weapons/mg3_clipout.wav",
	"weapons/mg3_clipin.wav",
	"weapons/mg3_close.wav"
};
new Janus7_Generic[][] = {
	"sprites/furien30_janus7.txt",
	"sprites/furien30_weapons/Janus7.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};

new bool:HaveJanus7[33], Float:Janus7LauncherDelay[33], Janus7CarabineAmmo[33], bool:janus7_launcher[33], janus7_clip[33], janus7_reload[33], janus7_event, janus7_beam, janus7_explode;
new janus7damage, janus7damage2, janus7clip, janus7recoil, janus7knockback, janus7reloadtime;
#endif

#if defined SPEARGUN
#define SPEARGUN_WEAPONKEY	98
#define weapon_speargun		"weapon_galil"
#define CSW_SPEARGUN		CSW_GALIL
#define SPEARGUN_CLASS		"oicw_grenade"
#define speargun_shotdelay	1.0 // Refire rate
new SpearGunModel_V[] = "models/furien30_weapons/Primary/v_speargun.mdl";
new SpearGunModel_P[] = "models/furien30_weapons/Primary/p_speargun.mdl";
new SpearGunModel_W[] = "models/furien30_weapons/Primary/w_speargun.mdl";
new SpearGunModel_S[] = "models/furien30_weapons/Primary/s_speargun.mdl";
new SpearGun_Sound[][] = {
	"weapons/speargun_shoot1.wav",
	"weapons/speargun_clipin.wav",
	"weapons/speargun_draw.wav"
};
new SpearGun_Generic[][] = {
	"sprites/furien30_speargun.txt",
	"sprites/furien30_weapons/SpearGun.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};

new bool:HaveSpearGun[33], speargun_clip[33], speargun_reload[33], speargun_event, speargun_trail, speargun_explode;
new speargundamage, speargunradius, speargunknockback, speargunreloadtime;
#endif

#if defined SALAMANDER
#define SALAMANDER_WEAPONKEY		101
#define weapon_salamander		"weapon_m249"
#define CSW_SALAMANDER			CSW_M249
#define SALAMANDER_CLASS		"salamander_fire"
#define salamander_shotdelay		0.05 // Refire rate
new SalamanderModel_V[] = "models/furien30_weapons/Primary/v_salamander.mdl";
new SalamanderModel_P[] = "models/furien30_weapons/Primary/p_salamander.mdl";
new SalamanderModel_W[] = "models/furien30_weapons/Primary/w_salamander.mdl";
new SalamanderModel_FIRE[] = "sprites/furien30_weapons/fire_salamander.spr";
new Salamander_Sound[][] = {
	"weapons/flamegun_shoot1.wav",
	//"weapons/flamegun_shoot2.wav",
	"weapons/flamegun_clipin1.wav",
	"weapons/flamegun_clipout1.wav",
	"weapons/flamegun_clipout2.wav",
	"weapons/flamegun_draw.wav"
};
new Salamander_Generic[][] = {
	"sprites/furien30_salamander.txt",
	"sprites/furien30_weapons/Salamander.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};

new bool:HaveSalamander[33], salamander_clip[33], salamander_reload[33], salamander_event;
new salamanderdamage, salamanderclip, salamanderreloadtime, salamanderradius;
#endif

#if defined AT4
#define AT4_WEAPONKEY		100
#define weapon_at4		"weapon_m249"
#define CSW_AT4			CSW_M249
#define AT4_CLASS		"at4ex_rocket"
#define AT4_CLASS_LASERDOT	"at4_laserdot"
#define at4_shotdelay		4.0 // Refire rate
new AT4Model_V[] = "models/furien30_weapons/Primary/v_at4.mdl";
new AT4Model_P[] = "models/furien30_weapons/Primary/p_at4.mdl";
new AT4Model_W[] = "models/furien30_weapons/Primary/w_at4.mdl";
new AT4Model_S[] = "models/furien30_weapons/Primary/s_at4rocket.mdl";
new AT4Model_LASER[] = "sprites/laserdot.spr";
new AT4_Sound[][] = {
	"weapons/at4_shoot1.wav",
	"weapons/at4_clipin1.wav",
	"weapons/at4_clipin2.wav",
	"weapons/at4_clipin3.wav",
	"weapons/at4_draw.wav"
};
new AT4_Generic[][] = {
	"sprites/furien30_at4.txt",
	"sprites/furien30_weapons/At4.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};

new bool:HaveAT4[33], at4_clip[33], at4_reload[33], at4_detector[33], at4_event, at4_smoke, at4_trail, at4_explode;
new at4damage, at4radius, at4knockback, at4reloadtime;
#endif

#if defined ETHEREAL
#define ETHEREAL_WEAPONKEY	103
#define weapon_ethereal		"weapon_galil"
#define CSW_ETHEREAL		CSW_GALIL
#define ethereal_shotdelay	0.15 // Refire rate

new EtherealModel_V[] = "models/furien30_weapons/Primary/v_ethereal.mdl";
new EtherealModel_P[] = "models/furien30_weapons/Primary/p_ethereal.mdl";
new EtherealModel_W[] = "models/furien30_weapons/Primary/w_ethereal.mdl";
new Ethereal_Sound[][] = {
	"weapons/ethereal_shoot1.wav",
	"weapons/ethereal_idle1.wav",
	"weapons/ethereal_reload.wav",
	"weapons/ethereal_draw.wav"
};
new Ethereal_Generic[][] = {
	"sprites/furien30_ethereal.txt",
	"sprites/furien30_weapons/Ethereal.spr",
	"sprites/furien30_weapons/640hud2.spr"
};
new bool:HaveEthereal[33], ethereal_clip[33], ethereal_reload[33], ethereal_event, ethereal_beam, ethereal_explode;
new etherealdamage, etherealclip, etherealreloadtime, etherealknockback;
#endif

#if defined CROSSBOW
#define CROSSBOW_WEAPONKEY	102
#define weapon_crossbow		"weapon_sg552"
#define CSW_CROSSBOW		CSW_SG552
#define CROSSBOW_CLASS		"crossbow_bolt"
#define crossbow_shotdelay	1.0 // Refire rate
new CrossBowModel_V[] = "models/furien30_weapons/Primary/v_crossbow.mdl";
new CrossBowModel_P[] = "models/furien30_weapons/Primary/p_crossbow.mdl";
new CrossBowModel_W[] = "models/furien30_weapons/Primary/w_crossbow.mdl";
new CrossBowModel_S[] = "models/furien30_weapons/Primary/s_crossbowbolt.mdl";
new CrossBow_Sound[][] = {
	"weapons/crossbow_shoot1.wav",
	"weapons/crbow_fl4.wav",
	"weapons/crbow_fl111.wav",
	"weapons/crbow_foley2.wav",
	"weapons/crbow_foley33.wav",
	"weapons/crbow_drw.wav"	
};
new CrossBow_Generic[][] = {
	"sprites/furien30_crossbow.txt",
	"sprites/furien30_weapons/Crossbow.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveCrossBow[33], crossbow_clip[33], crossbow_reload[33], crossbow_event, crossbow_trail, crossbow_explode;
new crossbowdamage, crossbowclip, crossbowreloadtime, crossbowradius, crossbowknockback;
#endif

#if defined QUADBARREL
#define QUADBARREL_WEAPONKEY	104
#define quadbarrel_shotdelay	0.40
#define weapon_quadbarrel	"weapon_m3"
#define CSW_QUADBARREL		CSW_M3
new QuadBarrelModel_V[] = "models/furien30_weapons/Primary/v_quadbarrel.mdl";
new QuadBarrelModel_P[] = "models/furien30_weapons/Primary/p_quadbarrel.mdl";
new QuadBarrelModel_W[] = "models/furien30_weapons/Primary/w_quadbarrel.mdl";
new QuadBarrel_Sound[][] = {
	"weapons/qbarrel_shoot1.wav",
	"weapons/qbarrel_draw.wav",
	"weapons/qbarrel_clipout1.wav",
	"weapons/qbarrel_clipin1.wav",
	"weapons/qbarrel_clipin2.wav"
};
new QuadBarrel_Generic[][] = {
	"sprites/furien30_quadbarrel.txt",
	"sprites/furien30_weapons/QuadBarrel.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveQuadBarrel[33], quadbarrel_clip[33], quadbarrel_reload[33], quadbarrel_event;
new quadbarreldamage, quadbarrelreloadtime, quadbarrelrecoil;
#endif

#if defined DUALMP7A1
#define DUALMP7A1_WEAPONKEY	105
#define weapon_dualmp7a1	"weapon_mp5navy"
#define CSW_DUALMP7A1		CSW_MP5NAVY
new DualMP7A1Model_V[] = "models/furien30_weapons/Primary/v_dualmp7a1.mdl";
new DualMP7A1Model_P[] = "models/furien30_weapons/Primary/p_dualmp7a1.mdl";
new DualMP7A1Model_W[] = "models/furien30_weapons/Primary/w_dualmp7a1.mdl";
new DualMP7A1_Sound[][] = {
	"weapons/Dmp7_shoot1.wav",
	"weapons/Dmp7_drop.wav",
	"weapons/Dmp7_draw.wav",
	"weapons/mp7_foley2.wav",
	"weapons/mp7_foley4.wav"
};
new DualMP7A1_Generic[][] = {
	"sprites/furien30_dualmp7a1.txt",
	"sprites/furien30_weapons/DualMp7a1.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveDualMP7A1[33], dualmp7a1_clip[33], dualmp7a1_reload[33], dualmp7a1_event;
new dualmp7a1damage, dualmp7a1clip, dualmp7a1reloadtime, dualmp7a1recoil;
#endif

#if defined K1ASES
#define K1ASES_WEAPONKEY	106
#define weapon_k1ases		"weapon_mp5navy"
#define CSW_K1ASES		CSW_MP5NAVY
new K1asesModel_V[] = "models/furien30_weapons/Primary/v_k1ases.mdl";
new K1asesModel_P[] = "models/furien30_weapons/Primary/p_k1ases.mdl";
new K1asesModel_W[] = "models/furien30_weapons/Primary/w_k1ases.mdl";
new K1ases_Sound[][] = {
	"weapons/k1a_shoot1.wav",
	"weapons/k1a_ability.wav",
	"weapons/k1a_clipin.wav",
	"weapons/k1a_clipout.wav",
	"weapons/k1a_draw.wav",
	"weapons/k1a_foley1.wav"
};
new K1ases_Generic[][] = {
	"sprites/furien30_k1ases.txt",
	"sprites/furien30_weapons/K1ases.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveK1ases[33], k1ases_clip[33], k1ases_reload[33], K1ases_Ability_Delay[33], k1ases_explode, k1ases_event;
new k1asesdamage, k1asesclip, k1asesreloadtime, k1asesrecoil, k1asesabilitydamage, k1asesabilitydelay, k1asesabilityradius;
#endif

#if defined F2000
#define F2000_WEAPONKEY		107
#define weapon_f2000		"weapon_aug"
#define CSW_F2000		CSW_AUG
new F2000Model_V[] = "models/furien30_weapons/Primary/v_f2000.mdl";
new F2000Model_P[] = "models/furien30_weapons/Primary/p_f2000.mdl";
new F2000Model_W[] = "models/furien30_weapons/Primary/w_f2000.mdl";
new F2000Model_S[] = "models/furien30_weapons/Primary/s_f2000.mdl";
new F2000_Sound[][] = {
	"weapons/f2000_shoot1.wav",
	//"weapons/f2000_shoot2.wav",
	"weapons/f2000_Boltpull.wav",
	"weapons/f2000_Clipin.wav",
	"weapons/f2000_Clipou.wav"
};
new F2000_Generic[][] = {
	"sprites/furien30_f2000.txt",
	"sprites/furien30_weapons/F2000.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveF2000[33], f2000_clip[33], f2000_reload[33], f2000_event;
new f2000damage, f2000clip, f2000reloadtime, f2000recoil;
#endif

#if defined HK416
#define HK416_WEAPONKEY		108
#define weapon_hk416		"weapon_m4a1"
#define CSW_HK416		CSW_M4A1
new HK416Model_V[] = "models/furien30_weapons/Primary/v_hk416.mdl";
new HK416Model_P[] = "models/furien30_weapons/Primary/p_hk416.mdl";
new HK416Model_W[] = "models/furien30_weapons/Primary/w_hk416.mdl";
new HK416_Sound[][] = {
	"weapons/hk416_shoot1.wav",
	"weapons/hk416_unsil_shoot1.wav",
	"weapons/hk416_clipin.wav",
	"weapons/hk416_clipon.wav",
	"weapons/hk416_clipout.wav",
	"weapons/hk416_draw.wav",
	"weapons/hk416_foley.wav",
	"weapons/hk416_siloff.wav",
	"weapons/hk416_silon.wav"
};
new HK416_Generic[][] = {
	"sprites/furien30_hk416.txt",
	"sprites/furien30_weapons/HK416.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveHK416[33], hk416_clip[33], hk416_reload[33], hk416_event;
new hk416damage, hk416clip, hk416reloadtime, hk416recoil;
#endif

#if defined AK47KNIFE
#define AK47KNIFE_WEAPONKEY	109
#define weapon_ak47knife	"weapon_ak47"
#define CSW_AK47KNIFE		CSW_AK47
new AK47KnifeModel_V[] = "models/furien30_weapons/Primary/v_ak47knife.mdl";
new AK47KnifeModel_P[] = "models/furien30_weapons/Primary/p_ak47knife.mdl";
new AK47KnifeModel_W[] = "models/furien30_weapons/Primary/w_ak47knife.mdl";
new AK47Knife_Sound[][] = {
	"weapons/ak47-1.wav",
	//"weapons/ak47-2.wav",
	"weapons/acum_draw.wav",
	"weapons/ak47knife_hitplayer.wav",
	"weapons/ak47knife_hitwall.wav",
	"weapons/ak47knife_hitmiss.wav"
};	
new AK47Knife_Generic[][] = {
	"sprites/furien30_ak47knife.txt",
	"sprites/furien30_weapons/Ak47Knife.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveAK47Knife[33], ak47knife_clip[33], ak47knife_reload[33], ak47knife_event;
new ak47knifedamage, ak47knifeclip, ak47knifereloadtime, ak47kniferecoil, ak47knifeabilitydamage, ak47knifeabilityknockback;
#endif

#if defined TAR21
#define TAR21_WEAPONKEY		110
#define weapon_tar21		"weapon_sg552"
#define CSW_TAR21		CSW_SG552
new Tar21Model_V[] = "models/furien30_weapons/Primary/v_tar21.mdl";
new Tar21Model_P[] = "models/furien30_weapons/Primary/p_tar21.mdl";
new Tar21Model_W[] = "models/furien30_weapons/Primary/w_tar21.mdl";
new Tar21_Sound[][] = {
	"weapons/tar21_shoot1.wav",
	"weapons/tar21_boltpull.wav",
	"weapons/tar21_clipin.wav",
	"weapons/tar21_clipout.wav"
};	
/*
new Tar21_Generic[][] = {
	"sprites/furien30_tar21.txt",
	"sprites/furien30_weapons/Tar21.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
*/
new bool:HaveTar21[33], tar21_clip[33], tar21_reload[33], tar21_event;
new tar21damage, tar21clip, tar21reloadtime, tar21recoil;
#endif

#if defined M134
#define M134_WEAPONKEY		111
#define weapon_m134		"weapon_m249"
#define CSW_M134		CSW_M249
new M134Model_V[] = "models/furien30_weapons/Primary/v_m134.mdl";
new M134Model_P[] = "models/furien30_weapons/Primary/p_m134.mdl";
new M134Model_W[] = "models/furien30_weapons/Primary/w_m134.mdl";
new M134_Sound[][] = {
	"weapons/m134_shoot1.wav",
	"weapons/m134_clipoff.wav",
	"weapons/m134_clipon.wav",
	"weapons/m134_spindown.wav",
	"weapons/m134_spinup.wav",
	"weapons/m134_pinpull.wav"
};	
new M134_Generic[][] = {
	"sprites/furien30_m134.txt",
	"sprites/furien30_weapons/M134.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};	
new bool:HaveM134[33], m134_clip[33], m134_reload[33], m134_event;
new m134damage, m134clip, m134reloadtime, m134recoil;
#endif

#if defined THOMPSON
#define THOMPSON_WEAPONKEY	112
#define weapon_thompson		"weapon_p90"
#define CSW_THOMPSON		CSW_P90
new ThompsonModel_V[] = "models/furien30_weapons/Primary/v_thompson.mdl";
new ThompsonModel_P[] = "models/furien30_weapons/Primary/p_thompson.mdl";
new ThompsonModel_W[] = "models/furien30_weapons/Primary/w_thompson.mdl";
new Thompson_Sound[][] = {
	"weapons/thompsongold_shoot1.wav",
	"weapons/thompsongold_clipin.wav",
	"weapons/thompsongold_clipout.wav",
	"weapons/thompsongold_draw.wav"
};
new Thompson_Generic[][] = {
	"sprites/furien30_thompson.txt",
	"sprites/furien30_weapons/Thompson.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveThompson[33], thompson_clip[33], thompson_reload[33], thompson_event;
new thompsondamage, thompsonclip, thompsonreloadtime, thompsonrecoil;
#endif

#if defined DUALBARREL
#define DUALBARREL_WEAPONKEY	113
#define dualbarrel_shotdelay	0.40
#define weapon_dualbarrel	"weapon_m3"
#define CSW_DUALBARREL		CSW_M3
new DualBarrelModel_V[] = "models/furien30_weapons/Primary/v_dualbarrel.mdl";
new DualBarrelModel_P[] = "models/furien30_weapons/Primary/p_dualbarrel.mdl";
new DualBarrelModel_W[] = "models/furien30_weapons/Primary/w_dualbarrel.mdl";
new DualBarrel_Sound[][] = {
	"weapons/dbarrel_shoot1.wav",
	"weapons/dbarrel_draw.wav",
	"weapons/dbarrel_foley1.wav",
	"weapons/dbarrel_foley2.wav",
	"weapons/dbarrel_foley3.wav",
	"weapons/dbarrel_foley4.wav"
};
new DualBarrel_Generic[][] = {
	"sprites/furien30_dualbarrel.txt",
	"sprites/furien30_weapons/DualBarrel.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveDualBarrel[33], dualbarrel_clip[33], dualbarrel_reload[33], dualbarrel_event;
new dualbarreldamage, dualbarrelreloadtime, dualbarrelrecoil;
#endif

#if defined M1887
#define M1887_WEAPONKEY		114
#define weapon_m1887		"weapon_m3"
#define CSW_M1887		CSW_M3
new M1887Model_V[] = "models/furien30_weapons/Primary/v_m1887.mdl";
new M1887Model_P[] = "models/furien30_weapons/Primary/p_m1887.mdl";
new M1887Model_W[] = "models/furien30_weapons/Primary/w_m1887.mdl";
new M1887_Sound[][] = {
	"weapons/m1887_shoot1.wav",
	"weapons/m1887_draw.wav",
	"weapons/m1887_insert.wav",
	"weapons/m1887_restart.wav"
};
new M1887_Generic[][] = {
	"sprites/furien30_m1887.txt",
	"sprites/furien30_weapons/M1887.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveM1887[33], m1887_clip[33], m1887_reload[33], m1887_event;
new m1887damage, /*m1887clip, m1887reloadtime,*/ m1887recoil;
#endif

#if defined L85
#define L85_WEAPONKEY		115
#define weapon_l85		"weapon_famas"
#define CSW_L85			CSW_FAMAS
new L85Model_V[] = "models/furien30_weapons/Primary/v_l85.mdl";
new L85Model_P[] = "models/furien30_weapons/Primary/p_l85.mdl";
new L85Model_W[] = "models/furien30_weapons/Primary/w_l85.mdl";
new L85_Sound[][] = {
	"weapons/l85_shoot1.wav",
	"weapons/l85_foley1.wav",
	"weapons/l85_foley2.wav",
	"weapons/l85_foley4.wav",
	"weapons/l85_foley3.wav"
};
new L85_Generic[][] = {
	"sprites/furien30_l85.txt",
	"sprites/furien30_weapons/L85.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveL85[33], l85_clip[33], l85_reload[33], l85_event;
new l85damage, l85clip, l85reloadtime, l85recoil;
#endif

#if defined SKULL5
#define SKULL5_WEAPONKEY	116
#define weapon_skull5		"weapon_sg550"
#define CSW_SKULL5		CSW_SG550
new Skull5Model_V[] = "models/furien30_weapons/Primary/v_skull5.mdl";
new Skull5Model_P[] = "models/furien30_weapons/Primary/p_skull5.mdl";
new Skull5Model_W[] = "models/furien30_weapons/Primary/w_skull5.mdl";
new Skull5_Sound[][] = {
	"weapons/skull5_shoot1.wav",
	"weapons/skull5_boltpull.wav",
	"weapons/skull5_clipin.wav",
	"weapons/skull5_clipout.wav",
	"weapons/skull5_draw.wav"
};
/*
new Skull5_Generic[][] = {
	"sprites/furien30_skull5.txt",
	"sprites/furien30_weapons/Skull5.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
*/
new bool:HaveSkull5[33], skull5_clip[33], skull5_reload[33], skull5_event;
new skull5damage, skull5clip, skull5reloadtime, skull5recoil;
#endif

#if defined SL8
#define SL8_WEAPONKEY	117
#define weapon_sl8	"weapon_g3sg1"
#define CSW_SL8		CSW_G3SG1
new SL8Model_V[] = "models/furien30_weapons/Primary/v_sl8.mdl";
new SL8Model_P[] = "models/furien30_weapons/Primary/p_sl8.mdl";
new SL8Model_W[] = "models/furien30_weapons/Primary/w_sl8.mdl";
new SL8_Sound[][] = {
	"weapons/sl8_shoot1.wav",
	"weapons/sl8_boltpull.wav",
	"weapons/sl8_clipin.wav",
	"weapons/sl8_clipout.wav",
	"weapons/sl8_draw.wav"
};
new SL8_Generic[][] = {
	"sprites/furien30_sl8.txt",
	"sprites/furien30_weapons/SL8.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveSL8[33], sl8_clip[33], sl8_reload[33], sl8_event;
new sl8damage, sl8clip, sl8reloadtime, sl8recoil;
#endif

#if defined AW50
#define AW50_WEAPONKEY		118
#define weapon_aw50		"weapon_awp"
#define CSW_AW50		CSW_AWP
new AW50Model_V[] = "models/furien30_weapons/Primary/v_aw50.mdl";
new AW50Model_P[] = "models/furien30_weapons/Primary/p_aw50.mdl";
new AW50Model_W[] = "models/furien30_weapons/Primary/w_aw50.mdl";
new AW50_Sound[][] = {
	"weapons/aw50_shoot1.wav",
	"weapons/aw50_clipin.wav",
	"weapons/aw50_clipout.wav",
	"weapons/aw50_foley1.wav",
	"weapons/aw50_foley2.wav"
};
new AW50_Generic[][] = {
	"sprites/furien30_aw50.txt",
	"sprites/furien30_weapons/AW50.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveAW50[33], aw50_clip[33], aw50_reload[33], aw50_event;
new aw50damage, aw50clip, aw50reloadtime, aw50recoil;
#endif


//--| Secondary Weapons |--//
new SECONDARY_WEAPONS_BITSUM = (1<<CSW_GLOCK18)|(1<<CSW_USP)|(1<<CSW_P228)|(1<<CSW_DEAGLE)|(1<<CSW_FIVESEVEN)|(1<<CSW_ELITE);
new IsInPrimaryAttack;

#if defined JANUS1
#define JANUS1_WEAPONKEY	300
#define JANUS1_CLASS		"janus_grenade"
#define weapon_janus1		"weapon_deagle"
#define CSW_JANUS1		CSW_DEAGLE
#define janus1_shotdelay	2.8 // Refire rate
new Janus1Model_V[] = "models/furien30_weapons/Secondary/v_janus1.mdl";
new Janus1Model_P[] = "models/furien30_weapons/Secondary/p_janus1.mdl";
new Janus1Model_W[] = "models/furien30_weapons/Secondary/w_janus1.mdl";
new Janus1Model_S[] = "models/furien30_weapons/Secondary/s_janus1grenade.mdl";
new Janus1_Sound[][] = {
	"weapons/janus1_shoot1.wav",
	//"weapons/janus1_shoot2.wav",
	"weapons/janus1_change1.wav",
	"weapons/janus1_change2.wav",
	"weapons/m79_draw.wav"
};
new Janus1_Generic[][] = {
	"sprites/furien30_janus1.txt",
	"sprites/furien30_weapons/Janus1.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveJanus1[33], Float:Janus1LauncherDelay[33], bool:janus1_launcher[33], janus1_clip[33], janus1_reload[33], janus1_event, janus1_trail, janus1_explode;
new janus1damage, janus1radius, janus1knockback, janus1reloadtime;
#endif

#if defined M79
#define M79_WEAPONKEY	200
#define M79_CLASS	"m79_grenade"
#define weapon_m79	"weapon_deagle"
#define CSW_M79		CSW_DEAGLE
#define m79_shotdelay	3.0 // Refire rate
new M79Model_V[] = "models/furien30_weapons/Secondary/v_m79.mdl";
new M79Model_P[] = "models/furien30_weapons/Secondary/p_m79.mdl";
new M79Model_W[] = "models/furien30_weapons/Secondary/w_m79.mdl";
new M79Model_S[] = "models/furien30_weapons/Secondary/s_m79grenade.mdl";
new M79_Sound[][] = {
	"weapons/m79_shoot1.wav",
	//"weapons/m79_shoot2.wav",
	"weapons/m79_clipin.wav",
	"weapons/m79_clipon.wav",
	"weapons/m79_clipout.wav"
};
new M79_Generic[][] = {
	"sprites/furien30_m79.txt",
	"sprites/furien30_weapons/M79.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveM79[33], m79_clip[33], m79_reload[33], m79_event, m79_trail, m79_explode;
new m79damage, m79radius, m79knockback, m79reloadtime;
#endif

#if defined DUALDEAGLE
#define DUALDEAGLE_WEAPONKEY	201
#define weapon_dualdeagle	"weapon_elite"
#define CSW_DUALDEAGLE		CSW_ELITE
new DualDeagleModel_V[] = "models/furien30_weapons/Secondary/v_dualdeagle.mdl";
new DualDeagleModel_P[] = "models/furien30_weapons/Secondary/p_dualdeagle.mdl";
new DualDeagleModel_W[] = "models/furien30_weapons/Secondary/w_dualdeagle.mdl";
new DualDeagle_Sound[][] = {
	"weapons/DDe_shoot1.wav",
	"weapons/DDe_Clipout.wav",
	"weapons/DDe_clipin.wav",
	"weapons/DDe_clipoff.wav",
	"weapons/DDe_twirl.wav",
	"weapons/DDe_Load.wav"
};
new DualDeagle_Generic[][] = {
	"sprites/furien30_dualdeagle.txt",
	"sprites/furien30_weapons/DualDeagle.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveDualDeagle[33], dualdeagle_clip[33], dualdeagle_reload[33], dualdeagle_event;
new dualdeagledamage, dualdeagleclip, dualdeaglereloadtime, dualdeaglerecoil;
#endif

#if defined INFINITY
#define INFINITY_WEAPONKEY	202
#define weapon_infinity		"weapon_elite"
#define CSW_INFINITY		CSW_ELITE
new InfinityModel_V[] = "models/furien30_weapons/Secondary/v_infinity.mdl";
new InfinityModel_P[] = "models/furien30_weapons/Secondary/p_infinity.mdl";
new InfinityModel_W[] = "models/furien30_weapons/Secondary/w_infinity.mdl";
new Infinity_Sound[][] = {
	"weapons/infi_shoot1.wav",
	//"weapons/infi_shoot2.wav",
	"weapons/infi_clipout.wav",
	"weapons/infi_clipin.wav",
	"weapons/infi_clipon.wav",
	"weapons/infi_draw.wav"
};
new Infinity_Generic[][] = {
	"sprites/furien30_infinity.txt",
	"sprites/furien30_weapons/Infinity.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveInfinity[33], infinity_clip[33], infinity_reload[33], infinity_event;
new infinitydamage, infinityclip, infinityreloadtime, infinityrecoil;
#endif

#if defined DEAGLEGOLD
#define DEAGLEGOLD_WEAPONKEY	203
#define weapon_deaglegold	"weapon_deagle"
#define CSW_DEAGLEGOLD		CSW_DEAGLE
new DeagleGoldModel_V[] = "models/furien30_weapons/Secondary/v_deaglegold.mdl";
new DeagleGoldModel_P[] = "models/furien30_weapons/Secondary/p_deaglegold.mdl";
new DeagleGoldModel_W[] = "models/furien30_weapons/Secondary/w_deaglegold.mdl";
new DeagleGold_Sound[][] = {
	"weapons/deagle-1.wav"/*,
	"weapons/deagle-2.wav"*/
};

new bool:HaveDeagleGold[33], deaglegold_clip[33], deaglegold_reload[33], deaglegold_event;
new deaglegolddamage, deaglegoldclip, deaglegoldreloadtime, deaglegoldrecoil;
#endif

#if defined K5
#define K5_WEAPONKEY		204
#define weapon_k5		"weapon_p228"
#define CSW_K5			CSW_P228
new K5Model_V[] = "models/furien30_weapons/Secondary/v_k5.mdl";
new K5Model_P[] = "models/furien30_weapons/Secondary/p_k5.mdl";
new K5Model_W[] = "models/furien30_weapons/Secondary/w_k5.mdl";
new K5_Sound[][] = {
	"weapons/k5_shoot1.wav",
	//"weapons/k5_shoot2.wav",
	"weapons/k5_clipout.wav",
	"weapons/k5_clipin.wav",
	"weapons/k5_sliderelease.wav",
	"weapons/k5_slidepull.wav"
};
new bool:HaveK5[33], k5_clip[33], k5_reload[33], k5_event;
new k5damage, k5clip, k5reloadtime, k5recoil;
#endif

#if defined SKULL1
#define SKULL1_WEAPONKEY	205
#define weapon_skull1		"weapon_deagle"
#define CSW_SKULL1		CSW_DEAGLE
new Skull1Model_V[] = "models/furien30_weapons/Secondary/v_skull1.mdl";
new Skull1Model_P[] = "models/furien30_weapons/Secondary/p_skull1.mdl";
new Skull1Model_W[] = "models/furien30_weapons/Secondary/w_skull1.mdl";
new Skull1_Sound[][] = {
	"weapons/skull1_shoot1.wav",
	"weapons/skull1_draw.wav",
	"weapons/skull1_clipin.wav",
	"weapons/skull1_clipout.wav"
};
new Skull1_Generic[][] = {
	"sprites/furien30_skull1.txt",
	"sprites/furien30_weapons/Skull1.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveSkull1[33], skull1_clip[33], skull1_reload[33], skull1_event;
new skull1damage, skull1clip, skull1reloadtime, skull1recoil;
#endif

#if defined ANACONDA
#define ANACONDA_WEAPONKEY	206
#define weapon_anaconda		"weapon_deagle"
#define CSW_ANACONDA		CSW_DEAGLE
new AnacondaModel_V[] = "models/furien30_weapons/Secondary/v_anaconda.mdl";
new AnacondaModel_P[] = "models/furien30_weapons/Secondary/p_anaconda.mdl";
new AnacondaModel_W[] = "models/furien30_weapons/Secondary/w_anaconda.mdl";
new Anaconda_Sound[][] = {
	"weapons/ana_shoot1.wav",
	//"weapons/ana_shoot2.wav",
	"weapons/ana_foley1.wav",
	"weapons/ana_foley2.wav",
	"weapons/ana_foley3.wav",
	"weapons/ana_foley4.wav",
	"weapons/ana_foley5.wav"
};
new Anaconda_Generic[][] = {
	"sprites/furien30_anaconda.txt",
	"sprites/furien30_weapons/Anaconda.spr",
	"sprites/furien30_weapons/640hud7x.spr"
};
new bool:HaveAnaconda[33], anaconda_clip[33], anaconda_reload[33], anaconda_event;
new anacondadamage, anacondaclip, anacondareloadtime, anacondarecoil;
#endif

public plugin_init() {
	register_clcmd("guns", "CMD_Guns");
	register_clcmd("say guns", "CMD_Guns");
	register_clcmd("say /guns", "CMD_Guns");
	register_clcmd("say_team guns", "CMD_Guns");
	register_clcmd("say_team /guns", "CMD_Guns");
	
	register_logevent("RoundStart", 2, "1=Round_Start");
	register_event("CurWeapon", "EVENT_CurWeapon", "be", "1=1")
	RegisterHam(Ham_Spawn, "player", "HAM_Spawn_Post", 1);
	
	Shell = engfunc(EngFunc_PrecacheModel, "models/rshell.mdl");
	
	#if defined OICW
	OICW_Init();
	#endif
	#if defined JANUS7
	Janus7_Init();
	#endif
	#if defined SPEARGUN
	SpearGun_Init();
	#endif
	#if defined SALAMANDER
	Salamander_Init();
	#endif
	#if defined AT4
	AT4_Init();
	#endif
	#if defined ETHEREAL
	Ethereal_Init();
	#endif
	
	#if defined CROSSBOW
	CrossBow_Init();
	#endif
	#if defined QUADBARREL
	QuadBarrel_Init();
	#endif
	#if defined DUALMP7A1
	DualMP7A1_Init();
	#endif
	#if defined K1ASES
	K1ases_Init();
	#endif
	#if defined F2000
	F2000_Init();
	#endif
	
	#if defined HK416
	HK416_Init();
	#endif
	#if defined AK47KNIFE
	AK47Knife_Init();
	#endif
	#if defined TAR21
	Tar21_Init();
	#endif
	#if defined M134
	M134_Init();
	#endif
	#if defined THOMPSON
	Thompson_Init();
	#endif
	#if defined DUALBARREL
	DualBarrel_Init();
	#endif
	#if defined M1887
	M1887_Init();
	#endif
	#if defined L85
	L85_Init();
	#endif
	#if defined SKULL5
	Skull5_Init();
	#endif
	#if defined SL8
	SL8_Init();
	#endif
	#if defined AW50
	AW50_Init();
	#endif
	
	#if defined JANUS1
	Janus1_Init();
	#endif
	#if defined M79
	M79_Init();
	#endif
	#if defined DUALDEAGLE
	DualDeagle_Init();
	#endif
	#if defined INFINITY
	Infinity_Init();
	#endif
	#if defined DEAGLEGOLD
	DeagleGold_Init();
	#endif
	#if defined K5
	K5_Init();
	#endif
	#if defined SKULL1
	Skull1_Init();
	#endif
	#if defined ANACONDA
	Anaconda_Init();
	#endif
}

public plugin_precache() {
	BloodSpray = precache_model("sprites/bloodspray.spr");
	BloodDrop  = precache_model("sprites/blood.spr");
	
	#if defined OICW
	OICW_Precache();
	#endif
	#if defined JANUS7
	Janus7_Precache();
	#endif
	#if defined SPEARGUN
	SpearGun_Precache();
	#endif
	#if defined SALAMANDER
	Salamander_Precache();
	#endif
	#if defined AT4
	AT4_Precache();
	#endif
	#if defined ETHEREAL
	Ethereal_Precache();
	#endif
	
	#if defined CROSSBOW
	CrossBow_Precache();
	#endif
	#if defined QUADBARREL
	QuadBarrel_Precache();
	#endif
	#if defined DUALMP7A1
	DualMP7A1_Precache();
	#endif
	#if defined K1ASES
	K1ases_Precache();
	#endif
	#if defined F2000
	F2000_Precache();
	#endif
	
	#if defined HK416
	HK416_Precache();
	#endif
	#if defined AK47KNIFE
	AK47Knife_Precache();
	#endif
	#if defined TAR21
	Tar21_Precache();
	#endif
	#if defined M134
	M134_Precache();
	#endif
	#if defined THOMPSON
	Thompson_Precache();
	#endif
	#if defined DUALBARREL
	DualBarrel_Precache();
	#endif
	#if defined M1887
	M1887_Precache();
	#endif
	#if defined L85
	L85_Precache();
	#endif
	#if defined SKULL5
	Skull5_Precache();
	#endif
	#if defined SL8
	SL8_Precache();
	#endif
	#if defined AW50
	AW50_Precache();
	#endif
	
	#if defined JANUS1
	Janus1_Precache();
	#endif
	#if defined M79
	M79_Precache();
	#endif
	#if defined DUALDEAGLE
	DualDeagle_Precache();
	#endif
	#if defined INFINITY
	Infinity_Precache();
	#endif
	#if defined DEAGLEGOLD
	DeagleGold_Precache();
	#endif
	#if defined K5
	K5_Precache();
	#endif
	#if defined SKULL1
	Skull1_Precache();
	#endif
	#if defined ANACONDA
	Anaconda_Precache();
	#endif
}

public plugin_natives() {
	#if defined OICW
	OICW_Natives();
	#endif
	#if defined JANUS7
	Janus7_Natives();
	#endif
	#if defined SPEARGUN
	SpearGun_Natives();
	#endif
	#if defined SALAMANDER
	Salamander_Natives();
	#endif
	#if defined AT4
	AT4_Natives();
	#endif
	#if defined ETHEREAL
	Ethereal_Natives();
	#endif
	
	#if defined CROSSBOW
	CrossBow_Natives();
	#endif
	#if defined QUADBARREL
	QuadBarrel_Natives();
	#endif
	#if defined DUALMP7A1
	DualMP7A1_Natives();
	#endif
	#if defined K1ASES
	K1ases_Natives();
	#endif
	#if defined F2000
	F2000_Natives();
	#endif
	
	#if defined HK416
	HK416_Natives();
	#endif
	#if defined AK47KNIFE
	AK47Knife_Natives();
	#endif
	#if defined TAR21
	Tar21_Natives();
	#endif
	#if defined M134
	M134_Natives();
	#endif
	#if defined THOMPSON
	Thompson_Natives();
	#endif
	#if defined DUALBARREL
	DualBarrel_Natives();
	#endif
	#if defined M1887
	M1887_Natives();
	#endif
	#if defined L85
	L85_Natives();
	#endif
	#if defined SKULL5
	Skull5_Natives();
	#endif
	#if defined SL8
	SL8_Natives();
	#endif
	#if defined AW50
	AW50_Natives();
	#endif
	
	#if defined JANUS1
	Janus1_Natives();
	#endif
	#if defined M79
	M79_Natives();
	#endif
	#if defined DUALDEAGLE
	DualDeagle_Natives();
	#endif
	#if defined INFINITY
	Infinity_Natives();
	#endif
	#if defined DEAGLEGOLD
	DeagleGold_Natives();
	#endif
	#if defined K5
	K5_Natives();
	#endif
	#if defined SKULL1
	Skull1_Natives();
	#endif
	#if defined ANACONDA
	Anaconda_Natives();
	#endif
}

public client_putinserver(id) {
	ShowMenu[id] = true
	PrimaryWeapon[id] = 0
	SecondaryWeapon[id] = 0
}

public RoundStart() {
	#if defined OICW
	remove_entity_name(OICW_CLASS);
	#endif
	#if defined SPEARGUN
	remove_entity_name(SPEARGUN_CLASS);
	#endif
	#if defined SALAMANDER
	remove_entity_name(SALAMANDER_CLASS);
	#endif
	#if defined AT4
	remove_entity_name(AT4_CLASS);
	remove_entity_name(AT4_CLASS_LASERDOT);
	#endif
	
	#if defined CROSSBOW
	remove_entity_name(CROSSBOW_CLASS);
	#endif
	
	#if defined JANUS1
	remove_entity_name(JANUS1_CLASS);
	#endif
	#if defined M79
	remove_entity_name(M79_CLASS);
	#endif
}

public EVENT_CurWeapon(id) {
	if(is_user_connected(id) && is_user_alive(id)) {
		static Weapon
		Weapon = read_data(2)
		
		if(!(AMMOWP_NULL &(1<<Weapon))) {		
			if(fm_get_user_bpammo(id, Weapon) < WeaponsAmmo[Weapon][1]) 
				fm_set_user_bpammo(id, Weapon, WeaponsAmmo[Weapon][1])
		}
	}
}

public HAM_Spawn_Post(id) {
	if(is_user_connected(id)) {
		HavePrimaryWeapon[id] = false
		HaveSecondaryWeapon[id] = false
		
		#if defined OICW
		set_user_oicw(id, false);
		#endif
		#if defined JANUS7
		set_user_janus7(id, false);
		#endif
		#if defined SPEARGUN
		set_user_speargun(id, false);
		#endif
		#if defined SALAMANDER
		set_user_salamander(id, false);
		#endif
		#if defined AT4
		set_user_at4(id, false);
		#endif
		#if defined ETHEREAL
		set_user_ethereal(id, false);
		#endif
		
		#if defined CROSSBOW
		set_user_crossbow(id, false);
		#endif
		#if defined QUADBARREL
		set_user_quadbarrel(id, false);
		#endif
		#if defined DUALMP7A1
		set_user_dualmp7a1(id, false);
		#endif
		#if defined K1ASES
		set_user_k1ases(id, false);
		#endif
		#if defined F2000
		set_user_f2000(id, false);
		#endif
		
		#if defined HK416
		set_user_hk416(id, false);
		#endif
		#if defined AK47KNIFE
		set_user_ak47knife(id, false);
		#endif
		#if defined TAR21
		set_user_tar21(id, false);
		#endif
		#if defined M134
		set_user_m134(id, false);
		#endif
		#if defined THOMPSON
		set_user_thompson(id, false);
		#endif
		#if defined DUALBARREL
		set_user_dualbarrel(id, false);
		#endif
		#if defined M1887
		set_user_m1887(id, false);
		#endif
		#if defined L85
		set_user_l85(id, false);
		#endif
		#if defined SKULL5
		set_user_skull5(id, false);
		#endif
		#if defined SL8
		set_user_sl8(id, false);
		#endif
		#if defined AW50
		set_user_aw50(id, false);
		#endif
		
		#if defined JANUS1
		set_user_janus1(id, false);
		#endif
		#if defined M79
		set_user_m79(id, false);
		#endif
		#if defined DUALDEAGLE
		set_user_dualdeagle(id, false);
		#endif
		#if defined INFINITY
		set_user_infinity(id, false);
		#endif
		#if defined DEAGLEGOLD
		set_user_deaglegold(id, false);
		#endif
		#if defined K5
		set_user_k5(id, false);
		#endif
		#if defined SKULL1
		set_user_skull1(id, false);
		#endif
		#if defined ANACONDA
		set_user_anaconda(id, false);
		#endif
		
		if(ShowMenu[id] && get_user_team(id) == 2) 
			Equipment(id)
		else if(!ShowMenu[id] && get_user_team(id) == 2)
			GiveLastWeapons(id)
	}
}

public CMD_Guns(id) {
	if(!ShowMenu[id]) {
		ShowMenu[id] = true
		ColorChat(id, "!gMeniul de!t echipamente!g a fost!t re-activat!g.");
	}
	if(!HavePrimaryWeapon[id] && !HaveSecondaryWeapon[id])
		Equipment(id)
	else if(!HavePrimaryWeapon[id])
		Primary(id)
	else if(!HaveSecondaryWeapon[id])
		Secondary(id)
}

public Equipment(id) {
	if(is_user_alive(id) && get_user_team(id) == 2) {
		Menu = menu_create("\rEchipament", "EquipmentCmd");
		menu_additem(Menu, "\wArme noi", "1", 0);
		if(PrimaryWeapon[id] && SecondaryWeapon[id]) {
			menu_additem(Menu, "\wArmele anterioare", "2", 0);
			menu_additem(Menu, "\wNu arata meniul din nou^n", "3", 0);
		}
		else {
			menu_additem(Menu, "\dArmele anterioare", "2", 0);
			menu_additem(Menu, "\dNu arata meniul din nou^n", "3", 0);
		}
		menu_setprop(Menu, MPROP_EXIT, MEXIT_NEVER)
		menu_display(id, Menu, 0);
	}
}

public EquipmentCmd(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id) || get_user_team(id) != 2) {
		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: {
			if(!HavePrimaryWeapon[id])
				Primary(id)
			else if(!HaveSecondaryWeapon[id])
				Secondary(id)
		}
		case 2: {
			if(PrimaryWeapon[id] && SecondaryWeapon[id])
				GiveLastWeapons(id)
			else Equipment(id)
		}
		case 3: {
			if(PrimaryWeapon[id] && SecondaryWeapon[id]) {
				ShowMenu[id] = false
				GiveLastWeapons(id)
			}
			else Equipment(id)
		}
		
		default: return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
public Primary(id) {
	if(is_user_alive(id) && get_user_team(id) == 2) {
		Menu = menu_create("\rPrimare", "PrimaryCmd");
		
		if(get_user_flags(id) & ADMIN_LEVEL)
			menu_additem(Menu, "\rArme Admini", "1", 0);
		else
			menu_additem(Menu, "\dArme Admini", "1", 0);
		if(get_user_flags(id) & VIP_LEVEL)
			menu_additem(Menu, "\yArme VIP", "2", 0);
		else
			menu_additem(Menu, "\dArme VIP", "2", 0);
		menu_additem(Menu, "\wArme Playeri", "3", 0);
		menu_setprop(Menu, MPROP_EXIT, MEXIT_NEVER)
		menu_display(id, Menu, 0);
	}
}

public PrimaryCmd(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id) || get_user_team(id) != 2) {
		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: {
			if(get_user_flags(id) & ADMIN_LEVEL)
				Primary_Admin(id)
			else {
				if(!HavePrimaryWeapon[id])
					Primary(id)
				else if(!HaveSecondaryWeapon[id])
					Secondary(id)
				ColorChat(id, "!gPentru a cumpara!t Admin!g adauga ID:!tmalanflorin");
			}
		}
		case 2: {
			if(get_user_flags(id) & VIP_LEVEL)
				Primary_VIP(id)
			else {
				if(!HavePrimaryWeapon[id])
					Primary(id)
				else if(!HaveSecondaryWeapon[id])
					Secondary(id)
				ColorChat(id, "!gPentru a cumpara!t VIP!g adauga ID:!tmalanflorin");
			}
		}
		case 3: Primary_Normal(id)
			
		default: return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public Primary_Admin(id) {
	if(is_user_alive(id) && get_user_team(id) == 2) {
		Menu = menu_create("\rArme \yAdmin", "Primary_AdminCmd");
		
		#if defined OICW
		OICW_Menu(id, "1");
		#endif
		#if defined JANUS7
		Janus7_Menu(id, "2");
		#endif
		#if defined SPEARGUN
		SpearGun_Menu(id, "3");
		#endif
		#if defined SALAMANDER
		Salamander_Menu(id, "4");
		#endif
		#if defined AT4
		AT4_Menu(id, "5");
		#endif
		#if defined ETHEREAL
		Ethereal_Menu(id, "6");
		#endif
		
		menu_setprop(Menu, MPROP_EXITNAME, "Back")
		menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL)
		menu_display(id, Menu, 0);
	}
}

public Primary_AdminCmd(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id) || get_user_team(id) != 2 || !(get_user_flags(id) & ADMIN_LEVEL)) {
		menu_destroy(menu);
		
		Primary(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 OICW
		case 1: {
			set_user_oicw(id, true);
			PrimaryWeapon[id] = OICW_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined JANUS7
		case 2: {
			set_user_janus7(id, true);
			PrimaryWeapon[id] = JANUS7_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined SPEARGUN
		case 3: {
			set_user_speargun(id, true);
			PrimaryWeapon[id] = SPEARGUN_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined SALAMANDER
		case 4: {
			set_user_salamander(id, true);
			PrimaryWeapon[id] = SALAMANDER_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined AT4
		case 5: {
			set_user_at4(id, true);
			PrimaryWeapon[id] = AT4_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined ETHEREAL
		case 6: {
			set_user_ethereal(id, true);
			PrimaryWeapon[id] = ETHEREAL_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		
		
		default: return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public Primary_VIP(id) {
	if(is_user_alive(id) && get_user_team(id) == 2) {
		Menu = menu_create("\rArme \yVIP", "Primary_VIPCmd");
		
		#if defined CROSSBOW
		CrossBow_Menu(id, "1");
		#endif
		#if defined QUADBARREL
		QuadBarrel_Menu(id, "2");
		#endif
		#if defined DUALMP7A1
		DualMP7A1_Menu(id, "3");
		#endif
		#if defined K1ASES
		K1ases_Menu(id, "4");
		#endif
		#if defined F2000
		F2000_Menu(id, "5");
		#endif
		
		menu_setprop(Menu, MPROP_EXITNAME, "Back")
		menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL)
		menu_display(id, Menu, 0);
	}
}

public Primary_VIPCmd(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id) || get_user_team(id) != 2 || !(get_user_flags(id) & VIP_LEVEL)) {
		menu_destroy(menu);
		
		Primary(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 CROSSBOW
		case 1: {
			set_user_crossbow(id, true);
			PrimaryWeapon[id] = CROSSBOW_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined QUADBARREL
		case 2: {
			set_user_quadbarrel(id, true);
			PrimaryWeapon[id] = QUADBARREL_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined DUALMP7A1
		case 3: {
			set_user_dualmp7a1(id, true);
			PrimaryWeapon[id] = DUALMP7A1_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined K1ASES
		case 4: {
			set_user_k1ases(id, true);
			PrimaryWeapon[id] = K1ASES_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined F2000
		case 5: {
			set_user_f2000(id, true);
			PrimaryWeapon[id] = F2000_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		
		default: return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public Primary_Normal(id) {
	if(is_user_alive(id) && get_user_team(id) == 2) {
		Menu = menu_create("\rArme \yPlayeri", "Primary_NormalCmd");
		
		#if defined HK416
		HK416_Menu("1");
		#endif
		#if defined AK47KNIFE
		AK47Knife_Menu("2");
		#endif
		#if defined TAR21
		Tar21_Menu("3");
		#endif
		#if defined M134
		M134_Menu("4");
		#endif
		#if defined THOMPSON
		Thompson_Menu("5");
		#endif
		#if defined DUALBARREL
		DualBarrel_Menu("6");
		#endif
		#if defined M1887
		M1887_Menu("7");
		#endif
		#if defined L85
		L85_Menu("8");
		#endif
		#if defined SKULL5
		Skull5_Menu("9");
		#endif
		#if defined SL8
		SL8_Menu("10");
		#endif
		#if defined AW50
		AW50_Menu("11");
		#endif
		
		menu_setprop(Menu, MPROP_EXITNAME, "Back")
		menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL)
		menu_display(id, Menu, 0);
	}
}

public Primary_NormalCmd(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id) || get_user_team(id) != 2) {
		menu_destroy(menu);
		
		Primary(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 HK416
		case 1: {
			set_user_hk416(id, true);
			PrimaryWeapon[id] = HK416_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined AK47KNIFE
		case 2: {
			set_user_ak47knife(id, true);
			PrimaryWeapon[id] = AK47KNIFE_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined TAR21
		case 3: {
			set_user_tar21(id, true);
			PrimaryWeapon[id] = TAR21_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined M134
		case 4: {
			set_user_m134(id, true);
			PrimaryWeapon[id] = M134_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined THOMPSON
		case 5: {
			set_user_thompson(id, true);
			PrimaryWeapon[id] = THOMPSON_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined DUALBARREL
		case 6: {
			set_user_dualbarrel(id, true);
			PrimaryWeapon[id] = DUALBARREL_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined M1887
		case 7: {
			set_user_m1887(id, true);
			PrimaryWeapon[id] = M1887_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined L85
		case 8: {
			set_user_l85(id, true);
			PrimaryWeapon[id] = L85_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined SKULL5
		case 9: {
			set_user_skull5(id, true);
			PrimaryWeapon[id] = SKULL5_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined SL8
		case 10: {
			set_user_sl8(id, true);
			PrimaryWeapon[id] = SL8_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		#if defined AW50
		case 11: {
			set_user_aw50(id, true);
			PrimaryWeapon[id] = AW50_WEAPONKEY
			HavePrimaryWeapon[id] = true
			Secondary(id)
		}
		#endif
		
		default: return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public Secondary(id) {
	if(is_user_alive(id)  && get_user_team(id) == 2 && !HaveSecondaryWeapon[id]) {
		Menu = menu_create("\rSecundare", "SecondaryCmd");
		
		#if defined JANUS1
		Janus1_Menu(id, "1")
		#endif
		#if defined M79
		M79_Menu(id, "2")
		#endif
		#if defined DUALDEAGLE
		DualDeagle_Menu("3")
		#endif
		#if defined INFINITY
		Infinity_Menu("4")
		#endif
		#if defined DEAGLEGOLD
		DeagleGold_Menu("5")
		#endif
		#if defined K5
		K5_Menu("6")
		#endif
		#if defined SKULL1
		Skull1_Menu("7")
		#endif
		#if defined ANACONDA
		Anaconda_Menu("8")
		#endif
		
		menu_setprop(Menu, MPROP_EXIT, MEXIT_NEVER)
		menu_display(id, Menu, 0);
	}
	return PLUGIN_CONTINUE;
}

public SecondaryCmd(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id) || get_user_team(id) != 2) {
		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 JANUS1
		case 1: {
			if(get_user_flags(id) & ADMIN_LEVEL) {
				set_user_janus1(id, true);
				SecondaryWeapon[id] = JANUS1_WEAPONKEY
				HaveSecondaryWeapon[id] = true
			}
			else
				Secondary(id)
		}
		#endif
		#if defined M79
		case 2: {
			if(get_user_flags(id) & VIP_LEVEL) {
				set_user_m79(id, true);
				SecondaryWeapon[id] = M79_WEAPONKEY
				HaveSecondaryWeapon[id] = true
			}
			else
				Secondary(id)
		}
		#endif		
		#if defined DUALDEAGLE
		case 3: {
			set_user_dualdeagle(id, true);
			SecondaryWeapon[id] = DUALDEAGLE_WEAPONKEY
			HaveSecondaryWeapon[id] = true
		}
		#endif
		#if defined INFINITY
		case 4: {
			set_user_infinity(id, true);
			SecondaryWeapon[id] = INFINITY_WEAPONKEY
			HaveSecondaryWeapon[id] = true
		}
		#endif
		#if defined DEAGLEGOLD
		case 5: {
			set_user_deaglegold(id, true);
			SecondaryWeapon[id] = DEAGLEGOLD_WEAPONKEY
			HaveSecondaryWeapon[id] = true
		}
		#endif
		#if defined K5
		case 6: {
			set_user_k5(id, true);
			SecondaryWeapon[id] = K5_WEAPONKEY
			HaveSecondaryWeapon[id] = true
		}
		#endif
		#if defined SKULL1
		case 7: {
			set_user_skull1(id, true);
			SecondaryWeapon[id] = SKULL1_WEAPONKEY
			HaveSecondaryWeapon[id] = true
		}
		#endif
		#if defined ANACONDA
		case 8: {
			set_user_anaconda(id, true);
			SecondaryWeapon[id] = ANACONDA_WEAPONKEY
			HaveSecondaryWeapon[id] = true
		}
		#endif
		
		default: return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public GiveLastWeapons(id) {
	if(!HavePrimaryWeapon[id]) {
		switch(PrimaryWeapon[id]) {
			#if defined OICW
			case OICW_WEAPONKEY: {
				if(get_user_flags(id) & ADMIN_LEVEL) {
					set_user_oicw(id, true)
					HavePrimaryWeapon[id] = true
				}
				else
					PrimaryWeapon[id] = 0
			}
			#endif
			#if defined JANUS7
			case JANUS7_WEAPONKEY: {
				if(get_user_flags(id) & ADMIN_LEVEL) {
					set_user_janus7(id, true);
					HavePrimaryWeapon[id] = true
				}
				else
					PrimaryWeapon[id] = 0
			}
			#endif
			#if defined SPEARGUN
			case SPEARGUN_WEAPONKEY: {
				if(get_user_flags(id) & ADMIN_LEVEL) {
					set_user_speargun(id, true)
					HavePrimaryWeapon[id] = true
				}
				else
					PrimaryWeapon[id] = 0
			}
			#endif
			#if defined SALAMANDER
			case SALAMANDER_WEAPONKEY: {
				if(get_user_flags(id) & ADMIN_LEVEL) {
					set_user_salamander(id, true)
					HavePrimaryWeapon[id] = true
				}
				else
					PrimaryWeapon[id] = 0
			}
			#endif
			#if defined AT4
			case AT4_WEAPONKEY: {
				if(get_user_flags(id) & ADMIN_LEVEL) {
					set_user_at4(id, true)
					HavePrimaryWeapon[id] = true
				}
				else
					PrimaryWeapon[id] = 0
			}
			#endif
			#if defined ETHEREAL
			case ETHEREAL_WEAPONKEY: {
				if(get_user_flags(id) & ADMIN_LEVEL) {
					set_user_ethereal(id, true)
					HavePrimaryWeapon[id] = true
				}
				else
					PrimaryWeapon[id] = 0
			}
			#endif
			#if defined CROSSBOW
			case CROSSBOW_WEAPONKEY: {
				if(get_user_flags(id) & VIP_LEVEL) {
					set_user_crossbow(id, true)
					HavePrimaryWeapon[id] = true
				}
				else
					PrimaryWeapon[id] = 0
			}
			#endif
			#if defined QUADBARREL
			case QUADBARREL_WEAPONKEY: {
				if(get_user_flags(id) & VIP_LEVEL) {
					set_user_quadbarrel(id, true)
					HavePrimaryWeapon[id] = true
				}
				else
					PrimaryWeapon[id] = 0
			}
			#endif
			#if defined DUALMP7A1
			case DUALMP7A1_WEAPONKEY: {
				if(get_user_flags(id) & VIP_LEVEL) {
					set_user_dualmp7a1(id, true)
					HavePrimaryWeapon[id] = true
				}
				else
					PrimaryWeapon[id] = 0
			}
			#endif
			#if defined K1ASES
			case K1ASES_WEAPONKEY: {
				if(get_user_flags(id) & VIP_LEVEL) {
					set_user_k1ases(id, true)
					HavePrimaryWeapon[id] = true
				}
				else
					PrimaryWeapon[id] = 0
			}
			#endif
			#if defined F2000
			case F2000_WEAPONKEY: {
				if(get_user_flags(id) & VIP_LEVEL) {
					set_user_f2000(id, true)
					HavePrimaryWeapon[id] = true
				}
				else
					PrimaryWeapon[id] = 0
				
			}
			#endif
			#if defined HK416
			case HK416_WEAPONKEY: {
				set_user_hk416(id, true)
				HavePrimaryWeapon[id] = true
			}
			#endif
			#if defined AK47KNIFE
			case AK47KNIFE_WEAPONKEY: {
				set_user_ak47knife(id, true)
				HavePrimaryWeapon[id] = true
			}
			#endif
			#if defined TAR21
			case TAR21_WEAPONKEY: {
				set_user_tar21(id, true)
				HavePrimaryWeapon[id] = true
			}
			#endif
			#if defined M134
			case M134_WEAPONKEY: {
				set_user_m134(id, true)
				HavePrimaryWeapon[id] = true
			}
			#endif
			#if defined THOMPSON
			case THOMPSON_WEAPONKEY: {
				set_user_thompson(id, true)
				HavePrimaryWeapon[id] = true
			}
			#endif
			#if defined DUALBARREL
			case DUALBARREL_WEAPONKEY: {
				set_user_dualbarrel(id, true)
				HavePrimaryWeapon[id] = true
			}
			#endif
			#if defined M1887
			case M1887_WEAPONKEY: {
				set_user_m1887(id, true)
				HavePrimaryWeapon[id] = true
			}
			#endif
			#if defined L85
			case L85_WEAPONKEY: {
				set_user_l85(id, true)
				HavePrimaryWeapon[id] = true
			}
			#endif
			#if defined SKULL5
			case SKULL5_WEAPONKEY: {
				set_user_sl8(id, true)
				HavePrimaryWeapon[id] = true
			}
			#endif
			#if defined SL8
			case SL8_WEAPONKEY: {
				set_user_sl8(id, true)
				HavePrimaryWeapon[id] = true
			}
			#endif
			#if defined AW50
			case AW50_WEAPONKEY: {
				set_user_aw50(id, true)
				HavePrimaryWeapon[id] = true
			}
			#endif
		}
	}
	
	if(!HaveSecondaryWeapon[id]) {
		switch(SecondaryWeapon[id]) {
			#if defined JANUS1
			case JANUS1_WEAPONKEY: {
				if(get_user_flags(id) & ADMIN_LEVEL) {
					set_user_janus1(id, true);
					HaveSecondaryWeapon[id] = true
				}
				else
					SecondaryWeapon[id] = 0
			}
			#endif
			#if defined M79
			case M79_WEAPONKEY: {
				if(get_user_flags(id) & VIP_LEVEL) {
					set_user_m79(id, true)
					HaveSecondaryWeapon[id] = true
				}
				else
					SecondaryWeapon[id] = 0
			}
			#endif
			#if defined DUALDEAGLE
			case DUALDEAGLE_WEAPONKEY: {
				set_user_dualdeagle(id, true)
				HaveSecondaryWeapon[id] = true
			}
			#endif
			#if defined INFINITY
			case INFINITY_WEAPONKEY: {
				set_user_infinity(id, true)
				HaveSecondaryWeapon[id] = true
			}
			#endif
			#if defined DEAGLEGOLD
			case DEAGLEGOLD_WEAPONKEY: { 
				set_user_deaglegold(id, true)
				HaveSecondaryWeapon[id] = true
			}
			#endif
			#if defined K5
			case K5_WEAPONKEY: {
				set_user_k5(id, true)
				HaveSecondaryWeapon[id] = true
			}
			#endif
			#if defined SKULL1
			case SKULL1_WEAPONKEY: {
				set_user_skull1(id, true)
				HaveSecondaryWeapon[id] = true
			}
			#endif
			#if defined ANACONDA
			case ANACONDA_WEAPONKEY: {
				set_user_anaconda(id, true)
				HaveSecondaryWeapon[id] = true
			}
			#endif
		}
	}
	if(!HavePrimaryWeapon[id])
		Primary(id)
	else if(!HaveSecondaryWeapon[id])
		Secondary(id)
}


/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------------------------| OICW |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined OICW
OICW_Init() {
	register_clcmd("furien30_oicw", "Hook_OICW");
	
	register_message(get_user_msgid("DeathMsg"), "OICW_DeathMsg");
	
	register_event("CurWeapon", "OICW_ViewModel", "be", "1=1");
	register_event("WeapPickup","OICW_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "OICW_WorldModel", 1);
	register_forward(FM_UpdateClientData, "OICW_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "OICW_PlaybackEvent");
	register_forward(FM_CmdStart, "OICW_CmdStart");	
	
	RegisterHam(Ham_TakeDamage, "player", "OICW_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "OICW_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "OICW_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "OICW_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "OICW_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "OICW_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "OICW_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "OICW_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "OICW_TraceAttack_Post", 1);
	
	RegisterHam(Ham_Item_AddToPlayer, weapon_oicw, "OICW_AddToPlayer");
	RegisterHam(Ham_Item_Deploy , weapon_oicw, "OICW_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_WeaponIdle, weapon_oicw, "OICW_WeaponIdle")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_oicw, "OICW_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_oicw, "OICW_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Weapon_Reload, weapon_oicw, "OICW_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_oicw, "OICW_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_oicw, "OICW_PostFrame");
	
	register_touch(OICW_CLASS, "*", "OICW_Touch");
	
	oicwdamage = register_cvar("furien30_oicw_damage", "120");			//| OICW Damage |//
	oicwclip = register_cvar("furien30_oicw_clip", "50");				//| OICW Clip |//
	oicwrecoil = register_cvar("furien30_oicw_recoil", "0.5");			//| OICW Recoil |//
	oicwreloadtime = register_cvar("furien30_oicw_reload_time", "3.6");		//| OICW Reload Time |//
	oicwdamage2 = register_cvar("furien30_oicw_damage2", "300");			//| OICW Grenade Damage |//
	oicwreloadtime2 = register_cvar("furien30_oicw_reload_time2", "3.0");		//| OICW Grenade Reload Time |//
	oicwradius = register_cvar("furien30_oicw_radius", "250.0");			//| OICW Grenade Radius |//
	oicwknockback = register_cvar("furien30_oicw_knockback", "2.0");			//| OICW Grenade Knockback |//
}

OICW_Precache() {
	register_forward(FM_PrecacheEvent, "OICW_PrecacheEvent_Post", 1);
	
	oicw_trail = precache_model("sprites/xbeam3.spr");
	oicw_explode = precache_model("sprites/furien30_weapons/explode.spr");
	
	precache_model(OICWModel_V);
	precache_model(OICWModel_P);
	precache_model(OICWModel_W);
	precache_model(OICWModel_S);
	for(new i = 0; i < sizeof(OICW_Sound); i++)
		engfunc(EngFunc_PrecacheSound, OICW_Sound);	
	for(new i = 0; i < sizeof(OICW_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, OICW_Generic);
}

OICW_Natives() {
	register_native("get_user_oicw", "get_user_oicw", 1);
	register_native("set_user_oicw", "set_user_oicw", 1);
}

OICW_Menu(id, const Num[] = "1") {
	new _OICW[64];
	if(get_user_flags(id) & ADMIN_LEVEL)
		formatex(_OICW,sizeof(_OICW)-1,"\wOICW");
	else
		formatex(_OICW,sizeof(_OICW)-1,"\dOICW \w- \rOnly ADMIN\w");
	menu_additem(Menu, _OICW, Num, 0);
}

public OICW_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "galil") && get_user_weapon(Attacker) == CSW_OICW) {
		if(get_user_oicw(Attacker))
			set_msg_arg_string(4, "OICW");
	}
	return PLUGIN_CONTINUE;
}

public OICW_ViewModel(id) {
	if(get_user_weapon(id) == CSW_OICW && get_user_oicw(id)) {
		set_pev(id, pev_viewmodel2, OICWModel_V);
		set_pev(id, pev_weaponmodel2, OICWModel_P);
	}
	return PLUGIN_CONTINUE;
}

public OICW_WorldModel(entity, model[]) {
	if(is_valid_ent(entity)) {
		static ClassName[33];
		entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
		
		if(equal(ClassName, "weaponbox")) {
			new Owner = entity_get_edict(entity, EV_ENT_owner);	
			new _OICW = find_ent_by_owner(-1, weapon_oicw, entity);
			
			if(get_user_oicw(Owner) && is_valid_ent(_OICW) && equal(model, "models/w_galil.mdl")) {
				entity_set_int(_OICW, EV_INT_impulse, OICW_WEAPONKEY);
				HaveOICW[Owner] = false;
				entity_set_model(entity, OICWModel_W);
			}
		}
	}
	return FMRES_IGNORED;
}

public OICW_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id) && get_user_weapon(id) == CSW_OICW && get_user_oicw(id))
		set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	return FMRES_IGNORED;
}

public OICW_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(is_user_connected(invoker) && eventid == oicw_event)
		playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	return FMRES_IGNORED;
}

public OICW_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/galil.sc", name))
		oicw_event = get_orig_retval();
	return FMRES_IGNORED;
}

public OICW_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		
		static _OICW;
		_OICW = fm_find_ent_by_owner(-1, weapon_oicw, id);	
		
		if(CurButton & IN_ATTACK && oicw_launcher[id]) {
			if(pev_valid(_OICW) && get_user_weapon(id) == CSW_OICW && get_user_oicw(id)) {
				if(cs_get_weapon_ammo(_OICW) > 0 && !oicw_reload[id] && NextAttack <= 0.0) {
					set_weapon_anim(id, 7);
					emit_sound(id, CHAN_WEAPON, OICW_Sound[1], 1.0, ATTN_NORM, 0, PITCH_NORM);
					OICW_Fire(id);
					new Float:PunchAngle[3]
					PunchAngle[0] = random_float(-5.0, -7.0), PunchAngle[1] = 0.0, PunchAngle[0] = 0.0
					set_pev(id, pev_punchangle, PunchAngle);
					cs_set_weapon_ammo(_OICW, cs_get_weapon_ammo(_OICW) - 1);
					if(cs_get_weapon_ammo(_OICW) > 0 && !oicw_reload[id] && NextAttack <= 0.0) {
						set_pdata_float(id, 83, oicw_shotdelay, 5);
						set_pdata_float(_OICW, 48, 3.0, 4);
					}
				}
				CurButton &= ~IN_ATTACK;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
		
		if(CurButton & IN_ATTACK2 && !(pev(id, pev_oldbuttons) & IN_ATTACK2)) {
			if(pev_valid(_OICW) && get_user_weapon(id) == CSW_OICW && get_user_oicw(id) && NextAttack <= 0.0) {
				if(oicw_launcher[id]) {
					oicw_launcher[id] = false;
					cs_set_weapon_ammo(_OICW, OICWCarabineAmmo[id]);
					set_pdata_float(_OICW, 48, 1.3, 4)
					set_pdata_float(id, 83, 1.2, 5);
					set_weapon_anim(id, 10)
				}
				else {
					oicw_launcher[id] = true;
					OICWCarabineAmmo[id] = cs_get_weapon_ammo(_OICW)
					cs_set_weapon_ammo(_OICW, 1);
					set_pdata_float(_OICW, 48, 1.3, 4)
					set_pdata_float(id, 83, 1.2, 5);
					set_weapon_anim(id, 9)
				}
				CurButton &= ~IN_ATTACK2;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
	}
	return FMRES_IGNORED;
}

public OICW_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE) && get_user_weapon(attacker) == CSW_OICW && get_user_oicw(attacker)) {
		if(is_user_connected(victim)) {
			new Body, Target, Float:NewDamage;
			get_user_aiming(attacker, Target, Body, 999999);
			NewDamage = float(get_damage_body(Body, get_pcvar_float(oicwdamage)));
			SetHamParamFloat(4, NewDamage);
		} 
		else
			SetHamParamFloat(4, get_pcvar_float(oicwdamage));
	}
	return HAM_IGNORED;
}

public OICW_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(is_user_alive(attacker) && is_user_connected(attacker) && get_user_weapon(attacker) == CSW_OICW && get_user_oicw(attacker)) {
		static Float:End[3];
		get_tr2(pentru, TR_vecEndPos, End);
		
		make_bullet(attacker, End);
	}
	return HAM_IGNORED;
}

public OICW_AddToPlayer(Weapon, id) {
	if(pev_valid(Weapon) && is_user_alive(id) && entity_get_int(Weapon, EV_INT_impulse) == OICW_WEAPONKEY) {
		HaveOICW[id] = true;
		OICWCarabineAmmo[id] = cs_get_weapon_ammo(Weapon)
		WeaponList(id, OICW_WEAPONKEY)
		entity_set_int(Weapon, EV_INT_impulse, 0);
	}
	return HAM_IGNORED;
}

public OICW_Deploy_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_oicw(Owner)) {
			set_pev(Owner, pev_viewmodel2, OICWModel_V);
			set_pev(Owner, pev_weaponmodel2, OICWModel_P);
			set_weapon_anim(Owner, 5)
			
			set_pdata_float(Owner, 83, 1.2, 5);
			set_pdata_float(Weapon, 48, 1.2, 4)
			
			if(cs_get_weapon_ammo(Weapon) > 0)
				oicw_reload[Owner] = false;
		}
	}
	return HAM_IGNORED;
}

public OICW_WeaponIdle(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_oicw(Owner) && get_pdata_float(Weapon, 48, 4) <= 0.1)  {
			set_pdata_float(Weapon, 48, 2.7, 4)
			set_weapon_anim(Owner, oicw_launcher[Owner] ? 6 : 0)
		}
	}
	return HAM_IGNORED;
}

public OICW_PrimaryAttack(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_oicw(Owner) && !oicw_launcher[Owner]) {
			pev(Owner, pev_punchangle, cl_pushangle[Owner]);
			oicw_clip[Owner] = cs_get_weapon_ammo(Weapon);
		}
	}
	return HAM_IGNORED;
}

public OICW_PrimaryAttack_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		new ActiveItem = get_pdata_cbase(Owner, 373) ;
		
		if(is_user_alive(Owner) && get_user_oicw(Owner) && oicw_clip[Owner] > 0 && pev_valid(ActiveItem) && !oicw_launcher[Owner]) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(Owner, 111, get_gametime());
			
			new Float:Push[3];
			pev(Owner, pev_punchangle, Push);
			xs_vec_sub(Push, cl_pushangle[Owner], Push);
			
			xs_vec_mul_scalar(Push, get_pcvar_float(oicwrecoil), Push);
			xs_vec_add(Push, cl_pushangle[Owner], Push);
			set_pev(Owner, pev_punchangle, Push);
			
			emit_sound(Owner, CHAN_WEAPON, OICW_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(Owner, random_num(1, 3))
		}
	}
	return HAM_IGNORED;
}

public OICW_Reload(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_oicw(Owner)) {		
			oicw_clip[Owner] = -1;
			
			if(cs_get_user_bpammo(Owner, CSW_OICW) <= 0 || !oicw_launcher[Owner] && get_pdata_int(Weapon, 51, 4) >= get_pcvar_num(oicwclip) || oicw_launcher[Owner] && get_pdata_int(Weapon, 51, 4) >= 1)
				return HAM_SUPERCEDE;
			
			oicw_clip[Owner] = get_pdata_int(Weapon, 51, 4);
			oicw_reload[Owner] = true;
		}
	}
	return HAM_IGNORED;
}

public OICW_Reload_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_oicw(Owner) && oicw_clip[Owner] != -1) {			
			set_pdata_int(Weapon, 51, oicw_clip[Owner], 4);
			set_pdata_float(Weapon, 48, oicw_launcher[Owner] ? get_pcvar_float(oicwreloadtime2) : get_pcvar_float(oicwreloadtime), 4);
			set_pdata_float(Owner, 83, oicw_launcher[Owner] ? get_pcvar_float(oicwreloadtime2) : get_pcvar_float(oicwreloadtime), 5);
			set_pdata_int(Weapon, 54, 1, 4);
			if(oicw_launcher[Owner])
				set_weapon_anim(Owner, 7)
			else
				set_weapon_anim(Owner, 4)
		}
	}
	return HAM_IGNORED;
}

public OICW_PostFrame(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_oicw(Owner) && get_pdata_int(Weapon, 54, 4) && get_pdata_float(Owner, 83, 5) <= 0.0) {
			new Temp = min((oicw_launcher[Owner] ? 1 : get_pcvar_num(oicwclip)) - get_pdata_int(Weapon, 51, 4), cs_get_user_bpammo(Owner, CSW_OICW));
			
			set_pdata_int(Weapon, 51, get_pdata_int(Weapon, 51, 4) + Temp, 4);
			cs_set_user_bpammo(Owner, CSW_OICW, cs_get_user_bpammo(Owner, CSW_OICW) - Temp);		
			set_pdata_int(Weapon, 54, 0, 4);
			
			oicw_reload[Owner] = false;
			
			if(!oicw_launcher[Owner])
				OICWCarabineAmmo[Owner] = get_pdata_int(Weapon, 51, 4) + Temp
		}
	}
	return HAM_IGNORED;
}

public OICW_Fire(id) {
	new Grenade = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
	
	if(pev_valid(Grenade)) {
		new Float:Origin[3], Float:Angles[3], Float:Velocity[3]
		engfunc(EngFunc_GetAttachment, id, 0, Origin, Angles);
		pev(id, pev_angles, Angles);
		
		set_pev(Grenade, pev_origin, Origin);
		set_pev(Grenade, pev_angles, Angles);
		set_pev(Grenade, pev_solid, SOLID_BBOX);
		set_pev(Grenade, pev_movetype, MOVETYPE_PUSHSTEP);
		
		set_pev(Grenade, pev_classname, OICW_CLASS);		
		
		set_pev(Grenade, pev_owner, id);
		engfunc(EngFunc_SetModel, Grenade, OICWModel_S);
		
		set_pev(Grenade, pev_mins, {-2.0, -2.0, -2.0});
		set_pev(Grenade, pev_maxs, {2.0, 2.0, 2.0});
		
		velocity_by_aim(id, 2000, Velocity);
		set_pev(Grenade, pev_velocity, Velocity);
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
		write_byte(TE_BEAMFOLLOW); // TE id
		write_short(Grenade); // entity:attachment to follow
		write_short(oicw_trail); // sprite index
		write_byte(1); // life in 0.1's
		write_byte(1); // line width in 0.1's
		write_byte(255); // r
		write_byte(0); // g
		write_byte(0); // b
		write_byte(200); // brightness
		message_end();
	}
}

public OICW_Touch(Grenade, touch) {
	if(is_valid_ent(Grenade)) {
		static Float:GrenadeOrigin[3];
		pev(Grenade, pev_origin, GrenadeOrigin);	
		new id = pev(Grenade, pev_owner);
		
		message_begin(MSG_BROADCAST ,SVC_TEMPENTITY);
		write_byte(TE_EXPLOSION);
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[0]);
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[1]);
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[2]);
		write_short(oicw_explode);	// sprite index
		write_byte(20);			// scale in 0.1's
		write_byte(30);			// framerate
		write_byte(0);			// flags
		message_end();
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_WORLDDECAL)
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[0])
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[1])
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[2])
		write_byte(random_num(46, 48))
		message_end()	
		
		static ClassName[32];
		pev(touch, pev_classname, ClassName, charsmax(ClassName));
		
		if(equal(ClassName, "player") && is_user_connected(touch) && is_user_alive(touch)) {
			if(!fm_get_user_godmode(touch) && get_user_team(touch) != get_user_team(id) && touch != id) {
				new Float:Damage = get_pcvar_float(oicwdamage2);
				//make_blood(touch, get_pcvar_num(oicwdamage2))
				make_knockback(touch, GrenadeOrigin, get_pcvar_float(oicwknockback) * Damage);	
				if(get_user_health(touch) > Damage)
					ExecuteHam(Ham_TakeDamage, touch, id, id, Damage, DMG_BLAST);
				else			
					death_message(id, touch, "OICW");			
			}
		}
		else if(equal(ClassName, "func_breakable")) {		
			if(entity_get_float(touch, EV_FL_health) <= get_pcvar_num(oicwdamage2))
				force_use(id, touch);
		}
		
		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 && Victim != touch) {
				new Float:VictimOrigin[3], Float:Distance_F, Distance;
				pev(Victim, pev_origin, VictimOrigin);
				Distance_F = get_distance_f(GrenadeOrigin, VictimOrigin);
				Distance = floatround(Distance_F);
				if(Distance <= get_pcvar_float(oicwradius)) {								
					new Float:DistanceRatio, Float:Damage;
					DistanceRatio = floatdiv(float(Distance), get_pcvar_float(oicwradius));
					Damage = get_pcvar_float(oicwdamage2) - floatround(floatmul(get_pcvar_float(oicwdamage2), DistanceRatio));
					//make_blood(Victim, floatround(Damage));
					make_knockback(Victim, GrenadeOrigin, get_pcvar_float(oicwknockback)*Damage);
					if(get_user_health(Victim) > Damage)
						ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_BLAST);
					else		
						death_message(id, Victim, "OICW");
				}
			}
		}
		engfunc(EngFunc_RemoveEntity, Grenade);
	}
}

public Hook_OICW(id) {
	engclient_cmd(id, weapon_oicw);
	return PLUGIN_HANDLED
}

public get_user_oicw(id)
	return HaveOICW[id];

public set_user_oicw(id, oicw) {
	if(oicw) {
		if(!HaveOICW[id]) {
			drop_primary_weapons(id);
			HaveOICW[id] = true;
			oicw_launcher[id] = false;
			oicw_reload[id] = false;
			
			fm_give_item(id, weapon_oicw);
			WeaponList(id, OICW_WEAPONKEY)
			
			new Weapon = fm_get_user_weapon_entity(id, CSW_OICW);
			cs_set_weapon_ammo(Weapon, get_pcvar_num(oicwclip));
			OICWCarabineAmmo[id] = get_pcvar_num(oicwclip)
		}
	}
	else {
		if(HaveOICW[id])
			HaveOICW[id] = false;
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------------------------| Janus7 |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined JANUS7
Janus7_Init() {
	register_clcmd("furien30_janus7", "Hook_Janus7");
	
	register_message(get_user_msgid("DeathMsg"), "Janus7_DeathMsg");
	
	register_event("CurWeapon", "Janus7_ViewModel", "be", "1=1");
	register_event("WeapPickup","Janus7_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "Janus7_WorldModel", 1);
	register_forward(FM_UpdateClientData, "Janus7_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "Janus7_PlaybackEvent");
	register_forward(FM_CmdStart, "Janus7_CmdStart");	
	
	RegisterHam(Ham_TakeDamage, "player", "Janus7_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "Janus7_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "Janus7_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "Janus7_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "Janus7_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "Janus7_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "Janus7_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "Janus7_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "Janus7_TraceAttack_Post", 1);
	
	RegisterHam(Ham_Item_AddToPlayer, weapon_janus7, "Janus7_AddToPlayer");
	RegisterHam(Ham_Item_Deploy , weapon_janus7, "Janus7_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_WeaponIdle, weapon_janus7, "Janus7_WeaponIdle")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_janus7, "Janus7_PrimaryAttack");
	RegisterHam(Ham_Weapon_Reload, weapon_janus7, "Janus7_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_janus7, "Janus7_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_janus7, "Janus7_PostFrame");
	
	janus7damage = register_cvar("furien30_janus7_damage", "80");			//| Janus7 Damage |//
	janus7clip = register_cvar("furien30_janus7_clip", "80");			//| Janus7 Clip |//
	janus7recoil = register_cvar("furien30_janus7_recoil", "0.5");			//| Janus7 Recoil |//
	janus7reloadtime = register_cvar("furien30_janus7_reload_time", "4.7");		//| Janus7 Reload Time |//
	janus7damage2 = register_cvar("furien30_janus7_damage2", "100");			//| Janus7 Grenade Damage |//
	janus7knockback = register_cvar("furien30_janus7_knockback", "1.0");		//| Janus7 Grenade Knockback |//
}

Janus7_Precache() {
	register_forward(FM_PrecacheEvent, "Janus7_PrecacheEvent_Post", 1);
	
	janus7_beam = precache_model("sprites/zbeam4.spr");	
	janus7_explode = precache_model("sprites/furien30_weapons/janus7_explode.spr");
	
	precache_model(Janus7Model_V);
	precache_model(Janus7Model_P);
	precache_model(Janus7Model_W);
	
	for(new i = 0; i < sizeof(Janus7_Sound); i++)
		engfunc(EngFunc_PrecacheSound, Janus7_Sound);	
	for(new i = 0; i < sizeof(Janus7_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, Janus7_Generic);
}

Janus7_Natives() {
	register_native("get_user_janus7", "get_user_janus7", 1);
	register_native("set_user_janus7", "set_user_janus7", 1);
}

Janus7_Menu(id, const Num[] = "1") {
	new _Janus7[64];
	if(get_user_flags(id) & ADMIN_LEVEL)
		formatex(_Janus7,sizeof(_Janus7)-1,"\wJanus7");
	else
		formatex(_Janus7,sizeof(_Janus7)-1,"\dJanus7 \w- \rOnly ADMIN\w");
	menu_additem(Menu, _Janus7, Num, 0);
}

public Janus7_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "m249") && get_user_weapon(Attacker) == CSW_JANUS7) {
		if(get_user_janus7(Attacker))
			set_msg_arg_string(4, "Janus7");
	}
	return PLUGIN_CONTINUE;
}

public Janus7_ViewModel(id) {
	if(get_user_weapon(id) == CSW_JANUS7 && get_user_janus7(id)) {
		set_pev(id, pev_viewmodel2, Janus7Model_V);
		set_pev(id, pev_weaponmodel2, Janus7Model_P);
	}
	return PLUGIN_CONTINUE;
}

public Janus7_WorldModel(entity, model[]) {
	if(is_valid_ent(entity)) {
		static ClassName[33];
		entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
		
		if(equal(ClassName, "weaponbox")) {
			new Owner = entity_get_edict(entity, EV_ENT_owner);	
			new _Janus7 = find_ent_by_owner(-1, weapon_janus7, entity);
			
			if(get_user_janus7(Owner) && is_valid_ent(_Janus7) && equal(model, "models/w_m249.mdl")) {
				entity_set_int(_Janus7, EV_INT_impulse, JANUS7_WEAPONKEY);
				HaveJanus7[Owner] = false;
				entity_set_model(entity, Janus7Model_W);
			}
		}
	}
	return FMRES_IGNORED;
}

public Janus7_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id) && get_user_weapon(id) == CSW_JANUS7 && get_user_janus7(id))
		set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	return FMRES_IGNORED;
}

public Janus7_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(is_user_connected(invoker) && eventid == janus7_event)
		playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	return FMRES_IGNORED;
}

public Janus7_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/m249.sc", name))
		janus7_event = get_orig_retval();
	return FMRES_IGNORED;
}

public Janus7_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		
		static _Janus7;
		_Janus7 = fm_find_ent_by_owner(-1, weapon_janus7, id);	
		
		if(CurButton & IN_ATTACK && janus7_launcher[id]) {
			if(pev_valid(_Janus7) && get_user_weapon(id) == CSW_JANUS7 && get_user_janus7(id)) {
				if(cs_get_weapon_ammo(_Janus7) > 0 && !janus7_reload[id] && NextAttack <= 0.0) {
					set_weapon_anim(id, random_num(9, 10));
					emit_sound(id, CHAN_WEAPON, Janus7_Sound[1], 1.0, ATTN_NORM, 0, PITCH_NORM);
					Janus7_Fire(id);
					new Float:PunchAngle[3]
					PunchAngle[0] = random_float(-3.0, -5.0), PunchAngle[1] = 0.0, PunchAngle[0] = 0.0
					set_pev(id, pev_punchangle, PunchAngle);
					if(cs_get_weapon_ammo(_Janus7) <= 1) {
						set_pdata_float(_Janus7, 48, 1.7, 4)
						set_pdata_float(id, 83, 1.7, 5);
						janus7_launcher[id] = false;
						Janus7LauncherDelay[id] = get_gametime() + 30.0
						cs_set_weapon_ammo(_Janus7, Janus7CarabineAmmo[id]);
						set_weapon_anim(id, 11)
					}
					else 
						cs_set_weapon_ammo(_Janus7, cs_get_weapon_ammo(_Janus7) - 1);
					
					if(cs_get_weapon_ammo(_Janus7) > 0 && !janus7_reload[id] && NextAttack <= 0.0) {
						set_pdata_float(id, 83, janus7_shotdelay, 5);
						set_pdata_float(_Janus7, 48, 1.0, 4)
					}
				}
				CurButton &= ~IN_ATTACK;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
		
		if(CurButton & IN_ATTACK2 && !(pev(id, pev_oldbuttons) & IN_ATTACK2)) {
			if(pev_valid(_Janus7) && get_user_weapon(id) == CSW_JANUS7 && get_user_janus7(id) && NextAttack <= 0.0) {
				if(!janus7_launcher[id] && Janus7LauncherDelay[id] <= get_gametime()) {
					janus7_launcher[id] = true;
					Janus7CarabineAmmo[id] = cs_get_weapon_ammo(_Janus7)
					cs_set_weapon_ammo(_Janus7, 50);
					set_pdata_float(_Janus7, 48, 2.0, 4)
					set_pdata_float(id, 83, 2.0, 5);
					set_weapon_anim(id, 6)
				}
				CurButton &= ~IN_ATTACK2;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
	}
	return FMRES_IGNORED;
}

public Janus7_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE) && get_user_weapon(attacker) == CSW_JANUS7 && get_user_janus7(attacker)) {
		if(is_user_connected(victim)) {
			new Body, Target, Float:NewDamage;
			get_user_aiming(attacker, Target, Body, 999999);
			NewDamage = float(get_damage_body(Body, get_pcvar_float(janus7damage)));
			SetHamParamFloat(4, NewDamage);
		} 
		else
			SetHamParamFloat(4, get_pcvar_float(janus7damage));
	}
	return HAM_IGNORED;
}

public Janus7_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(is_user_alive(attacker) && is_user_connected(attacker) && get_user_weapon(attacker) == CSW_JANUS7 && get_user_janus7(attacker)) {
		static Float:End[3];
		get_tr2(pentru, TR_vecEndPos, End);
		
		make_bullet(attacker, End);
	}
	return HAM_IGNORED;
}

public Janus7_AddToPlayer(Weapon, id) {
	if(pev_valid(Weapon) && is_user_alive(id) && entity_get_int(Weapon, EV_INT_impulse) == JANUS7_WEAPONKEY) {
		janus7_launcher[id] = false;
		HaveJanus7[id] = true;
		Janus7CarabineAmmo[id] = cs_get_weapon_ammo(Weapon)
		WeaponList(id, JANUS7_WEAPONKEY)
		entity_set_int(Weapon, EV_INT_impulse, 0);
	}
	return HAM_IGNORED;
}

public Janus7_Deploy_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus7(Owner)) {
			set_pev(Owner, pev_viewmodel2, Janus7Model_V);
			set_pev(Owner, pev_weaponmodel2, Janus7Model_P);
			
			if(janus7_launcher[Owner])
				set_weapon_anim(Owner, 8);
			else
				set_weapon_anim(Owner, Janus7LauncherDelay[Owner] <= get_gametime() ? 14 : 2);
			
			set_pdata_float(Owner, 83, 1.2, 5);
			set_pdata_float(Weapon, 48, 1.2, 4)
			
			if(cs_get_weapon_ammo(Weapon) > 0)
				janus7_reload[Owner] = 0;
		}
	}
	return HAM_IGNORED;
}

public Janus7_WeaponIdle(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus7(Owner) && get_pdata_float(Weapon, 48, 4) <= 0.1)  {
			set_pdata_float(Weapon, 48, 3.0, 4)
			if(janus7_launcher[Owner])
				set_weapon_anim(Owner, 7)
			else
				set_weapon_anim(Owner, Janus7LauncherDelay[Owner] <= get_gametime() ? 12 : 0)
		}
	}
	return HAM_IGNORED;
}

public Janus7_PrimaryAttack(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus7(Owner)) {
			if(janus7_launcher[Owner])
				return HAM_SUPERCEDE
			else {
				pev(Owner, pev_punchangle, cl_pushangle[Owner]);
				janus7_clip[Owner] = cs_get_weapon_ammo(Weapon);
			}
		}
	}
	return HAM_IGNORED;
}

public Janus7_PrimaryAttack_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		new ActiveItem = get_pdata_cbase(Owner, 373) ;
		
		if(is_user_alive(Owner) && get_user_janus7(Owner)) {
			if(janus7_launcher[Owner])
				return HAM_SUPERCEDE
			else if(janus7_clip[Owner] > 0 && pev_valid(ActiveItem)) {
				set_pdata_int(ActiveItem, 57, Shell, 4) ;
				set_pdata_float(Owner, 111, get_gametime());
				
				new Float:Push[3];
				pev(Owner, pev_punchangle, Push);
				xs_vec_sub(Push, cl_pushangle[Owner], Push);
				
				xs_vec_mul_scalar(Push, get_pcvar_float(janus7recoil), Push);
				xs_vec_add(Push, cl_pushangle[Owner], Push);
				set_pev(Owner, pev_punchangle, Push);
				
				emit_sound(Owner, CHAN_WEAPON, Janus7_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
				set_weapon_anim(Owner, Janus7LauncherDelay[Owner] <= get_gametime() ? 5 : random_num(3, 4))
			}
		}
	}
	return HAM_IGNORED;
}

public Janus7_Reload(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus7(Owner)) {
			janus7_clip[Owner] = -1;
			
			if(cs_get_user_bpammo(Owner, CSW_JANUS7) <= 0 || get_pdata_int(Weapon, 51, 4) >= get_pcvar_num(janus7clip) || janus7_launcher[Owner])
				return HAM_SUPERCEDE;
			
			janus7_clip[Owner] = get_pdata_int(Weapon, 51, 4);
			janus7_reload[Owner] = true;
		}
	}
	return HAM_IGNORED;
}

public Janus7_Reload_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus7(Owner)) {
			if(janus7_launcher[Owner])
				return HAM_SUPERCEDE
			else if(janus7_clip[Owner] != -1) {			
				set_pdata_int(Weapon, 51, janus7_clip[Owner], 4);
				set_pdata_float(Weapon, 48, get_pcvar_float(janus7reloadtime), 4);
				set_pdata_float(Owner, 83, get_pcvar_float(janus7reloadtime), 5);
				set_pdata_int(Weapon, 54, 1, 4);
				set_weapon_anim(Owner, Janus7LauncherDelay[Owner] <= get_gametime() ? 13 : 1)
			}
		}
	}
	return HAM_IGNORED;
}

public Janus7_PostFrame(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus7(Owner)) { 
			if(janus7_launcher[Owner])
				return HAM_SUPERCEDE
			else if(get_pdata_int(Weapon, 54, 4) && get_pdata_float(Owner, 83, 5) <= 0.0) {
				new Temp = min((get_pcvar_num(janus7clip)) - get_pdata_int(Weapon, 51, 4), cs_get_user_bpammo(Owner, CSW_JANUS7));
				
				set_pdata_int(Weapon, 51, get_pdata_int(Weapon, 51, 4) + Temp, 4);
				cs_set_user_bpammo(Owner, CSW_JANUS7, cs_get_user_bpammo(Owner, CSW_JANUS7) - Temp);		
				set_pdata_int(Weapon, 54, 0, 4);
				
				janus7_reload[Owner] = false;		
				Janus7CarabineAmmo[Owner] = get_pdata_int(Weapon, 51, 4) + Temp
			}			
		}			
	}
	return HAM_IGNORED;
}

public Janus7_Fire(id) {	
	static Victim, Body, EndOrigin[3], BeamOrigin[3];
	get_user_origin(id, BeamOrigin, 3) ;
	get_user_origin(id, EndOrigin, 3);
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
	write_byte(TE_BEAMENTPOINT);
	write_short(id | 0x1000);
	write_coord(BeamOrigin[0]);	// Start X
	write_coord(BeamOrigin[1]);	// Start Y
	write_coord(BeamOrigin[2]);	// Start Z
	write_short(janus7_beam);	// Sprite
	write_byte(0);      		// Start frame				
	write_byte(1);     		// Frame rate					
	write_byte(1);			// Life
	write_byte(15);   		// Line width				
	write_byte(5);    		// Noise
	write_byte(200); 		// Red
	write_byte(100);		// Green
	write_byte(0);			// Blue
	write_byte(150);     		// Brightness					
	write_byte(0);      		// Scroll speed					
	message_end();
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(3);
	write_coord(EndOrigin[0]);
	write_coord(EndOrigin[1]);
	write_coord(EndOrigin[2]);
	write_short(janus7_explode);
	write_byte(10);
	write_byte(15);
	write_byte(4);
	message_end();
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_WORLDDECAL)
	write_coord(EndOrigin[0])
	write_coord(EndOrigin[1])
	write_coord(EndOrigin[2])
	write_byte(random_num(46, 48))
	message_end()
	
	get_user_aiming(id, Victim, Body, 999999);
	static ClassName[32];
	pev(Victim, pev_classname, ClassName, charsmax(ClassName));
	
	if(equal(ClassName, "player") && is_user_connected(Victim) && is_user_alive(Victim)) {
		if(!fm_get_user_godmode(Victim) && get_user_team(Victim) != get_user_team(id) && Victim != id) {
			new Float:Damage = float(get_damage_body(Body, get_pcvar_float(janus7damage2)));
			new Float:Origin[3];
			pev(id, pev_origin, Origin);
			//make_blood(Victim, floatround(Damage))
			make_knockback(Victim, Origin, get_pcvar_float(janus7knockback)*get_pcvar_float(janus7damage2));
			if(get_user_health(Victim) > Damage)
				ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_NERVEGAS);
			else 
				death_message(id, Victim, "Janus7");
		}
	}
	else if(equal(ClassName, "func_breakable")) {		
		if(entity_get_float(Victim, EV_FL_health) <= get_pcvar_num(janus7damage2))
			force_use(id, Victim);
	}
}

public Hook_Janus7(id) {
	engclient_cmd(id, weapon_janus7);
	return PLUGIN_HANDLED
}

public get_user_janus7(id)
	return HaveJanus7[id];

public set_user_janus7(id, janus7) {
	if(janus7) {
		if(!HaveJanus7[id]) {
			drop_primary_weapons(id);
			HaveJanus7[id] = true;
			janus7_launcher[id] = false;
			janus7_reload[id] = false;
			Janus7LauncherDelay[id] = get_gametime() + 10.0
			
			fm_give_item(id, weapon_janus7);
			WeaponList(id, JANUS7_WEAPONKEY)
			
			new Weapon = fm_get_user_weapon_entity(id, CSW_JANUS7);
			cs_set_weapon_ammo(Weapon, get_pcvar_num(janus7clip));
			Janus7CarabineAmmo[id] = get_pcvar_num(janus7clip)
		}
	}
	else {
		if(HaveJanus7[id])
			HaveJanus7[id] = false;
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------------------------| SpearGun |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined SPEARGUN
SpearGun_Init() {
	register_clcmd("furien30_speargun", "Hook_SpearGun");
	
	register_event("CurWeapon", "SpearGun_ViewModel", "be", "1=1");
	register_event("WeapPickup","SpearGun_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "SpearGun_WorldModel", 1);
	register_forward(FM_UpdateClientData, "SpearGun_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "SpearGun_PlaybackEvent");
	register_forward(FM_CmdStart, "SpearGun_CmdStart");	
	
	RegisterHam(Ham_Item_AddToPlayer, weapon_speargun, "SpearGun_AddToPlayer");
	RegisterHam(Ham_Item_Deploy , weapon_speargun, "SpearGun_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_WeaponIdle, weapon_speargun, "SpearGun_WeaponIdle")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_speargun, "SpearGun_PrimaryAttack");
	RegisterHam(Ham_Weapon_Reload, weapon_speargun, "SpearGun_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_speargun, "SpearGun_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_speargun, "SpearGun_PostFrame");
	
	register_touch(SPEARGUN_CLASS, "*", "SpearGun_Touch");
	
	speargundamage = register_cvar("furien30_speargun_damage", "300");		//| SpearGun Damage |//
	speargunreloadtime = register_cvar("furien30_speargun_reload_time", "1.8");	//| SpearGun Reload Time |//
	speargunradius = register_cvar("furien30_speargun_radius", "250.0");		//| SpearGun Bolt Radius |//
	speargunknockback = register_cvar("furien30_speargun_knockback", "3.0");		//| SpearGun Bolt Knockback |//
}

SpearGun_Precache() {
	register_forward(FM_PrecacheEvent, "SpearGun_PrecacheEvent_Post", 1);
	
	speargun_trail = precache_model("sprites/xbeam3.spr");
	speargun_explode = precache_model("sprites/furien30_weapons/explode.spr");
	
	precache_model(SpearGunModel_V);
	precache_model(SpearGunModel_P);
	precache_model(SpearGunModel_W);
	precache_model(SpearGunModel_S);
	for(new i = 0; i < sizeof(SpearGun_Sound); i++)
		engfunc(EngFunc_PrecacheSound, SpearGun_Sound);	
	for(new i = 0; i < sizeof(SpearGun_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, SpearGun_Generic);
}

SpearGun_Natives() {
	register_native("get_user_speargun", "get_user_speargun", 1);
	register_native("set_user_speargun", "set_user_speargun", 1);
}

SpearGun_Menu(id, const Num[] = "1") {
	new _SpearGun[64];
	if(get_user_flags(id) & ADMIN_LEVEL)
		formatex(_SpearGun,sizeof(_SpearGun)-1,"\wSpear Gun");
	else
		formatex(_SpearGun,sizeof(_SpearGun)-1,"\dSpear Gun \w- \rOnly ADMIN\w");
	menu_additem(Menu, _SpearGun, Num, 0);
}

public SpearGun_ViewModel(id) {
	if(get_user_weapon(id) == CSW_SPEARGUN && get_user_speargun(id)) {
		set_pev(id, pev_viewmodel2, SpearGunModel_V);
		set_pev(id, pev_weaponmodel2, SpearGunModel_P);
	}
	return PLUGIN_CONTINUE
}

public SpearGun_WorldModel(entity, model[]) {
	if(is_valid_ent(entity)) {
		static ClassName[33];
		entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
		
		if(equal(ClassName, "weaponbox")) {
			new Owner = entity_get_edict(entity, EV_ENT_owner);	
			new _SpearGun = find_ent_by_owner(-1, weapon_speargun, entity);
			
			if(get_user_speargun(Owner) && is_valid_ent(_SpearGun) && equal(model, "models/w_galil.mdl")) {
				entity_set_int(_SpearGun, EV_INT_impulse, SPEARGUN_WEAPONKEY);
				HaveSpearGun[Owner] = false;
				entity_set_model(entity, SpearGunModel_W);
			}
		}
	}
	return FMRES_IGNORED;
}

public SpearGun_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id) && get_user_weapon(id) == CSW_SPEARGUN && get_user_speargun(id))	
		set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	return FMRES_IGNORED;
}

public SpearGun_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(is_user_connected(invoker) && eventid == speargun_event)
		playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	return FMRES_IGNORED;
}

public SpearGun_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/galil.sc", name))
		speargun_event = get_orig_retval();
	return FMRES_IGNORED;
}

public SpearGun_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		
		
		if(CurButton & IN_ATTACK) {
			if(get_user_weapon(id) == CSW_SPEARGUN && get_user_speargun(id)) {
				static _SpearGun;
				_SpearGun = fm_find_ent_by_owner(-1, weapon_speargun, id);	
				
				if(pev_valid(_SpearGun) && cs_get_weapon_ammo(_SpearGun) > 0 && !speargun_reload[id] && NextAttack <= 0.0) {
					set_weapon_anim(id, 1);
					emit_sound(id, CHAN_WEAPON, SpearGun_Sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
					SpearGun_Fire(id);
					new Float:PunchAngle[3]
					PunchAngle[0] = random_float(-5.0, -7.0), PunchAngle[1] = 0.0, PunchAngle[0] = 0.0
					set_pev(id, pev_punchangle, PunchAngle);
					cs_set_weapon_ammo(_SpearGun, cs_get_weapon_ammo(_SpearGun) - 1);
					if(cs_get_weapon_ammo(_SpearGun) > 0 && !speargun_reload[id] && NextAttack <= 0.0) {
						set_pdata_float(id, 83, speargun_shotdelay, 5);
						set_pdata_float(_SpearGun, 48, 1.0, 4)
					}
				}
				CurButton &= ~IN_ATTACK;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
	}
	return FMRES_IGNORED;
}

public SpearGun_AddToPlayer(Weapon, id) {
	if(pev_valid(Weapon) && is_user_alive(id) && entity_get_int(Weapon, EV_INT_impulse) == SPEARGUN_WEAPONKEY) {
		HaveSpearGun[id] = true;
		WeaponList(id, SPEARGUN_WEAPONKEY)
		entity_set_int(Weapon, EV_INT_impulse, 0);
	}
	return HAM_IGNORED;
}

public SpearGun_Deploy_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_speargun(Owner)) {
			set_pev(Owner, pev_viewmodel2, SpearGunModel_V);
			set_pev(Owner, pev_weaponmodel2, SpearGunModel_P);
			set_weapon_anim(Owner, 3)
			
			set_pdata_float(Owner, 83, 1.2, 5);
			set_pdata_float(Weapon, 48, 1.2, 4)
			
			if(cs_get_weapon_ammo(Weapon) > 0)
				speargun_reload[Owner] = 0;
		}
	}
	return HAM_IGNORED;
}

public SpearGun_WeaponIdle(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_speargun(Owner) && get_pdata_float(Weapon, 48, 4) <= 0.1)  {
			set_pdata_float(Weapon, 48, 1.7, 4)
			set_weapon_anim(Owner, 0)
		}
	}
	return HAM_IGNORED;
}

public SpearGun_PrimaryAttack(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		if(is_user_alive(Owner) && get_user_speargun(Owner))
			return HAM_SUPERCEDE;
	}
	return HAM_IGNORED;
}

public SpearGun_Reload(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_speargun(Owner)) {		
			speargun_clip[Owner] = -1;
			
			if(cs_get_user_bpammo(Owner, CSW_SPEARGUN) <= 0 || get_pdata_int(Weapon, 51, 4) >= 1)
				return HAM_SUPERCEDE;
			
			speargun_clip[Owner] = get_pdata_int(Weapon, 51, 4);
			speargun_reload[Owner] = true;
		}
	}
	return HAM_IGNORED;
}

public SpearGun_Reload_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_speargun(Owner) && speargun_clip[Owner] != -1) {			
			set_pdata_int(Weapon, 51, speargun_clip[Owner], 4);
			set_pdata_float(Weapon, 48, get_pcvar_float(speargunreloadtime), 4);
			set_pdata_float(Owner, 83, get_pcvar_float(speargunreloadtime), 5);
			set_pdata_int(Weapon, 54, 1, 4);
			set_weapon_anim(Owner, 2)
		}
	}
	return HAM_IGNORED;
}

public SpearGun_PostFrame(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_speargun(Owner) && get_pdata_int(Weapon, 54, 4) && get_pdata_float(Owner, 83, 5) <= 0.0) {
			new Temp = min(1 - get_pdata_int(Weapon, 51, 4), cs_get_user_bpammo(Owner, CSW_SPEARGUN));
			
			set_pdata_int(Weapon, 51, get_pdata_int(Weapon, 51, 4) + Temp, 4);
			cs_set_user_bpammo(Owner, CSW_SPEARGUN, cs_get_user_bpammo(Owner, CSW_SPEARGUN) - Temp);		
			set_pdata_int(Weapon, 54, 0, 4);
			
			speargun_reload[Owner] = false;
		}
	}
	return HAM_IGNORED;
}

public SpearGun_Fire(id) {
	new Bolt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
	
	if(pev_valid(Bolt)) {
		new Float:Origin[3], Float:Angles[3], Float:Velocity[3];
		engfunc(EngFunc_GetAttachment, id, 0, Origin, Angles);
		pev(id, pev_angles, Angles);
		
		set_pev(Bolt, pev_origin, Origin);
		set_pev(Bolt, pev_angles, Angles);
		set_pev(Bolt, pev_solid, SOLID_BBOX);
		set_pev(Bolt, pev_movetype, MOVETYPE_FLY);
		
		set_pev(Bolt, pev_classname, SPEARGUN_CLASS);		
		
		set_pev(Bolt, pev_owner, id);
		engfunc(EngFunc_SetModel, Bolt, SpearGunModel_S);
		
		set_pev(Bolt, pev_mins, {-1.0, -1.0, -1.0});
		set_pev(Bolt, pev_maxs, {1.0, 1.0, 1.0});
		
		velocity_by_aim(id, 2000, Velocity);
		set_pev(Bolt, pev_velocity, Velocity);
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
		write_byte(TE_BEAMFOLLOW); // TE id
		write_short(Bolt); // entity:attachment to follow
		write_short(speargun_trail); // sprite index
		write_byte(1); // life in 0.1's
		write_byte(1); // line width in 0.1's
		write_byte(255); // r
		write_byte(255); // g
		write_byte(255); // b
		write_byte(200); // brightness
		message_end();
	}
}

public SpearGun_Touch(Bolt, touch) {
	if(is_valid_ent(Bolt)) {
		static Float:BoltOrigin[3];
		pev(Bolt, pev_origin, BoltOrigin);	
		new id = pev(Bolt, pev_owner);
		
		message_begin(MSG_BROADCAST ,SVC_TEMPENTITY);
		write_byte(TE_EXPLOSION);
		engfunc(EngFunc_WriteCoord, BoltOrigin[0]);
		engfunc(EngFunc_WriteCoord, BoltOrigin[1]);
		engfunc(EngFunc_WriteCoord, BoltOrigin[2]);
		write_short(speargun_explode);	// sprite index
		write_byte(20);			// scale in 0.1's
		write_byte(30);			// framerate
		write_byte(0);			// flags
		message_end();
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_WORLDDECAL)
		engfunc(EngFunc_WriteCoord, BoltOrigin[0])
		engfunc(EngFunc_WriteCoord, BoltOrigin[1])
		engfunc(EngFunc_WriteCoord, BoltOrigin[2])
		write_byte(random_num(46, 48))
		message_end()	
		
		static ClassName[32];
		pev(touch, pev_classname, ClassName, charsmax(ClassName));
		if(equal(ClassName, "player") && is_user_connected(touch) && is_user_alive(touch)) {
			if(!fm_get_user_godmode(touch) && get_user_team(touch) != get_user_team(id) && touch != id) {
				new Float:Damage = get_pcvar_float(speargundamage);			
				//make_blood(touch, get_pcvar_num(speargundamage))
				make_knockback(touch, BoltOrigin, get_pcvar_float(speargunknockback) * Damage);	
				if(get_user_health(touch) > Damage)
					ExecuteHam(Ham_TakeDamage, touch, id, id, Damage, DMG_BLAST);
				else
					death_message(id, touch, "SpearGun");
				
			}
		}
		else if(equal(ClassName, "func_breakable")) {		
			if(entity_get_float(touch, EV_FL_health) <= get_pcvar_num(speargundamage))
				force_use(id, touch);
		}
		
		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 && Victim != touch) {
				new Float:VictimOrigin[3], Float:Distance_F, Distance;
				pev(Victim, pev_origin, VictimOrigin);
				Distance_F = get_distance_f(BoltOrigin, VictimOrigin);
				Distance = floatround(Distance_F);
				if(Distance <= get_pcvar_float(speargunradius)) {								
					new Float:DistanceRatio, Float:Damage;
					DistanceRatio = floatdiv(float(Distance), get_pcvar_float(speargunradius));
					Damage = get_pcvar_float(speargundamage) - floatround(floatmul(get_pcvar_float(speargundamage), DistanceRatio));
					//make_blood(Victim, floatround(Damage))
					make_knockback(Victim, BoltOrigin, get_pcvar_float(speargunknockback)*Damage);	
					if(get_user_health(Victim) - Damage >= 1)
						ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_BLAST);
					else		
						death_message(id, Victim, "SpearGun");
				}
			}
		}
		engfunc(EngFunc_RemoveEntity, Bolt);
	}
}

public Hook_SpearGun(id) {
	engclient_cmd(id, weapon_speargun);
	return PLUGIN_HANDLED
}

public get_user_speargun(id)
	return HaveSpearGun[id];

public set_user_speargun(id, speargun) {
	if(speargun) {
		if(!HaveSpearGun[id]) {
			drop_primary_weapons(id);
			HaveSpearGun[id] = true;
			speargun_reload[id] = 0;
			
			WeaponList(id, SPEARGUN_WEAPONKEY)
			fm_give_item(id, weapon_speargun);
			
			new Clip = fm_get_user_weapon_entity(id, CSW_SPEARGUN);
			cs_set_weapon_ammo(Clip, 1);
		}
	}
	else {
		if(HaveSpearGun[id])
			HaveSpearGun[id] = false;
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------| Salamander |-------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined SALAMANDER
Salamander_Init() {
	register_clcmd("furien30_salamander", "Hook_Salamander");
	
	register_event("CurWeapon", "Salamander_ViewModel", "be", "1=1");
	register_event("WeapPickup","Salamander_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "Salamander_WorldModel", 1);
	register_forward(FM_UpdateClientData, "Salamander_UpdateClientData", 1);
	register_forward(FM_PlaybackEvent, "Salamander_PlaybackEvent");
	register_forward(FM_CmdStart, "Salamander_CmdStart");	
	
	RegisterHam(Ham_Item_AddToPlayer, weapon_salamander, "Salamander_AddToPlayer");
	RegisterHam(Ham_Item_Deploy , weapon_salamander, "Salamander_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_WeaponIdle, weapon_salamander, "Salamander_WeaponIdle")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_salamander, "Salamander_PrimaryAttack");
	RegisterHam(Ham_Weapon_Reload, weapon_salamander, "Salamander_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_salamander, "Salamander_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_salamander, "Salamander_PostFrame");	
	
	register_think(SALAMANDER_CLASS, "Salamander_Think");
	
	register_touch(SALAMANDER_CLASS, "*", "Salamander_Touch");
	
	salamanderdamage = register_cvar("furien30_salamander_damage", "40.0");		//| Salamander Damage |//
	salamanderclip = register_cvar("furien30_salamander_clip", "120");		//| Salamander Clip |//
	salamanderreloadtime = register_cvar("furien30_salamander_reload_time", "5.0");	//| Salamander Reload Time |//
	salamanderradius = register_cvar("furien30_salamander_radius", "50.0");		//| Salamander Radius |//
}

Salamander_Precache() {
	register_forward(FM_PrecacheEvent, "Salamander_PrecacheEvent_Post", 1);

	precache_model(SalamanderModel_V);
	precache_model(SalamanderModel_P);
	precache_model(SalamanderModel_W);
	precache_model(SalamanderModel_FIRE);
	for(new i = 0; i < sizeof(Salamander_Sound); i++)
		engfunc(EngFunc_PrecacheSound, Salamander_Sound);	
	for(new i = 0; i < sizeof(Salamander_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, Salamander_Generic);
}

Salamander_Natives() {
	register_native("get_user_salamander", "get_user_salamander", 1);
	register_native("set_user_salamander", "set_user_salamander", 1);
}

Salamander_Menu(id, const Num[] = "1") {
	new Salamander[64];
	if(get_user_flags(id) & ADMIN_LEVEL)
		formatex(Salamander,sizeof(Salamander)-1,"\wSalamander");	
	else 
		formatex(Salamander,sizeof(Salamander)-1,"\dSalamander \w- \rOnly VIP\w");
	menu_additem(Menu, Salamander, Num, 0);
}

public Salamander_ViewModel(id) {
	if(get_user_weapon(id) == CSW_SALAMANDER && get_user_salamander(id)) {
		set_pev(id, pev_viewmodel2, SalamanderModel_V);
		set_pev(id, pev_weaponmodel2, SalamanderModel_P);
	}
}

public Salamander_WorldModel(entity, model[]) {
	if(is_valid_ent(entity)) {
		static ClassName[33];
		entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
		
		if(equal(ClassName, "weaponbox")) {
			new Owner = entity_get_edict(entity, EV_ENT_owner);	
			new Salamander = find_ent_by_owner(-1, weapon_salamander, entity);
			
			if(get_user_salamander(Owner) && is_valid_ent(Salamander) && equal(model, "models/w_m249.mdl")) {
				entity_set_int(Salamander, EV_INT_impulse, SALAMANDER_WEAPONKEY);
				HaveSalamander[Owner] = false;
				entity_set_model(entity, SalamanderModel_W);
			}
		}
	}
	return FMRES_IGNORED;
}

public Salamander_UpdateClientData(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id) && get_user_weapon(id) == CSW_SALAMANDER && get_user_salamander(id))
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	return FMRES_IGNORED;
}

public Salamander_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(is_user_connected(invoker) && eventid == salamander_event)
		playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	return FMRES_IGNORED;
}

public Salamander_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/m249.sc", name))
		salamander_event = get_orig_retval();
	return FMRES_IGNORED;
}

public Salamander_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		static Salamander;
		Salamander = fm_find_ent_by_owner(-1, weapon_salamander, id);
		
		if(CurButton & IN_ATTACK) {	
			if(pev_valid(Salamander) && get_user_weapon(id) == CSW_SALAMANDER && get_user_salamander(id) && pev(id, pev_waterlevel) <= 1) {
				if(cs_get_weapon_ammo(Salamander) > 0 && !salamander_reload[id] && NextAttack <= 0.0) {
					set_weapon_anim(id, 1);
					emit_sound(id, CHAN_WEAPON, Salamander_Sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
					Salamander_Fire(id);
					new Float:PunchAngle[3]
					PunchAngle[0] = random_float(-3.0, -5.0), PunchAngle[1] = 0.0, PunchAngle[0] = 0.0
					set_pev(id, pev_punchangle, PunchAngle);
					cs_set_weapon_ammo(Salamander, cs_get_weapon_ammo(Salamander) - 1);
					if(cs_get_weapon_ammo(Salamander) > 0 && !salamander_reload[id] && NextAttack <= 0.0) {
						set_pdata_float(id, 83, salamander_shotdelay, 5);
						set_pdata_float(Salamander, 48, 2.0, 4)
					}
				}
				CurButton &= ~IN_ATTACK;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
		if(!(CurButton & IN_ATTACK) &&(pev(id, pev_oldbuttons) & IN_ATTACK) && pev(id, pev_weaponanim) == 1) {
			if(pev_valid(Salamander) && get_user_weapon(id) == CSW_SALAMANDER && get_user_salamander(id) && cs_get_weapon_ammo(Salamander) > 0 && !salamander_reload[id])
				set_weapon_anim(id, 2);
		}
		
	}
	return FMRES_IGNORED;
}

public Salamander_AddToPlayer(Weapon, id) {
	if(pev_valid(Weapon) && is_user_alive(id) && entity_get_int(Weapon, EV_INT_impulse) == SALAMANDER_WEAPONKEY) {
		HaveSalamander[id] = true;
		WeaponList(id, SALAMANDER_WEAPONKEY)
		entity_set_int(Weapon, EV_INT_impulse, 0);
	}
	return FMRES_IGNORED;
}

public Salamander_Deploy_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_salamander(Owner)) {
			set_pev(Owner, pev_viewmodel2, SalamanderModel_V);
			set_pev(Owner, pev_weaponmodel2, SalamanderModel_P);
			set_weapon_anim(Owner, 4)
			
			set_pdata_float(Owner, 83, 1.1, 5);
			set_pdata_float(Weapon, 48, 1.1, 4)
			
			if(cs_get_weapon_ammo(Weapon) > 0)
				salamander_reload[Owner] = 0;
		}
	}
	return HAM_IGNORED;
}

public Salamander_WeaponIdle(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_salamander(Owner) && get_pdata_float(Weapon, 48, 4) <= 0.1)  {
			set_pdata_float(Weapon, 48, 9.4, 4)
			set_weapon_anim(Owner, 0)
		}
	}
	return HAM_IGNORED;
}

public Salamander_PrimaryAttack(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		if(is_user_alive(Owner) && get_user_salamander(Owner))
			return HAM_SUPERCEDE;
	}
	return HAM_IGNORED;
}

public Salamander_Reload(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_salamander(Owner)) {		
			salamander_clip[Owner] = -1;
			
			if(cs_get_user_bpammo(Owner, CSW_SALAMANDER) <= 0 || get_pdata_int(Weapon, 51, 4) >= get_pcvar_num(salamanderclip))
				return HAM_SUPERCEDE;
			
			salamander_clip[Owner] = get_pdata_int(Weapon, 51, 4);
			salamander_reload[Owner] = true;
		}
	}
	return HAM_IGNORED;
}

public Salamander_Reload_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_salamander(Owner) && salamander_clip[Owner] != -1) {			
			set_pdata_int(Weapon, 51, salamander_clip[Owner], 4);
			set_pdata_float(Weapon, 48, get_pcvar_float(salamanderreloadtime), 4);
			set_pdata_float(Owner, 83, get_pcvar_float(salamanderreloadtime), 5);
			set_pdata_int(Weapon, 54, 1, 4);
			set_weapon_anim(Owner, 3)
		}
	}
	return HAM_IGNORED;
}

public Salamander_PostFrame(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_salamander(Owner) && get_pdata_int(Weapon, 54, 4) && get_pdata_float(Owner, 83, 5) <= 0.0) {
			new Temp = min(get_pcvar_num(salamanderclip) - get_pdata_int(Weapon, 51, 4), cs_get_user_bpammo(Owner, CSW_SALAMANDER));
			
			set_pdata_int(Weapon, 51, get_pdata_int(Weapon, 51, 4) + Temp, 4);
			cs_set_user_bpammo(Owner, CSW_SALAMANDER, cs_get_user_bpammo(Owner, CSW_SALAMANDER) - Temp);		
			set_pdata_int(Weapon, 54, 0, 4);
			
			salamander_reload[Owner] = false;
		}
	}
	return HAM_IGNORED;
}
public Salamander_Fire(id) {
	new Fire = create_entity("env_sprite");
	
	if(pev_valid(Fire)) {
		new Float:Origin[3], Float:Angles[3], Float:Velocity[3];
		engfunc(EngFunc_GetAttachment, id, 0, Origin, Angles);
		pev(id, pev_angles, Angles);
		
		set_pev(Fire, pev_solid, SOLID_TRIGGER);
		set_pev(Fire, pev_movetype, MOVETYPE_FLY);
		set_pev(Fire, pev_rendermode, kRenderTransAdd);
		set_pev(Fire, pev_renderamt, 250.0);
		set_pev(Fire, pev_scale, 0.5);
		
		entity_set_string(Fire, EV_SZ_classname, SALAMANDER_CLASS);
		engfunc(EngFunc_SetModel, Fire, SalamanderModel_FIRE);
		set_pev(Fire, pev_mins, Float:{-1.0, -1.0, -1.0});
		set_pev(Fire, pev_maxs, Float:{1.0, 1.0, 1.0});
		set_pev(Fire, pev_origin, Origin);
		set_pev(Fire, pev_angles, Angles);
		set_pev(Fire, pev_owner, id)
		set_pev(Fire, pev_frame, 0.0);
		
		velocity_by_aim(id, 1000, Velocity);
		set_pev(Fire, pev_velocity, Velocity);
		
		set_pev(Fire, pev_nextthink, halflife_time() + 0.02);
	}
}

public Salamander_Think(Fire) {
	if(is_valid_ent(Fire)) {
		static Float:FireOrigin[3];
		pev(Fire, pev_origin, FireOrigin);		
		
		new Float:Frame, Float:Scale
		pev(Fire, pev_frame, Frame);
		pev(Fire, pev_scale, Scale);
		
		Frame += 1.0;
		Scale += 0.1;
		
		set_pev(Fire, pev_frame, Frame);
		set_pev(Fire, pev_scale, Scale);
		set_pev(Fire, pev_nextthink, halflife_time() + 0.02);
		
		if(Frame >= 21.0)
			set_pev(Fire, pev_flags, pev(Fire, pev_flags) | FL_KILLME);
	}
}

public Salamander_Touch(Fire, touch) {
	if(is_valid_ent(Fire)) {
		static Float:FireOrigin[3];
		pev(Fire, pev_origin, FireOrigin);	
		new id = pev(Fire, pev_owner);
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_WORLDDECAL)
		engfunc(EngFunc_WriteCoord, FireOrigin[0])
		engfunc(EngFunc_WriteCoord, FireOrigin[1])
		engfunc(EngFunc_WriteCoord, FireOrigin[2])
		write_byte(random_num(46, 48))
		message_end()	
		
		static ClassName[32];
		pev(touch, pev_classname, ClassName, charsmax(ClassName));
		if(equal(ClassName, "player") && is_user_connected(touch) && is_user_alive(touch)) {
			if(!fm_get_user_godmode(touch) && get_user_team(touch) != get_user_team(id) && touch != id) {			
				new Float:Damage = get_pcvar_float(salamanderdamage)
				//make_blood(touch, get_pcvar_num(salamanderdamage))
				if(get_user_health(touch) > Damage)
					ExecuteHam(Ham_TakeDamage, touch, id, id, Damage, DMG_BURN);
				else
					death_message(id, touch, "Salamander");
			}
		}
		else if(equal(ClassName, "func_breakable")) {		
			if(entity_get_float(touch, EV_FL_health) <= get_pcvar_float(salamanderdamage))
				force_use(id, touch);
		}
		
		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 && Victim != touch) {
				new Float:VictimOrigin[3], Float:Distance_F, Distance;
				pev(Victim, pev_origin, VictimOrigin);
				Distance_F = get_distance_f(FireOrigin, VictimOrigin);
				Distance = floatround(Distance_F);
				
				if(Distance <= get_pcvar_float(salamanderradius)) {				
					new Float:DistanceRatio, Float:Damage;
					DistanceRatio = floatdiv(float(Distance), get_pcvar_float(salamanderdamage));
					Damage = get_pcvar_float(salamanderdamage) - floatround(floatmul(get_pcvar_float(salamanderdamage), DistanceRatio));
					//make_blood(touch, floatround(Damage))
					if(get_user_health(Victim) > Damage)
						ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_BURN);
					else			
						death_message(id, Victim, "Salamander");
				}
			}
		}
		
		if(id != touch && !equal(ClassName, SALAMANDER_CLASS)) {
			set_pev(Fire, pev_movetype, MOVETYPE_NONE);
			set_pev(Fire, pev_solid, SOLID_NOT);
		}
	}
}

public Hook_Salamander(id) {
	engclient_cmd(id, weapon_salamander);
	return PLUGIN_HANDLED
}

public get_user_salamander(id)
	return HaveSalamander[id];

public set_user_salamander(id, salamander) {
	if(salamander) {
		if(!HaveSalamander[id]) {
			drop_primary_weapons(id);
			HaveSalamander[id] = true;
			salamander_reload[id] = 0;
			
			WeaponList(id, SALAMANDER_WEAPONKEY)
			fm_give_item(id, weapon_salamander);
			
			new Clip = fm_get_user_weapon_entity(id, CSW_SALAMANDER);
			cs_set_weapon_ammo(Clip, get_pcvar_num(salamanderclip));
		}
	}
	else {
		if(HaveSalamander[id])
			HaveSalamander[id] = false;
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------------------------| AT4 |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined AT4
AT4_Init() {
	register_clcmd("furien30_at4", "Hook_AT4");
	
	register_event("CurWeapon", "AT4_ViewModel", "be", "1=1");
	register_event("WeapPickup","AT4_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "AT4_WorldModel", 1);
	register_forward(FM_UpdateClientData, "AT4_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "AT4_PlaybackEvent");
	register_forward(FM_PlayerPreThink, "AT4_PreThink");
	register_forward(FM_CmdStart, "AT4_CmdStart");	
	
	RegisterHam(Ham_Item_AddToPlayer, weapon_at4, "AT4_AddToPlayer");
	RegisterHam(Ham_Item_Deploy , weapon_at4, "AT4_Deploy_Post", 1);
	RegisterHam(Ham_Item_Holster , weapon_at4, "AT4_Holster");
	RegisterHam(Ham_Weapon_WeaponIdle, weapon_at4, "AT4_WeaponIdle")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_at4, "AT4_PrimaryAttack");
	RegisterHam(Ham_Weapon_Reload, weapon_at4, "AT4_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_at4, "AT4_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_at4, "AT4_PostFrame");	
	
	register_think(AT4_CLASS, "AT4_Think");
	register_think(AT4_CLASS_LASERDOT, "AT4_LaserDot_Think");
	
	register_touch(AT4_CLASS, "*", "AT4_Touch");
	
	at4damage = register_cvar("furien30_at4_damage", "400.0");		//| AT4 Damage |//
	at4radius = register_cvar("furien30_at4_radius", "320.0");		//| AT4 Radius |//
	at4knockback = register_cvar("furien30_at4_knockback", "4.0");		//| At4 KnockBack |//
	at4reloadtime = register_cvar("furien30_at4_reload_time", "2.33");	//| AT4 Reload Time |//
}

AT4_Precache() {
	register_forward(FM_PrecacheEvent, "AT4_PrecacheEvent_Post", 1);

	at4_smoke = precache_model("sprites/effects/rainsplash.spr");
	at4_trail = precache_model("sprites/xbeam3.spr");
	at4_explode = precache_model("sprites/furien30_weapons/explode.spr");
	
	precache_model(AT4Model_V);
	precache_model(AT4Model_P);
	precache_model(AT4Model_W);
	precache_model(AT4Model_S);
	precache_model(AT4Model_LASER);
	
	for(new i = 0; i < sizeof(AT4_Sound); i++)
		engfunc(EngFunc_PrecacheSound, AT4_Sound);	
	for(new i = 0; i < sizeof(AT4_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, AT4_Generic);
}

AT4_Natives() {
	register_native("get_user_at4", "get_user_at4", 1);
	register_native("set_user_at4", "set_user_at4", 1);
}

AT4_Menu(id, const Num[] = "1") {
	new _AT4[64];
	if(get_user_flags(id) & VIP_LEVEL)
		formatex(_AT4,sizeof(_AT4)-1,"\wAT4");
	else
		formatex(_AT4,sizeof(_AT4)-1,"\dAT4 \w- \rOnly VIP\w");
	menu_additem(Menu, _AT4, Num, 0);
}

public AT4_ViewModel(id) {
	if(get_user_weapon(id) == CSW_AT4 && get_user_at4(id)) {
		set_pev(id, pev_viewmodel2, AT4Model_V);
		set_pev(id, pev_weaponmodel2, AT4Model_P);
		set_pdata_int(id, 361, get_pdata_int(id, 361) | (1<<6));
	}
}

public AT4_WorldModel(entity, model[]) {
	if(is_valid_ent(entity)) {
		static ClassName[33];
		entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
		
		if(equal(ClassName, "weaponbox")) {
			new Owner = entity_get_edict(entity, EV_ENT_owner);	
			new _AT4 = find_ent_by_owner(-1, weapon_at4, entity);
			
			if(get_user_at4(Owner) && is_valid_ent(_AT4) && equal(model, "models/w_m249.mdl")) {
				entity_set_int(_AT4, EV_INT_impulse, AT4_WEAPONKEY);
				HaveAT4[Owner] = false;
				entity_set_model(entity, AT4Model_W);
				set_pdata_int(Owner, 361, get_pdata_int(Owner, 361) & ~ (1<<6));
				new Laser = find_ent_by_owner(-1, AT4_CLASS_LASERDOT, Owner);
				if(is_valid_ent(Laser))
					remove_entity(Laser);
			}
		}
	}
	return FMRES_IGNORED;
}

public AT4_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id) && get_user_weapon(id) == CSW_AT4 && get_user_at4(id))
		set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	return FMRES_IGNORED;
}

public AT4_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(is_user_connected(invoker) && eventid == at4_event)
		playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	return FMRES_IGNORED;
}

public AT4_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/m249.sc", name))
		at4_event = get_orig_retval();
	return FMRES_IGNORED;
}

public AT4_PreThink(id) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_AT4 && get_user_at4(id) && at4_detector[id]) {
			new Float: origin[3];
			fm_get_aim_origin(id,origin);
			new Laser = find_ent_by_owner(-1, AT4_CLASS_LASERDOT, id);
			
			if(!is_valid_ent(Laser)) {
				new at4_laser = create_entity("info_target");	
				set_pev(at4_laser, pev_classname, AT4_CLASS_LASERDOT);
				set_pev(at4_laser, pev_owner, id);
				engfunc(EngFunc_SetModel, at4_laser, AT4Model_LASER);
				set_pev(at4_laser, pev_renderfx, kRenderFxNoDissipation);
				set_pev(at4_laser, pev_rendermode, kRenderGlow);
				set_pev(at4_laser, pev_renderamt, 255.0);
				set_pev(at4_laser, pev_light_level, 255.0);
				set_pev(at4_laser, pev_scale, 1.0);
				set_pev(at4_laser, pev_movetype, MOVETYPE_FLY);
				set_pev(at4_laser, pev_nextthink, halflife_time() + 0.001);
			}
		}
		else {
			new Laser = find_ent_by_owner(-1, AT4_CLASS_LASERDOT, id);
			if(is_valid_ent(Laser))
				remove_entity(Laser);
		}
	}
}

public AT4_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		
		static _AT4;
		_AT4 = fm_find_ent_by_owner(-1, weapon_at4, id);	
		
		if(CurButton & IN_ATTACK) {
			if(pev_valid(_AT4) && get_user_weapon(id) == CSW_AT4 && get_user_at4(id)) {
				if(cs_get_weapon_ammo(_AT4) > 0 && !at4_reload[id] && NextAttack <= 0.0) {
					set_weapon_anim(id, 1);
					emit_sound(id, CHAN_WEAPON, AT4_Sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
					AT4_Fire(id);
					new Float:PunchAngles[3];
					PunchAngles[0] = random_float(-7.0, -10.0), PunchAngles[1] = 0.0, PunchAngles[2] = 0.0;
					set_pev(id, pev_punchangle, PunchAngles);
					cs_set_weapon_ammo(_AT4, cs_get_weapon_ammo(_AT4) - 1);
					if(cs_get_weapon_ammo(_AT4) > 0 && !at4_reload[id] && NextAttack <= 0.0) {
						set_pdata_float(id, 83, at4_shotdelay, 5);
						set_pdata_float(_AT4, 48, 0.3, 4)
					}
				}
				CurButton &= ~IN_ATTACK;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
		
		if(CurButton & IN_ATTACK2 && !(pev(id, pev_oldbuttons) & IN_ATTACK2)) {
			if(pev_valid(_AT4) && get_user_weapon(id) == CSW_AT4 && get_user_at4(id) && NextAttack <= 0.0) {
				if(at4_detector[id])
					at4_detector[id] = false;
				else
					at4_detector[id] = true;
			}
		}
	}
	return FMRES_IGNORED;
}

public AT4_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == AT4_WEAPONKEY) {
		HaveAT4[id] = true;
		WeaponList(id, AT4_WEAPONKEY)
		entity_set_int(Weapon, EV_INT_impulse, 0);
	}
	return HAM_IGNORED;
}

public AT4_Deploy_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_at4(Owner)) {
			set_pev(Owner, pev_viewmodel2, AT4Model_V);
			set_pev(Owner, pev_weaponmodel2, AT4Model_P);
			set_weapon_anim(Owner, 4)
			
			set_pdata_float(Owner, 83, 1.2, 5);
			set_pdata_float(Weapon, 48, 1.2, 4)
			
			if(cs_get_weapon_ammo(Weapon) > 0)
				at4_reload[Owner] = 0;
		}
	}
	return HAM_IGNORED;
}

public AT4_Holster(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_at4(Owner))
			set_pdata_int(Owner, 361, get_pdata_int(Owner, 361) & ~ (1<<6));
	}
	return HAM_IGNORED;
}

public AT4_WeaponIdle(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_at4(Owner) && get_pdata_float(Weapon, 48, 4) <= 0.1)  {
			set_pdata_float(Weapon, 48, 4.0, 4)
			set_weapon_anim(Owner, 0)
		}
	}
	return HAM_IGNORED;
}

public AT4_PrimaryAttack(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		if(is_user_alive(Owner) && get_user_at4(Owner))
			return HAM_SUPERCEDE;
	}
	return HAM_IGNORED;
}

public AT4_Reload(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_at4(Owner)) {		
			at4_clip[Owner] = -1;
			
			if(cs_get_user_bpammo(Owner, CSW_AT4) <= 0 || get_pdata_int(Weapon, 51, 4) >= 1)
				return HAM_SUPERCEDE;
			
			at4_clip[Owner] = get_pdata_int(Weapon, 51, 4);
			at4_reload[Owner] = true;
		}
	}
	return HAM_IGNORED;
}

public AT4_Reload_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_at4(Owner) && at4_clip[Owner] != -1) {			
			set_pdata_int(Weapon, 51, at4_clip[Owner], 4);
			set_pdata_float(Weapon, 48, get_pcvar_float(at4reloadtime), 4);
			set_pdata_float(Owner, 83, get_pcvar_float(at4reloadtime), 5);
			set_pdata_int(Weapon, 54, 1, 4);
			set_weapon_anim(Owner, 1)
		}
	}
	return HAM_IGNORED;
}

public AT4_PostFrame(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_at4(Owner) && get_pdata_int(Weapon, 54, 4) && get_pdata_float(Owner, 83, 5) <= 0.0) {
			new Temp = min(1 - get_pdata_int(Weapon, 51, 4), cs_get_user_bpammo(Owner, CSW_AT4));
			
			set_pdata_int(Weapon, 51, get_pdata_int(Weapon, 51, 4) + Temp, 4);
			cs_set_user_bpammo(Owner, CSW_AT4, cs_get_user_bpammo(Owner, CSW_AT4) - Temp);		
			set_pdata_int(Weapon, 54, 0, 4);
			
			at4_reload[Owner] = false;
		}
	}
	return HAM_IGNORED;
}

public AT4_Fire(id) {
	new Rocket = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
	
	if(pev_valid(Rocket)) {
		new Float:Origin[3], Float:Angles[3], Float:Velocity[3];
		engfunc(EngFunc_GetAttachment, id, 0, Origin, Angles);
		pev(id, pev_angles, Angles);
		
		set_pev(Rocket, pev_origin, Origin);
		set_pev(Rocket, pev_angles, Angles);
		set_pev(Rocket, pev_solid, SOLID_BBOX);
		set_pev(Rocket, pev_movetype, MOVETYPE_FLY);
		set_pev(Rocket, pev_classname, AT4_CLASS);
		
		if(at4_detector[id])
			set_pev(Rocket, pev_iuser3, 1);		
		else
			set_pev(Rocket, pev_iuser3, 0);		
		
		set_pev(Rocket, pev_owner, id);
		engfunc(EngFunc_SetModel, Rocket, AT4Model_S);
		
		set_pev(Rocket, pev_mins, {-3.0, -3.0, -3.0});
		set_pev(Rocket, pev_maxs, {3.0, 3.0, 3.0});
		
		velocity_by_aim(id, 2000, Velocity);
		set_pev(Rocket, pev_velocity, Velocity);
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
		write_byte(TE_BEAMFOLLOW); // TE id
		write_short(Rocket); // entity:attachment to follow
		write_short(at4_trail); // sprite index
		write_byte(3); // life in 0.1's
		write_byte(2); // line width in 0.1's
		write_byte(255); // r
		write_byte(255); // g
		write_byte(255); // b
		write_byte(200); // brightness
		message_end();
	}
	
	set_pev(Rocket, pev_iuser4, 0);		
	set_pev(Rocket, pev_nextthink, halflife_time() + 0.1);
}

public AT4_Think(Rocket) {
	if(is_valid_ent(Rocket)) {
		static Float:Origin[3];
		pev(Rocket, pev_origin, Origin);
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
		write_byte(TE_SPRITE);
		engfunc(EngFunc_WriteCoord, Origin[0]);
		engfunc(EngFunc_WriteCoord, Origin[1]);
		engfunc(EngFunc_WriteCoord, Origin[2]);
		write_short(at4_smoke);
		write_byte(2);
		write_byte(200);
		message_end();
		if(pev(Rocket, pev_iuser3) == 1) {
			if(pev(Rocket, pev_iuser4) == 0) {
				static Victim;
				Victim = FindClosesEnemy(Rocket);
				
				if(is_user_alive(Victim))
					set_pev(Rocket, pev_iuser4, Victim);
			}
			else {
				static Victim;
				Victim = pev(Rocket, pev_iuser4);
				
				if(is_user_alive(Victim)) {
					static Float:VicOrigin[3];
					pev(Victim, pev_origin, VicOrigin);
					
					hook_ent(Rocket, Victim, 2000.0);
				}
				else
					set_pev(Rocket, pev_iuser4, 0);
			} 
		}
		set_pev(Rocket, pev_nextthink, halflife_time() + 0.075);
	}
}

public AT4_LaserDot_Think(LaserDot) { 
	if(is_valid_ent(LaserDot)) {
		new Owner, Float:Origin[3];
		Owner = pev(LaserDot, pev_owner);
		pev(Owner, pev_origin, Origin);
		fm_get_aim_origin(Owner, Origin);
		
		set_pev(LaserDot, pev_origin, Origin);
		set_pev(LaserDot, pev_nextthink, halflife_time() + 0.001);
	}
}

public AT4_Touch(Rocket, touch) {
	if(is_valid_ent(Rocket)) {
		static Float:RocketOrigin[3];
		pev(Rocket, pev_origin, RocketOrigin);	
		new id = pev(Rocket, pev_owner);
		
		message_begin(MSG_BROADCAST ,SVC_TEMPENTITY);
		write_byte(TE_EXPLOSION);
		engfunc(EngFunc_WriteCoord, RocketOrigin[0]);
		engfunc(EngFunc_WriteCoord, RocketOrigin[1]);
		engfunc(EngFunc_WriteCoord, RocketOrigin[2]);
		write_short(at4_explode);	// sprite index
		write_byte(40);			// scale in 0.1's
		write_byte(30);			// framerate
		write_byte(0);			// flags
		message_end();
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_WORLDDECAL)
		engfunc(EngFunc_WriteCoord, RocketOrigin[0])
		engfunc(EngFunc_WriteCoord, RocketOrigin[1])
		engfunc(EngFunc_WriteCoord, RocketOrigin[2])
		write_byte(random_num(46, 48))
		message_end()	
		
		static ClassName[32];
		pev(touch, pev_classname, ClassName, charsmax(ClassName));
		if(equal(ClassName, "player") && is_user_connected(touch) && is_user_alive(touch)) {
			if(!fm_get_user_godmode(touch) && get_user_team(touch) != get_user_team(id) && touch != id) {
				new Float:Damage
				pev(Rocket, pev_iuser3) == 1 ? (Damage = (get_pcvar_float(at4damage) / 2.0)) : (Damage = get_pcvar_float(at4damage))
				//make_blood(id, get_pcvar_num(at4damage))
				make_knockback(touch, RocketOrigin, get_pcvar_float(at4knockback) * Damage);	
				if(get_user_health(touch) > Damage)
					ExecuteHam(Ham_TakeDamage, touch, id, id, Damage, DMG_BLAST);
				else		
					death_message(id, touch, "AT4");
			}	
		}
		else if(equal(ClassName, "func_breakable")) {		
			if(entity_get_float(touch, EV_FL_health) <= get_pcvar_num(at4damage))
				force_use(id, touch);
		}
		
		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 && Victim != touch) {
				new Float:VictimOrigin[3], Float:Distance_F, Distance;
				pev(Victim, pev_origin, VictimOrigin);
				Distance_F = get_distance_f(RocketOrigin, VictimOrigin);
				Distance = floatround(Distance_F);
				if(Distance <= get_pcvar_float(at4radius)) {								
					new Float:DistanceRatio, Float:Damage;
					DistanceRatio = floatdiv(float(Distance), get_pcvar_float(at4radius));
					Damage = get_pcvar_float(at4damage) - floatround(floatmul(get_pcvar_float(at4damage), DistanceRatio));
					//make_blood(id, get_pcvar_num(at4damage))
					make_knockback(Victim, RocketOrigin, get_pcvar_float(at4knockback)*Damage);	
					if(get_user_health(touch) > Damage)
						ExecuteHam(Ham_TakeDamage, touch, id, id, Damage, DMG_BLAST);
					else		
						death_message(id, touch, "AT4");
				}
			}
		}		
		engfunc(EngFunc_RemoveEntity, Rocket);
	}
}

public Hook_AT4(id) {
	engclient_cmd(id, weapon_at4);
	return PLUGIN_HANDLED
}

public get_user_at4(id)
	return HaveAT4[id];

public set_user_at4(id, at4) {
	if(at4) {
		if(!HaveAT4[id]) {
			drop_primary_weapons(id);
			HaveAT4[id] = true;
			at4_reload[id] = false;
			
			WeaponList(id, AT4_WEAPONKEY)
			fm_give_item(id, weapon_at4);
			
			new Clip = fm_get_user_weapon_entity(id, CSW_AT4);
			cs_set_weapon_ammo(Clip, 1);
		}
	}
	else {
		if(HaveAT4[id])
			HaveAT4[id] = false;
	}
}

stock FindClosesEnemy(entid) {
	new Float:Dist;
	new Float:maxdistance=300.0;
	new indexid=0;
	for(new i=1;i<=get_maxplayers();i++){
		if(is_user_alive(i) && is_valid_ent(i) && can_see_fm(entid, i)
		&& pev(entid, pev_owner) != i && cs_get_user_team(pev(entid, pev_owner)) != cs_get_user_team(i)) {
			Dist = entity_range(entid, i);
			if(Dist <= maxdistance) {
				maxdistance=Dist;
				indexid=i;
				
				return indexid;
			}
		}	
	}	
	return 0;
}
stock bool:can_see_fm(entindex1, entindex2) {
	if(!entindex1 || !entindex2)
		return false;
	
	if(pev_valid(entindex1) && pev_valid(entindex1)) {
		new flags = pev(entindex1, pev_flags);
		if(flags & EF_NODRAW || flags & FL_NOTARGET) {
			return false;
		}
		
		new Float:lookerOrig[3];
		new Float:targetBaseOrig[3];
		new Float:targetOrig[3];
		new Float:temp[3];
		
		pev(entindex1, pev_origin, lookerOrig);
		pev(entindex1, pev_view_ofs, temp);
		lookerOrig[0] += temp[0];
		lookerOrig[1] += temp[1];
		lookerOrig[2] += temp[2];
		
		pev(entindex2, pev_origin, targetBaseOrig);
		pev(entindex2, pev_view_ofs, temp);
		targetOrig[0] = targetBaseOrig[0] + temp[0];
		targetOrig[1] = targetBaseOrig[1] + temp[1];
		targetOrig[2] = targetBaseOrig[2] + temp[2];
		
		engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); //  checks the had of seen player
		if(get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater)) {
			return false;
		} 
		else {
			new Float:flFraction;
			get_tr2(0, TraceResult:TR_flFraction, flFraction);
			if(flFraction == 1.0 ||(get_tr2(0, TraceResult:TR_pHit) == entindex2)) {
				return true;
			}
			else {
				targetOrig[0] = targetBaseOrig[0];
				targetOrig[1] = targetBaseOrig[1];
				targetOrig[2] = targetBaseOrig[2];
				engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); //  checks the body of seen player
				get_tr2(0, TraceResult:TR_flFraction, flFraction);
				if(flFraction == 1.0 ||(get_tr2(0, TraceResult:TR_pHit) == entindex2)) {
					return true;
				}
				else {
					targetOrig[0] = targetBaseOrig[0];
					targetOrig[1] = targetBaseOrig[1];
					targetOrig[2] = targetBaseOrig[2] - 17.0;
					engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); //  checks the legs of seen player
					get_tr2(0, TraceResult:TR_flFraction, flFraction);
					if(flFraction == 1.0 ||(get_tr2(0, TraceResult:TR_pHit) == entindex2)) {
						return true;
					}
				}
			}
		}
	}
	return false;
}
stock hook_ent(ent, victim, Float:speed) {
	static Float:fl_Velocity[3];
	static Float:VicOrigin[3], Float:EntOrigin[3];
	
	pev(ent, pev_origin, EntOrigin);
	pev(victim, pev_origin, VicOrigin);
	
	static Float:distance_f;
	distance_f = get_distance_f(EntOrigin, VicOrigin);
	
	if(distance_f > 10.0) {
		new Float:fl_Time = distance_f / speed;
		
		fl_Velocity[0] = (VicOrigin[0] - EntOrigin[0]) / fl_Time;
		fl_Velocity[1] = (VicOrigin[1] - EntOrigin[1]) / fl_Time;
		fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time;
	}
	else {
		fl_Velocity[0] = 0.0;
		fl_Velocity[1] = 0.0;
		fl_Velocity[2] = 0.0;
	}
	
	entity_set_vector(ent, EV_VEC_velocity, fl_Velocity);
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------------------------| Ethereal |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined ETHEREAL
Ethereal_Init() {
	register_clcmd("furien30_ethereal", "Hook_Ethereal");
	
	register_event("CurWeapon", "Ethereal_ViewModel", "be", "1=1");
	register_event("WeapPickup","Ethereal_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "Ethereal_WorldModel", 1);
	register_forward(FM_UpdateClientData, "Ethereal_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "Ethereal_PlaybackEvent");

	register_forward(FM_CmdStart, "Ethereal_CmdStart");	
	
	RegisterHam(Ham_Item_AddToPlayer, weapon_ethereal, "Ethereal_AddToPlayer");
	RegisterHam(Ham_Item_Deploy , weapon_ethereal, "Ethereal_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_WeaponIdle, weapon_ethereal, "Ethereal_WeaponIdle")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_ethereal, "Ethereal_PrimaryAttack");
	RegisterHam(Ham_Weapon_Reload, weapon_ethereal, "Ethereal_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_ethereal, "Ethereal_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_ethereal, "Ethereal_PostFrame");	
	
	etherealdamage = register_cvar("furien30_ethereal_damage", "80");		//| Ethereal Damage |//
	etherealclip = register_cvar("furien30_ethereal_clip", "45");			//| Ethereal Clip |//
	etherealreloadtime = register_cvar("furien30_ethereal_reload_time", "3.03");	//| Ethereal Reload Time |//
	etherealknockback = register_cvar("furien30_ethereal_knockback", "1.0");		//| Ethereal KnockBack |//
}

Ethereal_Precache() {	
	register_forward(FM_PrecacheEvent, "Ethereal_PrecacheEvent_Post", 1);
	
	ethereal_beam = precache_model("sprites/zbeam4.spr");
	ethereal_explode = precache_model("sprites/xspark4.spr");
	
	precache_model(EtherealModel_V);
	precache_model(EtherealModel_P);
	precache_model(EtherealModel_W);
	for(new i = 0; i < sizeof(Ethereal_Sound); i++)
		engfunc(EngFunc_PrecacheSound, Ethereal_Sound[i]);	
	for(new i = 0; i < sizeof(Ethereal_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, Ethereal_Generic[i]);
}

Ethereal_Natives() {
	register_native("get_user_ethereal", "get_user_ethereal", 1);
	register_native("set_user_ethereal", "set_user_ethereal", 1);
}

Ethereal_Menu(id, const Num[] = "1") {
	new Ethereal[64];
	if(get_user_flags(id) & VIP_LEVEL)
		formatex(Ethereal,sizeof(Ethereal)-1,"\wEthereal");
	else 
		formatex(Ethereal,sizeof(Ethereal)-1,"\dEthereal - \rOnly VIP");
	menu_additem(Menu, Ethereal, Num, 0);
}

public Ethereal_ViewModel(id) {
	if(get_user_weapon(id) == CSW_ETHEREAL && get_user_ethereal(id)) {
		set_pev(id, pev_viewmodel2, EtherealModel_V);
		set_pev(id, pev_weaponmodel2, EtherealModel_P);
	}
}

public Ethereal_WorldModel(entity, model[]) {
	if(is_valid_ent(entity)) {
		static ClassName[33];
		entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
		
		if(equal(ClassName, "weaponbox")) {
			new Owner = entity_get_edict(entity, EV_ENT_owner);	
			new Ethereal = find_ent_by_owner(-1, weapon_ethereal, entity);
			
			if(get_user_ethereal(Owner) && is_valid_ent(Ethereal) && equal(model, "models/w_galil.mdl")) {
				entity_set_int(Ethereal, EV_INT_impulse, ETHEREAL_WEAPONKEY);
				HaveEthereal[Owner] = false;
				entity_set_model(entity, EtherealModel_W);
			}
		}
	}
	return FMRES_IGNORED;
}

public Ethereal_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id) && get_user_weapon(id) == CSW_ETHEREAL && get_user_ethereal(id))
		set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	return FMRES_IGNORED;
}

public Ethereal_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(is_user_connected(invoker) && eventid == ethereal_event)
		playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	return FMRES_IGNORED;
}

public Ethereal_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/galil.sc", name))
		ethereal_event = get_orig_retval();
	return FMRES_IGNORED;
}

public Ethereal_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		
		if(CurButton & IN_ATTACK) {
			if(get_user_weapon(id) == CSW_ETHEREAL && get_user_ethereal(id)) {				
				static Ethereal;
				Ethereal = fm_find_ent_by_owner(-1, weapon_ethereal, id);	
				
				if(pev_valid(Ethereal) && cs_get_weapon_ammo(Ethereal) > 0 && !ethereal_reload[id] && NextAttack <= 0.0) {
					set_weapon_anim(id, random_num(3,5));
					emit_sound(id, CHAN_WEAPON,Ethereal_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
					Ethereal_Fire(id);
					new Float:PunchAngle[3]
					PunchAngle[0] = random_float(-3.0, -5.0), PunchAngle[1] = 0.0, PunchAngle[0] = 0.0
					cs_set_weapon_ammo(Ethereal, cs_get_weapon_ammo(Ethereal) - 1);
					if(cs_get_weapon_ammo(Ethereal) > 0 && !ethereal_reload[id] && NextAttack <= 0.0) {
						set_pdata_float(id, 83, ethereal_shotdelay, 5);
						set_pdata_float(Ethereal, 48, 1.0, 4)
						
					}
				}
				CurButton &= ~IN_ATTACK;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
	}
	return FMRES_IGNORED;
}

public Ethereal_AddToPlayer(Weapon, id) {
	if(pev_valid(Weapon) && is_user_alive(id) && entity_get_int(Weapon, EV_INT_impulse) == ETHEREAL_WEAPONKEY) {
		HaveEthereal[id] = true;
		WeaponList(id, ETHEREAL_WEAPONKEY)
		entity_set_int(Weapon, EV_INT_impulse, 0);
	}
	return HAM_IGNORED;
}

public Ethereal_Deploy_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_ethereal(Owner)) {
			set_pev(Owner, pev_viewmodel2, EtherealModel_V);
			set_pev(Owner, pev_weaponmodel2, EtherealModel_P);
			set_weapon_anim(Owner, 2)
			
			set_pdata_float(Owner, 83, 1.3, 5);
			set_pdata_float(Weapon, 48, 1.3, 4)
			
			if(cs_get_weapon_ammo(Weapon) > 0)
				ethereal_reload[Owner] = 0;
			return HAM_SUPERCEDE;
		}
	}
	return HAM_IGNORED;
}

public Ethereal_WeaponIdle(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_ethereal(Owner) && get_pdata_float(Weapon, 48, 4) <= 0.1)  {
			set_pdata_float(Weapon, 48, 10.0, 4)
			set_weapon_anim(Owner, 0)
			return HAM_SUPERCEDE;
		}
	}
	return HAM_IGNORED;
}

public Ethereal_PrimaryAttack(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		if(is_user_alive(Owner) && get_user_ethereal(Owner))
			return HAM_SUPERCEDE;
	}
	return HAM_IGNORED;
}

public Ethereal_Reload(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_ethereal(Owner)) {		
			ethereal_clip[Owner] = -1;
			
			if(cs_get_user_bpammo(Owner, CSW_ETHEREAL) <= 0 || get_pdata_int(Weapon, 51, 4) >= get_pcvar_num(etherealclip))
				return HAM_SUPERCEDE;
			
			ethereal_clip[Owner] = get_pdata_int(Weapon, 51, 4);
			ethereal_reload[Owner] = true;
		}
	}
	return HAM_IGNORED;
}

public Ethereal_Reload_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_ethereal(Owner) && ethereal_clip[Owner] != -1) {			
			set_pdata_int(Weapon, 51, ethereal_clip[Owner], 4);
			set_pdata_float(Weapon, 48, get_pcvar_float(etherealreloadtime), 4);
			set_pdata_float(Owner, 83, get_pcvar_float(etherealreloadtime), 5);
			set_pdata_int(Weapon, 54, 1, 4);
			set_weapon_anim(Owner, 1)
		}
	}
	return HAM_IGNORED;
}

public Ethereal_PostFrame(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_ethereal(Owner) && get_pdata_int(Weapon, 54, 4) && get_pdata_float(Owner, 83, 5) <= 0.0) {
			new Temp = min((get_pcvar_num(etherealclip)) - get_pdata_int(Weapon, 51, 4), cs_get_user_bpammo(Owner, CSW_ETHEREAL));
			
			set_pdata_int(Weapon, 51, get_pdata_int(Weapon, 51, 4) + Temp, 4);
			cs_set_user_bpammo(Owner, CSW_ETHEREAL, cs_get_user_bpammo(Owner, CSW_ETHEREAL) - Temp);		
			set_pdata_int(Weapon, 54, 0, 4);
			
			ethereal_reload[Owner] = false;
		}
	}
	return HAM_IGNORED;
}

public Ethereal_Fire(id) {	
	static Victim, Body, EndOrigin[3], BeamOrigin[3];
	get_user_origin(id, BeamOrigin, 3) ;
	get_user_origin(id, EndOrigin, 3);
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
	write_byte(TE_BEAMENTPOINT);
	write_short(id | 0x1000);
	write_coord(BeamOrigin[0]);	// Start X
	write_coord(BeamOrigin[1]);	// Start Y
	write_coord(BeamOrigin[2]);	// Start Z
	write_short(ethereal_beam);	// Sprite
	write_byte(0);      		// Start frame				
	write_byte(1);     		// Frame rate					
	write_byte(1);			// Life
	write_byte(25);   		// Line width				
	write_byte(0);    		// Noise
	write_byte(150); 		// Red
	write_byte(0);			// Green
	write_byte(0);			// Blue
	write_byte(150);     		// Brightness					
	write_byte(0);      		// Scroll speed					
	message_end();
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(3);
	write_coord(EndOrigin[0]);
	write_coord(EndOrigin[1]);
	write_coord(EndOrigin[2]);
	write_short(ethereal_explode);
	write_byte(10);
	write_byte(15);
	write_byte(4);
	message_end();
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_WORLDDECAL)
	write_coord(EndOrigin[0])
	write_coord(EndOrigin[1])
	write_coord(EndOrigin[2])
	write_byte(random_num(46, 48))
	message_end()
	
	get_user_aiming(id, Victim, Body, 999999);
	static ClassName[32];
	pev(Victim, pev_classname, ClassName, charsmax(ClassName));
	if(equal(ClassName, "player") && is_user_connected(Victim) && is_user_alive(Victim)) {
		if(!fm_get_user_godmode(Victim) && get_user_team(Victim) != get_user_team(id) && Victim != id) {
			new Float:Damage = float(get_damage_body(Body, get_pcvar_float(etherealdamage)));
			new Float:Origin[3];
			pev(id, pev_origin, Origin);
			//make_blood(Victim, floatround(Damage))
			make_knockback(Victim, Origin, get_pcvar_float(etherealknockback)*get_pcvar_float(etherealdamage));
			if(get_user_health(Victim) > Damage)
				ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_NERVEGAS);
			else 
				death_message(id, Victim, "Ethereal");
		}
	}
	else if(equal(ClassName, "func_breakable")) {		
		if(entity_get_float(Victim, EV_FL_health) <= get_pcvar_num(etherealdamage))
			force_use(id, Victim);
	}
}

public Hook_Ethereal(id) {
	engclient_cmd(id, weapon_ethereal);
	return PLUGIN_HANDLED
}

public get_user_ethereal(id)
	return HaveEthereal[id];

public set_user_ethereal(id, ethereal) {
	if(ethereal) {
		if(!HaveEthereal[id]) {
			drop_primary_weapons(id);
			HaveEthereal[id] = true;
			ethereal_reload[id] = false;
			
			WeaponList(id, ETHEREAL_WEAPONKEY)
			fm_give_item(id, weapon_ethereal);
			
			new Clip = fm_get_user_weapon_entity(id, CSW_ETHEREAL);
			cs_set_weapon_ammo(Clip, get_pcvar_num(etherealclip));
		}
	}
	else {
		if(HaveEthereal[id])
			HaveEthereal[id] = false;
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------------------------| CrossBow |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined CROSSBOW
CrossBow_Init() {
	register_clcmd("furien30_crossbow", "Hook_CrossBow");
	
	register_event("CurWeapon", "CrossBow_ViewModel", "be", "1=1");
	register_event("WeapPickup","CrossBow_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "CrossBow_WorldModel", 1);
	register_forward(FM_UpdateClientData, "CrossBow_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "CrossBow_PlaybackEvent");
	register_forward(FM_CmdStart, "CrossBow_CmdStart");	
	
	RegisterHam(Ham_Item_AddToPlayer, weapon_crossbow, "CrossBow_AddToPlayer");
	RegisterHam(Ham_Item_Deploy , weapon_crossbow, "CrossBow_Deploy_Post", 1);
	RegisterHam(Ham_Item_Holster , weapon_crossbow, "CrossBow_Holster");
	RegisterHam(Ham_Weapon_WeaponIdle, weapon_crossbow, "CrossBow_WeaponIdle")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_crossbow, "CrossBow_PrimaryAttack");
	RegisterHam(Ham_Weapon_Reload, weapon_crossbow, "CrossBow_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_crossbow, "CrossBow_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_crossbow, "CrossBow_PostFrame");	
	
	register_touch(CROSSBOW_CLASS, "*", "CrossBow_Touch");
	
	crossbowdamage = register_cvar("furien30_crossbow_damage", "200");			//| CrossBow Damage |//
	crossbowclip = register_cvar("furien30_crossbow_clip", "20");			//| CrossBow Clip |//
	crossbowreloadtime = register_cvar("furien30_crossbow_reload_time", "3.33");	//| CrossBow Reload Time |//
	crossbowradius = register_cvar("furien30_crossbow_radius", "200");			//| CrossBow Radius |//
	crossbowknockback = register_cvar("furien30_crossbow_knockback", "3.0");		//| CrossBow KnockBack |//
}

CrossBow_Precache() {
	register_forward(FM_PrecacheEvent, "CrossBow_PrecacheEvent_Post", 1);
	
	BloodSpray = precache_model("sprites/bloodspray.spr");
	BloodDrop  = precache_model("sprites/blood.spr");
	
	crossbow_trail = precache_model("sprites/xbeam3.spr");
	crossbow_explode = precache_model("sprites/furien30_weapons/explode.spr");
	
	precache_model(CrossBowModel_V);
	precache_model(CrossBowModel_P);
	precache_model(CrossBowModel_W);
	precache_model(CrossBowModel_S);
	for(new i = 0; i < sizeof(CrossBow_Sound); i++)
		engfunc(EngFunc_PrecacheSound, CrossBow_Sound[i]);	
	for(new i = 0; i < sizeof(CrossBow_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, CrossBow_Generic[i]);
}

CrossBow_Natives() {
	register_native("get_user_crossbow", "get_user_crossbow", 1);
	register_native("set_user_crossbow", "set_user_crossbow", 1);
}

CrossBow_Menu(id, const Num[] = "1") {
	new CrossBow[64];
	if(get_user_flags(id) & VIP_LEVEL)
		formatex(CrossBow,sizeof(CrossBow)-1,"\wCrossBow");
	else
		formatex(CrossBow,sizeof(CrossBow)-1,"\dCrossBow \w- \rOnly VIP\w");
	menu_additem(Menu, CrossBow, Num, 0);
}

public CrossBow_ViewModel(id) {
	if(get_user_weapon(id) == CSW_CROSSBOW && get_user_crossbow(id)) {
		set_pev(id, pev_viewmodel2, CrossBowModel_V);
		set_pev(id, pev_weaponmodel2, CrossBowModel_P);
		set_pdata_int(id, 361, get_pdata_int(id, 361) | (1<<6));
	}
	return PLUGIN_CONTINUE
}

public CrossBow_WorldModel(entity, model[]) {
	if(is_valid_ent(entity)) {
		static ClassName[33];
		entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
		
		if(equal(ClassName, "weaponbox")) {
			new Owner = entity_get_edict(entity, EV_ENT_owner);	
			new CrossBow = find_ent_by_owner(-1, weapon_crossbow, entity);
			
			if(get_user_crossbow(Owner) && is_valid_ent(CrossBow) && equal(model, "models/w_sg552.mdl")) {
				entity_set_int(CrossBow, EV_INT_impulse, CROSSBOW_WEAPONKEY);
				HaveCrossBow[Owner] = false;
				entity_set_model(entity, CrossBowModel_W);
				set_pdata_int(Owner, 361, get_pdata_int(Owner, 361) & ~ (1<<6));
			}
		}
	}
	return FMRES_IGNORED;
}

public CrossBow_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id) && get_user_weapon(id) == CSW_CROSSBOW && get_user_crossbow(id))
		set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	return FMRES_IGNORED;
}

public CrossBow_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(is_user_connected(invoker) && eventid == crossbow_event)
		playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	return FMRES_IGNORED;
}

public CrossBow_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/sg552.sc", name))
		crossbow_event = get_orig_retval();
	return FMRES_IGNORED;
}

public CrossBow_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		
		if(CurButton & IN_ATTACK) {
			if(get_user_weapon(id) == CSW_CROSSBOW && get_user_crossbow(id)) {				
				static CrossBow;
				CrossBow = fm_find_ent_by_owner(-1, weapon_crossbow, id);	
				
				if(cs_get_weapon_ammo(CrossBow) > 0 && !crossbow_reload[id] && NextAttack <= 0.0) {
					set_weapon_anim(id, random_num(1,2));
					emit_sound(id, CHAN_WEAPON,CrossBow_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
					
					CrossBow_Fire(id);
					
					static Float:PunchAngles[3];
					
					PunchAngles[0] = random_float(-4.0, -6.0);
					PunchAngles[1] = 0.0;
					PunchAngles[2] = 0.0;
					
					set_pev(id, pev_punchangle, PunchAngles);
					cs_set_weapon_ammo(CrossBow, cs_get_weapon_ammo(CrossBow) - 1);
					if(cs_get_weapon_ammo(CrossBow) > 0 && !crossbow_reload[id] && NextAttack <= 0.0)
						set_pdata_float(id, 83, crossbow_shotdelay, 5);
				}
				CurButton &= ~IN_ATTACK;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
	}
	return FMRES_IGNORED;
}

public CrossBow_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == CROSSBOW_WEAPONKEY) {
		HaveCrossBow[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, CROSSBOW_WEAPONKEY)
	}
	return FMRES_IGNORED;
}

public CrossBow_Deploy_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_crossbow(Owner)) {
			set_pev(Owner, pev_viewmodel2, CrossBowModel_V);
			set_pev(Owner, pev_weaponmodel2, CrossBowModel_P);
			set_weapon_anim(Owner, 4)
			
			set_pdata_float(Owner, 83, 1.0, 5);
			set_pdata_float(Weapon, 48, 1.0, 4)
			
			if(cs_get_weapon_ammo(Weapon) > 0)
				crossbow_reload[Owner] = 0;
			set_pdata_int(Owner, 361, get_pdata_int(Owner, 361) | (1<<6));
		}
	}
	return HAM_IGNORED;
}

public CrossBow_Holster(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_crossbow(Owner))
			set_pdata_int(Owner, 361, get_pdata_int(Owner, 361) & ~ (1<<6));
	}
	return HAM_IGNORED;
}

public CrossBow_WeaponIdle(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_crossbow(Owner) && get_pdata_float(Weapon, 48, 4) <= 0.1)  {
			set_pdata_float(Weapon, 48, 2.0, 4)
			set_weapon_anim(Owner, 0)
		}
	}
	return HAM_IGNORED;
}

public CrossBow_PrimaryAttack(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		if(is_user_alive(Owner) && get_user_crossbow(Owner))
			return HAM_SUPERCEDE;
	}
	return HAM_IGNORED;
}

public CrossBow_Reload(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_crossbow(Owner)) {		
			crossbow_clip[Owner] = -1;
			
			if(cs_get_user_bpammo(Owner, CSW_CROSSBOW) <= 0 || get_pdata_int(Weapon, 51, 4) >= 1)
				return HAM_SUPERCEDE;
			
			crossbow_clip[Owner] = get_pdata_int(Weapon, 51, 4);
			crossbow_reload[Owner] = true;
		}
	}
	return HAM_IGNORED;
}

public CrossBow_Reload_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_crossbow(Owner) && crossbow_clip[Owner] != -1) {			
			set_pdata_int(Weapon, 51, crossbow_clip[Owner], 4);
			set_pdata_float(Weapon, 48, get_pcvar_float(crossbowreloadtime), 4);
			set_pdata_float(Owner, 83, get_pcvar_float(crossbowreloadtime), 5);
			set_pdata_int(Weapon, 54, 1, 4);
			set_weapon_anim(Owner, 3)
		}
	}
	return HAM_IGNORED;
}

public CrossBow_PostFrame(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_crossbow(Owner) && get_pdata_int(Weapon, 54, 4) && get_pdata_float(Owner, 83, 5) <= 0.0) {
			new Temp = min(1 - get_pdata_int(Weapon, 51, 4), cs_get_user_bpammo(Owner, CSW_CROSSBOW));
			
			set_pdata_int(Weapon, 51, get_pdata_int(Weapon, 51, 4) + Temp, 4);
			cs_set_user_bpammo(Owner, CSW_CROSSBOW, cs_get_user_bpammo(Owner, CSW_CROSSBOW) - Temp);		
			set_pdata_int(Weapon, 54, 0, 4);
			
			crossbow_reload[Owner] = false;
		}
	}
	return HAM_IGNORED;
}

public CrossBow_Fire(id) {	
	new Bolt, Float:Origin[3], Float:Angles[3], Float:Velocity[3];
	
	Bolt = create_entity("info_target");
	engfunc(EngFunc_GetAttachment, id, 0, Origin, Angles);
	pev(id, pev_angles, Angles);
	
	set_pev(Bolt, pev_origin, Origin);
	set_pev(Bolt, pev_angles, Angles);
	set_pev(Bolt, pev_solid, SOLID_BBOX);
	set_pev(Bolt, pev_movetype, MOVETYPE_FLY);
	
	set_pev(Bolt, pev_classname, CROSSBOW_CLASS);
	
	set_pev(Bolt, pev_owner, id);
	engfunc(EngFunc_SetModel, Bolt, CrossBowModel_S);
	
	set_pev(Bolt, pev_mins, {-1.0, -1.0, -1.0});
	set_pev(Bolt, pev_maxs, {1.0, 1.0, 1.0});
	
	velocity_by_aim(id, 2000, Velocity);
	set_pev(Bolt, pev_velocity, Velocity);
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(TE_BEAMFOLLOW); // TE id
	write_short(Bolt); // entity:attachment to follow
	write_short(crossbow_trail); // sprite index
	write_byte(1); // life in 0.1's
	write_byte(1); // line width in 0.1's
	write_byte(255); // r
	write_byte(0); // g
	write_byte(0); // b
	write_byte(200); // brightness
	message_end();	
}

public CrossBow_Touch(Bolt, touch) {
	if(is_valid_ent(Bolt)) {		
		new Float:BoltOrigin[3];
		pev(Bolt, pev_origin, BoltOrigin);
		new id = pev(Bolt, pev_owner);
		
		message_begin(MSG_BROADCAST ,SVC_TEMPENTITY);
		write_byte(TE_EXPLOSION);
		engfunc(EngFunc_WriteCoord, BoltOrigin[0]);
		engfunc(EngFunc_WriteCoord, BoltOrigin[1]);
		engfunc(EngFunc_WriteCoord, BoltOrigin[2]);
		write_short(crossbow_explode);	// sprite index
		write_byte(30);			// scale in 0.1's
		write_byte(30);			// framerate
		write_byte(0);			// flags
		message_end();
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_WORLDDECAL)
		engfunc(EngFunc_WriteCoord, BoltOrigin[0])
		engfunc(EngFunc_WriteCoord, BoltOrigin[1])
		engfunc(EngFunc_WriteCoord, BoltOrigin[2])
		write_byte(random_num(46, 48))
		message_end()	
		
		static ClassName[32];
		pev(touch, pev_classname, ClassName, charsmax(ClassName));
		if(equal(ClassName, "player") && is_user_connected(touch) && is_user_alive(touch)) {
			if(!fm_get_user_godmode(touch) && get_user_team(touch) != get_user_team(id) && touch != id) {
				new Float:Damage = get_pcvar_float(crossbowdamage)
				//make_blood(id, get_pcvar_num(crossbowdamage))
				make_knockback(touch, BoltOrigin, get_pcvar_float(crossbowknockback) * Damage);	
				
				if(get_user_health(touch) > Damage)
					ExecuteHam(Ham_TakeDamage, touch, id, id, Damage, DMG_BLAST);
				else		
					death_message(id, touch, "CrossBow");
			}	
		}
		else if(equal(ClassName, "func_breakable")) {		
			if(entity_get_float(touch, EV_FL_health) <= get_pcvar_num(crossbowdamage))
				force_use(id, touch);
		}
		
		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 && Victim != touch) {
				new Float:VictimOrigin[3], Float:Distance_F, Distance;
				pev(Victim, pev_origin, VictimOrigin);
				Distance_F = get_distance_f(BoltOrigin, VictimOrigin);
				Distance = floatround(Distance_F);
				if(Distance <= get_pcvar_float(crossbowradius)) {								
					new Float:DistanceRatio, Float:Damage;
					DistanceRatio = floatdiv(float(Distance), get_pcvar_float(crossbowradius));
					Damage = get_pcvar_float(crossbowdamage) - floatround(floatmul(get_pcvar_float(crossbowdamage), DistanceRatio));
					//make_blood(id, get_pcvar_num(crossbowdamage))
					make_knockback(Victim, BoltOrigin, get_pcvar_float(crossbowknockback)*Damage);	
					
					if(get_user_health(touch) > Damage)
						ExecuteHam(Ham_TakeDamage, touch, id, id, Damage, DMG_BLAST);
					else		
						death_message(id, touch, "CrossBow");
				}
			}
		}		
		engfunc(EngFunc_RemoveEntity, Bolt);
	}
}

public Hook_CrossBow(id) {
	engclient_cmd(id, weapon_crossbow);
	return PLUGIN_HANDLED
}

public get_user_crossbow(id)
	return HaveCrossBow[id];

public set_user_crossbow(id, crossbow) {
	if(crossbow) {
		if(!HaveCrossBow[id]) {
			drop_primary_weapons(id);
			HaveCrossBow[id] = true;
			crossbow_reload[id] = false;
			
			WeaponList(id, CROSSBOW_WEAPONKEY)
			fm_give_item(id, weapon_crossbow);
			
			new Clip = fm_get_user_weapon_entity(id, CSW_CROSSBOW);
			cs_set_weapon_ammo(Clip, get_pcvar_num(crossbowclip));
		}
	}
	else {
		if(HaveCrossBow[id])
			HaveCrossBow[id] = false;
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------| Quad Barrel |-------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined QUADBARREL
QuadBarrel_Init() {
	register_clcmd("furien30_quadbarrel", "Hook_QuadBarrel");
	
	register_message(get_user_msgid("DeathMsg"), "QuadBarrel_DeathMsg");
	
	register_event("CurWeapon", "QuadBarrel_ViewModel", "be", "1=1");
	register_event("WeapPickup","QuadBarrel_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "QuadBarrel_WorldModel");
	register_forward(FM_UpdateClientData, "QuadBarrel_UpdateClientData", 1);
	register_forward(FM_PlaybackEvent, "QuadBarrel_PlaybackEvent");
	register_forward(FM_CmdStart, "QuadBarrel_CmdStart");	
	
	RegisterHam(Ham_TakeDamage, "player", "QuadBarrel_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "QuadBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "QuadBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "QuadBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "QuadBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "QuadBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "QuadBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "QuadBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "QuadBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_quadbarrel, "QuadBarrel_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_quadbarrel, "QuadBarrel_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_quadbarrel, "QuadBarrel_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_quadbarrel, "QuadBarrel_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_quadbarrel, "QuadBarrel_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_quadbarrel, "QuadBarrel_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_quadbarrel, "QuadBarrel_PostFrame");
	
	quadbarreldamage = register_cvar("furien30_quadbarrel_damage", "3");		//| QuadBarrel Damage |//
	quadbarrelreloadtime = register_cvar("furien30_quadbarrel_reload_time", "3.03");	//| QuadBarrel Reload Time |//
	quadbarrelrecoil = register_cvar("furien30_quadbarrel_recoil", "0.8");		//| QuadBarrel Recoil |//
}

QuadBarrel_Precache() {
	register_forward(FM_PrecacheEvent, "QuadBarrel_Precache_PrecacheEvent_Post", 1);
	
	precache_model(QuadBarrelModel_V);
	precache_model(QuadBarrelModel_P);
	precache_model(QuadBarrelModel_W);
	for(new i = 0; i < sizeof(QuadBarrel_Sound); i++)
		engfunc(EngFunc_PrecacheSound, QuadBarrel_Sound[i]);	
	for(new i = 0; i < sizeof(QuadBarrel_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, QuadBarrel_Generic[i]);
}

QuadBarrel_Natives() {
	register_native("get_user_quadbarrel", "get_user_quadbarrel", 1);
	register_native("set_user_quadbarrel", "set_user_quadbarrel", 1);
}

QuadBarrel_Menu(id, const Num[] = "1") {
	new QuadBarrel[64];
	if(get_user_flags(id) & VIP_LEVEL)
		formatex(QuadBarrel,sizeof(QuadBarrel)-1,"\wQuad Barrel");
	else
		formatex(QuadBarrel,sizeof(QuadBarrel)-1,"\dQuad Barrel \w- \rOnly VIP\w");
	menu_additem(Menu, QuadBarrel, Num, 0);
}

public QuadBarrel_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "m3") && get_user_weapon(Attacker) == CSW_QUADBARREL) {
		if(get_user_quadbarrel(Attacker))
			set_msg_arg_string(4, "QuadBarrel");
	}
	return PLUGIN_CONTINUE;
}

public QuadBarrel_ViewModel(id) {
	if(get_user_weapon(id) == CSW_QUADBARREL && get_user_quadbarrel(id)) {
		set_pev(id, pev_viewmodel2, QuadBarrelModel_V);
		set_pev(id, pev_weaponmodel2, QuadBarrelModel_P);
	}
}

public QuadBarrel_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new QuadBarrel = find_ent_by_owner(-1, weapon_quadbarrel, entity);
	
	if(get_user_quadbarrel(Owner) && is_valid_ent(QuadBarrel) && equal(model, "models/w_m3.mdl")) {
		entity_set_int(QuadBarrel, EV_INT_impulse, QUADBARREL_WEAPONKEY);
		HaveQuadBarrel[Owner] = false;
		entity_set_model(entity, QuadBarrelModel_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public QuadBarrel_UpdateClientData(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_QUADBARREL && get_user_quadbarrel(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public QuadBarrel_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != quadbarrel_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public QuadBarrel_PrecacheEvent_Post(type, const name[]) {
	if(equal("events/m3.sc", name)) {
		quadbarrel_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public QuadBarrel_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		new QuadBarrel = find_ent_by_owner(-1, weapon_quadbarrel, id);
		
		if(CurButton & IN_ATTACK) {
			if(get_user_weapon(id) == CSW_QUADBARREL && get_user_quadbarrel(id)) {
				if(cs_get_weapon_ammo(QuadBarrel) > 0 && !quadbarrel_reload[id] && NextAttack <= 0.0) {
					emit_sound(id, CHAN_WEAPON, QuadBarrel_Sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
					
					ExecuteHamB(Ham_Weapon_PrimaryAttack, QuadBarrel);
					set_weapon_anim(id, random_num(1, 2));
					if(cs_get_weapon_ammo(QuadBarrel) > 0 && !quadbarrel_reload[id] && NextAttack <= 0.0)
						set_pdata_float(id, 83, quadbarrel_shotdelay, 5);
				}
			}
		}
		if(CurButton & IN_ATTACK2) {
			if(get_user_weapon(id) == CSW_QUADBARREL && get_user_quadbarrel(id)) {
				if(cs_get_weapon_ammo(QuadBarrel) > 0 && !quadbarrel_reload[id] && NextAttack <= 0.0) {
					static Ammo;
					Ammo = cs_get_weapon_ammo(QuadBarrel);
					if(Ammo >= 2)  
						Ammo = 2;
					emit_sound(id, CHAN_WEAPON, QuadBarrel_Sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
					for(new i = 0; i < Ammo; i++) {
						ExecuteHamB(Ham_Weapon_PrimaryAttack, QuadBarrel);
					}
					set_weapon_anim(id, random_num(1, 2));	
					if(cs_get_weapon_ammo(QuadBarrel) > 0 && !quadbarrel_reload[id] && NextAttack <= 0.0)
						set_pdata_float(id, 83, quadbarrel_shotdelay, 5);
				}
			}
		}
	}
}

public QuadBarrel_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		if(get_user_weapon(attacker) == CSW_QUADBARREL && get_user_quadbarrel(attacker)) {
			SetHamParamFloat(4, damage * get_pcvar_float(quadbarreldamage));
		}
	}
}

public QuadBarrel_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_QUADBARREL)
		return HAM_IGNORED;
	if(!get_user_quadbarrel(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public QuadBarrel_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == QUADBARREL_WEAPONKEY) {
		HaveQuadBarrel[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, QUADBARREL_WEAPONKEY)
	}
}

public QuadBarrel_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_quadbarrel(Owner)) {
		set_pev(Owner, pev_viewmodel2, QuadBarrelModel_V);
		set_pev(Owner, pev_weaponmodel2, QuadBarrelModel_P);
		set_pdata_float(Owner, 83, 1.1, 5);
		set_weapon_anim(Owner, 4);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			quadbarrel_reload[Owner] = 0;
	}
}

public QuadBarrel_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if(get_user_quadbarrel(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		quadbarrel_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public QuadBarrel_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373);
	
	if(quadbarrel_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_quadbarrel(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(quadbarrelrecoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, QuadBarrel_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(1,2));
		}
	}
}

public QuadBarrel_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_quadbarrel(id))
		return HAM_IGNORED;
	
	quadbarrel_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_QUADBARREL);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= 4)
		return HAM_SUPERCEDE;
	
	quadbarrel_clip[id] = Clip;
	quadbarrel_reload[id] = 1;
	
	return HAM_IGNORED;
}

public QuadBarrel_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_quadbarrel(id))
		return HAM_IGNORED;
	
	if(quadbarrel_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(quadbarrelreloadtime);
	
	set_pdata_int(ent, 51, quadbarrel_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 3);
	return HAM_IGNORED;
}

public QuadBarrel_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_quadbarrel(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_QUADBARREL);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(4 - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_QUADBARREL, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		quadbarrel_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_QuadBarrel(id) {
	engclient_cmd(id, weapon_quadbarrel);
}

public get_user_quadbarrel(id) {
	return HaveQuadBarrel[id];
}

public set_user_quadbarrel(id, quadbarrel) {
	if(quadbarrel) {
		if(!HaveQuadBarrel[id]) {
			drop_primary_weapons(id);
			HaveQuadBarrel[id] = true;
			quadbarrel_reload[id] = 0;
			WeaponList(id, QUADBARREL_WEAPONKEY)
			fm_give_item(id, weapon_quadbarrel);
			new clip = fm_get_user_weapon_entity(id, CSW_QUADBARREL);
			cs_set_weapon_ammo(clip, 4);
		}
	}
	else {
		if(HaveQuadBarrel[id]) {
			HaveQuadBarrel[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------| Dual Barrel |-------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined DUALBARREL
DualBarrel_Init() {
	register_clcmd("furien30_dualbarrel", "Hook_DualBarrel");
	
	register_message(get_user_msgid("DeathMsg"), "DualBarrel_DeathMsg");
	
	register_event("CurWeapon", "DualBarrel_ViewModel", "be", "1=1");
	register_event("WeapPickup","DualBarrel_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "DualBarrel_WorldModel");
	register_forward(FM_UpdateClientData, "DualBarrel_UpdateClientData", 1);
	register_forward(FM_PlaybackEvent, "DualBarrel_PlaybackEvent");
	register_forward(FM_CmdStart, "DualBarrel_CmdStart");	
	
	RegisterHam(Ham_TakeDamage, "player", "DualBarrel_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "DualBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "DualBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "DualBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "DualBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "DualBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "DualBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "DualBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "DualBarrel_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_dualbarrel, "DualBarrel_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_dualbarrel, "DualBarrel_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_dualbarrel, "DualBarrel_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_dualbarrel, "DualBarrel_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_dualbarrel, "DualBarrel_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_dualbarrel, "DualBarrel_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_dualbarrel, "DualBarrel_PostFrame");
	
	dualbarreldamage = register_cvar("furien30_dualbarrel_damage", "3");		//| DualBarrel Damage |//
	dualbarrelreloadtime = register_cvar("furien30_dualbarrel_reload_time", "1.67");	//| DualBarrel Reload Time |//
	dualbarrelrecoil = register_cvar("furien30_dualbarrel_recoil", "0.8");		//| DualBarrel Recoil |//
}

DualBarrel_Precache() {
	register_forward(FM_PrecacheEvent, "DualBarrel_Precache_PrecacheEvent_Post", 1);
	
	precache_model(DualBarrelModel_V);
	precache_model(DualBarrelModel_P);
	precache_model(DualBarrelModel_W);
	for(new i = 0; i < sizeof(DualBarrel_Sound); i++)
		engfunc(EngFunc_PrecacheSound, DualBarrel_Sound[i]);	
	for(new i = 0; i < sizeof(DualBarrel_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, DualBarrel_Generic[i]);
}

DualBarrel_Natives() {
	register_native("get_user_dualbarrel", "get_user_dualbarrel", 1);
	register_native("set_user_dualbarrel", "set_user_dualbarrel", 1);
}

DualBarrel_Menu( const Num[] = "1") {
	new DualBarrel[64];
	formatex(DualBarrel,sizeof(DualBarrel)-1,"\wDual Barrel");
	menu_additem(Menu, DualBarrel, Num, 0);
}

public DualBarrel_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "m3") && get_user_weapon(Attacker) == CSW_DUALBARREL) {
		if(get_user_dualbarrel(Attacker))
			set_msg_arg_string(4, "DualBarrel");
	}
	return PLUGIN_CONTINUE;
}

public DualBarrel_ViewModel(id) {
	if(get_user_weapon(id) == CSW_DUALBARREL && get_user_dualbarrel(id)) {
		set_pev(id, pev_viewmodel2, DualBarrelModel_V);
		set_pev(id, pev_weaponmodel2, DualBarrelModel_P);
	}
}

public DualBarrel_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new DualBarrel = find_ent_by_owner(-1, weapon_dualbarrel, entity);
	
	if(get_user_dualbarrel(Owner) && is_valid_ent(DualBarrel) && equal(model, "models/w_m3.mdl")) {
		entity_set_int(DualBarrel, EV_INT_impulse, DUALBARREL_WEAPONKEY);
		HaveDualBarrel[Owner] = false;
		entity_set_model(entity, DualBarrelModel_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public DualBarrel_UpdateClientData(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_DUALBARREL && get_user_dualbarrel(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public DualBarrel_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != dualbarrel_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public DualBarrel_PrecacheEvent_Post(type, const name[]) {
	if(equal("events/m3.sc", name)) {
		dualbarrel_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public DualBarrel_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		new DualBarrel = find_ent_by_owner(-1, weapon_dualbarrel, id);
		
		if(CurButton & IN_ATTACK) {
			if(get_user_weapon(id) == CSW_DUALBARREL && get_user_dualbarrel(id)) {
				if(cs_get_weapon_ammo(DualBarrel) > 0 && !dualbarrel_reload[id] && NextAttack <= 0.0) {
					emit_sound(id, CHAN_WEAPON, DualBarrel_Sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
					
					ExecuteHamB(Ham_Weapon_PrimaryAttack, DualBarrel);
					set_weapon_anim(id, random_num(1, 2));
					if(cs_get_weapon_ammo(DualBarrel) > 0 && !dualbarrel_reload[id] && NextAttack <= 0.0)
						set_pdata_float(id, 83, dualbarrel_shotdelay, 5);
				}
			}
		}
		if(CurButton & IN_ATTACK2) {
			if(get_user_weapon(id) == CSW_DUALBARREL && get_user_dualbarrel(id)) {
				if(cs_get_weapon_ammo(DualBarrel) > 0 && !dualbarrel_reload[id] && NextAttack <= 0.0) {
					static Ammo;
					Ammo = cs_get_weapon_ammo(DualBarrel);
					emit_sound(id, CHAN_WEAPON, DualBarrel_Sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
					for(new i = 0; i < Ammo; i++) {
						ExecuteHamB(Ham_Weapon_PrimaryAttack, DualBarrel);
					}
					set_weapon_anim(id, random_num(1, 2));	
					if(cs_get_weapon_ammo(DualBarrel) > 0 && !dualbarrel_reload[id] && NextAttack <= 0.0)
						set_pdata_float(id, 83, dualbarrel_shotdelay, 5);
				}
			}
		}
	}
}

public DualBarrel_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		if(get_user_weapon(attacker) == CSW_DUALBARREL && get_user_dualbarrel(attacker)) {
			SetHamParamFloat(4, damage * get_pcvar_float(dualbarreldamage));
		}
	}
}

public DualBarrel_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_DUALBARREL)
		return HAM_IGNORED;
	if(!get_user_dualbarrel(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public DualBarrel_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == DUALBARREL_WEAPONKEY) {
		HaveDualBarrel[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, DUALBARREL_WEAPONKEY)
	}
}

public DualBarrel_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_dualbarrel(Owner)) {
		set_pev(Owner, pev_viewmodel2, DualBarrelModel_V);
		set_pev(Owner, pev_weaponmodel2, DualBarrelModel_P);
		set_pdata_float(Owner, 83, 1.1, 5);
		set_weapon_anim(Owner, 4);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			dualbarrel_reload[Owner] = 0;
	}
}

public DualBarrel_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if(get_user_dualbarrel(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		dualbarrel_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public DualBarrel_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373);
	
	if(dualbarrel_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_dualbarrel(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(dualbarrelrecoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, DualBarrel_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(1,2));
		}
	}
}

public DualBarrel_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_dualbarrel(id))
		return HAM_IGNORED;
	
	dualbarrel_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_DUALBARREL);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= 2)
		return HAM_SUPERCEDE;
	
	dualbarrel_clip[id] = Clip;
	dualbarrel_reload[id] = 1;
	
	return HAM_IGNORED;
}

public DualBarrel_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_dualbarrel(id))
		return HAM_IGNORED;
	
	if(dualbarrel_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(dualbarrelreloadtime);
	
	set_pdata_int(ent, 51, dualbarrel_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 3);
	return HAM_IGNORED;
}

public DualBarrel_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_dualbarrel(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_DUALBARREL);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(2 - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_DUALBARREL, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		dualbarrel_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_DualBarrel(id) {
	engclient_cmd(id, weapon_dualbarrel);
}

public get_user_dualbarrel(id) {
	return HaveDualBarrel[id];
}

public set_user_dualbarrel(id, dualbarrel) {
	if(dualbarrel) {
		if(!HaveDualBarrel[id]) {
			drop_primary_weapons(id);
			HaveDualBarrel[id] = true;
			dualbarrel_reload[id] = 0;
			WeaponList(id, DUALBARREL_WEAPONKEY)
			fm_give_item(id, weapon_dualbarrel);
			new clip = fm_get_user_weapon_entity(id, CSW_DUALBARREL);
			cs_set_weapon_ammo(clip, 2);
		}
	}
	else {
		if(HaveDualBarrel[id]) {
			HaveDualBarrel[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------| K1ases |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined K1ASES
K1ases_Init() {
	register_clcmd("furien30_k1ases", "Hook_K1ases");
	
	register_message(get_user_msgid("DeathMsg"), "K1ases_DeathMsg");
	
	register_event("CurWeapon", "K1ases_ViewModel", "be", "1=1");
	register_event("WeapPickup","K1ases_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "K1ases_WorldModel");
	register_forward(FM_UpdateClientData, "K1ases_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "K1ases_PlaybackEvent");
	register_forward(FM_CmdStart, "K1ases_CmdStart");	
	
	RegisterHam(Ham_TakeDamage, "player", "K1ases_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "K1ases_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "K1ases_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "K1ases_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "K1ases_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "K1ases_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "K1ases_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "K1ases_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "K1ases_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_k1ases, "K1ases_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_k1ases, "K1ases_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_k1ases, "K1ases_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_k1ases, "K1ases_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_k1ases, "K1ases_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_k1ases, "K1ases_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_k1ases, "K1ases_PostFrame");
	
	k1asesdamage = register_cvar("furien30_k1ases_damage", "45");			//| K1ases Damage |//
	k1asesclip = register_cvar("furien30_k1ases_clip", "40");				//| K1ases Clip |//
	k1asesreloadtime = register_cvar("furien30_k1ases_reload_time", "2.57");		//| K1ases Reload Time |//
	k1asesrecoil = register_cvar("furien30_k1ases_recoil", "0.8");			//| K1ases Recoil |//
	k1asesabilitydamage = register_cvar("furien30_k1ases_ability_damage", "100.0");	//| K1ases Ability Damage |//
	k1asesabilitydelay = register_cvar("furien30_k1ases_ability_delay", "5.0");		//| K1ases Ability Delay |//
	k1asesabilityradius = register_cvar("furien30_k1ases_ability_radius", "100.0");	//| K1ases Ability Radius |//
}

K1ases_Precache() {
	register_forward(FM_PrecacheEvent, "K1ases_PrecacheEvent_Post", 1);
	
	k1ases_explode  = precache_model("sprites/furien30_weapons/k1ases_ability.spr");
	
	precache_model(K1asesModel_V);
	precache_model(K1asesModel_P);
	precache_model(K1asesModel_W);
	for(new i = 0; i < sizeof(K1ases_Sound); i++)
		engfunc(EngFunc_PrecacheSound, K1ases_Sound[i]);	
	for(new i = 0; i < sizeof(K1ases_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, K1ases_Generic[i]);
}

K1ases_Natives() {
	register_native("get_user_k1ases", "get_user_k1ases", 1);
	register_native("set_user_k1ases", "set_user_k1ases", 1);
}

K1ases_Menu(id, const Num[] = "1") {
	new K1ases[64];
	if(get_user_flags(id) & VIP_LEVEL)
		formatex(K1ases,sizeof(K1ases)-1,"\wK1ases");
	else
		formatex(K1ases,sizeof(K1ases)-1,"\dK1ases - \rOnly VIP");
	menu_additem(Menu, K1ases, Num, 0);
}

public K1ases_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "mp5navy") && get_user_weapon(Attacker) == CSW_K1ASES) {
		if(get_user_k1ases(Attacker))
			set_msg_arg_string(4, "K1ases");
	}
	return PLUGIN_CONTINUE;
}

public K1ases_ViewModel(id) {
	if(get_user_weapon(id) == CSW_K1ASES && get_user_k1ases(id)) {
		set_pev(id, pev_viewmodel2, K1asesModel_V);
		set_pev(id, pev_weaponmodel2, K1asesModel_P);
	}
}

public K1ases_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new K1ases = find_ent_by_owner(-1, weapon_k1ases, entity);
	
	if(get_user_k1ases(Owner) && is_valid_ent(K1ases) && equal(model, "models/w_mp5.mdl")) {
		entity_set_int(K1ases, EV_INT_impulse, K1ASES_WEAPONKEY);
		HaveK1ases[Owner] = false;
		entity_set_model(entity, K1asesModel_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public K1ases_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_K1ASES && get_user_k1ases(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public K1ases_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != k1ases_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public K1ases_PrecacheEvent_Post(type, const name[]) {
	if(equal("events/mp5navy.sc", name)) {
		k1ases_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public K1ases_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		
		if(CurButton & IN_ATTACK2) {
			if(get_user_weapon(id) == CSW_K1ASES && get_user_k1ases(id) && NextAttack <= 0.0) {
				K1ases_Ability(id);
				CurButton &= ~IN_ATTACK2;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
	}
}

public K1ases_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_K1ASES && get_user_k1ases(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(k1asesdamage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(k1asesdamage));
			}
		}
	}
}

public K1ases_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_K1ASES)
		return HAM_IGNORED;
	if(!get_user_k1ases(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public K1ases_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == K1ASES_WEAPONKEY) {
		HaveK1ases[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, K1ASES_WEAPONKEY)
	}
}

public K1ases_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_k1ases(Owner)) {
		set_pev(Owner, pev_viewmodel2, K1asesModel_V);
		set_pev(Owner, pev_weaponmodel2, K1asesModel_P);
		set_pdata_float(Owner, 83, 1.2, 5);
		set_weapon_anim(Owner, 2);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			k1ases_reload[Owner] = 0;
	}
}

public K1ases_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if(get_user_k1ases(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		k1ases_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public K1ases_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(k1ases_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_k1ases(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(k1asesrecoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, K1ases_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(3,5));
		}
	}
}

public K1ases_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_k1ases(id))
		return HAM_IGNORED;
	
	k1ases_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_K1ASES);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(k1asesclip))
		return HAM_SUPERCEDE;
	
	k1ases_clip[id] = Clip;
	k1ases_reload[id] = 1;
	
	return HAM_IGNORED;
}

public K1ases_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_k1ases(id))
		return HAM_IGNORED;
	
	if(k1ases_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(k1asesreloadtime);
	
	set_pdata_int(ent, 51, k1ases_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 1);
	return HAM_IGNORED;
}

public K1ases_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_k1ases(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_K1ASES);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(k1asesclip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_K1ASES, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		k1ases_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public K1ases_Ability(id) {
	if(is_user_alive(id) && !K1ases_Ability_Delay[id]) {
		set_pdata_float(id, 83, 0.83, 5);
		set_weapon_anim(id, 6);
		
		new AimOrigin[3];
		get_user_origin(id, AimOrigin, 3);
		
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY); 
		write_byte(TE_EXPLOSION); // TE_EXPLOSION
		write_coord(AimOrigin[0]); // origin x
		write_coord(AimOrigin[1]); // origin y
		write_coord(AimOrigin[2]); // origin z
		write_short(k1ases_explode); // sprites
		write_byte(40); // scale in 0.1's
		write_byte(30); // framerate
		write_byte(14); // flags 
		message_end(); // message end
		
		
		new Float:AimOrigin2[3];
		
		static Victim;
		Victim = -1;
		
		AimOrigin2[0] = float(AimOrigin[0]);
		AimOrigin2[1] = float(AimOrigin[1]);
		AimOrigin2[2] = float(AimOrigin[2]);
		
		while((Victim = find_ent_in_sphere(Victim, AimOrigin2, get_pcvar_float(k1asesabilityradius))) != 0) {
			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 BloodColor = ExecuteHam(Ham_BloodColor, Victim);
				if(BloodColor != -1) {
					new Amount = floatround(get_pcvar_float(k1asesabilitydamage));
					
					Amount *= 2; //according to HLSDK
					
					message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
					write_byte(TE_BLOODSPRITE);
					write_coord(floatround(AimOrigin2[0]));
					write_coord(floatround(AimOrigin2[1]));
					write_coord(floatround(AimOrigin2[2]));
					write_short(BloodSpray);
					write_short(BloodDrop);
					write_byte(BloodColor);
					write_byte(min(max(3, Amount/10), 16));
					message_end();
				}
				if(get_user_health(Victim) - get_pcvar_float(k1asesabilitydamage) >= 1) {
					ExecuteHam(Ham_TakeDamage, Victim, id, id, get_pcvar_float(k1asesabilitydamage), DMG_BLAST);
					
					message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Damage"), _, Victim);
					write_byte(0);
					write_byte(0);
					write_long(DMG_NERVEGAS);
					write_coord(0) ;
					write_coord(0);
					write_coord(0);
					message_end();
					
					message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), {0,0,0}, Victim);
					write_short(1<<13);
					write_short(1<<14);
					write_short(0x0000);
					write_byte(200);
					write_byte(100);
					write_byte(0);
					write_byte(100) ;
					message_end();
					
					message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, Victim);
					write_short(0xFFFF);
					write_short(1<<13);
					write_short(0xFFFF) ;
					message_end();
				}
				else {
					death_message(id, Victim, "K1ases Ability");
				}
			}
		}
		
		K1ases_Ability_Delay[id] = get_pcvar_num(k1asesabilitydelay);
		emit_sound(id, CHAN_WEAPON, K1ases_Sound[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		if(K1ases_Ability_Delay[id]) {
			new Message[64];
			formatex(Message,sizeof(Message)-1,"Puterea iti va reveni in: %d secund%s",K1ases_Ability_Delay[id], K1ases_Ability_Delay[id] == 1 ? "e" : "a");
			
			HudMessage(id, Message, 0, 0, 200, 0.05, 0.50, _, _, 1.0);
			set_task(1.0, "K1asesAbilityDelay", id);
		}
	}
}

public K1asesAbilityDelay(id) {
	if(!is_user_alive(id) || get_user_team(id) != 2) {
		K1ases_Ability_Delay[id] = 0;
	}
	else if(K1ases_Ability_Delay[id] > 1) {
		K1ases_Ability_Delay[id]--;
		new Message[64];
		formatex(Message,sizeof(Message)-1,"Puterea iti va reveni in: %d secund%s",K1ases_Ability_Delay[id], K1ases_Ability_Delay[id] == 1 ? "e" : "a");
		
		HudMessage(id, Message, 0, 0, 200, 0.05, 0.50, _, _, 1.0);
		set_task(1.0, "K1asesAbilityDelay", id);
	}	
	else if(K1ases_Ability_Delay[id] <= 1) {
		new Message[64];
		formatex(Message,sizeof(Message)-1,"Ti-a revenit puterea");
		
		HudMessage(id, Message, 0, 0, 200, 0.05, 0.50, _, _, 1.0);
		K1ases_Ability_Delay[id] = 0;
	}
}

public Hook_K1ases(id) {
	engclient_cmd(id, weapon_k1ases);
}

public get_user_k1ases(id) {
	return HaveK1ases[id];
}

public set_user_k1ases(id, k1ases) {
	if(k1ases) {
		if(!HaveK1ases[id]) {
			drop_primary_weapons(id);
			HaveK1ases[id] = true;
			k1ases_reload[id] = 0;
			WeaponList(id, K1ASES_WEAPONKEY)
			fm_give_item(id, weapon_k1ases);
			new Clip = fm_get_user_weapon_entity(id, CSW_K1ASES);
			cs_set_weapon_ammo(Clip, get_pcvar_num(k1asesclip));
		}
	}
	else {
		if(HaveK1ases[id]) {
			HaveK1ases[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-----------------------------------------| F2000 |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined F2000
F2000_Init() {
	register_clcmd("furien30_f2000", "Hook_F2000");
	
	register_message(get_user_msgid("DeathMsg"), "F2000_DeathMsg");
	
	register_event("CurWeapon", "F2000_ViewModel", "be", "1=1");
	register_event("WeapPickup","F2000_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "F2000_WorldModel");
	register_forward(FM_UpdateClientData, "F2000_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "F2000_PlaybackEvent");
	register_forward(FM_CmdStart, "F2000_CmdStart");	
	
	RegisterHam(Ham_TakeDamage, "player", "F2000_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "F2000_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "F2000_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "F2000_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "F2000_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "F2000_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "F2000_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "F2000_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "F2000_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_f2000, "F2000_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_f2000, "F2000_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_f2000, "F2000_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_f2000, "F2000_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_f2000, "F2000_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_f2000, "F2000_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_f2000, "F2000_PostFrame");
	
	f2000damage = register_cvar("furien30_f2000_damage", "50");				//| F2000 Damage |//
	f2000clip = register_cvar("furien30_f2000_clip", "40");				//| F2000 Clip |//
	f2000reloadtime = register_cvar("furien30_f2000_reload_time", "3.3");		//| F2000 Reload Time |//
	f2000recoil = register_cvar("furien30_f2000_recoil", "0.8");			//| F2000 Recoil |//
}

F2000_Precache() {
	register_forward(FM_PrecacheEvent, "F2000_PrecacheEvent_Post", 1);
	
	precache_model(F2000Model_V);
	precache_model(F2000Model_P);
	precache_model(F2000Model_W);
	precache_model(F2000Model_S);
	for(new i = 0; i < sizeof(F2000_Sound); i++)
		engfunc(EngFunc_PrecacheSound, F2000_Sound[i]);	
	for(new i = 0; i < sizeof(F2000_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, F2000_Generic[i]);
}

F2000_Natives() {
	register_native("get_user_f2000", "get_user_f2000", 1);
	register_native("set_user_f2000", "set_user_f2000", 1);
}

F2000_Menu(id, const Num[] = "1") {
	new _F2000[64];
	if(get_user_flags(id) & VIP_LEVEL)
		formatex(_F2000,sizeof(_F2000)-1,"\wF2000");
	else
		formatex(_F2000,sizeof(_F2000)-1,"\dF2000 \w- \rOnly VIP");
	menu_additem(Menu, _F2000, Num, 0);
}

public F2000_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "aug") && get_user_weapon(Attacker) == CSW_F2000) {
		if(get_user_f2000(Attacker))
			set_msg_arg_string(4, "F2000");
	}
	return PLUGIN_CONTINUE;
}

public F2000_ViewModel(id) {
	if(get_user_weapon(id) == CSW_F2000 && get_user_f2000(id)) {
		if(cs_get_user_zoom(id) == CS_SET_AUGSG552_ZOOM) {
			set_pev(id, pev_viewmodel2, F2000Model_S);
		}
		else {
			set_pev(id, pev_viewmodel2, F2000Model_V);
		}
		set_pev(id, pev_weaponmodel2, F2000Model_P);
	}
	
}

public F2000_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);
	new _F2000 = find_ent_by_owner(-1, weapon_f2000, entity);
	
	if(get_user_f2000(Owner) && is_valid_ent(_F2000) && equal(model, "models/w_aug.mdl")) {
		entity_set_int(_F2000, EV_INT_impulse, F2000_WEAPONKEY);
		HaveF2000[Owner] = false;
		entity_set_model(entity, F2000Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public F2000_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_F2000 && get_user_f2000(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public F2000_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != f2000_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public F2000_PrecacheEvent_Post(type, const name[]) {
	if(equal("events/aug.sc", name)) {
		f2000_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public F2000_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		
		if(CurButton & IN_ATTACK2 && !(pev(id, pev_oldbuttons) & IN_ATTACK2)) {
			if(get_user_weapon(id) == CSW_F2000 && get_user_f2000(id) && NextAttack <= 0.0) {
				if(cs_get_user_zoom(id) == CS_SET_AUGSG552_ZOOM)
					set_pev(id, pev_viewmodel2, F2000Model_S);
				else 
					set_pev(id, pev_viewmodel2, F2000Model_V);
			}
		}
	}
}

public F2000_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_F2000 && get_user_f2000(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(f2000damage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(f2000damage));
			}
		}
	}
}

public F2000_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_F2000)
		return HAM_IGNORED;
	if(!get_user_f2000(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public F2000_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == F2000_WEAPONKEY) {
		HaveF2000[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, F2000_WEAPONKEY)
	}
}

public F2000_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_f2000(Owner)) {
		set_pev(Owner, pev_viewmodel2, F2000Model_V);
		set_pev(Owner, pev_weaponmodel2, F2000Model_P);
		set_pdata_float(Owner, 83, 1.0, 5);
		set_weapon_anim(Owner, 2);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			f2000_reload[Owner] = 0;
	}
}

public F2000_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if(get_user_f2000(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		f2000_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public F2000_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(f2000_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_f2000(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4);
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			if(get_user_f2000(id) && cs_get_user_zoom(id) == CS_SET_AUGSG552_ZOOM) {
				pev(id, pev_punchangle, Push);
				xs_vec_sub(Push, cl_pushangle[id], Push);
				
				xs_vec_mul_scalar(Push, 0.0, Push);
				xs_vec_add(Push, cl_pushangle[id], Push);
				set_pev(id, pev_punchangle, Push);
			}
			else {
				pev(id,pev_punchangle,Push);
				xs_vec_sub(Push,cl_pushangle[id],Push);
				
				xs_vec_mul_scalar(Push,get_pcvar_float(f2000recoil),Push);
				xs_vec_add(Push,cl_pushangle[id],Push);
				set_pev(id,pev_punchangle,Push);
			}
			emit_sound(id, CHAN_WEAPON, F2000_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(3,5));
		}
	}
}

public F2000_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_f2000(id))
		return HAM_IGNORED;
	
	f2000_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_F2000);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(f2000clip))
		return HAM_SUPERCEDE;
	
	f2000_clip[id] = Clip;
	f2000_reload[id] = 1;
	set_pev(id, pev_viewmodel2, F2000Model_V);
	return HAM_IGNORED;
}

public F2000_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_f2000(id))
		return HAM_IGNORED;
	
	if(f2000_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(f2000reloadtime);
	
	set_pdata_int(ent, 51, f2000_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 1);
	return HAM_IGNORED;
}

public F2000_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_f2000(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_F2000);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(f2000clip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_F2000, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		f2000_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_F2000(id) {
	engclient_cmd(id, weapon_f2000);
}

public get_user_f2000(id) {
	return HaveF2000[id];
}

public set_user_f2000(id, f2000) {
	if(f2000) {
		if(!HaveF2000[id]) {
			drop_primary_weapons(id);
			HaveF2000[id] = true;
			f2000_reload[id] = 0;
			WeaponList(id, F2000_WEAPONKEY)
			fm_give_item(id, weapon_f2000);
			new Clip = fm_get_user_weapon_entity(id, CSW_F2000);
			cs_set_weapon_ammo(Clip, get_pcvar_num(f2000clip));
		}
	}
	else {
		if(HaveF2000[id]) {
			HaveF2000[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------------------------| HK416 |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined HK416
HK416_Init() {
	register_clcmd("furien30_hk416", "Hook_HK416");
	
	register_message(get_user_msgid("DeathMsg"), "HK416_DeathMsg");
	
	register_event("CurWeapon", "HK416_ViewModel", "be", "1=1");
	register_event("WeapPickup","HK416_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "HK416_WorldModel");
	register_forward(FM_UpdateClientData, "HK416_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "HK416_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "HK416_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "HK416_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "HK416_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "HK416_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "HK416_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "HK416_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "HK416_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "HK416_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "HK416_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_hk416, "HK416_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_hk416, "HK416_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_hk416, "HK416_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_hk416, "HK416_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_hk416, "HK416_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_hk416, "HK416_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_hk416, "HK416_PostFrame");
	
	hk416damage = register_cvar("furien30_hk416_damage", "50");			//| HK416 Damage |//
	hk416clip = register_cvar("furien30_hk416_clip", "35");				//| HK416 Clip |//
	hk416reloadtime = register_cvar("furien30_hk416_reload_time", "3.08");		//| HK416 Reload Time |//
	hk416recoil = register_cvar("furien30_hk416_recoil", "0.8");			//| HK416 Recoil |//
}

HK416_Precache() {
	register_forward(FM_PrecacheEvent, "HK416_PrecacheEvent_Post", 1);
	
	precache_model(HK416Model_V);
	precache_model(HK416Model_P);
	precache_model(HK416Model_W);
	for(new i = 0; i < sizeof(HK416_Sound); i++)
		engfunc(EngFunc_PrecacheSound, HK416_Sound[i]);	
	for(new i = 0; i < sizeof(HK416_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, HK416_Generic[i]);
}

HK416_Natives() {
	register_native("get_user_hk416", "get_user_hk416", 1);
	register_native("set_user_hk416", "set_user_hk416", 1);
}

HK416_Menu(const Num[] = "1") {
	new _HK416[64];
	formatex(_HK416,sizeof(_HK416)-1,"\wHK416");
	menu_additem(Menu, _HK416, Num, 0);
}

public HK416_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "m4a1") && get_user_weapon(Attacker) == CSW_HK416) {
		if(get_user_hk416(Attacker))
			set_msg_arg_string(4, "HK416");
	}
	return PLUGIN_CONTINUE;
}

public HK416_ViewModel(id) {
	if(get_user_weapon(id) == CSW_HK416 && get_user_hk416(id)) {
		set_pev(id, pev_viewmodel2, HK416Model_V);
		set_pev(id, pev_weaponmodel2, HK416Model_P);
	}
}

public HK416_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new _HK416 = find_ent_by_owner(-1, weapon_hk416, entity);
	
	if(get_user_hk416(Owner) && is_valid_ent(_HK416) && equal(model, "models/w_m4a1.mdl")) {
		entity_set_int(_HK416, EV_INT_impulse, HK416_WEAPONKEY);
		HaveHK416[Owner] = false;
		entity_set_model(entity, HK416Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public HK416_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_HK416 && get_user_hk416(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public HK416_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != hk416_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public HK416_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/m4a1.sc", name)) {
		hk416_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public HK416_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_HK416 && get_user_hk416(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(hk416damage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(hk416damage));
			}
		}
	}
}

public HK416_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_HK416)
		return HAM_IGNORED;
	if(!get_user_hk416(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public HK416_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == HK416_WEAPONKEY) {
		HaveHK416[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, HK416_WEAPONKEY)
	}
}

public HK416_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_hk416(Owner)) {
		set_pev(Owner, pev_viewmodel2, HK416Model_V);
		set_pev(Owner, pev_weaponmodel2, HK416Model_P);
		set_pdata_float(Owner, 83, 1.2, 5);
		set_weapon_anim(Owner, cs_get_weapon_silen(entity) ? 5 : 12)
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			hk416_reload[Owner] = 0;
	}
}

public HK416_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if (get_user_hk416(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		hk416_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public HK416_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(hk416_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_hk416(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(hk416recoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, HK416_Sound[cs_get_weapon_silen(Weapon) ? 0 : 1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, cs_get_weapon_silen(Weapon) ? random_num(1, 3) : random_num(8, 10))
		}
	}
}

public HK416_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_hk416(id))
		return HAM_IGNORED;
	
	hk416_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_HK416);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(hk416clip))
		return HAM_SUPERCEDE;
	
	hk416_clip[id] = Clip;
	hk416_reload[id] = 1;
	
	return HAM_IGNORED;
}

public HK416_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_hk416(id))
		return HAM_IGNORED;
	
	if(hk416_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(hk416reloadtime);
	
	set_pdata_int(ent, 51, hk416_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, cs_get_weapon_silen(ent) ? 4 : 11)
	return HAM_IGNORED;
}

public HK416_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_hk416(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_HK416);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(hk416clip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_HK416, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		hk416_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_HK416(id) {
	engclient_cmd(id, weapon_hk416);
}

public get_user_hk416(id) {
	return HaveHK416[id];
}

public set_user_hk416(id, hk416) {
	if(hk416) {
		if(!HaveHK416[id]) {
			drop_primary_weapons(id);
			HaveHK416[id] = true;
			hk416_reload[id] = 0;
			WeaponList(id, HK416_WEAPONKEY)
			fm_give_item(id, weapon_hk416);
			new Clip = fm_get_user_weapon_entity(id, CSW_HK416);
			cs_set_weapon_ammo(Clip, get_pcvar_num(hk416clip));
		}
	}
	else {
		if(HaveHK416[id]) {
			HaveHK416[id] = false;
		}
	}
}
#endif

//--------------------------------------| AK47 Knife |-------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined AK47KNIFE
AK47Knife_Init() {
	register_clcmd("furien30_ak47knife", "Hook_AK47Knife");
	
	register_message(get_user_msgid("DeathMsg"), "AK47Knife_DeathMsg");
	
	register_event("CurWeapon", "AK47Knife_ViewModel", "be", "1=1");
	register_event("WeapPickup","AK47Knife_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "AK47Knife_WorldModel");
	register_forward(FM_UpdateClientData, "AK47Knife_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "AK47Knife_PlaybackEvent");
	register_forward(FM_CmdStart, "AK47Knife_CmdStart");	
	
	RegisterHam(Ham_TakeDamage, "player", "AK47Knife_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "AK47Knife_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "AK47Knife_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "AK47Knife_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "AK47Knife_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "AK47Knife_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "AK47Knife_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "AK47Knife_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "AK47Knife_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_ak47knife, "AK47Knife_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_ak47knife, "AK47Knife_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_ak47knife, "AK47Knife_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_ak47knife, "AK47Knife_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_ak47knife, "AK47Knife_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_ak47knife, "AK47Knife_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_ak47knife, "AK47Knife_PostFrame");
	
	ak47knifedamage = register_cvar("furien30_ak47knife_damage", "45");				//| AK47 Knife Damage |//
	ak47knifeclip = register_cvar("furien30_ak47knife_clip", "30");				//| AK47 Knife Clip |//
	ak47knifereloadtime = register_cvar("furien30_ak47knife_reload_time", "2.45");		//| AK47 Knife Reload Time |//
	ak47kniferecoil = register_cvar("furien30_ak47knife_recoil", "0.8");			//| AK47 Knife Recoil |//
	ak47knifeabilitydamage = register_cvar("furien30_ak47knife_ability_damage", "150");		//| AK47 Knife Ability Damage |//
	ak47knifeabilityknockback = register_cvar("furien30_ak47knife_ability_knockback", "3");	//| AK47 Knife Ability KnockBack |//
}

AK47Knife_Precache() {
	register_forward(FM_PrecacheEvent, "AK47Knife_PrecacheEvent_Post", 1);
	
	precache_model(AK47KnifeModel_V);
	precache_model(AK47KnifeModel_P);
	precache_model(AK47KnifeModel_W);
	for(new i = 0; i < sizeof(AK47Knife_Sound); i++)
		engfunc(EngFunc_PrecacheSound, AK47Knife_Sound[i]);	
	for(new i = 0; i < sizeof(AK47Knife_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, AK47Knife_Generic[i]);
}

AK47Knife_Natives() {
	register_native("get_user_ak47knife", "get_user_ak47knife", 1);
	register_native("set_user_ak47knife", "set_user_ak47knife", 1);
}

AK47Knife_Menu(const Num[] = "1") {
	new AK47Knife[64];
	formatex(AK47Knife,sizeof(AK47Knife)-1,"\wAK47Knife");
	menu_additem(Menu, AK47Knife, Num, 0);
}

public AK47Knife_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "ak47") && get_user_weapon(Attacker) == CSW_AK47KNIFE) {
		if(get_user_ak47knife(Attacker))
			set_msg_arg_string(4, "AK47 Knife");
	}
	return PLUGIN_CONTINUE;
}

public AK47Knife_ViewModel(id) {
	if(get_user_weapon(id) == CSW_AK47KNIFE && get_user_ak47knife(id)) {
		set_pev(id, pev_viewmodel2, AK47KnifeModel_V);
		set_pev(id, pev_weaponmodel2, AK47KnifeModel_P);
	}
}

public AK47Knife_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new AK47Knife = find_ent_by_owner(-1, weapon_ak47knife, entity);
	
	if(get_user_ak47knife(Owner) && is_valid_ent(AK47Knife) && equal(model, "models/w_ak47.mdl")) {
		entity_set_int(AK47Knife, EV_INT_impulse, AK47KNIFE_WEAPONKEY);
		HaveAK47Knife[Owner] = false;
		entity_set_model(entity, AK47KnifeModel_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public AK47Knife_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_AK47KNIFE && get_user_ak47knife(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public AK47Knife_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != ak47knife_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public AK47Knife_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/mp5navy.sc", name)) {
		ak47knife_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public AK47Knife_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		
		if(CurButton & IN_ATTACK2) {
			if(get_user_weapon(id) == CSW_AK47KNIFE && get_user_ak47knife(id) && NextAttack <= 0.0) {
				AK47Knife_Ability(id);
				CurButton &= ~IN_ATTACK2;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
	}
}

public AK47Knife_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_AK47KNIFE && get_user_ak47knife(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(ak47knifedamage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(ak47knifedamage));
			}
		}
	}
}

public AK47Knife_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_AK47KNIFE)
		return HAM_IGNORED;
	if(!get_user_ak47knife(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public AK47Knife_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == AK47KNIFE_WEAPONKEY) {
		HaveAK47Knife[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, AK47KNIFE_WEAPONKEY)
	}
}

public AK47Knife_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_ak47knife(Owner)) {
		set_pev(Owner, pev_viewmodel2, AK47KnifeModel_V);
		set_pev(Owner, pev_weaponmodel2, AK47KnifeModel_P);
		set_pdata_float(Owner, 83, 1.03, 5);
		set_weapon_anim(Owner, 2);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			ak47knife_reload[Owner] = 0;
	}
}

public AK47Knife_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if (get_user_ak47knife(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		ak47knife_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public AK47Knife_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(ak47knife_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_ak47knife(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(ak47kniferecoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, AK47Knife_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(3,5));
		}
	}
}

public AK47Knife_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_ak47knife(id))
		return HAM_IGNORED;
	
	ak47knife_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_AK47KNIFE);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(ak47knifeclip))
		return HAM_SUPERCEDE;
	
	ak47knife_clip[id] = Clip;
	ak47knife_reload[id] = 1;
	
	return HAM_IGNORED;
}

public AK47Knife_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_ak47knife(id))
		return HAM_IGNORED;
	
	if(ak47knife_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(ak47knifereloadtime);
	
	set_pdata_int(ent, 51, ak47knife_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 1);
	return HAM_IGNORED;
}

public AK47Knife_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_ak47knife(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_AK47KNIFE);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(ak47knifeclip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_AK47KNIFE, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		ak47knife_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public AK47Knife_Ability(id) {
	if(is_user_alive(id)) {
		set_pdata_float(id, 83, 1.33, 5);
		set_weapon_anim(id, 6);
		
		new Float:Origin[3],Float:VictimOrigin[3], Victim, Body ,AimOrigin[3],Float:AimOrigin2[3];
		get_user_aiming(id, Victim, Body, 999999);
		get_user_origin(id, AimOrigin, 3);
		
		AimOrigin2[0] = float(AimOrigin[0]);
		AimOrigin2[1] = float(AimOrigin[1]);
		AimOrigin2[2] = float(AimOrigin[2]);
		
		pev(id, pev_origin, Origin);
		pev(Victim, pev_origin, VictimOrigin);
		
		if(get_distance_f(Origin, VictimOrigin) <= 60.0) {
			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:Damage = float(get_damage_body(Body, get_pcvar_float(ak47knifeabilitydamage)));
				
				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(AimOrigin2[0]));
					write_coord(floatround(AimOrigin2[1]));
					write_coord(floatround(AimOrigin2[2]));
					write_short(BloodSpray);
					write_short(BloodDrop);
					write_byte(BloodColor);
					write_byte(min(max(3, Amount/10), 16));
					message_end();
				}
				
				make_knockback(Victim, AimOrigin2, get_pcvar_float(ak47knifeabilityknockback)*Damage);	
				
				if(get_user_health(Victim) - Damage >= 1) {
					ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_SLASH);
					
				}
				else {
					death_message(id, Victim, "AK47 Knife Ability");
				}
			}
			emit_sound(id, CHAN_WEAPON,AK47Knife_Sound[2], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		}
		else if(get_distance_f(Origin, AimOrigin2) <= 60.0) {
			if(pev_valid(Victim) && get_user_team(id) != pev(Victim, pev_team))
				set_pev(Victim, pev_health, pev(Victim, pev_health) - get_pcvar_float(ak47knifeabilitydamage));
			
			emit_sound(id, CHAN_WEAPON,AK47Knife_Sound[3], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		}
		else 
			emit_sound(id, CHAN_WEAPON,AK47Knife_Sound[4], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
	}
}

public Hook_AK47Knife(id) {
	engclient_cmd(id, weapon_ak47knife);
}

public get_user_ak47knife(id) {
	return HaveAK47Knife[id];
}

public set_user_ak47knife(id, ak47knife) {
	if(ak47knife) {
		if(!HaveAK47Knife[id]) {
			drop_primary_weapons(id);
			HaveAK47Knife[id] = true;
			ak47knife_reload[id] = 0;
			WeaponList(id, AK47KNIFE_WEAPONKEY)
			fm_give_item(id, weapon_ak47knife);
			new Clip = fm_get_user_weapon_entity(id, CSW_AK47KNIFE);
			cs_set_weapon_ammo(Clip, get_pcvar_num(ak47knifeclip));
		}
	}
	else {
		if(HaveAK47Knife[id]) {
			HaveAK47Knife[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------| Tar21 |----------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined TAR21
Tar21_Init() {
	register_clcmd("furien30_tar21", "Hook_Tar21");
	
	register_message(get_user_msgid("DeathMsg"), "Tar21_DeathMsg");
	
	register_event("CurWeapon", "Tar21_ViewModel", "be", "1=1");
	register_event("WeapPickup","Tar21_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "Tar21_WorldModel");
	register_forward(FM_UpdateClientData, "Tar21_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "Tar21_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "Tar21_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "Tar21_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "Tar21_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "Tar21_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "Tar21_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "Tar21_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "Tar21_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "Tar21_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "Tar21_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_tar21, "Tar21_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_tar21, "Tar21_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_tar21, "Tar21_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_tar21, "Tar21_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_tar21, "Tar21_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_tar21, "Tar21_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_tar21, "Tar21_PostFrame");
	
	tar21damage = register_cvar("furien30_tar21_damage", "40");			//| Tar21 Damage |//
	tar21clip = register_cvar("furien30_tar21_clip", "35");			//| Tar21 Clip |//
	tar21reloadtime = register_cvar("furien30_tar21_reload_time", "3.13");		//| Tar21 Reload Time |//
	tar21recoil = register_cvar("furien30_tar21_recoil", "0.8");			//| Tar21 Recoil |//
}

Tar21_Precache() {
	register_forward(FM_PrecacheEvent, "Tar21_PrecacheEvent_Post", 1);
	
	precache_model(Tar21Model_V);
	precache_model(Tar21Model_P);
	precache_model(Tar21Model_W);
	for(new i = 0; i < sizeof(Tar21_Sound); i++)
		engfunc(EngFunc_PrecacheSound, Tar21_Sound[i]);	
	/*for(new i = 0; i < sizeof(Tar21_Generic); i++)
	engfunc(EngFunc_PrecacheGeneric, Tar21_Generic[i]);*/
}

Tar21_Natives() {
	register_native("get_user_tar21", "get_user_tar21", 1);
	register_native("set_user_tar21", "set_user_tar21", 1);
}

Tar21_Menu(const Num[] = "1") {
	new Tar21[64];
	formatex(Tar21,sizeof(Tar21)-1,"\wTar21");
	menu_additem(Menu, Tar21, Num, 0);
}

public Tar21_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "sg552") && get_user_weapon(Attacker) == CSW_TAR21) {
		if(get_user_tar21(Attacker))
			set_msg_arg_string(4, "Tar21");
	}
	return PLUGIN_CONTINUE;
}

public Tar21_ViewModel(id) {
	if(get_user_weapon(id) == CSW_TAR21 && get_user_tar21(id)) {
		set_pev(id, pev_viewmodel2, Tar21Model_V);
		set_pev(id, pev_weaponmodel2, Tar21Model_P);
	}
}

public Tar21_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new Tar21 = find_ent_by_owner(-1, weapon_tar21, entity);
	
	if(get_user_tar21(Owner) && is_valid_ent(Tar21) && equal(model, "models/w_sg552.mdl")) {
		entity_set_int(Tar21, EV_INT_impulse, TAR21_WEAPONKEY);
		HaveTar21[Owner] = false;
		entity_set_model(entity, Tar21Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public Tar21_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_TAR21 && get_user_tar21(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public Tar21_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != tar21_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public Tar21_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/sg552.sc", name)) {
		tar21_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public Tar21_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_TAR21 && get_user_tar21(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(tar21damage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(tar21damage));
			}
		}
	}
}

public Tar21_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_TAR21)
		return HAM_IGNORED;
	if(!get_user_tar21(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public Tar21_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == TAR21_WEAPONKEY) {
		HaveTar21[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, TAR21_WEAPONKEY)
	}
}

public Tar21_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_tar21(Owner)) {
		set_pev(Owner, pev_viewmodel2, Tar21Model_V);
		set_pev(Owner, pev_weaponmodel2, Tar21Model_P);
		set_pdata_float(Owner, 83, 1.2, 5);
		set_weapon_anim(Owner, 2);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			tar21_reload[Owner] = 0;
	}
}

public Tar21_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if (get_user_tar21(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		tar21_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public Tar21_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(tar21_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_tar21(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(tar21recoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, Tar21_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(3,5));
		}
	}
}

public Tar21_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_tar21(id))
		return HAM_IGNORED;
	
	tar21_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_TAR21);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(tar21clip))
		return HAM_SUPERCEDE;
	
	tar21_clip[id] = Clip;
	tar21_reload[id] = 1;
	
	return HAM_IGNORED;
}

public Tar21_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_tar21(id))
		return HAM_IGNORED;
	
	if(tar21_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(tar21reloadtime);
	
	set_pdata_int(ent, 51, tar21_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 1);
	return HAM_IGNORED;
}

public Tar21_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_tar21(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_TAR21);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(tar21clip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_TAR21, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		tar21_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_Tar21(id) {
	engclient_cmd(id, weapon_tar21);
}

public get_user_tar21(id) {
	return HaveTar21[id];
}

public set_user_tar21(id, tar21) {
	if(tar21) {
		if(!HaveTar21[id]) {
			drop_primary_weapons(id);
			HaveTar21[id] = true;
			tar21_reload[id] = 0;
			WeaponList(id, TAR21_WEAPONKEY)
			fm_give_item(id, weapon_tar21);
			new Clip = fm_get_user_weapon_entity(id, CSW_TAR21);
			cs_set_weapon_ammo(Clip, get_pcvar_num(tar21clip));
		}
	}
	else {
		if(HaveTar21[id]) {
			HaveTar21[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-----------------------------------------| M134 |----------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined M134
M134_Init() {
	register_clcmd("furien30_m134", "Hook_M134");
	
	register_message(get_user_msgid("DeathMsg"), "M134_DeathMsg");
	
	register_event("CurWeapon", "M134_ViewModel", "be", "1=1");
	register_event("WeapPickup","M134_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "M134_WorldModel");
	register_forward(FM_UpdateClientData, "M134_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "M134_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "M134_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "M134_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "M134_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "M134_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "M134_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "M134_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "M134_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "M134_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "M134_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_m134, "M134_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_m134, "M134_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_m134, "M134_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_m134, "M134_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_m134, "M134_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_m134, "M134_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_m134, "M134_PostFrame");
	
	m134damage = register_cvar("furien30_m134_damage", "40");			//| M134 Damage |//
	m134clip = register_cvar("furien30_m134_clip", "60");			//| M134 Clip |//
	m134reloadtime = register_cvar("furien30_m134_reload_time", "5.03");	//| M134 Reload Time |//
	m134recoil = register_cvar("furien30_m134_recoil", "0.8");			//| M134 Recoil |//
}

M134_Precache() {
	register_forward(FM_PrecacheEvent, "M134_PrecacheEvent_Post", 1);
	
	precache_model(M134Model_V);
	precache_model(M134Model_P);
	precache_model(M134Model_W);
	for(new i = 0; i < sizeof(M134_Sound); i++)
		engfunc(EngFunc_PrecacheSound, M134_Sound[i]);	
	for(new i = 0; i < sizeof(M134_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, M134_Generic[i]);
}

M134_Natives() {
	register_native("get_user_m134", "get_user_m134", 1);
	register_native("set_user_m134", "set_user_m134", 1);
}

M134_Menu(const Num[] = "1") {
	new _M134[64];
	formatex(_M134,sizeof(_M134)-1,"\wM134");
	menu_additem(Menu, _M134, Num, 0);
}

public M134_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "m249") && get_user_weapon(Attacker) == CSW_M134) {
		if(get_user_m134(Attacker))
			set_msg_arg_string(4, "M134");
	}
	return PLUGIN_CONTINUE;
}

public M134_ViewModel(id) {
	if(get_user_weapon(id) == CSW_M134 && get_user_m134(id)) {
		set_pev(id, pev_viewmodel2, M134Model_V);
		set_pev(id, pev_weaponmodel2, M134Model_P);
	}
}

public M134_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new _M134 = find_ent_by_owner(-1, weapon_m134, entity);
	
	if(get_user_m134(Owner) && is_valid_ent(_M134) && equal(model, "models/w_m249.mdl")) {
		entity_set_int(_M134, EV_INT_impulse, M134_WEAPONKEY);
		HaveM134[Owner] = false;
		entity_set_model(entity, M134Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public M134_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_M134 && get_user_m134(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public M134_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != m134_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public M134_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/m249.sc", name)) {
		m134_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public M134_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_M134 && get_user_m134(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(m134damage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(m134damage));
			}
		}
	}
}

public M134_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_M134)
		return HAM_IGNORED;
	if(!get_user_m134(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public M134_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == M134_WEAPONKEY) {
		HaveM134[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, M134_WEAPONKEY)
	}
}

public M134_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_m134(Owner)) {
		set_pev(Owner, pev_viewmodel2, M134Model_V);
		set_pev(Owner, pev_weaponmodel2, M134Model_P);
		set_pdata_float(Owner, 83, 1.03, 5);
		set_weapon_anim(Owner, 4);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			m134_reload[Owner] = 0;
	}
}

public M134_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if (get_user_m134(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		m134_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public M134_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(m134_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_m134(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(m134recoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, M134_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(1,2));
		}
	}
}

public M134_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_m134(id))
		return HAM_IGNORED;
	
	m134_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_M134);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(m134clip))
		return HAM_SUPERCEDE;
	
	m134_clip[id] = Clip;
	m134_reload[id] = 1;
	
	return HAM_IGNORED;
}

public M134_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_m134(id))
		return HAM_IGNORED;
	
	if(m134_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(m134reloadtime);
	
	set_pdata_int(ent, 51, m134_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 3);
	return HAM_IGNORED;
}

public M134_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_m134(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_M134);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(m134clip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_M134, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		m134_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_M134(id) {
	engclient_cmd(id, weapon_m134);
}

public get_user_m134(id) {
	return HaveM134[id];
}

public set_user_m134(id, m134) {
	if(m134) {
		if(!HaveM134[id]) {
			drop_primary_weapons(id);
			HaveM134[id] = true;
			m134_reload[id] = 0;
			WeaponList(id, M134_WEAPONKEY)
			fm_give_item(id, weapon_m134);
			new Clip = fm_get_user_weapon_entity(id, CSW_M134);
			cs_set_weapon_ammo(Clip, get_pcvar_num(m134clip));
		}
	}
	else {
		if(HaveM134[id]) {
			HaveM134[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------------------------| Thompson |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined THOMPSON
Thompson_Init() {
	register_clcmd("furien30_thompson", "Hook_Thompson");
	
	register_message(get_user_msgid("DeathMsg"), "Thompson_DeathMsg");
	
	register_event("CurWeapon", "Thompson_ViewModel", "be", "1=1");
	register_event("WeapPickup","Thompson_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "Thompson_WorldModel");
	register_forward(FM_UpdateClientData, "Thompson_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "Thompson_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "Thompson_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "Thompson_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "Thompson_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "Thompson_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "Thompson_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "Thompson_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "Thompson_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "Thompson_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "Thompson_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_thompson, "Thompson_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_thompson, "Thompson_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_thompson, "Thompson_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_thompson, "Thompson_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_thompson, "Thompson_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_thompson, "Thompson_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_thompson, "Thompson_PostFrame");
	
	thompsondamage = register_cvar("furien30_thompson_damage", "35");			//| Thompson Damage |//
	thompsonclip = register_cvar("furien30_thompson_clip", "40");			//| Thompson Clip |//
	thompsonreloadtime = register_cvar("furien30_thompson_reload_time", "3.7");		//| Thompson Reload Time |//
	thompsonrecoil = register_cvar("furien30_thompson_recoil", "0.8");			//| Thompson Recoil |//
}

Thompson_Precache() {
	register_forward(FM_PrecacheEvent, "Thompson_PrecacheEvent_Post", 1);
	
	precache_model(ThompsonModel_V);
	precache_model(ThompsonModel_P);
	precache_model(ThompsonModel_W);
	for(new i = 0; i < sizeof(Thompson_Sound); i++)
		engfunc(EngFunc_PrecacheSound, Thompson_Sound[i]);	
	for(new i = 0; i < sizeof(Thompson_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, Thompson_Generic[i]);
}

Thompson_Natives() {
	register_native("get_user_thompson", "get_user_thompson", 1);
	register_native("set_user_thompson", "set_user_thompson", 1);
}

Thompson_Menu(const Num[] = "1") {
	new Thompson[64];
	formatex(Thompson,sizeof(Thompson)-1,"\wThompson");
	menu_additem(Menu, Thompson, Num, 0);
}

public Thompson_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "p90") && get_user_weapon(Attacker) == CSW_THOMPSON) {
		if(get_user_thompson(Attacker))
			set_msg_arg_string(4, "Thompson");
	}
	return PLUGIN_CONTINUE;
}

public Thompson_ViewModel(id) {
	if(get_user_weapon(id) == CSW_THOMPSON && get_user_thompson(id)) {
		set_pev(id, pev_viewmodel2, ThompsonModel_V);
		set_pev(id, pev_weaponmodel2, ThompsonModel_P);
	}
}

public Thompson_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new Thompson = find_ent_by_owner(-1, weapon_thompson, entity);
	
	if(get_user_thompson(Owner) && is_valid_ent(Thompson) && equal(model, "models/w_p90.mdl")) {
		entity_set_int(Thompson, EV_INT_impulse, THOMPSON_WEAPONKEY);
		HaveThompson[Owner] = false;
		entity_set_model(entity, ThompsonModel_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public Thompson_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_THOMPSON && get_user_thompson(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public Thompson_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != thompson_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public Thompson_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/p90.sc", name)) {
		thompson_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public Thompson_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_THOMPSON && get_user_thompson(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(thompsondamage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(thompsondamage));
			}
		}
	}
}

public Thompson_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_THOMPSON)
		return HAM_IGNORED;
	if(!get_user_thompson(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public Thompson_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == THOMPSON_WEAPONKEY) {
		HaveThompson[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, THOMPSON_WEAPONKEY)
	}
}

public Thompson_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_thompson(Owner)) {
		set_pev(Owner, pev_viewmodel2, ThompsonModel_V);
		set_pev(Owner, pev_weaponmodel2, ThompsonModel_P);
		set_pdata_float(Owner, 83, 1.2, 5);
		set_weapon_anim(Owner, 2);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			thompson_reload[Owner] = 0;
	}
}

public Thompson_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if (get_user_thompson(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		thompson_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public Thompson_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(thompson_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_thompson(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(thompsonrecoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, Thompson_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(3,5));
		}
	}
}

public Thompson_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_thompson(id))
		return HAM_IGNORED;
	
	thompson_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_THOMPSON);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(thompsonclip))
		return HAM_SUPERCEDE;
	
	thompson_clip[id] = Clip;
	thompson_reload[id] = 1;
	
	return HAM_IGNORED;
}

public Thompson_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_thompson(id))
		return HAM_IGNORED;
	
	if(thompson_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(thompsonreloadtime);
	
	set_pdata_int(ent, 51, thompson_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 1);
	return HAM_IGNORED;
}

public Thompson_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_thompson(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_THOMPSON);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(thompsonclip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_THOMPSON, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		thompson_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_Thompson(id) {
	engclient_cmd(id, weapon_thompson);
}

public get_user_thompson(id) {
	return HaveThompson[id];
}

public set_user_thompson(id, thompson) {
	if(thompson) {
		if(!HaveThompson[id]) {
			drop_primary_weapons(id);
			HaveThompson[id] = true;
			thompson_reload[id] = 0;
			WeaponList(id, THOMPSON_WEAPONKEY)
			fm_give_item(id, weapon_thompson);
			new Clip = fm_get_user_weapon_entity(id, CSW_THOMPSON);
			cs_set_weapon_ammo(Clip, get_pcvar_num(thompsonclip));
		}
	}
	else {
		if(HaveThompson[id]) {
			HaveThompson[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------| Dual MP7A1 |-------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined DUALMP7A1
DualMP7A1_Init() {
	register_clcmd("furien30_dualmp7a1", "Hook_DualMP7A1");
	
	register_message(get_user_msgid("DeathMsg"), "DualMP7A1_DeathMsg");
	
	register_event("CurWeapon", "DualMP7A1_ViewModel", "be", "1=1");
	register_event("WeapPickup","DualMP7A1_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "DualMP7A1_WorldModel");
	register_forward(FM_UpdateClientData, "DualMP7A1_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "DualMP7A1_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "DualMP7A1_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "DualMP7A1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "DualMP7A1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "DualMP7A1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "DualMP7A1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "DualMP7A1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "DualMP7A1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "DualMP7A1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "DualMP7A1_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_dualmp7a1, "DualMP7A1_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_dualmp7a1, "DualMP7A1_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_dualmp7a1, "DualMP7A1_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_dualmp7a1, "DualMP7A1_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_dualmp7a1, "DualMP7A1_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_dualmp7a1, "DualMP7A1_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_dualmp7a1, "DualMP7A1_PostFrame");
	
	dualmp7a1damage = register_cvar("furien30_dualmp7a1_damage", "40");			//| DualMP7A1 Damage |//
	dualmp7a1clip = register_cvar("furien30_dualmp7a1_clip", "40");			//| DualMP7A1 Clip |//
	dualmp7a1reloadtime = register_cvar("furien30_dualmp7a1_reload_time", "2.55");	//| DualMP7A1 Reload Time |//
	dualmp7a1recoil = register_cvar("furien30_dualmp7a1_recoil", "0.8");		//| DualMP7A1 Recoil |//
}

DualMP7A1_Precache() {
	register_forward(FM_PrecacheEvent, "DualMP7A1_PrecacheEvent_Post", 1);
	
	precache_model(DualMP7A1Model_V);
	precache_model(DualMP7A1Model_P);
	precache_model(DualMP7A1Model_W);
	for(new i = 0; i < sizeof(DualMP7A1_Sound); i++)
		engfunc(EngFunc_PrecacheSound, DualMP7A1_Sound[i]);	
	for(new i = 0; i < sizeof(DualMP7A1_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, DualMP7A1_Generic[i]);
}

DualMP7A1_Natives() {
	register_native("get_user_dualmp7a1", "get_user_dualmp7a1", 1);
	register_native("set_user_dualmp7a1", "set_user_dualmp7a1", 1);
}

DualMP7A1_Menu(id, const Num[] = "1") {
	new DualMP7A1[64];
	formatex(DualMP7A1,sizeof(DualMP7A1)-1,"\wDualMP7A1");
	if(get_user_flags(id) & VIP_LEVEL)
		formatex(DualMP7A1,sizeof(DualMP7A1)-1,"\wDualMP7A1");
	else
		formatex(DualMP7A1,sizeof(DualMP7A1)-1,"\dDualMP7A1 \w- \rOnly VIP\w");
	
	menu_additem(Menu, DualMP7A1, Num, 0);
}

public DualMP7A1_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "mp5navy") && get_user_weapon(Attacker) == CSW_DUALMP7A1) {
		if(get_user_dualmp7a1(Attacker))
			set_msg_arg_string(4, "Dual MP7A1");
	}
	return PLUGIN_CONTINUE;
}

public DualMP7A1_ViewModel(id) {
	if(get_user_weapon(id) == CSW_DUALMP7A1 && get_user_dualmp7a1(id)) {
		set_pev(id, pev_viewmodel2, DualMP7A1Model_V);
		set_pev(id, pev_weaponmodel2, DualMP7A1Model_P);
	}
}

public DualMP7A1_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new DualMP7A1 = find_ent_by_owner(-1, weapon_dualmp7a1, entity);
	
	if(get_user_dualmp7a1(Owner) && is_valid_ent(DualMP7A1) && equal(model, "models/w_mp5.mdl")) {
		entity_set_int(DualMP7A1, EV_INT_impulse, DUALMP7A1_WEAPONKEY);
		HaveDualMP7A1[Owner] = false;
		entity_set_model(entity, DualMP7A1Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public DualMP7A1_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_DUALMP7A1 && get_user_dualmp7a1(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public DualMP7A1_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != dualmp7a1_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public DualMP7A1_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/mp5navy.sc", name)) {
		dualmp7a1_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public DualMP7A1_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_DUALMP7A1 && get_user_dualmp7a1(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(dualmp7a1damage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(dualmp7a1damage));
			}
		}
	}
}

public DualMP7A1_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_DUALMP7A1)
		return HAM_IGNORED;
	if(!get_user_dualmp7a1(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public DualMP7A1_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == DUALMP7A1_WEAPONKEY) {
		HaveDualMP7A1[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, DUALMP7A1_WEAPONKEY)
	}
}

public DualMP7A1_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_dualmp7a1(Owner)) {
		set_pev(Owner, pev_viewmodel2, DualMP7A1Model_V);
		set_pev(Owner, pev_weaponmodel2, DualMP7A1Model_P);
		set_pdata_float(Owner, 83, 1.3, 5);
		set_weapon_anim(Owner, 2);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			dualmp7a1_reload[Owner] = 0;
	}
}

public DualMP7A1_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if (get_user_dualmp7a1(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		dualmp7a1_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public DualMP7A1_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(dualmp7a1_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_dualmp7a1(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(dualmp7a1recoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, DualMP7A1_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(3,4));
		}
	}
}

public DualMP7A1_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_dualmp7a1(id))
		return HAM_IGNORED;
	
	dualmp7a1_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_DUALMP7A1);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(dualmp7a1clip))
		return HAM_SUPERCEDE;
	
	dualmp7a1_clip[id] = Clip;
	dualmp7a1_reload[id] = 1;
	
	return HAM_IGNORED;
}

public DualMP7A1_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_dualmp7a1(id))
		return HAM_IGNORED;
	
	if(dualmp7a1_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(dualmp7a1reloadtime);
	
	set_pdata_int(ent, 51, dualmp7a1_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 1);
	return HAM_IGNORED;
}

public DualMP7A1_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_dualmp7a1(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_DUALMP7A1);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(dualmp7a1clip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_DUALMP7A1, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		dualmp7a1_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_DualMP7A1(id) {
	engclient_cmd(id, weapon_dualmp7a1);
}

public get_user_dualmp7a1(id) {
	return HaveDualMP7A1[id];
}

public set_user_dualmp7a1(id, dualmp7a1) {
	if(dualmp7a1) {
		if(!HaveDualMP7A1[id]) {
			drop_primary_weapons(id);
			HaveDualMP7A1[id] = true;
			dualmp7a1_reload[id] = 0;
			WeaponList(id, DUALMP7A1_WEAPONKEY)
			fm_give_item(id, weapon_dualmp7a1);
			new clip = fm_get_user_weapon_entity(id, CSW_DUALMP7A1);
			cs_set_weapon_ammo(clip, get_pcvar_num(dualmp7a1clip));
		}
	}
	else {
		if(HaveDualMP7A1[id]) {
			HaveDualMP7A1[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-----------------------------------------| M1887 |---------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined M1887
M1887_Init() {
	register_clcmd("furien30_m1887", "Hook_M1887");
	
	register_message(get_user_msgid("DeathMsg"), "M1887_DeathMsg");
	
	register_event("CurWeapon", "M1887_ViewModel", "be", "1=1");
	register_event("WeapPickup","M1887_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "M1887_WorldModel");
	register_forward(FM_UpdateClientData, "M1887_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "M1887_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "M1887_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "M1887_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "M1887_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "M1887_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "M1887_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "M1887_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "M1887_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "M1887_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "M1887_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_m1887, "M1887_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_m1887, "M1887_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_m1887, "M1887_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_m1887, "M1887_AddToPlayer");
	/*RegisterHam(Ham_Weapon_Reload, weapon_m1887, "M1887_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_m1887, "M1887_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_m1887, "M1887_PostFrame");*/
	
	m1887damage = register_cvar("furien30_m1887_damage", "1");			//| M1887 Damage |//
	//m1887clip = register_cvar("furien30_m1887_clip", "10");				//| M1887 Clip |//
	//m1887reloadtime = register_cvar("furien30_m1887_reload_time", "3.7");		//| M1887 Reload Time |//
	m1887recoil = register_cvar("furien30_m1887_recoil", "0.8");			//| M1887 Recoil |//
}

M1887_Precache() {
	register_forward(FM_PrecacheEvent, "M1887_PrecacheEvent_Post", 1);
	
	precache_model(M1887Model_V);
	precache_model(M1887Model_P);
	precache_model(M1887Model_W);
	for(new i = 0; i < sizeof(M1887_Sound); i++)
		engfunc(EngFunc_PrecacheSound, M1887_Sound[i]);	
	for(new i = 0; i < sizeof(M1887_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, M1887_Generic[i]);
}

M1887_Natives() {
	register_native("get_user_m1887", "get_user_m1887", 1);
	register_native("set_user_m1887", "set_user_m1887", 1);
}

M1887_Menu(const Num[] = "1") {
	new _M1887[64];
	formatex(_M1887,sizeof(_M1887)-1,"\wM1887");
	menu_additem(Menu, _M1887, Num, 0);
}

public M1887_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "m3") && get_user_weapon(Attacker) == CSW_M1887) {
		if(get_user_m1887(Attacker))
			set_msg_arg_string(4, "M1887");
	}
	return PLUGIN_CONTINUE;
}

public M1887_ViewModel(id) {
	if(get_user_weapon(id) == CSW_M1887 && get_user_m1887(id)) {
		set_pev(id, pev_viewmodel2, M1887Model_V);
		set_pev(id, pev_weaponmodel2, M1887Model_P);
	}
}

public M1887_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new _M1887 = find_ent_by_owner(-1, weapon_m1887, entity);
	
	if(get_user_m1887(Owner) && is_valid_ent(_M1887) && equal(model, "models/w_m3.mdl")) {
		entity_set_int(_M1887, EV_INT_impulse, M1887_WEAPONKEY);
		HaveM1887[Owner] = false;
		entity_set_model(entity, M1887Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public M1887_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_M1887 && get_user_m1887(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public M1887_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != m1887_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public M1887_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/m3.sc", name)) {
		m1887_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public M1887_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		if(get_user_weapon(attacker) == CSW_M1887 && get_user_m1887(attacker)) {
			SetHamParamFloat(4, damage * get_pcvar_float(m1887damage));
		}
	}
}

public M1887_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_M1887)
		return HAM_IGNORED;
	if(!get_user_m1887(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public M1887_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == M1887_WEAPONKEY) {
		HaveM1887[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, M1887_WEAPONKEY)
	}
}

public M1887_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_m1887(Owner)) {
		set_pev(Owner, pev_viewmodel2, M1887Model_V);
		set_pev(Owner, pev_weaponmodel2, M1887Model_P);
		set_pdata_float(Owner, 83, 1.2, 5);
		set_weapon_anim(Owner, 6);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			m1887_reload[Owner] = 0;
	}
}

public M1887_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if (get_user_m1887(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		m1887_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public M1887_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(m1887_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_m1887(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(m1887recoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, M1887_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(1,2));
		}
	}
}
/*
public M1887_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_m1887(id))
		return HAM_IGNORED;
	
	m1887_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_M1887);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(m1887clip))
		return HAM_SUPERCEDE;
	
	set_weapon_anim(id, 5);
	m1887_clip[id] = Clip;
	m1887_reload[id] = 1;
	
	return HAM_IGNORED;
}

public M1887_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_m1887(id))
		return HAM_IGNORED;
	
	if(m1887_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(m1887reloadtime);
	
	set_pdata_int(ent, 51, m1887_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 3);
	return HAM_IGNORED;
}

public M1887_PostFrame(ent) {			
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_m1887(id))
		return HAM_IGNORED;
	
	if(pev(id, pev_weaponanim) == 3)
		set_weapon_anim(id, 7);
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_M1887);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(m1887clip), Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_M1887, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0
		m1887_reload[id] = 0;
	}
	return HAM_IGNORED
}
*/
public Hook_M1887(id) {
	engclient_cmd(id, weapon_m1887);
}

public get_user_m1887(id) {
	return HaveM1887[id];
}

public set_user_m1887(id, m1887) {
	if(m1887) {
		if(!HaveM1887[id]) {
			drop_primary_weapons(id);
			HaveM1887[id] = true;
			m1887_reload[id] = 0;
			WeaponList(id, M1887_WEAPONKEY)
			fm_give_item(id, weapon_m1887);
			/*new Clip = fm_get_user_weapon_entity(id, CSW_M1887);
			cs_set_weapon_ammo(Clip, get_pcvar_num(m1887clip));*/
		}
	}
	else {
		if(HaveM1887[id]) {
			HaveM1887[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------------------------------| L85 |----------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined L85
L85_Init() {
	register_clcmd("furien30_l85", "Hook_L85");
	
	register_message(get_user_msgid("DeathMsg"), "L85_DeathMsg");
	
	register_event("CurWeapon", "L85_ViewModel", "be", "1=1");
	register_event("WeapPickup","L85_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "L85_WorldModel");
	register_forward(FM_UpdateClientData, "L85_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "L85_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "L85_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "L85_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "L85_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "L85_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "L85_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "L85_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "L85_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "L85_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "L85_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_l85, "L85_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_l85, "L85_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_l85, "L85_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_l85, "L85_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_l85, "L85_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_l85, "L85_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_l85, "L85_PostFrame");
	
	l85damage = register_cvar("furien30_l85_damage", "35");			//| L85 Damage |//
	l85clip = register_cvar("furien30_l85_clip", "35");			//| L85 Clip |//
	l85reloadtime = register_cvar("furien30_l85_reload_time", "3.5");	//| L85 Reload Time |//
	l85recoil = register_cvar("furien30_l85_recoil", "0.8");			//| L85 Recoil |//
}

L85_Precache() {
	register_forward(FM_PrecacheEvent, "L85_PrecacheEvent_Post", 1);
	
	precache_model(L85Model_V);
	precache_model(L85Model_P);
	precache_model(L85Model_W);
	for(new i = 0; i < sizeof(L85_Sound); i++)
		engfunc(EngFunc_PrecacheSound, L85_Sound[i]);	
	for(new i = 0; i < sizeof(L85_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, L85_Generic[i]);
}

L85_Natives() {
	register_native("get_user_l85", "get_user_l85", 1);
	register_native("set_user_l85", "set_user_l85", 1);
}

L85_Menu(const Num[] = "1") {
	new _L85[64];
	formatex(_L85,sizeof(_L85)-1,"\wL85");
	menu_additem(Menu, _L85, Num, 0);
}

public L85_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "famas") && get_user_weapon(Attacker) == CSW_L85) {
		if(get_user_l85(Attacker))
			set_msg_arg_string(4, "L85");
	}
	return PLUGIN_CONTINUE;
}

public L85_ViewModel(id) {
	if(get_user_weapon(id) == CSW_L85 && get_user_l85(id)) {
		set_pev(id, pev_viewmodel2, L85Model_V);
		set_pev(id, pev_weaponmodel2, L85Model_P);
	}
}

public L85_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new _L85 = find_ent_by_owner(-1, weapon_l85, entity);
	
	if(get_user_l85(Owner) && is_valid_ent(_L85) && equal(model, "models/w_famas.mdl")) {
		entity_set_int(_L85, EV_INT_impulse, L85_WEAPONKEY);
		HaveL85[Owner] = false;
		entity_set_model(entity, L85Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public L85_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_L85 && get_user_l85(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public L85_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != l85_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public L85_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/famas.sc", name)) {
		l85_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public L85_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_L85 && get_user_l85(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(l85damage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(l85damage));
			}
		}
	}
}

public L85_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_L85)
		return HAM_IGNORED;
	if(!get_user_l85(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public L85_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == L85_WEAPONKEY) {
		HaveL85[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, L85_WEAPONKEY)
	}
}

public L85_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_l85(Owner)) {
		set_pev(Owner, pev_viewmodel2, L85Model_V);
		set_pev(Owner, pev_weaponmodel2, L85Model_P);
		set_pdata_float(Owner, 83, 0.89, 5);
		set_weapon_anim(Owner, 2);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			l85_reload[Owner] = 0;
	}
}

public L85_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if (get_user_l85(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		l85_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public L85_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(l85_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_l85(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4);
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(l85recoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, L85_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(3,5));
		}
	}
}

public L85_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_l85(id))
		return HAM_IGNORED;
	
	l85_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_L85);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(l85clip))
		return HAM_SUPERCEDE;
	
	l85_clip[id] = Clip;
	l85_reload[id] = 1;
	
	return HAM_IGNORED;
}

public L85_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_l85(id))
		return HAM_IGNORED;
	
	if(l85_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(l85reloadtime);
	
	set_pdata_int(ent, 51, l85_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 1);
	return HAM_IGNORED;
}

public L85_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_l85(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_L85);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(l85clip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_L85, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		l85_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_L85(id) {
	engclient_cmd(id, weapon_l85);
}

public get_user_l85(id) {
	return HaveL85[id];
}

public set_user_l85(id, l85) {
	if(l85) {
		if(!HaveL85[id]) {
			drop_primary_weapons(id);
			HaveL85[id] = true;
			l85_reload[id] = 0;
			WeaponList(id, L85_WEAPONKEY)
			fm_give_item(id, weapon_l85);
			new Clip = fm_get_user_weapon_entity(id, CSW_L85);
			cs_set_weapon_ammo(Clip, get_pcvar_num(l85clip));
		}
	}
	else {
		if(HaveL85[id]) {
			HaveL85[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-----------------------------------------| Skull5 |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined SKULL5
Skull5_Init() {
	register_clcmd("furien30_skull5", "Hook_Skull5");
	
	register_message(get_user_msgid("DeathMsg"), "Skull5_DeathMsg");
	
	register_event("CurWeapon", "Skull5_ViewModel", "be", "1=1");
	register_event("WeapPickup","Skull5_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "Skull5_WorldModel");
	register_forward(FM_UpdateClientData, "Skull5_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "Skull5_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "Skull5_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "Skull5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "Skull5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "Skull5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "Skull5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "Skull5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "Skull5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "Skull5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "Skull5_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_skull5, "Skull5_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_skull5, "Skull5_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_skull5, "Skull5_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_skull5, "Skull5_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_skull5, "Skull5_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_skull5, "Skull5_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_skull5, "Skull5_PostFrame");
	
	skull5damage = register_cvar("furien30_skull5_damage", "65");			//| Skull5 Damage |//
	skull5clip = register_cvar("furien30_skull5_clip", "30");			//| Skull5 Clip |//
	skull5reloadtime = register_cvar("furien30_skull5_reload_time", "2.0");		//| Skull5 Reload Time |//
	skull5recoil = register_cvar("furien30_skull5_recoil", "0.8");			//| Skull5 Recoil |//
}

Skull5_Precache() {
	register_forward(FM_PrecacheEvent, "Skull5_PrecacheEvent_Post", 1);
	
	precache_model(Skull5Model_V);
	precache_model(Skull5Model_P);
	precache_model(Skull5Model_W);
	for(new i = 0; i < sizeof(Skull5_Sound); i++)
		engfunc(EngFunc_PrecacheSound, Skull5_Sound[i]);	
	/*for(new i = 0; i < sizeof(Skull5_Generic); i++)
	engfunc(EngFunc_PrecacheGeneric, Skull5_Generic[i]);*/
}

Skull5_Natives() {
	register_native("get_user_skull5", "get_user_skull5", 1);
	register_native("set_user_skull5", "set_user_skull5", 1);
}

Skull5_Menu(const Num[] = "1") {
	new Skull5[64];
	formatex(Skull5,sizeof(Skull5)-1,"\wSkull5");
	menu_additem(Menu, Skull5, Num, 0);
}

public Skull5_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "sg550") && get_user_weapon(Attacker) == CSW_SKULL5) {
		if(get_user_skull5(Attacker))
			set_msg_arg_string(4, "Skull5");
	}
	return PLUGIN_CONTINUE;
}

public Skull5_ViewModel(id) {
	if(get_user_weapon(id) == CSW_SKULL5 && get_user_skull5(id)) {
		set_pev(id, pev_viewmodel2, Skull5Model_V);
		set_pev(id, pev_weaponmodel2, Skull5Model_P);
	}
}

public Skull5_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new Skull5 = find_ent_by_owner(-1, weapon_skull5, entity);
	
	if(get_user_skull5(Owner) && is_valid_ent(Skull5) && equal(model, "models/w_sg550.mdl")) {
		entity_set_int(Skull5, EV_INT_impulse, SKULL5_WEAPONKEY);
		HaveSkull5[Owner] = false;
		entity_set_model(entity, Skull5Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public Skull5_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_SKULL5 && get_user_skull5(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public Skull5_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != skull5_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public Skull5_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/sg550.sc", name)) {
		skull5_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public Skull5_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_SKULL5 && get_user_skull5(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(skull5damage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(skull5damage));
			}
		}
	}
}

public Skull5_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_SKULL5)
		return HAM_IGNORED;
	if(!get_user_skull5(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public Skull5_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == SKULL5_WEAPONKEY) {
		HaveSkull5[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, SKULL5_WEAPONKEY)
	}
}

public Skull5_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_skull5(Owner)) {
		set_pev(Owner, pev_viewmodel2, Skull5Model_V);
		set_pev(Owner, pev_weaponmodel2, Skull5Model_P);
		set_pdata_float(Owner, 83, 1.53, 5);
		set_weapon_anim(Owner, 4);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			skull5_reload[Owner] = 0;
	}
}

public Skull5_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if (get_user_skull5(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		skull5_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public Skull5_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(skull5_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_skull5(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(skull5recoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, Skull5_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(1,2));
		}
	}
}

public Skull5_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_skull5(id))
		return HAM_IGNORED;
	
	skull5_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_SKULL5);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(skull5clip))
		return HAM_SUPERCEDE;
	
	skull5_clip[id] = Clip;
	skull5_reload[id] = 1;
	
	return HAM_IGNORED;
}

public Skull5_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_skull5(id))
		return HAM_IGNORED;
	
	if(skull5_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(skull5reloadtime);
	
	set_pdata_int(ent, 51, skull5_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 3);
	return HAM_IGNORED;
}

public Skull5_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_skull5(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_SKULL5);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(skull5clip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_SKULL5, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		skull5_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_Skull5(id) {
	engclient_cmd(id, weapon_skull5);
}

public get_user_skull5(id) {
	return HaveSkull5[id];
}

public set_user_skull5(id, skull5) {
	if(skull5) {
		if(!HaveSkull5[id]) {
			drop_primary_weapons(id);
			HaveSkull5[id] = true;
			skull5_reload[id] = 0;
			WeaponList(id, SKULL5_WEAPONKEY)
			fm_give_item(id, weapon_skull5);
			new Clip = fm_get_user_weapon_entity(id, CSW_SKULL5);
			cs_set_weapon_ammo(Clip, get_pcvar_num(skull5clip));
		}
	}
	else {
		if(HaveSkull5[id]) {
			HaveSkull5[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------------------------------| SL8 |----------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined SL8
SL8_Init() {
	register_clcmd("furien30_sl8", "Hook_SL8");
	
	register_message(get_user_msgid("DeathMsg"), "SL8_DeathMsg");
	
	register_event("CurWeapon", "SL8_ViewModel", "be", "1=1");
	register_event("WeapPickup","SL8_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "SL8_WorldModel");
	register_forward(FM_UpdateClientData, "SL8_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "SL8_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "SL8_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "SL8_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "SL8_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "SL8_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "SL8_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "SL8_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "SL8_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "SL8_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "SL8_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_sl8, "SL8_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_sl8, "SL8_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_sl8, "SL8_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_sl8, "SL8_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_sl8, "SL8_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_sl8, "SL8_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_sl8, "SL8_PostFrame");
	
	sl8damage = register_cvar("furien30_sl8_damage", "75");			//| SL8 Damage |//
	sl8clip = register_cvar("furien30_sl8_clip", "30");			//| SL8 Clip |//
	sl8reloadtime = register_cvar("furien30_sl8_reload_time", "3.43");	//| SL8 Reload Time |//
	sl8recoil = register_cvar("furien30_sl8_recoil", "0.8");			//| SL8 Recoil |//
}

SL8_Precache() {
	register_forward(FM_PrecacheEvent, "SL8_PrecacheEvent_Post", 1);
	
	precache_model(SL8Model_V);
	precache_model(SL8Model_P);
	precache_model(SL8Model_W);
	for(new i = 0; i < sizeof(SL8_Sound); i++)
		engfunc(EngFunc_PrecacheSound, SL8_Sound[i]);	
	for(new i = 0; i < sizeof(SL8_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, SL8_Generic[i]);
}

SL8_Natives() {
	register_native("get_user_sl8", "get_user_sl8", 1);
	register_native("set_user_sl8", "set_user_sl8", 1);
}

SL8_Menu(const Num[] = "1") {
	new _SL8[64];
	formatex(_SL8,sizeof(_SL8)-1,"\wSL8");
	menu_additem(Menu, _SL8, Num, 0);
}

public SL8_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "g3sg1") && get_user_weapon(Attacker) == CSW_SL8) {
		if(get_user_sl8(Attacker))
			set_msg_arg_string(4, "SL8");
	}
	return PLUGIN_CONTINUE;
}

public SL8_ViewModel(id) {
	if(get_user_weapon(id) == CSW_SL8 && get_user_sl8(id)) {
		set_pev(id, pev_viewmodel2, SL8Model_V);
		set_pev(id, pev_weaponmodel2, SL8Model_P);
	}
}

public SL8_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new _SL8 = find_ent_by_owner(-1, weapon_sl8, entity);
	
	if(get_user_sl8(Owner) && is_valid_ent(_SL8) && equal(model, "models/w_g3sg1.mdl")) {
		entity_set_int(_SL8, EV_INT_impulse, SL8_WEAPONKEY);
		HaveSL8[Owner] = false;
		entity_set_model(entity, SL8Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public SL8_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_SL8 && get_user_sl8(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public SL8_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != sl8_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public SL8_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/g3sg1.sc", name)) {
		sl8_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public SL8_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_SL8 && get_user_sl8(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(sl8damage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(sl8damage));
			}
		}
	}
}

public SL8_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_SL8)
		return HAM_IGNORED;
	if(!get_user_sl8(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public SL8_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == SL8_WEAPONKEY) {
		HaveSL8[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, SL8_WEAPONKEY)
	}
}

public SL8_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_sl8(Owner)) {
		set_pev(Owner, pev_viewmodel2, SL8Model_V);
		set_pev(Owner, pev_weaponmodel2, SL8Model_P);
		set_pdata_float(Owner, 83, 1.0, 5);
		set_weapon_anim(Owner, 4);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			sl8_reload[Owner] = 0;
	}
}

public SL8_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if (get_user_sl8(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		sl8_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public SL8_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(sl8_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_sl8(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(sl8recoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, SL8_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(1,2));
		}
	}
}

public SL8_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_sl8(id))
		return HAM_IGNORED;
	
	sl8_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_SL8);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(sl8clip))
		return HAM_SUPERCEDE;
	
	sl8_clip[id] = Clip;
	sl8_reload[id] = 1;
	
	return HAM_IGNORED;
}

public SL8_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_sl8(id))
		return HAM_IGNORED;
	
	if(sl8_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(sl8reloadtime);
	
	set_pdata_int(ent, 51, sl8_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 3);
	set_weapon_anim(id, 3);
	return HAM_IGNORED;
}

public SL8_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_sl8(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_SL8);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(sl8clip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_SL8, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		sl8_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_SL8(id) {
	engclient_cmd(id, weapon_sl8);
}

public get_user_sl8(id) {
	return HaveSL8[id];
}

public set_user_sl8(id, sl8) {
	if(sl8) {
		if(!HaveSL8[id]) {
			drop_primary_weapons(id);
			HaveSL8[id] = true;
			sl8_reload[id] = 0;
			WeaponList(id, SL8_WEAPONKEY)
			fm_give_item(id, weapon_sl8);
			new Clip = fm_get_user_weapon_entity(id, CSW_SL8);
			cs_set_weapon_ammo(Clip, get_pcvar_num(sl8clip));
		}
	}
	else {
		if(HaveSL8[id]) {
			HaveSL8[id] = false;
		}
	}
}
#endif


/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-----------------------------------------| AW50 |----------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined AW50
AW50_Init() {
	register_clcmd("furien30_aw50", "Hook_AW50");
	
	register_message(get_user_msgid("DeathMsg"), "AW50_DeathMsg");
	
	register_event("CurWeapon", "AW50_ViewModel", "be", "1=1");
	register_event("WeapPickup","AW50_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "AW50_WorldModel");
	register_forward(FM_UpdateClientData, "AW50_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "AW50_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "AW50_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "AW50_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "AW50_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "AW50_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "AW50_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "AW50_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "AW50_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "AW50_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "AW50_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_aw50, "AW50_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_aw50, "AW50_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_aw50, "AW50_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_aw50, "AW50_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_aw50, "AW50_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_aw50, "AW50_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_aw50, "AW50_PostFrame");
	
	aw50damage = register_cvar("furien30_aw50_damage", "150");		//| AW50 Damage |//
	aw50clip = register_cvar("furien30_aw50_clip", "15");			//| AW50 Clip |//
	aw50reloadtime = register_cvar("furien30_aw50_reload_time", "2.93");	//| AW50 Reload Time |//
	aw50recoil = register_cvar("furien30_aw50_recoil", "0.8");		//| AW50 Recoil |//
}

AW50_Precache() {
	register_forward(FM_PrecacheEvent, "AW50_PrecacheEvent_Post", 1);
	
	precache_model(AW50Model_V);
	precache_model(AW50Model_P);
	precache_model(AW50Model_W);
	for(new i = 0; i < sizeof(AW50_Sound); i++)
		engfunc(EngFunc_PrecacheSound, AW50_Sound[i]);	
	for(new i = 0; i < sizeof(AW50_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, AW50_Generic[i]);
}

AW50_Natives() {
	register_native("get_user_aw50", "get_user_aw50", 1);
	register_native("set_user_aw50", "set_user_aw50", 1);
}

AW50_Menu(const Num[] = "1") {
	new _AW50[64];
	formatex(_AW50,sizeof(_AW50)-1,"\wAW50");
	menu_additem(Menu, _AW50, Num, 0);
}

public AW50_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "awp") && get_user_weapon(Attacker) == CSW_AW50) {
		if(get_user_aw50(Attacker))
			set_msg_arg_string(4, "AW50");
	}
	return PLUGIN_CONTINUE;
}

public AW50_ViewModel(id) {
	if(get_user_weapon(id) == CSW_AW50 && get_user_aw50(id)) {
		set_pev(id, pev_viewmodel2, AW50Model_V);
		set_pev(id, pev_weaponmodel2, AW50Model_P);
	}
}

public AW50_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new _AW50 = find_ent_by_owner(-1, weapon_aw50, entity);
	
	if(get_user_aw50(Owner) && is_valid_ent(_AW50) && equal(model, "models/w_awp.mdl")) {
		entity_set_int(_AW50, EV_INT_impulse, AW50_WEAPONKEY);
		HaveAW50[Owner] = false;
		entity_set_model(entity, AW50Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public AW50_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_AW50 && get_user_aw50(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public AW50_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != aw50_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public AW50_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/awp.sc", name)) {
		aw50_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public AW50_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_AW50 && get_user_aw50(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(aw50damage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(aw50damage));
			}
		}
	}
}

public AW50_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_AW50)
		return HAM_IGNORED;
	if(!get_user_aw50(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public AW50_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == AW50_WEAPONKEY) {
		HaveAW50[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, AW50_WEAPONKEY)
	}
}

public AW50_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_aw50(Owner)) {
		set_pev(Owner, pev_viewmodel2, AW50Model_V);
		set_pev(Owner, pev_weaponmodel2, AW50Model_P);
		set_pdata_float(Owner, 83, 1.13, 5);
		set_weapon_anim(Owner, 5);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			aw50_reload[Owner] = 0;
	}
}

public AW50_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if (get_user_aw50(id)) {
		pev(id,pev_punchangle,cl_pushangle[id]);
		aw50_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public AW50_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	
	if(aw50_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_aw50(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(aw50recoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, AW50_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(1,3));
		}
	}
}

public AW50_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_aw50(id))
		return HAM_IGNORED;
	
	aw50_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_AW50);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(aw50clip))
		return HAM_SUPERCEDE;
	
	aw50_clip[id] = Clip;
	aw50_reload[id] = 1;
	
	return HAM_IGNORED;
}

public AW50_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_aw50(id))
		return HAM_IGNORED;
	
	if(aw50_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(aw50reloadtime);
	
	set_pdata_int(ent, 51, aw50_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 3);
	set_weapon_anim(id, 4);
	return HAM_IGNORED;
}

public AW50_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_aw50(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_AW50);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(aw50clip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_AW50, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		aw50_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_AW50(id) {
	engclient_cmd(id, weapon_aw50);
}

public get_user_aw50(id) {
	return HaveAW50[id];
}

public set_user_aw50(id, aw50) {
	if(aw50) {
		if(!HaveAW50[id]) {
			drop_primary_weapons(id);
			HaveAW50[id] = true;
			aw50_reload[id] = 0;
			WeaponList(id, AW50_WEAPONKEY)
			fm_give_item(id, weapon_aw50);
			new Clip = fm_get_user_weapon_entity(id, CSW_AW50);
			cs_set_weapon_ammo(Clip, get_pcvar_num(aw50clip));
		}
	}
	else {
		if(HaveAW50[id]) {
			HaveAW50[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------------------------------| Janus1 |----------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined JANUS1
Janus1_Init() {
	register_clcmd("30_janus1", "Hook_Janus1");

	register_event("CurWeapon", "Janus1_ViewModel", "be", "1=1");
	register_event("WeapPickup","Janus1_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "Janus1_WorldModel");
	register_forward(FM_UpdateClientData, "Janus1_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "Janus1_PlaybackEvent");
	register_forward(FM_CmdStart, "Janus1_CmdStart");	
	
	RegisterHam(Ham_Item_AddToPlayer, weapon_janus1, "Janus1_AddToPlayer");
	RegisterHam(Ham_Item_Deploy , weapon_janus1, "Janus1_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_WeaponIdle, weapon_janus1, "Janus1_WeaponIdle")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_janus1, "Janus1_PrimaryAttack");
	RegisterHam(Ham_Weapon_Reload, weapon_janus1, "Janus1_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_janus1, "Janus1_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_janus1, "Janus1_PostFrame");
	
	register_touch(JANUS1_CLASS, "*", "Janus1_Touch");
	
	janus1damage = register_cvar("furien30_janus1_damage", "200");		//| Janus1 Damage |//
	janus1radius = register_cvar("furien30_janus1_radius", "220.0");		//| Janus1 Recoil |//
	janus1knockback = register_cvar("furien30_janus1_knockback" ,"2.0");	//| Janus1 KnockBack |//
	janus1reloadtime = register_cvar("furien30_janus1_reload_time", "2.8");	//| Janus1 Reload Time |//
}

Janus1_Precache() {
	register_forward(FM_PrecacheEvent, "Janus1_PrecacheEvent_Post", 1);
	
	janus1_trail = precache_model("sprites/xbeam3.spr");
	janus1_explode = precache_model("sprites/furien30_weapons/explode.spr");
	
	precache_model(Janus1Model_V);
	precache_model(Janus1Model_P);
	precache_model(Janus1Model_W);
	precache_model(Janus1Model_S);
	for(new i = 0; i < sizeof(Janus1_Sound); i++)
		engfunc(EngFunc_PrecacheSound, Janus1_Sound[i]);	
	for(new i = 0; i < sizeof(Janus1_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, Janus1_Generic[i]);
}

Janus1_Natives() {
	register_native("get_user_janus1", "get_user_janus1", 1);
	register_native("set_user_janus1", "set_user_janus1", 1);
}

Janus1_Menu(id, const Num[] = "1") {
	new _Janus1[64];
	if(get_user_flags(id) & ADMIN_LEVEL)
		formatex(_Janus1,sizeof(_Janus1)-1,"\wJanus1");
	else
		formatex(_Janus1,sizeof(_Janus1)-1,"\dJanus1 \w- \rOnly ADMIN\w");
	menu_additem(Menu, _Janus1, Num, 0);
}

public Janus1_ViewModel(id) {
	if(get_user_weapon(id) == CSW_JANUS1 && get_user_janus1(id)) {
		set_pev(id, pev_viewmodel2, Janus1Model_V);
		set_pev(id, pev_weaponmodel2, Janus1Model_P);
	}
}

public Janus1_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new _Janus1 = find_ent_by_owner(-1, weapon_janus1, entity);
	
	if(get_user_janus1(Owner) && is_valid_ent(_Janus1) && equal(model, "models/w_deagle.mdl")) {
		entity_set_int(_Janus1, EV_INT_impulse, JANUS1_WEAPONKEY);
		HaveJanus1[Owner] = false;
		entity_set_model(entity, Janus1Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public Janus1_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_JANUS1 && get_user_janus1(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public Janus1_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != janus1_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public Janus1_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/deagle.sc", name)) {
		janus1_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public Janus1_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		
		static _Janus1;
		_Janus1 = fm_find_ent_by_owner(-1, weapon_janus1, id);	
		
		if(CurButton & IN_ATTACK) {
			if(get_user_weapon(id) == CSW_JANUS1 && get_user_janus1(id)) {
				if(cs_get_weapon_ammo(_Janus1) > 0 && !janus1_reload[id] && NextAttack <= 0.0) {
					if(janus1_launcher[id])
						set_weapon_anim(id, random_num(8, 9));
					else
						set_weapon_anim(id, Janus1LauncherDelay[id] <= get_gametime() ? 4 : 2);
					emit_sound(id, CHAN_WEAPON, Janus1_Sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
					Janus1_Fire(id);
					new Float:PunchAngle[3]
					PunchAngle[0] = random_float(-3.0, -5.0), PunchAngle[1] = 0.0, PunchAngle[0] = 0.0
					set_pev(id, pev_punchangle, PunchAngle);
					if(janus1_launcher[id] && cs_get_weapon_ammo(_Janus1) <= 1) {
						set_pdata_float(_Janus1, 48, 1.7, 4)
						set_pdata_float(id, 83, 1.7, 5);
						janus1_launcher[id] = false;
						Janus1LauncherDelay[id] = get_gametime() + 30.0
						set_weapon_anim(id, 10)
					}
					else {
						cs_set_weapon_ammo(_Janus1, cs_get_weapon_ammo(_Janus1) - 1);
						
						if(cs_get_weapon_ammo(_Janus1) > 0 && !janus1_reload[id] && NextAttack <= 0.0) {
							if(janus1_launcher[id]) {
								set_pdata_float(id, 83, 1.0, 5);
								set_pdata_float(_Janus1, 48, 1.0, 4)
							}
							else {
								set_pdata_float(id, 83, janus1_shotdelay, 5);
								set_pdata_float(_Janus1, 48, 2.8, 4)
							}
						}
					}
				}
				CurButton &= ~IN_ATTACK;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
		
		if(CurButton & IN_ATTACK2 && !(pev(id, pev_oldbuttons) & IN_ATTACK2)) {
			if(get_user_weapon(id) == CSW_JANUS1 && get_user_janus1(id) && NextAttack <= 0.0) {
				if(!janus1_launcher[id] && Janus1LauncherDelay[id] <= get_gametime()) {
					janus1_launcher[id] = true;
					cs_set_weapon_ammo(_Janus1, 10);
					set_pdata_float(_Janus1, 48, 2.0, 4)
					set_pdata_float(id, 83, 2.0, 5);
					set_weapon_anim(id, 5)
				}
				CurButton &= ~IN_ATTACK2;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
	}
}

public Janus1_AddToPlayer(Weapon, id) {
	if(pev_valid(Weapon) && is_user_alive(id) && entity_get_int(Weapon, EV_INT_impulse) == JANUS1_WEAPONKEY) {
		janus1_launcher[id] = false;
		HaveJanus1[id] = true;
		//WeaponList(id, JANUS1_WEAPONKEY)
		entity_set_int(Weapon, EV_INT_impulse, 0);
		return HAM_SUPERCEDE;
	}
	return HAM_IGNORED;
}

public Janus1_Deploy_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus1(Owner)) {
			set_pev(Owner, pev_viewmodel2, Janus1Model_V);
			set_pev(Owner, pev_weaponmodel2, Janus1Model_P);
			
			if(janus1_launcher[Owner])
				set_weapon_anim(Owner, 7);
			else
				set_weapon_anim(Owner, Janus1LauncherDelay[Owner] <= get_gametime() ? 12 : 1);
			
			set_pdata_float(Owner, 83, 1.0, 5);
			set_pdata_float(Weapon, 48, 1.0, 4)
			
			if(cs_get_weapon_ammo(Weapon) > 0)
				janus1_reload[Owner] = 0;
			return HAM_SUPERCEDE;
		}
	}
	return HAM_IGNORED;
}

public Janus1_WeaponIdle(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus1(Owner) && get_pdata_float(Weapon, 48, 4) <= 0.1)  {
			set_pdata_float(Weapon, 48, 2.0, 4)
			if(janus1_launcher[Owner])
				set_weapon_anim(Owner, 6)
			else
				set_weapon_anim(Owner, Janus1LauncherDelay[Owner] <= get_gametime() ? 11 : 0)
			return HAM_SUPERCEDE;
		}
	}
	return HAM_IGNORED;
}

public Janus1_PrimaryAttack(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus1(Owner))
			return HAM_SUPERCEDE
	}
	return HAM_IGNORED;
}

public Janus1_Reload(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus1(Owner)) {
			janus1_clip[Owner] = -1;
			
			if(cs_get_user_bpammo(Owner, CSW_JANUS1) <= 0 || get_pdata_int(Weapon, 51, 4) >= 1 || janus1_launcher[Owner])
				return HAM_SUPERCEDE;
			
			janus1_clip[Owner] = get_pdata_int(Weapon, 51, 4);
			janus1_reload[Owner] = true;
		}
	}
	return HAM_IGNORED;
}

public Janus1_Reload_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus1(Owner)) {
			if(janus1_launcher[Owner])
				return HAM_SUPERCEDE
			else if(janus1_clip[Owner] != -1) {			
				set_pdata_int(Weapon, 51, janus1_clip[Owner], 4);
				set_pdata_float(Weapon, 48, get_pcvar_float(janus1reloadtime), 4);
				set_pdata_float(Owner, 83, get_pcvar_float(janus1reloadtime), 5);
				set_pdata_int(Weapon, 54, 1, 4);
				set_weapon_anim(Owner, Janus1LauncherDelay[Owner] <= get_gametime() ? 4 : 2)
			}
		}
	}
	return HAM_IGNORED;
}

public Janus1_PostFrame(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_janus1(Owner)) { 
			if(janus1_launcher[Owner])
				return HAM_SUPERCEDE
			else if(get_pdata_int(Weapon, 54, 4) && get_pdata_float(Owner, 83, 5) <= 0.0) {
				new Temp = min(1 - get_pdata_int(Weapon, 51, 4), cs_get_user_bpammo(Owner, CSW_JANUS1));
				
				set_pdata_int(Weapon, 51, get_pdata_int(Weapon, 51, 4) + Temp, 4);
				cs_set_user_bpammo(Owner, CSW_JANUS1, cs_get_user_bpammo(Owner, CSW_JANUS1) - Temp);		
				set_pdata_int(Weapon, 54, 0, 4);
				
				janus1_reload[Owner] = false;		
			}			
		}			
	}
	return HAM_IGNORED;
}

public Janus1_Fire(id) {
	new Grenade, Float:Origin[3], Float:Angles[3], Float:Velocity[3];
	
	Grenade = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
	engfunc(EngFunc_GetAttachment, id, 0, Origin, Angles);
	pev(id, pev_angles, Angles);
	
	set_pev(Grenade, pev_origin, Origin);
	set_pev(Grenade, pev_angles, Angles);
	set_pev(Grenade, pev_solid, SOLID_SLIDEBOX);
	set_pev(Grenade, pev_movetype, MOVETYPE_BOUNCE);
	
	set_pev(Grenade, pev_classname, JANUS1_CLASS);
	
	set_pev(Grenade, pev_owner, id);
	engfunc(EngFunc_SetModel, Grenade, Janus1Model_S);
	
	set_pev(Grenade, pev_mins, {-1.0, -1.0, -1.0});
	set_pev(Grenade, pev_maxs, {1.0, 1.0, 1.0});
	
	velocity_by_aim(id, 2000, Velocity);
	set_pev(Grenade, pev_velocity, Velocity);
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(TE_BEAMFOLLOW); // TE id
	write_short(Grenade); // entity:attachment to follow
	write_short(janus1_trail); // sprite index
	write_byte(1); // life in 0.1's
	write_byte(1); // line width in 0.1's
	write_byte(255); // r
	write_byte(255); // g
	write_byte(255); // b
	write_byte(200); // brightness
	message_end();
}

public Janus1_Touch(Grenade, touch) {
	if(pev_valid(Grenade)) {
		static Float:GrenadeOrigin[3];
		pev(Grenade, pev_origin, GrenadeOrigin);
		new id = pev(Grenade, pev_owner);
		
		message_begin(MSG_BROADCAST ,SVC_TEMPENTITY);
		write_byte(TE_EXPLOSION);
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[0]);
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[1]);
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[2]);
		write_short(janus1_explode);	// sprite index
		write_byte(20);			// scale in 0.1's
		write_byte(30);			// framerate
		write_byte(0);			// flags
		message_end();
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_WORLDDECAL)
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[0])
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[1])
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[2])
		write_byte(random_num(46, 48))
		message_end()	
		
		if(is_user_connected(touch) && is_user_alive(touch)) {
			if(!fm_get_user_godmode(touch) && get_user_team(touch) != get_user_team(id) && touch != id) {
				new Float:Damage = get_pcvar_float(janus1damage);
				//make_blood(touch, get_pcvar_num(janus1damage))
				make_knockback(touch, GrenadeOrigin, get_pcvar_float(janus1knockback) * Damage);	
				if(get_user_health(touch) > Damage)
					ExecuteHam(Ham_TakeDamage, touch, id, id, Damage, DMG_BLAST);
				else			
					death_message(id, touch, "Janus1");			
			}
		}
		else {
			static ClassName[32];
			pev(touch, pev_classname, ClassName, charsmax(ClassName));
			if(equal(ClassName, "func_breakable")) {		
				if(entity_get_float(touch, EV_FL_health) <= get_pcvar_num(janus1damage))
					force_use(id, touch);
			}
		}
		
		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 && Victim != touch) {
				new Float:VictimOrigin[3], Float:Distance_F, Distance;
				pev(Victim, pev_origin, VictimOrigin);
				Distance_F = get_distance_f(GrenadeOrigin, VictimOrigin);
				Distance = floatround(Distance_F);
				if(Distance <= get_pcvar_float(janus1radius)) {								
					new Float:DistanceRatio, Float:Damage;
					DistanceRatio = floatdiv(float(Distance), get_pcvar_float(janus1radius));
					Damage = get_pcvar_float(janus1damage) - floatround(floatmul(get_pcvar_float(janus1damage), DistanceRatio));
					
					//make_blood(Victim, floatround(Damage));
					make_knockback(Victim, GrenadeOrigin, get_pcvar_float(janus1knockback)*Damage);	
					if(get_user_health(Victim) > Damage)
						ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_BLAST);
					else		
						death_message(id, Victim, "Janus1");
				}
			}
		}
		engfunc(EngFunc_RemoveEntity, Grenade);
	}
}

public Hook_Janus1(id) {
	engclient_cmd(id, weapon_janus1);
	return PLUGIN_HANDLED
}

public get_user_janus1(id)
	return HaveJanus1[id];

public set_user_janus1(id, janus1) {
	if(janus1) {
		if(!HaveJanus1[id]) {
			drop_secondary_weapons(id);
			HaveJanus1[id] = true;
			janus1_launcher[id] = false;
			janus1_reload[id] = false;
			Janus1LauncherDelay[id] = get_gametime() + 10.0
			
			fm_give_item(id, weapon_janus1);
			//WeaponList(id, JANUS1_WEAPONKEY)
			
			new Weapon = fm_get_user_weapon_entity(id, CSW_JANUS1);
			cs_set_weapon_ammo(Weapon, 1);
		}
	}
	else {
		if(HaveJanus1[id])
			HaveJanus1[id] = false;
	}
}
#endif
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------------------------------| M79 |----------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined M79
M79_Init() {
	register_clcmd("furien30_m79", "Hook_M79");
	
	register_event("CurWeapon", "M79_ViewModel", "be", "1=1");
	register_event("WeapPickup","M79_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "M79_WorldModel");
	register_forward(FM_UpdateClientData, "M79_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "M79_PlaybackEvent");
	register_forward(FM_CmdStart, "M79_CmdStart");	
	
	RegisterHam(Ham_Item_AddToPlayer, weapon_m79, "M79_AddToPlayer");
	RegisterHam(Ham_Item_Deploy , weapon_m79, "M79_Deploy_Post", 1);
	RegisterHam(Ham_Item_Holster , weapon_m79, "M79_Holster");
	RegisterHam(Ham_Weapon_WeaponIdle, weapon_m79, "M79_WeaponIdle")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_m79, "M79_PrimaryAttack");
	RegisterHam(Ham_Weapon_Reload, weapon_m79, "M79_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_m79, "M79_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_m79, "M79_PostFrame");
	
	register_touch(M79_CLASS, "*", "M79_Touch");
	
	m79damage = register_cvar("furien30_m79_damage", "200");		//| M79 Damage |//
	m79radius = register_cvar("furien30_m79_radius", "220.0");		//| M79 Recoil |//
	m79knockback = register_cvar("furien30_m79_knockback" ,"2.0");	//| M79 KnockBack |//
	m79reloadtime = register_cvar("furien30_m79_reload_time", "2.8");	//| M79 Reload Time |//
}

M79_Precache() {
	register_forward(FM_PrecacheEvent, "M79_PrecacheEvent_Post", 1);
	
	m79_trail = precache_model("sprites/xbeam3.spr");
	m79_explode = precache_model("sprites/furien30_weapons/explode.spr");
	
	precache_model(M79Model_V);
	precache_model(M79Model_P);
	precache_model(M79Model_W);
	precache_model(M79Model_S);
	for(new i = 0; i < sizeof(M79_Sound); i++)
		engfunc(EngFunc_PrecacheSound, M79_Sound[i]);	
	for(new i = 0; i < sizeof(M79_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, M79_Generic[i]);
}

M79_Natives() {
	register_native("get_user_m79", "get_user_m79", 1);
	register_native("set_user_m79", "set_user_m79", 1);
}

M79_Menu(id, const Num[] = "1") {
	new _M79[64];
	if(get_user_flags(id) & VIP_LEVEL)
		formatex(_M79,sizeof(_M79)-1,"\wM79");
	else
		formatex(_M79,sizeof(_M79)-1,"\dM79 \w- \rOnly VIP");
	menu_additem(Menu, _M79, Num, 0);
}

public M79_ViewModel(id) {
	if(get_user_weapon(id) == CSW_M79 && get_user_m79(id)) {
		set_pev(id, pev_viewmodel2, M79Model_V);
		set_pev(id, pev_weaponmodel2, M79Model_P);
	}
}

public M79_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new _M79 = find_ent_by_owner(-1, weapon_m79, entity);
	
	if(get_user_m79(Owner) && is_valid_ent(_M79) && equal(model, "models/w_deagle.mdl")) {
		entity_set_int(_M79, EV_INT_impulse, M79_WEAPONKEY);
		HaveM79[Owner] = false;
		set_pdata_int(Owner, 361, get_pdata_int(Owner, 361) & ~ (1<<6));
		entity_set_model(entity, M79Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public M79_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_M79 && get_user_m79(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public M79_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != m79_event)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public M79_PrecacheEvent_Post(type, const name[]) {
	if (equal("events/deagle.sc", name)) {
		m79_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public M79_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:NextAttack = get_pdata_float(id, 83, 5);
		
		static _M79;
		_M79 = fm_find_ent_by_owner(-1, weapon_m79, id);	
		
		if(CurButton & IN_ATTACK) {
			if(get_user_weapon(id) == CSW_M79 && get_user_m79(id)) {
				if(cs_get_weapon_ammo(_M79) > 0 && !m79_reload[id] && NextAttack <= 0.0) {
					set_weapon_anim(id, 7);
					emit_sound(id, CHAN_WEAPON, M79_Sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
					M79_Fire(id);
					new Float:PunchAngle[3]
					PunchAngle[0] = random_float(-3.0, -5.0), PunchAngle[1] = 0.0, PunchAngle[0] = 0.0
					set_pev(id, pev_punchangle, PunchAngle);
					
					cs_set_weapon_ammo(_M79, cs_get_weapon_ammo(_M79) - 1);
					
					if(cs_get_weapon_ammo(_M79) > 0 && !m79_reload[id] && NextAttack <= 0.0) {
						set_pdata_float(id, 83, m79_shotdelay, 5);
						set_pdata_float(_M79, 48, 2.8, 4)
					}
				}
				CurButton &= ~IN_ATTACK;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}
		}
	}
}

public M79_AddToPlayer(Weapon, id) {
	if(pev_valid(Weapon) && is_user_alive(id) && entity_get_int(Weapon, EV_INT_impulse) == M79_WEAPONKEY) {
		HaveM79[id] = true;
		//WeaponList(id, M79_WEAPONKEY)
		entity_set_int(Weapon, EV_INT_impulse, 0);
		return HAM_SUPERCEDE;
	}
	return HAM_IGNORED;
}

public M79_Deploy_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_m79(Owner)) {
			set_pev(Owner, pev_viewmodel2, M79Model_V);
			set_pev(Owner, pev_weaponmodel2, M79Model_P);
			
			set_weapon_anim(Owner, 6);
			
			set_pdata_int(Owner, 361, get_pdata_int(Owner, 361) | (1<<6));
			set_pdata_float(Owner, 83, 1.0, 5);
			set_pdata_float(Weapon, 48, 1.0, 4)
			
			if(cs_get_weapon_ammo(Weapon) > 0)
				m79_reload[Owner] = 0;
			return HAM_SUPERCEDE;
		}
	}
	return HAM_IGNORED;
}

public M79_Holster(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_m79(Owner))
			set_pdata_int(Owner, 361, get_pdata_int(Owner, 361) & ~ (1<<6));
	}
	return HAM_IGNORED;
}

public M79_WeaponIdle(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_m79(Owner) && get_pdata_float(Weapon, 48, 4) <= 0.1)  {
			set_pdata_float(Weapon, 48, 0.125, 4)
			set_weapon_anim(Owner, 0)
			return HAM_SUPERCEDE;
		}
	}
	return HAM_IGNORED;
}

public M79_PrimaryAttack(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_m79(Owner))
			return HAM_SUPERCEDE
	}
	return HAM_IGNORED;
}

public M79_Reload(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_m79(Owner)) {
			m79_clip[Owner] = -1;
			
			if(cs_get_user_bpammo(Owner, CSW_M79) <= 0 || get_pdata_int(Weapon, 51, 4) >= 1)
				return HAM_SUPERCEDE;
			
			m79_clip[Owner] = get_pdata_int(Weapon, 51, 4);
			m79_reload[Owner] = true;
		}
	}
	return HAM_IGNORED;
}

public M79_Reload_Post(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_m79(Owner) && m79_clip[Owner] != -1) {			
			set_pdata_int(Weapon, 51, m79_clip[Owner], 4);
			set_pdata_float(Weapon, 48, get_pcvar_float(m79reloadtime), 4);
			set_pdata_float(Owner, 83, get_pcvar_float(m79reloadtime), 5);
			set_pdata_int(Weapon, 54, 1, 4);
			set_weapon_anim(Owner, 7)
		}
	}
	return HAM_IGNORED;
}

public M79_PostFrame(Weapon) {
	if(pev_valid(Weapon)) {
		new Owner = get_pdata_cbase(Weapon, 41, 4);
		
		if(is_user_alive(Owner) && get_user_m79(Owner) && get_pdata_int(Weapon, 54, 4) && get_pdata_float(Owner, 83, 5) <= 0.0) {
			new Temp = min(1 - get_pdata_int(Weapon, 51, 4), cs_get_user_bpammo(Owner, CSW_M79));
			
			set_pdata_int(Weapon, 51, get_pdata_int(Weapon, 51, 4) + Temp, 4);
			cs_set_user_bpammo(Owner, CSW_M79, cs_get_user_bpammo(Owner, CSW_M79) - Temp);		
			set_pdata_int(Weapon, 54, 0, 4);
			
			m79_reload[Owner] = false;		
		}			
	}
	return HAM_IGNORED;
}

public M79_Fire(id) {
	new Grenade, Float:Origin[3], Float:Angles[3], Float:Velocity[3];
	
	Grenade = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
	engfunc(EngFunc_GetAttachment, id, 0, Origin, Angles);
	pev(id, pev_angles, Angles);
	
	set_pev(Grenade, pev_origin, Origin);
	set_pev(Grenade, pev_angles, Angles);
	set_pev(Grenade, pev_solid, SOLID_SLIDEBOX);
	set_pev(Grenade, pev_movetype, MOVETYPE_BOUNCE);
	
	set_pev(Grenade, pev_classname, M79_CLASS);
	
	set_pev(Grenade, pev_owner, id);
	engfunc(EngFunc_SetModel, Grenade, M79Model_S);
	
	set_pev(Grenade, pev_mins, {-1.0, -1.0, -1.0});
	set_pev(Grenade, pev_maxs, {1.0, 1.0, 1.0});
	
	velocity_by_aim(id, 2000, Velocity);
	set_pev(Grenade, pev_velocity, Velocity);
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(TE_BEAMFOLLOW); // TE id
	write_short(Grenade); // entity:attachment to follow
	write_short(m79_trail); // sprite index
	write_byte(1); // life in 0.1's
	write_byte(1); // line width in 0.1's
	write_byte(255); // r
	write_byte(255); // g
	write_byte(255); // b
	write_byte(200); // brightness
	message_end();
}

public M79_Touch(Grenade, touch) {
	if(pev_valid(Grenade)) {
		static Float:GrenadeOrigin[3];
		pev(Grenade, pev_origin, GrenadeOrigin);
		new id = pev(Grenade, pev_owner);
		
		message_begin(MSG_BROADCAST ,SVC_TEMPENTITY);
		write_byte(TE_EXPLOSION);
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[0]);
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[1]);
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[2]);
		write_short(m79_explode);	// sprite index
		write_byte(20);			// scale in 0.1's
		write_byte(30);			// framerate
		write_byte(0);			// flags
		message_end();
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_WORLDDECAL)
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[0])
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[1])
		engfunc(EngFunc_WriteCoord, GrenadeOrigin[2])
		write_byte(random_num(46, 48))
		message_end()	
		
		if(is_user_connected(touch) && is_user_alive(touch)) {
			if(!fm_get_user_godmode(touch) && get_user_team(touch) != get_user_team(id) && touch != id) {
				new Float:Damage = get_pcvar_float(m79damage);
				//make_blood(touch, get_pcvar_num(m79damage))
				make_knockback(touch, GrenadeOrigin, get_pcvar_float(m79knockback) * Damage);	
				if(get_user_health(touch) > Damage)
					ExecuteHam(Ham_TakeDamage, touch, id, id, Damage, DMG_BLAST);
				else			
					death_message(id, touch, "M79");			
			}
		}
		else {
			static ClassName[32];
			pev(touch, pev_classname, ClassName, charsmax(ClassName));
			if(equal(ClassName, "func_breakable")) {		
				if(entity_get_float(touch, EV_FL_health) <= get_pcvar_num(m79damage))
					force_use(id, touch);
			}
		}
		
		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 && Victim != touch) {
				new Float:VictimOrigin[3], Float:Distance_F, Distance;
				pev(Victim, pev_origin, VictimOrigin);
				Distance_F = get_distance_f(GrenadeOrigin, VictimOrigin);
				Distance = floatround(Distance_F);
				if(Distance <= get_pcvar_float(m79radius)) {								
					new Float:DistanceRatio, Float:Damage;
					DistanceRatio = floatdiv(float(Distance), get_pcvar_float(m79radius));
					Damage = get_pcvar_float(m79damage) - floatround(floatmul(get_pcvar_float(m79damage), DistanceRatio));
					
					//make_blood(Victim, floatround(Damage));
					make_knockback(Victim, GrenadeOrigin, get_pcvar_float(m79knockback)*Damage);	
					if(get_user_health(Victim) > Damage)
						ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_BLAST);
					else		
						death_message(id, Victim, "M79");
				}
			}
		}
		engfunc(EngFunc_RemoveEntity, Grenade);
	}
}

public Hook_M79(id) {
	engclient_cmd(id, weapon_m79);
	return PLUGIN_HANDLED
}

public get_user_m79(id)
	return HaveM79[id];

public set_user_m79(id, m79) {
	if(m79) {
		if(!HaveM79[id]) {
			drop_secondary_weapons(id);
			HaveM79[id] = true;
			m79_reload[id] = false;
			
			fm_give_item(id, weapon_m79);
			//WeaponList(id, M79_WEAPONKEY)
			
			new Weapon = fm_get_user_weapon_entity(id, CSW_M79);
			cs_set_weapon_ammo(Weapon, 1);
		}
	}
	else {
		if(HaveM79[id])
			HaveM79[id] = false;
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------| Dual Deagle |------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined DUALDEAGLE
DualDeagle_Init() {
	register_clcmd("furien30_dualdeagle", "Hook_DualDeagle");
	
	register_message(get_user_msgid("DeathMsg"), "DualDeagle_DeathMsg");
	
	register_event("CurWeapon", "DualDeagle_ViewModel", "be", "1=1");
	register_event("WeapPickup","DualDeagle_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "DualDeagle_WorldModel");
	register_forward(FM_UpdateClientData, "DualDeagle_UpdateClientData", 1);
	register_forward(FM_PlaybackEvent, "DualDeagle_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "DualDeagle_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "DualDeagle_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "DualDeagle_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "DualDeagle_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "DualDeagle_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "DualDeagle_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "DualDeagle_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "DualDeagle_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "DualDeagle_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_dualdeagle, "DualDeagle_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_dualdeagle, "DualDeagle_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_dualdeagle, "DualDeagle_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_dualdeagle, "DualDeagle_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_dualdeagle, "DualDeagle_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_dualdeagle, "DualDeagle_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_dualdeagle, "DualDeagle_PostFrame");
	
	dualdeagledamage = register_cvar("furien30_dualdeagle_damage", "45");		//| DualDeagle Damage |//
	dualdeagleclip = register_cvar("furien30_dualdeagle_clip", "14");			//| DualDeagle Clip |//
	dualdeaglereloadtime = register_cvar("furien30_dualdeagle_reload_time", "4.6");	//| DualDeagle Reload Time |//
	dualdeaglerecoil = register_cvar("furien30_dualdeagle_recoil", "0.8");		//| DualDeagle Recoil |//
}

DualDeagle_Precache() {
	register_forward(FM_PrecacheEvent, "DualDeagle_PrecacheEvent_Post", 1);
	
	precache_model(DualDeagleModel_V);
	precache_model(DualDeagleModel_P);
	precache_model(DualDeagleModel_W);
	for(new i = 0; i < sizeof(DualDeagle_Sound); i++)
		engfunc(EngFunc_PrecacheSound, DualDeagle_Sound[i]);	
	for(new i = 0; i < sizeof(DualDeagle_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, DualDeagle_Generic[i]);
}

DualDeagle_Natives() {
	register_native("get_user_dualdeagle", "get_user_dualdeagle", 1);
	register_native("set_user_dualdeagle", "set_user_dualdeagle", 1);
}

DualDeagle_Menu(const Num[] = "1") {
	new DualDeagle[64];
	formatex(DualDeagle,sizeof(DualDeagle)-1,"\wDualDeagle");
	menu_additem(Menu, DualDeagle, Num, 0);
}

public DualDeagle_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "elite") && get_user_weapon(Attacker) == CSW_DUALDEAGLE) {
		if(get_user_dualdeagle(Attacker))
			set_msg_arg_string(4, "Dual Deagle");
	}
	return PLUGIN_CONTINUE;
}

public DualDeagle_ViewModel(id) {
	if(get_user_weapon(id) == CSW_DUALDEAGLE && get_user_dualdeagle(id)) {
		set_pev(id, pev_viewmodel2, DualDeagleModel_V);
		set_pev(id, pev_weaponmodel2, DualDeagleModel_P);
	}
}

public DualDeagle_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new DualDeagle = find_ent_by_owner(-1, weapon_dualdeagle, entity);
	
	if(get_user_dualdeagle(Owner) && is_valid_ent(DualDeagle) && equal(model, "models/w_elite.mdl")) {
		entity_set_int(DualDeagle, EV_INT_impulse, DUALDEAGLE_WEAPONKEY);
		HaveDualDeagle[Owner] = false;
		entity_set_model(entity, DualDeagleModel_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public DualDeagle_UpdateClientData(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_DUALDEAGLE && get_user_dualdeagle(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public DualDeagle_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != dualdeagle_event || !IsInPrimaryAttack)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public DualDeagle_PrecacheEvent_Post(type, const name[]) {
	if(equal("events/elite.sc", name)) {
		dualdeagle_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public DualDeagle_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_DUALDEAGLE && get_user_dualdeagle(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(dualdeagledamage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(dualdeagledamage));
			}
		}
	}
}

public DualDeagle_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_DUALDEAGLE)
		return HAM_IGNORED;
	if(!get_user_dualdeagle(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public DualDeagle_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == DUALDEAGLE_WEAPONKEY) {
		HaveDualDeagle[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, DUALDEAGLE_WEAPONKEY)
	}
}

public DualDeagle_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_dualdeagle(Owner)) {
		set_pev(Owner, pev_viewmodel2, DualDeagleModel_V);
		set_pev(Owner, pev_weaponmodel2, DualDeagleModel_P);
		set_pdata_float(Owner, 83, 1.03, 5);
		set_weapon_anim(Owner, 15);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			dualdeagle_reload[Owner] = 0;
	}
}

public DualDeagle_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if(get_user_dualdeagle(id)) {
		IsInPrimaryAttack = true;
		pev(id,pev_punchangle,cl_pushangle[id]);
		dualdeagle_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public DualDeagle_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373);
	IsInPrimaryAttack = false;
	
	if(dualdeagle_clip[id] > cs_get_weapon_ammo(Weapon) && dualdeagle_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_dualdeagle(id)) {			
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(dualdeaglerecoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, DualDeagle_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			switch(random_num(0, 1)) {
				case 0: set_weapon_anim(id, random_num(2,6));
					
				case 1: set_weapon_anim(id, random_num(8,12));
					
			}
			return HAM_SUPERCEDE;
		}
		return HAM_IGNORED;
	}
	return HAM_IGNORED;
}

public DualDeagle_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_dualdeagle(id))
		return HAM_IGNORED;
	
	dualdeagle_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_DUALDEAGLE);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(dualdeagleclip))
		return HAM_SUPERCEDE;
	
	dualdeagle_clip[id] = Clip;
	dualdeagle_reload[id] = 1;
	
	return HAM_IGNORED;
}

public DualDeagle_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_dualdeagle(id))
		return HAM_IGNORED;
	
	if(dualdeagle_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(dualdeaglereloadtime);
	
	set_pdata_int(ent, 51, dualdeagle_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 14);
	return HAM_IGNORED;
}

public DualDeagle_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_dualdeagle(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_DUALDEAGLE);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(dualdeagleclip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_DUALDEAGLE, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		dualdeagle_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_DualDeagle(id) {
	engclient_cmd(id, weapon_dualdeagle);
}

public get_user_dualdeagle(id) {
	return HaveDualDeagle[id];
}

public set_user_dualdeagle(id, dualdeagle) {
	if(dualdeagle) {
		if(!HaveDualDeagle[id]) {
			drop_secondary_weapons(id);
			HaveDualDeagle[id] = true;
			dualdeagle_reload[id] = 0;
			WeaponList(id, DUALDEAGLE_WEAPONKEY)
			fm_give_item(id, weapon_dualdeagle);
			new Clip = fm_get_user_weapon_entity(id, CSW_DUALDEAGLE);
			cs_set_weapon_ammo(Clip, get_pcvar_num(dualdeagleclip));
		}
	}
	else {
		if(HaveDualDeagle[id]) {
			HaveDualDeagle[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------------------------| Infinity |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined INFINITY
Infinity_Init() {
	register_clcmd("furien30_infinity", "Hook_Infinity");
	
	register_message(get_user_msgid("DeathMsg"), "Infinity_DeathMsg");
	
	register_event("CurWeapon", "Infinity_ViewModel", "be", "1=1");
	register_event("WeapPickup","Infinity_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "Infinity_WorldModel");
	register_forward(FM_UpdateClientData, "Infinity_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "Infinity_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "Infinity_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "Infinity_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "Infinity_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "Infinity_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "Infinity_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "Infinity_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "Infinity_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "Infinity_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "Infinity_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_infinity, "Infinity_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_infinity, "Infinity_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_infinity, "Infinity_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_infinity, "Infinity_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_infinity, "Infinity_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_infinity, "Infinity_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_infinity, "Infinity_PostFrame");
	
	infinitydamage = register_cvar("furien30_infinity_damage", "40");			//| Infinity Damage |//
	infinityclip = register_cvar("furien30_infinity_clip", "16");			//| Infinity Clip |//
	infinityreloadtime = register_cvar("furien30_infinity_reload_time", "4.03");	//| Infinity Reload Time |//
	infinityrecoil = register_cvar("furien30_infinity_recoil", "0.8");			//| Infinity Recoil |//
}

Infinity_Precache() {
	register_forward(FM_PrecacheEvent, "Infinity_PrecacheEvent_Post", 1);
	
	precache_model(InfinityModel_V);
	precache_model(InfinityModel_P);
	precache_model(InfinityModel_W);
	for(new i = 0; i < sizeof(Infinity_Sound); i++)
		engfunc(EngFunc_PrecacheSound, Infinity_Sound[i]);	
	for(new i = 0; i < sizeof(Infinity_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, Infinity_Generic[i]);
}

Infinity_Natives() {
	register_native("get_user_infinity", "get_user_infinity", 1);
	register_native("set_user_infinity", "set_user_infinity", 1);
}

Infinity_Menu(const Num[] = "1") {
	new Infinity[64];
	formatex(Infinity,sizeof(Infinity)-1,"\wInfinity");
	menu_additem(Menu, Infinity, Num, 0);
}

public Infinity_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "elite") && get_user_weapon(Attacker) == CSW_INFINITY) {
		if(get_user_infinity(Attacker))
			set_msg_arg_string(4, "Infinity");
	}
	return PLUGIN_CONTINUE;
}

public Infinity_ViewModel(id) {
	if(get_user_weapon(id) == CSW_INFINITY && get_user_infinity(id)) {
		set_pev(id, pev_viewmodel2, InfinityModel_V);
		set_pev(id, pev_weaponmodel2, InfinityModel_P);
	}
}

public Infinity_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new Infinity = find_ent_by_owner(-1, weapon_infinity, entity);
	
	if(get_user_infinity(Owner) && is_valid_ent(Infinity) && equal(model, "models/w_elite.mdl")) {
		entity_set_int(Infinity, EV_INT_impulse, INFINITY_WEAPONKEY);
		HaveInfinity[Owner] = false;
		entity_set_model(entity, InfinityModel_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public Infinity_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_INFINITY && get_user_infinity(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public Infinity_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != infinity_event || !IsInPrimaryAttack)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public Infinity_PrecacheEvent_Post(type, const name[]) {
	if(equal("events/elite.sc", name)) {
		infinity_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public Infinity_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_INFINITY && get_user_infinity(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(infinitydamage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(infinitydamage));
			}
		}
	}
}

public Infinity_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_INFINITY)
		return HAM_IGNORED;
	if(!get_user_infinity(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public Infinity_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == INFINITY_WEAPONKEY) {
		HaveInfinity[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, INFINITY_WEAPONKEY)
	}
}

public Infinity_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_infinity(Owner)) {
		set_pev(Owner, pev_viewmodel2, InfinityModel_V);
		set_pev(Owner, pev_weaponmodel2, InfinityModel_P);
		set_pdata_float(Owner, 83, 1.23, 5);
		set_weapon_anim(Owner, 15);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			infinity_reload[Owner] = 0;
	}
}

public Infinity_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if(get_user_infinity(id)) {
		IsInPrimaryAttack = true;
		pev(id,pev_punchangle,cl_pushangle[id]);
		infinity_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public Infinity_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373);
	IsInPrimaryAttack = false;
	
	if(infinity_clip[id] > cs_get_weapon_ammo(Weapon) && infinity_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_infinity(id)) {			
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(infinityrecoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, Infinity_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			switch(random_num(0, 1)) {
				case 0: set_weapon_anim(id, random_num(2,6));
					
				case 1: set_weapon_anim(id, random_num(8,12));
					
			}
			return HAM_SUPERCEDE;
		}
		return HAM_IGNORED;
	}
	return HAM_IGNORED;
}

public Infinity_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_infinity(id))
		return HAM_IGNORED;
	
	infinity_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_INFINITY);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(infinityclip))
		return HAM_SUPERCEDE;
	
	infinity_clip[id] = Clip;
	infinity_reload[id] = 1;
	
	return HAM_IGNORED;
}

public Infinity_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_infinity(id))
		return HAM_IGNORED;
	
	if(infinity_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(infinityreloadtime);
	
	set_pdata_int(ent, 51, infinity_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 14);
	return HAM_IGNORED;
}

public Infinity_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_infinity(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_INFINITY);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(infinityclip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_INFINITY, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		infinity_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_Infinity(id) {
	engclient_cmd(id, weapon_infinity);
}

public get_user_infinity(id) {
	return HaveInfinity[id];
}

public set_user_infinity(id, infinity) {
	if(infinity) {
		if(!HaveInfinity[id]) {
			drop_secondary_weapons(id);
			HaveInfinity[id] = true;
			infinity_reload[id] = 0;
			WeaponList(id, INFINITY_WEAPONKEY)
			fm_give_item(id, weapon_infinity);
			new Clip = fm_get_user_weapon_entity(id, CSW_INFINITY);
			cs_set_weapon_ammo(Clip, get_pcvar_num(infinityclip));
		}
	}
	else {
		if(HaveInfinity[id]) {
			HaveInfinity[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------| DeagleGold |-------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined DEAGLEGOLD
DeagleGold_Init() {
	register_clcmd("furien30_deaglegold", "Hook_DeagleGold");
	
	register_message(get_user_msgid("DeathMsg"), "DeagleGold_DeathMsg");
	
	register_event("CurWeapon", "DeagleGold_ViewModel", "be", "1=1");
	register_event("WeapPickup","DeagleGold_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "DeagleGold_WorldModel");
	register_forward(FM_UpdateClientData, "DeagleGold_UpdateClientData", 1);
	register_forward(FM_PlaybackEvent, "DeagleGold_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "DeagleGold_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "DeagleGold_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "DeagleGold_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "DeagleGold_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "DeagleGold_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "DeagleGold_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "DeagleGold_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "DeagleGold_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "DeagleGold_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_deaglegold, "DeagleGold_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_deaglegold, "DeagleGold_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_deaglegold, "DeagleGold_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_deaglegold, "DeagleGold_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_deaglegold, "DeagleGold_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_deaglegold, "DeagleGold_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_deaglegold, "DeagleGold_PostFrame");
	
	deaglegolddamage = register_cvar("furien30_deaglegold_damage", "50");		//| DeagleGold Damage |//
	deaglegoldclip = register_cvar("furien30_deaglegold_clip", "7");			//| DeagleGold Clip |//
	deaglegoldreloadtime = register_cvar("furien30_deaglegold_reload_time", "2.2");	//| DeagleGold Reload Time |//
	deaglegoldrecoil = register_cvar("furien30_deaglegold_recoil", "0.8");		//| DeagleGold Recoil |//
}

DeagleGold_Precache() {
	register_forward(FM_PrecacheEvent, "DeagleGold_PrecacheEvent_Post", 1);
	
	precache_model(DeagleGoldModel_V);
	precache_model(DeagleGoldModel_P);
	precache_model(DeagleGoldModel_W);
	
	for(new i = 0; i < sizeof(DeagleGold_Sound); i++)
		engfunc(EngFunc_PrecacheSound, DeagleGold_Sound[i]);	
}

DeagleGold_Natives() {
	register_native("get_user_deaglegold", "get_user_deaglegold", 1);
	register_native("set_user_deaglegold", "set_user_deaglegold", 1);
}

DeagleGold_Menu(const Num[] = "1") {
	new DeagleGold[64];
	formatex(DeagleGold,sizeof(DeagleGold)-1,"\wDeagleGold");
	menu_additem(Menu, DeagleGold, Num, 0);
}

public DeagleGold_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "deagle") && get_user_weapon(Attacker) == CSW_DEAGLEGOLD) {
		if(get_user_deaglegold(Attacker))
			set_msg_arg_string(4, "Deagle Gold");
	}
	return PLUGIN_CONTINUE;
}

public DeagleGold_ViewModel(id) {
	if(get_user_weapon(id) == CSW_DEAGLEGOLD && get_user_deaglegold(id)) {
		set_pev(id, pev_viewmodel2, DeagleGoldModel_V);
		set_pev(id, pev_weaponmodel2, DeagleGoldModel_P);
	}
}

public DeagleGold_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new DeagleGold = find_ent_by_owner(-1, weapon_deaglegold, entity);
	
	if(get_user_deaglegold(Owner) && is_valid_ent(DeagleGold) && equal(model, "models/w_deagle.mdl")) {
		entity_set_int(DeagleGold, EV_INT_impulse, DEAGLEGOLD_WEAPONKEY);
		HaveDeagleGold[Owner] = false;
		entity_set_model(entity, DeagleGoldModel_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public DeagleGold_UpdateClientData(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_DEAGLEGOLD && get_user_deaglegold(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public DeagleGold_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != deaglegold_event || !IsInPrimaryAttack)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public DeagleGold_PrecacheEvent_Post(type, const name[]) {
	if(equal("events/deagle.sc", name)) {
		deaglegold_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public DeagleGold_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_DEAGLEGOLD && get_user_deaglegold(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(deaglegolddamage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(deaglegolddamage));
			}
		}
	}
}

public DeagleGold_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_DEAGLEGOLD)
		return HAM_IGNORED;
	if(!get_user_deaglegold(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public DeagleGold_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == DEAGLEGOLD_WEAPONKEY) {
		HaveDeagleGold[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, DEAGLEGOLD_WEAPONKEY)
	}
}

public DeagleGold_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_deaglegold(Owner)) {
		set_pev(Owner, pev_viewmodel2, DeagleGoldModel_V);
		set_pev(Owner, pev_weaponmodel2, DeagleGoldModel_P);
		set_pdata_float(Owner, 83, 1.03, 5);
		set_weapon_anim(Owner, 5);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			deaglegold_reload[Owner] = 0;
	}
}

public DeagleGold_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if(get_user_deaglegold(id)) {
		IsInPrimaryAttack = true;
		pev(id,pev_punchangle,cl_pushangle[id]);
		deaglegold_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public DeagleGold_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	IsInPrimaryAttack = false;
	
	if(deaglegold_clip[id] > cs_get_weapon_ammo(Weapon) && deaglegold_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_deaglegold(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(deaglegoldrecoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, DeagleGold_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(1,2));
			return HAM_SUPERCEDE;
		}
		return HAM_IGNORED;
	}
	return HAM_IGNORED;
}

public DeagleGold_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_deaglegold(id))
		return HAM_IGNORED;
	
	deaglegold_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_DEAGLEGOLD);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(deaglegoldclip))
		return HAM_SUPERCEDE;
	
	deaglegold_clip[id] = Clip;
	deaglegold_reload[id] = 1;
	
	return HAM_IGNORED;
}

public DeagleGold_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_deaglegold(id))
		return HAM_IGNORED;
	
	if(deaglegold_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(deaglegoldreloadtime);
	
	set_pdata_int(ent, 51, deaglegold_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 4);
	return HAM_IGNORED;
}

public DeagleGold_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_deaglegold(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_DEAGLEGOLD);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(deaglegoldclip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_DEAGLEGOLD, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		deaglegold_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_DeagleGold(id) {
	engclient_cmd(id, weapon_deaglegold);
}

public get_user_deaglegold(id) {
	return HaveDeagleGold[id];
}

public set_user_deaglegold(id, deaglegold) {
	if(deaglegold) {
		if(!HaveDeagleGold[id]) {
			drop_secondary_weapons(id);
			HaveDeagleGold[id] = true;
			deaglegold_reload[id] = 0;
			WeaponList(id, DEAGLEGOLD_WEAPONKEY)
			fm_give_item(id, weapon_deaglegold);
			new Clip = fm_get_user_weapon_entity(id, CSW_DEAGLEGOLD);
			cs_set_weapon_ammo(Clip, get_pcvar_num(deaglegoldclip));
		}
	}
	else {
		if(HaveDeagleGold[id]) {
			HaveDeagleGold[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-----------------------------------------| K5 |----------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined K5
K5_Init() {
	register_clcmd("furien30_k5", "Hook_K5");
	
	register_message(get_user_msgid("DeathMsg"), "K5_DeathMsg");
	
	register_event("CurWeapon", "K5_ViewModel", "be", "1=1");
	register_event("WeapPickup","K5_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "K5_WorldModel");
	register_forward(FM_UpdateClientData, "K5_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "K5_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "K5_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "K5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "K5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "K5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "K5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "K5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "K5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "K5_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "K5_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_k5, "K5_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_k5, "K5_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_k5, "K5_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_k5, "K5_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_k5, "K5_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_k5, "K5_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_k5, "K5_PostFrame");
	
	k5damage = register_cvar("furien30_k5_damage", "45");		//| K5 Damage |//
	k5clip = register_cvar("furien30_k5_clip", "12");			//| K5 Clip |//
	k5reloadtime = register_cvar("furien30_k5_reload_time", "2.32");	//| K5 Reload Time |//
	k5recoil = register_cvar("furien30_k5_recoil", "0.8");		//| K5 Recoil |//
}

K5_Precache() {
	register_forward(FM_PrecacheEvent, "K5_PrecacheEvent_Post", 1);
	
	precache_model(K5Model_V);
	precache_model(K5Model_P);
	precache_model(K5Model_W);
	for(new i = 0; i < sizeof(K5_Sound); i++)
		engfunc(EngFunc_PrecacheSound, K5_Sound[i]);	
}

K5_Natives() {
	register_native("get_user_k5", "get_user_k5", 1);
	register_native("set_user_k5", "set_user_k5", 1);
}

K5_Menu(const Num[] = "1") {
	new _K5[64];
	formatex(_K5,sizeof(_K5)-1,"\wK5");
	menu_additem(Menu, _K5, Num, 0);
}

public K5_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "p228") && get_user_weapon(Attacker) == CSW_K5) {
		if(get_user_k5(Attacker))
			set_msg_arg_string(4, "K5");
	}
	return PLUGIN_CONTINUE;
}

public K5_ViewModel(id) {
	if(get_user_weapon(id) == CSW_K5 && get_user_k5(id)) {
		set_pev(id, pev_viewmodel2, K5Model_V);
		set_pev(id, pev_weaponmodel2, K5Model_P);
	}
}

public K5_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new _K5 = find_ent_by_owner(-1, weapon_k5, entity);
	
	if(get_user_k5(Owner) && is_valid_ent(_K5) && equal(model, "models/w_p228.mdl")) {
		entity_set_int(_K5, EV_INT_impulse, K5_WEAPONKEY);
		HaveK5[Owner] = false;
		entity_set_model(entity, K5Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public K5_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_K5 && get_user_k5(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public K5_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != k5_event || !IsInPrimaryAttack)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public K5_PrecacheEvent_Post(type, const name[]) {
	if(equal("events/p228.sc", name)) {
		k5_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public K5_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_K5 && get_user_k5(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(k5damage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(k5damage));
			}
		}
	}
}

public K5_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_K5)
		return HAM_IGNORED;
	if(!get_user_k5(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public K5_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == K5_WEAPONKEY) {
		HaveK5[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, K5_WEAPONKEY)
	}
}

public K5_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_k5(Owner)) {
		set_pev(Owner, pev_viewmodel2, K5Model_V);
		set_pev(Owner, pev_weaponmodel2, K5Model_P);
		set_pdata_float(Owner, 83, 1.32, 5);
		set_weapon_anim(Owner, 6);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			k5_reload[Owner] = 0;
	}
}

public K5_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if(get_user_k5(id)) {
		IsInPrimaryAttack = true;
		pev(id,pev_punchangle,cl_pushangle[id]);
		k5_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public K5_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373) ;
	IsInPrimaryAttack = false;
	
	if(k5_clip[id] > cs_get_weapon_ammo(Weapon) && k5_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_k5(id)) {
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(k5recoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, K5_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(1,2));
			return HAM_SUPERCEDE;
		}
		return HAM_IGNORED;
	}
	return HAM_IGNORED;
}

public K5_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_k5(id))
		return HAM_IGNORED;
	
	k5_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_K5);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(k5clip))
		return HAM_SUPERCEDE;
	
	k5_clip[id] = Clip;
	k5_reload[id] = 1;
	
	return HAM_IGNORED;
}

public K5_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_k5(id))
		return HAM_IGNORED;
	
	if(k5_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(k5reloadtime);
	
	set_pdata_int(ent, 51, k5_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 5);
	return HAM_IGNORED;
}

public K5_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_k5(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_K5);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(k5clip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_K5, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		k5_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_K5(id) {
	engclient_cmd(id, weapon_k5);
}

public get_user_k5(id) {
	return HaveK5[id];
}

public set_user_k5(id, k5) {
	if(k5) {
		if(!HaveK5[id]) {
			drop_secondary_weapons(id);
			HaveK5[id] = true;
			k5_reload[id] = 0;
			WeaponList(id, K5_WEAPONKEY)
			fm_give_item(id, weapon_k5);
			new Clip = fm_get_user_weapon_entity(id, CSW_K5);
			cs_set_weapon_ammo(Clip, get_pcvar_num(k5clip));
		}
	}
	else {
		if(HaveK5[id]) {
			HaveK5[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-----------------------------------------| Skull1 |----------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined SKULL1
Skull1_Init() {
	register_clcmd("furien30_skull1", "Hook_Skull1");
	
	register_message(get_user_msgid("DeathMsg"), "Skull1_DeathMsg");
	
	register_event("CurWeapon", "Skull1_ViewModel", "be", "1=1");
	register_event("WeapPickup","Skull1_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "Skull1_WorldModel");
	register_forward(FM_UpdateClientData, "Skull1_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "Skull1_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "Skull1_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "Skull1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "Skull1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "Skull1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "Skull1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "Skull1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "Skull1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "Skull1_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "Skull1_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_skull1, "Skull1_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_skull1, "Skull1_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_skull1, "Skull1_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_skull1, "Skull1_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_skull1, "Skull1_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_skull1, "Skull1_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_skull1, "Skull1_PostFrame");
	
	skull1damage = register_cvar("furien30_skull1_damage", "55");			//| Skull1 Damage |//
	skull1clip = register_cvar("furien30_skull1_clip", "7");				//| Skull1 Clip |//
	skull1reloadtime = register_cvar("furien30_skull1_reload_time", "2.53");		//| Skull1 Reload Time |//
	skull1recoil = register_cvar("furien30_skull1_recoil", "0.8");			//| Skull1 Recoil |//
}

Skull1_Precache() {
	register_forward(FM_PrecacheEvent, "Skull1_PrecacheEvent_Post", 1);
	
	precache_model(Skull1Model_V);
	precache_model(Skull1Model_P);
	precache_model(Skull1Model_W);
	for(new i = 0; i < sizeof(Skull1_Sound); i++)
		engfunc(EngFunc_PrecacheSound, Skull1_Sound[i]);	
	for(new i = 0; i < sizeof(Skull1_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, Skull1_Generic[i]);
}

Skull1_Natives() {
	register_native("get_user_skull1", "get_user_skull1", 1);
	register_native("set_user_skull1", "set_user_skull1", 1);
}

Skull1_Menu(const Num[] = "1") {
	new Skull1[64];
	formatex(Skull1,sizeof(Skull1)-1,"\wSkull1");
	menu_additem(Menu, Skull1, Num, 0);
}

public Skull1_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "deagle") && get_user_weapon(Attacker) == CSW_SKULL1) {
		if(get_user_skull1(Attacker))
			set_msg_arg_string(4, "Skull1");
	}
	return PLUGIN_CONTINUE;
}

public Skull1_ViewModel(id) {
	if(get_user_weapon(id) == CSW_SKULL1 && get_user_skull1(id)) {
		set_pev(id, pev_viewmodel2, Skull1Model_V);
		set_pev(id, pev_weaponmodel2, Skull1Model_P);
	}
}

public Skull1_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new Skull1 = find_ent_by_owner(-1, weapon_skull1, entity);
	
	if(get_user_skull1(Owner) && is_valid_ent(Skull1) && equal(model, "models/w_deagle.mdl")) {
		entity_set_int(Skull1, EV_INT_impulse, SKULL1_WEAPONKEY);
		HaveSkull1[Owner] = false;
		entity_set_model(entity, Skull1Model_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public Skull1_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_SKULL1 && get_user_skull1(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public Skull1_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != skull1_event || !IsInPrimaryAttack)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public Skull1_PrecacheEvent_Post(type, const name[]) {
	if(equal("events/deagle.sc", name)) {
		skull1_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public Skull1_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_SKULL1 && get_user_skull1(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(skull1damage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(skull1damage));
			}
		}
	}
}

public Skull1_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_SKULL1)
		return HAM_IGNORED;
	if(!get_user_skull1(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public Skull1_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == SKULL1_WEAPONKEY) {
		HaveSkull1[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, SKULL1_WEAPONKEY)
	}
}

public Skull1_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_skull1(Owner)) {
		set_pev(Owner, pev_viewmodel2, Skull1Model_V);
		set_pev(Owner, pev_weaponmodel2, Skull1Model_P);
		set_pdata_float(Owner, 83, 1.01, 5);
		set_weapon_anim(Owner, 7);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			skull1_reload[Owner] = 0;
	}
}

public Skull1_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if(get_user_skull1(id)) {
		IsInPrimaryAttack = true;
		pev(id,pev_punchangle,cl_pushangle[id]);
		skull1_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public Skull1_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373);
	IsInPrimaryAttack = false;
	
	if(skull1_clip[id] > cs_get_weapon_ammo(Weapon) && skull1_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_skull1(id)) {			
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(skull1recoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, Skull1_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(2,3));
			return HAM_SUPERCEDE;
		}
		return HAM_IGNORED;
	}
	return HAM_IGNORED;
}

public Skull1_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_skull1(id))
		return HAM_IGNORED;
	
	skull1_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_SKULL1);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(skull1clip))
		return HAM_SUPERCEDE;
	
	skull1_clip[id] = Clip;
	skull1_reload[id] = 1;
	
	return HAM_IGNORED;
}

public Skull1_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_skull1(id))
		return HAM_IGNORED;
	
	if(skull1_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(skull1reloadtime);
	
	set_pdata_int(ent, 51, skull1_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 6);
	return HAM_IGNORED;
}

public Skull1_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_skull1(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_SKULL1);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(skull1clip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_SKULL1, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		skull1_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_Skull1(id) {
	engclient_cmd(id, weapon_skull1);
}

public get_user_skull1(id) {
	return HaveSkull1[id];
}

public set_user_skull1(id, skull1) {
	if(skull1) {
		if(!HaveSkull1[id]) {
			drop_secondary_weapons(id);
			HaveSkull1[id] = true;
			skull1_reload[id] = 0;
			WeaponList(id, SKULL1_WEAPONKEY)
			fm_give_item(id, weapon_skull1);
			new Clip = fm_get_user_weapon_entity(id, CSW_SKULL1);
			cs_set_weapon_ammo(Clip, get_pcvar_num(skull1clip));
		}
	}
	else {
		if(HaveSkull1[id]) {
			HaveSkull1[id] = false;
		}
	}
}
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------------------------| Anaconda |--------------------------------------------------------
//======================================= sDs|Aragon* =======================================================
#if defined ANACONDA
Anaconda_Init() {
	register_clcmd("furien30_anaconda", "Hook_Anaconda");
	
	register_message(get_user_msgid("DeathMsg"), "Anaconda_DeathMsg");
	
	register_event("CurWeapon", "Anaconda_ViewModel", "be", "1=1");
	register_event("WeapPickup","Anaconda_ViewModel","b","1=19");
	
	register_forward(FM_SetModel, "Anaconda_WorldModel");
	register_forward(FM_UpdateClientData, "Anaconda_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "Anaconda_PlaybackEvent");
	
	RegisterHam(Ham_TakeDamage, "player", "Anaconda_TakeDamage");
	RegisterHam(Ham_TraceAttack, "worldspawn", "Anaconda_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "player", "Anaconda_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_breakable", "Anaconda_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_wall", "Anaconda_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door", "Anaconda_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "Anaconda_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_plat", "Anaconda_TraceAttack_Post", 1);
	RegisterHam(Ham_TraceAttack, "func_rotating", "Anaconda_TraceAttack_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_anaconda, "Anaconda_Deploy_Post", 1);
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_anaconda, "Anaconda_PrimaryAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_anaconda, "Anaconda_PrimaryAttack_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_anaconda, "Anaconda_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_anaconda, "Anaconda_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_anaconda, "Anaconda_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_anaconda, "Anaconda_PostFrame");
	
	anacondadamage = register_cvar("furien30_anaconda_damage", "50");			//| Anaconda Damage |//
	anacondaclip = register_cvar("furien30_anaconda_clip", "7");			//| Anaconda Clip |//
	anacondareloadtime = register_cvar("furien30_anaconda_reload_time", "2.33");	//| Anaconda Reload Time |//
	anacondarecoil = register_cvar("furien30_anaconda_recoil", "0.8");			//| Anaconda Recoil |//
}

Anaconda_Precache() {
	register_forward(FM_PrecacheEvent, "Anaconda_PrecacheEvent_Post", 1);
	
	precache_model(AnacondaModel_V);
	precache_model(AnacondaModel_P);
	precache_model(AnacondaModel_W);
	for(new i = 0; i < sizeof(Anaconda_Sound); i++)
		engfunc(EngFunc_PrecacheSound, Anaconda_Sound[i]);	
	for(new i = 0; i < sizeof(Anaconda_Generic); i++)
		engfunc(EngFunc_PrecacheGeneric, Anaconda_Generic[i]);
}

Anaconda_Natives() {
	register_native("get_user_anaconda", "get_user_anaconda", 1);
	register_native("set_user_anaconda", "set_user_anaconda", 1);
}

Anaconda_Menu(const Num[] = "1") {
	new Anaconda[64];
	formatex(Anaconda,sizeof(Anaconda)-1,"\wAnaconda");
	menu_additem(Menu, Anaconda, Num, 0);
}

public Anaconda_DeathMsg(msg_id, msg_dest, id) {
	static TruncatedWeapon[33], Attacker, Victim;
	
	get_msg_arg_string(4, TruncatedWeapon, charsmax(TruncatedWeapon));
	
	Attacker = get_msg_arg_int(1);
	Victim = get_msg_arg_int(2);
	
	if(!is_user_connected(Attacker) || Attacker == Victim)
		return PLUGIN_CONTINUE;
	
	if(equal(TruncatedWeapon, "deagle") && get_user_weapon(Attacker) == CSW_ANACONDA) {
		if(get_user_anaconda(Attacker))
			set_msg_arg_string(4, "Anaconda");
	}
	return PLUGIN_CONTINUE;
}

public Anaconda_ViewModel(id) {
	if(get_user_weapon(id) == CSW_ANACONDA && get_user_anaconda(id)) {
		set_pev(id, pev_viewmodel2, AnacondaModel_V);
		set_pev(id, pev_weaponmodel2, AnacondaModel_P);
	}
}

public Anaconda_WorldModel(entity, model[]) {
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static ClassName[33];
	entity_get_string(entity, EV_SZ_classname, ClassName, charsmax(ClassName));
	
	if(!equal(ClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new Owner = entity_get_edict(entity, EV_ENT_owner);	
	new Anaconda = find_ent_by_owner(-1, weapon_anaconda, entity);
	
	if(get_user_anaconda(Owner) && is_valid_ent(Anaconda) && equal(model, "models/w_deagle.mdl")) {
		entity_set_int(Anaconda, EV_INT_impulse, ANACONDA_WEAPONKEY);
		HaveAnaconda[Owner] = false;
		entity_set_model(entity, AnacondaModel_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public Anaconda_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_ANACONDA && get_user_anaconda(id))	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
	}
}

public Anaconda_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
	if(!is_user_connected(invoker))
		return FMRES_IGNORED;
	if(eventid != anaconda_event || !IsInPrimaryAttack)
		return FMRES_IGNORED;
	
	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
	
	return FMRES_SUPERCEDE;
}

public Anaconda_PrecacheEvent_Post(type, const name[]) {
	if(equal("events/deagle.sc", name)) {
		anaconda_event = get_orig_retval();
		return FMRES_HANDLED;
	}
	return FMRES_IGNORED;
}

public Anaconda_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
	if(is_user_connected(attacker) && !(damagetype & DMG_HEGRENADE)) {
		new Body, Target, Float:NewDamage;
		if(get_user_weapon(attacker) == CSW_ANACONDA && get_user_anaconda(attacker)) {
			if(is_user_connected(victim)) {
				get_user_aiming(attacker, Target, Body, 999999);
				NewDamage = float(get_damage_body(Body, get_pcvar_float(anacondadamage)));
				SetHamParamFloat(4, NewDamage);
			} 
			else {
				SetHamParamFloat(4, get_pcvar_float(anacondadamage));
			}
		}
	}
}

public Anaconda_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], pentru, DamageType) {
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;
	if(get_user_weapon(attacker) != CSW_ANACONDA)
		return HAM_IGNORED;
	if(!get_user_anaconda(attacker))
		return HAM_IGNORED;
	
	static Float:End[3];
	get_tr2(pentru, TR_vecEndPos, End);
	
	make_bullet(attacker, End);
	
	return HAM_HANDLED;
}

public Anaconda_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == ANACONDA_WEAPONKEY) {
		HaveAnaconda[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
		WeaponList(id, ANACONDA_WEAPONKEY)
	}
}

public Anaconda_Deploy_Post(entity) {
	static Owner;
	Owner = get_pdata_cbase(entity, 41, 4);
	if(get_user_anaconda(Owner)) {
		set_pev(Owner, pev_viewmodel2, AnacondaModel_V);
		set_pev(Owner, pev_weaponmodel2, AnacondaModel_P);
		set_pdata_float(Owner, 83, 1.03, 5);
		set_weapon_anim(Owner, 5);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			anaconda_reload[Owner] = 0;
	}
}

public Anaconda_PrimaryAttack(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	
	if(get_user_anaconda(id)) {
		IsInPrimaryAttack = true;
		pev(id,pev_punchangle,cl_pushangle[id]);
		anaconda_clip[id] = cs_get_weapon_ammo(Weapon);
	}
}

public Anaconda_PrimaryAttack_Post(Weapon) {
	new id = get_pdata_cbase(Weapon, 41, 4);
	new ActiveItem = get_pdata_cbase(id, 373);
	IsInPrimaryAttack = false;
	
	if(anaconda_clip[id] > cs_get_weapon_ammo(Weapon) && anaconda_clip[id] > 0 && pev_valid(ActiveItem)) {
		if(is_user_alive(id) && get_user_anaconda(id)) {			
			set_pdata_int(ActiveItem, 57, Shell, 4) ;
			set_pdata_float(id, 111, get_gametime());
			
			new Float:Push[3];
			pev(id,pev_punchangle,Push);
			xs_vec_sub(Push,cl_pushangle[id],Push);
			
			xs_vec_mul_scalar(Push,get_pcvar_float(anacondarecoil),Push);
			xs_vec_add(Push,cl_pushangle[id],Push);
			set_pev(id,pev_punchangle,Push);
			
			emit_sound(id, CHAN_WEAPON, Anaconda_Sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			set_weapon_anim(id, random_num(1,2));
			return HAM_SUPERCEDE;
		}
		return HAM_IGNORED;
	}
	return HAM_IGNORED;
}

public Anaconda_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_anaconda(id))
		return HAM_IGNORED;
	
	anaconda_clip[id] = -1;
	
	new Ammo = cs_get_user_bpammo(id, CSW_ANACONDA);
	if(Ammo <= 0)
		return HAM_SUPERCEDE;
	
	new Clip = get_pdata_int(ent, 51, 4);
	if(Clip >= get_pcvar_num(anacondaclip))
		return HAM_SUPERCEDE;
	
	anaconda_clip[id] = Clip;
	anaconda_reload[id] = 1;
	
	return HAM_IGNORED;
}

public Anaconda_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_anaconda(id))
		return HAM_IGNORED;
	
	if(anaconda_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(anacondareloadtime);
	
	set_pdata_int(ent, 51, anaconda_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 4);
	return HAM_IGNORED;
}

public Anaconda_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_anaconda(id))
		return HAM_IGNORED;
	
	new Float:NextAttack = get_pdata_float(id, 83, 5);
	new Ammo = cs_get_user_bpammo(id, CSW_ANACONDA);
	
	new Clip = get_pdata_int(ent, 51, 4);
	new InReload = get_pdata_int(ent, 54, 4);
	
	if(InReload && NextAttack <= 0.0) {
		new Temp = min(get_pcvar_num(anacondaclip) - Clip, Ammo);
		
		set_pdata_int(ent, 51, Clip + Temp, 4);
		cs_set_user_bpammo(id, CSW_ANACONDA, Ammo - Temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		InReload = 0;
		anaconda_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}

public Hook_Anaconda(id) {
	engclient_cmd(id, weapon_anaconda);
}

public get_user_anaconda(id) {
	return HaveAnaconda[id];
}

public set_user_anaconda(id, anaconda) {
	if(anaconda) {
		if(!HaveAnaconda[id]) {
			drop_secondary_weapons(id);
			HaveAnaconda[id] = true;
			anaconda_reload[id] = 0;
			WeaponList(id, ANACONDA_WEAPONKEY)
			fm_give_item(id, weapon_anaconda);
			new Clip = fm_get_user_weapon_entity(id, CSW_ANACONDA);
			cs_set_weapon_ammo(Clip, get_pcvar_num(anacondaclip));
		}
	}
	else {
		if(HaveAnaconda[id]) {
			HaveAnaconda[id] = false;
		}
	}
}
#endif

////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Stock's |
//==========================================================================================================
public WeaponList(id, WEAPONKEY) {
	new Message_WeaponList = get_user_msgid("WeaponList")
	
	switch(WEAPONKEY) {
		#if defined CROSSBOW
		case CROSSBOW_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveCrossBow[id] ? "furien30_crossbow" : "weapon_scout");		// WeaponName
			write_byte(2);				// PrimaryAmmoID
			write_byte(90);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(9);				// NumberInSlot (1...N)
			write_byte(CSW_CROSSBOW);		// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined ETHEREAL
		case ETHEREAL_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveEthereal[id] ? "furien30_ethereal" : "weapon_galil");		// WeaponName
			write_byte(4);				// PrimaryAmmoID
			write_byte(90);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(17);				// NumberInSlot (1...N)
			write_byte(CSW_ETHEREAL);		// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined DUALMP7A1
		case DUALMP7A1_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveDualMP7A1[id] ? "furien30_dualmp7a1" : "weapon_mp5navy");		// WeaponName
			write_byte(10);				// PrimaryAmmoID
			write_byte(120);			// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(7);				// NumberInSlot (1...N)
			write_byte(CSW_DUALMP7A1);		// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined K1ASES
		case K1ASES_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveK1ases[id] ? "furien30_k1ases" : "weapon_mp5navy");		// WeaponName
			write_byte(10);				// PrimaryAmmoID
			write_byte(120);			// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(7);				// NumberInSlot (1...N)
			write_byte(CSW_K1ASES);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined F2000
		case F2000_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveF2000[id] ? "furien30_f2000" : "weapon_aug");		// WeaponName
			write_byte(4);				// PrimaryAmmoID
			write_byte(90);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(14);				// NumberInSlot (1...N)
			write_byte(CSW_F2000);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined HK416
		case HK416_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveHK416[id] ? "furien30_hk416" : "weapon_m4a1");		// WeaponName
			write_byte(4);				// PrimaryAmmoID
			write_byte(90);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(6);				// NumberInSlot (1...N)
			write_byte(CSW_HK416);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined OICW
		case OICW_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveOICW[id] ? "furien30_oicw" : "weapon_galil");		// WeaponName
			write_byte(4);				// PrimaryAmmoID
			write_byte(90);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(17);				// NumberInSlot (1...N)
			write_byte(CSW_OICW);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined SPEARGUN
		case SPEARGUN_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveSpearGun[id] ? "furien30_speargun" : "weapon_galil");		// WeaponName
			write_byte(4);				// PrimaryAmmoID
			write_byte(90);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(17);				// NumberInSlot (1...N)
			write_byte(CSW_SPEARGUN);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined AK47KNIFE
		case AK47KNIFE_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveAK47Knife[id] ? "furien30_ak47knife" : "weapon_ak47");		// WeaponName
			write_byte(2);				// PrimaryAmmoID
			write_byte(90);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(1);				// NumberInSlot (1...N)
			write_byte(CSW_AK47KNIFE);		// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined TAR21
		case TAR21_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveTar21[id] ? "furien30_tar21" : "weapon_sg552");		// WeaponName
			write_byte(4);				// PrimaryAmmoID
			write_byte(90);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(10);				// NumberInSlot (1...N)
			write_byte(CSW_TAR21);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined AT4
		case AT4_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveAT4[id] ? "furien30_at4" : "weapon_m249");			// WeaponName
			write_byte(3);				// PrimaryAmmoID
			write_byte(200);			// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(4);				// NumberInSlot (1...N)
			write_byte(CSW_AT4);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined JANUS7
		case JANUS7_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveJanus7[id] ? "furien30_janus7" : "weapon_m249");			// WeaponName
			write_byte(3);				// PrimaryAmmoID
			write_byte(200);			// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(4);				// NumberInSlot (1...N)
			write_byte(CSW_JANUS7);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined SALAMANDER
		case SALAMANDER_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveSalamander[id] ? "furien30_salamander" : "weapon_m249");		// WeaponName
			write_byte(3);				// PrimaryAmmoID
			write_byte(200);			// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(4);				// NumberInSlot (1...N)
			write_byte(CSW_SALAMANDER);		// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined M134	
		case M134_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveM134[id] ? "furien30_m134" : "weapon_m249");		// WeaponName
			write_byte(3);				// PrimaryAmmoID
			write_byte(200);			// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(4);				// NumberInSlot (1...N)
			write_byte(CSW_M134);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined THOMPSON
		case THOMPSON_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveThompson[id] ? "furien30_thompson" : "weapon_p90");		// WeaponName
			write_byte(7);				// PrimaryAmmoID
			write_byte(100);			// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(8);				// NumberInSlot (1...N)
			write_byte(CSW_THOMPSON);		// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined QUADBARREL
		case QUADBARREL_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveQuadBarrel[id] ? "furien30_quadbarrel" : "weapon_m3");		// WeaponName
			write_byte(5);				// PrimaryAmmoID
			write_byte(32);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(5);				// NumberInSlot (1...N)
			write_byte(CSW_QUADBARREL);		// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined DUALBARREL
		case DUALBARREL_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveDualBarrel[id] ? "furien30_dualbarrel" : "weapon_m3");		// WeaponName
			write_byte(5);				// PrimaryAmmoID
			write_byte(32);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(5);				// NumberInSlot (1...N)
			write_byte(CSW_DUALBARREL);		// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined M1887
		case M1887_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveM1887[id] ? "furien30_m1887" : "weapon_xm1014");		// WeaponName
			write_byte(5);				// PrimaryAmmoID
			write_byte(32);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(12);				// NumberInSlot (1...N)
			write_byte(CSW_M1887);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined L85
		case L85_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveL85[id] ? "furien30_l85" : "weapon_famas");		// WeaponName
			write_byte(4);				// PrimaryAmmoID
			write_byte(90);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(18);				// NumberInSlot (1...N)
			write_byte(CSW_L85);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined SKULL5
		case SKULL5_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveSkull5[id] ? "furien30_skull5" : "weapon_sg550");	// WeaponName
			write_byte(4);				// PrimaryAmmoID
			write_byte(90);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(10);				// NumberInSlot (1...N)
			write_byte(CSW_SKULL5);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined SL8
		case SL8_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveSL8[id] ? "furien30_sl8" : "weapon_g3sg1");		// WeaponName
			write_byte(2);				// PrimaryAmmoID
			write_byte(90);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(3);				// NumberInSlot (1...N)
			write_byte(CSW_SL8);			// WeaponID
			write_byte(0);				// Flags
			message_end();	
		}
		#endif
		
		#if defined AW50
		case AW50_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveAW50[id] ? "furien30_aw50" : "weapon_awp");		// WeaponName
			write_byte(1);				// PrimaryAmmoID
			write_byte(30);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(0);				// SlotID (0...N)
			write_byte(2);				// NumberInSlot (1...N)
			write_byte(CSW_AW50);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined JANUS1		
		case JANUS1_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveJanus1[id] ? "furien30_janus1" : "weapon_deagle");		// WeaponName
			write_byte(8);				// PrimaryAmmoID
			write_byte(35);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(1);				// SlotID (0...N)
			write_byte(1);				// NumberInSlot (1...N)
			write_byte(CSW_JANUS1);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined M79		
		case M79_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveM79[id] ? "furien30_m79" : "weapon_deagle");		// WeaponName
			write_byte(8);				// PrimaryAmmoID
			write_byte(35);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(1);				// SlotID (0...N)
			write_byte(1);				// NumberInSlot (1...N)
			write_byte(CSW_M79);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined SKULL1
		case SKULL1_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveSkull1[id] ? "furien30_skull1" : "weapon_deagle");		// WeaponName
			write_byte(8);				// PrimaryAmmoID
			write_byte(35);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(1);				// SlotID (0...N)
			write_byte(1);				// NumberInSlot (1...N)
			write_byte(CSW_SKULL1);			// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined ANACONDA
		case ANACONDA_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveAnaconda[id] ? "furien30_anaconda" : "weapon_deagle");		// WeaponName
			write_byte(8);				// PrimaryAmmoID
			write_byte(35);				// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(1);				// SlotID (0...N)
			write_byte(1);				// NumberInSlot (1...N)
			write_byte(CSW_ANACONDA);		// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined DUALDEAGLE
		case DUALDEAGLE_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveDualDeagle[id] ? "furien30_dualdeagle" : "weapon_elite");		// WeaponName
			write_byte(10);				// PrimaryAmmoID
			write_byte(120);			// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(1);				// SlotID (0...N)
			write_byte(5);				// NumberInSlot (1...N)
			write_byte(CSW_DUALDEAGLE);		// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
		
		#if defined INFINITY
		case INFINITY_WEAPONKEY: {
			message_begin(MSG_ONE, Message_WeaponList, _, id);
			write_string(HaveInfinity[id] ? "furien30_infinity" : "weapon_elite");		// WeaponName
			write_byte(10);				// PrimaryAmmoID
			write_byte(120);			// PrimaryAmmoMaxAmount
			write_byte(-1);				// SecondaryAmmoID
			write_byte(-1);				// SecondaryAmmoMaxAmount
			write_byte(1);				// SlotID (0...N)
			write_byte(5);				// NumberInSlot (1...N)
			write_byte(CSW_INFINITY);		// WeaponID
			write_byte(0);				// Flags
			message_end();
		}
		#endif
	}
}

stock death_message(Killer, Victim, const Weapon[]) {
	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);
	
	if(is_user_connected(Killer)) {
		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();
	}
	if(is_user_connected(Victim)) {
		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 make_blood(id, Amount) {
	new BloodColor = ExecuteHam(Ham_BloodColor, id);
	if(is_user_alive(id) && BloodColor != -1) {
		new Float:Origin[3]
		pev(id, pev_origin, Origin);
		Amount *= 2; //according to HLSDK
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
		write_byte(TE_BLOODSPRITE);
		write_coord(floatround(Origin[0]));
		write_coord(floatround(Origin[1]));
		write_coord(floatround(Origin[2]));
		write_short(BloodSpray);
		write_short(BloodDrop);
		write_byte(BloodColor);
		write_byte(min(max(3, Amount/10), 16));
		message_end();
	}
}

stock make_bullet(id, Float:Origin[3]) {
	// Find target
	new target, body;
	get_user_aiming(id, target, body, 999999);
	
	if(target > 0 && target <= get_maxplayers()) {
		new Float:fStart[3], Float:fEnd[3], Float:fRes[3], Float:fVel[3];
		pev(id, pev_origin, fStart);
		
		velocity_by_aim(id, 64, fVel);
		
		fStart[0] = Origin[0];
		fStart[1] = Origin[1];
		fStart[2] = Origin[2];
		fEnd[0] = fStart[0]+fVel[0];
		fEnd[1] = fStart[1]+fVel[1];
		fEnd[2] = fStart[2]+fVel[2];
		
		new res;
		engfunc(EngFunc_TraceLine, fStart, fEnd, 0, target, res);
		get_tr2(res, TR_vecEndPos, fRes);
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY) ;
		write_byte(TE_BLOODSPRITE);
		write_coord(floatround(fStart[0]));
		write_coord(floatround(fStart[1]));
		write_coord(floatround(fStart[2]));
		write_short(BloodSpray);
		write_short(BloodDrop);
		write_byte(70);
		write_byte(random_num(1,2));
		message_end();
		
		
	} 
	else {
		new decal = 41;
		
		if(target) {
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_DECAL);
			write_coord(floatround(Origin[0]));
			write_coord(floatround(Origin[1]));
			write_coord(floatround(Origin[2]));
			write_byte(decal);
			write_short(target);
			message_end();
		} 
		else {
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_WORLDDECAL);
			write_coord(floatround(Origin[0]));
			write_coord(floatround(Origin[1]));
			write_coord(floatround(Origin[2]));
			write_byte(decal);
			message_end();
		}
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
		write_byte(TE_GUNSHOTDECAL);
		write_coord(floatround(Origin[0]));
		write_coord(floatround(Origin[1]));
		write_coord(floatround(Origin[2]));
		write_short(id);
		write_byte(decal);
		message_end();
	}
}

stock set_weapon_anim(id, anim) {
	set_pev(id, pev_weaponanim, anim);
	if(is_user_connected(id)) {
		message_begin(MSG_ONE, SVC_WEAPONANIM, _, id);
		write_byte(anim);
		write_byte(pev(id, pev_body));
		message_end();
	}
}

stock get_damage_body(body, Float:damage) {
	switch(body) {
		case HIT_HEAD:
			damage *= 2.0;
		case HIT_STOMACH: 
			damage *= 1.0;
		case HIT_CHEST: 
			damage *= 1.5;
		case HIT_LEFTARM: 
			damage *= 0.75;
		case HIT_RIGHTARM: 
			damage *= 0.75;
		case HIT_LEFTLEG: 
			damage *= 0.75;
		case HIT_RIGHTLEG: 
			damage *= 0.75;
		default: 
		damage *= 1.0;
	}
	
	return floatround(damage);
}	

stock drop_primary_weapons(Player) {
	static weapons[32], num, i, weaponid;
	num = 0;
	get_user_weapons(Player, weapons, num);
	
	for(i = 0; i < num; i++) {
		weaponid = weapons [i];
		
		if(((1<<weaponid) & PRIMARY_WEAPONS_BITSUM)) {
			static wname[32];
			get_weaponname(weaponid, wname, charsmax(wname));
			
			engclient_cmd(Player, "drop", wname);
		}
	}
}

stock drop_secondary_weapons(Player) {
	// Get user weapons
	static weapons [32], num, i, weaponid;
	num = 0; // reset passed weapons count(bugfix)
	get_user_weapons(Player, weapons, num);
	
	// Loop through them and drop primaries
	for(i = 0; i < num; i++) {
		// Prevent re-indexing the array
		weaponid = weapons [i];
		
		// We definetely are holding primary gun
		if(((1<<weaponid) & SECONDARY_WEAPONS_BITSUM)) {
			// Get weapon entity
			static wname[32];
			get_weaponname(weaponid, wname, charsmax(wname));
			
			// Player drops the weapon and looses his bpammo
			engclient_cmd(Player, "drop", wname);
		}
	}
}

stock fm_get_user_bpammo(index, weapon) {
	static offset
	switch(weapon) {
		case CSW_AWP: offset = 377
			case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = 378
			case CSW_M249: offset = 379
			case CSW_FAMAS, CSW_M4A1, CSW_AUG, 
			CSW_SG550, CSW_GALI, CSW_SG552: offset = 380
		case CSW_M3, CSW_XM1014: offset = 381
			case CSW_USP, CSW_UMP45, CSW_MAC10: offset = 382
			case CSW_FIVESEVEN, CSW_P90: offset = 383
			case CSW_DEAGLE: offset = 384
			case CSW_P228: offset = 385
			case CSW_GLOCK18, CSW_TMP, CSW_ELITE, 
			CSW_MP5NAVY: offset = 386
		default: offset = 0
	}
	return offset ? get_pdata_int(index, offset) : 0
}

stock fm_set_user_bpammo(index, weapon, amount) {
	static offset
	switch(weapon) {
		case CSW_AWP: offset = 377
			case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = 378
			case CSW_M249: offset = 379
			case CSW_FAMAS, CSW_M4A1, CSW_AUG, 
			CSW_SG550, CSW_GALI, CSW_SG552: offset = 380
		case CSW_M3, CSW_XM1014: offset = 381
			case CSW_USP, CSW_UMP45, CSW_MAC10: offset = 382
			case CSW_FIVESEVEN, CSW_P90: offset = 383
			case CSW_DEAGLE: offset = 384
			case CSW_P228: offset = 385
			case CSW_GLOCK18, CSW_TMP, CSW_ELITE, 
			CSW_MP5NAVY: offset = 386
		default: offset = 0
	}
	
	if(offset) 
		set_pdata_int(index, offset, amount)
	
	return 1
}

#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();
			}
		}
	} 
}
Florinutzu21
Membru, skill 0
Membru, skill 0
Posts: 75
Joined: 27 Jul 2014, 16:06
Detinator Steam: Nu
CS Status: Furien MOD !
Fond eXtream: 0
Location: In urzici :)
Has thanked: 1 time
Contact:

14 Oct 2014, 19:11

Nu nici asa nu merge , trebuie doar o litera cred..
Cosmin
Fost moderator
Fost moderator
Posts: 9362
Joined: 06 Jul 2013, 22:08
Detinator Steam: Da
Detinator server CS: Nu
Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn
Has thanked: 492 times
Been thanked: 547 times

14 Oct 2014, 19:13

nu stiu ce nu merge,eu ti-am modificat flagul si atat,restul nu e problema mea ;)'
Post Reply

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

  • Information
  • Who is online

    Users browsing this forum: No registered users and 137 guests