mirror of
https://github.com/s1lentq/ReGameDLL_CS.git
synced 2024-12-27 23:25:41 +03:00
Bugfix: leak entities from weaponbox when touched grenades. (bug by valve)
CZBot: the check cvar bot_deathmath on every time.
This commit is contained in:
parent
aa8a8e7bb1
commit
baac9cbad4
@ -136,7 +136,7 @@ public:
|
|||||||
Activity m_IdealActivity; // monster should switch to this activity
|
Activity m_IdealActivity; // monster should switch to this activity
|
||||||
int m_LastHitGroup; // the last body region that took damage
|
int m_LastHitGroup; // the last body region that took damage
|
||||||
int m_bitsDamageType; // what types of damage has monster (player) taken
|
int m_bitsDamageType; // what types of damage has monster (player) taken
|
||||||
BYTE m_rgbTimeBasedDamage[8];
|
byte m_rgbTimeBasedDamage[8];
|
||||||
|
|
||||||
MONSTERSTATE m_MonsterState; // monster's current state
|
MONSTERSTATE m_MonsterState; // monster's current state
|
||||||
MONSTERSTATE m_IdealMonsterState; // monster should change to this state
|
MONSTERSTATE m_IdealMonsterState; // monster should change to this state
|
||||||
|
@ -1028,12 +1028,6 @@ void CCSBotManager::ValidateMapData()
|
|||||||
m_zoneCount = 0;
|
m_zoneCount = 0;
|
||||||
m_gameScenario = SCENARIO_DEATHMATCH;
|
m_gameScenario = SCENARIO_DEATHMATCH;
|
||||||
|
|
||||||
#ifdef REGAMEDLL_ADD
|
|
||||||
// if we have included deathmatch mode, so set the game type like SCENARIO_DEATHMATCH
|
|
||||||
if (cv_bot_deathmatch.value > 0.0f)
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Search all entities in the map and set the game type and store all zones (bomb target, etc).
|
// Search all entities in the map and set the game type and store all zones (bomb target, etc).
|
||||||
CBaseEntity *entity = NULL;
|
CBaseEntity *entity = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
@ -105,7 +105,16 @@ public:
|
|||||||
SCENARIO_RESCUE_HOSTAGES,
|
SCENARIO_RESCUE_HOSTAGES,
|
||||||
SCENARIO_ESCORT_VIP
|
SCENARIO_ESCORT_VIP
|
||||||
};
|
};
|
||||||
GameScenarioType GetScenario() const { return m_gameScenario; }
|
GameScenarioType GetScenario() const
|
||||||
|
{
|
||||||
|
#ifdef REGAMEDLL_ADD
|
||||||
|
// if we have included deathmatch mode, so set the game type like SCENARIO_DEATHMATCH
|
||||||
|
if (cv_bot_deathmatch.value > 0)
|
||||||
|
return SCENARIO_DEATHMATCH;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return m_gameScenario;
|
||||||
|
}
|
||||||
|
|
||||||
// "zones"
|
// "zones"
|
||||||
// depending on the game mode, these are bomb zones, rescue zones, etc.
|
// depending on the game mode, these are bomb zones, rescue zones, etc.
|
||||||
@ -216,12 +225,12 @@ public:
|
|||||||
enum SkillType { LOW, AVERAGE, HIGH, RANDOM };
|
enum SkillType { LOW, AVERAGE, HIGH, RANDOM };
|
||||||
const char *GetRandomBotName(SkillType skill);
|
const char *GetRandomBotName(SkillType skill);
|
||||||
|
|
||||||
static void MonitorBotCVars();
|
void MonitorBotCVars();
|
||||||
static void MaintainBotQuota();
|
void MaintainBotQuota();
|
||||||
static bool AddBot(const BotProfile *profile, BotProfileTeamType team);
|
bool AddBot(const BotProfile *profile, BotProfileTeamType team);
|
||||||
|
|
||||||
#define FROM_CONSOLE true
|
#define FROM_CONSOLE true
|
||||||
static bool BotAddCommand(BotProfileTeamType team, bool isFromConsole = false); // process the "bot_add" console command
|
bool BotAddCommand(BotProfileTeamType team, bool isFromConsole = false); // process the "bot_add" console command
|
||||||
|
|
||||||
#ifndef HOOK_GAMEDLL
|
#ifndef HOOK_GAMEDLL
|
||||||
private:
|
private:
|
||||||
|
@ -647,10 +647,10 @@ public:
|
|||||||
BOOL m_fRotating;
|
BOOL m_fRotating;
|
||||||
string_t m_strChangeTarget;
|
string_t m_strChangeTarget;
|
||||||
locksound_t m_ls;
|
locksound_t m_ls;
|
||||||
BYTE m_bLockedSound;
|
byte m_bLockedSound;
|
||||||
BYTE m_bLockedSentence;
|
byte m_bLockedSentence;
|
||||||
BYTE m_bUnlockedSound;
|
byte m_bUnlockedSound;
|
||||||
BYTE m_bUnlockedSentence;
|
byte m_bUnlockedSentence;
|
||||||
int m_sounds;
|
int m_sounds;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -94,17 +94,17 @@ public:
|
|||||||
void EXPORT DoorHitBottom();
|
void EXPORT DoorHitBottom();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BYTE m_bHealthValue; // some doors are medi-kit doors, they give players health
|
byte m_bHealthValue; // some doors are medi-kit doors, they give players health
|
||||||
|
|
||||||
BYTE m_bMoveSnd; // sound a door makes while moving
|
byte m_bMoveSnd; // sound a door makes while moving
|
||||||
BYTE m_bStopSnd; // sound a door makes when it stops
|
byte m_bStopSnd; // sound a door makes when it stops
|
||||||
|
|
||||||
locksound_t m_ls; // door lock sounds
|
locksound_t m_ls; // door lock sounds
|
||||||
|
|
||||||
BYTE m_bLockedSound; // ordinals from entity selection
|
byte m_bLockedSound; // ordinals from entity selection
|
||||||
BYTE m_bLockedSentence;
|
byte m_bLockedSentence;
|
||||||
BYTE m_bUnlockedSound;
|
byte m_bUnlockedSound;
|
||||||
BYTE m_bUnlockedSentence;
|
byte m_bUnlockedSentence;
|
||||||
|
|
||||||
float m_lastBlockedTimestamp;
|
float m_lastBlockedTimestamp;
|
||||||
};
|
};
|
||||||
@ -151,7 +151,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
static TYPEDESCRIPTION IMPL(m_SaveData)[1];
|
static TYPEDESCRIPTION IMPL(m_SaveData)[1];
|
||||||
|
|
||||||
BYTE m_bMoveSnd; // sound a door makes while moving
|
byte m_bMoveSnd; // sound a door makes while moving
|
||||||
};
|
};
|
||||||
|
|
||||||
void PlayLockSounds(entvars_t *pev, locksound_t *pls, int flocked, int fbutton);
|
void PlayLockSounds(entvars_t *pev, locksound_t *pls, int flocked, int fbutton);
|
||||||
|
@ -73,8 +73,8 @@ typedef struct locksounds
|
|||||||
int iUnlockedSentence;
|
int iUnlockedSentence;
|
||||||
float flwaitSound;
|
float flwaitSound;
|
||||||
float flwaitSentence;
|
float flwaitSentence;
|
||||||
BYTE bEOFLocked;
|
byte bEOFLocked;
|
||||||
BYTE bEOFUnlocked;
|
byte bEOFUnlocked;
|
||||||
|
|
||||||
} locksound_t;
|
} locksound_t;
|
||||||
|
|
||||||
|
@ -523,15 +523,20 @@ CHalfLifeMultiplay::CHalfLifeMultiplay()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// 3/31/99
|
||||||
|
// Added lservercfg file cvar, since listen and dedicated servers should not
|
||||||
|
// share a single config file. (sjb)
|
||||||
|
|
||||||
|
// listen server
|
||||||
CVAR_SET_FLOAT("pausable", 0);
|
CVAR_SET_FLOAT("pausable", 0);
|
||||||
|
|
||||||
const char *lservercfgfile = CVAR_GET_STRING("lservercfgfile");
|
const char *lservercfgfile = CVAR_GET_STRING("lservercfgfile");
|
||||||
|
|
||||||
if (lservercfgfile && *lservercfgfile != '\0')
|
if (lservercfgfile && lservercfgfile[0] != '\0')
|
||||||
{
|
{
|
||||||
ALERT(at_console, "Executing listen server config file\n");
|
|
||||||
|
|
||||||
char szCommand[256];
|
char szCommand[256];
|
||||||
|
|
||||||
|
ALERT(at_console, "Executing listen server config file\n");
|
||||||
Q_sprintf(szCommand, "exec %s\n", lservercfgfile);
|
Q_sprintf(szCommand, "exec %s\n", lservercfgfile);
|
||||||
SERVER_COMMAND(szCommand);
|
SERVER_COMMAND(szCommand);
|
||||||
}
|
}
|
||||||
@ -594,15 +599,32 @@ CHalfLifeMultiplay::CHalfLifeMultiplay()
|
|||||||
|
|
||||||
void CHalfLifeMultiplay::__MAKE_VHOOK(RefreshSkillData)()
|
void CHalfLifeMultiplay::__MAKE_VHOOK(RefreshSkillData)()
|
||||||
{
|
{
|
||||||
|
// load all default values
|
||||||
CGameRules::RefreshSkillData();
|
CGameRules::RefreshSkillData();
|
||||||
|
|
||||||
|
// override some values for multiplay.
|
||||||
|
|
||||||
|
// Glock Round
|
||||||
gSkillData.plrDmg9MM = 12;
|
gSkillData.plrDmg9MM = 12;
|
||||||
|
|
||||||
|
// MP5 Round
|
||||||
gSkillData.plrDmgMP5 = 12;
|
gSkillData.plrDmgMP5 = 12;
|
||||||
|
|
||||||
|
// suitcharger
|
||||||
gSkillData.suitchargerCapacity = 30;
|
gSkillData.suitchargerCapacity = 30;
|
||||||
|
// 357 Round
|
||||||
gSkillData.plrDmg357 = 40;
|
gSkillData.plrDmg357 = 40;
|
||||||
|
// M203 grenade
|
||||||
gSkillData.plrDmgM203Grenade = 100;
|
gSkillData.plrDmgM203Grenade = 100;
|
||||||
|
|
||||||
|
// Shotgun buckshot
|
||||||
|
// fewer pellets in deathmatch
|
||||||
gSkillData.plrDmgBuckshot = 20;
|
gSkillData.plrDmgBuckshot = 20;
|
||||||
|
|
||||||
|
// Crossbow
|
||||||
gSkillData.plrDmgCrossbowClient = 20;
|
gSkillData.plrDmgCrossbowClient = 20;
|
||||||
|
|
||||||
|
// RPG
|
||||||
gSkillData.plrDmgRPG = 120;
|
gSkillData.plrDmgRPG = 120;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3375,7 +3397,6 @@ void CHalfLifeMultiplay::__MAKE_VHOOK(PlayerThink)(CBasePlayer *pPlayer)
|
|||||||
if (pPlayer->m_pActiveItem && pPlayer->m_pActiveItem->IsWeapon())
|
if (pPlayer->m_pActiveItem && pPlayer->m_pActiveItem->IsWeapon())
|
||||||
{
|
{
|
||||||
CBasePlayerWeapon *pWeapon = static_cast<CBasePlayerWeapon *>(pPlayer->m_pActiveItem->GetWeaponPtr());
|
CBasePlayerWeapon *pWeapon = static_cast<CBasePlayerWeapon *>(pPlayer->m_pActiveItem->GetWeaponPtr());
|
||||||
|
|
||||||
if (pWeapon->m_iWeaponState & WPNSTATE_SHIELD_DRAWN)
|
if (pWeapon->m_iWeaponState & WPNSTATE_SHIELD_DRAWN)
|
||||||
{
|
{
|
||||||
pPlayer->m_bCanShoot = false;
|
pPlayer->m_bCanShoot = false;
|
||||||
|
@ -87,12 +87,12 @@ void CBasePlatTrain::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
|||||||
}
|
}
|
||||||
else if (FStrEq(pkvd->szKeyName, "movesnd"))
|
else if (FStrEq(pkvd->szKeyName, "movesnd"))
|
||||||
{
|
{
|
||||||
m_bMoveSnd = (BYTE)Q_atof(pkvd->szValue);
|
m_bMoveSnd = (byte)Q_atof(pkvd->szValue);
|
||||||
pkvd->fHandled = TRUE;
|
pkvd->fHandled = TRUE;
|
||||||
}
|
}
|
||||||
else if (FStrEq(pkvd->szKeyName, "stopsnd"))
|
else if (FStrEq(pkvd->szKeyName, "stopsnd"))
|
||||||
{
|
{
|
||||||
m_bStopSnd = (BYTE)Q_atof(pkvd->szValue);
|
m_bStopSnd = (byte)Q_atof(pkvd->szValue);
|
||||||
pkvd->fHandled = TRUE;
|
pkvd->fHandled = TRUE;
|
||||||
}
|
}
|
||||||
else if (FStrEq(pkvd->szKeyName, "volume"))
|
else if (FStrEq(pkvd->szKeyName, "volume"))
|
||||||
|
@ -70,8 +70,8 @@ public:
|
|||||||
public:
|
public:
|
||||||
static TYPEDESCRIPTION IMPL(m_SaveData)[3];
|
static TYPEDESCRIPTION IMPL(m_SaveData)[3];
|
||||||
|
|
||||||
BYTE m_bMoveSnd;
|
byte m_bMoveSnd;
|
||||||
BYTE m_bStopSnd;
|
byte m_bStopSnd;
|
||||||
float m_volume;
|
float m_volume;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1427,6 +1427,7 @@ void packPlayerItem(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
|
|||||||
{
|
{
|
||||||
pWeaponBox->PackAmmo(MAKE_STRING(IMPL_CLASS(CBasePlayerItem, ItemInfoArray)[pItem->m_iId].pszAmmo1), pPlayer->m_rgAmmo[pItem->PrimaryAmmoIndex()]);
|
pWeaponBox->PackAmmo(MAKE_STRING(IMPL_CLASS(CBasePlayerItem, ItemInfoArray)[pItem->m_iId].pszAmmo1), pPlayer->m_rgAmmo[pItem->PrimaryAmmoIndex()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_MODEL(ENT(pWeaponBox->pev), modelName);
|
SET_MODEL(ENT(pWeaponBox->pev), modelName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1489,6 +1490,7 @@ void packPlayerNade(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
|
|||||||
{
|
{
|
||||||
pWeaponBox->PackAmmo(MAKE_STRING(IMPL_CLASS(CBasePlayerItem, ItemInfoArray)[pItem->m_iId].pszAmmo1), pPlayer->m_rgAmmo[pItem->PrimaryAmmoIndex()]);
|
pWeaponBox->PackAmmo(MAKE_STRING(IMPL_CLASS(CBasePlayerItem, ItemInfoArray)[pItem->m_iId].pszAmmo1), pPlayer->m_rgAmmo[pItem->PrimaryAmmoIndex()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_MODEL(ENT(pWeaponBox->pev), modelName);
|
SET_MODEL(ENT(pWeaponBox->pev), modelName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1520,7 +1522,7 @@ void CBasePlayer::PackDeadPlayerItems()
|
|||||||
// there's a weapon here. Should I pack it?
|
// there's a weapon here. Should I pack it?
|
||||||
CBasePlayerItem *pPlayerItem = m_rgpPlayerItems[ n ];
|
CBasePlayerItem *pPlayerItem = m_rgpPlayerItems[ n ];
|
||||||
|
|
||||||
while (pPlayerItem != NULL)
|
while (pPlayerItem)
|
||||||
{
|
{
|
||||||
ItemInfo info;
|
ItemInfo info;
|
||||||
if (pPlayerItem->iItemSlot() < KNIFE_SLOT && !bShieldDropped)
|
if (pPlayerItem->iItemSlot() < KNIFE_SLOT && !bShieldDropped)
|
||||||
@ -1671,7 +1673,7 @@ void CBasePlayer::RemoveAllItems(BOOL removeSuit)
|
|||||||
{
|
{
|
||||||
m_pActiveItem = m_rgpPlayerItems[i];
|
m_pActiveItem = m_rgpPlayerItems[i];
|
||||||
|
|
||||||
while (m_pActiveItem != NULL)
|
while (m_pActiveItem)
|
||||||
{
|
{
|
||||||
CBasePlayerItem *pPendingItem = m_pActiveItem->m_pNext;
|
CBasePlayerItem *pPendingItem = m_pActiveItem->m_pNext;
|
||||||
|
|
||||||
@ -4479,7 +4481,7 @@ void EXT_FUNC CBasePlayer::__API_VHOOK(PreThink)()
|
|||||||
void CBasePlayer::CheckTimeBasedDamage()
|
void CBasePlayer::CheckTimeBasedDamage()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
BYTE bDuration = 0;
|
byte bDuration = 0;
|
||||||
static float gtbdPrev = 0.0;
|
static float gtbdPrev = 0.0;
|
||||||
|
|
||||||
if (!(m_bitsDamageType & DMG_TIMEBASED))
|
if (!(m_bitsDamageType & DMG_TIMEBASED))
|
||||||
@ -4573,7 +4575,7 @@ void CBasePlayer::CheckTimeBasedDamage()
|
|||||||
|
|
||||||
void CBasePlayer::UpdateGeigerCounter()
|
void CBasePlayer::UpdateGeigerCounter()
|
||||||
{
|
{
|
||||||
BYTE range;
|
byte range;
|
||||||
|
|
||||||
// delay per update ie: don't flood net with these msgs
|
// delay per update ie: don't flood net with these msgs
|
||||||
if (gpGlobals->time < m_flgeigerDelay)
|
if (gpGlobals->time < m_flgeigerDelay)
|
||||||
@ -6356,7 +6358,7 @@ LINK_HOOK_CLASS_CHAIN(BOOL, CBasePlayer, AddPlayerItem, (CBasePlayerItem *pItem)
|
|||||||
BOOL CBasePlayer::__API_VHOOK(AddPlayerItem)(CBasePlayerItem *pItem)
|
BOOL CBasePlayer::__API_VHOOK(AddPlayerItem)(CBasePlayerItem *pItem)
|
||||||
{
|
{
|
||||||
CBasePlayerItem *pInsert = m_rgpPlayerItems[ pItem->iItemSlot() ];
|
CBasePlayerItem *pInsert = m_rgpPlayerItems[ pItem->iItemSlot() ];
|
||||||
while (pInsert != NULL)
|
while (pInsert)
|
||||||
{
|
{
|
||||||
if (FClassnameIs(pInsert->pev, STRING(pItem->pev->classname)))
|
if (FClassnameIs(pInsert->pev, STRING(pItem->pev->classname)))
|
||||||
{
|
{
|
||||||
|
@ -1162,7 +1162,7 @@ int CBasePlayerWeapon::__MAKE_VHOOK(UpdateClientData)(CBasePlayer *pPlayer)
|
|||||||
pPlayer->m_fWeapon = TRUE;
|
pPlayer->m_fWeapon = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_pNext != NULL)
|
if (m_pNext)
|
||||||
{
|
{
|
||||||
m_pNext->UpdateClientData(pPlayer);
|
m_pNext->UpdateClientData(pPlayer);
|
||||||
}
|
}
|
||||||
@ -1629,7 +1629,7 @@ void CWeaponBox::Kill()
|
|||||||
{
|
{
|
||||||
pWeapon = m_rgpPlayerItems[i];
|
pWeapon = m_rgpPlayerItems[i];
|
||||||
|
|
||||||
while (pWeapon != NULL)
|
while (pWeapon)
|
||||||
{
|
{
|
||||||
pWeapon->SetThink(&CBaseEntity::SUB_Remove);
|
pWeapon->SetThink(&CBaseEntity::SUB_Remove);
|
||||||
pWeapon->pev->nextthink = gpGlobals->time + 0.1f;
|
pWeapon->pev->nextthink = gpGlobals->time + 0.1f;
|
||||||
@ -1678,14 +1678,12 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
|||||||
for (int i = 0; i < MAX_ITEM_TYPES; ++i)
|
for (int i = 0; i < MAX_ITEM_TYPES; ++i)
|
||||||
{
|
{
|
||||||
if (!m_rgpPlayerItems[i])
|
if (!m_rgpPlayerItems[i])
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
CBasePlayerItem *pItem = m_rgpPlayerItems[i];
|
CBasePlayerItem *pItem = m_rgpPlayerItems[i];
|
||||||
|
|
||||||
// have at least one weapon in this slot
|
// have at least one weapon in this slot
|
||||||
while (pItem != NULL)
|
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(pItem))))
|
||||||
@ -1697,6 +1695,7 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
|||||||
if (pPlayer->HasRestrictItem((pItem->m_iId == WEAPON_SHIELDGUN) ? ITEM_SHIELDGUN : (ItemID)pItem->m_iId, ITEM_TYPE_TOUCHED))
|
if (pPlayer->HasRestrictItem((pItem->m_iId == WEAPON_SHIELDGUN) ? ITEM_SHIELDGUN : (ItemID)pItem->m_iId, ITEM_TYPE_TOUCHED))
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (FClassnameIs(pItem->pev, "weapon_c4"))
|
if (FClassnameIs(pItem->pev, "weapon_c4"))
|
||||||
{
|
{
|
||||||
#ifdef REGAMEDLL_FIXES
|
#ifdef REGAMEDLL_FIXES
|
||||||
@ -1734,8 +1733,7 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
|||||||
pPlayer->SetBombIcon(FALSE);
|
pPlayer->SetBombIcon(FALSE);
|
||||||
pPlayer->pev->body = 1;
|
pPlayer->pev->body = 1;
|
||||||
|
|
||||||
CBaseEntity *pEntity = NULL;
|
CBaseEntity *pEntity = nullptr;
|
||||||
|
|
||||||
while ((pEntity = UTIL_FindEntityByClassname(pEntity, "player")) != NULL)
|
while ((pEntity = UTIL_FindEntityByClassname(pEntity, "player")) != NULL)
|
||||||
{
|
{
|
||||||
if (FNullEnt(pEntity->edict()))
|
if (FNullEnt(pEntity->edict()))
|
||||||
@ -1761,29 +1759,48 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TheCSBots() != NULL)
|
if (TheCSBots())
|
||||||
{
|
{
|
||||||
TheCSBots()->SetLooseBomb(NULL);
|
TheCSBots()->SetLooseBomb(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TheBots != NULL)
|
if (TheBots)
|
||||||
{
|
{
|
||||||
TheBots->OnEvent(EVENT_BOMB_PICKED_UP, pPlayer);
|
TheBots->OnEvent(EVENT_BOMB_PICKED_UP, pPlayer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i >= PRIMARY_WEAPON_SLOT && i <= PISTOL_SLOT && pPlayer->m_rgpPlayerItems[i] != NULL)
|
if (i >= PRIMARY_WEAPON_SLOT && i <= PISTOL_SLOT && pPlayer->m_rgpPlayerItems[i])
|
||||||
{
|
{
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
else if (i == GRENADE_SLOT)
|
else if (i == GRENADE_SLOT)
|
||||||
{
|
{
|
||||||
CBasePlayerWeapon *pGrenade = static_cast<CBasePlayerWeapon *>(m_rgpPlayerItems[i]);
|
CBasePlayerWeapon *pGrenade = static_cast<CBasePlayerWeapon *>(m_rgpPlayerItems[i]);
|
||||||
if (pGrenade != NULL && pGrenade->IsWeapon())
|
if (pGrenade && pGrenade->IsWeapon())
|
||||||
{
|
{
|
||||||
int playerGrenades = pPlayer->m_rgAmmo[pGrenade->m_iPrimaryAmmoType];
|
int playerGrenades = pPlayer->m_rgAmmo[pGrenade->m_iPrimaryAmmoType];
|
||||||
|
|
||||||
|
#ifdef REGAMEDLL_FIXES
|
||||||
|
auto info = GetWeaponInfo(pGrenade->m_iId);
|
||||||
|
if (info && playerGrenades < info->maxRounds)
|
||||||
|
{
|
||||||
|
auto pNext = m_rgpPlayerItems[i]->m_pNext;
|
||||||
|
if (pPlayer->AddPlayerItem(pItem))
|
||||||
|
{
|
||||||
|
pItem->AttachToPlayer(pPlayer);
|
||||||
|
bEmitSound = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// unlink this weapon from the box
|
||||||
|
m_rgpPlayerItems[i] = pItem = pNext;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
int maxGrenades = 0;
|
int maxGrenades = 0;
|
||||||
const char *grenadeName = NULL;
|
const char *grenadeName = nullptr;
|
||||||
|
|
||||||
switch (pGrenade->m_iId)
|
switch (pGrenade->m_iId)
|
||||||
{
|
{
|
||||||
@ -1801,10 +1818,12 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playerGrenades < maxGrenades && grenadeName != NULL)
|
if (playerGrenades < maxGrenades && grenadeName)
|
||||||
{
|
{
|
||||||
|
// CRITICAL BUG: since gives a new entity using GiveNamedItem,
|
||||||
|
// but the entity is packaged in a weaponbox still exists and will never used or removed. It's leak!
|
||||||
bEmitSound = true;
|
bEmitSound = true;
|
||||||
pPlayer->GiveNamedItemEx(grenadeName);
|
pPlayer->GiveNamedItem(grenadeName);
|
||||||
|
|
||||||
// unlink this weapon from the box
|
// unlink this weapon from the box
|
||||||
pItem = m_rgpPlayerItems[i]->m_pNext;
|
pItem = m_rgpPlayerItems[i]->m_pNext;
|
||||||
@ -1812,6 +1831,8 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
|||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (pPlayer->HasShield() && i == PRIMARY_WEAPON_SLOT)
|
else if (pPlayer->HasShield() && i == PRIMARY_WEAPON_SLOT)
|
||||||
@ -1820,6 +1841,7 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
auto pNext = m_rgpPlayerItems[i]->m_pNext;
|
||||||
if (pPlayer->AddPlayerItem(pItem))
|
if (pPlayer->AddPlayerItem(pItem))
|
||||||
{
|
{
|
||||||
pItem->AttachToPlayer(pPlayer);
|
pItem->AttachToPlayer(pPlayer);
|
||||||
@ -1827,8 +1849,7 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// unlink this weapon from the box
|
// unlink this weapon from the box
|
||||||
pItem = m_rgpPlayerItems[i]->m_pNext;
|
m_rgpPlayerItems[i] = pItem = pNext;
|
||||||
m_rgpPlayerItems[i] = pItem;
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1845,11 +1866,6 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
|||||||
{
|
{
|
||||||
if (!FStringNull(m_rgiszAmmo[n]))
|
if (!FStringNull(m_rgiszAmmo[n]))
|
||||||
{
|
{
|
||||||
#ifdef REGAMEDLL_FIXES
|
|
||||||
if (FStrEq(STRING(m_rgiszAmmo[n]), "Flashbang") && m_rgAmmo[n] < MaxAmmoCarry(m_rgiszAmmo[n]))
|
|
||||||
continue;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// 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]));
|
||||||
|
|
||||||
|
@ -642,10 +642,16 @@ void CWorld::__MAKE_VHOOK(Precache)()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pev->spawnflags & SF_WORLD_DARK)
|
#ifndef REGAMEDLL_FIXES
|
||||||
CVAR_SET_FLOAT("v_dark", 1);
|
if (!IS_DEDICATED_SERVER())
|
||||||
else
|
#endif
|
||||||
CVAR_SET_FLOAT("v_dark", 0);
|
{
|
||||||
|
// TODO: cvar v_dark there is only the client side
|
||||||
|
if (pev->spawnflags & SF_WORLD_DARK)
|
||||||
|
CVAR_SET_FLOAT("v_dark", 1);
|
||||||
|
else
|
||||||
|
CVAR_SET_FLOAT("v_dark", 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (pev->spawnflags & SF_WORLD_TITLE)
|
if (pev->spawnflags & SF_WORLD_TITLE)
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,7 @@ void CHEGrenade::__MAKE_VHOOK(Spawn)()
|
|||||||
SET_MODEL(edict(), "models/w_hegrenade.mdl");
|
SET_MODEL(edict(), "models/w_hegrenade.mdl");
|
||||||
|
|
||||||
pev->dmg = 4;
|
pev->dmg = 4;
|
||||||
|
|
||||||
m_iDefaultAmmo = HEGRENADE_DEFAULT_GIVE;
|
m_iDefaultAmmo = HEGRENADE_DEFAULT_GIVE;
|
||||||
m_flStartThrow = 0;
|
m_flStartThrow = 0;
|
||||||
m_flReleaseThrow = -1.0f;
|
m_flReleaseThrow = -1.0f;
|
||||||
|
@ -95,7 +95,7 @@ typedef struct
|
|||||||
int fEnabled;
|
int fEnabled;
|
||||||
int fPlayLooping;
|
int fPlayLooping;
|
||||||
float cdvolume;
|
float cdvolume;
|
||||||
//BYTE remap[100];
|
//byte remap[100];
|
||||||
int fCDRom;
|
int fCDRom;
|
||||||
int fPlayTrack;
|
int fPlayTrack;
|
||||||
} CDStatus;
|
} CDStatus;
|
||||||
|
@ -88,7 +88,7 @@ public:
|
|||||||
Activity m_IdealActivity; // monster should switch to this activity
|
Activity m_IdealActivity; // monster should switch to this activity
|
||||||
int m_LastHitGroup; // the last body region that took damage
|
int m_LastHitGroup; // the last body region that took damage
|
||||||
int m_bitsDamageType; // what types of damage has monster (player) taken
|
int m_bitsDamageType; // what types of damage has monster (player) taken
|
||||||
BYTE m_rgbTimeBasedDamage[8];
|
byte m_rgbTimeBasedDamage[8];
|
||||||
|
|
||||||
MONSTERSTATE m_MonsterState; // monster's current state
|
MONSTERSTATE m_MonsterState; // monster's current state
|
||||||
MONSTERSTATE m_IdealMonsterState; // monster should change to this state
|
MONSTERSTATE m_IdealMonsterState; // monster should change to this state
|
||||||
|
@ -282,10 +282,10 @@ public:
|
|||||||
|
|
||||||
locksound_t m_ls; // door lock sounds
|
locksound_t m_ls; // door lock sounds
|
||||||
|
|
||||||
BYTE m_bLockedSound; // ordinals from entity selection
|
byte m_bLockedSound; // ordinals from entity selection
|
||||||
BYTE m_bLockedSentence;
|
byte m_bLockedSentence;
|
||||||
BYTE m_bUnlockedSound;
|
byte m_bUnlockedSound;
|
||||||
BYTE m_bUnlockedSentence;
|
byte m_bUnlockedSentence;
|
||||||
int m_sounds;
|
int m_sounds;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -56,17 +56,17 @@ public:
|
|||||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||||
virtual void Blocked(CBaseEntity *pOther) = 0;
|
virtual void Blocked(CBaseEntity *pOther) = 0;
|
||||||
public:
|
public:
|
||||||
BYTE m_bHealthValue; // some doors are medi-kit doors, they give players health
|
byte m_bHealthValue; // some doors are medi-kit doors, they give players health
|
||||||
|
|
||||||
BYTE m_bMoveSnd; // sound a door makes while moving
|
byte m_bMoveSnd; // sound a door makes while moving
|
||||||
BYTE m_bStopSnd; // sound a door makes when it stops
|
byte m_bStopSnd; // sound a door makes when it stops
|
||||||
|
|
||||||
locksound_t m_ls; // door lock sounds
|
locksound_t m_ls; // door lock sounds
|
||||||
|
|
||||||
BYTE m_bLockedSound; // ordinals from entity selection
|
byte m_bLockedSound; // ordinals from entity selection
|
||||||
BYTE m_bLockedSentence;
|
byte m_bLockedSentence;
|
||||||
BYTE m_bUnlockedSound;
|
byte m_bUnlockedSound;
|
||||||
BYTE m_bUnlockedSentence;
|
byte m_bUnlockedSentence;
|
||||||
|
|
||||||
float m_lastBlockedTimestamp;
|
float m_lastBlockedTimestamp;
|
||||||
};
|
};
|
||||||
@ -88,5 +88,5 @@ public:
|
|||||||
virtual int ObjectCaps() = 0;
|
virtual int ObjectCaps() = 0;
|
||||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||||
public:
|
public:
|
||||||
BYTE m_bMoveSnd; // sound a door makes while moving
|
byte m_bMoveSnd; // sound a door makes while moving
|
||||||
};
|
};
|
||||||
|
@ -75,8 +75,8 @@ typedef struct locksounds
|
|||||||
int iUnlockedSentence;
|
int iUnlockedSentence;
|
||||||
float flwaitSound;
|
float flwaitSound;
|
||||||
float flwaitSentence;
|
float flwaitSentence;
|
||||||
BYTE bEOFLocked;
|
byte bEOFLocked;
|
||||||
BYTE bEOFUnlocked;
|
byte bEOFUnlocked;
|
||||||
|
|
||||||
} locksound_t;
|
} locksound_t;
|
||||||
|
|
||||||
|
@ -52,8 +52,8 @@ public:
|
|||||||
// This is done to fix spawn flag collisions between this class and a derived class
|
// This is done to fix spawn flag collisions between this class and a derived class
|
||||||
virtual BOOL IsTogglePlat() = 0;
|
virtual BOOL IsTogglePlat() = 0;
|
||||||
public:
|
public:
|
||||||
BYTE m_bMoveSnd;
|
byte m_bMoveSnd;
|
||||||
BYTE m_bStopSnd;
|
byte m_bStopSnd;
|
||||||
float m_volume;
|
float m_volume;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ typedef struct
|
|||||||
int fEnabled;
|
int fEnabled;
|
||||||
int fPlayLooping;
|
int fPlayLooping;
|
||||||
float cdvolume;
|
float cdvolume;
|
||||||
//BYTE remap[100];
|
//byte remap[100];
|
||||||
int fCDRom;
|
int fCDRom;
|
||||||
int fPlayTrack;
|
int fPlayTrack;
|
||||||
} CDStatus;
|
} CDStatus;
|
||||||
|
@ -70,8 +70,6 @@ typedef unsigned char BYTE;
|
|||||||
typedef unsigned char byte;
|
typedef unsigned char byte;
|
||||||
typedef unsigned short word;
|
typedef unsigned short word;
|
||||||
|
|
||||||
#include "string_t.h"
|
|
||||||
|
|
||||||
typedef float vec_t;
|
typedef float vec_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -70,8 +70,6 @@ typedef unsigned char BYTE;
|
|||||||
typedef unsigned char byte;
|
typedef unsigned char byte;
|
||||||
typedef unsigned short word;
|
typedef unsigned short word;
|
||||||
|
|
||||||
#include "string_t.h"
|
|
||||||
|
|
||||||
typedef float vec_t;
|
typedef float vec_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,106 +0,0 @@
|
|||||||
//========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ==========
|
|
||||||
//
|
|
||||||
// Purpose: Defines the more complete set of operations on the string_t defined
|
|
||||||
// These should be used instead of direct manipulation to allow more
|
|
||||||
// flexibility in future ports or optimization.
|
|
||||||
//
|
|
||||||
// $NoKeywords: $
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
#ifndef STRING_T_H
|
|
||||||
#define STRING_T_H
|
|
||||||
|
|
||||||
#if defined( _WIN32 )
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "osconfig.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#ifndef NO_STRING_T
|
|
||||||
|
|
||||||
#ifdef WEAK_STRING_T
|
|
||||||
|
|
||||||
typedef int valve_string_t;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Purpose: The correct way to specify the NULL string as a constant.
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#define NULL_STRING 0
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Purpose: Given a string_t, make a C string. By convention the result string
|
|
||||||
// pointer should be considered transient and should not be stored.
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#define STRING( offset ) ( ( offset ) ? reinterpret_cast<const char *>( offset ) : "" )
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Purpose: Given a C string, obtain a string_t
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#define MAKE_STRING( str ) ( ( *str != 0 ) ? reinterpret_cast<int>( str ) : 0 )
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#else // Strong string_t
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
struct valve_string_t
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bool operator!() const { return (pszValue == NULL); }
|
|
||||||
bool operator==(const valve_string_t &rhs) const { return (pszValue == rhs.pszValue); }
|
|
||||||
bool operator!=(const valve_string_t &rhs) const { return (pszValue != rhs.pszValue); }
|
|
||||||
|
|
||||||
const char *ToCStr() const { return (pszValue) ? pszValue : ""; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
const char *pszValue;
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
struct castable_string_t : public valve_string_t // string_t is used in unions, hence, no constructor allowed
|
|
||||||
{
|
|
||||||
castable_string_t() { pszValue = NULL; }
|
|
||||||
castable_string_t(const char *pszFrom) { pszValue = (*pszFrom != 0) ? pszFrom : 0; }
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Purpose: The correct way to specify the NULL string as a constant.
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#define NULL_STRING castable_string_t()
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Purpose: Given a string_t, make a C string. By convention the result string
|
|
||||||
// pointer should be considered transient and should not be stored.
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#define STRING( string_t_obj ) (string_t_obj).ToCStr()
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Purpose: Given a C string, obtain a string_t
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#define MAKE_STRING( c_str ) castable_string_t( c_str )
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else // NO_STRING_T
|
|
||||||
|
|
||||||
typedef const char *string_t;
|
|
||||||
#define NULL_STRING 0
|
|
||||||
#define STRING( c_str ) ( c_str )
|
|
||||||
#define MAKE_STRING( c_str ) ( c_str )
|
|
||||||
|
|
||||||
#endif // NO_STRING_T
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
#endif // STRING_T_H
|
|
@ -3,7 +3,6 @@
|
|||||||
#include "version/appversion.h"
|
#include "version/appversion.h"
|
||||||
|
|
||||||
#include "osconfig.h"
|
#include "osconfig.h"
|
||||||
|
|
||||||
#include "basetypes.h"
|
#include "basetypes.h"
|
||||||
#include "archtypes.h"
|
#include "archtypes.h"
|
||||||
#include "sse_mathfun.h"
|
#include "sse_mathfun.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user