dispenser: clamp armor and do some extra bound checks before registering as a valid pickup

This commit is contained in:
Marco Cawthorne 2022-07-10 09:15:43 -07:00
parent 1dce4e12b1
commit 22b968c6e6
Signed by: eukara
GPG Key ID: CE2032F0A2882A22
1 changed files with 19 additions and 8 deletions

View File

@ -164,15 +164,22 @@ TFCDispenser::Touch(entity eToucher)
player pl = (player)eToucher;
int r, n, c, s, a;
int sum = 0;
int r, n, c, s, a, sum;
r = n = c = s = a = sum = 0;
r = GrabRockets();
n = GrabNails();
c = GrabCells();
s = GrabShells();
a = GrabArmor();
/* only subtract what if we need anything */
if (pl.m_iAmmoRockets < pl.m_iMaxRockets)
r = GrabRockets();
if (pl.m_iAmmoNails < pl.m_iMaxNails)
n = GrabNails();
if (pl.m_iAmmoCells < pl.m_iMaxCells)
c = GrabCells();
if (pl.m_iAmmoShells < pl.m_iMaxShells)
s = GrabShells();
if (pl.armor < pl.m_iMaxArmor)
a = GrabArmor();
/* see the sum of what we picked up to determine if we'll register as a pickup */
sum = r + n + c + s + a;
/* check */
@ -180,13 +187,15 @@ TFCDispenser::Touch(entity eToucher)
return;
sound(this, CHAN_ITEM, "weapons/scock1.wav", 1.0, ATTN_NORM);
/* add whatever it is we can get */
pl.m_iAmmoRockets += r;
pl.m_iAmmoNails += n;
pl.m_iAmmoCells += c;
pl.m_iAmmoShells += s;
pl.armor += a;
/* clamp */
/* clamp player values */
if (pl.m_iAmmoRockets > pl.m_iMaxRockets)
pl.m_iAmmoRockets = pl.m_iMaxRockets;
if (pl.m_iAmmoNails > pl.m_iMaxNails)
@ -195,6 +204,8 @@ TFCDispenser::Touch(entity eToucher)
pl.m_iAmmoCells = pl.m_iMaxCells;
if (pl.m_iAmmoShells > pl.m_iMaxShells)
pl.m_iAmmoShells = pl.m_iMaxShells;
if (pl.armor > pl.m_iMaxArmor)
pl.armor = pl. m_iMaxArmor;
m_flNextDispense = time + 2.0f;
}