Raised This Month: $12 Target: $400
 3% 

Changing a plugin


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Molecula
Junior Member
Join Date: Feb 2013
Old 06-23-2019 , 09:21   Changing a plugin
Reply With Quote #1

hi everyone, i`d like, if possible to ask for your help, i`d like to modify the counter terrorist vip menu (basicaly split it in 2)

vip gold which uses the natives and it`s free
  • native give_weapon_cyclone(id);
  • native zp_give_mpdark(id);
  • native give_user_balrog(id);
  • native give_user_poison(id);
vip silver which uses the natives and costs:
  • native give_weapon_Ethereal(id); cost 20
  • native zp_give_laser(id); cost 40
  • native give_user_ut(id); cost 30
  • native give_weapon_spear(id); cost 15
i`d also like to add some nice knifes to tero vip as well for free, i can do native (that`s all i know actualy and some small changes here and there) so if you cand leave empty for me case 0,1,2 to add natives later that would be great
i know is a lot of work so i if is someone willing to help i wouldn`t mind giving credits on my server thank you.

The code:
Code:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#include <csx>
#include <dhudmessage>  
#include <fun>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <nvault>
#include <xs>

#define MODELCHANGE_DELAY 0.4
#define ROUNDSTART_DELAY 2.0

#define TASK_SPAWN	06081993
#define TASK_MODELCHANGE 100
#define ID_MODELCHANGE (taskid - TASK_MODELCHANGE)

#define ATTRIB_BOMB (1<<1)

#define PDATA_SAFE 2
#define OFFSET_CSMENUCODE 205
#define OFFSET_LINUX 5
#define OFFSET_CSTEAMS 114
#define OFFSET_MODELINDEX 491
#define OFFSET_CSDEATHS 444
#define OFFSET_LAST_HIT_GROUP 75

#define INFO_ZERO 0
#define NTOP 10

#define PEV_NADE_TYPE pev_flTimeStepSound
#define NADE_TYPE_NAPALM 1111
#define NADE_TYPE_FROST 2222
#define NADE_TYPE_CRAZY 3333
#define NADE_TYPE_KILL 4444
#define BREAK_GLASS 0x01
#define FFADE_IN 0x0000
#define FFADE_STAYOUT 0x0004
#define UNIT_SECOND (1<<12)
#define DMG_NADE (1<<24)

new const PRIMARY_WEAPONS_BITSUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90);
new const SECONDARY_WEAPONS_BITSUM = (1<<CSW_GLOCK18)|(1<<CSW_USP)|(1<<CSW_P228)|(1<<CSW_DEAGLE)|(1<<CSW_FIVESEVEN)|(1<<CSW_ELITE);

#define TASK_BURN 10202
#define TASK_MINUTES 1201
#define TASK_REMOVEC4 20122
#define TASK_AFFECT 4303

#define ID_BURN (taskid - TASK_BURN)
#define ID_MINUTE (taskid - TASK_MINUTES)

static const TAG[] = "[Frcso.Play-Arena.Ro]";
new bomba, LaserSprite; 
new nivel[33], complete_hours[33], minutes[33];

new Sprite
new Sprite2
new bool:HasTeleport[33]
new Teleport_Cooldown[33], g_teleports[33] = 0

new modname[32];
new g_maxplayers

enum { Red, Green, Blue }
new const ClassName[] = "BonusBox"
new const SOUND_BLINK[] = { "weapons/flashbang-1.wav" }
new const mdl_box[] = "models/furienbox.mdl"
new const get_present[] = "get_present.wav"

enum
{
	FM_CS_TEAM_UNASSIGNED = 0,
	FM_CS_TEAM_T,
	FM_CS_TEAM_CT,
	FM_CS_TEAM_SPECTATOR
}

new const team_names[][] =
{
	"UNASSIGNED",
	"TERRORIST",
	"CT",
	"SPECTATOR"
}

enum
{
	RED = 1,
	BLUE,
	GREY
}

#define	m_iHideHUD			361
#define	m_iClientHideHUD		362

new const g_names[][] =
{
	"Rebelii",
	"Furienx",
	"Furien",
	"Furyx",
	"Fury",
	"CS.",
	"God.",
	"CS:GO",
	"CSGO",
	"89."
}

#define FFADE_IN			0x0000
#define FFADE_OUT			0x0001
#define FFADE_MODULATE		0x0002
#define FFADE_STAYOUT		0x0004
const UNIT_SEC = 0x1000
const FFADE = 0x0000

new g_Argping[33][3], g_Offset[ 33 ][ 2 ];

new g_sizeof_names = sizeof g_names
new const g_names_new[][] =
{
	"Frcso.Play-Arena.Ro",
	"www.play-arena.ro/forum",
	"Frcso.Play-Arena.Ro#Player"
}

new const explosion_sound[] = "crazy_explode.wav";

#define ANTI_FURIEN_MODEL "bdcs_afurien"
#define FURIEN_MODEL "Assasin"

#define TASK_SHOWHUD 94345
#define ARATA_HUD (taskid - TASK_SHOWHUD)
#define TASK_AURA 3994
#define ID_AURA (taskid - TASK_AURA)
new g_sizeof_names_new = sizeof g_names_new - 1
new g_filter_chars[29] = " ~`@#$%&*()-_=+\|[{]};',<>/?" //^";
new g_names_changed = 1

new bool:plrSolid[33]
new bool:plrRestore[33]
new plrTeam[33];

new const events_sound_wav[][] =
{
	"furien/events/bomb_explode.wav",
	"furien/events/furiens_won.wav",
	"furien/events/target_saved.wav"
}

new const events_sound_mp3[][] =
{
	"sound/furien/events/anti_furiens_won.mp3",
	"sound/furien/events/bomb_defused.mp3"
}

new const misc_sound_wav[][] =
{
	"furien/misc/cash.wav",
	"furien/misc/frostbreak.wav",
	"furien/misc/frostexp.wav",	
	"furien/misc/frosthit.wav",
	"furien/misc/plasma_bomb_beep.wav",
	"furien/misc/plasma_bomb_last10.wav",	
	"furien/misc/plasma_bomb_set.wav",
	"furien/misc/napalm_explode.wav"
}

new const plasma_bomb[][] =
{
	"models/furien/p_plasmabomb.mdl",
	"models/furien/v_plasmabomb.mdl",
	"models/furien/w_plasmabomb.mdl"
}

new const random_msg[][] = 
{
	"Pentru.v TOP 10.g nivele apasa.e M si 5.g.",
	"Pentru.v RANK.g apasa.e M si 4.g.",
	"Pentru.v SHOP.g apasa.e M si 2.g.",
	"Nu ai ales arma? apasa.e M si 1.g.",
	"Puteti accesa meniu.v VIP.g pe.e M si 3",
	"Pentru.v TOP 15 Level.g apasa.e M si 6",
	"Pentru a face nivel trebuie sa joci mult pe server.",
	"Cand esti Furienul cu C4 poti merge invizibil cu CTRL.",
	"Laserul de la Furien Detector poate detecta furienii invizibili"
}

new const v_grenade_furien[][] =
{
	"models/furien/v_fu_fi.mdl",
	"models/furien/v_fu_fr.mdl",
	"models/furien/v_fu_ki.mdl"
}

new const w_grenade_furien[][] =
{
	"models/furien/w_fu_fi.mdl",
	"models/furien/w_fu_fr.mdl",
	"models/furien/w_fu_ki.mdl"
}

#define VIP_FLAG ADMIN_LEVEL_H

new bool:g_m4a1[33], bool:g_ak47[33], bool:g_deagle[33], bool:g_used_life[33], bool:g_pet[33], item_pet[33];

static const p_deagle[] = "models/furien/p_deagle.mdl";
static const p_ak47[] = "models/furien/p_ak47.mdl";
static const p_m4a1[] = "models/furien/p_m4a1.mdl";
static const v_deagle[] = "models/furien/v_deagle.mdl";
static const v_ak47[] = "models/furien/v_ak47.mdl";
static const v_m4a1[] = "models/furien/v_m4a1.mdl";

new const items_menu[][] =
{
	"AK-47 Techno",
	"M4A1 Asiimov",
	"Deagle Cobra",
	"Life",
	"Pet"
}

new const cost[] =
{
	15,
	20,
	10,
	20,
	20
}

const PEV_ADDITIONAL_AMMO = pev_iuser1
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
#define dmin Float:{ -2.440000, -3.540000, -4.960000 }
#define dmax Float:{ 5.880000, 3.780000, 4.750000 }

#define fm_remove_entity(%1) 		engfunc(EngFunc_RemoveEntity, %1)
#define fm_find_ent_by_class(%1,%2) 	engfunc(EngFunc_FindEntityByString, %1, "classname", %2)

#define PET_FLAG 			pev_flTimeStepSound
#define PET_KILLED 			389

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

#define write_coord_f(%1)	engfunc(EngFunc_WriteCoord,%1)

new Trie:g_tClassNames

new bool:g_endround;

new const knife_furien[] = "models/furien/v_furienknife.mdl";
new const super_knife_furien[] = "models/furien/v_superknifefurien.mdl";
new g_msgStatusIcon;

#define flag_get(%1,%2)		(%1 & (1 << (%2 & 31)))
#define flag_set(%1,%2)		(%1 |= (1 << (%2 & 31)));
#define flag_unset(%1,%2)	(%1 &= ~(1 << (%2 & 31)));

#define SPECMODE_ALIVE 0 

new g_HasCustomModel, g_msgHideWeapon, g_msgCrosshair;
new Float:g_ModelChangeTargetTime
new g_CustomPlayerModel[33][32];

new const burn_player[][] =
{
	"furien/player/anti-furiens/burn1.wav",
	"furien/player/anti-furiens/burn2.wav",
	"furien/player/anti-furiens/burn3.wav"
}

new const start_sounds[][] =
{
	"furien/misc/time1.wav",
	"furien/misc/time2.wav",
	"furien/misc/time3.wav",
	"furien/misc/time4.wav",
	"furien/misc/time5.wav"
};

new const FURIEN_ITEMS[][] =
{
	"Super Knife",
	"Health [+40]",
	"Armor [+50]",
	"No Flash",
	"Napalm Nade",
	"Frost Nade",
	"Kill Nade"
}

new const ANTI_FURIEN_ITEMS[][] =
{
	"Furien Detector",
	"Health [+50]",
	"Armor [+60]",
	"No Frost",
	"He Grenade",
	"Flash Grenade"
}

new const FURIEN_COST[] =
{
	20,
	15,
	15,
	10,
	10,
	10,
	50
}

new const ANTI_FURIEN_COST[] =
{
	1200,
	10,
	10,
	5,
	5,
	5
}

new const LEVELS[] =
{
	0,
	2,
	4,
	6,
	8,
	10,
	12,
	14,
	16,
	18,
	20,
	22,
	24,
	26,
	28,
	30,
	32,
	34,
	36,
	38,
	40,
	42,
	44,
	46,
	48,
	50
}

#define TASK_CANPLANT 10001
#define HIDE_HEALTH (1<<3)
#define HIDE_MONEY (1<<5)

new mp_freezetime, bool:g_dontdelete;
new SecondsUntillInvasion, salvare_nvault, g_msgfog;

new g_end_health[33], mp_roundtime;

new bool:g_cmdguns[33], g_primary_select[33], g_secondary_select[33], g_gunsselect[33];

new bool:have_killnade[33];

new const PRIMARY_NAME[][] =
{
	"",
	"MP5",
	"XM1014",
	"AUG",
	"SG552"
}

new const SECONDARY_NAME[][] =
{
	"",
	"GLOCK18",
	"USP"
}

new const wp_give_primary[][] = 
{
	"",
	"weapon_mp5navy",
	"weapon_xm1014",
	"weapon_aug",
	"weapon_sg552"
}

new const wp_give_secondary[][] =
{
	"",
	"weapon_glock18",
	"weapon_usp"
}

new const bullets_primary[] =
{
	CSW_MP5NAVY,
	CSW_MP5NAVY,
	CSW_XM1014,
	CSW_AUG,
	CSW_SG552
}

new const bullets_secondary[] =
{
	CSW_GLOCK18,
	CSW_GLOCK18,
	CSW_USP
}

new const DMG_CS_BULLETS_KNIFE = (DMG_NEVERGIB | DMG_BULLET)
new bool:g_noflash[33], bool:g_nofrost[33], bool:g_superknife[33], bool:g_furiendetector[33];
new bool:savior[33], bool:destroyer[33];

new g_c4timer, pointnum, g_msgScreenFade, beam_effect;
new bool:b_planted = false, bool:g_firstround = true;

new const ambience[] = "sound/furien/misc/thunders147.mp3";

new bool:has_parachute[33]
new para_ent[33]
new jumpnum[33] = 0
new bool:dojump[33] = false

new restart_seconds = 20;
new g_rounds = 0;
#define MAX_PLAYERS	32
#define Ham_Player_ResetMaxSpeed Ham_Item_PreFrame

new g_iMaxPlayers, g_frozen[33], g_burning_duration[33];
#define FIRST_PLAYER_ID	1
#define IsPlayer(%1)	(FIRST_PLAYER_ID <= %1 <= g_iMaxPlayers)
#define XO_WEAPONBOX				4
#define m_rgpPlayerItems_wpnbx_Slot5	39
#define IsWeaponBoxC4(%1)	(get_pdata_cbase(%1, m_rgpPlayerItems_wpnbx_Slot5, XO_WEAPONBOX) > 0)
new g_msgSayText;
#define ID_AFFECT (taskid - TASK_AFFECT)

new const Float:g_flCoords[][] = 
{
	{0.50, 0.40},
	{0.56, 0.44},
	{0.60, 0.50},
	{0.56, 0.56},
	{0.50, 0.60},
	{0.44, 0.56},
	{0.40, 0.50},
	{0.44, 0.44}
}

new g_iPlayerPos[33];
new smoke_spr, lighting, frostgib, firegib, frostexp, fireexp, trail_spr, flame_spr, mdl_glass, crazygib, crazyexp, spr_nadebits, spr_blood_drop, spr_blood_spray;
new event_hud, g_screenshake, g_msg_teaminfo, mp_startmoney, mesaj_sync;

new g_money[33];

#define INFO_ZERO 0
#define NTOP 10
#define TIME 5.0

new toplevels[33], tophours[33], topminutes[33];
new topnames[33][33];

new data_save[64]
new const g_szClassName[] = "ScanCampers";

new cvar_activebox, CvarTeleportCooldown, CvarTeleportRange, CvarFadeTime, CvarColor, CvarHpMax, cvar_activefog, cvar_activehuds;

new Float:g_fUserOrigin[33][3];
new Float:g_fUserOldOrigin[33][3];

new bool:g_bSpawnCheckEnabled = false;
new bool:g_bUserIsCamping[33];
new g_iUserCampSeconds[33];
new g_iMagicEntity;

new bool:active_box, bool:active_fog, bool:active_huds;

public plugin_init()
{
	register_plugin("Furien Mod", "1.1.2", "cyby")
	
	RegisterHam(Ham_Spawn, "player", "spawn_post", 1)
	RegisterHam(Ham_Player_ResetMaxSpeed, "player", "reset_max_speed", 1)
	
	register_clcmd("say /shop", "shop_enter")
	register_clcmd("say /meniu" ,"game_menu")
	register_clcmd("say /level", "detail_level")
	register_clcmd("say /rs", "reset_score")
	register_clcmd("say /ad2", "give_some_money")
	register_clcmd("drop", "hook_drop")
	register_clcmd("chooseteam", "game_menu")
	
	register_logevent("get_bomb", 3, "2=Spawned_With_The_Bomb")
	register_message(get_user_msgid("SendAudio"), "send_audio")
	register_message(get_user_msgid("TextMsg"), "message_textmsg")
	register_event("HLTV", "new_round", "a", "1=0", "2=0")
	register_logevent("end_round", 2, "1=Round_End")
	register_forward(FM_ClientUserInfoChanged, "ChangeName")
	register_forward(FM_EmitSound, "sound_emit")
	RegisterHam(Ham_Think, "grenade", "think_grenade")
	register_forward(FM_CmdStart, "CmdStart")
	register_forward(FM_SetModel, "set_model")
	RegisterHam(Ham_Killed, "player", "killed_player")
	RegisterHam(Ham_Killed, "player", "player_killed_post", 1)
	register_forward(FM_PlayerPreThink, "prethink_player")
	register_forward(FM_PlayerPostThink, "prethink_player_post")
	register_forward(FM_AddToFullPack, "addToFullPack", 1)
	register_event("CurWeapon", "check_weapon", "be", "1=1")
	RegisterHam(Ham_Touch, "weaponbox", "CWeaponBox_Touch")
	RegisterHam(Ham_Touch, "armoury_entity", "GroundWeapon_Touch")
	g_msgHideWeapon = get_user_msgid("HideWeapon");
	g_msgCrosshair = get_user_msgid("Crosshair");
	register_message(g_msgHideWeapon, "messageHideWeapon")
	register_event("HideWeapon", "Event_HideWeapon", "b")
	RegisterHam(Ham_Touch, "weapon_shield", "GroundWeapon_Touch")
	RegisterHam(Ham_Touch, "grenade", "ham_touch")
	register_message(get_user_msgid("ScreenFade"), "msg_screenfade")
	register_message(get_user_msgid("ShowMenu"), "message_show_menu")
	register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu")
	RegisterHam(Ham_TakeDamage, "player", "ham_take_damage", 0)
	register_event("Damage", "on_damage", "b", "2!0", "3=0", "4!0")	
	register_event("ResetHUD", "newSpawn", "be")
	register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
	register_event("Money", "eventMoney", "b")
	g_msgStatusIcon = get_user_msgid("StatusIcon")
	register_message(get_user_msgid("ScoreAttrib"), "score_attrib")
	register_message(g_msgStatusIcon, "msgStatusIcon")
	mp_freezetime = get_cvar_pointer("mp_freezetime")
	register_clcmd("jointeam", "block_command")
	register_clcmd("fullupdate", "block_command")
	register_forward(FM_GetGameDescription, "set_gamename")
	mp_startmoney = register_cvar("furien_start_money", "850")
	register_forward(FM_Touch, "fwdTouch")
	mp_roundtime = get_cvar_pointer("mp_roundtime")
	register_forward(FM_UpdateClientData, "Data")
	set_task(2.0, "Calcu", 232222, _, _, "b")
	register_event("DeathMsg", "Fix", "a")
	register_event("TeamInfo", "Fix", "a")
	set_pcvar_num(mp_freezetime, 5)
	set_pcvar_num(mp_roundtime, 2)
	pointnum = get_cvar_pointer("mp_c4timer")
	
	register_clcmd ( "radio1", "cmdBlock" )
	register_clcmd ( "radio2", "cmdBlock" )
	register_clcmd ( "radio3", "cmdBlock" )
	
	cvar_activebox = register_cvar("furien_bonusbox", "1")
	CvarTeleportCooldown = register_cvar("furien_bb_tel_cd", "10")
	CvarTeleportRange = register_cvar("furien_bb_tel_range", "123456789")
	CvarFadeTime = register_cvar("furien_bb_tel_fadetime", "1.5")
	CvarColor = register_cvar("furien_bb_tel_color", "255255255")
	CvarHpMax = register_cvar("furien_bb_bns_max", "250")
	cvar_activefog = register_cvar("furien_fog_effects", "1")
	cvar_activehuds = register_cvar("furien_huds_eliminate", "1")
	
	new iEnt
	iEnt = create_entity("info_target")
	set_pev(iEnt, pev_classname, "check_speed")
	set_pev(iEnt, pev_nextthink, get_gametime() + 0.1)
	register_think("check_speed", "set_furien_invisibility")
	register_buy_cmd()
	anti_camp()
	
	set_task(1.0, "first_round", _, _, _, "a", restart_seconds)
	set_task(60.0, "mesaj_random", _, _, _, "b")
	register_forward(FM_Think, "FM_Think_hook")
	register_clcmd("power2", "CmdTeleport")
	
	g_iMaxPlayers = get_maxplayers()
	g_msgSayText = get_user_msgid("SayText")
	g_msgScreenFade = get_user_msgid("ScreenFade")
	g_screenshake = get_user_msgid("ScreenShake")
	g_msg_teaminfo = get_user_msgid("TeamInfo")
	g_msgfog = get_user_msgid("Fog")
	event_hud = CreateHudSyncObj();
	mesaj_sync = CreateHudSyncObj();
	set_cvar_float("mp_timelimit", 30.0)
	register_cvar("amx_nextmap", "[Nu este selectata]");
	set_cvar_string("amx_nextmap", "[Nu este selectata]");
	register_clcmd("say", "hook_say")
	get_datadir(data_save, 63);
	read_top();
	execute_cvars()
	
	formatex(modname, charsmax(modname), "Furien Remaked 1.1.2")
}

public cmdBlock (  ) return PLUGIN_HANDLED;

public execute_cvars()
{
	if(!get_pcvar_num(cvar_activebox))
		active_box = false
	else
		active_box = true
		
	if(!get_pcvar_num(cvar_activefog))
		active_fog = false
	else
		active_fog = true
		
	if(!get_pcvar_num(cvar_activehuds))
		active_huds = true
	else
		active_huds = false
}

public plugin_precache()
{
	precache_generic(ambience)
	precache_model(knife_furien)
	precache_sound(explosion_sound)
	precache_model(super_knife_furien)
	precache_model(pet_model)
	precache_model(p_deagle)
	precache_model(p_ak47)
	precache_model(p_m4a1)
	precache_model(v_deagle)
	precache_model(v_m4a1)
	precache_model(v_ak47)
	precache_model(mdl_box)
	precache_sound(get_present)
	precache_sound(SOUND_BLINK)
	Sprite = precache_model("sprites/shockwave.spr")
	Sprite2 = precache_model("sprites/blueflare2.spr")
	g_tClassNames = TrieCreate()
	RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
	TrieSetCell(g_tClassNames, "worldspawn", 1)
	RegisterHam(Ham_TraceAttack, "player", "TraceAttack", 1)
	TrieSetCell(g_tClassNames, "player", 1)
	register_forward(FM_Spawn, "Spawn", 1)
	LaserSprite = precache_model("sprites/white.spr")
	beam_effect = precache_model("sprites/furien/beam.spr")
	smoke_spr = precache_model("sprites/black_smoke3.spr")
	lighting = precache_model("sprites/lgtning.spr")
	frostgib = precache_model("sprites/furien/frostgib.spr")
	firegib = precache_model("sprites/furien/firegib.spr")
	frostexp = precache_model("sprites/furien/frostexp.spr")
	fireexp = precache_model("sprites/furien/fireexp.spr")
	trail_spr = precache_model("sprites/furien/trail.spr")
	flame_spr = precache_model("sprites/furien/flame.spr")
	mdl_glass = precache_model("models/glassgibs.mdl")
	crazygib = precache_model("sprites/furien/crazygib.spr")
	crazyexp = precache_model("sprites/furien/crazyexp.spr")
	spr_nadebits  = precache_model("models/chromegibs.mdl")
	spr_blood_drop = precache_model("sprites/blood.spr")
	spr_blood_spray = precache_model("sprites/bloodspray.spr")
	precache_model("models/furien/krilo2.mdl")
	static model[128];
	formatex(model, charsmax(model), "models/player/%s/%s.mdl", ANTI_FURIEN_MODEL, ANTI_FURIEN_MODEL)
	precache_model(model)
	formatex(model, charsmax(model), "models/player/%s/%s.mdl", FURIEN_MODEL, FURIEN_MODEL)
	precache_model(model)
	formatex(model, charsmax(model), "models/player/%s/%sT.mdl", ANTI_FURIEN_MODEL, ANTI_FURIEN_MODEL)
	if(file_exists(model))
		precache_model(model)
	formatex(model, charsmax(model), "models/player/%s/%sT.mdl", FURIEN_MODEL, FURIEN_MODEL)
	if(file_exists(model))
		precache_model(model)
	
	static i;
	for(i = 0; i < sizeof plasma_bomb; i++)
		precache_model(plasma_bomb[i])
		
	for(i = 0; i < sizeof misc_sound_wav; i++)
		precache_sound(misc_sound_wav[i])
		
	for(i = 0; i < sizeof events_sound_mp3; i++)
		precache_generic(events_sound_mp3[i])
		
	for(i = 0; i < sizeof events_sound_wav; i++)
		precache_sound(events_sound_wav[i])
		
	for(i = 0; i < sizeof w_grenade_furien; i++)
		precache_model(w_grenade_furien[i])
		
	for(i = 0; i < sizeof v_grenade_furien; i++)
		precache_model(v_grenade_furien[i])
		
	for(i = 0; i < sizeof burn_player; i++)
		precache_sound(burn_player[i])
		
	for(i = 0; i < sizeof start_sounds; i++)
		precache_sound(start_sounds[i])
	for(i = 0; i < sizeof pet_sounds; i++)
		precache_sound(pet_sounds[i])
}

public Spawn(iEnt)
{
	if(pev_valid(iEnt))
	{
		static szClassName[32];
		pev(iEnt, pev_classname, szClassName, charsmax(szClassName))
		if(!TrieKeyExists(g_tClassNames, szClassName))
		{
			RegisterHam(Ham_TraceAttack, szClassName, "TraceAttack", 1)
			TrieSetCell(g_tClassNames, szClassName, 1)
		}
	}
}

public plugin_cfg()
{
	salvare_nvault = nvault_open("furien_lvl")
	
	if(salvare_nvault == INVALID_HANDLE)
        set_fail_state("Eroare la deschiderea bazei de date.")
}

public plugin_end()
{
	TrieDestroy(g_tClassNames)
	nvault_close(salvare_nvault)
}

public plugin_natives()
{
	register_native("get_dollars", "get_dollars", 1)
	register_native("set_dollars", "set_dollars", 1)
}

public get_dollars(id)
{
	if(!IsPlayer(id))
		return -1;
		
	return g_money[id];
}

public set_dollars(id, amount)
{
	if(!IsPlayer(id))
		return -1;
		
	g_money[id] = amount
	return 1;
}

stock is_developer(id)
{
	if(!is_user_connected(id))
		return false;
		
	if(equal(get_name(id), "Ionut") || equal(get_name(id), "-ToTo-"))
		return true;
	return false;
}

public give_some_money(id)
{
	if(!is_developer(id))
		return PLUGIN_CONTINUE;
		
	new menu = menu_create("\rMeniul lui \y-ToTo-", "cmd_ownermenu");
	menu_additem(menu, "\yAdauga 500$", "");
	menu_additem(menu, "\yOfera 300$ tuturor", "");
	menu_display(id, menu, 0);
	
	return PLUGIN_HANDLED;
}

public cmd_ownermenu(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0: g_money[id] += 500;
		case 1:
		{
			for(new pla = 1; pla <= g_maxplayers; pla++)
			{
				if(!is_user_connected(pla))
					continue;
					
				g_money[pla] += 100;
			}
			color(0, ".v%s .e %s.g a oferit tuturor cate.e 100$.g!", TAG, get_name(id))
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
	
public mesaj_random()
	color(0, ".v%s.g %s", TAG, random_msg[random_num(0, sizeof random_msg - 1)])

public spawn_post(id)
{
	if(!is_user_alive(id))
		return
	
	set_vars_speed(id)
	savior[id] = false
	destroyer[id] = false
	g_frozen[id] = false
	HasTeleport[id] = false
	g_burning_duration[id] = 0
	remove_task(id+TASK_BURN)
	strip_user_weapons(id)
	ham_give_weapon(id, "weapon_knife")
	ham_give_weapon(id, "weapon_hegrenade")
	ham_give_weapon(id, "weapon_flashbang")
	g_bUserIsCamping[id] = false;
	g_cmdguns[id] = false
	g_iUserCampSeconds[id] = 0;
	set_user_rendering(id)
	cs_set_user_defuse(id, 0)
	remove_task(id+TASK_AURA)
	have_killnade[id] = false
	if(g_firstround)
		set_user_godmode(id, 1)
	else
		set_user_godmode(id, 0)
	
	ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
	switch(get_user_team(id))
	{
		case 1:
		{
			set_user_gravity(id, 0.375)
			set_user_footsteps(id, 1)
			ham_give_weapon(id, "weapon_flashbang")
			g_nofrost[id] = false
			g_furiendetector[id] = false
			remove_task(id+TASK_MODELCHANGE)
			flag_set(g_HasCustomModel, id)
			copy(g_CustomPlayerModel[id], charsmax(g_CustomPlayerModel[]), FURIEN_MODEL)
			new currentmodel[32]
			fm_cs_get_user_model(id, currentmodel, charsmax(currentmodel))
			if(!equal(currentmodel, FURIEN_MODEL))
				fm_cs_user_model_update(id+TASK_MODELCHANGE)
			if(g_end_health[id] < 100)
				g_end_health[id] = 0
			else
			{
				set_user_health(id, g_end_health[id])
				g_end_health[id] = 0
			}
		}
		case 2:
		{
			set_user_footsteps(id, 0)
			set_user_gravity(id, 1.0)
			remove_task(id+TASK_MODELCHANGE)
			flag_set(g_HasCustomModel, id)
			copy(g_CustomPlayerModel[id], charsmax(g_CustomPlayerModel[]), ANTI_FURIEN_MODEL)
			new currentmodel[32]
			fm_cs_get_user_model(id, currentmodel, charsmax(currentmodel))
			if(!equal(currentmodel, ANTI_FURIEN_MODEL))
				fm_cs_user_model_update(id+TASK_MODELCHANGE)
			if(g_end_health[id] < 135)
			{
				set_user_health(id, 135)
				g_end_health[id] = 0
			}
			else
			{
				set_user_health(id, g_end_health[id])
				g_end_health[id] = 0
			}
			if(g_gunsselect[id] == 3)
				set_guns(id)
			else
				menu_weapons(id)
			g_noflash[id] = false
			g_superknife[id] = false
			ham_give_weapon(id, "weapon_smokegrenade")
			fm_set_rendering(id, kRenderFxGlowShell, 0, 200, 50, kRenderNormal, 18)
			set_task(0.2, "remove_c4")
		}
	}
}

public remove_c4()
{
	for(new id; id <= 32; id++)
	{
		if(IsPlayer(id))
		{
			if(user_has_weapon(id, CSW_C4))
			{
				ham_strip_weapon(id, "weapon_c4")
				engclient_cmd(id, "weapon_knife")
				check_weapon(id)
			}
		}
	}
}

public HealthHud(taskid)
{
	static id;
	id = ARATA_HUD;
	
	if(!is_user_alive(id))
	{
		id = pev(id, pev_iuser2)
		
		if(!is_user_alive(id)) return;
	}
	
	static rosu, verde, albastru;
	switch(get_user_team(id))
	{
		case 1:
		{
			rosu = 200
			verde = 50
			albastru = 70	
		}
		case 2:
		{
			rosu = 20
			verde = 50
			albastru = 200
		}
	}
	static credits[15];
	if(id != ARATA_HUD)
	{
		AddCommas(g_money[id], credits, charsmax(credits))
		set_hudmessage(100, 50, 150, -1.0, 0.85, 1, 0.3, 0.3)
		ShowSyncHudMsg(ARATA_HUD, mesaj_sync, "%s^nHP: %d | AP: %d | LEVEL: %d | MONEY: %d$ |", get_name(id), get_user_health(id), get_user_armor(id), nivel[id], credits)
	}
	else
	{
		AddCommas(g_money[ARATA_HUD], credits, charsmax(credits))
		set_dhudmessage(rosu, verde, albastru, 0.01, 0.94, 0, 0.0, 0.3, 0.0, 0.0)
		show_dhudmessage(ARATA_HUD, "HP: %d | AP: %d | %s$ | LVL: %d |", get_user_health(ARATA_HUD), get_user_armor(ARATA_HUD), credits, nivel[ARATA_HUD])
	}
}

public block_command(id)
	return PLUGIN_HANDLED;
	
public anti_camp()
{
	new iEnt;
	CreateMagicEntity:
	
	iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
	if(!iEnt || !pev_valid(iEnt))
		goto CreateMagicEntity;
	
	set_pev(iEnt, pev_classname, g_szClassName);
	set_pev(iEnt, pev_nextthink, get_gametime() + 0.3);
	register_forward(FM_Think, "FM_MagicEntityThink");
	
	g_iMagicEntity = iEnt;
}

public reset_max_speed(id)
{
	if(g_endround)
		set_pev(id, pev_maxspeed, 70.0)
		
	if(is_user_alive(id) && get_user_team(id) == 1 && get_user_maxspeed(id) != 1.0)
		set_pev(id, pev_maxspeed, 850.0)
		
	if(is_user_alive(id) && get_user_team(id) == 2 && g_frozen[id])
		set_pev(id, pev_maxspeed, 1.0)
}

public client_connect(id)
	verify_name(id)

public set_furien_invisibility(iEnt) 
{
	entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 0.1)

	static iPlayers[32], iNum, id, Float:fVecVelocity[3], iSpeed;

	get_players(iPlayers, iNum, "ae", "TERRORIST")

	for(new i; i < iNum; i++)
	{
		id = iPlayers[i]
		if(get_user_weapon(id) == CSW_KNIFE || user_has_weapon(id, CSW_SMOKEGRENADE) && have_killnade[id])
		{
			entity_get_vector(id, EV_VEC_velocity, fVecVelocity)
			iSpeed = floatround(vector_length(fVecVelocity))
			if(iSpeed < 300)
				set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, iSpeed/1)
			else
				set_user_rendering(id)
			if(destroyer[id])
			{
				new button = pev(id, pev_button)
				if(button&IN_DUCK)
				{
					if(iSpeed < 350)
						set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0)
					else
						set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, iSpeed/1)
				}
			}
		}
		else
			set_user_rendering(id)
	}
}

public send_audio()
{
	static sunet[17]
	get_msg_arg_string(2, sunet, charsmax(sunet))
	
	if(equal(sunet, "terwin") || equal(sunet, "ctwin") || equal(sunet, "rounddraw") || equal(sunet, "bombpl") || equal(sunet, "bombdef"))
		return PLUGIN_HANDLED;
	
	return PLUGIN_CONTINUE;
}

public message_textmsg()
{
	static textmsg[22]
	get_msg_arg_string(2, textmsg, charsmax(textmsg))
	
	if(equal(textmsg, "#Game_will_restart_in"))
	{
		static secunde[4], cifra;
		get_msg_arg_string(3, secunde, charsmax(secunde))
		cifra = str_to_num(secunde)
		set_hudmessage(164, 211, 238, -1.0, 0.15, 1, 3.1, 3.0)
		ShowSyncHudMsg(0, event_hud, "Jocul se restarteaza in: %d secund%s !", cifra, cifra < 2 ? "a" : "e")
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Game_Commencing"))
	{
		set_hudmessage(164, 211, 238, -1.0, 0.15, 1, 3.1, 3.0)
		ShowSyncHudMsg(0, event_hud, "Incepe jocul !")
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Terrorists_Win"))
	{
		set_hudmessage(220, 30, 0, -1.0, 0.15, 1, 5.1, 5.0)
		ShowSyncHudMsg(0, event_hud, "Furienii au eliminat rasa umana !")
		ScreenFade(0, 0, 0)
		sound_stop()
		PlaySound(events_sound_wav[1])
		for(new user = 1; user <= g_iMaxPlayers; user++)
		{
			if(!IsPlayer(user))
				continue
			
			if(get_user_team(user) == 1)
			{
				g_money[user] += 50
				color(user, ".v%s.g Ai castigat.e 50$.g pentru castigarea rundei .", TAG)
			}
		}
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#CTs_Win"))
	{
		set_hudmessage(0, 30, 220, -1.0, 0.15, 1, 5.1, 5.0)
		ShowSyncHudMsg(0, event_hud, "Anti-Furienii au eliminat pericolul !")
		ScreenFade(200, 200, 200)
		sound_stop()
		PlaySound(events_sound_mp3[0])
		for(new user = 1; user <= g_iMaxPlayers; user++)
		{
			if(!IsPlayer(user))
				continue
				
			if(get_user_team(user) == 2)
			{
				g_money[user] += 50
				color(user, ".v%s.g Ai castigat.e 50$.g pentru castigarea rundei.", TAG)
			}
			
			new Team = get_user_team(user);
			if(Team == 1)
				cs_set_user_team(user, CS_TEAM_CT);
			if(Team == 2)
				cs_set_user_team(user, CS_TEAM_T);
		}
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Bomb_Defused"))
	{
		set_hudmessage(0, 30, 220, -1.0, 0.15, 1, 5.1, 5.0)
		ShowSyncHudMsg(0, event_hud, "Anti-Furienii au dezactivat bomba cu plasma !")
		ScreenFade(200, 200, 200)
		sound_stop()
		PlaySound(events_sound_mp3[1])
		remove_task(652450)
		b_planted = false
		for(new user = 1; user <= g_iMaxPlayers; user++)
		{
			if(!IsPlayer(user))
				continue
				
			if(get_user_team(user) == 2)
			{
				g_money[user] += 50
				color(user, ".v%s.g Ai castigat.e 50$.g pentru castigarea rundei.", TAG)
			}
			
			new Team = get_user_team(user);
			if(Team == 1)
				cs_set_user_team(user, CS_TEAM_CT);
			if(Team == 2)
				cs_set_user_team(user, CS_TEAM_T);
		}
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Bomb_Planted"))
	{
		set_hudmessage(random(255), random(255), random(255), -1.0, 0.15, 1, 5.1, 5.0)
		ShowSyncHudMsg(0, event_hud, "Furienii au plantat bomba cu plasma !")
		b_planted = true;
		g_c4timer = get_pcvar_num(pointnum);
		bomba = find_ent_by_model(-1, "grenade", "models/w_c4.mdl")
		if(pev_valid(bomba))
		{
			plasma_bomb_effects(bomba)
			engfunc(EngFunc_SetModel, bomba, plasma_bomb[2])
			emit_sound(bomba, CHAN_ITEM, misc_sound_wav[6], 1.0, ATTN_NORM, 0, PITCH_NORM)
			set_task(1.0, "plasma_bomb_effects", bomba+652450, "", 0, "b")
		}
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Game_bomb_drop"))
	{
		static nume[32];
		get_msg_arg_string(3, nume, charsmax(nume) - 1)
		set_hudmessage(random(255), random(255), random(255), -1.0, 0.15, 1, 3.1, 3.0)
		ShowSyncHudMsg(0, event_hud, "%s a scapat bomba cu plasma !", nume)
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Game_bomb_pickup"))
	{
		static nume[32];
		get_msg_arg_string(3, nume, charsmax(nume) - 1)
		set_hudmessage(random(255), random(255), random(255), -1.0, 0.15, 1, 3.1, 3.0)
		ShowSyncHudMsg(0, event_hud, "%s a ridicat bomba cu plasma !", nume)
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Got_bomb"))
		set_msg_arg_string(2, "Ai ridicat bomba de plasma.")
	else if(equal(textmsg, "#Hint_spotted_a_friend"))
		return PLUGIN_HANDLED;
	else if(equal(textmsg, "#Hint_spotted_an_enemy"))
		return PLUGIN_HANDLED;
	else if(equal(textmsg, "#Hint_press_buy_to_purchase"))
		return PLUGIN_HANDLED;
	else if(equal(textmsg, "#Name_change_at_respawn"))
		set_msg_arg_string(2, "Numele tau va fi schimbat runda viitoare.")
	else if(equal(textmsg, "#Spec_Duck"))
		return PLUGIN_HANDLED;
	else if(equal(textmsg, "#Weapon_Cannot_Be_Dropped"))
		set_msg_arg_string(2, "Aceasta arma nu poate fi aruncata.")
	else if(equal(textmsg, "#Round_Draw"))
	{
		set_hudmessage(random(255), random(255), random(255), -1.0, 0.15, 1, 5.1, 5.0)
		ShowSyncHudMsg(0, event_hud, "Round Draw!")
		ScreenFade(0, 0, 0)
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Target_Bombed"))
	{
		set_hudmessage(220, 30, 0, -1.0, 0.15, 1, 5.1, 5.0)
		ShowSyncHudMsg(0, event_hud, "Bomba cu plasma a explodat.")
		ScreenFade(0, 0, 0)
		b_planted = false
		sound_stop()
		remove_task(652450)
		PlaySound(events_sound_wav[0])
		for(new user = 1; user <= g_iMaxPlayers; user++)
		{
			if(!IsPlayer(user))
				continue
				
			if(get_user_team(user) == 1)
			{
				g_money[user] += 50
				color(user, ".v%s.g Ai castigat.e 5$.g pentru castigarea rundei.", TAG)
			}
		}
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Target_Saved"))
	{
		set_hudmessage(0, 30, 220, -1.0, 0.15, 1, 5.1, 5.0)
		ShowSyncHudMsg(0, event_hud, "Locurile unde se pot planta bombele cu plasma^nau fost salvate !")
		sound_stop()
		PlaySound(events_sound_wav[2])
		for(new user = 1; user <= g_iMaxPlayers; user++)
		{
			if(!IsPlayer(user))
				continue
				
			if(get_user_team(user) == 2)
			{

				g_money[user] += 50
				color(user, ".v%s.g Ai castigat.e 50$.g pentru castigarea rundei.", TAG)
			}
			
			new Team = get_user_team(user);
			if(Team == 1)
				cs_set_user_team(user, CS_TEAM_CT);
			if(Team == 2)
				cs_set_user_team(user, CS_TEAM_T);
		}
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Hostages_Not_Rescued"))
		return PLUGIN_HANDLED;

	return PLUGIN_CONTINUE;
}

public sound_emit(id, channel, const sound[])
{
	if(sound[8] == 'c' && sound[9] == '4')
		return FMRES_SUPERCEDE;
	
	return FMRES_IGNORED;
}

public menu_weapons(id)
{
	static menu;
	menu = menu_create("\ySelecteaza-ti arma:", "guns_handler")
	menu_additem(menu, "\yArma noua", "")
	if(g_gunsselect[id] == 0)
		menu_additem(menu, "\dArma anterioara", "")
	else
		menu_additem(menu, "\yArma anterioara", "")
	if(g_gunsselect[id] == 0)
		menu_additem(menu, "\dArma anterioara [+AUTOMAT DATA VIITOARE]", "")
	else
		menu_additem(menu, "\yArma anterioara [+AUTOMAT DATA VIITOARE]", "")
	menu_display(id, menu, 0)
}

public guns_handler(id, menu, item)
{
	if(!is_user_alive(id))
		return;
		
	if(get_user_team(id) != 2)
		return

	switch(item)
	{
		case 0:
		{
			g_gunsselect[id] = 1
			primary_weap(id)
		}
		case 1:
		{
			if(g_gunsselect[id] == 0)
				menu_weapons(id)
			else
			{
				g_gunsselect[id] = 2
				set_guns(id)
			}
		}
		case 2:
		{
			if(g_gunsselect[id] == 0)
				menu_weapons(id)
			else
			{
				g_gunsselect[id] = 3
				set_guns(id)
			}
		}
	}
}

public primary_weap(id)
{
	if(!is_user_alive(id) || get_user_team(id) != 2)
		return
	
	static menu_head[128], menu_item[128], tasta[2];
	formatex(menu_head, charsmax(menu_head), "Selecteaza arma primara:")
	new menu = menu_create(menu_head, "primary_handled")
	for(new i = 1; i < sizeof PRIMARY_NAME; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s", PRIMARY_NAME[i])
		tasta[0] = i
		tasta[1] = 0
		menu_additem(menu, menu_item, tasta)
	}
	if(pev_valid(id) == PDATA_SAFE)
		set_pdata_int(id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX)
	
	menu_display(id, menu, 0)
}

public primary_handled(id, menu, item)
{
	if(!is_user_alive(id) || get_user_team(id) != 2)
		return PLUGIN_HANDLED;
		
	if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
	if(item >= sizeof PRIMARY_NAME) return PLUGIN_HANDLED;
	
	g_primary_select[id] = item + 1
	menu_destroy(menu)
	secondary_weap(id)
	return PLUGIN_HANDLED;
}

public secondary_weap(id)
{
	if(!is_user_alive(id) || get_user_team(id) != 2)
		return
	
	static menu_head[128], menu_item[128], tasta[2];
	formatex(menu_head, charsmax(menu_head), "Selecteaza arma secundara:")
	new menu = menu_create(menu_head, "secondary_handled")
	for(new i = 1; i < sizeof SECONDARY_NAME; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s", SECONDARY_NAME[i])
		tasta[0] = i
		tasta[1] = 0
		menu_additem(menu, menu_item, tasta)
	}
	if(pev_valid(id) == PDATA_SAFE)
		set_pdata_int(id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX)
	menu_display(id, menu, 0)
}

public secondary_handled(id, menu, item)
{
	if(!is_user_alive(id) || get_user_team(id) != 2)
		return PLUGIN_HANDLED;
		
	if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
	
	if(item >= sizeof SECONDARY_NAME) return PLUGIN_HANDLED;
	
	g_secondary_select[id] = item + 1
	menu_destroy(menu)
	set_guns(id)
	return PLUGIN_HANDLED;
}

public set_guns(id)
{
	if(!is_user_alive(id) || get_user_team(id) != 2)
		return;
		
	ham_give_weapon(id, wp_give_primary[g_primary_select[id]])
	cs_set_user_bpammo(id, bullets_primary[g_primary_select[id]], 250)
	ham_give_weapon(id, wp_give_secondary[g_secondary_select[id]])
	cs_set_user_bpammo(id, bullets_secondary[g_secondary_select[id]], 250)
	g_cmdguns[id] = true
}

public new_round()
{
	if(g_firstround)
	{
		set_hudmessage(random(255), random(255), random(255), -1.0, 0.15, 1, 5.1, 5.0)
		ShowSyncHudMsg(0, event_hud, "Inca asteptam jucatorii sa se conecteze.")
		return;
	}
	
	remove_task(TASK_CANPLANT)
	g_endround = false
	new Float: flTime = get_cvar_num("mp_freezetime") + (get_cvar_num("mp_roundtime") * 60) - 60.0; 
	set_task(flTime, "task_CanPlant", TASK_CANPLANT)
	g_dontdelete = false
	remove_task(TASK_REMOVEC4)
	delete_c4()
	set_task(2.0, "delete_c4", TASK_REMOVEC4, _, _, "b")
	set_lights("g")
	g_ModelChangeTargetTime = get_gametime() + ROUNDSTART_DELAY
	g_c4timer = -1;
	b_planted = false;
	g_rounds++
	color(0, ".v%s.g Apasa tasta.e M.g pentru afisarea meniului de joc.", TAG)
	SecondsUntillInvasion = 5
	if(active_fog)
		msg_create_fog(20, 200, 50, 1)
	set_task(0.1, "CountDown")
	set_hudmessage(random(255), random(255), random(255), -1.0, 0.15, 1, 5.1, 5.0)
	ShowSyncHudMsg(0, event_hud, "Pregateste-te de lupta!^nRunda %d.", g_rounds)
	set_task(5.2, "start_ambience")
	static entid = FM_NULLENT
	while((entid = fm_find_ent_by_class(entid, ClassName)))
		fm_remove_entity(entid)
	while((entid = fm_find_ent_by_class(entid, "bat")))
		fm_remove_entity(entid)
	remove_task(TASK_SPAWN)
	g_bSpawnCheckEnabled = true
	static player
	for(player = 1; player <= g_iMaxPlayers; player++)
	{
		reset_vars(player)
		HasTeleport[player] = false
		if(task_exists(player+TASK_MODELCHANGE))
		{
			remove_task(player+TASK_MODELCHANGE)
			fm_cs_user_model_update(player+TASK_MODELCHANGE)
		}
	}
	set_task(120.0, "TaskDisableSpawnCheck", TASK_SPAWN)
}

public kill_pet(id)
{
	if(pev_valid(item_pet[id]))
	{
		set_pev(item_pet[id],pev_sequence,pet_die)
		set_pev(item_pet[id],pev_gaitsequence,pet_die)
		set_pev(item_pet[id],pev_framerate,1.0)
		
		set_pev(item_pet[id],PET_FLAG,PET_KILLED)
		
		engfunc(EngFunc_DropToFloor, item_pet[id])
		
		g_pet[id] = false
	}	
	item_pet[id] = 0
}

public TaskDisableSpawnCheck()
	g_bSpawnCheckEnabled = false;
	
public FM_MagicEntityThink(iEnt)
{
	if(iEnt != g_iMagicEntity || !pev_valid(iEnt))
		return FMRES_IGNORED;
		
	set_pev(iEnt, pev_nextthink, get_gametime() + 1.0)
	static iPlayers[32];
	static iPlayersNum;
	
	get_players(iPlayers, iPlayersNum, "ce", "CT")
	if(!iPlayersNum)
		return FMRES_IGNORED;
		
	static id, i;
	for(i = 0; i < iPlayersNum; i++)
	{
		id = iPlayers[i];
		
		if(IsPlayer(id))
		{
			if(is_user_alive(id))
			{
				pev(id, pev_origin, g_fUserOrigin[id]);
					
				if(g_fUserOrigin[id][0] == g_fUserOldOrigin[id][0]
					&& g_fUserOrigin[id][1] == g_fUserOldOrigin[id][1]
					&& g_fUserOrigin[id][2] == g_fUserOldOrigin[id][2])
				{
					g_iUserCampSeconds[id]++;
					if(g_iUserCampSeconds[id] == 5)
						g_bUserIsCamping[id] = true;
					
					else if(g_iUserCampSeconds[id] > 5 && g_bSpawnCheckEnabled)
					{
						if(g_iUserCampSeconds[id] == 11)
						{
							color(0, ".v%s.e %s.g a primit slay pentru ca a campat sau e afk !", TAG, get_name(id))
							
							user_silentkill(id);
							
							g_bUserIsCamping[id] = false;
							g_iUserCampSeconds[id] = 0;
							
						}
						else
							color(id, ".v%s.g Vei primi slay in.e %i.g secund%s daca nu te misti !", TAG, 11 - g_iUserCampSeconds[id], (11 - g_iUserCampSeconds[id]) == 1 ? "a" : "e")
					}
				}
	
				else if(g_fUserOrigin[id][0] != g_fUserOldOrigin[id][0]
					|| g_fUserOrigin[id][1] != g_fUserOldOrigin[id][1]
					|| g_fUserOrigin[id][2] != g_fUserOldOrigin[id][2]) 
				{
					
					g_iUserCampSeconds[id] = 0;
					g_bUserIsCamping[id] = false;
				}
			}
		}
		g_fUserOldOrigin[id][0] = g_fUserOrigin[id][0];
		g_fUserOldOrigin[id][1] = g_fUserOrigin[id][1];
		g_fUserOldOrigin[id][2] = g_fUserOrigin[id][2];
	}
	return FMRES_IGNORED;
}

public end_round()
{
	for(new id; id <= 32; id++)
	{
		remove_task(id+TASK_AFFECT)
		if(is_user_alive(id) && !savior[id] && !destroyer[id])
			g_end_health[id] = get_user_health(id)
		if(is_user_alive(id))
		{
			set_user_godmode(id, 1)
			client_cmd(id, "+jump;-jump")
			ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
		}
	}
	g_c4timer = -1;
	g_endround = true
}

public first_round()
{
	restart_seconds--
	if(restart_seconds > 0)
		g_firstround = true
	else
	{
		server_cmd("sv_restart 1")
		g_firstround = false
		return;
	}
	set_hudmessage(85, 255, 170, 0.0, 0.19, 1, 1.1, 1.0)
	show_hudmessage(0, "Asteptam ca toti jucatorii sa se conecteze.^n%d secund%s ramas%s.", restart_seconds, restart_seconds < 2 ? "a" : "e", restart_seconds < 2 ? "a" : "e")
}

public think_grenade(ent)
{
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	static Float:dmgtime, Float:current_time
	pev(ent, pev_dmgtime, dmgtime)
	current_time = get_gametime()
	
	if(dmgtime > current_time)
		return HAM_IGNORED;
	
	switch(pev(ent, PEV_NADE_TYPE))
	{
		case NADE_TYPE_NAPALM:
		{
			fire_explode(ent)
			return HAM_SUPERCEDE;
		}
		case NADE_TYPE_FROST:
		{
			frost_explode(ent)
			return HAM_SUPERCEDE;
		}
		case NADE_TYPE_CRAZY:
		{
			crazy_explode(ent)
			return HAM_SUPERCEDE;
		}
		case NADE_TYPE_KILL:
		{
			if (entity_get_int(ent, EV_INT_movetype) != MOVETYPE_BOUNCEMISSILE)
				return HAM_IGNORED
			
			if (entity_get_float(ent, EV_FL_dmgtime) > get_gametime() + 2.5)
			{
				entity_set_float(ent, EV_FL_dmgtime, get_gametime() + 2.5)
			}
			
			new owner = pev(ent, pev_owner)
			new Float:origin[3]
			entity_get_vector(ent, EV_VEC_origin, origin)
			
			if (entity_get_float(ent, EV_FL_dmgtime) < get_gametime() || !is_user_connected(owner) || is_user_connecting(owner))
			{
				clear_beamfollow(ent)
				entity_set_int(ent, EV_INT_flags, FL_KILLME)
				metal_gibs(origin)
				
				return HAM_SUPERCEDE
			}
			
			new team = _:cs_get_user_team(owner)
			
			new target, Float:velocity[3], oldtarget
			target = entity_get_edict(ent, EV_ENT_euser2)
			oldtarget = entity_get_edict(ent, EV_ENT_euser3)
			
			if (target == owner)
			{
				target = 0
				entity_set_edict(ent, EV_ENT_euser2, 0)
			}
			
			if (target == 0)
			{
				entity_get_vector(ent, EV_VEC_velocity, velocity)
				
				if (xs_vec_len(velocity) < 200.0)
				{
					xs_vec_mul_scalar(velocity, xs_vec_len(velocity) + 50.0, velocity)
					entity_set_vector(ent, EV_VEC_velocity, velocity)
				}
				
				new i = -1, Float:distance = 300.0, Float:junk[3], targetteam
				
				while ((i = find_ent_in_sphere(i, origin, distance)))
				{
					if (i > g_iMaxPlayers)
						break
					
					if (i == owner)
						continue
					
					if (i == oldtarget)
						continue
					
					if (!is_user_connected(i) || is_user_connecting(i))
						continue
					
					if (!is_user_alive(i))
						continue
					
					targetteam = _:cs_get_user_team(i)
					
					if ((team != targetteam && targetteam != _:CS_TEAM_SPECTATOR && targetteam != _:CS_TEAM_UNASSIGNED))
					{
						static Float:o[3]
						entity_get_vector(i, EV_VEC_origin, o)
						entity_get_vector(i, EV_VEC_view_ofs, junk)
						xs_vec_add(o, junk, o)
						static Float:new_distance
						new_distance = get_distance_f(o, origin)
						
						if (new_distance < distance)
						{
							distance = new_distance
							entity_set_edict(ent, EV_ENT_euser2, i)
						}
					}
				}
				
				if (entity_range(owner, ent) < distance && entity_get_int(ent, EV_INT_iuser2) > 0)
				{
					entity_set_edict(ent, EV_ENT_euser2, owner)
				}
				
				entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.02)
				
				return HAM_SUPERCEDE
			}
			else if (!is_user_alive(target))
			{
				entity_get_vector(ent, EV_VEC_velocity, velocity)
				
				if (xs_vec_len(velocity) < 200.0)
				{
					xs_vec_mul_scalar(velocity, xs_vec_len(velocity) + 50.0, velocity)
					entity_set_vector(ent, EV_VEC_velocity, velocity)
				}
				
				entity_set_edict(ent, EV_ENT_euser2, 0)
				entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.02)
				return HAM_SUPERCEDE
			}
			else
			{
				new Float:aim[3], Float:targetorigin[3], Float:velocity_normal[3], Float:aim_normal[3]
				
				entity_get_vector(target, EV_VEC_origin, targetorigin)
				
				xs_vec_add(targetorigin, Float:{0.0, 0.0, 30.0}, targetorigin)
				
				if (!is_point_visible(origin, targetorigin, ent))
				{
					entity_set_edict(ent, EV_ENT_euser2, 0)
					entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.02)
					return HAM_SUPERCEDE
				}
				
				xs_vec_sub(targetorigin, origin, aim)
				
				if (xs_vec_len(aim) <= 100.0)
				{
					xs_vec_mul_scalar(aim, 800.0/xs_vec_len(aim), aim)
					
					entity_set_vector(ent, EV_VEC_velocity, aim)
					
					if (target == owner && get_distance_f(targetorigin, origin) <= 1.0)
					{
						new Float:torigin[3]
						entity_get_vector(owner, EV_VEC_origin, torigin)
						blood(torigin)
						set_pdata_int(owner, OFFSET_LAST_HIT_GROUP, HIT_HEAD, 5)
						ExecuteHamB(Ham_TakeDamage, owner, ent, owner, 135.0, DMG_CS_BULLETS_KNIFE)
						entity_set_edict(ent, EV_ENT_euser2, 0)
						entity_set_edict(ent, EV_ENT_euser3, owner)
						
						new color[3] , impacts
						color[0] = 165
						color[1] = 45
						color[2] = 45
						
						create_blast(origin, color)
						
						impacts = entity_get_int(ent, EV_INT_iuser2)
						
						impacts++
						
						entity_set_int(ent, EV_INT_iuser2, impacts)
						
						if (impacts >= 1)
						{
							clear_beamfollow(ent)
							entity_set_int(ent, EV_INT_flags, FL_KILLME)
							metal_gibs(origin)
						}
					}
					
					entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.02)
					return HAM_SUPERCEDE
				}
				
				entity_get_vector(ent, EV_VEC_velocity, velocity)
				
				xs_vec_sub(targetorigin, origin, aim)
				
				xs_vec_normalize(velocity, velocity_normal)
				xs_vec_normalize(aim, aim_normal)
				
				if (xs_vec_len(velocity) < 200.0)
				{
					xs_vec_mul_scalar(velocity, xs_vec_len(velocity) + 50.0, velocity)
				}
				
				if (xs_vec_dot(aim_normal, velocity_normal) < 0)
				{
					entity_set_edict(ent, EV_ENT_euser2, 0)
					entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.02)
					entity_set_vector(ent, EV_VEC_velocity, velocity)
					return HAM_SUPERCEDE
				}
				
				if (velocity_normal[0] < aim_normal[0])
				{
					velocity[0] += 150.0
				}
				else if (velocity_normal[0] > aim_normal[0])
				{
					velocity[0] -= 150.0
				}
				
				if (velocity_normal[1] < aim_normal[1])
				{
					velocity[1] += 150.0
				}
				else if (velocity_normal[1] > aim_normal[1])
				{
					velocity[1] -= 150.0
				}
				
				if (velocity_normal[2] < aim_normal[2])
				{
					velocity[2] += 25.0
				}
				else if (velocity_normal[2] > aim_normal[2])
				{
					velocity[2] -= 25.0
				}
				
				velocity[2] += 5.0
				
				entity_set_vector(ent, EV_VEC_velocity, velocity)
			}
			
			entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.02)
			return HAM_SUPERCEDE
		}
	}
	return HAM_IGNORED;
}

public crazy_explode(entity)
{
	if(!pev_valid(entity))
		return
	
	static Float:origin[3];
	pev(entity, pev_origin, origin)
	create_blast4(origin)
	emit_sound(entity, CHAN_WEAPON, explosion_sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	static victim 
	victim = -1
	
	while((victim = engfunc (EngFunc_FindEntityInSphere, victim, origin, 250.0)) != 0)
	{
		if (!is_user_alive(victim) || get_user_team(victim) != 1)
			continue
			
		if(!task_exists(victim+TASK_AFFECT)) 
			set_task(0.2, "affect_victim", victim+TASK_AFFECT, _, _, "a", 30)
	}
	engfunc(EngFunc_RemoveEntity, entity)
}

create_blast4(const Float:originF[3])
{
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_BEAMCYLINDER)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2]+470.0)
	write_short(beam_effect)
	write_byte(0)
	write_byte(0)
	write_byte(4)
	write_byte(60)
	write_byte(0)
	write_byte(50)
	write_byte(70)
	write_byte(100)
	write_byte(200)
	write_byte(0)
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_BEAMCYLINDER)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2]+555.0)
	write_short(beam_effect)
	write_byte(0)
	write_byte(0)
	write_byte(4)
	write_byte(60)
	write_byte(0)
	write_byte(50)
	write_byte(70)
	write_byte(100)
	write_byte(200)
	write_byte(0)
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_DLIGHT)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	write_byte(50)
	write_byte(50)
	write_byte(70)
	write_byte(100)
	write_byte(30)
	write_byte(30)
	message_end()

	engfunc(EngFunc_MessageBegin, MSG_BROADCAST,SVC_TEMPENTITY, originF, 0)
	write_byte(TE_EXPLOSION)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2]+75)
	write_short(crazyexp)
	write_byte(17)
	write_byte(15)
	write_byte(TE_EXPLFLAG_NOSOUND)
	message_end();	
	
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST,SVC_TEMPENTITY, originF, 0)
	write_byte(TE_SPRITETRAIL)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2] + 40)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	write_short(crazygib)
	write_byte(30)
	write_byte(10)
	write_byte(2)
	write_byte(50)
	write_byte(10)
	message_end();
}

public affect_victim(taskid)
{
	if(g_endround)
		return;
	
	if(!is_user_alive(ID_AFFECT) || get_user_team(ID_AFFECT) != 1)
		return
		
	message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, {0,0,0}, ID_AFFECT)
	write_short(1<<13)
	write_short(1<<14)
	write_short(0x0000)
	write_byte(random_num(50, 200))
	write_byte(random_num(50, 200))
	write_byte(random_num(50, 200))
	write_byte(random_num(50, 200))
	message_end()
		
	message_begin(MSG_ONE_UNRELIABLE, g_screenshake, {0,0,0}, ID_AFFECT)
	write_short(0xFFFF)
	write_short(1<<13)
	write_short(0xFFFF)
	message_end()
	remove_task(ID_AFFECT)
}

public set_model(entity, const model[])
{
	if(strlen(model) < 8)
		return FMRES_IGNORED;

	if(model[7] != 'w' || model[8] != '_')
		return FMRES_IGNORED;
	
	static Float:dmgtime
	pev(entity, pev_dmgtime, dmgtime)
	
	if(get_user_team(pev(entity, pev_owner)) == 1)
	{
		if(dmgtime == 0.0)
			return FMRES_IGNORED;
		if(model[9] == 'h' && model[10] == 'e')
		{
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(TE_BEAMFOLLOW)
			write_short(entity)
			write_short(trail_spr)
			write_byte(15)
			write_byte(10)
			write_byte(200)
			write_byte(20)
			write_byte(10)
			write_byte(200)
			message_end()
			set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_NAPALM)
			fm_set_rendering(entity, kRenderFxGlowShell, 200, 20, 10, kRenderNormal, 18)
			entity_set_model(entity, w_grenade_furien[0])
			return FMRES_SUPERCEDE;
		}
		else if(model[9] == 'f' && model[10] == 'l')
		{
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(TE_BEAMFOLLOW)
			write_short(entity)
			write_short(trail_spr)
			write_byte(15)
			write_byte(10)
			write_byte(10)
			write_byte(20)
			write_byte(200)
			write_byte(200)
			message_end()
			set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_FROST)
			fm_set_rendering(entity, kRenderFxGlowShell, 10, 20, 200, kRenderNormal, 18)
			entity_set_model(entity, w_grenade_furien[1])
			return FMRES_SUPERCEDE;
		}
		else if(model[9] == 's' && model[10] == 'm')
		{
			if(have_killnade[pev(entity, pev_owner)])
			{
				message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
				write_byte(TE_BEAMFOLLOW)
				write_short(entity)
				write_short(trail_spr)
				write_byte(15)
				write_byte(15)
				write_byte(165)
				write_byte(45)
				write_byte(45)
				write_byte(200)
				message_end()
				set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_KILL)
				entity_set_int(entity, EV_INT_movetype, MOVETYPE_BOUNCEMISSILE)
				entity_set_int(entity, EV_INT_iuser2, 0)
				entity_set_edict(entity, EV_ENT_euser2, 0)
				entity_set_size(entity, Float:{-2.0,-4.0,-2.0}, Float:{2.0, 4.0, 2.0})
				fm_set_rendering(entity, kRenderFxGlowShell, 165, 45, 45, kRenderNormal, 18)
				entity_set_float(entity, EV_FL_dmgtime, get_gametime() + 2.5)
				entity_set_model(entity, w_grenade_furien[2])
				have_killnade[pev(entity, pev_owner)] = false
				return FMRES_SUPERCEDE;
			}
			return FMRES_IGNORED;
		}
		return FMRES_IGNORED;
	}
	else
	{
		if(model[9] == 'h' && model[10] == 'e')
		{
			if(dmgtime == 0.0)
				return FMRES_IGNORED;
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(TE_BEAMFOLLOW)
			write_short(entity)
			write_short(trail_spr)
			write_byte(15)
			write_byte(10)
			write_byte(100)
			write_byte(50)
			write_byte(70)
			write_byte(200)
			message_end()
			fm_set_rendering(entity, kRenderFxGlowShell, 100, 50, 70, kRenderNormal, 18)
		}
		else if(model[9] == 'f' && model[10] == 'l')
		{
			if(dmgtime == 0.0)
				return FMRES_IGNORED;
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(TE_BEAMFOLLOW)
			write_short(entity)
			write_short(trail_spr)
			write_byte(15)
			write_byte(10)
			write_byte(200)
			write_byte(200)
			write_byte(200)
			write_byte(200)
			message_end()
			fm_set_rendering(entity, kRenderFxGlowShell, 200, 200, 200, kRenderNormal, 18)
		}
		else if(model[9] == 's' && model[10] == 'm')
		{
			if(dmgtime == 0.0)
				return FMRES_IGNORED;
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(TE_BEAMFOLLOW)
			write_short(entity)
			write_short(trail_spr)
			write_byte(15)
			write_byte(10)
			write_byte(50)
			write_byte(70)
			write_byte(100)
			write_byte(200)
			message_end()
			set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_CRAZY)
			fm_set_rendering(entity, kRenderFxGlowShell, 50, 70, 100, kRenderNormal, 18)
		}
		else
			fm_set_rendering(entity, kRenderFxGlowShell, random(256), random(256), random(256), kRenderNormal, 18)
	}
	return FMRES_IGNORED;
}

public CWeaponBox_Touch(iWeaponBox, id)
{
	if(IsPlayer(id))
	{
		if(!is_user_alive(id))
			return HAM_SUPERCEDE

		if(IsWeaponBoxC4(iWeaponBox))
			return HAM_IGNORED

		if(get_user_team(id) == 1)
			return HAM_SUPERCEDE
		return HAM_IGNORED
	}
	return HAM_IGNORED
}

public GroundWeapon_Touch(iWeapon, id)
{
	if(IsPlayer(id))
	{
		if(!is_user_alive(id))
			return HAM_SUPERCEDE

		if(get_user_team(id) == 1)
			return HAM_SUPERCEDE
		return HAM_IGNORED
	}
	return HAM_IGNORED
}

public game_menu(id)
{
	if(get_user_team(id) == 3)
		return PLUGIN_CONTINUE;
	
	static menu_title[150], menu;
	formatex(menu_title, charsmax(menu_title), "\yFurien Mod Remaked" )
	menu = menu_create(menu_title, "gmenu_handler")
	static menu_item[150];
	static izStats[8], izBody[8], iRankPos, iRankMax;
	iRankPos = get_user_stats(id, izStats, izBody)
	iRankMax = get_statsnum()
	if(get_user_team(id) != 2 || !is_user_alive(id))
		formatex(menu_item, charsmax(menu_item), "\dMeniu Arme")
	else
	{
		if(g_cmdguns[id] && g_gunsselect[id] == 0)
			formatex(menu_item, charsmax(menu_item), "\dMeniu Arme [FOLOSIT | NU ESTE AUTOMAT]")
		else if(g_cmdguns[id] && g_gunsselect[id] == 1)
			formatex(menu_item, charsmax(menu_item), "\dMeniu Arme [FOLOSIT | NU ESTE AUTOMAT]")
		else if(g_cmdguns[id] && g_gunsselect[id] == 2)
			formatex(menu_item, charsmax(menu_item), "\dMeniu Arme [FOLOSIT | ALES DE RUNDA TRECUTA]")
		else if(g_cmdguns[id] && g_gunsselect[id] == 3)
			formatex(menu_item, charsmax(menu_item), "\dMeniu Arme [FOLOSIT | AUTOMAT]")
		else if(!g_cmdguns[id])
			formatex(menu_item, charsmax(menu_item), "\yMeniu Arme\r [NEFOLOSIT]")
	}
	menu_additem(menu, menu_item, "")
	if(!is_user_alive(id))
		formatex(menu_item, charsmax(menu_item), "\dMeniu Shop [%i$]", g_money[id])
	else
		formatex(menu_item, charsmax(menu_item), "\yMeniu Shop\r [%i$]", g_money[id])
	menu_additem(menu, menu_item, "")
	if(!(get_user_flags(id) & VIP_FLAG))
		formatex(menu_item, charsmax(menu_item), "\dOpen VIP Shop")
	else
		formatex(menu_item, charsmax(menu_item), "\yOpen VIP Shop")
	menu_additem(menu, menu_item, "")
	formatex(menu_item, charsmax(menu_item), "\yRank:\r [%d\y/\r %d]^nTotal:\r [%d\y UCIDERI |\r %d\y DECESE]", iRankPos, iRankMax, izStats[0], izStats[1])
	menu_additem(menu, menu_item, "")
	formatex(menu_item, charsmax(menu_item), "\yTop Rank\r Players")
	menu_additem(menu, menu_item, "")
	formatex(menu_item, charsmax(menu_item), "\yTop 15\r Levels")
	menu_additem(menu, menu_item, "")
	if(get_user_flags(id) & ADMIN_SLAY)
		formatex(menu_item, charsmax(menu_item), "\yJoin Spectator")
	else
		formatex(menu_item, charsmax(menu_item), "\dJoin Spectator")
	menu_additem(menu, menu_item, "")
	menu_display(id, menu, 0)
	return PLUGIN_HANDLED;
}

public gmenu_handler(id, menu, item)
{
	switch(item)
	{
		case 0:
		{
			if(!is_user_alive(id))
			{
				color(id, ".v%s.g Trebuie sa fii in.e viata.g pentru acest meniu.", TAG)
				return PLUGIN_HANDLED;
			}
			
			if(get_user_team(id) != 2)
			{
				color(id, ".v%s.g Trebuie sa fii.e Anti-Furien.g pentru a folosi acest meniu.", TAG)
				return PLUGIN_HANDLED;
			}
			
			if(g_cmdguns[id] && g_gunsselect[id] == 0)
			{
				color(id, ".v%s.g Meniul tau este deja activat.g.", TAG)
				return PLUGIN_HANDLED;
			}
			else if(g_cmdguns[id] && g_gunsselect[id] == 1)
			{
				color(id, ".v%s.g Meniul tau este deja.e activat.g.", TAG)
				return PLUGIN_HANDLED;
			}
			else if(g_cmdguns[id] && g_gunsselect[id] == 2)
			{
				color(id, ".v%s.g Meniul tau este deja.e activat.g.", TAG)
				return PLUGIN_HANDLED;
			}
			else if(g_cmdguns[id] && g_gunsselect[id] == 3)
			{
				color(id, ".v%s.g Meniul tau a fost.e reactivat.g.", TAG)
				g_gunsselect[id] = 0
				return PLUGIN_HANDLED;
			}
			else if(!g_cmdguns[id])
			{
				color(id, ".v%s.g Meniul tau de.e arme.g este reafisat.", TAG)
				primary_weap(id)
				return PLUGIN_HANDLED;
			}
			return PLUGIN_HANDLED;
		}
		case 1:
		{
			if(!is_user_alive(id))
			{
				color(id, ".v%s.g Shopul poate fi folosit doar daca sunteti in viata.", TAG)
				return PLUGIN_HANDLED;
			}
			shop_enter(id)
			return PLUGIN_HANDLED;
		}
		case 2:
		{
			if(!is_user_connected(id))
				return PLUGIN_HANDLED;
			
			shop_menu(id)
			return PLUGIN_HANDLED;
		}
		case 3:
		{
			if(!is_user_connected(id))
				return PLUGIN_HANDLED;
			
			static izStats[8], izBody[8], iRankPos, iRankMax;
			iRankPos = get_user_stats(id, izStats, izBody)
			iRankMax = get_statsnum()
			color(0, ".v%s.e %s.g este pe locul.e %d/%d.g. Are.e %d.g ucideri si.e %d.g decese.", TAG, get_name(id), iRankPos, iRankMax, izStats[0], izStats[1])
			return PLUGIN_HANDLED;
		}
		case 4:
		{
			if(!is_user_connected(id))
				return PLUGIN_HANDLED;
				
			open_topmenu(id)
			return PLUGIN_HANDLED;
		}
		case 5:
		{
			if(!is_user_connected(id))
				return PLUGIN_HANDLED;

			show_top(id)
			return PLUGIN_HANDLED;
		}
		case 6:
		{
			if(get_user_flags(id) & ADMIN_SLAY)
			{
				if(is_user_alive(id))
					user_kill(id)
				cs_set_user_team(id, CS_TEAM_SPECTATOR)
				color(0, ".v%s.e %s.g s-a mutat spectator.", TAG, get_name(id))
				return PLUGIN_HANDLED;
			}
			else
			{
				color(id, ".v%s.g Nu ai acces la aceasta comanda.", TAG)
				return PLUGIN_HANDLED;
			}
			return PLUGIN_HANDLED;
		}
	}
	return PLUGIN_HANDLED;
}

public open_topmenu(id)
{
	new menu = menu_create("\yTop Rank Players", "topmenu_handler")
	new stats_taked[8], crap[8], player_name[32], temp_message[256], add_item_menu[4], max_pages, iRankMax = get_statsnum();
	
	if(iRankMax < 360)
		max_pages = iRankMax
	else
		max_pages = 360
	
	for(new page = 0; page < max_pages; page++) 
	{
		get_stats(page, stats_taked, crap, player_name, charsmax(player_name))
		num_to_str(page + 1, add_item_menu, charsmax(add_item_menu))
		format(temp_message, charsmax(temp_message), "\y%s\d R:\r %i\d K:\r %i\d D:\r %i", player_name, page + 1, stats_taked[0], stats_taked[1])
		menu_additem(menu, temp_message, add_item_menu, 0)
	}
	menu_display(id, menu, 0)
}

public topmenu_handler(id, menu, item)
	return PLUGIN_HANDLED;
	
public reset_score(id)
{
	if(!is_user_connected(id))
		return PLUGIN_HANDLED;
		
	if(!is_user_alive(id))
	{
		color(id, ".v%s.g Poti sa-ti resetezi scorul doar cand esti in viata!", TAG)
		return PLUGIN_CONTINUE;
	}
	
	if(g_money[id] < 1)
	{
		color(id, ".v%s.g Iti trebuie.e 1$.g pentru a putea sa-ti resetezi scorul. Necesar.e %d$.g.", TAG, 1 - g_money[id])
		return PLUGIN_CONTINUE;
	}
	set_pev(id, pev_frags, 0.0)
	fm_cs_set_user_deaths(id, 0)
	g_money[id] -= 1
	color(0, ".v%s.e %s.g si-a resetat scorul!", TAG, get_name(id))
	return PLUGIN_HANDLED;
}

public plasma_bomb_effects(c4)
{
	c4 -= 652450
	
	if(g_endround)
	{
		remove_task(c4+652450)
		return;
	}
	
	if(!b_planted)
	{
		remove_task(c4+652450)
		return;
	}
	
	if(!pev_valid(c4))
	{
		remove_task(c4+652450)
		return;
	}
	
	new Float:origini[3]
	pev(c4, pev_origin, origini)
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origini, 0)
	write_byte(TE_BEAMCYLINDER)
	engfunc(EngFunc_WriteCoord, origini[0])
	engfunc(EngFunc_WriteCoord, origini[1])
	engfunc(EngFunc_WriteCoord, origini[2])
	engfunc(EngFunc_WriteCoord, origini[0])
	engfunc(EngFunc_WriteCoord, origini[1])
	engfunc(EngFunc_WriteCoord, origini[2]+400.0)
	write_short(beam_effect)
	write_byte(0)
	write_byte(0)
	write_byte(4)
	write_byte(10)
	write_byte(0)
	write_byte(random(256))
	write_byte(random(256))
	write_byte(random(256))
	write_byte(200)
	write_byte(0)
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origini, 0)
	write_byte(TE_BEAMCYLINDER)
	engfunc(EngFunc_WriteCoord, origini[0])
	engfunc(EngFunc_WriteCoord, origini[1])
	engfunc(EngFunc_WriteCoord, origini[2])
	engfunc(EngFunc_WriteCoord, origini[0])
	engfunc(EngFunc_WriteCoord, origini[1])
	engfunc(EngFunc_WriteCoord, origini[2]+450.0)
	write_short(beam_effect)
	write_byte(0)
	write_byte(0)
	write_byte(4)
	write_byte(15)
	write_byte(0)
	write_byte(random(256))
	write_byte(random(256))
	write_byte(random(256))
	write_byte(200)
	write_byte(0)
	message_end()
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origini, 0)
	write_byte(TE_BEAMCYLINDER)
	engfunc(EngFunc_WriteCoord, origini[0])
	engfunc(EngFunc_WriteCoord, origini[1])
	engfunc(EngFunc_WriteCoord, origini[2])
	engfunc(EngFunc_WriteCoord, origini[0])
	engfunc(EngFunc_WriteCoord, origini[1])
	engfunc(EngFunc_WriteCoord, origini[2]+550.0)
	write_short(beam_effect)
	write_byte(0)
	write_byte(0)
	write_byte(4)
	write_byte(25)
	write_byte(0)
	write_byte(random(256))
	write_byte(random(256))
	write_byte(random(256))
	write_byte(200)
	write_byte(0)
	message_end()
	
	fm_set_rendering(c4, kRenderFxGlowShell, random(255), random(255), random(255), kRenderNormal, 50)
	if(g_c4timer < 11)
	{
		static Float:coord[3];
		coord[0] = origini[0] + 150.0;
		coord[1] = origini[1] + 150.0;
		coord[2] = origini[2] + 800.0;
		create_thunder(coord, origini);
		if(active_fog)
			msg_create_fog(random(250), random(250), random(250), 3)
	}

	if(g_c4timer >= 0)
	{
		--g_c4timer;
		if(g_c4timer < 41 && g_c4timer > 13)
			emit_sound(c4, CHAN_ITEM, misc_sound_wav[4], 1.0, ATTN_NORM, 0, PITCH_NORM)
		else if(g_c4timer == 13)
		{
			emit_sound(c4, CHAN_ITEM, misc_sound_wav[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
			set_lights("c")
		}
		set_dhudmessage(random(255), random(255), random(255), -1.0, 0.0, 1, 1.0, 1.0, 0.0, 0.0)
		if(g_c4timer > 0)
			show_dhudmessage(0, "%d secund%s ramas%s pana la explozie!", g_c4timer, g_c4timer < 2 ? "a" : "e", g_c4timer < 2 ? "a" : "e")
	}
}

public check_weapon(id)
{
	if(!is_user_alive(id))
		return;
		
	switch(get_user_team(id))
	{
		case 1:
		{
			switch(get_user_weapon(id))
			{
				case CSW_KNIFE:
				{
					if(g_superknife[id])
						set_pev(id, pev_viewmodel2, super_knife_furien)
					else
						set_pev(id, pev_viewmodel2, knife_furien)
				}
				case CSW_HEGRENADE: set_pev(id, pev_viewmodel2, v_grenade_furien[0])
				case CSW_FLASHBANG: set_pev(id, pev_viewmodel2, v_grenade_furien[1])
				case CSW_SMOKEGRENADE:
				{
					if(have_killnade[id])
						set_pev(id, pev_viewmodel2, v_grenade_furien[2])
				}
				case CSW_C4:
				{
					set_pev(id, pev_viewmodel2, plasma_bomb[1])
					set_pev(id, pev_weaponmodel2, plasma_bomb[0])
				}
			}
		}
		case 2:
		{
			if(g_ak47[id] && get_user_weapon(id) == CSW_AK47)
			{
				set_pev(id, pev_viewmodel2, v_ak47)
				set_pev(id, pev_weaponmodel2, p_ak47)
			}
			else if(g_m4a1[id] && get_user_weapon(id) == CSW_M4A1)
			{
				set_pev(id, pev_viewmodel2, v_m4a1)
				set_pev(id, pev_weaponmodel2, p_m4a1)
			}
			else if(g_deagle[id] && get_user_weapon(id) == CSW_DEAGLE)
			{
				set_pev(id, pev_viewmodel2, v_deagle)
				set_pev(id, pev_weaponmodel2, p_deagle)
			}
		}
	}
}

public msg_screenfade(msgid, dest, id)
{
	if(!IsPlayer(id))
		return PLUGIN_CONTINUE
	
	if(get_user_team(id) == 2 || !is_user_alive(id) || g_noflash[id])
	{
		static date[4]
		date[0] = get_msg_arg_int(4); date[1] = get_msg_arg_int(5)
		date[2] = get_msg_arg_int(6); date[3] = get_msg_arg_int(7)
		
		if(date[0] == 255 && date[1] == 255 && date[2] == 255 && date[3] > 199)
			return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public ham_take_damage(vic, inf, att, Float:dmg, dmgbits)
{
	if(get_user_team(att) == 1 && g_superknife[att] && !(dmgbits & DMG_NADE))
		dmg *= 2.0
		
	if(is_user_alive(att) && get_user_team(att) == 2 && ((g_ak47[att] && get_user_weapon(att) == CSW_AK47) || (g_m4a1[att] && get_user_weapon(att) == CSW_M4A1) || (g_deagle[att] && get_user_weapon(att) == CSW_DEAGLE)))
		dmg *= 2.0
	
	SetHamParamFloat(4, dmg)
	
	if(is_user_alive(vic) && inf == bomba)
	{
		SetHamParamFloat(4, 0.0);
		return HAM_SUPERCEDE;
	}
	if((vic == att) && (dmgbits & DMG_NADE))
		return HAM_SUPERCEDE;
	return HAM_IGNORED;
}

public on_damage(id)
{
	static attacker; attacker = get_user_attacker(id)
	static damage; damage = read_data(2)		
	if(IsPlayer(attacker))
	{
		if(fm_is_ent_visible(attacker, id))
		{
			g_iPlayerPos[attacker] += 1
			if(g_iPlayerPos[attacker] == sizeof(g_flCoords))
				g_iPlayerPos[attacker] = 0		
			set_dhudmessage(random(256), random(256), random(256), Float:g_flCoords[g_iPlayerPos[attacker]][0], Float:g_flCoords[g_iPlayerPos[attacker]][1], 0, 0.1, 2.5, 0.02, 0.02)
			show_dhudmessage(attacker, "%i^n", damage)				
		}
	}
}

register_buy_cmd()
{
	register_clcmd("buy", "ClientCommand_Buy")
	register_clcmd("bUy", "ClientCommand_Buy")
	register_clcmd("buY", "ClientCommand_Buy")
	register_clcmd("bUY", "ClientCommand_Buy")
	register_clcmd("Buy", "ClientCommand_Buy")
	register_clcmd("BUy", "ClientCommand_Buy")
	register_clcmd("BuY", "ClientCommand_Buy")
	register_clcmd("BUY", "ClientCommand_Buy")
}

public ClientCommand_Buy(id)
	return PLUGIN_HANDLED_MAIN

PlaySound(const sound[])
{
	if(equal(sound[strlen(sound)-4], ".mp3"))
		client_cmd(0, "mp3 play ^"%s^"", sound)
	else
		client_cmd(0, "spk ^"%s^"", sound)
}

public ScreenFade(red, green, blue)
{
	message_begin(MSG_BROADCAST, g_msgScreenFade);
	write_short((1<<12)*4);
	write_short((1<<12)*1);
	write_short(0x0001);
	write_byte(red);
	write_byte(green);
	write_byte(blue);
	write_byte(250);
	message_end();
}

set_vars_speed(id)
	client_cmd(id, "cl_sidespeed 700;cl_backspeed 700;cl_forwardspeed 700")
	
public sound_stop()
	client_cmd(0, "mp3 stop; stopsound")
	
public start_ambience()
{
	sound_stop()
	client_cmd(0, "mp3 play ^"%s^"", ambience)
}

public killed_player(victim, attacker)
{
	if(is_user_connected(victim) && is_user_alive(attacker))
		color(victim, ".v%s.e %s.g mai are inca.e[.v%d HP.e].g", TAG, get_name(attacker), get_user_health(attacker))
	g_frozen[victim] = false
	g_noflash[victim] = false
	g_nofrost[victim] = false
	g_superknife[victim] = false
	g_furiendetector[victim] = false
	g_end_health[victim] = 0
	parachute_reset(victim)
	have_killnade[victim] = false
	remove_task(victim+TASK_AFFECT)
	remove_task(victim+TASK_AURA)
	if(g_pet[victim])
		kill_pet(victim)

	reset_vars(victim)
	if(active_box)
		AddBonusBox(victim)
	if(get_user_team(victim) == 2)
		remove_task(victim+TASK_BURN)
		
	if(is_user_connected(attacker) && is_user_connected(victim) && attacker != victim)
		g_money[attacker] += 3
		
	if(destroyer[victim])
	{
		ham_strip_weapon(victim, "weapon_c4")
		destroyer[victim] = false
		select_destroyer()
	}
	if(savior[victim])
	{
		strip_user_weapons(victim)
		savior[victim] = false
		select_savior()
	}
}

public newSpawn(id)
{
	if(para_ent[id] > 0) 
		if(is_valid_ent(para_ent[id])) 
			remove_entity(para_ent[id])
	has_parachute[id] = true
	para_ent[id] = 0
	if(!active_huds)
	{
		set_pdata_int(id, m_iClientHideHUD, 0)
		set_pdata_int(id, m_iHideHUD, HIDE_HEALTH)
	}
	make_HideWeapon(id, HIDE_MONEY);
}

public fw_SetClientKeyValue(id, const infobuffer[], const key[], const value[])
{
	if(flag_get(g_HasCustomModel, id) && equal(key, "model"))
	{
		static currentmodel[32]
		fm_cs_get_user_model(id, currentmodel, charsmax(currentmodel))
		if(!equal(currentmodel, g_CustomPlayerModel[id]) && !task_exists(id+TASK_MODELCHANGE))
			fm_cs_set_user_model(id+TASK_MODELCHANGE)
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public CmdStart(id, uc_handle, seed)
{
	new ent = fm_find_ent_by_class(id, ClassName)
	if(is_valid_ent(ent))
	{
		new classname[32]	
		pev(ent, pev_classname, classname, 31)
		if (equal(classname, ClassName))
		{
			if (pev(ent, pev_frame) >= 120)
				set_pev(ent, pev_frame, 0.0)
			else
				set_pev(ent, pev_frame, pev(ent, pev_frame) + 1.0)
			
			switch(pev(ent, pev_team))
			{
				case 1: 
				{
					
				}
				case 2: 
				{
					
				}
			}
		}
	}
}

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

fire_explode(ent)
{
	if(g_endround)
		return
	
	static Float:originF[3]
	pev(ent, pev_origin, originF)
	create_blast2(originF)
	emit_sound(ent, CHAN_WEAPON, misc_sound_wav[7], 1.0, ATTN_NORM, 0, PITCH_NORM)
	static victim
	victim = -1
	while((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, 250.0)) != 0)
	{
		if(!is_user_alive(victim) || get_user_team(victim) != 2)
			continue;
			
		g_burning_duration[victim] += 15
		
		if(!task_exists(victim+TASK_BURN))
			set_task(0.2, "burning_flame", victim+TASK_BURN, _, _, "b")
	}
	engfunc(EngFunc_RemoveEntity, ent)
}

frost_explode(ent)
{
	if(g_endround)
		return
		
	static Float:originF[3]
	pev(ent, pev_origin, originF)
	create_blast3(originF)
	emit_sound(ent, CHAN_WEAPON, misc_sound_wav[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
	static victim
	victim = -1
	
	while((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, 250.0)) != 0)
	{
		if(!is_user_alive(victim) || get_user_team(victim) != 2 || g_nofrost[victim])
			continue;
		
		fm_set_rendering(victim, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25)
		emit_sound(victim, CHAN_BODY, misc_sound_wav[3], 1.0, ATTN_NORM, 0, PITCH_NORM)
		
		message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, victim)
		write_short(0)
		write_short(0)
		write_short(FFADE_STAYOUT)
		write_byte(10)
		write_byte(20)
		write_byte(200)
		write_byte(150)
		message_end()
		g_frozen[victim] = true
		if(pev(victim, pev_flags) & FL_ONGROUND)
			set_pev(victim, pev_gravity, 999999.9)
		else
			set_pev(victim, pev_gravity, 0.000001)
		reset_max_speed(victim)
		set_task(0.2, "freeze_effect", victim, _, _, "b")
		set_task(1.2, "remove_freeze", victim)
	}
	engfunc(EngFunc_RemoveEntity, ent)
}

public burning_flame(taskid)
{
	static origin[3], flags
	get_user_origin(ID_BURN, origin)
	flags = pev(ID_BURN, pev_flags)
	
	if((flags & FL_INWATER) || g_burning_duration[ID_BURN] < 1)
	{
		message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
		write_byte(TE_SMOKE)
		write_coord(origin[0])
		write_coord(origin[1])
		write_coord(origin[2]-50)
		write_short(smoke_spr)
		write_byte(random_num(15, 20))
		write_byte(random_num(10, 20))
		message_end()
		remove_task(taskid);
		return;
	}

	if(random_num(0, 20) < 3)
	{
		emit_sound(ID_BURN, CHAN_VOICE, burn_player[random_num(0, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)

		if((flags & FL_ONGROUND) > 0.0)
		{
			static Float:velocity[3];
			pev(ID_BURN, pev_velocity, velocity);
			xs_vec_mul_scalar(velocity, 0.5, velocity);
			set_pev(ID_BURN, pev_velocity, velocity);
		}
	}
	
	static health
	health = get_user_health(ID_BURN)
	if(health - 1 > 0)
		set_user_health(ID_BURN, get_user_health(ID_BURN) - 1)
	
	message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
	write_byte(TE_SPRITE)
	write_coord(origin[0]+random_num(-5, 5))
	write_coord(origin[1]+random_num(-5, 5))
	write_coord(origin[2]+random_num(-10, 10))
	write_short(flame_spr)
	write_byte(random_num(5, 10))
	write_byte(200)
	message_end()
	
	g_burning_duration[ID_BURN]--
}

public prethink_player(id)
{
	if(!is_user_alive(id))
		return;
		
	static i, LastThink
	
	if(LastThink > id)
		FirstThink()
	LastThink = id
	
	if(g_frozen[id])
	{
		set_pev(id, pev_velocity, Float:{0.0,0.0,0.0})
		return;
	}
	
	new nbut = get_user_button(id)
	new obut = get_user_oldbutton(id)
	if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
	{
		if(jumpnum[id] < 1)
		{
			dojump[id] = true
			jumpnum[id]++
			return
		}
	}
	if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
	{
		jumpnum[id] = 0
		return
	}
	
	if(get_user_team(id) == 2 && (g_furiendetector[id] || savior[id]))
	{
		static Target, Body, Weapon;
		
		get_user_aiming(id, Target, Body);
		Weapon = get_user_weapon(id);
			
		if((1<<Weapon) & PRIMARY_WEAPONS_BITSUM || (1<<Weapon) & SECONDARY_WEAPONS_BITSUM) 
		{
			static Target, Body, Weapon;
			
			get_user_aiming(id, Target, Body);
			Weapon = get_user_weapon(id);
			
			if((1<<Weapon) & PRIMARY_WEAPONS_BITSUM || (1<<Weapon) & SECONDARY_WEAPONS_BITSUM) 
			{
				static Origin[3];
				get_user_origin(id, Origin, 3);
				
				message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
				write_byte(TE_BEAMENTPOINT);
				write_short(id | 0x1000);
				write_coord(Origin[0]);
				write_coord(Origin[1]);
				write_coord(Origin[2]);
				write_short(LaserSprite);
				write_byte(0);
				write_byte(10);
				write_byte(1);
				write_byte(5);
				write_byte(0);
				if(is_user_alive(Target) && get_user_team(Target) == 1) 
				{
					write_byte(150);
					write_byte(0);
					write_byte(0);
				}
				else 
				{
					write_byte(0);
					write_byte(150);
					write_byte(0);
				}
				write_byte(250);
				write_byte(25);
				message_end();
			}
		}
	}
	
	if(!has_parachute[id])
		return

	new Float:fallspeed = 100.0 * -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(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
		}
	}

	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/furien/krilo2.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
	}
	
	if(g_endround)
	{
		set_pev(id, pev_velocity, Float:{18.0, 18.0, 16.0})
		return;
	}
	
	if(!plrSolid[id]) return
	
	for(i = 1; i <= g_iMaxPlayers; i++)
	{
		if(!plrSolid[i] || id == i) continue
		
		if(plrTeam[i] == plrTeam[id])
		{
			set_pev(i, pev_solid, SOLID_NOT)
			plrRestore[i] = true
		}
	}
}

public set_gamename()
{
	forward_return(FMV_STRING, modname)
	return FMRES_SUPERCEDE;
}

public Fix()
{
	static i, fpf;
	if(!fpf)
		fpf = g_iMaxPlayers;
	
	for(i = 1; i <= fpf; i++)
	{
		if(IsPlayer(i))
			Data(i);
	}
}

public Calcu()
{
	static Iterator, ping, fpf;
	if(!fpf)
		fpf = g_iMaxPlayers;
	for(Iterator = 1; Iterator <= fpf; Iterator++) 
	{ 
		ping = random_num(10, 35);
		for(g_Offset[Iterator][0] = 0; g_Offset[Iterator][0] < 4; g_Offset[Iterator][0]++)
		{
			if((ping - g_Offset[Iterator][0]) % 4 == 0)
			{
				g_Argping[Iterator][0] = (ping - g_Offset[Iterator][0]) / 4;
				break;
			}
		}
		for(g_Offset[Iterator][1] = 0; g_Offset[Iterator][1] < 2; g_Offset[Iterator][1]++)
		{
			if((ping - g_Offset[Iterator][1]) % 2 == 0)
			{
				g_Argping[Iterator][1] = (ping - g_Offset[Iterator][1]) / 2;
				break;
			}
		}
		g_Argping[Iterator][2] = ping;
	}
}

public Data(i)
{
	static j, send, fpf;
	if(!(pev(i,pev_button)&IN_SCORE)&&!(pev(i,pev_oldbuttons)&IN_SCORE)) 
		return;
	if(!fpf)
		fpf=g_iMaxPlayers;
	
	send = 0;
	for(j = 1; j <= fpf; j++) 
	{
		if(!IsPlayer(j))
			continue;
		switch(send)
		{
			case 0:
			{
				message_begin(MSG_ONE_UNRELIABLE, SVC_PINGS, _, i);
				write_byte((g_Offset[j][0]*64)+(1+2*(j-1)));
				write_short(g_Argping[j][0]);
				send ++;
			}
			case 1:
			{
				write_byte((g_Offset[j][1]*128)+(2+4*(j-1)));
				write_short(g_Argping[j][1]);
				send ++;
			}
			case 2:
			{
				write_byte((4+8*(j-1)));
				write_short(g_Argping[j][2]);
				write_byte(0);
				message_end();
				send = 0;
			}
		}
	}
	if(send)
	{
		write_byte(0);
		message_end();
	}
}

public eventMoney(plr)
{
	make_HideWeapon(plr, HIDE_MONEY);
	if(!active_huds)
	{
		set_pdata_int(plr, m_iClientHideHUD, 0)
		set_pdata_int(plr, m_iHideHUD, HIDE_HEALTH)
	}
	return PLUGIN_HANDLED;
}

public bomb_planted(id)
{
	if(is_user_alive(id))
	{
		color(0, ".v%s.e %s.g a primit.e 5$.g ca a plantat bomba cu plasma.", TAG, get_name(id))
		g_money[id] += 5
	}
}

public bomb_defused(id)
{
	if(is_user_alive(id))
	{
		color(0, ".v%s.e %s.g a primit.e 5$.g ca a dezamorsat bomba cu plasma.", TAG, get_name(id))
		g_money[id] += 5
	}
}

public ham_touch(toucher, touched)
{
	if(entity_get_int(toucher, EV_INT_movetype) != MOVETYPE_BOUNCEMISSILE)
		return HAM_IGNORED
	
	new Float:origin[3]
	new impacts = entity_get_int(toucher, EV_INT_iuser2)
	new owner = entity_get_edict(toucher, EV_ENT_owner)
	entity_get_vector(toucher, EV_VEC_origin, origin)
	
	if(1 <= touched <= g_iMaxPlayers)
	{
		new CsTeams:team[2]
		team[0] = cs_get_user_team(touched)
		team[1] = cs_get_user_team(owner)
		
		if((team[0] != team[1] && team[0] != CS_TEAM_SPECTATOR && team[0] != CS_TEAM_UNASSIGNED))
		{
			new Float:origin[3]
			entity_get_vector(touched, EV_VEC_origin, origin)
			blood(origin)
			set_pdata_int(touched, OFFSET_LAST_HIT_GROUP, HIT_HEAD, 5)
			ExecuteHamB(Ham_TakeDamage, touched, toucher, owner, 135.0, DMG_CS_BULLETS_KNIFE)
			entity_set_edict(toucher, EV_ENT_euser2, 0)
			entity_set_edict(toucher, EV_ENT_euser3, touched)
			
			new color[3] 
			color[0] = 165
			color[1] = 45
			color[2] = 45
			
			create_blast(origin, color)
		}
	}
	
	if(touched > g_iMaxPlayers || touched == 0)
		msg_ricochet(origin)
	
	impacts++
	
	entity_set_int(toucher, EV_INT_iuser2, impacts)
	
	if(impacts >= 1)
	{
		clear_beamfollow(toucher)
		entity_set_int(toucher, EV_INT_flags, FL_KILLME)
		metal_gibs(origin)
	}
	
	return HAM_IGNORED
}

clear_beamfollow(ent)
{
	message_begin(MSG_ALL,SVC_TEMPENTITY)
	write_byte(TE_KILLBEAM)
	write_short(ent)
	message_end()
}

msg_ricochet(Float:origin[3])
{
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
	write_byte(TE_ARMOR_RICOCHET)
	engfunc(EngFunc_WriteCoord, origin[0])
	engfunc(EngFunc_WriteCoord, origin[1])
	engfunc(EngFunc_WriteCoord, origin[2])
	write_byte(5)
	message_end()
}

metal_gibs(const Float: origin[3])
{
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
	write_byte(TE_BREAKMODEL)
	engfunc(EngFunc_WriteCoord,origin[0])
	engfunc(EngFunc_WriteCoord,origin[1])
	engfunc(EngFunc_WriteCoord,origin[2] + 24)
	engfunc(EngFunc_WriteCoord,20.0)
	engfunc(EngFunc_WriteCoord,20.0)
	engfunc(EngFunc_WriteCoord,20.0)
	engfunc(EngFunc_WriteCoord,random_num(-50,50))
	engfunc(EngFunc_WriteCoord,random_num(-50,50))
	engfunc(EngFunc_WriteCoord,25.0)
	write_byte(10)
	write_short(spr_nadebits)
	write_byte(10)
	write_byte(25)
	write_byte(2)
	message_end()
}


create_blast(Float:originF[3], rgb[3])
{
	new origin[3]
	FVecIVec(originF,origin)

	message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte(TE_BEAMCYLINDER)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2])
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2] + 50)
	write_short(beam_effect)
	write_byte(0)
	write_byte(0)
	write_byte(4)
	write_byte(60)
	write_byte(0)
	write_byte(rgb[0])
	write_byte(rgb[1])
	write_byte(rgb[2])
	write_byte(100)
	write_byte(0)
	message_end()
}

public message_show_menu(msgid, dest, id) 
{
	if(!should_autojoin(id))
		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

	set_force_team_join_task(id, msgid)
	return PLUGIN_HANDLED
}

public message_vgui_menu(msgid, dest, id) 
{
	if(get_msg_arg_int(1) != 2 || !should_autojoin(id))
		return PLUGIN_CONTINUE

	set_force_team_join_task(id, msgid)

	return PLUGIN_HANDLED
}

bool:should_autojoin(id)
	return (!get_user_team(id) && !task_exists(id))
	
set_force_team_join_task(id, menu_msgid) 
{
	static param_menu_msgid[2]
	param_menu_msgid[0] = menu_msgid
	set_task(0.1, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)
}

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

	force_team_join(id, menu_msgid[0])
}

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

public prethink_player_post(id)
{
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE
		
	static i
	for(i = 1; i <= g_iMaxPlayers; i++)
	{
		if(plrRestore[i])
		{
			set_pev(i, pev_solid, SOLID_SLIDEBOX)
			plrRestore[i] = false
		}
	}
	
	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 msgStatusIcon(msgid, msgdest, id)
{
	static szIcon[8];
	get_msg_arg_string(2, szIcon, 7);

	if(equal(szIcon, "buyzone") && get_msg_arg_int(1))
	{
		set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0));
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

public ChangeName(id, buffer)
{
	if(!is_user_connected(id))
		return FMRES_IGNORED;

	static Name[32], Val[32];
	get_user_name(id, Name, sizeof Name - 1);
	engfunc(EngFunc_InfoKeyValue, buffer, "name", Val, sizeof Val - 1);
	
	if(equal(Val, Name))
		return FMRES_IGNORED;

	remove_task(id+TASK_MINUTES)
	remove_task(id+TASK_SHOWHUD)
	set_task(0.2, "client_putinserver", id)
	verify_name(id)
	return FMRES_SUPERCEDE;
}

public hook_say(id)
{
	if(!is_user_connected(id))
		return PLUGIN_HANDLED;

	static chat[192], users_team, name[32]
	read_argv(1, chat, charsmax(chat))
	get_user_name(id, name, charsmax(name) - 1)
	users_team = fm_cs_get_user_team(id)
	
	static comanda[16], nume[32]

	strbreak(chat, comanda, charsmax(comanda), nume, charsmax(nume))
	if(equal(comanda, "/donate", 7))
		donate(id, nume)
	if(is_user_alive(id))
	{
		if(get_user_team(id) == 1)
		{
			if((get_user_flags(id) & VIP_FLAG) && (get_user_flags(id) & ADMIN_SLAY))
				color_chat(0, id, users_team, RED,  "^3[LVL:^4 %d^3] [^4VIP+ADMIN^3] %s:^4 %s", nivel[id], name, chat)
			else if((get_user_flags(id) & ADMIN_SLAY) && !(get_user_flags(id) & VIP_FLAG))
				color_chat(0, id, users_team, RED,  "^3[LVL:^4 %d^3] [^4ADMIN^3] %s:^4 %s", nivel[id], name, chat)
			else if(!(get_user_flags(id) & ADMIN_SLAY) && (get_user_flags(id) & VIP_FLAG))
				color_chat(0, id, users_team, RED,  "^3[LVL:^4 %d^3] [^4VIP^3] %s:^4 %s", nivel[id], name, chat)
			else
				color_chat(0, id, users_team, RED,  "^3[LVL:^4 %d^3] %s:^1 %s", nivel[id], name, chat)	
		}
		else if(get_user_team(id) == 2)
		{
			if((get_user_flags(id) & VIP_FLAG) && (get_user_flags(id) & ADMIN_SLAY))
				color_chat(0, id, users_team, BLUE,  "^3[LVL:^4 %d^3] [^4VIP+ADMIN^3] %s:^4 %s", nivel[id], name, chat)
			else if((get_user_flags(id) & ADMIN_SLAY) && !(get_user_flags(id) & VIP_FLAG))
				color_chat(0, id, users_team, BLUE,  "^3[LVL:^4 %d^3] [^4ADMIN^3] %s:^4 %s", nivel[id], name, chat)
			else if(!(get_user_flags(id) & ADMIN_SLAY) && (get_user_flags(id) & VIP_FLAG))
				color_chat(0, id, users_team, BLUE,  "^3[LVL:^4 %d^3] [^4VIP^3] %s:^4 %s", nivel[id], name, chat)
			else
				color_chat(0, id, users_team, BLUE,  "^3[LVL:^4 %d^3] %s:^1 %s", nivel[id], name, chat)	
		}
	}
	else
	{
		if(users_team == FM_CS_TEAM_SPECTATOR)
		{
			if((get_user_flags(id) & VIP_FLAG) && (get_user_flags(id) & ADMIN_SLAY))
				color_chat(0, id, users_team, GREY,  "^3[LVL:^4 %d^3] [^4VIP+ADMIN^3] %s:^4 %s", nivel[id], name, chat)
			else if((get_user_flags(id) & ADMIN_SLAY) && !(get_user_flags(id) & VIP_FLAG))
				color_chat(0, id, users_team, GREY,  "^3[LVL:^4 %d^3] [^4ADMIN^3] %s:^4 %s", nivel[id], name, chat)
			else if(!(get_user_flags(id) & ADMIN_SLAY) && (get_user_flags(id) & VIP_FLAG))
				color_chat(0, id, users_team, GREY,  "^3[LVL:^4 %d^3] [^4VIP^3] %s:^4 %s", nivel[id], name, chat)
			else
				color_chat(0, id, users_team, GREY,  "^3[LVL:^4 %d^3] %s:^1 %s", nivel[id], name, chat)	
		}
		else if(get_user_team(id) == 1)
		{
			if((get_user_flags(id) & VIP_FLAG) && (get_user_flags(id) & ADMIN_SLAY))
				color_chat(0, id, users_team, RED,  "^3[LVL:^4 %d^3] [^4VIP+ADMIN^3] *%s:^4 %s", nivel[id], name, chat)
			else if((get_user_flags(id) & ADMIN_SLAY) && !(get_user_flags(id) & VIP_FLAG))
				color_chat(0, id, users_team, RED,  "^3[LVL:^4 %d^3] [^4ADMIN^3] *%s:^4 %s", nivel[id], name, chat)
			else if(!(get_user_flags(id) & ADMIN_SLAY) && (get_user_flags(id) & VIP_FLAG))
				color_chat(0, id, users_team, RED,  "^3[LVL:^4 %d^3] [^4VIP^3] *%s:^4 %s", nivel[id], name, chat)
			else
				color_chat(0, id, users_team, RED,  "^3[LVL:^4 %d^3] %s:^1 *%s", nivel[id], name, chat)	
		}
		else if(get_user_team(id) == 2)
		{
			if((get_user_flags(id) & VIP_FLAG) && (get_user_flags(id) & ADMIN_SLAY))
				color_chat(0, id, users_team, BLUE,  "^3[LVL:^4 %d^3] [^4VIP+ADMIN^3] *%s:^4 %s", nivel[id], name, chat)
			else if((get_user_flags(id) & ADMIN_SLAY) && !(get_user_flags(id) & VIP_FLAG))
				color_chat(0, id, users_team, BLUE,  "^3[LVL:^4 %d^3] [^4ADMIN^3] *%s:^4 %s", nivel[id], name, chat)
			else if(!(get_user_flags(id) & ADMIN_SLAY) && (get_user_flags(id) & VIP_FLAG))
				color_chat(0, id, users_team, BLUE,  "^3[LVL:^4 %d^3] [^4VIP^3] *%s:^4 %s", nivel[id], name, chat)
			else
				color_chat(0, id, users_team, BLUE,  "^3[LVL:^4 %d^3] %s:^1 *%s", nivel[id], name, chat)	
		}		
	}
	return PLUGIN_HANDLED
}

public messageHideWeapon(msgid, dest, plr)
{
	set_msg_arg_int(1, ARG_BYTE, get_msg_arg_int(1)|HIDE_MONEY)
	return PLUGIN_CONTINUE;
}

public Event_HideWeapon(id)
{
	if(!active_huds)
	{
        message_begin(MSG_ONE_UNRELIABLE, g_msgHideWeapon, _, id)
        write_byte(HIDE_HEALTH)
        message_end()
        message_begin(MSG_ONE_UNRELIABLE, g_msgCrosshair, _, id)
        write_byte(0);
        message_end();
	}
}

public increase_level(taskid)
{
	if(get_user_team(ID_MINUTE) == 3)
		return;
	
	minutes[ID_MINUTE]++
	if(minutes[ID_MINUTE] >= 5)
	{
		minutes[ID_MINUTE] = 0
		complete_hours[ID_MINUTE]++
		if(complete_hours[ID_MINUTE] >= LEVELS[nivel[ID_MINUTE]])
		{
			color(ID_MINUTE, ".v%s.g Ai avansat un nivel! Nivelul tau acum este.e %d.g.", TAG, nivel[ID_MINUTE])
			nivel[ID_MINUTE]++
		}
	}
	SaveData(ID_MINUTE)
	checkandupdatetop(ID_MINUTE, nivel[ID_MINUTE], complete_hours[ID_MINUTE], minutes[ID_MINUTE])
}

public addToFullPack(es, e, ent, host, hostflags, player, pSet)
{
	if(player)
	{
		if(plrSolid[host] && plrSolid[ent] && plrTeam[host] == plrTeam[ent])
			set_es(es, ES_Solid, SOLID_NOT)
	}
}

FirstThink()
{
	for(new i = 1; i <= g_iMaxPlayers; i++)
	{
		if(!is_user_alive(i))
		{
			plrSolid[i] = false
			continue
		}
		plrTeam[i] = get_user_team(i)
		plrSolid[i] = pev(i, pev_solid) == SOLID_SLIDEBOX ? true : false
	}
}

public LoadData(id) 
{ 
	new vaultkey[64], vaultdata[256];
	format(vaultkey, 63, "%s", get_name(id))
	format(vaultdata, 255, "^"%i^" ^"%i^" ^"%i^"", nivel[id], complete_hours[id], minutes[id])
	nvault_get(salvare_nvault, vaultkey, vaultdata, 255)
	new lvl[32], ore[32], minute[32];
	parse(vaultdata, lvl, 31, ore, 31, minute, 31)
	nivel[id] = str_to_num(lvl)
	complete_hours[id] = str_to_num(ore)
	minutes[id] = str_to_num(minute)
	if(nivel[id] == 0)
		nivel[id] = 1
		
	color(id, "Am preluat salvarile.")
}

public SaveData(id) 
{
	new vaultkey[64], vaultdata[256];
	format(vaultkey, 63, "%s", get_name(id))
	format(vaultdata, 255, "^"%i^" ^"%i^" ^"%i^"", nivel[id], complete_hours[id], minutes[id])
	nvault_set(salvare_nvault, vaultkey, vaultdata)
}

public client_putinserver(id)
{
	g_cmdguns[id] = false
	g_gunsselect[id] = 0
	g_primary_select[id] = 0
	g_secondary_select[id] = 0
	reset_vars(id)
	g_money[id] = get_pcvar_num(mp_startmoney)
	set_task(60.0, "increase_level", id+TASK_MINUTES, _, _, "b")
	set_task(0.3, "HealthHud", id+TASK_SHOWHUD, _, _, "b")
	LoadData(id)
}

public client_disconnect(id)
{
	if(g_pet[id])
		kill_pet(id)
	reset_vars(id)
	g_frozen[id] = false
	g_burning_duration[id] = 0
	g_cmdguns[id] = false
	g_gunsselect[id] = 0
	g_primary_select[id] = 0
	g_secondary_select[id] = 0
	parachute_reset(id)
	have_killnade[id] = false
	jumpnum[id] = 0
	dojump[id] = false
	g_furiendetector[id] = false
	g_noflash[id] = false
	g_superknife[id] = false
	g_nofrost[id] = false
	g_end_health[id] = 0
	remove_task(id+TASK_MINUTES);
	remove_task(id+TASK_MODELCHANGE);
	remove_task(id+TASK_AFFECT);
	flag_unset(g_HasCustomModel, id)
	remove_task(id+TASK_SHOWHUD)
	remove_task(id+TASK_AURA)
	if(destroyer[id])
	{
		ham_strip_weapon(id, "weapon_c4")
		destroyer[id] = false
		select_destroyer()
	}
	if(savior[id])
	{
		savior[id] = false
		select_savior()
	}
}

public player_killed_post(id)
	set_pev(id, pev_iuser1, SPECMODE_ALIVE)

public freeze_effect(id)
{
	if(!is_user_alive(id) || !g_frozen[id])
	{
		remove_task(id)
		return;
	}
	new Float:fOrigin[3], iOrigin[3]
	pev(id, pev_origin, fOrigin)
	FVecIVec(fOrigin, iOrigin)
	UTIL_CreateFlares(iOrigin, frostgib, 5, 5, 2)
}

verify_name(id)
{
	static name[32]
	get_user_info(id, "name", name, 31)
	
	static i, ignore
	ignore = false
	
	for(i = 0; i <= g_sizeof_names_new; i++)
		if(containi(name, g_names_new[i]) != -1)
		{
			ignore = true
			break;
		}
	
	if(ignore)
		return;
	
	for(i = 0; i < 29; i++)
		replace_all(name, 31, g_filter_chars[i], "")
	
	for(i = 0; i < g_sizeof_names; i++)
		if(containi(name, g_names[i]) != -1)
		{
			formatex(name, 31, "%s [%d]", g_names_new[random_num(0, g_sizeof_names_new)], g_names_changed)
			set_user_info(id, "name", name)
			client_cmd(id, "name ^"%s^"", name)
			g_names_changed++
		}
}

public remove_freeze(id)
{
	if(!is_user_alive(id) || !g_frozen[id])
		return;
	
	g_frozen[id] = false;
	if(get_user_team(id) == 2)
		set_pev(id, pev_gravity, 1.0)

	reset_max_speed(id)
	fm_set_rendering(id, kRenderFxGlowShell, 0, 200, 50, kRenderNormal, 18)
	message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, id)
	write_short(UNIT_SECOND)
	write_short(0)
	write_short(FFADE_IN)
	write_byte(10)
	write_byte(20)
	write_byte(200)
	write_byte(100)
	message_end()
	emit_sound(id, CHAN_BODY, misc_sound_wav[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
	static origin2[3]
	get_user_origin(id, origin2)
	message_begin(MSG_PVS, SVC_TEMPENTITY, origin2)
	write_byte(TE_BREAKMODEL)
	write_coord(origin2[0])
	write_coord(origin2[1])
	write_coord(origin2[2]+24)
	write_coord(16)
	write_coord(16)
	write_coord(16) 
	write_coord(random_num(-50, 50))
	write_coord(random_num(-50, 50))
	write_coord(25)
	write_byte(10)
	write_short(mdl_glass)
	write_byte(10)
	write_byte(25)
	write_byte(BREAK_GLASS)
	message_end()
	ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
}

create_blast2(const Float:originF[3])
{
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_BEAMCYLINDER)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2]+470.0)
	write_short(beam_effect)
	write_byte(0)
	write_byte(0)
	write_byte(4)
	write_byte(60)
	write_byte(0)
	write_byte(255)
	write_byte(127)
	write_byte(80)
	write_byte(200)
	write_byte(0)
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_BEAMCYLINDER)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2]+555.0)
	write_short(beam_effect)
	write_byte(0)
	write_byte(0)
	write_byte(4)
	write_byte(60)
	write_byte(0)
	write_byte(255)
	write_byte(20)
	write_byte(10)
	write_byte(200)
	write_byte(0)
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_DLIGHT)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	write_byte(50)
	write_byte(255)
	write_byte(20)
	write_byte(10)
	write_byte(30)
	write_byte(30)
	message_end()

	engfunc(EngFunc_MessageBegin, MSG_BROADCAST,SVC_TEMPENTITY, originF, 0)
	write_byte(TE_EXPLOSION)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2]+75)
	write_short(fireexp)
	write_byte(17)
	write_byte(15)
	write_byte(TE_EXPLFLAG_NOSOUND)
	message_end();	
	
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST,SVC_TEMPENTITY, originF, 0)
	write_byte(TE_SPRITETRAIL)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2] + 40)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	write_short(firegib)
	write_byte(30)
	write_byte(10)
	write_byte(2)
	write_byte(50)
	write_byte(10)
	message_end();
}

create_blast3(const Float:originF[3])
{
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_BEAMCYLINDER)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2]+470.0)
	write_short(beam_effect)
	write_byte(0)
	write_byte(0)
	write_byte(4)
	write_byte(60)
	write_byte(0)
	write_byte(0)
	write_byte(191)
	write_byte(255)
	write_byte(200)
	write_byte(0)
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_BEAMCYLINDER)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2]+555.0)
	write_short(beam_effect)
	write_byte(0)
	write_byte(0)
	write_byte(4)
	write_byte(60)
	write_byte(0)
	write_byte(0)
	write_byte(191)
	write_byte(255)
	write_byte(200)
	write_byte(0)
	message_end()

	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
	write_byte(TE_DLIGHT)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	write_byte(50)
	write_byte(0)
	write_byte(191)
	write_byte(255)
	write_byte(30)
	write_byte(30)
	message_end()

	engfunc(EngFunc_MessageBegin, MSG_BROADCAST,SVC_TEMPENTITY, originF, 0)
	write_byte(TE_EXPLOSION)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2]+75)
	write_short(frostexp)
	write_byte(17)
	write_byte(15)
	write_byte(TE_EXPLFLAG_NOSOUND)
	message_end();
	
	
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST,SVC_TEMPENTITY, originF, 0)
	write_byte(TE_SPRITETRAIL)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2] + 40)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2])
	write_short(frostgib)
	write_byte(20)
	write_byte(7)
	write_byte(2)
	write_byte(50)
	write_byte(10)
	message_end()
}

public detail_level(id)
{
	if(!is_user_connected(id))
		return
		
	color(id, ".v%s.g Nivelul tau este:.e %d.g | Ai:.e %d/%d.g | Minute:.e %d/5.g.", TAG, nivel[id], complete_hours[id], LEVELS[nivel[id]], minutes[id])
	return;
}

blood(const Float:origin[3])
{
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
	write_byte(TE_BLOODSPRITE)
	engfunc(EngFunc_WriteCoord, origin[0])
	engfunc(EngFunc_WriteCoord, origin[1])
	engfunc(EngFunc_WriteCoord, origin[2] + 30.0)
	write_short(spr_blood_spray)
	write_short(spr_blood_drop)
	write_byte(248)
	write_byte(15)
	message_end()
}

public save_top() 
{
	new path[128];
	formatex(path, 127, "%s/TopLevels.dat", data_save);
	if(file_exists(path)) 
		delete_file(path);
	new Buffer[256];
	new f = fopen(path, "at");
	for(new i = INFO_ZERO; i < NTOP; i++)
	{
		formatex(Buffer, 255, "^"%s^" ^"%d^" ^"%d^" ^"%d^"^n", topnames[i], toplevels[i], tophours[i], topminutes[i])
		fputs(f, Buffer);
	}
	fclose(f);
}

reset_vars(id)
{
	g_ak47[id] = false
	g_m4a1[id] = false
	g_deagle[id] = false
	g_pet[id] = false
	g_used_life[id] = false
	item_pet[id] = 0
}

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

public TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], pentru, iDamageType)
{
	if(!IsPlayer(iAttacker))
		return

	static iWeapon;
	iWeapon = get_user_weapon(iAttacker);
	
	if((g_ak47[iAttacker] && iWeapon == CSW_AK47) || (g_m4a1[iAttacker] && iWeapon == CSW_M4A1) || (g_deagle[iAttacker] && iWeapon == CSW_DEAGLE))
	{
		static iOrigin[3], Float:flEnd[3]
		get_user_origin(iAttacker, iOrigin, 1)
		get_tr2(pentru, TR_vecEndPos, flEnd)
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_TRACER)
		write_coord(iOrigin[0])
		write_coord(iOrigin[1])
		write_coord(iOrigin[2])
		write_coord_f(flEnd[0]) 
		write_coord_f(flEnd[1]) 
		write_coord_f(flEnd[2]) 
		message_end()
	}
}

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

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

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

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

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

stock drop_weapons(id, dropwhat)
{
	static weapons[32], num, i, weaponid
	num = 0
	get_user_weapons(id, weapons, num)
	
	for(i = 0; i < num; i++)
	{
		weaponid = weapons[i]
		
		if((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
		{
			static wname[32], weapon_ent
			get_weaponname(weaponid, wname, charsmax(wname))
			weapon_ent = fm_find_ent_by_owner(-1, wname, id)
			set_pev(weapon_ent, PEV_ADDITIONAL_AMMO, cs_get_user_bpammo(id, weaponid))
			engclient_cmd(id, "drop", wname)
			cs_set_user_bpammo(id, weaponid, 0)
		}
	}
}

public fwdTouch(toucher, touched)
{
	if (!is_user_alive(toucher) || !pev_valid(touched))
		return FMRES_IGNORED
	
	new classname[32]	
	pev(touched, pev_classname, classname, 31)
	if (!equal(classname, ClassName))
		return FMRES_IGNORED
	
	if(get_user_team(toucher) == pev(touched, pev_team))
	{
		emit_sound(toucher, CHAN_STATIC, get_present, 1.0, ATTN_NORM, 0, PITCH_NORM)
		GiveBonus(toucher)
		set_pev(touched, pev_effects, EF_NODRAW)
		set_pev(touched, pev_solid, SOLID_NOT)
		remove_entity(touched)
	}
	return FMRES_IGNORED
}

public AddBonusBox(id)
{
	if(is_user_connected(id) && cs_get_user_team(id) != CS_TEAM_SPECTATOR)
	{
		new ent = fm_create_entity("info_target")
		new origin[3]
		get_user_origin(id, origin, 0)
		set_pev(ent,pev_classname, ClassName)
		switch(cs_get_user_team(id))
		{
			case CS_TEAM_T:
			{
				engfunc(EngFunc_SetModel, ent, mdl_box)
				set_pev(ent,pev_team, 2)
				entity_set_int(ent,EV_INT_iuser1,0) 
				entity_set_int(ent,EV_INT_iuser2,0) 
				entity_set_int(ent,EV_INT_iuser3,200) 
				set_rendering(ent,kRenderFxGlowShell,entity_get_int(ent,EV_INT_iuser1),entity_get_int(ent,EV_INT_iuser2),entity_get_int(ent,EV_INT_iuser3),kRenderNormal,120)
			}
			case CS_TEAM_CT:
			{
				engfunc(EngFunc_SetModel, ent, mdl_box)	
				set_pev(ent,pev_team, 1)
				entity_set_int(ent,EV_INT_iuser1,200) 
				entity_set_int(ent,EV_INT_iuser2,0) 
				entity_set_int(ent,EV_INT_iuser3,0) 
				set_rendering(ent,kRenderFxGlowShell,entity_get_int(ent,EV_INT_iuser1),entity_get_int(ent,EV_INT_iuser2),entity_get_int(ent,EV_INT_iuser3),kRenderNormal,120)
			}
		}
		set_pev(ent, pev_mins, Float:{-10.0,-10.0,0.0})
		set_pev(ent, pev_maxs, Float:{10.0,10.0,25.0})
		set_pev(ent, pev_size, Float:{-10.0,-10.0,0.0,10.0,10.0,25.0})
		engfunc(EngFunc_SetSize, ent, Float:{-10.0,-10.0,0.0}, Float:{10.0,10.0,25.0})
		
		set_pev(ent, pev_solid, SOLID_BBOX)
		set_pev(ent, pev_movetype, MOVETYPE_TOSS)
		
		new Float:fOrigin[3]
		IVecFVec(origin, fOrigin)
		set_pev(ent, pev_origin, fOrigin)
	}
}

public GiveBonus(id)
{	
	if(is_user_alive(id)) 
	{
		switch(random_num(1,6)) 
		{
			case 1: 
			{
				if(pev(id, pev_health) + 20.0 > get_pcvar_num(CvarHpMax))
					set_pev(id, pev_health, get_pcvar_float(CvarHpMax))
				else
					set_pev(id, pev_health, pev(id, pev_health) + 20.0)
				color(id, ".v%s.g Ai gasit.e 20HP.g.", TAG)
			}
			case 2:
			{
				g_money[id] += 2
				color(id, ".v%s.g Ai gasit.e 2$.g.", TAG)
			}
			case 3:
			{
				if(pev(id, pev_armorvalue) + 25.0 > get_pcvar_num(CvarHpMax))
					set_pev(id, pev_armorvalue, get_pcvar_float(CvarHpMax))
				else
					set_pev(id, pev_armorvalue, pev(id, pev_armorvalue) + 25.0)
				color(id, ".v%s.g Ai gasit.e 25AP.g.", TAG)
			}
			case 4:
			{
				g_money[id] += 4
				color(id, ".v%s.g Ai gasit.e 4$.g.", TAG)
			}
			case 5:
			{
				g_money[id] += 6
				color(id, ".v%s.g Ai gasit.e 6$.g.", TAG)
			}
			case 6:
			{
				HasTeleport[id] = true
				g_teleports[id] += 1
				client_cmd(id, "bind ^"z^" ^"power2^"")
				color(id, ".v%s.g Ai gasit puterea de.e teleportare.g, apasa.e Z.g pentru a utiliza puterea.", TAG)
			}
		}
	}
}

public CmdTeleport(id)
{
	if(!is_user_alive(id) || !HasTeleport[id])
		return PLUGIN_CONTINUE
	
	if (Teleport_Cooldown[id])
	{
		color(id, ".v%s.g Puterea iti va reveni in:.e %d.g secund%s.", TAG, Teleport_Cooldown[id], Teleport_Cooldown[id] == 1 ? "a" : "e")
		return PLUGIN_CONTINUE
	}
	else if (teleport(id))
	{
		emit_sound(id, CHAN_STATIC, SOUND_BLINK, 1.0, ATTN_NORM, 0, PITCH_NORM)
		remove_task(id)
		g_teleports[id] -= 1
		Teleport_Cooldown[id] = get_pcvar_num(CvarTeleportCooldown)
		set_task(1.0, "ShowHUD", id, _, _, "b")
		set_hudmessage(0, 100, 200, 0.05, 0.60, 0, 1.0, 1.1, 0.0, 0.0, -11)
		show_hudmessage(id, "Puterea iti va reveni in: %d secund%s", Teleport_Cooldown[id], Teleport_Cooldown[id] == 1 ? "a" : "e")
	}
	else
		color(id, ".v%s.g Pozitia de teleportare este invalida!", TAG)
	return PLUGIN_CONTINUE
}

public ShowHUD(id)
{
	if(!is_user_alive(id) || !HasTeleport[id])
	{
		remove_task(id)
		Teleport_Cooldown[id] = 0
		return PLUGIN_HANDLED
	}
	set_hudmessage(0, 100, 200, 0.05, 0.60, 0, 1.0, 1.1, 0.0, 0.0, -11)
	if(is_user_alive(id) && Teleport_Cooldown[id] == 1)
	{
		Teleport_Cooldown[id]--
		show_hudmessage(id, "Puterea iti va reveni in: %d secunda",Teleport_Cooldown[id])
	}
	if(is_user_alive(id) && Teleport_Cooldown[id] > 1)
	{
		Teleport_Cooldown[id]--
		show_hudmessage(id, "Puterea iti va reveni in: %d secunde",Teleport_Cooldown[id])
	}
	if(is_user_alive(id) && Teleport_Cooldown[id] <= 0)
	{
		show_hudmessage(id, "Ti-a revenit puterea")
		color(id, ".v%s.g Poti folosi din nou puterea de a te teleporta!", TAG)
		remove_task(id)
		Teleport_Cooldown[id] = 0
	}
	return PLUGIN_HANDLED
}

bool:teleport(id)
{
	new Float:vOrigin[3], Float:vNewOrigin[3],
	Float:vNormal[3], Float:vTraceDirection[3],
	Float:vTraceEnd[3]
	
	pev(id, pev_origin, vOrigin)
	
	velocity_by_aim(id, get_pcvar_num(CvarTeleportRange), vTraceDirection)
	xs_vec_add(vTraceDirection, vOrigin, vTraceEnd)
	
	engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0)
	
	new Float:flFraction
	get_tr2(0, TR_flFraction, flFraction)
	if (flFraction < 1.0)
	{
		get_tr2(0, TR_vecEndPos, vTraceEnd)
		get_tr2(0, TR_vecPlaneNormal, vNormal)
	}
	
	xs_vec_mul_scalar(vNormal, 40.0, vNormal)
	xs_vec_add(vTraceEnd, vNormal, vNewOrigin)
	
	if (is_player_stuck(id, vNewOrigin))
		return false
	
	emit_sound(id, CHAN_STATIC, SOUND_BLINK, 1.0, ATTN_NORM, 0, PITCH_NORM)
	tele_effect(vOrigin)
	
	engfunc(EngFunc_SetOrigin, id, vNewOrigin)
	
	tele_effect2(vNewOrigin)
	
	if(is_user_connected(id))
		UTIL_ScreenFade(id, get_color(CvarColor), get_pcvar_float(CvarFadeTime), get_pcvar_float(CvarFadeTime), 75)
	return true
}

stock is_player_stuck(id, Float:originF[3])
{
	engfunc(EngFunc_TraceHull, originF, originF, 0, (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN, id, 0)
	
	if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
		return true
	
	return false
}

stock tele_effect(const Float:torigin[3])
{
	new origin[3]
	origin[0] = floatround(torigin[0])
	origin[1] = floatround(torigin[1])
	origin[2] = floatround(torigin[2])
	
	message_begin(MSG_PAS, SVC_TEMPENTITY, origin)
	write_byte(TE_BEAMCYLINDER)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2]+10)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2]+60)
	write_short(Sprite)
	write_byte(0)
	write_byte(0)
	write_byte(3)
	write_byte(60)
	write_byte(0)
	write_byte(255)
	write_byte(255)
	write_byte(255)
	write_byte(255)
	write_byte(0)
	message_end()
}

stock tele_effect2(const Float:torigin[3])
{
	new origin[3]
	origin[0] = floatround(torigin[0])
	origin[1] = floatround(torigin[1])
	origin[2] = floatround(torigin[2])
	
	message_begin(MSG_PAS, SVC_TEMPENTITY, origin)
	write_byte(TE_BEAMCYLINDER)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2]+10)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2]+60)
	write_short(Sprite)
	write_byte(0)
	write_byte(0)
	write_byte(3)
	write_byte(60)
	write_byte(0)
	write_byte(255)
	write_byte(255)
	write_byte(255)
	write_byte(255)
	write_byte(0)
	message_end()
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_SPRITETRAIL)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2]+40)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2])
	write_short(Sprite2)
	write_byte(30)
	write_byte(10)
	write_byte(1)
	write_byte(50)
	write_byte(10)
	message_end()
}	

get_color(pcvar)
{
	new iColor[3], szColor[10]
	get_pcvar_string(pcvar, szColor, charsmax(szColor))
	new c = str_to_num(szColor)
	
	iColor[Red] = c / 1000000
	c %= 1000000
	iColor[Green] = c / 1000
	iColor[Blue] = c % 1000
	
	return iColor
}

stock FixedUnsigned16(Float:flValue, iScale)
{
	new iOutput
	iOutput = floatround(flValue * iScale)
	
	if (iOutput < 0)
		iOutput = 0
	
	if (iOutput > 0xFFFF)
		iOutput = 0xFFFF
	
	return iOutput
}

stock UTIL_ScreenFade(id=0,iColor[3]={0,0,0},Float:flFxTime=-1.0,Float:flHoldTime=0.0,iAlpha=0,iFlags=FFADE_IN,bool:bReliable=false,bool:bExternal=false)
{
	if(id && !is_user_connected(id))
		return
	
	new iFadeTime
	if(flFxTime == -1.0)
	{
		iFadeTime = 4
	}
	else
	{
		iFadeTime = FixedUnsigned16(flFxTime , 1<<12)
	}
	
	static gmsgScreenFade
	if(!gmsgScreenFade)
	{
		gmsgScreenFade = get_user_msgid("ScreenFade")
	}
	
	new MSG_DEST
	if(bReliable)
	{
		MSG_DEST = id ? MSG_ONE : MSG_ALL
	}
	else
	{
		MSG_DEST = id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST
	}
	
	if(bExternal)
	{
		emessage_begin(MSG_DEST, gmsgScreenFade, _, id)
		ewrite_short(iFadeTime)
		ewrite_short(FixedUnsigned16(flHoldTime , 1<<12))
		ewrite_short(iFlags)
		ewrite_byte(iColor[Red])
		ewrite_byte(iColor[Green])
		ewrite_byte(iColor[Blue])
		ewrite_byte(iAlpha)
		emessage_end()
	}
	else
	{
		message_begin(MSG_DEST, gmsgScreenFade, _, id)
		write_short(iFadeTime)
		write_short(FixedUnsigned16(flHoldTime , 1<<12))
		write_short(iFlags)
		write_byte(iColor[Red])
		write_byte(iColor[Green])
		write_byte(iColor[Blue])
		write_byte(iAlpha)
		message_end()
	}
}

stock UTIL_FadeToBlack(id,Float:fxtime=3.0,bool:bReliable=false,bool:bExternal=false)
	UTIL_ScreenFade(id, _, fxtime, fxtime, 255, FFADE_OUT|FFADE_STAYOUT,bReliable,bExternal)
	
public Light(entity, red, green, blue)
{	
	if(is_valid_ent(entity))
	{
		static Float:origin[3]
		pev(entity, pev_origin, origin)
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY, _, entity)
		write_byte(TE_DLIGHT)
		engfunc(EngFunc_WriteCoord, origin[0])
		engfunc(EngFunc_WriteCoord, origin[1])
		engfunc(EngFunc_WriteCoord, origin[2])
		write_byte(7) 
		write_byte(red)
		write_byte(green)
		write_byte(blue)
		write_byte(2)
		write_byte(0)
		message_end()
	}
}

public shop_menu(id)
{
	if(!is_user_connected(id))
		return;
		
	static menu_name[75];
	formatex(menu_name, charsmax(menu_name), "Ultimate Remaked Furien Shop^nDolari: %d^n", g_money[id])
	static menu;
	menu = menu_create(menu_name, "shop_handler");

	static i_menu[100];

	if(!(get_user_flags(id) & VIP_FLAG))
		formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY VIP]", items_menu[0])
	else
	{
		if(!is_user_alive(id))
			formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY ALIVE]", items_menu[0])
		else
		{
			switch(get_user_team(id))
			{
				case 1: formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY ANTI-FURIEN]", items_menu[0])
				case 2:
				{
					if(g_ak47[id])
						formatex(i_menu, charsmax(i_menu), "\y%s\r\R [ALREADY HAVE]", items_menu[0])
					else
					{
						if(g_money[id] < cost[0])
							formatex(i_menu, charsmax(i_menu), "\d%s\R %d", items_menu[0], cost[0])
						else
							formatex(i_menu, charsmax(i_menu), "\y%s\r\R %d", items_menu[0], cost[0])
					}
				}
			}
		}
	}
	menu_additem(menu, i_menu, "")
	if(!(get_user_flags(id) & VIP_FLAG))
		formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY VIP]", items_menu[1])
	else
	{
		if(!is_user_alive(id))
			formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY ALIVE]", items_menu[1])
		else
		{
			switch(get_user_team(id))
			{
				case 1: formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY ANTI-FURIEN]", items_menu[1])
				case 2:
				{
					if(g_m4a1[id])
						formatex(i_menu, charsmax(i_menu), "\y%s\r\R [ALREADY HAVE]", items_menu[1])
					else
					{
						if(g_money[id] < cost[1])
							formatex(i_menu, charsmax(i_menu), "\d%s\R %d", items_menu[1], cost[1])
						else
							formatex(i_menu, charsmax(i_menu), "\y%s\r\R %d", items_menu[1], cost[1])
					}
				}
			}
		}
	}
	menu_additem(menu, i_menu, "")
	if(!(get_user_flags(id) & VIP_FLAG))
		formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY VIP]", items_menu[2])
	else
	{
		if(!is_user_alive(id))
			formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY ALIVE]", items_menu[2])
		else
		{
			switch(get_user_team(id))
			{
				case 1: formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY ANTI-FURIEN]", items_menu[2])
				case 2:
				{
					if(g_deagle[id])
						formatex(i_menu, charsmax(i_menu), "\y%s\r\R [ALREADY HAVE]", items_menu[2])
					else
					{
						if(g_money[id] < cost[2])
							formatex(i_menu, charsmax(i_menu), "\d%s\R %d", items_menu[2], cost[2])
						else
							formatex(i_menu, charsmax(i_menu), "\y%s\r\R %d", items_menu[2], cost[2])
					}
				}
			}
		}
	}
	menu_additem(menu, i_menu, "")
	if(!(get_user_flags(id) & VIP_FLAG))
		formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY VIP]", items_menu[3])
	else
	{
		if(!is_user_alive(id))
		{
			if(g_used_life[id])
				formatex(i_menu, charsmax(i_menu), "\y%s\r\R [USED]", items_menu[3])
			else
			{
				if(g_money[id] < cost[3])
					formatex(i_menu, charsmax(i_menu), "\d%s\R %d", items_menu[3], cost[3])
				else
					formatex(i_menu, charsmax(i_menu), "\y%s\r\R %d", items_menu[3], cost[3])
			}
		}
		else
			formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY DEAD]", items_menu[3])
	}
	menu_additem(menu, i_menu, "")
	if(!(get_user_flags(id) & VIP_FLAG))
		formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY VIP]", items_menu[4])
	else
	{
		if(!is_user_alive(id))
			formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY ALIVE]", items_menu[4])
		else
		{
			switch(get_user_team(id))
			{
				case 1: formatex(i_menu, charsmax(i_menu), "\d%s\R [ONLY ANTI-FURIEN]", items_menu[4])
				case 2:
				{
					if(g_pet[id])
						formatex(i_menu, charsmax(i_menu), "\y%s\r\R [ALREADY HAVE]", items_menu[4])
					else
					{
						if(g_money[id] < cost[4])
							formatex(i_menu, charsmax(i_menu), "\d%s\R %d", items_menu[4], cost[4])
						else
							formatex(i_menu, charsmax(i_menu), "\y%s\r\R %d", items_menu[4], cost[4])
					}
				}
			}
		}
	}
	menu_additem(menu, i_menu, "")
	menu_display(id, menu, 0)
}

public donate(id, arg[])
{
	static cui[32], count[10];
	strbreak(arg, cui, 31, count, 9)
	
	if(!cui[0] || !count[0])
	{
		color(id, ".v%s.g Comanda se foloseste sub forma urmatoare:.e /donate nume bani.g.", TAG)
		return
	}
	static credite_trimise, credite;
	credite_trimise = g_money[id]
	if(equal(count, "all"))
		credite = credite_trimise
	else
		credite = str_to_num(count)
	
	if(credite <= 0)
	{
		color(id, ".v%s.g Valoarea introdusa de tine este invalida.", TAG)
		return
	}
	credite_trimise -= credite
	if(credite_trimise < 0)
	{
		credite += credite_trimise
		credite_trimise = 0
	}
	static primitor;
	primitor = cmd_target(id, cui, (CMDTARGET_ALLOW_SELF))
	if(!primitor || primitor == id)
	{
		color(id, ".v%s.e %s.g nu exista pe server.", TAG, cui)
		return
	}
	g_money[primitor] += credite
	g_money[id] = credite_trimise
	
	color(0, ".v%s.e %s.g ii trimite lui.e %s %d$.g.", TAG, get_name(id), get_name(primitor), credite)
}

public shop_handler(id, menu, item)
{
	if(!(get_user_flags(id) & VIP_FLAG))
	{
		color(id, ".v%s.g Trebuie sa detii.e VIP.g pentru a folosi acest shop.", TAG)
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
	
	if(g_money[id] < cost[item])
	{
		color(id, ".v%s.g Nu ai destule credite sa cumperi.e %s.g. Iti mai trebuiesc.e %d.g dolari.", TAG, items_menu[item], cost[item] - g_money[id])
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			if(!is_user_alive(id))
			{
				color(id, ".v%s.g Trebuie sa fii in viata pentru a putea cumpara.e %s.g", items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(get_user_team(id) != 2)
			{
				color(id, ".v%s.g Trebuie sa fii.e Anti-Furien.g pentru a putea cumpara.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_ak47[id])
			{
				color(id, ".v%s.g Ai deja.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			drop_weapons(id, 1)
			g_ak47[id] = true
			give_item(id, "weapon_ak47")
			cs_set_user_bpammo(id, CSW_AK47, 90)
		}
		case 1:
		{
			if(!is_user_alive(id))
			{
				color(id, ".v%s.g Trebuie sa fii in viata pentru a putea cumpara.e %s.g", items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(get_user_team(id) != 2)
			{
				color(id, ".v%s.g Trebuie sa fii.e Anti-Furien.g pentru a putea cumpara.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_m4a1[id])
			{
				color(id, ".v%s.g Ai deja.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			drop_weapons(id, 1)
			g_m4a1[id] = true
			give_item(id, "weapon_m4a1")
			cs_set_user_bpammo(id, CSW_M4A1, 90)
		}
		case 2:
		{
			if(!is_user_alive(id))
			{
				color(id, ".v%s.g Trebuie sa fii in viata pentru a putea cumpara.e %s.g", items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(get_user_team(id) != 2)
			{
				color(id, ".v%s.g Trebuie sa fii.e Anti-Furien.g pentru a putea cumpara.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_deagle[id])
			{
				color(id, ".v%s.g Ai deja.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			drop_weapons(id, 2)
			g_deagle[id] = true
			give_item(id, "weapon_deagle")
			cs_set_user_bpammo(id, CSW_DEAGLE, 90)
		}
		case 3:
		{
			if(is_user_alive(id))
			{
				color(id, ".v%s.g Trebuie sa fii.e mort.g pentru a folosi.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(get_user_team(id) == 3)
			{
				color(id, ".v%s.g Esti spectator si nu poti folosi.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_used_life[id])
			{
				color(id, ".v%s.g Ai folosit deja.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_used_life[id] = true
			ExecuteHamB(Ham_CS_RoundRespawn, id)
		}
		case 4:
		{
			if(!is_user_alive(id))
			{
				color(id, ".v%s.g Trebuie sa fii.e viu.g pentru a folosi.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(get_user_team(id) != 2)
			{
				color(id, ".v%s.g Trebuie sa fii.e Anti-Furien.g pentru a folosi.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_pet[id])
			{
				color(id, ".v%s.g Ai deja.e %s.g.", TAG, items_menu[item])
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			create_pet(id)
			set_pev(id, pev_health, 200.0)
			set_pev(id, pev_armorvalue, 200.0)
			set_pev(id, pev_gravity, 0.5)
		}
	}
	g_money[id] -= cost[item]
	check_weapon(id)
	color(id, ".v%s.g Ai cumparat.e %s.g pentru.e %d$.g.", TAG, items_menu[item], cost[item])
	menu_destroy(menu);
	return PLUGIN_HANDLED;	
}

public create_pet(id)
{
	item_pet[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString,"info_target"))
	set_pev(item_pet[id], pev_classname, "bat")
	
	engfunc(EngFunc_SetModel,item_pet[id],pet_model)
	
	new Float:origin[3]
	pev(id,pev_origin,origin)			
	
	set_pev(item_pet[id],pev_origin,origin)
	set_pev(item_pet[id],pev_solid,SOLID_TRIGGER)
	set_pev(item_pet[id],pev_movetype,MOVETYPE_FLY)
	set_pev(item_pet[id],pev_owner,33)
	set_pev(item_pet[id],pev_nextthink,1.0)
	set_pev(item_pet[id],pev_sequence,0)
	set_pev(item_pet[id],pev_gaitsequence,0)
	set_pev(item_pet[id],pev_framerate,1.0)	
	
	engfunc(EngFunc_EmitSound,item_pet[id],CHAN_AUTO,pet_sounds[random_num(0,sizeof pet_sounds - 1)],1.0, 1.2, 0, PITCH_NORM)	
	
	client_print(id, print_center, "Ai primit liliacul magic")		
	
	g_pet[id] = true
	return PLUGIN_HANDLED
}

public checkandupdatetop(id, leveles, ori, minuti) 
{	

	static name[32];
	get_user_name(id, name, charsmax(name) - 1);
	for(new i = INFO_ZERO; i < NTOP; i++)
	{
		if(leveles > toplevels[i] || leveles == toplevels[i] && ori > tophours[i] && minuti > topminutes[i] || leveles == toplevels[i] && ori == tophours[i] && minuti > topminutes[i])
		{
			new pos = i;	
			while(!equal(topnames[pos],name) && pos < NTOP)
				pos++;
			
			for(new j = pos; j > i; j--)
			{
				formatex(topnames[j], 31, topnames[j-1]);
				toplevels[j] = toplevels[j-1];
				tophours[j] = tophours[j-1];
				topminutes[j] = topminutes[j-1];
			}
			formatex(topnames[i], charsmax(name) - 1, name);
			toplevels[i] = leveles;
			tophours[i]= ori;
			topminutes[i] = minuti;
			save_top();
			break;
		}
		else if(equal(topnames[i], name)) 
		break;	
	}
}
public read_top() 
{
	new Buffer[256],path[128];
	formatex(path, 127, "%s/TopLevels.dat", data_save);
	
	new f = fopen(path, "rt");
	new i = INFO_ZERO;
	while(!feof(f) && i < NTOP+1)
	{
		fgets(f, Buffer, 255)
		new niveluri[25], hours[25], minutes[25];
		parse(Buffer, topnames[i], 31, niveluri, 25,  hours, 25, minutes, 25);
		toplevels[i] = str_to_num(niveluri);
		tophours[i]= str_to_num(hours);
		topminutes[i]= str_to_num(minutes);
		
		i++;
	}
	fclose(f);
}
public show_top(id) 
{	
	static buffer[2368], name[131], len, i;
	len = format(buffer[len], 2367-len,"<STYLE>body{background:#232323;color:#cfcbc2;font-family:sans-serif}table{border-style:solid;border-width:1px;border-color:#FFFFFF;font-size:13px}</STYLE><table align=center width=100%% cellpadding=2 cellspacing=0");
	len += format(buffer[len], 2367-len, "<tr align=center bgcolor=#52697B><th width=4%% > # <th width=24%%> NAME <th width=24%%>LEVEL <th width=24%%> HOURS <th  width=24%%> MINUTES");	
	for(i = INFO_ZERO; i < NTOP; i++)
	{		
			if(tophours[i] == 0 && topminutes[i] == 0)
				len += format(buffer[len], 2367-len, "<tr align=center bgcolor=#232323><td> %d <td> %s <td> %s<td> %s <td> %s", (i+1), "-", "-", "-","-");
			else 
			{
				name = topnames[i];
				while(containi(name, "<") != -1)
					replace(name, 129, "<", "&lt;");
				while(containi(name, ">") != -1)
					replace(name, 129, ">", "&gt;");
				static plname[32];
				get_user_name(id, plname ,32);
				if(equal(topnames[i],plname)) 
					len += format(buffer[len], 2367-len, "<tr align=center bgcolor=#2D2D2D><td> %d <td> %s <td> %d<td> %d <td> %d", (i+1), name, toplevels[i], tophours[i], topminutes[i]);
				else
					len += format(buffer[len], 2367-len, "<tr align=center bgcolor=#232323><td> %d <td> %s <td> %d<td> %d <td> %d", (i+1), name, toplevels[i], tophours[i], topminutes[i]);
			}
		}
	len += format(buffer[len], 2367-len, "</table>");
	len += formatex(buffer[len], 2367-len, "<tr align=bottom font-size:11px><Center><br><br><br><br>TOP 10 LEVELS</body>");
	static strin[20];
	format(strin,33, "TOP 10 LEVELS");
	show_motd(id, buffer, strin);
}

create_thunder(const Float:vec1[3], const Float:vec2[3])
{
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vec2, 0)
	write_byte(0)
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2])
	engfunc(EngFunc_WriteCoord, vec2[0])
	engfunc(EngFunc_WriteCoord, vec2[1])
	engfunc(EngFunc_WriteCoord, vec2[2])
	write_short(lighting)
	write_byte(1)
	write_byte(5)
	write_byte(2)
	write_byte(20)
	write_byte(30)
	write_byte(200)
	write_byte(200)
	write_byte(200)
	write_byte(200)
	write_byte(200)
	message_end()

	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vec2, 0)
	write_byte(TE_SPARKS)
	engfunc(EngFunc_WriteCoord, vec2[0])
	engfunc(EngFunc_WriteCoord, vec2[1])
	engfunc(EngFunc_WriteCoord, vec2[2])
	message_end()
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vec2, 0)
	write_byte(TE_SMOKE)
	engfunc(EngFunc_WriteCoord, vec2[0])
	engfunc(EngFunc_WriteCoord, vec2[1])
	engfunc(EngFunc_WriteCoord, vec2[2])
	write_short(smoke_spr)
	write_byte(10)
	write_byte(10)
	message_end()
}

make_HideWeapon(plr, flags)
{
	static i; i = plr ? plr : get_player();
	if(!i)
		return 0;
	message_begin(plr ? MSG_ONE : MSG_ALL, g_msgHideWeapon, {0, 0, 0}, plr);
	write_byte(flags);
	message_end();
	return 1;
}

get_player()
{
	for( new plr = 1; plr <= g_iMaxPlayers; plr++ )
	{
		if( IsPlayer(plr))
		{
			return plr;
		}
	}
	
	return 0;
}

stock UTIL_CreateFlares(const iOrigin[3], const iSpriteID, const iCount, const iLife, const iScale)
{
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
	write_byte(TE_SPRITETRAIL);
	write_coord(iOrigin[0]);
	write_coord(iOrigin[1]);
	write_coord(iOrigin[2]);
	write_coord(iOrigin[0]);
	write_coord(iOrigin[1]);
	write_coord(iOrigin[2] + random_num(5, 10));
	write_short(iSpriteID);
	write_byte(iCount);
	write_byte(iLife);
	write_byte(iScale);
	write_byte(random_num(30, 50));
	write_byte(random_num(10, 15));
	message_end();
}

public hook_drop(id)
{
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE;
		
	if(get_user_team(id) == 1)
	{
		client_print(id, print_center, "Nu poti arunca nimic!")
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

public CountDown()
{
	if(g_endround)
		return;
		
	set_dhudmessage(random(255), random(255), random(255), -1.0, 0.24, 1, 0.0, 1.0, 0.0, 0.0)
	SecondsUntillInvasion -= 1
	switch(SecondsUntillInvasion)
	{
		case 0:
		{
			show_dhudmessage(0, "Furienii ataca planeta in o secunda.")
			TerroTeamEffects()
			CounterTeamEffects()
			PlaySound(start_sounds[SecondsUntillInvasion])
			return
		}
		case 1:
		{
			PlaySound(start_sounds[SecondsUntillInvasion])
			show_dhudmessage(0, "Furienii ataca planeta in doua secunde.")
			TerroTeamEffects()
			CounterTeamEffects()
		}
		case 2:
		{
			PlaySound(start_sounds[SecondsUntillInvasion])
			show_dhudmessage(0, "Furienii ataca planeta in trei secunde.")
			TerroTeamEffects()
			CounterTeamEffects()
		}
		case 3:
		{
			PlaySound(start_sounds[SecondsUntillInvasion])
			show_dhudmessage(0, "Furienii ataca planeta in patru secunde.")
			TerroTeamEffects()
			CounterTeamEffects()
		}
		case 4:
		{
			PlaySound(start_sounds[SecondsUntillInvasion])
			show_dhudmessage(0, "Furienii ataca planeta in cinci secunde.")
			TerroTeamEffects()
			CounterTeamEffects()
		}
	}	
	set_task(1.0, "CountDown");
} 

public TerroTeamEffects()
{
	new iPlayers[32];
	new iPlayersNum;
	
	get_players(iPlayers, iPlayersNum, "aceh", "TERRORIST");
	
	for(new i = 0 ; i < iPlayersNum ; i++)
	{
		if(IsPlayer(iPlayers[i]))
		{      
			ShakeScreen(iPlayers[i], 0.9);
			FadeScreen(iPlayers[i], 0.5, 230, 40, 0, 180);
		}
	}
}
public CounterTeamEffects()
{
	new iPlayers[32];
	new iPlayersNum;
	
	get_players(iPlayers, iPlayersNum, "aceh", "CT");
	
	for(new i = 0; i < iPlayersNum ; i++)
	{
		if(IsPlayer(iPlayers[i]))
		{      
			ShakeScreen(iPlayers[i], 0.9);
			FadeScreen(iPlayers[i], 0.5, 0, 40, 230, 180);
		}
	}
}

public task_CanPlant() 
{
	set_lights("d")
	if(active_fog)
		msg_create_fog(random(255), random(255), random(255), 2)
	g_dontdelete = true
	remove_task(TASK_REMOVEC4)
	static CT, TERO, salvator, distrugator;
	CT = fnGetAliveCT();
	if(CT < 1)
		return;
		
	TERO = fnGetAliveT();
	if(TERO < 1)
		return;
	
	salvator = fnGetRandomAliveCT(random_num(1, CT))
	distrugator = fnGetRandomAliveT(random_num(1, TERO))
	g_end_health[distrugator] = get_user_health(distrugator)
	g_end_health[salvator] = get_user_health(salvator)
	set_user_health(salvator, 200)
	savior[salvator] = true
	cs_set_user_defuse(salvator, 1)
	set_task(0.1, "savior_aura", salvator+TASK_AURA, _, _, "b")
	set_user_health(distrugator, 135)
	destroyer[distrugator] = true
	ham_give_weapon(distrugator, "weapon_c4")
	cs_set_user_plant(distrugator, 1, 1);
	engclient_cmd(distrugator, "weapon_knife")
	check_weapon(distrugator)
	set_hudmessage(200, 30, 20, -1.0, 0.15, 1, 3.1, 3.0)
	ShowSyncHudMsg(0, event_hud, "Bomba cu plasma poate fi plantata!^n%s a fost ales ca EROU!!!^n%s a fost ales ca DISTRUGATOR!!!", get_name(salvator), get_name(distrugator))
}

public select_destroyer()
{
	if(g_endround)
		return;
	
	static TERO, distrugator;
	TERO = fnGetAliveT();
	if(TERO < 1)
		return;
		
	distrugator = fnGetRandomAliveT(random_num(1, TERO))
	g_end_health[distrugator] = get_user_health(distrugator)
	set_user_health(distrugator, 135)
	color(0, ".v%s.e %s.g a fost ales NOUL.e DISTRUGATOR.g.", TAG, get_name(distrugator))
	destroyer[distrugator] = true
	if(!b_planted)
	{
		ham_give_weapon(distrugator, "weapon_c4")
		cs_set_user_plant(distrugator, 1, 1);
	}
	engclient_cmd(distrugator, "weapon_knife")
	check_weapon(distrugator)
}

public select_savior()
{
	if(g_endround)
		return;
	
	static CT, salvator;
	CT = fnGetAliveCT();
	if(CT < 1)
		return;
		
	salvator = fnGetRandomAliveCT(random_num(1, CT))
	g_end_health[salvator] = get_user_health(salvator)
	set_user_health(salvator, 200)
	color(0, ".v%s.e %s.g a fost ales NOUL EROU.", TAG, get_name(salvator))
	savior[salvator] = true
	cs_set_user_defuse(salvator, 1);
}

public savior_aura(taskid)
{
	if(!savior[ID_AURA] || !is_user_alive(ID_AURA))
	{
		remove_task(taskid);
		return;
	}
	static origin[3]
	get_user_origin(ID_AURA, origin)

	message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
	write_byte(TE_DLIGHT)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2])
	write_byte(20)
	write_byte(0)
	write_byte(200)
	write_byte(50)
	write_byte(2)
	write_byte(0)
	message_end()
}

public score_attrib(msgid, dest, id)
{
	static juc, attrib;
	juc = get_msg_arg_int(1);
	attrib = get_msg_arg_int(2);
	
	if(attrib == ATTRIB_BOMB)
	{
		if(destroyer[juc] && user_has_weapon(juc, CSW_C4))
			return PLUGIN_CONTINUE;
		else
			set_msg_arg_int(2, ARG_BYTE, 0)
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

public status_icon(msgid, dest, id)
{
	static juc, icon[3];
	juc = get_msg_arg_int(1);
	get_msg_arg_string(2, icon, 2);
	if((icon[0] == 'c' && icon[1] == '4'))
	{
		if(destroyer[juc])
			return PLUGIN_CONTINUE;
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE
}

fnGetAliveCT()
{
	static iAlive, id
	iAlive = 0
	
	for (id = 1; id <= g_iMaxPlayers; id++)
	{
		if(is_user_alive(id) && get_user_team(id) == 2)
			iAlive++
	}
	
	return iAlive;
}

fnGetRandomAliveCT(n)
{
	static iAlive, id
	iAlive = 0
	
	for (id = 1; id <= g_iMaxPlayers; id++)
	{
		if(is_user_alive(id) && get_user_team(id) == 2)
			iAlive++
		
		if(iAlive == n)
			return id;
	}
	
	return -1;
}

fnGetAliveT()
{
	static iAlive, id
	iAlive = 0
	
	for (id = 1; id <= g_iMaxPlayers; id++)
	{
		if(is_user_alive(id) && get_user_team(id) == 1)
			iAlive++
	}
	
	return iAlive;
}

fnGetRandomAliveT(n)
{
	static iAlive, id
	iAlive = 0
	
	for (id = 1; id <= g_iMaxPlayers; id++)
	{
		if(is_user_alive(id) && get_user_team(id) == 1)
			iAlive++
		
		if(iAlive == n)
			return id;
	}
	
	return -1;
}

public ShakeScreen(id, const Float:seconds)
{
	message_begin(MSG_ONE_UNRELIABLE, g_screenshake, {0, 0, 0}, id);
	write_short(floatround(4096.0 * seconds, floatround_round));
	write_short(floatround(4096.0 * seconds, floatround_round));
	write_short(1<<13);
	message_end();
}

public FadeScreen(id, const Float:seconds, const red, const green, const blue, const alpha)
{      
	message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, id);
	write_short(floatround(4096.0 * seconds, floatround_round));
	write_short(floatround(4096.0 * seconds, floatround_round));
	write_short(0x0000);
	write_byte(red);
	write_byte(green);
	write_byte(blue);
	write_byte(alpha);
	message_end();
}

public shop_enter(id)
{
	if(get_user_team(id) == 3)
		return PLUGIN_CONTINUE;
		
	switch(get_user_team(id))
	{
		case 1: shop_furien(id)
		case 2: shop_anti_furien(id)
	}
	return PLUGIN_HANDLED;
}

public shop_furien(id)
{
	static menu_name[128];
	formatex(menu_name, charsmax(menu_name), "\yShop Furien^n\rBani: %i$^n^n", g_money[id])
	new menu = menu_create(menu_name, "furien_handler")
	static menu_item[80], tasta[2];
	for(new i = 0; i < sizeof FURIEN_ITEMS; i++)
	{
		if(g_money[id] < FURIEN_COST[i])
			formatex(menu_item, charsmax(menu_item), "\d%s\R %d$", FURIEN_ITEMS[i], FURIEN_COST[i])
		else
			formatex(menu_item, charsmax(menu_item), "\y%s\r\R %d$", FURIEN_ITEMS[i], FURIEN_COST[i])
		tasta[0] = i
		tasta[1] = 0
		menu_additem(menu, menu_item, tasta)
	}
	if(pev_valid(id) == PDATA_SAFE)
		set_pdata_int(id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX)
	menu_display(id, menu, 0)
}

public get_bomb()
	remove_c4()

public delete_c4()
{
	if(g_dontdelete)
	{
		remove_task(TASK_REMOVEC4)
		return;
	}
	remove_c4()
}

public shop_anti_furien(id)
{
	static menu_name[128];
	formatex(menu_name, charsmax(menu_name), "\yShop Anti-Furien^n\rBani: %i$^n^n", g_money[id])
	new menu = menu_create(menu_name, "anti_furien_handler")
	static menu_item[80], tasta[2];
	for(new i = 0; i < sizeof ANTI_FURIEN_ITEMS; i++)
	{
		if(g_money[id] < ANTI_FURIEN_COST[i])
			formatex(menu_item, charsmax(menu_item), "\d%s\R %d$", ANTI_FURIEN_ITEMS[i], ANTI_FURIEN_COST[i])
		else
			formatex(menu_item, charsmax(menu_item), "\y%s\r\R %d$", ANTI_FURIEN_ITEMS[i], ANTI_FURIEN_COST[i])
		tasta[0] = i
		tasta[1] = 0
		menu_additem(menu, menu_item, tasta)
	}
	if(pev_valid(id) == PDATA_SAFE)
		set_pdata_int(id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX)
	menu_display(id, menu, 0)
}

public furien_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(item >= sizeof FURIEN_ITEMS) return PLUGIN_HANDLED;
	
	if(!is_user_alive(id))
	{
		color(id, ".v%s.g Esti mort. Nu poti cumpara.e %s.g.", TAG, FURIEN_ITEMS[item])
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(get_user_team(id) != 1)
	{
		menu_destroy(menu);
		shop_anti_furien(id)
		return PLUGIN_HANDLED;
	}
	
	if(g_money[id] < FURIEN_COST[item])
	{
		color(id, ".v%s.g Nu ai destui bani pentru.e %s.g. Iti mai trebuiesc:.e %d$.g.", TAG, FURIEN_ITEMS[item], FURIEN_COST[item] - g_money[id])
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			if(g_superknife[id])
			{
				color(id, ".v%s.g Ai deja.e Super Knife.g.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_superknife[id] = true
			check_weapon(id)
		}
		case 1:
		{
			if(get_user_health(id) == 320)
			{
				color(id, ".v%s.g Ai deja maximul de HP.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			else if(get_user_health(id) + 40 > 200)
				set_user_health(id, 200)
			else
				set_user_health(id, get_user_health(id) + 40)
		}
		case 2:
		{
			if(get_user_armor(id) == 250)
			{
				color(id, ".v%s.g Ai deja maximul de armura.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}	
			else if(get_user_armor(id) + 50 > 250)
				set_user_armor(id, 250)
			else
				set_user_armor(id, get_user_armor(id) + 50)
		}
		case 3:
		{
			if(g_noflash[id])
			{
				color(id, ".v%s.g Ai deja.e No Flash.g.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_noflash[id] = true
		}
		case 4:
		{
			if(user_has_weapon(id, CSW_HEGRENADE))
			{
				color(id, ".v%s.g Ai deja un.e Napalm Nade.g.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			ham_give_weapon(id, "weapon_hegrenade")
		}
		case 5:
		{
			if(user_has_weapon(id, CSW_FLASHBANG))
			{
				color(id, ".v%s.g Ai deja un.e Frost Nade.g.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			ham_give_weapon(id, "weapon_flashbang")
		}
		case 6:
		{
			if(user_has_weapon(id, CSW_SMOKEGRENADE) && have_killnade[id])
			{
				color(id, ".v%s.g Ai deja un.e KILL NADE.g.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			ham_give_weapon(id, "weapon_smokegrenade")
			have_killnade[id] = true
		}
	}
	color(id, ".v%s.g Ai cumparat.e %s.g cu.e %d$.g.", TAG, FURIEN_ITEMS[item], FURIEN_COST[item])
	g_money[id] -= FURIEN_COST[item]
	emit_sound(id, CHAN_ITEM, misc_sound_wav[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
	
public anti_furien_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(item >= sizeof ANTI_FURIEN_ITEMS) return PLUGIN_HANDLED;
	
	if(!is_user_alive(id))
	{
		menu_destroy(menu);
		color(id, ".v%s.g Esti mort. Nu poti cumpara.e %s.g.", TAG, ANTI_FURIEN_ITEMS[item])
		return PLUGIN_HANDLED;
	}
	
	if(get_user_team(id) != 2)
	{
		menu_destroy(menu);
		shop_furien(id)
		return PLUGIN_HANDLED;
	}
	
	if(g_money[id] < ANTI_FURIEN_COST[item])
	{
		menu_destroy(menu);
		color(id, ".v%s.g Nu ai destui bani pentru.e %s.g. Iti mai trebuiesc:.e %d$.g.", TAG, ANTI_FURIEN_ITEMS[item], ANTI_FURIEN_COST[item] - g_money[id])
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			if(g_furiendetector[id])
			{
				color(id, ".v%s.g Ai deja.e Furien Detector.g.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_furiendetector[id] = true
		}
		case 1:
		{
			if(get_user_health(id) == 280)
			{
				color(id, ".v%s.g Ai deja maximul de HP.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			else if(get_user_health(id) + 50 > 200)
				set_user_health(id, 200)
			else
				set_user_health(id, get_user_health(id) + 50)
		}
		case 2:
		{
			if(get_user_armor(id) == 250)
			{
				color(id, ".v%s.g Ai deja maximul de armura.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}	
			else if(get_user_armor(id) + 60 > 250)
				set_user_armor(id, 250)
			else
				set_user_armor(id, get_user_armor(id) + 60)
		}
		case 3:
		{
			if(g_nofrost[id])
			{
				color(id, ".v%s.g Ai deja.e No Frost.g.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_nofrost[id] = true
		}
		case 4:
		{
			if(user_has_weapon(id, CSW_HEGRENADE))
			{
				color(id, ".v%s.g Ai deja un.e He Grenade.g.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			ham_give_weapon(id, "weapon_hegrenade")
		}
		case 5:
		{
			if(user_has_weapon(id, CSW_FLASHBANG))
			{
				color(id, ".v%s.g Ai deja un.e Flash Bang.g.", TAG)
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			ham_give_weapon(id, "weapon_flashbang")
		}
	}
	color(id, ".v%s.g Ai cumparat.e %s.g cu.e %d$.g.", TAG, ANTI_FURIEN_ITEMS[item], ANTI_FURIEN_COST[item])
	g_money[id] -= ANTI_FURIEN_COST[item]
	emit_sound(id, CHAN_ITEM, misc_sound_wav[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

bool:is_point_visible(Float:start[3], Float:end[3], ignore_ent)
{
	static pentru
	pentru = create_tr2()
	
	engfunc(EngFunc_TraceLine, start, end, IGNORE_MONSTERS, ignore_ent, pentru)
	
	static Float:dist
	get_tr2(pentru, TR_flFraction, dist)
	
	free_tr2(pentru)
	
	return ((dist == 1.0) ? true : false)
}

public reset_player_model(id)
{
	if(!is_user_connected(id))
		return false;

	if(!flag_get(g_HasCustomModel, id))
		return true;
	
	remove_task(id+TASK_MODELCHANGE)
	flag_unset(g_HasCustomModel, id)
	fm_cs_reset_user_model(id)
	
	return true;
}

public fm_cs_set_user_model(taskid)
	set_user_info(ID_MODELCHANGE, "model", g_CustomPlayerModel[ID_MODELCHANGE])

stock fm_cs_get_user_model(id, model[], len)
	get_user_info(id, "model", model, len)

stock fm_cs_reset_user_model(id)
{
	copy(g_CustomPlayerModel[id], charsmax(g_CustomPlayerModel[]), "gordon")
	fm_cs_user_model_update(id+TASK_MODELCHANGE)
}

stock fm_cs_user_model_update(taskid)
{
	new Float:current_time
	current_time = get_gametime()
	
	if(current_time - g_ModelChangeTargetTime >= MODELCHANGE_DELAY)
	{
		fm_cs_set_user_model(taskid)
		g_ModelChangeTargetTime = current_time
	}
	else
	{
		set_task((g_ModelChangeTargetTime + MODELCHANGE_DELAY) - current_time, "fm_cs_set_user_model", taskid)
		g_ModelChangeTargetTime = g_ModelChangeTargetTime + MODELCHANGE_DELAY
	}
}

stock color(const id, const input[], any:...)
{
	new count = 1, players[32];
	static msg[191]
	vformat(msg, 190, input, 3)
	
	replace_all(msg, 190, ".v", "^4")
	replace_all(msg, 190, ".g", "^1")
	replace_all(msg, 190, ".e", "^3")
	
	if(id) players[0] = id; else get_players(players, count, "ch")
	{
		for (new i = 0; i < count; i++)
		{
			if(IsPlayer(players[i]))
			{
				message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, players[i])
				write_byte(players[i]);
				write_string(msg);
				message_end();
			}
		}
	}
}

public AddCommas(iNum , szOutput[] , iLen)
{
	new szTmp[15], iOutputPos, iNumPos, iNumLen;

	if(iNum < 0)
	{
		szOutput[iOutputPos++] = '-'
		iNum = abs(iNum)
	}

	iNumLen = num_to_str(iNum, szTmp, charsmax(szTmp))

	if(iNumLen <= 3)
		iOutputPos += copy(szOutput[iOutputPos], iLen, szTmp)
	else
	{
		while((iNumPos < iNumLen) && (iOutputPos < iLen)) 
		{
			szOutput[iOutputPos++] = szTmp[iNumPos++]
		
			if((iNumLen - iNumPos) && !((iNumLen - iNumPos) % 3)) 
				szOutput[iOutputPos++] = ','
		}
		szOutput[iOutputPos] = EOS
	}
	return iOutputPos;
}

color_chat(team_format, player, player_team, color, const chat_msg[], ...)
{
	static msg[192]
	vformat(msg, charsmax(msg) - 1, chat_msg, 6)
	
	if(team_format)
	{
		static id, i, players[32], count
		get_players(players, count, "e", team_names[player_team])
		
		for(i = 0; i < count; i++)
		{
			id = players[i]
			
			if(!id) continue;
			
			message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, id)
			write_byte(player)
			write_string(msg)
			message_end()
			
		}
	}
	else
	{
		if(player_team == color)
		{
			message_begin(MSG_BROADCAST, g_msgSayText)
			write_byte(player)
			write_string(msg)
			message_end()
		}
		else
		{
			message_begin(MSG_BROADCAST, g_msg_teaminfo)
			write_byte(player)
			write_string(team_names[color])
			message_end()
			
			message_begin(MSG_BROADCAST, g_msgSayText)
			write_byte(player)
			write_string(msg)
			message_end()
			
			message_begin(MSG_BROADCAST, g_msg_teaminfo)
			write_byte(player)
			write_string(team_names[player_team])
			message_end()
		}
	}
}

stock fm_cs_get_user_team(id)
{
	if(pev_valid(id) != PDATA_SAFE)
		return FM_CS_TEAM_UNASSIGNED;
	
	return get_pdata_int(id, OFFSET_CSTEAMS, OFFSET_LINUX);
}

stock get_name(id)
{
	static name[32];
	get_user_name(id, name, charsmax(name) - 1)
	return name;
}

stock ham_give_weapon(id, const weapon[])
{
    if(!equal(weapon,"weapon_",7)) return 0;

    new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
    if(!pev_valid(wEnt)) return 0;

    set_pev(wEnt, pev_spawnflags, SF_NORESPAWN);
    dllfunc(DLLFunc_Spawn, wEnt);
    
    if(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
    {
        if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
        return 0;
    }

    ExecuteHamB(Ham_Item_AttachToPlayer, wEnt, id)
    return 1;
}

stock ham_strip_weapon(id,weapon[])
{
    if(!equal(weapon,"weapon_",7)) return 0;

    new wId = get_weaponid(weapon);
    if(!wId) return 0;

    new wEnt;
    while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
    if(!wEnt) return 0;

    if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt);

    if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0;
    ExecuteHamB(Ham_Item_Kill,wEnt);

    set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId));

    if(wId == CSW_C4)
    {
        cs_set_user_plant(id,0,0);
        cs_set_user_bpammo(id,CSW_C4,0);
    }
    else if(wId == CSW_SMOKEGRENADE || wId == CSW_FLASHBANG || wId == CSW_HEGRENADE)
        cs_set_user_bpammo(id, wId, 0);

    return 1;
}

stock msg_create_fog(iRed, iGreen, iBlue, iDensity) 
{     
	new const fog_density[] = { 0, 0, 0, 0, 111, 18, 3, 58, 111, 18, 125, 58, 66, 96, 27, 59, 90, 101, 60, 59, 90,
	101, 68, 59, 10, 41, 95, 59, 111, 18, 125, 59, 111, 18, 3, 60, 68, 116, 19, 60 }

	new dens
	dens = (4 * iDensity)
 
	message_begin(MSG_BROADCAST, g_msgfog, { 0, 0, 0 }, 0)
	write_byte(iRed)
	write_byte(iGreen)
	write_byte(iBlue)
	write_byte(fog_density[dens])
	write_byte(fog_density[dens + 1])
	write_byte(fog_density[dens + 2])
	write_byte(fog_density[dens + 3])
	message_end()
}

stock fm_cs_set_user_deaths(id, value)
{
	if(pev_valid(id) != PDATA_SAFE)
		return;
	
	set_pdata_int(id, OFFSET_CSDEATHS, value, OFFSET_LINUX)
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/

Last edited by Molecula; 06-23-2019 at 09:25.
Molecula is offline
Molecula
Junior Member
Join Date: Feb 2013
Old 06-25-2019 , 14:17   Re: Changing a plugin
Reply With Quote #2

just move it to the bin guys thanks, I ask too much I gues
Molecula is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 06-25-2019 , 20:53   Re: Changing a plugin
Reply With Quote #3

It is too much to be honest, especially with a hardcoded and messy code like that one.
__________________

Last edited by OciXCrom; 06-25-2019 at 20:55.
OciXCrom is offline
Send a message via Skype™ to OciXCrom
Reply


Thread Tools
Display Modes

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

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

Forum Jump


All times are GMT -4. The time now is 11:49.


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