Merged changes from Vaqtincha

This commit is contained in:
s1lent 2017-07-04 19:44:49 +07:00
parent 63e16f78ab
commit 36f51163f8
No known key found for this signature in database
GPG Key ID: 0FE401DC73916B5C
18 changed files with 476 additions and 172 deletions

View File

@ -186,17 +186,15 @@ void CCSBotManager::__MAKE_VHOOK(StartFrame)()
} }
// Return true if the bot can use this weapon // Return true if the bot can use this weapon
bool CCSBotManager::IsWeaponUseable(CBasePlayerItem *item) const bool CCSBotManager::IsWeaponUseable(WeaponIdType weaponID) const
{ {
if (item == NULL) if (weaponID == WEAPON_NONE)
{
return false; return false;
}
if (item->m_iId == WEAPON_C4) if (weaponID == WEAPON_C4)
return true; return true;
int weaponClass = WeaponIDToWeaponClass(item->m_iId); int weaponClass = WeaponIDToWeaponClass(weaponID);
if ((!AllowShotguns() && weaponClass == WEAPONCLASS_SHOTGUN) if ((!AllowShotguns() && weaponClass == WEAPONCLASS_SHOTGUN)
|| (!AllowMachineGuns() && weaponClass == WEAPONCLASS_MACHINEGUN) || (!AllowMachineGuns() && weaponClass == WEAPONCLASS_MACHINEGUN)
@ -207,7 +205,7 @@ bool CCSBotManager::IsWeaponUseable(CBasePlayerItem *item) const
#endif #endif
|| (!AllowSnipers() && weaponClass == WEAPONCLASS_SNIPERRIFLE) || (!AllowSnipers() && weaponClass == WEAPONCLASS_SNIPERRIFLE)
|| (!AllowSubMachineGuns() && weaponClass == WEAPONCLASS_SUBMACHINEGUN) || (!AllowSubMachineGuns() && weaponClass == WEAPONCLASS_SUBMACHINEGUN)
|| (!AllowTacticalShield() && item->m_iId == WEAPON_SHIELDGUN) || (!AllowTacticalShield() && weaponID == WEAPON_SHIELDGUN)
|| (!AllowPistols() && weaponClass == WEAPONCLASS_PISTOL) || (!AllowPistols() && weaponClass == WEAPONCLASS_PISTOL)
|| (!AllowGrenades() && weaponClass == WEAPONCLASS_GRENADE)) || (!AllowGrenades() && weaponClass == WEAPONCLASS_GRENADE))
{ {

View File

@ -212,7 +212,7 @@ public:
bool AllowTacticalShield() const { return cv_bot_allow_shield.value != 0.0f; } bool AllowTacticalShield() const { return cv_bot_allow_shield.value != 0.0f; }
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(WeaponIdType weaponID) const; // return true if the bot can use this weapon
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 *player) const; // return true if this player is on "defense" bool IsOnDefense(CBasePlayer *player) const; // return true if this player is on "defense"

View File

@ -426,6 +426,9 @@ void EXT_FUNC ClientPutInServer(edict_t *pEntity)
pPlayer->m_bTeamChanged = false; pPlayer->m_bTeamChanged = false;
pPlayer->m_iNumSpawns = 0; pPlayer->m_iNumSpawns = 0;
#ifdef REGAMEDLL_FIXES
pPlayer->m_bHasPrimary = false;
#endif
CheckStartMoney(); CheckStartMoney();
#ifdef REGAMEDLL_ADD #ifdef REGAMEDLL_ADD
@ -1324,8 +1327,13 @@ CBaseEntity *EXT_FUNC __API_HOOK(BuyWeaponByWeaponID)(CBasePlayer *pPlayer, Weap
pPlayer->AddAccount(-info->cost, RT_PLAYER_BOUGHT_SOMETHING); pPlayer->AddAccount(-info->cost, RT_PLAYER_BOUGHT_SOMETHING);
#ifdef REGAMEDLL_ADD #ifdef REGAMEDLL_ADD
if (refill_bpammo_weapons.value > 1 && info->ammoType >= AMMO_338MAGNUM && info->ammoType <= AMMO_9MM) { if (refill_bpammo_weapons.value > 1)
pPlayer->m_rgAmmo[info->ammoType] = info->maxRounds; {
CBasePlayerItem *pItem = static_cast<CBasePlayerItem *>(pEntity);
if (pItem) {
pPlayer->GiveAmmo(pItem->iMaxAmmo1(), (char *)pItem->pszAmmo1(), pItem->iMaxAmmo1());
}
} }
#endif #endif
@ -2009,8 +2017,16 @@ bool EXT_FUNC __API_HOOK(BuyGunAmmo)(CBasePlayer *player, CBasePlayerItem *weapo
// Purchase the ammo if the player has enough money // Purchase the ammo if the player has enough money
if (player->m_iAccount >= info->clipCost) if (player->m_iAccount >= info->clipCost)
{ {
player->GiveNamedItem(info->ammoName); #ifndef REGAMEDLL_ADD
player->GiveNamedItem(info->ammoName); // hardcoded buyClipSize & maxRounds
#else
if (player->GiveAmmo(info->buyClipSize, (char *)weapon->pszAmmo1(), weapon->iMaxAmmo1()) == -1)
return false;
EMIT_SOUND(weapon->edict(), CHAN_ITEM, "items/9mmclip1.wav", VOL_NORM, ATTN_NORM);
#endif
player->AddAccount(-info->clipCost, RT_PLAYER_BOUGHT_SOMETHING); player->AddAccount(-info->clipCost, RT_PLAYER_BOUGHT_SOMETHING);
return true; return true;
} }
@ -2997,53 +3013,11 @@ void EXT_FUNC InternalCommand(edict_t *pEntity, const char *pcmd, const char *pa
if (player->m_bNightVisionOn) if (player->m_bNightVisionOn)
{ {
EMIT_SOUND(ENT(player->pev), CHAN_ITEM, "items/nvg_off.wav", RANDOM_FLOAT(0.92, 1), ATTN_NORM); player->NightVisionToggle(STATUS_NIGHTVISION_OFF, true);
MESSAGE_BEGIN(MSG_ONE, gmsgNVGToggle, NULL, player->pev);
WRITE_BYTE(0); // disable nightvision
MESSAGE_END();
player->m_bNightVisionOn = false;
for (int i = 1; i <= gpGlobals->maxClients; ++i)
{
CBasePlayer *pObserver = UTIL_PlayerByIndex(i);
if (pObserver && pObserver->IsObservingPlayer(player))
{
EMIT_SOUND(ENT(pObserver->pev), CHAN_ITEM, "items/nvg_off.wav", RANDOM_FLOAT(0.92, 1), ATTN_NORM);
MESSAGE_BEGIN(MSG_ONE, gmsgNVGToggle, NULL, pObserver->pev);
WRITE_BYTE(0); // disable nightvision
MESSAGE_END();
pObserver->m_bNightVisionOn = false;
}
}
} }
else else
{ {
EMIT_SOUND(ENT(player->pev), CHAN_ITEM, "items/nvg_on.wav", RANDOM_FLOAT(0.92, 1), ATTN_NORM); player->NightVisionToggle(STATUS_NIGHTVISION_ON, true);
MESSAGE_BEGIN(MSG_ONE, gmsgNVGToggle, NULL, player->pev);
WRITE_BYTE(1); // enable nightvision
MESSAGE_END();
player->m_bNightVisionOn = true;
for (int i = 1; i <= gpGlobals->maxClients; ++i)
{
CBasePlayer *pObserver = UTIL_PlayerByIndex(i);
if (pObserver && pObserver->IsObservingPlayer(player))
{
EMIT_SOUND(ENT(pObserver->pev), CHAN_ITEM, "items/nvg_on.wav", RANDOM_FLOAT(0.92, 1), ATTN_NORM);
MESSAGE_BEGIN(MSG_ONE, gmsgNVGToggle, NULL, pObserver->pev);
WRITE_BYTE(1); // enable nightvision
MESSAGE_END();
pObserver->m_bNightVisionOn = true;
}
}
} }
} }
} }

View File

@ -1887,8 +1887,7 @@ void CEnvFunnel::__MAKE_VHOOK(Spawn)()
void CEnvBeverage::__MAKE_VHOOK(Precache)() void CEnvBeverage::__MAKE_VHOOK(Precache)()
{ {
PRECACHE_MODEL("models/can.mdl"); ;
PRECACHE_SOUND("weapons/g_bounce3.wav");
} }
LINK_ENTITY_TO_CLASS(env_beverage, CEnvBeverage, CCSEnvBeverage) LINK_ENTITY_TO_CLASS(env_beverage, CEnvBeverage, CCSEnvBeverage)
@ -1917,7 +1916,8 @@ void CEnvBeverage::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCall
void CEnvBeverage::__MAKE_VHOOK(Spawn)() void CEnvBeverage::__MAKE_VHOOK(Spawn)()
{ {
Precache(); // Precache();
pev->solid = SOLID_NOT; pev->solid = SOLID_NOT;
pev->effects = EF_NODRAW; pev->effects = EF_NODRAW;
pev->frags = 0; pev->frags = 0;
@ -1930,7 +1930,9 @@ void CEnvBeverage::__MAKE_VHOOK(Spawn)()
void CItemSoda::__MAKE_VHOOK(Precache)() void CItemSoda::__MAKE_VHOOK(Precache)()
{ {
; // used by func_break.cpp pSpawnObjects
PRECACHE_MODEL("models/can.mdl");
PRECACHE_SOUND("weapons/g_bounce3.wav");
} }
LINK_ENTITY_TO_CLASS(item_sodacan, CItemSoda, CCSItemSoda) LINK_ENTITY_TO_CLASS(item_sodacan, CItemSoda, CCSItemSoda)

View File

@ -13,6 +13,7 @@ const char *CBreakable::pSpawnObjects[] =
NULL, NULL,
"item_battery", "item_battery",
"item_healthkit", "item_healthkit",
#ifndef REGAMEDLL_FIXES
"weapon_9mmhandgun", "weapon_9mmhandgun",
"ammo_9mmclip", "ammo_9mmclip",
"weapon_9mmAR", "weapon_9mmAR",
@ -42,6 +43,14 @@ const char *CBreakable::pSpawnObjects[] =
"weapon_tmp", "weapon_tmp",
"weapon_g3sg1", "weapon_g3sg1",
"weapon_flashbang" "weapon_flashbang"
#else
"item_kevlar",
"item_assaultsuit",
"item_longjump",
"item_sodacan",
"item_antidote",
"item_thighpack"
#endif
}; };
const char *CBreakable::pSoundsWood[] = const char *CBreakable::pSoundsWood[] =
@ -835,7 +844,18 @@ void CBreakable::Die()
if (m_iszSpawnObject) if (m_iszSpawnObject)
{ {
#ifndef REGAMEDLL_FIXES
CBaseEntity::Create((char *)STRING(m_iszSpawnObject), VecBModelOrigin(pev), pev->angles, edict()); CBaseEntity::Create((char *)STRING(m_iszSpawnObject), VecBModelOrigin(pev), pev->angles, edict());
#else
// FIX: entity leak!
CItem *pItem = (CItem *)CBaseEntity::Create((char *)STRING(m_iszSpawnObject), VecBModelOrigin(pev), pev->angles, edict());
if (pItem)
{
pItem->pev->spawnflags |= SF_NORESPAWN;
pItem->SetThink(&CBaseEntity::SUB_Remove);
pItem->pev->nextthink = gpGlobals->time + 300;
}
#endif
} }
if (Explodable()) if (Explodable())

View File

@ -97,7 +97,7 @@ cvar_t sk_scientist_heal3 = { "sk_scientist_heal3", "0", 0, 0.0f, NULL };
#ifdef REGAMEDLL_ADD #ifdef REGAMEDLL_ADD
cvar_t game_version = { "game_version", APP_VERSION, FCVAR_SERVER, 0.0f, nullptr }; cvar_t game_version = { "game_version", APP_VERSION, FCVAR_SPONLY | FCVAR_UNLOGGED, 0.0f, nullptr };
cvar_t maxmoney = { "mp_maxmoney", "16000", FCVAR_SERVER, 0.0f, nullptr }; cvar_t maxmoney = { "mp_maxmoney", "16000", FCVAR_SERVER, 0.0f, nullptr };
cvar_t round_infinite = { "mp_round_infinite", "0", FCVAR_SERVER, 0.0f, nullptr }; cvar_t round_infinite = { "mp_round_infinite", "0", FCVAR_SERVER, 0.0f, nullptr };
cvar_t hegrenade_penetration = { "mp_hegrenade_penetration", "0", 0, 0.0f, nullptr }; cvar_t hegrenade_penetration = { "mp_hegrenade_penetration", "0", 0, 0.0f, nullptr };
@ -133,7 +133,7 @@ void GameDLL_EndRound_f()
{ {
CSGameRules()->EndRoundMessage("#Round_Draw", ROUND_END_DRAW); CSGameRules()->EndRoundMessage("#Round_Draw", ROUND_END_DRAW);
Broadcast("rounddraw"); Broadcast("rounddraw");
CSGameRules()->TerminateRound(5, WINSTATUS_DRAW); CSGameRules()->TerminateRound(ROUND_BEGIN_DELAY, WINSTATUS_DRAW);
} }
#endif // REGAMEDLL_ADD #endif // REGAMEDLL_ADD

View File

@ -85,7 +85,7 @@ BOOL CGameRules::__MAKE_VHOOK(CanHavePlayerItem)(CBasePlayer *pPlayer, CBasePlay
return FALSE; return FALSE;
} }
if (pPlayer->IsBot() && TheCSBots() != NULL && !TheCSBots()->IsWeaponUseable(pWeapon)) if (pPlayer->IsBot() && TheCSBots() != NULL && !TheCSBots()->IsWeaponUseable((WeaponIdType)pWeapon->m_iId))
{ {
return FALSE; return FALSE;
} }

View File

@ -50,7 +50,11 @@ void CRecharge::__MAKE_VHOOK(Spawn)()
UTIL_SetSize(pev, pev->mins, pev->maxs); UTIL_SetSize(pev, pev->mins, pev->maxs);
SET_MODEL(ENT(pev), STRING(pev->model)); SET_MODEL(ENT(pev), STRING(pev->model));
#ifdef REGAMEDLL_ADD
m_iJuice = int(pev->armorvalue ? pev->armorvalue : gSkillData.suitchargerCapacity); // "armorvalue" - 0 = default, > 0 = use my value
#else
m_iJuice = int(gSkillData.suitchargerCapacity); m_iJuice = int(gSkillData.suitchargerCapacity);
#endif
pev->frame = 0; pev->frame = 0;
} }
@ -68,14 +72,22 @@ void CRecharge::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller,
return; return;
// if there is no juice left, turn it off // if there is no juice left, turn it off
if (m_iJuice <= 0) if (m_iJuice <= 0
#ifdef REGAMEDLL_FIXES
&& pev->frame != 1.0f // don't update ltime
#endif
)
{ {
pev->frame = 1.0f; pev->frame = 1.0f;
Off(); Off();
} }
// if the player doesn't have the suit, or there is no juice left, make the deny noise // if the player doesn't have the suit, or there is no juice left, make the deny noise
if (m_iJuice <= 0 || !(pActivator->pev->weapons & (1 << WEAPON_SUIT))) if (m_iJuice <= 0 || !(pActivator->pev->weapons & (1 << WEAPON_SUIT))
#ifdef REGAMEDLL_FIXES
|| pActivator->pev->armorvalue >= MAX_NORMAL_BATTERY
#endif
)
{ {
if (m_flSoundTime <= gpGlobals->time) if (m_flSoundTime <= gpGlobals->time)
{ {
@ -118,13 +130,23 @@ void CRecharge::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller,
} }
// charge the player // charge the player
if (m_hActivator->pev->armorvalue < 100) #ifndef REGAMEDLL_FIXES
if (m_hActivator->pev->armorvalue < MAX_NORMAL_BATTERY)
#endif
{ {
m_iJuice--; m_iJuice--;
m_hActivator->pev->armorvalue += 1.0f; m_hActivator->pev->armorvalue += 1.0f;
if (m_hActivator->pev->armorvalue > 100) #ifdef REGAMEDLL_FIXES
m_hActivator->pev->armorvalue = 100; CBasePlayer *pPlayer = static_cast<CBasePlayer *>(pActivator);
if (pPlayer && pPlayer->m_iKevlar == ARMOR_NONE) {
pPlayer->m_iKevlar = ARMOR_KEVLAR;
}
#else
if (m_hActivator->pev->armorvalue > MAX_NORMAL_BATTERY)
m_hActivator->pev->armorvalue = MAX_NORMAL_BATTERY;
#endif
} }
// govern the rate of charge // govern the rate of charge
@ -133,7 +155,11 @@ void CRecharge::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller,
void CRecharge::Recharge() void CRecharge::Recharge()
{ {
#ifdef REGAMEDLL_ADD
m_iJuice = int(pev->armorvalue ? pev->armorvalue : gSkillData.suitchargerCapacity);
#else
m_iJuice = gSkillData.suitchargerCapacity; m_iJuice = gSkillData.suitchargerCapacity;
#endif
pev->frame = 0; pev->frame = 0;
SetThink(&CRecharge::SUB_DoNothing); SetThink(&CRecharge::SUB_DoNothing);
} }
@ -146,7 +172,12 @@ void CRecharge::Off()
m_iOn = 0; m_iOn = 0;
if (!m_iJuice && (m_iReactivate = g_pGameRules->FlHEVChargerRechargeTime()) > 0) if (!m_iJuice &&
#ifdef REGAMEDLL_FIXES
(m_iReactivate > 0 || // "dmdelay" - 0 = default, > 0 = use my value
#endif
(m_iReactivate = g_pGameRules->FlHEVChargerRechargeTime()) > 0)
)
{ {
pev->nextthink = pev->ltime + m_iReactivate; pev->nextthink = pev->ltime + m_iReactivate;
SetThink(&CRecharge::Recharge); SetThink(&CRecharge::Recharge);

View File

@ -89,7 +89,11 @@ void CWallHealth::__MAKE_VHOOK(Spawn)()
SET_MODEL(ENT(pev), STRING(pev->model)); SET_MODEL(ENT(pev), STRING(pev->model));
#ifdef REGAMEDLL_ADD
m_iJuice = int(pev->health ? pev->health : gSkillData.suitchargerCapacity); // "health" - 0 = default, > 0 = use my value
#else
m_iJuice = int(gSkillData.healthchargerCapacity); m_iJuice = int(gSkillData.healthchargerCapacity);
#endif
pev->frame = 0.0f; pev->frame = 0.0f;
} }
@ -111,14 +115,22 @@ void CWallHealth::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCalle
return; return;
// if there is no juice left, turn it off // if there is no juice left, turn it off
if (m_iJuice <= 0) if (m_iJuice <= 0
#ifdef REGAMEDLL_FIXES
&& pev->frame != 1.0f // don't update ltime
#endif
)
{ {
pev->frame = 1.0f; pev->frame = 1.0f;
Off(); Off();
} }
// if the player doesn't have the suit, or there is no juice left, make the deny noise // if the player doesn't have the suit, or there is no juice left, make the deny noise
if (m_iJuice <= 0 || !(pActivator->pev->weapons & (1 << WEAPON_SUIT))) if (m_iJuice <= 0 || !(pActivator->pev->weapons & (1 << WEAPON_SUIT))
#ifdef REGAMEDLL_FIXES
|| pActivator->pev->health >= pActivator->pev->max_health
#endif
)
{ {
if (gpGlobals->time >= m_flSoundTime) if (gpGlobals->time >= m_flSoundTime)
{ {
@ -160,7 +172,13 @@ void CWallHealth::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCalle
void CWallHealth::Recharge() void CWallHealth::Recharge()
{ {
EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/medshot4.wav", VOL_NORM, ATTN_NORM); EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/medshot4.wav", VOL_NORM, ATTN_NORM);
m_iJuice = gSkillData.healthchargerCapacity;
#ifdef REGAMEDLL_ADD
m_iJuice = int(pev->health ? pev->health : gSkillData.suitchargerCapacity);
#else
m_iJuice = int(gSkillData.healthchargerCapacity);
#endif
pev->frame = 0.0f; pev->frame = 0.0f;
SetThink(&CWallHealth::SUB_DoNothing); SetThink(&CWallHealth::SUB_DoNothing);
} }
@ -173,7 +191,12 @@ void CWallHealth::Off()
m_iOn = 0; m_iOn = 0;
if (!m_iJuice && ((m_iReactivate = g_pGameRules->FlHealthChargerRechargeTime()) > 0)) if (!m_iJuice &&
#ifdef REGAMEDLL_FIXES
(m_iReactivate > 0 || // "dmdelay" - 0 = default, > 0 = use my value
#endif
(m_iReactivate = g_pGameRules->FlHealthChargerRechargeTime()) > 0)
)
{ {
pev->nextthink = pev->ltime + m_iReactivate; pev->nextthink = pev->ltime + m_iReactivate;
SetThink(&CWallHealth::Recharge); SetThink(&CWallHealth::Recharge);

View File

@ -932,7 +932,7 @@ void CHostage::GiveCTTouchBonus(CBasePlayer *pPlayer)
m_bTouched = TRUE; m_bTouched = TRUE;
CSGameRules()->m_iAccountCT += CSGameRules()->m_rgRewardAccountRules[RR_TOOK_HOSTAGE_ACC]; CSGameRules()->m_iAccountCT += CSGameRules()->m_rgRewardAccountRules[RR_TOOK_HOSTAGE_ACC];
pPlayer->AddAccount(REWARD_TOOK_HOSTAGE, RT_HOSTAGE_TOOK); pPlayer->AddAccount(CSGameRules()->m_rgRewardAccountRules[RR_TOOK_HOSTAGE], RT_HOSTAGE_TOOK);
UTIL_LogPrintf("\"%s<%i><%s><CT>\" triggered \"Touched_A_Hostage\"\n", STRING(pPlayer->pev->netname), GETPLAYERUSERID(pPlayer->edict()), GETPLAYERAUTHID(pPlayer->edict())); UTIL_LogPrintf("\"%s<%i><%s><CT>\" triggered \"Touched_A_Hostage\"\n", STRING(pPlayer->pev->netname), GETPLAYERUSERID(pPlayer->edict()), GETPLAYERAUTHID(pPlayer->edict()));
} }

View File

@ -220,6 +220,10 @@ BOOL CItemBattery::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
pPlayer->pev->armorvalue += gSkillData.batteryCapacity; pPlayer->pev->armorvalue += gSkillData.batteryCapacity;
pPlayer->pev->armorvalue = Q_min(pPlayer->pev->armorvalue, MAX_NORMAL_BATTERY); pPlayer->pev->armorvalue = Q_min(pPlayer->pev->armorvalue, MAX_NORMAL_BATTERY);
#ifdef REGAMEDLL_FIXES
if (pPlayer->m_iKevlar == ARMOR_NONE)
pPlayer->m_iKevlar = ARMOR_KEVLAR;
#endif
EMIT_SOUND(pPlayer->edict(), CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM); EMIT_SOUND(pPlayer->edict(), CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM);
MESSAGE_BEGIN(MSG_ONE, gmsgItemPickup, NULL, pPlayer->pev); MESSAGE_BEGIN(MSG_ONE, gmsgItemPickup, NULL, pPlayer->pev);
@ -355,10 +359,15 @@ BOOL CItemKevlar::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
return FALSE; return FALSE;
#endif #endif
#ifdef REGAMEDLL_FIXES
if (pPlayer->m_iKevlar != ARMOR_NONE && pPlayer->pev->armorvalue >= MAX_NORMAL_BATTERY)
return FALSE;
#endif
if (pPlayer->m_iKevlar == ARMOR_NONE) if (pPlayer->m_iKevlar == ARMOR_NONE)
pPlayer->m_iKevlar = ARMOR_KEVLAR; pPlayer->m_iKevlar = ARMOR_KEVLAR;
pPlayer->pev->armorvalue = 100; pPlayer->pev->armorvalue = MAX_NORMAL_BATTERY;
EMIT_SOUND(pPlayer->edict(), CHAN_ITEM, "items/ammopickup2.wav", VOL_NORM, ATTN_NORM); EMIT_SOUND(pPlayer->edict(), CHAN_ITEM, "items/ammopickup2.wav", VOL_NORM, ATTN_NORM);
MESSAGE_BEGIN(MSG_ONE, gmsgItemPickup, NULL, pPlayer->pev); MESSAGE_BEGIN(MSG_ONE, gmsgItemPickup, NULL, pPlayer->pev);
@ -366,7 +375,11 @@ BOOL CItemKevlar::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
MESSAGE_END(); MESSAGE_END();
MESSAGE_BEGIN(MSG_ONE, gmsgArmorType, NULL, pPlayer->pev); MESSAGE_BEGIN(MSG_ONE, gmsgArmorType, NULL, pPlayer->pev);
#ifdef REGAMEDLL_FIXES
WRITE_BYTE(pPlayer->m_iKevlar == ARMOR_KEVLAR ? 0 : 1); // 0 = ARMOR_KEVLAR, 1 = ARMOR_VESTHELM
#else
WRITE_BYTE(0); WRITE_BYTE(0);
#endif
MESSAGE_END(); MESSAGE_END();
if (TheTutor) if (TheTutor)
@ -398,8 +411,13 @@ BOOL CItemAssaultSuit::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
return FALSE; return FALSE;
#endif #endif
#ifdef REGAMEDLL_FIXES
if (pPlayer->m_iKevlar == ARMOR_VESTHELM && pPlayer->pev->armorvalue >= MAX_NORMAL_BATTERY)
return FALSE;
#endif
pPlayer->m_iKevlar = ARMOR_VESTHELM; pPlayer->m_iKevlar = ARMOR_VESTHELM;
pPlayer->pev->armorvalue = 100; pPlayer->pev->armorvalue = MAX_NORMAL_BATTERY;
EMIT_SOUND(pPlayer->edict(), CHAN_ITEM, "items/ammopickup2.wav", VOL_NORM, ATTN_NORM); EMIT_SOUND(pPlayer->edict(), CHAN_ITEM, "items/ammopickup2.wav", VOL_NORM, ATTN_NORM);

View File

@ -721,8 +721,21 @@ void EXT_FUNC CHalfLifeMultiplay::__API_VHOOK(CleanUpMap)()
#endif #endif
// Remove defuse kit // Remove defuse kit
#ifndef REGAMEDLL_FIXES
// Old code only removed 4 kits and stopped. // Old code only removed 4 kits and stopped.
UTIL_RemoveOther("item_thighpack"); UTIL_RemoveOther("item_thighpack");
#else
// Don't remove level items
CBaseEntity *thighpack = NULL;
while ((thighpack = UTIL_FindEntityByClassname(thighpack, "item_thighpack")) != NULL)
{
if (thighpack->pev->spawnflags & SF_NORESPAWN)
{
thighpack->SetThink(&CBaseEntity::SUB_Remove);
thighpack->pev->nextthink = gpGlobals->time + 0.1;
}
}
#endif
#ifdef REGAMEDLL_FIXES #ifdef REGAMEDLL_FIXES
UTIL_RemoveOther("gib"); UTIL_RemoveOther("gib");
@ -3504,12 +3517,12 @@ void CHalfLifeMultiplay::__MAKE_VHOOK(ClientDisconnected)(edict_t *pClient)
{ {
pPlayer->DropPlayerItem("weapon_c4"); pPlayer->DropPlayerItem("weapon_c4");
} }
#ifndef REGAMEDLL_FIXES
if (pPlayer->m_bHasDefuser) if (pPlayer->m_bHasDefuser)
{ {
pPlayer->DropPlayerItem("item_thighpack"); pPlayer->DropPlayerItem("item_thighpack");
} }
#endif
if (pPlayer->m_bIsVIP) if (pPlayer->m_bIsVIP)
{ {
m_pVIP = NULL; m_pVIP = NULL;

View File

@ -1446,6 +1446,9 @@ void packPlayerNade(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
if (!pItem) if (!pItem)
return; return;
if (pPlayer->m_rgAmmo[pItem->PrimaryAmmoIndex()] <= 0)
return;
const char *modelName = GetCSModelName(pItem->m_iId); const char *modelName = GetCSModelName(pItem->m_iId);
if (modelName) if (modelName)
{ {
@ -1463,17 +1466,6 @@ void packPlayerNade(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
break; break;
} }
auto& ammoNades = pPlayer->m_rgAmmo[ pItem->PrimaryAmmoIndex() ];
if (pItem->m_flStartThrow != 0)
{
if (ammoNades < 2)
return;
ammoNades--;
}
else if (pItem->m_flReleaseThrow > 0 && ammoNades < 1)
return;
Vector vecAngles = pPlayer->pev->angles; Vector vecAngles = pPlayer->pev->angles;
Vector dir(Q_cos(vecAngles.y) * flOffset, Q_sin(vecAngles.y) * flOffset, 0.0f); Vector dir(Q_cos(vecAngles.y) * flOffset, Q_sin(vecAngles.y) * flOffset, 0.0f);
@ -1596,10 +1588,10 @@ void EXT_FUNC CBasePlayer::__API_HOOK(GiveDefaultItems)()
case CT: case CT:
{ {
if (!HasRestrictItem(ITEM_KNIFE, ITEM_TYPE_EQUIPPED)) { if (!HasRestrictItem(ITEM_KNIFE, ITEM_TYPE_EQUIPPED)) {
GiveNamedItem("weapon_knife"); GiveNamedItemEx("weapon_knife");
} }
if (!HasRestrictItem(ITEM_USP, ITEM_TYPE_EQUIPPED)) { if (!HasRestrictItem(ITEM_USP, ITEM_TYPE_EQUIPPED)) {
GiveNamedItem("weapon_usp"); GiveNamedItemEx("weapon_usp");
GiveAmmo(m_bIsVIP ? 12 : 24, "45acp"); GiveAmmo(m_bIsVIP ? 12 : 24, "45acp");
} }
@ -1608,10 +1600,10 @@ void EXT_FUNC CBasePlayer::__API_HOOK(GiveDefaultItems)()
case TERRORIST: case TERRORIST:
{ {
if (!HasRestrictItem(ITEM_KNIFE, ITEM_TYPE_EQUIPPED)) { if (!HasRestrictItem(ITEM_KNIFE, ITEM_TYPE_EQUIPPED)) {
GiveNamedItem("weapon_knife"); GiveNamedItemEx("weapon_knife");
} }
if (!HasRestrictItem(ITEM_GLOCK18, ITEM_TYPE_EQUIPPED)) { if (!HasRestrictItem(ITEM_GLOCK18, ITEM_TYPE_EQUIPPED)) {
GiveNamedItem("weapon_glock18"); GiveNamedItemEx("weapon_glock18");
GiveAmmo(40, "9mm"); GiveAmmo(40, "9mm");
} }
@ -1715,6 +1707,9 @@ void CBasePlayer::RemoveAllItems(BOOL removeSuit)
#ifdef REGAMEDLL_FIXES #ifdef REGAMEDLL_FIXES
m_iHideHUD |= HIDEHUD_WEAPONS; m_iHideHUD |= HIDEHUD_WEAPONS;
m_bHasNightVision = false;
SendItemStatus();
#endif #endif
// send Selected Weapon Message to our client // send Selected Weapon Message to our client
@ -1825,6 +1820,55 @@ void CBasePlayer::SetProgressBarTime2(int time, float timeElapsed)
} }
} }
void CBasePlayer::NightVisionToggle(int status, bool playSound)
{
MESSAGE_BEGIN(MSG_ONE, gmsgNVGToggle, NULL, pev);
WRITE_BYTE(status);
MESSAGE_END();
if (status == STATUS_NIGHTVISION_ON)
{
m_bNightVisionOn = true;
if (playSound)
EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/nvg_on.wav", RANDOM_FLOAT(0.92, 1), ATTN_NORM);
}
else if (status == STATUS_NIGHTVISION_OFF)
{
m_bNightVisionOn = false;
if (playSound)
EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/nvg_off.wav", RANDOM_FLOAT(0.92, 1), ATTN_NORM);
}
for (int i = 1; i <= gpGlobals->maxClients; ++i)
{
CBasePlayer *pObserver = UTIL_PlayerByIndex(i);
if (pObserver && pObserver->IsObservingPlayer(this))
{
MESSAGE_BEGIN(MSG_ONE, gmsgNVGToggle, NULL, pObserver->pev);
WRITE_BYTE(status);
MESSAGE_END();
if (status == STATUS_NIGHTVISION_ON)
{
pObserver->m_bNightVisionOn = true;
if (playSound)
EMIT_SOUND(ENT(pObserver->pev), CHAN_ITEM, "items/nvg_on.wav", RANDOM_FLOAT(0.92, 1), ATTN_NORM);
}
else if (status == STATUS_NIGHTVISION_OFF)
{
pObserver->m_bNightVisionOn = false;
if (playSound)
EMIT_SOUND(ENT(pObserver->pev), CHAN_ITEM, "items/nvg_off.wav", RANDOM_FLOAT(0.92, 1), ATTN_NORM);
}
}
}
}
void BuyZoneIcon_Set(CBasePlayer *player) void BuyZoneIcon_Set(CBasePlayer *player)
{ {
MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, NULL, player->pev); MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, NULL, player->pev);
@ -2075,28 +2119,7 @@ void EXT_FUNC CBasePlayer::__API_VHOOK(Killed)(entvars_t *pevAttacker, int iGib)
g_pGameRules->PlayerKilled(this, pevAttacker, g_pevLastInflictor); g_pGameRules->PlayerKilled(this, pevAttacker, g_pevLastInflictor);
} }
MESSAGE_BEGIN(MSG_ONE, gmsgNVGToggle, NULL, pev); NightVisionToggle(STATUS_NIGHTVISION_OFF, false);
WRITE_BYTE(0);
MESSAGE_END();
m_bNightVisionOn = false;
for (int i = 1; i <= gpGlobals->maxClients; ++i)
{
CBasePlayer *pObserver = UTIL_PlayerByIndex(i);
if (!pObserver)
continue;
if (pObserver->IsObservingPlayer(this))
{
MESSAGE_BEGIN(MSG_ONE, gmsgNVGToggle, NULL, pObserver->pev);
WRITE_BYTE(0);
MESSAGE_END();
pObserver->m_bNightVisionOn = false;
}
}
if (m_pTank) if (m_pTank)
{ {
@ -2121,26 +2144,48 @@ void EXT_FUNC CBasePlayer::__API_VHOOK(Killed)(entvars_t *pevAttacker, int iGib)
case WEAPON_HEGRENADE: case WEAPON_HEGRENADE:
{ {
CHEGrenade *pHEGrenade = static_cast<CHEGrenade *>(m_pActiveItem); CHEGrenade *pHEGrenade = static_cast<CHEGrenade *>(m_pActiveItem);
#ifdef REGAMEDLL_FIXES
if ((pHEGrenade->m_flStartThrow != 0 || (pev->button & IN_ATTACK)) && m_rgAmmo[ pHEGrenade->m_iPrimaryAmmoType ])
#else
if ((pev->button & IN_ATTACK) && m_rgAmmo[ pHEGrenade->m_iPrimaryAmmoType ]) if ((pev->button & IN_ATTACK) && m_rgAmmo[ pHEGrenade->m_iPrimaryAmmoType ])
#endif
{ {
CGrenade::ShootTimed2(pev, (pev->origin + pev->view_ofs), pev->angles, 1.5, m_iTeam, pHEGrenade->m_usCreateExplosion); CGrenade::ShootTimed2(pev, (pev->origin + pev->view_ofs), pev->angles, 1.5, m_iTeam, pHEGrenade->m_usCreateExplosion);
#ifdef REGAMEDLL_FIXES
--m_rgAmmo[ pHEGrenade->m_iPrimaryAmmoType ];
#endif
} }
break; break;
} }
case WEAPON_FLASHBANG: case WEAPON_FLASHBANG:
{ {
if ((pev->button & IN_ATTACK) && m_rgAmmo[ ((CBasePlayerWeapon *)m_pActiveItem)->m_iPrimaryAmmoType ]) CFlashbang *pFlash = static_cast<CFlashbang *>(m_pActiveItem);
#ifdef REGAMEDLL_FIXES
if ((pFlash->m_flStartThrow != 0 || (pev->button & IN_ATTACK)) && m_rgAmmo[ pFlash->m_iPrimaryAmmoType ])
#else
if ((pev->button & IN_ATTACK) && m_rgAmmo[ pFlash->m_iPrimaryAmmoType ])
#endif
{ {
CGrenade::ShootTimed(pev, (pev->origin + pev->view_ofs), pev->angles, 1.5); CGrenade::ShootTimed(pev, (pev->origin + pev->view_ofs), pev->angles, 1.5);
#ifdef REGAMEDLL_FIXES
--m_rgAmmo[ pFlash->m_iPrimaryAmmoType ];
#endif
} }
break; break;
} }
case WEAPON_SMOKEGRENADE: case WEAPON_SMOKEGRENADE:
{ {
CSmokeGrenade *pSmoke = static_cast<CSmokeGrenade *>(m_pActiveItem); CSmokeGrenade *pSmoke = static_cast<CSmokeGrenade *>(m_pActiveItem);
#ifdef REGAMEDLL_FIXES
if ((pSmoke->m_flStartThrow != 0 || (pev->button & IN_ATTACK)) && m_rgAmmo[ pSmoke->m_iPrimaryAmmoType ])
#else
if ((pev->button & IN_ATTACK) && m_rgAmmo[ pSmoke->m_iPrimaryAmmoType ]) if ((pev->button & IN_ATTACK) && m_rgAmmo[ pSmoke->m_iPrimaryAmmoType ])
#endif
{ {
CGrenade::ShootSmokeGrenade(pev, (pev->origin + pev->view_ofs), pev->angles, 1.5, pSmoke->m_usCreateSmoke); CGrenade::ShootSmokeGrenade(pev, (pev->origin + pev->view_ofs), pev->angles, 1.5, pSmoke->m_usCreateSmoke);
#ifdef REGAMEDLL_FIXES
--m_rgAmmo[ pSmoke->m_iPrimaryAmmoType ];
#endif
} }
break; break;
} }
@ -2159,6 +2204,11 @@ void EXT_FUNC CBasePlayer::__API_VHOOK(Killed)(entvars_t *pevAttacker, int iGib)
pev->flags &= ~FL_ONGROUND; pev->flags &= ~FL_ONGROUND;
#ifdef REGAMEDLL_FIXES
// FlashlightTurnOff()
pev->effects &= ~EF_DIMLIGHT;
#endif
if (fadetoblack.value == 0.0) if (fadetoblack.value == 0.0)
{ {
pev->iuser1 = OBS_CHASE_FREE; pev->iuser1 = OBS_CHASE_FREE;
@ -2257,14 +2307,26 @@ void EXT_FUNC CBasePlayer::__API_VHOOK(Killed)(entvars_t *pevAttacker, int iGib)
if (m_bHasC4) if (m_bHasC4)
{ {
DropPlayerItem("weapon_c4"); DropPlayerItem("weapon_c4");
// NOTE: It is already does reset inside DropPlayerItem
#ifndef REGAMEDLL_FIXES
SetProgressBarTime(0); SetProgressBarTime(0);
#endif
} }
else if (m_bHasDefuser) else if (m_bHasDefuser)
{ {
m_bHasDefuser = false; m_bHasDefuser = false;
pev->body = 0; pev->body = 0;
#ifndef REGAMEDLL_FIXES
GiveNamedItem("item_thighpack"); GiveNamedItem("item_thighpack");
#else
CItem *pItem = (CItem *)CBaseEntity::Create("item_thighpack", pev->origin, pev->angles, edict());
if (pItem)
{
pItem->pev->spawnflags |= SF_NORESPAWN;
pItem->SetThink(&CBaseEntity::SUB_Remove);
pItem->pev->nextthink = gpGlobals->time + 300;
}
#endif
MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, NULL, pev); MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, NULL, pev);
WRITE_BYTE(STATUSICON_HIDE); WRITE_BYTE(STATUSICON_HIDE);
WRITE_STRING("defuser"); WRITE_STRING("defuser");
@ -2297,10 +2359,14 @@ void EXT_FUNC CBasePlayer::__API_VHOOK(Killed)(entvars_t *pevAttacker, int iGib)
if ((pev->health < -9000 && iGib != GIB_NEVER) || iGib == GIB_ALWAYS) if ((pev->health < -9000 && iGib != GIB_NEVER) || iGib == GIB_ALWAYS)
{ {
#ifndef REGAMEDLL_FIXES
pev->solid = SOLID_NOT; pev->solid = SOLID_NOT;
#endif
GibMonster(); GibMonster();
pev->effects |= EF_NODRAW; pev->effects |= EF_NODRAW;
#ifndef REGAMEDLL_FIXES
CSGameRules()->CheckWinConditions(); CSGameRules()->CheckWinConditions();
#endif
return; return;
} }
@ -3537,6 +3603,11 @@ void EXT_FUNC CBasePlayer::__API_HOOK(Disappear)()
pev->solid = SOLID_NOT; pev->solid = SOLID_NOT;
pev->flags &= ~FL_ONGROUND; pev->flags &= ~FL_ONGROUND;
#ifdef REGAMEDLL_FIXES
// FlashlightTurnOff()
pev->effects &= ~EF_DIMLIGHT;
#endif
SetSuitUpdate(NULL, FALSE, 0); SetSuitUpdate(NULL, FALSE, 0);
m_iClientHealth = 0; m_iClientHealth = 0;
@ -3558,13 +3629,26 @@ void EXT_FUNC CBasePlayer::__API_HOOK(Disappear)()
if (m_bHasC4) if (m_bHasC4)
{ {
DropPlayerItem("weapon_c4"); DropPlayerItem("weapon_c4");
// NOTE: It is already does reset inside DropPlayerItem
#ifndef REGAMEDLL_FIXES
SetProgressBarTime(0); SetProgressBarTime(0);
#endif
} }
else if (m_bHasDefuser) else if (m_bHasDefuser)
{ {
m_bHasDefuser = false; m_bHasDefuser = false;
pev->body = 0; pev->body = 0;
#ifndef REGAMEDLL_FIXES
GiveNamedItem("item_thighpack"); GiveNamedItem("item_thighpack");
#else
CItem *pItem = (CItem *)CBaseEntity::Create("item_thighpack", pev->origin, pev->angles, edict());
if (pItem)
{
pItem->pev->spawnflags |= SF_NORESPAWN;
pItem->SetThink(&CBaseEntity::SUB_Remove);
pItem->pev->nextthink = gpGlobals->time + 300;
}
#endif
MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, NULL, pev); MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, NULL, pev);
WRITE_BYTE(STATUSICON_HIDE); WRITE_BYTE(STATUSICON_HIDE);
@ -3925,7 +4009,11 @@ void CBasePlayer::PlayerUse()
} }
} }
#ifdef REGAMEDLL_FIXES
bool useNewHostages = (!TheNavAreaList.empty() && AreImprovAllowed());
#else
bool useNewHostages = !TheNavAreaList.empty(); bool useNewHostages = !TheNavAreaList.empty();
#endif
CBaseEntity *pObject = NULL; CBaseEntity *pObject = NULL;
CBaseEntity *pClosest = NULL; CBaseEntity *pClosest = NULL;
Vector vecLOS; Vector vecLOS;
@ -5256,6 +5344,7 @@ void EXT_FUNC CBasePlayer::__API_VHOOK(Spawn)()
#ifdef REGAMEDLL_FIXES #ifdef REGAMEDLL_FIXES
pev->watertype = CONTENTS_EMPTY; pev->watertype = CONTENTS_EMPTY;
pev->waterlevel = 0; pev->waterlevel = 0;
pev->basevelocity = g_vecZero; // pushed by trigger_push
#endif #endif
m_bitsHUDDamage = -1; m_bitsHUDDamage = -1;
@ -5460,10 +5549,14 @@ void EXT_FUNC CBasePlayer::__API_VHOOK(Spawn)()
for (i = 0; i < MAX_AMMO_SLOTS; ++i) for (i = 0; i < MAX_AMMO_SLOTS; ++i)
m_rgAmmo[i] = 0; m_rgAmmo[i] = 0;
m_bHasPrimary = false;
m_bHasNightVision = false; m_bHasNightVision = false;
SendItemStatus(); SendItemStatus();
#ifndef REGAMEDLL_FIXES
m_bHasPrimary = false;
#else
m_iHideHUD |= HIDEHUD_WEAPONS;
#endif
} }
else else
{ {
@ -5471,25 +5564,7 @@ void EXT_FUNC CBasePlayer::__API_VHOOK(Spawn)()
m_rgAmmoLast[i] = -1; m_rgAmmoLast[i] = -1;
} }
MESSAGE_BEGIN(MSG_ONE, gmsgNVGToggle, NULL, pev); NightVisionToggle(STATUS_NIGHTVISION_OFF, false);
WRITE_BYTE(0);
MESSAGE_END();
m_bNightVisionOn = false;
for (i = 1; i <= gpGlobals->maxClients; ++i)
{
CBasePlayer *pObserver = UTIL_PlayerByIndex(i);
if (pObserver && pObserver->IsObservingPlayer(this))
{
MESSAGE_BEGIN(MSG_ONE, gmsgNVGToggle, NULL, pObserver->pev);
WRITE_BYTE(0);
MESSAGE_END();
pObserver->m_bNightVisionOn = false;
}
}
m_lastx = m_lasty = 0; m_lastx = m_lasty = 0;
@ -5698,7 +5773,12 @@ void CBasePlayer::Reset()
m_bNotKilled = false; m_bNotKilled = false;
#ifdef REGAMEDLL_FIXES
RemoveAllItems(TRUE);
#else
RemoveShield(); RemoveShield();
#endif
CheckStartMoney(); CheckStartMoney();
AddAccount(startmoney.value, RT_PLAYER_RESET); AddAccount(startmoney.value, RT_PLAYER_RESET);
@ -6179,8 +6259,13 @@ void CBasePlayer::CheatImpulseCommands(int iImpulse)
break; break;
case 101: case 101:
gEvilImpulse101 = TRUE; gEvilImpulse101 = TRUE;
#ifdef REGAMEDLL_ADD
AddAccount(int(maxmoney.value));
ALERT(at_console, "Crediting %s with $%d\n", STRING(pev->netname), int(maxmoney.value));
#else
AddAccount(16000); AddAccount(16000);
ALERT(at_console, "Crediting %s with $16000\n", STRING(pev->netname)); ALERT(at_console, "Crediting %s with $16000\n", STRING(pev->netname));
#endif
break; break;
case 102: case 102:
CGib::SpawnRandomGibs(pev, 1, 1); CGib::SpawnRandomGibs(pev, 1, 1);
@ -6535,6 +6620,13 @@ BOOL EXT_FUNC CBasePlayer::__API_VHOOK(RemovePlayerItem)(CBasePlayerItem *pItem)
pev->viewmodel = 0; pev->viewmodel = 0;
pev->weaponmodel = 0; pev->weaponmodel = 0;
#ifdef REGAMEDLL_FIXES
// no more weapon
if (pev->weapons == (1 << WEAPON_SUIT)) {
m_iHideHUD |= HIDEHUD_WEAPONS;
}
#endif
} }
else if (m_pLastItem == pItem) else if (m_pLastItem == pItem)
m_pLastItem = NULL; m_pLastItem = NULL;
@ -7360,14 +7452,22 @@ void CBasePlayer::UpdateStatusBar()
CBaseEntity *pEntity = CBaseEntity::Instance(tr.pHit); CBaseEntity *pEntity = CBaseEntity::Instance(tr.pHit);
bool isVisiblePlayer = ((TheBots == NULL || !TheBots->IsLineBlockedBySmoke(&pev->origin, &pEntity->pev->origin)) && pEntity->Classify() == CLASS_PLAYER); bool isVisiblePlayer = ((TheBots == NULL || !TheBots->IsLineBlockedBySmoke(&pev->origin, &pEntity->pev->origin)) && pEntity->Classify() == CLASS_PLAYER);
#ifdef REGAMEDLL_ADD
bool isFFA = CSGameRules()->IsFreeForAll();
#endif
if (gpGlobals->time >= m_blindUntilTime && isVisiblePlayer) if (gpGlobals->time >= m_blindUntilTime && isVisiblePlayer)
{ {
CBasePlayer *pTarget = (CBasePlayer *)pEntity; CBasePlayer *pTarget = (CBasePlayer *)pEntity;
newSBarState[ SBAR_ID_TARGETNAME ] = ENTINDEX(pTarget->edict()); newSBarState[ SBAR_ID_TARGETNAME ] = ENTINDEX(pTarget->edict());
#ifdef REGAMEDLL_ADD
newSBarState[SBAR_ID_TARGETTYPE] = (!isFFA && pTarget->m_iTeam == m_iTeam) ? SBAR_TARGETTYPE_TEAMMATE : SBAR_TARGETTYPE_ENEMY;
if ((!isFFA && pTarget->m_iTeam == m_iTeam) || IsObserver())
#else
newSBarState[ SBAR_ID_TARGETTYPE ] = (pTarget->m_iTeam == m_iTeam) ? SBAR_TARGETTYPE_TEAMMATE : SBAR_TARGETTYPE_ENEMY; newSBarState[ SBAR_ID_TARGETTYPE ] = (pTarget->m_iTeam == m_iTeam) ? SBAR_TARGETTYPE_TEAMMATE : SBAR_TARGETTYPE_ENEMY;
if (pTarget->m_iTeam == m_iTeam || IsObserver()) if (pTarget->m_iTeam == m_iTeam || IsObserver())
#endif
{ {
if (playerid.value != PLAYERID_MODE_OFF || IsObserver()) if (playerid.value != PLAYERID_MODE_OFF || IsObserver())
Q_strcpy(sbuf0, "1 %c1: %p2\n2 %h: %i3%%"); Q_strcpy(sbuf0, "1 %c1: %p2\n2 %h: %i3%%");
@ -7382,7 +7482,11 @@ void CBasePlayer::UpdateStatusBar()
HintMessage("#Hint_spotted_a_friend"); HintMessage("#Hint_spotted_a_friend");
} }
} }
#ifdef REGAMEDLL_ADD
else if (isFFA || !IsObserver())
#else
else if (!IsObserver()) else if (!IsObserver())
#endif
{ {
if (playerid.value != PLAYERID_MODE_TEAMONLY && playerid.value != PLAYERID_MODE_OFF) if (playerid.value != PLAYERID_MODE_TEAMONLY && playerid.value != PLAYERID_MODE_OFF)
Q_strcpy(sbuf0, "1 %c1: %p2"); Q_strcpy(sbuf0, "1 %c1: %p2");
@ -7527,6 +7631,13 @@ void EXT_FUNC CBasePlayer::__API_HOOK(DropPlayerItem)(const char *pszItemName)
// take item off hud // take item off hud
pev->weapons &= ~(1 << pWeapon->m_iId); pev->weapons &= ~(1 << pWeapon->m_iId);
#ifdef REGAMEDLL_FIXES
// no more weapon
if(pev->weapons == (1 << WEAPON_SUIT)) {
m_iHideHUD |= HIDEHUD_WEAPONS;
}
#endif
g_pGameRules->GetNextBestWeapon(this, pWeapon); g_pGameRules->GetNextBestWeapon(this, pWeapon);
UTIL_MakeVectors(pev->angles); UTIL_MakeVectors(pev->angles);
@ -7777,6 +7888,7 @@ void CBasePlayer::SwitchTeam()
SendItemStatus(); SendItemStatus();
SetProgressBarTime(0); SetProgressBarTime(0);
#ifndef REGAMEDLL_FIXES
for (int i = 0; i < MAX_ITEM_TYPES; ++i) for (int i = 0; i < MAX_ITEM_TYPES; ++i)
{ {
m_pActiveItem = m_rgpPlayerItems[ i ]; m_pActiveItem = m_rgpPlayerItems[ i ];
@ -7787,6 +7899,7 @@ void CBasePlayer::SwitchTeam()
m_rgpPlayerItems[i] = NULL; m_rgpPlayerItems[i] = NULL;
} }
} }
#endif
} }
szOldTeam = GetTeam(oldTeam); szOldTeam = GetTeam(oldTeam);

View File

@ -611,6 +611,7 @@ public:
bool IsObservingPlayer(CBasePlayer *pPlayer); bool IsObservingPlayer(CBasePlayer *pPlayer);
bool CanSwitchObserverModes() const { return m_canSwitchObserverModes; } bool CanSwitchObserverModes() const { return m_canSwitchObserverModes; }
void SendItemStatus(); void SendItemStatus();
void NightVisionToggle(int status, bool playSound);
edict_t *EntSelectSpawnPoint(); edict_t *EntSelectSpawnPoint();
void SetScoreAttrib(CBasePlayer *dest); void SetScoreAttrib(CBasePlayer *dest);
void ReloadWeapons(CBasePlayerItem *pWeapon = nullptr, bool bForceReload = false, bool bForceRefill = false); void ReloadWeapons(CBasePlayerItem *pWeapon = nullptr, bool bForceReload = false, bool bForceRefill = false);

View File

@ -363,7 +363,10 @@ void W_Precache()
UTIL_PrecacheOther("item_antidote"); UTIL_PrecacheOther("item_antidote");
#ifndef REGAMEDLL_FIXES #ifndef REGAMEDLL_FIXES
UTIL_PrecacheOther("item_security"); UTIL_PrecacheOther("item_security");
#else
UTIL_PrecacheOther("item_sodacan");
#endif #endif
UTIL_PrecacheOther("item_longjump"); UTIL_PrecacheOther("item_longjump");
UTIL_PrecacheOther("item_kevlar"); UTIL_PrecacheOther("item_kevlar");
UTIL_PrecacheOther("item_assaultsuit"); UTIL_PrecacheOther("item_assaultsuit");
@ -1550,6 +1553,10 @@ void CBasePlayerWeapon::__MAKE_VHOOK(RetireWeapon)()
m_pPlayer->pev->viewmodel = iStringNull; m_pPlayer->pev->viewmodel = iStringNull;
m_pPlayer->pev->weaponmodel = iStringNull; m_pPlayer->pev->weaponmodel = iStringNull;
#ifdef REGAMEDLL_FIXES
// grenade/c4 switch after throw
Holster();
#endif
g_pGameRules->GetNextBestWeapon(m_pPlayer, this); g_pGameRules->GetNextBestWeapon(m_pPlayer, this);
} }
@ -1717,6 +1724,9 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
bool bRemove = true; bool bRemove = true;
bool bEmitSound = false; bool bEmitSound = false;
#ifdef REGAMEDLL_FIXES
static const int ammoGrenade = 1;
#endif
// go through my weapons and try to give the usable ones to the player. // go through my weapons and try to give the usable ones to the player.
// it's important the the player be given ammo first, so the weapons code doesn't refuse // it's important the the player be given ammo first, so the weapons code doesn't refuse
// to deploy a better weapon that the player may pick up because he has no ammo for it. // to deploy a better weapon that the player may pick up because he has no ammo for it.
@ -1731,7 +1741,7 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
while (pItem) while (pItem)
{ {
if ((pPlayer->HasShield() && pItem->m_iId == WEAPON_ELITE) if ((pPlayer->HasShield() && pItem->m_iId == WEAPON_ELITE)
|| (pPlayer->IsBot() && (TheCSBots() != NULL && !TheCSBots()->IsWeaponUseable(pItem)))) || (pPlayer->IsBot() && (TheCSBots() != NULL && !TheCSBots()->IsWeaponUseable((WeaponIdType)pItem->m_iId))))
{ {
return; return;
} }
@ -1829,6 +1839,19 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
#ifdef REGAMEDLL_FIXES #ifdef REGAMEDLL_FIXES
auto info = GetWeaponInfo(pGrenade->m_iId); auto info = GetWeaponInfo(pGrenade->m_iId);
if (info && playerGrenades < info->maxRounds) if (info && playerGrenades < info->maxRounds)
{
int boxGrenades = m_rgAmmo[ammoGrenade];
if (playerGrenades >= 1 && boxGrenades > 1)
{
if (!FStringNull(m_rgiszAmmo[ammoGrenade]))
{
pPlayer->GiveAmmo(1, (char *)STRING(m_rgiszAmmo[ammoGrenade]), info->maxRounds);
EMIT_SOUND(ENT(pPlayer->pev), CHAN_ITEM, "items/9mmclip1.wav", VOL_NORM, ATTN_NORM);
m_rgAmmo[ammoGrenade]--;
}
}
else
{ {
auto pNext = m_rgpPlayerItems[i]->m_pNext; auto pNext = m_rgpPlayerItems[i]->m_pNext;
if (pPlayer->AddPlayerItem(pItem)) if (pPlayer->AddPlayerItem(pItem))
@ -1841,6 +1864,7 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
m_rgpPlayerItems[i] = pItem = pNext; m_rgpPlayerItems[i] = pItem = pNext;
continue; continue;
} }
}
#else #else
int maxGrenades = 0; int maxGrenades = 0;
@ -1915,6 +1939,12 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
// there's some ammo of this type. // there's some ammo of this type.
pPlayer->GiveAmmo(m_rgAmmo[n], (char *)STRING(m_rgiszAmmo[n]), MaxAmmoCarry(m_rgiszAmmo[n])); pPlayer->GiveAmmo(m_rgAmmo[n], (char *)STRING(m_rgiszAmmo[n]), MaxAmmoCarry(m_rgiszAmmo[n]));
#ifdef REGAMEDLL_FIXES
if (n == ammoGrenade)
{
EMIT_SOUND(ENT(pPlayer->pev), CHAN_ITEM, "items/9mmclip1.wav", VOL_NORM, ATTN_NORM);
}
#endif
// now empty the ammo from the weaponbox since we just gave it to the player // now empty the ammo from the weaponbox since we just gave it to the player
m_rgiszAmmo[n] = iStringNull; m_rgiszAmmo[n] = iStringNull;
m_rgAmmo[n] = 0; m_rgAmmo[n] = 0;
@ -2264,20 +2294,20 @@ struct ArmouryItemStruct
int giveAmount; int giveAmount;
int maxRounds; int maxRounds;
} armouryItemInfo[] = { } armouryItemInfo[] = {
{ "weapon_mp5navy", "9mm", 60, MAX_AMMO_9MM }, // ARMOURY_MP5NAVY { "weapon_mp5navy", "9mm", MAX_AMMO_9MM, MAX_AMMO_9MM }, // ARMOURY_MP5NAVY
{ "weapon_tmp", "9mm", 60, MAX_AMMO_9MM }, // ARMOURY_TMP { "weapon_tmp", "9mm", MAX_AMMO_9MM, MAX_AMMO_9MM }, // ARMOURY_TMP
{ "weapon_p90", "57mm", 50, MAX_AMMO_57MM }, // ARMOURY_P90 { "weapon_p90", "57mm", MAX_AMMO_57MM, MAX_AMMO_57MM }, // ARMOURY_P90
{ "weapon_mac10", "45acp", 60, MAX_AMMO_45ACP }, // ARMOURY_MAC10 { "weapon_mac10", "45acp", MAX_AMMO_45ACP, MAX_AMMO_45ACP }, // ARMOURY_MAC10
{ "weapon_ak47", "762Nato", 60, MAX_AMMO_762NATO }, // ARMOURY_AK47 { "weapon_ak47", "762Nato", MAX_AMMO_762NATO, MAX_AMMO_762NATO }, // ARMOURY_AK47
{ "weapon_sg552", "556Nato", 60, MAX_AMMO_556NATO }, // ARMOURY_SG552 { "weapon_sg552", "556Nato", MAX_AMMO_556NATO, MAX_AMMO_556NATO }, // ARMOURY_SG552
{ "weapon_m4a1", "556Nato", 60, MAX_AMMO_556NATO }, // ARMOURY_M4A1 { "weapon_m4a1", "556Nato", MAX_AMMO_556NATO, MAX_AMMO_556NATO }, // ARMOURY_M4A1
{ "weapon_aug", "556Nato", 60, MAX_AMMO_556NATO }, // ARMOURY_AUG { "weapon_aug", "556Nato", MAX_AMMO_556NATO, MAX_AMMO_556NATO }, // ARMOURY_AUG
{ "weapon_scout", "762Nato", 30, MAX_AMMO_762NATO }, // ARMOURY_SCOUT { "weapon_scout", "762Nato", MAX_AMMO_762NATO, MAX_AMMO_762NATO }, // ARMOURY_SCOUT
{ "weapon_g3sg1", "762Nato", 30, MAX_AMMO_762NATO }, // ARMOURY_G3SG1 { "weapon_g3sg1", "762Nato", MAX_AMMO_762NATO, MAX_AMMO_762NATO }, // ARMOURY_G3SG1
{ "weapon_awp", "338Magnum", 20, MAX_AMMO_338MAGNUM }, // ARMOURY_AWP { "weapon_awp", "338Magnum", MAX_AMMO_338MAGNUM, MAX_AMMO_338MAGNUM }, // ARMOURY_AWP
{ "weapon_m3", "buckshot", 24, MAX_AMMO_BUCKSHOT }, // ARMOURY_M3 { "weapon_m3", "buckshot", MAX_AMMO_BUCKSHOT, MAX_AMMO_BUCKSHOT }, // ARMOURY_M3
{ "weapon_xm1014", "buckshot", 24, MAX_AMMO_BUCKSHOT }, // ARMOURY_XM1014 { "weapon_xm1014", "buckshot", MAX_AMMO_BUCKSHOT, MAX_AMMO_BUCKSHOT }, // ARMOURY_XM1014
{ "weapon_m249", "556NatoBox", 60, MAX_AMMO_556NATOBOX }, // ARMOURY_M249 { "weapon_m249", "556NatoBox", MAX_AMMO_556NATOBOX, MAX_AMMO_556NATOBOX }, // ARMOURY_M249
{ NULL, NULL, 0, 0 }, // ARMOURY_FLASHBANG { NULL, NULL, 0, 0 }, // ARMOURY_FLASHBANG
{ NULL, NULL, 0, 0 }, // ARMOURY_HEGRENADE { NULL, NULL, 0, 0 }, // ARMOURY_HEGRENADE
@ -2286,16 +2316,16 @@ struct ArmouryItemStruct
{ NULL, NULL, 0, 0 }, // ARMOURY_SMOKEGRENADE { NULL, NULL, 0, 0 }, // ARMOURY_SMOKEGRENADE
{ NULL, NULL, 0, 0 }, // ARMOURY_SHIELD { NULL, NULL, 0, 0 }, // ARMOURY_SHIELD
{ "weapon_famas", "556Nato", 90, MAX_AMMO_556NATO }, // ARMOURY_FAMAS { "weapon_famas", "556Nato", MAX_AMMO_556NATO, MAX_AMMO_556NATO }, // ARMOURY_FAMAS
{ "weapon_sg550", "556Nato", 90, MAX_AMMO_556NATO }, // ARMOURY_SG550 { "weapon_sg550", "556Nato", MAX_AMMO_556NATO, MAX_AMMO_556NATO }, // ARMOURY_SG550
{ "weapon_galil", "556Nato", 90, MAX_AMMO_556NATO }, // ARMOURY_GALIL { "weapon_galil", "556Nato", MAX_AMMO_556NATO, MAX_AMMO_556NATO }, // ARMOURY_GALIL
{ "weapon_ump45", "45acp", 100, MAX_AMMO_45ACP }, // ARMOURY_UMP45 { "weapon_ump45", "45acp", MAX_AMMO_45ACP, MAX_AMMO_45ACP }, // ARMOURY_UMP45
{ "weapon_glock18", "9mm", 120, MAX_AMMO_9MM }, // ARMOURY_GLOCK18 { "weapon_glock18", "9mm", MAX_AMMO_9MM, MAX_AMMO_9MM }, // ARMOURY_GLOCK18
{ "weapon_usp", "45acp", 100, MAX_AMMO_45ACP }, // ARMOURY_USP { "weapon_usp", "45acp", MAX_AMMO_45ACP, MAX_AMMO_45ACP }, // ARMOURY_USP
{ "weapon_elite", "9mm", 120, MAX_AMMO_9MM }, // ARMOURY_ELITE { "weapon_elite", "9mm", MAX_AMMO_9MM, MAX_AMMO_9MM }, // ARMOURY_ELITE
{ "weapon_fiveseven", "57mm", 100, MAX_AMMO_57MM }, // ARMOURY_FIVESEVEN { "weapon_fiveseven", "57mm", MAX_AMMO_57MM, MAX_AMMO_57MM }, // ARMOURY_FIVESEVEN
{ "weapon_p228", "357SIG", 52, MAX_AMMO_357SIG }, // ARMOURY_P228 { "weapon_p228", "357SIG", MAX_AMMO_357SIG, MAX_AMMO_357SIG }, // ARMOURY_P228
{ "weapon_deagle", "50AE", 35, MAX_AMMO_50AE }, // ARMOURY_DEAGLE { "weapon_deagle", "50AE", MAX_AMMO_50AE, MAX_AMMO_50AE }, // ARMOURY_DEAGLE
}; };
void CArmoury::ArmouryTouch(CBaseEntity *pOther) void CArmoury::ArmouryTouch(CBaseEntity *pOther)
@ -2308,6 +2338,11 @@ void CArmoury::ArmouryTouch(CBaseEntity *pOther)
if (p->m_bIsVIP) if (p->m_bIsVIP)
return; return;
#ifdef REGAMEDLL_FIXES
if (p->IsBot() && m_iItem != ARMOURY_KEVLAR && m_iItem != ARMOURY_ASSAULT && TheCSBots() && !TheCSBots()->IsWeaponUseable(GetWeaponIdByArmoury(m_iItem)))
return;
#endif
#ifdef REGAMEDLL_ADD #ifdef REGAMEDLL_ADD
if (p->HasRestrictItem(GetItemIdByArmoury(m_iItem), ITEM_TYPE_TOUCHED)) if (p->HasRestrictItem(GetItemIdByArmoury(m_iItem), ITEM_TYPE_TOUCHED))
return; return;
@ -2373,8 +2408,14 @@ void CArmoury::ArmouryTouch(CBaseEntity *pOther)
} }
case ARMOURY_KEVLAR: case ARMOURY_KEVLAR:
{ {
#ifdef REGAMEDLL_FIXES
if (p->m_iKevlar != ARMOR_NONE && p->pev->armorvalue >= MAX_NORMAL_BATTERY)
#else
if (p->m_iKevlar == ARMOR_KEVLAR) if (p->m_iKevlar == ARMOR_KEVLAR)
#endif
{
return; return;
}
p->GiveNamedItem("item_kevlar"); p->GiveNamedItem("item_kevlar");
m_iCount--; m_iCount--;
@ -2382,8 +2423,14 @@ void CArmoury::ArmouryTouch(CBaseEntity *pOther)
} }
case ARMOURY_ASSAULT: case ARMOURY_ASSAULT:
{ {
if (p->m_iKevlar == ARMOR_VESTHELM) if (p->m_iKevlar == ARMOR_VESTHELM
#ifdef REGAMEDLL_FIXES
&& p->pev->armorvalue >= MAX_NORMAL_BATTERY
#endif
)
{
return; return;
}
p->GiveNamedItem("item_assaultsuit"); p->GiveNamedItem("item_assaultsuit");
m_iCount--; m_iCount--;
@ -2470,3 +2517,39 @@ void CBasePlayerWeapon::InstantReload(bool bCanRefillBPAmmo)
m_pPlayer->TabulateAmmo(); m_pPlayer->TabulateAmmo();
} }
WeaponIdType GetWeaponIdByArmoury(ArmouryItemPack armoury)
{
switch (armoury)
{
case ARMOURY_MP5NAVY: return WEAPON_MP5N;
case ARMOURY_TMP: return WEAPON_TMP;
case ARMOURY_P90: return WEAPON_P90;
case ARMOURY_MAC10: return WEAPON_MAC10;
case ARMOURY_AK47: return WEAPON_AK47;
case ARMOURY_SG552: return WEAPON_SG552;
case ARMOURY_M4A1: return WEAPON_M4A1;
case ARMOURY_AUG: return WEAPON_AUG;
case ARMOURY_SCOUT: return WEAPON_SCOUT;
case ARMOURY_G3SG1: return WEAPON_G3SG1;
case ARMOURY_AWP: return WEAPON_AWP;
case ARMOURY_M3: return WEAPON_M3;
case ARMOURY_XM1014: return WEAPON_XM1014;
case ARMOURY_M249: return WEAPON_M249;
case ARMOURY_FLASHBANG: return WEAPON_FLASHBANG;
case ARMOURY_HEGRENADE: return WEAPON_HEGRENADE;
case ARMOURY_SMOKEGRENADE: return WEAPON_SMOKEGRENADE;
case ARMOURY_SHIELD: return WEAPON_SHIELDGUN;
case ARMOURY_GLOCK18: return WEAPON_GLOCK18;
case ARMOURY_USP: return WEAPON_USP;
case ARMOURY_ELITE: return WEAPON_ELITE;
case ARMOURY_FIVESEVEN: return WEAPON_FIVESEVEN;
case ARMOURY_P228: return WEAPON_P228;
case ARMOURY_DEAGLE: return WEAPON_DEAGLE;
case ARMOURY_FAMAS: return WEAPON_FAMAS;
case ARMOURY_SG550: return WEAPON_SG550;
case ARMOURY_GALIL: return WEAPON_GALIL;
case ARMOURY_UMP45: return WEAPON_UMP45;
default: return WEAPON_NONE;
}
}

View File

@ -1883,4 +1883,6 @@ void UTIL_PrecacheOtherWeapon2(const char *szClassname);
void W_Precache(); void W_Precache();
BOOL CanAttack(float attack_time, float curtime, BOOL isPredicted); BOOL CanAttack(float attack_time, float curtime, BOOL isPredicted);
WeaponIdType GetWeaponIdByArmoury(ArmouryItemPack armoury);
#endif // WEAPONS_H #endif // WEAPONS_H

View File

@ -72,6 +72,13 @@ BOOL CC4::__MAKE_VHOOK(Deploy)()
void CC4::__MAKE_VHOOK(Holster)(int skiplocal) void CC4::__MAKE_VHOOK(Holster)(int skiplocal)
{ {
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5f; m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5f;
#ifdef REGAMEDLL_FIXES
if (m_bStartedArming) {
m_pPlayer->SetProgressBarTime(0);
}
#endif
m_bStartedArming = false; // stop arming sequence m_bStartedArming = false; // stop arming sequence
if (!m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) if (!m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType])
@ -317,7 +324,11 @@ void CC4::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_T
EMIT_SOUND(edict(), CHAN_WEAPON, "weapons/c4_plant.wav", VOL_NORM, ATTN_NORM); EMIT_SOUND(edict(), CHAN_WEAPON, "weapons/c4_plant.wav", VOL_NORM, ATTN_NORM);
#ifdef REGAMEDLL_FIXES
CGrenade::ShootSatchelCharge(pPlayer->pev, pPlayer->pev->origin, Vector(0, 0, 0));
#else
CGrenade::ShootSatchelCharge(m_pPlayer->pev, m_pPlayer->pev->origin, Vector(0, 0, 0)); CGrenade::ShootSatchelCharge(m_pPlayer->pev, m_pPlayer->pev->origin, Vector(0, 0, 0));
#endif
CGrenade *pC4 = NULL; CGrenade *pC4 = NULL;
while ((pC4 = (CGrenade *)UTIL_FindEntityByClassname(pC4, "grenade"))) while ((pC4 = (CGrenade *)UTIL_FindEntityByClassname(pC4, "grenade")))

View File

@ -217,7 +217,22 @@ void CFlashbang::__MAKE_VHOOK(WeaponIdle)()
{ {
// we've finished the throw, restart. // we've finished the throw, restart.
m_flStartThrow = 0; m_flStartThrow = 0;
#ifndef REGAMEDLL_FIXES
RetireWeapon(); RetireWeapon();
#else
if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType])
{
SendWeaponAnim(FLASHBANG_DRAW, UseDecrement() != FALSE);
}
else
{
RetireWeapon();
return;
}
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT(10, 15);
m_flReleaseThrow = -1.0f;
#endif
} }
else if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) else if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType])
{ {