Invisible shield fix (#422)

* add constants for entvar "gamestate" magic number
* invisible shield (https://github.com/s1lentq/ReGameDLL_CS/projects/1#card-26566008)
This commit is contained in:
Vaqtincha 2019-09-22 19:39:06 +05:00 committed by Dmitry Novikov
parent c2f62eb98a
commit a386ef41ea
3 changed files with 19 additions and 8 deletions

View File

@ -2031,7 +2031,7 @@ void EXT_FUNC CBasePlayer::__API_HOOK(Killed)(entvars_t *pevAttacker, int iGib)
pev->movetype = MOVETYPE_TOSS; pev->movetype = MOVETYPE_TOSS;
pev->takedamage = DAMAGE_NO; pev->takedamage = DAMAGE_NO;
pev->gamestate = 1; pev->gamestate = HITGROUP_SHIELD_DISABLED;
m_bShieldDrawn = false; m_bShieldDrawn = false;
pev->flags &= ~FL_ONGROUND; pev->flags &= ~FL_ONGROUND;
@ -2997,6 +2997,10 @@ void EXT_FUNC CBasePlayer::__API_HOOK(GiveShield)(bool bDeploy)
m_bOwnsShield = true; m_bOwnsShield = true;
m_bHasPrimary = true; m_bHasPrimary = true;
#ifdef REGAMEDLL_FIXES
pev->gamestate = HITGROUP_SHIELD_ENABLED;
#endif
if (m_pActiveItem) if (m_pActiveItem)
{ {
CBasePlayerWeapon *pWeapon = static_cast<CBasePlayerWeapon *>(m_pActiveItem); CBasePlayerWeapon *pWeapon = static_cast<CBasePlayerWeapon *>(m_pActiveItem);
@ -3011,7 +3015,10 @@ void EXT_FUNC CBasePlayer::__API_HOOK(GiveShield)(bool bDeploy)
} }
} }
pev->gamestate = 0; #ifndef REGAMEDLL_FIXES
// NOTE: Moved above, because CC4::Deploy can reset hitbox of shield
pev->gamestate = HITGROUP_SHIELD_ENABLED;
#endif
} }
void CBasePlayer::RemoveShield() void CBasePlayer::RemoveShield()
@ -3021,7 +3028,7 @@ void CBasePlayer::RemoveShield()
m_bOwnsShield = false; m_bOwnsShield = false;
m_bHasPrimary = false; m_bHasPrimary = false;
m_bShieldDrawn = false; m_bShieldDrawn = false;
pev->gamestate = 1; pev->gamestate = HITGROUP_SHIELD_DISABLED;
UpdateShieldCrosshair(true); UpdateShieldCrosshair(true);
} }
@ -5210,9 +5217,9 @@ void EXT_FUNC CBasePlayer::__API_HOOK(Spawn)()
m_pentCurBombTarget = nullptr; m_pentCurBombTarget = nullptr;
if (m_bOwnsShield) if (m_bOwnsShield)
pev->gamestate = 0; pev->gamestate = HITGROUP_SHIELD_ENABLED;
else else
pev->gamestate = 1; pev->gamestate = HITGROUP_SHIELD_DISABLED;
ResetStamina(); ResetStamina();
pev->friction = 1; pev->friction = 1;
@ -6501,7 +6508,7 @@ BOOL EXT_FUNC CBasePlayer::__API_HOOK(AddPlayerItem)(CBasePlayerItem *pItem)
m_rgpPlayerItems[pItem->iItemSlot()] = pItem; m_rgpPlayerItems[pItem->iItemSlot()] = pItem;
if (HasShield()) if (HasShield())
pev->gamestate = 0; pev->gamestate = HITGROUP_SHIELD_ENABLED;
// should we switch to this item? // should we switch to this item?
if (g_pGameRules->FShouldSwitchWeapon(this, pItem)) if (g_pGameRules->FShouldSwitchWeapon(this, pItem))

View File

@ -112,6 +112,10 @@ const int MONEY_BLINK_AMOUNT = 30;
#define PFLAG_USING BIT(4) // Using a continuous entity #define PFLAG_USING BIT(4) // Using a continuous entity
#define PFLAG_OBSERVER BIT(5) // Player is locked in stationary cam mode. Spectators can move, observers can't. #define PFLAG_OBSERVER BIT(5) // Player is locked in stationary cam mode. Spectators can move, observers can't.
// Player gamestate flags
#define HITGROUP_SHIELD_ENABLED 0
#define HITGROUP_SHIELD_DISABLED 1
#define TRAIN_OFF 0x00 #define TRAIN_OFF 0x00
#define TRAIN_NEUTRAL 0x01 #define TRAIN_NEUTRAL 0x01
#define TRAIN_SLOW 0x02 #define TRAIN_SLOW 0x02

View File

@ -67,7 +67,7 @@ BOOL CC4::Deploy()
if (m_pPlayer->HasShield()) if (m_pPlayer->HasShield())
{ {
m_bHasShield = true; m_bHasShield = true;
m_pPlayer->pev->gamestate = 1; m_pPlayer->pev->gamestate = HITGROUP_SHIELD_DISABLED;
} }
return DefaultDeploy("models/v_c4.mdl", "models/p_c4.mdl", C4_DRAW, "c4", UseDecrement() != FALSE); return DefaultDeploy("models/v_c4.mdl", "models/p_c4.mdl", C4_DRAW, "c4", UseDecrement() != FALSE);
@ -94,7 +94,7 @@ void CC4::Holster(int skiplocal)
if (m_bHasShield) if (m_bHasShield)
{ {
m_pPlayer->pev->gamestate = 0; m_pPlayer->pev->gamestate = HITGROUP_SHIELD_ENABLED;
m_bHasShield = false; m_bHasShield = false;
} }
} }