93.114.82.17:27015 [ Steam + Non-Steam ]

Arhiva de servere cs 1.6 non.stop sau partTime. Oricine isi poate adauga aici serverul !

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

User avatar
Doctor whO? <3
Membru, skill +3
Membru, skill +3
Posts: 1196
Joined: 21 Jun 2013, 12:40
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Reputatie: Fost Membru Club eXtreamCS (doua luni)
Has thanked: 109 times
Been thanked: 75 times
Contact:

06 Jan 2023, 19:27

Interesant modul, cateva sugestii:

Imparte rundele in Wave-uri. Sa fie un total de 6 wave-uri si in fiecare wave , monstrii sa devina mai puternici + la ultimul wave, sa faci sa fie bosul.
+ luminozitatea sa scada in functie de wave + ambianta etc.
RoyalServer
User avatar
-ToTo-
Membru, skill +2
Membru, skill +2
Posts: 501
Joined: 30 Jul 2016, 21:28
Detinator Steam: Da
CS Status: Muncă
SteamID: id/totooffices/
Fond eXtream: 0
Location: Botosani
Has thanked: 10 times
Been thanked: 5 times

10 Jan 2023, 21:08

UP :ily_gesture:
Image
Image
Furien Remade Level || Class || Power || Quest || Event
IP : 188.212.100.219:27015

User avatar
-ToTo-
Membru, skill +2
Membru, skill +2
Posts: 501
Joined: 30 Jul 2016, 21:28
Detinator Steam: Da
CS Status: Muncă
SteamID: id/totooffices/
Fond eXtream: 0
Location: Botosani
Has thanked: 10 times
Been thanked: 5 times

15 Jan 2023, 10:11

UP :ily_gesture:
Furien Remade Level || Class || Power || Quest || Event
IP : 188.212.100.219:27015

User avatar
-ToTo-
Membru, skill +2
Membru, skill +2
Posts: 501
Joined: 30 Jul 2016, 21:28
Detinator Steam: Da
CS Status: Muncă
SteamID: id/totooffices/
Fond eXtream: 0
Location: Botosani
Has thanked: 10 times
Been thanked: 5 times

29 Jan 2023, 09:06

UP :blue_forehead: IP: 89.34.25.27:27015
Image
Furien Remade Level || Class || Power || Quest || Event
IP : 188.212.100.219:27015

User avatar
-ToTo-
Membru, skill +2
Membru, skill +2
Posts: 501
Joined: 30 Jul 2016, 21:28
Detinator Steam: Da
CS Status: Muncă
SteamID: id/totooffices/
Fond eXtream: 0
Location: Botosani
Has thanked: 10 times
Been thanked: 5 times

15 Feb 2023, 01:32

-ToTo- wrote:
29 Jan 2023, 09:06
UP :blue_forehead: IP: 89.34.25.27:27015
Image
UP :face_party_blower:
Furien Remade Level || Class || Power || Quest || Event
IP : 188.212.100.219:27015

User avatar
-ToTo-
Membru, skill +2
Membru, skill +2
Posts: 501
Joined: 30 Jul 2016, 21:28
Detinator Steam: Da
CS Status: Muncă
SteamID: id/totooffices/
Fond eXtream: 0
Location: Botosani
Has thanked: 10 times
Been thanked: 5 times

15 Mar 2023, 16:47

Up
-ToTo- wrote:
15 Feb 2023, 01:32
-ToTo- wrote:
29 Jan 2023, 09:06
UP :blue_forehead: IP: 89.34.25.27:27015
Image
UP :face_party_blower:
Furien Remade Level || Class || Power || Quest || Event
IP : 188.212.100.219:27015

User avatar
tweky
Fost moderator
Fost moderator
Posts: 2705
Joined: 22 Jun 2009, 01:54
Detinator Steam: Da
CS Status: Inactiv
Detinator server CS: Da
SteamID: twekymihai
Reputatie: Fost eXtream Mod
Nume anterior: Mihaita
Fost Membru Club eXtreamCS
Location: Ilfov
Has thanked: 126 times
Been thanked: 173 times

12 Sep 2023, 21:05

mai este?
my website
:hand_over_mouth: :ghosts:

1. vevios.ro

2. minios.ro
User avatar
-ToTo-
Membru, skill +2
Membru, skill +2
Posts: 501
Joined: 30 Jul 2016, 21:28
Detinator Steam: Da
CS Status: Muncă
SteamID: id/totooffices/
Fond eXtream: 0
Location: Botosani
Has thanked: 10 times
Been thanked: 5 times

13 Sep 2023, 09:05

tweky wrote:
12 Sep 2023, 21:05
mai este?
Este de vânzare, online nu
Furien Remade Level || Class || Power || Quest || Event
IP : 188.212.100.219:27015

User avatar
cyby
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 1777
Joined: 16 Jul 2011, 21:46
Detinator Steam: Da
Detinator server CS: Da
Reputatie: Scripter eXtreamCS
Fost Moderator ajutator
Has thanked: 146 times
Been thanked: 396 times

13 Sep 2023, 23:45

| Afiseaza codul
#include <amxmodx>
#include <amxmisc>
#include <csx>
#include <cstrike>
#include <chr_engine>
#include <dhudmessage>
#include <engine>
#include <fakemeta>
#include <fvault>
#include <geoip>
#include <hamsandwich>
#include <fakemeta_util>
#include <fun>
#include <cs_teams_api>
#include <cs_player_models_api>
#include <xs>
#include "ojos.inc"
#include <rog>

native open_costummenu(id);
#pragma dynamic 32768
#define FLARE_DURATION 600

new is_thunder = 0, g_gotpowder[33], g_nodamage[33], iddamage, idkills, idspent, g_win, g_pvp[33], g_hits[33];

#define DAMAGE_CLASSNAME    "sprite_damage"

new const color_pattern[][] =
{
    { 255, 122, 0 },        // ORANGE
    { 0, 180, 0 },          // GREEN
    { 0, 0, 180 },          // BLUE
    { 180, 0, 0 }           // RED
}

new damage_spr[5][2][128];

new const hints[][][] =
{
	{"attack", "You can buy attack items by pressing^3 M 4 4 2^1 or^3 M 4 4 4^1!"},
	{"defensive", "You can buy defensive items by pressing^3 M 4 4 3^1"},
	{"laser", "You can buy lasermine by pressing^3 M 4 4 2 4^1 and plant it (console:^3 bind v +setlaser^1;^3bind c +dellaser^1 and press^3 V^1!"},
	{"lm", "You can buy lasermine by pressing^3 M 4 4 2 4^1 and plant it (console:^3 bind v +setlaser^1;^3bind c +dellaser^1 and press^3 V^1!"},
	{"jetpack", "You can buy jetpack by pressing^3 M 4 4 4 2^1 and use it by pressing^3 5^1!"},
	{"hs", "You can buy headshot bullets by pressing^3 M 4 4 4 1^1!"},
	{"skin", "You can buy player skins by pressing^3 M 5^1 or weapon skins by pressing^3 M 9 5^1 and start buying chests!"},
	{"weapon", "You can buy player skins by pressing^3 M 5^1 or weapon skins by pressing^3 M 9 5^1 and start buying chests!"},
	{"knife", "You can use change it by^3 typing /knife^1 but you need to have^3 Knife Menu^1! You can buy it by pressing^3 M 4 4 4^1"},
	{"dmg", "You can increase your permanent damage by pressing^3 M 4 1 5^1 at maximum of 25! Status points from^3 M 9 3 3^1 "},
	{"damage", "You can increase your permanent damage by pressing^3 M 4 1 5^1 at maximum of 25! Status points from^3 M 9 3 3^1"},
	{"quest", "You can check your quests by pressing^3 M 9 5^1. You have access to special skins too!"},
	{"status", "You can increase your permanent damage by pressing^3 M 4 1 5^1 at maximum of 25! Status points from^3 M 9 3 3^1"},
	{"costum", "You can have access from M 4 5 1^1 !"},
	{"benefit", "After 5 hours you can change your^3 lasermine skin^1,^3 tag^1,^3 grenade effect^1 and more..."}
}

#define TE_BLOODSPRITE		115
new const fvault_explosioneffects[] = "mi_exp_effect";
#define MAX_LIGHT_POINTS 3
new weather_ent, Float:g_strikedelay, g_lightpoints[MAX_LIGHT_POINTS], g_fxbeam, g_soundstate[33], g_bTrail[33], Float:g_lastleaptime[33];

#define REMOVE_OBJECTIVES (1<<0 | 1<<2 | 1<<3 | 1<<4)
#define ZOMBIE_OBJECTIVES "zombie_objectives"
new const g_objective_ents[][] = { "func_bomb_target", "info_bomb_target", "hostage_entity", "monster_scientist", "func_hostage_rescue", "info_hostage_rescue", "info_vip_start", "func_vip_safetyzone", "func_escapezone" }
new const g_objective_type[] = { (1<<3), (1<<3), (1<<2), (1<<2), (1<<2), (1<<2), (1<<0), (1<<0), (1<<4) }
new const bool:g_objective_prim[] = { true, true, true, false, false, false, false, true, true }

new g_no_objectives = (1<<0 | 1<<2 | 1<<3 | 1<<4)

#define pev_flare pev_iuser4
#define flare_id 1337
#define is_ent_flare(%1) (pev(%1, pev_flare) == flare_id) ? 1 : 0

new const g_flare_model[] = "models/w_flare.mdl"

new const ent_sound_dance[] = "monster_invasion/dance_zm.wav";

// Important
new const developer_name_list[][] = { "cyby" }
new const server_name[] = "89.34.25.27 - Monster Invasion";
new const TAG[] = "[Monster Invasion]";

new g_max_hp[33];

new sprite_playerheat;

#define get_bit(%1,%2)  (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2)  (%1 |= (1 << (%2 & 31)))
#define reset_bit(%1,%2)        (%1 &= ~(1 << (%2 & 31)))
#define is_user_valid_connected(%1) (1 <= %1 <= g_maxplayers && is_user_connected(%1))
#define ValidTouch(%1) (is_user_alive(%1) && !is_user_bot(%1))

new g_is_authed, g_isloaded, g_haveflarenade[33];

const MAX_STATS_SAVED = 64

new db_name[MAX_STATS_SAVED][32];
new db_gotbonus[MAX_STATS_SAVED];
new db_shieldplanted[MAX_STATS_SAVED];
new db_slot_i;

// Mod
new const name_days[][] =
{
	"",
	"Predators",
	"Robots",
	"Aliens",
	"Monsters",
	"Zombies",
	"Deaths",
	"Devils"
}

new const monster_data[][][] =
{
	{"Name", "Health", "Armor", "Speed", "Gravity", "Respawns", "Reward Gold", "Reward Experience", "Light", "Monster Damage", "Armor"},
	{"Predator", "100", "100", "230", "1.0", "40", "3", "5", "i", "30.0", "1.0"},
	{"Robot", "200", "200", "240", "0.95", "65", "6", "6", "h", "35.0", "0.9"},
	{"Alien", "300", "300", "250", "0.9", "90", "12", "7", "g", "40.0", "0.85"},
	{"Monster", "400", "400", "255", "0.85", "115", "13", "8", "f", "45.0", "0.8"},
	{"Zombie", "500", "500", "260", "0.8", "140", "14", "9", "f", "50.0", "0.75"},
	{"Death", "600", "600", "270", "0.75", "165", "15", "10", "e", "55.0", "0.7"},
	{"Devil", "700", "700", "290", "0.5", "190", "20", "15", "d", "65.0", "0.5"}
}

new const boss_chest[][][] =
{
	{"Chest Name", "Chest Model", "Chest Reward Gold", "Cest Reward Exp", "Chest Reward Powder", "Damage Temporarly", "Critical Chance"},
	{"Ewol Chest", "bosschest", "69", "333", "55", "10", "1"},
	{"Fer Chest", "bosschest", "132", "555", "66", "15", "2"},
	{"Auliu Chest", "bosschest", "255", "777", "77", "20", "3"},
	{"Gatumadii Chest", "bosschest", "366", "888", "88", "25", "4"},
	{"Faliu Chest", "bosschest", "477", "999", "99", "30", "5"},
	{"Puitoane Chest", "bosschest", "666", "1111", "111", "50", "6"},
	{"Cindma Chest", "bosschest", "1000", "2000", "250", "0", "7"}
}

new const human_race[][][] =
{
	{"Name Class", "Health Extra", "Armor Extra", "Damage Extra", "Active Skill", "Passive Skill", "Level", "VIP"},
	{"Soldier", "100", "50", "5", "Every third attack deals extra 3% MAX HP true damage to victim for 10 seconds.", "Fifth attack deals 5% MAX HP true damage to victim", "1", "0"},
	{"Booster", "50", "50", "10", "Boost his team with 50% damage extra for 5 seconds.", "Get double exp", "3", "0"},
	{"Lander", "1", "1", "15", "6.9 sec of +69 damage every 6.9 sec", "Every hit increase your damage.", "6", "0"},
	{"Technologic", "69", "69", "20", "You grab all monsters arround and set in your target every 8 seconds.", "For every kill get a bonus of Gold", "9", "0"},
	{"Psychic", "169", "169", "25", "Kill in your sight every 5 sec.", "You get extra more damage 6.9 to 69", "12", "0"},
	{"God", "369", "369", "30", "Get extra 150 max HP every 10 sec.", "Every hit increase your damage by 2.", "16", "0"},
	{"Not even right", "6969", "6969", "35", "You can just kill all arround you every 5 seconds.", "Your third bullet kills target instantly", "20", "1"}
}

new g_currentknife[33];

new const knife_belea[][][] =
{
	{"Frost Monster", "frozen_monster", "6.0", "1.5", "10", "DMG++ | SLOW | FROST CHANCE"},
	{"Sword", "sword", "3.0", "0.5", "100", "DMG+ | VERY FAST"},
	{"Slapper", "slanec", "9.0", "2.0", "50", "DMG+++ | FAST | SLOW ATTACK | KNOCKBACK"}
}

// 0 - id, 1 - skilltimer, 2 - passive storer, 3 - buff damage, 4 - cooldown, 5 - prechange, 6 - i really need it...
new g_human_class[33][7];

new const quests_data[][] =
{
	"Get all attack items",
	"Get all defence items",
	"Get all vip items",
	"Get full stack damage",
	"Get full stack armor",
	"Kill 15000 monsters with headshot",
	"Kill 1500 monsters with knife",
	"Stay with us 5 hours",
	"Spent 50000 Gold",
	"Get VIP"
}

new g_quest_data[33][sizeof quests_data], g_checkid[33];
new grab[33], Float:grab_totaldis[33], g_ishero[33];

new const defender_models[] = "models/monster_invasion/bestpet.mdl";

new const lasermine_skins[][] =
{
	"Normal laser",
	"Halo Laser",
	"Shot Laser",
	"Mega Laser",
	"Beam Laser",
	"Trip Laser",
	"Alien Laser",
	"Eye Laser",
	"Hand Laser"
}

new g_totalkills[33], g_totaldamage[33], g_totalspent[33];

new const principal_server_menu[][] =
{
	"Select your weapons",
	"Choose class",
	"Top and Rank",
	"Shop",
	"Buy Skin",
	"Reset Score",
	"Admins & VIPs connected",
	"Benefits",
	"Quests",
	"Status Points\w NEW",
	"Best in a NIGHT\w NEW",
	"Daily Coins and Missions\w NEW"
}

new const status_strings[][][] =
{
	{"Health", "20", "1"},
	{"Armor", "20", "1"},
	{"Damage", "20", "1"},
	{"Speed", "20", "1"},
	{"Critical Chance", "20", "1"},
	{"Regen", "10", "1"},
	{"Knife Damage", "20", "5"},
	{"Lasermine Damage", "10", "10"}
}

new g_evolution = 1, g_nextvote[33];

new g_lasermineskin[33];

new g_status_player[33][sizeof status_strings], g_status_points[33];

new const thunderlight[] = "bcdefedcijklmlkjihgfedcb";

new const shop_items_menu[][] =
{
	"Supplies",
	"Attack Items",
	"Defence Items",
	"VIP Items",
	"Powder Items",
	"Convert $ to Gold",
	"Convert 200 Gold to 100 Exp",
	"Become a Hero"
}

new const weapon_skin_menu[][] =
{
	"Open Skin Menu",
	"Check daily missions",
	"Buy Chest [ 6 Daily Coins ]",
	"Open Chest",
	"Open All Chests"
}

new const effectsname[][][] =
{
	{"No effect", ""},
	{"Blast Explosion", "sprites/monster_invasion/blast_exp.spr"},
	{"Blue Explosion", "sprites/monster_invasion/blue_exp.spr"},
	{"Lightning Explosion", "sprites/monster_invasion/lightning_exp.spr"},
	{"Spark Explosion", "sprites/monster_invasion/spark_exp.spr"},
	{"Electric Explosion", "sprites/monster_invasion/electric_exp.spr"}
}

enum
{
	JOI = 1,
	VINERI,
	SAMBATA,
	DUMINICA,
	LUNI,
	MARTI,
	MIERCURI
}

#if cellbits == 32
const OFFSET_HE_AMMO = 388
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_HE_AMMO = 437
const OFFSET_CLIPAMMO = 65
#endif
const OFFSET_PDATA					= 2;
const OFFSET_LINUX_WEAPONS 			= 4;
const OFFSET_WEAPON_OWNER			= 41;
const OFFSET_NEXT_PRIMARY_ATTACK	= 46;
const OFFSET_NEXT_SECONDARY_ATTACK 	= 47;
const OFFSET_TIME_WEAPON_IDLE 		= 48;

const PEV_NADE_TYPE = pev_flTimeStepSound;
const NADE_TYPE_CHRISTMAS = 1111;
const NADE_TYPE_TURBAT = 2222;
const NADE_TYPE_FROST = 3333;
const NADE_TYPE_TELE = 4444;
const NADE_TYPE_FLARE = 5555;
const m_iShotsFired = 64;

new g_rounddamage[33], g_roundkills[33], g_roundspent[33];

enum (+= 100)
{
	TASK_AMMO = 200,
	TASK_HUD,
	TASK_GIVE,
	TASK_FROST,
	TASK_AURA,
	TASK_BURN
}

new g_currentroundtime = 0;

#define SUGAR_EVENT_TASKID 813452
#define TASK_DELAY 213124
#define COUNT_DOWN	22
#define TASK_COUNT	12848129
#define Ham_Player_ResetMaxSpeed Ham_Item_PreFrame
#define ID_HUD (taskid - TASK_HUD)
#define ID_GIVE (taskid - TASK_GIVE)
#define ID_FROST (taskid - TASK_FROST)
#define ID_AURA (taskid - TASK_AURA)
#define ID_BURN (taskid - TASK_BURN)

new const soundskills[][] =
{
	"monster_invasion/predator_skill.wav",
	"monster_invasion/robot_skill.wav",
	"monster_invasion/alien_skill.wav",
	"monster_invasion/monster_skill.wav",
	"monster_invasion/zombie_skill.wav",
	"monster_invasion/death_skill.wav",
	"monster_invasion/devil_skill.wav"
}

new bool:g_deleted = false;
new g_Lightning;

new const fvault_timeplayed[] = "timeplayed";
new const fvault_msg_in[] = "msg_in";
new const fvault_msg_out[] = "msg_out";
new const fvault_deathnote[] = "death_notes";
new const fvault_joinsounds[] = "join_sounds";
new const fvault_tagchat[] = "tag_chat";
new const fvault_skindata[] = "skin_data";
new const fvault_data[] = "player_stats";
new const fvault_quests_data[] = "quest_data";
new const fvault_powder_items[] = "powder_data";
new const fvault_status_points[] = "status_points";
new const fvault_pro_players[] = "pro_players";
new const fvault_special_skins[] = "special_skins";
new const fvault_coins_and_chests[] = "coins_chests";

new const killingsounds[][] =
{
	"monster_invasion/ks/knife.wav",
	"monster_invasion/ks/10.wav",
	"monster_invasion/ks/20.wav",
	"monster_invasion/ks/30.wav",
	"monster_invasion/ks/40.wav",
	"monster_invasion/ks/50.wav"
}

new const Float:Size[][3] = 
{
	{0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},
	{0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},
	{0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},
	{0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},
	{0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}
}

new const MAXCLIP[] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20,
			10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 }
			
new const Float:g_sign[4][2] = {{1.0, 1.0}, {1.0, -1.0}, {-1.0, -1.0}, {-1.0, 1.0}}
new Float:Maxs[3] = { 135.0 , 135.0 , 135.0 }
new Float:Mins[3] = { -135.0, -135.0, -135.0 }

new CurrentRespawns, g_respawn_time[33], Float:g_delaygrenade[33];
// Iteme
new const defence_itemsname[][] =
{
	"Boost HP [ +100 Health ]",
	"Explorer Nade [ Teleport Nade ]", 	
	"Better Jump [ BunnyHop ]",
	"Last Hope [ Half Time Respawn ]",
	"Best Pie [ Regen HP ]",
	"Double Jump [ Indeed ]",
	"Regen Area [ Press T to use it ]"
}

new const item_class_name[] = "dm_item"

new g_powder_box[] = "models/monster_invasion/powderbox.mdl";
new g_present_box[] = "models/monster_invasion/present.mdl";
new g_boss_chest[] = "models/monster_invasion/boss_chest.mdl";

new g_heal[33];

new const def_items_price[] = { 1000, 2000, 3000, 2000, 2200, 3000, 2500 }
#define DULCIURI	(1<<0) // done
#define TELENADE	(1<<1) // done
#define BUNNYHOP	(1<<3) // done
#define LASTHOPE	(1<<4) // done
#define BESTPIE		(1<<5) // done
#define DOUBLEJUMP	(1<<6) //done
#define CAMP_NADE 	(1<<7)
new g_spr_res[sizeof effectsname], g_custom_nade[33], g_asking[33];
new g_defence_items[33], bool:returnblood = false;

new const attack_itemsname[][] =
{
	"Ultra Bullets [ Chance to critical hit ]",
	"Fire Bullets [ Indeed ]",
	"Bomber [ 200x Grenades ]",
	"Lasermine [ Press V to use it ]",
	"Faster Bullets [ Chance to have faster attacks ]",
	"Sniper [ No Recoil ]"
}

new const att_items_price[] = { 4000, 2222, 5000, 5000, 6000, 2000 };
#define ULTRABULLETS	(1<<0) // done
#define EXPLOSIVEBULL	(1<<1) // done
#define FIREBULLETS		(1<<2) // done
#define CHRWISH			(1<<3) // done
#define BESTXM1014		(1<<4) // done
#define DATTACK			(1<<6) // done
#define NORECOIL		(1<<7) // done
new g_attack_items[33], smoke;

new const vip_itemsname[][] =
{
	"Power Bullets [ Chance to only Head Hit ]",
	"Jetpack and Bazooka",
	"See Zombies Arround",
	"Knife Menu"
}

new const vip_items_price[] = { 5000, 5000, 4000, 2000 };
#define SANTABULLETS	(1<<0) // done
#define JETPACKB		(1<<1) // done
#define PLASMAGUN		(1<<2) // done
#define SANTAKNIFE		(1<<3) // done
new g_vip_items[33];

new const vip_models_res[][] =
{
	"models/monster_invasion/rocketbazooka.mdl",
	"models/monster_invasion/p_jetpack_xmas.mdl",
	"models/monster_invasion/v_jetpack_xmas.mdl"
}

new const vip_sounds_res[] = "monster_invasion/rocket_sound.wav";

new const name_items[][] =
{
	"Frost Nade",
	"Flare Nade",
	"50 Health",
	"50 Armor",
	"+1 Attack",
	"+1 Defence",
	"Defender"
}

new const price_items[] = { 100, 100, 50, 25, 200, 200, 500 };
new g_attack[33], g_defence[33], g_timeplayed[33], g_jetpackpower[33];
new stargib;

new const skin_menu_shop[][] =
{
	"Remove Current Skin",
	"Weed",
	"Robot",
	"Joker",
	"Fierce Soldier",
	"Horse Man",
	"Aligator",
	"Balls"
}
new const skin_precache[][] =
{
	"",
	"mi_human_weed",
	"mi_human_robot",
	"mi_human_joker",
	"mi_human_fierce",
	"mi_human_horse",
	"mi_human_aligator",
	"mi_human_balls"
}

new const string_weapons_menu[][][] =
{
	{"UMP", "weapon_tmp", "0.8", "1.5"},
	{"UZI", "weapon_mac10", "0.8", "1.5"},
	{"UMP45", "weapon_ump45", "0.7", "1.5"},
	{"MP5", "weapon_mp5navy", "0.8", "1.6"},
	{"P90", "weapon_p90", "0.9", "1.8"},
	{"M249", "weapon_m249", "0.8", "2.0"},
	{"M3", "weapon_m3", "0.6", "2.2"},
	{"XM1014", "weapon_xm1014", "0.8", "2.5"},
	{"M4A1", "weapon_m4a1", "0.55", "2.8"},
	{"AK47", "weapon_ak47", "0.66", "3.1"},
	{"SG550", "weapon_sg550", "0.77", "4.5"},
	{"AWP", "weapon_awp", "0.3", "16.0"}
}

new const vips_weapons[][][] =
{
	{"Dual Kriss", "5"},
	{"Rail Gun", "10"},
	{"Thanatos", "15"}
}

new g_weaponselected[33], bool:g_have_weapon[33];

new const daily_missions[][][] =
{
	{"Play 1 hour", "60"},
	{"Spent 5000 Gold", "5000"},
	{"Kill 150 Monsters", "150"},
	{"Use chat 50 times", "50"},
	{"Kill 1 boss", "1"},
	{"Die 1 time", "1"}
}

new g_daily_missions[33][sizeof daily_missions], g_mission_date[33], g_chests[33], g_daily_coin[33];

// Name weapon, weapon_name, weapon_v_model weapon_p_model, csw_
new const special_weapons[][][] =
{
	{"CBJ TMP", "weapon_tmp", "models/monster_invasion/v_tmp.mdl", "models/monster_invasion/p_tmp.mdl", "23"},
	{"FIESTA MAC10", "weapon_mac10", "models/monster_invasion/v_mac10.mdl", "models/monster_invasion/p_mac10.mdl", "7"},
	{"SCAVENGED UMP45", "weapon_ump45", "models/monster_invasion/v_ump45.mdl", "models/monster_invasion/p_ump45.mdl", "12"},
	{"NEMESIS MP5", "weapon_mp5navy", "models/monster_invasion/v_mp5.mdl", "models/monster_invasion/p_mp5.mdl", "19"},
	{"BLUE NEON P90", "weapon_p90", "models/monster_invasion/v_p90.mdl", "models/monster_invasion/p_p90.mdl", "30"},
	{"MINIGUN M249", "weapon_m249", "models/monster_invasion/v_m249.mdl", "models/monster_invasion/p_m249.mdl", "20"},
	{"SUPER M3", "weapon_m3", "models/monster_invasion/v_m3.mdl", "models/monster_invasion/p_m3.mdl", "21"},
	{"LEGO XM1014", "weapon_xm1014", "models/monster_invasion/v_xm1014.mdl", "models/monster_invasion/p_xm1014.mdl", "5"},
	{"NIGHTMARE M4A1", "weapon_m4a1", "models/monster_invasion/v_m4a1.mdl", "models/monster_invasion/p_m4a1.mdl", "22"},
	{"NEXT TEHNOLOGY AK47", "weapon_ak47", "models/monster_invasion/v_ak47.mdl", "models/monster_invasion/p_ak47.mdl", "28"},
	{"AWE SG550", "weapon_sg550", "models/monster_invasion/v_sg550.mdl", "models/monster_invasion/p_sg550.mdl", "13"},
	{"AZURE AWP", "weapon_awp", "models/monster_invasion/v_awp.mdl", "models/monster_invasion/p_awp.mdl", "18"}
}

new const g_weapon_skin[33][sizeof special_weapons];

new const join_sounds_vip[][][] =
{
	{"Remove Login Music", ""},
	{"Let the bodies", "monster_invasion/join/letthebodies.wav"},
	{"Remember - Fort Minor", "monster_invasion/join/remember_fort_minor.wav"},
	{"Mist - So High", "monster_invasion/join/mist_so_high.wav"},
	{"Spike - Sub Papuc", "monster_invasion/join/spike_sub_papuc.wav"},
	{"Bug - Dupa Blocuri", "monster_invasion/join/bug_mafia_dupa_blocuri.wav"},
	{"Hard Bass", "monster_invasion/join/hardbass.wav"},
	{"Bordea - Amin", "monster_invasion/join/bordea_amin.wav"},
	{"Gta San Andreas", "monster_invasion/join/gta_san_andreas.wav"},
	{"Robotzi - Legume", "monster_invasion/join/robotzi_legume.wav"}
}

new const skin_price[] = { 0, 10, 10, 15, 13, 18, 6, 5000}
#define NOSKIN			0 // done
#define KINGXMAS		(1<<0) 
#define BEARXMAS		(1<<1)
#define BLUEGIRL		(1<<2) 
#define GIRLXMAS		(1<<3) 
#define SANTACLAUS		(1<<4) 
#define NEWELF			(1<<5) 
#define BALLS			(1<<6) 
new g_skinsdata[33], g_currentskin[33], Float:g_lastskin[33];

new const newradio1[][] =
{
	"Ai grija..",
	"Ajutooooor",
	"Boule",
	"Bufnita-s....",
	"Bulaaan",
	"Ce vrei ma???"
}

new const newradio2[][] =
{
	"Cristiii",
	"Familia",
	"***** *****",
	"Schiuri din ...",
	"Scuzee",
	"Sprancenatule"
}

new g_entering_sound[33];

#define Mine_Sprite_Laser "sprites/monster_invasion/laser.spr"

#define ACTIVE pev_iuser1
#define TYPE_SHOOT pev_iuser2
#define STATE pev_iuser3

new g_Entity_robo, g_iBeam, g_defender[33];

new Float:g_lastradio[33], itifutmama, bool:g_usingjetpack[33];

// Resurse
new const radionew[][] = { "monster_invasion/radio/aigrija.wav", "monster_invasion/radio/ajutor.wav", "monster_invasion/radio/boule.wav", "monster_invasion/radio/bufnita.wav", "monster_invasion/radio/bulan.wav", "monster_invasion/radio/cevreima.wav" };
new const secondrdnew[][] = { "monster_invasion/radio/cristii.wav", "monster_invasion/radio/familia.wav", "monster_invasion/radio/pzdm.wav", "monster_invasion/radio/schiuri.wav", "monster_invasion/radio/scuze.wav", "monster_invasion/radio/sprancene.wav" };
new const countnumbers[][] = { "monster_invasion/1.wav", "monster_invasion/2.wav", "monster_invasion/3.wav", "monster_invasion/4.wav", "monster_invasion/5.wav", "monster_invasion/6.wav", "monster_invasion/7.wav", "monster_invasion/8.wav", "monster_invasion/9.wav", "monster_invasion/10.wav", "monster_invasion/15.wav", "monster_invasion/20.wav", "monster_invasion/seconds.wav", "monster_invasion/remaining.wav" };
new const eventrsc[][] = { "monster_invasion/kill1.wav", "monster_invasion/kill2.wav" }
new const ice_model[] = "models/xmas/_frost.mdl";
new const santa_models[] = "models/monster_invasion/dance_zombie1.mdl";
new const g_sprflame[] = "sprites/monster_invasion/fires.spr";
new const sounds_frost[][] = { "xmas/break_frost.wav", "xmas/explode_frost.wav", "xmas/hit_frost.wav" };
new const miss_sounds[][] = { "zombie/claw_miss1.wav", "zombie/claw_miss2.wav" }
new const hit_sounds[][] = { "zombie/claw_strike1.wav", "zombie/claw_strike2.wav", "zombie/claw_strike3.wav"}
new const sprites_frost[][] = { "sprites/monster_invasion/beamgrenades.spr", "sprites/monster_invasion/frost_exp.spr", "sprites/xmas/frostgib.spr", "sprites/monster_invasion/sprsnowball.spr", "models/glassgibs.mdl", "sprites/monster_invasion/inf_exp.spr", "sprites/monster_invasion/m_ability.spr" };
new const weapon_models[][] = 
{
	"models/p_crowbar.mdl",
	"models/v_crowbar.mdl"
}

// deces1, deces2, deces3, durere1, durere2, durere3, idle1, idle2, idle3
new const monsters_sounds[][][] =
{
	{"bullchicken/bc_attackgrowl.wav", "bullchicken/bc_attackgrowl2.wav", "bullchicken/bc_attackgrowl3.wav", "bullchicken/bc_pain1.wav", "bullchicken/bc_pain3.wav", "bullchicken/bc_pain4.wav", "bullchicken/bc_idle1.wav", "bullchicken/bc_idle2.wav", "bullchicken/bc_idle3.wav"},
	{"doors/doormove8.wav", "doors/doormove3.wav", "doors/doormove6.wav", "tentacle/te_strike1.wav", "tentacle/te_strike2.wav", "hassault/hw_spinup.wav", "debris/zap6.wav", "debris/zap7.wav", "debris/zap2.wav"},
	{"doors/aliendoor4.wav", "doors/aliendoor1.wav", "doors/aliendoor3.wav", "debris/flesh5.wav", "debris/flesh6.wav", "debris/flesh7.wav", "gonarch/gon_alert1.wav", "gonarch/gon_alert2.wav", "gonarch/gon_alert3.wav"},
	{"gonarch/gon_pain2.wav", "gonarch/gon_pain4.wav", "gonarch/gon_pain5.wav", "gonarch/gon_sack1.wav", "gonarch/gon_sack2.wav", "gonarch/gon_sack3.wav", "gonarch/gon_childdie1.wav", "gonarch/gon_childdie2.wav", "gonarch/gon_childdie3.wav"},
	{"zombie/zo_attack1.wav", "zombie/zo_attack2.wav", "zombie/zo_alert10.wav", "zombie/zo_pain1.wav", "zombie/zo_pain2.wav", "zombie/zo_alert30.wav", "zombie/zo_idle1.wav", "zombie/zo_idle2.wav", "zombie/zo_idle3.wav"},
	{"ichy/ichy_die2.wav", "ichy/ichy_die3.wav", "ichy/ichy_die4.wav", "ichy/ichy_pain1.wav", "ichy/ichy_pain2.wav", "ichy/ichy_pain3.wav", "ichy/ichy_alert1.wav", "ichy/ichy_alert2.wav", "ichy/ichy_alert3.wav"},
	{"agrunt/ag_pain1.wav", "agrunt/ag_pain2.wav", "agrunt/ag_pain3.wav", "agrunt/ag_die1.wav", "agrunt/ag_die2.wav", "agrunt/ag_die3.wav", "agrunt/ag_alert1.wav", "agrunt/ag_alert2.wav", "agrunt/ag_alert3.wav"}
}

new const christmas_new_sounds[][] =
{
	"monster_invasion/level_up.wav",
	"monster_invasion/special_nade_exp.wav",
	"monster_invasion/misc/ambience.wav",
	"monster_invasion/monsters/bossappear.wav",
	"monster_invasion/misc/plwin1.wav", // plwin
	"monster_invasion/misc/buy.wav",
	"monster_invasion/misc/m_win.wav",
	"monster_invasion/misc/boss_transform.wav"
}

new const real_player_models[][] =
{
	"mi_new_player",
	"mi_new_vip",
	"mi_new_hero"
}

new const knife_hero[][] =
{
	"models/monster_invasion/v_hero_m4a1.mdl",
	"models/monster_invasion/p_hero_m4a1.mdl"
}

new const monster_player_models[][] =
{
	"",
	"mi_predator",
	"mi_robot",
	"mi_ancient_alien",
	"mi_monster2",
	"mi_zombie",
	"mi_death",
	"mi_devil"
}

new const modelaurora[] = "models/w_weaponbox.mdl";
// native
native cyby_mng_voting();
native cyby_get_vip(id);
native cyby_get_admin(id);
native cyby_open_adminlist(id);
native cyby_get_blind_admin(id);
new CurrentDay, DeveloperDay, bool:g_firstblood = false, bool:waiting, countdown = 21, g_totalspawns, Float:g_coord_santa[3], Float:g_angles_santa[3], g_ismuted[33], g_mutereason[33][16], bool:g_endround;
new id_special, g_status_sync

new g_playertype[33], bool:g_used_shield[33], flame;

new he_exp, g_iflames, g_frost_spr[sizeof sprites_frost], spr_blast_shroom;

new g_playername[33][32], stuck[33], g_kills[33], jumpnum[33] = 0, bool:dojump[33] = false, Float:g_lastshoot[33], Float:g_damage[33];
new g_level[33], g_exp[33], g_points[33], g_developerid[33], Float:g_is_burning[33], g_bot_ability[33];
new g_using_benefits[33], g_tag_chat[33][12], g_msg_in[33][32], g_msg_out[33][32], g_deathnote[33][64], g_isfrost, g_pcvar_no_objectives;

new sync_hud, event_sync, g_msg_saytext, g_msg_fog, g_maxplayers, g_msg_statusicon, g_msghideweap;
new g_blood_decals[] = {0, 190, 191, 192, 193, 194, 196, 197, 204, 205};

#define LASERMINE_OWNER		pev_iuser2 //EV_INT_iuser3
#define LASERMINE_STEP		pev_iuser3
#define LASERMINE_HITING	pev_iuser4

#define LASERMINE_POWERUP	pev_fuser2
#define LASERMINE_BEAMTHINK	pev_fuser3

#define LASERMINE_BEAMENDPOINT	pev_vuser1

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

enum
{
	POWERUP_THINK,
	BEAMBREAK_THINK,
	EXPLOSE_THINK
};

enum
{
	POWERUP_SOUND,
	ACTIVATE_SOUND,
	STOP_SOUND
};

new const
	ENT_MODELS[]	= "models/monster_invasion/lm.mdl",
	ENT_SOUND1[]	= "weapons/mine_deploy.wav",
	ENT_SOUND2[]	= "weapons/mine_charge.wav",
	ENT_SOUND3[]	= "weapons/mine_activate.wav",
	ENT_SOUND4[]	= "debris/beamstart9.wav",
	ENT_SOUND5[]	= "items/gunpickup2.wav",
	ENT_SOUND6[]	= "debris/bustglass1.wav",
	ENT_SOUND7[]	= "debris/bustglass2.wav";

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

new g_EntMine, beamsprite, g_msgscreenfade;
new bool:g_settinglaser[33], plsetting[33], g_havemine[33], g_deployed[33], g_ent[33], g_ent_class[33][32];

new const powder_items[][][] =
{
	{"Costume Access", "500"},
	{"Parachute", "50"},
	{"Trail Access", "300"},
	{"Glow Access", "200"},
	{"Vampiric Bullets", "150"}
}

new g_powder_items[33][sizeof powder_items], g_powder[33];

public plugin_init() 
{
	register_plugin("Monster Invasion", "2.0b", "cyby");
	set_task(1.0, "hud_event", _, _, _, "b");
	register_logevent("Event_RoundStart", 2, "1=Round_Start");
	register_logevent("Event_RoundEnd", 2, "1=Round_End");
	register_event("CurWeapon","Event_ModelChange", "be", "1=1");
	register_event("Damage", "EventDamage", "be");
	register_concmd("+grab", "grab_on");
	register_concmd("-grab", "grab_off");
	RegisterHam(Ham_BloodColor, "player", "Hook_BloodColor");
	RegisterHam(Ham_Killed, "player", "deathmsg");
	register_event("DeathMsg", "death_msg", "a");
	register_event("AmmoX", "event_free_ammo", "be", "1=1", "1=2", "1=3", "1=4", "1=5", "1=6", "1=7", "1=8", "1=9", "1=10");
	register_forward(FM_SetModel, "fwm_setmodel");
	register_forward(FM_Touch, "fwm_touch");
	register_forward(FM_GetGameDescription, "GameDesc");
	register_message(SVC_TEMPENTITY, "blood_message");
	register_forward(FM_UpdateClientData, "client_data_post", 1);
	RegisterHam(Ham_Spawn, "player", "Player_Spawn", 1);
	RegisterHam(Ham_TakeDamage, "player", "Player_TakeDamage");
	RegisterHam(Ham_Think, "grenade", "think_grenade");
	RegisterHam(Ham_Player_ResetMaxSpeed, "player", "reset_max_speed", 1);
	RegisterHam(Ham_Item_Deploy, "weapon_knife", "ham_item_deploy_knife", 1);
	RegisterHam(Ham_Touch, "weaponbox", "OnPlayerTouchWeaponBox");
	RegisterHam(Ham_Touch, "armoury_entity", "OnPlayerTouchWeaponBox");
	RegisterHam(Ham_Touch, "weapon_shield", "OnPlayerTouchWeaponBox");
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");
	register_think(DAMAGE_CLASSNAME, "fw_Think")
	register_forward(FM_AddToFullPack, "fw_AddToFullPack_Post", 1);
	register_event("Damage" , "event_Damage" , "b" , "2>0");
	
	register_forward(FM_CmdStart, "fw_cmdstart");
	register_think("RobotTurret", "think_turret");
	RegisterHam(Ham_TakeDamage, "func_breakable", "ham_takedefenderdamage", 0);
	RegisterHam(Ham_TraceAttack, "player", "fw_traceattack");
	RegisterHam(Ham_Player_Jump, "player", "bunnyhop");
	g_msghideweap = get_user_msgid("HideWeapon");
	register_event("ResetHUD", "onresethud", "b");
	register_message(g_msghideweap, "msg_hideweapon");
	register_event("TeamInfo", "join_spawn", "a");
	register_touch("santa_santa", "player", "OnTouchSanta");
	set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET);
	register_forward(FM_Think, "ltm_Think");
	register_forward(FM_Think,    "fwd_think");
	register_forward(FM_PlayerPostThink, "ltm_PostThink");
	register_clcmd("say /round", "show_event_developer");
	register_clcmd("say /pvp", "say_pvp");
	register_clcmd("say /knife", "say_knife");
	register_clcmd("radio1", "open_first_radio");
	register_clcmd("radio2", "open_second_radio");
	register_clcmd("radio3", "main_menu_items");
	register_clcmd("fullupdate", "clcmd_drop");
	register_clcmd("drop", "use_active");
	register_clcmd("chooseteam", "main_menu_items");
	register_clcmd("say /developer", "open_developer_menu");
	register_clcmd("say /vips", "who_vips");
	register_clcmd("say /vip", "ShowMotd");
	register_clcmd("POINTS_PLAYER", "points_developer_player");
	register_clcmd("POINTS_ALL", "points_developer_all");
	register_clcmd("EXP_PLAYER", "exp_developer_player");
	register_clcmd("EXP_ALL", "exp_developer_all");
	register_clcmd("POWDER_PLAYER", "powder_developer_player");
	register_clcmd("POWDER_ALL", "powder_developer_all");
	register_clcmd("DAILY_COIN_ALL", "daily_coin_all");
	register_clcmd("INPUT_MSG", "benefits_cmd");
	register_clcmd("say", "hook_transfer");
	register_clcmd("say_team", "hook_sayteam");
	register_message(get_user_msgid("CurWeapon"), "message_cur_weapon");
	register_forward(FM_EmitSound, "fw_emitsound");
	RegisterHam(Ham_TakeDamage, ENT_CLASS_NAME3, "Laser_TakeDamage");
	register_clcmd("+setlaser","CreateLaserMine_Progress");
   	register_clcmd("-setlaser","StopCreateLaserMine");
	register_clcmd("+dellaser","ReturnLaserMine_Progress");
   	register_clcmd("-dellaser","StopReturnLaserMine");
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_hegrenade", "fw_blockitem", 0);
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_smokegrenade", "fw_blockitem", 0);
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_flashbang", "fw_blockitem", 0);

	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_c4", "fw_blockc4", 0);
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "Pistols_PrimaryAttack_Pre", 0);
	for(new i = 0; i < sizeof string_weapons_menu; i++)
	{
		if(string_weapons_menu[1][0])
			RegisterHam(Ham_Weapon_PrimaryAttack, string_weapons_menu[1], "ham_weapon_attack", 1);
	}
	
	for (new i = 0; i < sizeof special_weapons; i++)
	{
		if(special_weapons[1][0])
			RegisterHam(Ham_Item_Deploy, special_weapons[1], "fw_Item_Deploy_Post", 1);
	}

	register_concmd("amx_set_level", "cmd_setlevel", _, "<nume sau userid> <level> <exp> <gold> <powder> <timeplayed>");

	register_message(get_user_msgid("TextMsg"), "msg_textmsg");
	register_message(get_user_msgid("SendAudio"), "msg_sendaudio");
	register_event("StatusValue", "showStatus", "be", "1=2", "2!0")
	register_event("StatusValue", "hideStatus", "be", "1=1", "2=0")
	register_clcmd("say /santa", "show_warning");
	
	g_msg_saytext = get_user_msgid("SayText");
	g_msg_statusicon = get_user_msgid("StatusIcon");
	g_msgscreenfade = get_user_msgid( "ScreenFade" )
	
	set_cvar_num("sv_skycolor_r", 0);
	set_cvar_num("sv_skycolor_g", 0);
	set_cvar_num("sv_skycolor_b", 0);
	register_message(g_msg_statusicon, "message_status_icon");
	g_maxplayers = get_maxplayers();
	countdown = COUNT_DOWN;
	waiting = true;
	CurrentDay = 1;
	itifutmama = get_cvar_pointer("mp_timelimit");
	CurrentRespawns = str_to_num(monster_data[CurrentDay][5]);
	DeveloperDay = 0;
	g_status_sync = CreateHudSyncObj()
	set_task(1.0, "waiting_elfs", TASK_COUNT, _, _, "b");
	set_task(1.0, "checkstuck", 0, "", 0, "b");
	server_cmd("mp_tkpunish 0;mp_autokick 0");
	g_msg_fog = get_user_msgid("Fog");
	
	if(!g_pcvar_no_objectives) 
	{
		new cvar_defval[8];
		get_flags(REMOVE_OBJECTIVES, cvar_defval, sizeof cvar_defval - 1);
		register_cvar(ZOMBIE_OBJECTIVES, cvar_defval);
	}
	
	if(is_objective_map())
		return;
}

public plugin_precache() 
{
	if((g_pcvar_no_objectives = get_cvar_pointer(ZOMBIE_OBJECTIVES))) 
	{
		new cvar_val[8]
		get_pcvar_string(g_pcvar_no_objectives, cvar_val, sizeof cvar_val - 1)
		g_no_objectives = read_flags(cvar_val) & REMOVE_OBJECTIVES
	}
	
	if(g_no_objectives)
		register_forward(FM_Spawn, "forward_spawn");
	
	g_fxbeam = precache_model("sprites/laserbeam.spr");
	beamsprite = precache_model("sprites/dot.spr");
	smoke = precache_model("sprites/steam1.spr");
	precache_model("models/chick.mdl");
	precache_model(g_powder_box);
	precache_sound("weapons/electro5.wav");
	precache_sound("weapons/xbow_hitbod2.wav");
	precache_model(g_present_box);
	precache_model(g_boss_chest);
	precache_model(defender_models);
	precache_sound(ent_sound_dance);
	precache_model(g_flare_model);
	precache_sound("ambience/rain.wav");
	precache_sound("ambience/thunder_clap.wav");
	weather_ent = CREATE_ENTITY("env_rain");
	THINK("env_rain", "WeatherSystem");
	NEXTTHINK(weather_ent, 1.0);
	sprite_playerheat = precache_model("sprites/poison.spr");
	g_Lightning = precache_model("sprites/lgtning.spr");
	sync_hud = CreateHudSyncObj();
	event_sync = CreateHudSyncObj();
	precache_sound(ENT_SOUND1);
	precache_sound(ENT_SOUND3);
	precache_sound(ENT_SOUND2);
	precache_sound(ENT_SOUND4);
	precache_sound(ENT_SOUND5);
	precache_sound(ENT_SOUND6);
	precache_sound(ENT_SOUND7);
	precache_model(ENT_MODELS);
	precache_sound("vox/_comma.wav");
	switch(random_num(1, 5))
	{
		case 1: server_cmd("sv_skyname xen9");
		case 2: server_cmd("sv_skyname alien1");
		case 3: server_cmd("sv_skyname alien2");
		case 4: server_cmd("sv_skyname alien3");
		case 5: server_cmd("sv_skyname neb6");
	}
	
	he_exp = precache_model("sprites/monster_invasion/newexp.spr");
	precache_model(modelaurora);
	
	new i;
	stargib = precache_model("sprites/monster_invasion/fire_gib.spr");
	g_iflames = precache_model(g_sprflame);
	for(i = 0; i < sizeof eventrsc; i++)
		precache_sound(eventrsc);
		
	for(i = 0; i < sizeof knife_hero; i++)
		precache_model(knife_hero);
	
	for(i = 0; i < sizeof special_weapons; i++)
	{
		precache_model(special_weapons[2]);
		precache_model(special_weapons[3]);
	}
		
	for(i = 0;i < 5;i++)
	{
		formatex(damage_spr[0], charsmax(damage_spr[][]), "sprites/monster_invasion/Digit_0%d.spr", i + 1)
		if( !file_exists(damage_spr[0]))
		{
			server_print("Check the sprite...%s...halting to prevent crash.",damage_spr[i][0]);
			pause( "a" );
		}
		else
		precache_model(damage_spr[i][0])

		formatex(damage_spr[i][1], charsmax(damage_spr[][]), "sprites/monster_invasion/CritDigit_0%d.spr", i + 1)
		if( !file_exists(damage_spr[i][1]))
		{
			server_print("Check the sprite...%s...halting to prevent crash.",damage_spr[i][1]);
			pause( "d" );
		}
		else
		precache_model(damage_spr[i][1])
	}

	for(i = 0; i < sizeof miss_sounds; i++)
		precache_sound(miss_sounds[i]);
		
	for(i = 0; i < sizeof hit_sounds; i++)
		precache_sound(hit_sounds[i]);
	
	for(i = 0; i < sizeof killingsounds; i++)
		precache_sound(killingsounds[i]);
		
	precache_model(santa_models);
	
	for(i = 1; i < sizeof join_sounds_vip; i++)
		precache_sound(join_sounds_vip[i][1]);
		
	precache_sound("hassault/hw_spindown.wav")
	precache_sound("test/rg_build_1.wav")
	g_iBeam = precache_model(Mine_Sprite_Laser)
	for(i = 0; i < sizeof sounds_frost; i++)
		precache_sound(sounds_frost[i]);
		
	for(i = 0; i < sizeof soundskills; i++)
		precache_sound(soundskills[i]);
		
	for(i = 0; i < sizeof radionew; i++)
		precache_sound(radionew[i]);

	for(i = 0; i < sizeof secondrdnew; i++)
		precache_sound(secondrdnew[i]);

	for(i = 0; i < sizeof countnumbers; i++)
		precache_sound(countnumbers[i]);
		
	for(i = 0; i < sizeof sprites_frost; i++)
		g_frost_spr[i] = precache_model(sprites_frost[i]);

	spr_blast_shroom = precache_model("sprites/mushroom.spr");

	for(i = 0; i < sizeof christmas_new_sounds; i++)
		precache_sound(christmas_new_sounds[i]);

	for(i = 0; i < sizeof weapon_models; i++)
		precache_model(weapon_models[i]);
		
	for(i = 0; i < sizeof vip_models_res; i++)
		precache_model(vip_models_res[i]);
	
	for(i = 0; i < sizeof monsters_sounds; i++)
	{
		for(new x = 0; x < 9; x++)
			precache_sound(monsters_sounds[i][x]);
	}
	
	for(i = 1; i < sizeof effectsname; i++)
		g_spr_res[i] = precache_model(effectsname[i][1]);
		
	precache_sound(vip_sounds_res);
	precache_model(ice_model);
	flame = precache_model("sprites/xfireball3.spr");
	new model_santa[128];
	
	for(i = 0; i < sizeof knife_belea; i++)
	{
		formatex(model_santa, charsmax(model_santa), "models/monster_invasion/p_%s.mdl", knife_belea[i][1]);
		precache_model(model_santa);
		formatex(model_santa, charsmax(model_santa), "models/monster_invasion/v_%s.mdl", knife_belea[i][1]);
		precache_model(model_santa);
	}

	for(i = 0; i < sizeof real_player_models; i++)
	{
		formatex(model_santa, charsmax(model_santa), "models/player/%s/%s.mdl", real_player_models[i], real_player_models[i]);
		precache_model(model_santa);
		copy(model_santa[strlen(model_santa)-4], charsmax(model_santa) - (strlen(model_santa)-4), "T.mdl")
		if(file_exists(model_santa))
			precache_model(model_santa);
	}
	
	for(i = 1; i < sizeof monster_player_models; i++)
	{
		formatex(model_santa, charsmax(model_santa), "models/player/%s/%s.mdl", monster_player_models[i], monster_player_models[i]);
		precache_model(model_santa);
		copy(model_santa[strlen(model_santa)-4], charsmax(model_santa) - (strlen(model_santa)-4), "T.mdl")
		if(file_exists(model_santa))
			precache_model(model_santa);
	}
	
	for(i = 1; i < sizeof skin_precache; i++)
	{
		formatex(model_santa, charsmax(model_santa), "models/player/%s/%s.mdl", skin_precache[i], skin_precache[i]);
		precache_model(model_santa);
		copy(model_santa[strlen(model_santa)-4], charsmax(model_santa) - (strlen(model_santa)-4), "T.mdl")
		if(file_exists(model_santa))
			precache_model(model_santa);
	}
}

public plugin_natives()
	put_natives();

public plugin_cfg()
{
	ROGInitialize(250.0);
	g_Entity_robo = engfunc(EngFunc_AllocString, "func_breakable");
	g_EntMine = engfunc(EngFunc_AllocString, ENT_CLASS_NAME3);
	arrayset(g_havemine, 0, sizeof(g_havemine));
	arrayset(g_deployed, 0, sizeof(g_deployed));
	new iEntity = FM_NULLENT;
	
	while((iEntity = find_ent_by_class(iEntity, "env_snow")))
	{
		if(pev_valid(iEntity))
			UTIL_RemoveEntities("env_snow");
	}
	
	set_task(30.0, "gothunder", _, _, _, "b");
	new sConfigsDir[64], sFile[64];
	get_datadir(sConfigsDir, charsmax(sConfigsDir));
	
	new sMapName[32];
	get_mapname(sMapName, charsmax(sMapName));
	
	new sFileOrigin[3][32], sFileAngles[3][32], iLine, iLength, sBuffer[256], sTemp1[128], sTemp2[128];
	new Float:fOrigin[3], Float:fAngles[3];
	formatex(sFile, charsmax(sFile), "%s/santa/%s_santa.cfg", sConfigsDir, sMapName);
	
	if(!file_exists(sFile))
		return 1;
		
	while(read_file(sFile, iLine++, sBuffer, charsmax(sBuffer), iLength))
	{
		if((sBuffer[0]==';') || !iLength)
			continue;
		
		strtok(sBuffer, sTemp1, charsmax(sTemp1), sTemp2, charsmax(sTemp2), '|', 0);
		
		parse(sTemp1, sFileOrigin[0], charsmax(sFileOrigin[]), sFileOrigin[1], charsmax(sFileOrigin[]), sFileOrigin[2], charsmax(sFileOrigin[]));
		
		fOrigin[0] = str_to_float(sFileOrigin[0]);
		fOrigin[1] = str_to_float(sFileOrigin[1]);
		fOrigin[2] = str_to_float(sFileOrigin[2]);
		
		parse(sTemp2, sFileAngles[0], charsmax(sFileAngles[]), sFileAngles[1], charsmax(sFileAngles[]), sFileAngles[2], charsmax(sFileAngles[]));
		
		fAngles[0] = str_to_float(sFileAngles[0]);
		fAngles[1] = str_to_float(sFileAngles[1]);
		fAngles[2] = str_to_float(sFileAngles[2]);
		
		g_coord_santa[0] = fOrigin[0];
		g_coord_santa[1] = fOrigin[1];
		g_coord_santa[2] = fOrigin[2];
		
		g_angles_santa[0] = fAngles[0];
		g_angles_santa[1] = fAngles[1];
		g_angles_santa[2] = fAngles[2];
		g_totalspawns++;
	}
	set_task(1.5, "check_spawns_for_santa");
	return 1;
}

public check_spawns_for_santa()
{
	if(is_playable())
		spawn_santa();
}

public gothunder()
{
	UTIL_RemoveEntities("present_ent");
	new Float:Origin[3];
	ROGGetOrigin(Origin);
	addPresent(Origin);
	is_thunder = 0;
	thunderboom();
	color(0, "^4%s^1 %s", TAG, hints[random_num(0, sizeof hints-1)][1]);
}

public thunderboom()
{
	if(is_thunder != 100)
	{
		engfunc(EngFunc_LightStyle, 0, thunderlight[is_thunder]);
		is_thunder++;
		
		if(is_thunder == (strlen(thunderlight) - 1))
			is_thunder = 100, engfunc(EngFunc_LightStyle, 0, monster_data[CurrentDay][8]);
		set_task(0.05, "thunderboom");
	}
}

public clear_data()
{
	g_coord_santa[0] = 0.0;
	g_coord_santa[1] = 0.0;
	g_coord_santa[2] = 0.0;
	g_angles_santa[0] = 0.0;
	g_angles_santa[1] = 0.0;
	g_angles_santa[2] = 0.0;
}

public remove_godplayer(id)
{
	if(!get_bit(g_isloaded, id))
	{
		return;
	}
	set_user_godmode(id, 0);
	client_print(id, print_center, "YOU ARE NOT LONGER PROTECTED!");
}

public give_bonus(id)
{
	switch(random_num(0, 2))
	{
		case 0:
		{
			new bonusward = random_num(5, 10);
			color(0, "^4%s^3 %s^1 got^3 %d powder^1 from box!", TAG, g_playername[id], bonusward);
			g_powder[id] += bonusward;
		}
		case 1:
		{
			new bonusxp = random_num(6, 12);
			color(0, "^4%s^3 %s^1 got^3 %d experience^1 from box!", TAG, g_playername[id], bonusxp);
			check_level(id, bonusxp, 0);
		}
		case 2:
		{
			new bonusxp = random_num(6, 12);
			color(0, "^4%s^3 %s^1 got^3 %d gold^1 from box!", TAG, g_playername[id], bonusxp);
			check_level(id, 0, bonusxp);
		}
	}
}

public addItem(origin[3])
{
	new ent = fm_create_entity("info_target")
	set_pev(ent, pev_classname, item_class_name)
	
	engfunc(EngFunc_SetModel, ent, g_powder_box)

	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_FLY);
	engfunc(EngFunc_DropToFloor, ent);
	
	new Float:fOrigin[3]
	IVecFVec(origin, fOrigin)
	set_pev(ent, pev_origin, fOrigin)
	
	set_pev(ent,pev_renderfx,kRenderFxGlowShell)
	switch(random_num(1,4))
	{
		case 1: set_pev(ent,pev_rendercolor,Float:{0.0,0.0,255.0})
		case 2: set_pev(ent,pev_rendercolor,Float:{0.0,255.0,0.0})
		case 3: set_pev(ent,pev_rendercolor,Float:{255.0,0.0,0.0})
		case 4: set_pev(ent,pev_rendercolor,Float:{255.0,255.0,255.0})
	}
}

public addBossChest(origin[3])
{
	new ent = fm_create_entity("info_target")
	set_pev(ent, pev_classname, "bosschest");
	
	engfunc(EngFunc_SetModel, ent, g_boss_chest)

	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_FLY);
	set_pev(ent, pev_effects, EF_BRIGHTLIGHT)
	set_pev(ent, pev_flare,   flare_id)
	set_pev(ent, pev_nextthink, get_gametime() + 126.6);
	engfunc(EngFunc_DropToFloor, ent);
	
	new Float:fOrigin[3]
	IVecFVec(origin, fOrigin)
	set_pev(ent, pev_origin, fOrigin)
	
	set_pev(ent,pev_renderfx,kRenderFxGlowShell)
	switch(random_num(1,4))
	{
		case 1: set_pev(ent,pev_rendercolor,Float:{0.0,0.0,255.0})
		case 2: set_pev(ent,pev_rendercolor,Float:{0.0,255.0,0.0})
		case 3: set_pev(ent,pev_rendercolor,Float:{255.0,0.0,0.0})
		case 4: set_pev(ent,pev_rendercolor,Float:{255.0,255.0,255.0})
	}
}

public addPresent(Float:origin[3])
{
	new ent = fm_create_entity("info_target")
	set_pev(ent, pev_classname, "present_ent");
	
	engfunc(EngFunc_SetModel, ent, g_present_box);

	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_FLY);
	engfunc(EngFunc_DropToFloor, ent);
	
	set_pev(ent, pev_origin, origin);
}

public main_menu_items(id)
{
	if(!cs_get_user_team(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR)
		return PLUGIN_CONTINUE;
	
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\r%s", server_name);
	menu = menu_create(menu_item, "main_menu_handler");
	for(new i = 0; i < sizeof principal_server_menu; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s", principal_server_menu[i]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public main_menu_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			for(new i = 0; i < sizeof string_weapons_menu; i++)
				ham_strip_weapon(id, string_weapons_menu[i][1]);
			g_have_weapon[id] = false;
			g_weaponselected[id] = -1;
			select_weapons(id);
		}
		case 1: open_classmenu(id);
		case 2:
		{
			new izStats[8], izBody[8], iRankPos, iRankMax;
			iRankPos = get_user_stats(id, izStats, izBody);
			iRankMax = get_statsnum();
			color(0, "^4%s^3 %s^1 got rank^3 %d^1/^3%d^1 with^3 %d^1 kills and^3 %d^1 deaths!", TAG, g_playername[id], iRankPos, iRankMax, izStats[0], izStats[1]);
			open_topmenu(id);
		}
		case 3: open_shop_menu(id);
		case 4: open_skin_menu(id);
		case 5: reset_your_score(id);
		case 6: cyby_open_adminlist(id);
		case 7: show_benefits_menu(id);
		case 8: open_quests_menu(id);
		case 9: status_menu_points(id);
		case 10: show_round_best(id);
		case 11: firstmenu_skin(id);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

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

public firstmenu_skin(id)
{
	if(!cs_get_user_team(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR)
		return PLUGIN_CONTINUE;
	
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rWeapon Skins and Daily Quests^n\wYou have: %d Daily Coins", g_daily_coin[id]);
	menu = menu_create(menu_item, "firstmenu_skin_handler");
	for(new i = 0; i < sizeof weapon_skin_menu; i++)
	{
		if(i == 4)
			formatex(menu_item, charsmax(menu_item), "\y%s [\wOpen %d\y]", weapon_skin_menu[i], g_chests[id]);
		else
			formatex(menu_item, charsmax(menu_item), "\y%s", weapon_skin_menu[i]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public firstmenu_skin_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:	trade_menu_skin(id);
		case 1: daily_missions_menu(id);
		case 2: buy_chest(id);
		case 3: open_chest(id, 1);
		case 4: open_chest(id, 2)
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public trade_menu_skin(id)
{
	if(!cs_get_user_team(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR)
		return PLUGIN_CONTINUE;
	
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rYour Skins^n\wYou can trade them for Daily Coins", g_daily_coin[id]);
	menu = menu_create(menu_item, "trademenu_handler");
	new sum = 2;
	for(new i = 0; i < sizeof special_weapons; i++)
	{
		if(i != 0)
		{
			sum = i * 2;
			formatex(menu_item, charsmax(menu_item), "\y%s \r[%d Owned]-\w %d Daily Coins", special_weapons[i][0], g_weapon_skin[id][i], sum);
		}
		else
			formatex(menu_item, charsmax(menu_item), "\y%s \r[%d Owned]-\w %d Daily Coins", special_weapons[i][0], g_weapon_skin[id][i], sum);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public trademenu_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new sum = 2;
	for(new i = 0; i < sizeof special_weapons; i++)
	{
		if(item == i)
		{
			if(i != 0)
				sum = i * 2;
			if(g_weapon_skin[id][i])
			{
				color(id, "^4%s^1 You sold^3 %s^1 for^3 Daily Coins^1", TAG, special_weapons[item][0], sum);
				g_weapon_skin[id][i]--;
				g_daily_coin[id] += sum;
			}
			else
				color(id, "^4%s^1 You don't have any this skin to trade!", TAG);
			break;
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public daily_missions_menu(id)
{
	if(!cs_get_user_team(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR)
		return PLUGIN_CONTINUE;
	
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100], tasta[2], z, l, a;
	date(a, l, z);
	formatex(menu_item, charsmax(menu_item), "\rDaily Missions^nDate: %d.%d.%d", a, l, z);
	menu = menu_create(menu_item, "dailymissions_handler");
	for(new i = 0; i < sizeof daily_missions; i++)
	{
		if(g_daily_missions[id][i] == str_to_num(daily_missions[i][1]))
			formatex(menu_item, charsmax(menu_item), "\y%s\w [COMPLETED]", daily_missions[i][0]);
		else
			formatex(menu_item, charsmax(menu_item), "\y%s\w [%d/%d]", daily_missions[i][0], g_daily_missions[id][i], str_to_num(daily_missions[i][1]));
		
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public dailymissions_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	color(0, "^4%s^3 %s^1 got^4 %s^3 [%d/%d]^1", TAG, g_playername[id], daily_missions[item][0], g_daily_missions[id][item], str_to_num(daily_missions[item][1]));
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public buy_chest(id)
{
	if(g_daily_coin[id] >= 6)
	{
		color(id, "^4%s^1 You bought^3 Chest^1 with^4 6 Daily Coins^1", TAG);
		g_daily_coin[id] -= 6;
		g_chests[id] += 1;
	}
	else
		color(id, "^4%s^1 You don't have enough^3 Daily Coins^1 to buy a Chest!", TAG);
}

public open_chest(id, many)
{
	if(many == 1)
	{
		if(g_chests[id])
		{
			new winner_winner = 0;
			switch(random_num(1, 10))
			{
				case 1: winner_winner = random_num(0, 1);
				case 2: winner_winner = random_num(0, 2);
				case 3: winner_winner = random_num(0, 6);
				case 4: winner_winner = random_num(0, 7);
				case 5: winner_winner = random_num(0, 7);
				case 6: winner_winner = random_num(0, 8);
				case 7: winner_winner = random_num(0, 9);
				case 8: winner_winner = random_num(0, 10);
				case 9: winner_winner = random_num(0, 10);
				case 10: winner_winner = random_num(0, 11);
			}
			color(id, "^4%s^1 You win from^3 Chest^4 %s^1!", TAG, special_weapons[winner_winner][0]);
			g_chests[id]--;
			g_weapon_skin[id][winner_winner]++;
		}
		else
			color(id, "^4%s^1 You don't have any^3 Chest^1!", TAG);
	}
	else
	{
		if(g_chests[id])
		{
			while(g_chests[id])
			{	
				new winner_winner = 0;
				switch(random_num(1, 10))
				{
					case 1: winner_winner = random_num(0, 1);
					case 2: winner_winner = random_num(0, 2);
					case 3: winner_winner = random_num(0, 3);
					case 4: winner_winner = random_num(0, 4);
					case 5: winner_winner = random_num(0, 5);
					case 6: winner_winner = random_num(0, 6);
					case 7: winner_winner = random_num(0, 7);
					case 8: winner_winner = random_num(0, 7);
					case 9: winner_winner = random_num(0, 9);
					case 10: winner_winner = random_num(0, 11);
				}
				g_chests[id]--;
				g_weapon_skin[id][winner_winner]++;
			}
			color(id, "^4%s^1 You opened all chests!", TAG);
		}
		else
			color(id, "^4%s^1 You don't have any^3 Chest^1!", TAG);
	}
}

public status_menu_points(id)
{
	if(!cs_get_user_team(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR)
		return PLUGIN_CONTINUE;
	
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rStatus Points^nTotal status points left: %d", g_status_points[id]);
	menu = menu_create(menu_item, "menu_points_handler");
	for(new i = 0; i < sizeof status_strings; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s +%d \w[%d/%d]", status_strings[i][0], str_to_num(status_strings[i][2]), g_status_player[id][i], str_to_num(status_strings[i][1]));
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public menu_points_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(g_status_points[id] < 1)
	{
		color(id, "^4%s^1 You don't have any status points available!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(g_status_player[id][item] >= str_to_num(status_strings[item][1]))
	{
		color(id, "^4%s^1 You can't have more^3 %s^1!", TAG, status_strings[item][0]);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0 .. 3:
		{
			color(id, "^4%s^1 You put^3 1 status point on %s^1! This will increase with^3 %d %s^1!", TAG, status_strings[item][0], str_to_num(status_strings[item][2]), status_strings[item][0]);
			g_status_player[id][item]++;
			g_status_points[id]--;
			menu_destroy(menu);
			status_menu_points(id);
			return PLUGIN_HANDLED;
		}
		case 4:
		{
			if(g_attack_items[id] & ULTRABULLETS)
			{
				color(id, "^4%s^1 You put^3 1 status point on %s^1! This will increase with^3 %d %s^1!", TAG, status_strings[item][0], str_to_num(status_strings[item][2]), status_strings[item][0]);
				g_status_player[id][item]++;
				g_status_points[id]--;
				menu_destroy(menu);
				status_menu_points(id);
				return PLUGIN_HANDLED;
			}
			else
			{
				color(id, "^4%s^1 You don't have^3 Critical Chance Attack Item^1!", TAG);
				menu_destroy(menu);
				status_menu_points(id);
				return PLUGIN_HANDLED;
			}
		}
		case 5:
		{
			if(g_defence_items[id] & BESTPIE)
			{
				color(id, "^4%s^1 You put^3 1 status point on %s^1! This will increase with^3 %d %s^1!", TAG, status_strings[item][0], str_to_num(status_strings[item][2]), status_strings[item][0]);
				g_status_player[id][item]++;
				g_status_points[id]--;
				menu_destroy(menu);
				status_menu_points(id);
				return PLUGIN_HANDLED;
			}
			else
			{
				color(id, "^4%s^1 You don't have^3 Best Pie Defence Item^1!", TAG);
				menu_destroy(menu);
				status_menu_points(id);
				return PLUGIN_HANDLED;
			}
		}
		case 6:
		{
			if(g_vip_items[id] & SANTAKNIFE)
			{
				color(id, "^4%s^1 You put^3 1 status point on %s^1! This will increase with^3 %d %s^1!", TAG, status_strings[item][0], str_to_num(status_strings[item][2]), knife_belea[g_currentknife[id]][0]);
				g_status_player[id][item]++;
				g_status_points[id]--;
				menu_destroy(menu);
				status_menu_points(id);
				return PLUGIN_HANDLED;
			}
			else
			{
				color(id, "^4%s^1 You don't have^3 Knife Menu^1!", TAG);
				menu_destroy(menu);
				status_menu_points(id);
				return PLUGIN_HANDLED;
			}
		}
		case 7:
		{
			if(g_attack_items[id] & BESTXM1014)
			{
				color(id, "^4%s^1 You put^3 1 status point on %s^1! This will increase with^3 %d %s^1!", TAG, status_strings[item][0], str_to_num(status_strings[item][2]), status_strings[item][0]);
				g_status_player[id][item]++;
				g_status_points[id]--;
				menu_destroy(menu);
				status_menu_points(id);
				return PLUGIN_HANDLED;
			}
			else
			{
				color(id, "^4%s^1 You don't have^3 Lasermine Attack Item^1!", TAG);
				menu_destroy(menu);
				status_menu_points(id);
				return PLUGIN_HANDLED;
			}
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public shop_menu_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(g_ishero[id])
	{
		color(id, "^4%s^1 You can't use this!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	switch(item)
	{
		case 0: open_items_menu(id);
		case 1: open_g_attack_items(id);
		case 2: open_powers_menu(id);
		case 3: open_vip_items(id);
		case 4: main_menu_powder(id);
		case 5:
		{
			if(cs_get_user_money(id) < 16000)
			{
				color(id, "^4%s^1 You need^3 16000$^1 to convert in Gold!", TAG);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			else
			{
				cs_set_user_money(id, 0, 1);
				g_points[id] += 50;
				menu_destroy(menu);
				color(id, "^4%s^1 You convert successfully^3 16000$^1 into^3 50 Gold^1!", TAG);
				return PLUGIN_HANDLED;
			}
		}
		case 6:
		{
			if(g_points[id] < 200)
				color(id, "^4%s^1 You don't have enough Gold to buy EXP!", TAG);
			else
				g_points[id] -= 200, check_level(id, 100, 0), color(id, "^4%s^1 You bought^3 100 EXP^1 for^3 200 Gold^1", TAG);
		}
		case 7: transform_in_hero(id);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_shop_menu(id)
{
	if(!cs_get_user_team(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR)
		return PLUGIN_CONTINUE;
	
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
	
	if(g_ishero[id])
	{
		color(id, "^4%s^1 You can't use this!", TAG);
		return PLUGIN_HANDLED;
	}
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rGold: %d", g_points[id]);
	menu = menu_create(menu_item, "shop_menu_handler");
	for(new i = 0; i < sizeof shop_items_menu; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s", shop_items_menu[i]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public open_topmenu(id)
{
	new menu = menu_create("\rTop 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)
{
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public client_authorized(id)
{
	g_using_benefits[id] = 0;
	formatex(g_tag_chat[id], charsmax(g_tag_chat[]), "");
	formatex(g_msg_in[id], charsmax(g_msg_in[]), "");
	formatex(g_msg_out[id], charsmax(g_msg_out[]), "");
	formatex(g_deathnote[id], charsmax(g_deathnote[]), "");
	g_entering_sound[id] = 0;
	set_bit(g_is_authed, id);
}

public reset_your_score(id) 
{
	if(!is_user_alive(id))
		return 1;
	
	for(new i = 0; i < 2; i++)
	{
		cs_set_user_deaths(id, 0);
		set_user_frags(id, 0);
	}
	
	color(0, "^4%s^3 %s^1 has just reset his score.", TAG, g_playername[id]);
	return 1;
}

public OnTouchSanta(ent, id)
{
	if(is_valid_ent(ent) && is_user_connected(id))
	{
		if(!is_user_alive(id)) 
			return PLUGIN_CONTINUE;
			
		if(cs_get_user_team(id) != CS_TEAM_CT || g_gotpowder[id])
			return PLUGIN_CONTINUE;
		
		g_gotpowder[id] = true, color(id, "^4%s^1 You got^3 2 powder^1 as reward!", TAG), g_powder[id] += 2;
	}
	return PLUGIN_CONTINUE;
}

public waiting_elfs()
{
	if(countdown)
	{
		set_dhudmessage(170, 170, 255, -1.0, 0.13, 0, 0.9, 0.0);
		show_dhudmessage(0, "Waiting for players to connect... (%d second%s left)", countdown, countdown == 1 ? "" : "s");
		countdown--;
	}
	else
	{
		remove_task(TASK_COUNT);
		waiting = false;
		server_cmd("sv_restart 1");
	}
}

public plugin_end()
	clear_data();

public client_impulse(id, impulse) 
{ 
	if(impulse == 201)
	{
		if(is_user_alive(id) && (g_defence_items[id] & CAMP_NADE))
		{
			if(g_used_shield[id])
			{
				color(id, "^4%s^1 You used the Regen Area this round already", TAG);
				return PLUGIN_HANDLED;
			}
			new plflags = pev(id, pev_flags);
			if(plflags & FL_ONGROUND)
			{
				if(!(plflags & FL_DUCKING))
				{
					do_a_shield(id);
					g_used_shield[id] = true;
					client_print(id, print_center, "You got an protection zone in your area");
				}
				else
					client_print(id, print_center, "You can't deploy Regen Area while ducking!");
			}
			else
				client_print(id, print_center, "You can deploy Regen Area only on the floor!");
			return PLUGIN_HANDLED;
		}
		return PLUGIN_HANDLED;
	}
	
	if(impulse == 100)
	{
		if(is_user_bot(id))
		{
			set_pev(id, pev_impulse, 0);
			return PLUGIN_HANDLED;
		}
		else
		{
			if(!is_user_alive(id))
				return PLUGIN_CONTINUE;
			
			return PLUGIN_HANDLED;
		}
		return PLUGIN_CONTINUE;
	}
	
	return PLUGIN_CONTINUE;
}

public Event_RoundStart() 
{
	g_win = 0;
	g_currentroundtime = 0;
	g_endround = false;
	g_firstblood = true;
	set_fog(200, 0, 0);
	ROGInitialize(250.0);
	set_task(1.0, "bot_cfg");
	if(waiting)
	{
		set_lights("");
		color(0, "^4%s^1 We wait for other players...", TAG);
		return;
	}
	
	if(DeveloperDay > 0)
	{
		CurrentDay = DeveloperDay;
		DeveloperDay = 0;
		set_lights(monster_data[CurrentDay][8]);
		color(0, "^4%s^3 %s^1 This night was started by^3 owner^1!", TAG, name_days[CurrentDay]);
		StartEvent(CurrentDay);
		return;
	}
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || is_user_bot(i))
			continue;
			
		g_used_shield[i] = false;
		g_gotpowder[i] = false;
		g_roundkills[i] = 0;
		g_rounddamage[i] = 0;
		g_roundspent[i] = 0;
	}
	set_lights(monster_data[CurrentDay][8]);
	sound_stop();
	StartEvent(CurrentDay);
	return;
}

public bot_cfg()
{
	server_cmd("pb_minbots 10");
	server_cmd("pb_maxbots 10");
	server_cmd("pb_bot_quota_match 10");
	server_cmd("pb_mapstartbotdelay 20.0");
	server_cmd("pb_bot_join_team T");
	server_cmd("pb_minbotskill 100");
	server_cmd("pb_maxbotskill 100");
	server_cmd("pb_jasonmode 1");
	server_cmd("pb_detailnames 0");
	server_cmd("pb_chat 0");
	server_cmd("pb_radio 0");
	server_cmd("pb_aim_type 1");
	server_cmd("csstats_rankbots 1");
}

public death_msg()
{
	new attacker = read_data(1), victim = read_data(2), hs = read_data(3), weapon_name[33];
	if(g_bTrail[victim])
		DeleteTrail(victim);
	
	if(!is_user_bot(attacker))
	{
		read_data(4, weapon_name, charsmax(weapon_name));
		if(equal(weapon_name, "knife"))
			g_quest_data[attacker][6]++, client_cmd(0, "spk ^"%s^"", killingsounds[0]);
		else
		{
			if(hs)
				g_quest_data[attacker][5]++;
		}
	}
	
	if(is_user_bot(victim))
		remove_task(victim+TASK_BURN);
}

public deathmsg(victim, attacker, shouldgib)
{	
	if(is_user_connected(victim))
	{
		if(is_user_bot(victim) && !g_endround)
		{
			if(CurrentRespawns > 0)
			{
				CurrentRespawns--;
				set_task(0.30, "respawn_player", victim);
			}
			client_reset(victim, 1, 0);
			if(is_user_connected(attacker) && attacker != victim)
				g_roundkills[attacker]++;
		}
		
		if(CurrentRespawns < 1 && !g_deleted)
		{
			g_deleted = true;
			UTIL_RemoveEntities("RobotTurret");
			for(new id = 1; id <= g_maxplayers; id++)
			{
				if(!is_user_bot(id))
					RemoveAllTripmines(id);
			}
		}
		if(get_alives(1) == 1 && id_special != get_boss_id())
		{
			id_special = get_boss_id();
			if(is_user_alive(id_special))
			{
				make_boss_monster(id_special);
				set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
				ShowSyncHudMsg(0, event_sync, "The Special %s appeared... Take care of him!", monster_data[CurrentDay][0]);
				emit_sound(id_special, CHAN_WEAPON, christmas_new_sounds[7], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
				UTIL_RemoveEntities("RobotTurret");
				for(new id = 1; id <= g_maxplayers; id++)
				{
					if(!is_user_bot(id))
						RemoveAllTripmines(id)
				}
			}
			set_task(0.1, "boss_aura", id_special+TASK_AURA, _, _, "b")
			sound_stop();
			PlaySound(christmas_new_sounds[3]);
		}
		
		if(victim == id_special)
		{
			new rewardgold = CurrentDay * 100;
			new origin[3];
			get_user_origin(id_special, origin);
			addBossChest(origin);
			
			new rewardexperience = CurrentDay * 50;
			color(0, "^4%s^3 %s^1 is rewarded with^3 %d Gold^1 and^3 %d Experience^1 for killing^4 %s Boss^1", TAG, g_playername[attacker], rewardgold, rewardexperience, monster_data[CurrentDay][0]);
			check_level(attacker, rewardexperience, rewardgold);
			if(!g_daily_missions[attacker][4])
				g_daily_missions[attacker][4]++, g_daily_coin[attacker] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[attacker], daily_missions[4][0]);
		}
		
		if(is_user_bot(attacker))
		{
			emit_sound(attacker, CHAN_VOICE, eventrsc[random_num(0, 1)], 1.0, ATTN_NORM, 0, PITCH_NORM);
			set_user_health(attacker, get_user_health(attacker) + str_to_num(monster_data[CurrentDay][1]));
		}
		
		if(is_user_bot(victim) && CurrentRespawns)
		{
			if(victim != id_special && is_user_bot(victim))
			{
				switch(g_human_class[attacker][0])
				{
					case 2: check_level(attacker, str_to_num(monster_data[CurrentDay][7]) * g_evolution, 0);
					case 4: check_level(attacker, 0, str_to_num(monster_data[CurrentDay][6]) * g_evolution);
				}
			}
		}
		
		if(!is_user_bot(attacker) && random_num(0, 20) == 0)
		{
			new origin[3];
			get_user_origin(victim, origin, 0);
			addItem(origin);
		}
		
		g_respawn_time[victim] = CurrentDay * 5;
		if(g_defence_items[victim] & LASTHOPE)
			g_respawn_time[victim] = floatround(g_respawn_time[victim] / 2.0);
		
		check_level(attacker, str_to_num(monster_data[CurrentDay][7]) * g_evolution, str_to_num(monster_data[CurrentDay][6]) * g_evolution);
		g_kills[attacker]++;
		g_kills[victim] = 0;
		if(!g_daily_missions[victim][5] && !is_user_bot(victim))
		{
			g_daily_missions[victim][5]++, g_daily_coin[victim] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[victim], daily_missions[5][0]);
		}
			
		if(g_firstblood)
		{
			g_firstblood = false;
			set_hudmessage(102, 255, 255, -1.0, 0.10, 1, 5.1, 5.0);
			ShowSyncHudMsg(0, event_sync, "%s made the first blood and got 125 Gold", g_playername[attacker]);
			g_points[attacker] += 125;
		}
		if(g_daily_missions[attacker][2] != str_to_num(daily_missions[2][1]))
		{
			if(g_daily_missions[attacker][2] + 1 == str_to_num(daily_missions[2][1]))
				g_daily_coin[attacker] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[attacker], daily_missions[2][0]);
				
			g_daily_missions[attacker][2]++;
		}
			
		switch(g_kills[attacker])
		{
			case 10:
			{
				set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
				ShowSyncHudMsg(0, event_sync, "%s is struggling to save the world...", g_playername[attacker]);
				g_points[attacker] += 15;
				client_cmd(0, "spk ^"%s^"", killingsounds[1]);
			}
			case 25:
			{
				set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
				ShowSyncHudMsg(0, event_sync, "%s his hope is great...", g_playername[attacker]);
				g_points[attacker] += 20;
				client_cmd(0, "spk ^"%s^"", killingsounds[2]);
			}
			case 50:
			{
				set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
				ShowSyncHudMsg(0, event_sync, "%s doesn't want this world to end...", g_playername[attacker]);
				g_points[attacker] += 25;
				client_cmd(0, "spk ^"%s^"", killingsounds[3]);
			}
			case 70:
			{
				set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
				ShowSyncHudMsg(0, event_sync, "%s his instincts are the best...", g_playername[attacker]);
				g_points[attacker] += 30;
				client_cmd(0, "spk ^"%s^"", killingsounds[4]);
			}
			case 100:
			{
				
				g_points[attacker] += 50;
				client_cmd(0, "spk ^"%s^"", killingsounds[5]);
				if(g_deathnote[attacker][0])
				{
					set_dhudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 7.1, 7.0);
					show_dhudmessage(0, "%s - %s", g_playername[attacker], g_deathnote[attacker]);
				}
				else
				{
					set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
					ShowSyncHudMsg(0, event_sync, "%s wants to be the best...", g_playername[attacker]);
				}
			}
			case 150:
			{
				
				g_points[attacker] += 50;
				client_cmd(0, "spk ^"%s^"", killingsounds[5]);
				if(g_deathnote[attacker][0])
				{
					set_dhudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 7.1, 7.0);
					show_dhudmessage(0, "%s - %s", g_playername[attacker], g_deathnote[attacker]);
				}
				else
				{
					set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
					ShowSyncHudMsg(0, event_sync, "%s wants to be the best...", g_playername[attacker]);
				}
			}
			case 200:
			{
				
				g_points[attacker] += 50;
				client_cmd(0, "spk ^"%s^"", killingsounds[5]);
				if(g_deathnote[attacker][0])
				{
					set_dhudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 7.1, 7.0);
					show_dhudmessage(0, "%s - %s", g_playername[attacker], g_deathnote[attacker]);
				}
				else
				{
					set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
					ShowSyncHudMsg(0, event_sync, "%s wants to be the best...", g_playername[attacker]);
				}
			}
			case 250:
			{
				
				g_points[attacker] += 50;
				client_cmd(0, "spk ^"%s^"", killingsounds[5]);
				if(g_deathnote[attacker][0])
				{
					set_dhudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 7.1, 7.0);
					show_dhudmessage(0, "%s - %s", g_playername[attacker], g_deathnote[attacker]);
				}
				else
				{
					set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
					ShowSyncHudMsg(0, event_sync, "%s wants to be the best...", g_playername[attacker]);
				}
			}
			case 300:
			{
				
				g_points[attacker] += 50;
				client_cmd(0, "spk ^"%s^"", killingsounds[5]);
				if(g_deathnote[attacker][0])
				{
					set_dhudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 7.1, 7.0);
					show_dhudmessage(0, "%s - %s", g_playername[attacker], g_deathnote[attacker]);
				}
				else
				{
					set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
					ShowSyncHudMsg(0, event_sync, "%s wants to be the best...", g_playername[attacker]);
				}
			}
			case 350:
			{
				
				g_points[attacker] += 50;
				client_cmd(0, "spk ^"%s^"", killingsounds[5]);
				if(g_deathnote[attacker][0])
				{
					set_dhudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 7.1, 7.0);
					show_dhudmessage(0, "%s - %s", g_playername[attacker], g_deathnote[attacker]);
				}
				else
				{
					set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
					ShowSyncHudMsg(0, event_sync, "%s wants to be the best...", g_playername[attacker]);
				}
			}
			case 400:
			{
				
				g_points[attacker] += 50;
				client_cmd(0, "spk ^"%s^"", killingsounds[5]);
				if(g_deathnote[attacker][0])
				{
					set_dhudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 7.1, 7.0);
					show_dhudmessage(0, "%s - %s", g_playername[attacker], g_deathnote[attacker]);
				}
				else
				{
					set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
					ShowSyncHudMsg(0, event_sync, "%s wants to be the best...", g_playername[attacker]);
				}
			}
			case 450:
			{
				
				g_points[attacker] += 50;
				client_cmd(0, "spk ^"%s^"", killingsounds[5]);
				if(g_deathnote[attacker][0])
				{
					set_dhudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 7.1, 7.0);
					show_dhudmessage(0, "%s - %s", g_playername[attacker], g_deathnote[attacker]);
				}
				else
				{
					set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
					ShowSyncHudMsg(0, event_sync, "%s wants to be the best...", g_playername[attacker]);
				}
			}
			case 500:
			{
				
				g_points[attacker] += 50;
				client_cmd(0, "spk ^"%s^"", killingsounds[5]);
				if(g_deathnote[attacker][0])
				{
					set_dhudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 7.1, 7.0);
					show_dhudmessage(0, "%s - %s", g_playername[attacker], g_deathnote[attacker]);
				}
				else
				{
					set_hudmessage(random(255), random(255), random(255), -1.0, 0.10, 1, 5.1, 5.0);
					ShowSyncHudMsg(0, event_sync, "%s wants to be the best...", g_playername[attacker]);
				}
			}
		}
		client_reset(victim, 0, 0);
	}
}

public fw_emitsound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
{
	if(sample[0] == 'h' && sample[1] == 'o' && sample[2] == 's' && sample[3] == 't' && sample[4] == 'a' && sample[5] == 'g' && sample[6] == 'e')
		return FMRES_SUPERCEDE;
	
	if(!is_user_valid_connected(id))
		return FMRES_IGNORED;
	
	if(equal(sample, "weapons/p90-1.wav") || equal(sample, "weapons/xm1014-1.wav")) 	
		return FMRES_SUPERCEDE;
			
	if(is_user_bot(id))
	{
		if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
		{
			if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
			{
				emit_sound(id, channel, miss_sounds[random_num(0, sizeof miss_sounds - 1)], volume, attn, flags, pitch)
				return FMRES_SUPERCEDE;
			}
			else if(sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't' || sample[14] == 's' && sample[15] == 't' && sample[16] == 'a')
			{
				if(sample[17] == 'w' && sample[18] == 'a' && sample[19] == 'l')
					emit_sound(id, channel, miss_sounds[random_num(0, sizeof miss_sounds - 1)], volume, attn, flags, pitch)
				else
					emit_sound(id, channel, hit_sounds[random_num(0, sizeof miss_sounds - 1)], volume, attn, flags, pitch)
				
				return FMRES_SUPERCEDE;
			}
		}
		
		if(sample[7] == 'd' && ((sample[8] == 'i' && sample[9] == 'e') || (sample[8] == 'e' && sample[9] == 'a')))
		{
			emit_sound(id, channel, monsters_sounds[CurrentDay-1][random_num(0, 2)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			return FMRES_SUPERCEDE;
		}
			
		if(sample[7] == 'b' && sample[8] == 'h' && sample[9] == 'i' && sample[10] == 't')
		{
			emit_sound(id, channel, monsters_sounds[CurrentDay-1][random_num(3, 5)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			return FMRES_SUPERCEDE;
		}
		
		if(sample[10] == 'f' && sample[11] == 'a' && sample[12] == 'l' && sample[13] == 'l')
		{
			emit_sound(id, channel, monsters_sounds[CurrentDay-1][random_num(3, 5)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			return FMRES_SUPERCEDE;
		}
		if(equal(sample, "items/nvg_on.wav") || equal(sample, "items/gunpickup2.wav") || equal(sample, "items/equip_nvg.wav") || equal(sample, "items/nvg_off.wav") || equal(sample, "items/flashlight1.wav")) 	
			return FMRES_SUPERCEDE;
	}
	
	return FMRES_IGNORED;
}

public monster_skill(id)
{
	if(!is_user_alive(id) || g_endround || g_bot_ability[id])
		return;
	
	switch(CurrentDay)
	{
		case JOI:
		{
			set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 10);
			set_task(3.0, "remove_zombie_protection", id);
			emit_sound(id, CHAN_STREAM, soundskills[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
		}
		case VINERI:
		{
			set_user_rendering(id, kRenderFxGlowShell, 200, 200, 200, kRenderNormal, 18);
			set_user_godmode(id, 1);
			set_task(3.0, "remove_zombie_protection", id);
			emit_sound(id, CHAN_STREAM, soundskills[1], 1.0, ATTN_NORM, 0, PITCH_NORM);
		}
		case SAMBATA:
		{
			new origin[3];
			get_user_origin(id, origin);
			origin[0] += random_num(-5, 5);
			origin[1] += random_num(-5, 5);
			origin[2] += random_num(-10, 10);
			te_display_additive_sprite(origin, g_frost_spr[6], random_num(5, 10));
			set_user_health(id, get_user_health(id) + 333);
			emit_sound(id, CHAN_STREAM, soundskills[2], 1.0, ATTN_NORM, 0, PITCH_NORM);
		}
		case DUMINICA: vomit_skill(id);
		case LUNI: g_lastleaptime[id] = 0.0, emit_sound(id, CHAN_STREAM, soundskills[4], 1.0, ATTN_NORM, 0, PITCH_NORM);
		case MARTI:
		{
			switch(random_num(0, 3))
			{
				case 0:
				{
					set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 10);
					set_task(3.0, "remove_zombie_protection", id);
				}
				case 1:
				{
					new origin[3];
					get_user_origin(id, origin);
					origin[0] += random_num(-5, 5);
					origin[1] += random_num(-5, 5);
					origin[2] += random_num(-10, 10);
					te_display_additive_sprite(origin, g_frost_spr[6], random_num(5, 10));
					set_user_health(id, get_user_health(id) + 666);
				}
				case 2:
				{
					set_user_rendering(id, kRenderFxGlowShell, 200, 200, 200, kRenderNormal, 18);
					set_user_godmode(id, 1);
					set_task(4.0, "remove_zombie_protection", id);
				}
				case 3: vomit_skill(id);
			}
			emit_sound(id, CHAN_STREAM, soundskills[5], 1.0, ATTN_NORM, 0, PITCH_NORM);
		}
		case MIERCURI:
		{
			emit_sound(id, CHAN_STREAM, soundskills[6], 1.0, ATTN_NORM, 0, PITCH_NORM);
			switch(random_num(0, 3))
			{
				case 0:
				{
					set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 10);
					set_task(3.0, "remove_zombie_protection", id);
				}
				case 1:
				{
					new origin[3];
					get_user_origin(id, origin);
					origin[0] += random_num(-5, 5);
					origin[1] += random_num(-5, 5);
					origin[2] += random_num(-10, 10);
					te_display_additive_sprite(origin, g_frost_spr[6], random_num(5, 10));
					set_user_health(id, get_user_health(id) + 750);
				}
				case 2:
				{
					set_user_rendering(id, kRenderFxGlowShell, 200, 200, 200, kRenderNormal, 18);
					set_user_godmode(id, 1);
					set_task(4.0, "remove_zombie_protection", id);
				}
				case 3: vomit_skill(id);
			}
			new Float:originF[3];
			pev(id, pev_origin, originF);
			create_blast(originF, 250, 150, 50, g_frost_spr[0], 0);
			new victim = -1, Float:flSpeed, Float:flNewSpeed, Float:flVelocity[3];
			while((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, 222.0)) != 0)
			{
				if(!is_user_alive(victim) || is_user_bot(victim))
					continue;
				
				new Float:flVictimOrigin[3]
				pev(victim, pev_origin, flVictimOrigin)
				new Float:flDistance = get_distance_f(originF, flVictimOrigin)   
				if(flDistance <= 250.0)
				{
					flSpeed = 500.0;
					flNewSpeed = flSpeed * (1.0 - (flDistance / 250.0));
					get_speed_vector(originF, flVictimOrigin, flNewSpeed, flVelocity);
					set_pev(victim, pev_velocity, flVelocity);
				}
				emit_sound(victim, CHAN_WEAPON, christmas_new_sounds[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
				if(get_user_health(victim) - 50 < 1)
					ExecuteHamB(Ham_Killed, victim, id, 0);
				else
					set_user_health(victim, get_user_health(victim) - 50);
			}
		}
	}
	if(id == id_special)
	{
		g_bot_ability[id] = random_num(10, 15);
		//frost_grenade(id);
		attraction(id, 0);
	}
	else
		g_bot_ability[id] = random_num(35, 55);
}

public checkstuck() 
{
	static players[32], pnum, player;
	get_players(players, pnum);
	static Float:origin[3], Float:mins[3], hull, Float:vec[3], o, i;
	for(i = 0; i< pnum; i++)
	{
		player = players[i]
		if(is_user_alive(player)) 
		{
			pev(player, pev_origin, origin)
			hull = pev(player, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
			if(!is_hull_vacant(origin, hull,player)) 
			{
				++stuck[player]
				if(stuck[player] >= 3) 
				{
					pev(player, pev_mins, mins);
					vec[2] = origin[2]
					for (o=0; o < sizeof Size; ++o) 
					{
						vec[0] = origin[0] - mins[0] * Size[o][0];
						vec[1] = origin[1] - mins[1] * Size[o][1];
						vec[2] = origin[2] - mins[2] * Size[o][2];
						if(is_hull_vacant(vec, hull, player)) 
						{
							engfunc(EngFunc_SetOrigin, player, vec);
							set_pev(player, pev_velocity, {0.0,0.0,0.0});
							o = sizeof Size;
						}
					}
				}
			}
			else
				stuck[player] = 0
		}
	}
}

public show_event_developer(id)
{
	if(!is_developer(id))
		return PLUGIN_CONTINUE;
		
	if(DeveloperDay > 0)
	{
		color(id, "^4%s^3 %s^1 was choosen before!", TAG, name_days[DeveloperDay]);
		return PLUGIN_HANDLED;
	}
	new menu, menu_item[128], tasta[2];
	menu = menu_create("\rDays Menu - Developer", "event_handler");
	for(new i = 1; i < sizeof name_days; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s", name_days[i]);
		tasta[0] = i - 1;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public event_handler(id, menu, item)
{
	if(item == MENU_EXIT || !is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}

	if(DeveloperDay > 0)
	{
		color(id, "^4%s^3 %s^1 was choosen before!", TAG, name_days[DeveloperDay]);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(item == 8)
	{
		if(!is_playable())
		{
			color(id, "^4%s^1 Nu poti accesa acest mod pentru ca nu sunt spawn-uri.", TAG);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
	}
	DeveloperDay = item + 1;
	new name[32];
	get_user_name(id, name, charsmax(name));
	color(0, "^4%s^1 Developer^3 %s^1 choose^3 %s^1 as next day!", TAG, name, name_days[DeveloperDay]);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public Event_RoundEnd() 
{
	id_special = -1;
	g_endround = true;

	set_lights("a");
	remove_task(SUGAR_EVENT_TASKID);
	UTIL_RemoveEntities(item_class_name);
	UTIL_RemoveEntities("camp_nade");
	UTIL_RemoveEntities("RobotTurret");

	for(new id = 1; id <= g_maxplayers; id++) 
	{
		if(!is_user_connected(id))
			continue;
		
		if(is_user_bot(id))
			client_reset(id, 1, 0);
		else
		{
			g_used_shield[id] = false;
			RemoveAllTripmines(id);
			if(g_defender[id])
			{
				if(pev_valid(g_defender[id]))
				{
					set_pev(g_defender[id], pev_deadflag, DEAD_DYING);
					set_pev(g_defender[id], ACTIVE, 0);
				}
			}
			g_defender[id] = 0;
			if(!is_user_alive(id))
				return;

			client_reset(id, 0, 0);
		}
			
		set_user_rendering(id);
	}
}

public msg_sendaudio()
{
	static audio[17];
	get_msg_arg_string(2, audio, charsmax(audio));
	
	if(equal(audio[7], "terwin") || equal(audio[7], "ctwin") || equal(audio[7], "rounddraw") || equal(audio[7], "rescued") || equal(audio[7], "bombpl"))
		return PLUGIN_HANDLED;
	
	return PLUGIN_CONTINUE;
}

public client_disconnect(id)
{
	if(is_user_bot(id))
		remove_task(id+TASK_BURN);
		
	if(get_bit(g_isfrost, id))
		remove_freeze(id+TASK_FROST);
		
	if(id == idspent)
		idspent = 0;
		
	if(id == idkills)
		idkills = 0;
		
	if(id == iddamage)
		iddamage = 0;
	
	client_reset(id, 0, 1);
	RemoveAllTripmines(id);
	remove_task(id + 3389);
	DeleteTrail(id);
	save_stats(id);
	if(g_pvp[id] != -1)
	{
		color(g_pvp[id], "^4%s^3 %s^1 left the server and the pvp as well!", TAG, g_playername[id]);
		g_pvp[g_pvp[id]] = -1;
		g_pvp[id] = -1;
	}
	g_asking[id] = -1;
	if(g_defender[id])
	{
		if(pev_valid(g_defender[id]))
		{
			set_pev(g_defender[id], pev_deadflag, DEAD_DYING);
			set_pev(g_defender[id], ACTIVE, 0);
		}
	}
}

public client_reset(id, isbot, isdisconnected)
{
	g_is_burning[id] = 0.0;
	if(isbot)
	{
		if(is_user_alive(id))
			set_user_rendering(id);
			
		if(get_bit(g_isfrost, id))
		{
			remove_mdl_frost(id);
			remove_task(id+TASK_FROST);
			reset_bit(g_isfrost, id)
		}
		return;
	}
	if(is_user_alive(id))
		set_user_rendering(id);

	g_damage[id] = 0.0;
	if(get_bit(g_isfrost, id))
	{
		remove_mdl_frost(id);
		remove_task(id+TASK_FROST);
		reset_bit(g_isfrost, id)
	}
	jumpnum[id] = 0, dojump[id] = false;
	if(isdisconnected)
	{
		if(!is_user_bot(id) && get_bit(g_isloaded, id))
			save_to_fvault(id);
		
		g_kills[id] = 0;
		g_using_benefits[id] = 0;
		remove_task(id+TASK_HUD);
		remove_task(id+TASK_GIVE);
		g_used_shield[id] = false;
	}
}

stock DeleteTrail(id) 
{
    if(!g_bTrail[id]) 
		return;
 
    if(task_exists(id + 498744)) 
		remove_task(id + 498744);
		
    g_bTrail[id] = false;
}

public TimerCreateTrail(id) 
{
	id -= 498744;

	if(!is_user_alive(id) && g_bTrail[id]) 
	{
		remove_task(id + 498744);
		return;
	}
	new r, g, b;
	switch(g_powder_items[id][2])
	{
		case 1: r = 200, g = 200, b = 200;
		case 2: r = 200, g = 0, b = 0;
		case 3: r = 0, g = 200, b = 0;
		case 4: r = 0, g = 0, b = 200;
	}
	te_create_following_beam(id, g_frost_spr[0], 8, 3, r, g, b, 80);
}

public showhud(taskid)
{
	if(is_user_bot(ID_HUD))
	{
		g_nodamage[ID_HUD]++;
		if(g_nodamage[ID_HUD] > 45)
		{
			new Float:Origin[3];
			ROGGetOrigin(Origin);
			engfunc(EngFunc_SetOrigin, ID_HUD, Origin);
			g_nodamage[ID_HUD] = 0;
		}
		if(g_bot_ability[ID_HUD] > 0)
			g_bot_ability[ID_HUD]--;
		if(is_user_alive(ID_HUD))
		{
			if(g_bot_ability[ID_HUD] == 0)
				monster_skill(ID_HUD), emit_sound(ID_HUD, CHAN_VOICE, monsters_sounds[CurrentDay-1][random_num(6,8)], 1.0, ATTN_NORM, 0, PITCH_NORM);
		}
		return;
	}
	else
	{
		if(is_user_alive(ID_HUD))
		{
			if(g_vip_items[ID_HUD] & JETPACKB)
			{
				if(pev(ID_HUD, pev_flags) & (FL_ONGROUND|FL_SWIM|FL_INWATER) || !(pev(ID_HUD, pev_button) & IN_USE) && !g_usingjetpack[ID_HUD])
				{
					if(g_jetpackpower[ID_HUD] < 5)
						g_jetpackpower[ID_HUD]++;
				}
				else
				{
					if(get_user_weapon(ID_HUD) == CSW_C4)
					{
						if(g_jetpackpower[ID_HUD] > 0)
							g_jetpackpower[ID_HUD]--;
					}
				}
			}
			if(g_heal[ID_HUD] == 1)
			{
				set_user_health(ID_HUD, clamp(get_user_health(ID_HUD) + 1, 0, g_max_hp[ID_HUD]))
				g_heal[ID_HUD] = 0;
			}
		}
	}
	
	if(!is_user_alive(ID_HUD) && !g_endround)
	{
		if(g_respawn_time[ID_HUD])
		{
			if(g_respawn_time[ID_HUD] > 0)
			{
				switch(g_respawn_time[ID_HUD])
				{
					case 1 .. 10: client_cmd(ID_HUD, "spk ^"%s^"", countnumbers[g_respawn_time[ID_HUD] - 1]);
					case 13: client_cmd(ID_HUD, "spk ^"%s^"", countnumbers[13]);
					case 14: client_cmd(ID_HUD, "spk ^"%s^"", countnumbers[12]);
					case 15: client_cmd(ID_HUD, "spk ^"%s^"", countnumbers[10]);
					case 18: client_cmd(ID_HUD, "spk ^"%s^"", countnumbers[13]);
					case 19: client_cmd(ID_HUD, "spk ^"%s^"", countnumbers[12]);
					case 20: client_cmd(ID_HUD, "spk ^"%s^"", countnumbers[11]);
				}
				client_print(ID_HUD, print_center, "You will be respawned in %d seconds", g_respawn_time[ID_HUD]);
			}
			g_respawn_time[ID_HUD]--;
			if(g_respawn_time[ID_HUD] == 0)
				respawn_player(ID_HUD);
		}
	}
	
	static id, hud_msg[256], len;
	len = 0;
	id = ID_HUD;
	
	if(is_user_alive(id))
	{
		if(g_is_burning[id] > 0)
		{
			static origins[3];
			get_user_origin(id, origins);
			origins[0] = random_num(-3, 6);
			origins[1] = random_num(-3, 3);
			origins[2] = random_num(-6, 6);
			te_display_additive_sprite(origins, g_iflames, random_num(5, 10), 155);
		}
		if(g_defence_items[id] & BESTPIE && get_user_health(id) < g_max_hp[id])
			set_user_health(id, get_user_health(id) + 3 + (g_status_player[id][5] * str_to_num(status_strings[5][2])));
			
		if(g_human_class[id][1])
			g_human_class[id][1]--;
			
		if(g_human_class[id][4])
			g_human_class[id][4]--;
	}
	
	if(!is_user_alive(id))
	{
		id = pev(id, pev_iuser2);
		if(!is_user_alive(id))
			return;
	}
	
	if(id == ID_HUD)
	{		
		if(get_neededxp(id) == 1000000)
			len += formatex(hud_msg[len], charsmax(hud_msg) - len, "[ Health: %d | Armor: %d | Level: %d]^n[ Gold: %d | Powder: %d | Class: %s]^n", get_user_health(ID_HUD), get_user_armor(ID_HUD), g_level[ID_HUD], g_points[ID_HUD], g_powder[ID_HUD], human_race[g_human_class[ID_HUD][0]][0]);
		else
			len += formatex(hud_msg[len], charsmax(hud_msg) - len, "[ Health: %d | Armor: %d | Level: %d | Experience: [%d/%d] ]^n[ Gold: %d | Powder: %d | Class: %s]^n", get_user_health(ID_HUD), get_user_armor(ID_HUD), g_level[ID_HUD], g_exp[ID_HUD], g_level[ID_HUD] * 500, g_points[ID_HUD], g_powder[ID_HUD], human_race[g_human_class[ID_HUD][0]][0]);
		
		if(g_damage[ID_HUD])
			len += formatex(hud_msg[len], charsmax(hud_msg) - len, "[ Damage until your next bonus: %d ]^n", 500 - floatround(g_damage[ID_HUD]));
			
		if(g_vip_items[ID_HUD] & JETPACKB)
			len += formatex(hud_msg[len], charsmax(hud_msg) - len, "[ Jetpack Fuel: %d ]", g_jetpackpower[ID_HUD]);
			
		set_hudmessage(85, 85, 255, -1.0, 0.8, 0, 1.1, 1.0);
		ShowSyncHudMsg(ID_HUD, sync_hud, "%s", hud_msg);
	}
	else
	{
		if(get_neededxp(id) == 1000000)
			len += formatex(hud_msg[len], charsmax(hud_msg) - len, "%s^nHealth:%d | Armor: %d^nLevel: %d^nGold: %d | Powder: %d^n", g_playername[id], get_user_health(id), get_user_armor(id), g_level[id], g_points[id], g_powder[id]);
		else
			len += formatex(hud_msg[len], charsmax(hud_msg) - len, "%s^nHealth:%d | Armor: %d^nLevel: %d^nExperience: [%d/%d]^nGold: %d | Powder: %d^n", g_playername[id], get_user_health(id), get_user_armor(id), g_level[id], g_exp[id], g_level[id] * 500, g_points[id], g_powder[id]);

		if(g_damage[id])
			len += formatex(hud_msg[len], charsmax(hud_msg) - len, "Damage until your next bonus: %d^n", 500 - floatround(g_damage[id]));
		if(g_vip_items[id] & JETPACKB)
			len += formatex(hud_msg[len], charsmax(hud_msg) - len, "Jetpack Fuel: %d^n", g_jetpackpower[id]);
		if(cyby_get_admin(ID_HUD) > 1 && cyby_get_blind_admin(id))
			len += formatex(hud_msg[len], charsmax(hud_msg) - len, "^nGot blind from %s", g_playername[cyby_get_blind_admin(id)]);
			
		set_hudmessage(85, 127, 255, 1.0, 0.13, 0, 1.1, 1.0);
		ShowSyncHudMsg(ID_HUD, sync_hud, "%s", hud_msg);
	}
}

public give_points(taskid)
{
	if(!is_user_connected(ID_GIVE) || cs_get_user_team(ID_GIVE) == CS_TEAM_SPECTATOR || !cs_get_user_team(ID_GIVE) || !get_bit(g_isloaded, ID_GIVE))
		return;
		
	g_powder[ID_GIVE]++;
	check_level(ID_GIVE, 10, 25);
	
	if(g_daily_missions[ID_GIVE][0] != str_to_num(daily_missions[0][1]))
	{
		if(g_daily_missions[ID_GIVE][0] + 1 == str_to_num(daily_missions[0][1]))
			g_daily_coin[ID_GIVE] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[ID_GIVE], daily_missions[0]);
		g_daily_missions[ID_GIVE][0]++;
	}
	g_timeplayed[ID_GIVE]++;
	if(g_ismuted[ID_GIVE] > 1)
		g_ismuted[ID_GIVE]--;
	else if(g_ismuted[ID_GIVE] == 1)
	{
		color(ID_GIVE, "^4%s^1 You are now reconnected to chat! Pay attention more next time when you chat!", TAG);
		g_ismuted[ID_GIVE] = 0;
		formatex(g_mutereason[ID_GIVE], charsmax(g_mutereason[]), "");
	}
}

public connectmsg(id)
{
	if(!is_user_connected(id))
		return;
	
	if(get_bit(g_isloaded, id))
	{
		if(g_msg_in[id][0])
			color(0, "^4%s^3 %s^1.", g_playername[id], g_msg_in[id]);
		else
		{
			new strIP[35], strCountry[32];
			get_user_ip(id, strIP, charsmax(strIP), 1);
			geoip_country(strIP, strCountry, charsmax(strCountry));

			strCountry = equal(strCountry, "error") ? "N/A" : strCountry;
			color(0, "^4%s^1 Player^3 %s^1 is playing now from [^3 %s^1 ]", TAG, g_playername[id], strCountry);
		}
		
		if(g_entering_sound[id])
			client_cmd(0, "spk ^"%s^"", join_sounds_vip[g_entering_sound[id]][1]);
	}
}

public event_free_ammo(id)
{
	if(!is_user_alive(id))
		return;
	
	set_pdata_int(id, 376 + read_data(1), 69, 5);
}
	
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
{
	if (!is_user_connected(victim) || !is_user_alive(victim))
		return HAM_IGNORED;

	if ((victim == attacker) || !is_user_connected(attacker))
		return HAM_IGNORED;

	if (is_user_bot(attacker) || get_user_team(attacker) == get_user_team(victim))
		return HAM_IGNORED;

	native_make_damage_spr(attacker, victim, damage, 1);
	SetHamParamFloat(4, damage)
	return HAM_IGNORED;
}

public fw_AddToFullPack_Post(es, e, ent, host, host_flags, player, p_set)
{
    if(!is_user_connected(host) || !pev_valid(ent))
        return FMRES_IGNORED;

    static classname[32]
    pev(ent, pev_classname, classname, charsmax(classname))
    if(!equal(classname, DAMAGE_CLASSNAME))
        return FMRES_IGNORED;

    static owner
    owner = get_es(es, ES_Owner)
	
    if(owner == host)
    {
        set_es(es, ES_RenderMode, kRenderTransAdd);
        set_es(es, ES_RenderAmt, 160.0);
    }
    return FMRES_IGNORED;
}

public fw_Think(iEnt)
{
    if (!pev_valid(iEnt))
        return;

    set_pev(iEnt, pev_nextthink, halflife_time() + 0.005)

    static Float:fTimeRemove
    pev(iEnt, pev_fuser1, fTimeRemove)
    if (get_gametime() >= fTimeRemove)
    {
        static Float:Amount
        pev(iEnt, pev_renderamt, Amount)
        if (Amount <= 15.0)
        {
            engfunc(EngFunc_RemoveEntity, iEnt)
            return;
        }
        else
        {
            Amount -= 15.0
            set_pev(iEnt, pev_renderamt, Amount)
        }
    }
}
public native_make_damage_spr(attacker, victim, Float:damage, crit)
{
	static Float:rOrigin[3], Float:rFloat[3], Float:aim_Origin[3], digit, iDamage, rcolor
	iDamage = floatround(damage)
	pev(victim, pev_origin, aim_Origin)
	aim_Origin[2] += 30.0
	for (new i = 0;i < 2;i++)
	{
		rFloat[i] = random_float(-400.0, 400.0)
		rOrigin[i] = aim_Origin[i] + rFloat[i]
	}
	rFloat[2] = random_float(100.0, 400.0)
	rOrigin[2] = aim_Origin[2] + rFloat[2]
	rcolor = random_num(0, charsmax(color_pattern))

	static str_damage[5], iFrame[5]
	formatex(str_damage, charsmax(str_damage), "%d", iDamage)
	digit = strlen(str_damage)
	for (new i = 0;i < digit;i++)
	{
		iFrame[digit - i - 1] = floatround(str_to_float(str_damage[i]) / power(10, (digit - i) - 1), floatround_floor)
		Create_Damage(attacker, aim_Origin, rOrigin, iFrame[digit - i - 1], 8.0, digit - i - 1, digit, crit, rcolor)
	}
	return HAM_IGNORED;
}
public Create_Damage(id, Float:Origin[3], Float:TargetOrigin[3], iFrame, Float:Speed, digit, size, crit, rcolor)
{
	static Ent
	Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite"))
	if (!pev_valid(Ent))
		return;

	new Float:Velocity[3], Float:iScale, Float:fDistance, Float:iOrigin[3], Float:color[3]
	pev(id, pev_origin, iOrigin)
	fDistance = get_distance_f(iOrigin, Origin)
	iScale = fDistance * 0.000857
	if (iScale <= 0.1)
		iScale = 0.1

	if (fDistance <= 100.0)
		Speed = 3.0

	// Set info for ent
	set_pev(Ent, pev_renderfx, kRenderFxNone)
	set_pev(Ent, pev_rendercolor, {0, 0, 0})
	set_pev(Ent, pev_rendermode, kRenderTransAlpha)
	set_pev(Ent, pev_renderamt, 0)
	set_pev(Ent, pev_movetype, MOVETYPE_BOUNCE)
	for (new i = 0;i < 3;i++)
		color[i] = float(color_pattern[rcolor][i])

	set_pev(Ent, pev_renderfx, kRenderFxGlowShell)
	set_pev(Ent, pev_rendercolor, color)
	if (crit)
		iScale += 0.2

	if (size >= 4)
		iScale += 0.1

	if (size >= 3)
		iScale += 0.1

	if (size < 1)
		iScale -= 0.1

	set_pev(Ent, pev_scale, iScale)
	set_pev(Ent, pev_fuser1, get_gametime() + 0.5)  // time remove
	set_pev(Ent, pev_nextthink, halflife_time() + 0.05)
	set_pev(Ent, pev_friction , 10.0)

	entity_set_string(Ent, EV_SZ_classname, DAMAGE_CLASSNAME)
	engfunc(EngFunc_SetModel, Ent, damage_spr[digit][crit])
	set_pev(Ent, pev_origin, Origin)
	set_pev(Ent, pev_gravity, 0.04)
	set_pev(Ent, pev_solid, SOLID_TRIGGER)
	set_pev(Ent, pev_frame, float(iFrame))
	set_pev(Ent, pev_owner, id)

	get_speed_vector(Origin, TargetOrigin, Speed * 10.0, Velocity)
	set_pev(Ent, pev_velocity, Velocity)
}

public client_putinserver(id) 
{
	set_task(1.0, "showhud", id+TASK_HUD, _, _, "b");
	reset_bit(g_isfrost, id);
	g_roundkills[id] = 0;
	g_haveflarenade[id] = 0;
	g_rounddamage[id] = 0;
	g_roundspent[id] = 0;
	g_nextvote[id] = 0;
	g_ishero[id] = false;
	g_pvp[id] = -1;
	g_asking[id] = -1;
	if(!is_user_bot(id))
	{
		get_user_name(id, g_playername[id], charsmax(g_playername[]));
		jumpnum[id] = 0, dojump[id] = false;
		g_playertype[id] = 0;
		set_task(60.0, "give_points", id+TASK_GIVE, _, _, "b");
		set_task(10.0, "connectmsg", id);
		g_deployed[id] = 0;
		g_havemine[id] = 0;
		client_cmd(id, "bind v ^"+setlaser^"");
		client_cmd(id, "bind c ^"+dellaser^"");
		client_cmd(id, "cl_weather 1");	
		set_task( 1.0, "Task_CheckAiming", id + 3389, _, _, "b" );
	}
}

public transform_in_hero(id)
{
	if(!is_user_alive(id))
	{
		color(id, "^4%s^1 You need to be alive to become a^3 Hero^1!!", TAG);
		return PLUGIN_HANDLED;
	}
	
	if(g_ishero[id])
	{
		color(id, "^4%s^1 You are already a^3 Hero^1!", TAG);
		return PLUGIN_HANDLED;
	}
	
	if(g_points[id] < 1000)
	{
		color(id, "^4%s^1 You need^3 1000 Gold^1 to become a hero!", TAG);
		return PLUGIN_HANDLED;
	}
	
	g_ishero[id] = true;
	g_points[id] -= 1000;
	strip_user_weapons(id);
	give_item(id, "weapon_m4a1");
	give_item(id, "weapon_knife");
	ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
	cs_set_player_model(id, real_player_models[2]);
	return PLUGIN_HANDLED;
}

public client_PreThink(id)
{
	if(!is_user_alive(id)) 
		return PLUGIN_CONTINUE;
		
	if(get_bit(g_isfrost, id))
	{
		set_pev(id, pev_velocity, Float:{0.0,0.0,0.0});
		return PLUGIN_CONTINUE;
	}
	
	if(!is_user_bot(id))
	{
		if(g_powder_items[id][1])
		{
			if(get_user_weapon(id) != CSW_C4)
			{
				static button;
				button = get_user_button(id);
				if(button & IN_USE) 
				{
					static Float:velocity[3];
					entity_get_vector(id, EV_VEC_velocity, velocity)
					if (velocity[2] < 0.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 < -100.0) ? velocity[2] + 40.0 : -100.0
						entity_set_vector(id, EV_VEC_velocity, velocity)
					}
				}
			}
		}
		if(g_defence_items[id] & DOUBLEJUMP)
		{
			static nbut, obut;
			nbut = get_user_button(id), 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 PLUGIN_CONTINUE;
				}
			}
			
			if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
			{
				jumpnum[id] = 0;
				return PLUGIN_CONTINUE;
			}
		}
	}
	else
	{
		static Float:current_time;
		current_time = get_gametime();
		
		if(current_time - g_lastleaptime[id] < 15.0)
			return PLUGIN_CONTINUE;
		
		if(!(pev(id, pev_flags) & FL_ONGROUND))
			return PLUGIN_CONTINUE;
		
		static Float:velocity[3];
		velocity_by_aim(id, 700, velocity);
		velocity[2] = 350.0;
		set_pev(id, pev_velocity, velocity);
		g_lastleaptime[id] = current_time;
	}
	return PLUGIN_CONTINUE;
}

public onresethud(id)
{
	if(!is_user_alive(id))
		return;
	
	message_begin(MSG_ONE_UNRELIABLE, g_msghideweap, _, id);
	write_byte((1<<3) | (1<<4));
	message_end();
}

public msg_hideweapon()
	set_msg_arg_int(1, ARG_BYTE, get_msg_arg_int(1) | (1<<3) | (1<<4));

public reset_max_speed(id)
{
	if(!is_user_alive(id))
		return;
		
	if(cyby_mng_voting() || get_bit(g_isfrost, id) || CurrentDay > MIERCURI)
	{
		set_pev(id, pev_maxspeed, 0.1);
		return;
	}
	
	if(is_user_bot(id))
		set_pev(id, pev_maxspeed, str_to_float(monster_data[CurrentDay][3]));
	else
	{
		if(g_ishero[id])
			set_pev(id, pev_maxspeed, 666.6);
		else
		{
			if(g_vip_items[id] & SANTAKNIFE)
			{
				if(get_user_weapon(id) == CSW_KNIFE)
				{
					static Float:currentspeed;
					currentspeed = str_to_float(knife_belea[g_currentknife[id]][4]) + float(240 + (g_level[id] * 5)) + (float(g_status_player[id][3]) * str_to_float(status_strings[3][2]));
					set_pev(id, pev_maxspeed, currentspeed);
				}
				else
				{
					if(g_status_player[id][3])
					{
						static Float:currentspeed;
						currentspeed = float(240 + (g_level[id] * 5)) + (float(g_status_player[id][3]) * str_to_float(status_strings[3][2]));
						set_pev(id, pev_maxspeed, currentspeed);
					}
					else
						set_pev(id, pev_maxspeed, float(240 + (g_level[id] * 5)));
				}
			}
			else
			{
				if(g_status_player[id][3])
				{
					static Float:currentspeed;
					currentspeed = float(240 + (g_level[id] * 5)) + (float(g_status_player[id][3]) * str_to_float(status_strings[3][2]));
					set_pev(id, pev_maxspeed, currentspeed);
				}
				else
					set_pev(id, pev_maxspeed, float(240 + (g_level[id] * 5)));
			}
		}
	}
}

public client_PostThink(id)
{
	if(!is_user_alive(id) || is_user_bot(id)) 
		return PLUGIN_CONTINUE;

	if(dojump[id] == true)
	{
		static Float:velocity[3];
		entity_get_vector(id, EV_VEC_velocity, velocity);
		velocity[2] = random_float(255.0, 265.0);
		entity_set_vector(id, EV_VEC_velocity, velocity);
		dojump[id] = false;
		return PLUGIN_CONTINUE;
	}
	
	return PLUGIN_CONTINUE;
}

public Hook_BloodColor(id)
{
	if(!is_user_bot(id))
		return HAM_IGNORED;
	
	if(CurrentDay == 2)
		return HAM_IGNORED;
		
	switch(CurrentDay)
	{
		case 1: SetHamReturnInteger(208);
		case 3: SetHamReturnInteger(197);
		case 4: SetHamReturnInteger(250);
		case 5: SetHamReturnInteger(111);
		case 6: SetHamReturnInteger(172);
		case 7: SetHamReturnInteger(147);
	}
	
	if(returnblood)
		return HAM_SUPERCEDE;
		
	return HAM_IGNORED;
}

public set_monster_day(id, day)
{
	if(!is_user_bot(id) || !is_user_alive(id))
		return;
		
	set_user_health(id, str_to_num(monster_data[day][1]) * g_evolution);
	set_user_armor(id, str_to_num(monster_data[day][2]) * g_evolution);
	set_user_gravity(id, str_to_float(monster_data[day][4]));
	strip_user_weapons(id);
	give_item(id, "weapon_knife");
	cs_set_player_model(id, monster_player_models[day]);
	ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
	cs_set_user_nvg(id, 0);
}

public set_player_level(id)
{
	if(is_user_bot(id) || !is_user_alive(id))
		return;
		
	set_user_health(id, 100 + (g_level[id] * 10));
	set_user_armor(id, 100 + (g_level[id] * 10));
	new Float:gravitatie = 800.0;
	gravitatie -= float(g_level[id] * 2);
	gravitatie = gravitatie / 800.0;
	set_user_gravity(id, gravitatie);
	ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
}

public StartEvent(Event) 
{
	g_deleted = false;
	client_cmd(0, "mp3 stop");
	PlaySound(christmas_new_sounds[2]);
	CurrentDay = Event;
	if(Event == 2)
		returnblood = false;
	else
		returnblood = true;
	show_event_message(Event);
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(is_user_alive(i) && is_user_bot(i))
			make_it_frost(i, 15.0);
	}
}

public hud_event()
{
	static isboss;
	if(waiting)
	{
		set_dhudmessage(0, 127, 0, -1.0, 0.0, 0, 1.0, 1.0, 0.0, 0.0);
		show_dhudmessage(0, "Add 89.34.25.27 in your favorite list");
		return;
	}
		
	switch(g_win)
	{
		case 0:
		{
			g_currentroundtime++;
			isboss = CurrentRespawns + get_alives(1);
			if(isboss == 1)
			{
				set_dhudmessage(200, 69, 69, -1.0, 0.0, 0, 1.0, 1.0, 0.0, 0.0);
				show_dhudmessage(0, "| %s Night |^n| Boss %s HP Left: %d |^n| Time Passed: %d:%02d |", name_days[CurrentDay], name_days[CurrentDay], get_user_health(get_boss_id()), (g_currentroundtime / 60), (g_currentroundtime % 60));
			}
			else
			{
				set_dhudmessage(0, 127, 0, -1.0, 0.0, 0, 1.0, 1.0, 0.0, 0.0);
				show_dhudmessage(0, "| %s Night |^n| %s Left: %d |^n| Time Passed: %d:%02d |^n| Current Evolution: %d |", name_days[CurrentDay], name_days[CurrentDay], isboss, (g_currentroundtime / 60), (g_currentroundtime % 60), g_evolution);
			
			}
		}
		case 1:
		{
			set_dhudmessage(0, 127, 0, -1.0, 0.0, 0, 1.0, 1.0, 0.0, 0.0);
			show_dhudmessage(0, "%s comes with victory! We go back to yesterday again...", monster_data[CurrentDay][0]);
		}
		case 2:
		{
			set_dhudmessage(0, 127, 0, -1.0, 0.0, 0, 1.0, 1.0, 0.0, 0.0);
			show_dhudmessage(0, "This night was saved! We are going to %s night...", monster_data[CurrentDay][0]);
			set_dhudmessage(9, 9, 127, -1.0, 0.17, 0, 1.0, 1.0, 0.0, 0.0);
			show_dhudmessage(0, "Round stats:^nMost kills: %s with %d^nMost damage: %s with %d^nMost spent Gold: %s with %d", g_playername[idkills], g_roundkills[idkills], g_playername[iddamage], g_rounddamage[iddamage], g_playername[idspent], g_roundspent[idspent]);
		}
		case 3:
		{
			set_dhudmessage(0, 127, 0, -1.0, 0.0, 0, 1.0, 1.0, 0.0, 0.0);
			show_dhudmessage(0, "You finished successfully! It's time to choose...");
		}
	}
}

public clcmd_drop(id)
	return PLUGIN_HANDLED;
	
public main_menu_powder(id)
{
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100];
	formatex(menu_item, charsmax(menu_item), "\rPowder Shop^nTotal Powder:\y %d", g_powder[id]);
	menu = menu_create(menu_item, "main_powder_handler");
	if(g_powder_items[id][0])
		formatex(menu_item, charsmax(menu_item), "\y%s \w[OPEN]", powder_items[0][0]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \wPowder: %s", powder_items[0][0], powder_items[0][1]);
	menu_additem(menu, menu_item, "");
	if(g_powder_items[id][1])
		formatex(menu_item, charsmax(menu_item), "\y%s \w[OWNED]", powder_items[1][0]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \wPowder: %s", powder_items[1][0], powder_items[1][1]);
	menu_additem(menu, menu_item, "");
	if(g_powder_items[id][2])
	{
		switch(g_powder_items[id][2])
		{
			case 1: formatex(menu_item, charsmax(menu_item), "\y%s \w[WHITE]", powder_items[2][0]);
			case 2: formatex(menu_item, charsmax(menu_item), "\y%s \w[RED]", powder_items[2][0]);
			case 3: formatex(menu_item, charsmax(menu_item), "\y%s \w[GREEN]", powder_items[2][0]);
			case 4: formatex(menu_item, charsmax(menu_item), "\y%s \w[BLUE]", powder_items[2][0]);
		}
	}
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \wPowder: %s", powder_items[2][0], powder_items[2][1]);
		
	menu_additem(menu, menu_item, "");
	if(g_powder_items[id][3])
	{
		switch(g_powder_items[id][3])
		{
			case 1: formatex(menu_item, charsmax(menu_item), "\y%s \w[WHITE]", powder_items[3][0]);
			case 2: formatex(menu_item, charsmax(menu_item), "\y%s \w[RED]", powder_items[3][0]);
			case 3: formatex(menu_item, charsmax(menu_item), "\y%s \w[GREEN]", powder_items[3][0]);
			case 4: formatex(menu_item, charsmax(menu_item), "\y%s \w[BLUE]", powder_items[3][0]);
		}
	}
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \wPowder: %s", powder_items[3][0], powder_items[3][1]);
	menu_additem(menu, menu_item, "");
	if(g_powder_items[id][4])
		formatex(menu_item, charsmax(menu_item), "\y%s \w[OWNED]", powder_items[4][0]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \wPowder: %s", powder_items[4][0], powder_items[4][1]);
	menu_additem(menu, menu_item, "");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public main_powder_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			if(g_powder_items[id][0])
			{
				menu_destroy(menu);
				open_costummenu(id);
				return PLUGIN_HANDLED;
			}
			else
			{
				if(g_powder[id] < str_to_num(powder_items[0][1]))
				{
					color(id, "^4%s^1 You don't have enough powder to buy this!", TAG);
					menu_destroy(menu);
					return PLUGIN_HANDLED;
				}
				else
				{
					color(id, "^4%s^1 You bought access to costume menu!", TAG);
					g_powder_items[id][0] = 1;
					g_powder[id] -= str_to_num(powder_items[0][1]);
					menu_destroy(menu);
					open_costummenu(id);
					return PLUGIN_HANDLED;
				}
			}
		}
		case 1:
		{
			if(g_powder_items[id][1])
			{
				color(id, "^4%s^1 You have already parachute!", TAG);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			else
			{
				if(g_powder[id] < str_to_num(powder_items[1][1]))
				{
					color(id, "^4%s^1 You don't have enough powder to buy this!", TAG);
					menu_destroy(menu);
					return PLUGIN_HANDLED;
				}
				else
				{
					color(id, "^4%s^1 You bought parachute!", TAG);
					g_powder_items[id][1] = 1;
					g_powder[id] -= str_to_num(powder_items[1][1]);
					menu_destroy(menu);
					return PLUGIN_HANDLED;
				}
			}
		}
		case 2:
		{
			if(g_powder_items[id][2])
			{
				menu_destroy(menu);
				open_trail_menu(id);
				return PLUGIN_HANDLED;
			}
			else
			{
				if(g_powder[id] < str_to_num(powder_items[2][1]))
				{
					color(id, "^4%s^1 You don't have enough powder to buy this!", TAG);
					menu_destroy(menu);
					return PLUGIN_HANDLED;
				}
				else
				{
					color(id, "^4%s^1 You bought trail access!", TAG);
					g_powder_items[id][2] = 1;
					g_powder[id] -= str_to_num(powder_items[2][1]);
					menu_destroy(menu);
					open_trail_menu(id);
					return PLUGIN_HANDLED;
				}
			}
		}
		case 3:
		{
			if(g_powder_items[id][3])
			{
				menu_destroy(menu);
				open_glow_menu(id);
				return PLUGIN_HANDLED;
			}
			else
			{
				if(g_powder[id] < str_to_num(powder_items[3][1]))
				{
					color(id, "^4%s^1 You don't have enough powder to buy this!", TAG);
					menu_destroy(menu);
					return PLUGIN_HANDLED;
				}
				else
				{
					color(id, "^4%s^1 You bought glow access!", TAG);
					g_powder_items[id][3] = 1;
					g_powder[id] -= str_to_num(powder_items[3][1]);
					menu_destroy(menu);
					open_glow_menu(id);
					return PLUGIN_HANDLED;
				}
			}
		}
		case 4:
		{
			if(g_powder_items[id][4])
			{
				color(id, "^4%s^1 You have already vampiric bullets!", TAG);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			else
			{
				if(g_powder[id] < str_to_num(powder_items[4][1]))
				{
					color(id, "^4%s^1 You don't have enough powder to buy this!", TAG);
					menu_destroy(menu);
					return PLUGIN_HANDLED;
				}
				else
				{
					color(id, "^4%s^1 You bought vampiric bullets!", TAG);
					g_powder_items[id][4] = 1;
					g_powder[id] -= str_to_num(powder_items[4][1]);
					menu_destroy(menu);
					return PLUGIN_HANDLED;
				}
			}
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_trail_menu(id)
{
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100];
	switch(g_powder_items[id][2])
	{
		case 1: formatex(menu_item, charsmax(menu_item), "\rTrail Color^nCurrent:\w WHITE");
		case 2: formatex(menu_item, charsmax(menu_item), "\rTrail Color^nCurrent:\r RED");
		case 3: formatex(menu_item, charsmax(menu_item), "\rTrail Color^nCurrent:\r GREEN");
		case 4: formatex(menu_item, charsmax(menu_item), "\rTrail Color^nCurrent:\r BLUE");
	}
	
	menu = menu_create(menu_item, "trail_menu_handler");
	if(g_powder_items[id][2] == 1)
		formatex(menu_item, charsmax(menu_item), "\yWHITE \w[IN USE]");
	else
		formatex(menu_item, charsmax(menu_item), "\yWHITE");
	menu_additem(menu, menu_item, "");
	if(g_powder_items[id][2] == 2)
		formatex(menu_item, charsmax(menu_item), "\yRED \w[IN USE]");
	else
		formatex(menu_item, charsmax(menu_item), "\yRED");
	menu_additem(menu, menu_item, "");
	if(g_powder_items[id][2] == 3)
		formatex(menu_item, charsmax(menu_item), "\yGREEN \w[IN USE]");
	else
		formatex(menu_item, charsmax(menu_item), "\yGREEN");
	menu_additem(menu, menu_item, "");
	if(g_powder_items[id][2] == 4)
		formatex(menu_item, charsmax(menu_item), "\yBLUE \w[IN USE]");
	else
		formatex(menu_item, charsmax(menu_item), "\yBLUE");
	menu_additem(menu, menu_item, "");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public trail_menu_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new temptext[28];
	switch(item)
	{
		case 0: formatex(temptext, charsmax(temptext), "WHITE");
		case 1: formatex(temptext, charsmax(temptext), "RED");
		case 2: formatex(temptext, charsmax(temptext), "GREEN");
		case 3: formatex(temptext, charsmax(temptext), "BLUE");
	}
	g_powder_items[id][2] = item + 1;
	color(id, "^4%s^1 You've got now %s trail!", TAG, temptext);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_glow_menu(id)
{
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100];
	switch(g_powder_items[id][3])
	{
		case 1: formatex(menu_item, charsmax(menu_item), "\rGlow Color^nCurrent:\w WHITE");
		case 2: formatex(menu_item, charsmax(menu_item), "\rGlow Color^nCurrent:\r RED");
		case 3: formatex(menu_item, charsmax(menu_item), "\rGlow Color^nCurrent:\r GREEN");
		case 4: formatex(menu_item, charsmax(menu_item), "\rGlow Color^nCurrent:\r BLUE");
	}
	
	menu = menu_create(menu_item, "glow_menu_handler");
	if(g_powder_items[id][3] == 1)
		formatex(menu_item, charsmax(menu_item), "\yWHITE \w[IN USE]");
	else
		formatex(menu_item, charsmax(menu_item), "\yWHITE");
	menu_additem(menu, menu_item, "");
	if(g_powder_items[id][3] == 2)
		formatex(menu_item, charsmax(menu_item), "\yRED \w[IN USE]");
	else
		formatex(menu_item, charsmax(menu_item), "\yRED");
	menu_additem(menu, menu_item, "");
	if(g_powder_items[id][3] == 3)
		formatex(menu_item, charsmax(menu_item), "\yGREEN \w[IN USE]");
	else
		formatex(menu_item, charsmax(menu_item), "\yGREEN");
	menu_additem(menu, menu_item, "");
	if(g_powder_items[id][3] == 4)
		formatex(menu_item, charsmax(menu_item), "\yBLUE \w[IN USE]");
	else
		formatex(menu_item, charsmax(menu_item), "\yBLUE");
	menu_additem(menu, menu_item, "");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public glow_menu_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new temptext[28];
	switch(item)
	{
		case 0: formatex(temptext, charsmax(temptext), "WHITE"), set_user_rendering(id, kRenderFxGlowShell, 200, 200, 200, kRenderNormal, 14);
		case 1: formatex(temptext, charsmax(temptext), "RED"), set_user_rendering(id, kRenderFxGlowShell, 200, 0, 0, kRenderNormal, 14);
		case 2: formatex(temptext, charsmax(temptext), "GREEN"), set_user_rendering(id, kRenderFxGlowShell, 0, 200, 0, kRenderNormal, 14);
		case 3: formatex(temptext, charsmax(temptext), "BLUE"), set_user_rendering(id, kRenderFxGlowShell, 0, 0, 200, kRenderNormal, 14);
	}
	g_powder_items[id][3] = item + 1;
	color(id, "^4%s^1 You've got now %s glow!", TAG, temptext);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public Event_ModelChange(id) 
{
	if(!is_user_connected(id) || !is_user_alive(id))
		return;
	
	if(is_user_bot(id))
	{
		set_pev(id, pev_weaponmodel2, "");
		return;
	}
	
	switch(get_user_weapon(id))
	{
		case CSW_C4: set_pev(id, pev_viewmodel2, vip_models_res[2]), set_pev(id, pev_weaponmodel2, vip_models_res[1]);
	}
}

public fwm_setmodel(entity, const model[])
{
	if(!pev_valid(entity))
		return FMRES_IGNORED;
	
	if(model[0] == 'm' && model[7] == 'w' && model[8] == '_')
	{
		if(model[9] == 'h' && model[10] == 'e')
		{
			static attacker;
			attacker = pev(entity, pev_owner);
			if(g_attack_items[attacker] & CHRWISH)
			{
				fm_set_trail(entity, 200, 200, 0, 255);
				fm_set_rendering(entity, kRenderFxGlowShell, 200, 200, 0, kRenderNormal, 15);
				set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_TURBAT);
			}
			else
			{
				fm_set_trail(entity, 250, 50, 0, 255);
				fm_set_rendering(entity, kRenderFxGlowShell, 250, 50, 0, kRenderNormal, 15);
				set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_CHRISTMAS);
				return FMRES_SUPERCEDE;
			}
		}
		if(model[9] == 's' && model[10] == 'm')
		{
			static attacker;
			attacker = pev(entity, pev_owner);
			if(g_haveflarenade[attacker])
			{
				engfunc(EngFunc_SetModel, entity, g_flare_model)
				set_pev(entity, pev_effects, EF_BRIGHTLIGHT)
				set_pev(entity, pev_flare,   flare_id)
				set_pev(entity, pev_nextthink, get_gametime() + 126.6);
				fm_set_rendering(entity, kRenderFxGlowShell, 150, 150, 250, kRenderNormal, 16)
				set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_FLARE);
				g_haveflarenade[attacker]--;
				return FMRES_SUPERCEDE;
			}
			else
			{
				fm_set_trail(entity, 0, 27, 127, 200);
				fm_set_rendering(entity, kRenderFxGlowShell, 0, 27, 127, kRenderNormal, 15);
				set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_FROST);
			}
			return FMRES_SUPERCEDE;
		}
		if(model[9] == 'f' && model[10] == 'l')
		{
			static attacker;
			attacker = pev(entity, pev_owner);
			if(g_defence_items[attacker] & TELENADE && is_user_alive(attacker))
			{
				fm_set_trail(entity, 100, 100, 100, 255);
				fm_set_rendering(entity, kRenderFxGlowShell, 100, 100, 100, kRenderNormal, 15);
				set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_TELE);
				return FMRES_SUPERCEDE;
			}
		}
	}
	
	return FMRES_IGNORED;
}

public fwm_touch(ent, id)
{
	if(!pev_valid(ent))
		return FMRES_IGNORED;
	
	static class[20];
	pev(ent, pev_classname, class, charsmax(class));
	if(equal(class, "rocketfrombazooka")) 
	{
		static Float:fOrigin[3], iOrigin[3];
		entity_get_vector(ent, EV_VEC_origin, fOrigin);
		FVecIVec(fOrigin, iOrigin);
		jp_radius_damage(ent);
		iOrigin[2] += 75;
		te_create_explosion(iOrigin, g_frost_spr[3], 25, 15, TE_EXPLFLAG_NOSOUND);
		iOrigin[2] -= 75;
		for(new i = 0; i < 3; i++)
		{
			message_begin(MSG_ALL, SVC_TEMPENTITY, iOrigin);
			write_byte(21);
			write_coord(iOrigin[0]);
			write_coord(iOrigin[1]);
			write_coord(iOrigin[2]);
			write_coord(iOrigin[0]);
			write_coord(iOrigin[1]);
			write_coord(iOrigin[2]+200+i*100);
			write_short(g_frost_spr[0]);
			write_byte(0);
			write_byte(1);
			write_byte(6);
			write_byte(100);
			write_byte(1);
			write_byte(random_num(50, 200));
			write_byte(random_num(50, 200));
			write_byte(random_num(50, 200));
			write_byte(200);
			write_byte(0);
			message_end();
		}
		remove_entity(ent);
	}
	
	if(!is_user_valid_connected(id))
		return FMRES_IGNORED;

	if(strcmp(class, "camp_nade") == 0)
	{	
		if(ValidTouch(id))
			g_heal[id] = 1;
		return FMRES_IGNORED;
	}
	
	if(strcmp(class, item_class_name) == 0)
	{	
		if(ValidTouch(id))
		{
			give_bonus(id);
			set_pev(ent, pev_effects, EF_NODRAW);
			set_pev(ent, pev_solid, SOLID_NOT);
		}
		return FMRES_IGNORED;
	}
	
	if(strcmp(class, "present_ent") == 0)
	{	
		if(ValidTouch(id))
		{
			give_present_box(id);
			set_pev(ent, pev_effects, EF_NODRAW);
			set_pev(ent, pev_solid, SOLID_NOT);
		}
		return FMRES_IGNORED;
	}
	
	if(strcmp(class, "bosschest") == 0)
	{	
		if(ValidTouch(id))
		{
			give_boss_chest(id);
			set_pev(ent, pev_effects, EF_NODRAW);
			set_pev(ent, pev_solid, SOLID_NOT);
		}
		return FMRES_IGNORED;
	}
	
	return FMRES_IGNORED;
}

public give_boss_chest(id)
{
	if(!is_user_alive(id))
		return;
		
	color(0, "^4%s^3 %s^1 pick up the^3 %s^1! Received: ^3%d^1 Gold, ^3%d^1 Experience, ^3%d^1 Powder, ^3%d^1 Damage, ^3%d^1 Critic!", TAG, g_playername[id], boss_chest[CurrentDay][0], str_to_num(boss_chest[CurrentDay][2]), str_to_num(boss_chest[CurrentDay][3]), str_to_num(boss_chest[CurrentDay][4]), str_to_num(boss_chest[CurrentDay][5]), str_to_num(boss_chest[CurrentDay][6]));
	check_level(id, str_to_num(boss_chest[CurrentDay][3]), str_to_num(boss_chest[CurrentDay][2]));
	g_powder[id] += str_to_num(boss_chest[CurrentDay][4]);
	g_damage[id] += str_to_float(boss_chest[CurrentDay][5]);
	g_status_player[id][4] += str_to_num(boss_chest[CurrentDay][6]);
}

public give_present_box(id)
{
	if(!is_user_alive(id))
		return;
		
	switch(random_num(0, 3))
	{
		case 0:
		{
			new present = random_num(5, 15);
			color(0, "^4%s^3 %s^1 got from present box^3 %d Powder^1!", TAG, g_playername[id], present);
			g_powder[id] += present;
		}
		case 1:
		{
			new present = random_num(50, 100);
			color(0, "^4%s^3 %s^1 got from present box^3 %d Gold^1!", TAG, g_playername[id], present);
			g_points[id] += present;
		}
		case 2:
		{
			color(0, "^4%s^3 %s^1 got from present box^3 16000$^1!", TAG, g_playername[id]);
			cs_set_user_money(id, 16000, 1);
		}
		case 3:
		{
			if(random_num(0, 99) == 99)
			{
				color(0, "^4%s^1 OMG!!^3 %s^1 got the ULTRA BOX! He got^3 2500^1 Gold!", TAG, g_playername[id]);
				g_points[id] += 2500;
			}
			else
			{
				color(0, "^4%s^3 %s^1 got from present box^3 100 HP^1!", TAG, g_playername[id]);
				set_user_health(id, get_user_health(id) + 100);
				g_max_hp[id] += 100;
			}
		}
	}
}

stock jp_radius_damage(entity) 
{
	new id = entity_get_edict(entity, EV_ENT_owner);
	static hp, dist;
	for(new i = 1; i <= g_maxplayers; i++) 
	{
		if(!is_user_alive(i) || !is_user_bot(i))
			continue;
		
		dist = floatround(entity_range(entity, i))
		if(dist <= 350) 
		{
			hp = get_user_health(i);
			g_points[id] += 200;
			
			if(hp > 750)
				set_user_health(i, hp - 750);
			else
			{
				ExecuteHamB(Ham_Killed, i, id, 2);
				set_user_frags(id, get_user_frags(id) + 1);
			}
		}
	}
}

public message_cur_weapon(msg_id, msg_dest, msg_entity)
{	
	if(!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1)
		return;
	
	if(!is_user_bot(msg_entity))
	{
		static weapon, clip;
		weapon = get_msg_arg_int(2);
		clip = get_msg_arg_int(3);
		
		if(MAXCLIP[weapon] > 2)
		{
			set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon]);
			if(clip < 2)
			{
				static wname[32], weapon_ent;
				get_weaponname(weapon, wname, charsmax(wname));
				weapon_ent = fm_find_ent_by_owner(-1, wname, msg_entity);
				fm_set_weapon_ammo(weapon_ent, MAXCLIP[weapon]);
			}
		}
	}
}

public open_classmenu(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\ySelect your human class^n\wCurrent Class: %s", human_race[g_human_class[id][0]][0]);
	menu = menu_create(menu_item, "classmenu_handler");
	for(new i = 1; i < sizeof human_race; i++)
	{
		if(g_level[id] > str_to_num(human_race[i][6]))
			formatex(menu_item, charsmax(menu_item), "\rLv.%s [ %s ]", human_race[i][6], human_race[i][0]);
		else
			formatex(menu_item, charsmax(menu_item), "\dLv.%s [ %s ]", human_race[i][6], human_race[i][0]);
			
		if(str_to_num(human_race[i][7]) == 1)
		{
			if(cyby_get_vip(id))
				formatex(menu_item, charsmax(menu_item), "\rLv.%s [ %s ] [ VIP ONLY ]", human_race[i][6], human_race[i][0]);
			else
				formatex(menu_item, charsmax(menu_item), "\dLv.%s [ %s ] [ VIP ONLY ]", human_race[i][6], human_race[i][0]);
		}
		
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public classmenu_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	item++;
	if(str_to_num(human_race[item][6]) > g_level[id])
	{
		color(id, "^4%s^1 You require a higher level to use this class!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(str_to_num(human_race[item][7]) == 1)
	{
		if(!cyby_get_vip(id))
		{
			color(id, "^4%s^1 This class can be used only by VIPS!", TAG);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
	}
	if(g_human_class[id][0] == item)
	{
		color(id, "^4%s^1 This class is selected already!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	g_human_class[id][5] = item;
	color(id, "^4%s^1 Next round you will use^3 %s Class^1!^4 +%s HP | +%s AP | +%s DAMAGE^1", TAG, human_race[g_human_class[id][5]][0], human_race[g_human_class[id][5]][1], human_race[g_human_class[id][5]][2], human_race[g_human_class[id][5]][3]);
	color(id, "^4%s^3 %s: %s^1 |^4 %s: %s^1", TAG, human_race[0][4], human_race[g_human_class[id][5]][4], human_race[0][5], human_race[g_human_class[id][5]][5]);
	color(id, "^4%s^1 Press^3 G^1 to use Active skill!", TAG);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public set_human_class_stats(id)
{
	if(g_human_class[id][0] != g_human_class[id][5])
	{
		g_human_class[id][0] = g_human_class[id][5];
		color(id, "^4%s^1 Enjoy your new class^3 %s^4 +%s HP +%s AP +%s DAMAGE^1", TAG, human_race[g_human_class[id][0]][0], human_race[g_human_class[id][0]][1], human_race[g_human_class[id][0]][2], human_race[g_human_class[id][0]][3]);
		color(id, "^4%s^3 %s: %s^1 |^4 %s: %s^1", TAG, human_race[0][4], human_race[g_human_class[id][0]][4], human_race[0][5], human_race[g_human_class[id][0]][5]);
	}
	
	set_user_health(id, get_user_health(id) + str_to_num(human_race[g_human_class[id][0]][1]));
	set_user_armor(id, get_user_armor(id) + str_to_num(human_race[g_human_class[id][0]][2]));
	g_human_class[id][1] = 0;
	g_human_class[id][3] = 0;
	g_human_class[id][4] = 0;
	g_human_class[id][6] = 0;
}

public use_active(id)
{
	if(!is_user_alive(id) || is_user_bot(id))
		return PLUGIN_CONTINUE;
		
	if(g_human_class[id][4])
	{
		client_print(id, print_center, "You need to wait %d more to use the skill!", g_human_class[id][4]);
		return PLUGIN_HANDLED;
	}
	
	switch(g_human_class[id][0])
	{
		case 1:
		{
			g_human_class[id][1] = 10;
			g_human_class[id][4] = g_human_class[id][1] * 3;
			g_human_class[id][6] = 0;
		}
		case 2:
		{
			g_human_class[id][1] = 5;
			g_human_class[id][4] = g_human_class[id][1] * 3;
		}
		case 3:
		{
			g_human_class[id][1] = 7;
			g_human_class[id][4] = g_human_class[id][1] * 2;
		}
		case 4:
		{
			if(can_attract_monsters(id))
				g_human_class[id][4] = 8;
			else
				client_print(id, print_center, "You can't use right now this ability!", TAG);
		}
		case 5:
		{
			if(is_somebody_in_target(id))
				g_human_class[id][4] = 5;
			else
				client_print(id, print_center, "No target or you can't use this ability right now!", TAG);
		}
		case 6:
		{
			g_human_class[id][4] = 10;
			g_max_hp[id] += 150;
			set_user_health(id, get_user_health(id) + 150);
			client_print(id, print_center, "You got +150 HP");
		}
		case 7:
		{
			if(can_kill_arround(id))
				g_human_class[id][4] = 5;
			else
				client_print(id, print_center, "You can't use right now this ability!", TAG);
		}
	}
	return PLUGIN_HANDLED;
}

bool:is_somebody_in_target(id)
{
	new body, index, origins[3];
	get_user_aiming(id, index, body);

	if(is_user_alive(index) && is_user_bot(index) && CurrentRespawns)
	{
		get_user_origin(index, origins);
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
		write_byte(1);	
		write_short(id);
		write_coord(origins[0]);
		write_coord(origins[1]);
		write_coord(origins[2]);
		write_short(g_fxbeam);
		write_byte(1);
		write_byte(1);
		write_byte(1);
		write_byte(5);
		write_byte(0);
		write_byte(255);
		write_byte(255);
		write_byte(255);
		write_byte(200);
		write_byte(0);
		message_end();
		ExecuteHamB(Ham_Killed, index, id, 0);
		return true;
	}
	return false;
}

bool:can_attract_monsters(id)
{
	if(!CurrentRespawns)
		return false;
	
	attraction(id, 1);
	return true;
}

bool:can_kill_arround(id)
{
	if(!CurrentRespawns)
		return false;
	
	new Float:originF[3], origins[3];
	pev(id, pev_origin, originF);
	new victim = -1;
	while((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, 300.0)) != 0)
	{
		if(!is_user_alive(victim) || !is_user_bot(victim))
			continue;
		
		get_user_origin(victim, origins);
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
		write_byte(1);	
		write_short(id);
		write_coord(origins[0]);
		write_coord(origins[1]);
		write_coord(origins[2]);
		write_short(g_fxbeam);
		write_byte(1);
		write_byte(1);
		write_byte(1);
		write_byte(5);
		write_byte(0);
		write_byte(255);
		write_byte(255);
		write_byte(255);
		write_byte(200);
		write_byte(0);
		message_end();
		ExecuteHamB(Ham_Killed, victim, id, 0);
	}
	return true;
}

public show_benefits_menu(id)
{
	new menu = menu_create("\rBenefits Menu^n\rCost:\w 5 Hours", "benefits_handler");
	new menu_item[128];
	if(g_tag_chat[id][0])
		formatex(menu_item, charsmax(menu_item), "\yTag Chat \r-\w %s", g_tag_chat[id]);
	else
		formatex(menu_item, charsmax(menu_item), "\yTag Chat");
	menu_additem(menu, menu_item, "");
	if(g_msg_in[id][0])
		formatex(menu_item, charsmax(menu_item), "\yEntry Message^n\w%s", g_msg_in[id]);
	else
		formatex(menu_item, charsmax(menu_item), "\yEntry Message");
	menu_additem(menu, menu_item, "");
	if(g_msg_out[id][0])
		formatex(menu_item, charsmax(menu_item), "\yExit Message^n\w%s", g_msg_out[id]);
	else
		formatex(menu_item, charsmax(menu_item), "\rExit Message");
	menu_additem(menu, menu_item, "");
	if(g_deathnote[id][0])
		formatex(menu_item, charsmax(menu_item), "\yKiller Message^n\w%s", g_deathnote[id]);
	else
		formatex(menu_item, charsmax(menu_item), "\yKiller Message");
	menu_additem(menu, menu_item, "");
	if(g_attack_items[id] & CHRWISH)
		formatex(menu_item, charsmax(menu_item), "\yCustom Nade^n\w%s", effectsname[g_custom_nade[id]][0]);
	else
		formatex(menu_item, charsmax(menu_item), "\yCustom Nade");
	menu_additem(menu, menu_item, "");
	if(g_entering_sound[id])
		formatex(menu_item, charsmax(menu_item), "\yCustom Login Sound^n\w%s", join_sounds_vip[g_entering_sound[id]][0]);
	else
		formatex(menu_item, charsmax(menu_item), "\yCustom Login Sound^n\wNo Sound");
	menu_additem(menu, menu_item, "");
	
	if(g_lasermineskin[id])
		formatex(menu_item, charsmax(menu_item), "\yCustom Lasermine Skin^n\w%s", lasermine_skins[g_lasermineskin[id]]);
	else
		formatex(menu_item, charsmax(menu_item), "\yCustom Lasermine Skin^n\wNormal Skin");
	menu_additem(menu, menu_item, "");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public benefits_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(g_timeplayed[id] < 300)
	{
		color(id, "^4%s^1 You need at least^3 5 Hours played^1.", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0: g_using_benefits[id] = 1, client_cmd(id, "messagemode INPUT_MSG"), color(id, "^4%s^1 Your tag need to contain a maximum of 11 characters, only letters and spaces and maximum of 2 hyphens.", TAG);
		case 1: g_using_benefits[id] = 2, client_cmd(id, "messagemode INPUT_MSG"), color(id, "^4%s^1 Your entry message need to contain a maximum of 31 characters, only letters and spaces and maximum of 2 hyphens.", TAG);
		case 2: g_using_benefits[id] = 3, client_cmd(id, "messagemode INPUT_MSG"), color(id, "^4%s^1 Your exit message need to contain a maximum of 31 characters, only letters and spaces and maximum of 2 hyphens.", TAG);
		case 3: g_using_benefits[id] = 4, client_cmd(id, "messagemode INPUT_MSG"), color(id, "^4%s^1 Your killer message should contain 63 characters!", TAG);
		case 4: choose_grenade_effect(id);
		case 5: open_songmenu(id);
		case 6: open_lasermine(id);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_lasermine(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\ySelect your lasermine skin^n\r%s", g_lasermineskin[id] > 0 ? lasermine_skins[g_lasermineskin[id]] : "Normal Laser");
	menu = menu_create(menu_item, "lasermine_handler");
	for(new i = 0; i < sizeof lasermine_skins; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\r%s", lasermine_skins[i]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public lasermine_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	g_lasermineskin[id] = item;
	color(id, "^4%s^1 You have now^3 %s^1 as your lasermine skin", TAG, lasermine_skins[g_lasermineskin[id]]);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public show_round_best(id)
{
	new menu = menu_create("\rBest of Rounds", "round_best_handler");
	new menu_item[128];
	if(idkills)
		formatex(menu_item, charsmax(menu_item), "\yMost kills last round:\w %s", g_playername[idkills]);
	else
		formatex(menu_item, charsmax(menu_item), "\yMost kills last round:\w DISCONNECTED");
	menu_additem(menu, menu_item, "");
	if(iddamage)
		formatex(menu_item, charsmax(menu_item), "\yMost damage last round:\w %s", g_playername[iddamage]);
	else
		formatex(menu_item, charsmax(menu_item), "\yMost damage last round:\w DISCONNECTED");
	menu_additem(menu, menu_item, "");
	if(idspent)
		formatex(menu_item, charsmax(menu_item), "\yMost spent Gold last round:\w %s", g_playername[idspent]);
	else
		formatex(menu_item, charsmax(menu_item), "\yMost spent Gold last round:\w DISCONNECTED");
	menu_additem(menu, menu_item, "");
	formatex(menu_item, charsmax(menu_item), "\yTotal rounds most kills:\r %d\w ANNOUNCE", g_totalkills[id]);
	menu_additem(menu, menu_item, "");
	formatex(menu_item, charsmax(menu_item), "\yTotal rounds most damage:\r %d\w ANNOUNCE", g_totaldamage[id]);
	menu_additem(menu, menu_item, "");
	formatex(menu_item, charsmax(menu_item), "\yTotal rounds most spent gold:\r %d\w ANNOUNCE", g_totalspent[id]);
	menu_additem(menu, menu_item, "");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public round_best_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			if(idkills)
				color(0, "^4%s^3 %s^1 killed the most last round!", TAG, g_playername[idkills]);
			else
				color(0, "^4%s^1 The player is disconnected.", TAG);
		}
		case 1:
		{
			if(iddamage)
				color(0, "^4%s^3 %s^1 did the most damage last round!", TAG, g_playername[iddamage]);
			else
				color(0, "^4%s^1 The player is disconnected.", TAG);
		}
		case 2:
		{
			if(idspent)
				color(0, "^4%s^3 %s^1 spent the most gold last round!", TAG, g_playername[idspent]);
			else
				color(0, "^4%s^1 The player is disconnected.", TAG);
		}
		case 3: color(0, "^4%s^3 %s^1 got^4 %d times^1 the^3 most kills^1 in a night!", TAG, g_playername[id], g_totalkills[id]);
		case 4: color(0, "^4%s^3 %s^1 got^4 %d times^1 the^3 most damage^1 in a night!", TAG, g_playername[id], g_totaldamage[id]);
		case 5: color(0, "^4%s^3 %s^1 got^4 %d times^1 the^3 most spent on gold^1 in a night!", TAG, g_playername[id], g_totalspent[id]);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_songmenu(id)
{
	if(!cs_get_user_team(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR)
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\ySelect your connecting sound^n\r%s", g_entering_sound[id] > 0 ? join_sounds_vip[g_entering_sound[id]][0] : "No Song");
	menu = menu_create(menu_item, "song_handler");
	for(new i = 0; i < sizeof join_sounds_vip; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\r%s", join_sounds_vip[i][0]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public song_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	g_entering_sound[id] = item;
	color(id, "^4%s^1 You have now^3 %s^1 as your connecting sound!", TAG, join_sounds_vip[g_entering_sound[id]][0]);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_quests_menu(id)
{
	new menu = menu_create("\rCheck Quests", "fm_quests_handler");
	new menu_item[128];
	formatex(menu_item, charsmax(menu_item), "\yYour Quests");
	menu_additem(menu, menu_item, "");
	formatex(menu_item, charsmax(menu_item), "\yOther Quests");
	menu_additem(menu, menu_item, "");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public fm_quests_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0: g_checkid[id] = id, show_personal_quests(id, id);
		case 1: open_player_menu(id, 3);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public show_personal_quests(id, checkid)
{
	if(!get_bit(g_isloaded, id) || !get_bit(g_isloaded, checkid))
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100];
	formatex(menu_item, charsmax(menu_item), "\rStatus Quests^n\y%s", g_playername[checkid]);
	menu = menu_create(menu_item, "sc_personal_quests");
	if(g_attack_items[checkid] == read_flags("acdegh"))
		formatex(menu_item, charsmax(menu_item), "\y%s \w[FINISHED]", quests_data[0]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \w[NOT FINISHED]", quests_data[0]);
	menu_additem(menu, menu_item, "");
	if(g_defence_items[checkid] == read_flags("abdefgh"))
		formatex(menu_item, charsmax(menu_item), "\y%s \w[FINISHED]", quests_data[1]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \w[NOT FINISHED]", quests_data[1]);
	menu_additem(menu, menu_item, "");
	if(g_vip_items[checkid] == read_flags("abcd"))
		formatex(menu_item, charsmax(menu_item), "\y%s \w[FINISHED]", quests_data[2]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \w[NOT FINISHED]", quests_data[2]);
	menu_additem(menu, menu_item, "");
	if(g_attack[checkid] == 25)
		formatex(menu_item, charsmax(menu_item), "\y%s \w[FINISHED]", quests_data[3]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \w[%d/25]", quests_data[3], g_attack[checkid]);
	menu_additem(menu, menu_item, "");
	if(g_defence[checkid] == 10)
		formatex(menu_item, charsmax(menu_item), "\y%s \w[FINISHED]", quests_data[4]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \w[%d/10]", quests_data[4], g_defence[checkid]);
	menu_additem(menu, menu_item, "");
	if(g_quest_data[checkid][5] >= 15000)
		formatex(menu_item, charsmax(menu_item), "\y%s \w[FINISHED]", quests_data[5]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \w[%d/15000]", quests_data[5], g_quest_data[checkid][5]);
	menu_additem(menu, menu_item, "");
	if(g_quest_data[checkid][6] >= 1500)
		formatex(menu_item, charsmax(menu_item), "\y%s \w[FINISHED]", quests_data[6]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \w[%d/1500]", quests_data[6], g_quest_data[checkid][6]);
	menu_additem(menu, menu_item, "");
	if(floatround(g_timeplayed[checkid] / 60.0) >= 5)
		formatex(menu_item, charsmax(menu_item), "\y%s \w[FINISHED]", quests_data[7]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \w[%d/5]", quests_data[7], floatround(g_timeplayed[checkid] / 60.0));
	menu_additem(menu, menu_item, "");
	if(g_quest_data[checkid][8] >= 50000)
		formatex(menu_item, charsmax(menu_item), "\y%s \w[FINISHED]", quests_data[8]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \w[%d/50000]", quests_data[8], g_quest_data[checkid][8]);
	menu_additem(menu, menu_item, "");
	if(cyby_get_vip(checkid))
		formatex(menu_item, charsmax(menu_item), "\y%s \w[FINISHED]", quests_data[9]);
	else
		formatex(menu_item, charsmax(menu_item), "\y%s \w[NOT FINISHED]", quests_data[9]);
	menu_additem(menu, menu_item, "");	
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public sc_personal_quests(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			if(g_attack_items[g_checkid[id]] == read_flags("acdegh"))
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 FINISHED^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
			else
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 NOT FINISHED^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
		}
		case 1:
		{
			if(g_defence_items[g_checkid[id]] == read_flags("abdefgh"))
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 FINISHED^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
			else
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 NOT FINISHED^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
		}
		case 2:
		{
			if(g_vip_items[g_checkid[id]] == read_flags("abcd"))
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 FINISHED^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
			else
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 NOT FINISHED^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
		}
		case 3:
		{
			if(g_attack[g_checkid[id]] == 25)
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [25/25]^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
			else
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [%d/25]^1.", TAG, g_playername[g_checkid[id]], quests_data[item], g_attack[g_checkid[id]]);
		}
		case 4:
		{
			if(g_defence[g_checkid[id]] == 10)
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [10/10]^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
			else
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [%d/10]^1.", TAG, g_playername[g_checkid[id]], quests_data[item], g_defence[g_checkid[id]]);
		}
		case 5:
		{
			if(g_quest_data[g_checkid[id]][5] >= 15000)
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [15000/15000]^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
			else
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [%d/15000]^1.", TAG, g_playername[g_checkid[id]], quests_data[item], g_quest_data[g_checkid[id]][5]);
		}
		case 6:
		{
			if(g_quest_data[g_checkid[id]][6] >= 1500)
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [15000/1500]^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
			else
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [%d/1500]^1.", TAG, g_playername[g_checkid[id]], quests_data[item], g_quest_data[g_checkid[id]][6]);
		}
		case 7:
		{
			if(floatround(g_timeplayed[g_checkid[id]] / 60.0) >= 5)
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [FINISHED]^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
			else
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [%d/5]^1.", TAG, g_playername[g_checkid[id]], quests_data[item], floatround(g_timeplayed[g_checkid[id]] / 60.0));
		}
		case 8:
		{
			if(g_quest_data[g_checkid[id]][8] >= 50000)
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [FINISHED]^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
			else
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [%d/50000]^1.", TAG, g_playername[g_checkid[id]], quests_data[item], g_quest_data[g_checkid[id]][8]);
		}
		case 9:
		{
			if(cyby_get_vip(g_checkid[id]))
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [FINISHED]^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
			else
				color(0, "^4%s^3 %s^1 got the quest^3 %s^4 [NOT FINISHED]^1.", TAG, g_playername[g_checkid[id]], quests_data[item]);
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public client_infochanged(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE;

	new const name[] = "name";
	new szOldName[32], szNewName[32];
	pev(id, pev_netname, szOldName, charsmax(szOldName));
	if(szOldName[0])
	{
		get_user_info(id, name, szNewName, charsmax(szNewName));
		if(!equal(szOldName, szNewName))
		{
			set_user_info(id, name, szOldName);
			console_print(id, "You can't change your name on this server.");
			return PLUGIN_HANDLED;
		}
	}
	return PLUGIN_CONTINUE;
}

public ham_item_deploy_knife(weapon_ent)
{
	new owner = fm_cs_get_weapon_ent_owner(weapon_ent);
	
	if(!pev_valid(owner))
		return;
	
	if(!is_user_valid_connected(owner))
		return;
		
	if(is_user_bot(owner) || !is_user_alive(owner))
		return;
		
	if(g_vip_items[owner] & SANTAKNIFE)
	{
		static modelfile[128];
		formatex(modelfile, charsmax(modelfile), "models/monster_invasion/v_%s.mdl", knife_belea[g_currentknife[owner]][1]);
		set_pev(owner, pev_viewmodel2, modelfile);
		formatex(modelfile, charsmax(modelfile), "models/monster_invasion/p_%s.mdl", knife_belea[g_currentknife[owner]][1]);
		set_pev(owner, pev_weaponmodel2, modelfile);
	}
	else
	{
		set_pev(owner, pev_viewmodel2, weapon_models[1]);
		set_pev(owner, pev_weaponmodel2, weapon_models[0]);
	}
	ExecuteHamB(Ham_Player_ResetMaxSpeed, owner);
}

public Player_TakeDamage(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits) 
{
	if(!is_user_alive(iAttacker) || !is_user_connected(iVictim) || !is_user_connected(iAttacker))
		return HAM_IGNORED;
		
	if(get_bit(g_isfrost, iVictim) || g_endround || waiting)
		return HAM_SUPERCEDE;

	if(cs_get_user_team(iVictim) == cs_get_user_team(iAttacker) && g_pvp[iAttacker] == -1 && g_pvp[iVictim] == -1)
		return HAM_IGNORED;
	
	if(is_user_bot(iAttacker))
	{
		if(g_vip_items[iVictim] & SANTAKNIFE && get_user_weapon(iVictim) == CSW_KNIFE && random_num(1, 100) >= 25)
			return HAM_SUPERCEDE;
			
		if(get_user_armor(iVictim) > 0)
		{
			fDamage = str_to_float(monster_data[CurrentDay][9]);
			set_user_armor(iVictim, get_user_armor(iVictim) - (floatround(fDamage) * 2));
			if(get_user_armor(iVictim) < 0)
				set_user_armor(iVictim, 0);
			return HAM_SUPERCEDE;
		}
		
		fDamage = str_to_float(monster_data[CurrentDay][9]);
		fDamage -= float(g_defence[iVictim] * 5);
		SetHamParamFloat(4, fDamage);
		return HAM_IGNORED;
	}
	
	if(is_user_bot(iVictim))
		g_nodamage[iVictim] = 0;
	
	if(g_vip_items[iAttacker] & SANTAKNIFE && get_user_weapon(iAttacker) == CSW_KNIFE)
	{
		if(g_currentknife[iAttacker] == 0 && random_num(0, 4) > 3)
			make_it_frost(iVictim, 0.7);
		fDamage *= str_to_float(knife_belea[g_currentknife[iAttacker]][2]);
		if(g_status_player[iAttacker][6])
			fDamage += float(g_status_player[iAttacker][6]) * str_to_float(status_strings[6][2]);
	}
	
	switch(get_user_weapon(iAttacker))
	{
		case CSW_TMP:
		{
			fDamage *= str_to_float(string_weapons_menu[0][3]); 
			if(g_weapon_skin[iAttacker][0]) 
				fDamage += 10.0;
		}
		case CSW_MAC10:
		{
			fDamage *= str_to_float(string_weapons_menu[1][3]);
			if(g_weapon_skin[iAttacker][1])
				fDamage += 10.0;
		}
		case CSW_UMP45: 
		{
			fDamage *= str_to_float(string_weapons_menu[2][3]);
			if(g_weapon_skin[iAttacker][2]) 
				fDamage += 10.0;
		}
		case CSW_MP5NAVY:
		{
			fDamage *= str_to_float(string_weapons_menu[3][3]);
			if(g_weapon_skin[iAttacker][3]) 
				fDamage += 10.0;
		}
		case CSW_P90:
		{
			fDamage *= str_to_float(string_weapons_menu[4][3]);
			if(g_weapon_skin[iAttacker][4]) 
				fDamage += 10.0;
		}
		case CSW_M249:
		{
			fDamage *= str_to_float(string_weapons_menu[5][3]);
			if(g_weapon_skin[iAttacker][5])
				fDamage += 10.0;
		}
		case CSW_M3: 
		{
			fDamage *= str_to_float(string_weapons_menu[6][3]);
			if(g_weapon_skin[iAttacker][6]) 
				fDamage += 10.0;
		}
		case CSW_XM1014:
		{
			fDamage *= str_to_float(string_weapons_menu[7][3]);
			if(g_weapon_skin[iAttacker][7]) 
				fDamage += 10.0;
		}
		case CSW_M4A1: 
		{
			fDamage *= str_to_float(string_weapons_menu[8][3]);
			if(g_weapon_skin[iAttacker][8]) 
				fDamage += 10.0;
		}
		case CSW_AK47:
		{
			fDamage *= str_to_float(string_weapons_menu[9][3]);
			if(g_weapon_skin[iAttacker][9]) 
				fDamage += 10.0;
		}
		case CSW_SG550:
		{
			fDamage *= str_to_float(string_weapons_menu[10][3]);
			if(g_weapon_skin[iAttacker][10]) 
				fDamage += 10.0;
		}
		case CSW_AWP: 
		{
			fDamage *= str_to_float(string_weapons_menu[11][3]);
			if(g_weapon_skin[iAttacker][11]) 
				fDamage += 10.0;
		}
	}
	if(g_attack[iAttacker])
		fDamage += float(g_attack[iAttacker] * 1);
		
	if((g_attack_items[iAttacker] & ULTRABULLETS))
	{
		if(g_status_player[iAttacker][4])
		{
			if(random_num(0, 100) >= (75 - g_status_player[iAttacker][4] * str_to_num(status_strings[4][2])))
				fDamage *= 1.2;
		}
		else
		{
			if(random_num(0, 100) >= 75)
				fDamage *= 1.2;
		}
	}
	if(g_status_player[iAttacker][2])
		fDamage += Float:g_status_player[iAttacker][2] * str_to_float(status_strings[2][2]);
		
	g_damage[iAttacker] += fDamage;
	g_rounddamage[iAttacker] += floatround(fDamage);
	while(g_damage[iAttacker] > 500)
	{
		check_level(iAttacker, str_to_num(monster_data[CurrentDay][7]), str_to_num(monster_data[CurrentDay][6]));
		g_damage[iAttacker] -= 500;
	}
	
	if(g_powder_items[iAttacker][4])
		set_user_health(iAttacker, clamp(get_user_health(iAttacker) + 1, 1, g_max_hp[iAttacker]));
		
	if(iVictim != id_special && is_user_bot(iVictim))
	{
		switch(g_human_class[iAttacker][0])
		{
			case 1:
			{
				g_human_class[iAttacker][2]++;
				if(g_human_class[iAttacker][2] == 5)
				{
					g_human_class[iAttacker][2] = 0;
					fDamage += (get_user_health(iVictim) * 0.05);
				}
			}
			case 2:
			{
				if(g_human_class[iAttacker][1])
					fDamage += fDamage * 0.2;
			}
			case 3:
			{
				fDamage += random_float(2.2, 5.0);
			}
			case 5: fDamage += random_float(2.2, 5.0);
			case 6:
			{
				//g_human_class[iAttacker][2] += 2;
				//fDamage += float(g_human_class[iAttacker][2]);
				fDamage += random_float(5.0, 5.0);
			}
			case 7:
			{
				g_human_class[iAttacker][2]++;
				if(g_human_class[iAttacker][2] == 3)
				{
					fDamage += 9999.9;
					g_human_class[iAttacker][2] = 0;
				}
			}
		}
	}
	if(cs_get_user_team(iVictim) != cs_get_user_team(iAttacker))
	{
		if(g_attack_items[iAttacker] & FIREBULLETS)
		{
			if(!task_exists(iVictim+TASK_BURN))
			{
				set_task(0.2, "burning_flame", iVictim+TASK_BURN, _, _, "b");
				g_is_burning[iVictim] += 0.2;
			}
			g_is_burning[iVictim] += 0.4;
			g_rounddamage[iAttacker] += 24;
		}
	}
	
	if(g_ishero[iAttacker])
		fDamage += 5.0;
	
	if(!is_user_bot(iAttacker) && !is_user_bot(iVictim) && g_pvp[iVictim] == iAttacker && g_pvp[iAttacker] == iVictim)
	{
		g_hits[iAttacker]++;
		client_print(iAttacker, print_center, "HITS TO WIN [%d/5]", g_hits[iAttacker]);
		if(g_hits[iAttacker] == 5)
		{
			color(0, "^4%s^3 %s^1 won the pvp with^3 %s^1!", TAG, g_playername[iAttacker], g_playername[iVictim]);
			user_silentkill(iVictim);
			g_hits[iAttacker] = 0;
			g_hits[iVictim] = 0;
			g_pvp[iAttacker] = -1;
			g_pvp[iVictim] = -1;
		}
		return HAM_SUPERCEDE;
	}
	SetHamParamFloat(4, fDamage);
	return HAM_IGNORED;
}

public burning_flame(taskid)
{
	if(get_user_godmode(ID_BURN) || !is_user_alive(ID_BURN) || g_is_burning[ID_BURN] < 0.1)
	{
		remove_task(taskid);
		return;
	}
	
	static health;
	health = get_user_health(ID_BURN);
	
	if (health - 6 > 0)
		set_user_health(ID_BURN, health - 6);
		
	static origins[3];
	get_user_origin(ID_BURN, origins);
	message_begin(MSG_PVS, SVC_TEMPENTITY, origins)
	write_byte(TE_SPRITE) // TE id
	write_coord(origins[0]+random_num(-5, 5)) // x
	write_coord(origins[1]+random_num(-5, 5)) // y
	write_coord(origins[2]+random_num(-10, 10)) // z
	write_short(g_iflames) // sprite
	write_byte(random_num(5, 10)) // scale
	write_byte(200) // brightness
	message_end()
	
	g_is_burning[ID_BURN] -= 0.2;
}

public set_status_player(id)
{
	if(!is_user_alive(id))
		return;
		
	set_user_health(id, get_user_health(id) + (g_status_player[id][0] * str_to_num(status_strings[0][2])));
	set_user_health(id, get_user_health(id) + (g_status_player[id][1] * str_to_num(status_strings[1][2])));
}

public ham_weapon_attack(weapon_ent)
{
	if(!pev_valid(weapon_ent))
		return HAM_IGNORED;
	
	static id;
	id = fm_get_weapon_ent_owner(weapon_ent);
	
	if(!pev_valid(id) || cs_get_weapon_ammo(weapon_ent) < 1 || is_user_bot(id) || !is_user_alive(id) || !g_have_weapon[id])
		return HAM_IGNORED;

	static Float:def_speed[3];
	def_speed[0] = get_pdata_float(weapon_ent, OFFSET_NEXT_PRIMARY_ATTACK, OFFSET_LINUX_WEAPONS) * str_to_float(string_weapons_menu[g_weaponselected[id]][2]);
	def_speed[1] = get_pdata_float(weapon_ent, OFFSET_NEXT_SECONDARY_ATTACK, OFFSET_LINUX_WEAPONS) * str_to_float(string_weapons_menu[g_weaponselected[id]][2]);
	def_speed[2] = get_pdata_float(weapon_ent, OFFSET_TIME_WEAPON_IDLE, OFFSET_LINUX_WEAPONS) * str_to_float(string_weapons_menu[g_weaponselected[id]][2]);
	set_pdata_float(weapon_ent, OFFSET_NEXT_PRIMARY_ATTACK, def_speed[0], OFFSET_LINUX_WEAPONS);
	set_pdata_float(weapon_ent, OFFSET_NEXT_SECONDARY_ATTACK, def_speed[1], OFFSET_LINUX_WEAPONS);
	set_pdata_float(weapon_ent, OFFSET_TIME_WEAPON_IDLE, def_speed[2], OFFSET_LINUX_WEAPONS);
	if(g_attack_items[id] & NORECOIL)
	{
		static Float:def_recoil[3];
		entity_get_vector(id, EV_VEC_punchangle, def_recoil);
		def_recoil[0] = def_recoil[1] = def_recoil[2] = 0.0;
		entity_set_vector(id, EV_VEC_punchangle, def_recoil);
	}
	
	if((g_attack_items[id] & DATTACK) && random_num(0, 100) >= 75)
	{
		static Float:def_speed[3];
		def_speed[0] = get_pdata_float(weapon_ent, OFFSET_NEXT_PRIMARY_ATTACK, OFFSET_LINUX_WEAPONS) * 0.5;
		def_speed[1] = get_pdata_float(weapon_ent, OFFSET_NEXT_SECONDARY_ATTACK, OFFSET_LINUX_WEAPONS) * 0.5;
		def_speed[2] = get_pdata_float(weapon_ent, OFFSET_TIME_WEAPON_IDLE, OFFSET_LINUX_WEAPONS) * 0.5;
		set_pdata_float(weapon_ent, OFFSET_NEXT_PRIMARY_ATTACK, def_speed[0], OFFSET_LINUX_WEAPONS)
		set_pdata_float(weapon_ent, OFFSET_NEXT_SECONDARY_ATTACK, def_speed[1], OFFSET_LINUX_WEAPONS)
		set_pdata_float(weapon_ent, OFFSET_TIME_WEAPON_IDLE, def_speed[2], OFFSET_LINUX_WEAPONS)
	}
	return HAM_IGNORED;
}

public fw_blockitem(iEnt)
{
	new id = pev(iEnt, pev_owner);
	if(!pev_valid(id) || is_user_bot(id) || !is_user_alive(id))
		return HAM_IGNORED;
	
	if(!CurrentRespawns)
	{
		client_print(id, print_center, "You can't use this right now...");
		return HAM_SUPERCEDE;
	}
	
	if(get_gametime() - g_delaygrenade[id] < 3.0)
	{
		client_print(id, print_center, "You need to wait %d secs to throw a nade again!", floatround(3.0 - (get_gametime() - g_delaygrenade[id])));
		return HAM_SUPERCEDE;
	}
	g_delaygrenade[id] = get_gametime();
	return HAM_IGNORED;
}

public fw_blockc4(iEnt)
{
	new id = pev(iEnt, pev_owner);
	if(!pev_valid(id) || is_user_bot(id) || !is_user_alive(id))
		return HAM_IGNORED;
	
	if(!CurrentRespawns)
	{
		client_print(id, print_center, "You can't use this right now...");
		return HAM_SUPERCEDE;
	}
	
	if(get_gametime() - g_lastshoot[id] < 10.0)
	{
		client_print(id, print_center, "You need to wait another %d sec. to use bazooka again", floatround(10.0 - (get_gametime() - g_lastshoot[id])));
		return HAM_SUPERCEDE;
	}
	
	new rocket = create_entity("info_target");
	if(rocket == 0) 
		return HAM_SUPERCEDE;
	
	entity_set_string(rocket, EV_SZ_classname, "rocketfrombazooka");
	entity_set_model(rocket, vip_models_res[0]);
	entity_set_size(rocket, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0});
	entity_set_int(rocket, EV_INT_movetype, MOVETYPE_FLY);
	entity_set_int(rocket, EV_INT_solid, SOLID_BBOX);
	
	static Float:vSrc[3];
	entity_get_vector(id, EV_VEC_origin, vSrc);
	
	static Float:Aim[3], Float:origin[3];
	VelocityByAim(id, 64, Aim)
	entity_get_vector(id, EV_VEC_origin, origin);
	vSrc[0] += Aim[0];
	vSrc[1] += Aim[1];
	entity_set_origin(rocket, vSrc);
	
	static Float:velocity[3], Float:angles[3];
	VelocityByAim(id, 1000, velocity);
	
	entity_set_vector(rocket, EV_VEC_velocity, velocity);
	vector_to_angle(velocity, angles);
	entity_set_vector(rocket, EV_VEC_angles, angles);
	entity_set_edict(rocket, EV_ENT_owner, id);
	entity_set_float(rocket, EV_FL_takedamage, 1.0);

	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(22)
	write_short(rocket)
	write_short(g_frost_spr[0])
	write_byte(10)
	write_byte(8)
	write_byte(random_num(50, 200))
	write_byte(random_num(50, 200))
	write_byte(random_num(50, 200))
	write_byte(75)
	message_end()

	emit_sound(rocket, CHAN_WEAPON, vip_sounds_res, 1.0, ATTN_NORM, 0, PITCH_NORM);
	g_lastshoot[id] = get_gametime();
	return HAM_SUPERCEDE;
}

public forward_spawn(ent) 
{
	if(!pev_valid(ent))
		return FMRES_IGNORED;
	
	static classname[32], i;
	pev(ent, pev_classname, classname, sizeof classname - 1);
	for(i = 0; i < sizeof g_objective_ents; ++i) 
	{
		if(equal(classname, g_objective_ents[i])) 
		{
			if(!(REMOVE_OBJECTIVES & g_objective_type[i]))
				return FMRES_IGNORED;
			
			engfunc(EngFunc_RemoveEntity, ent);
			return FMRES_SUPERCEDE;
		}
	}
	
	return FMRES_IGNORED;
}

public Player_Spawn(id) 
{
	if(!is_user_alive(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR || !cs_get_user_team(id) || CurrentDay > MIERCURI)
		return;

	if(!is_user_bot(id))
	{
		set_user_godmode(id, 1);
			
		if(!get_bit(g_isloaded, id))
		{
			load_nades(id);
			new timestr[256];
			if(fvault_get_data(fvault_timeplayed, g_playername[id], timestr, charsmax(timestr)))
				g_timeplayed[id] = str_to_num(timestr);
			else
			{
				g_timeplayed[id] = 0;
				color(0, "^4%s^1 Welcome to our new player^3 %s^1!", TAG, g_playername[id]);
				color(id, "^4%s^1 I hope you will enjoy to play on this server!", TAG);
				color(id, "^4%s^1 Try to survive until next day or maybe pass^4 XD^1!", TAG);
			}
			if(fvault_get_data(fvault_tagchat, g_playername[id], timestr, charsmax(timestr)))
				formatex(g_tag_chat[id], charsmax(g_tag_chat[]), "%s", timestr);
			else
				formatex(g_tag_chat[id], charsmax(g_tag_chat[]), "");
				
			if(fvault_get_data(fvault_msg_in, g_playername[id], timestr, charsmax(timestr)))
				formatex(g_msg_in[id], charsmax(g_msg_in[]), "%s", timestr);
			else
				formatex(g_msg_in[id], charsmax(g_msg_in[]), "");
				
			if(fvault_get_data(fvault_msg_out, g_playername[id], timestr, charsmax(timestr)))
				formatex(g_msg_out[id], charsmax(g_msg_out[]), "%s", timestr);
			else
				formatex(g_msg_out[id], charsmax(g_msg_out[]), "");
			
			if(fvault_get_data(fvault_deathnote, g_playername[id], timestr, charsmax(timestr)))
				formatex(g_deathnote[id], charsmax(g_deathnote[]), "%s", timestr);
			else
				formatex(g_deathnote[id], charsmax(g_deathnote[]), "");
				
			if(fvault_get_data(fvault_joinsounds, g_playername[id], timestr, charsmax(timestr)))
				g_entering_sound[id] = str_to_num(timestr);
			else
				g_entering_sound[id] = 0;
			
			if(fvault_get_data(fvault_skindata, g_playername[id], timestr, charsmax(timestr)))
			{
				new strflags[11], strcurrentskin[2];
				parse(timestr, strflags, charsmax(strflags), strcurrentskin, charsmax(strcurrentskin));
				g_skinsdata[id] = read_flags(strflags);
				g_currentskin[id] = read_flags(strcurrentskin);
			}
			else
			{
				color(id, "^4%s^1 A new option is now available on this server!", TAG);
				color(id, "^4%s^1 You can buy^3 skins^1 for how many hours you got on this server!", TAG);
				color(id, "^4%s^1 Check the^3 game mode menu^1 by pressing^4 M^1!", TAG);
				g_skinsdata[id] = NOSKIN;
				g_currentskin[id] = NOSKIN;
			}
			
			if(fvault_get_data(fvault_data, g_playername[id], timestr, charsmax(timestr)))
			{
				new strlevel[4], strexp[10], strpoints[10], strattackitems[10], strdefenceitems[10], strvipitems[10], strattack[3], strdefence[3];
				parse(timestr, strlevel, charsmax(strlevel), strexp, charsmax(strexp), strpoints, charsmax(strpoints), strattackitems, charsmax(strattackitems), strdefenceitems, charsmax(strdefenceitems), strvipitems, charsmax(strvipitems), strattack, charsmax(strattack), strdefence, charsmax(strdefence));
				g_level[id] = str_to_num(strlevel);
				g_exp[id] = str_to_num(strexp);
				g_points[id] = str_to_num(strpoints);
				g_attack_items[id] = read_flags(strattackitems);
				g_defence_items[id] = read_flags(strdefenceitems);
				g_vip_items[id] = read_flags(strvipitems);
				g_attack[id] = str_to_num(strattack);
				g_defence[id] = str_to_num(strdefence);
			}
			else
			{
				color(id, "^4%s^1 Your data from now on is^3 saved^1!", TAG);
				g_level[id] = 1;
				g_exp[id] = 0;
				g_points[id] = 500;
				g_attack_items[id] = 0;
				g_defence_items[id] = 0;
				g_vip_items[id] = 0;
				g_attack[id] = 0;
				g_defence[id] = 0;
			}
			
			if(fvault_get_data(fvault_quests_data, g_playername[id], timestr, charsmax(timestr)))
			{
				new strkillhs[6], strkillknife[5], strspent[6];
				parse(timestr, strkillhs, charsmax(strkillhs), strkillknife, charsmax(strkillknife), strspent, charsmax(strspent));
				g_quest_data[id][5] = str_to_num(strkillhs);
				g_quest_data[id][6] = str_to_num(strkillknife);
				g_quest_data[id][8] = str_to_num(strspent);
			}
			else
			{
				color(id, "^4%s^1 Check your quests now with^3 M 9 1^1!", TAG);
				g_quest_data[id][5] = 0;
				g_quest_data[id][6] = 0;
				g_quest_data[id][8] = 0;
			}
			
			if(fvault_get_data(fvault_powder_items, g_playername[id], timestr, charsmax(timestr)))
			{
				new strpowder[9], strcostume[2], strparachute[2], strtrail[2], strglow[2], strvampiricbullets[2];
				parse(timestr, strpowder, charsmax(strpowder), strcostume, charsmax(strcostume), strparachute, charsmax(strparachute), strtrail, charsmax(strtrail), strglow, charsmax(strglow), strvampiricbullets, charsmax(strvampiricbullets));
				g_powder[id] = str_to_num(strpowder);
				g_powder_items[id][0] = str_to_num(strcostume);
				g_powder_items[id][1] = str_to_num(strparachute);
				g_powder_items[id][2] = str_to_num(strtrail);
				g_powder_items[id][3] = str_to_num(strglow);
				g_powder_items[id][4] = str_to_num(strvampiricbullets);
			}
			else
			{
				color(id, "^4%s^1 New stuff is now on! You can obtain powder from monsters.", TAG);
				g_powder[id] = 0
				g_powder_items[id][0] = 0
				g_powder_items[id][1] = 0
				g_powder_items[id][2] = 0
				g_powder_items[id][3] = 0
				g_powder_items[id][4] = 0
			}
			if(fvault_get_data(fvault_status_points, g_playername[id], timestr, charsmax(timestr)))
			{
				new str_points[3], str_health[3], str_armor[3], str_damage[3], str_speed[3], str_criticalchance[3], str_regen[3], str_axedamage[3], str_lmdamage[3];
				parse(timestr, str_points, charsmax(str_points), str_health, charsmax(str_health), str_armor, charsmax(str_armor), str_damage, charsmax(str_damage), str_speed, charsmax(str_speed), str_criticalchance, charsmax(str_criticalchance), str_regen, charsmax(str_regen), str_axedamage, charsmax(str_axedamage), str_lmdamage, charsmax(str_lmdamage));
				g_status_points[id] = str_to_num(str_points);
				g_status_player[id][0] = str_to_num(str_health);
				g_status_player[id][1] = str_to_num(str_armor);
				g_status_player[id][2] = str_to_num(str_damage);
				g_status_player[id][3] = str_to_num(str_speed);
				g_status_player[id][4] = str_to_num(str_criticalchance);
				g_status_player[id][5] = str_to_num(str_regen);
				g_status_player[id][6] = str_to_num(str_axedamage);
				g_status_player[id][7] = str_to_num(str_lmdamage);
			}
			else
			{
				g_status_points[id] = g_level[id] * 3;
				g_status_player[id][0] = 0;
				g_status_player[id][1] = 0;
				g_status_player[id][2] = 0;
				g_status_player[id][3] = 0;
				g_status_player[id][4] = 0;
				g_status_player[id][5] = 0;
				g_status_player[id][6] = 0;
				g_status_player[id][7] = 0;
				color(id, "^4%s^1 Now we have status points! You can check them by pressing^3 M92^1", TAG);
			}
			
			if(fvault_get_data(fvault_pro_players, g_playername[id], timestr, charsmax(timestr)))
			{
				new str_kills[7], str_damage[7], str_spent[7];
				parse(timestr, str_kills, charsmax(str_kills), str_damage, charsmax(str_damage), str_spent, charsmax(str_spent));
				g_totalkills[id] = str_to_num(str_kills);
				g_totaldamage[id] = str_to_num(str_damage);
				g_totalspent[id] = str_to_num(str_spent);
			}
			else
			{
				g_totalkills[id] = 0;
				g_totaldamage[id] = 0;
				g_totalspent[id] = 0;
			}
			
			if(fvault_get_data(fvault_special_skins, g_playername[id], timestr, charsmax(timestr)))
			{
				new niciodata[sizeof special_weapons][6];
				parse(timestr, niciodata[0], 5, niciodata[1], 5, niciodata[2], 5, niciodata[3], 5, niciodata[4], 5, niciodata[5], 5, niciodata[6], 5, niciodata[7], 5, niciodata[8], 5, niciodata[9], 5, niciodata[10], 5, niciodata[11], 5);
				for(new i = 0; i < sizeof special_weapons; i++)
					g_weapon_skin[id][i] = str_to_num(niciodata[i]);
			}
			else
			{
				for(new i = 0; i < sizeof special_weapons; i++)
					g_weapon_skin[id][i] = 0;
			}
			
			
			if(fvault_get_data(fvault_coins_and_chests, g_playername[id], timestr, charsmax(timestr)))
			{
				date(_, _, g_mission_date[id]);
				new smr[sizeof daily_missions][6], anotherdata[3][4];
				parse(timestr, smr[0], 5, smr[1], 5, smr[2], 5, smr[3], 5, smr[4], 5, smr[5], 5, anotherdata[0], 3, anotherdata[1], 3, anotherdata[2], 3);
				if(str_to_num(anotherdata[2]) == g_mission_date[id])
				{
					for(new i = 0; i < sizeof daily_missions; i++)
						g_daily_missions[id][i] = str_to_num(smr[i]);
				}
				else
				{
					for(new i = 0; i < sizeof daily_missions; i++)
						g_daily_missions[id][i] = 0;
				}
				g_chests[id] = str_to_num(anotherdata[0]);
				g_daily_coin[id] = str_to_num(anotherdata[1]);
			}
			else
			{
				for(new i = 0; i < sizeof daily_missions; i++)
					g_daily_missions[id][i] = 0;
					
				g_chests[id] = 0;
				g_daily_coin[id] = 12;
				date(_, _, g_mission_date[id]);
			}
			g_human_class[id][0] = 1;
			g_human_class[id][5] = 1;
			save_skindata(id);
			g_gotpowder[id] = false;
			g_human_class[id][0] = 1;
			g_human_class[id][5] = 1;
			
			load_stats(id);
			set_bit(g_isloaded, id);
		}
		
		set_human_class_stats(id);
		g_delaygrenade[id] = get_gametime();
		g_have_weapon[id] = false;
		g_weaponselected[id] = -1;
		select_weapons(id);
		set_user_godmode(id, 1);
		set_task(10.0, "remove_godplayer", id);
		if(!waiting)
			set_task(5.0, "remove_god", id);
			
		if(g_powder_items[id][2])
		{
			g_bTrail[id] = true;
			if(task_exists(id + 498744)) 
				remove_task(id + 498744);
			set_task(1.0, "TimerCreateTrail", id + 498744, .flags="b");
		}

		g_ishero[id] = false;
		client_reset(id, 0, 0);
		color(id, "^4%s^1 Press^3 M^1 for the game menu!", TAG);
		color(id, "^4%s^1 You can type any of this words to get hints and get better!", TAG);
		set_player_level(id);
		set_status_player(id);
		reset_model_player(id);
		strip_user_weapons(id);
		give_item(id, "weapon_knife");
		give_item(id, "weapon_deagle");
		cs_set_user_bpammo(id, CSW_DEAGLE, 35);
		if(g_defence_items[id] & TELENADE)
			give_item(id, "weapon_flashbang");
		if(g_defence_items[id] & DULCIURI)
			set_user_health(id, get_user_health(id) + 200);
		g_jetpackpower[id] = 5;
		if(g_vip_items[id] & JETPACKB)
			give_item(id, "weapon_c4");
		if(g_vip_items[id] & PLASMAGUN)
			g_haveflarenade[id]++, give_item(id, "weapon_smokegrenade");
		
		if(g_attack_items[id] & BESTXM1014)
			SetStartAmmo(id);
		
		set_human_class_stats(id);
		g_max_hp[id] = get_user_health(id);
		switch(g_powder_items[id][3])
		{
			case 1: set_user_rendering(id, kRenderFxGlowShell, 200, 200, 200, kRenderNormal, 14);
			case 2: set_user_rendering(id, kRenderFxGlowShell, 200, 0, 0, kRenderNormal, 14);
			case 3: set_user_rendering(id, kRenderFxGlowShell, 0, 200, 0, kRenderNormal, 14);
			case 4: set_user_rendering(id, kRenderFxGlowShell, 0, 0, 200, kRenderNormal, 14);
		}
			
		give_item(id, "weapon_hegrenade");
		if(g_attack_items[id] & CHRWISH)
			give_user_weapon(id, CSW_HEGRENADE, 200, 1);
		if(cs_get_user_team(id) == CS_TEAM_T)
		{
			cs_set_user_team(id, CS_TEAM_CT);
			user_silentkill(id);
			set_task(1.0, "respawn_player", id);
		}
	}
	else
	{
		client_reset(id, 1, 0);
		set_monster_day(id, CurrentDay);
		return;
	}
}

public choose_grenade_effect(id)
{
	if(!get_user_team(id) || get_user_team(id) == 3)
		return PLUGIN_CONTINUE;
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rSelect effect for your nade");
	menu = menu_create(menu_item, "grenade_effect_handler");
	for(new i = 0; i < sizeof effectsname; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s", effectsname[i][0]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public grenade_effect_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(!(g_attack_items[id] & CHRWISH))
	{
		color(id, "^4%s^1 You don't have^3 Bomber^1 to use this menu!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	g_custom_nade[id] = item;
	color(id, "^4%s^1 You have now^3 %s^1 effect on your grenades!", TAG, effectsname[g_custom_nade[id]][0]);
	save_nades(id);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public task_sound(iEnt)
{
	if(!pev_valid(iEnt))
		return;
		
	emit_sound(iEnt, CHAN_VOICE, ent_sound_dance, 3.0, ATTN_NORM, 0, PITCH_NORM)
	set_task(30.1, "task_sound", iEnt)
}

public task_cylinder(iEnt)
{
	if(!pev_valid(iEnt))
		return;
	
	static Float:origin[3];
	pev(iEnt, pev_origin, origin);
	new neworigin[3];
	FVecIVec(origin, neworigin);
	for(new i = 0; i < 5; i++)
	{
		neworigin[0] += random_num(-15, 15);
		neworigin[1] += random_num(-15, 15);
		neworigin[2] += random_num(-30, 30);
		te_display_additive_sprite(neworigin, g_frost_spr[6], random_num(5, 10));
	}
	set_task(1.0, "task_cylinder", iEnt)
}

public load_nades(id)
{
	new timestr[36];
	if(fvault_get_data(fvault_explosioneffects, g_playername[id], timestr, charsmax(timestr)))
		g_custom_nade[id] = str_to_num(timestr);
	else
		g_custom_nade[id] = 0;
}

public save_nades(id)
{
	if(!is_user_connected(id) || !get_bit(g_isloaded, id))
		return 0;
	
	new stupidstats[36], name[32];
	get_user_name(id, name, charsmax(name));
	formatex(stupidstats, charsmax(stupidstats), "^"%d^"", g_custom_nade[id]);
	fvault_set_data(fvault_explosioneffects, name, stupidstats);
	return 1;
}

public remove_god(id)
{
	if(!is_user_alive(id))
		return;
		
	set_user_godmode(id, 0);
}

public save_to_fvault(id)
{
	new datatosave[256];
	if(g_timeplayed[id] > 0)
	{
		num_to_str(g_timeplayed[id], datatosave, charsmax(datatosave));
		fvault_set_data(fvault_timeplayed, g_playername[id], datatosave);
		
		new playerdata[256], playerattack[10], playerdefence[10], playervip[10];
		get_flags(g_attack_items[id], playerattack, charsmax(playerattack));
		get_flags(g_defence_items[id], playerdefence, charsmax(playerdefence));
		get_flags(g_vip_items[id], playervip, charsmax(playervip));
		formatex(playerdata, charsmax(playerdata), "^"%d^" ^"%d^" ^"%d^" ^"%s^" ^"%s^" ^"%s^" ^"%d^" ^"%d^"", g_level[id], g_exp[id], g_points[id], playerattack, playerdefence, playervip, g_attack[id], g_defence[id]);
		fvault_set_data(fvault_data, g_playername[id], playerdata);
		formatex(playerdata, charsmax(playerdata), "^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^"", g_powder[id], g_powder_items[id][0], g_powder_items[id][1], g_powder_items[id][2], g_powder_items[id][3], g_powder_items[id][4]);
		fvault_set_data(fvault_powder_items, g_playername[id], playerdata);
		formatex(playerdata, charsmax(playerdata), "^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^"", g_status_points[id], g_status_player[id][0], g_status_player[id][1], g_status_player[id][2], g_status_player[id][3], g_status_player[id][4], g_status_player[id][5], g_status_player[id][6], g_status_player[id][7]);
		fvault_set_data(fvault_status_points, g_playername[id], playerdata);
		formatex(playerdata, charsmax(playerdata), "^"%d^" ^"%d^" ^"%d^"", g_totalkills[id], g_totaldamage[id], g_totalspent[id]);
		fvault_set_data(fvault_pro_players, g_playername[id], playerdata);
		
		new datatowrite[256], len = 0;
		
		for(new i = 0; i < sizeof daily_missions; i++)
			len += formatex(datatowrite[len], charsmax(datatowrite) - len, "^"%d^" ", g_daily_missions[id][i]);
		
		len += formatex(datatowrite[len], charsmax(datatowrite) - len, "^"%d^"", g_chests[id]);
		len += formatex(datatowrite[len], charsmax(datatowrite) - len, " ^"%d^"", g_daily_coin[id]);
		len += formatex(datatowrite[len], charsmax(datatowrite) - len, " ^"%d^"", g_mission_date[id]);
		fvault_set_data(fvault_coins_and_chests, g_playername[id], datatowrite);
		
		len = 0;
		for(new i = 0; i < sizeof special_weapons; i++)
			len += formatex(datatowrite[len], charsmax(datatowrite) - len, "^"%d^" ", g_weapon_skin[id][i]);
		fvault_set_data(fvault_special_skins, g_playername[id], datatowrite);
		
		if(g_tag_chat[id][0])
			fvault_set_data(fvault_tagchat, g_playername[id], g_tag_chat[id]);
		if(g_msg_in[id][0])
			fvault_set_data(fvault_msg_in, g_playername[id], g_msg_in[id]);
		if(g_msg_out[id][0])
			fvault_set_data(fvault_msg_out, g_playername[id], g_msg_out[id]);
		if(g_deathnote[id][0])
			fvault_set_data(fvault_deathnote, g_playername[id], g_deathnote[id]);
			
		num_to_str(g_entering_sound[id], datatosave, charsmax(datatosave));
		fvault_set_data(fvault_joinsounds, g_playername[id], datatosave);
		
		if(g_msg_out[id][0])
			color(0, "^4%s^3 %s^1.", g_playername[id], g_msg_out[id]);
			
		formatex(playerdata, charsmax(playerdata), "^"%d^" ^"%d^" ^"%d^"", g_quest_data[id][5], g_quest_data[id][6], g_quest_data[id][8]);
		fvault_set_data(fvault_quests_data, g_playername[id], playerdata);
		reset_bit(g_isloaded, id);
	}
}

public OnPlayerTouchWeaponBox(weapon, id)
	call_think(weapon);
	
public open_first_radio(id)
{
	if(!is_user_alive(id) || is_user_bot(id))
		return PLUGIN_HANDLED;
	
	if(get_gametime() - g_lastradio[id] < 10.0)
	{
		client_print(id, print_center, "You need to wait until you use the radio again...");
		return PLUGIN_HANDLED;
	}
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rRadio 1^n");
	menu = menu_create(menu_item, "fradiohandler");
	for(new i = 0; i < sizeof newradio1; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s", newradio1[i]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public fradiohandler(id, menu, item)
{
	if(item == MENU_EXIT || !is_user_alive(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}

	if(get_gametime() - g_lastradio[id] < 10.0)
	{
		client_print(id, print_center, "You need to wait until you use the radio again...");
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	g_lastradio[id] = get_gametime();
	color(0, "^3%s^4 (RADIO)^1: %s!", g_playername[id], newradio1[item]);
	emit_sound(id, CHAN_WEAPON, radionew[item], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_second_radio(id)
{
	if(!is_user_alive(id) || is_user_bot(id))
		return PLUGIN_HANDLED;
		
	if(get_gametime() - g_lastradio[id] < 10.0)
	{
		client_print(id, print_center, "You need to wait until you use the radio again...");
		return PLUGIN_HANDLED;
	}
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rRadio 2^n");
	menu = menu_create(menu_item, "sradiohandler");
	for(new i = 0; i < sizeof newradio1; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s", newradio2[i]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public sradiohandler(id, menu, item)
{
	if(item == MENU_EXIT || !is_user_alive(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new Float:timeleftforradio = get_gametime() - g_lastradio[id];
	if(timeleftforradio < 10.0)
	{
		client_print(id, print_center, "You need to wait %d second%s until you can use the radio again...", floatround(timeleftforradio), floatround(timeleftforradio) == 1 ? "" : "s");
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	g_lastradio[id] = get_gametime();
	color(0, "^3%s^4 (RADIO)^1: %s!", g_playername[id], newradio2[item]);
	emit_sound(id, CHAN_WEAPON, secondrdnew[item], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public fw_cmdstart(id, handle)
{
	if(!is_user_alive(id))
		return;

	if(is_user_bot(id))
	{
		if(get_uc(handle, UC_Impulse) != 100)
			return;
		
		set_uc(handle, UC_Impulse, 0);
		return;
	}
	else
	{
		if(!(g_vip_items[id] & JETPACKB) || get_user_weapon(id) != CSW_C4)
			return;
		
		if(pev(id, pev_flags) & (FL_ONGROUND|FL_SWIM|FL_INWATER) || !(pev(id, pev_button) & IN_USE)) 
		{
			g_usingjetpack[id] = false;
			return;
		}
		if(g_jetpackpower[id] < 1)
			return;
		
		if(!g_usingjetpack[id])
			g_usingjetpack[id] = true;
		
		static Float:fAim[3], Float:fVelocity[3];
		VelocityByAim(id, 550, fAim);
		fVelocity[0] = fAim[0];
		fVelocity[1] = fAim[1];
		fVelocity[2] = fAim[2];
		set_user_velocity(id, fVelocity);
	}
}

public open_powers_menu(id)
{
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rDefence Items^nGold: %d", g_points[id]);
	menu = menu_create(menu_item, "powers_handler");
	for(new i = 0; i < sizeof defence_itemsname; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s - \w%d Gold", defence_itemsname[i], def_items_price[i]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
}

public powers_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}

	if(g_points[id] < def_items_price[item])
	{
		color(id, "^4%s^1 You need^3 %d more Gold^1 for^3 %s^1!", TAG, def_items_price[item] - g_points[id], defence_itemsname[item]);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			if(g_defence_items[id] & DULCIURI)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, defence_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_defence_items[id] |= DULCIURI
			set_user_health(id, get_user_health(id) + 200);
		}
		case 1:
		{
			if(g_defence_items[id] & TELENADE)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, defence_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_defence_items[id] |= TELENADE
			give_item(id, "weapon_flashbang");
		}
		case 2:
		{
			if(g_defence_items[id] & BUNNYHOP)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, defence_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_defence_items[id] |= BUNNYHOP
		}
		case 3:
		{
			if(g_defence_items[id] & LASTHOPE)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, defence_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_defence_items[id] |= LASTHOPE
		}
		case 4:
		{
			if(g_defence_items[id] & BESTPIE)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, defence_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_defence_items[id] |= BESTPIE
		}
		case 5:
		{
			if(g_defence_items[id] & DOUBLEJUMP)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, defence_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_defence_items[id] |= DOUBLEJUMP
		}
		case 6:
		{
			if(g_defence_items[id] & CAMP_NADE)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, defence_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_defence_items[id] |= CAMP_NADE;
			g_used_shield[id] = false;
			color(id, "^4%s^1 Press^3 T^1 to use the shield!", TAG);
		}
	}
	g_points[id] -= def_items_price[item];
	g_quest_data[id][8] += def_items_price[item];
	g_roundspent[id] += def_items_price[item];
	if(g_daily_missions[id][1] + def_items_price[item] < str_to_num(daily_missions[1][1]))
		g_daily_missions[id][1] += def_items_price[item];
	else if(g_daily_missions[id][1] == str_to_num(daily_missions[1][1]))
	{
		
	}
	else
		g_daily_missions[id][1] = str_to_num(daily_missions[1][1]), g_daily_coin[id] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[id], daily_missions[1][0]);
	
	if(g_daily_missions[id][1] + def_items_price[item] == str_to_num(daily_missions[1][1]))
		g_daily_missions[id][1] = str_to_num(daily_missions[1][1]), g_daily_coin[id] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[id], daily_missions[1][0]);
		
	color(id, "^4%s^1 You bought^3 %s^1 with^3 %d Gold^1!", TAG, defence_itemsname[item], def_items_price[item]);
	emit_sound(id, CHAN_WEAPON, christmas_new_sounds[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_vip_items(id)
{
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rVIP Items^nGold: %d", g_points[id]);
	menu = menu_create(menu_item, "vip_items_handler");
	for(new i = 0; i < sizeof vip_itemsname; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s - \w%d Gold", vip_itemsname[i], vip_items_price[i]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
}

public vip_items_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	/*
	if(!cyby_get_vip(id))
	{
		color(id, "^4%s^1 Only^3 VIPS^1 can use this menu!", TAG);
		color(id, "^4%s^1 Contact via e-mail^4 [email protected]^1 or steamid^4 cyby17^1.", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	*/
	if(g_points[id] < vip_items_price[item])
	{
		color(id, "^4%s^1 You need^3 %d more Gold^1 for^3 %s^1!", TAG, vip_items_price[item] - g_points[id], vip_itemsname[item]);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			if(g_vip_items[id] & SANTABULLETS)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, vip_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_vip_items[id] |= SANTABULLETS
		}
		case 1:
		{
			if(g_vip_items[id] & JETPACKB)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, vip_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_vip_items[id] |= JETPACKB
			give_item(id, "weapon_c4");
			color(id, "^4%s^1 To use^3 jetpack^1 press^4 E^1 while you are in midair. To shoot press^3 MOUSE1^1", TAG);
		}
		case 2:
		{
			if(g_vip_items[id] & PLASMAGUN)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, vip_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_vip_items[id] |= PLASMAGUN
			g_haveflarenade[id]++, give_item(id, "weapon_smokegrenade");
		}
		case 3:
		{
			if(g_vip_items[id] & SANTAKNIFE)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, vip_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_vip_items[id] |= SANTAKNIFE
		}
	}
	
	g_points[id] -= vip_items_price[item];
	g_quest_data[id][8] += vip_items_price[item];
	g_roundspent[id] += vip_items_price[item];
	if(g_daily_missions[id][1] + vip_items_price[item] < str_to_num(daily_missions[1][1]))
		g_daily_missions[id][1] += vip_items_price[item];
	else if(g_daily_missions[id][1] == str_to_num(daily_missions[1][1]))
	{
		
	}
	else
		g_daily_missions[id][1] = str_to_num(daily_missions[1][1]), g_daily_coin[id] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[id], daily_missions[1][0]);
	
	if(g_daily_missions[id][1] + vip_items_price[item] == str_to_num(daily_missions[1][1]))
		g_daily_missions[id][1] = str_to_num(daily_missions[1][1]), g_daily_coin[id] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[id], daily_missions[1][0]);
	color(id, "^4%s^1 You bought^3 %s^1 with^3 %d Gold^1!", TAG, vip_itemsname[item], vip_items_price[item]);
	emit_sound(id, CHAN_WEAPON, christmas_new_sounds[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public EventDamage(id)
{
	new weapon, bodypart, attacker_id = get_user_attacker( id, weapon, bodypart )
	if(!is_user_alive(attacker_id)) 
		return PLUGIN_CONTINUE;

	new damage = read_data(2);
	
	if(weapon == CSW_SCOUT) 
	{
		new health = get_user_health(id)
	
		if(!is_user_connected(attacker_id))
			return PLUGIN_CONTINUE;
		if(attacker_id == id || get_user_team(id) == get_user_team(attacker_id)) 
			return PLUGIN_CONTINUE;
		if(((1.0 * damage) / (1.0 * (health + damage))) < 0.01) 
			return PLUGIN_CONTINUE;
		
		new origin[3]
		get_user_origin(id, origin);
		message_begin(MSG_ALL, SVC_TEMPENTITY) 
		write_byte(3)				// TE_EXPLOSION 
		write_coord(origin[0]) 
		write_coord(origin[1]) 
		write_coord(origin[2]-22) 
		write_short(spr_blast_shroom)		// mushroom cloud 
		write_byte(7)			// scale in 0.1u 
		write_byte(3)			// frame rate 
		write_byte(12)			// TE_EXPLFLAG_NOPARTICLES & TE_EXPLFLAG_NOSOUND 
		message_end() 
	}
		
	return PLUGIN_HANDLED
}

public open_skin_menu(id)
{
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\ySkin Shop^n");
	menu = menu_create(menu_item, "skin_handler");
	formatex(menu_item, charsmax(menu_item), "\rReset your current skin", skin_menu_shop[0]);
	tasta[0] = 0;
	tasta[1] = 0;
	menu_additem(menu, menu_item, tasta);
	for(new i = 1; i < sizeof skin_menu_shop; i++)
	{
		if(skin_price[i] == 5000)
			formatex(menu_item, charsmax(menu_item), "\y%s - \w%d Powder\r Season Skin", skin_menu_shop[i], skin_price[i]);
		else
			formatex(menu_item, charsmax(menu_item), "\y%s - \w%d Hours", skin_menu_shop[i], skin_price[i]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
}

public skin_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(!get_bit(g_isloaded, id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(!is_user_alive(id))
	{
		color(id, "^4%s^1 You need to be^3 alive^1 to switch your skin!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(skin_price[item] != 5000)
	{
		if(g_timeplayed[id] < skin_price[item] * 60)
		{
			color(id, "^4%s^1 You don't have enough^3 hours^1 to buy^4 %s^1 skin!", TAG, skin_menu_shop[item]);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
	}
	else
	{
		if(g_powder[id] < skin_price[item] && !(g_skinsdata[id] & BALLS))
		{
			color(id, "^4%s^1 You don't have^3 Powder^1 to buy^4 %s^1 skin!", TAG, skin_menu_shop[item]);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
	}
	
	if(get_gametime() - g_lastskin[id] < 60.0)
	{
		color(id, "^4%s^1 You need to wait a little bit more until you can change your skin again!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			if(g_currentskin[id] == NOSKIN)
			{
				color(id, "^4%s^1 You can't remove your skin because you don't have one^3 XD^1.", TAG);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_currentskin[id] = NOSKIN;
			g_lastskin[id] = get_gametime();
			color(id, "^4%s^1 You removed your current skin!", TAG);
			reset_model_player(id);
			save_skindata(id);
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 1:
		{
			if(g_currentskin[id] & KINGXMAS)
			{
				color(id, "^4%s^3 %s^1 skin is already set!", TAG, skin_menu_shop[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_skinsdata[id] & KINGXMAS)
			{
				color(id, "^4%s^1 You set^3 %s^1 as your main skin!", TAG, skin_menu_shop[item]);
				g_currentskin[id] = NOSKIN;
				g_currentskin[id] |= KINGXMAS;
				reset_model_player(id);
				save_skindata(id);
				menu_destroy(menu);
				g_lastskin[id] = get_gametime();
				return PLUGIN_HANDLED;
			}
			g_skinsdata[id] |= KINGXMAS;
		}
		case 2:
		{
			if(g_currentskin[id] & BEARXMAS)
			{
				color(id, "^4%s^3 %s^1 skin is already set!", TAG, skin_menu_shop[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_skinsdata[id] & BEARXMAS)
			{
				color(id, "^4%s^1 You set^3 %s^1 as your main skin!", TAG, skin_menu_shop[item]);
				g_currentskin[id] = NOSKIN;
				g_currentskin[id] |= BEARXMAS;
				reset_model_player(id);
				save_skindata(id);
				menu_destroy(menu);
				g_lastskin[id] = get_gametime();
				return PLUGIN_HANDLED;
			}
			g_skinsdata[id] |= BEARXMAS;
		}
		case 3:
		{
			if(g_currentskin[id] & BLUEGIRL)
			{
				color(id, "^4%s^3 %s^1 skin is already set!", TAG, skin_menu_shop[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_skinsdata[id] & BLUEGIRL)
			{
				color(id, "^4%s^1 You set^3 %s^1 as your main skin!", TAG, skin_menu_shop[item]);
				g_currentskin[id] = NOSKIN;
				g_currentskin[id] |= BLUEGIRL;
				reset_model_player(id);
				save_skindata(id);
				menu_destroy(menu);
				g_lastskin[id] = get_gametime();
				return PLUGIN_HANDLED;
			}
			g_skinsdata[id] |= BLUEGIRL;
		}
		case 4:
		{
			if(g_currentskin[id] & GIRLXMAS)
			{
				color(id, "^4%s^3 %s^1 skin is already set!", TAG, skin_menu_shop[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_skinsdata[id] & GIRLXMAS)
			{
				color(id, "^4%s^1 You set^3 %s^1 as your main skin!", TAG, skin_menu_shop[item]);
				g_currentskin[id] = NOSKIN;
				g_currentskin[id] |= GIRLXMAS;
				reset_model_player(id);
				save_skindata(id);
				menu_destroy(menu);
				g_lastskin[id] = get_gametime();
				return PLUGIN_HANDLED;
			}
			g_skinsdata[id] |= GIRLXMAS;
		}
		case 5:
		{
			if(g_currentskin[id] & SANTACLAUS)
			{
				color(id, "^4%s^3 %s^1 skin is already set!", TAG, skin_menu_shop[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_skinsdata[id] & SANTACLAUS)
			{
				color(id, "^4%s^1 You set^3 %s^1 as your main skin!", TAG, skin_menu_shop[item]);
				g_currentskin[id] = NOSKIN;
				g_currentskin[id] |= SANTACLAUS;
				reset_model_player(id);
				save_skindata(id);
				g_lastskin[id] = get_gametime();
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_skinsdata[id] |= SANTACLAUS;
		}
		case 6:
		{
			if(g_currentskin[id] & NEWELF)
			{
				color(id, "^4%s^3 %s^1 skin is already set!", TAG, skin_menu_shop[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_skinsdata[id] & NEWELF)
			{
				color(id, "^4%s^1 You set^3 %s^1 as your main skin!", TAG, skin_menu_shop[item]);
				g_currentskin[id] = NOSKIN;
				g_currentskin[id] |= NEWELF;
				reset_model_player(id);
				save_skindata(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_skinsdata[id] |= NEWELF;
		}
		case 7:
		{
			if(g_currentskin[id] & BALLS)
			{
				color(id, "^4%s^3 %s^1 skin is already set!", TAG, skin_menu_shop[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			if(g_skinsdata[id] & BALLS)
			{
				color(id, "^4%s^1 You set^3 %s^1 as your main skin!", TAG, skin_menu_shop[item]);
				g_currentskin[id] = NOSKIN;
				g_currentskin[id] |= BALLS;
				reset_model_player(id);
				save_skindata(id);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_skinsdata[id] |= BALLS;
		}
	}
	
	if(skin_price[item] != 5000)
	{
		color(id, "^4%s^1 You bought^3 %s^1 skin for^3 %d Hours^1!", TAG, skin_menu_shop[item], skin_price[item]);
		emit_sound(id, CHAN_WEAPON, christmas_new_sounds[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		save_skindata(id);
		menu_destroy(menu);
	}
	else
	{
		color(id, "^4%s^1 You bought^3 %s^1 skin for^3 %d Powder^1!", TAG, skin_menu_shop[item], skin_price[item]);
		emit_sound(id, CHAN_WEAPON, christmas_new_sounds[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		g_powder[id] -= 5000;
		save_skindata(id);
		menu_destroy(menu);
	}
	return PLUGIN_HANDLED;
}

public save_skindata(id)
{
	if(!is_user_connected(id) || !get_bit(g_isloaded, id))
		return;
	
	new stupidstats[13], whyme[11], whysame[2];
	get_flags(g_skinsdata[id], whyme, charsmax(whyme));
	get_flags(g_currentskin[id], whysame, charsmax(whysame));
	if(whyme[0] == '0' && whysame[0] == '0')
		formatex(stupidstats, charsmax(stupidstats), "^"0^" ^"0^"");
	else if(whyme[0] != '0' && whysame[0] == '0')
		formatex(stupidstats, charsmax(stupidstats), "^"%s^" ^"0^"", whyme);
	else if(whyme[0] == 0 && whysame[0] != 0)
		formatex(stupidstats, charsmax(stupidstats), "^"0^" ^"%s^"", whysame);
	else if(whyme[0] != '0' && whysame[0] != 0)
		formatex(stupidstats, charsmax(stupidstats), "^"%s^" ^"%s^"", whyme, whysame);
		
	fvault_set_data(fvault_skindata, g_playername[id], stupidstats);
}

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

	if(g_currentknife[id] != 2 || !(g_vip_items[id] & SANTAKNIFE))
		return PLUGIN_CONTINUE;

	new weapon , attacker = get_user_attacker(id , weapon);

	if(!is_user_alive(attacker))
		return PLUGIN_CONTINUE;

	if(weapon == CSW_KNIFE)
	{
		new Float:vec[3];
		new Float:oldvelo[3];
		get_user_velocity(id, oldvelo);
		create_velocity_vector(id , attacker , vec);
		vec[0] += oldvelo[0];
		vec[1] += oldvelo[1];
		set_user_velocity(id , vec);
	}

	return PLUGIN_CONTINUE;
}

public open_g_attack_items(id)
{
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rAttack Items^nGold: %d", g_points[id]);
	menu = menu_create(menu_item, "g_attack_items_handler");
	for(new i = 0; i < sizeof attack_itemsname; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s - \w%d Gold", attack_itemsname[i], att_items_price[i]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
}

public g_attack_items_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(g_points[id] < att_items_price[item])
	{
		color(id, "^4%s^1 You need^3 %d more Gold^1 for^3 %s^1!", TAG, att_items_price[item] - g_points[id], attack_itemsname[item]);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			if(g_attack_items[id] & ULTRABULLETS)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, attack_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_attack_items[id] |= ULTRABULLETS
		}
		/*
		case 1:
		{
			if(g_attack_items[id] & EXPLOSIVEBULL)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, attack_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_attack_items[id] |= EXPLOSIVEBULL
		}
		*/
		case 1:
		{
			if(g_attack_items[id] & FIREBULLETS)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, attack_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_attack_items[id] |= FIREBULLETS
		}
		case 2:
		{
			if(g_attack_items[id] & CHRWISH)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, attack_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_attack_items[id] |= CHRWISH
			give_user_weapon(id, CSW_HEGRENADE, 200, 1);
		}
		case 3:
		{
			if(g_attack_items[id] & BESTXM1014)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, attack_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_attack_items[id] |= BESTXM1014;
			SetStartAmmo(id);
		}
		case 4:
		{
			if(g_attack_items[id] & DATTACK)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, attack_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_attack_items[id] |= DATTACK;
		}
		case 5:
		{
			if(g_attack_items[id] & NORECOIL)
			{
				color(id, "^4%s^1 You have already^3 %s^1", TAG, attack_itemsname[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			g_attack_items[id] |= NORECOIL;
		}
	}
	
	g_points[id] -= att_items_price[item];
	g_quest_data[id][8] += att_items_price[item];
	g_roundspent[id] += att_items_price[item];

	if(g_daily_missions[id][1] + att_items_price[item] < str_to_num(daily_missions[1][1]))
		g_daily_missions[id][1] += att_items_price[item];
	else if(g_daily_missions[id][1] == str_to_num(daily_missions[1][1]))
	{
		
	}
	else
		g_daily_missions[id][1] = str_to_num(daily_missions[1][1]), g_daily_coin[id] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[id], daily_missions[0]);
	
	if(g_daily_missions[id][1] + att_items_price[item] == str_to_num(daily_missions[1][1]))
		g_daily_missions[id][1] = str_to_num(daily_missions[1][1]), g_daily_coin[id] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[id], daily_missions[0]);
	color(id, "^4%s^1 You bought^3 %s^1 with^3 %d Gold^1!", TAG, attack_itemsname[item], att_items_price[item]);
	emit_sound(id, CHAN_WEAPON, christmas_new_sounds[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_items_menu(id)
{
	if(!is_user_alive(id))
	{
		color(id, "^4%s^1 You can use this shop only when you are alive!", TAG);
		return PLUGIN_HANDLED;
	}
	
	new menu, menu_item[100], tasta[2], totalitemeglob = sizeof name_items;
	formatex(menu_item, charsmax(menu_item), "\rEquipment^nGold: %d", g_points[id]);
	menu = menu_create(menu_item, "items_handler");
	for(new i = 0; i < totalitemeglob; i++)
	{
		switch(i)
		{
			case 4: formatex(menu_item, charsmax(menu_item), "\y%s - \w%d Gold \w[\y%d\w/\y25\w]", name_items[i], price_items[i] * g_attack[id], g_attack[id]);
			case 5: formatex(menu_item, charsmax(menu_item), "\y%s - \w%d Gold \w[\y%d\w/\y10\w]", name_items[i], price_items[i] * g_defence[id], g_defence[id]);
			default: formatex(menu_item, charsmax(menu_item), "\y%s - \w%d Gold", name_items[i], price_items[i]);
		}
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public items_handler(id, menu, item)
{
	if(!is_user_alive(id) || item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(g_points[id] < price_items[item])
	{
		color(id, "^4%s^1 You don't have enough Gold for^3 %s^1!", TAG, name_items[item]);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0: give_user_weapon(id, CSW_SMOKEGRENADE, 1, 1), g_haveflarenade[id] = 0;
		case 1: give_user_weapon(id, CSW_SMOKEGRENADE, 1, 1), g_haveflarenade[id]++;
		case 2: set_user_health(id, clamp(get_user_health(id) + 20, 1, 100 + (g_level[id] * 10)));
		case 3: set_user_armor(id, clamp(get_user_armor(id) + 20, 1, 100 + (g_level[id] * 10)));
		case 4:
		{
			if(price_items[item] * g_attack[id] < g_points[id])
			{
				if(g_attack[id] == 25)
				{
					color(id, "^4%s^1 You have already maximum attack damage.", TAG);
					menu_destroy(menu);
					return PLUGIN_HANDLED;
				}
				g_points[id] -= price_items[item] * g_attack[id];
				g_points[id] += 200;
				g_attack[id]++;
			}
			else
			{
				color(id, "^4%s^1 You don't have enough Gold for^3 %s^1!", TAG, name_items[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
		}
		case 5:
		{
			if(price_items[item] * g_defence[id] < g_points[id])
			{
				if(g_defence[id] == 10)
				{
					color(id, "^4%s^1 You have already maximum defence.", TAG);
					menu_destroy(menu);
					return PLUGIN_HANDLED;
				}
				
				g_defence[id]++;
				g_points[id] -= price_items[item] * g_defence[id];
				g_points[id] += 200;
			}
			else
			{
				color(id, "^4%s^1 You don't have enough Gold for^3 %s^1!", TAG, name_items[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
		}
		case 6:	
		{
			if(g_defender[id])
			{
				color(id, "^4%s^1 You set already a defender!", TAG, name_items[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
			
			if(!set_robot(id))
			{
				color(id, "^4%s^1 Couldn't!", TAG, name_items[item]);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
		}
	}
	g_points[id] -= price_items[item];
	g_quest_data[id][8] += price_items[item];
	g_roundspent[id] += price_items[item];

	if(g_daily_missions[id][1] + price_items[item] < str_to_num(daily_missions[1][1]))
		g_daily_missions[id][1] += price_items[item];
	else if(g_daily_missions[id][1] == str_to_num(daily_missions[1][1]))
	{
		
	}
	else
		g_daily_missions[id][1] = str_to_num(daily_missions[1][1]), g_daily_coin[id] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[id], daily_missions[1][0]);
	
	if(g_daily_missions[id][1] + price_items[item] == str_to_num(daily_missions[1][1]))
		g_daily_missions[id][1] = str_to_num(daily_missions[1][1]), g_daily_coin[id] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[id], daily_missions[1][0]);
	color(id, "^4%s^1 You bought^3 %s^1 for^3 %d Gold^1!", TAG, name_items[item], price_items[item]);
	menu_destroy(menu);
	emit_sound(id, CHAN_WEAPON, christmas_new_sounds[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
	return PLUGIN_HANDLED;
}

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

	if(!is_developer(id))
	{
		color(id, "^4%s^1 You need to be a^3 developer^1!", TAG);
		return PLUGIN_HANDLED;
	}
	new menu = menu_create("\rDeveloper Menu", "developer_handler");
	menu_additem(menu, "\yAdauga points unui player", "");
	menu_additem(menu, "\yAdauga points tuturor", "");
	menu_additem(menu, "\yAdauga EXP unui player", "");
	menu_additem(menu, "\yAdauga EXP tuturor", "");
	menu_additem(menu, "\yAdauga powder unui player", "");
	menu_additem(menu, "\yAdauga powder tuturor", "");
	menu_additem(menu, "\yAdauga Daily Coin tuturor", "");
	menu_additem(menu, "\yAdauga Daily Coin tie 999", "");
	menu_additem(menu, "\ySchimba PVP", "");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public developer_handler(id, menu, item)
{
	if(item == MENU_EXIT || !is_user_connected(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}

	if(!is_developer(id))
	{
		color(id, "^4%s^1 Nu esti^3 developer^1!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	switch(item)
	{
		case 0: open_player_menu(id, 1);
		case 1: client_cmd(id, "messagemode POINTS_ALL");
		case 2: open_player_menu(id, 2);
		case 3: client_cmd(id, "messagemode EXP_ALL");
		case 4: open_player_menu(id, 4);
		case 5: client_cmd(id, "messagemode POWDER_ALL");
		case 6: client_cmd(id, "messagemode DAILY_COIN_ALL");
		case 7: g_daily_coin[id] += 999;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public open_player_menu(id, type)
{
	if(!is_user_connected(id))
		return;
		
	if(!is_developer(id))
		return;
		
	switch(type)
	{
		case 1:
		{
			new menu = menu_create("\rGive Gold to players", "points_player");
			new menu_item[100], userid[32];
			for(new i = 1; i <= g_maxplayers; i++)
			{
				if(!is_user_connected(i) || !get_bit(g_isloaded, i))
					continue;
			
				formatex(menu_item, charsmax(menu_item), "\y%s - \w%d Gold", g_playername[i], g_points[i]);
				formatex(userid, charsmax(userid), "%d", get_user_userid(i));
				menu_additem(menu, menu_item, userid, 0);
			}
			menu_display(id, menu, 0);
		}
		case 2:
		{
			new menu = menu_create("\rGive Experience to players", "exp_player");
			new menu_item[100], userid[32];
			for(new i = 1; i <= g_maxplayers; i++)
			{
				if(!is_user_connected(i) || !get_bit(g_isloaded, i))
					continue;
			
				formatex(menu_item, charsmax(menu_item), "\y%s - \w[%d/%d]", g_playername[i], g_exp[i], g_level[i] * 500);
				formatex(userid, charsmax(userid), "%d", get_user_userid(i));
				menu_additem(menu, menu_item, userid, 0);
			}
			menu_display(id, menu, 0);
		}
		case 3:
		{
			new menu = menu_create("\rPlayer list", "quests_player");
			new menu_item[100], userid[32];
			for(new i = 1; i <= g_maxplayers; i++)
			{
				if(!is_user_connected(i) || !get_bit(g_isloaded, i))
					continue;
			
				formatex(menu_item, charsmax(menu_item), "\y%s", g_playername[i]);
				formatex(userid, charsmax(userid), "%d", get_user_userid(i));
				menu_additem(menu, menu_item, userid, 0);
			}
			menu_display(id, menu, 0);
		}
		case 4:
		{
			new menu = menu_create("\rGive Powder to players", "powder_player");
			new menu_item[100], userid[32];
			for(new i = 1; i <= g_maxplayers; i++)
			{
				if(!is_user_connected(i) || !get_bit(g_isloaded, i))
					continue;
			
				formatex(menu_item, charsmax(menu_item), "\y%s - \w[%d powder]", g_playername[i], g_powder[i]);
				formatex(userid, charsmax(userid), "%d", get_user_userid(i));
				menu_additem(menu, menu_item, userid, 0);
			}
			menu_display(id, menu, 0);
		}
	}
}

public points_player(id, menu, item)
{
	if(!is_user_connected(id) || item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new menu_data[6], menu_name[64];
	new _access, item_callback;
	menu_item_getinfo(menu, item, _access, menu_data, charsmax(menu_data), menu_name, charsmax(menu_name), item_callback);
	new userid = str_to_num(menu_data);
	new player = find_player("k", userid);

	if(player)
	{
		client_cmd(id, "messagemode POINTS_PLAYER");
		g_developerid[id] = player;
		color(id, "^4%s^1 You chose^3 %s^1!", TAG, g_playername[player]);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public exp_player(id, menu, item)
{
	if(!is_user_connected(id) || item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new menu_data[6], menu_name[64];
	new _access, item_callback;
	menu_item_getinfo(menu, item, _access, menu_data, charsmax(menu_data), menu_name, charsmax(menu_name), item_callback);
	new userid = str_to_num(menu_data);
	new player = find_player("k", userid);

	if(player)
	{
		client_cmd(id, "messagemode EXP_PLAYER");
		g_developerid[id] = player;
		color(id, "^4%s^1 You chose^3 %s^1!", TAG, g_playername[player]);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public powder_player(id, menu, item)
{
	if(!is_user_connected(id) || item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new menu_data[6], menu_name[64];
	new _access, item_callback;
	menu_item_getinfo(menu, item, _access, menu_data, charsmax(menu_data), menu_name, charsmax(menu_name), item_callback);
	new userid = str_to_num(menu_data);
	new player = find_player("k", userid);

	if(player)
	{
		client_cmd(id, "messagemode POWDER_PLAYER");
		g_developerid[id] = player;
		color(id, "^4%s^1 You chose^3 %s^1!", TAG, g_playername[player]);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public quests_player(id, menu, item)
{
	if(!is_user_connected(id) || item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(!get_bit(g_isloaded, id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new menu_data[6], menu_name[64];
	new _access, item_callback;
	menu_item_getinfo(menu, item, _access, menu_data, charsmax(menu_data), menu_name, charsmax(menu_name), item_callback);
	new userid = str_to_num(menu_data);
	new player = find_player("k", userid);

	if(player)
	{
		g_checkid[id] = player;
		color(id, "^4%s^1 You chose^3 %s^1!", TAG, g_playername[player]);
		show_personal_quests(id, g_checkid[id]);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public points_developer_player(id)
{
	if(!is_developer(id))
	{
		color(id, "^4%s^1 You are not^3 Developer^1!", TAG);
		g_developerid[id] = 0;
		return;
	}
	
	if(!is_user_connected(g_developerid[id]) || !get_bit(g_isloaded, g_developerid[id]))
	{
		color(id, "^4%s^1 The player you chosed is disconnected now...", TAG);
		g_developerid[id] = 0;
		return;
	}
	
	new amount[16];
	read_args(amount, charsmax(amount));
	remove_quotes(amount);
	new much = str_to_num(amount);
	if(much <= 0)
	{
		color(id, "^4%s^1 The sum is below 0!", TAG);
		g_developerid[id] = 0;
		return;
	}
	g_points[g_developerid[id]] += much;
	color(0, "^4%s^1 Developer^3 %s^1 offer to^3 %s^4 %d Gold^1!", TAG, g_playername[id], g_playername[g_developerid[id]], much);
	g_developerid[id] = 0;
}

public exp_developer_player(id)
{
	if(!is_developer(id))
	{
		color(id, "^4%s^1 You are not a^3 Developer^1!", TAG);
		g_developerid[id] = 0;
		return;
	}
	
	if(!is_user_connected(g_developerid[id]) || !get_bit(g_isloaded, g_developerid[id]))
	{
		color(id, "^4%s^1 The player you chosed is disconnected now...", TAG);
		g_developerid[id] = 0;
		return;
	}
	
	new amount[16];
	read_args(amount, charsmax(amount));
	remove_quotes(amount);
	new much = str_to_num(amount);
	if(much <= 0)
	{
		color(id, "^4%s^1 The sum is below 0!", TAG);
		g_developerid[id] = 0;
		return;
	}
	
	g_exp[g_developerid[id]] += much;
	color(0, "^4%s^1 Developer^3 %s^1 offer to^3 %s^4 %d experience^1!", TAG, g_playername[id], g_playername[g_developerid[id]], much);
	g_developerid[id] = 0;
}

public powder_developer_player(id)
{
	if(!is_developer(id))
	{
		color(id, "^4%s^1 You are not a^3 Developer^1!", TAG);
		g_developerid[id] = 0;
		return;
	}
	
	if(!is_user_connected(g_developerid[id]) || !get_bit(g_isloaded, g_developerid[id]))
	{
		color(id, "^4%s^1 The player you chosed is disconnected now...", TAG);
		g_developerid[id] = 0;
		return;
	}
	
	new amount[16];
	read_args(amount, charsmax(amount));
	remove_quotes(amount);
	new much = str_to_num(amount);
	if(much <= 0)
	{
		color(id, "^4%s^1 The sum is below 0!", TAG);
		g_developerid[id] = 0;
		return;
	}
	
	g_powder[g_developerid[id]] += much;
	color(0, "^4%s^1 Developer^3 %s^1 offer to^3 %s^4 %d powder^1!", TAG, g_playername[id], g_playername[g_developerid[id]], much);
	g_developerid[id] = 0;
}

public say_pvp(id)
{
	if(waiting)
		return PLUGIN_HANDLED;
	
	if(g_pvp[id] == -1)
	{
		new menu = menu_create("\ySelect player which you want to pvp!", "pvp_menu_handler");
		new menu_item[100], userid[32];
		for(new i = 1; i <= g_maxplayers; i++)
		{
			if(!is_user_connected(i) || g_pvp[i] != -1 || i == id || is_user_bot(i))
				continue;
		
			formatex(menu_item, charsmax(menu_item), "\r%s", g_playername[i]);
			formatex(userid, charsmax(userid), "%d", get_user_userid(i));
			menu_additem(menu, menu_item, userid, 0);
		}
		menu_display(id, menu, 0);
	}
	else
	{
		new menu_item[100];
		formatex(menu_item, charsmax(menu_item), "\yYou are in a duel^nwith\r %s\y^nDo you want to end it?", g_playername[g_pvp[id]]);
		new menu = menu_create(menu_item, "pvp_menu_handler");
		menu_additem(menu, "\rYes", "");
		menu_additem(menu, "\rNo", "");
		menu_display(id, menu, 0);
	}
	return PLUGIN_HANDLED;
}

public say_knife(id)
{
	if(!cs_get_user_team(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR)
		return PLUGIN_CONTINUE;
	
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
	
	if(g_vip_items[id] & SANTAKNIFE)
	{
		new menu, menu_item[100], tasta[2];
		formatex(menu_item, charsmax(menu_item), "\rKnife Menu^nCurrent Knife: \w%s", knife_belea[g_currentknife[id]][0]);
		menu = menu_create(menu_item, "knife_menu_handler");
		for(new i = 0; i < sizeof knife_belea; i++)
		{
			formatex(menu_item, charsmax(menu_item), "\y%s - \w%s", knife_belea[i][0], knife_belea[i][5]);
			tasta[0] = i;
			tasta[1] = 0;
			menu_additem(menu, menu_item, tasta);
		}
		menu_display(id, menu, 0);
	}
	else
		color(id, "^4%s^1 You need to have^3 Knife Menu^1!", TAG);
	return PLUGIN_HANDLED;
}

public knife_menu_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(g_vip_items[id] & SANTAKNIFE)
	{
		g_currentknife[id] = item;
		color(0, "^4%s^3 %s^1 switched his knife to^4 %s^1", TAG, g_playername[id], knife_belea[g_currentknife[id]][0]);
		color(id, "^4%s^1 This knife have^3 %sx^1 damage,^3 %d^1 speed added", TAG, g_playername[id], knife_belea[g_currentknife[id]][2], knife_belea[g_currentknife[id]][4]);
	}
	else
	{
		color(id, "^4%s^1 You need to have^3 Knife Menu^1!", TAG);
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public pvp_menu_handler(id, menu, item)
{
	if(!is_user_connected(id) || item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}

	if(g_pvp[id] == -1)
	{
		new menu_data[6], menu_name[64];
		new _access, item_callback;
		menu_item_getinfo(menu, item, _access, menu_data, charsmax(menu_data), menu_name, charsmax(menu_name), item_callback);
		new userid = str_to_num(menu_data);
		new player = find_player("k", userid);

		if(player)
			show_private_chat(player, id);
	}
	else
	{
		switch(item)
		{
			case 0: 
			{
				color(id, "^4%s^1 You ended the duel with^3 %s^1!", TAG, g_playername[g_pvp[id]]);
				color(g_pvp[id], "^4%s^3 %s^1 ended the duel with you!", TAG, g_playername[id]);
				g_pvp[g_pvp[id]] = -1;
				g_pvp[id] = -1;
			}
			case 1: color(id, "^4%s^1 You continue to duel with^3 %s^1", TAG, g_playername[g_pvp[id]]);
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public show_private_chat(id, player)
{
	if(g_pvp[id] > -1)
	{
		color(player, "^4%s^3 %s^1 is already in a duel", TAG, g_playername[id])
		return PLUGIN_HANDLED;
	}
	g_asking[id] = player;
	new menu_item[100];
	formatex(menu_item, charsmax(menu_item), "\yDo you want to duel^nwith\r %s\y", g_playername[player]);
	new menu = menu_create(menu_item, "answer_private_handler");
	menu_additem(menu, "\rYes", "");
	menu_additem(menu, "\rNo", "");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public answer_private_handler(id, menu, item)
{
	if(!is_user_connected(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(item == MENU_EXIT)
	{
		color(g_asking[id], "^4%s^3 %s^1 didn't accept your request.", TAG, g_playername[id]);
		color(id, "^4%s^1 You did not accept^3 %s^1's duel!", TAG, g_playername[g_asking[id]]);
		g_pvp[id] = -1;
		g_pvp[g_asking[id]] = -1;
		g_asking[id] = -1;
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(!is_user_connected(g_asking[id]))
	{
		color(id, "^4%s^1 The player is not connected anymore!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	switch(item)
	{
		case 0:
		{
			g_pvp[id] = g_asking[id];
			color(id, "^4%s^1 You have joined the pvp with^3 %s^1!", TAG, g_playername[g_pvp[id]]);
			color(g_pvp[id], "^4%s^1 You have joined the pvp with^3 %s^1!", TAG, g_playername[id]);
			g_pvp[g_asking[id]] = id;
			g_hits[id] = 0;
			g_hits[g_asking[id]] = 0;
		}
		case 1:
		{
			color(g_asking[id], "^4%s^3 %s^1 didn't accept your request!", TAG, g_playername[id]);
			color(id, "^4%s^1 You did not accept the duel with^3 %s^1", TAG, g_playername[g_asking[id]]);
			g_pvp[id] = -1;
			g_pvp[g_asking[id]] = -1;
			g_asking[id] = -1;
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public fw_Item_Deploy_Post(weapon_ent)
{
	static owner
	owner = fm_cs_get_weapon_ent_owner(weapon_ent)
	
	if(!pev_valid(owner) || is_user_bot(owner))
		return;
	
	static weaponid
	weaponid = cs_get_weapon_id(weapon_ent);
	if(g_ishero[owner] && weaponid == 22)
	{
		set_pev(owner, pev_viewmodel2, knife_hero[0]);
		set_pev(owner, pev_weaponmodel2, knife_hero[1]);
	}
	else
	{
		for(new i = 0; i < sizeof special_weapons; i++)
		{
			if((weaponid == str_to_num(special_weapons[i][4])) && g_weapon_skin[owner][i])
			{
				set_pev(owner, pev_viewmodel2, special_weapons[i][2]);
				set_pev(owner, pev_weaponmodel2, special_weapons[i][3]);
				break;
			}
		}
	}
}

public benefits_cmd(id)
{
	if(!g_using_benefits[id])
	{
		color(id, "^4%s^1 You can use this function only thru menu!", TAG);
		return PLUGIN_HANDLED;
	}
	
	if(g_timeplayed[id] < 300)
	{
		color(id, "^4%s^1 You need^3 5 Hours^1 to use this!", TAG);
		return PLUGIN_HANDLED;
	}
	
	new szbeneftxt[64], cratime = 0;
	read_args(szbeneftxt, charsmax(szbeneftxt));
	remove_quotes(szbeneftxt);
	new lethimgo = 1, ibeneftxt = strlen(szbeneftxt);
	for(new i = 0; i < ibeneftxt; i++)
	{
		if(szbeneftxt[i] == 32)
		{
			// do nothing
		}
		else if(szbeneftxt[i] >= 48 && szbeneftxt[i] <= 57)
		{
			// do nothing
		}
		else if(szbeneftxt[i] >= 65 && szbeneftxt[i] <= 90)
		{
			// do nothing
		}
		else if(szbeneftxt[i] >= 97 && szbeneftxt[i] <= 122)
		{
			// do nothing
		}
		else if(szbeneftxt[i] == 45)
			cratime++;
		else
		{
			lethimgo = 0;
			break;
		}
	}
	if(!lethimgo)
	{
		color(id, "^4%s^1 You need only letters and spaces!", TAG);
		g_using_benefits[id] = 0;
		return PLUGIN_HANDLED;
	}
	if(ibeneftxt < 3)
	{
		color(id, "^4%s^1 You used less than 3 characters", TAG);
		g_using_benefits[id] = 0;
		return PLUGIN_HANDLED;
	}
	if(cratime > 2)
	{
		color(id, "^4%s^1 You can use 2 hyphens", TAG);
		g_using_benefits[id] = 0;
		return PLUGIN_HANDLED;
	}
	
	switch(g_using_benefits[id])
	{
		case 1:
		{
			if(ibeneftxt > 11)
			{
				color(id, "^4%s^1 You put too many characters! You can use only 11!", TAG);
				g_using_benefits[id] = 0;
				return PLUGIN_HANDLED;
			}
			formatex(g_tag_chat[id], charsmax(g_tag_chat[]), "%s", szbeneftxt);
			color(id, "^4%s^1 You set^3 %s^1 as your tag chat.", TAG, szbeneftxt);
		}
		case 2: 
		{
			if(ibeneftxt > 31)
			{
				color(id, "^4%s^1 You put too many characters! You can use only 31!", TAG);
				g_using_benefits[id] = 0;
				return PLUGIN_HANDLED;
			}
			formatex(g_msg_in[id], charsmax(g_msg_in[]), "%s", szbeneftxt);
			color(id, "^4%s^1 You set^3 %s^1 as your connect message.", TAG, szbeneftxt);
		}
		case 3: 
		{
			if(ibeneftxt > 31)
			{
				color(id, "^4%s^1 You put too many characters! You can use only 31!", TAG);
				g_using_benefits[id] = 0;
				return PLUGIN_HANDLED;
			}
			formatex(g_msg_out[id], charsmax(g_msg_out[]), "%s", szbeneftxt);
			color(id, "^4%s^1 You set^3 %s^1 as your disconect message.", TAG, szbeneftxt);
		}
		case 4:
		{
			if(ibeneftxt > 63)
			{
				color(id, "^4%s^1 You put too many characters! You can use only 63!", TAG);
				g_using_benefits[id] = 0;
				return PLUGIN_HANDLED;
			}
			formatex(g_deathnote[id], charsmax(g_deathnote[]), "%s", szbeneftxt);
			color(id, "^4%s^1 You set^3 %s^1 as your god killing message.", TAG, szbeneftxt);
		}
		default:
		{
			g_using_benefits[id] = 0;
			return PLUGIN_HANDLED;
		}
	}
	switch(g_using_benefits[id])
	{
		case 1: log_admin(id, "si-a cumparat tag chat %s", szbeneftxt);
		case 2: log_admin(id, "si-a cumparat mesaj intrare %s", szbeneftxt);
		case 3: log_admin(id, "si-a cumparat mesaj iesire %s", szbeneftxt);
		case 4: log_admin(id, "si-a cumparat mesaj deces %s", szbeneftxt);
	}
	g_using_benefits[id] = 0;
	return PLUGIN_HANDLED;
}

public points_developer_all(id)
{
	if(!is_developer(id))
	{
		color(id, "^4%s^1 Nu esti^3 Developer^1!", TAG);
		return;
	}
	new amount[16];
	read_args(amount, charsmax(amount));
	remove_quotes(amount);
	new much = str_to_num(amount);
	if(much <= 0)
	{
		color(id, "^4%s^1 The sum is below 0!", TAG);
		return;
	}
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || !get_bit(g_isloaded, i) || is_user_bot(i))
			continue;
			
		g_points[i] += much;
	}
	color(0, "^4%s^1 Developer^3 %s^1 give to all players^3 %d Gold^1!", TAG, g_playername[id], much);
}

public Pistols_PrimaryAttack_Pre(const weapon)
    set_pdata_int(weapon, m_iShotsFired, -1);

public fw_traceattack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damage_type)
{
	if(victim == attacker || !is_user_valid_connected(attacker))
		return HAM_IGNORED;

	if(is_user_alive(attacker) && (g_vip_items[attacker] & SANTABULLETS) && (random_num(0, 100) >= 50) && is_user_bot(victim))		
		set_tr2(tracehandle, TR_iHitgroup, HIT_HEAD);
	
	if(is_user_bot(victim) && CurrentDay == 2)
	{
		static Float:vecEndPos[3];
		get_tr2(tracehandle, TR_vecEndPos, vecEndPos);
		engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecEndPos, 0);
		write_byte(TE_SPARKS);
		engfunc(EngFunc_WriteCoord, vecEndPos[0]);
		engfunc(EngFunc_WriteCoord, vecEndPos[1]);
		engfunc(EngFunc_WriteCoord, vecEndPos[2]);
		message_end();
		
		return HAM_HANDLED;
	}
	return HAM_IGNORED;
}

public hook_transfer(id)
{
	if(!is_user_connected(id) || !get_bit(g_isloaded, id))
		return PLUGIN_HANDLED;
		
	static chat[192];
	read_argv(1, chat, charsmax(chat));
	
	for(new i = 0; i < sizeof hints; i++)
	{
		if(contain(chat, hints[i][0]) != -1)
		{
			color(id, "^4%s^1 %s", TAG, hints[i][1]);
		}
	}
	if(g_daily_missions[id][3] == str_to_num(daily_missions[3][1]))
	{
	
	}
	else if(g_daily_missions[id][3] + 1 == str_to_num(daily_missions[3][1]))
	{
		g_daily_missions[id][3]++;
		g_daily_coin[id] += 3, color(0, "^4%s^3 %s^1 Obtained^3 3 Daily Coins^1 for finishing^4 %s^1 Mission. Check yours by pressing^4 M942^1.", TAG, g_playername[id], daily_missions[3][0]);
	}
	else
		g_daily_missions[id][3]++;
		
	if(g_ismuted[id] > 0)
	{
		color(id, "^4%s^1 You can't use the chat for^3 %d^1 minutes. Reason:^3 %s^1.", TAG, g_ismuted[id], g_mutereason[id]);
		return PLUGIN_HANDLED;
	}
	return PLUGIN_HANDLED_MAIN;
}

public hook_sayteam(id)
{
	if(!is_user_connected(id) || !get_bit(g_isloaded, id))
		return PLUGIN_HANDLED;
	
	if(g_ismuted[id] > 0)
	{
		color(id, "^4%s^1 You can't use the chat for %d^1 minutes. Reason:^3 %s^1.", TAG, g_ismuted[id], g_mutereason[id]);
		return PLUGIN_HANDLED;
	}
	return PLUGIN_HANDLED_MAIN;
}

public bunnyhop(id) 
{
	if(!is_user_alive(id))
		return HAM_IGNORED;
	
	if(!(g_defence_items[id] & BUNNYHOP))
		return HAM_IGNORED;

	if((pev(id,pev_flags) & FL_ONGROUND))
	{
		new Float: Vel[3], Float: Spd;
		pev(id,pev_maxspeed,Spd);
		pev(id,pev_velocity,Vel);
		Vel[2] = Spd;
		set_pev(id,pev_velocity, Vel);
		set_pev(id,pev_gaitsequence, 6);
		set_pev(id,pev_frame, 0.0)
	}
	return HAM_IGNORED;
}

public GameDesc() 
{ 
	new gamename[32]; 
	formatex(gamename, charsmax(gamename), "Monster Invasion 2.0beta");
	forward_return(FMV_STRING, gamename);
	return FMRES_SUPERCEDE;
}

public exp_developer_all(id)
{
	if(!is_developer(id))
	{
		color(id, "^4%s^1 You need to be^3 Developer^1!", TAG);
		return;
	}
	new amount[16];
	read_args(amount, charsmax(amount));
	remove_quotes(amount);
	new much = str_to_num(amount);
	if(much <= 0)
	{
		color(id, "^4%s^1 The sum is below 0", TAG);
		return;
	}
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || !get_bit(g_isloaded, i) || is_user_bot(i))
			continue;
			
		g_exp[i] += much;
	}
	color(0, "^4%s^1 Developer^3 %s^1 offer to all^3 %d experience^1!", TAG, g_playername[id], much);
}

public powder_developer_all(id)
{
	if(!is_developer(id))
	{
		color(id, "^4%s^1 You need to be^3 Developer^1!", TAG);
		return;
	}
	new amount[16];
	read_args(amount, charsmax(amount));
	remove_quotes(amount);
	new much = str_to_num(amount);
	if(much <= 0)
	{
		color(id, "^4%s^1 The sum is below 0", TAG);
		return;
	}
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || !get_bit(g_isloaded, i) || is_user_bot(i))
			continue;
			
		g_powder[i] += much;
	}
	color(0, "^4%s^1 Developer^3 %s^1 offer to all^3 %d powder^1!", TAG, g_playername[id], much);
}

public daily_coin_all(id)
{
	if(!is_developer(id))
	{
		color(id, "^4%s^1 You need to be^3 Developer^1!", TAG);
		return;
	}
	new amount[16];
	read_args(amount, charsmax(amount));
	remove_quotes(amount);
	new much = str_to_num(amount);
	if(much <= 0)
	{
		color(id, "^4%s^1 The sum is below 0", TAG);
		return;
	}
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || !get_bit(g_isloaded, i) || is_user_bot(i))
			continue;
			
		g_daily_coin[i] += much;
	}
	color(0, "^4%s^1 Developer^3 %s^1 offer to all^3 %d Daily Coin^1!", TAG, g_playername[id], much);
}
	
public msg_textmsg()
{
	static textmsg[22];
	get_msg_arg_string(2, textmsg, charsmax(textmsg));
	
	if(equal(textmsg, "#Terrorists_Win"))
	{
		sound_stop();
		g_win = 1;
		PlaySound(christmas_new_sounds[6]);
		if(CurrentDay == 1)
		{
			g_endround = true;
			CurrentDay = get_average_level();
			CurrentRespawns = str_to_num(monster_data[CurrentDay][5])
		}
		else
		{
			g_endround = true;
			CurrentDay--;
			CurrentRespawns = str_to_num(monster_data[CurrentDay][5])
		}
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#CTs_Win"))
	{
		g_endround = true;
		CurrentDay++;
		if(CurrentDay == 8)
		{
			//set_pcvar_float(itifutmama, 0.0);
			startvoteforevolution();
			CurrentDay = 1;
			g_win = 3;
		}
		else
		{
			idkills = get_top_player_skills(1);
			iddamage = get_top_player_skills(2);
			idspent = get_top_player_skills(3);
			CurrentRespawns = str_to_num(monster_data[CurrentDay][5])
			g_win = 2;
		}
		sound_stop();
		PlaySound(christmas_new_sounds[4]);
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Game_Commencing"))
	{
		sound_stop();
		CurrentDay = get_average_level();
		CurrentRespawns = str_to_num(monster_data[CurrentDay][5])
		set_hudmessage(50, 175, 250, -1.0, 0.16, 1, 5.0, 5.0);
		ShowSyncHudMsg(0, event_sync, "Waiting for players...");
		return PLUGIN_HANDLED;
	}
	else if(equal(textmsg, "#Game_will_restart_in"))
	{
		Event_RoundEnd();
		CurrentDay = get_average_level();
		CurrentRespawns = str_to_num(monster_data[CurrentDay][5])
		new secunde[4], cifra;
		get_msg_arg_string(3, secunde, charsmax(secunde));
		cifra = str_to_num(secunde);
		set_hudmessage(random(255), random(255), random(255), -1.0, 0.16, 1, 5.0, 5.0);
		ShowSyncHudMsg(0, event_sync, "The mod will get a restart in: %d second%s!", cifra, cifra < 2 ? "" : "s");
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

public startvoteforevolution()
{
	new menu, menu_item[100];
	formatex(menu_item, charsmax(menu_item), "\yCurrent Evolution: %d^nDo you want to increase it?^n", g_evolution);
	menu = menu_create(menu_item, "evolution_handler");
	menu_additem(menu, "Yes", "");
	menu_additem(menu, "No", "");
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\r");
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || is_user_bot(i))
			continue;
			
		menu_display(i, menu, 0);
	}
	set_task(15.0, "end_vote");
}

public evolution_handler(id, menu, item)
{
	new realvalue = item + 1;
	g_nextvote[id] = realvalue;
	switch(realvalue)
	{
		case 1: color(0, "^4%s^3 %s^1 accepted the evolution!", TAG, g_playername[id]); 
		case 2: color(0, "^4%s^3 %s^1 refused the evolution!", TAG, g_playername[id]); 
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public end_vote()
{
	if(is_evolution())
	{
		server_cmd("sv_restart 1");
		g_evolution++;
		color(0, "^4%s^1 We go to the next evolution! Prepare the monsters are stronger now!", TAG);
	}
	else
	{
		color(0, "^4%s^1 We refused the evolution! We change map.", TAG);
		server_cmd("sv_restart 1");
		CurrentDay = 8;
		set_pcvar_float(itifutmama, 0.0);
	}
}

public is_evolution()
{
	new totalp, votey, voten;
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || is_user_bot(i))
			continue;
			
		totalp++;
		switch(g_nextvote[i])
		{
			case 1: votey++;
			case 2: voten++;
		}
		g_nextvote[i] = 0;
	}
	if(votey >= voten)
		return true;
	else
		return false;
	
	return false;
}

public cmd_setlevel(id)  
{  
	if(!is_developer(id))
	{
		color(id, "^4%s^1 Nu ai acces la aceasta comanda.", TAG);
		return PLUGIN_HANDLED;
	}

	new szArg[32];
	read_argv(1, szArg, charsmax (szArg));
	if(!szArg[0])
	{
		console_print(id, "%s Comanda se foloseste in felul urmator: amx_set_level nume level exp globuri", TAG);
		return PLUGIN_HANDLED;
	}
	
	new iPlayer = cmd_target(id, szArg, CMDTARGET_ALLOW_SELF);
	if(!iPlayer)
	{
		console_print(id, "%s Nu exista niciun jucator care sa contina la nume^3 %s^1.", TAG, szArg);
		return PLUGIN_HANDLED;
	}
	
	if(!get_bit(g_isloaded, iPlayer))
	{
		console_print(id, "%s Jucatorul respectiv nu a fost incarcat!", TAG);
		return PLUGIN_HANDLED;		
	}
	
	new strlevel[4], strexp[10], strgloburi[16], strpowder[16], strtimp[16];
	read_argv(2, strlevel, charsmax(strlevel));
	read_argv(3, strexp, charsmax(strexp));
	read_argv(4, strgloburi, charsmax(strgloburi));
	read_argv(5, strpowder, charsmax(strpowder));
	read_argv(6, strtimp, charsmax(strtimp));
	
	new ilevel, iexp, igloburi, ipowder, itimp;
	ilevel = str_to_num(strlevel);
	iexp = str_to_num(strexp);
	igloburi = str_to_num(strgloburi);
	ipowder = str_to_num(strpowder);
	itimp = str_to_num(strtimp);
	
	if(ilevel < 1 || iexp < 1 || igloburi < 1 || ipowder < 1 || itimp < 1)
	{
		console_print(id, "%s Una dintre valori este mai mica de 1!", TAG);
		return PLUGIN_HANDLED;
	}
	
	g_level[iPlayer] = ilevel;
	g_exp[iPlayer] = iexp;
	g_points[iPlayer] = igloburi;
	g_status_points[iPlayer] = ilevel * 3;
	g_powder[iPlayer] = ipowder;
	g_timeplayed[iPlayer] = itimp;
	color(0, "^4%s^1 Developer^3 %s^1 offer to^3 %s^1 level^3 %d^1,^3 %d^1 experience and^3 %d^1 Gold.", TAG, g_playername[id], g_playername[iPlayer], ilevel, iexp, igloburi);
	log_admin(id, "ii da lui %s nivelul %d experienta %d si globuri %d", g_playername[iPlayer], ilevel, iexp, igloburi);
	return PLUGIN_HANDLED;
}

public join_spawn()
{
	new player_spawn = read_data(1);
	static user_team[32];
	
	read_data(2, user_team, charsmax(user_team));
	
	if(!is_user_connected(player_spawn))
		return PLUGIN_CONTINUE;
	
	switch(user_team[0])
	{
		case 'C': set_task(1.0, "respawn_player", player_spawn);
	}
	return PLUGIN_CONTINUE;
}

public think_grenade(entity)
{
	if(!pev_valid(entity)) 
		return FMRES_IGNORED;
	
	static Float:dmgtime, Float:current_time;
	pev(entity, pev_dmgtime, dmgtime);
	current_time = get_gametime();
	
	if(dmgtime > current_time)
		return FMRES_IGNORED;
	
	switch(pev(entity, PEV_NADE_TYPE))
	{
		case NADE_TYPE_CHRISTMAS:
		{
			super_bomb(entity);
			return FMRES_SUPERCEDE;
		}
		case NADE_TYPE_TURBAT:
		{
			static attacker;
			attacker = pev(entity, pev_owner);
			if(g_custom_nade[attacker])
				vip_nade_explode(entity);
			
			return FMRES_HANDLED;
		}
		case NADE_TYPE_TELE:
		{
			tele_player(entity);
			return FMRES_SUPERCEDE;
		}
		case NADE_TYPE_FROST:
		{
			frost_grenade(entity);
			return FMRES_SUPERCEDE;
		}
	}
	return FMRES_IGNORED;
}

vip_nade_explode(ent)
{
	static attacker;
	attacker = pev(ent, pev_owner);
	static Float:originF[3];
	pev(ent, pev_origin, originF);
	if(is_user_connected(attacker))
		create_blast2(ent, originF, g_custom_nade[attacker]);
}

create_blast2(ent, const Float:originF[3], type)
{
	if(type)
	{
		static iOrigin[3];
		FVecIVec(originF, iOrigin);
		iOrigin[2] += 75;
		switch(type)
		{
			case 6: te_create_explosion(iOrigin, g_spr_res[type], 10, 30, TE_EXPLFLAG_NOSOUND);
			case 7: te_create_explosion(iOrigin, g_spr_res[type], 15, 25, TE_EXPLFLAG_NOSOUND);
			default: te_create_explosion(iOrigin, g_spr_res[type], 25, 15, TE_EXPLFLAG_NOSOUND);
		}
	}
}

public do_a_shield(id)
{
	if(g_endround)
		return;
	
	new iEntity = create_entity("info_target");
	
	if(!is_valid_ent(iEntity))
		return;
	
	new Float:Origin[3];
	entity_get_vector(id, EV_VEC_origin, Origin);
	entity_set_string(iEntity, EV_SZ_classname, "camp_nade");
	Origin[2] -= 36.0;
	entity_set_vector(iEntity,EV_VEC_origin, Origin);
	entity_set_model(iEntity, modelaurora);
	entity_set_int(iEntity, EV_INT_solid, SOLID_TRIGGER);
	entity_set_size(iEntity, Mins, Maxs);
	engfunc(EngFunc_DropToFloor, iEntity);
	fm_set_rendering(iEntity, kRenderFxGlowShell, 0, 127, 0, kRenderNormal, 8);
	task_cylinder(iEntity);
}

frost_grenade(ent)
{
	if(g_endround)
		return;
		
	static bool:isnade;
	isnade = false;
	if(!is_user_alive(ent))
		isnade = true;
	
	new Float:originF[3];
	pev(ent, pev_origin, originF);
	new victim = -1
	create_blast(originF, 0, 100, 250, g_frost_spr[0], g_frost_spr[2]);
	
	static iOrigin[3];
	FVecIVec(originF, iOrigin);
	iOrigin[2] += 75;
	te_create_explosion(iOrigin, g_frost_spr[1], 17, 15, TE_EXPLFLAG_NOSOUND);
	
	if(isnade)
	{
		while((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, 250.0)) != 0)
		{
			if(!is_user_alive(victim) || !is_user_bot(victim) || get_bit(g_isfrost, victim))
				continue;
			
			emit_sound(victim, CHAN_WEAPON, sounds_frost[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			make_it_frost(victim, random_float(2.5, 5.0));
		}
		engfunc(EngFunc_RemoveEntity, ent);
	}
	else
	{
		while((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, 250.0)) != 0)
		{
			if(!is_user_alive(victim) || is_user_bot(victim) || get_bit(g_isfrost, victim))
				continue;
			
			emit_sound(victim, CHAN_WEAPON, sounds_frost[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			make_it_frost(victim, random_float(2.5, 5.0));
		}
	}
}

tele_player(ent)
{
	new attacker;
	attacker = pev(ent, pev_owner);
	new Float:origin[3];
	pev(ent, pev_origin, origin);
	
	static iOrigin[3];
	FVecIVec(origin, iOrigin);
	iOrigin[2] += 75;
	te_create_explosion(iOrigin, he_exp, 17, 27, TE_EXPLFLAG_NOSOUND);
	
	origin[2] += 6

	if(is_user_alive(attacker)) 
	{
		static Float:mins[3], hull
		pev(attacker, pev_mins, mins)
		origin[2] -= mins[2] + 6
		hull = pev(attacker, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
		if(is_hull_vacant(origin, hull, attacker))
			engfunc(EngFunc_SetOrigin, attacker, origin);
		else 
		{
			static Float:vec[3]
			vec[2] = origin[2]
			for(new i; i < sizeof g_sign; ++i) 
			{
				vec[0] = origin[0] - mins[0] * g_sign[i][0];
				vec[1] = origin[1] - mins[1] * g_sign[i][1];
				if(is_hull_vacant(vec, hull, attacker)) 
				{
					engfunc(EngFunc_SetOrigin, attacker, vec);
					break
				}
			}
		}
	}
	engfunc(EngFunc_RemoveEntity, ent);
}

public super_bomb(id)
{
	new Float:fOrigin[3];
	pev(id, pev_origin, fOrigin);
	create_blast(fOrigin, 250, 250, 0, g_frost_spr[0], stargib) // stargib

	static iOrigin[3];
	FVecIVec(fOrigin, iOrigin);
	iOrigin[2] += 75;
	te_create_explosion(iOrigin, he_exp, 17, 15, TE_EXPLFLAG_NOSOUND);
	emit_sound(id, CHAN_ITEM, christmas_new_sounds[1], 1.0, ATTN_NORM, 0, PITCH_NORM);
	new attacker;
	attacker = pev(id, pev_owner);
	
	if(!is_user_alive(attacker))
	{
		engfunc(EngFunc_RemoveEntity, id);
		return;
	}
	
	new victim, Float:flSpeed, Float:flNewSpeed, Float:flVelocity[3], Float:flVictimOrigin[3], Float:flDistance;
	victim = -1;
	while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, 300.0)) != 0)
	{
		if(!is_user_alive(victim) || !is_user_bot(victim))
			continue;
		
		pev(victim, pev_origin, flVictimOrigin);
		flDistance = get_distance_f(fOrigin, flVictimOrigin)   
		if(flDistance <= 300.0)
		{
			flSpeed = 800.0;
			flNewSpeed = flSpeed * (1.0 - (flDistance / 300.0));
			get_speed_vector(fOrigin, flVictimOrigin, flNewSpeed, flVelocity);
			set_pev(victim, pev_velocity, flVelocity);
		}

		if(get_user_health(victim) - 666 < 1)
		{
			ExecuteHamB(Ham_Killed, victim, attacker, 0);
			g_rounddamage[attacker] += 666;
		}
		else
		{
			set_user_health(victim, get_user_health(victim) - 666);
			g_rounddamage[attacker] += 666;
		}
	}
	engfunc(EngFunc_RemoveEntity, id);
}

public blood_message(msg_id, msg_type, msg_entity)
{
	if(CurrentDay == 2)
	{
		static arg1; 
		arg1 = get_msg_arg_int(1);
		if(arg1 == TE_BLOODSPRITE)
			return PLUGIN_HANDLED;
		else if(arg1 == TE_WORLDDECAL)
		{
			static arg5; 
			arg5 = get_msg_arg_int(5);
			for(new i = 0; i < sizeof g_blood_decals; i++)
			{
				if(arg5 == g_blood_decals[i])
					return PLUGIN_HANDLED;
			}
		}
	}
	return PLUGIN_CONTINUE;
}

public show_warning(id)
{
	if(!is_developer(id))
		return 1;

	new menu = menu_create("\rSanta's Management^n-are you sure you want to delete the spawn?", "warning_handler");
	menu_additem(menu, "\yYes");
	menu_additem(menu, "\yNo");
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\y");
	menu_display(id, menu, 0);
	
	return 1;
}

public warning_handler(id, item, menu)
{
	if(!is_developer(id))
		return 1;
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:
		{
			g_totalspawns = 0;
			show_santa_menu(id);
		}
		case 1: color(id, "^4%s^1 Ok!", TAG);
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public show_buttons_menu(id)
{
	if(!is_developer(id))
		return 1;
		
	new menu = menu_create("\rButton Manager", "buttons_menu_handler");
	menu_additem(menu, "\ySet button timer");
	menu_additem(menu, "\ySet message button");
	menu_additem(menu, "\yNotification on press");
	menu_additem(menu, "\yNotification message");
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\y");
	menu_display(id, menu, 0);
	return 1;
}

public buttons_menu_handler(id, menu, item)
{
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0: cmd_addsanta(id);
		case 1: cmd_removesanta(id);
		case 2: cmd_rotatesanta(id);
		case 3: cmd_saveforevent(id);
	}
	
	show_santa_menu(id);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public show_santa_menu(id)
{
	if(!is_developer(id))
		return 1;
		
	new menu = menu_create("\rSanta's Management", "santa_handler");
	menu_additem(menu, "\yAdd Santa");
	menu_additem(menu, "\yRemove Santa");
	menu_additem(menu, "\yRotate Santa");
	menu_additem(menu, "\ySave Settings");
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\y");
	menu_display(id, menu, 0);
	
	return 1;
}

public santa_handler(id, menu, item)
{
	if(!is_developer(id))
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0: cmd_addsanta(id);
		case 1: cmd_removesanta(id);
		case 2: cmd_rotatesanta(id);
		case 3: cmd_saveforevent(id);
	}
	
	show_santa_menu(id);
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public spawn_santa()
{
	new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
	
	if(!iEnt)
		return 0;
	
	engfunc(EngFunc_SetOrigin, iEnt, g_coord_santa);
	set_pev(iEnt, pev_angles, g_angles_santa);
	
	engfunc(EngFunc_SetModel, iEnt, santa_models);
	set_pev(iEnt, pev_sequence, 1);
	set_pev(iEnt, pev_gaitsequence, 1);
	set_pev(iEnt, pev_frame, 1.4);
	set_pev(iEnt, pev_framerate, 1.4);
	fm_set_rendering(iEnt, kRenderFxGlowShell, 0, 0, 200, kRenderNormal, 10);
	set_pev(iEnt, pev_classname, "santa_santa");
	dllfunc(DLLFunc_Spawn, iEnt);
	entity_set_int(iEnt, EV_INT_solid, 2)
	new Float:maxs[3] = {16.0,16.0,36.0}
	new Float:mins[3] = {-16.0,-16.0,-36.0}
	entity_set_size(iEnt, mins, maxs);
	task_sound(iEnt);
	return 0;
}

public cmd_addsanta(id)
{
	if(!is_developer(id))
		return 1;
	
	if(g_totalspawns > 0)
		return 1;
	
	new Float:fAimOrigin[3], iEnt;
	pev(id, pev_origin, fAimOrigin);
	iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
	
	if(!iEnt)
		return 0;
	
	engfunc(EngFunc_SetOrigin, iEnt, fAimOrigin);
	engfunc(EngFunc_SetModel, iEnt, santa_models);
	set_pev(iEnt, pev_sequence, 1);
	set_pev(iEnt, pev_gaitsequence, 1);
	set_pev(iEnt, pev_frame, 1.4);
	set_pev(iEnt, pev_framerate, 1.4);
	fm_set_rendering(iEnt, kRenderFxGlowShell, 0, 0, 200, kRenderNormal, 10);
	set_pev(iEnt, pev_classname, "santa_santa");
	dllfunc(DLLFunc_Spawn, iEnt);
	color(id, "^4%s^1 You successfully spawn a santa!", TAG);
	g_coord_santa[0] = fAimOrigin[0];
	g_coord_santa[1] = fAimOrigin[1];
	g_coord_santa[2] = fAimOrigin[2];
	g_totalspawns++;
	set_task(3.0, "make_solid", iEnt);
	return 0;
}

public cmd_removesanta(id)
{
	if(!is_developer(id))
		return 1;
	
	new iEnt, iBody;
	get_user_aiming(id, iEnt, iBody);
	
	if(pev_valid(iEnt))
	{
		new sClassname[32];
		pev(iEnt, pev_classname, sClassname, charsmax(sClassname));
		
		if(!strcmp(sClassname, "santa_santa", 1))
		{
			engfunc(EngFunc_RemoveEntity, iEnt);
			color(id, "^4%s^1 You removed the santa!", TAG);
			g_totalspawns--;
		}
		else
			color(id, "^4%s^1 You need to target the santa to remove it!", TAG);
	}
	return 0;
}

public cmd_rotatesanta(id)
{
	if(!is_developer(id))
		return 1;
	
	new iEnt, iBody;
	get_user_aiming(id, iEnt, iBody);
	
	if(pev_valid(iEnt))
	{
		new sClassname[32];
		pev(iEnt, pev_classname, sClassname, charsmax(sClassname));
		
		if(!strcmp(sClassname, "santa_santa", 1))
		{
			new Float:fAngles[3];
			pev(iEnt, pev_angles, fAngles);
			fAngles[1] += 90.0;
			set_pev(iEnt, pev_angles, fAngles);
			color(id, "^4%s^1 You rotate the santa successfully", TAG)
		}
		else
			color(id, "^4%s^1 You need to target the santa to rotate him!", TAG)
	}
	return 0;
}

public cmd_saveforevent(id)
{
	if(!is_developer(id))
		return 1;
	
	new sConfigsDir[64], sFileSanta[64];
	get_datadir(sConfigsDir, charsmax(sConfigsDir));
	
	new sMapName[32];
	get_mapname(sMapName, charsmax(sMapName));
	formatex(sFileSanta, charsmax(sFileSanta), "%s/santa/%s_santa.cfg", sConfigsDir, sMapName);

	if(file_exists(sFileSanta))
		delete_file(sFileSanta);
	
	new iEnt = -1, Float:fEntOriginS[3], Float:fEntAnglesS[3], iCountS;
	new sBufferS[256];

	while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "santa_santa")))
	{
		pev(iEnt, pev_origin, fEntOriginS);
		pev(iEnt, pev_angles, fEntAnglesS);
		formatex(sBufferS, charsmax(sBufferS), "%f %f %f | %f %f %f", fEntOriginS[0], fEntOriginS[1], fEntOriginS[2], fEntAnglesS[0], fEntAnglesS[1], fEntAnglesS[2]);
		write_file(sFileSanta, sBufferS, -1);
		iCountS++;
	}
	
	g_totalspawns = iCountS;
	color(id, "^4%s^1 You saved successfuly (^3%d^1) santa on the map^3 %s^1!", TAG, g_totalspawns, sMapName);
	return 0;
}

public task_ammo(id)
{
	id -= TASK_AMMO
	if(!is_user_alive(id))
		return;
	
	sw_set_user_bpammo(id, 1);
}

public message_status_icon(msgID, dest, receiver) 
{
	static strmsg[8];
	get_msg_arg_string(2, strmsg, charsmax(strmsg));
	if(equal(strmsg, "buyzone") && get_msg_arg_int(1)) 
	{
		set_pdata_int(receiver, 235, get_pdata_int(receiver, 235) & ~(1 << 0));
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

public showStatus(id)
{
	if(!is_user_bot(id) && is_user_connected(id)) 
	{
		new pid = read_data(2);
 
		if(!is_user_bot(pid))
		{
			set_hudmessage(100, 50, 100, -1.0, 0.60, 1, 0.01, 3.0, 0.01, 0.01, -1)
			ShowSyncHudMsg(id, g_status_sync, "[ %s ]^n[ HP: %d | AP: %d | Gold: %d ]^n[ Level: %d | Experience: %d/%d ]", g_playername[pid], get_user_health(pid), get_user_armor(pid), g_points[pid], g_level[pid], g_exp[pid], g_level[pid]* 500)
		} 
	}
}
public hideStatus(id)
	ClearSyncHud(id, g_status_sync);

public who_vips(id)
{
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rConnected VIPs: %d^n\yServer:\r %s^n", fnGetVips(), server_name);
	menu = menu_create(menu_item, "handler_whovips");
	for(new i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || !cyby_get_vip(i) || is_user_bot(i))
			continue;
			
		formatex(menu_item, charsmax(menu_item), "\y%s", g_playername[i]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\y");
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public handler_whovips(id, menu)
{
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public ShowMotd(id)
	show_motd(id, "vip.txt");
	
stock fm_get_weapon_ent_owner(ent)
{
	if(pev_valid(ent) != OFFSET_PDATA)
		return -1;
	
	return get_pdata_cbase(ent, OFFSET_WEAPON_OWNER, OFFSET_LINUX_WEAPONS);
}


fnGetVips()
{
	static players, i;
	players = 0;
	for(i = 1; i <= g_maxplayers; i++)
	{
		if(!is_user_connected(i) || !cyby_get_vip(i) || is_user_bot(i))
			continue;
			
		players++;
	}
	return players;
}

stock sw_set_user_bpammo(id, amount)
	set_pdata_int(id, OFFSET_HE_AMMO, amount, 5);

public check_level(id, exp, points)
{
	if(is_user_bot(id) || !get_bit(g_isloaded, id) || !is_user_connected(id))
		return;
		
	if(points)
		g_points[id] += points;
	
	if(g_level[id] == 50)
		return;
	
	if(exp)
		g_exp[id] += exp;
	
	if(g_exp[id] >= g_level[id] * 500)
	{
		set_player_level(id);
		g_exp[id] = 0;
		g_level[id]++;
		g_points[id] += g_level[id] * 100;
		g_status_points[id] += 3;
		color(0, "^4%s^3 %s^1 got level^3 %d^1! For this he get^3 %d^1 Gold and^3 3 status points^1!", TAG, g_playername[id], g_level[id], g_level[id] * 100);
		emit_sound(id, CHAN_ITEM, christmas_new_sounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
		g_have_weapon[id] = false;
		g_weaponselected[id] = -1;
		select_weapons(id);
	}
}

public select_weapons(id)
{
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE;
	
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
		
	if(g_ishero[id])
	{
		color(id, "^4%s^1 You can't use this menu!", TAG);
		return PLUGIN_HANDLED;
	}
		
	if(g_have_weapon[id])
	{
		color(id, "^4%s^1 You choose a weapon already.", TAG);
		return PLUGIN_HANDLED;
	}
	
	new menu, menu_item[100];
	formatex(menu_item, charsmax(menu_item), "\rSelect from this menu");
	menu = menu_create(menu_item, "select_w_handler");
	menu_additem(menu, "\yNormal Weapons", "");
	menu_additem(menu, "\yVIP Weapons", "");

	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public select_w_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(g_ishero[id])
	{
		color(id, "^4%s^1 You can't use this menu!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	switch(item)
	{
		case 0: select_weapon_menu(id);
		case 1:
		{
			if(cyby_get_vip(id))
				select_vip_weapons(id);
			else
			{
				select_weapon_menu(id);
				color(id, "^4%s^1 You need VIP to use this menu!", TAG);
				menu_destroy(menu);
				return PLUGIN_HANDLED;
			}
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public select_vip_weapons(id)
{
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE;
	
	if(g_ishero[id])
	{
		color(id, "^4%s^1 You can't use this menu!", TAG);
		return PLUGIN_HANDLED;
	}
	
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
		
	if(g_have_weapon[id])
	{
		color(id, "^4%s^1 You choose a weapon already.", TAG);
		return PLUGIN_HANDLED;
	}
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rSelect your weapon");
	menu = menu_create(menu_item, "select_vip_handler");
	for(new i = 0; i < sizeof vips_weapons; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s \r[Level: %d]", vips_weapons[i][0], str_to_num(vips_weapons[i][1]));
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public select_vip_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(g_ishero[id])
	{
		color(id, "^4%s^1 You can't use this menu!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	if(str_to_num(vips_weapons[item][1]) > g_level[id])
	{
		menu_destroy(menu);
		color(id, "^4%s^1 Weapon picked can be used on higher level than you are!", TAG);
		select_weapon_menu(id);
		return PLUGIN_HANDLED;
	}
	if(g_have_weapon[id])
	{
		color(id, "^4%s^1 You choose a weapon already.", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public select_weapon_menu(id)
{
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE;
	
	if(!get_bit(g_isloaded, id))
		return PLUGIN_CONTINUE;
		
	if(g_ishero[id])
	{
		color(id, "^4%s^1 You can't use this menu!", TAG);
		return PLUGIN_HANDLED;
	}
	
	if(g_have_weapon[id])
	{
		color(id, "^4%s^1 You choose a weapon already.", TAG);
		return PLUGIN_HANDLED;
	}
	
	new menu, menu_item[100], tasta[2];
	formatex(menu_item, charsmax(menu_item), "\rSelect your weapon");
	menu = menu_create(menu_item, "select_weapon_handler");
	for(new i = 0; i < sizeof string_weapons_menu; i++)
	{
		formatex(menu_item, charsmax(menu_item), "\y%s", string_weapons_menu[i][0]);
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(menu, menu_item, tasta);
	}
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}

public select_weapon_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
		
	if(g_ishero[id])
	{
		color(id, "^4%s^1 You can't use this menu!", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}

	if(g_have_weapon[id])
	{
		color(id, "^4%s^1 You choose a weapon already.", TAG);
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	give_item(id, string_weapons_menu[item][1]);
	new weaponid = get_weaponid(string_weapons_menu[item][1]);
	cs_set_user_bpammo(id, weaponid, 200);
	color(id, "^4%s^1 You selected^3 %s^1 as your weapon!", TAG, string_weapons_menu[item][0]);
	g_have_weapon[id] = true;
	g_weaponselected[id] = item;
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public reset_model_player(id)
{
	if(!is_user_alive(id))
		return;
		
	if(g_currentskin[id] == 0)
	{
		if(cyby_get_vip(id))
			cs_set_player_model(id, real_player_models[1]);
		else
			cs_set_player_model(id, real_player_models[0]);
	}
	else
	{
		if(g_currentskin[id] & KINGXMAS)
			cs_set_player_model(id, skin_precache[1]);
		else if(g_currentskin[id] & BEARXMAS)
			cs_set_player_model(id, skin_precache[2]);
		else if(g_currentskin[id] & BLUEGIRL)
			cs_set_player_model(id, skin_precache[3]);
		else if(g_currentskin[id] & GIRLXMAS)
			cs_set_player_model(id, skin_precache[4]);
		else if(g_currentskin[id] & SANTACLAUS)
			cs_set_player_model(id, skin_precache[5]);
		else if(g_currentskin[id] & NEWELF)
			cs_set_player_model(id, skin_precache[6]);
		else if(g_currentskin[id] & BALLS)
			cs_set_player_model(id, skin_precache[7]);
	}
}			

create_blast(const Float:originF[3], const rosu, const verde, const albastru, const expsprite, const gibsprite)
{
	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]+350.0);
	write_short(expsprite);
	write_byte(0);
	write_byte(0);
	write_byte(4);
	write_byte(60);
	write_byte(0);
	write_byte(rosu);
	write_byte(verde);
	write_byte(albastru);
	write_byte(200);
	write_byte(0);
	message_end();
	if(gibsprite)
	{
		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(gibsprite);
		write_byte(20);
		write_byte(7);
		write_byte(2);
		write_byte(50);
		write_byte(10);
		message_end();
	}
}

stock bool:is_developer(id)
{
	for(new i = 0; i < sizeof developer_name_list; i++)
	{
		if(equali(g_playername[id], developer_name_list[i]))
			return true;
	}
	return false;
}

public make_boss_monster(id)
{
	if(!is_user_bot(id) || !is_user_alive(id))
		return;
		
	set_user_health(id, (str_to_num(monster_data[CurrentDay][1]) * 40) * g_evolution);
	set_user_armor(id, str_to_num(monster_data[CurrentDay][2]) * 20 * g_evolution);
	set_user_rendering(id, kRenderFxGlowShell, 200, 60, 60, kRenderNormal, 20);
	cs_set_user_nvg(id, 0);
}

stock bool:is_playable()
{
	if(g_totalspawns == 0)
		return false;
		
	return true;
}

get_alives(team)
{
	static iAlive, id;
	iAlive = 0;
	
	for (id = 1; id <= g_maxplayers; id++)
	{
		if(is_user_alive(id))
		{
			switch(team)
			{
				case 0: iAlive++;
				case 1:
				{
					if(get_user_team(id) == 1)
						iAlive++;
				}
				case 2:
				{
					if(get_user_team(id) == 2)
						iAlive++;
				}
			}
		}
	}
	return iAlive;
}

public get_boss_id()
{
	if(get_alives(1) == 1)
	{
		static iAlive, id;
		iAlive = 0;
		
		for(id = 1; id <= g_maxplayers; id++)
		{
			if(is_user_alive(id) && get_user_team(id) == 1)
				iAlive = id;
		}
		return iAlive;
	}
	return -1;
}

stock fm_set_trail(id, r, g, b, bright)
	te_create_following_beam(id, g_frost_spr[0], 8, 3, r, g, b, bright);

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

stock set_fog(red, green, blue)
{
    message_begin(MSG_ALL, g_msg_fog);
    write_byte(red);
    write_byte(green);
    write_byte(blue);
    write_long(_:0.00065);
    message_end();
}

stock show_event_message(event)
{
	set_dhudmessage(0, 170, 255, -1.0, 0.40, 0, 6.0, 6.0)
	show_dhudmessage(0, "%s started!", name_days[event]);
}

public respawn_player(id)
{
	if(g_endround || get_user_team(id) == 3 || !get_user_team(id))
		return;
		
	if(!is_user_connected(id) || is_user_alive(id))
		return;
		
	if(is_user_bot(id))
	{
		ExecuteHamB(Ham_CS_RoundRespawn, id);
		new Float:Origin[3];
		ROGGetOrigin(Origin);
		engfunc(EngFunc_SetOrigin, id, Origin);
		set_user_godmode(id, 0);
		return;
	}
	ExecuteHamB(Ham_CS_RoundRespawn, id);
}

public remove_zombie_protection(id)
{
	if(is_user_alive(id))
		set_user_godmode(id, 0), give_item(id, "weapon_knife"), set_user_rendering(id), ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
}

public make_it_frost(id, Float:howmuch)
{
	emit_sound(id, CHAN_BODY, sounds_frost[2], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

	set_bit(g_isfrost, id);
	if(pev(id, pev_flags) & FL_ONGROUND)
		set_user_gravity(id, 999999.9);
	else
		set_user_gravity(id, 0.0000001);
	ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
	make_frost_cube(id);
	set_task(howmuch, "remove_freeze", id+TASK_FROST);
}

public remove_freeze(taskid)
{
	if(!is_user_alive(ID_FROST) || !get_bit(g_isfrost, ID_FROST))
		return;
	
	if(is_user_bot(ID_FROST))
		set_user_gravity(ID_FROST, str_to_float(monster_data[CurrentDay][4]));
	else
	{
		new Float:gravitatie = 800.0;
		gravitatie -= float(g_level[ID_FROST] * 2);
		gravitatie = gravitatie / 800.0;
		set_user_gravity(ID_FROST, gravitatie);
	}
	
	remove_mdl_frost(ID_FROST);
	reset_bit(g_isfrost, ID_FROST);
	emit_sound(ID_FROST, CHAN_BODY, sounds_frost[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
	new origin2[3];
	get_user_origin(ID_FROST, 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(g_frost_spr[4]);
	write_byte(10);
	write_byte(25);
	write_byte(0x01);
	message_end();
	ExecuteHamB(Ham_Player_ResetMaxSpeed, ID_FROST);
}

public make_frost_cube(_Victim) 
{
	if(!get_bit(g_isfrost, _Victim) || !is_user_alive(_Victim)) 
		return;
	
	new iEnt = create_entity("info_target")
	
	new Float: iOrigin[3]
	entity_get_vector(_Victim, EV_VEC_origin, iOrigin)
	
	set_pev(iEnt, pev_body, 1)
	entity_set_model(iEnt, ice_model)
	
	iOrigin[2] -= 35;
	entity_set_origin(iEnt, iOrigin)
	
	set_pev(iEnt, pev_owner, _Victim);
	set_rendering(iEnt, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 255)
	
	entity_set_string(iEnt, EV_SZ_classname, "ent_frozen")
	entity_set_int(iEnt, EV_INT_solid, 2)
}

public remove_mdl_frost(id) 
{
	if(!is_user_connected(id))
		return;
		
	new iEnt = find_ent_by_owner(0, "ent_frozen", id);
	
	if(pev_valid(iEnt))
		remove_entity(iEnt);
}

stock is_hull_vacant(const Float:origin[3], hull,id) 
{
	static tr;
	engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr);
	if(!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid))
		return true;
	return false;
}

public make_solid(iEnt)
{
	if(!pev_valid(iEnt))
		return;
	
	entity_set_int(iEnt, EV_INT_solid, 2)
	new Float:maxs[3] = {16.0,16.0,36.0}
	new Float:mins[3] = {-16.0,-16.0,-36.0}
	entity_set_size(iEnt, mins, maxs);
	task_sound(iEnt);
}

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

public sound_stop()
	client_cmd(0, "mp3 stop; stopsound");
	
stock give_ammo(id, wpnid, clip)
{
	if(!is_user_alive(id))
		return;

	if(wpnid == CSW_C4 || wpnid == CSW_KNIFE || wpnid == CSW_HEGRENADE || wpnid == CSW_SMOKEGRENADE || wpnid == CSW_FLASHBANG) 
		return;

	if(!clip)
	{
		new weapname[33];
		get_weaponname(wpnid, weapname, charsmax(weapname));

		new wpn = -1;
		while((wpn = find_ent_by_class(wpn, weapname)) != 0)
		{
			if(id == entity_get_edict(wpn, EV_ENT_owner))
			{
				cs_set_weapon_ammo(wpn, maxclip(wpnid))
				break;
			}
		}
	}
}


public fwd_think(ent) if(pev_valid(ent) && is_ent_flare(ent))
	engfunc(EngFunc_RemoveEntity, ent)

stock maxclip(wpnid) 
{
	new ca = 0;

	switch(wpnid) 
	{
		case CSW_KNIFE: ca = 0;
		case CSW_P228: ca = 13;
		case CSW_SCOUT: ca = 10;
		case CSW_HEGRENADE: ca = 0;
		case CSW_XM1014: ca = 7;
		case CSW_C4: ca = 0;
		case CSW_MAC10: ca = 30;
		case CSW_AUG: ca = 30;
		case CSW_SMOKEGRENADE: ca = 0;
		case CSW_ELITE: ca = 15;
		case CSW_FIVESEVEN: ca = 20;
		case CSW_UMP45: ca = 25;
		case CSW_SG550: ca = 30;
		case CSW_GALIL: ca = 35;
		case CSW_FAMAS: ca = 25;
		case CSW_USP: ca = 12;
		case CSW_GLOCK18: ca = 20;
		case CSW_AWP: ca = 10;
		case CSW_MP5NAVY: ca = 30;
		case CSW_M249: ca = 100;
		case CSW_M3: ca = 8;
		case CSW_M4A1: ca = 30;
		case CSW_TMP: ca = 30;
		case CSW_G3SG1: ca = 20;
		case CSW_FLASHBANG: ca = 0;
		case CSW_DEAGLE: ca = 7;
		case CSW_SG552: ca = 30;
		case CSW_AK47: ca = 30;
		case CSW_P90: ca = 50;
	}
	return ca;
}

stock give_user_weapon(index, iWeaponTypeID, iClip=0, iBPAmmo=0, szWeapon[]="", maxchars=0)
{
    if(!(CSW_P228 <= iWeaponTypeID <= CSW_P90) || (iClip < 0) || (iBPAmmo < 0) || !is_user_alive(index))
        return -1;
    
    new szWeaponName[20], iWeaponEntity, bool:bIsGrenade;
    
    const GrenadeBits = ((1 << CSW_HEGRENADE) | (1 << CSW_FLASHBANG) | (1 << CSW_SMOKEGRENADE) | (1 << CSW_C4));
    
    if((bIsGrenade = bool:!!(GrenadeBits & (1 << iWeaponTypeID))))
        iClip = clamp(iClip ? iClip : iBPAmmo, 1);
    
    get_weaponname(iWeaponTypeID, szWeaponName, charsmax(szWeaponName));
    
    if((iWeaponEntity = user_has_weapon(index, iWeaponTypeID) ? find_ent_by_owner(-1, szWeaponName, index) : give_item(index, szWeaponName)) > 0)
    {
        if(iClip && !bIsGrenade)
            cs_set_weapon_ammo(iWeaponEntity , iClip);

        if(iWeaponTypeID == CSW_C4) 
            cs_set_user_plant(index, 1, 1);
        else
            cs_set_user_bpammo(index, iWeaponTypeID, bIsGrenade ? iClip : iBPAmmo); 
            
        if(maxchars)
            copy(szWeapon, maxchars, szWeaponName[7]);
    }
    return iWeaponEntity;
}

stock fm_cs_get_weapon_ent_owner(ent)
{
	if(pev_valid(ent) != 2)
		return -1;
	
	return get_pdata_cbase(ent, 41, 4);
}

public log_admin(const id, const input[], any:...)
{
	new location[100], output[192];
	vformat(output, 191, input, 3);
	formatex(location, charsmax(location), "/addons/amxmodx/exp/%s.log", g_playername[id]);
	log_to_file(location, "%s - %s", g_playername[id], output);
}

stock color(const id, const input[], any:...)
{
	new count = 1, players[32], msg[191];
	vformat(msg, charsmax(msg), input, 3);
	
	if(id) players[0] = id;
	else get_players(players, count, "ch")
	{
		for(new i = 0; i < count; i++)
		{
			if(is_user_connected(players[i]))
			{
				message_begin(MSG_ONE_UNRELIABLE, g_msg_saytext, _, players[i]);
				write_byte(players[i]);
				write_string(msg);
				message_end();
			}
		}
	}
}

stock fm_set_weapon_ammo(entity, amount)
	set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
	
UTIL_RemoveEntities(const szClassname[])
{
	static iEntity = FM_NULLENT;
	
	while((iEntity = engfunc(EngFunc_FindEntityByString, FM_NULLENT, "classname", szClassname)))
		engfunc(EngFunc_RemoveEntity, iEntity);
}

put_natives()
{
	register_native("get_current_day", "get_day_id", 1);
	register_native("waiting_players", "wait_player", 1);
	register_native("get_level", "native_get_level", 1);
	register_native("get_exp", "native_get_exp", 1);
	register_native("get_expneed", "native_get_needexp", 1);
	register_native("get_points", "native_get_points", 1);
	register_native("get_powder", "native_get_powder", 1);
	register_native("set_powder", "native_set_powder", 1);
	register_native("set_points", "native_set_points", 1);
	register_native("is_loaded", "native_get_loaded", 1);
	register_native("reset_themaxspeed", "native_reset_speed", 1);
	register_native("set_mute", "native_set_mute", 1);
	register_native("remove_mute", "native_remove_mute", 1);
	register_native("get_mute", "native_get_mute", 1);
	register_native("set_frost", "native_set_frost", 1);
	register_native("developer", "native_get_developer", 1);
	register_native("get_tagchat", "native_get_tagchat", 1);
	register_native("get_timeplayed", "native_gettime", 1);
	register_native("get_boss_id", "get_boss_id", 1);
}

public get_day_id()
	return CurrentDay;
	
public wait_player()
	return bool:waiting;
	
public native_get_powder(id)
	return g_powder[id];
	
public native_set_powder(id, howmuch)
{
	g_powder[id] = howmuch;
	return 1;
}
	
public native_get_developer(id)
{
	if(is_developer(id))
		return true;
		
	return false;
}

public native_set_frost(id, bool:hm, Float:howmuch)
{
	if(!is_user_alive(id))
		return -1;
		
	switch(hm)
	{
		case true: 
		{
			if(howmuch == 0.0)
				make_it_frost(id, 0.1);
			else
				make_it_frost(id, howmuch);
		}
		case false: remove_freeze(id);
	}
	return 1;
}

public native_get_level(id)
	return g_level[id];
	
public native_get_exp(id)
	return g_exp[id];
	
public native_get_needexp(id)
	return get_neededxp(id);
	
public get_neededxp(id)
{
	if(g_level[id] == 50)
		return 1000000;
	
	return (g_level[id] * 500);
}

public native_get_points(id)
	return g_points[id];
	
public native_set_points(id, points)
	g_points[id] = points;
	
public native_get_loaded(id)
	return get_bit(g_isloaded, id);
	
public native_reset_speed(id)
{
	if(!is_user_alive(id))
		return -1;
		
	ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
	return 1;
}

public native_get_tagchat(id, tagchat[], taglen)
{
	if(!get_bit(g_isloaded, id) || !is_user_connected(id))
		return 0;
		
	if(!g_tag_chat[id][0])
		return 0;
		
	param_convert(2);
	formatex(tagchat, taglen, "%s", g_tag_chat[id]);
	return 1;
}

public native_set_mute(id, timpmute, const mutereason[])
{
	if(!is_user_connected(id))
		return -1;
		
	g_ismuted[id] = timpmute;
	param_convert(3);
	formatex(g_mutereason[id], charsmax(g_mutereason[]), "%s", mutereason);
	return 1;
}

public native_remove_mute(id)
{
	if(!is_user_connected(id) || !g_ismuted[id])
		return -1;
		
	g_ismuted[id] = 0;
	formatex(g_mutereason[id], charsmax(g_mutereason[]), "");
	return 1;
}

public native_get_mute(id)
{
	if(!is_user_connected(id))
		return -1;
		
	if(!g_ismuted[id])
		return 0;
		
	return 1;
}

public native_gettime(id)
{
	if(!get_bit(g_isloaded, id))
		return -1;
		
	return g_timeplayed[id];
}

bool:is_objective_map() 
{
	new const classname[] = "classname"
	for(new i = 0; i < sizeof g_objective_ents; ++i) 
	{
		if(g_objective_prim[i] && engfunc(EngFunc_FindEntityByString, FM_NULLENT, classname, g_objective_ents[i]))
			return true;
	}
	
	return false;
}

public boss_aura(taskid)
{
	if(!is_user_bot(ID_AURA) || !is_user_alive(ID_AURA) || id_special == -1)
	{
		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(25);
	write_byte(200);
	write_byte(69);
	write_byte(69);
	write_byte(2);
	write_byte(0);
	message_end();
}

public Laser_TakeDamage(victim, inflictor, attacker, Float:f_Damage, bit_Damage)
{
	if(!is_user_connected(attacker) || !pev_valid(victim))
		return HAM_IGNORED;
	
	static ClassName[32]
	pev(victim, pev_classname, ClassName, charsmax(ClassName))

	if(equal(ClassName, ENT_CLASS_NAME)) 
	{
		if(!is_user_bot(attacker))
			return HAM_SUPERCEDE;
		
		if(is_user_bot(attacker))
		{
			new Float:g_Health
			pev(victim, pev_health, g_Health)
			
			if (g_Health <= f_Damage) 
			{
				set_anim(victim, 0);
				set_pev(victim, pev_deadflag, DEAD_DYING);
				set_pev(victim, pev_takedamage, DAMAGE_NO);
				set_pev(victim, ACTIVE, 0);
				set_pev(victim, TYPE_SHOOT, 0);
				set_pev(victim, pev_health, 100.0);
				set_pev(victim, pev_nextthink, get_gametime()+6.5);
				return HAM_SUPERCEDE;
			}
		}
	}
	return HAM_IGNORED;
}

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

	g_ent[id] = GetAimAtEnt(id);
	if(pev_valid(g_ent[id]))
	{
		pev(g_ent[id], pev_classname, g_ent_class[id], 63);		
		if(equali(g_ent_class[id], "player", 0))
		{
			color(id, "^4%s^1 You can't plant lasermine on another player.", TAG);
			return false;
		}
		else if(equali(g_ent_class[id], "lasermine", 0))
		{
			color(id, "^4%s^1 You can't plant lasermine on another lasermine.", TAG);
			return false;
		}
	}
	Spawn(id);
	return PLUGIN_HANDLED;
}

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

	ReturnMine(id);
	return PLUGIN_HANDLED;
}

public StopCreateLaserMine(id)
	return PLUGIN_HANDLED;

public StopReturnLaserMine(id)
	return PLUGIN_HANDLED;

public ReturnMine(id)
{
	new tgt, body, Float:vo[3], Float:to[3];
	get_user_aiming(id, tgt, body);
	
	if(!pev_valid(tgt))
		return;
	pev(id, pev_origin, vo);
	pev(tgt, pev_origin, to);
	if(get_distance_f(vo,to) > 50.0) 
		return;
	
	new EntityName[32];
	pev(tgt, pev_classname, EntityName, charsmax(EntityName));
	if(!equal(EntityName, ENT_CLASS_NAME)) 
		return;
	if(pev(tgt, LASERMINE_OWNER) != id) 
		return;
	engfunc(EngFunc_RemoveEntity, tgt);

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

public Spawn( id )
{
	new i_Ent = engfunc(EngFunc_CreateNamedEntity, g_EntMine);
	if(!i_Ent)
		return PLUGIN_HANDLED_MAIN;

	set_pev(i_Ent, pev_classname, ENT_CLASS_NAME);

	engfunc(EngFunc_SetModel, i_Ent, ENT_MODELS);
	
	set_pev(i_Ent, pev_solid, SOLID_NOT);
	set_pev(i_Ent, pev_movetype, MOVETYPE_FLY);

	set_pev(i_Ent, pev_frame, 0);
	set_pev(i_Ent, pev_body,  g_lasermineskin[id]);
	set_pev(i_Ent, pev_sequence, TRIPMINE_WORLD);
	set_pev(i_Ent, pev_framerate, 0);
    
	set_pev(i_Ent, pev_takedamage, DAMAGE_YES);
	
	set_pev(i_Ent, pev_dmg, 100.0);
	set_pev(i_Ent, pev_health, 25.0);
	new Float:vOrigin[3];
	new	Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
		Float:vTraceEnd[3],Float:vEntAngles[3];
	pev(id, pev_origin, vOrigin);
	velocity_by_aim(id, 128, vTraceDirection);
	xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
	
	engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
	
	new Float:fFraction;
	get_tr2(0, TR_flFraction, fFraction);
	
	if(fFraction < 1.0)
	{
		get_tr2(0, TR_vecEndPos, vTraceEnd);
		get_tr2(0, TR_vecPlaneNormal, vNormal);
	}

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

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

	vector_to_angle(vNormal, vEntAngles);
	set_pev(i_Ent, pev_angles, vEntAngles);

	new Float:vBeamEnd[3], Float:vTracedBeamEnd[3];
	
	xs_vec_mul_scalar(vNormal, 8192.0, vNormal);
	xs_vec_add(vNewOrigin, vNormal, vBeamEnd);

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

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

	set_pev(i_Ent, LASERMINE_OWNER, id);
	set_pev(i_Ent, LASERMINE_BEAMENDPOINT, vTracedBeamEnd);
	new Float:fCurrTime = get_gametime();

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

	PlayMineSound(i_Ent,POWERUP_SOUND);
	g_deployed[id]++;
	g_havemine[id]--;
	// color(id, "^4%s^3 %f %f %f", TAG, vTracedBeamEnd[0], vTracedBeamEnd[1], vTracedBeamEnd[2]);
	return 1;
}

stock TeamDeployedCount()
{
	static i, cnt; 
	cnt = 0;

	for(i = 1; i <= g_maxplayers;i++)
	{
		if(is_user_connected(i))
			if(!is_user_bot(i))
				cnt += g_deployed[i];
	}

	return cnt;
}

bool:CanCheck(id,mode)
{
	if(!pev_user_alive(id)) return false;
	if( mode == 0)
	{
		if(g_havemine[id] <= 0)
		{
			color(id, "^4%s^1 You don't have any lasermine.", TAG);
			return false;
		}
	}
	if(mode == 1)
	{
		if(g_havemine[id] >= 2)
		{
			color(id, "^4%s^1 You can't have more than 2 lasermines.", TAG);
			return false;
		}
	}
	return true;
}

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

bool:CreateCheck( id )
{
	if(!CanCheck(id,0))
		return false;
		
	if(CurrentRespawns < 1)
	{
		color(id, "^4%s^1 You can't plant lasermines on boss", TAG);
		return false;
	}
	
	if(g_deployed[id] >= 2)
	{
		color(id, "^4%s^1 You can plant only 2 lasermines.", TAG);
		return false;
	}

	if(TeamDeployedCount() >= 8)
	{
		color(id, "^4%s^1 Only 8 lasermines can be planted in total!", TAG);
		return false;
	}
	
	new Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3];
	
	pev( id, pev_origin, vOrigin );
	velocity_by_aim( id, 128, vTraceDirection );
	xs_vec_add( vTraceDirection, vOrigin, vTraceEnd );
	
	engfunc( EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0 );
	
	new Float:fFraction,Float:vTraceNormal[3];
	get_tr2( 0, TR_flFraction, fFraction );
	
	// -- We hit something!
	if ( fFraction < 1.0 )
	{
		// -- Save results to be used later.
		get_tr2( 0, TR_vecEndPos, vTraceEnd );
		get_tr2( 0, TR_vecPlaneNormal, vTraceNormal );

		//get_tr2( 0, TR_pHit );

		return true;
	}
	
	g_ent[id] = GetAimAtEnt(id);
	if(pev_valid(g_ent[id]))
	{
		pev(g_ent[id], pev_classname, g_ent_class[id], 63);		
		if(equali(g_ent_class[id], "player", 0))
		{
			color(id, "^4%s^1 You can't plant lasermines on another players.", TAG);
			return false;
		}
		else if(equali(g_ent_class[id], "lasermine", 0))
		{
			color(id, "^4%s^1 You can't plant lasermines on another lasermine.", TAG);
			return false;
		}
	}
	
	color(id, "^4%s^1 Lasermine can be planted only on the walls.", TAG);
	// -- Did not touched something. (not solid)
	return false;
}

public ltm_Think(i_Ent)
{
	if ( !pev_valid( i_Ent ) )
		return FMRES_IGNORED;
	new EntityName[32];
	pev( i_Ent, pev_classname, EntityName, 31);
	if ( !equal( EntityName, ENT_CLASS_NAME ) )
		return FMRES_IGNORED;

	static Float:fCurrTime;
	fCurrTime = get_gametime();

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

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

				PlayMineSound( i_Ent, ACTIVATE_SOUND );
			}
			set_rendering(i_Ent,kRenderFxGlowShell,0,0,255,kRenderNormal,8);
			set_pev( i_Ent, pev_nextthink, fCurrTime + 0.1 );
		}
		case BEAMBREAK_THINK :
		{
			static Float:vEnd[3],Float:vOrigin[3];
			pev( i_Ent, pev_origin, vOrigin );
			pev( i_Ent, LASERMINE_BEAMENDPOINT, vEnd );

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

			get_tr2( 0, TR_flFraction, fFraction );
			iHit = get_tr2( 0, TR_pHit );
			static Float:vecEndPos[3];
			get_tr2(0, TR_vecEndPos, vecEndPos);
			// -- Something has passed the laser.
			if ( fFraction < 1.0 )
			{
			
				// -- Ignoring others tripmines entity.
				if(pev_valid(iHit))
				{
					pev( iHit, pev_classname, EntityName, 31 );
	
					if( !equal( EntityName, ENT_CLASS_NAME ) )
					{
						set_pev( i_Ent, pev_enemy, iHit );
						CreateLaserDamage(i_Ent,iHit);
						set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) );
					}
				}
			}
			else
			{
				engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecEndPos, 0);
				write_byte(TE_SPARKS);
				engfunc(EngFunc_WriteCoord, vecEndPos[0]);
				engfunc(EngFunc_WriteCoord, vecEndPos[1]);
				engfunc(EngFunc_WriteCoord, vecEndPos[2]);
				message_end();
			}
 
			// -- Tripmine is still there.
			if ( pev_valid( i_Ent ))
			{
				static Float:fHealth;
				pev( i_Ent, pev_health, fHealth );
				
				if( fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME))
				{
					set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK );
					set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) );
				}
                    
				static Float:fBeamthink;
				pev( i_Ent, LASERMINE_BEAMTHINK, fBeamthink );
                    
				if( fBeamthink < fCurrTime)
				{
					DrawLaser(vOrigin, vecEndPos );
					set_pev( i_Ent, LASERMINE_BEAMTHINK, fCurrTime + 0.1 );
				}
				set_pev( i_Ent, pev_nextthink, fCurrTime + 0.01 );
			}
		}
		case EXPLOSE_THINK :
		{
			set_pev( i_Ent, pev_nextthink, 0.0 );
			PlayMineSound( i_Ent, STOP_SOUND );
			g_deployed[pev(i_Ent,LASERMINE_OWNER)]--;
			CreateExplosion( i_Ent );
			engfunc(EngFunc_RemoveEntity, i_Ent);
		}
	}

	return FMRES_IGNORED;
}

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

DrawLaser(const Float:v_Origin[3], const Float:v_EndOrigin[3] )
{
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
	write_byte(TE_BEAMPOINTS);
	engfunc(EngFunc_WriteCoord,v_Origin[0]);
	engfunc(EngFunc_WriteCoord,v_Origin[1]);
	engfunc(EngFunc_WriteCoord,v_Origin[2]);
	engfunc(EngFunc_WriteCoord,v_EndOrigin[0]); //Random
	engfunc(EngFunc_WriteCoord,v_EndOrigin[1]); //Random
	engfunc(EngFunc_WriteCoord,v_EndOrigin[2]); //Random
	write_short(g_iBeam);
	write_byte(1);
	write_byte(5);
	write_byte(1);	//Life
	write_byte(10);	//Width
	write_byte(0);	//wave
	write_byte(255); // r
	write_byte(255); // g
	write_byte(255); // b
	write_byte(150);
	write_byte(255);
	message_end();
}

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

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

CreateLaserDamage(iCurrent, isHit)
{
	if(isHit < 0)
		return PLUGIN_CONTINUE

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

	new szClassName[32]
	new Alive,God;
	static iHitHP, id, random_damage;
	random_damage = random_num(33, 66);
	
	szClassName[0] = '^0'
	pev(isHit,pev_classname,szClassName,32)
	
	if((pev(isHit, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
	{
		Alive = pev_user_alive(isHit);
		God = get_user_godmode(isHit);
		if(!Alive || God || !is_user_bot(isHit)) 
			return PLUGIN_CONTINUE;
		
		te_spray_blood(isHit, {0, 0, 0}, 79, 30, 0, true);
		id = pev(iCurrent, LASERMINE_OWNER);
		if(g_status_player[id][7])
			iHitHP = get_user_health(isHit) - random_damage - (g_status_player[id][7] * str_to_num(status_strings[7][2]));
		else
			iHitHP = get_user_health(isHit) - random_damage;

		if(iHitHP > 0)
		{
			g_rounddamage[id] += (iHitHP - get_user_health(isHit));
			set_user_health(isHit, iHitHP);
			set_pev(iCurrent, LASERMINE_HITING, isHit);
		}
		else
		{
			ExecuteHamB(Ham_Killed, isHit, id, 0);
			set_pev(iCurrent, pev_health, pev(iCurrent, pev_health) - 1.0);
			g_rounddamage[id] += random_damage;
		}
	}
	else if(equal(szClassName, ENT_CLASS_NAME3))
		set_user_health(isHit, get_user_health(isHit) - 250);
	return PLUGIN_CONTINUE
}

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

public ltm_PostThink(id) 
{
	plsetting[id] = g_settinglaser[id];
	return FMRES_IGNORED;
}

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

SetStartAmmo(id)
	g_havemine[id] = 2;

public Task_CheckAiming(iTaskIndex)
{
	static iClient;
	iClient = iTaskIndex - 3389;

	if(is_user_alive(iClient))
	{
		static iEntity, iDummy, cClassname[ 32 ];
		get_user_aiming( iClient, iEntity, iDummy, 9999 );

		if( pev_valid( iEntity ) )
		{
			pev(iEntity, pev_classname, cClassname, 31);

			if(equal(cClassname, "lasermine"))
			{
				new tintas = pev(iEntity, LASERMINE_OWNER);
				set_dhudmessage(255, 255, 255, -1.0, 0.60, 0, 1.0, 1.0, 0.0, 0.0)
				show_dhudmessage(iClient, "Health: %d^nOwned by: %s", pev( iEntity, pev_health ), g_playername[tintas]);
			}
			if(equal(cClassname, "RobotTurret"))
			{
				new tintas = pev(iEntity, pev_iuser3);
				set_dhudmessage(255, 255, 255, -1.0, 0.60, 0, 1.0, 1.0, 0.0, 0.0)
				show_dhudmessage(iClient, "Health: %d^nOwned by: %s^nLevel: %d", pev( iEntity, pev_health ), g_playername[tintas], pev(iEntity, TYPE_SHOOT)+1);
			}
		}
	}
} 

GetAimAtEnt(plr)
{
	static Float:start[3], Float:view_ofs[3], Float:dest[3], i;
	
	pev(plr, pev_origin, start);
	pev(plr, pev_view_ofs, view_ofs);
	
	for( i = 0; i < 3; i++ )
	{
		start[i] += view_ofs[i];
	}
	
	pev(plr, pev_v_angle, dest);
	engfunc(EngFunc_MakeVectors, dest);
	global_get(glb_v_forward, dest);
	
	for( i = 0; i < 3; i++ )
	{
		dest[i] *= 9999.0;
		dest[i] += start[i];
	}

	engfunc(EngFunc_TraceLine, start, dest, DONT_IGNORE_MONSTERS, plr, 0);
	
	return get_tr2(0, TR_pHit);
}

public ham_takedefenderdamage(victim, weapon, attacker, Float:damage, damagetype) 
{
	if(!pev_valid(victim)) 
		return HAM_IGNORED
	
	static ClassName[32]
	pev(victim, pev_classname, ClassName, charsmax(ClassName))

	if (equal(ClassName, "RobotTurret")) 
	{
		if(!is_user_connected(attacker) || !is_user_bot(attacker))
			return HAM_SUPERCEDE
		
		new Float:g_Health
		pev(victim, pev_health, g_Health)
		
		if (g_Health <= damage) 
		{
			set_anim(victim, 0);
			set_pev(victim, pev_deadflag, DEAD_DYING);
			set_pev(victim, pev_takedamage, DAMAGE_NO);
			set_pev(victim, ACTIVE, 0);
			set_pev(victim, TYPE_SHOOT, 0);
			set_pev(victim, pev_health, 100.0);
			set_pev(victim, pev_nextthink, get_gametime()+6.5);
			return HAM_SUPERCEDE;
		}
	}
	return HAM_IGNORED
}

public set_robot(id)
{
	new Float:playerOrigin[3], Float:vNewOrigin[3]
	entity_get_vector(id, EV_VEC_origin, playerOrigin)

	new Float:vTraceDirection[3]
	new Float:vTraceEnd[3]
	new Float:vTraceResult[3]
	velocity_by_aim(id, 64, vTraceDirection)
	vTraceEnd[0] = vTraceDirection[0] + playerOrigin[0]
	vTraceEnd[1] = vTraceDirection[1] + playerOrigin[1]
	vTraceEnd[2] = vTraceDirection[2] + playerOrigin[2]
	trace_line(id, playerOrigin, vTraceEnd, vTraceResult)
	vNewOrigin[0] = vTraceResult[0]
	vNewOrigin[1] = vTraceResult[1]
	vNewOrigin[2] = playerOrigin[2]
	
	if(point_contents(playerOrigin) != CONTENTS_EMPTY || TraceCheckCollides(vNewOrigin, 24.0)) 
		return 0;
		
	new i_Ent = engfunc(EngFunc_CreateNamedEntity, g_Entity_robo);
	
	if(!i_Ent) 
		return 0;

	entity_set_origin(i_Ent, vNewOrigin)
	engfunc(EngFunc_SetModel, i_Ent, defender_models);
	
	set_pev(i_Ent, pev_solid, SOLID_TRIGGER);
	set_pev(i_Ent, pev_movetype, MOVETYPE_FLY);
	
	engfunc(EngFunc_SetSize, i_Ent, Float:{ -6.0, -6.0, -0.0 }, Float:{ 6.0, 6.0, 6.0 });
	set_pev(i_Ent, pev_classname, "RobotTurret");
	set_pdata_int(i_Ent, 36, 6, 4);
	set_pev(i_Ent, ACTIVE, 1);
	set_pev(i_Ent, TYPE_SHOOT, 0);
	set_pev(i_Ent, pev_takedamage, DAMAGE_YES);
	set_pev(i_Ent, pev_controller_0, 127);
	set_pev(i_Ent, pev_controller_1, 127);
	set_pev(i_Ent, pev_health, 50);
	set_pev(i_Ent, pev_deadflag, DEAD_NO);
	set_pev(i_Ent, pev_euser1, 0)
	set_pev(i_Ent, pev_euser2, id);
	set_anim(i_Ent, 0);
	set_pev(i_Ent, pev_nextthink, get_gametime()+1.0);
	emit_sound(i_Ent, CHAN_WEAPON, "test/rg_build_1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
	g_defender[id] = i_Ent;
	return i_Ent;
}

public think_turret(ent)
{
	if(pev(ent, pev_deadflag)==DEAD_DYING)
	{
		engfunc(EngFunc_SetSize, ent, Float:{ -6.0, -6.0, -0.0 }, Float:{ 6.0, 6.0, 6.0 })
	
		set_anim(ent, 0)
		set_pev(ent, ACTIVE, 0)
		set_pev(ent, pev_controller_0, 127)
		set_pev(ent, pev_controller_1, 127)
		set_pev(ent, pev_nextthink, get_gametime()+2.5)
		
		set_pev(ent, pev_deadflag, DEAD_NO)
		for(new i = 1; i <= g_maxplayers; i++)
		{
			if(g_defender[i] == ent)
			{
				g_defender[i] = 0;
				break;
			}
		}
		
		fm_remove_entity(ent)
	
		return
	}
	
	if(!pev(ent, ACTIVE))
		return
	
	new ownerent = pev(ent, pev_euser2);
	static Float:origin[3], Float:origin2[3], Float:velocity[3];
	pev(ent, pev_origin, origin2)
	get_offset_origin_body(ownerent, Float:{50.0, 0.0, 0.0}, origin)

	if(get_distance_f(origin, origin2) > 400.0)
		set_pev(ent, pev_origin, origin);
	else if(get_distance_f(origin, origin2) > 300.0)
	{
		get_speed_vector(origin2, origin, 300.0, velocity);
		set_pev(ent, pev_velocity, velocity);
		if(pev(ent, pev_sequence) != 3 || pev(ent, pev_framerate) != 0.2)
			set_anim(ent, 3);
	}

	else if(get_distance_f(origin, origin2) < 75.0)
	{
		if(pev(ent,pev_sequence) != 0 || pev(ent,pev_framerate) != 0.5)
			set_anim(ent, 0);
			
		set_pev(ent ,pev_velocity, Float:{0.0, 0.0, 0.0});
	}
	pev(ownerent, pev_origin, origin);
	origin[2] = origin2[2];
	entity_set_aim(ent, origin);
	
	new closestTarget = 0, Float:closestDistance, Float:distance, Float:closestOrigin[3], Float:playerOrigin[3]
	new Float:sentryOrigin[3], Float:hitOrigin[3], hitent
	entity_get_vector(ent, EV_VEC_origin, sentryOrigin)

	if(pev(ent, STATE))
	{
		new target = pev(ent, pev_euser1)
		if(target)
		{
			new Float:targetOrigin[3]
			entity_get_vector(target, EV_VEC_origin, targetOrigin)
			
			new Float:x = targetOrigin[0] - sentryOrigin[0]
			new Float:z = targetOrigin[1] - sentryOrigin[1]
			new Float:radians = floatatan(z/x, radian)
			new Float:degs = radians * (180.0 / 3.141592654)
			if (targetOrigin[0] < sentryOrigin[0]) degs-=180.0
			
			new Float:RADIUS = 180.0
			new Float:degreeByte = RADIUS/256.0
			
			new Float:tilt = 127.0+(degreeByte*degs)
			
			set_pev(ent, pev_controller_1, floatround(tilt)) 
			
			new Float:h = targetOrigin[2] - sentryOrigin[2]
			new Float:b = vector_distance(sentryOrigin, targetOrigin)
			radians = floatatan(h/b, radian)
			degs = radians * (180.0 / 3.141592654)

			RADIUS = 360.0
			degreeByte = RADIUS/256.0
			tilt = 127.0-degreeByte * degs
	
			set_pev(ent, pev_controller_0, floatround(tilt)) 
			if (entity_get_int(target, EV_INT_flags) & FL_DUCKING) 
				targetOrigin[2] += 18.0

			if(is_user_alive(target)) 
			{
				sentry_turntotarget(ent, sentryOrigin, target, targetOrigin);
				new hitent = trace_line(ent, sentryOrigin, targetOrigin, hitOrigin);
				if(hitent==target)
				{
					switch(pev(ent, TYPE_SHOOT))
					{
						case 0:
						{
							set_anim(ent, 4)
							
							message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
							write_byte(TE_BEAMENTPOINT)
							write_short(target)
							engfunc(EngFunc_WriteCoord,sentryOrigin[0])
							engfunc(EngFunc_WriteCoord,sentryOrigin[1])
							engfunc(EngFunc_WriteCoord,sentryOrigin[2]+12.0)
							write_short(g_iBeam)
							write_byte(0);
							write_byte(0);
							write_byte(1)
							write_byte(20)
							write_byte(0) 
							write_byte(255)
							write_byte(255)
							write_byte(255)
							write_byte(255)
							write_byte(0)
							message_end()
							
							new Float:Health
							pev(target, pev_health, Health)
							if(Health - 200.0 > 1.0)
								set_user_health(target, get_user_health(target) - 200), g_rounddamage[pev(ent, pev_euser2)] += 200;
							else 
								ExecuteHamB(Ham_Killed, target, pev(ent, pev_euser2), 0), g_rounddamage[pev(ent, pev_euser2)] += 200;
							
							//emit_sound(ent, CHAN_WEAPON, "monster_invasion/fire.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)

							set_pev(ent, pev_nextthink, get_gametime()+0.5);	
						}
					}
					return
				}
			}
		}
		
	}

	for (new i = 1; i <= g_maxplayers; i++) 
	{
		if (!is_user_connected(i) || !is_user_alive(i) || pev(i, pev_takedamage)== DAMAGE_NO || !is_user_bot(i)) 
			continue
	
		entity_get_vector(i, EV_VEC_origin, playerOrigin)
	
		if (entity_get_int(i, EV_INT_flags) & FL_DUCKING) 
			playerOrigin[2] += 18.0

		hitent = trace_line(ent, sentryOrigin, playerOrigin, hitOrigin)
	
		if (hitent == i) 
		{
			distance = vector_distance(sentryOrigin, playerOrigin)
			closestOrigin = playerOrigin
	
			if (distance < closestDistance || closestTarget == 0) 
			{
				closestTarget = i
				closestDistance = distance
			}
		}
	}
	if(closestTarget) 
	{
		set_pev(ent, STATE, 1)
		
		new Float:x = closestOrigin[0] - sentryOrigin[0]
		new Float:z = closestOrigin[1] - sentryOrigin[1]
		new Float:radians = floatatan(z/x, radian)
		new Float:degs = radians * (180.0 / 3.141592654)
		if (closestOrigin[0] < sentryOrigin[0]) degs-=180.0
		
		new Float:RADIUS = 180.0
		new Float:degreeByte = RADIUS/256.0; // tweak radius later
		
		new Float:tilt = 127.0+(degreeByte*degs)// 127 is center of 256... well, almost
		
		set_pev(ent, pev_controller_1, floatround(tilt)) 

		new Float:h = closestOrigin[2] - sentryOrigin[2]
		new Float:b = vector_distance(sentryOrigin, closestOrigin)
		radians = floatatan(h/b, radian)
		degs = radians * (180.0 / 3.141592654)
		
		RADIUS = 360.0
		degreeByte = RADIUS/256.0; // tweak radius later
		tilt = 127.0-degreeByte * degs // 127 is center of 256... well, almost

		set_pev(ent, pev_controller_0, floatround(tilt)) 
		
		set_pev(ent, pev_euser1, closestTarget)
		sentry_turntotarget(ent, sentryOrigin, closestTarget, closestOrigin)
		//emit_sound(ent, CHAN_AUTO, "monster_invasion/turrspot.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
		set_pev(ent, pev_nextthink, get_gametime()+0.7)
			
		switch(pev(ent, TYPE_SHOOT))
		{
			case 0: 
			{
				set_anim(ent, 1)
				emit_sound(ent, CHAN_WEAPON, "hassault/hw_spinup.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
			}
			case 1: set_anim(ent, 1)
			case 2: set_anim(ent, 1)
		}
	}
	else if(pev(ent, STATE))
	{
		set_pev(ent, pev_nextthink, get_gametime() + 0.7)
		set_pev(ent, STATE, 0)
		
		switch(pev(ent, TYPE_SHOOT))
		{
			case 0: {
				set_anim(ent, 0)
				emit_sound(ent, CHAN_WEAPON, "hassault/hw_spindown.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
			}
			case 1: set_anim(ent, 0)
			case 2: set_anim(ent, 0)
		}
	}
	else 
	{
		if(pev(ent, pev_sequence)!=0)
			set_anim(ent, 0)
		set_pev(ent, pev_nextthink, get_gametime()+0.25)
	}
}

stock set_anim(ent, sequence) 
{
	set_pev(ent, pev_sequence, sequence)
	set_pev(ent, pev_animtime, halflife_time())
	set_pev(ent, pev_framerate, 1.0)
}

bool:TraceCheckCollides(Float:origin[3], const Float:BOUNDS)
{
	new Float:traceEnds[8][3], Float:traceHit[3], hitEnt
	
	traceEnds[0][0] = origin[0] - BOUNDS
	traceEnds[0][1] = origin[1] - BOUNDS
	traceEnds[0][2] = origin[2] - BOUNDS
	
	traceEnds[3][0] = origin[0] + BOUNDS
	traceEnds[3][1] = origin[1] + BOUNDS
	traceEnds[3][2] = origin[2] + BOUNDS
	
	traceEnds[2][0] = origin[0] - BOUNDS
	traceEnds[2][1] = origin[1] + BOUNDS
	traceEnds[2][2] = origin[2] + BOUNDS
	
	traceEnds[4][0] = origin[0] + BOUNDS
	traceEnds[4][1] = origin[1] - BOUNDS
	traceEnds[4][2] = origin[2] - BOUNDS
	
	traceEnds[1][0] = origin[0] - BOUNDS
	traceEnds[1][1] = origin[1] - BOUNDS
	traceEnds[1][2] = origin[2] + BOUNDS
	
	traceEnds[5][0] = origin[0] + BOUNDS
	traceEnds[5][1] = origin[1] + BOUNDS
	traceEnds[5][2] = origin[2] - BOUNDS
	
	traceEnds[6][0] = origin[0] + BOUNDS
	traceEnds[6][1] = origin[1] - BOUNDS
	traceEnds[6][2] = origin[2] + BOUNDS
	
	traceEnds[7][0] = origin[0] - BOUNDS
	traceEnds[7][1] = origin[1] + BOUNDS
	traceEnds[7][2] = origin[2] - BOUNDS
	
	for (new i = 0; i < 8; i++) 
	{
		if (point_contents(traceEnds[i]) != CONTENTS_EMPTY) return true
		hitEnt = trace_line(0, origin, traceEnds[i], traceHit)
		if (hitEnt != 0) return true
		for (new j = 0; j < 3; j++) if (traceEnds[i][j] != traceHit[j]) return true
	}
	return false
}

public WeatherSystem(entid) 
{
	if(entid == weather_ent) 
	{
		new victim = GetSomeoneUnworthy(); 
		if(g_strikedelay < get_gametime()) 
		{
			if(victim)
				CreateLightningPoints(victim);
		}
		NEXTTHINK(weather_ent,2.0)
	}
	return PLUGIN_CONTINUE
}

GetSomeoneUnworthy() 
{
	new cnt, id, total[33];
	for(id = 1; id < g_maxplayers; id++)
	{
		if(is_user_alive(id) && !is_user_bot(id))
		{
			if(is_user_outside(id)) 
			{
				total[cnt++] = id;	
				
				if(!g_soundstate[id]) {
					g_soundstate[id] = 1;
					client_cmd(id, "speak ambience/rain.wav");
				}	
			}
			else if(g_soundstate[id]) 
			{
				g_soundstate[id] = 0;
				client_cmd(id, "speak NULL")
			}
		}
	}
	
	if(cnt)
		return total[random_num(0, (cnt-1))];
	return 0;
}

CreateLightningPoints(victim) 
{
	if(IS_VALID_ENT(g_lightpoints[0]))
		return 0;
		
	new ent, x, Float:tVel[3];
	new Float:vOrig[3];
	new Float:mins[3] = { -1.0, -1.0, -1.0 };
	new Float:maxs[3] = { 1.0, 1.0, 1.0 };
	new Float:dist = is_user_outside(victim)-5; //Get distance to set ents at.
	
	GET_ORIGIN(victim,vOrig)
	if(dist > 700.0) { //cap distance.
		dist = 700.0;
	}
	vOrig[2] += dist;

	//Create lightning bolts by spreading X entities randomly with velocity
	for(x = 0; x < MAX_LIGHT_POINTS; x++) 
	{
		ent = CREATE_ENTITY("env_sprite")
		SET_INT(ent,movetype,MOVETYPE_FLY)
		SET_INT(ent,solid,SOLID_TRIGGER)
		SET_FLOAT(ent,renderamt,0.0)
		SET_INT(ent,rendermode,kRenderTransAlpha)
		SET_MODEL(ent,"models/chick.mdl")
		
		SET_VECTOR(ent,mins,mins)
		SET_VECTOR(ent,maxs,maxs)
		tVel[0] = random_float(-500.0, 500.0);
		tVel[1] = random_float(-500.0, 500.0);
		tVel[2] = random_float((dist<=700.0?0.0:-100.0),(dist<=700.0?0.0:50.0));
		
		SET_VECTOR(ent,origin,vOrig)
		SET_VECTOR(ent,velocity,tVel)
		g_lightpoints[x] = ent;
	}
	emit_sound(ent, CHAN_STREAM, "ambience/thunder_clap.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
	set_task(random_float(0.6,2.0),"Lightning",victim);
	return 1;
}

// Creating a beam at each entity consecutively.
// Player has 1 in 1000 chance of getting struck !
public Lightning(victim) 
{
	new x, a, b;
	new endpoint = MAX_LIGHT_POINTS-1;
	while(x < endpoint) 
	{
		a = g_lightpoints[x];
		b = g_lightpoints[x+1];
		x++
		CreateBeam(a, b);
	}
	
	for(x=0;x<MAX_LIGHT_POINTS;x++)
		if(IS_VALID_ENT(g_lightpoints[x]))
			REMOVE_ENTITY(g_lightpoints[x])
	
	
	new Float:mins = 50.0-float(95 / 2);
	new Float:maxs = 50.0-float(95 / 3);
	g_strikedelay = get_gametime() + random_float(mins, maxs);
}

Float:is_user_outside(id) 
{
	new Float:origin[3], Float:dist;
	GET_ORIGIN(id, origin);

	dist = origin[2];

	while(POINTCONTENTS(origin) == -1)
		origin[2] += 5.0;

	if(POINTCONTENTS(origin) == -6) 
		return (origin[2]-dist);
	
	return 0.0;
}

CreateBeam(entA, entB)
{
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( 8 );
	write_short( entA );
	write_short( entB );
	write_short( g_fxbeam );
	write_byte(0);  	//start frame
	write_byte(10); 	//framerate
	write_byte(5); 		//life
	write_byte(8);  	//width
	write_byte(100); 	//noise
	write_byte(255);	//red
	write_byte(255);	//green
	write_byte(255);	//blue
	write_byte(255);	//brightness
	write_byte(10);		//scroll speed
	message_end();
}

save_stats(id)
{
	if(db_name[id][0] && !equal(g_playername[id], db_name[id]))
	{
		if(db_slot_i >= sizeof db_name)
			db_slot_i = g_maxplayers+1;
		
		copy(db_name[db_slot_i], charsmax(db_name[]), db_name[id]);
		db_gotbonus[db_slot_i] = db_gotbonus[id];
		db_shieldplanted[db_slot_i] = db_shieldplanted[id];
		db_slot_i++;
	}
	
	// Now save the current player stats
	copy(db_name[id], charsmax(db_name[]), g_playername[id]);
	if(g_used_shield[id])
		db_shieldplanted[id] = CurrentDay;
	if(g_gotpowder[id])
		db_gotbonus[id] = CurrentDay;
}

load_stats(id)
{
	static i;
	for (i = 0; i < sizeof db_name; i++)
	{
		if(equal(g_playername[id], db_name[i]))
		{
			if(db_shieldplanted[id] == CurrentDay)
				g_used_shield[id] = true;
			if(db_gotbonus[id] == CurrentDay)
				g_gotpowder[id] = true;
			return;
		}
	}
}

public grab_on(id)
{
	if(!is_developer(id))
		return PLUGIN_HANDLED;
	if(grab[id])
		return PLUGIN_HANDLED

	grab[id]=-1
	static target, trash
	target=0
	get_user_aiming(id,target,trash)
	if(target && is_valid_ent2(target) && target!=id)
	{
		if(target <= g_maxplayers)
		{
			if(is_user_alive(target))
			{
				client_print(id,print_chat,"Tinta gasita")
				grabem(id,target)
			}
		}
		else if(get_solidity(target)!=4)
		{
			client_print(id,print_chat,"Tinta gasita")
			grabem(id,target)
		}
	}
	else
	{
		client_print(id,print_chat,"Caut tinta...")
		set_task(0.1, "grab_on2", id)
	}
	return PLUGIN_HANDLED
}

public grab_on2(id)
{
	if(is_user_connected(id))
	{
		static target, trash
		target=0
		get_user_aiming(id,target,trash)
		if(target && is_valid_ent2(target) && target!=id)
		{
			if(target<=g_maxplayers)
			{
				if(is_user_alive(target))
				{
					client_print(id,print_chat,"Tinta gasita")
					grabem(id,target)
				}
			}
			else if(get_solidity(target)!=4)
			{
				client_print(id,print_chat,"Caut tinta...")
				grabem(id,target)
			}
		}
		else
		{
			set_task(0.1, "grab_on2", id)
		}
	}
}

public grabem(id,target)
{
	grab[id]=target
	if(target<=g_maxplayers) set_user_gravity(target,0.0)
	grab_totaldis[id] = 0.0
	set_task(0.1,"grab_prethink",id+5555,"",0,"b")
	grab_prethink(id+5555)
}

public grab_off(id)
{
	if(is_user_connected(id))
	{
		if(grab[id]==-1)
		{
			client_print(id,print_chat,"Nu am gasit tinta...")
			grab[id]=0
		}
		else if(grab[id])
		{
			client_print(id,print_chat,"Nu am gasit tinta...")
			if(grab[id] <= g_maxplayers && is_user_alive(grab[id]))
			{
				if(is_user_bot(grab[id]))
					set_user_gravity(grab[id], str_to_float(monster_data[CurrentDay][4]));
				else
				{
					new Float:gravitatie = 800.0;
					gravitatie -= float(g_level[grab[id]] * 2);
					gravitatie = gravitatie / 800.0;
					set_user_gravity(grab[id], gravitatie);
				}
			}
			grab[id]=0
		}
	}
	return PLUGIN_HANDLED
}

public grab_prethink(id)
{
	id -= 5555
	if(!is_user_connected(id) && grab[id]>0)
	{
		if(grab[id]<=g_maxplayers && is_user_alive(grab[id]))
		{
			if(is_user_bot(grab[id]))
				set_user_gravity(grab[id], str_to_float(monster_data[CurrentDay][4]));
			else
			{
				new Float:gravitatie = 800.0;
				gravitatie -= float(g_level[grab[id]] * 2);
				gravitatie = gravitatie / 800.0;
				set_user_gravity(grab[id], gravitatie);
			}
		}
		grab[id]=0
	}
	if(!grab[id] || grab[id]==-1)
	{
		remove_task(id+5555)
		return PLUGIN_HANDLED
	}

	static origin1[3];
	get_user_origin(id,origin1);
	static Float:origin2_F[3], origin2[3];
	get_origin(grab[id], origin2_F);
	origin2[0] = floatround(origin2_F[0]);
	origin2[1] = floatround(origin2_F[1]);
	origin2[2] = floatround(origin2_F[2]);
	static origin3[3];
	get_user_origin(id, origin3, 3);

	message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte(1)		//TE_BEAMENTPOINT
	write_short(id)		// start entity
	write_coord(origin2[0])
	write_coord(origin2[1])
	write_coord(origin2[2])
	write_short(beamsprite)
	write_byte(1)		// framestart
	write_byte(1)		// framerate
	write_byte(1)		// life in 0.1's
	write_byte(5)		// width
	write_byte(0)		// noise
	write_byte(255)		// red
	write_byte(0)		// green
	write_byte(0)		// blue
	write_byte(200)		// brightness
	write_byte(0)		// speed
	message_end()

	static Float:origin1_F[3]
	static Float:origin3_F[3]
	origin1_F[0] = float(origin1[0])
	origin1_F[1] = float(origin1[1])
	origin1_F[2] = float(origin1[2])
	origin3_F[0] = float(origin3[0])
	origin3_F[1] = float(origin3[1])
	origin3_F[2] = float(origin3[2])

	static Float:distance[3]

	if(!grab_totaldis[id])
	{
		distance[0] = floatabs(origin1_F[0] - origin2_F[0])
		distance[1] = floatabs(origin1_F[1] - origin2_F[1])
		distance[2] = floatabs(origin1_F[2] - origin2_F[2])
		grab_totaldis[id] = floatsqroot(distance[0]*distance[0] + distance[1]*distance[1] + distance[2]*distance[2])
	}
	distance[0] = origin3_F[0] - origin1_F[0]
	distance[1] = origin3_F[1] - origin1_F[1]
	distance[2] = origin3_F[2] - origin1_F[2]

	static Float:grab_totaldis2
	grab_totaldis2 = floatsqroot(distance[0]*distance[0] + distance[1]*distance[1] + distance[2]*distance[2])

	static Float:que
	que = grab_totaldis[id] / grab_totaldis2

	static Float:origin4[3]
	origin4[0] = ( distance[0] * que ) + origin1_F[0]
	origin4[1] = ( distance[1] * que ) + origin1_F[1]
	origin4[2] = ( distance[2] * que ) + origin1_F[2]

	static Float:velocity[3]
	velocity[0] = (origin4[0] - origin2_F[0]) * (5 / 1.666667)
	velocity[1] = (origin4[1] - origin2_F[1]) * (5 / 1.666667)
	velocity[2] = (origin4[2] - origin2_F[2]) * (5 / 1.666667)

	set_velo(grab[id],velocity)

	return PLUGIN_CONTINUE
}

public get_origin(ent, Float:origin[3])
	return pev(ent, pev_origin, origin)

public set_velo(id, Float:velocity[3])
	return set_pev(id, pev_velocity, velocity)

public get_velo(id, Float:velocity[3])
	return pev(id, pev_velocity, velocity)

public is_valid_ent2(ent)
	return pev_valid(ent)

public get_solidity(ent)
	return pev(ent, pev_solid);
	
stock normalize(Float:fIn[3], Float:fOut[3], Float:fMul)
{
	new Float:fLen = xs_vec_len(fIn)
	xs_vec_copy(fIn, fOut)
	
	fOut[0] /= fLen, fOut[1] /= fLen, fOut[2] /= fLen
	fOut[0] *= fMul, fOut[1] *= fMul, fOut[2] *= fMul
}

stock te_display_additive_sprite(position[3], sprite, scale = 5, brightness = 255, receiver = 0, bool:reliable = true)
{
	if(receiver && !is_user_connected(receiver) || is_user_bot(receiver))
		return 0;

	message_begin(get_msg_destination(receiver, reliable), SVC_TEMPENTITY, .player = receiver);
	write_byte(TE_SPRITE);
	write_coord(position[0]);
	write_coord(position[1]);
	write_coord(position[2]);
	write_short(sprite);
	write_byte(scale);
	write_byte(brightness);
	message_end();

	return 1;
}

stock te_create_explosion(position[3], sprite, scale = 10, framerate = 30, flags = TE_EXPLFLAG_NONE, receiver = 0, bool:reliable = true)
{
	if(receiver && !is_user_connected(receiver) || is_user_bot(receiver))
		return 0;

	message_begin(get_msg_destination(receiver, reliable), SVC_TEMPENTITY, .player = receiver);
	write_byte(TE_EXPLOSION);
	write_coord(position[0]);
	write_coord(position[1]);
	write_coord(position[2]);
	write_short(sprite);
	write_byte(scale);
	write_byte(framerate);
	write_byte(flags);
	message_end();

	return 1;
}

stock te_create_following_beam(entity, sprite, life = 10, width = 10, r = 0, g = 0, b = 255, a = 75, receiver = 0, bool:reliable = true)
{
	if(receiver && !is_user_connected(receiver) || is_user_bot(receiver))
		return 0;

	message_begin(get_msg_destination(receiver, reliable), SVC_TEMPENTITY, .player = receiver);
	write_byte(TE_BEAMFOLLOW);
	write_short(entity);
	write_short(sprite);
	write_byte(life);
	write_byte(width);
	write_byte(r);
	write_byte(g);
	write_byte(b);
	write_byte(a);
	message_end();

	return 1;
}

stock te_create_beam_cylinder(position[3], sprite, axis[3] = {0, 0, 0}, startframe = 0, framerate = 30, life = 10, width = 10, noise = 0, r = 0, g = 0, b = 255, a = 75, speed = 0, receiver = 0, bool:reliable = true)
{
	if(receiver && !is_user_connected(receiver))
		return 0;

	message_begin(get_msg_destination(receiver, reliable), SVC_TEMPENTITY, .player = receiver);
	write_byte(TE_BEAMCYLINDER);
	write_coord(position[0]);
	write_coord(position[1]);
	write_coord(position[2]);
	write_coord(axis[0]);
	write_coord(axis[1]);
	write_coord(axis[2]);
	write_short(sprite);
	write_byte(startframe);
	write_byte(framerate);
	write_byte(life);
	write_byte(width);
	write_byte(noise);
	write_byte(r);
	write_byte(g);
	write_byte(b);
	write_byte(a);
	write_byte(speed);
	message_end();

	return 1;
}

sentry_turntotarget(ent, Float:sentryOrigin[3], target, Float:closestOrigin[3]) 
{
	if (target) 
	{
		new Float:newAngle[3]
		entity_get_vector(ent, EV_VEC_angles, newAngle)
		new Float:x = closestOrigin[0] - sentryOrigin[0]
		new Float:z = closestOrigin[1] - sentryOrigin[1]

		new Float:radians = floatatan(z/x, radian)
		newAngle[1] = radians * (180.0 / 3.141592654)
		if (closestOrigin[0] < sentryOrigin[0])
			newAngle[1] -= 180.0

		new Float:h = closestOrigin[2] - sentryOrigin[2]
		new Float:b = vector_distance(sentryOrigin, closestOrigin)
		radians = floatatan(h/b, radian)
		new Float:degs = radians * (180.0 / 3.141592654);
		new Float:RADIUS = 830.0
		new Float:degreeByte = RADIUS/256.0; // tweak radius later
		new Float:tilt = 127.0 - degreeByte * degs; // 127 is center of 256... well, almost
		set_pev(ent, pev_controller_0, floatround(tilt)) //entity_set_byte(ent, SENTRY_TILT_TURRET, floatround(tilt))
		entity_set_vector(ent, EV_VEC_angles, newAngle)
	}
	else 
	{
	}
}

stock get_msg_destination(id, bool:reliable)
{
	if(id)
		return reliable ? MSG_ONE : MSG_ONE_UNRELIABLE;

	return reliable ? MSG_ALL : MSG_BROADCAST;
}

stock vomit_skill( id )
{
	if(!is_user_alive(id) || is_user_bot(id))
		return PLUGIN_HANDLED;

	new target, body;
	get_user_aiming(id, target, body, 500)
		
	new vec[ 3 ], aimvec[ 3 ], velocityvec[ 3 ]
	new length
	
	get_user_origin( id, vec )
	get_user_origin( id, aimvec, 2 )
	
	velocityvec[ 0 ] = aimvec[ 0 ] - vec[ 0 ]
	velocityvec[ 1 ] = aimvec[ 1 ] - vec[ 1 ]
	velocityvec[ 2 ] = aimvec[ 2 ] - vec[ 2 ]
	length = sqrt( velocityvec[ 0 ] * velocityvec[ 0 ] + velocityvec[ 1 ] * velocityvec[ 1 ] + velocityvec[ 2 ] * velocityvec[ 2 ] )
	velocityvec[ 0 ] = velocityvec[ 0 ] * 10 / length
	velocityvec[ 1 ] = velocityvec[ 1 ] * 10 / length
	velocityvec[ 2 ] = velocityvec[ 2 ] * 10 / length
	
	new args[ 8 ]
	args[ 0 ] = vec[ 0 ]
	args[ 1 ] = vec[ 1 ]
	args[ 2 ] = vec[ 2 ]
	args[ 3 ] = velocityvec[ 0 ]
	args[ 4 ] = velocityvec[ 1 ]
	args[ 5 ] = velocityvec[ 2 ]
	
	set_task( 0.1, "create_sprite", 0, args, 8, "a", 3 )
	
	emit_sound(id, CHAN_STREAM, soundskills[3], 1.0, ATTN_NORM, 0, PITCH_NORM);
	
	if(is_user_alive(target) && !is_user_bot(target) && get_entity_distance( id, target ) <= 500)
	{
		message_begin( MSG_ONE_UNRELIABLE, g_msgscreenfade, _, target)
		write_short(4)
		write_short(4)
		write_short(0x0004)
		write_byte(255)
		write_byte(0)
		write_byte(0)
		write_byte(255)
		message_end()
		
		set_task(4.0, "victim_wakeup", target)
		client_print(target, print_center, "You got blinded from monsters! Wait 4 secs.");
	}
	return PLUGIN_HANDLED
}

public create_sprite( args[ ] )
{
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
	write_byte( 120 )
	write_coord( args[ 0 ] )
	write_coord( args[ 1 ] )
	write_coord( args[ 2 ] )
	write_coord( args[ 3 ] )
	write_coord( args[ 4 ] )
	write_coord( args[ 5 ] )
	write_short( sprite_playerheat )
	write_byte( 255 )
	write_byte( 0 )
	write_byte( 0 )
	write_byte( 25 )
	message_end( )
	
	return PLUGIN_CONTINUE
}

public victim_wakeup( id )
{
	if(!is_user_connected(id))
		return PLUGIN_HANDLED
	
	message_begin( MSG_ONE_UNRELIABLE, g_msgscreenfade, _, id )
	write_short((1<<12))
	write_short(0)
	write_short(0x0000)
	write_byte(0)
	write_byte(0)
	write_byte(0)
	write_byte(255)
	message_end()
	return PLUGIN_HANDLED
}

public sqrt( num )
{
	new div = num
	new result = 1
	while( div > result )
	{
		div = ( div + result ) / 2
		result = num / div
	}
	return div
}

stock get_average_level()
{
	return 1;
}
	
stock get_top_player_skills(whatdata)
{
	if(get_alives(2) < 1)
		return -1;
	
	static id_returned, mostdata;
	mostdata = -1;
	id_returned = -1;
	switch(whatdata)
	{
		case 1:
		{
			for(new i = 0; i <= g_maxplayers; i++)
			{
				if(!get_bit(g_isloaded, i) || get_user_team(i) != 2)
					continue;
					
				if(mostdata < g_roundkills[i])
				{
					mostdata = g_roundkills[i];
					id_returned = i;
				}
			}
			g_totalkills[id_returned]++;
		}
		case 2:
		{
			for(new i = 0; i <= g_maxplayers; i++)
			{
				if(!get_bit(g_isloaded, i) || get_user_team(i) != 2)
					continue;
					
				if(mostdata < g_rounddamage[i])
				{
					mostdata = g_rounddamage[i];
					id_returned = i;
				}
			}
			g_totaldamage[id_returned]++;
		}
		case 3:
		{
			for(new i = 0; i <= g_maxplayers; i++)
			{
				if(!get_bit(g_isloaded, i) || get_user_team(i) != 2)
					continue;
					
				if(mostdata < g_roundspent[i])
				{
					mostdata = g_roundspent[i];
					id_returned = i;
				}
			}
			g_totalspent[id_returned]++;
		}
	}
	return id_returned;
}

public attraction(id, iszm)
{
	new Float:originF[3];
	if(!iszm)
		pev(id, pev_origin, originF);
	else
	{
		new iorigin[3];
		fm_get_aim_origin(id, originF);
		FVecIVec(originF, iorigin);
		te_create_beam_cylinder(iorigin, g_fxbeam, .r = random(256), .g = random(256), .b = random(256));
	}
	
	new Float:origin1[3], Float:angle[3];
	new Float:velocity[3],Float:velocity1[3];
	pev(id, pev_velocity, velocity);
	new victim = -1;
	while((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, 500.0)) != 0)
	{
		if(!is_user_alive(victim))
			continue;
			
		if(!iszm)
		{
			if(is_user_bot(victim))
				continue;
		}
		else
		{
			if(!is_user_bot(victim))
				continue;
		}
		
		pev(victim, pev_origin, origin1);
		pev(victim, pev_v_angle, angle);
		for(new i = 0; i < 3; i++)
			velocity1[i] = originF[i]-origin1[i];
			
		vector_to_angle(velocity1, angle)
		angle[0] = -angle[0]
		num_to_vector(1000.0, angle, velocity1);
		velocity1[2] += 10
		
		for(new i=0;i<3;i++)
			velocity1[i] += velocity[i]
		set_pev(victim, pev_velocity, velocity1);
	}
}

stock te_spray_blood(id, direction[3] = {0, 0, 0}, color = 78, speed = 30, receiver = 0, bool:reliable = true)
{
	if(receiver && !is_user_connected(receiver) || !is_user_alive(id))
		return 0;

	static position[3];
	get_user_origin(id, position)
	message_begin(get_msg_destination(receiver, reliable), SVC_TEMPENTITY, .player = receiver);
	write_byte(TE_BLOOD);
	write_coord(position[0]);
	write_coord(position[1]);
	write_coord(position[2]);
	write_coord(direction[0]);
	write_coord(direction[1]);
	write_coord(direction[2]);
	write_byte(color);
	write_byte(speed);
	message_end();

	return 1;
}

stock num_to_vector(const Float: value, const Float:angle[3],Float: origin[3])
{ 
	origin[0] = value*floatcos(angle[1],degrees)*floatcos(-angle[0],degrees);
	origin[1] = value*floatsin(angle[1],degrees)*floatcos(-angle[0],degrees);
	origin[2] = value*floatsin(-angle[0],degrees);
}

stock cs_weapon_name_to_id(const weapon[])
{
	static i
	for (i = 0; i < sizeof WEAPONENTNAMES; i++)
	{
		if (equal(weapon, WEAPONENTNAMES[i]))
			return i;
	}
	
	return 0;
}

public lightning_victim(victim)
{
	if(!is_user_outside(victim) || !is_user_connected(victim))
		return;
	
	new vOrigin[3], coord[3];
	get_user_origin(victim, vOrigin);
	vOrigin[2] -= 26
	coord[0] = vOrigin[0] + 150;
	coord[1] = vOrigin[1] + 150;
	coord[2] = vOrigin[2] + 800;
	create_thunder(coord, vOrigin);
}

create_thunder(vec1[3], vec2[3])
{
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(0);
	write_coord(vec1[0]);
	write_coord(vec1[1]);
	write_coord(vec1[2]);
	write_coord(vec2[0]);
	write_coord(vec2[1]);
	write_coord(vec2[2]);
	write_short(g_Lightning);
	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();

	message_begin(MSG_PVS, SVC_TEMPENTITY, vec2);
	write_byte(TE_SPARKS);
	write_coord(vec2[0]);
	write_coord(vec2[1]);
	write_coord(vec2[2]);
	message_end();
}

stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
	if(!is_user_bot(victim) || !is_user_alive(attacker) || is_user_bot(attacker))
		return 0;

	new Float:vicorigin[3];
	new Float:attorigin[3];
	entity_get_vector(victim   , EV_VEC_origin , vicorigin);
	entity_get_vector(attacker , EV_VEC_origin , attorigin);

	new Float:origin2[3]
	origin2[0] = vicorigin[0] - attorigin[0];
	origin2[1] = vicorigin[1] - attorigin[1];

	new Float:largestnum = 0.0;

	if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
	if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);

	origin2[0] /= largestnum;
	origin2[1] /= largestnum;

	velocity[0] = ( origin2[0] * (20.0 * 3000) ) / get_entity_distance(victim , attacker);
	velocity[1] = ( origin2[1] * (20.0 * 3000) ) / get_entity_distance(victim , attacker);
	if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
		velocity[2] = random_float(200.0 , 275.0);

	return 1;
}
93.114.82.17:27015 - Monster Invasion CO-OP Mod
User avatar
dL.papadiEEE
Membru, skill +2
Membru, skill +2
Posts: 863
Joined: 29 Oct 2013, 18:02
Detinator Steam: Da
SteamID: Hulllk_GO
Location: Localhost
Has thanked: 66 times
Been thanked: 75 times

10 Mar 2024, 13:43

Server online pe ip: 46.105.53.221:27015
MONSTERS.EXTREAMCS.COM - 46.105.53.221:27015
Monster Invasion - CO-OP Mod
Post Reply

Return to “Servere”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 10 guests