#include "Include"

#include "core/CBaseMenuItem"
#include "core/EccoPlayerStorage"
#include "core/BuyMenu"
#include "core/EccoHook"
#include "core/Command"
#include "core/Hook"
#include "core/item_cash"
#include "core/DropCash"
//如果你的Config文件不在默认位置，这行必须被修改
//You have to edit this line if your config file is not in default position
const string szConfigPath = "scripts/plugins/Ecco/config/";

string szRootPath = "scripts/plugins/Ecco/";
string szStorePath = "scripts/plugins/store/Ecco/";

float m_flRemove;
bool bAborted = false;
bool m_bActive = false;
bool m_bCanSummon = true;
bool IsMapAllowed;
string szLastNextMap = g_Engine.mapname;
bool bShouldCleanScore = true;
DropCashMenu::DropCashMenu g_DropCashMenu;
array<float> lastCommandTime2;
array<float> lastCommandTime3;
array<EHandle> m_hSummons;
array<CEchoEntityHandle@> m_hPlayerSummons = {};

void PluginInit(){
	g_Module.ScriptInfo.SetAuthor("Ecco team");

	lastCommandTime2.resize(0);
	lastCommandTime2.resize(33);

	lastCommandTime3.resize(0);
	lastCommandTime3.resize(33);

    if(!EccoConfig::RefreshEccoConfig()){
        bAborted = true;
        return;
    }

    szRootPath = EccoConfig::pConfig.BaseConfig.PluginsRootPath;
    szStorePath = EccoConfig::pConfig.BaseConfig.PluginsStorePath;

    EccoProcessVar::Register("%PLAYER%", function(string szInput, string szName, CBasePlayer@ pPlayer){ return szInput.Replace(szName, pPlayer.pev.netname);});
    EccoProcessVar::Register("%RANDOMPLAYER%", function(string szInput, string szName, CBasePlayer@ pPlayer){ return szInput.Replace(szName, EccoPlayerInventory::GetRandomPlayerName());});
    EccoProcessVar::Register("%BALANCE%", function(string szInput, string szName, CBasePlayer@ pPlayer){ return szInput.Replace(szName, string(EccoPlayerInventory::GetBalance(pPlayer)));});
    EccoProcessVar::Register("%SPACE%", function(string szInput, string szName, CBasePlayer@ pPlayer){ return szInput.Replace(szName, " ");});
    EccoProcessVar::Register("%COST%", function(string szInput, string szName, CBaseMenuItem@ pMenuItem){ 
        return szInput.Replace(szName, 
            pMenuItem.Flags & MenuItemFlag::FLAG_HIDECOST == 0 ? string(pMenuItem.Cost) : "");
        }
    );
    EccoProcessVar::Register("%MENUNAME%", function(string szInput, string szName, CBaseMenuItem@ pMenuItem){ return szInput.Replace(szName, pMenuItem.Name);});
    EccoProcessVar::Register("%PLAYERHP%", function(string szInput, string szName, CBasePlayer@ pPlayer){ return szInput.Replace(szName, pPlayer.pev.health);});
    EccoProcessVar::Register("%PLAYERAP%", function(string szInput, string szName, CBasePlayer@ pPlayer){ return szInput.Replace(szName, pPlayer.pev.armorvalue);});
    EccoProcessVar::Register("%PLAYERTEAM%", function(string szInput, string szName, CBasePlayer@ pPlayer){ return szInput.Replace(szName, pPlayer.pev.team);});

    Command::Register("help", "", "获取帮助信息/Get Help Info", "", function(CBasePlayer@ pPlayer, const CCommand@ pArgs, const CClinetCmd@ pCmd, bool bChat){
        for(uint i = 0; i < Command::aryCmdList.length(); i++){
            if(!Command::aryCmdList[i].IsEmpty()){
                CClinetCmd@ eCme = cast<CClinetCmd@>(Command::aryCmdList[i]);
                if(g_PlayerFuncs.AdminLevel(pPlayer) < int(eCme.AdminLevel))
                    continue;
                Logger::Console(pPlayer, "| " + EccoUtility::PadSpace(24, eCme.Name) + " | " + 
                        eCme.HelpInfo + " | " + eCme.DescribeInfo + " | " + 
                        EccoUtility::GetAdminLevelString(eCme.AdminLevel));
            }
        }
        return true;
    });
    Command::Register("lang", "[Language]", "设置语言/Set Display Language", "", function(CBasePlayer@ pPlayer, const CCommand@ pArgs, const CClinetCmd@ pCmd, bool bChat){
        if(!EccoBuyMenu::SetLanguage(@pPlayer, pArgs.Arg(1))){
            array<string>@ aryKeys = EccoBuyMenu::dicRoots.getKeys();
            string szTemp = "";
            for(uint i = 0; i <  aryKeys.length();i++){
                szTemp += EccoUtility::PadSpace(6, aryKeys[i]) + "|";
            }
            Logger::Console(pPlayer, szTemp);
            return false;
        }
        return true;
    });
    Command::Register("buy", "", "打开购买菜单/Open Buy Menu", "", function(CBasePlayer@ pPlayer, const CCommand@ pArgs, const CClinetCmd@ pCmd, bool bChat){
        if(!IsMapAllowed){
            Logger::Chat(pPlayer, EccoConfig::GetLocateMessage(EccoConfig::pConfig.LocaleSetting.ChatLogTitle, @pPlayer) + " " + 
            EccoConfig::GetLocateMessage(EccoConfig::pConfig.LocaleSetting.LocaleNotAllowed, @pPlayer));
            return false;
        }
        EccoBuyMenu::GetRootForPlayer(pPlayer).OpenBuyMenu(@pPlayer);
        return true;
    });


    EccoScriptParser::BuildItemList();

    g_Hooks.RegisterHook(Hooks::Player::ClientSay, @Hook::ClientSay);
    g_Hooks.RegisterHook(Hooks::Player::ClientSay, ClientSay2);
    g_Hooks.RegisterHook(Hooks::Player::ClientPutInServer, @Hook::ClientPutInServer);
    g_Scheduler.SetInterval("CheckSummons", 1.0, g_Scheduler.REPEAT_INFINITE_TIMES);
    //g_Scheduler.SetInterval("CheckSummons2", 0.1f, g_Scheduler.REPEAT_INFINITE_TIMES);

    EccoInclude::AddonListBuilder();
    EccoInclude::PluginInit();

    string szVersion = IO::FileTotalReader(szRootPath + "Version");
    string szContactInfo = "Ecco\nhttps://github.com/Ecco-SC/Ecco\nVersion:" + szVersion;
    g_Module.ScriptInfo.SetContactInfo(EccoInclude::AddAddonInfo(szContactInfo));
        string szBanner = """

     /$$$$$$$$  /$$$$$$   /$$$$$$   /$$$$$$ 
    | $$_____/ /$$__  $$ /$$__  $$ /$$__  $$
    | $$      | $$  \__/| $$  \__/| $$  \ $$
    | $$$$$   | $$      | $$      | $$  | $$
    | $$__/   | $$      | $$      | $$  | $$
    | $$      | $$    $$| $$    $$| $$  | $$
    | $$$$$$$$|  $$$$$$/|  $$$$$$/|  $$$$$$/
    |________/ \______/  \______/  \______/ 

                            Ver: {Version}
                            Load Time: {Time}
    """;
    string szTime;
    DateTime().Format(szTime, "%Y-%m-%d %H:%M");
    array<string> aryBanner = szBanner.Replace("{Version}", szVersion).Replace("{Time}", szTime).Split("\n");
    for(uint i = 0; i < aryBanner.length(); i++){
        Logger::WriteLine(aryBanner[i]);
    }
    Logger::Say(EccoConfig::pConfig.LocaleSetting.PluginReloaded);
}
void MapInit(){
    if(bAborted)
        return;
    g_Game.PrecacheModel("sprites/" + EccoConfig::pConfig.BaseConfig.MoneyIconPath);
    g_Game.PrecacheGeneric("sprites/" + EccoConfig::pConfig.BaseConfig.MoneyIconPath);

	lastCommandTime2.resize(0);
	lastCommandTime2.resize(33);

	lastCommandTime3.resize(0);
	lastCommandTime3.resize(33);

    IsMapAllowed = true;
    array<string>@ aryMaps = IO::FileLineReader(szRootPath + EccoConfig::pConfig.BaseConfig.BanMapPath, function(string szLine){ if(szLine != g_Engine.mapname){return "\n";}return g_Engine.mapname;});
    if(aryMaps.length() > 0 && aryMaps[aryMaps.length() - 1] == g_Engine.mapname)
       IsMapAllowed = false;

    if(IsMapAllowed)
        EccoBuyMenu::BuildMenu();
    
    switch(EccoConfig::pConfig.BaseConfig.SereisMapCheckMethod){
        //经典模式
        case 0: {
            bShouldCleanScore = szLastNextMap != g_Engine.mapname;
            szLastNextMap = EccoUtility::GetNextMap();
            break;
        }
        //LCS
        case 1:{
            bShouldCleanScore = EccoUtility::GetLCS(szLastNextMap, g_Engine.mapname) < EccoConfig::pConfig.BaseConfig.SereisMapLCSCheckRatio;
            szLastNextMap = g_Engine.mapname;
            break;
        }
        //混合模式
        case 2:{
            string szTemp = EccoUtility::GetNextMap();
            if(szTemp.IsEmpty()){
                bShouldCleanScore = EccoUtility::GetLCS(szLastNextMap, g_Engine.mapname) < EccoConfig::pConfig.BaseConfig.SereisMapLCSCheckRatio;
                szLastNextMap = g_Engine.mapname;
            }
            else{
                bShouldCleanScore = szLastNextMap != g_Engine.mapname;
                szLastNextMap = szTemp;
            }
            break;
        }
        default: if(!bShouldCleanScore){bShouldCleanScore = true;}break;
    }
    
    EccoPlayerStorage::ResetPlayerBuffer();
    EccoPlayerStorage::RemoveTimer();
    if(IsMapAllowed)
        EccoPlayerStorage::RegisterTimer();
	RegisterCashEntities();
        
    EccoInclude::MapInit();
}
void MapActivate(){
    if(bAborted)
        return;
    EccoInclude::MapActivate();
}
void MapStart(){
    if(bAborted)
        return;
    EccoInclude::MapStart();
}

void CheckSummons()
{
	for(uint i = 0; i < m_hSummons.length(); i++)
	{   
		if( !m_hSummons[i].IsValid() || !m_hSummons[i].GetEntity().IsAlive())
		{
			m_hSummons.removeAt(i);
		}
	}

	const int iMaxPlayers = g_Engine.maxClients;
	for(int i = 1; i <= iMaxPlayers; ++i)
	{
		CBasePlayer@ pPlayer = g_PlayerFuncs.FindPlayerByIndex(i);
		if(pPlayer !is null && pPlayer.IsConnected())
		{
			Update(pPlayer);
		}
	}
}

void Update(CBasePlayer@ pPlayer)
{
	const int id = pPlayer.entindex();

	if( !m_bActive || pPlayer is null )
		return;

	// Remove invalid Minions and check frags.
	for(int i = m_hSummons.length() - 1; i >= 0; i--)
	{
		CBaseEntity@ pExistingSummon = m_hSummons[i].GetEntity();
		CBaseEntity@ pOwner = g_EntityFuncs.Instance( pExistingSummon.pev.euser2 );
		CBasePlayer@ pAdmin = cast<CBasePlayer@>( pOwner );
		bool isAdmin = g_PlayerFuncs.AdminLevel(pAdmin) >= ADMIN_YES;

		string name = pExistingSummon !is null ? string(pExistingSummon.pev.targetname) : "";
            
		// Then check if it's dead or invalid
		if(pExistingSummon is null || !pExistingSummon.IsAlive())
		{
			//pExistingMinion.Killed(pPlayer.pev, GIB_NORMAL);
			m_hSummons.removeAt(i);
			continue;
		}
		
		if( pOwner is null || !pOwner.IsAlive() && !isAdmin )
		{
			g_EntityFuncs.Remove(pExistingSummon);
			m_hSummons.removeAt(i);
			continue;
		}

		if( pExistingSummon.pev.frags > 0 )
		{
			// Add frag to player.
			pOwner.pev.frags += 1;
			// Reset minion's frag counter.
			pExistingSummon.pev.frags -= 1;
		}
	}

	m_bActive = (m_hSummons.length() > 0);
}

int CheckForBabies()
{
	int iSummonCount = 0;

	for(int i = m_hSummons.length() - 1; i >= 0; i--)
	{
		CBaseEntity@ pExistingSummon = m_hSummons[i].GetEntity(); //gets the summoned monsters 
		CBaseEntity@ pOwner = g_EntityFuncs.Instance( pExistingSummon.pev.euser2 ); //gets the owner of the summons
		CBaseEntity@ pChild = null;
		while( (@pChild = g_EntityFuncs.FindEntityByClassname(pChild, "*")) !is null )
		{
			if( pChild.pev.deadflag == DEAD_NO and pChild.pev.euser2 is pOwner.edict() )
				iSummonCount++;
		}
	}

	return iSummonCount;
}

bool CheckMaxSummons()
{
	const int iMaxPlayers = g_Engine.maxClients;
	for(int i = 1; i <= iMaxPlayers; ++i)
	{
		CBasePlayer@ pPlayer = g_PlayerFuncs.FindPlayerByIndex(i); //gets the player index
		
		for(uint i = 0; i < m_hSummons.length(); i++)
		{   
			CBaseEntity@ pExistingSummon = m_hSummons[i].GetEntity(); //gets the summoned monsters 
			CBaseEntity@ pOwner = g_EntityFuncs.Instance( pExistingSummon.pev.euser2 ); //gets the owner of the summons

			if( !m_hSummons[i].IsValid() || !m_hSummons[i].GetEntity().IsAlive()) //if summons are not valid or dead
			{
				m_hSummons.removeAt(i); //remove them if above is true
			}
		}
	}
	return m_hSummons.length() < 5; //max summons a player is supposed to have
}

final class CEchoEntityHandle
{
	string szName;
	//array<EHandle> m_hSummons = {};
	CEchoEntityHandle(CBasePlayer@ pPlayer)
	{
		this.szName = EccoPlayerInventory::GetUniquePlayerId(pPlayer);
	}

	CEchoEntityHandle@ Init()
	{
		m_hPlayerSummons.insertLast(this);
		return @this;
	}

	bool opEquals(CEchoEntityHandle@ pOther)
	{
		return this.szName == pOther.szName;
	}

	bool Check()
	{
		for(uint i = 0; i < m_hSummons.length(); i++)
		{
			if(!m_hSummons[i].IsValid() || !m_hSummons[i].GetEntity().IsAlive())
				m_hSummons.removeAt(i);
		}
		return m_hSummons.length() < 5;
	}

}

HookReturnCode ClientSay2( SayParameters@ pParams )
{
	CBasePlayer@ pPlayer = pParams.GetPlayer();
	const CCommand@ args = pParams.GetArguments();
	bool isAdmin = g_PlayerFuncs.AdminLevel(pPlayer) >= ADMIN_YES;
	const int id = pPlayer.entindex();
	float cooldown_time2 = 60.0;
	float delta2 = g_Engine.time - lastCommandTime3[pPlayer.entindex()];
	//int index = m_hPlayerSummons.find(CEchoEntityHandle(@pPlayer));
	//CEchoEntityHandle@ pHandle = index >= 0 ? m_hPlayerSummons[index] : CEchoEntityHandle(@pPlayer).Init();

	if( args.ArgC() == 1 && args.Arg(0) == "/addnpc" || args.ArgC() == 1 && args.Arg(0) == ".addnpc" || args.ArgC() == 1 && args.Arg(0) == "!addnpc" )
	{
		pParams.ShouldHide = true;

		if( isAdmin )
		{
			g_DropCashMenu.ShowADDNPC( pPlayer );
		}
		else
		{
			g_PlayerFuncs.SayText(pPlayer, "Peasant! This command is for admins only!\n");
			return HOOK_CONTINUE;
		}
	}
	if( args.ArgC() == 1 && args.Arg(0) == "/DROPCASH" || args.Arg(0).ToLowercase() == "/dropcash" || args.Arg(0).ToLowercase() == ".dropcash" || args.Arg(0).ToLowercase() == "!dropcash" )
	{
		pParams.ShouldHide = true;
		g_DropCashMenu.Show( pPlayer );
	}
	if( args.ArgC() == 1 && args.Arg(0) == ".cnpc" || args.Arg(0).ToLowercase() == "/cnpc" || args.Arg(0).ToLowercase() == "!cnpc" )
	{
		pParams.ShouldHide = true;

		if( IsMapAllowed )
		{
			if( !pPlayer.IsAlive() )
			{
				g_PlayerFuncs.SayText(pPlayer, "[CNPC] You must be alive.\n");
				return HOOK_CONTINUE;
			}

			if ( delta2 < cooldown_time2 ) 
			{
				g_PlayerFuncs.SayText(pPlayer, "[CNPC] Wait " + int((cooldown_time2 - delta2) + 0.99f) + " seconds before becoming an NPC.\n");
				return HOOK_CONTINUE;
			}
			else
			{
				g_DropCashMenu.ShowCNPC( pPlayer );
			}
		}
		else
		{
			g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[CNPC] Controlling NPC's is restricted on this map.\n" );
			return HOOK_CONTINUE;
		}
	}
	if( args.ArgC() == 1 && args.Arg(0) == "/NPC" || args.Arg(0).ToLowercase() == "/npc" )
	{
		pParams.ShouldHide = true;

		if( isAdmin )
		{
			g_DropCashMenu.ShowSummons2( pPlayer );
		}
	}
	if( args.ArgC() == 1 && args.Arg(0) == "/WEPS" || args.Arg(0).ToLowercase() == "/weps" || args.Arg(0).ToLowercase() == ".weps" )
	{
		pParams.ShouldHide = true;
		g_DropCashMenu.SkinMenu( pPlayer );
	}
	if( args.ArgC() == 1 && args.Arg(0) == "/SUMMON" || args.Arg(0) == ".SUMMON" || args.Arg(0).ToLowercase() == ".summon" || args.Arg(0).ToLowercase() == "/summon" )
	{
		pParams.ShouldHide = true;

		string szMapName = string(g_Engine.mapname);
		if( szMapName == "re1" || szMapName == "reo1" )
		{
			g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[Summon] Summons are restricted on this map.\n" );
			return HOOK_CONTINUE;
		}

		if( IsMapAllowed )
		{
			if( !pPlayer.IsAlive() )
			{
				g_PlayerFuncs.SayText(pPlayer, "[Summon] You must be alive!\n");
				return HOOK_CONTINUE;
			}

			/*if( CheckForBabies() > 4 ) //m_bCanSummon == false )
			{
				g_PlayerFuncs.SayText(pPlayer, "[Summon] You can only have 3 NPC's active at a time!\n");
				return HOOK_CONTINUE;
			}*/

			float cooldown_time = 120.0;
			float delta = g_Engine.time - lastCommandTime2[pPlayer.entindex()];
			if ( delta < cooldown_time && !isAdmin ) 
			{
				g_PlayerFuncs.SayText(pPlayer, "[Summon] Wait " + int((cooldown_time - delta) + 0.99f) + " seconds before summoning another NPC.\n");
				return HOOK_CONTINUE;
			}
			else
			{
				g_DropCashMenu.ShowSummons( pPlayer );
				lastCommandTime2[pPlayer.entindex()] = g_Engine.time;
			}
		}
		else
		{
			g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[Summon] Summons are restricted on this map.\n" );
			return HOOK_CONTINUE;
		}
	}
	if( args.ArgC() == 1 && args.Arg(0) == "!exitnpc" || args.ArgC() == 1 && args.Arg(0) == "/exitnpc" || args.ArgC() == 1 && args.Arg(0) == ".exitnpc" )
	{
        	pParams.ShouldHide = true;
		CBasePlayerWeapon@ pWeapon = cast<CBasePlayerWeapon@>( pPlayer.m_hActiveItem.GetEntity() );

		if( pWeapon !is null )
		{
			lastCommandTime3[pPlayer.entindex()] = g_Engine.time;
			const float MaxHealth = ( pPlayer.pev.health / pPlayer.pev.max_health ) * 100;
			Vector vecOrigin = pPlayer.pev.origin;

			if( pWeapon.GetClassname() == "weapon_agrunt" or pWeapon.GetClassname() == "weapon_agruntf" or pWeapon.GetClassname() == "weapon_pitdrone" or pWeapon.GetClassname() == "weapon_strooper" 
			or pWeapon.GetClassname() == "weapon_hgrunts" or pWeapon.GetClassname() == "weapon_enforcer" or pWeapon.GetClassname() == "weapon_otis" or pWeapon.GetClassname() == "weapon_payne" 
			or pWeapon.GetClassname() == "weapon_ofgrunt" or pWeapon.GetClassname() == "weapon_srhgrunt" or pWeapon.GetClassname() == "weapon_gonome" or pWeapon.GetClassname() == "weapon_hwgrunt" 
			or pWeapon.GetClassname() == "weapon_fassn" or pWeapon.GetClassname() == "weapon_kingpin" or pWeapon.GetClassname() == "weapon_garg" or pWeapon.GetClassname() == "weapon_babygarg"
			or pWeapon.GetClassname() == "weapon_islave" or pWeapon.GetClassname() == "weapon_bigmomma" or pWeapon.GetClassname() == "weapon_bullsquid" or pWeapon.GetClassname() == "weapon_zombie" 
			or pWeapon.GetClassname() == "weapon_houndeye" or pWeapon.GetClassname() == "weapon_securityguard" or pWeapon.GetClassname() == "weapon_agruntfc" or pWeapon.GetClassname() == "weapon_agrunt2" )
			{
				g_EntityFuncs.Remove( pWeapon );
				pPlayer.pev.solid = SOLID_SLIDEBOX;
				pPlayer.pev.effects &= ~EF_NODRAW;
				pPlayer.pev.flags &= ~FL_MONSTER;
				pPlayer.pev.flags &= ~FL_NOTARGET;
				pPlayer.pev.flags &= ~FL_GODMODE;
				pPlayer.pev.flags &= ~FL_SPECTATOR;
				pPlayer.pev.takedamage = DAMAGE_YES;
				pPlayer.pev.scale = 1.0;
				pPlayer.pev.iuser3 = 0;
				pPlayer.pev.fuser4 = 0;
				pPlayer.m_bloodColor = BLOOD_COLOR_RED;
				pPlayer.SetMaxSpeedOverride( -1 );
				if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					pPlayer.pev.health = MaxHealth;
					pPlayer.pev.max_health = 100;
				}
				else
				{
					pPlayer.pev.health = 100;
					pPlayer.pev.max_health = 100;
				}

				if( pPlayer.pev.armorvalue > 100 )
				{
					pPlayer.pev.armorvalue = 100;
					pPlayer.pev.armortype = 100;
				}
				else
				{
					pPlayer.pev.armorvalue = pPlayer.pev.armorvalue;
					pPlayer.pev.armortype = 100;
				}			

				pPlayer.pev.view_ofs = Vector( 0, 0, 28 );
				pPlayer.SetItemPickupTimes( 0.0 );

				NetworkMessage m1( MSG_ONE_UNRELIABLE, NetworkMessages::SVC_STUFFTEXT, pPlayer.edict() );
					m1.WriteString( "cl_movespeedkey 0.3;\n" );
				m1.End();
			}

			if( pWeapon.GetClassname() == "weapon_babygarg" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $8000 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +8000);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $1000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1000);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $2000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2000);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $3000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +3000);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $4000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +4000);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $5000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +5000);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $5000 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money5000", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 1;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_agruntf" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $6000 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +6000);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +500);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $1000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1000);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $2000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2000);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $2500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2500);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $3000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +3000);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $3000 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money3000", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 1;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_agruntfc" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt (Classic) removed. $6000 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +6000);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +500);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $1000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1000);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $2000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2000);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $2500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2500);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $3000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +3000);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $3000 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money3000", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 1;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_pitdrone" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Pit Drone removed. $1200 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +1200);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +500);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Baby Gargantua removed. $1000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1000);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $2000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2000);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $2500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2500);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Grunt removed. $3000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +3000);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Pit Drone removed. $800 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money800", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 300;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_bullsquid" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Bull Squid removed. $1200 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +1200);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Bull Squid removed. $400 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +400);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Bull Squid removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +500);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Bull Squid removed. $600 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +600);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Bull Squid removed. $700 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +700);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Bull Squid removed. $800 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +800);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Bull Squid removed. $800 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money800", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 300;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_islave" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Slave removed. $800 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +800);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Slave removed. $100 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +100);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Slave removed. $200 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +200);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Slave removed. $300 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +300);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Slave removed. $400 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +400);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Slave removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +500);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Alien Slave removed. $500 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money500", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 300;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_zombie" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Zombie removed. $600 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +600);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Zombie removed. $100 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +100);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Zombie removed. $200 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +200);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Zombie removed. $300 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +300);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Zombie removed. $400 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +400);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Zombie removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +500);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Zombie removed. $500 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money500", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 300;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_houndeye" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Houndeye removed. $800 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +800);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Houndeye removed. $100 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +100);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Houndeye removed. $200 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +200);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Houndeye removed. $300 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +300);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Houndeye removed. $400 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +400);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Houndeye removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +500);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Houndeye removed. $500 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money500", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 300;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_securityguard" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Security guard removed. $700 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +700);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Security guard removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +100);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Security guard removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +200);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Security guard removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +300);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Security guard removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +400);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Security guard removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +500);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Security guard removed. $500 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money500", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 300;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_strooper" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Shock Trooper removed. $2000 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +2000);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Shock Trooper removed. $600 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +600);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Shock Trooper removed. $700 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +700);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Shock Trooper removed. $800 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +800);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Shock Trooper removed. $900 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +900);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Shock Trooper removed. $1000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1000);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Shock Trooper removed. $1000 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money1000", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 1;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_hgrunts" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Human Grunt removed. $3500 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +3500);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Human Grunt removed. $1000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1000);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Human Grunt removed. $1200 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1200);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Human Grunt removed. $1300 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1300);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Human Grunt removed. $1400 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1400);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Human Grunt removed. $1500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1500);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Human Grunt removed. $1500 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money1000", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 1;
				//pAGDrone.pev.spawnflags = 7168;

				//CBaseEntity@ pAGDrone2 = g_EntityFuncs.Create( "item_money500", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone2.pev.velocity = g_Engine.v_up * 1;
				//pAGDrone2.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_hwgrunt" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Heavy Weapons Grunt removed. $7000 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +7000);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Heavy Weapons Grunt removed. $1000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1000);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Heavy Weapons Grunt removed. $2000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2000);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Heavy Weapons Grunt removed. $3000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +3000);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Heavy Weapons Grunt removed. $3500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +3500);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Heavy Weapons Grunt removed. $4000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +4000);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Heavy Weapons Grunt removed. $4000 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money4000", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 1;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_kingpin" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Kingpin removed. $8000 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +8000);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Kingpin removed. $1000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1000);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Kingpin removed. $2000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2000);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Kingpin removed. $3000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +3000);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Kingpin removed. $4500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +4500);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Kingpin removed. $5000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +5000);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Kingpin removed. $5000 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money5000", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 1;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_fassn" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Female Assassin removed. $6000 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +6000);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Female Assassin removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +500);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Female Assassin removed. $1000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1000);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Female Assassin removed. $2000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2000);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Female Assassin removed. $2500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2500);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Female Assassin removed. $3000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +3000);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Female Assassin removed. $3000 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money3000", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 1;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_gonome" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Gonome removed. $2000 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +2000);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Gonome removed. $600 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +600);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Gonome removed. $700 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +700);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Gonome removed. $800 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +800);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Gonome removed. $900 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +900);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Gonome removed. $1000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1000);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] Gonome removed. $1000 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money1000", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 1;
				//pAGDrone.pev.spawnflags = 7168;
			}

			if( pWeapon.GetClassname() == "weapon_ofgrunt" )
			{
				g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] OPFOR Grunt removed. $4000 were added back to your balance.\n" );
				EccoPlayerInventory::ChangeBalance(pPlayer, +4000);

				/*if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.25 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] OPFOR Grunt removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +500);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.5 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] OPFOR Grunt removed. $500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +500);
				}
				else if( pPlayer.pev.health <= pPlayer.pev.max_health * 0.75 )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] OPFOR Grunt removed. $1000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1000);
				}
				else if( pPlayer.pev.health < pPlayer.pev.max_health )
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] OPFOR Grunt removed. $1500 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +1500);
				}
				else
				{
					g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] OPFOR Grunt removed. $2000 were added back to your balance.\n" );
					EccoPlayerInventory::ChangeBalance(pPlayer, +2000);
				}*/

				//g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[ExitNPC] OPFOR Grunt removed. $2000 were added back to your balance.\n" );
				//CBaseEntity@ pAGDrone = g_EntityFuncs.Create( "item_money2000", vecOrigin, pPlayer.pev.v_angle, false, pPlayer.edict() );
				//pAGDrone.pev.velocity = g_Engine.v_up * 1;
				//pAGDrone.pev.spawnflags = 7168;
			}
		}
	}
	return HOOK_CONTINUE;
}