[New] Furien Shop (V 2.0)

Pluginuri facute de utilizatorii forumului eXtream.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

User avatar
Chappy
Membru, skill +4
Membru, skill +4
Posts: 1794
Joined: 25 Mar 2013, 11:10
Detinator Steam: Da
Detinator server CS: Nu
SteamID: -
Location: Suceava
Has thanked: 59 times
Been thanked: 65 times

04 Sep 2014, 15:27

Frumos plugin , pot modifica acel meniu?
red# Wrote:
am stat ieri cam toata ziua prin baneasa. la fiecare 2-3minute trecea un avion.
dupa cum se auzea pareau a fi avioane de viteza..
incepe razboiul?

=))) Taran
RoyalServer 2
User avatar
DaNNe.
Fost moderator
Fost moderator
Posts: 2811
Joined: 08 Nov 2013, 20:43
Detinator Steam: Da
CS Status: Activitate scăzută
SteamID: /id/FurienMaster
Reputatie: Nick anterior: DnD. Gold, Emrys
0.5/3
Fost moderator ajutator
Fost Membru Club eXtreamCS (doua luni)
Has thanked: 244 times
Been thanked: 129 times
Contact:

04 Sep 2014, 16:57

Ce anume vrei sa modifici.
User avatar
sDs|Aragon*
Membru, skill +2
Membru, skill +2
Posts: 576
Joined: 29 Dec 2011, 21:38
Detinator Steam: Da
SteamID: Mihai_Parkour10
Reputatie: Fost scripter eXtreamCS
Has thanked: 4 times
Been thanked: 132 times

11 Sep 2014, 22:27

FaTzZu wrote:FURIEN.WARS.RO -- De acolo v-ati cam inspirat cu shopurile ( de la mine -_- )
Primu plugin care l-am facut cand m-am apucat de scripting a fost un shop, si asta a fost acum foarte mult timp.
So .. ;))
User avatar
FaTzZu
Fost moderator
Fost moderator
Posts: 1206
Joined: 22 Dec 2012, 18:37
Detinator Steam: Da
Reputatie: Fost moderator ajutator
Has thanked: 114 times
Been thanked: 168 times

12 Sep 2014, 01:44

Nu ma refeream la asta Mihai, ci la ce este defapt in shop.
Si "*BoOoM*" nu m-am mandrit deloc cu asta, dar in ultimul timp pe servere am vazut foarte des addonul, care din punctul meu de vedere am facut un mare rahat. Va recomand sa luati addonuri de la oameni care chiar stiu cu ce se mananca scriptingul.
A fool's brain digests philosophy into folly, science into superstition, and art into pedantry.

#RETIRED.
User avatar
@Nonamed
Membru, skill +3
Membru, skill +3
Posts: 1373
Joined: 05 Dec 2014, 15:26
Detinator Steam: Da
CS Status: Nu am
Detinator server CS: Nu am
SteamID: Nu am
Fond eXtream: 0
Location: Bacău

30 Jan 2015, 12:17

De cand cautam asa plugin mersi mult ce pot zice..
Rio*
Membru, skill 0
Membru, skill 0
Posts: 62
Joined: 01 Mar 2015, 12:41
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

10 Mar 2015, 22:53

Pe bani nu merge facut PLZZ AJUTAOR
abelungu22
Membru, skill 0
Membru, skill 0
Posts: 1
Joined: 11 Mar 2015, 22:05
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

11 Mar 2015, 22:33

:D>- [quote="SkillartzHD"]Frumos ! Sall fratilor vr sa fac 1 server de furien am nevoie de 1 scripter. Pmpmpm skype abelungu22 :troll
ciuraru
Membru, skill 0
Membru, skill 0
Posts: 2
Joined: 17 Mar 2015, 19:41
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

17 Mar 2015, 19:51

Salut ! Imi poate face cineva ca meniul sa se deschida depe "say shop" am incercat sa il modifica dar nu mio reusit ! Cine se descurca daca poate sa mil faca si mie ! Si sa se deschida direct ! Mulţumesc !!
User avatar
keloo29
Membru, skill 0
Membru, skill 0
Posts: 7
Joined: 02 Apr 2015, 15:05
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

08 May 2015, 07:43

salut, am o problema ca acest plugin nu imi merge pe server,"nu se deschide shopul cum ar trebui" cand dau shop imi apare he grenade 3000 si flash 1500.
pluginurile de pe server
knife.amxx
amx_showip.amxx ; SHOW IP ADDR
bullet_damage.amxx ; Show real-time damage to players
stuck.amxx
semiclip.amxx
nademodes.amxx
multijump.amxx
invasion.amxx
furien.amxx
furien_new_weapons.amxx
furien_weapons.amxx
shop40.amxx
furien40_weapons.amxx
furien_shop.amxx
furienvipmod.amxx
;furien_superknife.amxx
;furien_parachute.amxx
;furien_noflash.amxx
;furien_health.amxx
;furien_defusekit.amxx
;furien_armor.amxx
frostnades.amxx
freewallhang.amxx
flare.amxx
swich.amxx
bcd_hudtimer.amxx
bonus_box.amxx
pingfaker2.amxx
bind.amxx
amx_gag.amxx
amx_ss.amxx
players_models.amxx
resetscore.amxx
ad_manager.amxx
viata.amxx
depozit.amxx
hpmax.amxx

advanced_gag.amxx
frog.amxx
vip.amxx
customsky.amxx
AmxWhoMenu.amxx
fmu_anti_camp.amxx
GHW_Weapon_Replacement.amxx
moriefect.amxx
Harry_Magic_Wand.amxx
nick.amxx
amx_lights.amxx
amx_parachute.amxx
bomb_time_set.amxx
amx_spec.amxx

Shop40.amxx este "NewFurienShop". MS
Parano1a
Membru, skill +1
Membru, skill +1
Posts: 170
Joined: 29 Sep 2014, 14:05
Detinator Steam: Nu
CS Status: Stau .
Detinator server CS: ---
Fond eXtream: 0
Location: Resita
Contact:

13 May 2015, 20:03

Si care-i parola frate? :|
Suntem ceea ce iubim.
User avatar
FaTzZu
Fost moderator
Fost moderator
Posts: 1206
Joined: 22 Dec 2012, 18:37
Detinator Steam: Da
Reputatie: Fost moderator ajutator
Has thanked: 114 times
Been thanked: 168 times

13 May 2015, 21:20

A fool's brain digests philosophy into folly, science into superstition, and art into pedantry.

#RETIRED.
User avatar
Challenger.
Fost moderator
Fost moderator
Posts: 2530
Joined: 07 Dec 2014, 14:32
Detinator Steam: Da
Reputatie: Fost Super Moderator
Nume anterior: whisTle
Puncte: 1.7 / 3
Fond eXtream: 0
Contact:

20 May 2015, 20:48

Imi poti scoate pack-ul pentru Vip si Bazooka ?
Pe sistemul de credite al lui Askhanar:
| Afiseaza codul
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <engine>
#include <fun>

#define PLUGIN	"Furien Shop"
#define VERSION	"2.0"
#define AUTHOR "DaNNe."

#define VIP_LEVEL	ADMIN_LEVEL_H

// Pet
#define fm_precache_model(%1)           engfunc(EngFunc_PrecacheModel,%1)
#define fm_precache_sound(%1)           engfunc(EngFunc_PrecacheSound,%1)
#define fm_remove_entity(%1)            engfunc(EngFunc_RemoveEntity, %1)
//#define fm_drop_to_floor(%1)            engfunc(EngFunc_DropToFloor,%1)
#define fm_find_ent_by_class(%1,%2)     engfunc(EngFunc_FindEntityByString, %1, "classname", %2)
#define fm_set_user_gravity(%1,%2)      set_pev(%1,pev_gravity,%2)

#define PET_FLAG                        pev_flTimeStepSound
#define PET_KILLED                      389

static const pet_model[] = "models/stukabat.mdl"
static const pet_sounds[][] = { "bullchicken/bc_die1.wav", "bullchicken/bc_die2.wav", "bullchicken/bc_die3.wav", "bullchicken/bc_idle1.wav", "bullchicken/bc_pain3.wav" }
static const pet_idle = 13
static const pet_run = 13
static const pet_die = 5
static const Float:pet_idle_speed = 0.3
static const Float:pet_run_speed = 10.0
static const Float:player_gravity = 0.65

// AT4 
#define weapon_at4cs 	"weapon_m249"
#define CSW_AT4CS 		CSW_M249
#define TASK_CHECKRELOAD 111112
#define TASK_RELOAD 111113

new Float:g_lastfire[33], Float:g_lastaim[33], g_aiming[33],
g_smoke_id, g_spr_trail, g_spr_exp, is_reloading[33],
cvar_radius, cvar_maxdamage

new const AT4Model_V[] = "models/FurienShop/v_at4ex.mdl";
new const AT4Model_P[] = "models/FurienShop/p_at4ex.mdl";
new const AT4Model_W[] = "models/FurienShop/w_at4ex.mdl";
new const AT4Rocket[] = "models/FurienShop/s_rocket.mdl";

new const AT4Sound[][] = {
	"weapons/at4-1.wav",
	"weapons/at4_clipin1.wav",
	"weapons/at4_clipin2.wav",
	"weapons/at4_clipin3.wav",
	"weapons/at4_draw.wav" 
};

// Super Knifes
new SuperKnifeX2_Model[] = "models/FurienShop/v_superknife_x2.mdl";
new SuperKnifeX3_Model[] = "models/FurienShop/v_superknife_x3.mdl";
new SuperKnifeVIP_Model[] = "models/FurienShop/v_superknife_vip.mdl";

// Natives
native fcs_get_user_credits(id)
native fcs_set_user_credits(id, amount)
	
//Furien Detector
new DetectorSprite;
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);
new SECONDARY_WEAPONS_BITSUM = (1<<CSW_GLOCK18)|(1<<CSW_USP)|(1<<CSW_P228)|(1<<CSW_DEAGLE)|(1<<CSW_FIVESEVEN)|(1<<CSW_ELITE);

//Bools
new bool:HaveSuperKnifeX2[33], bool:HaveSuperKnifeX3[33], bool:HaveSuperKnifeVip[33], bool:HaveDetector[33], bool:HaveNoFlash[33], bool:HaveAT4[33] 

//PET
new ItemPET[33], HavePET[33], PETAtSpawn[33]
new Float:item_leaptime[33]
new bool:g_has_speed[33]

new Prefix[] = "[FurienShop]";
new Menu;

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR) 
	
	register_clcmd("say shop", "CmdShop");
	register_clcmd("say_team shop", "CmdShop");
	register_clcmd("say /shop", "CmdShop");
	register_clcmd("say_team /shop", "CmdShop");
	
	RegisterHam(Ham_Spawn, "player", "HAM_Spawn_Post");
	RegisterHam(Ham_TakeDamage, "player", "HAM_TakeDamage");
	
	register_event("CurWeapon", "EVENT_CurWeapon", "be", "1=1");
	register_event("DeathMsg", "EVENT_Death", "a");
	register_event("HLTV", "HLTV_EVENT_NewRound", "a", "1=0", "2=0");
	register_message(get_user_msgid("ScreenFade"), "MSG_ScreenFade")
	
	register_forward(FM_PlayerPreThink, "FWD_PreThink");
	register_forward(FM_Think, "FWD_Think");
	
	register_forward(FM_UpdateClientData, "AT4_UpdateClientData_POST", 1)
	register_forward(FM_CmdStart, "AT4_CMDStart")
	register_forward(FM_SetModel, "AT4_WorldModel")
	
	register_think("at4ex_rocket", "AT4_Think")
	register_touch("at4ex_rocket", "*", "AT4_Touch")
	
	RegisterHam(Ham_Weapon_Reload, weapon_at4cs, "AT4_Reload")
	RegisterHam(Ham_Item_AddToPlayer, weapon_at4cs, "AT4_AddToPlayer", 1)
	
	cvar_radius = register_cvar("zp_at4cs_radius", "300.0")
	cvar_maxdamage = register_cvar("zp_at4cs_maxdamage", "70.0")
	
	register_clcmd("weapon_at4cs", "hook_weapon")	
}

public plugin_precache() {
	precache_model(SuperKnifeX2_Model);
	precache_model(SuperKnifeX3_Model);
	precache_model(SuperKnifeVIP_Model);
	precache_model(AT4Model_V)
	precache_model(AT4Model_P)
	precache_model(AT4Model_W)
	precache_model(AT4Rocket)
	fm_precache_model(pet_model)
	
	engfunc(EngFunc_PrecacheGeneric, "sprites/FurienShop/weapon_at4cs.txt")
	engfunc(EngFunc_PrecacheGeneric, "sprites/FurienShop/at4cs.spr")	
	
	g_smoke_id = precache_model("sprites/FurienShop/rainsplash.spr")
	g_spr_trail = precache_model("sprites/FurienShop/xbeam3.spr")
	g_spr_exp = precache_model("sprites/FurienShop/zerogxplode.spr")
	DetectorSprite = precache_model("sprites/FurienShop/Detector.spr")
	
	new i;
	for(i = 0; i < sizeof pet_sounds; i++)
		fm_precache_sound(pet_sounds)
		
	for(i = 0; i < sizeof(AT4Sound); i++)
		engfunc(EngFunc_PrecacheSound, AT4Sound)
	
	
}

public plugin_natives() {
	register_native("get_user_at4", "get_user_at4", 1)
	register_native("set_user_at4", "set_user_at4", 1)
}

public HAM_Spawn_Post(id) {
	if(is_user_connected(id)) {
		HaveNoFlash[id] = false;
		HaveDetector[id] = false;
		HaveAT4[id] = false;
		HaveSuperKnifeVip[id] = false;
		set_user_at4(id, false)
		drop_primary_weapons(id)
		if(get_user_team(id) == 2) {
			HaveSuperKnifeX2[id] = false;
			HaveSuperKnifeX3[id] = false;
		}
		if(get_user_team(id) != 2) {
			kill_pet(id)
			HavePET[id] = 0		
		}
		if(HavePET[id]) {
			fm_set_user_gravity(id, player_gravity)
			fm_set_user_health(id, get_user_health(id) + 250)
			fm_set_user_armor(id, get_user_armor(id) + 350)
			g_has_speed[id] = true
		}
		else if(PETAtSpawn[id]) {
			create_pet(id)
			PETAtSpawn[id] = 0
			g_has_speed[id] = true
		}
	}
}

public HAM_TakeDamage(Victim, Inflictor, Attacker, Float:Damage) {
	if(is_user_connected(Attacker)) {
		if(get_user_weapon(Attacker) == CSW_KNIFE) {
			if(HaveSuperKnifeX2[Attacker])
				SetHamParamFloat(4, Damage * 2.0)
			if(HaveSuperKnifeX3[Attacker])
				SetHamParamFloat(4, Damage * 3.0)
			if(HaveSuperKnifeVip[Attacker])
				SetHamParamFloat(4, Damage * 3.0)
		}
	}
}

public EVENT_CurWeapon(id) {
	if(get_user_weapon(id) == CSW_KNIFE) {
		if(HaveSuperKnifeX2[id])
			set_pev(id, pev_viewmodel2, SuperKnifeX2_Model)
		if(HaveSuperKnifeX3[id])
			set_pev(id, pev_viewmodel2, SuperKnifeX3_Model)
		if(HaveSuperKnifeVip[id])
			set_pev(id, pev_viewmodel2, SuperKnifeVIP_Model)	
	}
	if(get_user_weapon(id) == CSW_AT4CS) {
		if(HaveAT4[id]) {
			set_pev(id, pev_viewmodel2, AT4Model_V)
			set_pev(id, pev_weaponmodel2, AT4Model_P)
		}
	}
}

public HLTV_EVENT_NewRound() {
	new entid = -1
	while((entid = fm_find_ent_by_class(entid, "zp_bat"))) {
		if(pev(entid,PET_FLAG) == PET_KILLED)
			fm_remove_entity(entid)             
	}
	remove_entity_name("at4ex_rocket")	
}

public EVENT_Death() {
	new Victim = read_data(2)
	HaveSuperKnifeX2[Victim] = false;
	HaveSuperKnifeX3[Victim] = false;
	
	if(HavePET[Victim]) {
		kill_pet(Victim)
		HavePET[Victim] = 0
	}
	
	if(get_user_team(Victim) == 1)
		HavePET[Victim] = 0
	if(g_has_speed[Victim])
		g_has_speed[Victim] = false
}

public MSG_ScreenFade(msgid, dest, id) {
	if(HaveNoFlash[id]) {
		static data[4]
		data[0] = get_msg_arg_int(4)
		data[1] = get_msg_arg_int(5)
		data[2] = get_msg_arg_int(6)
		data[3] = get_msg_arg_int(7)
		
		if(data[0] == 255 && data[1] == 255 && data[2] == 255 && data[3] > 199)
			return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public create_pet(id) {
	if(!is_user_alive(id)) {
		ColorChat(id, "!t%s!g PET-ul iti va aparea runda urmatoare !", Prefix)
		PETAtSpawn[id] = 1
		return PLUGIN_HANDLED
	}      
	else {
		ItemPET[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString,"info_target"))
		set_pev(ItemPET[id],pev_classname,"zp_bat")
		
		engfunc(EngFunc_SetModel,ItemPET[id],pet_model)
		
		new Float:origin[3]
		pev(id,pev_origin,origin)                      
		
		set_pev(ItemPET[id],pev_origin,origin)
		set_pev(ItemPET[id],pev_solid,SOLID_TRIGGER)
		set_pev(ItemPET[id],pev_movetype,MOVETYPE_FLY)
		set_pev(ItemPET[id],pev_owner,33)
		set_pev(ItemPET[id],pev_nextthink,1.0)
		set_pev(ItemPET[id],pev_sequence,0)
		set_pev(ItemPET[id],pev_gaitsequence,0)
		set_pev(ItemPET[id],pev_framerate,1.0)
		
		set_pev(ItemPET[id], pev_renderfx, kRenderFxGlowShell)
		set_pev(ItemPET[id], pev_rendercolor, Float:{0.0, 0.0, 200.0})
		
		fm_set_user_gravity(id,player_gravity)
		
		fm_set_user_health(id, get_user_health(id) + 250)
		fm_set_user_armor(id, get_user_armor(id) + 350)
		
		engfunc(EngFunc_EmitSound,ItemPET[id],CHAN_AUTO,pet_sounds[random_num(0,sizeof pet_sounds - 1)],1.0, 1.2, 0, PITCH_NORM)              
		
		HavePET[id] = 1
		g_has_speed[id] = true
	}
	return PLUGIN_HANDLED
}

public kill_pet(id) {
	if(pev_valid(ItemPET[id])) {
		set_pev(ItemPET[id],pev_sequence,pet_die)
		set_pev(ItemPET[id],pev_gaitsequence,pet_die)
		set_pev(ItemPET[id],pev_framerate,1.0)
		
		set_pev(ItemPET[id],PET_FLAG,PET_KILLED)
		
		fm_drop_to_floor(ItemPET[id])
		
		HavePET[id] = 0
		g_has_speed[id] = false
	}      
	ItemPET[id] = 0
}

public FWD_PreThink(id) {
	if(is_user_connected(id) && is_user_alive(id)) {
		if(get_user_team(id) == 2 && HaveDetector[id]) {
			static Target, Body, Weapon;
			
			get_user_aiming(id, Target, Body);
			Weapon = get_user_weapon(id);
			
			if((1<<Weapon) & PRIMARY_WEAPONS_BITSUM || (1<<Weapon) & SECONDARY_WEAPONS_BITSUM) {
				static Origin[3];
				get_user_origin(id, Origin, 3);
				
				message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
				write_byte(TE_BEAMENTPOINT);
				write_short(id | 0x1000);
				write_coord(Origin[0]);
				write_coord(Origin[1]);
				write_coord(Origin[2]);
				write_short(DetectorSprite); 
				write_byte(0);
				write_byte(10);
				write_byte(1);
				write_byte(5);
				write_byte(0);
				if(is_user_alive(Target) && get_user_team(Target) == 1) {
					write_byte(150);
					write_byte(0);
					write_byte(0);
				}
				else {
					write_byte(0);
					write_byte(150);
					write_byte(0);
				}
				write_byte(250);
				write_byte(25);
				message_end();
			}		
		}
		if(allowed_leap(id)) {
			static Float:velocity[3]
			velocity_by_aim(id, 500, velocity)
			velocity[2] = 300.0
			set_pev(id, pev_velocity, velocity)  
			item_leaptime[id] = get_gametime()
		}
	}
}

public FWD_Think(ent) {
	for(new i = 0; i <= get_maxplayers(); i++) {
		if(ent == ItemPET) {
			static Float:origin[3]
			static Float:origin2[3]
			static Float:velocity[3]
			pev(ent,pev_origin,origin2)
			get_offset_origin_body(i,Float:{50.0,0.0,0.0},origin)
			
			if(get_distance_f(origin,origin2) > 300.0)
				set_pev(ent,pev_origin,origin)
			
			else if(get_distance_f(origin,origin2) > 80.0) {
				get_speed_vector(origin2,origin,250.0,velocity)
				set_pev(ent,pev_velocity,velocity)
				if(pev(ent,pev_sequence) != pet_run || pev(ent,pev_framerate) != pet_run_speed) {
					set_pev(ent,pev_sequence,pet_run)
					set_pev(ent,pev_gaitsequence,pet_run)
					set_pev(ent,pev_framerate,pet_run_speed)
				}
			}
			
			else if(get_distance_f(origin,origin2) < 75.0) {
				if(pev(ent,pev_sequence) != pet_idle || pev(ent,pev_framerate) != pet_idle_speed) {
					set_pev(ent,pev_sequence,pet_idle)
					set_pev(ent,pev_gaitsequence,pet_idle)
					set_pev(ent,pev_framerate,pet_idle_speed)
				}
				set_pev(ent,pev_velocity,Float:{0.0,0.0,0.0})
			}
			pev(i,pev_origin,origin)
			origin[2] = origin2[2]
			entity_set_aim(ent,origin)                     
			set_pev(ent,pev_nextthink,1.0)
			break
		}
	}
}

public allowed_leap(id) {      
	if(!HavePET[id])
		return false
	
	if(!(pev(id, pev_flags) & FL_ONGROUND) || fm_get_speed(id) < 80)
		return false
	
	static buttons
	buttons = pev(id, pev_button)
	
	if(!is_user_bot(id) && (!(buttons & IN_JUMP) || !(buttons & IN_DUCK)))
		return false
	
	if(get_gametime() - item_leaptime[id] < 3)
		return false
	
	return true
}

public is_a_player(ent) {
	if(ent > 0 && ent < 33)
		return true
	
	return false
}

public remove_pet(ent) {
	if(pev_valid(ent))
		fm_remove_entity(ent)
}

public CmdShop(id) {
	if(!is_user_alive(id)) {
		ColorChat(id, "!t%s!g Nu poti folosi shopul cat timp esti mort !", Prefix)
		return;
	}
	switch(get_user_team(id)) {
		case 1: FurienShop(id)
			case 2: AntiFurienShop(id)
		}
}

public FurienShop(id) {
	if(is_user_alive(id) && get_user_team(id) == 1) {
		new Title[128]
		formatex(Title, sizeof(Title)-1, "\rCredite: \y%d\r^n\rFurien Shop:", fcs_get_user_credits(id))
		Menu = menu_create(Title, "FurienHandler")
		
		if(HaveSuperKnifeX2[id])
			menu_additem(Menu, "\dSuper Knife [X2]\w - \rAi deja", "1", 0)
		else {
			if(fcs_get_user_credits(id) >= 10)
				menu_additem(Menu, "\wSuper Knife\r [X2]\w - \r10 Credite", "1", 0)
			else 
				menu_additem(Menu, "\dSuper Knife [X2]\w - \r10 Credite", "1", 0)
		}
		
		if(HaveSuperKnifeX3[id])
			menu_additem(Menu, "\dSuper Knife [X3]\w - \rAi deja", "2", 0)
		else {
			if(fcs_get_user_credits(id) >= 20)
				menu_additem(Menu, "\wSuper Knife\r [X3]\w - \r20 Credite", "2", 0)
			else 
				menu_additem(Menu, "\dSuper Knife [X3]\w - \r20 Credite", "2", 0)
		}
		
		if(get_user_health(id) >= 250) 
			menu_additem(Menu, "\dHealth [+50]\w -\r Ai viata maxima", "3", 0)
		else {
			if(fcs_get_user_credits(id) >= 15)
				menu_additem(Menu, "\wHealth \r[+50]\w - \r15 Credite", "3", 0)
			else 
				menu_additem(Menu, "\dHealth [+50]\w - \r15 Credite", "3", 0)
		}
		
		if(get_user_armor(id) >= 250) 
			menu_additem(Menu, "\dArmor [+50]\w -\r Ai armura maxima", "4", 0)
		else {
			if(fcs_get_user_credits(id) >= 10)
				menu_additem(Menu, "\wArmor \r[+50]\w - \r10 Credite", "4", 0)
			else 
				menu_additem(Menu, "\dArmor [+50]\w - \r10 Credite", "4", 0)
		}			
		
		if(HaveNoFlash[id])
			menu_additem(Menu, "\dNo Flash\w - \rAi deja", "5", 0)
		else {
			if(fcs_get_user_credits(id) >= 5)
				menu_additem(Menu, "\wNo Flash - \r5 Credite", "5", 0)
			else 
				menu_additem(Menu, "\dNo Flash\w - \r5 Credite", "5", 0)
		}
		
		if(user_has_weapon(id, CSW_HEGRENADE))
			menu_additem(Menu, "\dHe grenade\w - \rAi deja", "6", 0)
		else {
			if(fcs_get_user_credits(id) >= 25)
				menu_additem(Menu, "\wHe grenade - \r25 Credite", "6", 0)
			else 
				menu_additem(Menu, "\dHe grenade\w - \r25 Credite", "6", 0)
		}
		
		if(user_has_weapon(id, CSW_SMOKEGRENADE))
			menu_additem(Menu, "\dFrost nade\w - \rAi deja", "7", 0)
		else {
			if(fcs_get_user_credits(id) >= 30)
				menu_additem(Menu, "\wFrost nade - \r30 Credite", "7", 0)
			else 
				menu_additem(Menu, "\dFrost nade\w - \r30 Credite", "7", 0)
		}
		
		if(get_user_flags(id) & VIP_LEVEL) {
			if(HaveSuperKnifeVip[id])
				menu_additem(Menu, "\dVip Pack\w - \rAi deja", "8", 0)
			else {
				if(fcs_get_user_credits(id) >= 100)
					menu_additem(Menu, "\wVip Pack - \r100 Credite", "8", 0)
				else 
					menu_additem(Menu, "\dVip Pack\w - \r100 Credite", "8", 0)	
			}
		}
		else 
			menu_additem(Menu, "\dVip Pack\w - \rDoar VIP", "8", 0)
		
		menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, Menu, 0);
	}
}

public FurienHandler(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id) || get_user_team(id) != 1) {
		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(HaveSuperKnifeX2[id]) {
				ColorChat(id, "!t%s!g Ai deja!t SuperKnife [X2]!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 10 
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t SuperKnife [X2]!g !", Prefix);
					return 1;
				}
				else {
					HaveSuperKnifeX2[id] = true;
					HaveSuperKnifeX3[id] = false;
					HaveSuperKnifeVip[id] = false;
					EVENT_CurWeapon(id);
					fcs_set_user_credits(id, Credits);
					ColorChat(id, "!t%s!g Ai cumparat!t SuperKnife [X2]!g !", Prefix);
				}
			}
		}
		case 2: {
			if(HaveSuperKnifeX3[id]) {
				ColorChat(id, "!t%s!g Ai deja!t SuperKnife [X3]!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 20 
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t SuperKnife [X3]!g !", Prefix);
					return 1;
				}
				else {
					HaveSuperKnifeX3[id] = true;
					EVENT_CurWeapon(id);
					fcs_set_user_credits(id, Credits);
					ColorChat(id, "!t%s!g Ai cumparat!t SuperKnife [X3]!g !", Prefix);
				}
			}
		}
		case 3: {
			if(get_user_health(id) >= 250) {
				ColorChat(id, "!t%s!g Ai deja!t 250 health!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 15 
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t +50 Health!g !", Prefix);
					return 1;
				}
				else {
					if(get_user_health(id) + 50 > 250)
						fm_set_user_health(id, 250)
					else {
						fm_set_user_health(id, get_user_health(id) + 50) 
						fcs_set_user_credits(id, Credits)
						ColorChat(id, "!t%s!g Ai cumparat!t +50 Health!g !", Prefix)
					}
				}
			}
		}
		case 4: {
			if(get_user_armor(id) >= 250) {
				ColorChat(id, "!t%s!g Ai deja!t 250 armor!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 10
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t +50 Armor!g !", Prefix);
					return 1;
				}
				else {
					if(get_user_armor(id) + 50 > 250)
						fm_set_user_armor(id, 250);
					else {
						fm_set_user_armor(id, get_user_armor(id) + 50) ;
						fcs_set_user_credits(id, Credits);
						ColorChat(id, "!t%s!g Ai cumparat!t +50 Armor!g !", Prefix);
					}
				}
			}
		}
		case 5: {
			if(HaveNoFlash[id]) {
				ColorChat(id, "!t%s!g Ai deja!t No Flash!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 5 
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t No Flash!g !", Prefix);
					return 1;
				}
				else {
					HaveNoFlash[id] = true;
					fcs_set_user_credits(id, Credits);
					ColorChat(id, "!t%s!g Ai cumparat!t No Flash!g !", Prefix);
				}
			}
		}
		case 6: {
			if(user_has_weapon(id, CSW_HEGRENADE)) {
				ColorChat(id, "!t%s!g Ai deja!t HE Grenade!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 25 
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t HE Grenade!g !", Prefix);
					return 1;
				}
				else {
					fm_give_item(id, "weapon_hegrenade");
					fcs_set_user_credits(id, Credits);
					ColorChat(id, "!t%s!g Ai cumparat!t HE Grenade!g !", Prefix);
				}
			}
		}
		case 7: {
			if(user_has_weapon(id, CSW_SMOKEGRENADE)) {
				ColorChat(id, "!t%s!g Ai deja!t Frost Nade!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 30 
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t Frost Nade!g !", Prefix);
					return 1;
				}
				else {
					fm_give_item(id, "weapon_smokegrenade");
					fcs_set_user_credits(id, Credits);
					ColorChat(id, "!t%s!g Ai cumparat!t Frost Nade!g !", Prefix);
				}
			}
		}
		case 8: {
			if(get_user_flags(id) & VIP_LEVEL) {
				if(HaveSuperKnifeVip[id]) {
					ColorChat(id, "!t%s!g Ai deja!t VIP Pack!g !", Prefix);
					return 1;
				}
				else {
					new Credits = fcs_get_user_credits(id) - 100
					if(Credits < 0) {
						ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t VIP Pac!g !", Prefix);
						return 1;
					}	
					else {
						HaveSuperKnifeVip[id] = true;
						HaveSuperKnifeX2[id] = false;
						HaveSuperKnifeX3[id] = false;
						EVENT_CurWeapon(id);
						fm_set_user_armor(id, 300);
						fm_set_user_health(id, 300);
						fcs_set_user_credits(id, Credits)
					}
				}
			}
			else {
				ColorChat(id, "!t%s!g Acest item poate fi cumparat doar de catre!t membrii VIP!g !", Prefix);
				return 1;
			}
		}
	}
	menu_destroy(menu)
	return PLUGIN_HANDLED
}

public AntiFurienShop(id) {
	if(is_user_alive(id) && get_user_team(id) == 2) {
		new Title[128]
		formatex(Title, sizeof(Title)-1, "\rCredite: \y%d\r^n\rAnti-Furien Shop:", fcs_get_user_credits(id))
		Menu = menu_create(Title, "AntiFurienHandler")
		
		if(HaveDetector[id])
			menu_additem(Menu, "\dFurien Detector\w - \rAi deja", "1", 0)
		else {
			if(fcs_get_user_credits(id) >= 50) 
				menu_additem(Menu, "\wFurien Detector - \r50 Credite", "1", 0)
			else 
				menu_additem(Menu, "\dFurien Detector\w - \r50 Credite", "1", 0)
		}
		
		if(cs_get_user_defuse(id))
			menu_additem(Menu, "\dDefuse Kit\w - \rAi deja", "2", 0)
		else {
			if(fcs_get_user_credits(id) >= 2)
				menu_additem(Menu, "\wDefuse Kit - \r2 Credite", "2", 0)
			else 
				menu_additem(Menu, "\dDefuse Kit\w - \r2 Credite", "2", 0 )
		}
		
		if(get_user_health(id) >= 250) 
			menu_additem(Menu, "\dHealth [+50]\w -\r Ai viata maxima", "3", 0)
		else {
			if(fcs_get_user_credits(id) >= 15)
				menu_additem(Menu, "\wHealth \r[+50]\w - \r15 Credite", "3", 0)
			else 
				menu_additem(Menu, "\dHealth [+50]\w - \r15 Credite", "3", 0)
		}
		
		if(get_user_armor(id) >= 250) 
			menu_additem(Menu, "\dArmor [+50]\w -\r Ai armura maxima", "4", 0)
		else {
			if(fcs_get_user_credits(id) >= 10)
				menu_additem(Menu, "\wArmor \r[+50]\w - \r10 Credite", "4", 0)
			else 
				menu_additem(Menu, "\dArmor [+50]\w - \r10 Credite", "4", 0)
		}			
		
		if(HaveNoFlash[id])
			menu_additem(Menu, "\dNo Flash\w - \rAi deja", "5", 0)
		else {
			if(fcs_get_user_credits(id) >= 5)
				menu_additem(Menu, "\wNo Flash - \r5 Credite", "5", 0)
			else 
				menu_additem(Menu, "\dNo Flash\w - \r5 Credite", "5", 0)
		}		
		
		if(user_has_weapon(id, CSW_SMOKEGRENADE))
			menu_additem(Menu, "\dFrost nade\w - \rAi deja", "6", 0)
		else {
			if(fcs_get_user_credits(id) >= 30)
				menu_additem(Menu, "\wFrost nade - \r30 Credite", "6", 0)
			else 
				menu_additem(Menu, "\dFrost nade\w - \r30 Credite", "6", 0)
		}
		
		if(HavePET[id])
			menu_additem(Menu, "\dPET\w - \rAi deja", "7", 0)
		else {
			if(fcs_get_user_credits(id) >= 30) 
				menu_additem(Menu, "\wPET - \r30 Credite", "7", 0)
			else 
				menu_additem(Menu, "\dPET\w - \r30 Credite", "7", 0)
		}
		
		if(get_user_flags(id) & VIP_LEVEL) {
			if(HaveAT4[id])
				menu_additem(Menu, "\dBazooka\w - \rAi deja", "8", 0)
			else {
				if(fcs_get_user_credits(id) >= 100)
					menu_additem(Menu, "\wBazooka - \r100 Credite", "8", 0)
				else 
					menu_additem(Menu, "\dBazooka\w - \r100 Credite", "8", 0)	
			}
		}
		else 
			menu_additem(Menu, "\dBazooka\w - \rDoar VIP", "8", 0)		
		
		menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, Menu, 0);
	}
}

public AntiFurienHandler(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(HaveDetector[id]) {
				ColorChat(id, "!t%s!g Ai deja!t Furien Detector!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 50
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente !tcredite!g pentru cumpara!t Furien Detector!g !", Prefix);
					return 1;
				}
				else {
					HaveDetector[id] = true;
					fcs_set_user_credits(id, Credits)
					ColorChat(id, "!t%s!g Ai cumparat!t Furien Detector!g !", Prefix);
				}
			}
		}
		case 2: {
			if(cs_get_user_defuse(id)) {
				ColorChat(id, "!t%s!g Ai deja!t Defuse KIT!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 2 
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t Defuse KIT!g !", Prefix);
					return 1;
				}
				else {
					cs_set_user_defuse(id, 1)
					fcs_set_user_credits(id, Credits)
					ColorChat(id, "!t%s!g Ai cumparat!t Defuse KIT!g !", Prefix);
				}
			}
		}
		case 3: {
			if(get_user_health(id) >= 250) {
				ColorChat(id, "!t%s!g Ai deja!t 250 health!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 15 
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t +50 Health!g !", Prefix);
					return 1;
				}
				else {
					if(get_user_health(id) + 50 > 250)
						fm_set_user_health(id, 250)
					else {
						fm_set_user_health(id, get_user_health(id) + 50) 
						fcs_set_user_credits(id, Credits)
						ColorChat(id, "!t%s!g Ai cumparat!t +50 Health!g !", Prefix)
					}
				}
			}
		}
		case 4: {
			if(get_user_armor(id) >= 250) {
				ColorChat(id, "!t%s!g Ai deja!t 250 armor!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 10
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t +50 Armor!g !", Prefix);
					return 1;
				}
				else {
					if(get_user_armor(id) + 50 > 250)
						fm_set_user_armor(id, 250);
					else {
						fm_set_user_armor(id, get_user_armor(id) + 50) ;
						fcs_set_user_credits(id, Credits);
						ColorChat(id, "!t%s!g Ai cumparat!t +50 Armor!g !", Prefix);
					}
				}
			} 
		}
		case 5: {
			if(HaveNoFlash[id]) {
				ColorChat(id, "!t%s!g Ai deja!t No Flash!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 5 
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t No Flash!g !", Prefix);
					return 1;
				}
				else {
					HaveNoFlash[id] = true;
					fcs_set_user_credits(id, Credits);
					ColorChat(id, "!t%s!g Ai cumparat!t No Flash!g !", Prefix);
				}
			}
		}	
		case 6: {
			if(user_has_weapon(id, CSW_SMOKEGRENADE)) {
				ColorChat(id, "!t%s!g Ai deja!t Frost Nade!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 30 
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t Frost Nade!g !", Prefix);
					return 1;
				}
				else {
					fm_give_item(id, "weapon_smokegrenade");
					fcs_set_user_credits(id, Credits);
					ColorChat(id, "!t%s!g Ai cumparat!t Frost Nade!g !", Prefix);
				}
			}
		}
		case 7: {
			if(HavePET[id]) {
				ColorChat(id, "!t%s!g Ai deja un!t PET!g !", Prefix);
				return 1;
			}
			else {
				new Credits = fcs_get_user_credits(id) - 30 
				if(Credits < 0) {
					ColorChat(id, "!t%s!g Nu ai suficiente!t credite!g pentru a cumpara!t PET", Prefix);
					return 1;
				}
				else {
					create_pet(id)
					fcs_set_user_credits(id, Credits);
					ColorChat(id, "!t%s!g Ai cumparat!t PET!g !", Prefix);
				}
			}
		}
		case 8: {
			if(get_user_flags(id) & VIP_LEVEL) {
				if(HaveAT4[id]) {
					ColorChat(id, "!t%s!g Ai deja!t Bazooka!g !", Prefix);
					return 1;
				}
				else {
					new Credits = fcs_get_user_credits(id) - 100
					if(Credits < 0) {
						ColorChat(id, "!t%s!g Ai deja!t Bazooka!g !", Prefix)
						return 1;
					}
					else {
						set_user_at4(id, true)
						fcs_set_user_credits(id, Credits);
						ColorChat(id, "!t%s!g Ai cumparat!t Bazooka!g !", Prefix);
					}
				}
			}
			else {
				ColorChat(id, "!t%s!g Acest item poate fi cumparat doar de catre!t membrii VIP!g !", Prefix);
				return 1;
			}
		}
	}
	menu_destroy(menu)
	return PLUGIN_HANDLED
}

public AT4_UpdateClientData_POST(id, sendweapons, cd_handle) {
	if(is_user_connected(id) && is_user_alive(id)) {
		if(get_user_weapon(id) == CSW_AT4CS && HaveAT4[id])
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001)  
	}
}

public AT4_AddToPlayer(ent, id) {
	if(!is_valid_ent(ent) || !is_user_alive(id))
		return HAM_IGNORED
		
	if(entity_get_int(ent, EV_INT_impulse) == 61296) {
		HaveAT4[id] = true
		entity_set_int(id, EV_INT_impulse, 0)
		
		return HAM_HANDLED
	}		

	if(HaveAT4[id]) {
		message_begin(MSG_ONE, get_user_msgid("WeaponList"), _, id)
		write_string("weapon_at4cs");    // WeaponName
		write_byte(3)                  // PrimaryAmmoID
		write_byte(1)                  // PrimaryAmmoMaxAmount
		write_byte(-1)                   // SecondaryAmmoID
		write_byte(-1)                   // SecondaryAmmoMaxAmount
		write_byte(0)                    // SlotID (0...N)
		write_byte(4)                    // NumberInSlot (1...N)
		write_byte(CSW_AT4CS)            // WeaponID
		write_byte(0)                   // Flags
		message_end()
	}
	return HAM_HANDLED	
}

public AT4_CMDStart(id, uc_handle, seed) {
	if(is_user_connected(id) && is_user_alive(id)) {
		if(get_user_weapon(id) == CSW_AT4CS && HaveAT4[id]) {
			static CurButton
			CurButton = get_uc(uc_handle, UC_Buttons)
			if(CurButton & IN_ATTACK) {
				static Float:CurTime
				CurTime = get_gametime()
		
				static at4cs
				at4cs = fm_find_ent_by_owner(-1, weapon_at4cs, id)		
		
				if(cs_get_weapon_ammo(at4cs) > 0 && !is_reloading[id]) {
					if(CurTime - 4.5 > g_lastfire[id]) {
						set_weapon_anim(id, 1)
						emit_sound(id, CHAN_WEAPON, AT4Sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
				
						create_rocket(id)
				
						static Float:Punch_Angles[3]
				
						Punch_Angles[0] = -20.0
						Punch_Angles[1] = 0.0
						Punch_Angles[2] = 0.0
				
						set_pev(id, pev_punchangle, Punch_Angles)
						cs_set_weapon_ammo(at4cs, cs_get_weapon_ammo(at4cs) - 1)
				
						if(cs_get_weapon_ammo(at4cs) <= 0 && !is_reloading[id]) {
							if(cs_get_user_bpammo(id, CSW_AT4CS) > 0) {
								set_task(1.0, "at4cs_reload", id)
							}
						}
						if(cs_get_user_zoom(id))
							cs_set_user_zoom(id, CS_RESET_ZOOM, 1)
				
						g_lastfire[id] = CurTime
					}
				}
				else {
					if(!is_reloading[id]) {
						if(cs_get_user_bpammo(id, CSW_AT4CS) > 0) {
							if(CurTime - 1.0 > g_lastfire[id]) {
								at4cs_reload(id)
								g_lastfire[id] = CurTime
							}
						}
					}
				}
			}
			if(CurButton & IN_ATTACK2) {
				static Float:CurTime
				CurTime = get_gametime()
		
				if((CurTime - 0.5 > g_lastaim[id]) && !is_reloading[id]) {
					if(!g_aiming[id]) {
						cs_set_user_zoom(id, CS_SET_FIRST_ZOOM, 1)
						g_aiming[id] = 1
					}
					else {
						cs_set_user_zoom(id, CS_RESET_ZOOM, 1)
						g_aiming[id] = 0
					}
					g_lastaim[id] = CurTime
				}
			}
	
			CurButton &= ~IN_ATTACK
			set_uc(uc_handle, UC_Buttons, CurButton)
	
			CurButton &= ~IN_RELOAD
			set_uc(uc_handle, UC_Buttons, CurButton)
		} 
	}

	return FMRES_HANDLED
}

public AT4_WorldModel(ent, const model[]) {
	if(!is_valid_ent(ent))
		return FMRES_IGNORED
	
	static szClassName[33]
	entity_get_string(ent, EV_SZ_classname, szClassName, charsmax(szClassName))
	
	if(!equal(szClassName, "weaponbox"))
		return FMRES_IGNORED
	
	static iOwner
	iOwner = entity_get_edict(ent, EV_ENT_owner)
	
	if(equal(model, "models/w_m249.mdl")) {
		static at4cs
		at4cs = find_ent_by_owner(-1, "weapon_m249", ent)
		
		if(!is_valid_ent(at4cs))
			return FMRES_IGNORED;
		
		if(HaveAT4[iOwner]) {
			entity_set_int(at4cs, EV_INT_impulse, 61296)
			HaveAT4[iOwner] = false;
			entity_set_model(ent, AT4Model_W)
			
			return FMRES_SUPERCEDE
		}
	}
	return FMRES_IGNORED
}

public at4cs_reload(id) {
	if(is_reloading[id])
		return
	
	is_reloading[id] = 1
	set_weapon_anim(id, 3)
	
	set_task(0.1, "checking_reload", id+TASK_CHECKRELOAD, _, _, "b")
	set_task(4.0, "reload_complete", id+TASK_RELOAD)
}

public checking_reload(id) {
	id -= TASK_CHECKRELOAD
	
	if(cs_get_user_zoom(id))
		cs_set_user_zoom(id, CS_RESET_ZOOM, 1)	
	
	if(get_user_weapon(id) != CSW_AT4CS || !HaveAT4[id]) {
		remove_task(id+TASK_CHECKRELOAD)
		remove_task(id+TASK_RELOAD)
		
		is_reloading[id] = 0
	}
}

public reload_complete(id) {
	id -= TASK_RELOAD
	
	if(!is_reloading[id])
		return
		
	remove_task(id+TASK_CHECKRELOAD)	
		
	static at4cs
	at4cs = fm_find_ent_by_owner(-1, weapon_at4cs, id)	
	
	cs_set_weapon_ammo(at4cs, 1)
	cs_set_user_bpammo(id, CSW_AT4CS, cs_get_user_bpammo(id, CSW_AT4CS) - 1)
	is_reloading[id] = 0
}

public AT4_Reload(ent) {
	static id
	id = pev(ent, pev_owner)
	
	if(is_user_connected(id) && is_user_alive(id)) {
		if(get_user_weapon(id) == CSW_AT4CS && HaveAT4[id]) {
		
			static Float:CurTime
			CurTime = get_gametime()		
		
			if(!is_reloading[id]) {
				if(cs_get_user_bpammo(id, CSW_AT4CS) > 0) {
					if(CurTime - 1.0 > g_lastfire[id]) {
						at4cs_reload(id)
						g_lastfire[id] = CurTime
					}
				}
			}
		}
	}
	return HAM_SUPERCEDE
}

public AT4_Think(ent) {
	if(!pev_valid(ent))
		return

	static Float:Origin[3]
	pev(ent, 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(g_smoke_id) 
	write_byte(2) 
	write_byte(200)
	message_end()
	
	if(pev(ent, pev_iuser4) == 0) {
		static Victim
		Victim = FindClosesEnemy(ent)
		
		if(is_user_alive(Victim)) {
			set_pev(ent, pev_iuser4, Victim)
		}
	} 
	else {
		static Victim
		Victim = pev(ent, pev_iuser4)
		
		if(is_user_alive(Victim)) {
			static Float:VicOrigin[3]
			pev(Victim, pev_origin, VicOrigin)
			
			turn_to_target(ent, Origin, Victim, VicOrigin)
			hook_ent(ent, Victim, 500.0)
		} 
		else {
			set_pev(ent, pev_iuser4, 0)
		}
	}	
	set_pev(ent, pev_nextthink, halflife_time() + 0.075)
}

public AT4_Touch(rocket, touch) {
	if(!pev_valid(rocket))
		return	
		
	if(is_user_alive(touch) && pev(rocket, pev_owner) == touch)
		return
		
	static Float:Origin[3]
	pev(rocket, pev_origin, Origin)		
		
	message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
	write_byte(TE_EXPLOSION)
	engfunc(EngFunc_WriteCoord, Origin[0])
	engfunc(EngFunc_WriteCoord, Origin[1])
	engfunc(EngFunc_WriteCoord, Origin[2])
	write_short(g_spr_exp)	// sprite index
	write_byte(20)	// scale in 0.1's
	write_byte(30)	// framerate
	write_byte(0)	// flags
	message_end()
	
	static owner, iVictim
	
	iVictim = -1
	owner = pev(rocket, pev_owner)	

	while((iVictim = find_ent_in_sphere(iVictim, Origin, get_pcvar_float(cvar_radius))) != 0) {
		if((0 < iVictim < 32) && is_user_alive(iVictim) && iVictim != owner) {
			new Float:MaxDamage, Float:Damage
			
			MaxDamage = get_pcvar_float(cvar_maxdamage)
			Damage = random_float(MaxDamage - random_float(0.0, 100.0), MaxDamage + random_float(0.0, 100.0))
			
			ExecuteHam(Ham_TakeDamage, iVictim, 0, owner, 0, DMG_BULLET)
			
			static health
			health = get_user_health(iVictim)
				
			if(health - Damage >= 1) {
				fm_set_user_health(iVictim, health - floatround(Damage))
			}
			else {
				death_message(owner, iVictim, 1)
			}			
		}
	}	
	engfunc(EngFunc_RemoveEntity, rocket)
}

public create_rocket(id) {
	new ent, Float:Origin[3], Float:Angles[3], Float:Velocity[3]
	
	ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	engfunc(EngFunc_GetAttachment, id, 0, Origin, Angles)
	pev(id, pev_angles, Angles)
	
	set_pev(ent, pev_origin, Origin)
	set_pev(ent, pev_angles, Angles)
	set_pev(ent, pev_solid, 2)
	set_pev(ent, pev_movetype, 5)
	set_pev(ent, pev_classname, "at4ex_rocket")
	set_pev(ent, pev_owner, id)
	engfunc(EngFunc_SetModel, ent, AT4Rocket)
	
	set_pev(ent, pev_mins, {-1.0, -1.0, -1.0})
	set_pev(ent, pev_maxs, {1.0, 1.0, 1.0})
	
	velocity_by_aim(id, 1750, Velocity)
	set_pev(ent, pev_velocity, Velocity)
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMFOLLOW) 		// TE id
	write_short(ent) 				// entity:attachment to follow
	write_short(g_spr_trail) 		// sprite index
	write_byte(25) 					// 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(ent, pev_iuser4, 0)
	set_pev(ent, pev_nextthink, halflife_time() + 0.1)
}

public hook_weapon(id) {
	engclient_cmd(id, weapon_at4cs)
}

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;
			is_reloading[id] = 0
			g_aiming[id] = 0
			fm_give_item(id, weapon_at4cs);
			new Clip = fm_get_user_weapon_entity(id, CSW_AT4CS);
			cs_set_weapon_ammo(Clip, 1);
			cs_set_user_bpammo(id, CSW_AT4CS, 50)
		}
	}
	else {
		if(HaveAT4[id]) {
			HaveAT4[id] = false;
		}
	}
}

//-------------------------------------------------------------------------//
//=============================| Stocks |=================================//
//-----------------------------------------------------------------------//
stock get_offset_origin_body(ent,const Float:offset[3],Float:origin[3]) {
	if(!pev_valid(ent))
		return 0;
	
	new Float:angle[3]
	pev(ent,pev_angles,angle)
	
	pev(ent,pev_origin,origin)
	
	origin[0] += floatcos(angle[1],degrees) * offset[0]
	origin[1] += floatsin(angle[1],degrees) * offset[0]
	
	origin[1] += floatcos(angle[1],degrees) * offset[1]
	origin[0] += floatsin(angle[1],degrees) * offset[1]
	
	return 1;
}

stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3]) {
	new_velocity[0] = origin2[0] - origin1[0]
	new_velocity[1] = origin2[1] - origin1[1]
	new_velocity[2] = origin2[2] - origin1[2]
	new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
	new_velocity[0] *= num
	new_velocity[1] *= num
	new_velocity[2] *= num
	
	return 1;
}

stock entity_set_aim(ent,const Float:origin2[3],bone=0) {
	if(!pev_valid(ent))
		return 0;
	
	static Float:origin[3]
	origin[0] = origin2[0]
	origin[1] = origin2[1]
	origin[2] = origin2[2]
	
	static Float:ent_origin[3], Float:angles[3]
	
	if(bone)
		engfunc(EngFunc_GetBonePosition,ent,bone,ent_origin,angles)
	else
		pev(ent,pev_origin,ent_origin)
	
	origin[0] -= ent_origin[0]
	origin[1] -= ent_origin[1]
	origin[2] -= ent_origin[2]
	
	static Float:v_length
	v_length = vector_length(origin)
	
	static Float:aim_vector[3]
	aim_vector[0] = origin[0] / v_length
	aim_vector[1] = origin[1] / v_length
	aim_vector[2] = origin[2] / v_length
	
	static Float:new_angles[3]
	vector_to_angle(aim_vector,new_angles)
	
	new_angles[0] *= -1
	
	if(new_angles[1]>180.0) new_angles[1] -= 360
	if(new_angles[1]<-180.0) new_angles[1] += 360
	if(new_angles[1]==180.0 || new_angles[1]==-180.0) new_angles[1]=-179.999999
	
	set_pev(ent,pev_angles,new_angles)
	set_pev(ent,pev_fixangle,1)
	
	return 1;
}


stock set_weapon_anim(id, anim) {
	set_pev(id, pev_weaponanim, anim)

	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
	write_byte(anim)
	write_byte(pev(id,pev_body))
	message_end()
}

stock death_message(Killer, Victim, ScoreBoard) {
	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, "")

	if (ScoreBoard) {
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
		write_byte(Killer) 						// id
		write_short(pev(Killer, pev_frags)) 	// frags
		write_short(cs_get_user_deaths(Killer)) // deaths
		write_short(0) 							// class?
		write_short(get_user_team(Killer)) 		// team
		message_end()
		
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
		write_byte(Victim) 							// id
		write_short(pev(Victim, pev_frags)) 		// frags
		write_short(cs_get_user_deaths(Victim)) 	// deaths
		write_short(0) 								// class?
		write_short(get_user_team(Victim)) 			// team
		message_end()
	}
}

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 turn_to_target(ent, Float:Ent_Origin[3], target, Float:Vic_Origin[3])  {
	if(target)  {
		new Float:newAngle[3]
		entity_get_vector(ent, EV_VEC_angles, newAngle)
		new Float:x = Vic_Origin[0] - Ent_Origin[0]
		new Float:z = Vic_Origin[1] - Ent_Origin[1]

		new Float:radians = floatatan(z/x, radian)
		newAngle[1] = radians * (180 / 3.14)
		if (Vic_Origin[0] < Ent_Origin[0])
			newAngle[1] -= 180.0
        
		entity_set_vector(ent, EV_VEC_angles, newAngle)
	}
}

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

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 ;
		
		if(((1<<weaponid) & PRIMARY_WEAPONS_BITSUM)) {
			static wname[32];
			get_weaponname(weaponid, wname, charsmax(wname));
			
			engclient_cmd(Player, "drop", wname);
		}
	}
}

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)) {
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players);
				write_byte(players);
				write_string(msg);
				message_end();
			}
		}
	} 
}
NU sunt intermediar.

Dacă ai nevoie de ajutor pe forum dă-mi un PM şi rezolvăm.

REGULAMENT FORUM

RECLAMAȚII MODERATORI

RECLAMAȚII PM
Activitate scăzută
Post Reply

Return to “Pluginuri eXtream”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 12 guests