[BaseBuilder] Megapack PLUGINS !

Pluginuri pentru modul AmxModX.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

User avatar
J3FF
Membru, skill +1
Membru, skill +1
Posts: 472
Joined: 27 Oct 2007, 20:02
Detinator Steam: Nu
CS Status: ON and Ready 2 PLAY
Detinator server CS: Nu
Location: SiBiU
Has thanked: 25 times
Been thanked: 39 times

09 Aug 2012, 17:21

Reguli Info
Descriere :[/b] : Acest plugin face ca cel care se connecteaza pe server sa ii apara un meniu care il intreaba daca Cunoaste Regulamentul . Pluginul are 3 variante : 1. Nu il cunosc [Apare un motd] 2. Il cunosc deja [Te lasa sa joci] 3. Nu vreau sa il citesc [Kick cu reason]
Autor :[/color] : sPuF? ak Askhanar
Sma :
Reguli Info | Afiseaza codul
#include <amxmodx>

#pragma semicolon 1

#define PLUGIN    "Plugin nou"
#define VERSION        "1.0"

#define TASK_TIME 	15.0

new const MENU_NAME[ ] = "\y Cunosti regulamentul serverului \r?";

new const KICK_REASON[ ] = "Ai face bine sa citesti regulile , altfel nu ai ce cauta pe server !";

new const MOTD_FILE[ ] = "addons/amxmodx/configs/reguli.txt";


public plugin_init( ) register_plugin( PLUGIN, VERSION, "Askhanar" );


public client_connect( id ) 
{
	if( is_user_bot( id ) || is_user_hltv( id ) ) return 1;
	
	set_task( TASK_TIME, "AdvertizePlayer", id + 112233 );
	
	return 0;
}

public client_disconnect( id ) 
{
	if( is_user_bot( id ) || is_user_hltv( id ) ) return 1;
	
	remove_task( id + 112233 );
	
	return 0;
} 

public AdvertizePlayer( id )
{
	id -= 112233;
	if( !is_user_connected( id ) ) return 1;
	
	ShowAdvertizeMenu( id , 0 );
	
	return 0;
}


public ShowAdvertizeMenu( id, page )
{
	new menu = menu_create( MENU_NAME, "ShowAdvertizeMenuHandler" );	
	
	menu_additem( menu, "Nu , nu cunosc regulile", "1", 0 );
	menu_additem( menu, "Da , cunosc deja regulile", "2", 0 );
	menu_additem( menu, "Nu vreau sa le citesc", "3", 0 );
	
	menu_setprop( menu, MPROP_EXITNAME, "" );
	
	menu_display( id, menu, page );
	
}

public ShowAdvertizeMenuHandler( id, menu, item )
{
	
	if( item == MENU_EXIT )
	{
		ShowAdvertizeMenu( id, 0 );
		return 1;
	}
	
	new data[ 6 ], iName[ 64 ];
	new iaccess, callback;
	
	menu_item_getinfo( menu, item, iaccess, data, 5, iName, 63, callback );
	
	new key = str_to_num( data );
	
	switch( key )
	{
		case 1: show_motd( id, MOTD_FILE );
		case 2: return 1;
		case 3: server_cmd( "kick #%i ^"%s^"", get_user_userid( id ), KICK_REASON );
	}
	
	return 0;
}


Clase Zombie
Descriere :[/b] : Acest plugin este unul cu rase pentru Zombie : 1. Schelete 2. Asistenta Zombie 3. Moartea 4. Caine Extraterestru 5. Razboinic de Gheata 6. Dragon [Admin] 7. Zombie Distrugator [Vip]
Autor :[/color] : Tirant + DanTe's update
Sma :
Rase Zombie | Afiseaza codul
#include <amxmodx>
#include <basebuilder>
#include <hamsandwich>
#include <fun>
#include <cstrike>

/*================================================================================
 [Plugin Customization]
=================================================================================*/

// Classic Zombie Attributes
new const zclass1_name[] = { "Scheleton" }
new const zclass1_info[] = { "=Echilibrat=" }
new const zclass1_model[] = { "v_schelete" }
new const zclass1_clawmodel[] = { "v_m_schelete" }
const zclass1_health = 9000
const zclass1_speed = 260
const Float:zclass1_gravity = 1.0
const zclass1_adminflags = ADMIN_ALL

// Fast Zombie Attributes
new const zclass2_name[] = { "Asistenta Zombie" }
new const zclass2_info[] = { "HP-- SP++" }
new const zclass2_model[] = { "nurse" }
new const zclass2_clawmodel[] = { "nurse_knife" }
const zclass2_health = 6500
const zclass2_speed = 328
const Float:zclass2_gravity = 1.0
const zclass2_adminflags = ADMIN_ALL

// Jumper Zombie Attributes
new const zclass3_name[] = { "Moartea" }
new const zclass3_info[] = { "HP- GR+" }
new const zclass3_model[] = { "v_sat" }
new const zclass3_clawmodel[] = { "v_m_sat" }
const zclass3_health = 7200
const zclass3_speed = 285
const Float:zclass3_gravity = 0.5
const zclass3_adminflags = ADMIN_ALL

// Alien Dog Zombie Attributes
new const zclass4_name[] = { "Caine Extraterestru" }
new const zclass4_info[] = { "HP-- GR++ SP++" }
new const zclass4_model[] = { "dog" }
new const zclass4_clawmodel[] = { "dogg" }
const zclass4_health = 4200
const zclass4_speed = 390
const Float:zclass4_gravity = 0.3
const zclass4_adminflags = ADMIN_ALL

// Tanker Zombie Attributes
new const zclass5_name[] = { "Razboinic de Gheata" }
new const zclass5_info[] = { "HP++ SP-" }
new const zclass5_model[] = { "v_frost" }
new const zclass5_clawmodel[] = { "v_m_frost" }
const zclass5_health = 11500
const zclass5_speed = 210
const Float:zclass5_gravity = 1.0
const zclass5_adminflags = ADMIN_ALL
#define TANK_ARMOR 200

// Cioara Zombie Attributes
new const zclass6_name[] = { "Dragon Zburator" }
new const zclass6_info[] = { "HP--- SP+ GR +++" }
new const zclass6_model[] = { "v_dragon" }
new const zclass6_clawmodel[] = { "v_m_dragon" }
const zclass6_health = 3000
const zclass6_speed = 390
const Float:zclass6_gravity = 0.155
const zclass6_adminflags = ADMIN_MAP

// Vip Zombie Attributes
new const zclass7_name[] = { "Zombie Distrugator" }
new const zclass7_info[] = { "HP+++ SP++ GR+" }
new const zclass7_model[] = { "new_viaipi" }
new const zclass7_clawmodel[] = { "n_m_vip" }
const zclass7_health = 13000
const zclass7_speed = 328
const Float:zclass7_gravity = 0.4
const zclass7_adminflags = ADMIN_IMMUNITY



/*============================================================================*/

new g_zclass_tanker

// Zombie Classes MUST be registered on plugin_precache
public plugin_precache()
{
	register_plugin("[BB] Clase Zombalai", "Basebuilder v6.9", "Tirant + DanTe's update")
	
	// Register all classes
	bb_register_zombie_class(zclass1_name, zclass1_info, zclass1_model, zclass1_clawmodel, zclass1_health, zclass1_speed, zclass1_gravity, 0.0, zclass1_adminflags)
    bb_register_zombie_class(zclass2_name, zclass2_info, zclass2_model, zclass2_clawmodel, zclass2_health, zclass2_speed, zclass2_gravity, 0.0, zclass2_adminflags)
    bb_register_zombie_class(zclass3_name, zclass3_info, zclass3_model, zclass3_clawmodel, zclass3_health, zclass3_speed, zclass3_gravity, 0.0, zclass3_adminflags)
	bb_register_zombie_class(zclass4_name, zclass4_info, zclass4_model, zclass4_clawmodel, zclass4_health, zclass4_speed, zclass4_gravity, 0.0, zclass4_adminflags)
	g_zclass_tanker = bb_register_zombie_class(zclass5_name, zclass5_info, zclass5_model, zclass5_clawmodel, zclass5_health, zclass5_speed, zclass5_gravity, 0.0, zclass5_adminflags)
	bb_register_zombie_class(zclass6_name, zclass6_info, zclass6_model, zclass6_clawmodel, zclass6_health, zclass6_speed, zclass6_gravity, 0.0, zclass6_adminflags)
	bb_register_zombie_class(zclass7_name, zclass7_info, zclass7_model, zclass7_clawmodel, zclass7_health, zclass7_speed, zclass7_gravity, 0.0, zclass7_adminflags)
	
}

#if defined TANK_ARMOR
public plugin_init()
{
	RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", 1)
}

public ham_PlayerSpawn_Post(id)
{
	if (!is_user_alive(id))
		return ;
		
	if (bb_is_user_zombie(id) && bb_get_user_zombie_class(id) == g_zclass_tanker)
	{
		give_item(id, "item_assaultsuit");
		cs_set_user_armor(id, TANK_ARMOR, CS_ARMOR_VESTHELM);
	}
}
#endif


Meniu Vip
Descriere :[/b] : Acest plugin face ca atunci cand scri /vmenu sa iti apara un meniu cu diferite arme / puteri / arme cu puteri care poti sa iti alegi odata pe runda
Autor :[/color] : anti-talent

Sma :
| Afiseaza codul
#pragma semicolon 1

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <fun>
#include <hamsandwich>
#include <fakemeta>
#include <vault>

#define ADMIN_BBVIP ADMIN_IMMUNITY

// Define the Plugin Version
new const VERSION[] = { "1.0" };

// PREFIX
new const PREFIX[] = { "!g[ BB.NumeServer.Ro ]!n" };

new const g_szKnifeBModel[] = "models/cutit_nebun.mdl";
new const g_szKnifeWModel[] = "models/cutit_nebun2.mdl";
new const g_szAk47Model[] = "models/dragonu_ak_47.mdl";
new const g_szDeagleModel[] = "models/deagleu.mdl";

new VipUsed[33];
new HasSpeed;

new bool:g_bHasKnifeB[33];
new bool:g_bHasKnifeW[33];
new bool:g_bHasAk47[33];
new bool:g_bHasDeagle[33];
new Float:fast_speed = 400.0;
new Float:normal_speed = 250.0;
//new g_pVisiblity;
new mpd,/* mkb,*/ mhb;
new maxplayers;

public plugin_init()
{
	register_plugin("BaseBuilder: VIP Menu", VERSION, "anti-talent");
	RegisterHam(Ham_Spawn, "player", "FwdHamSpawn_Post", 1);
	RegisterHam(Ham_Item_PreFrame, "player", "FwdPreFrame_Post", 1);
	RegisterHam(Ham_TakeDamage, "player", "FwdPlayerDamage");
	//RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1);
	
	register_event("CurWeapon","event_curweapon","be","1=1");
	
	register_clcmd("say vmenu", "cmdVmenu");
	register_clcmd("say /vmenu", "cmdVmenu");
	register_clcmd("say_team vmenu", "cmdVmenu");
	register_clcmd("say_team /vmenu", "cmdVmenu");
	register_clcmd("say /sagasgasf", "cmdBuyvip");
	register_clcmd("say sagasgas", "cmdBuyvip");
	register_clcmd("say_team sagasgafs", "cmdBuyvip");
	register_clcmd("say_team /sagasfgsa", "cmdBuyvip");
	register_clcmd("say /safasgas", "cmdPreturi");
	register_clcmd("say_team /gassae", "cmdPreturi");
	//g_pVisiblity = register_cvar( "km_invis", "200" ); // 255 = clearly visible
	set_task(480.0, "kmodmsg", 0, _, _, "b");
	
	mpd = register_cvar("money_per_damage","3");
	//mkb = register_cvar("money_kill_bonus","200");
	mhb = register_cvar("money_hs_bonus","500");
	register_event("Damage","Damage","b");
	maxplayers = get_maxplayers();
	
	
	// Ham TakeDamage
	register_forward( FM_CmdStart, "fw_CmdStart" );
	//RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1);
}

public Damage(id)
{
	new weapon, hitpoint, attacker = get_user_attacker(id,weapon,hitpoint);
	if(attacker<=maxplayers && is_user_alive(attacker) && attacker!=id)
		if (get_user_flags(attacker) & ADMIN_IMMUNITY) 
	{
		new money = read_data(2) * get_pcvar_num(mpd);
		if(hitpoint==1) money += get_pcvar_num(mhb);
		cs_set_user_money(attacker,cs_get_user_money(attacker) + money);
	}
}     
public FwdPlayerDamage(victim, inflictor, attacker, Float:damage, damagebits)
{
	if(inflictor == attacker 
	&& attacker != victim 
	&& g_bHasKnifeB[ attacker ] 
	&& is_user_alive(attacker) 
	&& get_user_weapon(attacker) == CSW_KNIFE )
{
	SetHamParamFloat(4, damage * 3.0);
}
	if(inflictor == attacker 
&& attacker != victim 
&& g_bHasAk47[ attacker ]
&& is_user_alive(attacker) 
&& get_user_weapon(attacker) == CSW_AK47 )
{
SetHamParamFloat(4, damage * 3.0);
}
	if(inflictor == attacker 
&& attacker != victim 
&& g_bHasDeagle[ attacker ]
&& is_user_alive(attacker) 
&& get_user_weapon(attacker) == CSW_DEAGLE )
{
SetHamParamFloat(4, damage * 4.0);
}


}  
public plugin_precache()
{
precache_model(g_szKnifeBModel);
precache_model(g_szAk47Model);
precache_model(g_szKnifeWModel);
precache_model(g_szDeagleModel);
}

public event_curweapon(id)
{
if(g_bHasKnifeB[id] && read_data(2) == CSW_KNIFE)
{
set_pev(id, pev_viewmodel2, g_szKnifeBModel);
set_user_gravity(id, 0.5);
}

if(g_bHasAk47[id] && read_data(2) == CSW_AK47)
{
set_pev(id, pev_viewmodel2, g_szAk47Model);
}

if(g_bHasDeagle[id] && read_data(2) == CSW_DEAGLE)
{
set_pev(id, pev_viewmodel2, g_szDeagleModel);
}
}


public FwdPreFrame_Post(id)
{
if(!is_user_alive(id))
{
return PLUGIN_HANDLED;
}

if(!HasSpeed)
{
return PLUGIN_HANDLED;
}

else if(HasSpeed)
{
set_user_maxspeed(id, fast_speed);
}

return PLUGIN_HANDLED;
}


public FwdHamSpawn_Post(id)
{
if (!is_user_alive(id))
return PLUGIN_CONTINUE;

HasSpeed = false;
VipUsed[id] = false;
g_bHasKnifeB[id] = false; 
g_bHasKnifeW[id] = false; 
g_bHasAk47[id] = false; 
g_bHasDeagle[id] = false; 
set_user_maxspeed(id, normal_speed);
set_user_rendering( id, _, 0, 0, 0, _, 0 );
return PLUGIN_CONTINUE;
}  

public cmdVmenu(id)
{
if(!(get_user_flags(id) & ADMIN_BBVIP))
{
client_printc(id, "%s Doar !gVIPurile !tau acces la  !gMeniul de vip", PREFIX);

return PLUGIN_HANDLED;
}

if(VipUsed[id])
{
client_printc(id, "%s Ti-ai luat deja ceva din !gMeniul de VIP!n in aceasta runda. !tAsteapta pana runda viitoare sa iti mai iei inca un item", PREFIX);

return PLUGIN_HANDLED;
}

switch(cs_get_user_team(id))
{
case CS_TEAM_T:
	VipTMenu(id);
	
case CS_TEAM_CT:
	VipCTMenu(id);
	}
return PLUGIN_HANDLED;
}

public VipCTMenu(id)
{
	new menu = menu_create("\yMeniu De ViP:^n\r", "VipCTMenu_handler");
	
	menu_additem(menu, "\w+150HP si +100Armor", "1", 0);
	menu_additem(menu, "\wViteza", "2", 0);
	menu_additem(menu, "\wM249 si Deagle", "3", 0);
	menu_additem(menu, "\wRevive", "4", 0);
	menu_additem(menu, "\wSG550", "5", 0);
	menu_additem(menu, "\wG3SG1", "6", 0);
	menu_additem(menu, "\wAK 47 Auriu", "7", 0);
	menu_additem(menu, "\wDeagle Nebun", "8", 0);
	menu_additem(menu, "\wAWP cu 600 dmg", "9", 0);
	menu_display(id, menu);
}

public VipCTMenu_handler(id, menu, item)
{
	if( item == MENU_EXIT )
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new data[6], iName[64];
	new access, callback;
	menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
	
	new key = str_to_num(data);
	
	switch(key)
	{
		case 1:
		{
			set_user_health(id, get_user_health(id) + 150);
			set_user_armor(id, get_user_armor(id) + 100);
			VipUsed[id] = true;
			
			client_printc(id, "%s Tocmai ai primit !g150HP!n si !g100Armor!n", PREFIX);
		}
		case 2:
		{
			VipUsed[id] = true;
			HasSpeed = true;
			
			set_user_maxspeed(id, fast_speed);
			
			client_printc(id, "%s Tocmai ai primit !gViteza", PREFIX);
		}
		
		case 3:
		{
			give_item(id, "weapon_m249");
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo(id, CSW_M249, 200);
			cs_set_user_bpammo(id, CSW_DEAGLE, 100);
			
			VipUsed[id] = true;
			
			
			client_printc(id, "%s Tocmai ai primit un !gM249!n si un !gDeagle!n", PREFIX);
		}
		
		case 4:
		{
			
			ExecuteHamB(Ham_CS_RoundRespawn, id);
			
			VipUsed[id] = true;
			
			client_printc(id, "%s Ai fost !gReinviat", PREFIX);
		}
		case 5:
		{
			
			give_item(id, "weapon_sg550");
			cs_set_user_bpammo(id, CSW_SG550, 200);
			
			VipUsed[id] = true;
			
			client_printc(id, "%s Tocmai ai primit un !gSG550", PREFIX);
		}
		case 6:
		{
			
			give_item(id, "weapon_g3sg1");
			cs_set_user_bpammo(id, CSW_G3SG1, 200);
			
			VipUsed[id] = true;
			
			client_printc(id, "%s Tocmai ai primit un !gG3SG1", PREFIX);
		}
		case 7:
		{
			
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 200);
			set_pev(id, pev_viewmodel2, "models/dragonu_ak_47.mdl");
			g_bHasAk47[id] = true;
			VipUsed[id] = true;
			
			client_printc(id, "%s Tocmai ai primit un !gAK-47 Auriu", PREFIX);
		}
		case 8:
		{
			
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo(id, CSW_DEAGLE, 200);
			set_pev(id, pev_viewmodel2, "models/deagleu.mdl");
			g_bHasDeagle[id] = true;
			VipUsed[id] = true;
			
			client_printc(id, "%s Tocmai ai primit un !gDeagle Nebun", PREFIX);
		}
		case 9:
		{
			
			give_item(id, "weapon_awp");
			cs_set_user_bpammo(id, CSW_AWP, 200);
			VipUsed[id] = true;
			
			client_printc(id, "%s Tocmai ai primit un !gAWP", PREFIX);
		}
		
		
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public VipTMenu(id)
{
	new menu = menu_create("\yMeniu De ViP:^n\r", "VipTMenu_handler");
	
	menu_additem(menu, "\wViteza", "1", 0);
	menu_additem(menu, "\w+5000Hp si +5000Armor", "2", 0);
	menu_additem(menu, "\wCutit Nebun 1", "3", 0);
	menu_additem(menu, "\wCutit Nebun 2", "4", 0);
	menu_display(id, menu);
}

public VipTMenu_handler(id, menu, item)
{
	if( item == MENU_EXIT )
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new data[6], iName[64];
	new access, callback;
	menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
	
	new key = str_to_num(data);
	
	switch(key)
	{
		
		case 1:
		{
			VipUsed[id] = true;
			HasSpeed = true;
			
			set_user_maxspeed(id, fast_speed);
			
			client_printc(id, "%s Tocmai ai primit !gViteza", PREFIX);
		}
		
		case 2:
		{
			set_user_health(id, get_user_health(id) + 5000);
			set_user_armor(id, get_user_armor(id) + 5000);
			VipUsed[id] = true;
			
			client_printc(id, "%s Tocmai ai primit !g5000 HP!n si !g5000 Armura!n", PREFIX);
		}
		
		case 3:
		{
			set_user_health(id, get_user_health(id) + 2000);
			set_user_armor(id, get_user_armor(id) + 2000);
			set_user_maxspeed(id, fast_speed);
			HasSpeed = true;
			set_pev(id, pev_viewmodel2, "models/cutit_nebun.mdl");
			g_bHasKnifeB[id] = true;
			
			VipUsed[id] = true;
			
			client_printc(id, "%s Tocmai ai primit !tViata !nsi un !gCutit Nebun", PREFIX);
		}
		case 4:
		{
			set_user_health(id, get_user_health(id) + 2500);
			set_user_armor(id, get_user_armor(id) + 2500);
			set_user_maxspeed(id, fast_speed);
			HasSpeed = true;
			set_pev(id, pev_viewmodel2, "models/cutit_nebun2.mdl");
			g_bHasKnifeW[id] = true;
			set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 125); 
			
			VipUsed[id] = true;
			
			client_printc(id, "%s Tocmai ai primit !tViata !nsi un !gCutit Nebun", PREFIX);
		}
		
		
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}



public cmdBuyvip(id)
{
	show_motd(id, "vip.txt", "VIP");
}  
public PrintText(id)
{
	client_print(id, print_chat, "!t[BB.GoDpLaY.Ro] !gPentru a cumpara !tVIP !gadauga id-ul !gKinderbueno_cs .");
}

public cmdPreturi(id)
{
	show_motd(id, "preturi.txt", "PRETURI");
	
	client_printc(id, "!t[BB.GoDpLaY.Ro] !tPentru a vedea beneficiile !gVIP-ului !ntasteaza in chat !t/privilegii .");
}



// Colour Chat
stock client_printc(const id, const input[], any:...)
{
	new count = 1, players[32];
	static msg[191];
	vformat(msg, 190, input, 3);
	
	replace_all(msg, 190, "!g", "^x04"); // Green Color
	replace_all(msg, 190, "!n", "^x01"); // Default Color
	replace_all(msg, 190, "!t", "^x03"); // Team Color
	
	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();
		}
	}
}


Health Bar
Descriere :[/b] : Acest plugin arata tutoror jucatoriilor deasupra capului o bara care arata cat de multa viata au / mai au
Autor :[/color] : Bboy Grun

Sma :
| Afiseaza codul
#include < amxmodx >
#include < cstrike >
#include < fakemeta >
#include < hamsandwich >

#define VERSION 		"3.0"

new const HEALTH_BAR_MODEL[ ] = "sprites/barenoize.spr";

new g_playerBar[ 33 ], g_isAlive[ 33 ], CsTeams: g_playerTeam[ 33 ], g_playerBot[ 33 ], g_playerMaxHealth[ 33 ], g_showHB[ 33 ];
new pcvarBotSupport, pcvarShowMode, pcvarSpec, cvarSpec, cvarShowMode, cvarBotSupport;
new g_maxPlayers, fwShowMode, botRegistered, msg_SayText;
new g_botQuotaPointer;

public plugin_init( ) 
{
	register_plugin( "Health Bar", VERSION, "Bboy Grun" );
	
	register_cvar( "Health_Bars", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
	set_cvar_string( "Health_Bars", VERSION );
	
	register_event( "HLTV", "evNewRound", "a", "1=0", "2=0" );
	register_event( "DeathMsg", "evDeathMsg", "a" );
	register_event( "Health", "evHealth", "be" );
	
	RegisterHam( Ham_Spawn, "player", "fwHamSpawn", true );
	
	register_clcmd( "say hb", "hbHandle" );
	register_clcmd( "say /hb", "hbHandle" );
	
	pcvarShowMode = 		register_cvar( "health_ShowMode", "2" );
	pcvarBotSupport = 		register_cvar( "health_BotSupport", "1" );
	pcvarSpec = 			register_cvar( "health_ShowToSpectators", "1" );
	
	g_maxPlayers = get_maxplayers( );
	msg_SayText = get_user_msgid( "SayText" );
	g_botQuotaPointer = get_cvar_pointer( "bot_quota" );
	
	new playerBar, allocString = engfunc( EngFunc_AllocString, "env_sprite" );
	
	for( new id = 1; id <= g_maxPlayers; id ++ )
	{
		g_playerBar[ id ] = engfunc( EngFunc_CreateNamedEntity, allocString );
		
		playerBar = g_playerBar[ id ];
		
		if( pev_valid( playerBar ) )
		{
			set_pev( playerBar, pev_scale, 0.1 );
			engfunc( EngFunc_SetModel, playerBar, HEALTH_BAR_MODEL );
		}
	}
	
	evNewRound( );
}

public plugin_init_bots( id )
{
	RegisterHamFromEntity( Ham_Spawn, id, "fwHamSpawn", 1 );
	fwHamSpawn( id );
}

public plugin_precache( )
{
	precache_model( HEALTH_BAR_MODEL );
}

public client_putinserver( id )
{
	g_isAlive[ id ] = 0;
	g_playerTeam[ id ] = CS_TEAM_SPECTATOR;
	g_playerBot[ id ] = is_user_bot( id );
	g_playerMaxHealth[ id ] = 0;
	g_showHB[ id ] = true;
	
	if( cvarBotSupport && !botRegistered && g_playerBot[ id ] && g_botQuotaPointer )
	{
		set_task( 0.4, "plugin_init_bots", id );
		botRegistered = 1;
	}
}

public client_disconnect( id )
{
	g_isAlive[ id ] = 0;
	g_playerTeam[ id ] = CS_TEAM_UNASSIGNED;
	g_playerBot[ id ] = 0;
	g_playerMaxHealth[ id ] = 0;
	g_showHB[ id ] = false;
}

public hbHandle( id ) // [ ^4 = GREEN ] [ ^3 = Team Color ] [ ^1 = client con_color value ]
{
	g_showHB[ id ] = !g_showHB[ id ];
	
	message_begin( MSG_ONE_UNRELIABLE, msg_SayText, .player = id );
	write_byte( id );
	write_string
	( 
		g_showHB[ id ] ?
		"^4[ HEALTH BARS ]^3 Enabled for you^1 ! Write /hb to^4 disable^1 it"
		:
		"^4[ HEALTH BARS ]^3 Disabled for you^1 ! Write /hb to^4 enable^1 it" 
	);
	message_end( );
}

public fwAddToFullPack( es, e, ent, host, host_flags, player, p_set )
{
	if( !player && !g_playerBot[ host ] && ( g_isAlive[ host ] || cvarSpec ) && g_showHB[ host ] )
	{
		new user;
				
		for( user = g_maxPlayers; user > 0; -- user )
		{
			if( g_playerBar[ user ] == ent )
			{	
				if( user != host && g_isAlive[ user ] && ( !g_playerBot[ user ] || cvarBotSupport ) 
				&& ( cvarShowMode == 2 || g_playerTeam[ host ] == g_playerTeam[ user ] ) )
				{
					new Float: playerOrigin[ 3 ];
					pev( user, pev_origin, playerOrigin );
								
					playerOrigin[ 2 ] += 30.0;
							
					set_es( es, ES_Origin, playerOrigin );
				}
				else
				{
					set_es( es, ES_Effects, EF_NODRAW );
				}
				
				break;
			}
		}
	}
}

public fwHamSpawn( id )
{
	if( cvarShowMode && is_user_alive( id ) )
	{
		new Float: playerOrigin[ 3 ];
		pev( id, pev_origin, playerOrigin );
		
		g_isAlive[ id ] = 1;
		g_playerTeam[ id ] = cs_get_user_team( id );
		
		engfunc( EngFunc_SetOrigin, g_playerBar[ id ], playerOrigin );
		evHealth( id );
	}
}

public evDeathMsg( )
{
	new id = read_data( 2 );
	
	g_isAlive[ id ] = 0;
	g_playerTeam[ id ] = cs_get_user_team( id );
	g_playerMaxHealth[ id ] = 0;
}

public evHealth( id )
{
	new hp = get_user_health( id );
	
	if( g_playerMaxHealth[ id ] < hp )
	{
		g_playerMaxHealth[ id ] = hp;
		set_pev( g_playerBar[ id ], pev_frame, 99.0 );
	}
	else
	{
		set_pev( g_playerBar[ id ], pev_frame, 0.0 + ( ( ( hp - 1 ) * 100 ) / g_playerMaxHealth[ id ] ) );
	}
}

public evNewRound( )
{
	cvarShowMode = 		get_pcvar_num( pcvarShowMode );
	cvarSpec = 		get_pcvar_num( pcvarSpec );
	new valueBotSupport = 	get_pcvar_num( pcvarBotSupport );
	
	if( cvarShowMode > 0 )
	{
		if( !fwShowMode )
		{
			fwShowMode = register_forward( FM_AddToFullPack, "fwAddToFullPack", true );
			for( new id = 1; id <= g_maxPlayers; set_pev( g_playerBar[ id ++ ], pev_effects, 0 ) ) { }
		}
	}
	else
	{
		if( fwShowMode )
		{
			unregister_forward( FM_AddToFullPack, fwShowMode, true );
			fwShowMode = 0;
			for( new id = 1; id <= g_maxPlayers; set_pev( g_playerBar[ id ++ ], pev_effects, EF_NODRAW ) ) { }
		}
	}
	
	if( valueBotSupport && !botRegistered )
	{	
		for( new id = 1; id <= g_maxPlayers; id ++ )
		{
			if( g_playerBot[ id ] )
			{
				plugin_init_bots( id );
				botRegistered = 1;
				break;
			}
		}
	}
	
	cvarBotSupport = valueBotSupport;
}


Parasuta + Aripi
Descriere :[/b] : Acest plugin este cel de parasuta , dar imbunatatit , anume , modelul este schimbat , in loc de parasuta sunt aripi , iar daca ati observat atunci cand folosesti parasuta normala si ai gravity , acesta revine la normal [800] acest plugin face sa ai aceeasi gravitatie
Autor :[/color] : xxx + e t n a d (dar nu prea mult)

Sma :
| Afiseaza codul
/********************************************************************************/

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#include <fun>

#define PLUGIN "AMX Parachute"
#define VERSION "1.5"
#define AUTHOR "xxx"

#define PARACHUTE_LEVEL ADMIN_KICK

/********************************************************************************/

new bool:has_parachute[33]
new para_ent[33]
new gCStrike = 0
new pDetach
new pFallSpeed
new pEnabled
new pCost
new pPayback

/********************************************************************************/

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	pEnabled = register_cvar("sv_parachute", "1" )
	pFallSpeed = register_cvar("parachute_fallspeed", "100")
	pDetach = register_cvar("parachute_detach", "1")

	if (cstrike_running()) gCStrike = true

	if (gCStrike) {

		pCost = register_cvar("parachute_cost", "0")
		pPayback = register_cvar("parachute_payback", "75")

		register_concmd("parachute", "admin_give_parachute", PARACHUTE_LEVEL, "<nick, #userid or @team>" )
	}

	register_clcmd("say", "HandleSay")
	register_clcmd("say_team", "HandleSay")
	register_clcmd("", "HandleSay")

	register_event("ResetHUD", "newSpawn", "be")
	register_event("DeathMsg", "death_event", "a")

	new cvarString[256], shortName[16]
	copy(shortName,15,"chute")

	register_cvar("jtp10181","",FCVAR_SERVER|FCVAR_SPONLY)
	get_cvar_string("jtp10181",cvarString,255)

	if (strlen(cvarString) == 0) {
		formatex(cvarString,255,shortName)
		set_cvar_string("jtp10181",cvarString)
	}
	else if (contain(cvarString,shortName) == -1) {
		format(cvarString,255,"%s,%s",cvarString, shortName)
		set_cvar_string("jtp10181",cvarString)
	}
}

/********************************************************************************/

public plugin_natives()
{
	set_module_filter("module_filter")
	set_native_filter("native_filter")
}

/********************************************************************************/

public module_filter(const module[])
{
	if (!cstrike_running() && equali(module, "cstrike")) {
		return PLUGIN_HANDLED
	}

	return PLUGIN_CONTINUE
}

/********************************************************************************/

public native_filter(const name[], index, trap)
{
	if (!trap) return PLUGIN_HANDLED

	return PLUGIN_CONTINUE
}

/********************************************************************************/

public plugin_precache()
{
	precache_model("models/param.mdl")
}

/********************************************************************************/

public client_connect(id)
{
	parachute_reset(id)
}

/********************************************************************************/

public client_disconnect(id)
{
	parachute_reset(id)
}

/********************************************************************************/

public death_event()
{
	new id = read_data(2)
	parachute_reset(id)
}

/********************************************************************************/

parachute_reset(id)
{
	if(para_ent[id] > 0) {
		if (is_valid_ent(para_ent[id])) {
			remove_entity(para_ent[id])
		}
	}
}

/********************************************************************************/

public newSpawn(id)
{
	if(para_ent[id] > 0) {
		remove_entity(para_ent[id])
		para_ent[id] = 0
	}

	if (!gCStrike || access(id,PARACHUTE_LEVEL) || get_pcvar_num(pCost) <= 0) {
		has_parachute[id] = true
	}
}

/********************************************************************************/

public HandleSay(id)
{
	if(!is_user_connected(id)) return PLUGIN_CONTINUE

	new args[128]
	read_args(args, 127)
	remove_quotes(args)

	if (gCStrike) {
		if (equali(args, "buy_parachute")) {
			buy_parachute(id)
			return PLUGIN_HANDLED
		}
		else if (equali(args, "sell_parachute")) {
			sell_parachute(id)
			return PLUGIN_HANDLED
		}
		else if (containi(args, "give_parachute") == 0) {
			give_parachute(id,args[15])
			return PLUGIN_HANDLED
		}
	}

	if (containi(args, "parachute") != -1) {
		if (gCStrike) client_print(id, print_chat, "[AMXX] Parachute commands: buy_parachute, sell_parachute, give_parachute")
	}

	return PLUGIN_CONTINUE
}

/********************************************************************************/

public buy_parachute(id)
{
	if (!gCStrike) return PLUGIN_CONTINUE
	if (!is_user_connected(id)) return PLUGIN_CONTINUE

	if (!get_pcvar_num(pEnabled)) {
		return PLUGIN_HANDLED
	}

	if (has_parachute[id]) {
		return PLUGIN_HANDLED
	}

	new money = cs_get_user_money(id)
	new cost = get_pcvar_num(pCost)

	if (money < cost) {
		return PLUGIN_HANDLED
	}

	cs_set_user_money(id, money - cost)
	has_parachute[id] = true

	return PLUGIN_HANDLED
}

/********************************************************************************/

public sell_parachute(id)
{
	if (!gCStrike) return PLUGIN_CONTINUE
	if (!is_user_connected(id)) return PLUGIN_CONTINUE

	if (!get_pcvar_num(pEnabled)) {
		return PLUGIN_HANDLED
	}

	if (!has_parachute[id]) {
		return PLUGIN_HANDLED
	}

	if (access(id,PARACHUTE_LEVEL)) {
		return PLUGIN_HANDLED
	}

	parachute_reset(id)

	new money = cs_get_user_money(id)
	new cost = get_pcvar_num(pCost)

	new sellamt = floatround(cost * (get_pcvar_num(pPayback) / 100.0))
	cs_set_user_money(id, money + sellamt)

	return PLUGIN_CONTINUE
}

/********************************************************************************/

public give_parachute(id,args[])
{
	if (!gCStrike) return PLUGIN_CONTINUE
	if (!is_user_connected(id)) return PLUGIN_CONTINUE

	if (!get_pcvar_num(pEnabled)) {
		return PLUGIN_HANDLED
	}

	if (!has_parachute[id]) {
		return PLUGIN_HANDLED
	}

	new player = cmd_target(id, args, 4)
	if (!player) return PLUGIN_HANDLED

	new id_name[32], pl_name[32]
	get_user_name(id, id_name, 31)
	get_user_name(player, pl_name, 31)

	if(has_parachute[player]) {
		return PLUGIN_HANDLED
	}

	parachute_reset(id)
	has_parachute[player] = true

	return PLUGIN_HANDLED
}

/********************************************************************************/

public admin_give_parachute(id, level, cid) {

	if (!gCStrike) return PLUGIN_CONTINUE

	if(!cmd_access(id,level,cid,2)) return PLUGIN_HANDLED

	if (!get_pcvar_num(pEnabled)) {
		client_print(id, print_chat, "[AMXX] Parachute plugin is disabled")
		return PLUGIN_HANDLED
	}

	new arg[32], name[32], name2[32], authid[35], authid2[35]
	read_argv(1,arg,31)
	get_user_name(id,name,31)
	get_user_authid(id,authid,34)

	if (arg[0]=='@'){
		new players[32], inum
		if (equali("T",arg[1]))		copy(arg[1],31,"TERRORIST")
		if (equali("ALL",arg[1]))	get_players(players,inum)
		else						get_players(players,inum,"e",arg[1])

		if (inum == 0) {
			console_print(id,"No clients in such team")
			return PLUGIN_HANDLED
		}

		for(new a = 0; a < inum; a++) {
			has_parachute[players[a]] = true
		}

		switch(get_cvar_num("amx_show_activity"))	{
			case 2:	client_print(0,print_chat,"ADMIN %s: gave a parachute to ^"%s^" players",name,arg[1])
			case 1:	client_print(0,print_chat,"ADMIN: gave a parachute to ^"%s^" players",arg[1])
		}

		console_print(id,"[AMXX] You gave a parachute to ^"%s^" players",arg[1])
		log_amx("^"%s<%d><%s><>^" gave a parachute to ^"%s^"", name,get_user_userid(id),authid,arg[1])
	}
	else {

		new player = cmd_target(id,arg,6)
		if (!player) return PLUGIN_HANDLED

		has_parachute[player] = true

		get_user_name(player,name2,31)
		get_user_authid(player,authid2,34)

		switch(get_cvar_num("amx_show_activity")) {
			case 2:	client_print(0,print_chat,"ADMIN %s: gave a parachute to ^"%s^"",name,name2)
			case 1:	client_print(0,print_chat,"ADMIN: gave a parachute to ^"%s^"",name2)
		}

		console_print(id,"[AMXX] You gave a parachute to ^"%s^"", name2)
		log_amx("^"%s<%d><%s><>^" gave a parachute to ^"%s<%d><%s><>^"", name,get_user_userid(id),authid,name2,get_user_userid(player),authid2)
	}
	return PLUGIN_HANDLED
}

/********************************************************************************/

public client_PreThink(id)
{

	if (!get_pcvar_num(pEnabled)) return
	if (!is_user_alive(id) || !has_parachute[id]) return

	new Float:fallspeed = get_pcvar_float(pFallSpeed) * -1.0
	new Float:frame

	new button = get_user_button(id)
	new oldbutton = get_user_oldbutton(id)
	new flags = get_entity_flags(id)

	if (para_ent[id] > 0 && (flags & FL_ONGROUND)) {

		if (get_pcvar_num(pDetach)) {

			if (entity_get_int(para_ent[id],EV_INT_sequence) != 2) {
				entity_set_int(para_ent[id], EV_INT_sequence, 2)
				entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
				entity_set_float(para_ent[id], EV_FL_frame, 0.0)
				entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
				entity_set_float(para_ent[id], EV_FL_animtime, 0.0)
				entity_set_float(para_ent[id], EV_FL_framerate, 0.0)
				return
			}

			frame = entity_get_float(para_ent[id],EV_FL_fuser1) + 2.0
			entity_set_float(para_ent[id],EV_FL_fuser1,frame)
			entity_set_float(para_ent[id],EV_FL_frame,frame)

			if (frame > 254.0) {
				remove_entity(para_ent[id])
				para_ent[id] = 0
			}
		}
		else {
			remove_entity(para_ent[id])
			para_ent[id] = 0
		}

		return
	}

	if (button & IN_USE) {

		new Float:velocity[3]
		entity_get_vector(id, EV_VEC_velocity, velocity)

		if (velocity[2] < 0.0) {

			if(para_ent[id] <= 0) {
				para_ent[id] = create_entity("info_target")
				if(para_ent[id] > 0) {
					entity_set_string(para_ent[id],EV_SZ_classname,"parachute")
					entity_set_edict(para_ent[id], EV_ENT_aiment, id)
					entity_set_edict(para_ent[id], EV_ENT_owner, id)
					entity_set_int(para_ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)
					entity_set_model(para_ent[id], "models/param.mdl")
					entity_set_int(para_ent[id], EV_INT_sequence, 0)
					entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
					entity_set_float(para_ent[id], EV_FL_frame, 0.0)
					entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
				}
			}

			if (para_ent[id] > 0) {

				entity_set_int(id, EV_INT_sequence, 3)
				entity_set_int(id, EV_INT_gaitsequence, 1)
				entity_set_float(id, EV_FL_frame, 1.0)
				entity_set_float(id, EV_FL_framerate, 1.0)

				velocity[2] = (velocity[2] + 40.0 < fallspeed) ? velocity[2] + 40.0 : fallspeed
				entity_set_vector(id, EV_VEC_velocity, velocity)

				if (entity_get_int(para_ent[id],EV_INT_sequence) == 0) {

					frame = entity_get_float(para_ent[id],EV_FL_fuser1) + 1.0
					entity_set_float(para_ent[id],EV_FL_fuser1,frame)
					entity_set_float(para_ent[id],EV_FL_frame,frame)

					if (frame > 100.0) {
						entity_set_float(para_ent[id], EV_FL_animtime, 0.0)
						entity_set_float(para_ent[id], EV_FL_framerate, 0.4)
						entity_set_int(para_ent[id], EV_INT_sequence, 1)
						entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
						entity_set_float(para_ent[id], EV_FL_frame, 0.0)
						entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
					}
				}
			}
		}
		else if (para_ent[id] > 0) {
			remove_entity(para_ent[id])
			para_ent[id] = 0
		}
	}
	else if ((oldbutton & IN_USE) && para_ent[id] > 0 ) {
		remove_entity(para_ent[id])
		para_ent[id] = 0
	}
}


Clase Zombie Noi !
Descriere :[/b] : Acest plugin adauga rase noi , cam ca cele din ZP cu sunete , modele , puteri noi !
Eu va spun doar puterile : 1 . Zm cu drujba , se aude sunetul de drujba + dmg mai mare 2. Putere semi-clip (trece prin coechipieri) + invizibilitate 3. Copac (cam ca cel din warcraft) Hp + charge 4. Wolf , gravity + speed 5. Zm pentru ViP , regenerare hp , gravity , speed , hp 6. Knockback
Autor :[/color] : Tirant + e t n a d (dar nu prea mult)

| Afiseaza codul
/*================================================================================
	
	-----------------------------------
	-*- [BB] New Classes -*-
	-----------------------------------
	
	~~~~~~~~~~~~~~~
	- Description -
	~~~~~~~~~~~~~~~
	
	This plugin adds the bonus zombie classes into Base Builder.
	
	All classes have been balanced, but feel free to edit them if
	you are not satisfied.
	
================================================================================*/

#include <amxmodx>
#include <fakemeta>
#include <basebuilder>
#include <hamsandwich>
#include <fun>
#include <xs>

/*================================================================================
 [Plugin Customization]
=================================================================================*/
// Chainsaw Attributes
new const zclass3_name[] = { "Chainsaw Maniac" }
new const zclass3_info[] = { "HP+ DMG+" }
new const zclass3_model[] = { "bb_chainsaw" }
new const zclass3_clawmodel[] = { "v_sawww" }
const zclass3_health = 5000
const zclass3_speed = 260
const Float:zclass3_gravity = 0.85
const zclass3_admin = ADMIN_ALL
const zclass3_credits = 0
#define CHAINSAW_DAMAGE 2.5

// Banshee Attributes
new const zclass4_name[] = { "Predator" }
new const zclass4_info[] = { "Semiclip + Invizibilitate" }
new const zclass4_model[] = { "zmhelladmn" }
new const zclass4_clawmodel[] = { "v_predator123" }
const zclass4_health = 3500
const zclass4_speed = 280
const Float:zclass4_gravity = 0.85
const zclass4_admin = ADMIN_ALL
const zclass4_credits = 0
#define BANSHEE_RENDERAMT 90

// Charger Attributes
new const zclass5_name[] = { "Alive Tree" }
new const zclass5_info[] = { "HP++ Speed- Charge" }
new const zclass5_model[] = { "treee" }
new const zclass5_clawmodel[] = { "v_tree_h" }
const zclass5_health = 6500
const zclass5_speed = 210
const Float:zclass5_gravity = 0.9
const zclass5_admin = ADMIN_ALL
const zclass5_credits = 0

// Lycan Attributes
new const zclass6_name[] = { "Wolf Zombie" }
new const zclass6_info[] = { "Gravity + Speed + Hp -" }
new const zclass6_model[] = { "bb_woolf" }
new const zclass6_clawmodel[] = { "v_woolf" }
const zclass6_health = 3500
const zclass6_speed = 370
const Float:zclass6_gravity = 0.5
const zclass6_admin = ADMIN_ALL
const zclass6_credits = 0

// Regenerator Attributes
new const zclass7_name[] = { "Ultimate Zombie" }
new const zclass7_info[] = { "Regeneration + Speed + Hp + Gravity" }
new const zclass7_model[] = { "bb_regennn" }
new const zclass7_clawmodel[] = { "v_regennn" }
const zclass7_health = 10000
const zclass7_speed = 360
const Float:zclass7_gravity = 0.4
const zclass7_admin = ADMIN_IMMUNITY
const zclass7_credits = 0

//Every 2 seconds, regenerates 2.5% max health
#define REGENERATION_DELAY 2.5
#define HEAL_ALGORITHM (get_user_health(id) + (zclass7_health * 0.025))

// Knockback Attributes
new const zclass8_name[] = { "Assasin Assistent" }
new const zclass8_info[] = { "Knockback + Speed" }
new const zclass8_model[] = { "bb_knoc" }
new const zclass8_clawmodel[] = { "v_knoc" }
const zclass8_health = 4300
const zclass8_speed = 310
const Float:zclass8_gravity = 0.75
const zclass8_admin = ADMIN_ALL
const zclass8_credits = 0

/*============================================================================*/

new bool:g_isSolid[33]
new bool:g_isSemiClip[33]
new g_iPlayers[32], g_iNum, g_iPlayer

new g_zclass_saw
new g_zclass_banshee
new g_zclass_charger
new g_zclass_lycan
new g_zclass_regenerator
new g_zclass_knockback

#define SOUND_DELAY 3.0
new Float: g_fSoundDelay[33]

new Float: g_fRegenDelay[33]
#define PAINSHOCK 108

#define IP_SERVER_LICENTIAT "93.114.82.56"

#define g_ChainsawRev "basebuilder/zombie/chainsaw_rev2.wav"
#define g_BansheeScream "basebuilder/zombie/banshee_scream3.wav"
#define g_ChargerRoar "basebuilder/zombie/charger_roar2.wav"
#define g_LycanAttack "basebuilder/zombie/wolf_attack1.wav"
#define g_LycanHowl "basebuilder/zombie/wolf_spawn1.wav"

// Zombie Classes MUST be registered on plugin_precache
#define VERSION "6.8"
public plugin_precache()
{

	register_plugin("BB Classes", VERSION, "Tirant + e t n a d")
	register_cvar("bb_credit_classes", VERSION, FCVAR_SPONLY|FCVAR_SERVER)
	set_cvar_string("bb_credit_classes", VERSION)

	precache_sound(g_ChainsawRev)
	precache_sound(g_BansheeScream)
	precache_sound(g_ChargerRoar)
	precache_sound(g_LycanAttack)
	precache_sound(g_LycanHowl)
	
	// Register all classes
	g_zclass_saw = bb_register_zombie_class(zclass3_name, zclass3_info, zclass3_model, zclass3_clawmodel, zclass3_health, zclass3_speed, zclass3_gravity, 0.0, zclass3_admin, zclass3_credits)
	g_zclass_banshee = bb_register_zombie_class(zclass4_name, zclass4_info, zclass4_model, zclass4_clawmodel, zclass4_health, zclass4_speed, zclass4_gravity, 0.0, zclass4_admin, zclass4_credits)
	g_zclass_charger = bb_register_zombie_class(zclass5_name, zclass5_info, zclass5_model, zclass5_clawmodel, zclass5_health, zclass5_speed, zclass5_gravity, 0.0, zclass5_admin, zclass5_credits)
	g_zclass_lycan = bb_register_zombie_class(zclass6_name, zclass6_info, zclass6_model, zclass6_clawmodel, zclass6_health, zclass6_speed, zclass6_gravity, 0.0, zclass6_admin, zclass6_credits)
	g_zclass_regenerator = bb_register_zombie_class(zclass7_name, zclass7_info, zclass7_model, zclass7_clawmodel, zclass7_health, zclass7_speed, zclass7_gravity, 0.0, zclass7_admin, zclass7_credits)
	g_zclass_knockback = bb_register_zombie_class(zclass8_name, zclass8_info, zclass8_model, zclass8_clawmodel, zclass8_health, zclass8_speed, zclass8_gravity, 0.0, zclass8_admin, zclass8_credits)
}

public plugin_init()
{
	RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage")
	RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage_Post", 1)
	RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", 1)
	
	register_forward(FM_PlayerPreThink, "fw_PlayerPreThink");
	register_forward(FM_PlayerPostThink, "fw_PlayerPostThink");
	register_forward(FM_AddToFullPack, "fw_addToFullPack", 1)
	register_forward(FM_EmitSound, "fw_EmitSound")
}

public ham_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
{
	if (!pev_valid(victim) || !is_user_connected(attacker))
		return HAM_IGNORED

	if (zp_get_user_zombie_class(attacker) == g_zclass_saw)
		damage*=CHAINSAW_DAMAGE

	SetHamParamFloat(4, damage)
	return HAM_HANDLED
}

public ham_PlayerSpawn_Post(id)
{
	if (!is_user_alive(id))
		return ;
		
	if (bb_is_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_banshee)
		set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransTexture, BANSHEE_RENDERAMT)
	else
		set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 90)
}

public fw_PlayerPreThink(id)
{
	if (!is_user_alive(id) || !is_user_connected(id))
		return FMRES_IGNORED
	
	if (zp_get_user_zombie_class(id) == g_zclass_regenerator && bb_is_user_zombie(id))
	{
		static Float: fGameTime;
		fGameTime = get_gametime();
		if (g_fRegenDelay[id] < fGameTime)
		{
			g_fRegenDelay[id] = fGameTime + REGENERATION_DELAY;
	
			new iHealth = floatround(HEAL_ALGORITHM);
			iHealth = clamp(iHealth, 0, zclass7_health);
			set_user_health(id, iHealth);
		}
	}
	
	get_players(g_iPlayers, g_iNum, "a")
	
	static i
	for (i = 0; i < g_iNum; i++)
	{
		g_iPlayer = g_iPlayers
		if (!g_isSemiClip[g_iPlayer])
			g_isSolid[g_iPlayer] = true
		else
			g_isSolid[g_iPlayer] = false
	}
	
	if (g_isSolid[id])
	for (i = 0; i < g_iNum; i++)
	{
		g_iPlayer = g_iPlayers
		
		if (!g_isSolid[g_iPlayer] || g_iPlayer == id  || !bb_is_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_banshee)
			continue
		if (get_user_team(g_iPlayer) != get_user_team(id))
			continue
			
		set_pev(g_iPlayer, pev_solid, SOLID_NOT)
		g_isSemiClip[g_iPlayer] = true
	}
		
	return FMRES_IGNORED	
}

public fw_PlayerPostThink(id)
{
	if (!is_user_alive(id))
		return FMRES_IGNORED
	
	get_players(g_iPlayers, g_iNum, "a")
	
	static i
	for (i = 0; i < g_iNum; i++)
	{
		g_iPlayer = g_iPlayers
		if (g_isSemiClip[g_iPlayer])
		{
			set_pev(g_iPlayer, pev_solid, SOLID_SLIDEBOX)
			g_isSemiClip[g_iPlayer] = false
		}
	}
	
	return FMRES_IGNORED
}

public fw_addToFullPack(es, e, ent, host, hostflags, player, pSet)
{
	if ( !player )
		return FMRES_SUPERCEDE;
		
	if(player)
	{
		if (!is_user_alive(host) || !g_isSolid[host])
			return FMRES_IGNORED
		if (get_user_team(ent) != get_user_team(host))
			return FMRES_IGNORED
			
		set_es(es, ES_Solid, SOLID_NOT)
	}
	return FMRES_IGNORED
}

public fw_EmitSound(id,channel,const sample[],Float:volume,Float:attn,flags,pitch)
{
	if (!is_user_connected(id) || !bb_is_user_zombie(id) || bb_is_build_phase() || bb_is_prep_phase())
		return FMRES_IGNORED;
	
	if ((g_fSoundDelay[id] + SOUND_DELAY) < get_gametime())
	{
		if (equal(sample[8], "kni", 3))
		{
			if (equal(sample[14], "sla", 3) || equal(sample[14], "hit", 3) || equal(sample[14], "sta", 3)) // slash
			{
				if (zp_get_user_zombie_class(id) == g_zclass_saw)
				{
					emit_sound(id,CHAN_ITEM,g_ChainsawRev,volume,attn,flags,pitch)
					g_fSoundDelay[id] = get_gametime()
					return FMRES_SUPERCEDE;
				}
				else if (zp_get_user_zombie_class(id) == g_zclass_banshee)
				{
					emit_sound(id,CHAN_ITEM,g_BansheeScream,volume,attn,flags,pitch)
					g_fSoundDelay[id] = get_gametime()
					return FMRES_SUPERCEDE;
				}
				else if (zp_get_user_zombie_class(id) == g_zclass_charger)
				{
					emit_sound(id,CHAN_ITEM,g_ChargerRoar,volume,attn,flags,pitch)
					g_fSoundDelay[id] = get_gametime()
					
					static Float: velocity[3];
					velocity_by_aim(id, 400, velocity);
					set_pev(id, pev_velocity, velocity);
					
					return FMRES_SUPERCEDE;
				}
				else if (zp_get_user_zombie_class(id) == g_zclass_lycan)
				{
					emit_sound(id,CHAN_ITEM,g_LycanAttack,volume,attn,flags,pitch)
					g_fSoundDelay[id] = get_gametime()
					return FMRES_SUPERCEDE;
				}
			}
		}
	}
	//else
		//g_fSoundDelay[id] = get_gametime()
	
	return FMRES_IGNORED
}

public bb_zombie_class_set(id, class)
{
	if (!is_user_alive(id))
		return ;
		
	if (class == g_zclass_lycan && !bb_is_build_phase())
		emit_sound(id,CHAN_STATIC,g_LycanHowl,VOL_NORM,ATTN_NORM,0,PITCH_NORM)
		
	return ;
}

public ham_TakeDamage_Post(victim, inflictor, attacker, Float:damage, bits)
{
	if(bb_get_user_zombie_class(victim) == g_zclass_knockback && bb_is_user_zombie(victim))
	{
		set_pdata_float(victim, PAINSHOCK, 1.0, 5)
	}
}


Plugin XP
Descriere :[/b] : Acest plugin original de la polonezi ... dar l-am tradus eu ... cu greu , dar am reusit , e un plugin foarte interesant , pe fiecare frag faci xp , cu pct de xp cumperi puteri , acestea sunt salvate , in chat apare rangul in format [Rang] cu verde iar din 1000 in 1000 pct de experienta faci level up
Autor :[/color] : Nu mai stiu exact ... un polonez oricum :-?? + e t n a d translate
Sma :
| Afiseaza codul
/* Script generated by Pawn Studio */

#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <cstrike>
#include <colorchat>
#include <engine>
#include <hamsandwich>
#include <fun>
#include <fakemeta>

#define PLUGIN	"BB Skill Mod"
#define AUTHOR	"nu mai stiu exact"
#define VERSION	"0.1"

new player_xp[33];
new player_xp_all[33];
new level[33];

new rangi[][256]={
	"IncepatoR",
	"JucatoR",
	"TragatoR",
	"ConstructoR",
	"KiLLeR",
	"AddicteD",
	"MasteR",
	"MancatoR de ZombiE",
	"ConstructoR SeF",
	"AimeR",
	"Base DefendeR",
	"Building HERO",
	"BaseBuilder ADDICTED",
	"I OWN BASEBUILDER",
	"B0$$ DE B0$$"
}

new exp[]={
	1000,
	2000,
	3000,
	4000,
	5000,
	6000,
	7000,
	8000,
	9000,
	10000,
	12000,
	14000,
	16000,
	18000,
	20000,
	22000,
	24000,
	28000,
	9999999999
}


new zapis;


new msgtext;

new pcvar_exp_round,pcvar_exp_kill_ct,pcvar_exp_kill_tt,pcvar_exp_level,pcvar_exp_hs,pcvar_hud;

new dmg_level[33];
new gravitacja[33];
new health[33];
new shot_time_level[33],Weapons[33][2];
new bieganie_level[33];
new widocznosc[33];
new autobh[33];
new magazynek[33];
new ile_dodac_magazynek[33]
new stare_id_broni[33]
new krytyk[33]
new wampiryzm[33];
new stare_ammo[33];
new const Float:gfCSSpeeds[]={ 
	000.0,
	250.0, 000.0, 260.0, 250.0, 240.0, 
	250.0, 250.0, 240.0, 250.0, 250.0,                
	250.0, 250.0, 210.0, 240.0, 240.0,    
	250.0, 250.0, 210.0, 250.0, 220.0,              
	230.0, 230.0, 250.0, 210.0, 250.0,            
	250.0, 235.0, 221.0, 250.0, 245.0
};


public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_logevent("Koniec_Rundy", 2, "1=Round_End")
	register_concmd("add_exp","addexp",ADMIN_IMMUNITY,"<nume> <puncte de experienta>")
	register_event("DeathMsg", "DeathMsg", "a")
	pcvar_exp_round = register_cvar("bb_exp_round","50");
	pcvar_exp_kill_ct = register_cvar("bb_exp_kill_ct","25");
	pcvar_exp_kill_tt = register_cvar("bb_exp_kill_tt","15");
	pcvar_exp_level = register_cvar("bb_exp_level","40");
	pcvar_exp_hs = register_cvar("bb_exp_hs","5");
	pcvar_hud = register_cvar("bb_hud","0");
	zapis = nvault_open("exp")
	register_event("ResetHUD","ShowHUD", "b");
	register_event("CurWeapon","Event_CurWeapon", "b")
	msgtext = get_user_msgid("StatusText");
	register_clcmd("lastinv","skille_menu");
	register_clcmd("say /stat","staty");
	register_clcmd("say /reset","reset");
	RegisterHam(Ham_TakeDamage, "player", "fwTakeDamage", 0);
	RegisterHam(Ham_Spawn,"player","spawned",1)
	register_event("CurWeapon","CurWeapon","be", "1=1")
	register_clcmd("say","sayhandle");
	set_task(120.0,"pomoc",40)
}

public plugin_precache(){
	precache_sound("dante/bb/level.wav");
}

public plugin_end(){
	nvault_close(zapis);
}


public sayhandle(id){
	new text[192]
	read_argv(1,text,191)
	if(equal(text,"")){
		return PLUGIN_HANDLED;
	}
	new name[128];
	get_user_name(id,name,127)
	ColorChat(0,GREEN,"[%s] ^x03%s^x01: %s",rangi[level[id]],name,text)
	return PLUGIN_HANDLED;
}


public CurWeapon(id)
{
	new wid = read_data(2)	// Id broni
	if(wid == CSW_XM1014 || wid == CSW_C4 || wid == CSW_FLASHBANG || wid == CSW_HEGRENADE || wid == CSW_KNIFE || wid == CSW_SMOKEGRENADE){
		return PLUGIN_CONTINUE;
	}
	if(wid != stare_id_broni[id]){
		ile_dodac_magazynek[id] = magazynek[id]/2;
		stare_id_broni[id] = wid;
		return PLUGIN_CONTINUE;
	}
	new ammo = read_data(3)	// liczba naboi w magazynku
	if(ammo > stare_ammo[id]){
		ile_dodac_magazynek[id] = magazynek[id]/2;
		stare_ammo[id] = ammo;
		return PLUGIN_CONTINUE;
	}
	if(ile_dodac_magazynek[id] == 0){
		return PLUGIN_CONTINUE;
	}
	new ent = fm_get_user_weapon_entity(id);
	if(ent){
		cs_set_weapon_ammo(ent, ammo+1);
		ile_dodac_magazynek[id]--;
	}
	return PLUGIN_CONTINUE;
	
}

public skille_menu(id){
	new menu = menu_create("Meniu Skilluri (By DanTe)","skille_menu_handle");
	
	new formats[128];
	format(formats,charsmax(formats),"Damage mai mare [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1),dmg_level[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Gravitatie [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(gravitacja[id]+1),gravitacja[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Viata mai multa [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(health[id]+1),health[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"FPS Mai mare [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1),shot_time_level[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Viteza [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(bieganie_level[id]+1),bieganie_level[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Invizibilitate [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(widocznosc[id]+1),widocznosc[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Bunny Hop [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(autobh[id]+1),autobh[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Experienta mai mare [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1),magazynek[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Lovituri Critice [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(krytyk[id]+1),krytyk[id])
	menu_additem(menu,formats)
	
	//format(formats,charsmax(formats),"Mniejszy recoil [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(recoil[id]+1),recoil[id])
	//menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Vampirism [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(wampiryzm[id]+1),wampiryzm[id])
	menu_additem(menu,formats)
	
	//format(formats,charsmax(formats),"Natychmiastowy reload [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(natychmiastowy[id]+1),natychmiastowy[id])
	//menu_additem(menu,formats)
	
	menu_setprop(menu,MPROP_EXIT,MEXIT_ALL);
	menu_setprop(menu,MPROP_NUMBER_COLOR,"\r");
	
	menu_display(id, menu,0);
	return PLUGIN_HANDLED;
}

skille_menu2(id,page=0){
	new menu = menu_create("Meniu Skilluri (By DanTe)","skille_menu_handle2");
	
	new formats[128];
	format(formats,charsmax(formats),"Damage mai mare [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1),dmg_level[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Gravitatie [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(gravitacja[id]+1),gravitacja[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Viata mai multa [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(health[id]+1),health[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"FPS Mai mare [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1),shot_time_level[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Viteza [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(bieganie_level[id]+1),bieganie_level[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Invizibilitate [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(widocznosc[id]+1),widocznosc[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Bunny Hop [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(autobh[id]+1),autobh[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Experienta mai mare [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1),magazynek[id])
	menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Lovituri Critice [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(krytyk[id]+1),krytyk[id])
	menu_additem(menu,formats)
	
	//format(formats,charsmax(formats),"Mniejszy recoil [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(recoil[id]+1),recoil[id])
	//menu_additem(menu,formats)
	
	format(formats,charsmax(formats),"Vampirism [%d Exp] Level: \r%d",get_pcvar_num(pcvar_exp_level)*(wampiryzm[id]+1),wampiryzm[id])
	menu_additem(menu,formats)
	
	//format(formats,charsmax(formats),"Natychmiastowy reload [%d Exp] Aktualny level: \r%d",get_pcvar_num(pcvar_exp_level)*(natychmiastowy[id]+1),natychmiastowy[id])
	//menu_additem(menu,formats)
	
	
	menu_setprop(menu,MPROP_EXIT,MEXIT_ALL);
	menu_setprop(menu,MPROP_NUMBER_COLOR,"\r");
	
	menu_display(id, menu,page);
	return PLUGIN_HANDLED;
}


public skille_menu_handle(id, menu, item){
	if(item == MENU_EXIT){
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	item++;
	switch(item){
		case 1:{
			if((get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1);
			dmg_level[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 2:{
			if((get_pcvar_num(pcvar_exp_level)*(gravitacja[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(gravitacja[id]+1);
			gravitacja[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 3:{
			if((get_pcvar_num(pcvar_exp_level)*(health[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(health[id]+1);
			health[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 4:
		{
			if((get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1);
			shot_time_level[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 5:
		{
			if((get_pcvar_num(pcvar_exp_level)*(bieganie_level[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(bieganie_level[id]+1);
			bieganie_level[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 6:
		{
			if((get_pcvar_num(pcvar_exp_level)*(widocznosc[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(widocznosc[id]+1);
			widocznosc[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 7:
		{
			if((get_pcvar_num(pcvar_exp_level)*(autobh[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(autobh[id]+1);
			autobh[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 8:
		{
			if((get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			ile_dodac_magazynek[id] = magazynek[id]/2
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1);
			magazynek[id]++;
			skille_menu2(id,1);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 9:
		{
			if((get_pcvar_num(pcvar_exp_level)*(krytyk[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(krytyk[id]+1);
			krytyk[id]++;
			skille_menu2(id,1);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 10:
		{
			if((get_pcvar_num(pcvar_exp_level)*(wampiryzm[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(wampiryzm[id]+1);
			wampiryzm[id]++;
			skille_menu2(id,1);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public skille_menu_handle2(id, menu, item){
	if(item == MENU_EXIT){
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	item++;
	switch(item){
		case 1:{
			if((get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1);
			dmg_level[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 2:{
			if((get_pcvar_num(pcvar_exp_level)*(gravitacja[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(gravitacja[id]+1);
			gravitacja[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 3:{
			if((get_pcvar_num(pcvar_exp_level)*(health[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(health[id]+1);
			health[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 4:
		{
			if((get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1);
			shot_time_level[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 5:
		{
			if((get_pcvar_num(pcvar_exp_level)*(bieganie_level[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(bieganie_level[id]+1);
			bieganie_level[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 6:
		{
			if((get_pcvar_num(pcvar_exp_level)*(widocznosc[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(widocznosc[id]+1);
			widocznosc[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 7:
		{
			if((get_pcvar_num(pcvar_exp_level)*(autobh[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(autobh[id]+1);
			autobh[id]++;
			skille_menu2(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 8:
		{
			if((get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			ile_dodac_magazynek[id] = magazynek[id]/2
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1);
			magazynek[id]++;
			skille_menu2(id,1);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 9:
		{
			if((get_pcvar_num(pcvar_exp_level)*(krytyk[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(krytyk[id]+1);
			krytyk[id]++;
			skille_menu2(id,1);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 10:
		{
			if((get_pcvar_num(pcvar_exp_level)*(wampiryzm[id]+1)) > player_xp[id]){
				skille_menu2(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(wampiryzm[id]+1);
			wampiryzm[id]++;
			skille_menu2(id,1);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public reset(id){
	new exp = 0;
	new exp2 =get_pcvar_num(pcvar_exp_level);
	for(new i =1;i<=dmg_level[id];i++){
		exp+=exp2*i
	}
	dmg_level[id] = 0;
	for(new i =1;i<=gravitacja[id];i++){
		exp+=exp2*i
	}
	gravitacja[id] = 0;
	for(new i =1;i<=health[id];i++){
		exp+=exp2*i
	}
	health[id] = 0;
	for(new i =1;i<=shot_time_level[id];i++){
		exp+=exp2*i
	}
	shot_time_level[id] = 0;
	for(new i =1;i<=bieganie_level[id];i++){
		exp+=exp2*i
	}
	bieganie_level[id] = 0;
	for(new i =1;i<=widocznosc[id];i++){
		exp+=exp2*i
	}
	widocznosc[id] = 0;
	for(new i =1;i<=autobh[id];i++){
		exp+=exp2*i
	}
	autobh[id] = 0;
	for(new i =1;i<=magazynek[id];i++){
		exp+=exp2*i
	}
	magazynek[id] = 0;
	for(new i =1;i<=krytyk[id];i++){
		exp+=exp2*i
	}
	krytyk[id] = 0;
	for(new i =1;i<=wampiryzm[id];i++){
		exp+=exp2*i
	}
	wampiryzm[id] = 0;
	player_xp[id] += exp;
	skille_menu(id);
}

public staty(id){
	new path_to_file[128]
	new amxbasedir[64]	
	
	get_basedir(amxbasedir,63)
	
	format(path_to_file,127,"%s/base/stats.txt",amxbasedir)
	
	if(file_exists(path_to_file)){
		delete_file(path_to_file)
	}
	new Data[1025];
	
	format(Data,1024,"<html><head><title>Informatii despre Skilluri</title></head>")
	write_file(path_to_file,Data,-1)
	
	format(Data,1024,"<body text=white bgcolor=black></body>")
	write_file(path_to_file,Data,-1)
	
	format(Data,1024,"<b>Rang: %s</b><br />",rangi[level[id]])
	write_file(path_to_file,Data,-1)
	
	
	format(Data,1024,"<b>Exp: %d | Intreaga exp: %d</b><br />",player_xp[id],player_xp_all[id])
	write_file(path_to_file,Data,-1)
	
	if(level[id]== sizeof(rangi)-1){
		format(Data,1024,"<b>Rang : %s | Urmatorul Rang : Ultima limita e cerul</b><br />",rangi[level[id]])
		write_file(path_to_file,Data,-1)
	}
	else
	{
		format(Data,1024,"<b>Rang : %s | Urmatorul Rang : %s (%d)</b><br />",rangi[level[id]],rangi[level[id]+1],exp[level[id]])
		write_file(path_to_file,Data,-1)
	}
	
	format(Data,1024,"<b>Razboinic %d %%</b><br />",dmg_level[id])
	write_file(path_to_file,Data,-1)
	
	format(Data,1024,"<b>Spiderman %d %%</b><br />",gravitacja[id])
	write_file(path_to_file,Data,-1)
	
	format(Data,1024,"<b>Medic , Plus %d Hp</b><br />",health[id]*4)
	write_file(path_to_file,Data,-1)
	
	format(Data,1024,"<b>Soim %d %%</b><br />",shot_time_level[id])
	write_file(path_to_file,Data,-1)
	
	format(Data,1024,"<b>Flash %d %%</b><br />",bieganie_level[id]*2)
	write_file(path_to_file,Data,-1)
	
	format(Data,1024,"<b>Nightcrowler %d</b><br />",widocznosc[id]*3)
	write_file(path_to_file,Data,-1)
	
	format(Data,1024,"<b>Bugs Bunny %d %%</b><br />",autobh[id]/2)
	write_file(path_to_file,Data,-1)
	
	format(Data,1024,"<b>Ranger %d %%</b><br />",magazynek[id]/2)
	write_file(path_to_file,Data,-1)
	
	format(Data,1024,"<b>Batman %d %%</b><br />",krytyk[id]/2)
	write_file(path_to_file,Data,-1)
	
	//format(Data,1024,"<b>Recoil mniejszy o %d %%</b><br />",recoil[id]*2)
	//write_file(path_to_file,Data,-1)
	
	format(Data,1024,"<b>Wolverine , Killul adauga %d hp</b><br />",wampiryzm[id]*2)
	write_file(path_to_file,Data,-1)
	
	//format(Data,1024,"<b>Masz %d %% na natychmiastowy reload</b><br />",natychmiastowy[id]/2)
	//write_file(path_to_file,Data,-1)
	
	format(Data,1024,"</html>")
	write_file(path_to_file,Data,-1)
	
	show_motd(id, path_to_file, "Informatii Skilluri")
	
	return PLUGIN_HANDLED
}


public pomoc(){
	ColorChat(0,GREEN,"Pentru a-ti alege abilitati pentru jucator scrie in chat /skilluri");
	set_task(120.0,"pomoc2",36)
}

public pomoc2(){
	ColorChat(0,GREEN,"Multumuri speciale lui^x03 Simeria Ionut^x04 si lui^x03 Askhanar a.k.a sPuf ?");
	set_task(200.0,"pomoc3",37)
}

public pomoc3(){
	ColorChat(0,GREEN,"Pentru a-ti reseta levelele skillurilor scrie in chat /reset");
	set_task(120.0,"pomoc",35)
}


public Koniec_Rundy(){
	for(new i = 1;i<33;i++){
		if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_CT){
			DajExp(i,get_pcvar_num(pcvar_exp_round));
			ColorChat(i,GREEN,"^x03 Ai primit %d puncte de experienta pentru ca ai supravietuit rundei",get_pcvar_num(pcvar_exp_round));
			set_hudmessage(random_num(0,255), random_num(0,255),random_num(0,255), -1.0, -1.0, 0, 6.0, 5.0, 0.0, 0.0, -1)
			show_hudmessage(i,"Ai primit %d puncte de experienta pentru ca ai supravietuit rundei",get_pcvar_num(pcvar_exp_round));
			
		}
	}
}

public addexp(id, level, cid){
	if(!cmd_access(id, level, cid, 3)){
		return PLUGIN_HANDLED;
	}
	new arg1[33];
	new arg2[10];
	read_argv(1,arg1,32);
	read_argv(2,arg2,9);
	new player = cmd_target(id, arg1, 0);
	remove_quotes(arg2);
	new exp = str_to_num(arg2);
	if(exp != 0 && exp < 0 ){
		OdejmijExp(player,exp);
	}
	else if(exp != 0 && exp > 0 ){
		DajExp(player,exp);
	}
	return PLUGIN_HANDLED;
}

public OdejmijExp(id,ile){
	player_xp[id]-=ile;
	player_xp_all[id]-=ile;
	level[id]=0;
	while(true){
		if(player_xp_all[id] >= exp[level[id]]){
			level[id]++;
			//set_hudmessage(random_num(0,255), random_num(0,255),random_num(0,255), -1.0, -1.0, 0, 6.0, 5.0, 0.0, 0.0, -1)
			//show_hudmessage(id,"Awansowales na kolejny level (%s)",rangi[level[id]]);
			//ColorChat(0,GREEN,"^x03 Awansowal do rangi ^x01 %s gratki :D",rangi[level[id]]);
		}
		else
		{
			break;
		}
	}
}

public DajExp(id,ile){
	player_xp[id]+=ile;
	player_xp_all[id]+=ile;
	new name[64];
	get_user_name(id,name,63);
	while(true){
		if(player_xp_all[id] >= exp[level[id]] && sizeof(rangi) > level[id]){
			level[id]++;
			set_hudmessage(random_num(0,255), random_num(0,255),random_num(0,255), -1.0, -1.0, 0, 6.0, 5.0, 0.0, 0.0, -1)
			show_hudmessage(id,"Ai fost promovat la urmatorul rang (%s)",rangi[level[id]]);
			ColorChat(0,GREEN,"^x03%s a fost promovat la rangul de ^x04 %s ",name,rangi[level[id]]);
			emit_sound(id,CHAN_VOICE,"dante/bb/level.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		}
		else
		{
			break;
		}
	}
}


public client_connect(id){
	health[id] = 0;
	gravitacja[id] = 0;
	dmg_level[id] = 0;
	level[id] = 0;
	player_xp[id] = 0;
	player_xp_all[id] = 0;
	shot_time_level[id] = 0;
	bieganie_level[id] = 0;
	widocznosc[id] = 0;
	autobh[id] = 0;
	magazynek[id] = 0;
	stare_id_broni[id] = 0;
	ile_dodac_magazynek[id] = 0;
	krytyk[id] = 0;
	wampiryzm[id] = 0;
	wczytaj_exp(id);
}

public client_disconnect(id){
	zapisz_exp(id);
}

public wczytaj_exp(id){
	new vaultkey[64],vaultdata[512];
	
	new authid[64];
	get_user_authid(id,authid,63);
	format(vaultkey,63,"%s",authid);
	nvault_get(zapis,vaultkey,vaultdata,511);
	replace_all(vaultdata,256,"#"," ");
	new jeden[100],dwa[100],trzy[100],cztery[100],piec[100],szesc[100],siedem[100],osiem[100],dziew[100],dzies[100],jedenascie[100],dwanascie[100]
	parse(vaultdata,jeden,99,dwa,99,trzy,99,cztery,99,piec,99,szesc,99,siedem,99,osiem,99,dziew,99,dzies,99,jedenascie,99,dwanascie,99)
	player_xp[id] = str_to_num(jeden);
	player_xp_all[id] = str_to_num(dwa);
	dmg_level[id] = str_to_num(trzy);
	gravitacja[id] = str_to_num(cztery);
	health[id] = str_to_num(piec);
	shot_time_level[id] = str_to_num(szesc);
	bieganie_level[id] = str_to_num(siedem)
	widocznosc[id] = str_to_num(osiem);
	autobh[id] = str_to_num(dziew);
	magazynek[id] = str_to_num(dzies)
	krytyk[id] = str_to_num(jedenascie)
	wampiryzm[id] = str_to_num(dwanascie);
	while(true){
		if(player_xp_all[id] >= exp[level[id]] && sizeof(rangi) > level[id]){
			level[id]++;
		}
		else
		{
			break;
		}
	}
}

public zapisz_exp(id){
	new vaultkey[64],vaultdata[512];
	
	new authid[64];
	get_user_authid(id,authid,63);
	format(vaultkey,63,"%s",authid);
	format(vaultdata,511,"%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d",player_xp[id],player_xp_all[id],dmg_level[id],gravitacja[id],health[id],shot_time_level[id],bieganie_level[id],widocznosc[id],autobh[id],magazynek[id],krytyk[id],wampiryzm[id]);
	nvault_set(zapis,vaultkey,vaultdata)
}

public ShowHUD(id)  { 
	if(is_user_alive(id)){
		new HUD[128];
			
		format(HUD, 127,"[%s] Experienta : %d | Experienta totala: %d",rangi[level[id]],player_xp[id],player_xp_all[id]);
		if(get_pcvar_num(pcvar_hud) == 0 ){
			message_begin(MSG_ONE, msgtext, {0,0,0}, id);
			write_byte(0);
			write_string(HUD); 
			message_end();
			return PLUGIN_CONTINUE;
		}
		else
		{
			set_hudmessage(255, 0, 0, 0.02, 0.63, 0, 6.0, 15.0)
			show_hudmessage(id, "%s",HUD)
		}
	}
	return PLUGIN_CONTINUE;
}

public client_PreThink(id){
	if(!is_user_alive(id)){
		return PLUGIN_CONTINUE;
	}
	if(is_user_alive(id) && !is_user_bot(id)){
		new asd,aim
		get_user_aiming(id,aim,asd);
		if(is_user_alive(aim)){
			ShowHUD(id);
		}
	}
	if(random_num(1,200) <= autobh[id]){
		new oldbuttons = get_user_oldbutton(id)
		
		oldbuttons &= ~IN_JUMP
		entity_set_int(id, EV_INT_oldbuttons, oldbuttons)
	}
	return PLUGIN_CONTINUE;
	
}

public DeathMsg()
{
	new kid = read_data(1)	//zabojca
	
	new vid = read_data(2)	// ofiara
	
	new hs = read_data(3)	// ofiara
	
	if(cs_get_user_team(kid)==CS_TEAM_CT && cs_get_user_team(vid)==CS_TEAM_T){
		DajExp(kid,get_pcvar_num(pcvar_exp_kill_tt));
		set_user_health(kid,get_user_health(kid)+(wampiryzm[kid]*2));
		new name[64];
		get_user_name(vid,name,charsmax(name));
		ColorChat(kid,TEAM_COLOR,"Ai primit %d experienta pentru uciderea lui %s",get_pcvar_num(pcvar_exp_kill_tt),name)
		if(hs == 1){
			DajExp(kid,get_pcvar_num(pcvar_exp_hs));
			ColorChat(kid,TEAM_COLOR,"Ai primit %d experienta pentru ca ai dat un HeadShot",get_pcvar_num(pcvar_exp_hs))
		}
		
	}	
	else if(cs_get_user_team(kid)==CS_TEAM_T && cs_get_user_team(vid)==CS_TEAM_CT){
		DajExp(kid,get_pcvar_num(pcvar_exp_kill_ct));
		set_user_health(kid,get_user_health(kid)+(wampiryzm[kid]*2));
		new name[64];
		get_user_name(vid,name,charsmax(name));
		ColorChat(kid,TEAM_COLOR,"Ai primit %d experienta pentru ca l-ai omorat pe %s",get_pcvar_num(pcvar_exp_kill_ct),name)
		if(hs == 1){
			DajExp(kid,get_pcvar_num(pcvar_exp_hs));
			ColorChat(kid,TEAM_COLOR,"Ai primit %d experienta pentru ca ai dat un HeadShot",get_pcvar_num(pcvar_exp_hs))
		}
	}	
}

public fwTakeDamage(this, idinflictor, idattacker,Float:damage, damagebits){
	SetHamParamFloat(4,damage+(damage*(dmg_level[idattacker]*0.01)));
	if(random_num(1,100) <= krytyk[idattacker]/2){
		SetHamParamFloat(4,damage*2);
	}
	return HAM_HANDLED;
}

public spawned(id){
	if(is_user_alive(id)){
		set_user_health(id,get_user_health(id)+(health[id]*4))
		set_user_gravity(id,1.0 - (gravitacja[id]*0.01));
		if(widocznosc[id]*3 >= 255 ){
			set_user_rendering(id,kRenderFxNone,255,255,255,kRenderTransAlpha,1)
		}
		else
		{
			set_user_rendering(id,kRenderFxNone,255,255,255,kRenderTransAlpha,255-(widocznosc[id]*3))
		}
	}
}

public Event_CurWeapon(id) 
{ 
	if(!is_user_alive(id)){
		return PLUGIN_CONTINUE
	}
	new bron=read_data(2)
	set_user_maxspeed(id,gfCSSpeeds[bron]+(gfCSSpeeds[bron]*(bieganie_level[id]*0.02)));
	ShowHUD(id);
	new Gun = read_data(2) 
	
	if(Gun==0 || Gun==6 || Gun==29 || Gun>30)
		return PLUGIN_CONTINUE		
	
	new Ammo = read_data(3) 	
	if(Weapons[id][0] == Gun && Weapons[id][1] <= Ammo)
	{
		Weapons[id][1] = Ammo 
		return PLUGIN_CONTINUE
	}
	Weapons[id][0] = Gun
	Weapons[id][1] = Ammo 
	
	new weapon[32]
	get_weaponname(Gun,weapon,31)
	new Ent = fm_find_ent_by_owner(-1,weapon,id)
	if(Ent)
	{
		new Float:Delay = get_pdata_float( Ent, 46, 4) * (1.0-(shot_time_level[id]*0.01));
		if (Delay > 0.0){
			set_pdata_float( Ent, 46, Delay, 4)	
		}
		else
		{
			set_pdata_float( Ent, 46, 0.01, 4)	
		}
	}
	return PLUGIN_CONTINUE
}
//Frome Fakemeta utility
stock fm_find_ent_by_owner(index, const classname[], owner, jghgtype = 0)
{
	new strtype[11] = "classname", ent = index
	switch (jghgtype) 
	{
		case 1: strtype = "target"
			case 2: strtype = "targetname"
		}
	
	while ((ent = engfunc(EngFunc_FindEntityByString, ent, strtype, classname)) && pev(ent, pev_owner) != owner) {}
	
	return ent
}


stock fm_get_user_weapon_entity(id, wid = 0) {
	new weap = wid, clip, ammo
	if (!weap && !(weap = get_user_weapon(id, clip, ammo)))
		return 0
	
	new class[32]
	get_weaponname(weap, class, sizeof class - 1)
	
	return fm_find_ent_by_owner(-1, class, id)
}


Trivia Bot for Alive People
Descriere :[/b] : Acesta este un plugin care pune intrebari iar daca castigi vei fi recompensat cu cate un frag ! Merge si la oamenii in viata !
Autor :[/color] : Alka

| Afiseaza codul
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <colorchat>
#include <nvault>
#include <fun>

#define PLUGIN "Trivia Bot Custom"
#define VERSION "1.1"
#define AUTHOR "Alka"

#define CharsMax(%1) sizeof %1 - 1

#define MAX_LINES 512
#define MAX_LEN 256

#define QUESTION_INTERVAL 30.0
#define QUESTION_INTERVAL_NUM 30

new List[2][MAX_LINES][MAX_LEN];
new Amount;

new Timer = QUESTION_INTERVAL_NUM;
new CurrentAnswer[128];

new bool:TriviaOnOff[33];
new TriviaPoints[33];

new const PluginTag[] = "[Serverul Tau]";

public plugin_init() {
	
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	register_clcmd("say", "HookSay");
	register_clcmd("say !top10", "ShowTriviaTop");
	register_clcmd("say !triviatop10", "ShowTriviaTop");
	register_clcmd("say !triviatop", "ShowTriviaTop");
	register_clcmd("say !triviapoints", "ShowTriviaPoints");
	register_clcmd("say !points", "ShowTriviaPoints");

	set_task(1.0, "TimeRemainingCounter", 1111, "", 0, "b", 0);

	TeamInfo = get_user_msgid("TeamInfo"); 
	SayText = get_user_msgid("SayText");  
	
}

public plugin_cfg()
{
	new ConfigsDir[64], File[64];
	new TriviaDir[64];
	
	get_configsdir(ConfigsDir, CharsMax(ConfigsDir));
	
	formatex(TriviaDir, CharsMax(TriviaDir), "%s/Trivia Bot", ConfigsDir);
	formatex(File, CharsMax(File), "%s/trivia_list.ini", TriviaDir);
	
	if(!dir_exists(TriviaDir))
	mkdir(TriviaDir);
	
	if(!file_exists(File))
	write_file(File, "", -1);
	
	new FilePointer = fopen(File, "rt");
	
	new Buffer[512];
	
	while(!feof(FilePointer))
	{
		fgets(FilePointer, Buffer, CharsMax(Buffer));
		
		if(!Buffer[0] || Buffer[0] == ';' || strlen(Buffer) < 3)
		continue;
		
		trim(Buffer);
		
		strtok(Buffer, List[0][Amount], sizeof List[][] - 1, List[1][Amount], sizeof List[][] - 1, ';', 0);
		
		Amount++;
	}
	fclose(FilePointer);
	
	server_print("%s Successfuly loaded %d lines from %s.", PluginTag, Amount, File);
	
	ShowQuestion();
}

public ShowQuestion()
{
	if(task_exists(2222))
		remove_task(2222);
	
	new RndNum = random(Amount);
	
	formatex(CurrentAnswer, CharsMax(CurrentAnswer), List[1][RndNum]);
	
	static Players[32], Num, Player;
	get_players(Players, Num, "h");
	
	for(new i = 0 ; i < Num ; i++)
	{
		Player = Players;
		
		if(!is_user_connected(Player))
			continue;
		
		if(!TriviaOnOff[Player])
			continue;
		
		ColorChat(Player, RED, "%s^x01%s", PluginTag, List[0][RndNum]);
	}
	Timer = QUESTION_INTERVAL_NUM - 1;
	
	set_task(QUESTION_INTERVAL, "ShowQuestion", 2222, "", 0, "", 0);
}

public TimeRemainingCounter()
{
	if(Timer < 0)
	return;
	
	static Players[32], Num, Player;
	get_players(Players, Num, "bh");
	
	for(new i = 0 ; i < Num ; i++)
	{
		Player = Players;
		
		if(!is_user_connected(Player))
			continue;
		
		if(!TriviaOnOff[Player])
			continue;
		
		set_hudmessage(0, 255, 0, -1.0, 0.7, 0, 1.0, 0.8, 1.0, 1.0, 4);
		show_hudmessage(Player, "%s Timp ramas pana la urmatoarea intrebare : %d", PluginTag, Timer);
		
	}
	Timer--;
}

public HookSay(id)
{
	new Args[256];
	read_args(Args, CharsMax(Args));
	
	if(containi(Args, CurrentAnswer) != -1 && TriviaOnOff[id])
	{
		TriviaPoints[id] += 1;
		new RndNum = random(2);
		
		if( RndNum )
		{
			ColorChat(id, RED, "%s^x01 Raspunsul tau a fost corect. Felicitari, ai castigat %d frag", PluginTag, RndNum);
		
			if(is_user_connected(id))
				// cs_set_user_money(id, cs_get_user_money(id) + RndNum, 0);
				set_user_frags(id, get_user_frags(id) + RndNum);
		}
		else
		{
			ColorChat(id, RED, "%s^x01 Raspunsul tau a fost corect.", PluginTag); 
		}
		ShowQuestion();
		return 1;
	}
	else if(equali(Args, "^"/trivia^"", 9))
	{
		if(!TriviaOnOff[id])
		{
			ColorChat(id, RED, "%s^x04 Acum joci Trivia !^x03 Raspunde intrebariilor si castiga^x04 Fraguri^x03 !", PluginTag);
			TriviaOnOff[id] = true;
		}
		else
		{
			ColorChat(id, RED, "%s^x04 Ai parasit Trivia, nu mai poti juca!^x03 Scrie /trivia pentru a intra iarasi in joc.", PluginTag);
			TriviaOnOff[id] = false;
		}
	}    
	return 0;
}

public client_disconnect(id)
{
	TriviaOnOff[id] = false;
	
	if(TriviaPoints[id] != 1)
	SavePoints(id);
}

public client_putinserver(id)
{
	set_task(15.0, "ShowAdvMessage", id + 3333);
	
	LoadPoints(id);
}

public ShowAdvMessage(index)
{
	index -= 3333;
	
	ColorChat(index, RED, "%s^x01 Te-ai saturat sa stai degeaba cand esti Zombie ? Tasteaza ^x04/trivia ^x01 in chat si casiga^x04 FRAGURI.", PluginTag);
}

public SavePoints(index)
{
	new Vault = nvault_open("trivia_points");
	
	new Key[64], Value[64], Name[32];
	
	get_user_name(index, Name, sizeof Name - 1);
	
	formatex(Key, sizeof Key - 1, "%s-trivia_points:", Name);
	formatex(Value, sizeof Value - 1, "%d", TriviaPoints[index]);
	
	nvault_set(Vault, Key, Value);
	nvault_close(Vault);
}

public LoadPoints(index)
{
	new Vault = nvault_open("trivia_points");
	
	new Key[64], Value[64], Name[32];
	
	get_user_name(index, Name, sizeof Name - 1);
	
	formatex(Key, sizeof Key - 1, "%s-trivia_points:", Name);
	
	nvault_get(Vault, Key, Value, sizeof Value - 1);
	nvault_close(Vault);
	
	TriviaPoints[index] = str_to_num(Value);
}

public ShowTriviaTop(id)
{
	static Sort[33][2];
	new Count;
	
	new Players[32], Num, Player;
	get_players(Players, Num);
	
	for(new i = 0 ; i < Num ; i++)
	{
		Player = Players;
		
		Sort[Count][0] = Player;
		Sort[Count][1] = TriviaPoints[Player];
		
		Count++;
	}
	
	SortCustom2D(Sort, Count, "points_compare");
	
	new Motd[1024], Len;    
	
	Len = format(Motd, sizeof Motd - 1,"<body bgcolor=#000000><font color=#98f5ff><pre>");
	Len += format(Motd[Len], (sizeof Motd - 1) - Len,"%s %-22.22s %3s^n", "#", "Name", "Trivia Points");
	
	
	new b = clamp(Count, 0, 10);
	
	new Name[32], User;
	
	for(new a = 0; a < b; a++)
	{
		User = Sort[a][0];
		
		get_user_name(User, Name, sizeof Name - 1);        
		Len += format(Motd[Len], (sizeof Motd - 1) - Len,"%d %-22.22s %d^n", a + 1, Name, Sort[a][1]);
	}
	Len += format(Motd[Len], (sizeof Motd - 1) - Len,"</body></font></pre>");
	
	show_motd(id, Motd, "Trivia Top 10");
}

public points_compare(elem1[], elem2[])
{
	if(elem1[1] > elem2[1])
		return -1;
	else if(elem1[1] < elem2[1])
		return 1;
	
	return 0;
}

public ShowTriviaPoints(id)
	ColorChat(id, RED, "%s^x04 Ai %d puncte trivia%s.", PluginTag, TriviaPoints[id], TriviaPoints[id] > 1 ? "s" : "");


BaseBuilder + Claim
Descriere :[/b] : Acesta este pluginul de baza al BaseBuilder-ului doar ca are CLAIM pentru toti jucatorii . Posibil sa mai aibe cateva modificari gen meniul sa nu mai fie alb ci galben , in orice caz legate de aspect , subtitrare + imbunatatire
Autor :[/color] : Tirant + e t n a d (modificari minore , adica claimul ... fix pix )

SMA :
| Afiseaza codul
/*
Base Builder Zombie Mod
Tirant

Version 6.5 Pub
*/

#include <amxmodx>
#include <amxmisc>
#include <credits>
#include <cstrike>
#include <fun>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <csx>

//Enable this only if you have bought the credits plugin
//#define BB_CREDITS

#define FLAGS_BUILD 	ADMIN_KICK
#define FLAGS_LOCK 	ADMIN_ALL
#define FLAGS_BUILDBAN 	ADMIN_KICK
#define FLAGS_SWAP 	ADMIN_KICK
#define FLAGS_REVIVE 	ADMIN_KICK
#define FLAGS_GUNS 	ADMIN_LEVEL_A
#define FLAGS_RELEASE 	ADMIN_BAN
#define FLAGS_OVERRIDE 	ADMIN_BAN

#define VERSION "6.6"
#define MODNAME "^x01 [^x04 BaseBuilder^x01 ]"

#define LockBlock(%1,%2)  	( entity_set_int( %1, EV_INT_iuser1,     %2 ) )
#define UnlockBlock(%1)   	( entity_set_int( %1, EV_INT_iuser1,     0  ) )
#define BlockLocker(%1)   	( entity_get_int( %1, EV_INT_iuser1         ) )

#define MovingEnt(%1)     	( entity_set_int( %1, EV_INT_iuser2,     1 ) )
#define UnmovingEnt(%1)   	( entity_set_int( %1, EV_INT_iuser2,     0 ) )
#define IsMovingEnt(%1)   	( entity_get_int( %1, EV_INT_iuser2 ) == 1 )

#define SetEntMover(%1,%2)  	( entity_set_int( %1, EV_INT_iuser3, %2 ) )
#define UnsetEntMover(%1)   	( entity_set_int( %1, EV_INT_iuser3, 0  ) )
#define GetEntMover(%1)   	( entity_get_int( %1, EV_INT_iuser3     ) )

#define SetLastMover(%1,%2)  	( entity_set_int( %1, EV_INT_iuser4, %2 ) )
#define UnsetLastMover(%1)   	( entity_set_int( %1, EV_INT_iuser4, 0  ) )
#define GetLastMover(%1)  	( entity_get_int( %1, EV_INT_iuser4     ) )

#define MAXPLAYERS 32
#define MAXENTS 1024
#define AMMO_SLOT 376
#define MODELCHANGE_DELAY 0.5
#define AUTO_TEAM_JOIN_DELAY 0.1
#define TEAM_SELECT_VGUI_MENU_ID 2
#define OBJECT_PUSHPULLRATE 4.0
#define HUD_FRIEND_HEIGHT 0.30

#define BARRIER_COLOR 0.0, 0.0, 255.0
#define BARRIER_RENDERAMT 150.0

#define BLOCK_RENDERAMT 150.0

#define LOCKED_COLOR 125.0, 0.0, 0.0
#define LOCKED_RENDERAMT 225.0

const ZOMBIE_ALLOWED_WEAPONS_BITSUM = (1<<CSW_KNIFE)
#define OFFSET_WPN_WIN 	  41
#define OFFSET_WPN_LINUX  4

#define OFFSET_ACTIVE_ITEM 373
#define OFFSET_LINUX 5

#if cellbits == 32
	#define OFFSET_BUYZONE 235
#else
	#define OFFSET_BUYZONE 268
#endif

new g_iMaxPlayers
new g_msgSayText, g_msgStatusText
new g_HudSync

new g_isConnected[MAXPLAYERS+1]
new g_isAlive[MAXPLAYERS+1]
new g_isZombie[MAXPLAYERS+1]
new g_isBuildBan[MAXPLAYERS+1]
new g_isCustomModel[MAXPLAYERS+1]

enum (+= 5000)
{
	TASK_BUILD = 10000,
	TASK_PREPTIME,
	TASK_MODELSET,
	TASK_RESPAWN,
	TASK_HEALTH,
	TASK_IDLESOUND
}

//Custom Sounds
new g_szRoundStart[][] = 
{
	"basebuilder/round_start.wav",
	"basebuilder/round_start2.wav"
}

#define WIN_ZOMBIES 	"basebuilder/win_zombies2.wav"
#define WIN_BUILDERS 	"basebuilder/win_builders2.wav"

#define PHASE_PREP 	"basebuilder/phase_prep3.wav"
#define PHASE_BUILD 	"basebuilder/phase_build3.wav"

#define LOCK_OBJECT 	"buttons/lightswitch2.wav"
#define LOCK_FAIL	"buttons/button10.wav"

#define GRAB_START	"basebuilder/block_grab.wav"
#define GRAB_STOP	"basebuilder/block_drop.wav"

#define INFECTION	"basebuilder/zombie_kill1.wav"

new const g_szZombiePain[][] =
{
	"basebuilder/zombie/pain/pain1.wav",
	"basebuilder/zombie/pain/pain2.wav",
	"basebuilder/zombie/pain/pain3.wav"
}

new const g_szZombieDie[][] =
{
	"basebuilder/zombie/death/death1.wav",
	"basebuilder/zombie/death/death2.wav",
	"basebuilder/zombie/death/death3.wav"
}

new const g_szZombieIdle[][] =
{
	"basebuilder/zombie/idle/idle1.wav",
	"basebuilder/zombie/idle/idle2.wav",
	"basebuilder/zombie/idle/idle3.wav"
}

new const g_szZombieHit[][] =
{
	"basebuilder/zombie/hit/hit1.wav",
	"basebuilder/zombie/hit/hit1.wav",
	"basebuilder/zombie/hit/hit1.wav"
}

new const g_szZombieMiss[][] =
{
	"basebuilder/zombie/miss/miss1.wav",
	"basebuilder/zombie/miss/miss2.wav",
	"basebuilder/zombie/miss/miss3.wav"
}

//Custom Player Models
new Float:g_fModelsTargetTime, Float:g_fRoundStartTime
new g_szPlayerModel[MAXPLAYERS+1][32]

//Game Name
new g_szModName[32]

new g_iCountDown, g_iEntBarrier
new bool:g_boolCanBuild, bool:g_boolPrepTime, bool:g_boolRoundEnded
new g_iFriend[MAXPLAYERS+1]
new CsTeams:g_iTeam[MAXPLAYERS+1], CsTeams:g_iCurTeam[MAXPLAYERS+1]
new bool:g_boolFirstTeam[MAXPLAYERS+1]

//Building Stores
new Float:g_fOffset1[MAXPLAYERS+1], Float:g_fOffset2[MAXPLAYERS+1], Float:g_fOffset3[MAXPLAYERS+1]
new g_iOwnedEnt[MAXPLAYERS+1], g_iOwnedEntities[MAXPLAYERS+1]
new Float:g_fEntDist[MAXPLAYERS+1]

static const g_szWpnEntNames[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
			"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
			"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
			"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
			"weapon_ak47", "weapon_knife", "weapon_p90" }
			
//Weapon Names (For Guns Menu)
static const szWeaponNames[24][23] = { "Arc", "XM1014 M4", "Ingram MAC-10", "AuG", "UMP 45", "Auto-Sniper 1",
			"GaLiL", "FaMaS", "PoLaR [AwP]", "MP5", "Ciuruitoare", "ShoTguN", "M4A1",
			"Schmidt TMP", "Auto-Sniper 2", "SG-552 Commando", "Ak-47", "ES P90", "P228 Compact",
			"Pistoale Duble", "Fiveseven", "UsP", "Glock", "DeagLe" }
			
#define MAX_COLORS 24
new const Float:g_fColor[MAX_COLORS][3] = 
{
	{200.0, 000.0, 000.0},
	{255.0, 083.0, 073.0},
	{255.0, 117.0, 056.0},
	{255.0, 174.0, 066.0},
	{255.0, 207.0, 171.0},
	{252.0, 232.0, 131.0},
	{254.0, 254.0, 034.0},
	{059.0, 176.0, 143.0},
	{197.0, 227.0, 132.0},
	{000.0, 150.0, 000.0},
	{120.0, 219.0, 226.0},
	{135.0, 206.0, 235.0},
	{128.0, 218.0, 235.0},
	{000.0, 000.0, 255.0},
	{146.0, 110.0, 174.0},
	{255.0, 105.0, 180.0},
	{246.0, 100.0, 175.0},
	{205.0, 074.0, 076.0},
	{250.0, 167.0, 108.0},
	{234.0, 126.0, 093.0},
	{180.0, 103.0, 077.0},
	{149.0, 145.0, 140.0},
	{000.0, 000.0, 000.0},
	{255.0, 255.0, 255.0}
}

new const Float:g_fRenderAmt[MAX_COLORS] = 
{
	100.0, //Red
	135.0, //Red Orange
	140.0, //Orange
	120.0, //Yellow Orange
	140.0, //Peach
	125.0, //Yellow
	100.0, //Lemon Yellow
	125.0, //Jungle Green
	135.0, //Yellow Green
	100.0, //Green
	125.0, //Aquamarine
	150.0, //Baby Blue
	090.0, //Sky Blue
	075.0, //Blue
	175.0, //Violet
	150.0, //Hot Pink
	175.0, //Magenta
	140.0, //Mahogany
	140.0, //Tan
	140.0, //Light Brown
	165.0, //Brown
	175.0, //Gray
	125.0, //Black
	125.0   //White
}

new const g_szColorName[MAX_COLORS][] = 
{
	"Rosu",
	"Portocaliu Inchis",
	"Portocaliu",
	"Galben Inchis",
	"Portocaliu Deschis",
	"Galben",
	"Galben Aprins",
	"Verde Albastrui",
	"Verde Deschis",
	"Verde",
	"Albastrul Apei",
	"Albastru Deschis",
	"Albastrul Cerului",
	"Albastru",
	"Violet",
	"Roz",
	"Roz Deschis",
	"Rosu Deschis",
	"Maro Deschis",
	"Maro Aprins",
	"Maro",
	"Gry",
	"Negru",
	"Alb"
}

enum
{
	COLOR_RED = 0, 		//200, 000, 000
	COLOR_REDORANGE, 	//255, 083, 073
	COLOR_ORANGE, 		//255, 117, 056
	COLOR_YELLOWORANGE, 	//255, 174, 066
	COLOR_PEACH, 		//255, 207, 171
	COLOR_YELLOW, 		//252, 232, 131
	COLOR_LEMONYELLOW, 	//254, 254, 034
	COLOR_JUNGLEGREEN, 	//059, 176, 143
	COLOR_YELLOWGREEN, 	//197, 227, 132
	COLOR_GREEN, 		//000, 200, 000
	COLOR_AQUAMARINE, 	//120, 219, 226
	COLOR_BABYBLUE, 		//135, 206, 235
	COLOR_SKYBLUE, 		//128, 218, 235
	COLOR_BLUE, 		//000, 000, 200
	COLOR_VIOLET, 		//146, 110, 174
	COLOR_PINK, 		//255, 105, 180
	COLOR_MAGENTA, 		//246, 100, 175
	COLOR_MAHOGANY,		//205, 074, 076
	COLOR_TAN, 		//250, 167, 108
	COLOR_LIGHTBROWN, 	//234, 126, 093
	COLOR_BROWN, 		//180, 103, 077
	COLOR_GRAY, 		//149, 145, 140
	COLOR_BLACK, 		//000, 000, 000
	COLOR_WHITE 		//255, 255, 255
}

new g_iColor[MAXPLAYERS+1]
new g_iColorOwner[MAX_COLORS]

//Color Menu
new g_iMenuOffset[MAXPLAYERS+1], g_iMenuOptions[MAXPLAYERS+1][8], g_iWeaponPicked[2][MAXPLAYERS+1],
	g_iPrimaryWeapon[MAXPLAYERS+1]
	
new bool:g_boolFirstTime[MAXPLAYERS+1], bool:g_boolRepick[MAXPLAYERS+1]

new Float:g_fBuildDelay[MAXPLAYERS+1]
#define BUILD_DELAY 0.75

#define KEYS_GENERIC (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)

enum
{
	ATT_HEALTH = 0,
	ATT_SPEED,
	ATT_GRAVITY
}

//Zombie Classes
new g_iZClasses
new g_iZombieClass[MAXPLAYERS+1]
new bool:g_boolFirstSpawn[MAXPLAYERS+1]
new g_szPlayerClass[MAXPLAYERS+1][32]
new g_iNextClass[MAXPLAYERS+1]
new Float:g_fPlayerSpeed[MAXPLAYERS+1]
new bool:g_boolArraysCreated
new Array:g_zclass_name
new Array:g_zclass_info
new Array:g_zclass_modelsstart // start position in models array
new Array:g_zclass_modelsend // end position in models array
new Array:g_zclass_playermodel // player models array
new Array:g_zclass_modelindex // model indices array
new Array:g_zclass_clawmodel
new Array:g_zclass_hp
new Array:g_zclass_spd
new Array:g_zclass_grav
new Array:g_zclass_admin
new Array:g_zclass_credits
//new Float:g_fClassMultiplier[MAXPLAYERS+1][3]

new Array:g_zclass2_realname, Array:g_zclass2_name, Array:g_zclass2_info,
Array:g_zclass2_modelsstart, Array:g_zclass2_modelsend, Array:g_zclass2_playermodel,
Array:g_zclass2_clawmodel, Array:g_zclass2_hp, Array:g_zclass2_spd,
Array:g_zclass2_grav, Array:g_zclass2_admin, Array:g_zclass2_credits, Array:g_zclass_new

//Forwards
new g_fwRoundStart, g_fwPrepStarted, g_fwBuildStarted, g_fwClassPicked, g_fwClassSet,
g_fwPushPull, g_fwGrabEnt_Pre, g_fwGrabEnt_Post, g_fwDropEnt_Pre,
 g_fwDropEnt_Post, g_fwNewColor, g_fwLockEnt_Pre, g_fwLockEnt_Post, g_fwDummyResult

 //Cvars
new g_pcvar_buildtime, g_iBuildTime,
	g_pcvar_preptime, g_iPrepTime,
	g_pcvar_givenades, g_iGrenadeHE, g_iGrenadeFLASH, g_iGrenadeSMOKE,
	g_pcvar_entmindist, Float: g_fEntMinDist,
	g_pcvar_entsetdist, Float: g_fEntSetDist,
	g_pcvar_entmaxdist, Float: g_fEntMaxDist,
	g_pcvar_resetent, g_iResetEnt,
	g_pcvar_showmovers, g_iShowMovers,
	g_pcvar_lockblocks, g_iLockBlocks,
	g_pcvar_lockmax, g_iLockMax,
	g_pcvar_colormode, g_iColorMode,
	g_pcvar_zombietime, g_iZombieTime,
	g_pcvar_infecttime, g_iInfectTime,
	g_pcvar_supercut, g_iSupercut,
	g_pcvar_gunsmenu, g_iGunsMenu,
	g_pcvar_enabled,
	g_pcvar_allowedweps
 
public plugin_precache()
{
	server_cmd("bb_credits_active 0")
	
	register_plugin("Base Builder", VERSION, "Tirant + e t n a d update")
	register_cvar("base_builder", VERSION, FCVAR_SPONLY|FCVAR_SERVER)
	set_cvar_string("base_builder", VERSION)
	
	g_pcvar_enabled = register_cvar("bb_enabled", "1")
	
	if (!get_pcvar_num(g_pcvar_enabled))
		return;

	new szCache[64], i;
		
	g_pcvar_buildtime = register_cvar("bb_buildtime", "180") //Build Time
	g_iBuildTime = clamp(get_pcvar_num(g_pcvar_buildtime), 30, 300)
	g_pcvar_preptime = register_cvar("bb_preptime", "30") //Prep Time
	g_iPrepTime = clamp(get_pcvar_num(g_pcvar_preptime), 0, 60)
	g_pcvar_zombietime = register_cvar("bb_zombie_respawn_delay", "3") //Zombie Respawn Delay
	g_iZombieTime = clamp(get_pcvar_num(g_pcvar_zombietime), 1, 30)
	g_pcvar_infecttime = register_cvar("bb_infection_respawn", "0") //Survivor Respawn Infection Delay
	g_iInfectTime = clamp(get_pcvar_num(g_pcvar_infecttime), 0, 30)
	g_pcvar_showmovers = register_cvar("bb_showmovers", "1") //Show Movers
	g_iShowMovers = clamp(get_pcvar_num(g_pcvar_showmovers), 0, 1)
	g_pcvar_lockblocks = register_cvar("bb_lockblocks", "1") //Lock blocks
	g_iLockBlocks = clamp(get_pcvar_num(g_pcvar_lockblocks), 0, 1)
	g_pcvar_lockmax = register_cvar("bb_lockmax", "15") //Lock max
	g_iLockMax = clamp(get_pcvar_num(g_pcvar_lockmax), 0, 50)
	g_pcvar_colormode = register_cvar("bb_colormode", "1") //Color mode <0/1/2> Menu, one color per player, random
	g_iColorMode = clamp(get_pcvar_num(g_pcvar_colormode), 0, 2)
	g_pcvar_entmaxdist = register_cvar("bb_max_move_dist", "768") //Push ceiling
	g_fEntMaxDist = get_pcvar_float(g_pcvar_entmaxdist)
	g_pcvar_entmindist = register_cvar("bb_min_move_dist", "32") //Pull floor
	g_fEntMinDist = get_pcvar_float(g_pcvar_entmindist)
	g_pcvar_entsetdist = register_cvar("bb_min_dist_set", "64") //Grab set
	g_fEntSetDist = get_pcvar_float(g_pcvar_entsetdist)
	g_pcvar_resetent = register_cvar("bb_resetblocks", "1") //Reset blocks on new round
	g_iResetEnt = clamp(get_pcvar_num(g_pcvar_resetent), 0, 1)
	g_pcvar_supercut = register_cvar("bb_zombie_supercut", "0") //One hit kill for zombies
	g_iSupercut = clamp(get_pcvar_num(g_pcvar_supercut), 0, 1)
	g_pcvar_gunsmenu = register_cvar("bb_gunsmenu", "1") //Use the internal guns menu
	g_iGunsMenu = clamp(get_pcvar_num(g_pcvar_gunsmenu), 0, 1)
	
	g_pcvar_givenades = register_cvar("bb_roundnades","hsf") //Grenades
	g_pcvar_allowedweps = register_cvar("bb_weapons","adghijmqtvx")
	
	get_pcvar_string(g_pcvar_givenades, szCache, sizeof szCache - 1)
	for (i=0; i<strlen(szCache);i++)
	{
		switch(szCache)
		{
			case 'h': g_iGrenadeHE++
			case 'f': g_iGrenadeFLASH++
			case 's': g_iGrenadeSMOKE++
		}
	}
	
	for (i=0; i<sizeof g_szRoundStart; i++) 	precache_sound(g_szRoundStart[i])
	for (i=0; i<sizeof g_szZombiePain;i++) 	precache_sound(g_szZombiePain[i])
	for (i=0; i<sizeof g_szZombieDie;i++) 	precache_sound(g_szZombieDie[i])
	for (i=0; i<sizeof g_szZombieIdle;i++) 	precache_sound(g_szZombieIdle[i])
	for (i=0; i<sizeof g_szZombieHit;i++) 	precache_sound(g_szZombieHit[i])
	for (i=0; i<sizeof g_szZombieMiss;i++) 	precache_sound(g_szZombieMiss[i])
	
	precache_sound(WIN_ZOMBIES)
	precache_sound(WIN_BUILDERS)
	precache_sound(PHASE_BUILD)
	precache_sound(PHASE_PREP)
	precache_sound(LOCK_OBJECT)
	precache_sound(LOCK_FAIL)
	precache_sound(GRAB_START)
	precache_sound(GRAB_STOP)
	if (g_iInfectTime)
		precache_sound(INFECTION)
	
	i = create_entity("info_bomb_target");
	entity_set_origin(i, Float:{8192.0,8192.0,8192.0})
	
	i = create_entity("info_map_parameters");
	DispatchKeyValue(i, "buying", "3");
	DispatchKeyValue(i, "bombradius", "1");
	DispatchSpawn(i);
	
	g_zclass_name = ArrayCreate(32, 1)
	g_zclass_info = ArrayCreate(32, 1)
	g_zclass_modelsstart = ArrayCreate(1, 1)
	g_zclass_modelsend = ArrayCreate(1, 1)
	g_zclass_playermodel = ArrayCreate(32, 1)
	g_zclass_modelindex = ArrayCreate(1, 1)
	g_zclass_clawmodel = ArrayCreate(32, 1)
	g_zclass_hp = ArrayCreate(1, 1)
	g_zclass_spd = ArrayCreate(1, 1)
	g_zclass_grav = ArrayCreate(1, 1)
	g_zclass_admin = ArrayCreate(1, 1)
	g_zclass_credits = ArrayCreate(1, 1)
	
	g_zclass2_realname = ArrayCreate(32, 1)
	g_zclass2_name = ArrayCreate(32, 1)
	g_zclass2_info = ArrayCreate(32, 1)
	g_zclass2_modelsstart = ArrayCreate(1, 1)
	g_zclass2_modelsend = ArrayCreate(1, 1)
	g_zclass2_playermodel = ArrayCreate(32, 1)
	g_zclass2_clawmodel = ArrayCreate(32, 1)
	g_zclass2_hp = ArrayCreate(1, 1)
	g_zclass2_spd = ArrayCreate(1, 1)
	g_zclass2_grav = ArrayCreate(1, 1)
	g_zclass2_admin = ArrayCreate(1, 1)
	g_zclass2_credits = ArrayCreate(1, 1)
	g_zclass_new = ArrayCreate(1, 1)
	
	g_boolArraysCreated = true
	
	return;
}

public plugin_cfg()
{
	g_boolArraysCreated = false
}

public plugin_init()
{
	if (!get_pcvar_num(g_pcvar_enabled))
		return;
		
	formatex(g_szModName, charsmax(g_szModName), "Base Builder %s", VERSION)
	
	register_clcmd("say", 	   	"cmdSay");
	register_clcmd("say_team",	"cmdSay");
	
	//Added for old users
	register_clcmd("+grab",		"cmdGrabEnt");
	register_clcmd("-grab",		"cmdStopEnt");
	
	register_clcmd("bb_lock",	"cmdLockBlock",0, " - Aim at a block to lock it");
	register_clcmd("bb_claim",	"cmdLockBlock",0, " - Aim at a block to lock it");
	
	register_clcmd("bb_buildban",	"cmdBuildBan",0, " <player>");
	register_clcmd("bb_unbuildban",	"cmdBuildBan",0, " <player>");
	register_clcmd("bb_bban",	"cmdBuildBan",0, " <player>");
	
	register_clcmd("bb_swap",	"cmdSwap",0, " <player>");
	register_clcmd("bb_revive",	"cmdRevive",0, " <player>");
	if (g_iGunsMenu) register_clcmd("bb_guns",	"cmdGuns",0, " <player>");
	register_clcmd("bb_startround",	"cmdStartRound",0, " - Starts the round");
	
	register_logevent("logevent_round_start",2, 	"1=Round_Start")
	register_logevent("logevent_round_end", 2, 	"1=Round_End")
	
	register_message(get_user_msgid("TextMsg"), 	"msgRoundEnd")
	register_message(get_user_msgid("TextMsg"),	"msgSendAudio")
	register_message(get_user_msgid("StatusIcon"), 	"msgStatusIcon");
	register_message(get_user_msgid("Health"), 	"msgHealth");
	register_message(get_user_msgid("StatusValue"), 	"msgStatusValue")
	register_message(get_user_msgid("TeamInfo"), 	"msgTeamInfo");
	
	register_menucmd(register_menuid("ColorsSelect"),KEYS_GENERIC,"colors_pushed")
	register_menucmd(register_menuid("ZClassSelect"),KEYS_GENERIC,"zclass_pushed")
	if (g_iGunsMenu)
	{
		register_menucmd(register_menuid("WeaponMethodMenu"),(1<<0)|(1<<1)|(1<<2),"weapon_method_pushed")
		register_menucmd(register_menuid("PrimaryWeaponSelect"),KEYS_GENERIC,"prim_weapons_pushed")
		register_menucmd(register_menuid("SecWeaponSelect"),KEYS_GENERIC,"sec_weapons_pushed")
	}
	
	register_event("HLTV", 		"ev_RoundStart", "a", "1=0", "2=0")
	register_event("AmmoX", 		"ev_AmmoX", 	 "be", "1=1", "1=2", "1=3", "1=4", "1=5", "1=6", "1=7", "1=8", "1=9", "1=10")
	register_event("Health",   	"ev_Health", 	 "be", "1>0");
	register_event("StatusValue", 	"ev_SetTeam", 	 "be", "1=1");
	register_event("StatusValue", 	"ev_ShowStatus", "be", "1=2", "2!0");
	register_event("StatusValue", 	"ev_HideStatus", "be", "1=1", "2=0");

	RegisterHam(Ham_Touch, 		"weapon_shield","ham_WeaponCleaner_Post", 1)
	RegisterHam(Ham_Touch, 		"weaponbox",  	"ham_WeaponCleaner_Post", 1)
	RegisterHam(Ham_Spawn, 		"player", 	"ham_PlayerSpawn_Post", 1)
	RegisterHam(Ham_TakeDamage, 	"player", 	"ham_TakeDamage")
	for (new i = 1; i < sizeof g_szWpnEntNames; i++)
		if (g_szWpnEntNames[i][0]) RegisterHam(Ham_Item_Deploy, g_szWpnEntNames[i], "ham_ItemDeploy_Post", 1)
	
	register_forward(FM_GetGameDescription, 		"fw_GetGameDescription")
	register_forward(FM_SetClientKeyValue, 		"fw_SetClientKeyValue")
	register_forward(FM_ClientUserInfoChanged, 	"fw_ClientUserInfoChanged")
	register_forward(FM_CmdStart, 			"fw_CmdStart");
	register_forward(FM_PlayerPreThink, 		"fw_PlayerPreThink")
	register_forward(FM_EmitSound,			"fw_EmitSound")
	register_forward(FM_ClientKill,			"fw_Suicide")
	if (g_iShowMovers)
		register_forward(FM_TraceLine, 		"fw_Traceline")
	
	register_clcmd("drop", "clcmd_drop")
	register_clcmd("buy", "clcmd_buy")
	
	//Team Handlers
	register_clcmd("chooseteam",	"clcmd_changeteam")
	register_clcmd("jointeam", 	"clcmd_changeteam")
	register_message(get_user_msgid("ShowMenu"), "message_show_menu")
	register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu")
	
	set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
	
	g_iMaxPlayers = get_maxplayers()
	g_HudSync = CreateHudSyncObj();
	g_msgSayText = get_user_msgid("SayText")
	g_msgStatusText = get_user_msgid("StatusText");
	
	g_iEntBarrier = find_ent_by_tname( -1, "barrier" );
	
	//Custom Forwards
	g_fwRoundStart = CreateMultiForward("bb_round_started", ET_IGNORE)
	g_fwPrepStarted = CreateMultiForward("bb_prepphase_started", ET_IGNORE)
	g_fwBuildStarted = CreateMultiForward("bb_buildphase_started", ET_IGNORE)
	g_fwClassPicked = CreateMultiForward("bb_zombie_class_picked", ET_IGNORE, FP_CELL, FP_CELL)
	g_fwClassSet = CreateMultiForward("bb_zombie_class_set", ET_IGNORE, FP_CELL, FP_CELL)
	g_fwPushPull = CreateMultiForward("bb_block_pushpull", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL)
	g_fwGrabEnt_Pre = CreateMultiForward("bb_grab_pre", ET_IGNORE, FP_CELL, FP_CELL)
	g_fwGrabEnt_Post = CreateMultiForward("bb_grab_post", ET_IGNORE, FP_CELL, FP_CELL)
	g_fwDropEnt_Pre = CreateMultiForward("bb_drop_pre", ET_IGNORE, FP_CELL, FP_CELL)
	g_fwDropEnt_Post = CreateMultiForward("bb_drop_post", ET_IGNORE, FP_CELL, FP_CELL)
	g_fwNewColor = CreateMultiForward("bb_new_color", ET_IGNORE, FP_CELL, FP_CELL)
	g_fwLockEnt_Pre = CreateMultiForward("bb_lock_pre", ET_IGNORE, FP_CELL, FP_CELL)
	g_fwLockEnt_Post = CreateMultiForward("bb_lock_post", ET_IGNORE, FP_CELL, FP_CELL)
	
	register_dictionary("basebuilder.txt");
}

public plugin_natives()
{
	register_native("bb_register_zombie_class","native_register_zombie_class", 1)
	
	register_native("bb_get_class_cost","native_get_class_cost", 1)
	register_native("bb_get_user_zombie_class","native_get_user_zombie_class", 1)
	register_native("bb_get_user_next_class","native_get_user_next_class", 1)
	register_native("bb_set_user_zombie_class","native_set_user_zombie_class", 1)
	
	
	register_native("bb_is_user_zombie","native_is_user_zombie", 1)
	register_native("bb_is_user_banned","native_is_user_banned", 1)
	
	register_native("bb_is_build_phase","native_bool_buildphase", 1)
	register_native("bb_is_prep_phase","native_bool_prepphase", 1)
	
	register_native("bb_get_build_time","native_get_build_time", 1)
	register_native("bb_set_build_time","native_set_build_time", 1)
	
	register_native("bb_get_user_color","native_get_user_color", 1)
	register_native("bb_set_user_color","native_set_user_color", 1)
	
	register_native("bb_drop_user_block","native_drop_user_block", 1)
	register_native("bb_get_user_block","native_get_user_block", 1)
	register_native("bb_set_user_block","native_set_user_block", 1)
	
	register_native("bb_is_locked_block","native_is_locked_block", 1)
	register_native("bb_lock_block","native_lock_block", 1)
	register_native("bb_unlock_block","native_unlock_block", 1)
	
	register_native("bb_release_zombies","native_release_zombies", 1)
	
	register_native("bb_set_user_primary","native_set_user_primary", 1)
	register_native("bb_get_user_primary","native_get_user_primary", 1)
	
	register_native("bb_get_flags_build","native_get_flags_build", 1)
	register_native("bb_get_flags_lock","native_get_flags_lock", 1)
	register_native("bb_get_flags_buildban","native_get_flags_buildban", 1)
	register_native("bb_get_flags_swap","native_get_flags_swap", 1)
	register_native("bb_get_flags_revive","native_get_flags_revive", 1)
	register_native("bb_get_flags_guns","native_get_flags_guns", 1)
	register_native("bb_get_flags_release","native_get_flags_release", 1)
	register_native("bb_get_flags_override","native_get_flags_override", 1)
	
	//register_native("bb_set_user_mult","native_set_user_mult", 1)
	
	//ZP Natives Converted
	register_native("zp_register_zombie_class","native_register_zombie_class", 1)
	register_native("zp_get_user_zombie_class","native_get_user_zombie_class", 1)
	register_native("zp_get_user_next_class","native_get_user_next_class", 1)
	register_native("zp_set_user_zombie_class","native_set_user_zombie_class", 1)
	register_native("zp_get_user_zombie","native_is_user_zombie", 1)
}

public fw_GetGameDescription()
{
	forward_return(FMV_STRING, g_szModName)
	return FMRES_SUPERCEDE;
}

public client_putinserver(id)
{
	if (!is_user_connected(id))
		return PLUGIN_HANDLED;
		
	g_isConnected[id] = true
	g_isAlive[id] = false
	g_isZombie[id] = false
	g_isBuildBan[id] = false
	g_isCustomModel[id] = false
	g_boolFirstSpawn[id] = true
	g_boolFirstTeam[id] = false
	g_boolFirstTime[id] = true
	g_boolRepick[id] = true
	
	g_iZombieClass[id] = 0
	g_iNextClass[id] = g_iZombieClass[id]
	//for (new i = 0; i < 3; i++) g_fClassMultiplier[id][i] = 1.0
	
	set_task(7.0,"Respawn_Player",id+TASK_RESPAWN);
	
	return PLUGIN_CONTINUE;
}

public client_disconnect(id)
{
	if (g_iOwnedEnt[id])
		cmdStopEnt(id)

	g_isConnected[id] = false
	g_isAlive[id] = false
	g_isZombie[id] = false
	g_isBuildBan[id] = false
	g_isCustomModel[id] = false
	g_boolFirstSpawn[id] = false
	g_boolFirstTeam[id] = false
	g_boolFirstTime[id] = false
	g_boolRepick[id] = false
	
	g_iZombieClass[id] = 0
	g_iNextClass[id] = 0
	//for (new i = 0; i < 3; i++) g_fClassMultiplier[id][i] = 1.0
	
	g_iOwnedEntities[id] = 0
	
	remove_task(id+TASK_RESPAWN)
	remove_task(id+TASK_HEALTH)
	remove_task(id+TASK_IDLESOUND)
	
	for (new iEnt = g_iMaxPlayers+1; iEnt < MAXENTS; iEnt++)
	{
		if (is_valid_ent(iEnt) && g_iLockBlocks && BlockLocker(iEnt) == id)
		{
			UnlockBlock(iEnt)
			set_pev(iEnt,pev_rendermode,kRenderNormal)
				
			UnsetLastMover(iEnt);
			UnsetEntMover(iEnt);
		}
	}
}  

public ev_RoundStart()
{
	remove_task(TASK_BUILD)
	remove_task(TASK_PREPTIME)
	
	arrayset(g_iOwnedEntities, 0, MAXPLAYERS+1)
	arrayset(g_iColor, 0, MAXPLAYERS+1)
	arrayset(g_iColorOwner, 0, MAX_COLORS)
	arrayset(g_boolRepick, true, MAXPLAYERS+1)
	
	g_boolRoundEnded = false
	g_boolCanBuild = true
	g_fRoundStartTime = get_gametime()
	
	if (g_iResetEnt)
	{
		new szClass[10], szTarget[7];
		for (new iEnt = g_iMaxPlayers+1; iEnt < MAXENTS; iEnt++)
		{
			if (is_valid_ent(iEnt))
			{
				entity_get_string(iEnt, EV_SZ_classname, szClass, 9);
				entity_get_string(iEnt, EV_SZ_targetname, szTarget, 6);
				if (!BlockLocker(iEnt) && iEnt != g_iEntBarrier && equal(szClass, "func_wall") && !equal(szTarget, "ignore"))
				{
					set_pev(iEnt,pev_rendermode,kRenderNormal)
					engfunc( EngFunc_SetOrigin, iEnt, Float:{ 0.0, 0.0, 0.0 } );
					
					UnsetLastMover(iEnt);
					UnsetEntMover(iEnt);
				}
				else if (g_iLockBlocks && BlockLocker(iEnt))
				{
					UnlockBlock(iEnt)
					set_pev(iEnt,pev_rendermode,kRenderNormal)
					engfunc( EngFunc_SetOrigin, iEnt, Float:{ 0.0, 0.0, 0.0 } );
					
					UnsetLastMover(iEnt);
					UnsetEntMover(iEnt);
				}
			}
		}
	}
}

public ev_AmmoX(id)
	set_pdata_int(id, AMMO_SLOT + read_data(1), 200, 5)

public ev_Health(taskid)
{
	if (taskid>g_iMaxPlayers)
		taskid-=TASK_HEALTH
		
	if (is_user_alive(taskid))
	{
		new szGoal[32]
		//if (is_credits_active())
		#if defined BB_CREDITS
			format(szGoal, 31, "^n%L: %d", LANG_SERVER, "HUD_GOAL", credits_get_user_goal(taskid))
		#endif
		
		set_hudmessage(255, 255, 255, -1.0, 0.9, 0, 12.0, 12.0, 0.1, 0.2, 4);
		if (g_isZombie[taskid])
		{
			static szCache1[32]
			ArrayGetString(g_zclass_name, g_iZombieClass[taskid], szCache1, charsmax(szCache1))
		
			show_hudmessage(taskid, "%L: %d^n%L: %s%s", LANG_SERVER, "HUD_HEALTH", pev(taskid, pev_health), LANG_SERVER, "HUD_CLASS", szCache1, szGoal);
		}
		else
		{
			show_hudmessage(taskid, "%L: %d%s", LANG_SERVER, "HUD_HEALTH", pev(taskid, pev_health), szGoal);
		}
		
		set_task(11.9, "ev_Health", taskid+TASK_HEALTH);
	}
}

public msgStatusIcon(const iMsgId, const iMsgDest, const iPlayer)
{
	if(g_isAlive[iPlayer] && g_isConnected[iPlayer]) 
	{
		static szMsg[8]
		get_msg_arg_string(2, szMsg, 7)
    
		if(equal(szMsg, "buyzone"))
		{
			set_pdata_int(iPlayer, OFFSET_BUYZONE, get_pdata_int(iPlayer, OFFSET_BUYZONE) & ~(1<<0))
			return PLUGIN_HANDLED
		}
	}
	return PLUGIN_CONTINUE
} 

public msgHealth(msgid, dest, id)
{
	if(!g_isAlive[id])
		return PLUGIN_CONTINUE;
	
	static hp;
	hp = get_msg_arg_int(1);
	
	if(hp > 255 && (hp % 256) == 0)
		set_msg_arg_int(1, ARG_BYTE, ++hp);
	
	return PLUGIN_CONTINUE;
}

public msgRoundEnd(const MsgId, const MsgDest, const MsgEntity)
{
	static Message[192]
	get_msg_arg_string(2, Message, 191)
	
	if (equal(Message, "#Terrorists_Win"))
	{
		g_boolRoundEnded = true
		set_hudmessage(255, 0, 0, -1.0, 0.40, 0, 6.0, 6.0, 0.1, 0.2, 1)
		show_hudmessage(0, "%L", LANG_SERVER, "WIN_ZOMBIE")
		set_msg_arg_string(2, "")
		client_cmd(0, "spk %s", WIN_ZOMBIES)
		
		return PLUGIN_HANDLED
	}
	else if (equal(Message, "#Target_Saved") || equal(Message, "#CTs_Win"))
	{
		g_boolRoundEnded = true
		set_hudmessage(0, 0, 255, -1.0, 0.40, 0, 6.0, 6.0, 0.1, 0.2, 1)
		show_hudmessage(0, "%L", LANG_SERVER, "WIN_BUILDER")
		set_msg_arg_string(2, "")
		client_cmd(0, "spk %s", WIN_BUILDERS)
		
		return PLUGIN_HANDLED
	}
	return PLUGIN_HANDLED
}

public msgSendAudio(const MsgId, const MsgDest, const MsgEntity)
{
	static szSound[17]
	get_msg_arg_string(2,szSound,16)
	if(equal(szSound[7], "terwin") || equal(szSound[7], "ctwin") || equal(szSound[7], "rounddraw")) return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}

public ham_WeaponCleaner_Post(iEnt)
{
	call_think(iEnt)
}

public ham_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
{
	if (!is_valid_ent(victim) || !g_isAlive[victim] || !is_user_connected(attacker))
		return HAM_IGNORED
		
	if(g_boolCanBuild || g_boolRoundEnded || g_boolPrepTime)
		return HAM_SUPERCEDE;
		
	if (victim == attacker)
		return HAM_SUPERCEDE;
		
	if (g_iSupercut)
	{
		damage*=99.0
	}
		
	SetHamParamFloat(4, damage)
	return HAM_HANDLED
}

public ham_ItemDeploy_Post(weapon_ent)
{
	static owner
	owner = get_pdata_cbase(weapon_ent, OFFSET_WPN_WIN, OFFSET_WPN_LINUX);

	static weaponid
	weaponid = cs_get_weapon_id(weapon_ent)
	
	if (g_isZombie[owner] && weaponid == CSW_KNIFE)
	{
		static szClawModel[100]
		ArrayGetString(g_zclass_clawmodel, g_iZombieClass[owner], szClawModel, charsmax(szClawModel))
		format(szClawModel, charsmax(szClawModel), "models/%s.mdl", szClawModel)
		entity_set_string( owner , EV_SZ_viewmodel , szClawModel )  
		entity_set_string( owner , EV_SZ_weaponmodel , "" ) 
	}
	
	if (g_isZombie[owner] && !((1<<weaponid) & ZOMBIE_ALLOWED_WEAPONS_BITSUM))
	{
		engclient_cmd(owner, "weapon_knife")
	}
	else if (g_boolCanBuild)
	{
		engclient_cmd(owner, "weapon_knife")
		client_print(owner, print_center, "%L", LANG_SERVER, "FAIL_KNIFE");
	}
}

public logevent_round_start()
{
	set_pev(g_iEntBarrier,pev_solid,SOLID_BSP)
	set_pev(g_iEntBarrier,pev_rendermode,kRenderTransColor)
	set_pev(g_iEntBarrier,pev_rendercolor, Float:{ BARRIER_COLOR })
	set_pev(g_iEntBarrier,pev_renderamt, Float:{ BARRIER_RENDERAMT })
	
	print_color(0, "^x04 ---[ Base Builder %s ]---", VERSION);
	print_color(0, "^x03 %L", LANG_SERVER, "ROUND_MESSAGE");

	client_cmd(0, "spk %s", PHASE_BUILD)
	
	remove_task(TASK_BUILD)
	set_task(1.0, "task_CountDown", TASK_BUILD,_, _, "a", g_iBuildTime);
	g_iCountDown = (g_iBuildTime-1);
	
	ExecuteForward(g_fwBuildStarted, g_fwDummyResult);
}

public task_CountDown()
{
	g_iCountDown--
	new mins = g_iCountDown/60, secs = g_iCountDown%60
	if (g_iCountDown>=0)
		client_print(0, print_center, "%L - %d:%s%d", LANG_SERVER, "BUILD_TIMER", mins, (secs < 10 ? "0" : ""), secs)
	else
	{
		if (g_iPrepTime)
		{
			g_boolCanBuild = false
			g_boolPrepTime = true
			g_iCountDown = g_iPrepTime+1
			set_task(1.0, "task_PrepTime", TASK_PREPTIME,_, _, "a", g_iCountDown);
			
			set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
			show_hudmessage(0, "%L", LANG_SERVER, "PREP_ANNOUNCE");
			
			new players[32], num
			get_players(players, num)
			for (new i = 0; i < num; i++)
			{
				if (g_isAlive[players[i]] && !g_isZombie[players[i]])
				{
					ExecuteHamB(Ham_CS_RoundRespawn, players[i])
					
					if (g_iOwnedEnt[players[i]])
						cmdStopEnt(players[i])
				}
			}
			print_color(0, "%s^x04 %L", MODNAME, LANG_SERVER, "PREP_ANNOUNCE")
			
			client_cmd(0, "spk %s", PHASE_PREP)
			
			ExecuteForward(g_fwPrepStarted, g_fwDummyResult);
		}
		else
			Release_Zombies()

		remove_task(TASK_BUILD);
		return PLUGIN_HANDLED;
	}
	
	new szTimer[32]
	if (g_iCountDown>10)
	{
		if (mins && !secs) num_to_word(mins, szTimer, 31)
		else if (!mins && secs == 30) num_to_word(secs, szTimer, 31)
		else return PLUGIN_HANDLED;
		
		client_cmd(0, "spk ^"fvox/%s %s remaining^"", szTimer, (mins ? "minutes" : "seconds"))
	}
	else
	{
		num_to_word(g_iCountDown, szTimer, 31)
		client_cmd(0, "spk ^"fvox/%s^"", szTimer)
	}
	return PLUGIN_CONTINUE;
}

public task_PrepTime()
{
	g_iCountDown--
	
	if (g_iCountDown>=0)
		client_print(0, print_center, "%L - 0:%s%d", LANG_SERVER, "PREP_TIMER", (g_iCountDown < 10 ? "0" : ""), g_iCountDown)
	
	if (0<g_iCountDown<11)
	{
		new szTimer[32]
		num_to_word(g_iCountDown, szTimer, 31)
		client_cmd(0, "spk ^"fvox/%s^"", szTimer)
	}
	else if (g_iCountDown == 0)
	{
		Release_Zombies()
		remove_task(TASK_PREPTIME);
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_CONTINUE;
}

public logevent_round_end()
{
	if (g_boolRoundEnded)
	{
		new players[32], num, player
		get_players(players, num)
		for (new i = 0; i < num; i++)
		{
			player = players[i]
			
			if (g_iCurTeam[player] == g_iTeam[player] )
				cs_set_user_team(player, (g_iTeam[player] = (g_iTeam[player] == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T)))
			else
				g_iTeam[player] = g_iTeam[player] == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T
		}
		print_color(0, "%s^x04 %L", MODNAME, LANG_SERVER, "SWAP_ANNOUNCE")
	}
	remove_task(TASK_BUILD)	
	return PLUGIN_HANDLED
}

public client_death(g_attacker, g_victim, wpnindex, hitplace, TK)
{
	if (is_user_alive(g_victim))
		return PLUGIN_HANDLED;
	
	remove_task(g_victim+TASK_IDLESOUND)
	
	g_isAlive[g_victim] = false;
	
	if (TK == 0 && g_attacker != g_victim && g_isZombie[g_attacker])
	{
		client_cmd(0, "spk %s", INFECTION)
		new szPlayerName[32]
		get_user_name(g_victim, szPlayerName, 31)
		set_hudmessage(255, 0, 255, -1.0, 0.45, 0, 1.0, 5.0, 0.1, 0.2, 1)
		show_hudmessage(0, "%L", LANG_SERVER, "INFECT_ANNOUNCE", szPlayerName);
	}
	
	set_hudmessage(255, 0, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
	if (g_isZombie[g_victim])
	{
		show_hudmessage(g_victim, "%L", LANG_SERVER, "DEATH_ZOMBIE", g_iZombieTime);
		set_task(float(g_iZombieTime), "Respawn_Player", g_victim+TASK_RESPAWN)
	}
	else if (g_iInfectTime)
	{
		show_hudmessage(g_victim, "%L", LANG_SERVER, "DEATH_HUMAN", g_iInfectTime);
		cs_set_user_team(g_victim, CS_TEAM_T)
		g_isZombie[g_victim] = true
		set_task(float(g_iInfectTime), "Respawn_Player", g_victim+TASK_RESPAWN)
	}
	
	return PLUGIN_CONTINUE;
}

public Respawn_Player(id)
{
	id-=TASK_RESPAWN
	
	if (!is_user_connected(id))
		return PLUGIN_HANDLED
	
	if (((g_boolCanBuild || g_boolPrepTime) && cs_get_user_team(id) == CS_TEAM_CT) || cs_get_user_team(id) == CS_TEAM_T)
	{
		ExecuteHamB(Ham_CS_RoundRespawn, id)
		
		//Loop the task until they have successfully spawned
		if (!g_isAlive[id])
			set_task(3.0,"Respawn_Human",id+TASK_RESPAWN)
	}
	return PLUGIN_HANDLED
}

public ham_PlayerSpawn_Post(id)
{
	if (is_user_alive(id))
	{
		g_isAlive[id] = true;
		
		g_isZombie[id] = (cs_get_user_team(id) == CS_TEAM_T ? true : false)
		
		remove_task(id + TASK_RESPAWN)
		remove_task(id + TASK_MODELSET)
		remove_task(id + TASK_IDLESOUND)
		if (g_isZombie[id])
		{
			if (g_boolFirstSpawn[id])
			{
				show_zclass_menu(id, 0)
				g_boolFirstSpawn[id] = false
			}
			
			if (g_iNextClass[id] != g_iZombieClass[id])
				g_iZombieClass[id] = g_iNextClass[id]

			set_pev(id, pev_health, float(ArrayGetCell(g_zclass_hp, g_iZombieClass[id]))/**g_fClassMultiplier[id][ATT_HEALTH]*/)
			set_pev(id, pev_gravity, Float:ArrayGetCell(g_zclass_grav, g_iZombieClass[id])/**g_fClassMultiplier[id][ATT_GRAVITY]*/)
			g_fPlayerSpeed[id] = float(ArrayGetCell(g_zclass_spd, g_iZombieClass[id]))/**g_fClassMultiplier[id][ATT_SPEED]*/
				
			//Handles the knife and claw model
			strip_user_weapons(id)
			give_item(id, "weapon_knife")
							
			static szClawModel[100]
			ArrayGetString(g_zclass_clawmodel, g_iZombieClass[id], szClawModel, charsmax(szClawModel))
			format(szClawModel, charsmax(szClawModel), "models/%s.mdl", szClawModel)
			entity_set_string( id , EV_SZ_viewmodel , szClawModel )  
			entity_set_string( id , EV_SZ_weaponmodel , "" ) 
						
			ArrayGetString(g_zclass_name, g_iZombieClass[id], g_szPlayerClass[id], charsmax(g_szPlayerClass[]))
			
			set_task(random_float(60.0, 360.0), "task_ZombieIdle", id+TASK_IDLESOUND, _, _, "b")

			ArrayGetString(g_zclass_playermodel, g_iZombieClass[id], g_szPlayerModel[id], charsmax(g_szPlayerModel[]))
			new szCurrentModel[32]
			fm_get_user_model(id, szCurrentModel, charsmax(szCurrentModel))
			if (!equal(szCurrentModel, g_szPlayerModel[id]))
			{
				if (get_gametime() - g_fRoundStartTime < 5.0)
					set_task(5.0 * MODELCHANGE_DELAY, "fm_user_model_update", id + TASK_MODELSET)
				else
					fm_user_model_update(id + TASK_MODELSET)
			}
			
			ExecuteForward(g_fwClassSet, g_fwDummyResult, id, g_iZombieClass[id]);
		}
		else if (g_isCustomModel[id])
		{
			fm_reset_user_model(id)
		}
		
		if (!g_isZombie[id])
		{
			entity_set_string( id , EV_SZ_viewmodel , "models/v_knife.mdl" )  
			
			if (((/*g_boolPrepTime && */g_iPrepTime && !g_boolCanBuild) || (g_boolCanBuild && !g_iPrepTime)) && g_iGunsMenu)
			{
				//if (is_credits_active())
				#if defined BB_CREDITS
					credits_show_gunsmenu(id)
				#else
					show_method_menu(id)
				#endif
			}
				
			if (!g_iColor[id])
			{
				new i = random(MAX_COLORS)
				if (g_iColorMode)
				{
					while (g_iColorOwner[i])
					{
						i = random(MAX_COLORS)
					}
				}
				print_color(id, "%s^x04 %L:^x01 %s", MODNAME, LANG_SERVER, "COLOR_PICKED", g_szColorName[i]);
				g_iColor[id] = i
				g_iColorOwner[i] = id

				if (g_iOwnedEnt[id])
				{
					set_pev(g_iOwnedEnt[id],pev_rendercolor, g_fColor[g_iColor[id]] )
					set_pev(g_iOwnedEnt[id],pev_renderamt, g_fRenderAmt[g_iColor[id]] )
				}
			}
		}
		
		ev_Health(id)
	}
}

public task_ZombieIdle(taskid)
{
	taskid-=TASK_IDLESOUND
	if (g_isAlive[taskid] && g_isConnected[taskid] && !g_isZombie[taskid])
		emit_sound(taskid, CHAN_VOICE, g_szZombieIdle[random(sizeof g_szZombieIdle - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}

public fw_SetClientKeyValue(id, const infobuffer[], const key[])
{   
	if (g_isCustomModel[id] && equal(key, "model"))
		return FMRES_SUPERCEDE
	return FMRES_IGNORED
}

public fw_ClientUserInfoChanged(id)
{
	if (!g_isCustomModel[id])
		return FMRES_IGNORED
	static szCurrentModel[32]
	fm_get_user_model(id, szCurrentModel, charsmax(szCurrentModel))
	if (!equal(szCurrentModel, g_szPlayerModel[id]) && !task_exists(id + TASK_MODELSET))
		fm_set_user_model(id + TASK_MODELSET)
	return FMRES_IGNORED
}

public fm_user_model_update(taskid)
{
	static Float:fCurTime
	fCurTime = get_gametime()
	
	if (fCurTime - g_fModelsTargetTime >= MODELCHANGE_DELAY)
	{
		fm_set_user_model(taskid)
		g_fModelsTargetTime = fCurTime
	}
	else
	{
		set_task((g_fModelsTargetTime + MODELCHANGE_DELAY) - fCurTime, "fm_set_user_model", taskid)
		g_fModelsTargetTime += MODELCHANGE_DELAY
	}
}

public fm_set_user_model(player)
{
	player -= TASK_MODELSET
	engfunc(EngFunc_SetClientKeyValue, player, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", g_szPlayerModel[player])
	g_isCustomModel[player] = true
}

stock fm_get_user_model(player, model[], len)
{
	engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", model, len)
}

stock fm_reset_user_model(player)
{
	g_isCustomModel[player] = false
	dllfunc(DLLFunc_ClientUserInfoChanged, player, engfunc(EngFunc_GetInfoKeyBuffer, player))
}

public message_show_menu(msgid, dest, id) 
{
	if (!(!get_user_team(id) && !is_user_bot(id) && !access(id, ADMIN_IMMUNITY)))
		return PLUGIN_CONTINUE

	static team_select[] = "#Team_Select"
	static menu_text_code[sizeof team_select]
	get_msg_arg_string(4, menu_text_code, sizeof menu_text_code - 1)
	if (!equal(menu_text_code, team_select))
		return PLUGIN_CONTINUE

	static param_menu_msgid[2]
	param_menu_msgid[0] = msgid
	set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)

	return PLUGIN_HANDLED
}

public message_vgui_menu(msgid, dest, id) 
{
	if (get_msg_arg_int(1) != TEAM_SELECT_VGUI_MENU_ID || !(!get_user_team(id) && !is_user_bot(id) && !access(id, ADMIN_IMMUNITY)))// 
		return PLUGIN_CONTINUE
		
	static param_menu_msgid[2]
	param_menu_msgid[0] = msgid
	set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)

	return PLUGIN_HANDLED
}

public task_force_team_join(menu_msgid[], id) 
{
	if (get_user_team(id))
		return

	static msg_block
	msg_block = get_msg_block(menu_msgid[0])
	set_msg_block(menu_msgid[0], BLOCK_SET)
	engclient_cmd(id, "jointeam", "5")
	engclient_cmd(id, "joinclass", "5")
	set_msg_block(menu_msgid[0], msg_block)
}

public msgTeamInfo(msgid, dest)
{
	if (dest != MSG_ALL && dest != MSG_BROADCAST)
		return;
	
	static id, team[2]
	id = get_msg_arg_int(1)

	get_msg_arg_string(2, team, charsmax(team))
	switch (team[0])
	{
		case 'T' : // TERRORIST
		{
			g_iCurTeam[id] = CS_TEAM_T;
		}
		case 'C' : // CT
		{
			g_iCurTeam[id] = CS_TEAM_CT;
		}
		case 'S' : // SPECTATOR
		{
			g_iCurTeam[id] = CS_TEAM_SPECTATOR;
		}
		default : g_iCurTeam[id] = CS_TEAM_UNASSIGNED;
	}
	if (!g_boolFirstTeam[id])
	{
		g_boolFirstTeam[id] = true
		g_iTeam[id] = g_iCurTeam[id]
	}
}

public clcmd_changeteam(id)
{
	static CsTeams:team
	team = cs_get_user_team(id)
	
	if (team == CS_TEAM_SPECTATOR || team == CS_TEAM_UNASSIGNED)
		return PLUGIN_CONTINUE;

	show_zclass_menu(id, 0)
	return PLUGIN_HANDLED;
}

public clcmd_drop(id)
{
	client_print (id, print_center, "%L", LANG_SERVER, "FAIL_DROP")
	return PLUGIN_HANDLED
}

public clcmd_buy(id)
{
	client_print (id, print_center, "%L", LANG_SERVER, "FAIL_BUY")
	return PLUGIN_HANDLED
}

public msgStatusValue()
	set_msg_block(g_msgStatusText, BLOCK_SET);

public ev_SetTeam(id)
	g_iFriend[id] = read_data(2)

public ev_ShowStatus(id) //called when id looks at someone
{
	new szName[32], pid = read_data(2);
	get_user_name(pid, szName, 31);

	if (g_iFriend[id] == 1)	// friend
	{
		new clip, ammo, wpnid = get_user_weapon(pid, clip, ammo), szWpnName[32];

		if (wpnid)
			xmod_get_wpnname(wpnid, szWpnName, 31);

		set_hudmessage(0, 225, 0, -1.0, HUD_FRIEND_HEIGHT, 1, 0.01, 3.0, 0.01, 0.01);
		new nLen, szStatus[512]
		if (!g_isZombie[pid])
			nLen += format( szStatus[nLen], 511-nLen, "%s^nViata: %d | Arma: %s^nCuloare: %s", szName, pev(pid, pev_health), szWpnName, g_szColorName[g_iColor[pid]]);
		else
		{
			nLen += format( szStatus[nLen], 511-nLen, "%s^nRasa: %s^nViata: %d", szName, g_szPlayerClass[pid], pev(pid, pev_health));
			
			/*if (is_credits_active())
			{
				nLen += format( szStatus[nLen], 511-nLen, "^n^nClass Multipliers:", szName, g_szPlayerClass[pid], pev(pid, pev_health));
				nLen += format( szStatus[nLen], 511-nLen, "^nHealth: %f", g_fClassMultiplier[pid][ATT_HEALTH]);
				nLen += format( szStatus[nLen], 511-nLen, "^nSpeed: %f", g_fClassMultiplier[pid][ATT_SPEED]);
				nLen += format( szStatus[nLen], 511-nLen, "^nGravity: %f", g_fClassMultiplier[pid][ATT_GRAVITY]);
			}*/
		}
		ShowSyncHudMsg(id, g_HudSync, szStatus);
	} 
	if (g_iFriend[id] != 1) //enemy
	{
		set_hudmessage(225, 0, 0, -1.0, HUD_FRIEND_HEIGHT, 1, 0.01, 3.0, 0.01, 0.01);
		if (g_isZombie[pid])
			ShowSyncHudMsg(id, g_HudSync, "%s", szName);
		else
			ShowSyncHudMsg(id, g_HudSync, "%s^nCuloare: %s", szName, g_szColorName[g_iColor[pid]]);
	}
}

public ev_HideStatus(id)
	ClearSyncHud(id, g_HudSync);

public cmdSay(id)
{
	if (!g_isConnected[id])
		return PLUGIN_HANDLED;

	new szMessage[32]
	read_args(szMessage, charsmax(szMessage));
	remove_quotes(szMessage);
		
	if(szMessage[0] == '/')
	{
		if (equali(szMessage, "/commands") == 1 || equali(szMessage, "/cmd")  == 1 )
		{
			print_color(id, "%s /class, /respawn, /random, /mycolor, /guns%s%s%s", MODNAME, (g_iColorMode ? ", /aleg <color>": ""), (g_iColorMode != 2 ? ", /colors":""), (access(id, FLAGS_LOCK) ? ", /lock":"")  );
		}
		else if (equali(szMessage, "/class") == 1)
		{
			show_zclass_menu(id, 0)
		}
		else if (equali(szMessage, "/respawn") == 1 || equali(szMessage, "/revive")  == 1 || equali(szMessage, "/fixspawn")  == 1)
		{
			if (g_boolCanBuild && !g_isZombie[id])
				ExecuteHamB(Ham_CS_RoundRespawn, id)
			else if (g_isZombie[id])
			{
				if (pev(id, pev_health) == float(ArrayGetCell(g_zclass_hp, g_iZombieClass[id])) || !is_user_alive(id))
					ExecuteHamB(Ham_CS_RoundRespawn, id)
				else
					client_print(id, print_center, "%L", LANG_SERVER, "FAIL_SPAWN");
			}
		}
		else if (equali(szMessage, "/lock") == 1 || equali(szMessage, "/claim") == 1 && g_isAlive[id])
		{
			if (access(id, FLAGS_LOCK))
				cmdLockBlock(id)
			else
				client_print(id, print_center, "%L", LANG_SERVER, "FAIL_ACCESS");
			return PLUGIN_HANDLED;
		}
		else if (equal(szMessage, "/whois",6) && g_iColorMode)
		{
			for ( new i=0; i<MAX_COLORS; i++)
			{
				if (equali(szMessage[7], g_szColorName[i]) == 1)
				{
					if (g_iColorOwner[i])
					{
						new szPlayerName[32]
						get_user_name(g_iColorOwner[i], szPlayerName, 31)
						print_color(id, "%s^x04 %s^x01's color is^x04 %s", MODNAME, szPlayerName, g_szColorName[i]);
					}
					else
						print_color(id, "%s %L^x04 %s", MODNAME, LANG_SERVER, "COLOR_NONE", g_szColorName[i]);
						
					break;
				}
			}
		}
		else if (equali(szMessage, "/colors") == 1 && !g_isZombie[id] && g_boolCanBuild && g_iColorMode != 2)
		{
			show_colors_menu(id, 0)
		}
		else if (equali(szMessage, "/mycolor") == 1 && !g_isZombie[id])
		{
			print_color(id, "%s^x04 %L:^x01 %s", MODNAME, LANG_SERVER, "COLOR_YOURS", g_szColorName[g_iColor[id]]);
			return PLUGIN_HANDLED
		}
		else if (equali(szMessage, "/random") == 1 && !g_isZombie[id] && g_boolCanBuild)
		{
			new i = random(MAX_COLORS)
			if (g_iColorMode)
			{
				while (g_iColorOwner[i])
				{
					i = random(MAX_COLORS)
				}
			}
			print_color(id, "%s^x04 %L:^x01 %s", MODNAME, LANG_SERVER, "COLOR_RANDOM", g_szColorName[i]);
			g_iColorOwner[g_iColor[id]] = 0
			g_iColor[id] = i
			g_iColorOwner[i] = id
			
			for (new iEnt = g_iMaxPlayers+1; iEnt < MAXENTS; iEnt++)
			{
				if (is_valid_ent(iEnt) && g_iLockBlocks && BlockLocker(iEnt) == id)
					set_pev(iEnt,pev_rendercolor,g_fColor[g_iColor[id]])
			}
			
			ExecuteForward(g_fwNewColor, g_fwDummyResult, id, g_iColor[id]);
		}
		else if (equali(szMessage, "/guns", 5) && g_iGunsMenu)
		{
			if(!g_isAlive[id] || g_isZombie[id])
				return PLUGIN_HANDLED
				
			if (access(id, FLAGS_GUNS))
			{
				new player = cmd_target(id, szMessage[6], 0)
			
				if (!player)
				{
					//if (is_credits_active())
					#if defined BB_CREDITS
						credits_show_gunsmenu(id)
					#else
						show_method_menu(id)
					#endif
					return PLUGIN_CONTINUE
				}
				
				cmdGuns(id, player)
				return PLUGIN_HANDLED;
			}
			else
			{
				if(!g_boolCanBuild || !g_boolRepick[id])
					return PLUGIN_HANDLED	
		
				//if (is_credits_active())
				#if defined BB_CREDITS
					credits_show_gunsmenu(id)
				#else
					show_method_menu(id)
				#endif
				return PLUGIN_HANDLED
			}
		}
		else if (equal(szMessage, "/swap",5) && access(id, FLAGS_SWAP))
		{
			new player = cmd_target(id, szMessage[6], 0)
		
			if (!player)
			{
				print_color(id, "%s Jucatorul^x04 %s^x03 nu este pe server , sau poate ai gresit numele", MODNAME, szMessage[6])
				return PLUGIN_CONTINUE
			}
			
			cmdSwap(id, player)
		}
		else if (equal(szMessage, "/revive",7) && access(id, FLAGS_REVIVE))
		{
			new player = cmd_target(id, szMessage[8], 0)
		
			if (!player)
			{
				print_color(id, "%s Jucatorul^x04 %s^x03 nu este pe server , sau poate ai gresit numele", MODNAME, szMessage[6])
				return PLUGIN_CONTINUE
			}
			
			cmdRevive(id, player)
		}
		else if (equal(szMessage, "/ban",4) && access(id, FLAGS_BUILDBAN))
		{
			new player = cmd_target(id, szMessage[5], 0)
		
			if (!player)
			{
				print_color(id, "%s Jucatorul^x04 %s^x03 nu este pe server , sau poate ai gresit numele", MODNAME, szMessage[6])
				return PLUGIN_CONTINUE
			}
			
			cmdBuildBan(id, player)
		}
		else if (equal(szMessage, "/releasezombies",5) && access(id, FLAGS_RELEASE))
		{
			cmdStartRound(id)
		}
	}
	return PLUGIN_CONTINUE
}

public cmdSwap(id, target)
{
	if (access(id, FLAGS_SWAP))
	{
		new player
		
		if (target) player = target
		else
		{
			new arg[32]
			read_argv(1, arg, 31)
			player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
		}

		if (!player || !is_user_connected(player))
			return client_print(id, print_console, "[BaseBuilder] %L", LANG_SERVER, "FAIL_NAME");
			
		cs_set_user_team(player,( g_iTeam[player] = g_iTeam[player] == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T))
			
		if (is_user_alive(player))
			ExecuteHamB(Ham_CS_RoundRespawn, player)
		
		new szAdminAuthid[32],szAdminName[32],szPlayerName[32],szPlayerID[32]
		get_user_name(id,szAdminName,31)
		get_user_authid (id,szAdminAuthid,31)
		get_user_name(player, szPlayerName, 31)
		get_user_authid (player,szPlayerID,31)
		
		client_print(id, print_console, "[BaseBuilder] Jucatorul %s a fost schimbat de la echipa %s la echipa %s ", szPlayerName, g_iTeam[player] == CS_TEAM_CT ? "zombie":"builder", g_iTeam[player] == CS_TEAM_CT ? "builder":"zombie")
		Log("[SWAP] Admin: %s || SteamID: %s swapped Player: %s || SteamID: %s", szAdminName, szAdminAuthid, szPlayerName, szPlayerID)
		
		set_hudmessage(255,0, 0, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
		show_hudmessage(player, "%L", LANG_SERVER, "ADMIN_SWAP");
		
		print_color(0, "%s Jucatorul^x04 %s^x01 a fost^x04 schimbat^x01 la echipa^x04 %s", MODNAME, szPlayerName, g_iTeam[player] == CS_TEAM_CT ? "builder":"zombie")
	}
	return PLUGIN_HANDLED	
}

public cmdRevive(id, target)
{
	if (access(id, FLAGS_REVIVE))
	{
		new player
		if (target) player = target
		else
		{
			new arg[32]
			read_argv(1, arg, 31)
			player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
		}

		if (!player || !is_user_connected(player))
			return client_print(id, print_console, "[BaseBuilder] %L", LANG_SERVER, "FAIL_NAME");
			
		ExecuteHamB(Ham_CS_RoundRespawn, player)
		
		new szAdminAuthid[32],szAdminName[32],szPlayerName[32],szPlayerID[32]
		get_user_name(id,szAdminName,31)
		get_user_authid (id,szAdminAuthid,31)
		get_user_name(player, szPlayerName, 31)
		get_user_authid (player,szPlayerID,31)
		
		client_print(id, print_console, "[BaseBuilder] Jucatorul %s a fost^x04 reinviat", szPlayerName)
		Log("[REVIVE] Admin: %s || SteamID: %s revived Player: %s || SteamID: %s", szAdminName, szAdminAuthid, szPlayerName, szPlayerID)
		
		set_hudmessage(255,0, 0, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
		show_hudmessage(player, "%L", LANG_SERVER, "ADMIN_REVIVE");
		
		print_color(0, "%s Jucatorul^x04 %s^x01 a fost^x04 reinviat", MODNAME, szPlayerName)
	}
	return PLUGIN_HANDLED	
}

public cmdGuns(id, target)
{
	if (access(id, FLAGS_GUNS))
	{
		new player
		if (target) player = target
		else
		{
			new arg[32]
			read_argv(1, arg, 31)
			player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
		}
		
		if (!player || !is_user_connected(player))
		{
			client_print(id, print_console, "[BaseBuilder] %L", LANG_SERVER, "FAIL_NAME");
			return PLUGIN_HANDLED;
		}
		
		if (g_isZombie[player])
		{
			return PLUGIN_HANDLED;
		}
		
		if (!g_isAlive[player])
		{
			client_print(id, print_console, "[BaseBuilder] %L", LANG_SERVER, "FAIL_DEAD");
			return PLUGIN_HANDLED;
		}

		//if (is_credits_active())
		#if defined BB_CREDITS
			credits_show_gunsmenu(player)
		#else
			show_method_menu(player)
		#endif
		
		new szAdminAuthid[32],szAdminName[32],szPlayerName[32],szPlayerID[32]
		get_user_name(id,szAdminName,31)
		get_user_authid (id,szAdminAuthid,31)
		get_user_name(player, szPlayerName, 31)
		get_user_authid (player,szPlayerID,31)
		
		client_print(id, print_console, "[BaseBuilder] Jucatorului %s i s-a deschis meniul de arme", szPlayerName);
		Log("[GUNS] Admin: %s || SteamID: %s opened the guns menu for Player: %s || SteamID: %s", szAdminName, szAdminAuthid, szPlayerName, szPlayerID);
		
		set_hudmessage(255,0, 0, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
		show_hudmessage(player, "%L", LANG_SERVER, "ADMIN_GUNS");
		
		print_color(0, "%s Jucatorului^x04 %s^x03 i s-a deschis meniul de^x04 arme", MODNAME, szPlayerName)
	}
	return PLUGIN_HANDLED	
}

public cmdStartRound(id)
{
	if (access(id, FLAGS_RELEASE))
	{
		native_release_zombies()
	}
}

public Release_Zombies()
{
	g_boolCanBuild = false
	remove_task(TASK_BUILD);
	
	g_boolPrepTime = false
	remove_task(TASK_PREPTIME);
	
	new players[32], num, player, szWeapon[32]
	get_players(players, num, "a")
	for(new i = 0; i < num; i++)
	{
		player = players[i]

		if (!g_isZombie[player])
		{
			if (g_iOwnedEnt[player])
				cmdStopEnt(player)

			if(g_iGrenadeHE		) give_item(player,"weapon_hegrenade"	), cs_set_user_bpammo(player,CSW_HEGRENADE,	g_iGrenadeHE)
			if(g_iGrenadeFLASH	) give_item(player,"weapon_flashbang"	), cs_set_user_bpammo(player,CSW_FLASHBANG,	g_iGrenadeFLASH)
			if(g_iGrenadeSMOKE	) give_item(player,"weapon_smokegrenade"	), cs_set_user_bpammo(player,CSW_SMOKEGRENADE,	g_iGrenadeSMOKE)

			if (g_iPrimaryWeapon[player])
			{
				get_weaponname(g_iPrimaryWeapon[player],szWeapon,sizeof szWeapon - 1)
				engclient_cmd(player, szWeapon);
			}
		}
	}
			
	set_pev(g_iEntBarrier,pev_solid,SOLID_NOT)
	set_pev(g_iEntBarrier,pev_renderamt,Float:{ 0.0 })
	
	set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
	show_hudmessage(0, "%L", LANG_SERVER, "RELEASE_ANNOUNCE");
	client_cmd(0, "spk %s", g_szRoundStart[ random( sizeof g_szRoundStart ) ] )
	
	ExecuteForward(g_fwRoundStart, g_fwDummyResult);
}

public fw_CmdStart( id, uc_handle, randseed )
{
	if (!g_isConnected[id] || !g_isAlive[id])
		return FMRES_IGNORED

	//new button = pev(id, pev_button)
	new button = get_uc( uc_handle , UC_Buttons );
	new oldbutton = pev(id, pev_oldbuttons)

	if( button & IN_USE && !(oldbutton & IN_USE) && !g_iOwnedEnt[id])
		cmdGrabEnt(id)
	else if( oldbutton & IN_USE && !(button & IN_USE) && g_iOwnedEnt[id])
		cmdStopEnt(id)

	return FMRES_IGNORED;
}

public cmdGrabEnt(id)
{
	if (g_fBuildDelay[id] + BUILD_DELAY > get_gametime())
	{
		g_fBuildDelay[id] = get_gametime()
		client_print (id, print_center, "%L", LANG_SERVER, "BUILD_SPAM")
		return PLUGIN_HANDLED
	}
	else
		g_fBuildDelay[id] = get_gametime()

	if (g_isBuildBan[id])
	{
		client_print (id, print_center, "%L", LANG_SERVER, "BUILD_BANNED")
		client_cmd(id, "spk %s", LOCK_FAIL);
		return PLUGIN_HANDLED;
	}
	
	if (g_isZombie[id] && !access(id, FLAGS_OVERRIDE))
		return PLUGIN_HANDLED
		
	if (!g_boolCanBuild && !access(id, FLAGS_BUILD) && !access(id, FLAGS_OVERRIDE))
	{
		client_print (id, print_center, "%L", LANG_SERVER, "BUILD_NOTIME")
		return PLUGIN_HANDLED
	}
	
	if (g_iOwnedEnt[id] && is_valid_ent(g_iOwnedEnt[id])) 
		cmdStopEnt(id)
	
	new ent, bodypart
	get_user_aiming (id,ent,bodypart)
	
	if (!is_valid_ent(ent) || ent == g_iEntBarrier || is_user_alive(ent) || IsMovingEnt(ent))
		return PLUGIN_HANDLED;
	
	if ((BlockLocker(ent) && BlockLocker(ent) != id) || (BlockLocker(ent) && !access(id, FLAGS_OVERRIDE)))
		return PLUGIN_HANDLED;
	
	new szClass[10], szTarget[7];
	entity_get_string(ent, EV_SZ_classname, szClass, 9);
	entity_get_string(ent, EV_SZ_targetname, szTarget, 6);
	if (!equal(szClass, "func_wall") || equal(szTarget, "ignore"))
		return PLUGIN_HANDLED;
		
	ExecuteForward(g_fwGrabEnt_Pre, g_fwDummyResult, id, ent);

	new Float:fOrigin[3], iAiming[3], Float:fAiming[3]
	
	get_user_origin(id, iAiming, 3);
	IVecFVec(iAiming, fAiming);
	entity_get_vector(ent, EV_VEC_origin, fOrigin);

	g_fOffset1[id] = fOrigin[0] - fAiming[0];
	g_fOffset2[id] = fOrigin[1] - fAiming[1];
	g_fOffset3[id] = fOrigin[2] - fAiming[2];
	
	g_fEntDist[id] = get_user_aiming(id, ent, bodypart);
		
	if (g_fEntMinDist)
	{
		if (g_fEntDist[id] < g_fEntMinDist)
			g_fEntDist[id] = g_fEntSetDist;
	}
	else if (g_fEntMaxDist)
	{
		if (g_fEntDist[id] > g_fEntMaxDist)
			return PLUGIN_HANDLED
	}

	set_pev(ent,pev_rendermode,kRenderTransColor)
	set_pev(ent,pev_rendercolor, g_fColor[g_iColor[id]] )
	set_pev(ent,pev_renderamt, g_fRenderAmt[g_iColor[id]] )
		
	MovingEnt(ent);
	SetEntMover(ent, id);
	g_iOwnedEnt[id] = ent

	//Checked after object is successfully grabbed
	if (!g_boolCanBuild && (access(id, FLAGS_BUILD) || access(id, FLAGS_OVERRIDE)))
	{
		new adminauthid[32],adminname[32]
		get_user_authid (id,adminauthid,31)
		get_user_name(id,adminname,31)
		Log("[MOVE] Admin: %s || SteamID: %s moved an entity", adminname, adminauthid)
	}
	
	client_cmd(id, "spk %s", GRAB_START);
	
	ExecuteForward(g_fwGrabEnt_Post, g_fwDummyResult, id, ent);
	
	return PLUGIN_HANDLED
}

public cmdStopEnt(id)
{
	if (!g_iOwnedEnt[id])
		return PLUGIN_HANDLED;
		
	new ent = g_iOwnedEnt[id]
	
	ExecuteForward(g_fwDropEnt_Pre, g_fwDummyResult, id, ent);
	
	if (BlockLocker(ent))
	{
		switch(g_iLockBlocks)
		{
			case 0:
			{
				set_pev(ent,pev_rendermode,kRenderTransColor)
				set_pev(ent,pev_rendercolor, Float:{ LOCKED_COLOR })
				set_pev(ent,pev_renderamt,Float:{ LOCKED_RENDERAMT })
			}
			case 1:
			{
				set_pev(ent,pev_rendermode,kRenderTransColor)
				set_pev(ent,pev_rendercolor, g_fColor[g_iColor[id]])
				set_pev(ent,pev_renderamt,Float:{ LOCKED_RENDERAMT })
			}
		}
	}
	else
		set_pev(ent,pev_rendermode,kRenderNormal)	
	
	UnsetEntMover(ent);
	SetLastMover(ent,id);
	g_iOwnedEnt[id] = 0;
	UnmovingEnt(ent);
	
	client_cmd(id, "spk %s", GRAB_STOP);
	
	ExecuteForward(g_fwDropEnt_Post, g_fwDummyResult, id, ent);
	
	return PLUGIN_HANDLED;
}

public cmdLockBlock(id)
{
	if (!g_boolCanBuild && g_iLockBlocks)
	{
		client_print(id, print_center, "%L", LANG_SERVER, "FAIL_LOCK");
		return PLUGIN_HANDLED;
	}
	
	if (!access(id, FLAGS_LOCK) || (g_isZombie[id] && !access(id, FLAGS_OVERRIDE)))
		return PLUGIN_HANDLED;
		
	new ent, bodypart
	get_user_aiming (id,ent,bodypart)
	
	new szTarget[7], szClass[10];
	entity_get_string(ent, EV_SZ_targetname, szTarget, 6);
	entity_get_string(ent, EV_SZ_classname, szClass, 9);
	if (!ent || !is_valid_ent(ent) || is_user_alive(ent) || ent == g_iEntBarrier || !equal(szClass, "func_wall") || equal(szTarget, "ignore"))
		return PLUGIN_HANDLED;
	
	ExecuteForward(g_fwLockEnt_Pre, g_fwDummyResult, id, ent);
	
	switch (g_iLockBlocks)
	{
		case 0:
		{
			if (!BlockLocker(ent) && !IsMovingEnt(ent))
			{
				LockBlock(ent, id);
				set_pev(ent,pev_rendermode,kRenderTransColor)
				set_pev(ent,pev_rendercolor,Float:{LOCKED_COLOR})
				set_pev(ent,pev_renderamt,Float:{LOCKED_RENDERAMT})
				client_cmd(id, "spk %s", LOCK_OBJECT);
			}
			else if (BlockLocker(ent))
			{
				UnlockBlock(ent)
				set_pev(ent,pev_rendermode,kRenderNormal)
				client_cmd(id, "spk %s", LOCK_OBJECT);
			}
		}
		case 1:
		{
			if (!BlockLocker(ent) && !IsMovingEnt(ent))
			{
				if (g_iOwnedEntities[id]<g_iLockMax || !g_iLockMax)
				{
					LockBlock(ent, id)
					g_iOwnedEntities[id]++
					set_pev(ent,pev_rendermode,kRenderTransColor)
					set_pev(ent,pev_rendercolor,g_fColor[g_iColor[id]])
					set_pev(ent,pev_renderamt,Float:{LOCKED_RENDERAMT})
					
					client_print(id, print_center, "%L [ %d / %d ]", LANG_SERVER, "BUILD_CLAIM_NEW", g_iOwnedEntities[id], g_iLockMax)
					client_cmd(id, "spk %s", LOCK_OBJECT);
				}
				else if (g_iOwnedEntities[id]>=g_iLockMax)
				{
					client_print(id, print_center, "%L", LANG_SERVER, "BUILD_CLAIM_MAX", g_iLockMax)
					client_cmd(id, "spk %s", LOCK_FAIL);
				}
			}
			else if (BlockLocker(ent))
			{
				if (BlockLocker(ent) == id || access(id, FLAGS_OVERRIDE))
				{
					g_iOwnedEntities[BlockLocker(ent)]--
					set_pev(ent,pev_rendermode,kRenderNormal)
					
					client_print(BlockLocker(ent), print_center, "%L [ %d / %d ]", LANG_SERVER, "BUILD_CLAIM_LOST", g_iOwnedEntities[BlockLocker(ent)], g_iLockMax)
					
					UnlockBlock(ent)
					client_cmd(id, "spk %s", LOCK_OBJECT);
				}
				else
				{
					client_print(id, print_center, "%L", LANG_SERVER, "BUILD_CLAIM_FAIL")
					client_cmd(id, "spk %s", LOCK_FAIL);
				}
			}	
		}
	}
	
	ExecuteForward(g_fwLockEnt_Post, g_fwDummyResult, id, ent);
	
	return PLUGIN_HANDLED
}

public cmdBuildBan(id, target)
{
	if (access(id, FLAGS_BUILDBAN))
	{
		new player
		if (target) player = target
		else
		{
			new arg[32]
			read_argv(1, arg, 31)
			player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY)
		}
		
		if (!player)
			return client_print(id, print_console, "[BaseBuilder] %L", LANG_SERVER, "FAIL_NAME");
		
		new szAdminAuthid[32],szAdminName[32],szPlayerName[32],szPlayerID[32]
		get_user_name(id,szAdminName,31)
		get_user_authid (id,szAdminAuthid,31)
		get_user_name(player, szPlayerName, 31)
		get_user_authid (player,szPlayerID,31)
		
		g_isBuildBan[player] = g_isBuildBan[player] ? false : true
		
		if (g_isBuildBan[player] && g_iOwnedEnt[player])
			cmdStopEnt(player)
		
		client_print(id, print_console, "[BaseBuilder] Jucatorul %s a fost %s de la construire", szPlayerName, g_isBuildBan[player] ? "banned":"unbanned")
		Log("[MOVE] Admin: %s || SteamID: %s banned Player: %s || SteamID: %s from building", szAdminName, szAdminAuthid, szPlayerName, szPlayerID)
		
		set_hudmessage(255,0, 0, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
		show_hudmessage(player, "%L", LANG_SERVER, "ADMIN_BUILDBAN", g_isBuildBan[player] ? "disabled":"re-enabled");
		
		print_color(0, "%s Player^x04 %s^x01 has been^x04 %s^x01 from building", MODNAME, szPlayerName, g_isBuildBan[player] ? "banned":"unbanned")
	}
	
	return PLUGIN_HANDLED;
}

public fw_PlayerPreThink(id)
{
	if (!is_user_connected(id))
	{
		cmdStopEnt(id)
		return PLUGIN_HANDLED
	}
	
	if (g_isZombie[id])
		set_pev(id, pev_maxspeed, g_fPlayerSpeed[id])
	
	if (!g_iOwnedEnt[id] || !is_valid_ent(g_iOwnedEnt[id]))
		return FMRES_HANDLED
		
	new buttons = pev(id, pev_button)
	if (buttons & IN_ATTACK)
	{
		g_fEntDist[id] += OBJECT_PUSHPULLRATE;
		
		if (g_fEntDist[id] > g_fEntMaxDist)
		{
			g_fEntDist[id] = g_fEntMaxDist
			client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_MAX")
		}
		else
			client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_PUSH")
			
		ExecuteForward(g_fwPushPull, g_fwDummyResult, id, g_iOwnedEnt[id], 1);
	}
	else if (buttons & IN_ATTACK2)
	{
		g_fEntDist[id] -= OBJECT_PUSHPULLRATE;
			
		if (g_fEntDist[id] < g_fEntSetDist)
		{
			g_fEntDist[id] = g_fEntSetDist
			client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_MIN")
		}
		else
			client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_PULL")
			
		ExecuteForward(g_fwPushPull, g_fwDummyResult, id, g_iOwnedEnt[id], 2);
	}
	
	new iOrigin[3], iLook[3], Float:fOrigin[3], Float:fLook[3], Float:vMoveTo[3], Float:fLength
	    
	get_user_origin(id, iOrigin, 1);
	IVecFVec(iOrigin, fOrigin);
	get_user_origin(id, iLook, 3);
	IVecFVec(iLook, fLook);
	    
	fLength = get_distance_f(fLook, fOrigin);
	if (fLength == 0.0) fLength = 1.0;

	vMoveTo[0] = (fOrigin[0] + (fLook[0] - fOrigin[0]) * g_fEntDist[id] / fLength) + g_fOffset1[id];
	vMoveTo[1] = (fOrigin[1] + (fLook[1] - fOrigin[1]) * g_fEntDist[id] / fLength) + g_fOffset2[id];
	vMoveTo[2] = (fOrigin[2] + (fLook[2] - fOrigin[2]) * g_fEntDist[id] / fLength) + g_fOffset3[id];
	vMoveTo[2] = float(floatround(vMoveTo[2], floatround_floor));

	entity_set_origin(g_iOwnedEnt[id], vMoveTo);
	
	return FMRES_HANDLED
}

public fw_Traceline(Float:start[3], Float:end[3], conditions, id, trace)
{
	if (!is_user_alive(id))
		return PLUGIN_HANDLED
	
	new ent = get_tr2(trace, TR_pHit)
	
	if (is_valid_ent(ent))
	{
		new ent,body
		get_user_aiming(id,ent,body)
		
		new szClass[10], szTarget[7];
		entity_get_string(ent, EV_SZ_classname, szClass, 9);
		entity_get_string(ent, EV_SZ_targetname, szTarget, 6);
		if (equal(szClass, "func_wall") && !equal(szTarget, "ignore") && ent != g_iEntBarrier && g_iShowMovers == 1)
		{
			if (g_boolCanBuild || access(id, ADMIN_SLAY))
			{
				set_hudmessage(0, 50, 255, -1.0, 0.55, 1, 0.01, 3.0, 0.01, 0.01);
				if (!BlockLocker(ent))
				{
					new szCurMover[32], szLastMover[32]
					if (GetEntMover(ent))
					{
						get_user_name(GetEntMover(ent),szCurMover,31)
						if (!GetLastMover(ent))
							ShowSyncHudMsg(id, g_HudSync, "Posesorul piesei este : %s", szCurMover);
					}
					if (GetLastMover(ent))
					{
						get_user_name(GetLastMover(ent),szLastMover,31)
						if (!GetEntMover(ent))
							ShowSyncHudMsg(id, g_HudSync, "Posesorul piesei este : %s", szLastMover);
					}
					if (GetEntMover(ent) && GetLastMover(ent))
						ShowSyncHudMsg(id, g_HudSync, "Posesorul piesei este : %s", szCurMover, szLastMover);
					else if (!GetEntMover(ent) && !GetLastMover(ent))
						ShowSyncHudMsg(id, g_HudSync, "Aceasta piesa este libera , o puteti lua");
				}
				else
				{
					new szEntOwner[32]
					get_user_name(BlockLocker(ent),szEntOwner,31)
					ShowSyncHudMsg(id, g_HudSync, "Piesa blocata de catre : %s", szEntOwner);
				}
			}
		}
	}
	else ClearSyncHud(id, g_HudSync);
	
	return PLUGIN_HANDLED
}

public fw_EmitSound(id,channel,const sample[],Float:volume,Float:attn,flags,pitch)
{
	if (!is_user_connected(id) || !g_isZombie[id] || g_boolCanBuild || g_boolPrepTime || g_boolRoundEnded)
		return FMRES_IGNORED;
		
	if(equal(sample[7], "die", 3) || equal(sample[7], "dea", 3))
	{
		emit_sound(id,channel,g_szZombieDie[random(sizeof g_szZombieDie - 1)],volume,attn,flags,pitch)
		return FMRES_SUPERCEDE
	}
	
	if(equal(sample[7], "bhit", 4))
	{
		emit_sound(id,channel,g_szZombiePain[random(sizeof g_szZombiePain - 1)],volume,attn,flags,pitch)
		return FMRES_SUPERCEDE
	}
	
	// Zombie attacks with knife
	if (equal(sample[8], "kni", 3))
	{
		if (equal(sample[14], "sla", 3)) // slash
		{
			emit_sound(id,channel,g_szZombieMiss[random(sizeof g_szZombieMiss - 1)],volume,attn,flags,pitch)
			return FMRES_SUPERCEDE;
		}
		if (equal(sample[14], "hit", 3)) // hit
		{
			if (sample[17] == 'w') // wall
			{
				emit_sound(id,channel,g_szZombieHit[random(sizeof g_szZombieHit - 1)],volume,attn,flags,pitch)
				return FMRES_SUPERCEDE;
			}
			else
			{
				emit_sound(id,channel,g_szZombieHit[random(sizeof g_szZombieHit - 1)],volume,attn,flags,pitch)
				return FMRES_SUPERCEDE;
			}
		}
		if (equal(sample[14], "sta", 3)) // stab
		{
			emit_sound(id,channel,g_szZombieMiss[random(sizeof g_szZombieMiss - 1)],volume,attn,flags,pitch)
			return FMRES_SUPERCEDE;
		}
	}
	
	return FMRES_IGNORED
}

public fw_Suicide(id) return FMRES_SUPERCEDE

public show_colors_menu(id,offset)
{
	if(offset<0) offset = 0

	new keys, curnum, menu[2048]
	for(new i=offset;i<MAX_COLORS;i++)
	{
		if (g_iColorMode == 0 || (g_iColorMode == 1 && !g_iColorOwner[i]))
		{
			g_iMenuOptions[id][curnum] = i
			keys += (1<<curnum)
	
			curnum++
			format(menu,2047,"%s^n%d. %s", menu, curnum, g_szColorName[i])
	
			if(curnum==8)
				break;
		}
	}

	format(menu,2047,"\yAlege-ti Culoarea:^nCuloarea Curenta: \r%s\w^n^n%s^n", g_szColorName[g_iColor[id]], menu)
	if(curnum==8 && offset<12)
	{
		keys += (1<<8)
		format(menu,2047,"%s^n9. Inainte",menu)
	}
	if(offset)
	{
		keys += (1<<9)
		format(menu,2047,"%s^n0. Inapoi",menu)
	}

	show_menu(id,keys,menu,-1,"ColorsSelect")
}

public colors_pushed(id,key)
{
	if(key<8)
	{
		g_iColorOwner[g_iMenuOptions[id][key]] = id
		g_iColorOwner[g_iColor[id]] = 0
		g_iColor[id] = g_iMenuOptions[id][key]
		print_color(id, "%s Ti-a ales^x04 %s^x01 ca culoare", MODNAME, g_szColorName[g_iColor[id]])
		g_iMenuOffset[id] = 0
		
		ExecuteForward(g_fwNewColor, g_fwDummyResult, id, g_iColor[id]);
	}
	else
	{
		if(key==8)
			g_iMenuOffset[id] += 8
		if(key==9)
			g_iMenuOffset[id] -= 8
		show_colors_menu(id,g_iMenuOffset[id])
	}

	return ;
}

public show_zclass_menu(id,offset)
{
	if(offset<0) offset = 0

	new keys, curnum, menu[512], szCache1[32], szCache2[32], iCache3
	for(new i=offset;i<g_iZClasses;i++)
	{
		ArrayGetString(g_zclass_name, i, szCache1, charsmax(szCache1))
		ArrayGetString(g_zclass_info, i, szCache2, charsmax(szCache2))
		iCache3 = ArrayGetCell(g_zclass_admin, i)
		
		// Add to menu
		if (i == g_iZombieClass[id])
			format(menu,511,"%s^n\d%d. %s %s \r%s", menu, curnum+1, szCache1, szCache2, iCache3 == ADMIN_ALL ? "" : "(Doar pentru ViP)")
		else
			format(menu,511,"%s^n\w%d. %s \y%s \r%s", menu, curnum+1, szCache1, szCache2, iCache3 == ADMIN_ALL ? "" : "(Doar pentru ViP)")
		
		g_iMenuOptions[id][curnum] = i
		keys += (1<<curnum)
	
		curnum++
		
		if(curnum==8)
			break;
	}

	format(menu,511,"\yAlege-ti Rasa:^n\w%s^n", menu)
	if(curnum==8 && offset<12)
	{
		keys += (1<<8)
		format(menu,511,"%s^n\w9. Inainte",menu)
	}
	if(offset)
	{
		keys += (1<<9)
		format(menu,511,"%s^n\w0. Inapoi",menu)
	}

	show_menu(id,keys,menu,-1,"ZClassSelect")
}

public zclass_pushed(id,key)
{
	if(key<8)
	{
		if (g_iMenuOptions[id][key] == g_iZombieClass[id])
		{
			client_cmd(id, "spk %s", LOCK_FAIL);
			
			print_color(id, "%s %L", MODNAME, LANG_SERVER, "CLASS_CURRENT")
			show_zclass_menu(id,g_iMenuOffset[id])
			return ;
		}
		
		new iCache3 = ArrayGetCell(g_zclass_admin, g_iMenuOptions[id][key])
		
		if ((iCache3 != ADMIN_ALL || !iCache3) && !access(id, iCache3))
		{
			print_color(id, "%s %L", MODNAME, LANG_SERVER, "CLASS_NO_ACCESS")
			show_zclass_menu(id,g_iMenuOffset[id])
			return ;
		}
		
		g_iNextClass[id] = g_iMenuOptions[id][key]
	
		new szCache1[32]
		ArrayGetString(g_zclass_name, g_iMenuOptions[id][key], szCache1, charsmax(szCache1))
		
		if (!g_isZombie[id] || (g_isZombie[id] && (g_boolCanBuild || g_boolPrepTime)))
			print_color(id, "%s Ti-ai ales^x04 %s^x01 ca rasa de Zombie", MODNAME, szCache1)
		if (!g_isAlive[id])
			print_color(id, "%s %L", MODNAME, LANG_SERVER, "CLASS_RESPAWN")
		g_iMenuOffset[id] = 0
		
		if (g_isZombie[id] && (g_boolCanBuild || g_boolPrepTime))
			ExecuteHamB(Ham_CS_RoundRespawn, id)
			
		ExecuteForward(g_fwClassPicked, g_fwDummyResult, id, g_iZombieClass[id]);
	}
	else
	{
		if(key==8)
			g_iMenuOffset[id] += 8
		if(key==9)
			g_iMenuOffset[id] -= 8
		show_zclass_menu(id,g_iMenuOffset[id])
	}

	return ;
}

/*------------------------------------------------------------------------------------------------*/
public show_method_menu(id)
{
	if(g_boolFirstTime[id])
	{
		g_boolFirstTime[id] = false
		show_primary_menu(id,0)
	}
	else
	{
		g_iMenuOffset[id] = 0
		show_menu(id,(1<<0)|(1<<1),"\yAlege-ti \rArmele^n^n\w1. \rArme Noi^n\w2. \yUltimele Arme",-1,"WeaponMethodMenu")
	}
}

public weapon_method_pushed(id,key)
{
	switch(key)
	{
		case 0: show_primary_menu(id,0)
		case 1: give_weapons(id)
	}
	return ;
}

public show_primary_menu(id,offset)
{
	if(offset<0) offset = 0

	new cvar_value[32]
	get_pcvar_string(g_pcvar_allowedweps,cvar_value,31)
	new flags = read_flags(cvar_value)

	new keys, curnum, menu[2048]
	for(new i=offset;i<19;i++)
	{
		if(flags & power(2,i))
		{
			g_iMenuOptions[id][curnum] = i
			keys += (1<<curnum)
	
			curnum++
			format(menu,2047,"%s^n%d. %s",menu,curnum,szWeaponNames[i])
	
			if(curnum==8)
				break;
		}
	}

	format(menu,2047,"\yArme Automate:\y^n%s^n",menu)
	if(curnum==8 && offset<12)
	{
		keys += (1<<8)
		format(menu,2047,"%s^n9. Inainte",menu)
	}
	if(offset)
	{
		keys += (1<<9)
		format(menu,2047,"%s^n0. Inapoi",menu)
	}

	show_menu(id,keys,menu,-1,"PrimaryWeaponSelect")
}

public prim_weapons_pushed(id,key)
{
	if(key<8)
	{
		g_iWeaponPicked[0][id] = g_iMenuOptions[id][key]
		g_iMenuOffset[id] = 0
		show_secondary_menu(id,0)
	}
	else
	{
		if(key==8)
			g_iMenuOffset[id] += 8
		if(key==9)
			g_iMenuOffset[id] -= 8
		show_primary_menu(id,g_iMenuOffset[id])
	}
	return ;
}

public show_secondary_menu(id,offset)
{
	if(offset<0) offset = 0

	new cvar_value[32]
	get_pcvar_string(g_pcvar_allowedweps,cvar_value,31)
	new flags = read_flags(cvar_value)

	new keys, curnum, menu[2048]
	for(new i=18;i<24;i++)
	{
		if(flags & power(2,i))
		{
			g_iMenuOptions[id][curnum] = i
			keys += (1<<curnum)
	
			curnum++
			format(menu,2047,"%s^n%d. %s",menu,curnum,szWeaponNames[i])
		}
	}

	format(menu,2047,"\rPistoale:\y^n%s",menu)

	show_menu(id,keys,menu,-1,"SecWeaponSelect")
}

public sec_weapons_pushed(id,key)
{
	if(key<8)
	{
		g_iWeaponPicked[1][id] = g_iMenuOptions[id][key]
	}
	give_weapons(id)
	return ;
}

public give_weapons(id)
{
	strip_user_weapons(id)
	give_item(id,"weapon_knife")
   
	new szWeapon[32], csw
	csw = csw_contant(g_iWeaponPicked[0][id])
	get_weaponname(csw,szWeapon,31)
	give_item(id,szWeapon)
	cs_set_user_bpammo(id,csw,999)
	g_iPrimaryWeapon[id] = csw

	csw = csw_contant(g_iWeaponPicked[1][id])
	get_weaponname(csw,szWeapon,31)
	give_item(id,szWeapon)
	cs_set_user_bpammo(id,csw,999)
	
	g_boolRepick[id] = false
}

stock csw_contant(weapon)
{
	new num = 29
	switch(weapon)
	{
		case 0: num = 3
		case 1: num = 5
		case 2: num = 7
		case 3: num = 8
		case 4: num = 12
		case 5: num = 13
		case 6: num = 14
		case 7: num = 15
		case 8: num = 18
		case 9: num = 19
		case 10: num = 20
		case 11: num = 21
		case 12: num = 22
		case 13: num = 23
		case 14: num = 24
		case 15: num = 27
		case 16: num = 28
		case 17: num = 30
		case 18: num = 1
		case 19: num = 10
		case 20: num = 11
		case 21: num = 16
		case 22: num = 17
		case 23: num = 26
		case 24:
		{
			new s_weapon[32]
		
			get_pcvar_string(g_pcvar_allowedweps,s_weapon,31)
		   
			new flags = read_flags(s_weapon)
			do
			{
				num = random_num(0,18)
				if(!(num & flags))
				{
					num = -1
				}
			}
			while(num==-1)
			num = csw_contant(num)
		}
		case 25:
		{
			new s_weapon[32]

			get_pcvar_string(g_pcvar_allowedweps,s_weapon,31)
		
			new flags = read_flags(s_weapon)
			do
			{
				num = random_num(18,23)
				if(!(num & flags))
				{
					num = -1
				}
			}
			while(num==-1)
			num = csw_contant(num)
		}
	}
	return num;
}
/*------------------------------------------------------------------------------------------------*/

Log(const message_fmt[], any:...)
{
	static message[256];
	vformat(message, sizeof(message) - 1, message_fmt, 2);
	
	static filename[96];
	static dir[64];
	if( !dir[0] )
	{
		get_basedir(dir, sizeof(dir) - 1);
		add(dir, sizeof(dir) - 1, "/logs");
	}
	
	format_time(filename, sizeof(filename) - 1, "%m-%d-%Y");
	format(filename, sizeof(filename) - 1, "%s/BaseBuilder_%s.log", dir, filename);
	
	log_to_file(filename, "%s", message);
}

print_color(target, const message[], any:...)
{
	static buffer[512], i, argscount
	argscount = numargs()
	
	// Send to everyone
	if (!target)
	{
		static player
		for (player = 1; player <= g_iMaxPlayers; player++)
		{
			// Not connected
			if (!g_isConnected[player])
				continue;
			
			// Remember changed arguments
			static changed[5], changedcount // [5] = max LANG_PLAYER occurencies
			changedcount = 0
			
			// Replace LANG_PLAYER with player id
			for (i = 2; i < argscount; i++)
			{
				if (getarg(i) == LANG_PLAYER)
				{
					setarg(i, 0, player)
					changed[changedcount] = i
					changedcount++
				}
			}
			
			// Format message for player
			vformat(buffer, charsmax(buffer), message, 3)
			
			// Send it
			message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
			write_byte(player)
			write_string(buffer)
			message_end()
			
			// Replace back player id's with LANG_PLAYER
			for (i = 0; i < changedcount; i++)
				setarg(changed[i], 0, LANG_PLAYER)
		}
	}
	// Send to specific target
	else
	{
		// Format message for player
		vformat(buffer, charsmax(buffer), message, 3)
		
		// Send it
		message_begin(MSG_ONE, g_msgSayText, _, target)
		write_byte(target)
		write_string(buffer)
		message_end()
	}
}

stock fm_cs_get_current_weapon_ent(id)
	return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX);

public native_register_zombie_class(const name[], const info[], const model[], const clawmodel[], hp, speed, Float:gravity, Float:knockback, adminflags, credits)
{
	if (!g_boolArraysCreated)
		return 0;
		
	// Strings passed byref
	param_convert(1)
	param_convert(2)
	param_convert(3)
	param_convert(4)
	
	// Add the class
	ArrayPushString(g_zclass_name, name)
	ArrayPushString(g_zclass_info, info)
	
	ArrayPushCell(g_zclass_modelsstart, ArraySize(g_zclass_playermodel))
	ArrayPushString(g_zclass_playermodel, model)
	ArrayPushCell(g_zclass_modelsend, ArraySize(g_zclass_playermodel))
	ArrayPushCell(g_zclass_modelindex, -1)
	
	ArrayPushString(g_zclass_clawmodel, clawmodel)
	ArrayPushCell(g_zclass_hp, hp)
	ArrayPushCell(g_zclass_spd, speed)
	ArrayPushCell(g_zclass_grav, gravity)
	ArrayPushCell(g_zclass_admin, adminflags)
	ArrayPushCell(g_zclass_credits, credits)
	
	// Set temporary new class flag
	ArrayPushCell(g_zclass_new, 1)
	
	// Override zombie classes data with our customizations
	new i, k, buffer[32], Float:buffer2, nummodels_custom, nummodels_default, prec_mdl[100], size = ArraySize(g_zclass2_realname)
	for (i = 0; i < size; i++)
	{
		ArrayGetString(g_zclass2_realname, i, buffer, charsmax(buffer))
		
		// Check if this is the intended class to override
		if (!equal(name, buffer))
			continue;
		
		// Remove new class flag
		ArraySetCell(g_zclass_new, g_iZClasses, 0)
		
		// Replace caption
		ArrayGetString(g_zclass2_name, i, buffer, charsmax(buffer))
		ArraySetString(g_zclass_name, g_iZClasses, buffer)
		
		// Replace info
		ArrayGetString(g_zclass2_info, i, buffer, charsmax(buffer))
		ArraySetString(g_zclass_info, g_iZClasses, buffer)
		
		nummodels_custom = ArrayGetCell(g_zclass2_modelsend, i) - ArrayGetCell(g_zclass2_modelsstart, i)
		nummodels_default = ArrayGetCell(g_zclass_modelsend, g_iZClasses) - ArrayGetCell(g_zclass_modelsstart, g_iZClasses)
			
		// Replace each player model and model index
		for (k = 0; k < min(nummodels_custom, nummodels_default); k++)
		{
			ArrayGetString(g_zclass2_playermodel, ArrayGetCell(g_zclass2_modelsstart, i) + k, buffer, charsmax(buffer))
			ArraySetString(g_zclass_playermodel, ArrayGetCell(g_zclass_modelsstart, g_iZClasses) + k, buffer)
				
			// Precache player model and replace its modelindex with the real one
			formatex(prec_mdl, charsmax(prec_mdl), "models/player/%s/%s.mdl", buffer, buffer)
			ArraySetCell(g_zclass_modelindex, ArrayGetCell(g_zclass_modelsstart, g_iZClasses) + k, engfunc(EngFunc_PrecacheModel, prec_mdl))
		}
			
		// We have more custom models than what we can accommodate,
		// Let's make some space...
		if (nummodels_custom > nummodels_default)
		{
			for (k = nummodels_default; k < nummodels_custom; k++)
			{
				ArrayGetString(g_zclass2_playermodel, ArrayGetCell(g_zclass2_modelsstart, i) + k, buffer, charsmax(buffer))
				ArrayInsertStringAfter(g_zclass_playermodel, ArrayGetCell(g_zclass_modelsstart, g_iZClasses) + k - 1, buffer)
				
				// Precache player model and retrieve its modelindex
				formatex(prec_mdl, charsmax(prec_mdl), "models/player/%s/%s.mdl", buffer, buffer)
				ArrayInsertCellAfter(g_zclass_modelindex, ArrayGetCell(g_zclass_modelsstart, g_iZClasses) + k - 1, engfunc(EngFunc_PrecacheModel, prec_mdl))
			}
				
			// Fix models end index for this class
			ArraySetCell(g_zclass_modelsend, g_iZClasses, ArrayGetCell(g_zclass_modelsend, g_iZClasses) + (nummodels_custom - nummodels_default))
		}
		
		// Replace clawmodel
		ArrayGetString(g_zclass2_clawmodel, i, buffer, charsmax(buffer))
		ArraySetString(g_zclass_clawmodel, g_iZClasses, buffer)
		
		// Precache clawmodel
		formatex(prec_mdl, charsmax(prec_mdl), "models/%s.mdl", buffer)
		engfunc(EngFunc_PrecacheModel, prec_mdl)
		
		// Replace health
		buffer[0] = ArrayGetCell(g_zclass2_hp, i)
		ArraySetCell(g_zclass_hp, g_iZClasses, buffer[0])
		
		// Replace speed
		buffer[0] = ArrayGetCell(g_zclass2_spd, i)
		ArraySetCell(g_zclass_spd, g_iZClasses, buffer[0])
		
		// Replace gravity
		buffer2 = Float:ArrayGetCell(g_zclass2_grav, i)
		ArraySetCell(g_zclass_grav, g_iZClasses, buffer2)
		
		// Replace admin flags
		buffer2 = ArrayGetCell(g_zclass2_admin, i)
		ArraySetCell(g_zclass_admin, g_iZClasses, buffer2)
	
		// Replace credits
		buffer2 = ArrayGetCell(g_zclass2_credits, i)
		ArraySetCell(g_zclass_credits, g_iZClasses, buffer2)
	}
	
	// If class was not overriden with customization data
	if (ArrayGetCell(g_zclass_new, g_iZClasses))
	{
		// Precache default class model and replace modelindex with the real one
		formatex(prec_mdl, charsmax(prec_mdl), "models/player/%s/%s.mdl", model, model)
		ArraySetCell(g_zclass_modelindex, ArrayGetCell(g_zclass_modelsstart, g_iZClasses), engfunc(EngFunc_PrecacheModel, prec_mdl))
		
		// Precache default clawmodel
		formatex(prec_mdl, charsmax(prec_mdl), "models/%s.mdl", clawmodel)
		engfunc(EngFunc_PrecacheModel, prec_mdl)
	}

	g_iZClasses++
	
	return g_iZClasses-1
}

public native_get_class_cost(classid)
{
	if (classid < 0 || classid >= g_iZClasses)
		return -1;
	
	return ArrayGetCell(g_zclass_credits, classid)
}

public native_get_user_zombie_class(id) return g_iZombieClass[id];
public native_get_user_next_class(id) return g_iNextClass[id];
public native_set_user_zombie_class(id, classid)
{
	if (classid < 0 || classid >= g_iZClasses)
		return 0;
	
	g_iNextClass[id] = classid
	return 1;
}

public native_is_user_zombie(id) return g_isZombie[id]
public native_is_user_banned(id) return g_isBuildBan[id]

public native_bool_buildphase() return g_boolCanBuild
public native_bool_prepphase() return g_boolPrepTime

public native_get_build_time()
{
	if (g_boolCanBuild)
		return g_iCountDown
		
	return 0;
}

public native_set_build_time(time)
{
	if (g_boolCanBuild)
	{
		g_iCountDown = time
		return 1
	}
		
	return 0;
}

public native_get_user_color(id) return g_iColor[id]
public native_set_user_color(id, color)
{
	g_iColor[id] = color
}

public native_drop_user_block(id)
{
	cmdStopEnt(id)
}
public native_get_user_block(id)
{
	if (g_iOwnedEnt[id])
		return g_iOwnedEnt[id]
		
	return 0;
}
public native_set_user_block(id, entity)
{
	if (is_valid_ent(entity) && !is_user_alive(entity) && !MovingEnt(entity))
		g_iOwnedEnt[id] = entity
}

public native_is_locked_block(entity)
{
	if (is_valid_ent(entity) && !is_user_alive(entity))
		return BlockLocker(entity) ? true : false
		
	return -1;
}
public native_lock_block(entity)
{
	if (is_valid_ent(entity) && !is_user_alive(entity) && !BlockLocker(entity))
	{
		LockBlock(entity, 33);
		set_pev(entity,pev_rendermode,kRenderTransColor)
		set_pev(entity,pev_rendercolor,Float:{LOCKED_COLOR})
		set_pev(entity,pev_renderamt,Float:{LOCKED_RENDERAMT})
	}
}
public native_unlock_block(entity)
{
	if (is_valid_ent(entity) && !is_user_alive(entity) && BlockLocker(entity))
	{
		UnlockBlock(entity)
		set_pev(entity,pev_rendermode,kRenderNormal)
	}
}

public native_release_zombies()
{
	if (g_boolCanBuild || g_boolPrepTime)
	{
		Release_Zombies()
		return 1;
	}
	return 0;
}

public native_set_user_primary(id, csw_primary)
{
	if (CSW_P228<=csw_primary<=CSW_P90)
	{
		g_iPrimaryWeapon[id] = csw_primary
		return g_iPrimaryWeapon[id];
	}
		
	return -1;
}

public native_get_user_primary(id) return g_iPrimaryWeapon[id]

public native_get_flags_build() 		return FLAGS_BUILD
public native_get_flags_lock() 		return FLAGS_LOCK
public native_get_flags_buildban() 	return FLAGS_BUILDBAN
public native_get_flags_swap() 		return FLAGS_SWAP
public native_get_flags_revive() 	return FLAGS_REVIVE
public native_get_flags_guns() 		return FLAGS_GUNS
public native_get_flags_release() 	return FLAGS_RELEASE
public native_get_flags_override() 	return FLAGS_OVERRIDE

/*public native_set_user_mult(id, attribute, Float: amount)
{
	if (attribute < ATT_HEALTH || attribute > ATT_GRAVITY)
		return 0;
		
	if (amount < 1.0)
		amount = 1.0
		
	g_fClassMultiplier[id][attribute] = amount
	
	return 1;
}*/


Lasermine + model schimbat
Descriere :[/b] : Acesta e pluginul de laser cu model schimbat
[b]Autor :[/color]
: ARUKARI

SMA :
| Afiseaza codul
/* Plugin generated by AMXX-Studio */
//#define BIOHAZARD_SUPPORT
//#define UL_MONEY_SUPPORT

#include <amxmodx>
#include <fakemeta>
#include <xs>

#if defined BIOHAZARD_SUPPORT
	#include <biohazard>
#endif

#if defined UL_MONEY_SUPPORT
	#include <money_ul>
#endif


#if AMXX_VERSION_NUM < 180
	#assert AMX Mod X v1.8.0 or greater library required!
#endif

#if defined BIOHAZARD_SUPPORT
	#define PLUGIN "LTM for BIOHAZARD"
	#define VERSION "+1.4"
#else
	#define PLUGIN "Laser/Tripmine Entity"
	#define VERSION "2.3"
#endif
#define AUTHOR "SandStriker"

#define RemoveEntity(%1)	engfunc(EngFunc_RemoveEntity,%1)
//#define ACCESSLEVEL		ADMIN_LEVEL_H
#define TASK_PLANT		15100
#define TASK_RESET		15500
#define TASK_RELEASE		15900

#define LASERMINE_TEAM		pev_iuser1//EV_INT_iuser1
#define LASERMINE_OWNER		pev_iuser2 //EV_INT_iuser3
#define LASERMINE_STEP		pev_iuser3
#define LASERMINE_HITING	pev_iuser4
#define LASERMINE_COUNT		pev_fuser1

#define LASERMINE_POWERUP	pev_fuser2
#define LASERMINE_BEAMTHINK	pev_fuser3

#define LASERMINE_BEAMENDPOINT	pev_vuser1
#define MAX_MINES		10
#define MODE_LASERMINE		0
#define OFFSET_TEAM 		114
#define OFFSET_MONEY		115
#define OFFSET_DEATH	 	444

#define cs_get_user_team(%1)		CsTeams:get_offset_value(%1,OFFSET_TEAM)
#define cs_get_user_deaths(%1)		get_offset_value(%1,OFFSET_DEATH)
#define cs_get_user_money(%1)		get_offset_value(%1,OFFSET_MONEY)
#define cs_set_user_money(%1,%2)	set_offset_value(%1,OFFSET_MONEY,%2)



enum CsTeams {
	CS_TEAM_UNASSIGNED = 0,
	CS_TEAM_T = 1,
	CS_TEAM_CT = 2,
	CS_TEAM_SPECTATOR = 3
};

enum tripmine_e {
	TRIPMINE_IDLE1 = 0,
	TRIPMINE_IDLE2,
	TRIPMINE_ARM1,
	TRIPMINE_ARM2,
	TRIPMINE_FIDGET,
	TRIPMINE_HOLSTER,
	TRIPMINE_DRAW,
	TRIPMINE_WORLD,
	TRIPMINE_GROUND,
};

enum
{
	POWERUP_THINK,
	BEAMBREAK_THINK,
	EXPLOSE_THINK
};

enum
{
	POWERUP_SOUND,
	ACTIVATE_SOUND,
	STOP_SOUND
};

new const
	ENT_MODELS[]	= "models/v_laser_dante.mdl",
	ENT_SOUND1[]	= "weapons/mine_deploy.wav",
	ENT_SOUND2[]	= "weapons/mine_charge.wav",
	ENT_SOUND3[]	= "weapons/mine_activate.wav",
	ENT_SOUND4[]	= "debris/beamstart9.wav",
	ENT_SOUND5[]	= "items/gunpickup2.wav",
	ENT_SOUND6[]	= "debris/bustglass1.wav",
	ENT_SOUND7[]	= "debris/bustglass2.wav",
	ENT_SPRITE1[] 	= "sprites/laserbeam.spr",
	ENT_SPRITE2[] 	= "sprites/zerogxplode.spr";

new const
	ENT_CLASS_NAME[]	= "lasermine",
	//ENT_CLASS_NAME2[]	= "info_target",
	ENT_CLASS_NAME3[]	= "func_breakable";

new const
#if defined BIOHAZARD_SUPPORT
	CHATTAG[] 		= "[BioLaser]",
#else
	CHATTAG[] 		= "[BB.BaDCoRe.Ro]",
#endif
	//STR_MINEDETNATED[] 	= "Your mine has detonated.",
	//STR_MINEDETNATED2[]	= "detonated your mine.",
	STR_NOTACTIVE[] 	= "Lasermines are not currently active.",
	STR_DONTHAVEMINE[]	= "You don't have lasermine.",
	//STR_CANTDEPLOY[]	= "Your team can't deploying lasermine!",
	STR_MAXDEPLOY[]		= "Maximum mines have been deployed.",
	STR_MANYPPL[]		= "Too many ppl on your team...",
	STR_PLANTWALL[]		= "You must plant the lasermine on a wall!",
	STR_REF[]		= "Refer to a lasermine rule with this server. say 'lasermine'",
#if defined BIOHAZARD_SUPPORT	
	STR_CBT[]		= "Your Zombie! Can't buy and deploying lasermine!",
#else
	STR_CBT[]		= "Your Team Can't buy and deploying lasermine!",
#endif
	STR_CANTBUY[]		= "Can't buying this server.",
	STR_HAVEMAX[]		= "You have a maximum lasermine.",
	STR_NOMONEY[]		= "You don't have enough money to buy a lasermine! ($",
	STR_NEEDED[]		= "needed)",
	STR_DELAY[]		= "You can buying and deploying lasermine in after",
	STR_SECONDS[]		= "seconds.",
	STR_BOUGHT[]		= "You have successfully bought a lasermine.",
	STR_STATE[]		= "LaserMines Ammo:",
	STR_NOACCESS[]		= "You can't access, this command.";

new g_EntMine;
new beam, boom
new 
	g_LENABLE,g_LFMONEY,g_LAMMO,g_LDMG,
	g_LTMAX,g_LCOST,g_LHEALTH,g_LMODE,g_LRADIUS,g_LRDMG,g_LFF,g_LCBT;
new
	g_LDELAY,/*g_LTHINK,*/g_LVISIBLE,
	g_LSTAMMO,g_LACCESS,g_LGLOW,g_LDMGMODE,g_LCLMODE,g_LCBRIGHT,g_LDSEC,g_LCMDMODE,g_LBUYMODE;

new g_dcount[33],g_nowtime,g_MaxPL
new bool:g_settinglaser[33]
new g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText,g_msgMoney;
new Float:plspeed[33]
new plsetting[33]
new g_havemine[33];
new g_deployed[33];

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	// Add your code here...
	register_clcmd("+setlaser","CreateLaserMine_Progress_b");
   	register_clcmd("-setlaser","StopCreateLaserMine");
	register_clcmd("+dellaser","ReturnLaserMine_Progress");
   	register_clcmd("-dellaser","StopReturnLaserMine");
	register_clcmd("say","say_lasermine");
	register_clcmd("buy_lasermine","BuyLasermine");

#if defined BIOHAZARD_SUPPORT
	g_LENABLE	= register_cvar("bio_ltm","1");
	g_LACCESS	= register_cvar("bio_ltm_acs","0");  		//0 all, 1 admin
	g_LMODE		= register_cvar("bio_ltm_mode","0"); 		//0 lasermine, 1 tripmine
	g_LAMMO		= register_cvar("bio_ltm_ammo","2");
	g_LDMG		= register_cvar("bio_ltm_dmg","60");		//laser hit dmg
	g_LCOST		= register_cvar("bio_ltm_cost","2500");
	g_LFMONEY	= register_cvar("bio_ltm_fragmoney","300");
	g_LHEALTH	= register_cvar("bio_ltm_health","500");
	g_LTMAX		= register_cvar("bio_ltm_teammax","10");
	g_LRADIUS	= register_cvar("bio_ltm_radius","320.0");
	g_LRDMG		= register_cvar("bio_ltm_rdmg","100"); 		//radius damage
	g_LFF		= register_cvar("bio_ltm_ff","0");
	g_LCBT		= register_cvar("bio_ltm_cbt","ALL");
	g_LBUYMODE	= register_cvar("bio_ltm_buymode","1");
	g_LDELAY	= register_cvar("bio_ltm_delay","15");
	//g_LTHINK = register_cvar("bio_ltm_think","0.01");
	g_LVISIBLE	= register_cvar("bio_ltm_line","1");
	g_LGLOW		= register_cvar("bio_ltm_glow","0");
	g_LCBRIGHT	= register_cvar("bio_ltm_bright","255");	//laser line brightness.
	g_LCLMODE	= register_cvar("bio_ltm_color","0");		//0 is team color,1 is green
	g_LDMGMODE	= register_cvar("bio_ltm_ldmgmode","0"); 	//0 - frame dmg, 1 - once dmg, 2 - 1 second dmg
	g_LDSEC		= register_cvar("bio_ltm_ldmgseconds","1");	//mode 2 only, damage / seconds. default 1 (sec)
	g_LSTAMMO	= register_cvar("bio_ltm_startammo","1");
	g_LCMDMODE	= register_cvar("bio_ltm_cmdmode","0");		//0 is +USE key, 1 is bind, 2 is each.
#else
	g_LENABLE	= register_cvar("amx_ltm","1");
	g_LACCESS	= register_cvar("amx_ltm_acs","0");  		//0 all, 1 admin
	g_LMODE		= register_cvar("amx_ltm_mode","0"); 		//0 lasermine, 1 tripmine
	g_LAMMO		= register_cvar("amx_ltm_ammo","2");
	g_LDMG		= register_cvar("amx_ltm_dmg","60"); 		//laser hit dmg
	g_LCOST		= register_cvar("amx_ltm_cost","2500");
	g_LFMONEY	= register_cvar("amx_ltm_fragmoney","300");
	g_LHEALTH	= register_cvar("amx_ltm_health","500");
	g_LTMAX		= register_cvar("amx_ltm_teammax","10");
	g_LRADIUS	= register_cvar("amx_ltm_radius","320.0");
	g_LRDMG		= register_cvar("amx_ltm_rdmg","100");		//radius damage
	g_LFF		= register_cvar("amx_ltm_ff","0");
	g_LCBT		= register_cvar("amx_ltm_cbt","ALL");
	g_LBUYMODE	= register_cvar("amx_ltm_buymode","1");
	g_LDELAY	= register_cvar("amx_ltm_delay","15");
	//g_LTHINK = register_cvar("amx_ltm_think","0.01")
	g_LVISIBLE	= register_cvar("amx_ltm_line","1");
	g_LGLOW		= register_cvar("amx_ltm_glow","0");
	g_LCBRIGHT	= register_cvar("amx_ltm_bright","255");	//laser line brightness.
	g_LCLMODE	= register_cvar("amx_ltm_color","0"); 		//0 is team color,1 is green
	g_LDMGMODE	= register_cvar("amx_ltm_ldmgmode","0"); 	//0 - frame dmg, 1 - once dmg, 2 - 1 second dmg
	g_LDSEC		= register_cvar("amx_ltm_ldmgseconds","1");	//mode 2 only, damage / seconds. default 1 (sec)
	g_LSTAMMO	= register_cvar("amx_ltm_startammo","1");
	g_LCMDMODE	= register_cvar("amx_ltm_cmdmode","0");		//0 is +USE key, 1 is bind, 2 is each.
#endif
	register_event("DeathMsg", "DeathEvent", "a");
 	register_event("CurWeapon", "standing", "be", "1=1");
	register_event("ResetHUD", "delaycount", "a");
	register_event("ResetHUD", "newround", "b");
	register_event("Damage","CutDeploy_onDamage","b");
	g_msgDeathMsg 	= get_user_msgid("DeathMsg");
	g_msgScoreInfo	= get_user_msgid("ScoreInfo");
	g_msgDamage 	= get_user_msgid("Damage");
	g_msgStatusText = get_user_msgid("StatusText");
	g_msgMoney	= get_user_msgid("Money");
	// -- Forward.
	register_forward(FM_Think, "ltm_Think" );
	register_forward(FM_PlayerPostThink, "ltm_PostThink" );
	register_forward(FM_PlayerPreThink, "ltm_PreThink");
}

public plugin_precache() 
{
	precache_sound(ENT_SOUND1);
	precache_sound(ENT_SOUND2);
	precache_sound(ENT_SOUND3);
	precache_sound(ENT_SOUND4);
	precache_sound(ENT_SOUND5);
	precache_sound(ENT_SOUND6);
	precache_sound(ENT_SOUND7);
	precache_model(ENT_MODELS);
	beam = precache_model(ENT_SPRITE1);
	boom = precache_model(ENT_SPRITE2);
	
	return PLUGIN_CONTINUE;
}

public plugin_modules() 
{
	require_module("fakemeta");
	require_module("cstrike");
	//require_module("fun")
}

public plugin_cfg()
{
	g_EntMine = engfunc(EngFunc_AllocString,ENT_CLASS_NAME3);
	arrayset(g_havemine,0,sizeof(g_havemine));
	arrayset(g_deployed,0,sizeof(g_deployed));
	g_MaxPL = get_maxplayers();

	new file[64]; get_localinfo("amxx_configsdir",file,63);
#if defined BIOHAZARD_SUPPORT
	format(file, 63, "%s/bhltm_cvars.cfg", file);
#else
	format(file, 63, "%s/ltm_cvars.cfg", file);
#endif
	if(file_exists(file)) server_cmd("exec %s", file), server_exec();

}

public delaycount(id)
{
	g_dcount[id] = floatround(get_gametime());
}

bool:CheckTime(id)
{
	g_nowtime = floatround(get_gametime()) - g_dcount[id];
	if(g_nowtime >= get_pcvar_num(g_LDELAY))
		return true;
	return false;
}

public CreateLaserMine_Progress_b(id)
{
	if(get_pcvar_num(g_LCMDMODE) != 0)
		CreateLaserMine_Progress(id);
	return PLUGIN_HANDLED;
}

public CreateLaserMine_Progress(id)
{

	if (!CreateCheck(id))
		return PLUGIN_HANDLED;
	g_settinglaser[id] = true;

	message_begin( MSG_ONE, 108, {0,0,0}, id );
	write_byte(1);
	write_byte(0);
	message_end();

	set_task(1.2, "Spawn", (TASK_PLANT + id));

	return PLUGIN_HANDLED;
}

public ReturnLaserMine_Progress(id)
{

	if (!ReturnCheck(id))
		return PLUGIN_HANDLED;
	g_settinglaser[id] = true;

	message_begin( MSG_ONE, 108, {0,0,0}, id );
	write_byte(1);
	write_byte(0);
	message_end();

	set_task(1.2, "ReturnMine", (TASK_RELEASE + id));
	

	return PLUGIN_HANDLED;
}

public StopCreateLaserMine(id)
{

	DeleteTask(id);
	message_begin(MSG_ONE, 108, {0,0,0}, id);
	write_byte(0);
	write_byte(0);
	message_end();

	return PLUGIN_HANDLED;
}

public StopReturnLaserMine(id)
{

	DeleteTask(id);
	message_begin(MSG_ONE, 108, {0,0,0}, id);
	write_byte(0);
	write_byte(0);
	message_end();

	return PLUGIN_HANDLED;
}

public ReturnMine(id)
{
	id -= TASK_RELEASE;
	new tgt,body,Float:vo[3],Float:to[3];
	get_user_aiming(id,tgt,body);
	if(!pev_valid(tgt)) return;
	pev(id,pev_origin,vo);
	pev(tgt,pev_origin,to);
	if(get_distance_f(vo,to) > 70.0) return;
	
	new EntityName[32];
	pev(tgt, pev_classname, EntityName, 31);
	if(!equal(EntityName, ENT_CLASS_NAME)) return;
	if(pev(tgt,LASERMINE_OWNER) != id) return;
	RemoveEntity(tgt);

	g_havemine[id] ++;
	g_deployed[id] --;
	emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	ShowAmmo(id)

	return;
}

public Spawn( id )
{
	id -= TASK_PLANT
	// motor
	new i_Ent = engfunc(EngFunc_CreateNamedEntity,g_EntMine);
	if(!i_Ent)
	{
		client_print(id,print_chat,"[Laesrmine Debug] Can't Create Entity");
		return PLUGIN_HANDLED_MAIN;
	}
	set_pev(i_Ent,pev_classname,ENT_CLASS_NAME);

	engfunc(EngFunc_SetModel,i_Ent,ENT_MODELS);

	set_pev(i_Ent,pev_solid,SOLID_NOT);
	set_pev(i_Ent,pev_movetype,MOVETYPE_FLY);

	set_pev(i_Ent,pev_frame,0);
	set_pev(i_Ent,pev_body,3);
	set_pev(i_Ent,pev_sequence,TRIPMINE_WORLD);
	set_pev(i_Ent,pev_framerate,0);
    
	set_pev(i_Ent,pev_takedamage,DAMAGE_YES);
	
	set_pev(i_Ent,pev_dmg,100.0);
	set_user_health(i_Ent,get_pcvar_num(g_LHEALTH));
	new Float:vOrigin[3];
	new	Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
		Float:vTraceEnd[3],Float:vEntAngles[3];
	pev( id, pev_origin, vOrigin );
	velocity_by_aim( id, 128, vTraceDirection );
	xs_vec_add( vTraceDirection, vOrigin, vTraceEnd );
	
	engfunc( EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0 );
	
	new Float:fFraction;
	get_tr2( 0, TR_flFraction, fFraction );
	

	// -- We hit something!
	if ( fFraction < 1.0 )
	{
		// -- Save results to be used later.
		get_tr2( 0, TR_vecEndPos, vTraceEnd );
		get_tr2( 0, TR_vecPlaneNormal, vNormal );
	}


	xs_vec_mul_scalar( vNormal, 8.0, vNormal );
	xs_vec_add( vTraceEnd, vNormal, vNewOrigin );

	engfunc(EngFunc_SetSize, i_Ent, Float:{ -4.0, -4.0, -4.0 }, Float:{ 4.0, 4.0, 4.0 } );
	engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin );

	// -- Rotate tripmine.
	vector_to_angle(vNormal,vEntAngles );
	set_pev(i_Ent,pev_angles,vEntAngles );

	// -- Calculate laser end origin.
	new Float:vBeamEnd[3], Float:vTracedBeamEnd[3];
        
	xs_vec_mul_scalar(vNormal, 8192.0, vNormal );
	xs_vec_add( vNewOrigin, vNormal, vBeamEnd );

	engfunc( EngFunc_TraceLine, vNewOrigin, vBeamEnd, IGNORE_MONSTERS, -1, 0 );

	get_tr2( 0, TR_vecPlaneNormal, vNormal );
	get_tr2( 0, TR_vecEndPos, vTracedBeamEnd );

	// -- Save results to be used later.
	set_pev(i_Ent, LASERMINE_OWNER, id );
	set_pev(i_Ent,LASERMINE_BEAMENDPOINT,vTracedBeamEnd);
	set_pev(i_Ent,LASERMINE_TEAM,int:cs_get_user_team(id));
	new Float:fCurrTime = get_gametime();

	set_pev(i_Ent,LASERMINE_POWERUP, fCurrTime + 2.5 );
   
	set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);
	set_pev(i_Ent,pev_nextthink, fCurrTime + 0.2 );

	PlaySound(i_Ent,POWERUP_SOUND );
	g_deployed[id]++;
	g_havemine[id]--;
	DeleteTask(id);
	ShowAmmo(id);
	return 1;
}

stock TeamDeployedCount(id)
{
	//new tid[32];
	
	static i;
	static CsTeams:t;t = cs_get_user_team(id);
	static cnt;cnt=0;

	for(i = 1;i <= g_MaxPL;i++)
	{
		if(is_user_connected(i))
			if(t == cs_get_user_team(i))
				cnt += g_deployed[i];
	}

	return cnt;
}

bool:CheckCanTeam(id)
{
	new arg[5],CsTeam:num;
	get_pcvar_string(g_LCBT,arg,3);
	if(equali(arg,"T"))
	{
		num = CsTeam:CS_TEAM_T;
	}
	else if(equali(arg,"CT"))
	{
		num = CsTeam:CS_TEAM_CT;
	}
	else if(equali(arg,"ALL"))
	{
		num = CsTeam:CS_TEAM_UNASSIGNED;
	}	
	else
	{
		num = CsTeam:CS_TEAM_UNASSIGNED;
	}
	if(num != CsTeam:CS_TEAM_UNASSIGNED && num != CsTeam:cs_get_user_team(id))
		return false;
	return true;
}

bool:CanCheck(id,mode)
{
	if( !get_pcvar_num( g_LENABLE ) )
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_NOTACTIVE);
		return false;
	}
	if( get_pcvar_num(g_LACCESS) != 0)
		if(!(get_user_flags(id) & ADMIN_IMMUNITY))
		{
			client_print(id, print_chat, "%s %s",CHATTAG,STR_NOACCESS);
			return false;
		}
	if(!pev_user_alive(id)) return false;
#if defined BIOHAZARD_SUPPORT
	if(is_user_zombie(id))
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT);
		return false;
	}
#endif
	if (!CheckCanTeam(id))
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT);
		return false;
	}
	if( mode == 0)
	{
		if(g_havemine[id] <= 0)
		{
			client_print(id, print_chat, "%s %s",CHATTAG,STR_DONTHAVEMINE);
			return false;
		}
	}
	if (mode == 1)
	{
		if (get_pcvar_num(g_LBUYMODE) == 0)
		{
			client_print(id, print_chat, "%s %s",CHATTAG,STR_CANTBUY);
			return false;
		}
		if (g_havemine[id] >= get_pcvar_num(g_LAMMO))
		{
			client_print(id, print_chat, "%s %s",CHATTAG,STR_HAVEMAX);
			return false;
		}
		if (cs_get_user_money(id) < get_pcvar_num(g_LCOST))
		{
			client_print(id, print_chat, "%s %s%d %s",CHATTAG, STR_NOMONEY,get_pcvar_num(g_LCOST),STR_NEEDED);
			return false;
		}
	}
	if(!CheckTime(id))
	{
		client_print(id,print_chat, "%s %s %d %s",CHATTAG,STR_DELAY,get_pcvar_num(g_LDELAY)-g_nowtime,STR_SECONDS);
		return false;
	}

	return true;
}

bool:ReturnCheck( id )
{
	if(!CanCheck(id,-1)) return false;
	if(g_havemine[id] + 1 > get_pcvar_num(g_LAMMO)) return false;
	new tgt,body,Float:vo[3],Float:to[3];
	get_user_aiming(id,tgt,body);
	if(!pev_valid(tgt)) return false;
	pev(id,pev_origin,vo);
	pev(tgt,pev_origin,to);
	if(get_distance_f(vo,to) > 70.0) return false;
	
	new EntityName[32];
	pev(tgt, pev_classname, EntityName, 31);
	if(!equal(EntityName, ENT_CLASS_NAME)) return false;
	if(pev(tgt,LASERMINE_OWNER) != id) return false;
	
	return true;
}

bool:CreateCheck( id )
{
	if (!CanCheck(id,0)) return false;
	if (g_deployed[id] >= get_pcvar_num(g_LAMMO))
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_MAXDEPLOY);
		return false;
	}

	//client_print(id,print_chat,"[Lasermine] your team deployed %d",TeamDeployedCount(id))
	if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX))
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_MANYPPL);
		return false;
	}
	
	new Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3];
	
	pev( id, pev_origin, vOrigin );
	velocity_by_aim( id, 128, vTraceDirection );
	xs_vec_add( vTraceDirection, vOrigin, vTraceEnd );
	
	engfunc( EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0 );
	
	new Float:fFraction,Float:vTraceNormal[3];
	get_tr2( 0, TR_flFraction, fFraction );
	
	// -- We hit something!
	if ( fFraction < 1.0 )
	{
		// -- Save results to be used later.
		get_tr2( 0, TR_vecEndPos, vTraceEnd );
		get_tr2( 0, TR_vecPlaneNormal, vTraceNormal );

		//get_tr2( 0, TR_pHit );

		return true;
	}

	client_print(id, print_chat, "%s %s",CHATTAG,STR_PLANTWALL)
	DeleteTask(id);
	// -- Did not touched something. (not solid)
	return false;
}

public ltm_Think( i_Ent )
{
	if ( !pev_valid( i_Ent ) )
		return FMRES_IGNORED;
	new EntityName[32];
	pev( i_Ent, pev_classname, EntityName, 31);
	if(!get_pcvar_num(g_LENABLE)) return FMRES_IGNORED;
	// -- Entity is not a tripmine, ignoring the next...
	if ( !equal( EntityName, ENT_CLASS_NAME ) )
		return FMRES_IGNORED;

	static Float:fCurrTime;
	fCurrTime = get_gametime();

	switch( pev( i_Ent, LASERMINE_STEP ) )
	{
		case POWERUP_THINK :
		{
			new Float:fPowerupTime;
			pev( i_Ent, LASERMINE_POWERUP, fPowerupTime );

			if( fCurrTime > fPowerupTime )
			{
				set_pev( i_Ent, pev_solid, SOLID_BBOX );
				set_pev( i_Ent, LASERMINE_STEP, BEAMBREAK_THINK );

				PlaySound( i_Ent, ACTIVATE_SOUND );
			}
			if(get_pcvar_num(g_LGLOW)!=0)
			{
				if(get_pcvar_num(g_LCLMODE)==0)
				{
					switch (pev(i_Ent,LASERMINE_TEAM))
					{
						case CS_TEAM_T: set_rendering(i_Ent,kRenderFxGlowShell,255,0,0,kRenderNormal,5);
						case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,0,0,255,kRenderNormal,5);
					}
				}else
				{
					set_rendering(i_Ent,kRenderFxGlowShell,0,255,0,kRenderNormal,5);
				}
			}
			set_pev( i_Ent, pev_nextthink, fCurrTime + 0.1 );
		}
		case BEAMBREAK_THINK :
		{
			static Float:vEnd[3],Float:vOrigin[3];
			pev( i_Ent, pev_origin, vOrigin );
			pev( i_Ent, LASERMINE_BEAMENDPOINT, vEnd );

			static iHit, Float:fFraction;
			engfunc( EngFunc_TraceLine, vOrigin, vEnd, DONT_IGNORE_MONSTERS, i_Ent, 0 );

			get_tr2( 0, TR_flFraction, fFraction );
			iHit = get_tr2( 0, TR_pHit );

			// -- Something has passed the laser.
			if ( fFraction < 1.0 )
			{
				// -- Ignoring others tripmines entity.
				if(pev_valid(iHit))
				{
					pev( iHit, pev_classname, EntityName, 31 );
	
					if( !equal( EntityName, ENT_CLASS_NAME ) )
					{
						set_pev( i_Ent, pev_enemy, iHit );
						if(get_pcvar_num(g_LMODE) == MODE_LASERMINE)
							CreateLaserDamage(i_Ent,iHit);
						else
							if(get_pcvar_num(g_LFF) || CsTeams:pev(i_Ent,LASERMINE_TEAM) != cs_get_user_team(iHit))
								set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK );
				
						set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) );
					}
				}
			}
			if(get_pcvar_num(g_LDMGMODE)!=0)
				if(pev(i_Ent,LASERMINE_HITING) != iHit)
					set_pev(i_Ent,LASERMINE_HITING,iHit);
 
			// -- Tripmine is still there.
			if ( pev_valid( i_Ent ))
			{
				static Float:fHealth;
				pev( i_Ent, pev_health, fHealth );

				if( fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME))
				{
					set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK );
					set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) );
				}
                    
				static Float:fBeamthink;
				pev( i_Ent, LASERMINE_BEAMTHINK, fBeamthink );
                    
				if( fBeamthink < fCurrTime && get_pcvar_num(g_LVISIBLE))
				{
					DrawLaser(i_Ent, vOrigin, vEnd );
					set_pev( i_Ent, LASERMINE_BEAMTHINK, fCurrTime + 0.1 );
				}
				set_pev( i_Ent, pev_nextthink, fCurrTime + 0.01 );
			}
		}
		case EXPLOSE_THINK :
		{
			// -- Stopping entity to think
			set_pev( i_Ent, pev_nextthink, 0.0 );
			PlaySound( i_Ent, STOP_SOUND );
			g_deployed[pev(i_Ent,LASERMINE_OWNER)]--;
			CreateExplosion( i_Ent );
			CreateDamage(i_Ent,get_pcvar_float(g_LRDMG),get_pcvar_float(g_LRADIUS))
			RemoveEntity   ( i_Ent );
		}
	}

	return FMRES_IGNORED;
}

PlaySound( i_Ent, i_SoundType )
{
	switch ( i_SoundType )
	{
		case POWERUP_SOUND :
		{
			emit_sound( i_Ent, CHAN_VOICE, ENT_SOUND1, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
			emit_sound( i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, 0, PITCH_NORM );
		}
		case ACTIVATE_SOUND :
		{
			emit_sound( i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, 1, 75 );
		}
		case STOP_SOUND :
		{
			emit_sound( i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, SND_STOP, PITCH_NORM );
			emit_sound( i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, SND_STOP, 75 );
		}
	}
}

DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3] )
{
	new tcolor[3];
	new teamid = pev(i_Ent, LASERMINE_TEAM);
	if(get_pcvar_num(g_LCLMODE) == 0)
	{
		switch(teamid){
			case 1:{
				tcolor[0] = 255;
				tcolor[1] = 0;
				tcolor[2] = 0;
			}
			case 2:{
				tcolor[0] = 0;
				tcolor[1] = 0;
				tcolor[2] = 255;
			}
		}
	}else
	{
		tcolor[0] = 0;
		tcolor[1] = 255;
		tcolor[2] = 0;
	}
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
	write_byte(TE_BEAMPOINTS);
	engfunc(EngFunc_WriteCoord,v_Origin[0]);
	engfunc(EngFunc_WriteCoord,v_Origin[1]);
	engfunc(EngFunc_WriteCoord,v_Origin[2]);
	engfunc(EngFunc_WriteCoord,v_EndOrigin[0]); //Random
	engfunc(EngFunc_WriteCoord,v_EndOrigin[1]); //Random
	engfunc(EngFunc_WriteCoord,v_EndOrigin[2]); //Random
	write_short(beam);
	write_byte(0);
	write_byte(0);
	write_byte(1);	//Life
	write_byte(5);	//Width
	write_byte(0);	//wave
	write_byte(tcolor[0]); // r
	write_byte(tcolor[1]); // g
	write_byte(tcolor[2]); // b
	write_byte(get_pcvar_num(g_LCBRIGHT));
	write_byte(255);
	message_end();
}
/*
CreateDamage(iCurrent,DmgMAX,Float:Radius)
{
	new AtkID = pev(iCurrent,LASERMINE_OWNER)// entity_get_int(iCurrent,LASERMINE_OWNER)
	new TeamID= pev(iCurrent,LASERMINE_TEAM) //entity_get_int(iCurrent,LASERMINE_INT_TEAM)
	new Player = -1;
	new Float:distance,dmg;
	new Float:tOrigin[3];
	new Float:vOrigin[3];
	new iHitHP,iHitTeam;
	pev(iCurrent,pev_origin,vOrigin);
	while((Player = engfunc(EngFunc_FindEntityInSphere, Player, vOrigin, Radius)) != 0)
	{
		if(is_user_alive(Player))
		{
			pev(Player,pev_origin,tOrigin)
			distance = get_distance_f(vOrigin, tOrigin)
			dmg = floatround(DmgMAX - ((DmgMAX / Radius) * distance))
			iHitHP = pev_user_health(Player) - dmg
			iHitTeam = int:bio_get_user_team(Player)
			if(iHitHP <= 0)
			{
				if(iHitTeam != TeamID)
				{
					cs_set_user_money(AtkID,cs_get_user_money(AtkID) + get_pcvar_num(g_LFMONEY))
					set_score(AtkID,Player,1,iHitHP)
				}else
				{
					if(get_pcvar_num(g_LFF))
					{
						cs_set_user_money(AtkID,cs_get_user_money(AtkID) - get_pcvar_num(g_LFMONEY))
						set_score(AtkID,Player,-1,iHitHP)
					}
				}
			}else
			{
				if(iHitTeam != TeamID || get_pcvar_num(g_LFF))
				{
					//set_pev(Player,pev_health,iHitHP)
					set_user_health(Player, iHitHP)
					message_begin(MSG_ONE_UNRELIABLE, g_msgDamage, {0,0,0}, Player) 
					write_byte(dmg)
					write_byte(dmg)
					write_long(DMG_BULLET)
					engfunc(EngFunc_WriteCoord,vOrigin[0])
					engfunc(EngFunc_WriteCoord,vOrigin[1])
					engfunc(EngFunc_WriteCoord,vOrigin[2])
					message_end()
				}
			}
		}
		Player =  engfunc(EngFunc_FindEntityInSphere,Player,vOrigin,Radius)
	}
	return PLUGIN_CONTINUE
}
*/
CreateDamage(iCurrent,Float:DmgMAX,Float:Radius)
{
	// Get given parameters
	
	new Float:vecSrc[3];
	pev(iCurrent, pev_origin, vecSrc);

	new AtkID =pev(iCurrent,LASERMINE_OWNER);
	new TeamID=pev(iCurrent,LASERMINE_TEAM);

	new ent = -1;
	new Float:tmpdmg = DmgMAX;

	new Float:kickback = 0.0;
	
	// Needed for doing some nice calculations :P
	new Float:Tabsmin[3], Float:Tabsmax[3];
	new Float:vecSpot[3];
	new Float:Aabsmin[3], Float:Aabsmax[3];
	new Float:vecSee[3];
	new trRes;
	new Float:flFraction;
	new Float:vecEndPos[3];
	new Float:distance;
	new Float:origin[3], Float:vecPush[3];
	new Float:invlen;
	new Float:velocity[3];
	new iHitHP,iHitTeam;
	// Calculate falloff
	new Float:falloff;
	if (Radius > 0.0)
	{
		falloff = DmgMAX / Radius;
	} else {
		falloff = 1.0;
	}
	
	// Find monsters and players inside a specifiec radius
	while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0)
	{
		if(!pev_valid(ent)) continue;
		if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
		{
			// Entity is not a player or monster, ignore it
			continue;
		}
		if(!pev_user_alive(ent)) continue;
		// Reset data
		kickback = 1.0;
		tmpdmg = DmgMAX;
		
		// The following calculations are provided by Orangutanz, THANKS!
		// We use absmin and absmax for the most accurate information
		pev(ent, pev_absmin, Tabsmin);
		pev(ent, pev_absmax, Tabsmax);
		xs_vec_add(Tabsmin,Tabsmax,Tabsmin);
		xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);
		
		pev(iCurrent, pev_absmin, Aabsmin);
		pev(iCurrent, pev_absmax, Aabsmax);
		xs_vec_add(Aabsmin,Aabsmax,Aabsmin);
		xs_vec_mul_scalar(Aabsmin,0.5,vecSee);
		
		engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes);
		get_tr2(trRes, TR_flFraction, flFraction);
		// Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD)
		if (flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent)
		{
			// Work out the distance between impact and entity
			get_tr2(trRes, TR_vecEndPos, vecEndPos);
			
			distance = get_distance_f(vecSrc, vecEndPos) * falloff;
			tmpdmg -= distance;
			if(tmpdmg < 0.0)
				tmpdmg = 0.0;
			
			// Kickback Effect
			if(kickback != 0.0)
			{
				xs_vec_sub(vecSpot,vecSee,origin);
				
				invlen = 1.0/get_distance_f(vecSpot, vecSee);

				xs_vec_mul_scalar(origin,invlen,vecPush);
				pev(ent, pev_velocity, velocity)
				xs_vec_mul_scalar(vecPush,tmpdmg,vecPush);
				xs_vec_mul_scalar(vecPush,kickback,vecPush);
				xs_vec_add(velocity,vecPush,velocity);
				
				if(tmpdmg < 60.0)
				{
					xs_vec_mul_scalar(velocity,12.0,velocity);
				} else {
					xs_vec_mul_scalar(velocity,4.0,velocity);
				}
				
				if(velocity[0] != 0.0 || velocity[1] != 0.0 || velocity[2] != 0.0)
				{
					// There's some movement todo :)
					set_pev(ent, pev_velocity, velocity)
				}
			}

			iHitHP = pev_user_health(ent) - floatround(tmpdmg)
			iHitTeam = int:cs_get_user_team(ent)
			if(iHitHP <= 0)
			{
				if(iHitTeam != TeamID)
				{
					cs_set_user_money(AtkID,cs_get_user_money(AtkID) + get_pcvar_num(g_LFMONEY))
					set_score(AtkID,ent,1,iHitHP)
				}else
				{
					if(get_pcvar_num(g_LFF))
					{
						cs_set_user_money(AtkID,cs_get_user_money(AtkID) - get_pcvar_num(g_LFMONEY))
						set_score(AtkID,ent,-1,iHitHP)
					}
				}
			}else
			{
				if(iHitTeam != TeamID || get_pcvar_num(g_LFF))
				{
					//set_pev(Player,pev_health,iHitHP)
					set_user_health(ent, iHitHP)
					engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},ent);
					write_byte(floatround(tmpdmg))
					write_byte(floatround(tmpdmg))
					write_long(DMG_BULLET)
					engfunc(EngFunc_WriteCoord,vecSrc[0])
					engfunc(EngFunc_WriteCoord,vecSrc[1])
					engfunc(EngFunc_WriteCoord,vecSrc[2])
					message_end()
				}
			}	
		}
	}
	
	return
}

bool:pev_user_alive(ent)
{
	new deadflag = pev(ent,pev_deadflag);
	if(deadflag != DEAD_NO)
		return false;
	return true;
}

CreateExplosion(iCurrent)
{
	
	new Float:vOrigin[3];
	pev(iCurrent,pev_origin,vOrigin);

	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(99); //99 = KillBeam
	write_short(iCurrent);
	message_end();

	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0);
	write_byte(TE_EXPLOSION);
	engfunc(EngFunc_WriteCoord,vOrigin[0]);
	engfunc(EngFunc_WriteCoord,vOrigin[1]);
	engfunc(EngFunc_WriteCoord,vOrigin[2]);
	write_short(boom);
	write_byte(30);
	write_byte(15);
	write_byte(0);
	message_end();
}

CreateLaserDamage(iCurrent,isHit)
{
	if(isHit < 0 ) return PLUGIN_CONTINUE
	switch(get_pcvar_num(g_LDMGMODE))
	{
		case 1:
		{
			if(pev(iCurrent,LASERMINE_HITING) == isHit)
				return PLUGIN_CONTINUE
		}
		case 2:
		{
			if(pev(iCurrent,LASERMINE_HITING) == isHit)
			{
				static Float:cnt
				static now,htime;now = floatround(get_gametime())

				pev(iCurrent,LASERMINE_COUNT,cnt)
				htime = floatround(cnt)
				if(now - htime < get_pcvar_num(g_LDSEC))
				{
					return PLUGIN_CONTINUE;
				}else{
					set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
				}
			}else
			{
				set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
			}
		}
	}

	new Float:vOrigin[3],Float:vEnd[3]
	pev(iCurrent,pev_origin,vOrigin)
	pev(iCurrent,pev_vuser1,vEnd)

	new teamid = pev(iCurrent, LASERMINE_TEAM)

	new szClassName[32]
	new Alive,God
	new iHitTeam,iHitHP,id
	new hitscore

	
	szClassName[0] = '^0'
	pev(isHit,pev_classname,szClassName,32)
	
	if((pev(isHit, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
	{
		Alive = pev_user_alive(isHit)
		God = get_user_godmode(isHit)
		if(!Alive || God) return PLUGIN_CONTINUE
			 
		iHitTeam = int:cs_get_user_team(isHit)
		iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG)
		id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32]
		if(iHitHP <= 0)
		{
			if(iHitTeam != teamid)
			{
				emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM )
				hitscore = 1
				cs_set_user_money(id,cs_get_user_money(id) + get_pcvar_num(g_LFMONEY))
				set_score(id,isHit,hitscore,iHitHP)
			}else
			{
				if(get_pcvar_num(g_LFF))
				{
					emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM )
					hitscore = -1									
					cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(g_LFMONEY))
					set_score(id,isHit,hitscore,iHitHP)
				}
			}
		}else if(iHitTeam != teamid || get_pcvar_num(g_LFF))
		{
			emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM )
			set_user_health(isHit,iHitHP)
			set_pev(iCurrent,LASERMINE_HITING,isHit);
			
			engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},isHit);
			write_byte(get_pcvar_num(g_LDMG))
			write_byte(get_pcvar_num(g_LDMG))
			write_long(DMG_BULLET)
			engfunc(EngFunc_WriteCoord,vOrigin[0])
			engfunc(EngFunc_WriteCoord,vOrigin[1])
			engfunc(EngFunc_WriteCoord,vOrigin[2])
			message_end()
		}
	}else if(equal(szClassName, ENT_CLASS_NAME3))
	{
		new hl;
		hl = pev_user_health(isHit);
		set_user_health(isHit,hl-get_pcvar_num(g_LDMG));
	}
	return PLUGIN_CONTINUE
}

stock pev_user_health(id)
{
	new Float:health
	pev(id,pev_health,health)
	return floatround(health)
}

stock set_user_health(id,health)
{
	health > 0 ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id);
}

stock get_user_godmode(index) {
	new Float:val
	pev(index, pev_takedamage, val)

	return (val == DAMAGE_NO)
}

stock set_user_frags(index, frags)
{
	set_pev(index, pev_frags, float(frags))

	return 1
}

stock pev_user_frags(index)
{
	new Float:frags;
	pev(index,pev_frags,frags);
	return floatround(frags);
}

set_score(id,target,hitscore,HP){

	new idfrags = pev_user_frags(id) + hitscore// get_user_frags(id) + hitscore	
	set_user_frags(id,idfrags)
	//set_user_frags(id, idfrags)
	//entity_set_float(id, EV_FL_frags, float(idfrags))
	
	new tarfrags = pev_user_frags(target) + 1 //get_user_frags(target) + 1
	set_user_frags(target,tarfrags)
	//set_user_frags(target,tarfrags)
	//entity_set_float(target, EV_FL_frags, float(tarfrags))
	
	new idteam = int:cs_get_user_team(id)
	new iddeaths = cs_get_user_deaths(id)


	message_begin(MSG_ALL, g_msgDeathMsg, {0, 0, 0} ,0)
	write_byte(id)
	write_byte(target)
	write_byte(0)
	write_string(ENT_CLASS_NAME)
	message_end()

	message_begin(MSG_ALL, g_msgScoreInfo)
	write_byte(id)
	write_short(idfrags)
	write_short(iddeaths)
	write_short(0)
	write_short(idteam)
	message_end()

	set_msg_block(g_msgDeathMsg, BLOCK_ONCE)

	//entity_set_float(target, EV_FL_health,float(HP))
	set_user_health(target, HP)
	//set_pev(target,pev_health,HP)

}

public BuyLasermine(id)
{	
	if( !CanCheck(id,1) ) return PLUGIN_CONTINUE
	cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(g_LCOST))
	g_havemine[id]++;
	client_print(id, print_chat, "%s %s",CHATTAG,STR_BOUGHT)
	emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	ShowAmmo(id)
	return PLUGIN_HANDLED
}

ShowAmmo(id)
{ 
    new ammo[51] 
    formatex(ammo, 50, "%s %i/%i",STR_STATE, g_havemine[id],get_pcvar_num(g_LAMMO))

    message_begin(MSG_ONE, g_msgStatusText, {0,0,0}, id) 
    write_byte(0) 
    write_string(ammo) 
    message_end() 
} 

public showInfo(id)
{
	client_print(id, print_chat, STR_REF)
}

public say_lasermine(id){
	new said[32]
	read_argv(1,said,31);
	if( !get_pcvar_num( g_LENABLE )  ){
//		client_print(id, print_chat, "%s Lasermines are not currently active.",CHATTAG)
		return PLUGIN_CONTINUE
	}
	
	if (equali(said,"/buy lasermine")||equali(said,"/lm")){
		BuyLasermine(id)
	}else if (equali(said, "lasermine") || equali(said, "/lasermine")){
		const SIZE = 1024
		new msg[SIZE+1],len = 0;
		len += formatex(msg[len], SIZE - len, "<html><body>")
		len += formatex(msg[len], SIZE - len, "<p><b>LaserMine</b></p><br/><br/>")
		len += formatex(msg[len], SIZE - len, "<p>You can be setting the mine on the wall.</p><br/>")
		len += formatex(msg[len], SIZE - len, "<p>That laser will give what touched it damage.</p><br/><br/>")
		len += formatex(msg[len], SIZE - len, "<p><b>LaserMine Commands</b></p><br/><br/>")
		len += formatex(msg[len], SIZE - len, "<p><b>Say /buy lasermine</b> or <b>Say /lm</b> //buying lasermine<br/>")
		len += formatex(msg[len], SIZE - len, "<b>buy_lasermine</b> //bind ^"F2^" buy_lasermine : using F2 buying lasermine<br/>")
		len += formatex(msg[len], SIZE - len, "<b>+setlaser</b> //bind mouse3 +setlaser : using mouse3 set lasermine on wall<br/>")
		len += formatex(msg[len], SIZE - len, "</body></html>")
		show_motd(id, msg, "Lasermine Entity help")
		return PLUGIN_CONTINUE
	}
	else if (containi(said, "laser") != -1) {
		showInfo(id)
		return PLUGIN_CONTINUE
	}
	return PLUGIN_CONTINUE
}

public standing(id) 
{
	if (!g_settinglaser[id])
		return PLUGIN_CONTINUE

	set_pev(id, pev_maxspeed, 1.0)
//	ShowAmmo(id)

	return PLUGIN_CONTINUE
}

public ltm_PostThink(id) 
{
	if (!g_settinglaser[id] && plsetting[id]){
		resetspeed(id)
	}
	else if (g_settinglaser[id] && !plsetting[id]) {
		pev(id, pev_maxspeed,plspeed[id])
		set_pev(id, pev_maxspeed, 1.0)
	}
	plsetting[id] = g_settinglaser[id]
	return FMRES_IGNORED
}

public ltm_PreThink(id)
{
	if (!pev_user_alive(id) || g_settinglaser[id] == true || is_user_bot(id) || get_pcvar_num(g_LCMDMODE) == 1)
		return FMRES_IGNORED;

	if(pev(id, pev_button ) & IN_USE && !(pev(id, pev_oldbuttons ) & IN_USE ))
		//client_print(id,print_chat,"test");
		CreateLaserMine_Progress(id)
	return FMRES_IGNORED;
}

resetspeed(id)
{
	set_pev(id, pev_maxspeed, plspeed[id])
}

public client_putinserver(id){
	g_deployed[id] = 0;
	g_havemine[id] = 0;
	DeleteTask(id);
	return PLUGIN_CONTINUE
}

public client_disconnect(id){
	if(!get_pcvar_num( g_LENABLE ))
		return PLUGIN_CONTINUE
	DeleteTask(id);
	RemoveAllTripmines(id);
	return PLUGIN_CONTINUE
}


public newround(id){
	if(!get_pcvar_num( g_LENABLE ))
		return PLUGIN_CONTINUE
	pev(id, pev_maxspeed,plspeed[id])
	DeleteTask(id);
	RemoveAllTripmines(id);
	delaycount(id);
	SetStartAmmo(id);
	return PLUGIN_CONTINUE
}

public DeathEvent(){
	if(!get_pcvar_num( g_LENABLE ))
		return PLUGIN_CONTINUE

	new id = read_data(2)
	if(is_user_connected(id)) DeleteTask(id);
	return PLUGIN_CONTINUE
}

public RemoveAllTripmines( i_Owner )
{
	new iEnt = g_MaxPL + 1;
	new clsname[32];
	while( ( iEnt = engfunc( EngFunc_FindEntityByString, iEnt, "classname", ENT_CLASS_NAME ) ) )
	{
		if ( i_Owner )
		{
			if( pev( iEnt, LASERMINE_OWNER ) != i_Owner )
				continue;
			clsname[0] = '^0'
			pev( iEnt, pev_classname, clsname, sizeof(clsname)-1 );
                
			if ( equali( clsname, ENT_CLASS_NAME ) )
			{
				PlaySound( iEnt, STOP_SOUND );
				RemoveEntity( iEnt );
			}
		}
		else
			set_pev( iEnt, pev_flags, FL_KILLME );
	}
	g_deployed[i_Owner]=0;
}

SetStartAmmo(id)
{
	new stammo = get_pcvar_num(g_LSTAMMO);
	if(stammo <= 0) return PLUGIN_CONTINUE;
	g_havemine[id] = (g_havemine[id] <= stammo) ? stammo : g_havemine[id];
	return PLUGIN_CONTINUE;
}

public CutDeploy_onDamage(id)
{
	if(get_user_health(id) < 1)
		DeleteTask(id);
}

#if defined BIOHAZARD_SUPPORT
public event_infect2(id)
{
	DeleteTask(id);
	return PLUGIN_CONTINUE
}
#endif

DeleteTask(id)
{
	if (task_exists((TASK_PLANT + id)))
	{
		remove_task((TASK_PLANT + id))
	}
	if (task_exists((TASK_RELEASE + id)))
	{
		remove_task((TASK_RELEASE + id))
	}
	g_settinglaser[id] = false
	return PLUGIN_CONTINUE;
}

stock set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
	static Float:RenderColor[3];
	RenderColor[0] = float(r);
	RenderColor[1] = float(g);
	RenderColor[2] = float(b);

	set_pev(entity, pev_renderfx, fx);
	set_pev(entity, pev_rendercolor, RenderColor);
	set_pev(entity, pev_rendermode, render);
	set_pev(entity, pev_renderamt, float(amount));

	return 1
}

// Gets offset data
get_offset_value(id, type)
{
	new key = -1;
	switch(type)
	{
		case OFFSET_TEAM: key = OFFSET_TEAM;
		case OFFSET_MONEY:
		{
#if defined UL_MONEY_SUPPORT
			return cs_get_user_money_ul(id);
#else
			key = OFFSET_MONEY;
#endif
		}
		case OFFSET_DEATH: key = OFFSET_DEATH;
	}
	
	if(key != -1)
	{
		if(is_amd64_server()) key += 25;
		return get_pdata_int(id, key);
	}
	
	return -1;
}

// Sets offset data
set_offset_value(id, type, value)
{
	new key = -1;
	switch(type)
	{
		case OFFSET_TEAM: key = OFFSET_TEAM;
		case OFFSET_MONEY:
		{
#if defined UL_MONEY_SUPPORT
			return cs_set_user_money_ul(id, value);
#else
			key = OFFSET_MONEY;
			
			// Send Money message to update player's HUD
			message_begin(MSG_ONE_UNRELIABLE, g_msgMoney, {0,0,0}, id);
			write_long(value);
			write_byte(1);	// Flash (difference between new and old money)
			message_end();
#endif
		}
		case OFFSET_DEATH: key = OFFSET_DEATH;
	}
	
	if(key != -1)
	{
		if(is_amd64_server()) key += 25;
		set_pdata_int(id, key, value);
	}
	
	return PLUGIN_CONTINUE;
}


[color=#FF4000]Rase Human New

Descriere :[/b] : Acest plugin este unul de rase pentru Human , anume 5 rase cu skinuri diferite , si cu skinuri de maini diferite , dar nu in ultimul rand si puteri diferite (gravity , speed , damage , invizibility , vip cu toate atributiile)
[b]Autor :[/color]
: sPuF? aka Askhanar

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

#pragma semicolon 1

#define FLASH_SPEED 		350.0		// viteza care o are Flash
#define HULK_GRAVITY		0.75		// gravitatea setata lui hulk ( 1.0 = 800 )
#define PREDATOR_MULTIPLY	1.8		// damage facut inmultit cu 1.5 sau cat pui.
#define ELF_INVISIBILITY	76		// ( 0 - 255 ) 2.55 este aproximativ 1% deci 76 vine cam 30% vizibil

#define PLUGIN "Plugin Nou"
#define VERSION "1.0"

new  const  Models[  6  ][    ]  =
{
	
	"",		//Null
	"kaili",		//Flash
	"grafff",		//Hulk
	"termi",		//Predator
	"elfzoor",		//Elf
	"vip_skin_aaa"		//Vip
	
};

new  const  kModels[  6  ][    ]  =
{
	
	"",			//Null
	"models/v_flasher.mdl",		//Flash
	"models/v_grafff.mdl",		//Hulk
	"models/v_termiii.mdl",		//Predator
	"models/v_elfwow.mdl",		//Elf
	"models/v_viaiiipi.mdl"		//Vip
	
};

new  const  MenuName[    ]  =  " \wRase \rHuman^n";
new  const  NumeSite[    ]  =  "\yRase Human";

new  bool:UserIsFlash[  33  ];
new  bool:UserIsHulk[  33  ];
new  bool:UserIsPredator[  33  ];
new  bool:UserIsElf[  33  ];
new  bool:UserIsVIp[  33  ];
new  bool:UserChoosed[  33  ];

public  plugin_precache(    )
{
	
	new  ModelPath[  64  ];
	
	for(  new  i  = 1;  i  <  6;  i++  )
	{
		formatex(  ModelPath,  sizeof  (  ModelPath  )  -1, "models/player/%s/%s.mdl",  Models[  i  ],  Models[  i  ]  );
		precache_model(  ModelPath  );
		
	}
	for(  new  i  = 1;  i  <  6;  i++  )
	{
		precache_model(  kModels[  i  ]  );
	}
}

public plugin_cfg(    )    set_cvar_float(  "sv_maxspeed",  FLASH_SPEED  );

public plugin_init(    ) 
{
	register_plugin(  PLUGIN,  VERSION, "Askhanar"  );
	register_clcmd(  "say /race",  "sayRace"  );
	
	RegisterHam(  Ham_Spawn,  "player",  "Ham_PlayerSpawnPost",  true  );
	RegisterHam(  Ham_TakeDamage,  "player", "Ham_PlayerTakeDamage", false  );
	register_event( "CurWeapon", "evCurWeapon", "be", "1=1" );
	register_event( "HLTV", "evHookRoundStart", "a", "1=0", "2=0" );
}

public client_connect(id)
{
	SetCl_Settings(  id  ,  0  );
	UserIsFlash[  id  ]  =  false;
	UserIsHulk[  id  ]  =  false;
	UserIsPredator[  id  ]  =  false;
	UserIsElf[  id  ]  =  false;
	UserIsVIp[  id  ]  =  false;
	UserChoosed[  id  ]  =  false;
}

public client_disconnect(id)
{
	SetCl_Settings(  id,  0  );
	UserIsFlash[  id  ]  =  false;
	UserIsHulk[  id  ]  =  false;
	UserIsPredator[  id  ]  =  false;
	UserIsElf[  id  ]  =  false;
	UserIsVIp[  id  ]  =  false;
	UserChoosed[  id  ]  =  false;
}

public sayRace(  id  )
{
	if( UserChoosed[  id  ]  )
	{
		client_print( id, print_chat, "* Ti-ai ales deja rasa runda aceasta !" );
		return 1;
	}
	if(  cs_get_user_team(  id  )  ==  CS_TEAM_CT   )   MainMenu(  id  );
	
	return 0;
}

public Ham_PlayerSpawnPost(  id  ) 
{
	
	if(  !is_user_alive(  id  )  ||  UserChoosed[  id  ]  )  return HAM_IGNORED;
	
	if( UserChoosed[  id  ]  )
	{
		client_print( id, print_chat, "* Ti-ai ales deja rasa runda aceasta !" );
		return HAM_IGNORED;
	}
	
	ResetUserSettings(  id  );
	if(  cs_get_user_team(  id  )  ==  CS_TEAM_CT )   MainMenu(  id  );
	
	cs_reset_user_model(  id  );
	
	return HAM_IGNORED;
}

public Ham_PlayerTakeDamage(  id,  iInflictor,  iAttacker,  Float:flDamage,  bitsDamageType  )
{
	
	if(  !iAttacker ||  id  ==  iAttacker  ||  !is_user_connected(  iAttacker  )  ||  !is_user_connected(  id  )
		||  get_user_team(  id  )  ==  get_user_team(  iAttacker  )
			|| !UserIsPredator[  iAttacker  ]  || !UserIsVIp[  id  ] ) return HAM_IGNORED;
	
	SetHamParamFloat(  4, flDamage * PREDATOR_MULTIPLY  );
	
	return HAM_IGNORED;
}

public evCurWeapon( id )
{
	if( is_user_alive( id ) )
	{
		
		if( cs_get_user_team(  id  )  ==  CS_TEAM_CT  )
		{
			
			new clip, ammo, wpnid = get_user_weapon( id, clip, ammo );
				
			if( wpnid == CSW_KNIFE  )
			{
			
				if( UserIsFlash[ id ] )
				{
					entity_set_string( id, EV_SZ_viewmodel, kModels[ 1 ] );
				}
				else if( UserIsHulk[ id ] )
				{
					entity_set_string( id, EV_SZ_viewmodel, kModels[ 2 ] );
				}
				else if( UserIsPredator[ id ] )
				{
					entity_set_string( id, EV_SZ_viewmodel, kModels[ 3 ] );
				}
				else if( UserIsElf[ id ] )
				{
					entity_set_string( id, EV_SZ_viewmodel, kModels[ 4 ] );
				}
				else if(  UserIsVIp[  id  ]  )
				{
				
					entity_set_string( id, EV_SZ_viewmodel, kModels[ 5 ] );
				}
			}
		}
		
	}
	
	return 0;
}
public evHookRoundStart( )
{
	new iPlayers[ 32 ];
	new iPlayersNum;

	get_players( iPlayers, iPlayersNum, "ch" );		
	for( new i = 0 ; i < iPlayersNum ; i++ )
	{
		UserChoosed[  iPlayers[  i  ]  ]  =  false;
	}
	
}
public client_PreThink(  id  )
{
	if(  is_user_alive(  id  ) && is_user_connected(  id  )  &&  cs_get_user_team(  id  )  ==  CS_TEAM_CT  )
	{
		if( UserIsFlash[  id  ]  ||  UserIsVIp[  id  ] )
		{
			set_user_maxspeed(  id,  FLASH_SPEED  );
		}
	}
	
}
	
public MainMenu( id )
{
	new  menu  =  menu_create(  MenuName,  "MainMenuHandler"  );	
	
	menu_additem(  menu,  "SpeeD QueeN \r[\yViteza Mare \w+ \yM4a1 \w+ \yDeagle\r]",  "1",  0  );
	menu_additem(  menu,  "GraFFeR Boy \r[\yGravitatie \w+ \yAk47 \w+ \yDeagle\r]",  "2",  0  );
	menu_additem(  menu,  "TerminaToR \r[\yDamage Ridicat \w+ \yM249 \w+ \yUsp\r]",  "3",  0  );
	menu_additem(  menu,  "ELF \r[\yInvizibilitate \w+ \yM4a1 \w+ \yUsp\r]^n",  "4",  0  );
	menu_additem(  menu,  "\rV\wi\rp \w[\rGravitatie \y+ \rViteza \y+ \rInvizibilitate \y+ \rDamage Dublu \y+ \rALL WEAPONS\w]",  "5",  0  );
	
	menu_setprop(  menu,  MPROP_EXITNAME,  NumeSite  );
	
	menu_display(  id,  menu,  0  );

}

/*=======================================================================================s=P=u=f=?*/

public MainMenuHandler(  id,  menu,  item  )
{
	if(  item  ==  MENU_EXIT  )
	{
		set_task(  0.1,  "MainMenu",  id  );
		return 1;
	}
	
	if(  cs_get_user_team(  id  )  !=  CS_TEAM_CT  ) return 1;
	
	new  data[  6  ],  iName[  64  ];
	new  iaccess,  callback;
	
	menu_item_getinfo(  menu,  item,  iaccess,  data,  5,  iName,  sizeof  (  iName  )  -1,  callback  );
	
	new  key  =  str_to_num(  data  );
	
	switch(  key  )
	{
		case 1:
		{
			UserChoosed[  id  ]  =  true;
			ResetUserSettings(  id  );
			GiveUserPower( id,  1 );
			cs_set_user_model(  id,  Models[  1  ]  );
			give_item(id, "weapon_m4a1");
			cs_set_user_bpammo ( id, CSW_M4A1, 999);
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo ( id, CSW_DEAGLE, 999);
			engclient_cmd( id, "weapon_knife" );
			return 1;
		}
		case 2:
		{
			UserChoosed[  id  ]  =  true;
			ResetUserSettings(  id  );
			GiveUserPower( id,  2 );
			cs_set_user_model(  id,  Models[  2  ]  );
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo ( id, CSW_AK47, 999);
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo ( id, CSW_DEAGLE, 999);
			engclient_cmd( id, "weapon_knife" );
			return 1;
		}
		case 3:
		{
			UserChoosed[  id  ]  =  true;
			ResetUserSettings(  id  );
			GiveUserPower( id,  3 );
			cs_set_user_model(  id,  Models[  3  ]  );
			give_item(id, "weapon_m249");
			cs_set_user_bpammo ( id, CSW_M249, 999);
			give_item(id, "weapon_usp");
			cs_set_user_bpammo ( id, CSW_USP, 999);
			engclient_cmd( id, "weapon_knife" );
			return 1;
		}
		case 4:
		{
			UserChoosed[  id  ]  =  true;
			ResetUserSettings(  id  );
			GiveUserPower( id,  4 );
			cs_set_user_model(  id,  Models[  4  ]  );
			give_item(id, "weapon_m4a1");
			cs_set_user_bpammo ( id, CSW_M4A1, 999);
			give_item(id, "weapon_usp");
			cs_set_user_bpammo ( id, CSW_USP, 999);
			engclient_cmd( id, "weapon_knife" );
			return 1;
		}
		case 5:
		{
			if(  UserIsVip(  id  ) )
			{
				UserChoosed[  id  ]  =  true;
				ResetUserSettings(  id  );
				GiveUserPower( id,  5 );
				cs_set_user_model(  id,  Models[  5  ]  );
				give_item(id, "weapon_ak47");
				cs_set_user_bpammo ( id, CSW_AK47, 999);
				give_item(id, "weapon_deagle");
				cs_set_user_bpammo ( id, CSW_DEAGLE, 999);
				give_item(id, "weapon_m249");
				cs_set_user_bpammo ( id, CSW_M249, 999);
				give_item(id, "weapon_m4a1");
				cs_set_user_bpammo ( id, CSW_M4A1, 999);
				give_item(id, "weapon_usp");
				cs_set_user_bpammo ( id, CSW_USP, 999);
				engclient_cmd( id, "weapon_knife" );
				return 1;
			}
			else
			{
				MainMenu(  id  );
				return 1;
			}
		}
	}
	
	return 0;
}

public GiveUserPower(  id,  const  Class  )
{
	
	switch(  Class  )
	{
		case 1:
		{
			
			//slow hacking ?:O
			SetCl_Settings(  id,  1  );
			set_user_maxspeed(  id,  FLASH_SPEED  );
			UserIsFlash[  id  ]  =  true;
			
			return 1;
			
		}
		case 2:
		{
			set_user_gravity(  id,  HULK_GRAVITY  );
			UserIsHulk[  id  ]  =  true;
			
			return 1;
		}
		case 3:
		{
			UserIsPredator[  id  ]  =  true;
			return 1;
		}
		case 4:
		{
			set_user_rendering(  id,  kRenderFxNone,  0,  0,  0,  kRenderTransAlpha,  ELF_INVISIBILITY );
			UserIsElf[  id  ]  =  true;
			
			return 1;
		}
		case 5:
		{
			//Il facem Flash
			SetCl_Settings(  id,  1  );
			
			set_user_maxspeed(  id,  FLASH_SPEED  );
			
			//Il facem Hulk
			set_user_gravity(  id,  HULK_GRAVITY  );
			
			//Il facem Predator
			
			//Il facem Elf
			set_user_rendering(  id,  kRenderFxNone,  0,  0,  0,  kRenderTransAlpha,  ELF_INVISIBILITY );
			
			UserIsVIp[  id  ]  =  true;
			return 1;
		}
	}
	
	return 0;
	
}

public ResetUserSettings(  id  )
{
	if(  UserIsFlash[  id  ]  )    set_user_maxspeed(  id,  255.0  );
	
	if(  UserIsHulk[  id  ]  )     set_user_gravity(  id,  1.0  );
		
	if(  UserIsElf[  id  ]  )    set_user_rendering(  id,  kRenderFxNone,  0,  0,  0,  kRenderNormal,  0  );
	
	if( UserIsVIp[  id  ]  )
	{
		set_user_maxspeed(  id,  255.0  );
	
		set_user_gravity(  id,  1.0  );
			
		set_user_rendering(  id,  kRenderFxNone,  0,  0,  0,  kRenderNormal,  0  );
	}
		
	
	SetCl_Settings(  id,  0  );
	UserIsFlash[  id  ]  =  false;
	UserIsHulk[  id  ]  =  false;
	UserIsPredator[  id  ]  =  false;
	UserIsElf[  id  ]  =  false;
	UserIsVIp[  id  ]  =  false;
	
}
public SetCl_Settings(  id,  const  OnOff  )
{
	
	if(  OnOff  >  0  )
	{
		client_cmd(  id, "cl_backspeed %.1f",  FLASH_SPEED  );
		client_cmd(  id, "cl_forwardspeed %.1f",  FLASH_SPEED  );
		client_cmd(  id, "cl_sidespeed %.1f",  FLASH_SPEED  );
		
		return 1;
		
	}
	
	client_cmd(  id, "cl_backspeed 400"  );
	client_cmd(  id, "cl_forwardspeed 400"  );
	client_cmd(  id, "cl_sidespeed 400"  );
	
	return 0;
	
}

stock bool:UserIsVip(  id  )
{
	
	if(  get_user_flags(  id  )  &  read_flags(  "a"  )  )
		return true;
		
	return false;
	
}


[color=#FF4000]Credite

Descriere :[/b] : Acest plugin este un fel de shop cu credite , anume are multe iteme gen catarare pe pereti , hp , etc , care le cumperi cu credite , un credit il primesti la un interval de timp prestabilit , iar itemele stau pe tine toata harta !
[b]Autor :[/color]
: atambo + e t n a d ( editare , rezolvare bug gravity + traducere )


Sma :
| Afiseaza codul
#define VER "1.0.4"
//Amount of credits new players get
#define numnewcredits 4
//Time Per Credit (in seconds)
#define credittime 600
//How much the passive upgrades cost
#define armorcost 1
#define hpcost 999
#define speedcost 1
//#define gravitycost 2
#define stealthcost 1
#define multijumpcost 2
//How much the passive upgrades adds
#define armorperbuy 10
#define hpperbuy 10
#define speedperbuy 20
//eg. 0.05 it will take off 5% of the users gravity
//#define gravityperbuy 0.1
//eg. (stealthperbuy = 60) times (stealthmaxlvl = 3) = 180 // the value must be lower than the defaultstealth
#define defaultstealth 200
#define stealthperbuy 20
//How much the passive upgrades Max Level
#define armormaxlvl 5
#define hpmaxlvl 1
#define speedmaxlvl 5
//#define gravitymaxlvl 5
#define stealthmaxlvl 10
#define multijumpmaxlvl 3
//Item Upgrades
//max items
#define maxitems 6
//max credits spent per map
#define maxcredits 15
//First Aid Regeneration
#define regenerationrate 4.5
// health regeneration points
#define hpregenp 5
// armor regeneration points
#define apregenp 8
// First Aid cost
#define regenerationcost 1
//Battle Aura cost
#define hpscost 1
//Weapon Training cost
#define weapontrainingcost 2
//Jump Module cost
#define jumpmodulecost 1
//Climb Gear cost
#define climbgearcost 1
//Promotion cost
#define promocost 1
//Unlimited Ammo cost
#define unlacost 1
//Stealth Shoe cost
#define sshoecost 1
//C4 Wired Explosives
#define BOMBKILL_RANGE 350
#define wiredc4ecost 15
//E.S.P cost
#define espcost 2
//Laser Pointer
#define lasercost 1
//Super Grenade cost
#define sgrencost 1
//Crowbar cost
#define crowbarcost 1
//Flash Protection
#define flashcost 1
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#include <fun>
#include <vault>
#define BOMB_TASK 1234
new connecttime[33]
new lastplaytime[33]
new creditsspent[33]
new Armor[33]
new Health[33]
new Speed[33]
//new Gravity[33]
new Stealth[33]
new hpstlr[33]
new regeneration[33]
new weapontraining[33]
new jumpmodule[33]
new climb[33]
new promotion[33]
new gHasuammo[33]
new sshoe[33]
new wired[33]
new esp[33]
new laser[33]
new sgrenade[33]
new crowbar[33]
new flash[33]
new multijump[33]
new jumpnum[33]
new itemcap[33]
new bool:dojump[33] = false
new bool:speed = true
new hudmsg[512]
new smoke, white, fire
public plugin_init()
{
	register_plugin("Credit Mod", VER, "atambo")
	register_cvar("amx_upgrades", "1")
	register_menu("Main Upgrades Menu", 1023, "MainMenuCommand")
	register_menu("Passive Upgrade Menu", 1023, "actionMenu")
	register_menu("Item Upgrade Menu", 1023, "EUAMenu")
	register_menu("Item 2 Upgrade Menu", 1023, "EUA2Menu")
	register_clcmd("say", "handlesay")
	register_clcmd("say_team", "handlesay")
	register_clcmd("upgrade", "MainUpgradesMenu")
	register_concmd("amx_querycredits","queryall",ADMIN_CVAR," -displays <name> <credits>")
	register_concmd("amx_givecredits","givecredit",ADMIN_BAN," <name or #userid> <credits>")
	register_concmd("amx_removecredits","removecredit",ADMIN_BAN," <name or #userid> <credits>")
	register_event("ResetHUD","newRound","be")
	register_event("StatusValue","show_status","bd","1=2")
	register_event("DeathMsg", "death_event", "a")
	register_event("CurWeapon","update","be","1=1")
	register_event("Damage", "Event_Damage", "be", "2!0")
	register_event("ScreenFade","flashcheck","be","4=255","5=255","6=255","7>199")
	server_cmd("sv_maxspeed 1500")
	
}

public client_connected_msg(id)
{
	client_print(id, print_chat, "[Credite] Acest server foloseste CREDITE , configurat de e t n a d .", VER)
	client_print(id, print_chat, "Pentru a cumpara apasa pe B sau scrie /buy in chat.", VER)
}

public client_putinserver(id) 
{
	if(get_cvar_num("amx_upgrades") == 1)
		set_task(20.0, "client_connected_msg", id)
}

public flashcheck(id)
{
	if(flash[id] > 0)
	{
		message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
		write_short(~0)
		write_short(~0)
		write_short(1<<12)
		write_byte(0)
		write_byte(0)
		write_byte(0)
		write_byte(0)
		message_end()
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public newRound(id)
{
	if(get_cvar_num("amx_upgrades") == 0)
	{
		itemcap[id] = 0
		Armor[id] = 0
		Health[id] = 0
		Speed[id] = 0
		//Gravity[id] = 0
		Stealth[id] = 0
		hpstlr[id] = 0
		regeneration[id] = 0
		weapontraining[id] = 0
		jumpmodule[id] = 0
		climb[id] = 0
		promotion[id] = 0
		gHasuammo[id] = 0
		sshoe[id] = 0
		wired[id] = 0
		esp[id] = 0
		laser[id] = 0
		sgrenade[id] = 0
		crowbar[id] = 0
		creditsspent[id] = 0
		flash[id] = 0
		jumpnum[id] = 0
		multijump[id] = 0
		set_user_footsteps(id, 0)
		set_user_rendering(id,kRenderFxNone,0,0,0,kRenderNormal,0)
		return PLUGIN_CONTINUE
	}
	else
	{
		if(is_user_alive(id))
		{
			if(Armor[id] > 0)
			{
				new iap = (Armor[id] * armorperbuy)
				set_user_armor(id, 100 + iap)
			}
			if(Health[id] > 0)
			{
				new ihp = (Health[id] * hpperbuy)
				set_user_health(id, 100 + ihp)
			}
			if(promotion[id] > 0)
				cs_set_user_money(id, cs_get_user_money(id) * 2, 1)
			if(esp[id] > 0)
				set_task(3.0, "esploop", id, "", 0, "b")
			if(climb[id] > 0)
				set_task(0.1, "cwall", id, "", 0, "b")
			if(regeneration[id] > 0)
				firstaid(id)
			if(sgrenade[id] > 0)
			{
				sgrenade[id] = 0
				itemcap[id]--
			}
			if(wired[id] > 0)
			{
				wired[id] = 0
				itemcap[id]--
			}
		}
		show_all_upgrades(id)
		speed = false
		set_task(get_cvar_float("mp_freezetime"), "allow_speed", 0)
	}
	return PLUGIN_CONTINUE
}

public show_status(id)
{
	if(get_cvar_num("amx_upgrades") != 1)
		return PLUGIN_CONTINUE
	new target = read_data(2)
  	if(target != id && target != 0)
  	{
		new name[32]
   		get_user_name(target, name,31)
		new len = format(hudmsg, 511, "%s's^nPassive Upgrades:^n", name)
		len += format(hudmsg[len], 511-len, "*Armor %d/%d^n*Health %d/%d^n*Speed %d/%d^n*Stealth %d/%d^n*MultiJump %d/%d^n", Armor[target], armormaxlvl, Health[target], hpmaxlvl, Speed[target], speedmaxlvl, Stealth[target], stealthmaxlvl, multijump[target], multijumpmaxlvl)
		len += format(hudmsg[len], 511-len, "^nItem Upgrades:^n")
		if(hpstlr[target] > 0) len += format(hudmsg[len], 511-len, "Battle Aura^n")
		if(regeneration[target] > 0) len += format(hudmsg[len], 511-len, "First Aid^n")
		if(weapontraining[target] > 0) len += format(hudmsg[len], 511-len, "Weapon Training^n")
		if(jumpmodule[target] > 0) len += format(hudmsg[len], 511-len, "Jump Module^n")
		if(climb[target] > 0) len += format(hudmsg[len], 511-len, "Climbing Gear^n")
		if(promotion[target] > 0) len += format(hudmsg[len], 511-len, "Promotion^n")
		if(gHasuammo[target] > 0) len += format(hudmsg[len], 511-len, "Unlimited Ammo^n")
		if(sshoe[target] > 0) len += format(hudmsg[len], 511-len, "Stealth Shoes^n")
		if(wired[target] > 0) len += format(hudmsg[len], 511-len, "Wired C4 Explosive^n")
		if(esp[target] > 0) len += format(hudmsg[len], 511-len, "E.S.P^n")
		if(laser[target] > 0) len += format(hudmsg[len], 511-len, "Laser Pointer^n")
		if(sgrenade[target] > 0) len += format(hudmsg[len], 511-len, "Super Grenade^n")
		if(crowbar[target] > 0) len += format(hudmsg[len], 511-len, "Crowbar^n")
		if(flash[target] > 0) len += format(hudmsg[len], 511-len, "Flash Protection^n")
		len += format(hudmsg[len], 511-len, "^nCredits: %i",connecttime[target]/credittime)
		set_hudmessage(255, 0, 255, 0.0, 0.2, 0, 6.0, 6.0, 0.5, 0.15, 1)
		show_hudmessage(id, hudmsg)
	}
	return PLUGIN_CONTINUE
}

public show_all_upgrades(id)
{
	new len = format(hudmsg, 511, "Passive Upgrades:^n")
	len += format(hudmsg[len], 511-len, "*Armor %d/%d^n*Health %d/%d^n*Speed %d/%d^n*Stealth %d/%d^n*MultiJump %d/%d^n", Armor[id], armormaxlvl, Health[id], hpmaxlvl, Speed[id], speedmaxlvl, Stealth[id], stealthmaxlvl, multijump[id], multijumpmaxlvl)
	len += format(hudmsg[len], 511-len, "^nItem Upgrades:^n")
	if(hpstlr[id] > 0) len += format(hudmsg[len], 511-len, "Battle Aura^n")
	if(regeneration[id] > 0) len += format(hudmsg[len], 511-len, "First Aid^n")
	if(weapontraining[id] > 0) len += format(hudmsg[len], 511-len, "Weapon Training^n")
	if(jumpmodule[id] > 0) len += format(hudmsg[len], 511-len, "Jump Module^n")
	if(climb[id] > 0) len += format(hudmsg[len], 511-len, "Climbing Gear^n")
	if(promotion[id] > 0) len += format(hudmsg[len], 511-len, "Promotion^n")
	if(gHasuammo[id] > 0) len += format(hudmsg[len], 511-len, "Unlimited Ammo^n")
	if(sshoe[id] > 0) len += format(hudmsg[len], 511-len, "Stealth Shoes^n")
	if(wired[id] > 0) len += format(hudmsg[len], 511-len, "Wired C4 Explosive^n")
	if(esp[id] > 0) len += format(hudmsg[len], 511-len, "E.S.P^n")
	if(laser[id] > 0) len += format(hudmsg[len], 511-len, "Laser Pointer^n")
	if(sgrenade[id] > 0) len += format(hudmsg[len], 511-len, "Super Grenade^n")
	if(crowbar[id] > 0) len += format(hudmsg[len], 511-len, "Crowbar^n")
	if(flash[id] > 0) len += format(hudmsg[len], 511-len, "Flash Protection^n")
	len += format(hudmsg[len], 511-len, "^nCredits: %i",connecttime[id]/credittime)
	set_hudmessage(255, 0, 255, 0.0, 0.1, 0, 6.0, 6.0, 0.5, 0.15, 1)
	show_hudmessage(id, hudmsg)
}

public show_upgrades(id)
{
	new len = format(hudmsg, 511, "Passive Upgrades:^n")
	len += format(hudmsg[len], 511-len, "*Armor %d/%d^n*Health %d/%d^n*Speed %d/%d^n*Stealth %d/%d^n*MultiJump %d/%d", Armor[id], armormaxlvl, Health[id], hpmaxlvl, Speed[id], speedmaxlvl, Stealth[id], stealthmaxlvl, multijump[id], multijumpmaxlvl)
	set_hudmessage(255, 0, 255, 0.0, 0.1, 0, 6.0, 6.0, 0.5, 0.15, 1)
	show_hudmessage(id, hudmsg)
}

public show_iupgrades(id)
{
	new len = format(hudmsg, 511, "Item Upgrades:^n")
	if(hpstlr[id] > 0) len += format(hudmsg[len], 511-len, "Battle Aura^n")
	if(regeneration[id] > 0) len += format(hudmsg[len], 511-len, "First Aid^n")
	if(weapontraining[id] > 0) len += format(hudmsg[len], 511-len, "Weapon Training^n")
	if(jumpmodule[id] > 0) len += format(hudmsg[len], 511-len, "Jump Module^n")
	if(climb[id] > 0) len += format(hudmsg[len], 511-len, "Climbing Gear^n")
	if(promotion[id] > 0) len += format(hudmsg[len], 511-len, "Promotion^n")
	if(gHasuammo[id] > 0) len += format(hudmsg[len], 511-len, "Unlimited Ammo^n")
	if(sshoe[id] > 0) len += format(hudmsg[len], 511-len, "Stealth Shoes^n")
	if(wired[id] > 0) len += format(hudmsg[len], 511-len, "Wired C4 Explosive^n")
	if(esp[id] > 0) len += format(hudmsg[len], 511-len, "E.S.P^n")
	if(laser[id] > 0) len += format(hudmsg[len], 511-len, "Laser Pointer^n")
	if(sgrenade[id] > 0) len += format(hudmsg[len], 511-len, "Super Grenade^n")
	if(crowbar[id] > 0) len += format(hudmsg[len], 511-len, "Crowbar^n")
	if(flash[id] > 0) len += format(hudmsg[len], 511-len, "Flash Protection^n")
	set_hudmessage(255, 0, 255, 0.0, 0.1, 0, 6.0, 6.0, 0.5, 0.15, 1)
	show_hudmessage(id, hudmsg)
}

public allow_speed()
{
	speed = true
	return PLUGIN_HANDLED
}

public death_event()
{
	new id = read_data(2)
	new enemy = read_data(1)
	remove_task(id)
	if(wired[id] > 0)
	{
		wired[id] = 0
		itemcap[id]--
	}
	if(sgrenade[enemy] > 0)
	{
		sgrenade[enemy] = 0
		itemcap[enemy]--
	}
	if(task_exists(BOMB_TASK + id))
		remove_task(BOMB_TASK + id)
	if(promotion[enemy] > 0)
		cs_set_user_money(enemy, cs_get_user_money(enemy) + 300, 1)
	return PLUGIN_CONTINUE
}

public client_disconnect(id)
{
	Armor[id] = 0
	Health[id] = 0
	Speed[id] = 0
	//Gravity[id] = 0
	Stealth[id] = 0
	hpstlr[id] = 0
	regeneration[id] = 0
	weapontraining[id] = 0
	jumpmodule[id] = 0
	climb[id] = 0
	promotion[id] = 0
	gHasuammo[id] = 0
	sshoe[id] = 0
	wired[id] = 0
	esp[id] = 0
	laser[id] = 0
	sgrenade[id] = 0
	crowbar[id] = 0
	itemcap[id] = 0
	creditsspent[id] = 0
	lastplaytime[id] = 0
	flash[id] = 0
	jumpnum[id] = 0
	multijump[id] = 0
	remove_task(id)
	new authid[32]
	new playtime = (get_user_time(id) - lastplaytime[id])
	get_user_authid(id,authid,31)
	new tmp_vault_time,vault_time[21]
	get_vaultdata(authid,vault_time,20)
	tmp_vault_time = str_to_num(vault_time)
	tmp_vault_time += playtime
	num_to_str(tmp_vault_time,vault_time,20)
	set_vaultdata(authid,vault_time)
	return PLUGIN_CONTINUE
}

public handlesay(id)
{
	new arg[64], arg1[32], arg2[32]
	read_args(arg,63)
	remove_quotes(arg)
	strtok(arg,arg1,255,arg2,255,' ',1)
	trim(arg2)
	if(arg1[0] == '/')
	{
		if(equali(arg1, "/buy") == 1 || equali(arg1, "/shop") == 1 || equali(arg1, "/upgrade") == 1)
		{
			MainUpgradesMenu(id)
			return PLUGIN_CONTINUE
		}
		if(equali(arg1, "/credite") == 1 || equali(arg1, "/credit") == 1)
		{
			new authid[32]
			new playtime = (get_user_time(id) - lastplaytime[id])
			lastplaytime[id] = get_user_time(id)
			get_user_authid(id,authid,31)
			new tmp_vault_time,vault_time[21]
			get_vaultdata(authid,vault_time,20)
			tmp_vault_time = str_to_num(vault_time)
			tmp_vault_time += playtime
			connecttime[id] = tmp_vault_time
			num_to_str(tmp_vault_time,vault_time,20)
			set_vaultdata(authid,vault_time)
			new tmp_minutes = floatround(float(connecttime[id]/60),floatround_floor)
			new minutes = tmp_minutes % (credittime/60)
			client_print(id,print_chat,"Ai %i credite (in %i minute o sa primesti inca un credit)",connecttime[id]/credittime,(credittime/60)-minutes)
			return PLUGIN_CONTINUE
		}
		if(equali(arg1,"/donate") == 1 || equali(arg1,"/givecredit") == 1)
		{
			new authid[32]
			new playtime = (get_user_time(id) - lastplaytime[id])
			lastplaytime[id] = get_user_time(id)
			get_user_authid(id,authid,31)
			new tmp_vault_time,vault_time[21]
			get_vaultdata(authid,vault_time,20)
			tmp_vault_time = str_to_num(vault_time)
			tmp_vault_time += playtime
			connecttime[id] = tmp_vault_time
			num_to_str(tmp_vault_time,vault_time,20)
			set_vaultdata(authid,vault_time)
			if(is_user_alive(id) == 0)
			{
				client_print(id,print_chat," Trebe sa fi viu ca sa folosesti aceasta comanda.")
				return PLUGIN_CONTINUE
			}
			new credits
			credits = str_to_num(arg2)
			if(credits <= 0)
			{
				client_print(id,print_chat," Trebe sa precizezi o valoare (minim un credit)")
				return PLUGIN_CONTINUE
			}
			new player, body, Float:dist = get_user_aiming(id,player,body,9999)
			if(player == 0 || player > 32 || is_user_connected(player) == 0 || is_user_alive(player) == 0)
			{
				client_print(id,print_chat," Acest jucator nu exista.")
				return PLUGIN_CONTINUE
			}
			new classname[256]
			entity_get_string(player,EV_SZ_classname,classname,255)
			if(!equal(classname,"player"))
			{
				client_print(id,print_chat," Acest jucator nu exista.")
				return PLUGIN_CONTINUE
			}
			if(dist > 512.0)
			{
				client_print(id,print_chat," Jucatorul e prea departe ca sa ii poti da credite")
				return PLUGIN_CONTINUE
			}
			if(credits > connecttime[id]/credittime)
			{
				client_print(id,print_chat," Nu ai aceasta suma ca sa o poti dona")
				return PLUGIN_CONTINUE
			}
			new givername[256], receivername[256]
			get_user_name(id,givername,255)
			get_user_name(player,receivername,255)
			decCredit(id,credits)
			addCredit(player,credits)
			client_print(id,print_chat," I-ai dat %i credite lui %s",credits,receivername)
			client_print(player,print_chat," Ai primit %i credite de la %s",credits,givername)
			return PLUGIN_CONTINUE
		}
	}
	return PLUGIN_CONTINUE
}

public MainUpgradesMenu(id)
{
	if(get_cvar_num("amx_upgrades") == 1)
	{
		new authid[32]
		new playtime = (get_user_time(id) - lastplaytime[id])
		lastplaytime[id] = get_user_time(id)
		get_user_authid(id,authid,31)
		new tmp_vault_time,vault_time[21]
		get_vaultdata(authid,vault_time,20)
		tmp_vault_time = str_to_num(vault_time)
		tmp_vault_time += playtime
		connecttime[id] = tmp_vault_time
		num_to_str(tmp_vault_time,vault_time,20)
		set_vaultdata(authid,vault_time)
		new tmp_minutes = floatround(float(connecttime[id]/60),floatround_floor)
		new minutes = tmp_minutes % (credittime/60)
		new keys
		new szMenuBody[255]
		new len = format(szMenuBody, 511, "\yMain Upgrades Menu:^n")
		len += format(szMenuBody[len], 511-len, "^n\r1. \wUpgraduri")
		len += format(szMenuBody[len], 511-len, "^n\r2. \wUpgraduri Iteme")
		len += format(szMenuBody[len], 511-len, "^n\r3. \wArata Upgradurile")
		len += format(szMenuBody[len], 511-len, "^n\r4. \wAjutor")
		len += format(szMenuBody[len], 511-len, "^n^n\r0.  \wIesire")
		len += format(szMenuBody[len], 511-len, "^n^nCredite: %i (in %i minute o sa primesti inca un credit)",connecttime[id]/credittime,(credittime/60)-minutes)
		keys = (1<<0|1<<1|1<<2|1<<3|1<<9)
		show_menu(id, keys, szMenuBody, -1)
	}
	else
		client_print(id,print_chat,"[AMXX] Credit Mod is currently disabled")
	return PLUGIN_HANDLED
}

public MainMenuCommand(id, key)
{
	switch(key)
	{
		case 0: showMenu(id)
		case 1: EUMenu(id)
		case 2: show_all_upgrades(id)
		case 3: UpgrHelp(id)
	}
	return PLUGIN_HANDLED
}

public EU2Menu(id)
{
	new authid[32]
	new playtime = (get_user_time(id) - lastplaytime[id])
	lastplaytime[id] = get_user_time(id)
	get_user_authid(id,authid,31)
	new tmp_vault_time,vault_time[21]
	get_vaultdata(authid,vault_time,20)
	tmp_vault_time = str_to_num(vault_time)
	tmp_vault_time += playtime
	connecttime[id] = tmp_vault_time
	num_to_str(tmp_vault_time,vault_time,20)
	set_vaultdata(authid,vault_time)
	new tmp_minutes = floatround(float(connecttime[id]/60),floatround_floor)
	new minutes = tmp_minutes % (credittime/60)
	new keys
	new szMenuBody[512]
	new len = format(szMenuBody, 511, "\yItem 2 Upgrade Menu:^n")
	len += format(szMenuBody[len], 511-len, "^n\r1. \wBomba Sinucigasa (Pret: %d Credit)", wiredc4ecost)
	len += format(szMenuBody[len], 511-len, "^n\r2. \wE.S.P (Pret: %d Credite)", espcost)
	len += format(szMenuBody[len], 511-len, "^n\r3. \wTinta cu Laser (Pret: %d Credit)", lasercost)
	len += format(szMenuBody[len], 511-len, "^n\r4. \wSuper Grenada (Pret: %d Credit)", sgrencost)
	len += format(szMenuBody[len], 511-len, "^n\r5. \wCrowbar (Pret: %d Credite)", crowbarcost)
	len += format(szMenuBody[len], 511-len, "^n\r6. \wStealth Shoes (Pret: %d Credit)", sshoecost)
	len += format(szMenuBody[len], 511-len, "^n\r7. \wProtectie Flash (Pret: %d Credit)", flashcost)
	len += format(szMenuBody[len], 511-len, "^n^n\r9.  \wInapoi")
	len += format(szMenuBody[len], 511-len, "^n\r0.  \wIesire")
	len += format(szMenuBody[len], 511-len, "^n^nCredite: %i (in %i minute o sa primesti inca un credit)",connecttime[id]/credittime,(credittime/60)-minutes)
	keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<8|1<<9)
	show_menu(id, keys, szMenuBody, -1)
}

public EUA2Menu(id, key)
{
	switch(key)
	{
		case 0:
		{
			if(connecttime[id]/credittime < wiredc4ecost)
				client_print(id, print_chat, " Nu ai destule credite.")
			if(wired[id] == 1)
				client_print(id, print_chat, " Ai deja o Bomba Sinucigasa.")
			if(!is_user_alive(id))
				client_print(id, print_chat, " Trebe sa fi in viata.")
			if(connecttime[id]/credittime >= wiredc4ecost && wired[id] == 0 && is_user_alive(id))
			{
				itemcap[id]++
				wired[id] = 1
				upgradelevelup(id)
				show_iupgrades(id)
				decCredit(id,wiredc4ecost)
				client_print(id, print_chat, " Foloseste-ti cutitul ca sa detonezi bomba")
			}
			EU2Menu(id)
		}
		case 1:
		{
			if(connecttime[id]/credittime < espcost)
				client_print(id, print_chat, " Nu ai destule credite")
			if(esp[id] == 1)
				client_print(id, print_chat, " Ai deja E.S.P")
			if(connecttime[id]/credittime >= espcost && esp[id] == 0)
			{
				itemcap[id]++
				esp[id] = 1
				upgradelevelup(id)
				show_iupgrades(id)
				set_task(3.0, "esploop", id, "", 0, "b")
				decCredit(id,espcost)
				client_print(id, print_chat, " E.S.P este activ")
				creditsspent[id]++
			}
			EU2Menu(id)
		}
		case 2:
		{
			if(connecttime[id]/credittime < lasercost)
				client_print(id, print_chat, " Nu ai destule credite")
			if(laser[id] == 1)
				client_print(id, print_chat, " Ai deja o Tinta Laser")
			if(connecttime[id]/credittime >= lasercost && laser[id] == 0)
			{
				itemcap[id]++
				laser[id] = 1
				upgradelevelup(id)
				show_iupgrades(id)
				decCredit(id,lasercost)
				client_print(id, print_chat, " Laser Activat . Bateria dureaza 10 secunde.")
				creditsspent[id]++
			}
			EU2Menu(id)
		}
		case 3:
		{
			if(connecttime[id]/credittime < sgrencost)
				client_print(id, print_chat, " Nu ai destule credite")
			if(sgrenade[id] == 1)
				client_print(id, print_chat, "Deja ai o Super Grenada")
			if(!is_user_alive(id))
				client_print(id, print_chat, "Trebe sa fi in viata")
			if(connecttime[id]/credittime >= sgrencost && sgrenade[id] == 0 && is_user_alive(id))
			{
				itemcap[id]++
				sgrenade[id] = 1
				upgradelevelup(id)
				show_iupgrades(id)
				give_item(id, "weapon_hegrenade")
				decCredit(id,sgrencost)
				client_print(id, print_chat, " Aceasta grenada are damage foarte mare !")
			}
			EU2Menu(id)
		}
		case 4:
		{
			if(connecttime[id]/credittime < crowbarcost)
				client_print(id, print_chat, " Nu ai destuel credite")
			if(crowbar[id] == 1)
				client_print(id, print_chat, " Ai deja un Crowbar")
			if(!is_user_alive(id))
				client_print(id, print_chat, " Trebe sa fi in viata")
			if(connecttime[id]/credittime >= crowbarcost && crowbar[id] == 0 && is_user_alive(id))
			{
				itemcap[id]++
				crowbar[id] = 1
				upgradelevelup(id)
				show_iupgrades(id)
				decCredit(id,crowbarcost)
				client_print(id, print_chat, " Acest Crowbar are damage x2")
				creditsspent[id]++
			}
			EU2Menu(id)
		}
		case 5:
		{
			if(connecttime[id]/credittime < sshoecost)
				client_print(id, print_chat, " Nu ai destule credite")
			if(sshoe[id] > 0)
				client_print(id, print_chat, " Pasesti deja Silentios !")
			if(connecttime[id]/credittime >= sshoecost && sshoe[id] == 0)
			{
				itemcap[id]++
				sshoe[id] = 1
				upgradelevelup(id)
				show_iupgrades(id)
				set_user_footsteps(id, 1)
				decCredit(id,sshoecost)
				client_print(id, print_chat, " Gata cu sunetul pasiilor !")
				creditsspent[id]++
			}
			EUMenu(id)
		}
		case 6:
		{
			if(connecttime[id]/credittime < flashcost)
				client_print(id, print_chat, " Nu ai destule credite")
			if(sshoe[id] > 0)
				client_print(id, print_chat, " Deja ai Protectie pentru Flashuri")
			if(connecttime[id]/credittime >= flashcost && flash[id] == 0)
			{
				itemcap[id]++
				flash[id] = 1
				upgradelevelup(id)
				show_iupgrades(id)
				decCredit(id,flashcost)
				client_print(id, print_chat, " Gata cu Oribirea !")
				creditsspent[id]++
			}
			EUMenu(id)
		}
		case 8: EUMenu(id)
	}
	return PLUGIN_HANDLED
}

public EUMenu(id)
{
	if(get_cvar_num("amx_upgrades") == 1)
	{
		new authid[32]
		new playtime = (get_user_time(id) - lastplaytime[id])
		lastplaytime[id] = get_user_time(id)
		get_user_authid(id,authid,31)
		new tmp_vault_time,vault_time[21]
		get_vaultdata(authid,vault_time,20)
		tmp_vault_time = str_to_num(vault_time)
		tmp_vault_time += playtime
		connecttime[id] = tmp_vault_time
		num_to_str(tmp_vault_time,vault_time,20)
		set_vaultdata(authid,vault_time)
		new tmp_minutes = floatround(float(connecttime[id]/60),floatround_floor)
		new minutes = tmp_minutes % (credittime/60)
		new keys
		new szMenuBody[512]
		new len = format(szMenuBody, 511, "\yItem Upgrade Menu:^n")
		len += format(szMenuBody[len], 511-len, "^n\r1. \wFuri Hp (Pret: %d Credit)", hpscost)
		len += format(szMenuBody[len], 511-len, "^n\r2. \wRegenerare (Pret: %d Credit)", regenerationcost)
		len += format(szMenuBody[len], 511-len, "^n\r3. \wRecoil Scazut (Pret: %d Credite)", weapontrainingcost)
		len += format(szMenuBody[len], 511-len, "^n\r4. \wBhop (Pret: %d Credit)", jumpmodulecost)
		len += format(szMenuBody[len], 511-len, "^n\r5. \wCatarare pe Perete (Pret: %d Credit)", climbgearcost)
		len += format(szMenuBody[len], 511-len, "^n\r6. \wx2 Money (Pret: %d Credite)", promocost)
		len += format(szMenuBody[len], 511-len, "^n\r7. \wIncarcatoare Infinite (Pret: %d Credite)", unlacost)
		len += format(szMenuBody[len], 511-len, "^n^n\r8.  \wInainte")
		len += format(szMenuBody[len], 511-len, "^n\r9.  \wInapoi")
		len += format(szMenuBody[len], 511-len, "^n\r0.  \wIesire")
		len += format(szMenuBody[len], 511-len, "^n^nCredite: %i (in %i minute o sa primesti inca un credit)",connecttime[id]/credittime,(credittime/60)-minutes)
		keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
		show_menu(id, keys, szMenuBody, -1)
	}
}

public EUAMenu(id, key)
{
	if(itemcap[id] == maxitems)
		client_print(id, print_chat, " Acesta este maximul de ITEME , asteapta pana mapa viitoare ca sa iei altele.")
	if(creditsspent[id] == maxcredits)
		client_print(id, print_chat, " Acesta este maximul de credite care il poti cheltui pe o harta .")
	if(itemcap[id] < maxitems && creditsspent[id] < maxcredits)
	{
		switch(key)
		{
			case 0:
			{
				if(connecttime[id]/credittime < hpscost)
					client_print(id, print_chat, " Nu ai destule credite")
				if(hpstlr[id] == 1)
					client_print(id, print_chat, " Deja Furi Hp-ul inamiciilor")
				if(connecttime[id]/credittime >= hpscost && hpstlr[id] == 0)
				{
					itemcap[id]++
					hpstlr[id] = 1
					upgradelevelup(id)
					show_iupgrades(id)
					decCredit(id,hpscost)
					client_print(id, print_chat, " Acum poti fura Hp-ul inamiciilor.")
					creditsspent[id]++
				}
				EUMenu(id)
			}
			case 1:
			{
				if(connecttime[id]/credittime< regenerationcost)
					client_print(id, print_chat, " Nu ai destule credite")
				if(regeneration[id] == 1)
					client_print(id, print_chat, " Deja ai trusa de prim-ajutor la tine")
				if(connecttime[id]/credittime >= regenerationcost && regeneration[id] == 0)
				{
					itemcap[id]++
					regeneration[id] = 1
					firstaid(id)
					upgradelevelup(id)
					show_iupgrades(id)
					decCredit(id,regenerationcost)
					client_print(id, print_chat, "Acum Viata/Armura v-a incepe sa se regenereze")
					creditsspent[id]++
				}
				EUMenu(id)
			}
			case 2:
			{
				if(connecttime[id]/credittime < weapontrainingcost)
					client_print(id, print_chat, " Nu ai destule credite")
				if(weapontraining[id] == 1)
					client_print(id, print_chat, " Deja ai Recoilul Scazut")
				if(connecttime[id]/credittime >= weapontrainingcost && weapontraining[id] == 0)
				{
					itemcap[id]++
					weapontraining[id] = 1
					upgradelevelup(id)
					show_iupgrades(id)
					decCredit(id,weapontrainingcost)
					client_print(id, print_chat, "Gata cu Recoilul !")
					creditsspent[id]++
				}
				EUMenu(id)
			}
			case 3:
			{
				if(connecttime[id]/credittime < jumpmodulecost)
					client_print(id, print_chat, "Nu ai destule credite")
				if(jumpmodule[id] == 1)
					client_print(id, print_chat, " Ai deja Bhop")
				if(connecttime[id]/credittime >= jumpmodulecost && jumpmodule[id] == 0)
				{
					itemcap[id]++
					jumpmodule[id] = 1
					upgradelevelup(id)
					show_iupgrades(id)
					decCredit(id,jumpmodulecost)
					client_print(id, print_chat, "Acum poti face BunnyHop")
					creditsspent[id]++
				}
				EUMenu(id)
			}
			case 4:
			{
				if(connecttime[id]/credittime < climbgearcost)
				client_print(id, print_chat, " Nu ai destule credite")
				if(climb[id] == 1)
					client_print(id, print_chat, "Deja esti SpiderMan")
				if(connecttime[id]/credittime >= climbgearcost && climb[id] == 0)
				{
					itemcap[id]++
					climb[id] = 1
					upgradelevelup(id)
					show_iupgrades(id)
					set_task(0.1, "cwall", id, "", 0, "b")
					decCredit(id,climbgearcost)
					client_print(id, print_chat, "Apasa [W] sau [S] si apoi [SPACE] ca sa te cateri pe pereti.")
					creditsspent[id]++
				}
				EUMenu(id)
			}
			case 5:
			{
				if(connecttime[id]/credittime < promocost)
					client_print(id, print_chat, "Nu ai destule credite")
				if(promotion[id] == 1)
					client_print(id, print_chat, " Deja esti mai bogat")
				if(connecttime[id]/credittime >= promocost && promotion[id] == 0)
				{
					itemcap[id]++
					promotion[id] = 1
					upgradelevelup(id)
					show_iupgrades(id)
					decCredit(id,promocost)
					client_print(id, print_chat, "Acum o sa primesti de 2 ori mai multi bani")
					creditsspent[id]++
				}
				EUMenu(id)
			}
			case 6:
			{
				if(connecttime[id]/credittime < unlacost)
					client_print(id, print_chat, "Nu ai destule credite")
				if(gHasuammo[id] == 1)
					client_print(id, print_chat, "Ai deja Incarcatoare Infinite")
				if(connecttime[id]/credittime >= unlacost && gHasuammo[id] == 0)
				{
					itemcap[id]++
					gHasuammo[id] = 1
					upgradelevelup(id)
					show_iupgrades(id)
					decCredit(id,unlacost)
					client_print(id, print_chat, "Acum ai Incarcatoare Infinite [Nu ca nu ai avea deja ...]")
					creditsspent[id]++
				}
				EUMenu(id)
			}
			case 7: EU2Menu(id)
			case 8: MainUpgradesMenu(id)
		}
	}
	return PLUGIN_HANDLED
}

public showMenu(id)
{
	if(get_cvar_num("amx_upgrades") == 1)
	{
		new authid[32]
		new playtime = (get_user_time(id) - lastplaytime[id])
		lastplaytime[id] = get_user_time(id)
		get_user_authid(id,authid,31)
		new tmp_vault_time,vault_time[21]
		get_vaultdata(authid,vault_time,20)
		tmp_vault_time = str_to_num(vault_time)
		tmp_vault_time += playtime
		connecttime[id] = tmp_vault_time
		num_to_str(tmp_vault_time,vault_time,20)
		set_vaultdata(authid,vault_time)
		new tmp_minutes = floatround(float(connecttime[id]/60),floatround_floor)
		new minutes = tmp_minutes % (credittime/60)
		new keys
		new szMenuBody[512]
		new len = format(szMenuBody, 511, "\yPassive Upgrade Menu:^n")
		len += format(szMenuBody[len], 511-len, "^n\r1. \wArmura (Pret: %d Credit)", armorcost)
		len += format(szMenuBody[len], 511-len, "^n\r2. \wViata (Pret: %d Credite)", hpcost)
		len += format(szMenuBody[len], 511-len, "^n\r3. \wViteza (Pret: %d Credit)", speedcost)
		//len += format(szMenuBody[len], 511-len, "^n\r4. \wGravitatie (Pret: %d Credite)", gravitycost)
		len += format(szMenuBody[len], 511-len, "^n\r4. \wStealth (Pret: %d Credit)", stealthcost)
		len += format(szMenuBody[len], 511-len, "^n\r5. \wMultiJump (Pret: %d Credite)", multijumpcost)
		len += format(szMenuBody[len], 511-len, "^n^n\r9.  \wInapoi")
		len += format(szMenuBody[len], 511-len, "^n\r0.  \wIesire")
		len += format(szMenuBody[len], 511-len, "^n^nCredite: %i (in %i minute o sa primesti inca un credit)",connecttime[id]/credittime,(credittime/60)-minutes)
		keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<8|1<<9)
		show_menu(id, keys, szMenuBody, -1)
	}
	return PLUGIN_CONTINUE
}

public actionMenu(id, key)
{
	if(creditsspent[id] == maxcredits)
		client_print(id, print_chat, "Ai atins maximul creditelor pe aceasta harta.")
	if(creditsspent[id] < maxcredits)
	{
		switch(key)
		{
			case 0:
			{
				if(connecttime[id]/credittime < armorcost)
					client_print(id, print_chat, " Nu ai destule credite")
				if(Armor[id] == armormaxlvl)
					client_print(id, print_chat, "Ai ajuns la Levelul Maxim !")
				if(connecttime[id]/credittime >= armorcost && Armor[id] < armormaxlvl)
				{
					Armor[id]++
					UserArmor(id)
					upgradelevelup(id)
					show_upgrades(id)
					decCredit(id,armorcost)
					creditsspent[id]++
				}
				showMenu(id)
			}
			case 1:
			{
				if(connecttime[id]/credittime < hpcost)
				client_print(id, print_chat, " Nu ai destule credite")
				if(Health[id] == hpmaxlvl)
					client_print(id, print_chat, " Ai ajuns la Levelul Maxim !")
				if(connecttime[id]/credittime >= hpcost && Health[id] < hpmaxlvl)
				{
					Health[id]++
					UserHealth(id)
					upgradelevelup(id)
					show_upgrades(id)
					decCredit(id,hpcost)
					creditsspent[id]++
				}
				showMenu(id)
			}
			case 2:
			{
				if(connecttime[id]/credittime < speedcost)
					client_print(id, print_chat, "Nu ai destule credite")
				if(Speed[id] == speedmaxlvl)
					client_print(id, print_chat, " Ai ajuns la Levelul Maxim !")
				if(connecttime[id]/credittime >= speedcost && Speed[id] < speedmaxlvl)
				{
					Speed[id]++
					UserSpeed(id)
					upgradelevelup(id)
					show_upgrades(id)
					decCredit(id,speedcost)
					creditsspent[id]++
				}
				showMenu(id)
			}
			case 3:
			{
				if(connecttime[id]/credittime < stealthcost)
					client_print(id, print_chat, " Nu ai destule credite")
				if(Stealth[id] == stealthmaxlvl)
					client_print(id, print_chat, "Ai ajuns la Levelul Maxim !")
				if(connecttime[id]/credittime >= stealthcost && Stealth[id] < stealthmaxlvl)
				{
					Stealth[id]++
					UserStealth(id)
					upgradelevelup(id)
					show_upgrades(id)
					decCredit(id,stealthcost)
					creditsspent[id]++
				}
				showMenu(id)
			}
			case 4:
			{
				if(connecttime[id]/credittime < multijumpcost)
					client_print(id, print_chat, " Nu ai destule credite")
				if(multijump[id] == multijumpmaxlvl)
					client_print(id, print_chat, " Ai ajuns la Levelul Maxim !")
				if(connecttime[id]/credittime >= multijumpcost && multijump[id] < multijumpmaxlvl)
				{
					multijump[id]++
					upgradelevelup(id)
					show_upgrades(id)
					decCredit(id,multijumpcost)
					creditsspent[id]++
				}
				showMenu(id)
			}
			case 8: MainUpgradesMenu(id)
		}
	}
	return PLUGIN_HANDLED
}

public UserArmor(id)
{
	new iap = (Armor[id] * armorperbuy)
	set_user_armor(id, 100 + iap)
	return PLUGIN_CONTINUE
}

public UserHealth(id)
{
	new ihp = (Health[id] * hpperbuy)
	set_user_health(id, 100 + ihp)
	return PLUGIN_CONTINUE
}

public UserSpeed(id)
{
	if(speed == false)
		return PLUGIN_CONTINUE
	new ispeed = (Speed[id] * speedperbuy)
	set_user_maxspeed(id, 240.0 + ispeed)
	return PLUGIN_CONTINUE
}
public UserStealth(id)
{
	new istealth = (Stealth[id] * stealthperbuy)
	set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, defaultstealth - istealth)
	return PLUGIN_CONTINUE
}

public firstaid(id)
{
	if(is_user_alive(id))
	{
		if(regeneration[id] > 0)
		{
			new Float:srate = regenerationrate
			set_task(srate, "starttheregen", id, "", 0, "b")
		}
	}
	return PLUGIN_CONTINUE
}

public starttheregen(id)
{
	if(is_user_alive(id))
	{
		if(regeneration[id] > 0)
		{
			new maxhp = (100 + Health[id] * hpperbuy)
			if(get_user_health(id) < maxhp)
			{
				message_begin(MSG_ONE, get_user_msgid("ScreenFade"), { 0, 0, 0 }, id)
				write_short(1<<10)
				write_short(1<<10)
				write_short(1<<12)
				write_byte(0)
				write_byte(0)
				write_byte(255)
				write_byte(50)
				message_end()
				new health = get_user_health(id)
				health += hpregenp
				set_user_health(id, health)
				if(get_user_health(id) >= maxhp)
				set_user_health(id, maxhp)
			}
			new maxap = (100 + Armor[id] * armorperbuy)
			if(get_user_armor(id) < maxap)
			{
				message_begin(MSG_ONE, get_user_msgid("ScreenFade"), { 0, 0, 0 }, id)
				write_short(1<<10)
				write_short(1<<10)
				write_short(1<<12)
				write_byte(0)
				write_byte(0)
				write_byte(255)
				write_byte(50)
				message_end()
				new armor = get_user_armor(id)
				armor += apregenp
				set_user_armor(id, armor)
				if(get_user_armor(id) >= maxap)
				set_user_armor(id, maxap)
			}
		}
	}
	return PLUGIN_CONTINUE
}

public Event_Damage(id)
{
	new damage = read_data(2)
	new bodypart, weapon
	new enemy = get_user_attacker(id, weapon, bodypart)
	new hpgain = floatround(float(get_user_health(enemy)) + (float(damage) * 0.5))
	new maxhp = (100 + Health[enemy] * hpperbuy)
	if(is_user_alive(enemy) && hpstlr[enemy] > 0)
	{
		message_begin(MSG_ONE, get_user_msgid("ScreenFade"), { 0, 0, 0 }, enemy)
		write_short(1<<10)
		write_short(1<<10)
		write_short(1<<12)
		write_byte(0)
		write_byte(255)
		write_byte(0)
		write_byte(50)
		message_end()
		set_user_health(enemy, hpgain)
		if(get_user_health(enemy) >= maxhp)
			set_user_health(enemy, maxhp)
	}
	if(sgrenade[enemy] > 0 && weapon == CSW_HEGRENADE && is_user_alive(id))
	{
		new Xdamage = floatround(float(get_user_health(id)) - (float(damage) * 90.0))
		if(Xdamage < 1)
		{
			set_msg_block(get_user_msgid("DeathMsg"),BLOCK_ONCE)
			message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0, 0, 0}, 0)
			write_byte(enemy)
			write_byte(id)
			write_byte(0)
			write_string("grenade")
			message_end()
		}
		set_user_health(id, Xdamage)
		sgrenade[enemy] = 0
		itemcap[enemy]--
	}
	if(crowbar[enemy] > 0 && weapon == CSW_KNIFE && is_user_alive(id))
	{
		new KXdamage = floatround(float(get_user_health(id)) - (float(damage)))
		if(KXdamage < 1)
		{
			set_msg_block(get_user_msgid("DeathMsg"),BLOCK_ONCE)
			message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0, 0, 0}, 0)
			write_byte(enemy)
			write_byte(id)
			write_byte(0)
			write_string("knife")
			message_end()
			new frags, deaths
			frags = get_user_frags(enemy) + 1
			set_user_frags(enemy, frags)
			deaths = cs_get_user_deaths(id) + 1
			cs_set_user_deaths(id, deaths)
			frags = get_user_frags(id) + 1
			set_user_frags(id, frags)
		}
		set_user_health(id, KXdamage)
	}
	return PLUGIN_CONTINUE
}

public client_PreThink(id)
{
	if(is_user_alive(id) && get_cvar_num("amx_upgrades") == 1)
	{
		new buttons = get_user_button(id)
		new obut = get_user_oldbutton(id)
		if(jumpmodule[id] > 0)
		{
			entity_set_float(id, EV_FL_fuser2, 0.0)
			if(buttons & IN_JUMP)
			{
				new flags = entity_get_int(id, EV_INT_flags)
				if(flags | FL_WATERJUMP && entity_get_int(id, EV_INT_waterlevel) < 2 && flags & FL_ONGROUND)
				{
					new Float:velocity[3]
					entity_get_vector(id, EV_VEC_velocity, velocity)
					velocity[2] += 250.0
					entity_set_vector(id, EV_VEC_velocity, velocity)
					entity_set_int(id, EV_INT_gaitsequence, 6)
				}
			}
		}
		if(wired[id] > 0)
		{
			new temp[2]
			new currweapon = get_user_weapon(id, temp[0], temp[1])
			if(currweapon == CSW_KNIFE)
			{
				if(get_user_button(id) & IN_ATTACK)
				{
					set_task(0.5, "beep_sound", id)
					set_task(1.2, "c4bombertimer", id)
				}
			}
		}
		if(multijump[id] > 0)
		{
			if((buttons & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
			{
				if(jumpnum[id] < multijump[id])
				{
					dojump[id] = true
					jumpnum[id]++
					return PLUGIN_CONTINUE
				}
			}
			if((buttons & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
				jumpnum[id] = 0
		}
	}
	return PLUGIN_CONTINUE
}

public client_PostThink(id)
{
	if(is_user_alive(id) && get_cvar_num("amx_upgrades") == 1)
	{
		if(dojump[id] == true)
		{
			new Float:velocity[3]	
			entity_get_vector(id,EV_VEC_velocity,velocity)
			velocity[2] = random_float(265.0,285.0)
			entity_set_vector(id,EV_VEC_velocity,velocity)
			dojump[id] = false
			return PLUGIN_CONTINUE
		}
	}
	return PLUGIN_CONTINUE
}

public beep_sound(id)
{
	if(wired[id] > 0)
		emit_sound(id, CHAN_ITEM, "buttons/blip2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}

public update(id)
{
	if(get_cvar_num("amx_upgrades") != 1)
		return PLUGIN_CONTINUE
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE
	//set_user_gravity(id, 1 - Gravity[id] * gravityperbuy)
	if(speed != false)
		set_user_maxspeed(id, 240.0 + (Speed[id] * speedperbuy))
	if(weapontraining[id] > 0)
		entity_set_vector (id,EV_VEC_punchangle, Float:{0.0, 0.0, 0.0})
	new temp[2]
	new istealth = (Stealth[id] * stealthperbuy)
	if(Stealth[id] > 0)
	{
		if(get_user_weapon(id, temp[0], temp[1]) == CSW_KNIFE)
		{
			new astealth = istealth + 20
			set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, defaultstealth - astealth)
		}
		else
			set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, defaultstealth - istealth)
	}
	new wpnid = read_data(2)
	if(wired[id] > 0)
	{
		if(wpnid == CSW_KNIFE)
			switchmodel(id)
	}
	if(crowbar[id] > 0)
	{
		if(wpnid == CSW_KNIFE)
			switchmodel(id)
	}
	if(gHasuammo[id] > 0)
	{
		new clip = read_data(3)
		if(wpnid == CSW_C4 || wpnid == CSW_KNIFE || wpnid == CSW_HEGRENADE || wpnid == CSW_SMOKEGRENADE || wpnid == CSW_FLASHBANG)
			return PLUGIN_CONTINUE
		if(clip == 0)
		{
			new wpnname[32]
			get_weaponname(wpnid, wpnname, 31)
			give_item(id, wpnname)
      			engclient_cmd(id, wpnname)
		}
	}
	if(laser[id] > 0)
	{
		set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 10.0, 0.1, 0.1, 10)
		show_hudmessage(id, "o")
	}
	return PLUGIN_CONTINUE
}

public switchmodel(id)
{
	new temp[2], wpnid = get_user_weapon(id, temp[0], temp[1])
	if(is_user_alive(id))
	{
		if(wired[id] > 0)
		{
			if(wpnid == CSW_KNIFE)
			{
				entity_set_string(id, EV_SZ_viewmodel, "models/v_satchel_radio.mdl")
				entity_set_string(id, EV_SZ_weaponmodel, "models/p_satchel_radio.mdl")
			}
		}
		if(crowbar[id] > 0)
		{
			if(wpnid == CSW_KNIFE)
			{
				entity_set_string(id, EV_SZ_viewmodel, "models/v_crowbar.mdl")
				entity_set_string(id, EV_SZ_weaponmodel, "models/p_crowbar.mdl")
			}
		}
	}
}

public upgradelevelup(id)
{
	client_print(id, print_center, "***Upgrade CumparaT***")
	client_cmd(id, "spk weapons/pl_gun2.wav")
	return PLUGIN_CONTINUE
}

public cwall(id)
{
	new buttons = get_user_button(id)
	if(buttons & IN_ATTACK)
		return PLUGIN_HANDLED
	if(!is_user_connected(id))
		return PLUGIN_HANDLED
	if(speed == true)
	{
		if(climb[id] > 0)
		{
			new Float: velocity[3]
			entity_get_vector(id, EV_VEC_velocity, velocity)
			if(buttons & IN_JUMP && (buttons & IN_FORWARD || buttons & IN_BACK))
			{
				if(velocity[0] == 0.0 || velocity[1] == 0.0)
				{
					velocity[1] = 10.0
					velocity[2] = 220.0
					entity_set_vector(id, EV_VEC_velocity, velocity)
				}
			}
		}
	}
	return PLUGIN_CONTINUE
}

public c4bombertimer(id)
{
	if(wired[id] > 0)
	{
		wired[id] = 0
		itemcap[id]--
		emit_sound(id, CHAN_STATIC, "weapons/mine_charge.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		new param[2]
		param[0] = id
		set_task(3.8, "bombed", BOMB_TASK + id, param, 1)
	}
}

public bombed(param[])
{
	new id = param[0]
	new origin[3]
	get_user_origin(id, origin, 0)
   	for(new a = 1; a <= get_maxplayers(); a++)
	{
		new origin1[3]
 		get_user_origin(a, origin1, 0)
		if(is_user_alive(a))
		{
			if(!(origin[0] - origin1[0] > BOMBKILL_RANGE ||
			origin[0] - origin1[0] < - BOMBKILL_RANGE ||
			origin[1] - origin1[1] > BOMBKILL_RANGE ||
			origin[1] - origin1[1] < - BOMBKILL_RANGE ||
			origin[2] - origin1[2] > BOMBKILL_RANGE ||
			origin[2] - origin1[2] < - BOMBKILL_RANGE))
			{
				new bombguyfrags
				new name[33]
				get_user_name(id, name, 32)
				if((a != id))
				{
					bombguyfrags = get_user_frags(id)
					bombguyfrags += 1
					set_user_frags(id, bombguyfrags)
					set_msg_block(get_user_msgid("DeathMsg"),BLOCK_ONCE)
					message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0, 0, 0}, 0)
					write_byte(id)
					write_byte(a)
					write_byte(1)		
					write_string("")
					message_end()
					client_print(a, print_chat, "%s te-a omorat cu Bomba !", name)
				}
				user_kill(a, 1)
				explode(origin1)
			}
		}
	}
}

explode(vec1[3])
{
	   // blast circles
	   message_begin(MSG_BROADCAST,SVC_TEMPENTITY, vec1)
	   write_byte(21)
	   write_coord(vec1[0])
	   write_coord(vec1[1])
	   write_coord(vec1[2] + 16)
	   write_coord(vec1[0])
	   write_coord(vec1[1])
	   write_coord(vec1[2] + 1936)
	   write_short(white)
	   write_byte(0)//startframe 
	   write_byte(0)//framerate 
	   write_byte(3)//life 2
	   write_byte(20)//width 16 
	   write_byte(0)//noise 
	   write_byte(188)//r 
	   write_byte(220)//g 
	   write_byte(255)//b 
	   write_byte(255)//brightness
	   write_byte(0)//speed
	   message_end()
	   //Explosion2
	   message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
	   write_byte(12)
	   write_coord(vec1[0])
	   write_coord(vec1[1])
	   write_coord(vec1[2])
	   write_byte(188)//byte (scale in 0.1's) 188
	   write_byte(10)//byte (framerate) 
	   message_end()
	   //TE_Explosion
	   message_begin(MSG_BROADCAST,SVC_TEMPENTITY,vec1)
	   write_byte(3)
	   write_coord(vec1[0])
	   write_coord(vec1[1])
	   write_coord(vec1[2])
	   write_short(fire)
	   write_byte(65)//byte (scale in 0.1's) 188
	   write_byte(10)//byte (framerate)
	   write_byte(0)//byte flags
	   message_end()
	   //Smoke
	   message_begin(MSG_BROADCAST,SVC_TEMPENTITY,vec1) 
	   write_byte(5)//5
	   write_coord(vec1[0])
	   write_coord(vec1[1])
	   write_coord(vec1[2])
	   write_short(smoke)
	   write_byte(50)//2
	   write_byte(10)//10
	   message_end()
}

public esploop(id)
{
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE
	if(esp[id] > 0)
	{
		for(new a = 1; a <= get_maxplayers(); a++) 
		{
			if(is_user_alive(a))
			{
				if(cs_get_user_team(id) != cs_get_user_team(a))
				{
					if((a != id))
					{
						new vec1[3]
						get_user_origin(a, vec1, 0)
						message_begin(MSG_ONE, SVC_TEMPENTITY, vec1, id)
						write_byte(21)
						write_coord(vec1[0])
						write_coord(vec1[1])
						write_coord(vec1[2] - 35)
						write_coord(vec1[0])
						write_coord(vec1[1])
						write_coord(vec1[2] + credittime)
						write_short(white)
						write_byte(0)//startframe
						write_byte(1)//framerate
						write_byte(6)//3 life 2
						write_byte(8)//width 16
						write_byte(1)//noise
						write_byte(100)//r
						write_byte(100)//g
						write_byte(255)//b
						write_byte(192)//brightness
						write_byte(0)//speed
						message_end()
					}
				}
			}
		}
	}
	return PLUGIN_CONTINUE
}

public UpgrHelp(id) 
{
	new PUmotd[2048], title[64], dpos = 0
	format(title, 63, "Unique Mod: [%s] ", VER)
	dpos += format(PUmotd[dpos], 2047-dpos, "<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:#000000;margin-left:8px;margin-top:0px;}</style></head><pre><body>")
	dpos += format(PUmotd[dpos], 2047-dpos, "^n^n<b>%s</b>^n^n",title)
	dpos += format(PUmotd[dpos], 2047-dpos, "^n^n-=--=--=--=--=--=--=--=--=--=-^n^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[*]Comenzi:^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "/buy - Deschide Meniul^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "/credite - Cate credite ai / cat timp va dura pana o sa primesti inca un credit^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "^n^n-=--=--=--=--=--=--=--=--=--=-^n^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[*]Upgraduri:^n^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Armura] - Primesti Armura^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Viata] - Primesti Viata^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Viteza]- Primesti Viteza^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Gravitatie] - Scade Gravitatia^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Stealth] - Scade Vizibilitatea^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[MultiJump] - Poti sari de mai multe ori in aer^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "^n^n-=--=--=--=--=--=--=--=--=--=-^n^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[*]Upgradeuri Iteme:^n^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Furi Hp] - Furi Hp de la inamici^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Regenerare] - Iti regenereaza Viata si Armura^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Recoil Scazut] - Scade Recoilul [Adica nu se mai duce arma in toate partiile]^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Bhop] - Activeaza BunnyHop-ul [Ti pe space si sari in continuu]^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Catarare pe Perete] - Abilitate de a urca pe ziduri [Te duci in fata , si apesi space]^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[x2 Money] - Primesti de 2 ori mai multi bani^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Incarcatoare Infinite] - Ai incarcatoare infinite [Nimic Nou]^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Pasi Silentiosi] - Nu se mai aud pasii cand mergi^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Bomba Sinucigasa] - Poti sa omori pe cineva care e langa tine cand o detonezi^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[E.S.P] - Abilitate sa vezi unde este inamicul^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Tinta cu Laser] - Adauga o tinta laser^n")
	dpos += format(PUmotd[dpos], 2047-dpos, " - Grenada cu Damage Mult mai Mare^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Crowbar] - Cutit cu damage x2^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "[Protectie Flash] - Nu mai iei niciun flash^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "^n^n-=--=--=--=--=--=--=--=--=--=-^n^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "***[INFO] ACESTE UPGRADURI RAMAN SI DACA MORI !!!***^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "***[INFO] O SA PIERZI SUPER GRENADA SI BOMBA SINUCIGASA DACA MORI !!!***^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "***[INFO] CREDITELE RAMAN TOT TIMPUL PE NUMELE PE CARE JOCI DECI NU-TI SCHIMBA NUMELE !!!***^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "***[INFO] ITEMELE SI UPGRADURILE , SUNT DOAR PENTRU O HARTA , CAND SE SCHIMBA HARTA ELE V-OR DISPAREA !!!***^n")
	dpos += format(PUmotd[dpos], 2047-dpos, "***[INFO] MAXIMUL ITEMELOR CARE LE POTI CUMPARA: %i***^n",maxitems)
	dpos += format(PUmotd[dpos], 2047-dpos, "***[INFO] MAXIMUL CREDITELOR CARE IL POTI CHELUTI PE O HARTA: %i***^n",maxcredits)
	show_motd(id, PUmotd, title)
}

public plugin_precache()
{
	precache_sound("weapons/pl_gun2.wav")
	precache_sound("buttons/blip2.wav")
	precache_sound("weapons/mine_charge.wav")
	precache_model("models/v_satchel_radio.mdl")
	precache_model("models/p_satchel_radio.mdl")
	precache_model("models/v_crowbar.mdl")
	precache_model("models/p_crowbar.mdl")
	smoke = precache_model("sprites/steam1.spr") 
	white = precache_model("sprites/white.spr")
	fire = precache_model("sprites/explode1.spr")
}

public queryall(id,level,cid) 
{
	if (!cmd_access(id,level,cid,1))
		return PLUGIN_HANDLED
	new maxslots = get_maxplayers()
	new query_name[32]
	for(new i = 1; i <= maxslots; ++i)
	{
		if (!is_user_connected(i) && !is_user_connecting(i)) continue
		get_user_name(i,query_name,31)
		client_print(id,print_console," %s 's credits = %i",query_name,connecttime/credittime)
	}
	return PLUGIN_HANDLED
}

public client_authorized(id)
{
	new authid[32], vault_time[21]
	get_user_authid(id,authid,31)
	if(vaultdata_exists(authid))
	{
		get_vaultdata(authid,vault_time,20)
		connecttime[id] = str_to_num(vault_time)
	}
	else
	{
		connecttime[id] = numnewcredits * credittime
		num_to_str(connecttime[id],vault_time,20)
		set_vaultdata(authid,vault_time)
	}
	return PLUGIN_CONTINUE
}

public decCredit(id, itemcost)
{
	new cost = itemcost
	connecttime[id] = connecttime[id] - (credittime * cost)
	new authid[32], vault_time[21]
	get_user_authid(id,authid,31)
	num_to_str(connecttime[id],vault_time,20)
	set_vaultdata(authid,vault_time)
	return PLUGIN_HANDLED
}

public addCredit(id, itemadd)
{
	new addcredits = itemadd
	connecttime[id] = connecttime[id] + (credittime * addcredits)
	new authid[32], vault_time[21]
	get_user_authid(id,authid,31)
	num_to_str(connecttime[id],vault_time,20)
	set_vaultdata(authid,vault_time)
	return PLUGIN_HANDLED
}

public givecredit(id,level,cid)
{
	if(!cmd_access(id,level,cid,3))
        	return PLUGIN_HANDLED
	new target[32],credits[21]
    	read_argv(1,target,31)
    	read_argv(2,credits,20)
	new player = cmd_target(id,target,8)
    	if(!player) return PLUGIN_HANDLED 
	new admin_name [32], player_name[32]
    	get_user_name(id,admin_name,31)
    	get_user_name(player,player_name,31)
	new crednum = str_to_num(credits)
	addCredit(player,crednum)
	client_print(id,print_console," Ai adaugat %i credite la %s totalul creditelor.",crednum,player_name)
	return PLUGIN_CONTINUE
}

public removecredit(id,level,cid)
{
	if(!cmd_access(id,level,cid,3))
        	return PLUGIN_HANDLED
	new target[32],credits[21]
    	read_argv(1,target,31)
    	read_argv(2,credits,20)
	new player = cmd_target(id,target,8)
    	if(!player) return PLUGIN_HANDLED 
	new admin_name [32], player_name[32]
    	get_user_name(id,admin_name,31)
    	get_user_name(player,player_name,31)
	new crednum = str_to_num(credits)
	decCredit(player,crednum)
	client_print(id,print_console," Ai scos %i credite din %s totalul creditelor.",crednum,player_name)
	return PLUGIN_CONTINUE
}


Download resurse + sma : Download Link

Ps : Am zis sa fac o fapta buna pentru toti cei care vor resurse NOI pentru modul BaseBuilder ! Multe dintre ele sunt imbunatatite de mine , dar unele nu , multumesc lui spuf care mi-a facut cateva dintre ele si s-a chinuit !
Last edited by J3FF on 09 Aug 2012, 21:05, edited 2 times in total.
Unii ma mai stiu de e t n a d

Image
RoyalServer
User avatar
d3zz
Fost moderator
Fost moderator
Posts: 247
Joined: 22 May 2012, 16:00
Detinator Steam: Nu
CS Status: Nu mai ma joc momentan
Detinator server CS: No
SteamID: No
Reputatie: Fost moderator
Location: Brebu/Campina/Prahova
Has thanked: 22 times
Been thanked: 15 times
Contact:

09 Aug 2012, 20:02

BRAVo #:-s
User avatar
J3FF
Membru, skill +1
Membru, skill +1
Posts: 472
Joined: 27 Oct 2007, 20:02
Detinator Steam: Nu
CS Status: ON and Ready 2 PLAY
Detinator server CS: Nu
Location: SiBiU
Has thanked: 25 times
Been thanked: 39 times

09 Aug 2012, 20:59

Multumesc daca o sa am timp o sa faci si niste SS-uri :)
Unii ma mai stiu de e t n a d

Image
User avatar
Ulquiorra
Fost moderator
Fost moderator
Posts: 2053
Joined: 25 Jul 2010, 17:29
Detinator Steam: Da
CS Status: A mai trecut o zi asteptand una mai buna
Detinator server CS: Retras.
SteamID: STEAM_0:1:318247XX
Reputatie: Fost Scripter eXtreamCS
Fost Moderator ajutator
Nick anterior: Askhanar
Location: Braila, Romania.
Has thanked: 215 times
Been thanked: 1132 times

09 Aug 2012, 21:51

hah nu credeam ca o sa iti publici pluginu de rase :P.. dupa cum ai vazut ca a murit la noi in pc pana acum :))
frumos ! ( respect :P )
Caut o persoana dedicata care se pricepe si stie ce face.
Vreau sa creeze si sa se ocupe de administrarea unui server de MU, da e vorba de vechiul joc..ma gandesc undeva la un season 3 ep1/2.

O sa achizitionez un domeniu .ro.
Totodata sponsorizez absolut orice este necesar.
Ma puteti contacta prin: http://solo.to/stfrzv
ravyZM
Membru, skill 0
Membru, skill 0
Posts: 44
Joined: 06 Aug 2012, 16:17
Detinator Steam: Da
CS Status: Stau
SteamID: ravy98
Reputatie: Restrictie mesaje private (reclama) !
Location: Buzau
Contact:

09 Aug 2012, 23:51

Felicitari
Citeste regulamentul !
User avatar
J3FF
Membru, skill +1
Membru, skill +1
Posts: 472
Joined: 27 Oct 2007, 20:02
Detinator Steam: Nu
CS Status: ON and Ready 2 PLAY
Detinator server CS: Nu
Location: SiBiU
Has thanked: 25 times
Been thanked: 39 times

10 Aug 2012, 13:54

sPuf? wrote:hah nu credeam ca o sa iti publici pluginu de rase :P.. dupa cum ai vazut ca a murit la noi in pc pana acum :))
frumos ! ( respect :P )
Imi pare rau ca l-am facut public , nu pentru mine , ci pentru ca stiu ca ai muncit foarte mult la el , dar vorba ta , murim in fata la pc si nu realizam nimic . Macar dupa toata munca depusa de mine si de altii care m-au ajutat macar sa se mai bucure si copii care in counter-strike isi gasesc marea realizare :-s
Unii ma mai stiu de e t n a d

Image
Ady20
Membru, skill 0
Membru, skill 0
Posts: 14
Joined: 28 Sep 2012, 17:55
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Contact:

29 Sep 2012, 17:36

Cum ii cu laseru? Am un bug. Cand stau in fata la laser laseru nu da dmg in zombie. Cum se poate schimba asta?
CLouD
Membru, skill 0
Membru, skill 0
Posts: 7
Joined: 02 Oct 2012, 18:58
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Has thanked: 1 time
Contact:

22 Oct 2012, 06:28

Code: Select all

 Fatal error 100: cnnot read from file: "colorchat" 
Asta e la pluginu xp cand incer sa-l compilez. Nu merge nici cu #include <colorchat> . Ai idee cum se poate rezolva?

Si la alt compilator:

Code: Select all

 bb_skillmod.sma(21) : warning 217: loose indentation
bb_skillmod.sma(97) : error 029: invalid expression, assumed zero
bb_skillmod.sma(123) : error 029: invalid expression, assumed zero
bb_skillmod.sma(123) : error 004: function "plugin_precache" is not implemented
bb_skillmod.sma(127) : error 029: invalid expression, assumed zero
bb_skillmod.sma(127) : error 004: function "plugin_end" is not implemented
bb_skillmod.sma(132) : error 029: invalid expression, assumed zero
bb_skillmod.sma(132) : error 017: undefined symbol "sayhandle"
bb_skillmod.sma(139) : error 017: undefined symbol "id"
bb_skillmod.sma(139) : warning 215: expression has no effect
bb_skillmod.sma(139) : warning 215: expression has no effect
bb_skillmod.sma(139) : error 001: expected token: ";", but found ")"
bb_skillmod.sma(139) : error 029: invalid expression, assumed zero
bb_skillmod.sma(139) : fatal error 107: too many error messages on one line 
User avatar
sDs|Aragon*
Membru, skill +2
Membru, skill +2
Posts: 576
Joined: 29 Dec 2011, 21:38
Detinator Steam: Da
SteamID: Mihai_Parkour10
Reputatie: Fost scripter eXtreamCS
Has thanked: 4 times
Been thanked: 132 times

26 Oct 2012, 01:57

Felicitari pentru ca ai postat aceste pluginuri care sunt in mare parte modificate sau unice:):-bd
User avatar
J3FF
Membru, skill +1
Membru, skill +1
Posts: 472
Joined: 27 Oct 2007, 20:02
Detinator Steam: Nu
CS Status: ON and Ready 2 PLAY
Detinator server CS: Nu
Location: SiBiU
Has thanked: 25 times
Been thanked: 39 times

28 Oct 2012, 18:30

@Ady , bugul acela se inalneste la orice fel de lasermine pentru mod diferit de zp / zm / biohazard . Am cautat si am postat pe alliedmodders dar nu se stie provenienta .

@CLouD , incearca alt include pentru colorchat , cauta pe google colorchat.inc , si il pui in scripting/include apoi compilezi , trebuie sa mearga , din pacate ca sa te anunt , xp-ul merge doar pe steam-id [ se salveaza ] asta a fost ceva ce mi-a scapat , deoarece nu intram de pe valve .

@Aragon , multumesc atat pentru felicitare cat si pentru ajutor cu unele pluginuri
Unii ma mai stiu de e t n a d

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

30 Oct 2012, 19:02

@Ady20 - Nu inteleg la ce te referi:-??, fi mai explicid
Adica cand stai in fata razei laserului nu da dmg ZM-ului din fata ta sau?
H3ater
Membru, skill 0
Membru, skill 0
Posts: 19
Joined: 14 Jan 2012, 03:55
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Contact:

28 Nov 2012, 20:11

salut.. imi poate zice si mie unde trebe sa pun fiecare fisier? ca nu prea ma pricep.. e prima data cand fac un server Base Builder..
Post Reply

Return to “AmxModX”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 13 guests