Probleme addons /sursa compiler problems!

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

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
Cristi602
Membru, skill 0
Membru, skill 0
Posts: 47
Joined: 21 Nov 2015, 11:02
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

11 Jan 2020, 18:18

Salut, am addonsul acela furien remaked problema este de la sursa nu merge nici sa o compilez !

Compiler error :
| Afiseaza codul
/tmp/textVt1iGX.sma(6) : fatal error 100: cannot read from file: "dhudmessage"
probabil din cauza acesteia ma scoate si depe server , am aflat ceva care probabil provine de la ct/t acum nu stiu ce sa zic am bagat o mapa de deathrun si pur si simplu aici echipele nu se schimba raman furien sau ct intotdeauna motiv pentru care nu ma mai scoate depe server , acum nu stiu ce sa zic din ce cauza este dar va las aici baza furien poate va ajuta sa rezolvati ceva :
| Afiseaza codul
#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 "bdcs_furien"

#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/ambience.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)
		
	for(i = 0; i < sizeof misc_sound_wav; i++)
		precache_sound(misc_sound_wav)
		
	for(i = 0; i < sizeof events_sound_mp3; i++)
		precache_generic(events_sound_mp3)
		
	for(i = 0; i < sizeof events_sound_wav; i++)
		precache_sound(events_sound_wav)
		
	for(i = 0; i < sizeof w_grenade_furien; i++)
		precache_model(w_grenade_furien)
		
	for(i = 0; i < sizeof v_grenade_furien; i++)
		precache_model(v_grenade_furien)
		
	for(i = 0; i < sizeof burn_player; i++)
		precache_sound(burn_player)
		
	for(i = 0; i < sizeof start_sounds; i++)
		precache_sound(start_sounds)
	for(i = 0; i < sizeof pet_sounds; i++)
		precache_sound(pet_sounds)
}

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
		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 ^"alt^" ^"power2^"")
				color(id, ".v%s.g Ai gasit puterea de.e teleportare.g, apasa.e ALT.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 }
*/
va rog frumos sa ma ajutati am nevoie de aceasta sursa neaparat ,va multumesc !
Post Reply

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

  • Information
  • Who is online

    Users browsing this forum: No registered users and 14 guests