[New] Furien Shop (V 2.0)

Pluginuri facute de utilizatorii forumului eXtream.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

bateri3
Membru, skill +1
Membru, skill +1
Posts: 133
Joined: 20 Oct 2013, 17:07
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Has thanked: 1 time
Contact:

20 Dec 2015, 20:44

Ai putea sa scoti frost nade de la ambele echipe? si in locu lor sa pui arma si knifele vip? Si la detector sa pui acces doar la vip? Te rog frumos?
RoyalServer 2
GreenGu
Membru, skill 0
Membru, skill 0
Posts: 37
Joined: 31 Mar 2018, 17:21
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Detinator server CS: Da
SteamID: id/Matahala
Fond eXtream: 0
Has thanked: 1 time
Contact:

02 May 2020, 16:37

Plugin fara credite dar la fel?
Radu Lucian
Membru nou
Membru nou
Posts: 1
Joined: 05 Jun 2020, 21:45
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0

05 Jun 2020, 21:56

Mai are cineva pluginul acesta complet ? Cu tot cu sma si amxx ? :face_begging_eyes:
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

06 Jun 2020, 20:53

Code: Select all

#include <amxmodx>
#include <cstrike>
#include <fakemeta_util>
#include <hamsandwich>
#include <engine>

#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 get_user_credits(id)
native 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[i]) {
			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:", 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(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(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(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(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(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(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(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(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 = 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);
					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 = 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);
					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 = 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) 
						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 = 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) ;
						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 = 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;
					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 = 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");
					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 = 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");
					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 = 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);
						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:", get_user_credits(id))
		Menu = menu_create(Title, "AntiFurienHandler")
		
		if(HaveDetector[id])
			menu_additem(Menu, "\dFurien Detector\w - \rAi deja", "1", 0)
		else {
			if(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(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(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(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(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(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(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(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 = 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;
					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 = 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)
					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 = 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) 
						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 = 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) ;
						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 = 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;
					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 = 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");
					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 = 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)
					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 = 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)
						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[i] ;
		
		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[i])) {
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
				write_byte(players[i]);
				write_string(msg);
				message_end();
			}
		}
	} 
}
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
User avatar
CyBer[N]eTicK
Membru, skill +1
Membru, skill +1
Posts: 190
Joined: 29 May 2020, 05:35
Detinator Steam: Da
CS Status: Strong & Original
Detinator server CS: BB.BLACKGAMES.RO
SteamID: /id/cybernetick_cbk/
Fond eXtream: 0
Location: Albania, tirana
Discord: cybernetick_cbk
Has thanked: 21 times
Been thanked: 18 times
Contact:

07 Jun 2020, 21:41

L E V I N wrote:
06 Jun 2020, 20:53

Code: Select all

#include <amxmodx>
#include <cstrike>
#include <fakemeta_util>
#include <hamsandwich>
#include <engine>

#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 get_user_credits(id)
native 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[i]) {
			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:", 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(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(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(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(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(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(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(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(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 = 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);
					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 = 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);
					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 = 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) 
						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 = 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) ;
						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 = 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;
					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 = 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");
					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 = 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");
					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 = 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);
						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:", get_user_credits(id))
		Menu = menu_create(Title, "AntiFurienHandler")
		
		if(HaveDetector[id])
			menu_additem(Menu, "\dFurien Detector\w - \rAi deja", "1", 0)
		else {
			if(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(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(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(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(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(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(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(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 = 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;
					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 = 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)
					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 = 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) 
						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 = 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) ;
						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 = 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;
					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 = 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");
					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 = 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)
					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 = 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)
						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[i] ;
		
		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[i])) {
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
				write_byte(players[i]);
				write_string(msg);
				message_end();
			}
		}
	} 
}
Pluginul nu merge! refal din nou te rog
User avatar
dann1el97
Membru, skill 0
Membru, skill 0
Posts: 45
Joined: 04 Oct 2014, 11:31
Detinator Steam: Nu
Fond eXtream: 0
Has thanked: 8 times

11 Nov 2021, 20:33

@ UP !

Mai are cineva arhiva completa ? Plugin & Resurse ?
Ofer servicii de Webdesign la preturi avantajoase!
Contact PM!, Email: [email protected]! sau Telefon *Privat Ceri PM* SMS sau APEL!
HTML5,PHP, CSS, HTML, Teme IPB, Teme phpBB3, Teme MyBB
The Kalu
Fost administrator
Fost administrator
Posts: 13699
Joined: 09 Oct 2010, 12:39
Detinator Steam: Da
CS Status: In grajd!
SteamID: kalulord
Reputatie: Fost Administrator
Fost membru Club eXtreamCS (6 luni)
Nume anterior: Terra
Location: Romania, Ploiesti
Has thanked: 328 times
Been thanked: 643 times
Contact:

11 Nov 2021, 22:35

dann1el97 wrote:
11 Nov 2021, 20:33
@ UP !

Mai are cineva arhiva completa ? Plugin & Resurse ?
Nu iti da de gandit ca in 7 ani este posibil sa nu mai gasesti nimic?
AMXX CODE | 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 get_user_credits(id)

native 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:", 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(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(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(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(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(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(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(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(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 = 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);

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 = 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);

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

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 = 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) ;

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

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 = 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");

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 = 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");

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 = 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);

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:", get_user_credits(id))

Menu = menu_create(Title, "AntiFurienHandler")

 

if(HaveDetector[id])

menu_additem(Menu, "\dFurien Detector\w - \rAi deja", "1", 0)

else {

if(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(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(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(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(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(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(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(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 = 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;

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

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

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 = 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) ;

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

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 = 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");

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

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

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();

}

}

} 

}

Image
User avatar
dann1el97
Membru, skill 0
Membru, skill 0
Posts: 45
Joined: 04 Oct 2014, 11:31
Detinator Steam: Nu
Fond eXtream: 0
Has thanked: 8 times

13 Nov 2021, 16:41

The Kalu wrote:
11 Nov 2021, 22:35
dann1el97 wrote:
11 Nov 2021, 20:33
@ UP !

Mai are cineva arhiva completa ? Plugin & Resurse ?
Nu iti da de gandit ca in 7 ani este posibil sa nu mai gasesti nimic?
AMXX CODE | 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 get_user_credits(id)

native 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:", 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(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(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(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(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(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(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(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(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 = 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);

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 = 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);

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

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 = 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) ;

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

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 = 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");

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 = 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");

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 = 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);

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:", get_user_credits(id))

Menu = menu_create(Title, "AntiFurienHandler")

 

if(HaveDetector[id])

menu_additem(Menu, "\dFurien Detector\w - \rAi deja", "1", 0)

else {

if(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(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(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(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(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(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(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(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 = 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;

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

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

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 = 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) ;

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

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 = 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");

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

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

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();

}

}

} 

}


Multumesc! Ma intereseaza si resursele : modele & sunete, etc.
Ofer servicii de Webdesign la preturi avantajoase!
Contact PM!, Email: [email protected]! sau Telefon *Privat Ceri PM* SMS sau APEL!
HTML5,PHP, CSS, HTML, Teme IPB, Teme phpBB3, Teme MyBB
Post Reply

Return to “Pluginuri eXtream”

  • Information
  • Who is online

    Users browsing this forum: Mail.RU [Bot] and 14 guests