Enhanced behavior armoury_entity with czbot, don't pick up if forbidden by cvars

This commit is contained in:
s1lent 2019-09-11 00:04:18 +07:00
parent 29a94ddbb8
commit 7ac1e0db2f
5 changed files with 85 additions and 7 deletions

View File

@ -168,16 +168,35 @@ bool CCSBotManager::IsWeaponUseable(CBasePlayerItem *item) const
if (item->m_iId == WEAPON_C4) if (item->m_iId == WEAPON_C4)
return true; return true;
int weaponClass = WeaponIDToWeaponClass(item->m_iId); WeaponClassType weaponClass = WeaponIDToWeaponClass(item->m_iId);
if ((!AllowShotguns() && weaponClass == WEAPONCLASS_SHOTGUN) if ((!AllowShotguns() && weaponClass == WEAPONCLASS_SHOTGUN)
|| (!AllowMachineGuns() && weaponClass == WEAPONCLASS_MACHINEGUN) || (!AllowMachineGuns() && weaponClass == WEAPONCLASS_MACHINEGUN)
|| (!AllowRifles() && weaponClass == WEAPONCLASS_RIFLE) || (!AllowRifles() && weaponClass == WEAPONCLASS_RIFLE)
|| (!AllowSnipers() && weaponClass == WEAPONCLASS_SNIPERRIFLE) || (!AllowSnipers() && weaponClass == WEAPONCLASS_SNIPERRIFLE)
|| (!AllowSubMachineGuns() && weaponClass == WEAPONCLASS_SUBMACHINEGUN) || (!AllowSubMachineGuns() && weaponClass == WEAPONCLASS_SUBMACHINEGUN)
|| (!AllowTacticalShield() && item->m_iId == WEAPON_SHIELDGUN) || (!AllowTacticalShield() && item->m_iId == WEAPON_SHIELDGUN)
|| (!AllowPistols() && weaponClass == WEAPONCLASS_PISTOL) || (!AllowPistols() && weaponClass == WEAPONCLASS_PISTOL)
|| (!AllowGrenades() && weaponClass == WEAPONCLASS_GRENADE)) || (!AllowGrenades() && weaponClass == WEAPONCLASS_GRENADE))
{
return false;
}
return true;
}
bool CCSBotManager::IsWeaponUseable(ArmouryItemPack item) const
{
WeaponClassType weaponClass = WeaponIDToWeaponClass(item);
if ((!AllowShotguns() && weaponClass == WEAPONCLASS_SHOTGUN)
|| (!AllowMachineGuns() && weaponClass == WEAPONCLASS_MACHINEGUN)
|| (!AllowRifles() && weaponClass == WEAPONCLASS_RIFLE)
|| (!AllowSnipers() && weaponClass == WEAPONCLASS_SNIPERRIFLE)
|| (!AllowSubMachineGuns() && weaponClass == WEAPONCLASS_SUBMACHINEGUN)
|| (!AllowTacticalShield() && item == ARMOURY_SHIELD)
|| (!AllowPistols() && weaponClass == WEAPONCLASS_PISTOL)
|| (!AllowGrenades() && weaponClass == WEAPONCLASS_GRENADE))
{ {
return false; return false;
} }

View File

@ -195,6 +195,7 @@ public:
bool AllowFriendlyFireDamage() const { return friendlyfire.value != 0.0f; } bool AllowFriendlyFireDamage() const { return friendlyfire.value != 0.0f; }
bool IsWeaponUseable(CBasePlayerItem *item) const; // return true if the bot can use this weapon bool IsWeaponUseable(CBasePlayerItem *item) const; // return true if the bot can use this weapon
bool IsWeaponUseable(ArmouryItemPack item) const;
bool IsDefenseRushing() const { return m_isDefenseRushing; } // returns true if defense team has "decided" to rush this round bool IsDefenseRushing() const { return m_isDefenseRushing; } // returns true if defense team has "decided" to rush this round
bool IsOnDefense(CBasePlayer *pPlayer) const; // return true if this player is on "defense" bool IsOnDefense(CBasePlayer *pPlayer) const; // return true if this player is on "defense"

View File

@ -2255,6 +2255,11 @@ void CArmoury::ArmouryTouch(CBaseEntity *pOther)
return; return;
#endif #endif
#ifdef REGAMEDLL_FIXES
if (pToucher->IsBot() && TheCSBots() && !TheCSBots()->IsWeaponUseable(m_iItem))
return;
#endif
// primary weapons // primary weapons
if (m_iCount > 0 && (m_iItem <= ARMOURY_M249 if (m_iCount > 0 && (m_iItem <= ARMOURY_M249
#ifdef REGAMEDLL_ADD #ifdef REGAMEDLL_ADD

View File

@ -388,6 +388,58 @@ WeaponClassType WeaponIDToWeaponClass(int id)
return AliasToWeaponClass(WeaponIDToAlias(id)); return AliasToWeaponClass(WeaponIDToAlias(id));
} }
WeaponClassType WeaponIDToWeaponClass(ArmouryItemPack id)
{
switch (id)
{
case ARMOURY_AUG:
case ARMOURY_GALIL:
case ARMOURY_M4A1:
case ARMOURY_SG552:
case ARMOURY_AK47:
case ARMOURY_FAMAS:
return WEAPONCLASS_RIFLE;
case ARMOURY_GLOCK18:
case ARMOURY_USP:
case ARMOURY_ELITE:
case ARMOURY_FIVESEVEN:
case ARMOURY_P228:
case ARMOURY_DEAGLE:
return WEAPONCLASS_PISTOL;
case ARMOURY_MP5NAVY:
case ARMOURY_MAC10:
case ARMOURY_TMP:
case ARMOURY_UMP45:
case ARMOURY_P90:
return WEAPONCLASS_SUBMACHINEGUN;
case ARMOURY_SCOUT:
case ARMOURY_SG550:
case ARMOURY_AWP:
case ARMOURY_G3SG1:
return WEAPONCLASS_SNIPERRIFLE;
case ARMOURY_FLASHBANG:
case ARMOURY_HEGRENADE:
case ARMOURY_SMOKEGRENADE:
return WEAPONCLASS_GRENADE;
case ARMOURY_M3:
case ARMOURY_XM1014:
return WEAPONCLASS_SHOTGUN;
case ARMOURY_M249:
return WEAPONCLASS_MACHINEGUN;
default:
break;
}
return WEAPONCLASS_NONE;
}
// Return true if given weapon ID is a primary weapon // Return true if given weapon ID is a primary weapon
bool IsPrimaryWeapon(int id) bool IsPrimaryWeapon(int id)
{ {

View File

@ -447,6 +447,7 @@ const char *BuyAliasToWeaponID(const char *alias, WeaponIdType &id);
const char *WeaponIDToAlias(int id); const char *WeaponIDToAlias(int id);
WeaponClassType AliasToWeaponClass(const char *alias); WeaponClassType AliasToWeaponClass(const char *alias);
WeaponClassType WeaponIDToWeaponClass(int id); WeaponClassType WeaponIDToWeaponClass(int id);
WeaponClassType WeaponIDToWeaponClass(ArmouryItemPack id);
bool IsPrimaryWeapon(int id); bool IsPrimaryWeapon(int id);
bool IsSecondaryWeapon(int id); bool IsSecondaryWeapon(int id);
bool IsGrenadeWeapon(int id); bool IsGrenadeWeapon(int id);