/*
*
*    This program is free software; you can redistribute it and/or modify it
*    under the terms of the GNU General Public License as published by the
*    Free Software Foundation; either version 2 of the License, or (at
*    your option) any later version.
*
*    This program is distributed in the hope that it will be useful, but
*    WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    General Public License for more details.
*
*    You should have received a copy of the GNU General Public License
*    along with this program; if not, write to the Free Software Foundation,
*    Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
*    In addition, as a special exception, the author gives permission to
*    link the code of this program with the Half-Life Game Engine ("HL
*    Engine") and Modified Game Libraries ("MODs") developed by Valve,
*    L.L.C ("Valve").  You must obey the GNU General Public License in all
*    respects for all of the code used other than the HL Engine and MODs
*    from Valve.  If you modify this file, you may extend this exception
*    to your version of the file, but you are not obligated to do so.  If
*    you do not wish to do so, delete this exception statement from your
*    version.
*
*/
#pragma once

// custom enum
enum ArmorType
{
	ARMOR_NONE,	// no armor
	ARMOR_KEVLAR,	// body vest only
	ARMOR_VESTHELM,	// vest and helmet
};

enum ArmouryItemPack
{
	ARMOURY_MP5NAVY,
	ARMOURY_TMP,
	ARMOURY_P90,
	ARMOURY_MAC10,
	ARMOURY_AK47,
	ARMOURY_SG552,
	ARMOURY_M4A1,
	ARMOURY_AUG,
	ARMOURY_SCOUT,
	ARMOURY_G3SG1,
	ARMOURY_AWP,
	ARMOURY_M3,
	ARMOURY_XM1014,
	ARMOURY_M249,
	ARMOURY_FLASHBANG,
	ARMOURY_HEGRENADE,
	ARMOURY_KEVLAR,
	ARMOURY_ASSAULT,
	ARMOURY_SMOKEGRENADE,
	ARMOURY_GLOCK18,
	ARMOURY_USP,
	ARMOURY_ELITE,
	ARMOURY_FIVESEVEN,
	ARMOURY_P228,
	ARMOURY_DEAGLE,
	ARMOURY_FAMAS,
	ARMOURY_SG550,
	ARMOURY_GALIL,
	ARMOURY_UMP45,
	ARMOURY_SHIELD
};

struct AmmoInfo
{
	const char *pszName;
	int iId;
};

struct MULTIDAMAGE
{
	CBaseEntity *pEntity;
	float amount;
	int type;
};



enum ItemRestType
{
	ITEM_TYPE_BUYING,	// when a player buying items
	ITEM_TYPE_TOUCHED,	// when the player touches with a weaponbox or armoury_entity
	ITEM_TYPE_EQUIPPED	// when a entity game_player_equip gives item to player or default item's on player spawn
};

// constant items
#define ITEM_ID_ANTIDOTE	2
#define ITEM_ID_SECURITY	3

enum ItemID
{
	ITEM_NONE = -1,
	ITEM_SHIELDGUN,
	ITEM_P228,
	ITEM_GLOCK,
	ITEM_SCOUT,
	ITEM_HEGRENADE,
	ITEM_XM1014,
	ITEM_C4,
	ITEM_MAC10,
	ITEM_AUG,
	ITEM_SMOKEGRENADE,
	ITEM_ELITE,
	ITEM_FIVESEVEN,
	ITEM_UMP45,
	ITEM_SG550,
	ITEM_GALIL,
	ITEM_FAMAS,
	ITEM_USP,
	ITEM_GLOCK18,
	ITEM_AWP,
	ITEM_MP5N,
	ITEM_M249,
	ITEM_M3,
	ITEM_M4A1,
	ITEM_TMP,
	ITEM_G3SG1,
	ITEM_FLASHBANG,
	ITEM_DEAGLE,
	ITEM_SG552,
	ITEM_AK47,
	ITEM_KNIFE,
	ITEM_P90,
	ITEM_NVG,
	ITEM_DEFUSEKIT,
	ITEM_KEVLAR,
	ITEM_ASSAULT,
	ITEM_LONGJUMP,
	ITEM_SODACAN,
	ITEM_HEALTHKIT,
	ITEM_ANTIDOTE,
	ITEM_BATTERY
};

// custom enum
enum RewardType
{
	RT_NONE,
	RT_ROUND_BONUS,
	RT_PLAYER_RESET,
	RT_PLAYER_JOIN,
	RT_PLAYER_SPEC_JOIN,
	RT_PLAYER_BOUGHT_SOMETHING,
	RT_HOSTAGE_TOOK,
	RT_HOSTAGE_RESCUED,
	RT_HOSTAGE_DAMAGED,
	RT_HOSTAGE_KILLED,
	RT_TEAMMATES_KILLED,
	RT_ENEMY_KILLED,
	RT_INTO_GAME,
	RT_VIP_KILLED,
	RT_VIP_RESCUED_MYSELF
};

enum PLAYER_ANIM
{
	PLAYER_IDLE,
	PLAYER_WALK,
	PLAYER_JUMP,
	PLAYER_SUPERJUMP,
	PLAYER_DIE,
	PLAYER_ATTACK1,
	PLAYER_ATTACK2,
	PLAYER_FLINCH,
	PLAYER_LARGE_FLINCH,
	PLAYER_RELOAD,
	PLAYER_HOLDBOMB
};

enum TeamName
{
	UNASSIGNED,
	TERRORIST,
	CT,
	SPECTATOR,
};

enum ModelName
{
	MODEL_UNASSIGNED,
	MODEL_URBAN,
	MODEL_TERROR,
	MODEL_LEET,
	MODEL_ARCTIC,
	MODEL_GSG9,
	MODEL_GIGN,
	MODEL_SAS,
	MODEL_GUERILLA,
	MODEL_VIP,
	MODEL_MILITIA,
	MODEL_SPETSNAZ,
	MODEL_AUTO
};

enum JoinState
{
	JOINED,
	SHOWLTEXT,
	READINGLTEXT,
	SHOWTEAMSELECT,
	PICKINGTEAM,
	GETINTOGAME
};

enum TrackCommands
{
	CMD_SAY = 0,
	CMD_SAYTEAM,
	CMD_FULLUPDATE,
	CMD_VOTE,
	CMD_VOTEMAP,
	CMD_LISTMAPS,
	CMD_LISTPLAYERS,
	CMD_NIGHTVISION,
	COMMANDS_TO_TRACK,
};

struct RebuyStruct
{
	int m_primaryWeapon;
	int m_primaryAmmo;
	int m_secondaryWeapon;
	int m_secondaryAmmo;
	int m_heGrenade;
	int m_flashbang;
	int m_smokeGrenade;
	int m_defuser;
	int m_nightVision;
	ArmorType m_armor;
};

enum ThrowDirection
{
	THROW_NONE,
	THROW_FORWARD,
	THROW_BACKWARD,
	THROW_HITVEL,
	THROW_BOMB,
	THROW_GRENADE,
	THROW_HITVEL_MINUS_AIRVEL
};

enum sbar_data
{
	SBAR_ID_TARGETTYPE = 1,
	SBAR_ID_TARGETNAME,
	SBAR_ID_TARGETHEALTH,
	SBAR_END
};

enum
{
	WINSTATUS_CTS = 1,
	WINSTATUS_TERRORISTS,
	WINSTATUS_DRAW,
};

// custom enum
// used for EndRoundMessage() logged messages
enum ScenarioEventEndRound
{
	ROUND_NONE,
	ROUND_TARGET_BOMB,
	ROUND_VIP_ESCAPED,
	ROUND_VIP_ASSASSINATED,
	ROUND_TERRORISTS_ESCAPED,
	ROUND_CTS_PREVENT_ESCAPE,
	ROUND_ESCAPING_TERRORISTS_NEUTRALIZED,
	ROUND_BOMB_DEFUSED,
	ROUND_CTS_WIN,
	ROUND_TERRORISTS_WIN,
	ROUND_END_DRAW,
	ROUND_ALL_HOSTAGES_RESCUED,
	ROUND_TARGET_SAVED,
	ROUND_HOSTAGE_NOT_RESCUED,
	ROUND_TERRORISTS_NOT_ESCAPED,
	ROUND_VIP_NOT_ESCAPED,
	ROUND_GAME_COMMENCE,
	ROUND_GAME_RESTART,
	ROUND_GAME_OVER
};

enum RewardRules
{
	RR_CTS_WIN,
	RR_TERRORISTS_WIN,
	RR_TARGET_BOMB,
	RR_VIP_ESCAPED,
	RR_VIP_ASSASSINATED,
	RR_TERRORISTS_ESCAPED,
	RR_CTS_PREVENT_ESCAPE,
	RR_ESCAPING_TERRORISTS_NEUTRALIZED,
	RR_BOMB_DEFUSED,
	RR_BOMB_PLANTED,
	RR_BOMB_EXPLODED,
	RR_ALL_HOSTAGES_RESCUED,
	RR_TARGET_BOMB_SAVED,
	RR_HOSTAGE_NOT_RESCUED,
	RR_VIP_NOT_ESCAPED,
	RR_LOSER_BONUS_DEFAULT,
	RR_LOSER_BONUS_MIN,
	RR_LOSER_BONUS_MAX,
	RR_LOSER_BONUS_ADD,
	RR_RESCUED_HOSTAGE,
	RR_TOOK_HOSTAGE_ACC,
	RR_TOOK_HOSTAGE,
	RR_END
};

// custom enum
enum RewardAccount
{
	REWARD_TARGET_BOMB = 3500,
	REWARD_VIP_ESCAPED = 3500,
	REWARD_VIP_ASSASSINATED = 3250,
	REWARD_TERRORISTS_ESCAPED = 3150,
	REWARD_CTS_PREVENT_ESCAPE = 3500,
	REWARD_ESCAPING_TERRORISTS_NEUTRALIZED = 3250,
	REWARD_BOMB_DEFUSED = 3250,
	REWARD_BOMB_PLANTED = 800,
	REWARD_BOMB_EXPLODED = 3250,
	REWARD_CTS_WIN = 3000,
	REWARD_TERRORISTS_WIN = 3000,
	REWARD_ALL_HOSTAGES_RESCUED = 2500,

	// the end round was by the expiration time
	REWARD_TARGET_BOMB_SAVED = 3250,
	REWARD_HOSTAGE_NOT_RESCUED = 3250,
	REWARD_VIP_NOT_ESCAPED = 3250,

	// loser bonus
	REWARD_LOSER_BONUS_DEFAULT = 1400,
	REWARD_LOSER_BONUS_MIN = 1500,
	REWARD_LOSER_BONUS_MAX = 3000,
	REWARD_LOSER_BONUS_ADD = 500,

	REWARD_RESCUED_HOSTAGE = 750,
	REWARD_KILLED_ENEMY = 300,
	REWARD_KILLED_VIP = 2500,
	REWARD_VIP_HAVE_SELF_RESCUED = 2500,

	REWARD_TAKEN_HOSTAGE = 1000,
	REWARD_TOOK_HOSTAGE_ACC = 100,
	REWARD_TOOK_HOSTAGE = 150,
};

// custom enum
enum PaybackForBadThing
{
	PAYBACK_FOR_KILLED_TEAMMATES = -3300,
};

// custom enum
enum InfoMapBuyParam
{
	BUYING_EVERYONE = 0,
	BUYING_ONLY_CTS,
	BUYING_ONLY_TERRORISTS,
	BUYING_NO_ONE,
};

// weapon respawning return codes
enum
{
	GR_NONE = 0,

	GR_WEAPON_RESPAWN_YES,
	GR_WEAPON_RESPAWN_NO,

	GR_AMMO_RESPAWN_YES,
	GR_AMMO_RESPAWN_NO,

	GR_ITEM_RESPAWN_YES,
	GR_ITEM_RESPAWN_NO,

	GR_PLR_DROP_GUN_ALL,
	GR_PLR_DROP_GUN_ACTIVE,
	GR_PLR_DROP_GUN_NO,

	GR_PLR_DROP_AMMO_ALL,
	GR_PLR_DROP_AMMO_ACTIVE,
	GR_PLR_DROP_AMMO_NO,
};

// custom enum
enum
{
	SCENARIO_BLOCK_TIME_EXPRIRED = (1 << 0),	// flag "a"
	SCENARIO_BLOCK_NEED_PLAYERS = (1 << 1),	// flag "b"
	SCENARIO_BLOCK_VIP_ESCAPE = (1 << 2),	// flag "c"
	SCENARIO_BLOCK_PRISON_ESCAPE = (1 << 3),	// flag "d"
	SCENARIO_BLOCK_BOMB = (1 << 4),	// flag "e"
	SCENARIO_BLOCK_TEAM_EXTERMINATION = (1 << 5),	// flag "f"
	SCENARIO_BLOCK_HOSTAGE_RESCUE = (1 << 6),	// flag "g"
};

// Player relationship return codes
enum
{
	GR_NOTTEAMMATE = 0,
	GR_TEAMMATE,
	GR_ENEMY,
	GR_ALLY,
	GR_NEUTRAL,
};

enum WeaponIdType
{
	WEAPON_NONE,
	WEAPON_P228,
	WEAPON_GLOCK,
	WEAPON_SCOUT,
	WEAPON_HEGRENADE,
	WEAPON_XM1014,
	WEAPON_C4,
	WEAPON_MAC10,
	WEAPON_AUG,
	WEAPON_SMOKEGRENADE,
	WEAPON_ELITE,
	WEAPON_FIVESEVEN,
	WEAPON_UMP45,
	WEAPON_SG550,
	WEAPON_GALIL,
	WEAPON_FAMAS,
	WEAPON_USP,
	WEAPON_GLOCK18,
	WEAPON_AWP,
	WEAPON_MP5N,
	WEAPON_M249,
	WEAPON_M3,
	WEAPON_M4A1,
	WEAPON_TMP,
	WEAPON_G3SG1,
	WEAPON_FLASHBANG,
	WEAPON_DEAGLE,
	WEAPON_SG552,
	WEAPON_AK47,
	WEAPON_KNIFE,
	WEAPON_P90,
	WEAPON_SHIELDGUN = 99
};

enum AutoBuyClassType
{
	AUTOBUYCLASS_NONE = 0,
	AUTOBUYCLASS_PRIMARY = (1 << 0),
	AUTOBUYCLASS_SECONDARY = (1 << 1),
	AUTOBUYCLASS_AMMO = (1 << 2),
	AUTOBUYCLASS_ARMOR = (1 << 3),
	AUTOBUYCLASS_DEFUSER = (1 << 4),
	AUTOBUYCLASS_PISTOL = (1 << 5),
	AUTOBUYCLASS_SMG = (1 << 6),
	AUTOBUYCLASS_RIFLE = (1 << 7),
	AUTOBUYCLASS_SNIPERRIFLE = (1 << 8),
	AUTOBUYCLASS_SHOTGUN = (1 << 9),
	AUTOBUYCLASS_MACHINEGUN = (1 << 10),
	AUTOBUYCLASS_GRENADE = (1 << 11),
	AUTOBUYCLASS_NIGHTVISION = (1 << 12),
	AUTOBUYCLASS_SHIELD = (1 << 13),
};

enum AmmoCostType
{
	AMMO_338MAG_PRICE = 125,
	AMMO_357SIG_PRICE = 50,
	AMMO_45ACP_PRICE = 25,
	AMMO_50AE_PRICE = 40,
	AMMO_556MM_PRICE = 60,
	AMMO_57MM_PRICE = 50,
	AMMO_762MM_PRICE = 80,
	AMMO_9MM_PRICE = 20,
	AMMO_BUCKSHOT_PRICE = 65,
};

// custom enum
// the default amount of ammo that comes with each gun when it spawns
enum ClipGiveDefault
{
	P228_DEFAULT_GIVE = 13,
	GLOCK18_DEFAULT_GIVE = 20,
	SCOUT_DEFAULT_GIVE = 10,
	HEGRENADE_DEFAULT_GIVE = 1,
	XM1014_DEFAULT_GIVE = 7,
	C4_DEFAULT_GIVE = 1,
	MAC10_DEFAULT_GIVE = 30,
	AUG_DEFAULT_GIVE = 30,
	SMOKEGRENADE_DEFAULT_GIVE = 1,
	ELITE_DEFAULT_GIVE = 30,
	FIVESEVEN_DEFAULT_GIVE = 20,
	UMP45_DEFAULT_GIVE = 25,
	SG550_DEFAULT_GIVE = 30,
	GALIL_DEFAULT_GIVE = 35,
	FAMAS_DEFAULT_GIVE = 25,
	USP_DEFAULT_GIVE = 12,
	AWP_DEFAULT_GIVE = 10,
	MP5NAVY_DEFAULT_GIVE = 30,
	M249_DEFAULT_GIVE = 100,
	M3_DEFAULT_GIVE = 8,
	M4A1_DEFAULT_GIVE = 30,
	TMP_DEFAULT_GIVE = 30,
	G3SG1_DEFAULT_GIVE = 20,
	FLASHBANG_DEFAULT_GIVE = 1,
	DEAGLE_DEFAULT_GIVE = 7,
	SG552_DEFAULT_GIVE = 30,
	AK47_DEFAULT_GIVE = 30,
	/*KNIFE_DEFAULT_GIVE		= 1,*/
	P90_DEFAULT_GIVE = 50,
};

enum ClipSizeType
{
	P228_MAX_CLIP = 13,
	GLOCK18_MAX_CLIP = 20,
	SCOUT_MAX_CLIP = 10,
	XM1014_MAX_CLIP = 7,
	MAC10_MAX_CLIP = 30,
	AUG_MAX_CLIP = 30,
	ELITE_MAX_CLIP = 30,
	FIVESEVEN_MAX_CLIP = 20,
	UMP45_MAX_CLIP = 25,
	SG550_MAX_CLIP = 30,
	GALIL_MAX_CLIP = 35,
	FAMAS_MAX_CLIP = 25,
	USP_MAX_CLIP = 12,
	AWP_MAX_CLIP = 10,
	MP5N_MAX_CLIP = 30,
	M249_MAX_CLIP = 100,
	M3_MAX_CLIP = 8,
	M4A1_MAX_CLIP = 30,
	TMP_MAX_CLIP = 30,
	G3SG1_MAX_CLIP = 20,
	DEAGLE_MAX_CLIP = 7,
	SG552_MAX_CLIP = 30,
	AK47_MAX_CLIP = 30,
	P90_MAX_CLIP = 50,
};

enum WeightWeapon
{
	P228_WEIGHT = 5,
	GLOCK18_WEIGHT = 5,
	SCOUT_WEIGHT = 30,
	HEGRENADE_WEIGHT = 2,
	XM1014_WEIGHT = 20,
	C4_WEIGHT = 3,
	MAC10_WEIGHT = 25,
	AUG_WEIGHT = 25,
	SMOKEGRENADE_WEIGHT = 1,
	ELITE_WEIGHT = 5,
	FIVESEVEN_WEIGHT = 5,
	UMP45_WEIGHT = 25,
	SG550_WEIGHT = 20,
	GALIL_WEIGHT = 25,
	FAMAS_WEIGHT = 75,
	USP_WEIGHT = 5,
	AWP_WEIGHT = 30,
	MP5NAVY_WEIGHT = 25,
	M249_WEIGHT = 25,
	M3_WEIGHT = 20,
	M4A1_WEIGHT = 25,
	TMP_WEIGHT = 25,
	G3SG1_WEIGHT = 20,
	FLASHBANG_WEIGHT = 1,
	DEAGLE_WEIGHT = 7,
	SG552_WEIGHT = 25,
	AK47_WEIGHT = 25,
	P90_WEIGHT = 26,
	KNIFE_WEIGHT = 0,
};

enum MaxAmmoType
{
	MAX_AMMO_BUCKSHOT = 32,
	MAX_AMMO_9MM = 120,
	MAX_AMMO_556NATO = 90,
	MAX_AMMO_556NATOBOX = 200,
	MAX_AMMO_762NATO = 90,
	MAX_AMMO_45ACP = 100,
	MAX_AMMO_50AE = 35,
	MAX_AMMO_338MAGNUM = 30,
	MAX_AMMO_57MM = 100,
	MAX_AMMO_357SIG = 52,

	// custom
	MAX_AMMO_SMOKEGRENADE = 1,
	MAX_AMMO_HEGRENADE = 1,
	MAX_AMMO_FLASHBANG = 2,
};

enum AmmoType
{
	AMMO_NONE,
	AMMO_338MAGNUM,
	AMMO_762NATO,
	AMMO_556NATOBOX,
	AMMO_556NATO,
	AMMO_BUCKSHOT,
	AMMO_45ACP,
	AMMO_57MM,
	AMMO_50AE,
	AMMO_357SIG,
	AMMO_9MM,
	AMMO_FLASHBANG,
	AMMO_HEGRENADE,
	AMMO_SMOKEGRENADE,
	AMMO_C4,

	AMMO_MAX_TYPES
};

enum WeaponClassType
{
	WEAPONCLASS_NONE,
	WEAPONCLASS_KNIFE,
	WEAPONCLASS_PISTOL,
	WEAPONCLASS_GRENADE,
	WEAPONCLASS_SUBMACHINEGUN,
	WEAPONCLASS_SHOTGUN,
	WEAPONCLASS_MACHINEGUN,
	WEAPONCLASS_RIFLE,
	WEAPONCLASS_SNIPERRIFLE,
	WEAPONCLASS_MAX,
};

enum AmmoBuyAmount
{
	AMMO_338MAG_BUY = 10,
	AMMO_357SIG_BUY = 13,
	AMMO_45ACP_BUY = 12,
	AMMO_50AE_BUY = 7,
	AMMO_556NATO_BUY = 30,
	AMMO_556NATOBOX_BUY = 30,
	AMMO_57MM_BUY = 50,
	AMMO_762NATO_BUY = 30,
	AMMO_9MM_BUY = 30,
	AMMO_BUCKSHOT_BUY = 8,
};

enum shieldgun_e
{
	SHIELDGUN_IDLE,
	SHIELDGUN_SHOOT1,
	SHIELDGUN_SHOOT2,
	SHIELDGUN_SHOOT_EMPTY,
	SHIELDGUN_RELOAD,
	SHIELDGUN_DRAW,
	SHIELDGUN_DRAWN_IDLE,
	SHIELDGUN_UP,
	SHIELDGUN_DOWN,
};

// custom
enum shieldgren_e
{
	SHIELDREN_IDLE = 4,
	SHIELDREN_UP,
	SHIELDREN_DOWN
};

enum InventorySlotType
{
	NONE_SLOT,
	PRIMARY_WEAPON_SLOT,
	PISTOL_SLOT,
	KNIFE_SLOT,
	GRENADE_SLOT,
	C4_SLOT,
};

enum Bullet
{
	BULLET_NONE,
	BULLET_PLAYER_9MM,
	BULLET_PLAYER_MP5,
	BULLET_PLAYER_357,
	BULLET_PLAYER_BUCKSHOT,
	BULLET_PLAYER_CROWBAR,
	BULLET_MONSTER_9MM,
	BULLET_MONSTER_MP5,
	BULLET_MONSTER_12MM,
	BULLET_PLAYER_45ACP,
	BULLET_PLAYER_338MAG,
	BULLET_PLAYER_762MM,
	BULLET_PLAYER_556MM,
	BULLET_PLAYER_50AE,
	BULLET_PLAYER_57MM,
	BULLET_PLAYER_357SIG,
};

struct WeaponStruct
{
	int m_type;
	int m_price;
	int m_side;
	int m_slot;
	int m_ammoPrice;
};

struct AutoBuyInfoStruct
{
	AutoBuyClassType m_class;
	char *m_command;
	char *m_classname;
};

struct WeaponAliasInfo
{
	char *alias;
	WeaponIdType id;
};

struct WeaponBuyAliasInfo
{
	char *alias;
	WeaponIdType id;
	char *failName;
};

struct WeaponClassAliasInfo
{
	char *alias;
	WeaponClassType id;
};

struct WeaponSlotInfo
{
	WeaponIdType id;
	InventorySlotType slot;
	const char *weaponName;
};

enum hash_types_e { CLASSNAME };