From 8bdca00c9d08ff4e82d5adc58181a8c363ecf320 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Thu, 28 Oct 2021 19:45:19 +0200 Subject: [PATCH 01/15] Host_Say: Update maximum size of array "text". --- regamedll/dlls/client.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/regamedll/dlls/client.cpp b/regamedll/dlls/client.cpp index 5ddf63adb..3d79df07c 100644 --- a/regamedll/dlls/client.cpp +++ b/regamedll/dlls/client.cpp @@ -753,7 +753,11 @@ void Host_Say(edict_t *pEntity, BOOL teamonly) { int j; char *p; +#ifdef REGAMEDLL_FIXES + char text[140]; +#else char text[128]; +#endif char szTemp[256]; const char *cpSay = "say"; const char *cpSayTeam = "say_team"; From 07edcce24e3a28483dc2fcbe39de2bd069ce5770 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Sat, 30 Oct 2021 16:42:49 +0200 Subject: [PATCH 02/15] Change location of "PlayerUse" & "ImpulseCommands" in order to handle more. --- regamedll/dlls/player.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/regamedll/dlls/player.cpp b/regamedll/dlls/player.cpp index c48545051..50b03a1bd 100644 --- a/regamedll/dlls/player.cpp +++ b/regamedll/dlls/player.cpp @@ -5040,6 +5040,11 @@ void EXT_FUNC CBasePlayer::__API_HOOK(PostThink)() } } +#ifdef REGAMEDLL_FIXES + // Handle use events + PlayerUse(); + ImpulseCommands(); +#endif // do weapon stuff ItemPostFrame(); @@ -6296,8 +6301,10 @@ void EXT_FUNC CBasePlayer::__API_HOOK(ImpulseCommands)() { TraceResult tr; +#ifndef REGAMEDLL_FIXES // Handle use events PlayerUse(); +#endif int iImpulse = pev->impulse; @@ -6915,7 +6922,9 @@ void CBasePlayer::ItemPostFrame() #endif return; +#ifndef REGAMEDLL_FIXES ImpulseCommands(); +#endif if (m_pActiveItem) m_pActiveItem->ItemPostFrame(); From 3880d3b23095dc95be978e18e3632756f1477610 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Sun, 31 Oct 2021 06:14:59 +0100 Subject: [PATCH 03/15] Update CAPI_Impl.h --- regamedll/dlls/API/CAPI_Impl.h | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/regamedll/dlls/API/CAPI_Impl.h b/regamedll/dlls/API/CAPI_Impl.h index 1be3dd232..be4e9c209 100644 --- a/regamedll/dlls/API/CAPI_Impl.h +++ b/regamedll/dlls/API/CAPI_Impl.h @@ -906,8 +906,8 @@ class CReGameHookchains: public IReGameHookchains { virtual IReGameHookRegistry_CBasePlayer_JoiningThink *CBasePlayer_JoiningThink(); }; -extern CReGameHookchains g_ReGameHookchains; -extern ReGameFuncs_t g_ReGameApiFuncs; +EXPORT CReGameHookchains g_ReGameHookchains; +EXPORT ReGameFuncs_t g_ReGameApiFuncs; class CReGameApi: public IReGameApi { public: @@ -930,10 +930,3 @@ class CReGameApi: public IReGameApi { EXT_FUNC virtual bool BGetICSEntity(const char *pchVersion) const; EXT_FUNC virtual bool BGetIGameRules(const char *pchVersion) const; }; - -void Regamedll_ChangeString_api(char *&dest, const char *source); -void RadiusDamage_api(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, float flRadius, int iClassIgnore, int bitsDamageType); - -void ClearMultiDamage_api(); -void ApplyMultiDamage_api(entvars_t *pevInflictor, entvars_t *pevAttacker); -void AddMultiDamage_api(entvars_t *pevInflictor, CBaseEntity *pEntity, float flDamage, int bitsDamageType); From fc18b96f6c11db63e6b7f2a40289924af8a06637 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Sun, 31 Oct 2021 06:16:31 +0100 Subject: [PATCH 04/15] Update CAPI_Impl.cpp --- regamedll/dlls/API/CAPI_Impl.cpp | 66 +++++++++----------------------- 1 file changed, 19 insertions(+), 47 deletions(-) diff --git a/regamedll/dlls/API/CAPI_Impl.cpp b/regamedll/dlls/API/CAPI_Impl.cpp index 0fe10a490..47532642b 100644 --- a/regamedll/dlls/API/CAPI_Impl.cpp +++ b/regamedll/dlls/API/CAPI_Impl.cpp @@ -30,12 +30,15 @@ CReGameHookchains g_ReGameHookchains; -int EXT_FUNC Cmd_Argc_api() { - return CMD_ARGC_(); -} +void Regamedll_ChangeString_api(char *&dest, const char *source) +{ + size_t len = Q_strlen(source); + if (dest == nullptr || Q_strlen(dest) != len) { + delete [] dest; + dest = new char [len + 1]; + } -const char *EXT_FUNC Cmd_Argv_api(int i) { - return CMD_ARGV_(i); + Q_strcpy(dest, source); } CGrenade *PlantBomb_api(entvars_t *pevOwner, Vector &vecStart, Vector &vecVelocity) { @@ -51,22 +54,22 @@ void SpawnRandomGibs_api(entvars_t *pevVictim, int cGibs, int human) { } ReGameFuncs_t g_ReGameApiFuncs = { - &CREATE_NAMED_ENTITY, + CREATE_NAMED_ENTITY, - &Regamedll_ChangeString_api, + Regamedll_ChangeString_api, - &RadiusDamage_api, - &ClearMultiDamage_api, - &ApplyMultiDamage_api, - &AddMultiDamage_api, + RadiusDamage, + ClearMultiDamage, + ApplyMultiDamage, + AddMultiDamage, - &UTIL_FindEntityByString, + UTIL_FindEntityByString, - &AddEntityHashValue, - &RemoveEntityHashValue, + AddEntityHashValue, + RemoveEntityHashValue, - Cmd_Argc_api, - Cmd_Argv_api, + CMD_ARGC_, + CMD_ARGV_, PlantBomb_api, @@ -265,35 +268,4 @@ bool CReGameApi::BGetIGameRules(const char *pchVersion) const return false; } -EXT_FUNC void Regamedll_ChangeString_api(char *&dest, const char *source) -{ - size_t len = Q_strlen(source); - if (dest == nullptr || Q_strlen(dest) != len) { - delete [] dest; - dest = new char [len + 1]; - } - - Q_strcpy(dest, source); -} - -EXT_FUNC void RadiusDamage_api(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, float flRadius, int iClassIgnore, int bitsDamageType) -{ - RadiusDamage(vecSrc, pevInflictor, pevAttacker, flDamage, flRadius, iClassIgnore, bitsDamageType); -} - -EXT_FUNC void ClearMultiDamage_api() -{ - ClearMultiDamage(); -} - -EXT_FUNC void ApplyMultiDamage_api(entvars_t *pevInflictor, entvars_t *pevAttacker) -{ - ApplyMultiDamage(pevInflictor, pevAttacker); -} - -EXT_FUNC void AddMultiDamage_api(entvars_t *pevInflictor, CBaseEntity *pEntity, float flDamage, int bitsDamageType) -{ - AddMultiDamage(pevInflictor, pEntity, flDamage, bitsDamageType); -} - EXPOSE_SINGLE_INTERFACE(CReGameApi, IReGameApi, VRE_GAMEDLL_API_VERSION); From fe72dfdc3cd7ae7b7f978e93d77b4fbbf946b6d5 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Sun, 31 Oct 2021 06:32:53 +0100 Subject: [PATCH 05/15] Update CAPI_Impl.h --- regamedll/dlls/API/CAPI_Impl.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regamedll/dlls/API/CAPI_Impl.h b/regamedll/dlls/API/CAPI_Impl.h index be4e9c209..311f612ed 100644 --- a/regamedll/dlls/API/CAPI_Impl.h +++ b/regamedll/dlls/API/CAPI_Impl.h @@ -906,8 +906,8 @@ class CReGameHookchains: public IReGameHookchains { virtual IReGameHookRegistry_CBasePlayer_JoiningThink *CBasePlayer_JoiningThink(); }; -EXPORT CReGameHookchains g_ReGameHookchains; -EXPORT ReGameFuncs_t g_ReGameApiFuncs; +C_DLLEXPORT CReGameHookchains g_ReGameHookchains; +C_DLLEXPORT ReGameFuncs_t g_ReGameApiFuncs; class CReGameApi: public IReGameApi { public: From 521e5e6dc177f926c7094d917fbfa4ee0da10912 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Mon, 1 Nov 2021 02:40:51 +0100 Subject: [PATCH 06/15] Update player.h --- regamedll/dlls/player.h | 1 + 1 file changed, 1 insertion(+) diff --git a/regamedll/dlls/player.h b/regamedll/dlls/player.h index e62c1b730..54c341fca 100644 --- a/regamedll/dlls/player.h +++ b/regamedll/dlls/player.h @@ -61,6 +61,7 @@ const float SUIT_FIRST_UPDATE_TIME = 0.1f; const float MAX_PLAYER_FATAL_FALL_SPEED = 1100.0f; const float MAX_PLAYER_SAFE_FALL_SPEED = 500.0f; const float MAX_PLAYER_USE_RADIUS = 64.0f; +const float MAX_PLAYER_USE_TANK_RADIUS = 30.0f; const float ARMOR_RATIO = 0.5f; // Armor Takes 50% of the damage const float ARMOR_BONUS = 0.5f; // Each Point of Armor is work 1/x points of health From 7fbd9f28e01d169605731b85938afe10ad9917e8 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Mon, 1 Nov 2021 02:43:05 +0100 Subject: [PATCH 07/15] Update func_tank.h --- regamedll/dlls/func_tank.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/regamedll/dlls/func_tank.h b/regamedll/dlls/func_tank.h index d30acdb7a..d93e6b330 100644 --- a/regamedll/dlls/func_tank.h +++ b/regamedll/dlls/func_tank.h @@ -105,6 +105,10 @@ class CFuncTank: public CBaseEntity static Vector m_TankSpread[]; protected: +#ifdef REGAMEDLL_FIXES + friend class CFuncTankControls; +#endif + CBasePlayer *m_pController; float m_flNextAttack; Vector m_vecControllerUsePos; From 60573d6d968967f3f45b7ca1d828f05169ad8d30 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Mon, 1 Nov 2021 02:43:13 +0100 Subject: [PATCH 08/15] Update func_tank.cpp --- regamedll/dlls/func_tank.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/regamedll/dlls/func_tank.cpp b/regamedll/dlls/func_tank.cpp index 1ca0e966e..acb772d1b 100644 --- a/regamedll/dlls/func_tank.cpp +++ b/regamedll/dlls/func_tank.cpp @@ -208,8 +208,12 @@ BOOL CFuncTank::OnControls(entvars_t *pevTest) if (!(pev->spawnflags & SF_TANK_CANCONTROL)) return FALSE; +#ifdef REGAMEDLL_FIXES + if((pev->origin - pevTest->origin).Length() < (m_vecControllerUsePos.x + m_vecControllerUsePos.y)) +#else Vector offset = pevTest->origin - pev->origin; if ((m_vecControllerUsePos - pevTest->origin).Length() < 30.0f) +#endif { return TRUE; } @@ -254,7 +258,12 @@ BOOL CFuncTank::StartControl(CBasePlayer *pController) } m_pController->m_iHideHUD |= HIDEHUD_WEAPONS; +#ifdef REGAMEDLL_FIXES + m_vecControllerUsePos.x = (pev->origin - m_pController->pev->origin).Length(); + m_vecControllerUsePos.y = MAX_PLAYER_USE_TANK_RADIUS; +#else m_vecControllerUsePos = m_pController->pev->origin; +#endif pev->nextthink = pev->ltime + 0.1f; @@ -876,6 +885,25 @@ void CFuncTankControls::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_T if (m_pTank) { m_pTank->Use(pActivator, pCaller, useType, value); + +#ifdef REGAMEDLL_FIXES + m_pTank->m_vecControllerUsePos.x = (m_pTank->pev->origin - pActivator->pev->origin).Length(); + + // Extended distance setting, up to "MAX_PLAYER_USE_TANK_RADIUS" units or more depending on how close we were in "PlayerUse", or if we did not used it. + if(pActivator && pActivator->IsPlayer() && (((CBasePlayer *)pActivator)->m_afButtonPressed & IN_USE)) + { + m_pTank->m_vecControllerUsePos.y = MAX_PLAYER_USE_RADIUS - (this->Center() - pActivator->pev->origin).Length(); + + if(m_pTank->m_vecControllerUsePos.y < 0) // Since radius function can get and higher range, so fix it to avoid "StartControl" followed by "StopControl" on a next think! + { + m_pTank->m_vecControllerUsePos.y = -m_pTank->m_vecControllerUsePos.y; + } + } + else + { + m_pTank->m_vecControllerUsePos.y = MAX_PLAYER_USE_TANK_RADIUS; + } +#endif } // if this fails, most likely means save/restore hasn't worked properly From ebfdbf22dd3d04956957f7cd54c76b42af3d2779 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Mon, 1 Nov 2021 15:55:56 +0100 Subject: [PATCH 09/15] Update player.cpp --- regamedll/dlls/player.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/regamedll/dlls/player.cpp b/regamedll/dlls/player.cpp index 50b03a1bd..40ffbd7b9 100644 --- a/regamedll/dlls/player.cpp +++ b/regamedll/dlls/player.cpp @@ -4005,6 +4005,11 @@ void CBasePlayer::PlayerUse() if (!((pev->button | m_afButtonPressed | m_afButtonReleased) & IN_USE)) return; +#ifdef REGAMEDLL_FIXES + if (IsReloading()) + return; +#endif + // Hit Use on a train? if (m_afButtonPressed & IN_USE) { From dbdf275d5bc16fb88263c33a2bb0cd56a04ff65e Mon Sep 17 00:00:00 2001 From: StevenKal Date: Wed, 3 Nov 2021 01:42:04 +0100 Subject: [PATCH 10/15] Debuh --- regamedll/dlls/weapons.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/regamedll/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp index 22d61fc9f..c875f3082 100644 --- a/regamedll/dlls/weapons.cpp +++ b/regamedll/dlls/weapons.cpp @@ -2004,6 +2004,7 @@ void CWeaponBox::Touch(CBaseEntity *pOther) if (!FStringNull(m_rgiszAmmo[n])) { // there's some ammo of this type. + UTIL_ClientPrintAll(HUD_PRINTCENTER, UTIL_VarArgs("[CWPB::GA] m_rgiszAmmo[%d] = %d (%s). MaxAmmoCarry = %d.", n, m_rgiszAmmo[n], STRING(m_rgiszAmmo[n]), MaxAmmoCarry(m_rgiszAmmo[n]))); pPlayer->GiveAmmo(m_rgAmmo[n], (char *)STRING(m_rgiszAmmo[n]), MaxAmmoCarry(m_rgiszAmmo[n])); // now empty the ammo from the weaponbox since we just gave it to the player From c6232798293100a184d81e34fa0cd81ea52e504b Mon Sep 17 00:00:00 2001 From: StevenKal Date: Wed, 3 Nov 2021 02:35:19 +0100 Subject: [PATCH 11/15] Update weapons.cpp --- regamedll/dlls/weapons.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/regamedll/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp index c875f3082..45e07b16e 100644 --- a/regamedll/dlls/weapons.cpp +++ b/regamedll/dlls/weapons.cpp @@ -21,11 +21,15 @@ short int g_sModelIndexC4Glow; int giAmmoIndex; MULTIDAMAGE gMultiDamage; +bool g_bInGiveAmmo = false; // Pass in a name and this function will tell // you the maximum amount of that type of ammunition that a player can carry. int MaxAmmoCarry(const char *szName) { + if(g_bInGiveAmmo) + UTIL_ClientPrintAll(HUD_PRINTTALK, UTIL_VarArgs("MaxAmmoCarrySTR: %d (%s).", (int)szName, szName ? szName : "NULL")); + for (int i = 0; i < MAX_WEAPONS; i++) { ItemInfo *info = &CBasePlayerItem::m_ItemInfoArray[i]; @@ -46,6 +50,9 @@ int MaxAmmoCarry(const char *szName) int MaxAmmoCarry(WeaponIdType weaponId) { + if(g_bInGiveAmmo) + UTIL_ClientPrintAll(HUD_PRINTTALK, UTIL_VarArgs("MaxAmmoCarryWeaponType: %d.", weaponId)); + return CBasePlayerItem::m_ItemInfoArray[weaponId].iMaxAmmo1; } @@ -2004,8 +2011,11 @@ void CWeaponBox::Touch(CBaseEntity *pOther) if (!FStringNull(m_rgiszAmmo[n])) { // there's some ammo of this type. - UTIL_ClientPrintAll(HUD_PRINTCENTER, UTIL_VarArgs("[CWPB::GA] m_rgiszAmmo[%d] = %d (%s). MaxAmmoCarry = %d.", n, m_rgiszAmmo[n], STRING(m_rgiszAmmo[n]), MaxAmmoCarry(m_rgiszAmmo[n]))); - pPlayer->GiveAmmo(m_rgAmmo[n], (char *)STRING(m_rgiszAmmo[n]), MaxAmmoCarry(m_rgiszAmmo[n])); + g_bInGiveAmmo = true; + int iMaxAmmoCarry = MaxAmmoCarry(m_rgiszAmmo[n]); + UTIL_ClientPrintAll(HUD_PRINTTALK, UTIL_VarArgs("[CWPB::GA] m_rgiszAmmo[%d] = %d (%s). MaxAmmoCarry = %d.", n, m_rgiszAmmo[n], STRING(m_rgiszAmmo[n]), iMaxAmmoCarry)); + pPlayer->GiveAmmo(m_rgAmmo[n], (char *)STRING(m_rgiszAmmo[n]), iMaxAmmoCarry); + g_bInGiveAmmo = false: // now empty the ammo from the weaponbox since we just gave it to the player m_rgiszAmmo[n] = iStringNull; From a1b65b784743fbf6d5b02f7a81409a0fcd74eb4a Mon Sep 17 00:00:00 2001 From: StevenKal Date: Wed, 3 Nov 2021 02:38:40 +0100 Subject: [PATCH 12/15] Update weapons.cpp --- regamedll/dlls/weapons.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regamedll/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp index 45e07b16e..f21806736 100644 --- a/regamedll/dlls/weapons.cpp +++ b/regamedll/dlls/weapons.cpp @@ -2015,7 +2015,7 @@ void CWeaponBox::Touch(CBaseEntity *pOther) int iMaxAmmoCarry = MaxAmmoCarry(m_rgiszAmmo[n]); UTIL_ClientPrintAll(HUD_PRINTTALK, UTIL_VarArgs("[CWPB::GA] m_rgiszAmmo[%d] = %d (%s). MaxAmmoCarry = %d.", n, m_rgiszAmmo[n], STRING(m_rgiszAmmo[n]), iMaxAmmoCarry)); pPlayer->GiveAmmo(m_rgAmmo[n], (char *)STRING(m_rgiszAmmo[n]), iMaxAmmoCarry); - g_bInGiveAmmo = false: + g_bInGiveAmmo = false; // now empty the ammo from the weaponbox since we just gave it to the player m_rgiszAmmo[n] = iStringNull; From 2a66459bbc1737357c3a765209c8de2d4ce43c48 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Wed, 3 Nov 2021 02:57:14 +0100 Subject: [PATCH 13/15] Update weapons.cpp --- regamedll/dlls/weapons.cpp | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/regamedll/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp index f21806736..22d61fc9f 100644 --- a/regamedll/dlls/weapons.cpp +++ b/regamedll/dlls/weapons.cpp @@ -21,15 +21,11 @@ short int g_sModelIndexC4Glow; int giAmmoIndex; MULTIDAMAGE gMultiDamage; -bool g_bInGiveAmmo = false; // Pass in a name and this function will tell // you the maximum amount of that type of ammunition that a player can carry. int MaxAmmoCarry(const char *szName) { - if(g_bInGiveAmmo) - UTIL_ClientPrintAll(HUD_PRINTTALK, UTIL_VarArgs("MaxAmmoCarrySTR: %d (%s).", (int)szName, szName ? szName : "NULL")); - for (int i = 0; i < MAX_WEAPONS; i++) { ItemInfo *info = &CBasePlayerItem::m_ItemInfoArray[i]; @@ -50,9 +46,6 @@ int MaxAmmoCarry(const char *szName) int MaxAmmoCarry(WeaponIdType weaponId) { - if(g_bInGiveAmmo) - UTIL_ClientPrintAll(HUD_PRINTTALK, UTIL_VarArgs("MaxAmmoCarryWeaponType: %d.", weaponId)); - return CBasePlayerItem::m_ItemInfoArray[weaponId].iMaxAmmo1; } @@ -2011,11 +2004,7 @@ void CWeaponBox::Touch(CBaseEntity *pOther) if (!FStringNull(m_rgiszAmmo[n])) { // there's some ammo of this type. - g_bInGiveAmmo = true; - int iMaxAmmoCarry = MaxAmmoCarry(m_rgiszAmmo[n]); - UTIL_ClientPrintAll(HUD_PRINTTALK, UTIL_VarArgs("[CWPB::GA] m_rgiszAmmo[%d] = %d (%s). MaxAmmoCarry = %d.", n, m_rgiszAmmo[n], STRING(m_rgiszAmmo[n]), iMaxAmmoCarry)); - pPlayer->GiveAmmo(m_rgAmmo[n], (char *)STRING(m_rgiszAmmo[n]), iMaxAmmoCarry); - g_bInGiveAmmo = false; + pPlayer->GiveAmmo(m_rgAmmo[n], (char *)STRING(m_rgiszAmmo[n]), MaxAmmoCarry(m_rgiszAmmo[n])); // now empty the ammo from the weaponbox since we just gave it to the player m_rgiszAmmo[n] = iStringNull; From 11160a1f47f47b4c1de7fd1269f3d8f6dd88d4e5 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Wed, 3 Nov 2021 03:00:05 +0100 Subject: [PATCH 14/15] Update player.cpp --- regamedll/dlls/player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regamedll/dlls/player.cpp b/regamedll/dlls/player.cpp index 40ffbd7b9..c5cd27a45 100644 --- a/regamedll/dlls/player.cpp +++ b/regamedll/dlls/player.cpp @@ -6937,7 +6937,7 @@ void CBasePlayer::ItemPostFrame() int CBasePlayer::AmmoInventory(int iAmmoIndex) { - if (iAmmoIndex == -1) + if (iAmmoIndex <= -1) return -1; return m_rgAmmo[iAmmoIndex]; From dc72813faae852c81d50c438a30c06bbea03a299 Mon Sep 17 00:00:00 2001 From: StevenKal Date: Wed, 3 Nov 2021 03:01:54 +0100 Subject: [PATCH 15/15] Update weapons.cpp --- regamedll/dlls/weapons.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/regamedll/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp index 22d61fc9f..57b5afaf5 100644 --- a/regamedll/dlls/weapons.cpp +++ b/regamedll/dlls/weapons.cpp @@ -1108,10 +1108,12 @@ void CBasePlayerItem::DestroyItem() { if (m_pPlayer) { +#ifdef REGAMEDLL_FIXES + bool bShouldCallGetNextBestWeapon = (this == m_pPlayer->m_pActiveItem); +#endif // if attached to a player, remove. if (m_pPlayer->RemovePlayerItem(this)) { - #ifdef REGAMEDLL_FIXES m_pPlayer->pev->weapons &= ~(1 << m_iId); @@ -1119,9 +1121,18 @@ void CBasePlayerItem::DestroyItem() if ((m_pPlayer->pev->weapons & ~(1 << WEAPON_SUIT)) == 0) { m_pPlayer->m_iHideHUD |= HIDEHUD_WEAPONS; } + // Helps to fix problem when we throw our last grenade right before using a tank (< 0.5 seconds) and when we unuse it, + // we no longer have an active item and we are unable to select another via mouse wheel. + else if(bShouldCallGetNextBestWeapon) + { + g_pGameRules->GetNextBestWeapon(m_pPlayer, this); + } #endif - } +#ifdef REGAMEDLL_FIXES + else if(!(pev->flags & FL_KILLME)) // Do not kill the item when unable to unhook from player's inventory (as if we manually refused this). + return; +#endif } Kill();