mirror of
https://github.com/s1lentq/ReGameDLL_CS.git
synced 2025-01-13 15:18:00 +03:00
game_player_equip fixes/enhancement (#618)
* game_player_equip: Check UseOnly flag * New flag SF_PLAYEREQUIP_REMOVEWEAPONS
This commit is contained in:
parent
8d1f4fb673
commit
d80d87366a
@ -102,4 +102,4 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
@ -565,13 +565,10 @@ void CGamePlayerEquip::KeyValue(KeyValueData *pkvd)
|
||||
|
||||
void CGamePlayerEquip::Touch(CBaseEntity *pOther)
|
||||
{
|
||||
if (!CanFireForActivator(pOther))
|
||||
return;
|
||||
|
||||
if (UseOnly())
|
||||
return;
|
||||
|
||||
EquipPlayer(pOther);
|
||||
if (CanEquipOverTouch(pOther))
|
||||
{
|
||||
EquipPlayer(pOther);
|
||||
}
|
||||
}
|
||||
|
||||
void CGamePlayerEquip::EquipPlayer(CBaseEntity *pEntity)
|
||||
@ -580,6 +577,12 @@ void CGamePlayerEquip::EquipPlayer(CBaseEntity *pEntity)
|
||||
return;
|
||||
|
||||
CBasePlayer *pPlayer = static_cast<CBasePlayer *>(pEntity);
|
||||
|
||||
if (RemoveWeapons())
|
||||
{
|
||||
pPlayer->RemoveAllItems(FALSE);
|
||||
}
|
||||
|
||||
for (int i = 0; i < MAX_EQUIP; i++)
|
||||
{
|
||||
if (FStringNull(m_weaponNames[i]))
|
||||
|
@ -245,6 +245,7 @@ public:
|
||||
#define MAX_EQUIP 32
|
||||
#define SF_PLAYEREQUIP_USEONLY BIT(0) // If set, the game_player_equip entity will not equip respawning players,
|
||||
// but only react to direct triggering, equipping its activator. This makes its master obsolete.
|
||||
#define SF_PLAYEREQUIP_REMOVEWEAPONS BIT(1) // Remove all weapons before give.
|
||||
|
||||
// Sets the default player equipment
|
||||
class CGamePlayerEquip: public CRulePointEntity
|
||||
@ -256,6 +257,18 @@ public:
|
||||
|
||||
public:
|
||||
bool UseOnly() const { return (pev->spawnflags & SF_PLAYEREQUIP_USEONLY) == SF_PLAYEREQUIP_USEONLY; }
|
||||
bool RemoveWeapons() const { return (pev->spawnflags & SF_PLAYEREQUIP_REMOVEWEAPONS) == SF_PLAYEREQUIP_REMOVEWEAPONS; }
|
||||
|
||||
bool CanEquipOverTouch(CBaseEntity *pOther)
|
||||
{
|
||||
if (!CanFireForActivator(pOther))
|
||||
return false;
|
||||
|
||||
if (UseOnly())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
void EquipPlayer(CBaseEntity *pPlayer);
|
||||
|
@ -9889,11 +9889,18 @@ void EXT_FUNC CBasePlayer::__API_HOOK(OnSpawnEquip)(bool addDefault, bool equipG
|
||||
{
|
||||
if (equipGame)
|
||||
{
|
||||
CBaseEntity *pWeaponEntity = nullptr;
|
||||
CGamePlayerEquip *pWeaponEntity = nullptr;
|
||||
while ((pWeaponEntity = UTIL_FindEntityByClassname(pWeaponEntity, "game_player_equip")))
|
||||
{
|
||||
pWeaponEntity->Touch(this);
|
||||
addDefault = false;
|
||||
|
||||
#ifdef REGAMEDLL_FIXES
|
||||
if (pWeaponEntity->CanEquipOverTouch(this))
|
||||
#endif
|
||||
{
|
||||
pWeaponEntity->Touch(this);
|
||||
|
||||
addDefault = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1407,6 +1407,7 @@
|
||||
spawnflags(flags) =
|
||||
[
|
||||
1: "Use Only" : 0
|
||||
2: "Remove Weapons" : 0
|
||||
]
|
||||
weapon_knife (choices) : "Give Knife" : 0 =
|
||||
[
|
||||
|
Loading…
x
Reference in New Issue
Block a user