mirror of
https://github.com/s1lentq/ReGameDLL_CS.git
synced 2025-03-03 17:25:24 +03:00
commit
a9d5e3bb4a
@ -1,4 +1,4 @@
|
||||
# ReGameDLL_CS
|
||||
# ReGameDLL_CS [/statusIcon)](http://teamcity.rehlds.org/viewType.html?buildTypeId=ReGameDLLCs_Publish&guest=1)
|
||||
Reverse-engineered gamedll (mp.dll / Counter-Strike)
|
||||
|
||||
## What is this?
|
||||
|
19
dist/game.cfg
vendored
19
dist/game.cfg
vendored
@ -30,3 +30,22 @@ mp_maxmoney 16000
|
||||
// Example setting: "ae" - blocks round time and bomb round end checks
|
||||
// Default value: "0"
|
||||
mp_round_infinite 0
|
||||
|
||||
// Disable grenade damage through walls
|
||||
// 0 - disabled
|
||||
// 1 - enabled
|
||||
// Default value: "0"
|
||||
mp_hegrenade_penetration 0
|
||||
|
||||
// Drop a grenade after player death
|
||||
// 0 - disabled
|
||||
// 1 - enabled (only the first slot grenades)
|
||||
// 2 - drop a everyone
|
||||
// Default value: "0"
|
||||
mp_nadedrops 0
|
||||
|
||||
// Player cannot respawn until next round
|
||||
// if more than N seconds has elapsed since the beginning round
|
||||
//
|
||||
// Default value: "20"
|
||||
mp_roundrespawn_time 20
|
||||
|
@ -46,26 +46,12 @@ task publishPrepareFiles {
|
||||
into 'publish/publishRoot'
|
||||
}
|
||||
|
||||
//hlsdk
|
||||
//project.file('publish/publishRoot/hlsdk').mkdirs()
|
||||
//copy {
|
||||
// from 'regamedll/common'
|
||||
// into 'publish/publishRoot/hlsdk/common'
|
||||
//}
|
||||
//copy {
|
||||
// from 'regamedll/dlls'
|
||||
// into 'publish/publishRoot/hlsdk/dlls'
|
||||
//}
|
||||
//copy {
|
||||
// from 'regamedll/pm_shared'
|
||||
// into 'publish/publishRoot/hlsdk/pm_shared'
|
||||
//}
|
||||
//copy {
|
||||
// from 'regamedll/public'
|
||||
// into 'publish/publishRoot/hlsdk/public'
|
||||
// include 'interface.h', 'interface.cpp', 'FileSystem.h'
|
||||
//}
|
||||
|
||||
//cssdk
|
||||
project.file('publish/publishRoot/cssdk').mkdirs()
|
||||
copy {
|
||||
from 'regamedll/extra/cssdk'
|
||||
into 'publish/publishRoot/cssdk'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -104,7 +104,7 @@ void setupToolchain(NativeBinarySpec b)
|
||||
b.lib LazyNativeDepSet.create(dep_cppunitlite, 'cppunitlite', b.buildType.name, true)
|
||||
}
|
||||
|
||||
cfg.singleDefines 'USE_BREAKPAD_HANDLER', 'DEDICATED', 'REGAMEDLL_SELF', 'CLIENT_WEAPONS'
|
||||
cfg.singleDefines 'USE_BREAKPAD_HANDLER', 'DEDICATED', 'REGAMEDLL_SELF', 'REGAMEDLL_API', 'CLIENT_WEAPONS'
|
||||
|
||||
if (cfg instanceof MsvcToolchainConfig)
|
||||
{
|
||||
@ -146,7 +146,8 @@ void setupToolchain(NativeBinarySpec b)
|
||||
'_vsnprintf': 'vsnprintf',
|
||||
'_write' : 'write',
|
||||
'_close' : 'close',
|
||||
'_vsnwprintf' : 'vswprintf'
|
||||
'_vsnwprintf' : 'vswprintf',
|
||||
'_access' : 'access'
|
||||
])
|
||||
|
||||
cfg.linkerOptions.args '-no-opt-class-analysis'
|
||||
|
@ -45,19 +45,11 @@ typedef float float_precision;
|
||||
|
||||
#endif // PLAY_GAMEDLL
|
||||
|
||||
/* <42b7f> ../common/mathlib.h:3 */
|
||||
typedef float vec_t;
|
||||
|
||||
/* <42b91> ../common/mathlib.h:6 */
|
||||
typedef vec_t vec3_t[3];
|
||||
|
||||
/* <80013> ../common/mathlib.h:8 */
|
||||
typedef vec_t vec4_t[4];
|
||||
|
||||
/* <42bac> ../common/mathlib.h:18 */
|
||||
typedef int fixed16_t;
|
||||
|
||||
/* <42bb7> ../common/mathlib.h:60 */
|
||||
typedef union DLONG_u
|
||||
{
|
||||
int i[2];
|
||||
|
@ -32,7 +32,7 @@
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
typedef enum
|
||||
typedef enum Activity_s
|
||||
{
|
||||
ACT_INVALID = -1,
|
||||
|
||||
|
@ -12,7 +12,7 @@ TYPEDESCRIPTION CAirtank::m_SaveData[] =
|
||||
|
||||
#endif
|
||||
|
||||
LINK_ENTITY_TO_CLASS(item_airtank, CAirtank);
|
||||
LINK_ENTITY_TO_CLASS(item_airtank, CAirtank, CCSAirtank);
|
||||
IMPLEMENT_SAVERESTORE(CAirtank, CGrenade);
|
||||
|
||||
void CAirtank::__MAKE_VHOOK(Spawn)()
|
||||
|
@ -24,7 +24,7 @@ BOOL C9MMAmmo::__MAKE_VHOOK(AddAmmo)(CBaseEntity *pOther)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(ammo_9mm, C9MMAmmo);
|
||||
LINK_ENTITY_TO_CLASS(ammo_9mm, C9MMAmmo, CCS9MMAmmo);
|
||||
|
||||
void CBuckShotAmmo::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -50,7 +50,7 @@ BOOL CBuckShotAmmo::__MAKE_VHOOK(AddAmmo)(CBaseEntity *pOther)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(ammo_buckshot, CBuckShotAmmo);
|
||||
LINK_ENTITY_TO_CLASS(ammo_buckshot, CBuckShotAmmo, CCSBuckShotAmmo);
|
||||
|
||||
void C556NatoAmmo::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -76,7 +76,7 @@ BOOL C556NatoAmmo::__MAKE_VHOOK(AddAmmo)(CBaseEntity *pOther)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(ammo_556nato, C556NatoAmmo);
|
||||
LINK_ENTITY_TO_CLASS(ammo_556nato, C556NatoAmmo, CCS556NatoAmmo);
|
||||
|
||||
void C556NatoBoxAmmo::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -102,7 +102,7 @@ BOOL C556NatoBoxAmmo::__MAKE_VHOOK(AddAmmo)(CBaseEntity *pOther)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(ammo_556natobox, C556NatoBoxAmmo);
|
||||
LINK_ENTITY_TO_CLASS(ammo_556natobox, C556NatoBoxAmmo, CCS556NatoBoxAmmo);
|
||||
|
||||
void C762NatoAmmo::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -128,7 +128,7 @@ BOOL C762NatoAmmo::__MAKE_VHOOK(AddAmmo)(CBaseEntity *pOther)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(ammo_762nato, C762NatoAmmo);
|
||||
LINK_ENTITY_TO_CLASS(ammo_762nato, C762NatoAmmo, CCS762NatoAmmo);
|
||||
|
||||
void C45ACPAmmo::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -154,7 +154,7 @@ BOOL C45ACPAmmo::__MAKE_VHOOK(AddAmmo)(CBaseEntity *pOther)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(ammo_45acp, C45ACPAmmo);
|
||||
LINK_ENTITY_TO_CLASS(ammo_45acp, C45ACPAmmo, CCS45ACPAmmo);
|
||||
|
||||
void C50AEAmmo::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -180,7 +180,7 @@ BOOL C50AEAmmo::__MAKE_VHOOK(AddAmmo)(CBaseEntity *pOther)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(ammo_50ae, C50AEAmmo);
|
||||
LINK_ENTITY_TO_CLASS(ammo_50ae, C50AEAmmo, CCS50AEAmmo);
|
||||
|
||||
void C338MagnumAmmo::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -206,7 +206,7 @@ BOOL C338MagnumAmmo::__MAKE_VHOOK(AddAmmo)(CBaseEntity *pOther)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(ammo_338magnum, C338MagnumAmmo);
|
||||
LINK_ENTITY_TO_CLASS(ammo_338magnum, C338MagnumAmmo, CCS338MagnumAmmo);
|
||||
|
||||
void C57MMAmmo::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -232,7 +232,7 @@ BOOL C57MMAmmo::__MAKE_VHOOK(AddAmmo)(CBaseEntity *pOther)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(ammo_57mm, C57MMAmmo);
|
||||
LINK_ENTITY_TO_CLASS(ammo_57mm, C57MMAmmo, CCS57MMAmmo);
|
||||
|
||||
void C357SIGAmmo::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -258,4 +258,4 @@ BOOL C357SIGAmmo::__MAKE_VHOOK(AddAmmo)(CBaseEntity *pOther)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(ammo_357sig, C357SIGAmmo);
|
||||
LINK_ENTITY_TO_CLASS(ammo_357sig, C357SIGAmmo, CCS357SIGAmmo);
|
||||
|
@ -101,7 +101,9 @@ int CBaseAnimating::LookupSequence(const char *label)
|
||||
return ::LookupSequence(pmodel, label);
|
||||
}
|
||||
|
||||
void CBaseAnimating::ResetSequenceInfo()
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBaseAnimating, ResetSequenceInfo)
|
||||
|
||||
void CBaseAnimating::__API_HOOK(ResetSequenceInfo)()
|
||||
{
|
||||
void *pmodel = GET_MODEL_PTR(ENT(pev));
|
||||
|
||||
|
@ -32,6 +32,19 @@
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
enum MONSTERSTATE
|
||||
{
|
||||
MONSTERSTATE_NONE = 0,
|
||||
MONSTERSTATE_IDLE,
|
||||
MONSTERSTATE_COMBAT,
|
||||
MONSTERSTATE_ALERT,
|
||||
MONSTERSTATE_HUNT,
|
||||
MONSTERSTATE_PRONE,
|
||||
MONSTERSTATE_SCRIPT,
|
||||
MONSTERSTATE_PLAYDEAD,
|
||||
MONSTERSTATE_DEAD
|
||||
};
|
||||
|
||||
void RadiusFlash(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int iClassIgnore = 0, int bitsDamageType = 0);
|
||||
void RadiusDamage(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, float flRadius, int iClassIgnore, int bitsDamageType);
|
||||
void RadiusDamage2(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, float flRadius, int iClassIgnore, int bitsDamageType);
|
||||
|
@ -31,10 +31,10 @@ TYPEDESCRIPTION CPendulum::m_SaveData[] =
|
||||
// BModelOrigin - calculates origin of a bmodel from absmin/size because all bmodel origins are 0 0 0
|
||||
Vector VecBModelOrigin(entvars_t *pevBModel)
|
||||
{
|
||||
return pevBModel->absmin + (pevBModel->size * 0.5);
|
||||
return pevBModel->absmin + (pevBModel->size * 0.5f);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_wall, CFuncWall);
|
||||
LINK_ENTITY_TO_CLASS(func_wall, CFuncWall, CCSFuncWall);
|
||||
|
||||
void CFuncWall::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -58,7 +58,7 @@ void CFuncWall::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller,
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_wall_toggle, CFuncWallToggle);
|
||||
LINK_ENTITY_TO_CLASS(func_wall_toggle, CFuncWallToggle, CCSFuncWallToggle);
|
||||
|
||||
void CFuncWallToggle::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -107,7 +107,7 @@ void CFuncWallToggle::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pC
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_conveyor, CFuncConveyor);
|
||||
LINK_ENTITY_TO_CLASS(func_conveyor, CFuncConveyor, CCSFuncConveyor);
|
||||
|
||||
void CFuncConveyor::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -154,7 +154,7 @@ void CFuncConveyor::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCal
|
||||
UpdateSpeed(pev->speed);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_illusionary, CFuncIllusionary);
|
||||
LINK_ENTITY_TO_CLASS(func_illusionary, CFuncIllusionary, CCSFuncIllusionary);
|
||||
|
||||
void CFuncIllusionary::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -184,7 +184,7 @@ void CFuncIllusionary::__MAKE_VHOOK(Spawn)()
|
||||
// MAKE_STATIC(ENT(pev));
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_monsterclip, CFuncMonsterClip);
|
||||
LINK_ENTITY_TO_CLASS(func_monsterclip, CFuncMonsterClip, CCSFuncMonsterClip);
|
||||
|
||||
void CFuncMonsterClip::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -198,8 +198,7 @@ void CFuncMonsterClip::__MAKE_VHOOK(Spawn)()
|
||||
pev->flags |= FL_MONSTERCLIP;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_rotating, CFuncRotating);
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_rotating, CFuncRotating, CCSFuncRotating);
|
||||
IMPLEMENT_SAVERESTORE(CFuncRotating, CBaseEntity);
|
||||
|
||||
void CFuncRotating::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -602,7 +601,7 @@ void CFuncRotating::__MAKE_VHOOK(Blocked)(CBaseEntity *pOther)
|
||||
pOther->TakeDamage(pev, pev, pev->dmg, DMG_CRUSH);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_pendulum, CPendulum);
|
||||
LINK_ENTITY_TO_CLASS(func_pendulum, CPendulum, CCSPendulum);
|
||||
IMPLEMENT_SAVERESTORE(CPendulum, CBaseEntity);
|
||||
|
||||
void CPendulum::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
|
@ -1,5 +1,12 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
#ifdef REGAMEDLL_ADD
|
||||
// Give 3rd-party to get the virtual table of the object.
|
||||
// Example: AMXModX module: Hamsandwich
|
||||
// RegisterHam(Ham_Spawn, "bot", "CCSBot__Spawn", 1);
|
||||
LINK_ENTITY_TO_CLASS(bot, CCSBot, CAPI_CSBot);
|
||||
#endif
|
||||
|
||||
// Return the number of bots following the given player
|
||||
int GetBotFollowCount(CBasePlayer *leader)
|
||||
{
|
||||
@ -68,7 +75,7 @@ bool CCSBot::__MAKE_VHOOK(Jump)(bool mustJump)
|
||||
// NOTE: We dont want to directly call Attack() here, or the bots will have super-human reaction times when injured
|
||||
int CCSBot::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType)
|
||||
{
|
||||
CBaseEntity *attacker = GetClassPtr((CBaseEntity *)pevInflictor);
|
||||
CBaseEntity *attacker = GetClassPtr<CCSEntity>((CBaseEntity *)pevInflictor);
|
||||
|
||||
// if we were attacked by a teammate, rebuke
|
||||
if (attacker->IsPlayer())
|
||||
|
@ -421,8 +421,6 @@ class CCSBot: public CBot
|
||||
{
|
||||
public:
|
||||
CCSBot(); // constructor initializes all values to zero
|
||||
|
||||
public:
|
||||
virtual int TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType); // invoked when injured by something (EXTEND) - returns the amount of damage inflicted
|
||||
virtual void Killed(entvars_t *pevAttacker, int iGib); // invoked when killed (EXTEND)
|
||||
virtual void RoundRespawn();
|
||||
@ -967,6 +965,7 @@ private:
|
||||
NUM_LOOK_AT_SPOT_STATES
|
||||
}
|
||||
m_lookAtSpotState;
|
||||
|
||||
Vector m_lookAtSpot; // the spot we're currently looking at
|
||||
PriorityType m_lookAtSpotPriority;
|
||||
float m_lookAtSpotDuration; // how long we need to look at the spot
|
||||
@ -1110,7 +1109,7 @@ private:
|
||||
CNavNode *m_currentNode;
|
||||
NavDirType m_generationDir;
|
||||
NavAreaList::iterator m_analyzeIter;
|
||||
|
||||
|
||||
enum ProcessType
|
||||
{
|
||||
PROCESS_NORMAL,
|
||||
@ -1525,12 +1524,12 @@ inline float CCSBot::GetFeetZ() const
|
||||
{
|
||||
if (IsCrouching())
|
||||
{
|
||||
const Vector crouch = Vector(0, 0, -StepHeight);
|
||||
const Vector crouch(0, 0, -StepHeight);
|
||||
return (pev->origin + crouch).z;
|
||||
}
|
||||
else
|
||||
{
|
||||
const Vector stand = Vector(0, 0, -HalfHumanHeight);
|
||||
const Vector stand(0, 0, -HalfHumanHeight);
|
||||
return (pev->origin + stand).z;
|
||||
}
|
||||
}
|
||||
@ -1726,7 +1725,7 @@ public:
|
||||
//{
|
||||
// fallDistance = ladder->m_bottom.z - area->GetCenter()->z;
|
||||
//}
|
||||
|
||||
|
||||
float fallDamage = m_bot->GetApproximateFallDamage(fallDistance);
|
||||
|
||||
if (fallDamage > 0.0f)
|
||||
|
@ -419,6 +419,14 @@ bool BotPhraseManager::Initialize(const char *filename, int bankIndex)
|
||||
char baseDir[RadioPathLen] = "";
|
||||
char compositeFilename[RadioPathLen];
|
||||
|
||||
#ifdef REGAMEDLL_ADD
|
||||
char soundDir[MAX_PATH];
|
||||
char filePath[MAX_PATH];
|
||||
|
||||
GET_GAME_DIR(soundDir);
|
||||
Q_strcat(soundDir, "\\sound\\");
|
||||
#endif
|
||||
|
||||
// Parse the BotChatter.db into BotPhrase collections
|
||||
while (true)
|
||||
{
|
||||
@ -567,8 +575,8 @@ bool BotPhraseManager::Initialize(const char *filename, int bankIndex)
|
||||
FREE_FILE(phraseDataFile);
|
||||
return false;
|
||||
}
|
||||
token = MP_COM_GetToken();
|
||||
|
||||
token = MP_COM_GetToken();
|
||||
GameEventType event = NameToGameEvent(token);
|
||||
if (event <= EVENT_START_RADIO_1 || event >= EVENT_END_RADIO)
|
||||
{
|
||||
@ -578,7 +586,6 @@ bool BotPhraseManager::Initialize(const char *filename, int bankIndex)
|
||||
}
|
||||
|
||||
radioEvent = event;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -593,6 +600,13 @@ bool BotPhraseManager::Initialize(const char *filename, int bankIndex)
|
||||
if (!Q_stricmp(token, "End"))
|
||||
break;
|
||||
|
||||
#ifdef REGAMEDLL_ADD
|
||||
Q_snprintf(filePath, sizeof(filePath), "%s%s%s", soundDir, baseDir, token);
|
||||
|
||||
if (Q_access(filePath, 0) != 0)
|
||||
continue;
|
||||
#endif
|
||||
|
||||
// found a phrase - add it to the collection
|
||||
BotSpeakable *speak = new BotSpeakable;
|
||||
if (baseDir[0])
|
||||
|
@ -347,7 +347,7 @@ void CCSBotManager::__MAKE_VHOOK(ClientDisconnect)(CBasePlayer *pPlayer)
|
||||
|
||||
FREE_PRIVATE(pPlayer->edict());
|
||||
|
||||
CBasePlayer *player = GetClassPtr((CBasePlayer *)temp);
|
||||
CBasePlayer *player = GetClassPtr<CCSPlayer>((CBasePlayer *)temp);
|
||||
AddEntityHashValue(player->pev, STRING(player->pev->classname), CLASSNAME);
|
||||
player->pev->flags = FL_DORMANT;
|
||||
}
|
||||
@ -376,7 +376,7 @@ void CCSBotManager::__MAKE_VHOOK(ServerCommand)(const char *pcmd)
|
||||
|
||||
if (FStrEq(pcmd, "bot_about"))
|
||||
{
|
||||
Q_sprintf(buffer, "\n--------------------------------------------------------------------------\nThe Official Counter-Strike Bot V%d.%02d\nCreated by Michael S. Booth\nWeb: www.turtlerockstudios.com\\csbot\nE-mail: csbot@turtlerockstudios.com\n--------------------------------------------------------------------------\n\n", CSBOT_VERSION_MAJOR, CSBOT_VERSION_MINOR);
|
||||
Q_sprintf(buffer, "\n--------------------------------------------------------------------------\nThe Official Counter-Strike Bot V%d.%02d\nCreated by Michael S. Booth\nWeb: www.turtlerockstudios.com\\csbot\nE-mail: csbot@turtlerockstudios.com\n--------------------------------------------------------------------------\n\n", BOT_VERSION_MAJOR, BOT_VERSION_MINOR);
|
||||
CONSOLE_ECHO(buffer);
|
||||
HintMessageToAllPlayers(buffer);
|
||||
}
|
||||
@ -681,7 +681,7 @@ void CCSBotManager::__MAKE_VHOOK(ServerCommand)(const char *pcmd)
|
||||
if ((pEntity->pev->flags & FL_DORMANT) == FL_DORMANT)
|
||||
continue;
|
||||
|
||||
CBasePlayer *playerOrBot = GetClassPtr((CBasePlayer *)pEntity->pev);
|
||||
CBasePlayer *playerOrBot = GetClassPtr<CCSPlayer>((CBasePlayer *)pEntity->pev);
|
||||
|
||||
if (playerOrBot->IsBot())
|
||||
{
|
||||
@ -1189,7 +1189,7 @@ bool CCSBotManager::AddBot(const BotProfile *profile, BotProfileTeamType team)
|
||||
return false;
|
||||
}
|
||||
|
||||
CCSBot *pBot = CreateBot<CCSBot>(profile);
|
||||
CCSBot *pBot = CreateBot<CCSBot, CAPI_CSBot>(profile);
|
||||
if (pBot == NULL)
|
||||
{
|
||||
return false;
|
||||
|
@ -409,7 +409,7 @@ NOXREF bool CCSBot::FindApproachPointNearestPath(Vector *pos)
|
||||
if (m_approachPointCount == 0)
|
||||
return false;
|
||||
|
||||
Vector target = Vector(0, 0, 0), close;
|
||||
Vector target(0, 0, 0), close;
|
||||
float targetRangeSq = 0.0f;
|
||||
bool found = false;
|
||||
|
||||
|
@ -633,7 +633,7 @@ int CCSBot::FindOurPositionOnPath(Vector *close, bool local) const
|
||||
return -1;
|
||||
|
||||
Vector along, toFeet;
|
||||
Vector feet = Vector(pev->origin.x, pev->origin.y, GetFeetZ());
|
||||
Vector feet(pev->origin.x, pev->origin.y, GetFeetZ());
|
||||
Vector eyes = feet + Vector(0, 0, HalfHumanHeight); // in case we're crouching
|
||||
Vector pos;
|
||||
const Vector *from, *to;
|
||||
@ -857,7 +857,7 @@ int CCSBot::FindPathPoint(float aheadRange, Vector *point, int *prevIndex)
|
||||
Vector initDir = m_path[ startIndex ].pos - m_path[ startIndex - 1 ].pos;
|
||||
initDir.NormalizeInPlace();
|
||||
|
||||
Vector feet = Vector(pev->origin.x, pev->origin.y, GetFeetZ());
|
||||
Vector feet(pev->origin.x, pev->origin.y, GetFeetZ());
|
||||
Vector eyes = feet + Vector(0, 0, HalfHumanHeight);
|
||||
float rangeSoFar = 0;
|
||||
|
||||
@ -1172,7 +1172,7 @@ void CCSBot::FeelerReflexAdjustment(Vector *goalPosition)
|
||||
// correct the sideways vector
|
||||
lat = CrossProduct(dir, normal);
|
||||
|
||||
Vector feet = Vector(pev->origin.x, pev->origin.y, GetFeetZ());
|
||||
Vector feet(pev->origin.x, pev->origin.y, GetFeetZ());
|
||||
feet.z += feelerHeight;
|
||||
|
||||
Vector from = feet + feelerOffset * lat;
|
||||
|
@ -53,7 +53,7 @@ TYPEDESCRIPTION CEnvSpark::m_SaveData[] =
|
||||
#endif // HOOK_GAMEDLL
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CEnvGlobal, CBaseEntity);
|
||||
LINK_ENTITY_TO_CLASS(env_global, CEnvGlobal);
|
||||
LINK_ENTITY_TO_CLASS(env_global, CEnvGlobal, CCSEnvGlobal);
|
||||
|
||||
void CEnvGlobal::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -135,7 +135,7 @@ void CEnvGlobal::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CMultiSource, CBaseEntity);
|
||||
LINK_ENTITY_TO_CLASS(multisource, CMultiSource);
|
||||
LINK_ENTITY_TO_CLASS(multisource, CMultiSource, CCSMultiSource);
|
||||
|
||||
// Cache user-entity-field values until spawn is called.
|
||||
void CMultiSource::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -425,7 +425,7 @@ int CBaseButton::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *pe
|
||||
// 1) wooden clunk
|
||||
// 2) metallic click
|
||||
// 3) in-out
|
||||
LINK_ENTITY_TO_CLASS(func_button, CBaseButton);
|
||||
LINK_ENTITY_TO_CLASS(func_button, CBaseButton, CCSButton);
|
||||
|
||||
void CBaseButton::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -789,7 +789,7 @@ void CBaseButton::ButtonBackHome()
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_rot_button, CRotButton);
|
||||
LINK_ENTITY_TO_CLASS(func_rot_button, CRotButton, CCSRotButton);
|
||||
|
||||
void CRotButton::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -856,7 +856,7 @@ void CRotButton::__MAKE_VHOOK(Spawn)()
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CMomentaryRotButton, CBaseToggle);
|
||||
LINK_ENTITY_TO_CLASS(momentary_rot_button, CMomentaryRotButton);
|
||||
LINK_ENTITY_TO_CLASS(momentary_rot_button, CMomentaryRotButton, CCSMomentaryRotButton);
|
||||
|
||||
void CMomentaryRotButton::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1071,8 +1071,8 @@ void CMomentaryRotButton::UpdateSelfReturn(float value)
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CEnvSpark, CBaseEntity);
|
||||
LINK_ENTITY_TO_CLASS(env_spark, CEnvSpark);
|
||||
LINK_ENTITY_TO_CLASS(env_debris, CEnvSpark);
|
||||
LINK_ENTITY_TO_CLASS(env_spark, CEnvSpark, CCSEnvSpark);
|
||||
LINK_ENTITY_TO_CLASS(env_debris, CEnvSpark, CCSEnvSpark);
|
||||
|
||||
void CEnvSpark::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1154,7 +1154,7 @@ void CEnvSpark::SparkStop(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYP
|
||||
SetThink(NULL);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(button_target, CButtonTarget);
|
||||
LINK_ENTITY_TO_CLASS(button_target, CButtonTarget, CCSButtonTarget);
|
||||
|
||||
void CButtonTarget::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -34,8 +34,8 @@
|
||||
|
||||
#define SF_BUTTON_DONTMOVE 1
|
||||
#define SF_ROTBUTTON_NOTSOLID 1
|
||||
#define SF_BUTTON_TOGGLE 32 // button stays pushed until reactivated
|
||||
#define SF_BUTTON_SPARK_IF_OFF 64 // button sparks in OFF state
|
||||
#define SF_BUTTON_TOGGLE 32 // button stays pushed until reactivated
|
||||
#define SF_BUTTON_SPARK_IF_OFF 64 // button sparks in OFF state
|
||||
#define SF_BUTTON_TOUCH_ONLY 256 // button only fires as a result of USE key.
|
||||
|
||||
#define SF_GLOBAL_SET 1 // Set global state to initial state on spawn
|
||||
@ -170,7 +170,6 @@ public:
|
||||
|
||||
public:
|
||||
static TYPEDESCRIPTION IMPL(m_SaveData)[1];
|
||||
|
||||
float m_flDelay;
|
||||
};
|
||||
|
||||
|
@ -62,6 +62,8 @@ static DLL_FUNCTIONS gFunctionTable =
|
||||
static NEW_DLL_FUNCTIONS gNewDLLFunctions
|
||||
{
|
||||
&OnFreeEntPrivateData,
|
||||
&GameDLLShutdown,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
@ -283,7 +285,7 @@ void printEntities()
|
||||
}
|
||||
}
|
||||
|
||||
NOINLINE edict_t *CREATE_NAMED_ENTITY(string_t iClass)
|
||||
NOINLINE edict_t *EXT_FUNC CREATE_NAMED_ENTITY(string_t iClass)
|
||||
{
|
||||
edict_t *named = g_engfuncs.pfnCreateNamedEntity(iClass);
|
||||
if (named != NULL)
|
||||
@ -1080,4 +1082,5 @@ void OnFreeEntPrivateData(edict_t *pEnt)
|
||||
|
||||
pEntity->UpdateOnRemove();
|
||||
RemoveEntityHashValue(pEntity->pev, STRING(pEntity->pev->classname), CLASSNAME);
|
||||
Regamedll_FreeEntities(pEntity);
|
||||
}
|
||||
|
@ -39,16 +39,19 @@
|
||||
#undef CREATE_NAMED_ENTITY
|
||||
#undef REMOVE_ENTITY
|
||||
|
||||
// These are caps bits to indicate what an object's capabilities (currently used for save/restore and level transitions)
|
||||
#define FCAP_CUSTOMSAVE 0x00000001
|
||||
#define FCAP_ACROSS_TRANSITION 0x00000002
|
||||
#define FCAP_MUST_SPAWN 0x00000004
|
||||
#define FCAP_DONT_SAVE 0x80000000
|
||||
#define FCAP_IMPULSE_USE 0x00000008
|
||||
#define FCAP_CONTINUOUS_USE 0x00000010
|
||||
#define FCAP_ONOFF_USE 0x00000020
|
||||
#define FCAP_DIRECTIONAL_USE 0x00000040
|
||||
#define FCAP_MASTER 0x00000080
|
||||
#define FCAP_FORCE_TRANSITION 0x00000080
|
||||
#define FCAP_ACROSS_TRANSITION 0x00000002 // should transfer between transitions
|
||||
#define FCAP_MUST_SPAWN 0x00000004 // Spawn after restore
|
||||
#define FCAP_DONT_SAVE 0x80000000 // Don't save this
|
||||
#define FCAP_IMPULSE_USE 0x00000008 // can be used by the player
|
||||
#define FCAP_CONTINUOUS_USE 0x00000010 // can be used by the player
|
||||
#define FCAP_ONOFF_USE 0x00000020 // can be used by the player
|
||||
#define FCAP_DIRECTIONAL_USE 0x00000040 // Player sends +/- 1 when using (currently only tracktrains)
|
||||
#define FCAP_MASTER 0x00000080 // Can be used to "master" other entities (like multisource)
|
||||
|
||||
// UNDONE: This will ignore transition volumes (trigger_transition), but not the PVS!!!
|
||||
#define FCAP_FORCE_TRANSITION 0x00000080 // ALWAYS goes across transitions
|
||||
|
||||
#define SetThink(a)\
|
||||
m_pfnThink = static_cast<void (CBaseEntity::*)()>(a)
|
||||
@ -62,6 +65,7 @@
|
||||
#define SetMoveDone(a)\
|
||||
m_pfnCallWhenMoveDone = static_cast<void (CBaseToggle::*)()>(a)
|
||||
|
||||
// for Classify
|
||||
#define CLASS_NONE 0
|
||||
#define CLASS_MACHINE 1
|
||||
#define CLASS_PLAYER 2
|
||||
@ -74,10 +78,10 @@
|
||||
#define CLASS_ALIEN_PREDATOR 9
|
||||
#define CLASS_INSECT 10
|
||||
#define CLASS_PLAYER_ALLY 11
|
||||
#define CLASS_PLAYER_BIOWEAPON 12
|
||||
#define CLASS_ALIEN_BIOWEAPON 13
|
||||
#define CLASS_PLAYER_BIOWEAPON 12 // hornets and snarks.launched by players
|
||||
#define CLASS_ALIEN_BIOWEAPON 13 // hornets and snarks.launched by the alien menace
|
||||
#define CLASS_VEHICLE 14
|
||||
#define CLASS_BARNACLE 99
|
||||
#define CLASS_BARNACLE 99 // special because no one pays attention to it, and it eats a wide cross-section of creatures.
|
||||
|
||||
#define GIB_HEALTH_VALUE -30
|
||||
|
||||
@ -102,37 +106,43 @@
|
||||
#define bits_CAP_FLY (1<<15)
|
||||
#define bits_CAP_DOORS_GROUP (bits_CAP_USE | bits_CAP_AUTO_DOORS | bits_CAP_OPEN_DOORS)
|
||||
|
||||
#define DMG_GENERIC 0
|
||||
#define DMG_CRUSH (1<<0)
|
||||
#define DMG_BULLET (1<<1)
|
||||
#define DMG_SLASH (1<<2)
|
||||
#define DMG_BURN (1<<3)
|
||||
#define DMG_FREEZE (1<<4)
|
||||
#define DMG_FALL (1<<5)
|
||||
#define DMG_BLAST (1<<6)
|
||||
#define DMG_CLUB (1<<7)
|
||||
#define DMG_SHOCK (1<<8)
|
||||
#define DMG_SONIC (1<<9)
|
||||
#define DMG_ENERGYBEAM (1<<10)
|
||||
#define DMG_NEVERGIB (1<<12)
|
||||
#define DMG_ALWAYSGIB (1<<13)
|
||||
#define DMG_DROWN (1<<14)
|
||||
#define DMG_TIMEBASED (~(0x3FFF))
|
||||
#define SF_NORESPAWN (1<<30) // set this bit on guns and stuff that should never respawn.
|
||||
|
||||
#define DMG_PARALYZE (1<<15)
|
||||
#define DMG_NERVEGAS (1<<16)
|
||||
#define DMG_POISON (1<<17)
|
||||
#define DMG_RADIATION (1<<18)
|
||||
#define DMG_DROWNRECOVER (1<<19)
|
||||
#define DMG_ACID (1<<20)
|
||||
#define DMG_SLOWBURN (1<<21)
|
||||
#define DMG_SLOWFREEZE (1<<22)
|
||||
#define DMG_MORTAR (1<<23)
|
||||
#define DMG_GENERIC 0 // generic damage was done
|
||||
#define DMG_CRUSH (1<<0) // crushed by falling or moving object
|
||||
#define DMG_BULLET (1<<1) // shot
|
||||
#define DMG_SLASH (1<<2) // cut, clawed, stabbed
|
||||
#define DMG_BURN (1<<3) // heat burned
|
||||
#define DMG_FREEZE (1<<4) // frozen
|
||||
#define DMG_FALL (1<<5) // fell too far
|
||||
#define DMG_BLAST (1<<6) // explosive blast damage
|
||||
#define DMG_CLUB (1<<7) // crowbar, punch, headbutt
|
||||
#define DMG_SHOCK (1<<8) // electric shock
|
||||
#define DMG_SONIC (1<<9) // sound pulse shockwave
|
||||
#define DMG_ENERGYBEAM (1<<10) // laser or other high energy beam
|
||||
#define DMG_NEVERGIB (1<<12) // with this bit OR'd in, no damage type will be able to gib victims upon death
|
||||
#define DMG_ALWAYSGIB (1<<13) // with this bit OR'd in, any damage type can be made to gib victims upon death
|
||||
#define DMG_DROWN (1<<14) // Drowning
|
||||
|
||||
// time-based damage
|
||||
#define DMG_TIMEBASED (~(0x3FFF)) // mask for time-based damage
|
||||
|
||||
#define DMG_PARALYZE (1<<15) // slows affected creature down
|
||||
#define DMG_NERVEGAS (1<<16) // nerve toxins, very bad
|
||||
#define DMG_POISON (1<<17) // blood poisioning
|
||||
#define DMG_RADIATION (1<<18) // radiation exposure
|
||||
#define DMG_DROWNRECOVER (1<<19) // drowning recovery
|
||||
#define DMG_ACID (1<<20) // toxic chemicals or acid burns
|
||||
#define DMG_SLOWBURN (1<<21) // in an oven
|
||||
#define DMG_SLOWFREEZE (1<<22) // in a subzero freezer
|
||||
#define DMG_MORTAR (1<<23) // Hit by air raid (done to distinguish grenade from mortar)
|
||||
#define DMG_EXPLOSION (1<<24)
|
||||
#define DMG_GIB_CORPSE (DMG_CRUSH | DMG_FALL | DMG_BLAST | DMG_SONIC | DMG_CLUB)
|
||||
#define DMG_SHOWNHUD (DMG_POISON | DMG_ACID | DMG_FREEZE | DMG_SLOWFREEZE | DMG_DROWN | DMG_BURN | DMG_SLOWBURN | DMG_NERVEGAS | DMG_RADIATION | DMG_SHOCK)
|
||||
|
||||
#define SF_NORESPAWN (1 << 30)
|
||||
// these are the damage types that are allowed to gib corpses
|
||||
#define DMG_GIB_CORPSE (DMG_CRUSH | DMG_FALL | DMG_BLAST | DMG_SONIC | DMG_CLUB)
|
||||
|
||||
// these are the damage types that have client hud art
|
||||
#define DMG_SHOWNHUD (DMG_POISON | DMG_ACID | DMG_FREEZE | DMG_SLOWFREEZE | DMG_DROWN | DMG_BURN | DMG_SLOWBURN | DMG_NERVEGAS | DMG_RADIATION | DMG_SHOCK)
|
||||
|
||||
#define AIRTIME 12 // lung full of air lasts this many seconds
|
||||
#define PARALYZE_DURATION 2 // number of 2 second intervals to take damage
|
||||
@ -166,9 +176,11 @@
|
||||
#define itbd_SlowFreeze 7
|
||||
#define CDMG_TIMEBASED 8
|
||||
|
||||
#define GIB_NORMAL 0
|
||||
#define GIB_NEVER 1
|
||||
#define GIB_ALWAYS 2
|
||||
// when calling KILLED(), a value that governs gib behavior is expected to be
|
||||
// one of these three values
|
||||
#define GIB_NORMAL 0 // gib if entity was overkilled
|
||||
#define GIB_NEVER 1 // never gib, no matter how much death damage is done ( freezing, etc )
|
||||
#define GIB_ALWAYS 2 // always gib ( Houndeye Shock, Barnacle Bite )
|
||||
|
||||
#define SF_ITEM_USE_ONLY 256
|
||||
|
||||
@ -181,49 +193,6 @@
|
||||
#define EXPORT /**/
|
||||
#endif // _WIN32
|
||||
|
||||
enum hash_types_e { CLASSNAME };
|
||||
|
||||
typedef struct hash_item_s
|
||||
{
|
||||
entvars_t *pev;
|
||||
struct hash_item_s *next;
|
||||
struct hash_item_s *lastHash;
|
||||
int pevIndex;
|
||||
|
||||
} hash_item_t;
|
||||
|
||||
typedef struct locksounds
|
||||
{
|
||||
string_t sLockedSound;
|
||||
string_t sLockedSentence;
|
||||
string_t sUnlockedSound;
|
||||
string_t sUnlockedSentence;
|
||||
int iLockedSentence;
|
||||
int iUnlockedSentence;
|
||||
float flwaitSound;
|
||||
float flwaitSentence;
|
||||
BYTE bEOFLocked;
|
||||
BYTE bEOFUnlocked;
|
||||
|
||||
} locksound_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
USE_OFF,
|
||||
USE_ON,
|
||||
USE_SET,
|
||||
USE_TOGGLE,
|
||||
|
||||
} USE_TYPE;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
TRAIN_SAFE,
|
||||
TRAIN_BLOCKING,
|
||||
TRAIN_FOLLOWING
|
||||
|
||||
} TRAIN_CODE;
|
||||
|
||||
class CGrenade;
|
||||
class CBaseEntity;
|
||||
class CBaseMonster;
|
||||
@ -234,8 +203,8 @@ class CSquadMonster;
|
||||
class CCineMonster;
|
||||
class CSound;
|
||||
|
||||
class EHANDLE
|
||||
{
|
||||
// EHANDLE. Safe way to point to CBaseEntities who may die between frames
|
||||
class EHANDLE {
|
||||
public:
|
||||
edict_t *Get();
|
||||
edict_t *Set(edict_t *pent);
|
||||
@ -252,8 +221,8 @@ private:
|
||||
int m_serialnumber;
|
||||
};
|
||||
|
||||
class CBaseEntity
|
||||
{
|
||||
// Base Entity. All entity types derive from this
|
||||
class CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn() {}
|
||||
virtual void Precache() {}
|
||||
@ -299,36 +268,15 @@ public:
|
||||
virtual BOOL IsNetClient() { return FALSE; }
|
||||
virtual const char *TeamID() { return ""; }
|
||||
virtual CBaseEntity *GetNextTarget();
|
||||
virtual void Think()
|
||||
{
|
||||
if (m_pfnThink)
|
||||
{
|
||||
(this->*m_pfnThink)();
|
||||
}
|
||||
}
|
||||
virtual void Touch(CBaseEntity *pOther)
|
||||
{
|
||||
if (m_pfnTouch)
|
||||
{
|
||||
(this->*m_pfnTouch)(pOther);
|
||||
}
|
||||
}
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType = USE_OFF, float value = 0.0f)
|
||||
{
|
||||
if (m_pfnUse)
|
||||
{
|
||||
(this->*m_pfnUse)(pActivator, pCaller, useType, value);
|
||||
}
|
||||
}
|
||||
virtual void Blocked(CBaseEntity *pOther)
|
||||
{
|
||||
if (m_pfnBlocked)
|
||||
{
|
||||
(this->*m_pfnBlocked)(pOther);
|
||||
}
|
||||
}
|
||||
virtual void Think() { if (m_pfnThink) (this->*m_pfnThink)(); }
|
||||
virtual void Touch(CBaseEntity *pOther) { if (m_pfnTouch) (this->*m_pfnTouch)(pOther); }
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType = USE_OFF, float value = 0.0f) { if (m_pfnUse) (this->*m_pfnUse)(pActivator, pCaller, useType, value); }
|
||||
virtual void Blocked(CBaseEntity *pOther) { if (m_pfnBlocked) (this->*m_pfnBlocked)(pOther); }
|
||||
virtual CBaseEntity *Respawn() { return NULL; }
|
||||
|
||||
// used by monsters that are created by the MonsterMaker
|
||||
virtual void UpdateOwner() {}
|
||||
|
||||
virtual BOOL FBecomeProne() { return FALSE; }
|
||||
virtual Vector Center() { return (pev->absmax + pev->absmin) * 0.5f; }
|
||||
virtual Vector EyePosition() { return (pev->origin + pev->view_ofs); }
|
||||
@ -358,6 +306,7 @@ public:
|
||||
#endif
|
||||
|
||||
public:
|
||||
// allow engine to allocate instance data
|
||||
void *operator new(size_t stAllocateBlock, entvars_t *pevnew) { return ALLOC_PRIVATE(ENT(pevnew), stAllocateBlock); }
|
||||
void operator delete(void *pMem, entvars_t *pevnew) { pevnew->flags |= FL_KILLME; }
|
||||
void UpdateOnRemove();
|
||||
@ -384,28 +333,29 @@ public:
|
||||
{
|
||||
CBaseEntity *pEntity = Instance(pevMonster);
|
||||
if (pEntity != NULL)
|
||||
{
|
||||
return pEntity->MyMonsterPointer();
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
CBaseMonster *GetMonsterPointer(edict_t *pentMonster)
|
||||
{
|
||||
CBaseEntity *pEntity = Instance(pentMonster);
|
||||
if (pEntity)
|
||||
if (pEntity != NULL)
|
||||
return pEntity->MyMonsterPointer();
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static CBaseEntity *Create(char *szName, const Vector &vecOrigin, const Vector &vecAngles, edict_t *pentOwner = NULL);
|
||||
edict_t *edict() { return ENT(pev); }
|
||||
EOFFSET eoffset() { return OFFSET(pev); }
|
||||
int entindex() { return ENTINDEX(edict()); }
|
||||
|
||||
public:
|
||||
entvars_t *pev;
|
||||
CBaseEntity *m_pGoalEnt;
|
||||
CBaseEntity *m_pLink;
|
||||
entvars_t *pev; // Don't need to save/restore this pointer, the engine resets it
|
||||
|
||||
// path corners
|
||||
CBaseEntity *m_pGoalEnt; // path corner we are heading towards
|
||||
CBaseEntity *m_pLink; // used for temporary link-list operations.
|
||||
|
||||
static TYPEDESCRIPTION IMPL(m_SaveData)[5];
|
||||
|
||||
@ -414,6 +364,7 @@ public:
|
||||
void (CBaseEntity::*m_pfnUse)(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
void (CBaseEntity::*m_pfnBlocked)(CBaseEntity *pOther);
|
||||
|
||||
// We use this variables to store each ammo count.
|
||||
int *current_ammo;
|
||||
float currentammo;
|
||||
int maxammo_buckshot;
|
||||
@ -436,17 +387,20 @@ public:
|
||||
int ammo_57mm;
|
||||
int maxammo_357sig;
|
||||
int ammo_357sig;
|
||||
|
||||
// Special stuff for grenades and knife.
|
||||
float m_flStartThrow;
|
||||
float m_flReleaseThrow;
|
||||
int m_iSwing;
|
||||
|
||||
// client has left the game
|
||||
bool has_disconnected;
|
||||
};
|
||||
|
||||
inline int FNullEnt(CBaseEntity *ent) { return (ent == NULL || FNullEnt(ent->edict())); }
|
||||
inline int FNullEnt(EHANDLE hent) { return (hent == NULL || FNullEnt(OFFSET(hent.Get()))); }
|
||||
|
||||
class CPointEntity: public CBaseEntity
|
||||
{
|
||||
class CPointEntity: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn();
|
||||
virtual int ObjectCaps() { return (CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION); }
|
||||
@ -459,25 +413,25 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class CMultiSource: public CPointEntity
|
||||
{
|
||||
// MultiSouce
|
||||
class CMultiSource: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn();
|
||||
virtual void KeyValue(KeyValueData *pkvd);
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
virtual int ObjectCaps() { return (CPointEntity::ObjectCaps() | FCAP_MASTER); }
|
||||
virtual BOOL IsTriggered(CBaseEntity *pActivator);
|
||||
virtual int Save(CSave &save);
|
||||
virtual int Restore(CRestore &restore);
|
||||
virtual int ObjectCaps() { return (CPointEntity::ObjectCaps() | FCAP_MASTER); }
|
||||
virtual BOOL IsTriggered(CBaseEntity *pActivator);
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
|
||||
#ifdef HOOK_GAMEDLL
|
||||
|
||||
void Spawn_();
|
||||
void KeyValue_(KeyValueData *pkvd);
|
||||
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
BOOL IsTriggered_(CBaseEntity *pActivator);
|
||||
int Save_(CSave &save);
|
||||
int Restore_(CRestore &restore);
|
||||
BOOL IsTriggered_(CBaseEntity *pActivator);
|
||||
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
|
||||
#endif
|
||||
|
||||
@ -493,8 +447,8 @@ public:
|
||||
string_t m_globalstate;
|
||||
};
|
||||
|
||||
class CBaseDelay: public CBaseEntity
|
||||
{
|
||||
// generic Delay entity.
|
||||
class CBaseDelay: public CBaseEntity {
|
||||
public:
|
||||
virtual void KeyValue(KeyValueData *pkvd);
|
||||
virtual int Save(CSave &save);
|
||||
@ -518,8 +472,7 @@ public:
|
||||
int m_iszKillTarget;
|
||||
};
|
||||
|
||||
class CBaseAnimating: public CBaseDelay
|
||||
{
|
||||
class CBaseAnimating: public CBaseDelay {
|
||||
public:
|
||||
virtual int Save(CSave &save);
|
||||
virtual int Restore(CRestore &restore);
|
||||
@ -533,13 +486,15 @@ public:
|
||||
#endif
|
||||
|
||||
public:
|
||||
float StudioFrameAdvance(float flInterval = 0.0f);
|
||||
// Basic Monster Animation functions
|
||||
float StudioFrameAdvance(float flInterval = 0.0f); // accumulate animation frame time from last time called until now
|
||||
BOOL GetSequenceFlags();
|
||||
int LookupActivity(int activity);
|
||||
int LookupActivityHeaviest(int activity);
|
||||
int LookupSequence(const char *label);
|
||||
void ResetSequenceInfo();
|
||||
void DispatchAnimEvents(float flFutureInterval = 0.1f);
|
||||
void ResetSequenceInfo_();
|
||||
void DispatchAnimEvents(float flFutureInterval = 0.1f); // Handle events that have happend since last time called up until X seconds into the future
|
||||
float SetBoneController(int iController, float flValue = 0.0f);
|
||||
void InitBoneControllers();
|
||||
|
||||
@ -556,15 +511,16 @@ public:
|
||||
public:
|
||||
static TYPEDESCRIPTION IMPL(m_SaveData)[5];
|
||||
|
||||
float m_flFrameRate;
|
||||
float m_flGroundSpeed;
|
||||
float m_flLastEventCheck;
|
||||
BOOL m_fSequenceFinished;
|
||||
BOOL m_fSequenceLoops;
|
||||
// animation needs
|
||||
float m_flFrameRate; // computed FPS for current sequence
|
||||
float m_flGroundSpeed; // computed linear movement rate for current sequence
|
||||
float m_flLastEventCheck; // last time the event list was checked
|
||||
BOOL m_fSequenceFinished; // flag set when StudioAdvanceFrame moves across a frame boundry
|
||||
BOOL m_fSequenceLoops; // true if the sequence loops
|
||||
};
|
||||
|
||||
class CBaseToggle: public CBaseAnimating
|
||||
{
|
||||
// generic Toggle entity.
|
||||
class CBaseToggle: public CBaseAnimating {
|
||||
public:
|
||||
virtual void KeyValue(KeyValueData *pkvd);
|
||||
virtual int Save(CSave &save);
|
||||
@ -596,39 +552,39 @@ public:
|
||||
static TYPEDESCRIPTION IMPL(m_SaveData)[19];
|
||||
|
||||
TOGGLE_STATE m_toggle_state;
|
||||
float m_flActivateFinished;
|
||||
float m_flMoveDistance;
|
||||
float m_flActivateFinished; // like attack_finished, but for doors
|
||||
float m_flMoveDistance; // how far a door should slide or rotate
|
||||
float m_flWait;
|
||||
float m_flLip;
|
||||
float m_flTWidth;
|
||||
float m_flTLength;
|
||||
float m_flTWidth; // for plats
|
||||
float m_flTLength; // for plats
|
||||
|
||||
Vector m_vecPosition1;
|
||||
Vector m_vecPosition2;
|
||||
Vector m_vecAngle1;
|
||||
Vector m_vecAngle2;
|
||||
int m_cTriggersLeft;
|
||||
|
||||
int m_cTriggersLeft; // trigger_counter only, # of activations remaining
|
||||
float m_flHeight;
|
||||
EHANDLE m_hActivator;
|
||||
void (CBaseToggle::*m_pfnCallWhenMoveDone)();
|
||||
Vector m_vecFinalDest;
|
||||
Vector m_vecFinalAngle;
|
||||
int m_bitsDamageInflict;
|
||||
string_t m_sMaster;
|
||||
|
||||
int m_bitsDamageInflict; // DMG_ damage type that the door or tigger does
|
||||
|
||||
string_t m_sMaster; // If this button has a master switch, this is the targetname.
|
||||
// A master switch must be of the multisource type. If all
|
||||
// of the switches in the multisource have been triggered, then
|
||||
// the button will be allowed to operate. Otherwise, it will be
|
||||
// deactivated.
|
||||
};
|
||||
|
||||
#include "basemonster.h"
|
||||
|
||||
// Generic Button
|
||||
class CBaseButton: public CBaseToggle
|
||||
{
|
||||
enum BUTTON_CODE
|
||||
{
|
||||
BUTTON_NOTHING,
|
||||
BUTTON_ACTIVATE,
|
||||
BUTTON_RETURN
|
||||
};
|
||||
class CBaseButton: public CBaseToggle {
|
||||
public:
|
||||
|
||||
virtual void Spawn();
|
||||
virtual void Precache();
|
||||
virtual void KeyValue(KeyValueData *pkvd);
|
||||
@ -669,6 +625,7 @@ public:
|
||||
void EXPORT ButtonBackHome();
|
||||
void EXPORT ButtonUse(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
|
||||
enum BUTTON_CODE { BUTTON_NOTHING, BUTTON_ACTIVATE, BUTTON_RETURN };
|
||||
BUTTON_CODE ButtonResponseToTouch();
|
||||
|
||||
public:
|
||||
@ -685,8 +642,8 @@ public:
|
||||
int m_sounds;
|
||||
};
|
||||
|
||||
class CWorld: public CBaseEntity
|
||||
{
|
||||
// This spawns first when each level begins.
|
||||
class CWorld: public CBaseEntity {
|
||||
public:
|
||||
virtual void Spawn();
|
||||
virtual void Precache();
|
||||
@ -702,22 +659,37 @@ public:
|
||||
|
||||
};
|
||||
|
||||
template <class T>
|
||||
#ifdef REGAMEDLL_SELF
|
||||
extern class CCSEntity **g_GameEntities;
|
||||
#endif
|
||||
|
||||
// Converts a entvars_t * to a class pointer
|
||||
// It will allocate the class and entity if necessary
|
||||
template <class TWrap, class T>
|
||||
T *GetClassPtr(T *a)
|
||||
{
|
||||
entvars_t *pev = (entvars_t *)a;
|
||||
if (!pev)
|
||||
|
||||
// allocate entity if necessary
|
||||
if (pev == NULL)
|
||||
pev = VARS(CREATE_ENTITY());
|
||||
|
||||
// get the private data
|
||||
a = (T *)GET_PRIVATE(ENT(pev));
|
||||
|
||||
if (!a)
|
||||
{
|
||||
// allocate private data
|
||||
a = new(pev) T;
|
||||
a->pev = pev;
|
||||
|
||||
#ifdef REGAMEDLL_SELF
|
||||
g_GameEntities[a->entindex()] = new TWrap (a);
|
||||
#endif
|
||||
|
||||
#if defined(HOOK_GAMEDLL) && defined(_WIN32) && !defined(REGAMEDLL_UNIT_TESTS)
|
||||
VirtualTableInit((void *)a, stripClass(typeid(T).name()));
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
return a;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -115,7 +115,7 @@ int CMD_ARGC_();
|
||||
const char *CMD_ARGV_(int i);
|
||||
void set_suicide_frame(entvars_t *pev);
|
||||
void TeamChangeUpdate(CBasePlayer *player, int team_id);
|
||||
void BlinkAccount(CBasePlayer *player, int numBlinks);
|
||||
void BlinkAccount(CBasePlayer *player, int numBlinks = 2);
|
||||
BOOL ClientConnect(edict_t *pEntity, const char *pszName, const char *pszAddress, char *szRejectReason);
|
||||
void ClientDisconnect(edict_t *pEntity);
|
||||
void respawn(entvars_t *pev, BOOL fCopyCorpse = FALSE);
|
||||
@ -132,6 +132,7 @@ void Host_Say(edict_t *pEntity, int teamonly);
|
||||
void DropSecondary(CBasePlayer *pPlayer);
|
||||
void DropPrimary(CBasePlayer *pPlayer);
|
||||
bool CanBuyThis(CBasePlayer *pPlayer, int iWeapon);
|
||||
bool CanBuyThis_(CBasePlayer *pPlayer, int iWeapon);
|
||||
void BuyPistol(CBasePlayer *pPlayer, int iSlot);
|
||||
void BuyShotgun(CBasePlayer *pPlayer, int iSlot);
|
||||
void BuySubMachineGun(CBasePlayer *pPlayer, int iSlot);
|
||||
@ -190,4 +191,19 @@ void CreateInstancedBaselines();
|
||||
int InconsistentFile(const edict_t *player, const char *filename, char *disconnect_message);
|
||||
int AllowLagCompensation();
|
||||
|
||||
inline const char *GetTeamName(int team)
|
||||
{
|
||||
switch (team)
|
||||
{
|
||||
case CT:
|
||||
return "CT";
|
||||
case TERRORIST:
|
||||
return "TERRORIST";
|
||||
case SPECTATOR:
|
||||
return "SPECTATOR";
|
||||
default:
|
||||
return "UNASSIGNED";
|
||||
}
|
||||
}
|
||||
|
||||
#endif // CLIENT_H
|
||||
|
@ -15,17 +15,15 @@ void CGib::LimitVelocity()
|
||||
|
||||
NOXREF void CGib::SpawnStickyGibs(entvars_t *pevVictim, Vector vecOrigin, int cGibs)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (g_Language == LANGUAGE_GERMAN)
|
||||
{
|
||||
// no sticky gibs in germany right now!
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < cGibs; ++i)
|
||||
for (int i = 0; i < cGibs; ++i)
|
||||
{
|
||||
CGib *pGib = GetClassPtr((CGib *)NULL);
|
||||
CGib *pGib = GetClassPtr<CCSGib>((CGib *)NULL);
|
||||
|
||||
pGib->Spawn("models/stickygib.mdl");
|
||||
pGib->pev->body = RANDOM_LONG(0, 2);
|
||||
@ -67,7 +65,7 @@ NOXREF void CGib::SpawnStickyGibs(entvars_t *pevVictim, Vector vecOrigin, int cG
|
||||
|
||||
pGib->pev->movetype = MOVETYPE_TOSS;
|
||||
pGib->pev->solid = SOLID_BBOX;
|
||||
UTIL_SetSize(pGib->pev, Vector (0, 0,0), Vector (0, 0, 0));
|
||||
UTIL_SetSize(pGib->pev, Vector(0, 0,0), Vector(0, 0, 0));
|
||||
pGib->SetTouch(&CGib::StickyGibTouch);
|
||||
pGib->SetThink(NULL);
|
||||
}
|
||||
@ -78,7 +76,7 @@ NOXREF void CGib::SpawnStickyGibs(entvars_t *pevVictim, Vector vecOrigin, int cG
|
||||
|
||||
void CGib::SpawnHeadGib(entvars_t *pevVictim)
|
||||
{
|
||||
CGib *pGib = GetClassPtr((CGib *)NULL);
|
||||
CGib *pGib = GetClassPtr<CCSGib>((CGib *)NULL);
|
||||
|
||||
if (g_Language == LANGUAGE_GERMAN)
|
||||
{
|
||||
@ -139,9 +137,9 @@ void CGib::SpawnHeadGib(entvars_t *pevVictim)
|
||||
void CGib::SpawnRandomGibs(entvars_t *pevVictim, int cGibs, int human)
|
||||
{
|
||||
int cSplat;
|
||||
for (cSplat = 0; cSplat < cGibs; cSplat++)
|
||||
for (cSplat = 0; cSplat < cGibs; ++cSplat)
|
||||
{
|
||||
CGib *pGib = GetClassPtr((CGib *)NULL);
|
||||
CGib *pGib = GetClassPtr<CCSGib>((CGib *)NULL);
|
||||
|
||||
if (g_Language == LANGUAGE_GERMAN)
|
||||
{
|
||||
@ -613,9 +611,10 @@ void CGib::WaitTillLand()
|
||||
{
|
||||
SetThink(&CBaseEntity::SUB_StartFadeOut);
|
||||
pev->nextthink = gpGlobals->time + m_lifeTime;
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
if (m_bloodColor != DONT_BLEED)
|
||||
CSoundEnt::InsertSound(bits_SOUND_MEAT, pev->origin, 384, 25);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
pev->nextthink = gpGlobals->time + 0.5f;
|
||||
@ -733,9 +732,6 @@ int CBaseMonster::__MAKE_VHOOK(TakeHealth)(float flHealth, int bitsDamageType)
|
||||
// When a monster is poisoned via an arrow etc it takes all the poison damage at once.
|
||||
int CBaseMonster::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType)
|
||||
{
|
||||
float flTake;
|
||||
Vector vecDir;
|
||||
|
||||
if (pev->takedamage == DAMAGE_NO)
|
||||
return 0;
|
||||
|
||||
@ -751,13 +747,13 @@ int CBaseMonster::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *p
|
||||
}
|
||||
|
||||
// LATER: make armor consideration here!
|
||||
flTake = flDamage;
|
||||
float flTake = flDamage;
|
||||
|
||||
// set damage type sustained
|
||||
m_bitsDamageType |= bitsDamageType;
|
||||
|
||||
// grab the vector of the incoming attack. ( pretend that the inflictor is a little lower than it really is, so the body will tend to fly upward a bit).
|
||||
vecDir = Vector(0, 0, 0);
|
||||
Vector vecDir(0, 0, 0);
|
||||
|
||||
if (!FNullEnt(pevInflictor))
|
||||
{
|
||||
@ -848,7 +844,7 @@ int CBaseMonster::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *p
|
||||
int CBaseMonster::DeadTakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType)
|
||||
{
|
||||
// grab the vector of the incoming attack. ( pretend that the inflictor is a little lower than it really is, so the body will tend to fly upward a bit).
|
||||
Vector vecDir = Vector(0, 0, 0);
|
||||
Vector vecDir(0, 0, 0);
|
||||
|
||||
if (!FNullEnt(pevInflictor))
|
||||
{
|
||||
@ -902,6 +898,31 @@ float CBaseMonster::DamageForce(float damage)
|
||||
return force;
|
||||
}
|
||||
|
||||
void EXT_FUNC PlayerBlind(CBasePlayer *pPlayer, entvars_t *pevInflictor, entvars_t *pevAttacker, float fadeTime, float fadeHold, int alpha, Vector &color)
|
||||
{
|
||||
UTIL_ScreenFade(pPlayer, color, fadeTime, fadeHold, alpha, 0);
|
||||
|
||||
for (int i = 1; i <= gpGlobals->maxClients; ++i)
|
||||
{
|
||||
CBasePlayer *pObserver = static_cast<CBasePlayer *>(UTIL_PlayerByIndex(i));
|
||||
|
||||
if (!pObserver || !pObserver->IsObservingPlayer(pPlayer))
|
||||
continue;
|
||||
|
||||
if (!fadetoblack.value)
|
||||
{
|
||||
UTIL_ScreenFade(pObserver, color, fadeTime, fadeHold, alpha, 0);
|
||||
}
|
||||
}
|
||||
|
||||
pPlayer->Blind(fadeTime * 0.33, fadeHold, fadeTime, alpha);
|
||||
|
||||
if (TheBots != NULL)
|
||||
{
|
||||
TheBots->OnEvent(EVENT_PLAYER_BLINDED_BY_FLASHBANG, pPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
void RadiusFlash(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int iClassIgnore, int bitsDamageType)
|
||||
{
|
||||
CBaseEntity *pEntity = NULL;
|
||||
@ -947,12 +968,16 @@ void RadiusFlash(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker,
|
||||
vecSpot = pPlayer->BodyTarget(vecSrc);
|
||||
UTIL_TraceLine(vecSrc, vecSpot, dont_ignore_monsters, ENT(pevInflictor), &tr);
|
||||
|
||||
g_ReGameHookchains.m_RadiusFlash_TraceLine.callChain(NULL, pPlayer, pevInflictor, pevAttacker, vecSrc, vecSpot, &tr);
|
||||
|
||||
if (tr.flFraction != 1.0f && tr.pHit != pPlayer->pev->pContainingEntity)
|
||||
continue;
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
UTIL_TraceLine(vecSpot, vecSrc, dont_ignore_monsters, tr.pHit, &tr2);
|
||||
|
||||
if (tr2.flFraction >= 1.0)
|
||||
#endif
|
||||
{
|
||||
if (tr.fStartSolid)
|
||||
{
|
||||
@ -999,27 +1024,8 @@ void RadiusFlash(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker,
|
||||
}
|
||||
}
|
||||
|
||||
UTIL_ScreenFade(pPlayer, Vector(255, 255, 255), fadeTime, fadeHold, alpha, 0);
|
||||
|
||||
for (int i = 1; i <= gpGlobals->maxClients; ++i)
|
||||
{
|
||||
CBasePlayer *pObserver = static_cast<CBasePlayer *>(UTIL_PlayerByIndex(i));
|
||||
|
||||
if (!pObserver || !pObserver->IsObservingPlayer(pPlayer))
|
||||
continue;
|
||||
|
||||
if (!fadetoblack.value)
|
||||
{
|
||||
UTIL_ScreenFade(pObserver, Vector(255, 255, 255), fadeTime, fadeHold, alpha, 0);
|
||||
}
|
||||
}
|
||||
|
||||
pPlayer->Blind(fadeTime * 0.33, fadeHold, fadeTime, alpha);
|
||||
|
||||
if (TheBots != NULL)
|
||||
{
|
||||
TheBots->OnEvent(EVENT_PLAYER_BLINDED_BY_FLASHBANG, pPlayer);
|
||||
}
|
||||
Vector color(255, 255, 255);
|
||||
g_ReGameHookchains.m_PlayerBlind.callChain(PlayerBlind, pPlayer, pevInflictor, pevAttacker, fadeTime, fadeHold, alpha, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1029,8 +1035,6 @@ float GetAmountOfPlayerVisible(Vector vecSrc, CBaseEntity *entity)
|
||||
float retval = 0.0f;
|
||||
TraceResult tr;
|
||||
Vector spot;
|
||||
Vector2D dir;
|
||||
Vector2D perp;
|
||||
|
||||
const float topOfHead = 25.0f;
|
||||
const float standFeet = 34.0f;
|
||||
@ -1069,11 +1073,10 @@ float GetAmountOfPlayerVisible(Vector vecSrc, CBaseEntity *entity)
|
||||
if (tr.flFraction == 1.0f)
|
||||
retval += 0.2f;
|
||||
|
||||
dir = (entity->pev->origin - vecSrc).Make2D();
|
||||
Vector2D dir = (entity->pev->origin - vecSrc).Make2D();
|
||||
dir.NormalizeInPlace();
|
||||
|
||||
perp.x = -dir.y * edgeOffset;
|
||||
perp.y = dir.x * edgeOffset;
|
||||
Vector2D perp(-dir.y * edgeOffset, dir.x * edgeOffset);
|
||||
|
||||
spot = entity->pev->origin + Vector(perp.x, perp.y, 0);
|
||||
|
||||
@ -1137,7 +1140,16 @@ void RadiusDamage(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker
|
||||
damageRatio = GetAmountOfPlayerVisible(vecSrc, pEntity);
|
||||
}
|
||||
|
||||
float length = (vecSrc - pEntity->pev->origin).Length();
|
||||
damageRatio = GetAmountOfPlayerVisible(vecSrc, pEntity);
|
||||
|
||||
float length;
|
||||
#ifdef REGAMEDLL_ADD
|
||||
// allow to damage breakable objects
|
||||
if (FClassnameIs(pEntity->pev, "func_breakable"))
|
||||
length = (vecSrc - pEntity->Center()).Length();
|
||||
else
|
||||
#endif
|
||||
length = (vecSrc - pEntity->pev->origin).Length();
|
||||
|
||||
if (useLOS)
|
||||
{
|
||||
@ -1150,12 +1162,28 @@ void RadiusDamage(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker
|
||||
flAdjustedDamage = (flRadius - length) * (flRadius - length) * 1.25 / (flRadius * flRadius) * (damageRatio * flDamage) * 1.5;
|
||||
}
|
||||
else
|
||||
{
|
||||
flAdjustedDamage = flDamage - length * falloff;
|
||||
#ifdef REGAMEDLL_ADD
|
||||
// disable grenade damage through walls?
|
||||
if (hegrenade_penetration.string[0] == '1' && (bitsDamageType & DMG_EXPLOSION))
|
||||
{
|
||||
UTIL_TraceLine(vecSrc, pEntity->pev->origin, ignore_monsters, NULL, &tr);
|
||||
|
||||
if (tr.flFraction != 1.0f)
|
||||
flAdjustedDamage = 0.0f;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (flAdjustedDamage < 0)
|
||||
flAdjustedDamage = 0;
|
||||
|
||||
pEntity->TakeDamage(pevInflictor, pevAttacker, flAdjustedDamage, bitsDamageType);
|
||||
#ifdef REGAMEDLL_FIXES
|
||||
if (flAdjustedDamage > 0)
|
||||
#endif
|
||||
pEntity->TakeDamage(pevInflictor, pevAttacker, flAdjustedDamage, bitsDamageType);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1468,7 +1496,7 @@ void CBaseEntity::FireBullets(ULONG cShots, Vector vecSrc, Vector vecDirShooting
|
||||
ClearMultiDamage();
|
||||
gMultiDamage.type = (DMG_BULLET | DMG_NEVERGIB);
|
||||
|
||||
for (ULONG iShot = 1; iShot <= cShots; iShot++)
|
||||
for (ULONG iShot = 1; iShot <= cShots; ++iShot)
|
||||
{
|
||||
int spark = 0;
|
||||
|
||||
|
@ -187,10 +187,10 @@ void CBaseDoor::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
// 2) base
|
||||
// 3) stone chain
|
||||
// 4) screechy metal
|
||||
LINK_ENTITY_TO_CLASS(func_door, CBaseDoor);
|
||||
LINK_ENTITY_TO_CLASS(func_door, CBaseDoor, CCSDoor);
|
||||
|
||||
// func_water - same as a door.
|
||||
LINK_ENTITY_TO_CLASS(func_water, CBaseDoor);
|
||||
LINK_ENTITY_TO_CLASS(func_water, CBaseDoor, CCSDoor);
|
||||
|
||||
void CBaseDoor::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -767,7 +767,7 @@ void CBaseDoor::__MAKE_VHOOK(Blocked)(CBaseEntity *pOther)
|
||||
|
||||
if (FClassnameIs(pentTarget, "func_door") || FClassnameIs(pentTarget, "func_door_rotating"))
|
||||
{
|
||||
pDoor = GetClassPtr((CBaseDoor *)VARS(pentTarget));
|
||||
pDoor = GetClassPtr<CCSDoor>((CBaseDoor *)VARS(pentTarget));
|
||||
|
||||
if (pDoor->m_flWait >= 0)
|
||||
{
|
||||
@ -840,7 +840,7 @@ void CBaseDoor::__MAKE_VHOOK(Blocked)(CBaseEntity *pOther)
|
||||
// 2) base
|
||||
// 3) stone chain
|
||||
// 4) screechy metal
|
||||
LINK_ENTITY_TO_CLASS(func_door_rotating, CRotDoor);
|
||||
LINK_ENTITY_TO_CLASS(func_door_rotating, CRotDoor, CCSRotDoor);
|
||||
|
||||
void CRotDoor::__MAKE_VHOOK(Restart)()
|
||||
{
|
||||
@ -938,7 +938,7 @@ void CRotDoor::__MAKE_VHOOK(SetToggleState)(int state)
|
||||
UTIL_SetOrigin(pev, pev->origin);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(momentary_door, CMomentaryDoor);
|
||||
LINK_ENTITY_TO_CLASS(momentary_door, CMomentaryDoor, CCSMomentaryDoor);
|
||||
IMPLEMENT_SAVERESTORE(CMomentaryDoor, CBaseToggle);
|
||||
|
||||
void CMomentaryDoor::__MAKE_VHOOK(Spawn)()
|
||||
|
@ -61,8 +61,8 @@ TYPEDESCRIPTION CGibShooter::m_SaveData[] =
|
||||
|
||||
#endif // HOOK_GAMEDLL
|
||||
|
||||
LINK_ENTITY_TO_CLASS(info_target, CPointEntity);
|
||||
LINK_ENTITY_TO_CLASS(env_bubbles, CBubbling);
|
||||
LINK_ENTITY_TO_CLASS(info_target, CPointEntity, CCSPointEntity);
|
||||
LINK_ENTITY_TO_CLASS(env_bubbles, CBubbling, CCSBubbling);
|
||||
IMPLEMENT_SAVERESTORE(CBubbling, CBaseEntity);
|
||||
|
||||
void CBubbling::__MAKE_VHOOK(Spawn)()
|
||||
@ -154,7 +154,7 @@ void CBubbling::FizzThink()
|
||||
pev->nextthink = gpGlobals->time + 2.5f - (0.1f * m_frequency);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(beam, CBeam);
|
||||
LINK_ENTITY_TO_CLASS(beam, CBeam, CCSBeam);
|
||||
|
||||
void CBeam::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -218,7 +218,7 @@ const Vector &CBeam::GetEndPos()
|
||||
CBeam *CBeam::BeamCreate(const char *pSpriteName, int width)
|
||||
{
|
||||
// Create a new entity with CBeam private data
|
||||
CBeam *pBeam = GetClassPtr((CBeam *)NULL);
|
||||
CBeam *pBeam = GetClassPtr<CCSBeam>((CBeam *)NULL);
|
||||
|
||||
MAKE_STRING_CLASS("beam", pBeam->pev);
|
||||
pBeam->BeamInit(pSpriteName, width);
|
||||
@ -350,8 +350,8 @@ void CBeam::DoSparks(const Vector &start, const Vector &end)
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_lightning, CLightning);
|
||||
LINK_ENTITY_TO_CLASS(env_beam, CLightning);
|
||||
LINK_ENTITY_TO_CLASS(env_lightning, CLightning, CCSLightning);
|
||||
LINK_ENTITY_TO_CLASS(env_beam, CLightning, CCSLightning);
|
||||
IMPLEMENT_SAVERESTORE(CLightning, CBeam);
|
||||
|
||||
void CLightning::__MAKE_VHOOK(Spawn)()
|
||||
@ -715,7 +715,7 @@ void CLightning::RandomArea()
|
||||
for (int iLoops = 0; iLoops < 10; iLoops++)
|
||||
{
|
||||
Vector vecSrc = pev->origin;
|
||||
Vector vecDir1 = Vector(RANDOM_FLOAT(-1, 1), RANDOM_FLOAT(-1, 1), RANDOM_FLOAT(-1, 1));
|
||||
Vector vecDir1(RANDOM_FLOAT(-1, 1), RANDOM_FLOAT(-1, 1), RANDOM_FLOAT(-1, 1));
|
||||
vecDir1 = vecDir1.Normalize();
|
||||
|
||||
TraceResult tr1;
|
||||
@ -756,7 +756,7 @@ void CLightning::RandomPoint(Vector &vecSrc)
|
||||
{
|
||||
for (int iLoops = 0; iLoops < 10; iLoops++)
|
||||
{
|
||||
Vector vecDir1 = Vector(RANDOM_FLOAT(-1, 1), RANDOM_FLOAT(-1, 1), RANDOM_FLOAT(-1, 1));
|
||||
Vector vecDir1(RANDOM_FLOAT(-1, 1), RANDOM_FLOAT(-1, 1), RANDOM_FLOAT(-1, 1));
|
||||
vecDir1 = vecDir1.Normalize();
|
||||
|
||||
TraceResult tr1;
|
||||
@ -846,7 +846,7 @@ void CLightning::BeamUpdateVars()
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_laser, CLaser);
|
||||
LINK_ENTITY_TO_CLASS(env_laser, CLaser, CCSLaser);
|
||||
IMPLEMENT_SAVERESTORE(CLaser, CBeam);
|
||||
|
||||
void CLaser::__MAKE_VHOOK(Spawn)()
|
||||
@ -1005,7 +1005,7 @@ void CLaser::StrikeThink()
|
||||
pev->nextthink = gpGlobals->time + 0.1f;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_glow, CGlow);
|
||||
LINK_ENTITY_TO_CLASS(env_glow, CGlow, CCSGlow);
|
||||
IMPLEMENT_SAVERESTORE(CGlow, CPointEntity);
|
||||
|
||||
void CGlow::__MAKE_VHOOK(Spawn)()
|
||||
@ -1044,7 +1044,7 @@ void CGlow::Animate(float frames)
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_bombglow, CBombGlow);
|
||||
LINK_ENTITY_TO_CLASS(env_bombglow, CBombGlow, CCSBombGlow);
|
||||
|
||||
void CBombGlow::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1096,7 +1096,7 @@ void CBombGlow::__MAKE_VHOOK(Think)()
|
||||
pev->nextthink = gpGlobals->time + 0.05f;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_sprite, CSprite);
|
||||
LINK_ENTITY_TO_CLASS(env_sprite, CSprite, CCSSprite);
|
||||
IMPLEMENT_SAVERESTORE(CSprite, CPointEntity);
|
||||
|
||||
void CSprite::__MAKE_VHOOK(Spawn)()
|
||||
@ -1160,7 +1160,7 @@ void CSprite::SpriteInit(const char *pSpriteName, const Vector &origin)
|
||||
|
||||
CSprite *CSprite::SpriteCreate(const char *pSpriteName, const Vector &origin, BOOL animate)
|
||||
{
|
||||
CSprite *pSprite = GetClassPtr((CSprite *)NULL);
|
||||
CSprite *pSprite = GetClassPtr<CCSSprite>((CSprite *)NULL);
|
||||
pSprite->SpriteInit(pSpriteName, origin);
|
||||
|
||||
MAKE_STRING_CLASS("env_sprite", pSprite->pev);
|
||||
@ -1273,7 +1273,7 @@ void CSprite::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, U
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CGibShooter, CBaseDelay);
|
||||
LINK_ENTITY_TO_CLASS(gibshooter, CGibShooter);
|
||||
LINK_ENTITY_TO_CLASS(gibshooter, CGibShooter, CCSGibShooter);
|
||||
|
||||
void CGibShooter::__MAKE_VHOOK(Precache)()
|
||||
{
|
||||
@ -1345,7 +1345,7 @@ CGib *CGibShooter::__MAKE_VHOOK(CreateGib)()
|
||||
if (CVAR_GET_FLOAT("violence_hgibs") == 0)
|
||||
return NULL;
|
||||
|
||||
CGib *pGib = GetClassPtr((CGib *)NULL);
|
||||
CGib *pGib = GetClassPtr<CCSGib>((CGib *)NULL);
|
||||
|
||||
pGib->Spawn("models/hgibs.mdl");
|
||||
pGib->m_bloodColor = BLOOD_COLOR_RED;
|
||||
@ -1425,7 +1425,7 @@ void CGibShooter::ShootThink()
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_shooter, CEnvShooter);
|
||||
LINK_ENTITY_TO_CLASS(env_shooter, CEnvShooter, CCSEnvShooter);
|
||||
|
||||
void CEnvShooter::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -1474,7 +1474,7 @@ void CEnvShooter::__MAKE_VHOOK(Precache)()
|
||||
|
||||
CGib *CEnvShooter::__MAKE_VHOOK(CreateGib)()
|
||||
{
|
||||
CGib *pGib = GetClassPtr((CGib *)NULL);
|
||||
CGib *pGib = GetClassPtr<CCSGib>((CGib *)NULL);
|
||||
|
||||
pGib->Spawn(STRING(pev->model));
|
||||
|
||||
@ -1497,7 +1497,7 @@ CGib *CEnvShooter::__MAKE_VHOOK(CreateGib)()
|
||||
return pGib;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(test_effect, CTestEffect);
|
||||
LINK_ENTITY_TO_CLASS(test_effect, CTestEffect, CCSTestEffect);
|
||||
|
||||
void CTestEffect::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1571,7 +1571,7 @@ void CTestEffect::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCalle
|
||||
m_flStartTime = gpGlobals->time;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_blood, CBlood);
|
||||
LINK_ENTITY_TO_CLASS(env_blood, CBlood, CCSBlood);
|
||||
|
||||
void CBlood::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1659,7 +1659,7 @@ void CBlood::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, US
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_shake, CShake);
|
||||
LINK_ENTITY_TO_CLASS(env_shake, CShake, CCSShake);
|
||||
|
||||
void CShake::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1703,7 +1703,7 @@ void CShake::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, US
|
||||
UTIL_ScreenShake(pev->origin, Amplitude(), Frequency(), Duration(), Radius());
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_fade, CFade);
|
||||
LINK_ENTITY_TO_CLASS(env_fade, CFade, CCSFade);
|
||||
|
||||
void CFade::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1752,7 +1752,7 @@ void CFade::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, USE
|
||||
SUB_UseTargets(this, USE_TOGGLE, 0);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_message, CMessage);
|
||||
LINK_ENTITY_TO_CLASS(env_message, CMessage, CCSMessage);
|
||||
|
||||
void CMessage::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1845,7 +1845,7 @@ void CMessage::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller,
|
||||
SUB_UseTargets(this, USE_TOGGLE, 0);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_funnel, CEnvFunnel);
|
||||
LINK_ENTITY_TO_CLASS(env_funnel, CEnvFunnel, CCSEnvFunnel);
|
||||
|
||||
void CEnvFunnel::__MAKE_VHOOK(Precache)()
|
||||
{
|
||||
@ -1891,7 +1891,7 @@ void CEnvBeverage::__MAKE_VHOOK(Precache)()
|
||||
PRECACHE_SOUND("weapons/g_bounce3.wav");
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_beverage, CEnvBeverage);
|
||||
LINK_ENTITY_TO_CLASS(env_beverage, CEnvBeverage, CCSEnvBeverage);
|
||||
|
||||
void CEnvBeverage::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
|
||||
{
|
||||
@ -1933,7 +1933,7 @@ void CItemSoda::__MAKE_VHOOK(Precache)()
|
||||
;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(item_sodacan, CItemSoda);
|
||||
LINK_ENTITY_TO_CLASS(item_sodacan, CItemSoda, CCSItemSoda);
|
||||
|
||||
void CItemSoda::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -175,7 +175,7 @@ inline void *GET_PRIVATE(edict_t *pent)
|
||||
#define DELTA_FINDFIELD (*g_engfuncs.pfnDeltaFindField)
|
||||
#define DELTA_SETBYINDEX (*g_engfuncs.pfnDeltaSetFieldByIndex)
|
||||
#define DELTA_UNSETBYINDEX (*g_engfuncs.pfnDeltaUnsetFieldByIndex)
|
||||
#define REMOVE_KEY_VALUE (*g_engfuncs.pfnInfo_RemoveKey)
|
||||
#define REMOVE_KEY_VALUE (*g_engfuncs.pfnInfo_RemoveKey)
|
||||
#define SET_PHYSICS_KEY_VALUE (*g_engfuncs.pfnSetPhysicsKeyValue)
|
||||
#define ENGINE_GETPHYSINFO (*g_engfuncs.pfnGetPhysicsInfoString)
|
||||
#define ENGINE_SETGROUPMASK (*g_engfuncs.pfnSetGroupMask)
|
||||
|
@ -13,7 +13,7 @@ TYPEDESCRIPTION CEnvExplosion::m_SaveData[] =
|
||||
|
||||
#endif
|
||||
|
||||
LINK_ENTITY_TO_CLASS(spark_shower, CShower);
|
||||
LINK_ENTITY_TO_CLASS(spark_shower, CShower, CCSShower);
|
||||
|
||||
void CShower::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -68,7 +68,7 @@ void CShower::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CEnvExplosion, CBaseMonster);
|
||||
LINK_ENTITY_TO_CLASS(env_explosion, CEnvExplosion);
|
||||
LINK_ENTITY_TO_CLASS(env_explosion, CEnvExplosion, CCSEnvExplosion);
|
||||
|
||||
void CEnvExplosion::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
|
78
regamedll/dlls/extdef.h
Normal file
78
regamedll/dlls/extdef.h
Normal file
@ -0,0 +1,78 @@
|
||||
/*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at
|
||||
* your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* In addition, as a special exception, the author gives permission to
|
||||
* link the code of this program with the Half-Life Game Engine ("HL
|
||||
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||
* respects for all of the code used other than the HL Engine and MODs
|
||||
* from Valve. If you modify this file, you may extend this exception
|
||||
* to your version of the file, but you are not obligated to do so. If
|
||||
* you do not wish to do so, delete this exception statement from your
|
||||
* version.
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
enum hash_types_e { CLASSNAME };
|
||||
|
||||
// Things that toggle (buttons/triggers/doors) need this
|
||||
enum TOGGLE_STATE { TS_AT_TOP, TS_AT_BOTTOM, TS_GOING_UP, TS_GOING_DOWN };
|
||||
|
||||
typedef struct hash_item_s
|
||||
{
|
||||
entvars_t *pev;
|
||||
struct hash_item_s *next;
|
||||
struct hash_item_s *lastHash;
|
||||
int pevIndex;
|
||||
|
||||
} hash_item_t;
|
||||
|
||||
typedef struct locksounds
|
||||
{
|
||||
string_t sLockedSound;
|
||||
string_t sLockedSentence;
|
||||
string_t sUnlockedSound;
|
||||
string_t sUnlockedSentence;
|
||||
int iLockedSentence;
|
||||
int iUnlockedSentence;
|
||||
float flwaitSound;
|
||||
float flwaitSentence;
|
||||
BYTE bEOFLocked;
|
||||
BYTE bEOFUnlocked;
|
||||
|
||||
} locksound_t;
|
||||
|
||||
typedef struct hudtextparms_s
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
int effect;
|
||||
byte r1,g1,b1,a1;
|
||||
byte r2,g2,b2,a2;
|
||||
float fadeinTime;
|
||||
float fadeoutTime;
|
||||
float holdTime;
|
||||
float fxTime;
|
||||
int channel;
|
||||
|
||||
} hudtextparms_t;
|
||||
|
||||
enum USE_TYPE { USE_OFF, USE_ON, USE_SET, USE_TOGGLE };
|
||||
enum TRAIN_CODE { TRAIN_SAFE, TRAIN_BLOCKING, TRAIN_FOLLOWING };
|
||||
enum IGNORE_MONSTERS { ignore_monsters = 1, dont_ignore_monsters = 0, missile = 2 };
|
||||
enum IGNORE_GLASS { ignore_glass = 1, dont_ignore_glass = 0 };
|
||||
enum { point_hull = 0, human_hull = 1, large_hull = 2, head_hull = 3 };
|
@ -169,7 +169,7 @@ void CBreakable::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
CBaseDelay::KeyValue(pkvd);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_breakable, CBreakable);
|
||||
LINK_ENTITY_TO_CLASS(func_breakable, CBreakable, CCSBreakable);
|
||||
IMPLEMENT_SAVERESTORE(CBreakable, CBaseEntity);
|
||||
|
||||
void CBreakable::__MAKE_VHOOK(Spawn)()
|
||||
@ -848,7 +848,7 @@ int CBreakable::__MAKE_VHOOK(DamageDecal)(int bitsDamageType)
|
||||
return CBaseEntity::DamageDecal(bitsDamageType);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_pushable, CPushable);
|
||||
LINK_ENTITY_TO_CLASS(func_pushable, CPushable, CCSPushable);
|
||||
IMPLEMENT_SAVERESTORE(CPushable, CBreakable);
|
||||
|
||||
void CPushable::__MAKE_VHOOK(Spawn)()
|
||||
|
@ -37,7 +37,7 @@
|
||||
|
||||
// func breakable
|
||||
#define SF_BREAK_TRIGGER_ONLY 1 // may only be broken by trigger
|
||||
#define SF_BREAK_TOUCH 2 // can be 'crashed through' by running player (plate glass)
|
||||
#define SF_BREAK_TOUCH 2 // can be 'crashed through' by running player (plate glass)
|
||||
#define SF_BREAK_PRESSURE 4 // can be broken by a player standing on it
|
||||
#define SF_BREAK_CROWBAR 256 // instant break if hit with crowbar
|
||||
|
||||
|
@ -654,7 +654,7 @@ void CFuncTank::StopRotSound()
|
||||
pev->spawnflags &= ~SF_TANK_SOUNDON;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_tank, CFuncTankGun);
|
||||
LINK_ENTITY_TO_CLASS(func_tank, CFuncTankGun, CCSFuncTankGun);
|
||||
|
||||
void CFuncTankGun::__MAKE_VHOOK(Fire)(const Vector &barrelEnd, const Vector &forward, entvars_t *pevAttacker)
|
||||
{
|
||||
@ -693,7 +693,7 @@ void CFuncTankGun::__MAKE_VHOOK(Fire)(const Vector &barrelEnd, const Vector &for
|
||||
CFuncTank::Fire(barrelEnd, forward, pevAttacker);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_tanklaser, CFuncTankLaser);
|
||||
LINK_ENTITY_TO_CLASS(func_tanklaser, CFuncTankLaser, CCSFuncTankLaser);
|
||||
IMPLEMENT_SAVERESTORE(CFuncTankLaser, CFuncTank);
|
||||
|
||||
void CFuncTankLaser::__MAKE_VHOOK(Activate)()
|
||||
@ -789,7 +789,7 @@ void CFuncTankLaser::__MAKE_VHOOK(Fire)(const Vector &barrelEnd, const Vector &f
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_tankrocket, CFuncTankRocket);
|
||||
LINK_ENTITY_TO_CLASS(func_tankrocket, CFuncTankRocket, CCSFuncTankRocket);
|
||||
|
||||
void CFuncTankRocket::__MAKE_VHOOK(Precache)()
|
||||
{
|
||||
@ -819,7 +819,7 @@ void CFuncTankRocket::__MAKE_VHOOK(Fire)(const Vector &barrelEnd, const Vector &
|
||||
CFuncTank::Fire(barrelEnd, forward, pev);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_tankmortar, CFuncTankMortar);
|
||||
LINK_ENTITY_TO_CLASS(func_tankmortar, CFuncTankMortar, CCSFuncTankMortar);
|
||||
|
||||
void CFuncTankMortar::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -847,9 +847,7 @@ void CFuncTankMortar::__MAKE_VHOOK(Fire)(const Vector &barrelEnd, const Vector &
|
||||
UTIL_MakeAimVectors(pev->angles);
|
||||
|
||||
TankTrace(barrelEnd, forward, gTankSpread[m_spread], tr);
|
||||
|
||||
ExplosionCreate(tr.vecEndPos, pev->angles, edict(), pev->impulse, TRUE);
|
||||
|
||||
CFuncTank::Fire(barrelEnd, forward, pev);
|
||||
}
|
||||
}
|
||||
@ -857,7 +855,7 @@ void CFuncTankMortar::__MAKE_VHOOK(Fire)(const Vector &barrelEnd, const Vector &
|
||||
CFuncTank::Fire(barrelEnd, forward, pev);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_tankcontrols, CFuncTankControls);
|
||||
LINK_ENTITY_TO_CLASS(func_tankcontrols, CFuncTankControls, CCSFuncTankControls);
|
||||
IMPLEMENT_SAVERESTORE(CFuncTankControls, CBaseEntity);
|
||||
|
||||
void CFuncTankControls::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
|
||||
|
@ -162,9 +162,7 @@ public:
|
||||
virtual void Fire(const Vector &barrelEnd, const Vector &forward, entvars_t *pevAttacker);
|
||||
|
||||
#ifdef HOOK_GAMEDLL
|
||||
|
||||
void Fire_(const Vector &barrelEnd, const Vector &forward, entvars_t *pevAttacker);
|
||||
|
||||
#endif
|
||||
|
||||
};
|
||||
@ -252,7 +250,6 @@ public:
|
||||
|
||||
public:
|
||||
static TYPEDESCRIPTION IMPL(m_SaveData)[1];
|
||||
|
||||
CFuncTank *m_pTank;
|
||||
};
|
||||
|
||||
|
@ -95,9 +95,12 @@ cvar_t sk_scientist_heal3 = { "sk_scientist_heal3", "0", 0, 0.0f, NULL };
|
||||
|
||||
#ifdef REGAMEDLL_ADD
|
||||
|
||||
cvar_t game_version = { "game_version", APP_VERSION_STRD, FCVAR_SERVER, 0.0f, NULL };
|
||||
cvar_t maxmoney = { "mp_maxmoney", "16000", FCVAR_SERVER, 0.0f, NULL };
|
||||
cvar_t round_infinite = { "mp_round_infinite", "0", FCVAR_SERVER, 0.0f, NULL };
|
||||
cvar_t game_version = { "game_version", APP_VERSION_STRD, FCVAR_SERVER, 0.0f, nullptr };
|
||||
cvar_t maxmoney = { "mp_maxmoney", "16000", FCVAR_SERVER, 0.0f, nullptr };
|
||||
cvar_t round_infinite = { "mp_round_infinite", "0", FCVAR_SERVER, 0.0f, nullptr };
|
||||
cvar_t hegrenade_penetration = { "mp_hegrenade_penetration", "0", 0, 0.0f, nullptr };
|
||||
cvar_t nadedrops = { "mp_nadedrops", "0", 0, 0.0f, nullptr };
|
||||
cvar_t roundrespawn_time = { "mp_roundrespawn_time", "20", 0, 20.0f, nullptr };
|
||||
|
||||
void GameDLL_Version_f()
|
||||
{
|
||||
@ -222,6 +225,9 @@ void EXT_FUNC GameDLLInit()
|
||||
CVAR_REGISTER(&game_version);
|
||||
CVAR_REGISTER(&maxmoney);
|
||||
CVAR_REGISTER(&round_infinite);
|
||||
CVAR_REGISTER(&hegrenade_penetration);
|
||||
CVAR_REGISTER(&nadedrops);
|
||||
CVAR_REGISTER(&roundrespawn_time);
|
||||
|
||||
// print version
|
||||
CONSOLE_ECHO("ReGameDLL build: " __TIME__ " " __DATE__ " (" APP_VERSION_STRD ")\n");
|
||||
@ -233,3 +239,8 @@ void EXT_FUNC GameDLLInit()
|
||||
Tutor_RegisterCVars();
|
||||
Hostage_RegisterCVars();
|
||||
}
|
||||
|
||||
void EXT_FUNC GameDLLShutdown()
|
||||
{
|
||||
Regamedll_FreeEntities();
|
||||
}
|
||||
|
@ -135,9 +135,13 @@ extern cvar_t sk_scientist_heal3;
|
||||
|
||||
extern cvar_t maxmoney;
|
||||
extern cvar_t round_infinite;
|
||||
extern cvar_t hegrenade_penetration;
|
||||
extern cvar_t nadedrops;
|
||||
extern cvar_t roundrespawn_time;
|
||||
|
||||
#endif
|
||||
|
||||
void GameDLLInit();
|
||||
void GameDLLShutdown();
|
||||
|
||||
#endif // GAME_H
|
||||
|
@ -113,7 +113,9 @@ void CGameRules::__MAKE_VHOOK(RefreshSkillData)()
|
||||
gSkillData.healthkitCapacity = 15;
|
||||
}
|
||||
|
||||
CGameRules *InstallGameRules()
|
||||
LINK_HOOK_CHAIN2(CGameRules *, InstallGameRules);
|
||||
|
||||
CGameRules *__API_HOOK(InstallGameRules)()
|
||||
{
|
||||
SERVER_COMMAND("exec game.cfg\n");
|
||||
SERVER_EXECUTE();
|
||||
|
@ -34,8 +34,6 @@
|
||||
|
||||
#include "game_shared/voice_gamemgr.h"
|
||||
|
||||
#define COM_TOKEN_LEN 1500
|
||||
|
||||
#define MAX_RULE_BUFFER 1024
|
||||
#define MAX_VOTE_MAPS 100
|
||||
#define MAX_VIP_QUEUES 5
|
||||
@ -52,6 +50,7 @@
|
||||
#define ITEM_RESPAWN_TIME 30
|
||||
#define WEAPON_RESPAWN_TIME 20
|
||||
#define AMMO_RESPAWN_TIME 20
|
||||
#define ROUND_RESPAWN_TIME 20
|
||||
|
||||
// longest the intermission can last, in seconds
|
||||
#define MAX_INTERMISSION_TIME 120
|
||||
@ -64,7 +63,7 @@
|
||||
#define MAX_MOTD_LENGTH 1536 // (MAX_MOTD_CHUNK * 4)
|
||||
|
||||
// custom enum
|
||||
#define WINNER_NONE 0
|
||||
#define WINNER_NONE 0
|
||||
#define WINNER_DRAW 1
|
||||
|
||||
enum
|
||||
@ -76,9 +75,10 @@ enum
|
||||
|
||||
// custom enum
|
||||
// used for EndRoundMessage() logged messages
|
||||
enum ScenarionEventEndRound
|
||||
enum ScenarioEventEndRound
|
||||
{
|
||||
ROUND_TARGET_BOMB = 1,
|
||||
ROUND_NONE,
|
||||
ROUND_TARGET_BOMB,
|
||||
ROUND_VIP_ESCAPED,
|
||||
ROUND_VIP_ASSASSINATED,
|
||||
ROUND_TERRORISTS_ESCAPED,
|
||||
@ -502,21 +502,44 @@ public:
|
||||
public:
|
||||
// Checks if it still needs players to start a round, or if it has enough players to start rounds.
|
||||
// Starts a round and returns true if there are enough players.
|
||||
bool NeededPlayersCheck(bool &bNeededPlayers);
|
||||
bool NeededPlayersCheck();
|
||||
|
||||
// Setup counts for m_iNumTerrorist, m_iNumCT, m_iNumSpawnableTerrorist, m_iNumSpawnableCT, etc.
|
||||
void InitializePlayerCounts(int &NumAliveTerrorist, int &NumAliveCT, int &NumDeadTerrorist, int &NumDeadCT);
|
||||
|
||||
// Check to see if the round is over for the various game types. Terminates the round
|
||||
// and returns true if the round should end.
|
||||
bool PrisonRoundEndCheck(int NumAliveTerrorist, int NumAliveCT, int NumDeadTerrorist, int NumDeadCT, bool bNeededPlayers);
|
||||
bool BombRoundEndCheck(bool bNeededPlayers);
|
||||
bool HostageRescueRoundEndCheck(bool bNeededPlayers);
|
||||
bool VIPRoundEndCheck(bool bNeededPlayers);
|
||||
bool PrisonRoundEndCheck(int NumAliveTerrorist, int NumAliveCT, int NumDeadTerrorist, int NumDeadCT);
|
||||
bool BombRoundEndCheck();
|
||||
bool HostageRescueRoundEndCheck();
|
||||
bool VIPRoundEndCheck();
|
||||
|
||||
// Check to see if the teams exterminated each other. Ends the round and returns true if so.
|
||||
bool TeamExterminationCheck(int NumAliveTerrorist, int NumAliveCT, int NumDeadTerrorist, int NumDeadCT, bool bNeededPlayers);
|
||||
void TerminateRound(float tmDelay, int iWinStatus);
|
||||
bool TeamExterminationCheck(int NumAliveTerrorist, int NumAliveCT, int NumDeadTerrorist, int NumDeadCT);
|
||||
|
||||
// for internal functions API
|
||||
bool NeededPlayersCheck_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
|
||||
bool VIP_Escaped_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
bool VIP_Died_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
bool VIP_NotEscaped_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
|
||||
bool Prison_Escaped_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
bool Prison_PreventEscape_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
bool Prison_NotEscaped_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
bool Prison_Neutralized_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
|
||||
bool Target_Bombed_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
bool Target_Saved_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
bool Target_Defused_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
|
||||
// Team extermination
|
||||
bool Round_Cts_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
bool Round_Ts_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
bool Round_Draw_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
|
||||
bool Hostage_Rescue_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
bool Hostage_NotRescued_internal(int winStatus, ScenarioEventEndRound event, float tmDelay);
|
||||
|
||||
// Check various conditions to end the map.
|
||||
bool CheckGameOver();
|
||||
@ -563,6 +586,40 @@ public:
|
||||
bool IsMatchStarted() { return (m_fTeamCount != 0.0f || m_fCareerRoundMenuTime != 0.0f || m_fCareerMatchMenuTime != 0.0f); }
|
||||
void SendMOTDToClient(edict_t *client);
|
||||
|
||||
inline void TerminateRound(float tmDelay, int iWinStatus)
|
||||
{
|
||||
m_iRoundWinStatus = iWinStatus;
|
||||
m_fTeamCount = gpGlobals->time + tmDelay;
|
||||
m_bRoundTerminating = true;
|
||||
}
|
||||
|
||||
inline float GetRoundRespawnTime() const
|
||||
{
|
||||
#ifdef REGAMEDLL_ADD
|
||||
return roundrespawn_time.value;
|
||||
#else
|
||||
return ROUND_RESPAWN_TIME;
|
||||
#endif
|
||||
}
|
||||
|
||||
// allow the mode of fire on a friendly player (FFA)
|
||||
inline bool IsFriendlyFireAttack() const
|
||||
{
|
||||
#ifdef REGAMEDLL_ADD
|
||||
if (friendlyfire.string[0] == '2')
|
||||
return true;
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
inline bool HasRoundInfinite(bool time_expired = false) const
|
||||
{
|
||||
#ifdef REGAMEDLL_ADD
|
||||
if (round_infinite.string[0] == '1' || (time_expired && (UTIL_ReadFlags(round_infinite.string) & SCENARIO_BLOCK_TIME_EXPRIRED)))
|
||||
return true;
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
bool HasRoundTimeExpired();
|
||||
bool IsBombPlanted();
|
||||
@ -653,6 +710,10 @@ protected:
|
||||
int m_iRoundWinDifference;
|
||||
float m_fCareerMatchMenuTime;
|
||||
bool m_bSkipSpawn;
|
||||
|
||||
// custom
|
||||
bool m_bNeededPlayers;
|
||||
float m_flEscapeRatio;
|
||||
};
|
||||
|
||||
typedef struct mapcycle_item_s
|
||||
@ -706,6 +767,7 @@ public:
|
||||
extern CGameRules *g_pGameRules;
|
||||
|
||||
CGameRules *InstallGameRules();
|
||||
CGameRules *InstallGameRules_();
|
||||
|
||||
inline CHalfLifeMultiplay *CSGameRules()
|
||||
{
|
||||
|
@ -26,7 +26,7 @@ TYPEDESCRIPTION CGrenade::m_SaveData[] =
|
||||
|
||||
#endif
|
||||
|
||||
LINK_ENTITY_TO_CLASS(grenade, CGrenade);
|
||||
LINK_ENTITY_TO_CLASS(grenade, CGrenade, CCSGrenade);
|
||||
|
||||
void CGrenade::Explode(Vector vecSrc, Vector vecAim)
|
||||
{
|
||||
@ -51,8 +51,10 @@ void CGrenade::Explode(TraceResult *pTrace, int bitsDamageType)
|
||||
}
|
||||
|
||||
int iContents = UTIL_PointContents(pev->origin);
|
||||
CSoundEnt::InsertSound(bits_SOUND_COMBAT, pev->origin, NORMAL_EXPLOSION_VOLUME, 3);
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
CSoundEnt::InsertSound(bits_SOUND_COMBAT, pev->origin, NORMAL_EXPLOSION_VOLUME, 3);
|
||||
#endif
|
||||
entvars_t *pevOwner = VARS(pev->owner);
|
||||
|
||||
if (TheBots != NULL)
|
||||
@ -166,8 +168,10 @@ void CGrenade::Explode2(TraceResult *pTrace, int bitsDamageType)
|
||||
|
||||
// Sound! for everyone
|
||||
EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/c4_explode1.wav", VOL_NORM, 0.25);
|
||||
CSoundEnt::InsertSound(bits_SOUND_COMBAT, pev->origin, NORMAL_EXPLOSION_VOLUME, 3);
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
CSoundEnt::InsertSound(bits_SOUND_COMBAT, pev->origin, NORMAL_EXPLOSION_VOLUME, 3);
|
||||
#endif
|
||||
entvars_t *pevOwner = VARS(pev->owner);
|
||||
|
||||
pev->owner = NULL;
|
||||
@ -257,8 +261,9 @@ void CGrenade::Explode3(TraceResult *pTrace, int bitsDamageType)
|
||||
WRITE_BYTE(TE_EXPLFLAG_NONE); // flags
|
||||
MESSAGE_END();
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
CSoundEnt::InsertSound(bits_SOUND_COMBAT, pev->origin, NORMAL_EXPLOSION_VOLUME, 3);
|
||||
|
||||
#endif
|
||||
entvars_t *pevOwner = VARS(pev->owner);
|
||||
|
||||
if (TheBots != NULL)
|
||||
@ -310,7 +315,10 @@ NOXREF void CGrenade::SG_Explode(TraceResult *pTrace, int bitsDamageType)
|
||||
}
|
||||
|
||||
int iContents = UTIL_PointContents(pev->origin);
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
CSoundEnt::InsertSound(bits_SOUND_COMBAT, pev->origin, NORMAL_EXPLOSION_VOLUME, 3);
|
||||
#endif
|
||||
|
||||
// can't traceline attack owner if this is set
|
||||
pev->owner = NULL;
|
||||
@ -517,7 +525,9 @@ void CGrenade::DetonateUse(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TY
|
||||
|
||||
void CGrenade::PreDetonate()
|
||||
{
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
CSoundEnt::InsertSound(bits_SOUND_DANGER, pev->origin, 400, 0.3);
|
||||
#endif
|
||||
|
||||
SetThink(&CGrenade::Detonate);
|
||||
pev->nextthink = gpGlobals->time + 1.0f;
|
||||
@ -626,7 +636,9 @@ void CGrenade::DangerSoundThink()
|
||||
return;
|
||||
}
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
CSoundEnt::InsertSound(bits_SOUND_DANGER, pev->origin + pev->velocity * 0.5, pev->velocity.Length(), 0.2);
|
||||
#endif
|
||||
pev->nextthink = gpGlobals->time + 0.2f;
|
||||
|
||||
if (pev->waterlevel != 0)
|
||||
@ -655,6 +667,7 @@ void CGrenade::BounceTouch(CBaseEntity *pOther)
|
||||
vecTestVelocity = pev->velocity;
|
||||
vecTestVelocity.z *= 0.7f;
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
if (!m_fRegisteredSound && vecTestVelocity.Length() <= 60.0f)
|
||||
{
|
||||
// grenade is moving really slow. It's probably very close to where it will ultimately stop moving.
|
||||
@ -664,7 +677,7 @@ void CGrenade::BounceTouch(CBaseEntity *pOther)
|
||||
CSoundEnt::InsertSound(bits_SOUND_DANGER, pev->origin, pev->dmg / 0.4f, 0.3);
|
||||
m_fRegisteredSound = TRUE;
|
||||
}
|
||||
|
||||
#endif
|
||||
if (pev->flags & FL_ONGROUND)
|
||||
{
|
||||
// add a bit of static friction
|
||||
@ -745,10 +758,12 @@ void CGrenade::TumbleThink()
|
||||
StudioFrameAdvance();
|
||||
pev->nextthink = gpGlobals->time + 0.1f;
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
if (pev->dmgtime - 1 < gpGlobals->time)
|
||||
{
|
||||
CSoundEnt::InsertSound(bits_SOUND_DANGER, pev->origin + pev->velocity * (pev->dmgtime - gpGlobals->time), 400, 0.1);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (pev->dmgtime <= gpGlobals->time)
|
||||
{
|
||||
@ -783,10 +798,12 @@ void CGrenade::SG_TumbleThink()
|
||||
StudioFrameAdvance();
|
||||
pev->nextthink = gpGlobals->time + 0.1f;
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
if (pev->dmgtime - 1 < gpGlobals->time)
|
||||
{
|
||||
CSoundEnt::InsertSound(bits_SOUND_DANGER, pev->origin + pev->velocity * (pev->dmgtime - gpGlobals->time), 400, 0.1);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (pev->dmgtime <= gpGlobals->time)
|
||||
{
|
||||
@ -822,7 +839,7 @@ void CGrenade::__MAKE_VHOOK(Spawn)()
|
||||
|
||||
NOXREF CGrenade *CGrenade::ShootContact(entvars_t *pevOwner, Vector vecStart, Vector vecVelocity)
|
||||
{
|
||||
CGrenade *pGrenade = GetClassPtr((CGrenade *)NULL);
|
||||
CGrenade *pGrenade = GetClassPtr<CCSGrenade>((CGrenade *)NULL);
|
||||
pGrenade->Spawn();
|
||||
|
||||
// contact grenades arc lower
|
||||
@ -850,7 +867,7 @@ NOXREF CGrenade *CGrenade::ShootContact(entvars_t *pevOwner, Vector vecStart, Ve
|
||||
|
||||
CGrenade *CGrenade::ShootTimed2(entvars_t *pevOwner, Vector vecStart, Vector vecVelocity, float time, int iTeam, unsigned short usEvent)
|
||||
{
|
||||
CGrenade *pGrenade = GetClassPtr((CGrenade *)NULL);
|
||||
CGrenade *pGrenade = GetClassPtr<CCSGrenade>((CGrenade *)NULL);
|
||||
pGrenade->Spawn();
|
||||
|
||||
UTIL_SetOrigin(pGrenade->pev, vecStart);
|
||||
@ -884,7 +901,7 @@ CGrenade *CGrenade::ShootTimed2(entvars_t *pevOwner, Vector vecStart, Vector vec
|
||||
|
||||
CGrenade *CGrenade::ShootTimed(entvars_t *pevOwner, Vector vecStart, Vector vecVelocity, float time)
|
||||
{
|
||||
CGrenade *pGrenade = GetClassPtr((CGrenade *)NULL);
|
||||
CGrenade *pGrenade = GetClassPtr<CCSGrenade>((CGrenade *)NULL);
|
||||
pGrenade->Spawn();
|
||||
|
||||
UTIL_SetOrigin(pGrenade->pev, vecStart);
|
||||
@ -928,7 +945,7 @@ void CGrenade::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller,
|
||||
if (!m_bIsC4)
|
||||
return;
|
||||
|
||||
CBasePlayer *player = GetClassPtr((CBasePlayer *)pActivator->pev);
|
||||
CBasePlayer *player = GetClassPtr<CCSPlayer>((CBasePlayer *)pActivator->pev);
|
||||
|
||||
// For CTs to defuse the c4
|
||||
if (player->m_iTeam != CT)
|
||||
@ -1002,7 +1019,7 @@ void CGrenade::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller,
|
||||
|
||||
CGrenade *CGrenade::ShootSatchelCharge(entvars_t *pevOwner, Vector vecStart, Vector vecAngles)
|
||||
{
|
||||
CGrenade *pGrenade = GetClassPtr((CGrenade *)NULL);
|
||||
CGrenade *pGrenade = GetClassPtr<CCSGrenade>((CGrenade *)NULL);
|
||||
pGrenade->pev->movetype = MOVETYPE_TOSS;
|
||||
|
||||
MAKE_STRING_CLASS("grenade", pGrenade->pev);
|
||||
@ -1056,7 +1073,7 @@ CGrenade *CGrenade::ShootSatchelCharge(entvars_t *pevOwner, Vector vecStart, Vec
|
||||
|
||||
CGrenade *CGrenade::ShootSmokeGrenade(entvars_t *pevOwner, Vector vecStart, Vector vecVelocity, float time, unsigned short usEvent)
|
||||
{
|
||||
CGrenade *pGrenade = GetClassPtr((CGrenade *)NULL);
|
||||
CGrenade *pGrenade = GetClassPtr<CCSGrenade>((CGrenade *)NULL);
|
||||
pGrenade->Spawn();
|
||||
|
||||
UTIL_SetOrigin(pGrenade->pev, vecStart);
|
||||
|
@ -5,7 +5,7 @@
|
||||
*/
|
||||
#ifndef HOOK_GAMEDLL
|
||||
|
||||
const Vector g_vecZero = Vector(0, 0, 0);
|
||||
const Vector g_vecZero(0, 0, 0);
|
||||
NOXREF u_long g_ulFrameCount = 0;
|
||||
|
||||
#endif
|
||||
|
@ -17,7 +17,7 @@ TYPEDESCRIPTION CRecharge::m_SaveData[] =
|
||||
#endif
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CRecharge, CBaseEntity);
|
||||
LINK_ENTITY_TO_CLASS(func_recharge, CRecharge);
|
||||
LINK_ENTITY_TO_CLASS(func_recharge, CRecharge, CCSRecharge);
|
||||
|
||||
void CRecharge::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
|
@ -31,8 +31,8 @@ void CGenericCycler::__MAKE_VHOOK(Spawn)()
|
||||
GenericCyclerSpawn((char *)STRING(pev->model), Vector(-16, -16, 0), Vector(16, 16, 72));
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(cycler, CGenericCycler);
|
||||
LINK_ENTITY_TO_CLASS(cycler_prdroid, CCyclerProbe);
|
||||
LINK_ENTITY_TO_CLASS(cycler, CGenericCycler, CCSGenericCycler);
|
||||
LINK_ENTITY_TO_CLASS(cycler_prdroid, CCyclerProbe, CCSCyclerProbe);
|
||||
|
||||
void CCyclerProbe::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -161,7 +161,7 @@ int CCycler::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *pevAtt
|
||||
return 0;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(cycler_sprite, CCyclerSprite);
|
||||
LINK_ENTITY_TO_CLASS(cycler_sprite, CCyclerSprite, CCSCyclerSprite);
|
||||
IMPLEMENT_SAVERESTORE(CCyclerSprite, CBaseEntity);
|
||||
|
||||
void CCyclerSprite::__MAKE_VHOOK(Spawn)()
|
||||
@ -242,7 +242,7 @@ void CCyclerSprite::Animate(float frames)
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(cycler_weapon, CWeaponCycler);
|
||||
LINK_ENTITY_TO_CLASS(cycler_weapon, CWeaponCycler, CCSWeaponCycler);
|
||||
|
||||
void CWeaponCycler::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -303,7 +303,7 @@ void CWeaponCycler::__MAKE_VHOOK(SecondaryAttack)()
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CWreckage, CBaseToggle);
|
||||
LINK_ENTITY_TO_CLASS(cycler_wreckage, CWreckage);
|
||||
LINK_ENTITY_TO_CLASS(cycler_wreckage, CWreckage, CCSWreckage);
|
||||
|
||||
void CWreckage::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -16,7 +16,7 @@ TYPEDESCRIPTION CWallHealth::m_SaveData[] =
|
||||
|
||||
#endif
|
||||
|
||||
LINK_ENTITY_TO_CLASS(item_healthkit, CHealthKit);
|
||||
LINK_ENTITY_TO_CLASS(item_healthkit, CHealthKit, CCSHealthKit);
|
||||
|
||||
void CHealthKit::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -54,7 +54,7 @@ BOOL CHealthKit::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CWallHealth, CBaseEntity);
|
||||
LINK_ENTITY_TO_CLASS(func_healthcharger, CWallHealth);
|
||||
LINK_ENTITY_TO_CLASS(func_healthcharger, CWallHealth, CCSWallHealth);
|
||||
|
||||
void CWallHealth::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
|
@ -13,8 +13,8 @@ int g_iHostageNumber = 0;
|
||||
|
||||
#endif
|
||||
|
||||
LINK_ENTITY_TO_CLASS(hostage_entity, CHostage);
|
||||
LINK_ENTITY_TO_CLASS(monster_scientist, CHostage);
|
||||
LINK_ENTITY_TO_CLASS(hostage_entity, CHostage, CCSHostage);
|
||||
LINK_ENTITY_TO_CLASS(monster_scientist, CHostage, CCSHostage);
|
||||
|
||||
void CHostage::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -229,7 +229,7 @@ void CHostage::IdleThink()
|
||||
player = (CBasePlayer *)m_improv->GetFollowLeader();
|
||||
}
|
||||
else
|
||||
player = GetClassPtr((CBasePlayer *)m_hTargetEnt->pev);
|
||||
player = GetClassPtr<CCSPlayer>((CBasePlayer *)m_hTargetEnt->pev);
|
||||
|
||||
if (player == NULL || player->m_iTeam == CT)
|
||||
{
|
||||
@ -428,7 +428,7 @@ int CHostage::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *pevAt
|
||||
|
||||
if (pevAttacker != NULL)
|
||||
{
|
||||
CBaseEntity *pAttackingEnt = GetClassPtr((CBaseEntity *)pevAttacker);
|
||||
CBaseEntity *pAttackingEnt = GetClassPtr<CCSEntity>((CBaseEntity *)pevAttacker);
|
||||
|
||||
if (pAttackingEnt->Classify() == CLASS_VEHICLE)
|
||||
{
|
||||
@ -442,7 +442,7 @@ int CHostage::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *pevAt
|
||||
|
||||
if (pAttackingEnt->IsPlayer())
|
||||
{
|
||||
pAttacker = GetClassPtr((CBasePlayer *)pevAttacker);
|
||||
pAttacker = GetClassPtr<CCSPlayer>((CBasePlayer *)pevAttacker);
|
||||
}
|
||||
}
|
||||
|
||||
@ -820,7 +820,7 @@ void CHostage::DoFollow()
|
||||
return;
|
||||
}
|
||||
|
||||
pFollowing = GetClassPtr((CBaseEntity *)m_hTargetEnt->pev);
|
||||
pFollowing = GetClassPtr<CCSEntity>((CBaseEntity *)m_hTargetEnt->pev);
|
||||
m_LocalNav->SetTargetEnt(pFollowing);
|
||||
|
||||
vecDest = pFollowing->pev->origin;
|
||||
@ -913,7 +913,7 @@ void CHostage::MoveToward(const Vector &vecLoc)
|
||||
Vector vecAng;
|
||||
float_precision flDist;
|
||||
|
||||
pFollowing = GetClassPtr((CBaseEntity *)m_hTargetEnt->pev);
|
||||
pFollowing = GetClassPtr<CCSEntity>((CBaseEntity *)m_hTargetEnt->pev);
|
||||
vecMove = vecLoc - pev->origin;
|
||||
vecAng = UTIL_VecToAngles(vecMove);
|
||||
vecAng = Vector(0, vecAng.y, 0);
|
||||
@ -976,7 +976,7 @@ void CHostage::NavReady()
|
||||
return;
|
||||
}
|
||||
|
||||
pFollowing = GetClassPtr((CBaseEntity *)m_hTargetEnt->pev);
|
||||
pFollowing = GetClassPtr<CCSEntity>((CBaseEntity *)m_hTargetEnt->pev);
|
||||
vecDest = pFollowing->pev->origin;
|
||||
|
||||
if (!(pFollowing->pev->flags & FL_ONGROUND))
|
||||
@ -1035,7 +1035,7 @@ void CHostage::SendHostagePositionMsg()
|
||||
if (pEntity->pev->flags == FL_DORMANT)
|
||||
continue;
|
||||
|
||||
CBasePlayer *pTempPlayer = GetClassPtr((CBasePlayer *)pEntity->pev);
|
||||
CBasePlayer *pTempPlayer = GetClassPtr<CCSPlayer>((CBasePlayer *)pEntity->pev);
|
||||
|
||||
if (pTempPlayer->pev->deadflag == DEAD_NO && pTempPlayer->m_iTeam == CT)
|
||||
{
|
||||
@ -1065,7 +1065,7 @@ void CHostage::SendHostageEventMsg()
|
||||
if (pEntity->pev->flags == FL_DORMANT)
|
||||
continue;
|
||||
|
||||
CBasePlayer *pTempPlayer = GetClassPtr((CBasePlayer *)pEntity->pev);
|
||||
CBasePlayer *pTempPlayer = GetClassPtr<CCSPlayer>((CBasePlayer *)pEntity->pev);
|
||||
|
||||
if (pTempPlayer->pev->deadflag == DEAD_NO && pTempPlayer->m_iTeam == CT)
|
||||
{
|
||||
@ -1082,7 +1082,7 @@ void CHostage::SendHostageEventMsg()
|
||||
void CHostage::Wiggle()
|
||||
{
|
||||
TraceResult tr;
|
||||
Vector vec = Vector(0, 0, 0);
|
||||
Vector vec(0, 0, 0);
|
||||
Vector wiggle_directions[] =
|
||||
{
|
||||
Vector(50, 0, 0),
|
||||
|
@ -1349,7 +1349,7 @@ void CHostageImprov::__MAKE_VHOOK(OnTouch)(CBaseEntity *other)
|
||||
{
|
||||
const float lookAheadRange = 30.0f;
|
||||
float ground;
|
||||
Vector normal = Vector(0, 0, 1);
|
||||
Vector normal(0, 0, 1);
|
||||
Vector alongFloor;
|
||||
TraceResult result;
|
||||
bool isStep = false;
|
||||
@ -1385,7 +1385,7 @@ void CHostageImprov::__MAKE_VHOOK(OnTouch)(CBaseEntity *other)
|
||||
if (isStep)
|
||||
{
|
||||
float stepAheadGround = pos.z;
|
||||
Vector stepAheadNormal = Vector(0, 0, stepAheadGround);
|
||||
Vector stepAheadNormal(0, 0, stepAheadGround);
|
||||
|
||||
m_inhibitObstacleAvoidance.Start(0.5);
|
||||
|
||||
|
@ -393,7 +393,7 @@ public:
|
||||
const float space = 1.0f;
|
||||
Vector to;
|
||||
float range;
|
||||
|
||||
|
||||
if (entity == reinterpret_cast<CBaseEntity *>(m_improv->GetEntity()))
|
||||
return true;
|
||||
|
||||
|
@ -33,7 +33,7 @@ CLocalNav::CLocalNav(CHostage *pOwner)
|
||||
|
||||
CLocalNav::~CLocalNav()
|
||||
{
|
||||
delete m_nodeArr;
|
||||
delete[] m_nodeArr;
|
||||
m_nodeArr = NULL;
|
||||
}
|
||||
|
||||
@ -801,7 +801,7 @@ void CLocalNav::Think()
|
||||
|
||||
if (hCallback)
|
||||
{
|
||||
CHostage *pHostage = GetClassPtr((CHostage *)hCallback->pev);
|
||||
CHostage *pHostage = GetClassPtr<CCSHostage>((CHostage *)hCallback->pev);
|
||||
|
||||
if (++qptr == MAX_HOSTAGES_NAV)
|
||||
qptr = 0;
|
||||
@ -830,7 +830,7 @@ void CLocalNav::RequestNav(CHostage *pCaller)
|
||||
|
||||
for (int i = 0; i < tot_inqueue; ++i)
|
||||
{
|
||||
CHostage *pQueueItem = GetClassPtr((CHostage *)_queue[curr]->pev);
|
||||
CHostage *pQueueItem = GetClassPtr<CCSHostage>((CHostage *)_queue[curr]->pev);
|
||||
|
||||
if (pQueueItem == pCaller)
|
||||
return;
|
||||
@ -859,7 +859,7 @@ void CLocalNav::HostagePrethink()
|
||||
{
|
||||
if (hostages[ iCount ] != NULL)
|
||||
{
|
||||
GetClassPtr((CHostage *)hostages[ iCount ]->pev)->PreThink();
|
||||
GetClassPtr<CCSHostage>((CHostage *)hostages[ iCount ]->pev)->PreThink();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -309,7 +309,7 @@ public:
|
||||
void SetPerformance(PerformanceType performance) { m_performance = performance; }
|
||||
void StartSequence(CHostageImprov *improv, const SeqInfo *seqInfo);
|
||||
bool IsDoneHolding();
|
||||
|
||||
|
||||
private:
|
||||
enum { MAX_SEQUENCES = 8 };
|
||||
struct SeqInfo m_sequence[MAX_SEQUENCES];
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(world_items, CWorldItem);
|
||||
LINK_ENTITY_TO_CLASS(world_items, CWorldItem, CCSWorldItem);
|
||||
|
||||
void CWorldItem::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -142,7 +142,7 @@ BOOL CItemSuit::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(item_suit, CItemSuit);
|
||||
LINK_ENTITY_TO_CLASS(item_suit, CItemSuit, CCSItemSuit);
|
||||
|
||||
void CItemBattery::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -189,7 +189,7 @@ BOOL CItemBattery::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(item_battery, CItemBattery);
|
||||
LINK_ENTITY_TO_CLASS(item_battery, CItemBattery, CCSItemBattery);
|
||||
|
||||
void CItemAntidote::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -211,7 +211,7 @@ BOOL CItemAntidote::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(item_antidote, CItemAntidote);
|
||||
LINK_ENTITY_TO_CLASS(item_antidote, CItemAntidote, CCSItemAntidote);
|
||||
|
||||
void CItemSecurity::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -231,7 +231,7 @@ BOOL CItemSecurity::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(item_security, CItemSecurity);
|
||||
LINK_ENTITY_TO_CLASS(item_security, CItemSecurity, CCSItemSecurity);
|
||||
|
||||
void CItemLongJump::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -268,7 +268,7 @@ BOOL CItemLongJump::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(item_longjump, CItemLongJump);
|
||||
LINK_ENTITY_TO_CLASS(item_longjump, CItemLongJump, CCSItemLongJump);
|
||||
|
||||
void CItemKevlar::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -306,7 +306,7 @@ BOOL CItemKevlar::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(item_kevlar, CItemKevlar);
|
||||
LINK_ENTITY_TO_CLASS(item_kevlar, CItemKevlar, CCSItemKevlar);
|
||||
|
||||
void CItemAssaultSuit::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -343,7 +343,7 @@ BOOL CItemAssaultSuit::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(item_assaultsuit, CItemAssaultSuit);
|
||||
LINK_ENTITY_TO_CLASS(item_assaultsuit, CItemAssaultSuit, CCSItemAssaultSuit);
|
||||
|
||||
void CItemThighPack::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -386,4 +386,4 @@ BOOL CItemThighPack::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(item_thighpack, CItemThighPack);
|
||||
LINK_ENTITY_TO_CLASS(item_thighpack, CItemThighPack, CCSItemThighPack);
|
||||
|
@ -13,7 +13,7 @@ TYPEDESCRIPTION CLight::m_SaveData[] =
|
||||
|
||||
#endif
|
||||
|
||||
LINK_ENTITY_TO_CLASS(light, CLight);
|
||||
LINK_ENTITY_TO_CLASS(light, CLight, CCSLight);
|
||||
IMPLEMENT_SAVERESTORE(CLight, CPointEntity);
|
||||
|
||||
// Cache user-entity-field values until spawn is called.
|
||||
@ -106,8 +106,8 @@ void CLight::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, US
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(light_spot, CLight);
|
||||
LINK_ENTITY_TO_CLASS(light_environment, CEnvLight);
|
||||
LINK_ENTITY_TO_CLASS(light_spot, CLight, CCSLight);
|
||||
LINK_ENTITY_TO_CLASS(light_environment, CEnvLight, CCSEnvLight);
|
||||
|
||||
void CEnvLight::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
|
@ -39,9 +39,9 @@ class CLight: public CPointEntity
|
||||
public:
|
||||
virtual void Spawn();
|
||||
virtual void Restart();
|
||||
virtual void KeyValue(KeyValueData *pkvd);
|
||||
virtual int Save(CSave &save);
|
||||
virtual int Restore(CRestore &restore);
|
||||
virtual void KeyValue(KeyValueData *pkvd);
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
|
||||
#ifdef HOOK_GAMEDLL
|
||||
|
@ -73,7 +73,7 @@ void CRuleBrushEntity::__MAKE_VHOOK(Spawn)()
|
||||
CRuleEntity::Spawn();
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(game_score, CGameScore);
|
||||
LINK_ENTITY_TO_CLASS(game_score, CGameScore, CCSGameScore);
|
||||
|
||||
void CGameScore::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -110,7 +110,7 @@ void CGameScore::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(game_end, CGameEnd);
|
||||
LINK_ENTITY_TO_CLASS(game_end, CGameEnd, CCSGameEnd);
|
||||
|
||||
void CGameEnd::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
|
||||
{
|
||||
@ -120,7 +120,7 @@ void CGameEnd::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller,
|
||||
g_pGameRules->EndMultiplayerGame();
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(game_text, CGameText);
|
||||
LINK_ENTITY_TO_CLASS(game_text, CGameText, CCSGameText);
|
||||
IMPLEMENT_SAVERESTORE(CGameText, CRulePointEntity);
|
||||
|
||||
void CGameText::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -211,7 +211,7 @@ void CGameText::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller,
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(game_team_master, CGameTeamMaster);
|
||||
LINK_ENTITY_TO_CLASS(game_team_master, CGameTeamMaster, CCSGameTeamMaster);
|
||||
|
||||
void CGameTeamMaster::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -301,7 +301,7 @@ BOOL CGameTeamMaster::TeamMatch(CBaseEntity *pActivator)
|
||||
return UTIL_TeamsMatch(pActivator->TeamID(), TeamID());
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(game_team_set, CGameTeamSet);
|
||||
LINK_ENTITY_TO_CLASS(game_team_set, CGameTeamSet, CCSGameTeamSet);
|
||||
|
||||
void CGameTeamSet::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
|
||||
{
|
||||
@ -323,7 +323,7 @@ void CGameTeamSet::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCall
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(game_zone_player, CGamePlayerZone);
|
||||
LINK_ENTITY_TO_CLASS(game_zone_player, CGamePlayerZone, CCSGamePlayerZone);
|
||||
IMPLEMENT_SAVERESTORE(CGamePlayerZone, CRuleBrushEntity);
|
||||
|
||||
void CGamePlayerZone::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -410,7 +410,7 @@ void CGamePlayerZone::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pC
|
||||
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(game_player_hurt, CGamePlayerHurt);
|
||||
LINK_ENTITY_TO_CLASS(game_player_hurt, CGamePlayerHurt, CCSGamePlayerHurt);
|
||||
|
||||
void CGamePlayerHurt::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
|
||||
{
|
||||
@ -433,7 +433,7 @@ void CGamePlayerHurt::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pC
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(game_counter, CGameCounter);
|
||||
LINK_ENTITY_TO_CLASS(game_counter, CGameCounter, CCSGameCounter);
|
||||
|
||||
void CGameCounter::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -479,7 +479,7 @@ void CGameCounter::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCall
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(game_counter_set, CGameCounterSet);
|
||||
LINK_ENTITY_TO_CLASS(game_counter_set, CGameCounterSet, CCSGameCounterSet);
|
||||
|
||||
void CGameCounterSet::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
|
||||
{
|
||||
@ -494,7 +494,7 @@ void CGameCounterSet::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pC
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(game_player_equip, CGamePlayerEquip);
|
||||
LINK_ENTITY_TO_CLASS(game_player_equip, CGamePlayerEquip, CCSGamePlayerEquip);
|
||||
|
||||
void CGamePlayerEquip::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -560,7 +560,7 @@ void CGamePlayerEquip::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *p
|
||||
EquipPlayer(pActivator);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(game_player_team, CGamePlayerTeam);
|
||||
LINK_ENTITY_TO_CLASS(game_player_team, CGamePlayerTeam, CCSGamePlayerTeam);
|
||||
|
||||
const char *CGamePlayerTeam::TargetTeamName(const char *pszTargetName)
|
||||
{
|
||||
|
@ -32,7 +32,7 @@
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
typedef struct MonsterEvent_s
|
||||
{
|
||||
int event;
|
||||
char *options;
|
||||
|
@ -17,7 +17,7 @@ TYPEDESCRIPTION CFuncMortarField::m_SaveData[] =
|
||||
|
||||
#endif
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_mortar_field, CFuncMortarField);
|
||||
LINK_ENTITY_TO_CLASS(func_mortar_field, CFuncMortarField, CCSFuncMortarField);
|
||||
IMPLEMENT_SAVERESTORE(CFuncMortarField, CBaseToggle);
|
||||
|
||||
void CFuncMortarField::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -144,15 +144,16 @@ void CFuncMortarField::FieldUse(CBaseEntity *pActivator, CBaseEntity *pCaller, U
|
||||
CBaseEntity *pMortar = Create("monster_mortar", tr.vecEndPos, Vector(0, 0, 0), pentOwner);
|
||||
pMortar->pev->nextthink = gpGlobals->time + t;
|
||||
t += RANDOM_FLOAT(0.2, 0.5);
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
if (i == 0)
|
||||
{
|
||||
CSoundEnt::InsertSound(bits_SOUND_DANGER, tr.vecEndPos, 400, 0.3);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(monster_mortar, CMortar);
|
||||
LINK_ENTITY_TO_CLASS(monster_mortar, CMortar, CCSMortar);
|
||||
|
||||
void CMortar::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -149,7 +149,7 @@ void CBaseMonster::__MAKE_VHOOK(Look)(int iDistance)
|
||||
CBaseEntity *pSightEnt = NULL;
|
||||
CBaseEntity *pList[100];
|
||||
|
||||
Vector delta = Vector(iDistance, iDistance, iDistance);
|
||||
Vector delta(iDistance, iDistance, iDistance);
|
||||
|
||||
// Find only monsters/clients in box, NOT limited to PVS
|
||||
int count = UTIL_EntitiesInBox(pList, ARRAYSIZE(pList), pev->origin - delta, pev->origin + delta, (FL_CLIENT | FL_MONSTER));
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,8 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
int GetForceCamera_api(CBasePlayer *pObserver)
|
||||
LINK_HOOK_CHAIN(int, GetForceCamera, (CBasePlayer *pObserver), pObserver);
|
||||
|
||||
int __API_HOOK(GetForceCamera)(CBasePlayer *pObserver)
|
||||
{
|
||||
int retVal;
|
||||
|
||||
@ -17,27 +19,20 @@ int GetForceCamera_api(CBasePlayer *pObserver)
|
||||
return retVal;
|
||||
}
|
||||
|
||||
int GetForceCamera(CBasePlayer *pObserver)
|
||||
{
|
||||
return g_ReGameHookchains.m_GetForceCamera.callChain(GetForceCamera_api, pObserver);
|
||||
}
|
||||
LINK_HOOK_CLASS_CHAIN(CBaseEntity *, CBasePlayer, Observer_IsValidTarget, (int iPlayerIndex, bool bSameTeam), iPlayerIndex, bSameTeam);
|
||||
|
||||
CBasePlayer *Observer_IsValidTarget_api(CBasePlayer *pPlayer, CBasePlayer *pEntity, int iPlayerIndex, bool bSameTeam)
|
||||
{
|
||||
// Don't spec observers or players who haven't picked a class yet
|
||||
if (!pEntity || pEntity == pPlayer || pEntity->has_disconnected || pEntity->IsObserver() || (pEntity->pev->effects & EF_NODRAW) || pEntity->m_iTeam == UNASSIGNED || (bSameTeam && pEntity->m_iTeam != pPlayer->m_iTeam))
|
||||
return NULL;
|
||||
|
||||
return pEntity;
|
||||
}
|
||||
|
||||
CBaseEntity *CBasePlayer::Observer_IsValidTarget(int iPlayerIndex, bool bSameTeam)
|
||||
CBaseEntity *CBasePlayer::__API_HOOK(Observer_IsValidTarget)(int iPlayerIndex, bool bSameTeam)
|
||||
{
|
||||
if (iPlayerIndex > gpGlobals->maxClients || iPlayerIndex < 1)
|
||||
return NULL;
|
||||
|
||||
CBasePlayer *pEnt = static_cast<CBasePlayer *>(UTIL_PlayerByIndex(iPlayerIndex));
|
||||
return g_ReGameHookchains.m_Observer_IsValidTarget.callChain(Observer_IsValidTarget_api, this, pEnt, iPlayerIndex, bSameTeam);
|
||||
CBasePlayer *pPlayer = static_cast<CBasePlayer *>(UTIL_PlayerByIndex(iPlayerIndex));
|
||||
|
||||
// Don't spec observers or players who haven't picked a class yet
|
||||
if (!pPlayer || pPlayer == this || pPlayer->has_disconnected || pPlayer->IsObserver() || (pPlayer->pev->effects & EF_NODRAW) || pPlayer->m_iTeam == UNASSIGNED || (bSameTeam && pPlayer->m_iTeam != m_iTeam))
|
||||
return NULL;
|
||||
|
||||
return pPlayer;
|
||||
}
|
||||
|
||||
void UpdateClientEffects(CBasePlayer *pObserver, int oldMode)
|
||||
|
@ -37,6 +37,7 @@
|
||||
#define CAMERA_MODE_SPEC_ONLY_FRIST_PERSON 2
|
||||
|
||||
int GetForceCamera(CBasePlayer *pObserver);
|
||||
int GetForceCamera_(CBasePlayer *pObserver);
|
||||
void UpdateClientEffects(CBasePlayer *pObserver, int oldMode);
|
||||
|
||||
#endif // OBSERVER_H
|
||||
|
@ -21,7 +21,7 @@ TYPEDESCRIPTION CPathTrack::m_SaveData[] =
|
||||
|
||||
#endif
|
||||
|
||||
LINK_ENTITY_TO_CLASS(path_corner, CPathCorner);
|
||||
LINK_ENTITY_TO_CLASS(path_corner, CPathCorner, CCSPathCorner);
|
||||
IMPLEMENT_SAVERESTORE(CPathCorner, CPointEntity);
|
||||
|
||||
void CPathCorner::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -41,7 +41,7 @@ void CPathCorner::__MAKE_VHOOK(Spawn)()
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CPathTrack, CBaseEntity);
|
||||
LINK_ENTITY_TO_CLASS(path_track, CPathTrack);
|
||||
LINK_ENTITY_TO_CLASS(path_track, CPathTrack, CCSPathTrack);
|
||||
|
||||
void CPathTrack::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
|
@ -232,7 +232,7 @@ void CFuncPlat::CallHitBottom()
|
||||
HitBottom();
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_plat, CFuncPlat);
|
||||
LINK_ENTITY_TO_CLASS(func_plat, CFuncPlat, CCSFuncPlat);
|
||||
|
||||
#define noiseMovement noise
|
||||
#define noiseStopMoving noise1
|
||||
@ -325,7 +325,7 @@ void CFuncPlat::__MAKE_VHOOK(Spawn)()
|
||||
|
||||
void PlatSpawnInsideTrigger(entvars_t *pevPlatform)
|
||||
{
|
||||
GetClassPtr((CPlatTrigger *)NULL)->SpawnInsideTrigger(GetClassPtr((CFuncPlat *)pevPlatform));
|
||||
GetClassPtr<CCSPlatTrigger>((CPlatTrigger *)NULL)->SpawnInsideTrigger(GetClassPtr<CCSFuncPlat>((CFuncPlat *)pevPlatform));
|
||||
}
|
||||
|
||||
// Create a trigger entity for a platform.
|
||||
@ -511,7 +511,7 @@ void CFuncPlat::__MAKE_VHOOK(Blocked)(CBaseEntity *pOther)
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_platrot, CFuncPlatRot);
|
||||
LINK_ENTITY_TO_CLASS(func_platrot, CFuncPlatRot, CCSFuncPlatRot);
|
||||
IMPLEMENT_SAVERESTORE(CFuncPlatRot, CFuncPlat);
|
||||
|
||||
void CFuncPlatRot::SetupRotation()
|
||||
@ -588,7 +588,7 @@ void CFuncPlatRot::RotMove(Vector &destAngle, float time)
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_train, CFuncTrain);
|
||||
LINK_ENTITY_TO_CLASS(func_train, CFuncTrain, CCSFuncTrain);
|
||||
IMPLEMENT_SAVERESTORE(CFuncTrain, CBasePlatTrain);
|
||||
|
||||
void CFuncTrain::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -885,7 +885,7 @@ void CFuncTrain::__MAKE_VHOOK(OverrideReset)()
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CFuncTrackTrain, CBaseEntity);
|
||||
LINK_ENTITY_TO_CLASS(func_tracktrain, CFuncTrackTrain);
|
||||
LINK_ENTITY_TO_CLASS(func_tracktrain, CFuncTrackTrain, CCSFuncTrackTrain);
|
||||
|
||||
void CFuncTrackTrain::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -1546,7 +1546,7 @@ void CFuncTrackTrain::__MAKE_VHOOK(Precache)()
|
||||
m_usAdjustPitch = PRECACHE_EVENT(1, "events/train.sc");
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_traincontrols, CFuncTrainControls);
|
||||
LINK_ENTITY_TO_CLASS(func_traincontrols, CFuncTrainControls, CCSFuncTrainControls);
|
||||
|
||||
void CFuncTrainControls::Find()
|
||||
{
|
||||
@ -1587,7 +1587,7 @@ BOOL CFuncTrackChange::__MAKE_VHOOK(IsTogglePlat)()
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_trackchange, CFuncTrackChange);
|
||||
LINK_ENTITY_TO_CLASS(func_trackchange, CFuncTrackChange, CCSFuncTrackChange);
|
||||
IMPLEMENT_SAVERESTORE(CFuncTrackChange, CFuncPlatRot);
|
||||
|
||||
void CFuncTrackChange::__MAKE_VHOOK(Spawn)()
|
||||
@ -1924,7 +1924,7 @@ void CFuncTrackChange::__MAKE_VHOOK(HitTop)()
|
||||
EnableUse();
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_trackautochange, CFuncTrackAuto);
|
||||
LINK_ENTITY_TO_CLASS(func_trackautochange, CFuncTrackAuto, CCSFuncTrackAuto);
|
||||
|
||||
// Auto track change
|
||||
void CFuncTrackAuto::__MAKE_VHOOK(UpdateAutoTargets)(int toggleState)
|
||||
@ -2015,7 +2015,7 @@ void CFuncTrackAuto::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCa
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_guntarget, CGunTarget);
|
||||
LINK_ENTITY_TO_CLASS(func_guntarget, CGunTarget, CCSGunTarget);
|
||||
IMPLEMENT_SAVERESTORE(CGunTarget, CBaseMonster);
|
||||
|
||||
void CGunTarget::__MAKE_VHOOK(Spawn)()
|
||||
|
@ -234,8 +234,8 @@ public:
|
||||
virtual void EXPORT GoUp();
|
||||
virtual void EXPORT GoDown();
|
||||
|
||||
virtual void HitBottom();
|
||||
virtual void HitTop();
|
||||
virtual void HitBottom();
|
||||
virtual void UpdateAutoTargets(int toggleState);
|
||||
|
||||
#ifdef HOOK_GAMEDLL
|
||||
|
@ -140,46 +140,6 @@ TYPEDESCRIPTION CBasePlayer::m_playerSaveData[] =
|
||||
DEFINE_FIELD(CBasePlayer, m_iJoiningState, FIELD_INTEGER),
|
||||
};
|
||||
|
||||
WeaponStruct g_weaponStruct[ MAX_WEAPONS ] =
|
||||
{
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
|
||||
{ WEAPON_P228, P228_PRICE, TERRORIST|CT, AUTOBUYCLASS_SECONDARY, AMMO_357SIG_PRICE },
|
||||
{ WEAPON_SCOUT, SCOUT_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_762MM_PRICE },
|
||||
{ WEAPON_XM1014, XM1014_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_BUCKSHOT_PRICE },
|
||||
{ WEAPON_MAC10, MAC10_PRICE, CT, AUTOBUYCLASS_PRIMARY, AMMO_45ACP_PRICE },
|
||||
{ WEAPON_AUG, AUG_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_ELITE, ELITE_PRICE, CT, AUTOBUYCLASS_SECONDARY, AMMO_9MM_PRICE },
|
||||
{ WEAPON_FIVESEVEN, FIVESEVEN_PRICE, TERRORIST|CT, AUTOBUYCLASS_SECONDARY, AMMO_57MM_PRICE },
|
||||
{ WEAPON_UMP45, UMP45_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_45ACP_PRICE },
|
||||
{ WEAPON_SG550, SG550_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_USP, USP_PRICE, TERRORIST|CT, AUTOBUYCLASS_SECONDARY, AMMO_45ACP_PRICE },
|
||||
{ WEAPON_GLOCK18, GLOCK18_PRICE, TERRORIST|CT, AUTOBUYCLASS_SECONDARY, AMMO_9MM_PRICE },
|
||||
{ WEAPON_MP5N, MP5NAVY_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_9MM_PRICE },
|
||||
{ WEAPON_AWP, AWP_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_338MAG_PRICE },
|
||||
{ WEAPON_M249, M249_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_M3, M3_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_BUCKSHOT_PRICE },
|
||||
{ WEAPON_M4A1, M4A1_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_TMP, TMP_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_9MM_PRICE },
|
||||
{ WEAPON_G3SG1, G3SG1_PRICE, CT, AUTOBUYCLASS_PRIMARY, AMMO_762MM_PRICE },
|
||||
{ WEAPON_DEAGLE, DEAGLE_PRICE, TERRORIST|CT, AUTOBUYCLASS_SECONDARY, AMMO_50AE_PRICE },
|
||||
{ WEAPON_SG552, SG552_PRICE, CT, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_AK47, AK47_PRICE, CT, AUTOBUYCLASS_PRIMARY, AMMO_762MM_PRICE },
|
||||
{ WEAPON_P90, P90_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_57MM_PRICE },
|
||||
{ WEAPON_FAMAS, FAMAS_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_GALIL, GALIL_PRICE, CT, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
// TODO: this have bug, the cost of galil $2000, but not $2250
|
||||
|
||||
{ WEAPON_SHIELDGUN, SHIELDGUN_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, 0 },
|
||||
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
char *CDeadHEV::m_szPoses[] =
|
||||
{
|
||||
"deadback",
|
||||
@ -323,7 +283,7 @@ void WriteSigonMessages()
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(player, CBasePlayer);
|
||||
LINK_ENTITY_TO_CLASS(player, CBasePlayer, CCSPlayer);
|
||||
|
||||
void SendItemStatus(CBasePlayer *pPlayer)
|
||||
{
|
||||
@ -481,7 +441,7 @@ CBasePlayer *CBasePlayer::GetNextRadioRecipient(CBasePlayer *pStartPlayer)
|
||||
break;
|
||||
|
||||
bool bSend = false;
|
||||
CBasePlayer *pPlayer = GetClassPtr((CBasePlayer *)pEntity->pev);
|
||||
CBasePlayer *pPlayer = GetClassPtr<CCSPlayer>((CBasePlayer *)pEntity->pev);
|
||||
|
||||
if (pEntity->IsPlayer())
|
||||
{
|
||||
@ -535,7 +495,7 @@ void CBasePlayer::Radio(const char *msg_id, const char *msg_verbose, short pitch
|
||||
break;
|
||||
|
||||
bool bSend = false;
|
||||
CBasePlayer *pPlayer = GetClassPtr((CBasePlayer *)pEntity->pev);
|
||||
CBasePlayer *pPlayer = GetClassPtr<CCSPlayer>((CBasePlayer *)pEntity->pev);
|
||||
|
||||
if (pPlayer == NULL)
|
||||
continue;
|
||||
@ -716,9 +676,11 @@ void CBasePlayer::DeathSound()
|
||||
}
|
||||
}
|
||||
|
||||
LINK_HOOK_CLASS_CHAIN(int, CBasePlayer, TakeHealth, (float flHealth, int bitsDamageType), flHealth, bitsDamageType);
|
||||
|
||||
// override takehealth
|
||||
// bitsDamageType indicates type of damage healed.
|
||||
int CBasePlayer::__MAKE_VHOOK(TakeHealth)(float flHealth, int bitsDamageType)
|
||||
int CBasePlayer::__API_VHOOK(TakeHealth)(float flHealth, int bitsDamageType)
|
||||
{
|
||||
return CBaseMonster::TakeHealth(flHealth, bitsDamageType);
|
||||
}
|
||||
@ -742,7 +704,9 @@ bool CBasePlayer::IsHittingShield(Vector &vecDirection, TraceResult *ptr)
|
||||
return false;
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(TraceAttack)(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType)
|
||||
LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, TraceAttack, (entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType), pevAttacker, flDamage, vecDir, ptr, bitsDamageType);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(TraceAttack)(entvars_t *pevAttacker, float flDamage, VectorRef vecDir, TraceResult *ptr, int bitsDamageType)
|
||||
{
|
||||
bool bShouldBleed = true;
|
||||
bool bShouldSpark = false;
|
||||
@ -946,11 +910,13 @@ void LogAttack(CBasePlayer *pAttacker, CBasePlayer *pVictim, int teamAttack, int
|
||||
}
|
||||
}
|
||||
|
||||
LINK_HOOK_CLASS_CHAIN(int, CBasePlayer, TakeDamage, (entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType), pevInflictor, pevAttacker, flDamage, bitsDamageType);
|
||||
|
||||
// Take some damage.
|
||||
// NOTE: each call to TakeDamage with bitsDamageType set to a time-based damage
|
||||
// type will cause the damage time countdown to be reset. Thus the ongoing effects of poison, radiation
|
||||
// etc are implemented with subsequent calls to TakeDamage using DMG_GENERIC.
|
||||
int CBasePlayer::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType)
|
||||
int CBasePlayer::__API_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType)
|
||||
{
|
||||
int fTookDamage;
|
||||
float flRatio = ARMOR_RATIO;
|
||||
@ -981,20 +947,15 @@ int CBasePlayer::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *pe
|
||||
|
||||
if (bitsDamageType & DMG_EXPLOSION)
|
||||
{
|
||||
CBaseEntity *temp = GetClassPtr((CBaseEntity *)pevInflictor);
|
||||
CBaseEntity *temp = GetClassPtr<CCSEntity>((CBaseEntity *)pevInflictor);
|
||||
|
||||
if (!Q_strcmp(STRING(temp->pev->classname), "grenade"))
|
||||
{
|
||||
CGrenade *pGrenade = GetClassPtr((CGrenade *)pevInflictor);
|
||||
CGrenade *pGrenade = GetClassPtr<CCSGrenade>((CGrenade *)pevInflictor);
|
||||
|
||||
if (CVAR_GET_FLOAT("mp_friendlyfire"))
|
||||
{
|
||||
#ifdef REGAMEDLL_ADD
|
||||
if (friendlyfire.string[0] == '2')
|
||||
bTeamAttack = FALSE;
|
||||
else
|
||||
#endif
|
||||
if (pGrenade->m_iTeam == m_iTeam)
|
||||
if (!CSGameRules()->IsFriendlyFireAttack() && pGrenade->m_iTeam == m_iTeam)
|
||||
bTeamAttack = TRUE;
|
||||
|
||||
pAttack = dynamic_cast<CBasePlayer *>(CBasePlayer::Instance(pevAttacker));
|
||||
@ -1146,17 +1107,13 @@ int CBasePlayer::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *pe
|
||||
if (!IsAlive())
|
||||
return 0;
|
||||
|
||||
pAttacker = GetClassPtr((CBaseEntity *)pevAttacker);
|
||||
pAttacker = GetClassPtr<CCSEntity>((CBaseEntity *)pevAttacker);
|
||||
|
||||
if (pAttacker->IsPlayer())
|
||||
{
|
||||
pAttack = GetClassPtr((CBasePlayer *)pevAttacker);
|
||||
pAttack = GetClassPtr<CCSPlayer>((CBasePlayer *)pevAttacker);
|
||||
|
||||
bool bAttackFFA = false;
|
||||
#ifdef REGAMEDLL_ADD
|
||||
if (friendlyfire.string[0] == '2')
|
||||
bAttackFFA = true;
|
||||
#endif
|
||||
bool bAttackFFA = CSGameRules()->IsFriendlyFireAttack();
|
||||
|
||||
// warn about team attacks
|
||||
if (pAttack != this && pAttack->m_iTeam == m_iTeam && !bAttackFFA)
|
||||
@ -1185,7 +1142,7 @@ int CBasePlayer::__MAKE_VHOOK(TakeDamage)(entvars_t *pevInflictor, entvars_t *pe
|
||||
if (FNullEnt(pBasePlayer->edict()))
|
||||
break;
|
||||
|
||||
CBasePlayer *basePlayer = GetClassPtr((CBasePlayer *)pBasePlayer->pev);
|
||||
CBasePlayer *basePlayer = GetClassPtr<CCSPlayer>((CBasePlayer *)pBasePlayer->pev);
|
||||
|
||||
if (basePlayer->m_iTeam == m_iTeam)
|
||||
{
|
||||
@ -1386,17 +1343,20 @@ void packPlayerItem(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
|
||||
const char *modelName = GetCSModelName(pItem->m_iId);
|
||||
if (modelName != NULL)
|
||||
{
|
||||
// create a box to pack the stuff into.
|
||||
CWeaponBox *pWeaponBox = (CWeaponBox *)CBaseEntity::Create("weaponbox", pPlayer->pev->origin, pPlayer->pev->angles, ENT(pPlayer->pev));
|
||||
|
||||
// don't let weaponbox tilt.
|
||||
pWeaponBox->pev->angles.x = 0;
|
||||
pWeaponBox->pev->angles.z = 0;
|
||||
|
||||
pWeaponBox->pev->velocity = pPlayer->pev->velocity * 0.75;
|
||||
pWeaponBox->pev->velocity = pPlayer->pev->velocity * 0.75f;
|
||||
|
||||
pWeaponBox->SetThink(&CWeaponBox::Kill);
|
||||
pWeaponBox->pev->nextthink = gpGlobals->time + 300.0f;
|
||||
pWeaponBox->PackWeapon(pItem);
|
||||
pWeaponBox->PackWeapon(pItem); // now pack all of the items in the lists
|
||||
|
||||
// pack the ammo
|
||||
if (packAmmo)
|
||||
{
|
||||
pWeaponBox->PackAmmo(MAKE_STRING(IMPL_CLASS(CBasePlayerItem, ItemInfoArray)[pItem->m_iId].pszAmmo1), pPlayer->m_rgAmmo[pItem->PrimaryAmmoIndex()]);
|
||||
@ -1405,8 +1365,64 @@ void packPlayerItem(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef REGAMEDLL_ADD
|
||||
void packPlayerNade(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
|
||||
{
|
||||
if (pItem == NULL)
|
||||
return;
|
||||
|
||||
const char *modelName = GetCSModelName(pItem->m_iId);
|
||||
if (modelName != NULL)
|
||||
{
|
||||
float flOffset = 0.0f;
|
||||
switch (pItem->m_iId)
|
||||
{
|
||||
case WEAPON_HEGRENADE:
|
||||
flOffset = 14.0f;
|
||||
break;
|
||||
case WEAPON_FLASHBANG:
|
||||
flOffset = 0.0f;
|
||||
break;
|
||||
case WEAPON_SMOKEGRENADE:
|
||||
flOffset = -14.0f;
|
||||
break;
|
||||
}
|
||||
|
||||
Vector vecAngles = pPlayer->pev->angles;
|
||||
Vector dir(Q_cos(vecAngles.y) * flOffset, Q_sin(vecAngles.y) * flOffset, 0.0f);
|
||||
|
||||
vecAngles.x = 0.0f;
|
||||
vecAngles.y += 45.0f;
|
||||
|
||||
// create a box to pack the stuff into.
|
||||
CWeaponBox *pWeaponBox = (CWeaponBox *)CBaseEntity::Create("weaponbox", pPlayer->pev->origin + dir, vecAngles, ENT(pPlayer->pev));
|
||||
|
||||
// don't let weaponbox tilt.
|
||||
pWeaponBox->pev->angles.x = 0;
|
||||
pWeaponBox->pev->angles.z = 0;
|
||||
|
||||
pWeaponBox->pev->velocity = pPlayer->pev->velocity * 0.75f;
|
||||
|
||||
pWeaponBox->SetThink(&CWeaponBox::Kill);
|
||||
pWeaponBox->pev->nextthink = gpGlobals->time + 300.0f;
|
||||
pWeaponBox->PackWeapon(pItem); // now pack all of the items in the lists
|
||||
|
||||
// pack the ammo
|
||||
if (packAmmo)
|
||||
{
|
||||
pWeaponBox->PackAmmo(MAKE_STRING(IMPL_CLASS(CBasePlayerItem, ItemInfoArray)[pItem->m_iId].pszAmmo1), pPlayer->m_rgAmmo[pItem->PrimaryAmmoIndex()]);
|
||||
}
|
||||
SET_MODEL(ENT(pWeaponBox->pev), modelName);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// PackDeadPlayerItems - call this when a player dies to
|
||||
// pack up the appropriate weapons and ammo items, and to
|
||||
// destroy anything that shouldn't be packed.
|
||||
void CBasePlayer::PackDeadPlayerItems()
|
||||
{
|
||||
// get the game rules
|
||||
bool bPackGun = (g_pGameRules->DeadPlayerWeapons(this) != GR_PLR_DROP_GUN_NO);
|
||||
bool bPackAmmo = (g_pGameRules->DeadPlayerAmmo(this) != GR_PLR_DROP_AMMO_NO);
|
||||
|
||||
@ -1422,8 +1438,9 @@ void CBasePlayer::PackDeadPlayerItems()
|
||||
int nBestWeight = 0;
|
||||
CBasePlayerItem *pBestItem = NULL;
|
||||
|
||||
for (int n = 0; n < MAX_ITEM_TYPES; n++)
|
||||
for (int n = 0; n < MAX_ITEM_TYPES; ++n)
|
||||
{
|
||||
// there's a weapon here. Should I pack it?
|
||||
CBasePlayerItem *pPlayerItem = m_rgpPlayerItems[ n ];
|
||||
|
||||
while (pPlayerItem != NULL)
|
||||
@ -1441,19 +1458,43 @@ void CBasePlayer::PackDeadPlayerItems()
|
||||
}
|
||||
}
|
||||
// drop a grenade after death
|
||||
else if (pPlayerItem->iItemSlot() == GRENADE_SLOT && g_bIsCzeroGame)
|
||||
packPlayerItem(this, pPlayerItem, true);
|
||||
else if (pPlayerItem->iItemSlot() == GRENADE_SLOT)
|
||||
{
|
||||
if (g_bIsCzeroGame)
|
||||
packPlayerItem(this, pPlayerItem, true);
|
||||
#ifdef REGAMEDLL_ADD
|
||||
else
|
||||
{
|
||||
switch ((int)nadedrops.value)
|
||||
{
|
||||
case 1:
|
||||
packPlayerItem(this, pPlayerItem, true);
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
CBasePlayerItem *pNext = pPlayerItem->m_pNext;
|
||||
packPlayerNade(this, pPlayerItem, true);
|
||||
pPlayerItem = pNext;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
pPlayerItem = pPlayerItem->m_pNext;
|
||||
}
|
||||
}
|
||||
|
||||
packPlayerItem(this, pBestItem, bPackAmmo);
|
||||
}
|
||||
|
||||
RemoveAllItems(TRUE);
|
||||
}
|
||||
|
||||
void CBasePlayer::GiveDefaultItems()
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, GiveDefaultItems);
|
||||
|
||||
void CBasePlayer::__API_HOOK(GiveDefaultItems)()
|
||||
{
|
||||
RemoveAllItems(FALSE);
|
||||
m_bHasPrimary = false;
|
||||
@ -1605,7 +1646,7 @@ void CBasePlayer::SetProgressBarTime(int time)
|
||||
if (FNullEnt(pPlayer->edict()))
|
||||
break;
|
||||
|
||||
CBasePlayer *player = GetClassPtr((CBasePlayer *)pPlayer->pev);
|
||||
CBasePlayer *player = GetClassPtr<CCSPlayer>((CBasePlayer *)pPlayer->pev);
|
||||
|
||||
if (player->IsObserver() == OBS_IN_EYE && player->pev->iuser2 == myIndex)
|
||||
{
|
||||
@ -1645,7 +1686,7 @@ void CBasePlayer::SetProgressBarTime2(int time, float timeElapsed)
|
||||
if (FNullEnt(pPlayer->edict()))
|
||||
break;
|
||||
|
||||
CBasePlayer *player = GetClassPtr((CBasePlayer *)pPlayer->pev);
|
||||
CBasePlayer *player = GetClassPtr<CCSPlayer>((CBasePlayer *)pPlayer->pev);
|
||||
|
||||
if (player->IsObserver() == OBS_IN_EYE && player->pev->iuser2 == myIndex)
|
||||
{
|
||||
@ -1840,7 +1881,9 @@ void CBasePlayer::SendFOV(int fov)
|
||||
MESSAGE_END();
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(Killed)(entvars_t *pevAttacker, int iGib)
|
||||
LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, Killed, (entvars_t *pevAttacker, int iGib), pevAttacker, iGib);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(Killed)(entvars_t *pevAttacker, int iGib)
|
||||
{
|
||||
m_canSwitchObserverModes = false;
|
||||
|
||||
@ -1937,13 +1980,14 @@ void CBasePlayer::__MAKE_VHOOK(Killed)(entvars_t *pevAttacker, int iGib)
|
||||
m_pTank = NULL;
|
||||
}
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
CSound *pSound = CSoundEnt::SoundPointerForIndex(CSoundEnt::ClientSoundIndex(edict()));
|
||||
|
||||
if (pSound != NULL)
|
||||
{
|
||||
pSound->Reset();
|
||||
}
|
||||
|
||||
#endif
|
||||
SetAnimation(PLAYER_DIE);
|
||||
|
||||
if (m_pActiveItem != NULL && m_pActiveItem->m_pPlayer != NULL)
|
||||
@ -2153,7 +2197,9 @@ BOOL CBasePlayer::IsBombGuy()
|
||||
return m_bHasC4;
|
||||
}
|
||||
|
||||
void CBasePlayer::SetAnimation(PLAYER_ANIM playerAnim)
|
||||
LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, SetAnimation, (PLAYER_ANIM playerAnim), playerAnim);
|
||||
|
||||
void CBasePlayer::__API_HOOK(SetAnimation)(PLAYER_ANIM playerAnim)
|
||||
{
|
||||
int animDesired;
|
||||
float speed;
|
||||
@ -2858,7 +2904,7 @@ NOXREF void CBasePlayer::ThrowWeapon(char *pszItemName)
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_shield, CWShield);
|
||||
LINK_ENTITY_TO_CLASS(weapon_shield, CWShield, CCSShield);
|
||||
|
||||
void CWShield::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -2910,7 +2956,9 @@ void CWShield::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
||||
}
|
||||
}
|
||||
|
||||
void CBasePlayer::GiveShield(bool bDeploy)
|
||||
LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, GiveShield, (bool bDeploy), bDeploy);
|
||||
|
||||
void CBasePlayer::__API_HOOK(GiveShield)(bool bDeploy)
|
||||
{
|
||||
m_bOwnsShield = true;
|
||||
m_bHasPrimary = true;
|
||||
@ -3023,7 +3071,9 @@ NOXREF void CBasePlayer::ThrowPrimary()
|
||||
DropShield();
|
||||
}
|
||||
|
||||
void CBasePlayer::AddAccount(int amount, bool bTrackChange)
|
||||
LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, AddAccount, (int amount, bool bTrackChange), amount, bTrackChange);
|
||||
|
||||
void CBasePlayer::__API_HOOK(AddAccount)(int amount, bool bTrackChange)
|
||||
{
|
||||
m_iAccount += amount;
|
||||
|
||||
@ -3285,21 +3335,7 @@ void CBasePlayer::JoiningThink()
|
||||
|
||||
MESSAGE_BEGIN(MSG_ALL, gmsgTeamInfo);
|
||||
WRITE_BYTE(entindex());
|
||||
switch (m_iTeam)
|
||||
{
|
||||
case CT:
|
||||
WRITE_STRING("CT");
|
||||
break;
|
||||
case TERRORIST:
|
||||
WRITE_STRING("TERRORIST");
|
||||
break;
|
||||
case SPECTATOR:
|
||||
WRITE_STRING("SPECTATOR");
|
||||
break;
|
||||
default:
|
||||
WRITE_STRING("UNASSIGNED");
|
||||
break;
|
||||
}
|
||||
WRITE_STRING(GetTeamName(m_iTeam));
|
||||
MESSAGE_END();
|
||||
|
||||
MESSAGE_BEGIN(MSG_ALL, gmsgLocation);
|
||||
@ -3366,12 +3402,14 @@ void CBasePlayer::Disappear()
|
||||
m_pTank = NULL;
|
||||
}
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
CSound *pSound = CSoundEnt::SoundPointerForIndex(CSoundEnt::ClientSoundIndex(edict()));
|
||||
|
||||
if (pSound)
|
||||
{
|
||||
pSound->Reset();
|
||||
}
|
||||
#endif
|
||||
|
||||
m_fSequenceFinished = TRUE;
|
||||
pev->modelindex = m_modelIndexPlayer;
|
||||
@ -3517,7 +3555,9 @@ void CBasePlayer::PlayerDeathThink()
|
||||
}
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(RoundRespawn)()
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, RoundRespawn);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(RoundRespawn)()
|
||||
{
|
||||
m_canSwitchObserverModes = true;
|
||||
|
||||
@ -3861,7 +3901,9 @@ void CBasePlayer::HostageUsed()
|
||||
m_flDisplayHistory |= DHF_HOSTAGE_USED;
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(Jump)()
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, Jump);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(Jump)()
|
||||
{
|
||||
if (pev->flags & FL_WATERJUMP)
|
||||
return;
|
||||
@ -3931,19 +3973,32 @@ NOXREF void FixPlayerCrouchStuck(edict_t *pPlayer)
|
||||
}
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(Duck)()
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, Duck);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(Duck)()
|
||||
{
|
||||
if (pev->button & IN_DUCK)
|
||||
SetAnimation(PLAYER_WALK);
|
||||
}
|
||||
|
||||
LINK_HOOK_CLASS_CHAIN2(int, CBasePlayer, ObjectCaps);
|
||||
|
||||
int CBasePlayer::__API_VHOOK(ObjectCaps)()
|
||||
{
|
||||
return (CBaseMonster::ObjectCaps() & ~FCAP_ACROSS_TRANSITION);
|
||||
}
|
||||
|
||||
LINK_HOOK_CLASS_CHAIN2(int, CBasePlayer, Classify);
|
||||
|
||||
// ID's player as such.
|
||||
int CBasePlayer::__MAKE_VHOOK(Classify)()
|
||||
int CBasePlayer::__API_VHOOK(Classify)()
|
||||
{
|
||||
return CLASS_PLAYER;
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(AddPoints)(int score, BOOL bAllowNegativeScore)
|
||||
LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, AddPoints, (int score, BOOL bAllowNegativeScore), score, bAllowNegativeScore);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(AddPoints)(int score, BOOL bAllowNegativeScore)
|
||||
{
|
||||
// Positive score always adds
|
||||
if (score < 0 && !bAllowNegativeScore)
|
||||
@ -3970,7 +4025,9 @@ void CBasePlayer::__MAKE_VHOOK(AddPoints)(int score, BOOL bAllowNegativeScore)
|
||||
MESSAGE_END();
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(AddPointsToTeam)(int score, BOOL bAllowNegativeScore)
|
||||
LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, AddPointsToTeam, (int score, BOOL bAllowNegativeScore), score, bAllowNegativeScore);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(AddPointsToTeam)(int score, BOOL bAllowNegativeScore)
|
||||
{
|
||||
int index = entindex();
|
||||
|
||||
@ -4058,7 +4115,9 @@ bool CBasePlayer::CanPlayerBuy(bool display)
|
||||
return true;
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(PreThink)()
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, PreThink);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(PreThink)()
|
||||
{
|
||||
// These buttons have changed this frame
|
||||
int buttonsChanged = (m_afButtonLast ^ pev->button);
|
||||
@ -4529,9 +4588,8 @@ void CBasePlayer::UpdatePlayerSound()
|
||||
{
|
||||
int iBodyVolume;
|
||||
int iVolume;
|
||||
CSound *pSound;
|
||||
|
||||
pSound = CSoundEnt::SoundPointerForIndex(CSoundEnt::ClientSoundIndex(edict()));
|
||||
CSound *pSound = CSoundEnt::SoundPointerForIndex(CSoundEnt::ClientSoundIndex(edict()));
|
||||
|
||||
if (!pSound)
|
||||
{
|
||||
@ -4633,7 +4691,9 @@ void CBasePlayer::UpdatePlayerSound()
|
||||
gpGlobals->v_forward.z = 0;
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(PostThink)()
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, PostThink);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(PostThink)()
|
||||
{
|
||||
// intermission or finale
|
||||
if (g_fGameOver)
|
||||
@ -4703,10 +4763,12 @@ void CBasePlayer::__MAKE_VHOOK(PostThink)()
|
||||
|
||||
if (pev->flags & FL_ONGROUND)
|
||||
{
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
if (m_flFallVelocity > 64.0f && !g_pGameRules->IsMultiplayer())
|
||||
{
|
||||
CSoundEnt::InsertSound(bits_SOUND_PLAYER, pev->origin, m_flFallVelocity, 0.2);
|
||||
}
|
||||
#endif
|
||||
m_flFallVelocity = 0;
|
||||
}
|
||||
|
||||
@ -4724,7 +4786,11 @@ void CBasePlayer::__MAKE_VHOOK(PostThink)()
|
||||
|
||||
StudioFrameAdvance();
|
||||
CheckPowerups();
|
||||
|
||||
// s1lent: this is useless for CS 1.6
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
UpdatePlayerSound();
|
||||
#endif
|
||||
|
||||
pt_end:
|
||||
#ifdef CLIENT_WEAPONS
|
||||
@ -4973,7 +5039,9 @@ void SetScoreAttrib(CBasePlayer *dest, CBasePlayer *src)
|
||||
}
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(Spawn)()
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, Spawn);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(Spawn)()
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -5258,21 +5326,7 @@ void CBasePlayer::__MAKE_VHOOK(Spawn)()
|
||||
|
||||
MESSAGE_BEGIN(MSG_ALL, gmsgTeamInfo);
|
||||
WRITE_BYTE(entindex());
|
||||
switch (m_iTeam)
|
||||
{
|
||||
case CT:
|
||||
WRITE_STRING("CT");
|
||||
break;
|
||||
case TERRORIST:
|
||||
WRITE_STRING("TERRORIST");
|
||||
break;
|
||||
case SPECTATOR:
|
||||
WRITE_STRING("SPECTATOR");
|
||||
break;
|
||||
default:
|
||||
WRITE_STRING("UNASSIGNED");
|
||||
break;
|
||||
}
|
||||
WRITE_STRING(GetTeamName(m_iTeam));
|
||||
MESSAGE_END();
|
||||
|
||||
UpdateLocation(true);
|
||||
@ -5314,8 +5368,11 @@ void CBasePlayer::__MAKE_VHOOK(Spawn)()
|
||||
m_flLastCommandTime[i] = -1;
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(Precache)()
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, Precache);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(Precache)()
|
||||
{
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
// in the event that the player JUST spawned, and the level node graph
|
||||
// was loaded, fix all of the node graph pointers before the game starts.
|
||||
|
||||
@ -5331,7 +5388,7 @@ void CBasePlayer::__MAKE_VHOOK(Precache)()
|
||||
ALERT(at_console, "**Graph Pointers Set!\n");
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
// SOUNDS / MODELS ARE PRECACHED in ClientPrecache() (game specific)
|
||||
// because they need to precache before any clients have connected
|
||||
|
||||
@ -5654,7 +5711,7 @@ void CSprayCan::Spawn(entvars_t *pevOwner)
|
||||
pev->owner = ENT(pevOwner);
|
||||
pev->frame = 0;
|
||||
|
||||
pev->nextthink = gpGlobals->time + 0.1;
|
||||
pev->nextthink = gpGlobals->time + 0.1f;
|
||||
EMIT_SOUND(ENT(pev), CHAN_VOICE, "player/sprayer.wav", VOL_NORM, ATTN_NORM);
|
||||
}
|
||||
|
||||
@ -5692,7 +5749,7 @@ void CSprayCan::__MAKE_VHOOK(Think)()
|
||||
UTIL_Remove(this);
|
||||
}
|
||||
|
||||
pev->nextthink = gpGlobals->time + 0.1;
|
||||
pev->nextthink = gpGlobals->time + 0.1f;
|
||||
}
|
||||
|
||||
void CBloodSplat::Spawn(entvars_t *pevOwner)
|
||||
@ -5702,7 +5759,7 @@ void CBloodSplat::Spawn(entvars_t *pevOwner)
|
||||
pev->owner = ENT(pevOwner);
|
||||
|
||||
SetThink(&CBloodSplat::Spray);
|
||||
pev->nextthink = gpGlobals->time + 0.1;
|
||||
pev->nextthink = gpGlobals->time + 0.1f;
|
||||
}
|
||||
|
||||
void CBloodSplat::Spray()
|
||||
@ -5716,10 +5773,12 @@ void CBloodSplat::Spray()
|
||||
}
|
||||
|
||||
SetThink(&CBloodSplat::SUB_Remove);
|
||||
pev->nextthink = gpGlobals->time + 0.1;
|
||||
pev->nextthink = gpGlobals->time + 0.1f;
|
||||
}
|
||||
|
||||
void CBasePlayer::GiveNamedItem(const char *pszName)
|
||||
LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, GiveNamedItem, (const char *pszName), pszName);
|
||||
|
||||
void CBasePlayer::__API_HOOK(GiveNamedItem)(const char *pszName)
|
||||
{
|
||||
string_t istr = MAKE_STRING(pszName);
|
||||
edict_t *pent = CREATE_NAMED_ENTITY(istr);
|
||||
@ -5803,7 +5862,9 @@ void CBasePlayer::ForceClientDllUpdate()
|
||||
HandleSignals();
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(ImpulseCommands)()
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, ImpulseCommands);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(ImpulseCommands)()
|
||||
{
|
||||
TraceResult tr;
|
||||
|
||||
@ -5863,7 +5924,7 @@ void CBasePlayer::__MAKE_VHOOK(ImpulseCommands)()
|
||||
{
|
||||
// line hit something, so paint a decal
|
||||
m_flNextDecalTime = gpGlobals->time + CVAR_GET_FLOAT("decalfrequency");
|
||||
CSprayCan *pCan = GetClassPtr((CSprayCan *)NULL);
|
||||
CSprayCan *pCan = GetClassPtr<CCSSprayCan>((CSprayCan *)NULL);
|
||||
pCan->Spawn(pev);
|
||||
}
|
||||
break;
|
||||
@ -5991,11 +6052,13 @@ void CBasePlayer::CheatImpulseCommands(int iImpulse)
|
||||
// show shortest paths for entire level to nearest node
|
||||
Create("node_viewer_human", pev->origin, pev->angles);
|
||||
break;
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
case 199:
|
||||
// show nearest node and all connections
|
||||
ALERT(at_console, "%d\n", WorldGraph.FindNearestNode(pev->origin, bits_NODE_LAND));
|
||||
WorldGraph.ShowNodeConnections(WorldGraph.FindNearestNode(pev->origin, bits_NODE_LAND));
|
||||
break;
|
||||
#endif
|
||||
case 202:
|
||||
{
|
||||
// Random blood splatter
|
||||
@ -6005,7 +6068,7 @@ void CBasePlayer::CheatImpulseCommands(int iImpulse)
|
||||
if (tr.flFraction != 1.0f)
|
||||
{
|
||||
// line hit something, so paint a decal
|
||||
CBloodSplat *pBlood = GetClassPtr((CBloodSplat *)NULL);
|
||||
CBloodSplat *pBlood = GetClassPtr<CCSBloodSplat>((CBloodSplat *)NULL);
|
||||
pBlood->Spawn(pev);
|
||||
}
|
||||
break;
|
||||
@ -6024,7 +6087,7 @@ void CBasePlayer::CheatImpulseCommands(int iImpulse)
|
||||
case 204:
|
||||
{
|
||||
TraceResult tr;
|
||||
Vector dir = Vector(0, 0, 1);
|
||||
Vector dir(0, 0, 1);
|
||||
|
||||
UTIL_BloodDrips(pev->origin, dir, BLOOD_COLOR_RED, 2000);
|
||||
|
||||
@ -6151,8 +6214,10 @@ void CBasePlayer::HandleSignals()
|
||||
}
|
||||
}
|
||||
|
||||
LINK_HOOK_CLASS_CHAIN(BOOL, CBasePlayer, AddPlayerItem, (CBasePlayerItem *pItem), pItem);
|
||||
|
||||
// Add a weapon to the player (Item == Weapon == Selectable Object)
|
||||
BOOL CBasePlayer::__MAKE_VHOOK(AddPlayerItem)(CBasePlayerItem *pItem)
|
||||
BOOL CBasePlayer::__API_VHOOK(AddPlayerItem)(CBasePlayerItem *pItem)
|
||||
{
|
||||
CBasePlayerItem *pInsert = m_rgpPlayerItems[ pItem->iItemSlot() ];
|
||||
while (pInsert != NULL)
|
||||
@ -6214,7 +6279,9 @@ BOOL CBasePlayer::__MAKE_VHOOK(AddPlayerItem)(CBasePlayerItem *pItem)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CBasePlayer::__MAKE_VHOOK(RemovePlayerItem)(CBasePlayerItem *pItem)
|
||||
LINK_HOOK_CLASS_CHAIN(BOOL, CBasePlayer, RemovePlayerItem, (CBasePlayerItem *pItem), pItem);
|
||||
|
||||
BOOL CBasePlayer::__API_VHOOK(RemovePlayerItem)(CBasePlayerItem *pItem)
|
||||
{
|
||||
if (m_pActiveItem == pItem)
|
||||
{
|
||||
@ -6249,8 +6316,10 @@ BOOL CBasePlayer::__MAKE_VHOOK(RemovePlayerItem)(CBasePlayerItem *pItem)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LINK_HOOK_CLASS_CHAIN(int, CBasePlayer, GiveAmmo, (int iCount, char *szName, int iMax), iCount, szName, iMax);
|
||||
|
||||
// Returns the unique ID for the ammo, or -1 if error
|
||||
int CBasePlayer::__MAKE_VHOOK(GiveAmmo)(int iCount, char *szName, int iMax)
|
||||
int CBasePlayer::__API_VHOOK(GiveAmmo)(int iCount, char *szName, int iMax)
|
||||
{
|
||||
if (pev->flags & FL_SPECTATOR)
|
||||
return -1;
|
||||
@ -6460,12 +6529,14 @@ void CBasePlayer::SendWeatherInfo()
|
||||
}
|
||||
}
|
||||
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, UpdateClientData);
|
||||
|
||||
// resends any changed player HUD info to the client.
|
||||
// Called every frame by PlayerPreThink
|
||||
// Also called at start of demo recording and playback by
|
||||
// ForceClientDllUpdate to ensure the demo gets messages
|
||||
// reflecting all of the HUD state info.
|
||||
void CBasePlayer::__MAKE_VHOOK(UpdateClientData)()
|
||||
void CBasePlayer::__API_VHOOK(UpdateClientData)()
|
||||
{
|
||||
if (m_fInitHUD)
|
||||
{
|
||||
@ -6757,7 +6828,7 @@ void CBasePlayer::__MAKE_VHOOK(UpdateClientData)()
|
||||
m_tmNextRadarUpdate = gpGlobals->time + 1.0f;
|
||||
|
||||
#ifdef REGAMEDLL_ADD
|
||||
if (friendlyfire.string[0] == '2')
|
||||
if (CSGameRules()->IsFriendlyFireAttack())
|
||||
vecOrigin = g_vecZero;
|
||||
#endif
|
||||
|
||||
@ -6771,7 +6842,7 @@ void CBasePlayer::__MAKE_VHOOK(UpdateClientData)()
|
||||
if (!pEntity || i == entindex())
|
||||
continue;
|
||||
|
||||
CBasePlayer *pPlayer = GetClassPtr((CBasePlayer *)pEntity->pev);
|
||||
CBasePlayer *pPlayer = GetClassPtr<CCSPlayer>((CBasePlayer *)pEntity->pev);
|
||||
|
||||
if (pPlayer->pev->flags == FL_DORMANT)
|
||||
continue;
|
||||
@ -6832,7 +6903,9 @@ void CBasePlayer::EnableControl(BOOL fControl)
|
||||
pev->flags &= ~FL_FROZEN;
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(ResetMaxSpeed)()
|
||||
LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, ResetMaxSpeed);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(ResetMaxSpeed)()
|
||||
{
|
||||
float speed;
|
||||
|
||||
@ -6973,7 +7046,9 @@ int CBasePlayer::GetCustomDecalFrames()
|
||||
return m_nCustomSprayFrames;
|
||||
}
|
||||
|
||||
void CBasePlayer::__MAKE_VHOOK(Blind)(float duration, float holdTime, float fadeTime, int alpha)
|
||||
LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, Blind, (float duration, float holdTime, float fadeTime, int alpha), duration, holdTime, fadeTime, alpha);
|
||||
|
||||
void CBasePlayer::__API_VHOOK(Blind)(float duration, float holdTime, float fadeTime, int alpha)
|
||||
{
|
||||
m_blindUntilTime = gpGlobals->time + duration;
|
||||
m_blindStartTime = gpGlobals->time;
|
||||
@ -7199,7 +7274,7 @@ void CBasePlayer::DropPlayerItem(const char *pszItemName)
|
||||
|
||||
if (pEntity->pev->flags != FL_DORMANT)
|
||||
{
|
||||
CBasePlayer *pOther = GetClassPtr((CBasePlayer *)pEntity->pev);
|
||||
CBasePlayer *pOther = GetClassPtr<CCSPlayer>((CBasePlayer *)pEntity->pev);
|
||||
|
||||
if (pOther->pev->deadflag == DEAD_NO && pOther->m_iTeam == TERRORIST)
|
||||
{
|
||||
@ -7379,21 +7454,7 @@ void CBasePlayer::SwitchTeam()
|
||||
|
||||
MESSAGE_BEGIN(MSG_ALL, gmsgTeamInfo);
|
||||
WRITE_BYTE(entindex());
|
||||
switch (m_iTeam)
|
||||
{
|
||||
case CT:
|
||||
WRITE_STRING("CT");
|
||||
break;
|
||||
case TERRORIST:
|
||||
WRITE_STRING("TERRORIST");
|
||||
break;
|
||||
case SPECTATOR:
|
||||
WRITE_STRING("SPECTATOR");
|
||||
break;
|
||||
default:
|
||||
WRITE_STRING("UNASSIGNED");
|
||||
break;
|
||||
}
|
||||
WRITE_STRING(GetTeamName(m_iTeam));
|
||||
MESSAGE_END();
|
||||
|
||||
if (TheBots != NULL)
|
||||
@ -7544,7 +7605,7 @@ void CDeadHEV::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
CBaseMonster::KeyValue(pkvd);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(monster_hevsuit_dead, CDeadHEV);
|
||||
LINK_ENTITY_TO_CLASS(monster_hevsuit_dead, CDeadHEV, CCSDeadHEV);
|
||||
|
||||
void CDeadHEV::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -7571,7 +7632,7 @@ void CDeadHEV::__MAKE_VHOOK(Spawn)()
|
||||
MonsterInitDead();
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(player_weaponstrip, CStripWeapons);
|
||||
LINK_ENTITY_TO_CLASS(player_weaponstrip, CStripWeapons, CCSStripWeapons);
|
||||
|
||||
void CStripWeapons::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
|
||||
{
|
||||
@ -7592,7 +7653,7 @@ void CStripWeapons::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCal
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(player_loadsaved, CRevertSaved);
|
||||
LINK_ENTITY_TO_CLASS(player_loadsaved, CRevertSaved, CCSRevertSaved);
|
||||
IMPLEMENT_SAVERESTORE(CRevertSaved, CPointEntity);
|
||||
|
||||
void CRevertSaved::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -7669,7 +7730,7 @@ void CInfoIntermission::__MAKE_VHOOK(Think)()
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(info_intermission, CInfoIntermission);
|
||||
LINK_ENTITY_TO_CLASS(info_intermission, CInfoIntermission, CCSInfoIntermission);
|
||||
|
||||
void CBasePlayer::StudioEstimateGait()
|
||||
{
|
||||
@ -8222,12 +8283,14 @@ void CBasePlayer::AddAutoBuyData(const char *str)
|
||||
if (len < sizeof(m_autoBuyString) - 1)
|
||||
{
|
||||
if (len > 0)
|
||||
m_autoBuyString[ len ] = ' ';
|
||||
{
|
||||
Q_strncat(m_autoBuyString, " ", len);
|
||||
}
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
Q_strncat(m_autoBuyString, str, sizeof(m_autoBuyString) - len);
|
||||
Q_strncat(m_autoBuyString, str, sizeof(m_autoBuyString) - Q_strlen(m_autoBuyString));
|
||||
#else
|
||||
Q_strncat(m_autoBuyString, str, sizeof(m_autoBuyString) - len - 1);
|
||||
Q_strncat(m_autoBuyString, str, sizeof(m_autoBuyString) - Q_strlen(m_autoBuyString) - 1);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -8241,7 +8304,7 @@ void CBasePlayer::InitRebuyData(const char *str)
|
||||
|
||||
if (m_rebuyString != NULL)
|
||||
{
|
||||
delete m_rebuyString;
|
||||
delete[] m_rebuyString;
|
||||
m_rebuyString = NULL;
|
||||
}
|
||||
|
||||
|
@ -258,25 +258,9 @@ enum sbar_data
|
||||
SBAR_END
|
||||
};
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SILENT,
|
||||
CALM,
|
||||
INTENSE
|
||||
enum MusicState { SILENT, CALM, INTENSE };
|
||||
|
||||
} MusicState;
|
||||
|
||||
struct WeaponStruct
|
||||
{
|
||||
int m_type;
|
||||
int m_price;
|
||||
int m_side;
|
||||
int m_slot;
|
||||
int m_ammoPrice;
|
||||
};
|
||||
|
||||
class CStripWeapons: public CPointEntity
|
||||
{
|
||||
class CStripWeapons: public CPointEntity {
|
||||
public:
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
|
||||
@ -288,8 +272,7 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class CInfoIntermission: public CPointEntity
|
||||
{
|
||||
class CInfoIntermission: public CPointEntity {
|
||||
public:
|
||||
virtual void Spawn();
|
||||
virtual void Think();
|
||||
@ -303,8 +286,7 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class CDeadHEV: public CBaseMonster
|
||||
{
|
||||
class CDeadHEV: public CBaseMonster {
|
||||
public:
|
||||
virtual void Spawn();
|
||||
virtual void KeyValue(KeyValueData *pkvd);
|
||||
@ -323,8 +305,7 @@ public:
|
||||
static char *m_szPoses[4];
|
||||
};
|
||||
|
||||
class CSprayCan: public CBaseEntity
|
||||
{
|
||||
class CSprayCan: public CBaseEntity {
|
||||
public:
|
||||
virtual void Think();
|
||||
virtual int ObjectCaps()
|
||||
@ -342,21 +323,19 @@ public:
|
||||
void Spawn(entvars_t *pevOwner);
|
||||
};
|
||||
|
||||
class CBloodSplat: public CBaseEntity
|
||||
{
|
||||
class CBloodSplat: public CBaseEntity {
|
||||
public:
|
||||
void Spawn(entvars_t *pevOwner);
|
||||
void Spray();
|
||||
};
|
||||
|
||||
class CBasePlayer: public CBaseMonster
|
||||
{
|
||||
class CBasePlayer: public CBaseMonster {
|
||||
public:
|
||||
virtual void Spawn();
|
||||
virtual void Precache();
|
||||
virtual int Save(CSave &save);
|
||||
virtual int Restore(CRestore &restore);
|
||||
virtual int ObjectCaps() { return (CBaseMonster::ObjectCaps() & ~FCAP_ACROSS_TRANSITION); }
|
||||
virtual int ObjectCaps();
|
||||
virtual int Classify();
|
||||
virtual void TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType);
|
||||
virtual int TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType);
|
||||
@ -392,43 +371,44 @@ public:
|
||||
virtual void Blind(float flUntilTime, float flHoldTime, float flFadeTime, int iAlpha);
|
||||
virtual void OnTouchingWeapon(CWeaponBox *pWeapon) { }
|
||||
|
||||
#ifdef HOOK_GAMEDLL
|
||||
|
||||
#if defined(REGAMEDLL_API) || defined(HOOK_GAMEDLL)
|
||||
void Spawn_();
|
||||
void Precache_();
|
||||
int ObjectCaps_();
|
||||
int Classify_();
|
||||
int Save_(CSave &save);
|
||||
int Restore_(CRestore &restore);
|
||||
int Classify_();
|
||||
void TraceAttack_(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType);
|
||||
void TraceAttack_(entvars_t *pevAttacker, float flDamage, VectorRef vecDir, TraceResult *ptr, int bitsDamageType);
|
||||
int TakeDamage_(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType);
|
||||
int TakeHealth_(float flHealth, int bitsDamageType);
|
||||
void Killed_(entvars_t *pevAttacker, int iGib);
|
||||
void AddPoints_(int score, BOOL bAllowNegativeScore);
|
||||
void AddPointsToTeam_(int score, BOOL bAllowNegativeScore);
|
||||
BOOL AddPlayerItem_(CBasePlayerItem *pItem);
|
||||
BOOL AddPlayerItem_(CBasePlayerItem *pItem);
|
||||
BOOL RemovePlayerItem_(CBasePlayerItem *pItem);
|
||||
int GiveAmmo_(int iAmount,char *szName,int iMax);
|
||||
const char *TeamID_();
|
||||
BOOL FBecomeProne_();
|
||||
int Illumination_();
|
||||
void ResetMaxSpeed_();
|
||||
void Jump_();
|
||||
void Duck_();
|
||||
void PreThink_();
|
||||
void PostThink_();
|
||||
Vector GetGunPosition_();
|
||||
void UpdateClientData_();
|
||||
void ImpulseCommands_();
|
||||
void RoundRespawn_();
|
||||
Vector GetAutoaimVector_(float flDelta);
|
||||
void Blind_(float flUntilTime, float flHoldTime, float flFadeTime, int iAlpha);
|
||||
|
||||
#endif // HOOK_GAMEDLL
|
||||
const char *TeamID_();
|
||||
BOOL FBecomeProne_();
|
||||
int Illumination_();
|
||||
Vector GetGunPosition_();
|
||||
Vector GetAutoaimVector_(float flDelta);
|
||||
#endif
|
||||
|
||||
public:
|
||||
void SpawnClientSideCorpse();
|
||||
void Observer_FindNextPlayer(bool bReverse, const char *name = NULL);
|
||||
CBaseEntity *Observer_IsValidTarget(int iPlayerIndex, bool bSameTeam);
|
||||
CBaseEntity *Observer_IsValidTarget_(int iPlayerIndex, bool bSameTeam);
|
||||
|
||||
void Observer_HandleButtons();
|
||||
void Observer_SetMode(int iMode);
|
||||
void Observer_CheckTarget();
|
||||
@ -441,6 +421,7 @@ public:
|
||||
void ThrowWeapon(char *pszItemName);
|
||||
void ThrowPrimary();
|
||||
void AddAccount(int amount, bool bTrackChange = true);
|
||||
void AddAccount_(int amount, bool bTrackChange = true);
|
||||
void Disappear();
|
||||
void MakeVIP();
|
||||
bool CanPlayerBuy(bool display = false);
|
||||
@ -454,6 +435,7 @@ public:
|
||||
void RenewItems();
|
||||
void PackDeadPlayerItems();
|
||||
void GiveDefaultItems();
|
||||
void GiveDefaultItems_();
|
||||
void RemoveAllItems(BOOL removeSuit);
|
||||
void SetBombIcon(BOOL bFlash = FALSE);
|
||||
void SetProgressBarTime(int time);
|
||||
@ -480,6 +462,7 @@ public:
|
||||
void UpdatePlayerSound();
|
||||
void DeathSound();
|
||||
void SetAnimation(PLAYER_ANIM playerAnim);
|
||||
void SetAnimation_(PLAYER_ANIM playerAnim);
|
||||
void SetWeaponAnimType(const char *szExtention) { Q_strcpy(m_szAnimExtention, szExtention); }
|
||||
void CheatImpulseCommands(int iImpulse);
|
||||
void StartDeathCam();
|
||||
@ -496,6 +479,7 @@ public:
|
||||
void ItemPreFrame();
|
||||
void ItemPostFrame();
|
||||
void GiveNamedItem(const char *pszName);
|
||||
void GiveNamedItem_(const char *pszName);
|
||||
void EnableControl(BOOL fControl);
|
||||
bool HintMessage(const char *pMessage, BOOL bDisplayIfPlayerDead = FALSE, BOOL bOverride = FALSE);
|
||||
void SendAmmoUpdate();
|
||||
@ -543,6 +527,7 @@ public:
|
||||
void RemoveShield();
|
||||
void DropShield(bool bDeploy = true);
|
||||
void GiveShield(bool bDeploy = true);
|
||||
void GiveShield_(bool bDeploy = true);
|
||||
bool IsHittingShield(Vector &vecDirection, TraceResult *ptr);
|
||||
bool SelectSpawnSpot(const char *pEntClassName, CBaseEntity* &pSpot);
|
||||
bool IsReloading()
|
||||
|
@ -35,10 +35,10 @@
|
||||
class CRevertSaved: public CPointEntity
|
||||
{
|
||||
public:
|
||||
void KeyValue(KeyValueData *pkvd);
|
||||
int Save(CSave &save);
|
||||
int Restore(CRestore &restore);
|
||||
void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
virtual void KeyValue(KeyValueData *pkvd);
|
||||
virtual int Save(CSave &save);
|
||||
virtual int Restore(CRestore &restore);
|
||||
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
|
||||
#ifdef HOOK_GAMEDLL
|
||||
|
||||
|
@ -76,7 +76,7 @@ char grgchTextureType[ CTEXTURESMAX ];
|
||||
int fTextureTypeInit;
|
||||
int gcTextures;
|
||||
|
||||
LINK_ENTITY_TO_CLASS(ambient_generic, CAmbientGeneric);
|
||||
LINK_ENTITY_TO_CLASS(ambient_generic, CAmbientGeneric, CCSAmbientGeneric);
|
||||
IMPLEMENT_SAVERESTORE(CAmbientGeneric, CBaseEntity);
|
||||
|
||||
// -1 : "Default"
|
||||
@ -851,7 +851,7 @@ void CAmbientGeneric::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
CBaseEntity::KeyValue(pkvd);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_sound, CEnvSound);
|
||||
LINK_ENTITY_TO_CLASS(env_sound, CEnvSound, CCSEnvSound);
|
||||
IMPLEMENT_SAVERESTORE(CEnvSound, CBaseEntity);
|
||||
|
||||
void CEnvSound::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -872,7 +872,7 @@ void CEnvSound::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
// and can see the given player entity (pevTarget)
|
||||
BOOL FEnvSoundInRange(entvars_t *pev, entvars_t *pevTarget, float *pflRange)
|
||||
{
|
||||
CEnvSound *pSound = GetClassPtr((CEnvSound *)pev);
|
||||
CEnvSound *pSound = GetClassPtr<CCSEnvSound>((CEnvSound *)pev);
|
||||
Vector vecSpot1 = pev->origin + pev->view_ofs;
|
||||
Vector vecSpot2 = pevTarget->origin + pevTarget->view_ofs;
|
||||
Vector vecRange;
|
||||
@ -922,7 +922,7 @@ void CEnvSound::__MAKE_VHOOK(Think)()
|
||||
goto env_sound_Think_slow;
|
||||
}
|
||||
|
||||
CBasePlayer *pPlayer = GetClassPtr((CBasePlayer *)VARS(pentPlayer));
|
||||
CBasePlayer *pPlayer = GetClassPtr<CCSPlayer>((CBasePlayer *)VARS(pentPlayer));
|
||||
float flRange;
|
||||
|
||||
// check to see if this is the sound entity that is
|
||||
@ -1809,7 +1809,7 @@ float TEXTURETYPE_PlaySound(TraceResult *ptr, Vector vecSrc, Vector vecEnd, int
|
||||
return fvolbar;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(speaker, CSpeaker);
|
||||
LINK_ENTITY_TO_CLASS(speaker, CSpeaker, CCSSpeaker);
|
||||
IMPLEMENT_SAVERESTORE(CSpeaker, CBaseEntity);
|
||||
|
||||
// ambient_generic - general-purpose user-defined static sound
|
||||
|
@ -50,7 +50,7 @@
|
||||
|
||||
#define SPEAKER_START_SILENT 1 // wait for trigger 'on' to start announcements
|
||||
|
||||
#define LFO_SQUARE 1 // square
|
||||
#define LFO_SQUARE 1 // square
|
||||
#define LFO_TRIANGLE 2 // triangle
|
||||
#define LFO_RANDOM 3 // random
|
||||
|
||||
|
@ -1,8 +1,15 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
CSoundEnt *pSoundEnt;
|
||||
/*
|
||||
* Globals initialization
|
||||
*/
|
||||
#ifndef HOOK_GAMEDLL
|
||||
|
||||
LINK_ENTITY_TO_CLASS(soundent, CSoundEnt);
|
||||
CSoundEnt *pSoundEnt = NULL;
|
||||
|
||||
#endif
|
||||
|
||||
LINK_ENTITY_TO_CLASS(soundent, CSoundEnt, CCSSoundEnt);
|
||||
|
||||
// CSound - Clear - zeros all fields for a sound
|
||||
void CSound::Clear()
|
||||
|
@ -79,7 +79,6 @@ public:
|
||||
class CSoundEnt: public CBaseEntity
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Spawn();
|
||||
virtual void Precache();
|
||||
virtual int ObjectCaps() { return FCAP_DONT_SAVE; }
|
||||
|
@ -50,15 +50,15 @@ void CNullEntity::__MAKE_VHOOK(Spawn)()
|
||||
REMOVE_ENTITY(ENT(pev));
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(info_null, CNullEntity);
|
||||
LINK_ENTITY_TO_CLASS(info_null, CNullEntity, CCSNullEntity);
|
||||
|
||||
// These are the new entry points to entities.
|
||||
LINK_ENTITY_TO_CLASS(info_player_deathmatch, CBaseDMStart);
|
||||
LINK_ENTITY_TO_CLASS(info_player_start, CPointEntity);
|
||||
LINK_ENTITY_TO_CLASS(info_vip_start, CBaseDMStart);
|
||||
LINK_ENTITY_TO_CLASS(info_landmark, CPointEntity);
|
||||
LINK_ENTITY_TO_CLASS(info_hostage_rescue, CPointEntity);
|
||||
LINK_ENTITY_TO_CLASS(info_bomb_target, CPointEntity);
|
||||
LINK_ENTITY_TO_CLASS(info_player_deathmatch, CBaseDMStart, CCSDMStart);
|
||||
LINK_ENTITY_TO_CLASS(info_player_start, CPointEntity, CCSPointEntity);
|
||||
LINK_ENTITY_TO_CLASS(info_vip_start, CBaseDMStart, CCSDMStart);
|
||||
LINK_ENTITY_TO_CLASS(info_landmark, CPointEntity, CCSPointEntity);
|
||||
LINK_ENTITY_TO_CLASS(info_hostage_rescue, CPointEntity, CCSPointEntity);
|
||||
LINK_ENTITY_TO_CLASS(info_bomb_target, CPointEntity, CCSPointEntity);
|
||||
|
||||
void CBaseDMStart::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -81,6 +81,7 @@ BOOL CBaseDMStart::__MAKE_VHOOK(IsTriggered)(CBaseEntity *pEntity)
|
||||
// This updates global tables that need to know about entities being removed
|
||||
void CBaseEntity::UpdateOnRemove()
|
||||
{
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
if (pev->flags & FL_GRAPHED)
|
||||
{
|
||||
// this entity was a LinkEnt in the world node graph, so we must remove it from
|
||||
@ -94,6 +95,7 @@ void CBaseEntity::UpdateOnRemove()
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (pev->globalname)
|
||||
{
|
||||
@ -180,7 +182,7 @@ void FireTargets(const char *targetName, CBaseEntity *pActivator, CBaseEntity *p
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(DelayedUse, CBaseDelay);
|
||||
LINK_ENTITY_TO_CLASS(DelayedUse, CBaseDelay, CCSDelay);
|
||||
|
||||
void CBaseDelay::SUB_UseTargets(CBaseEntity *pActivator, USE_TYPE useType, float value)
|
||||
{
|
||||
@ -192,7 +194,7 @@ void CBaseDelay::SUB_UseTargets(CBaseEntity *pActivator, USE_TYPE useType, float
|
||||
if (m_flDelay != 0)
|
||||
{
|
||||
// create a temp object to fire at a later time
|
||||
CBaseDelay *pTemp = GetClassPtr((CBaseDelay *)NULL);
|
||||
CBaseDelay *pTemp = GetClassPtr<CCSDelay>((CBaseDelay *)NULL);
|
||||
|
||||
MAKE_STRING_CLASS("DelayedUse", pTemp->pev);
|
||||
|
||||
|
@ -329,7 +329,7 @@ void CHalfLifeTraining::__MAKE_VHOOK(CheckWinConditions)()
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CBaseGrenCatch, CBaseEntity);
|
||||
LINK_ENTITY_TO_CLASS(func_grencatch, CBaseGrenCatch);
|
||||
LINK_ENTITY_TO_CLASS(func_grencatch, CBaseGrenCatch, CCSGrenCatch);
|
||||
|
||||
void CBaseGrenCatch::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -458,7 +458,7 @@ void CFuncWeaponCheck::__MAKE_VHOOK(Spawn)()
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CFuncWeaponCheck, CBaseEntity);
|
||||
LINK_ENTITY_TO_CLASS(func_weaponcheck, CFuncWeaponCheck);
|
||||
LINK_ENTITY_TO_CLASS(func_weaponcheck, CFuncWeaponCheck, CCSFuncWeaponCheck);
|
||||
|
||||
void CFuncWeaponCheck::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
||||
{
|
||||
|
@ -36,7 +36,6 @@ class CHalfLifeTraining: public CHalfLifeMultiplay
|
||||
{
|
||||
public:
|
||||
CHalfLifeTraining();
|
||||
|
||||
virtual BOOL IsMultiplayer() { return FALSE; }
|
||||
virtual BOOL IsDeathmatch();
|
||||
virtual void InitHUD(CBasePlayer *pl);
|
||||
|
@ -68,7 +68,7 @@ TYPEDESCRIPTION CTriggerCamera::m_SaveData[] =
|
||||
char st_szNextMap[cchMapNameMost];
|
||||
char st_szNextSpot[cchMapNameMost];
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_friction, CFrictionModifier);
|
||||
LINK_ENTITY_TO_CLASS(func_friction, CFrictionModifier, CCSFrictionModifier);
|
||||
IMPLEMENT_SAVERESTORE(CFrictionModifier, CBaseEntity);
|
||||
|
||||
void CFrictionModifier::__MAKE_VHOOK(Spawn)()
|
||||
@ -103,7 +103,7 @@ void CFrictionModifier::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
CBaseEntity::KeyValue(pkvd);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_auto, CAutoTrigger);
|
||||
LINK_ENTITY_TO_CLASS(trigger_auto, CAutoTrigger, CCSAutoTrigger);
|
||||
IMPLEMENT_SAVERESTORE(CAutoTrigger, CBaseDelay);
|
||||
|
||||
void CAutoTrigger::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -157,7 +157,7 @@ void CAutoTrigger::__MAKE_VHOOK(Think)()
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_relay, CTriggerRelay);
|
||||
LINK_ENTITY_TO_CLASS(trigger_relay, CTriggerRelay, CCSTriggerRelay);
|
||||
IMPLEMENT_SAVERESTORE(CTriggerRelay, CBaseDelay);
|
||||
|
||||
void CTriggerRelay::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -197,7 +197,7 @@ void CTriggerRelay::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *pCal
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(multi_manager, CMultiManager);
|
||||
LINK_ENTITY_TO_CLASS(multi_manager, CMultiManager, CCSMultiManager);
|
||||
IMPLEMENT_SAVERESTORE(CMultiManager, CBaseToggle);
|
||||
|
||||
void CMultiManager::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -336,7 +336,7 @@ void CMultiManager::ManagerThink()
|
||||
|
||||
CMultiManager *CMultiManager::Clone()
|
||||
{
|
||||
CMultiManager *pMulti = GetClassPtr((CMultiManager *)NULL);
|
||||
CMultiManager *pMulti = GetClassPtr<CCSMultiManager>((CMultiManager *)NULL);
|
||||
|
||||
edict_t *pEdict = pMulti->pev->pContainingEntity;
|
||||
Q_memcpy(pMulti->pev, pev, sizeof(*pev));
|
||||
@ -374,7 +374,7 @@ void CMultiManager::ManagerUse(CBaseEntity *pActivator, CBaseEntity *pCaller, US
|
||||
pev->nextthink = gpGlobals->time;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_render, CRenderFxManager);
|
||||
LINK_ENTITY_TO_CLASS(env_render, CRenderFxManager, CCSRenderFxManager);
|
||||
|
||||
void CRenderFxManager::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -408,7 +408,7 @@ void CRenderFxManager::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntity *p
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger, CBaseTrigger);
|
||||
LINK_ENTITY_TO_CLASS(trigger, CBaseTrigger, CCSTrigger);
|
||||
|
||||
void CBaseTrigger::InitTrigger()
|
||||
{
|
||||
@ -453,8 +453,8 @@ void CBaseTrigger::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
CBaseToggle::KeyValue(pkvd);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_hurt, CTriggerHurt);
|
||||
LINK_ENTITY_TO_CLASS(trigger_monsterjump, CTriggerMonsterJump);
|
||||
LINK_ENTITY_TO_CLASS(trigger_hurt, CTriggerHurt, CCSTriggerHurt);
|
||||
LINK_ENTITY_TO_CLASS(trigger_monsterjump, CTriggerMonsterJump, CCSTriggerMonsterJump);
|
||||
|
||||
void CTriggerMonsterJump::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -511,7 +511,7 @@ void CTriggerMonsterJump::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
||||
pev->nextthink = gpGlobals->time;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_cdaudio, CTriggerCDAudio);
|
||||
LINK_ENTITY_TO_CLASS(trigger_cdaudio, CTriggerCDAudio, CCSTriggerCDAudio);
|
||||
|
||||
// Changes tracks or stops CD when player touches
|
||||
// HACK: overloaded HEALTH to avoid adding new field
|
||||
@ -575,7 +575,7 @@ void CTriggerCDAudio::PlayTrack()
|
||||
UTIL_Remove(this);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(target_cdaudio, CTargetCDAudio);
|
||||
LINK_ENTITY_TO_CLASS(target_cdaudio, CTargetCDAudio, CCSTargetCDAudio);
|
||||
|
||||
void CTargetCDAudio::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -693,7 +693,7 @@ void CTriggerHurt::RadiationThink()
|
||||
// reset origin
|
||||
if (!FNullEnt(pentPlayer))
|
||||
{
|
||||
pPlayer = GetClassPtr((CBasePlayer *)VARS(pentPlayer));
|
||||
pPlayer = GetClassPtr<CCSPlayer>((CBasePlayer *)VARS(pentPlayer));
|
||||
|
||||
pevTarget = VARS(pentPlayer);
|
||||
|
||||
@ -852,7 +852,7 @@ void CBaseTrigger::HurtTouch(CBaseEntity *pOther)
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_multiple, CTriggerMultiple);
|
||||
LINK_ENTITY_TO_CLASS(trigger_multiple, CTriggerMultiple, CCSTriggerMultiple);
|
||||
|
||||
void CTriggerMultiple::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -882,11 +882,11 @@ void CTriggerMultiple::__MAKE_VHOOK(Spawn)()
|
||||
//}
|
||||
//else
|
||||
{
|
||||
SetTouch(&CTriggerMultiple::MultiTouch);
|
||||
SetTouch(&CTriggerMultiple::MultiTouch);
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_once, CTriggerOnce);
|
||||
LINK_ENTITY_TO_CLASS(trigger_once, CTriggerOnce, CCSTriggerOnce);
|
||||
|
||||
void CTriggerOnce::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1007,7 +1007,7 @@ void CBaseTrigger::CounterUse(CBaseEntity *pActivator, CBaseEntity *pCaller, USE
|
||||
ActivateMultiTrigger(m_hActivator);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_counter, CTriggerCounter);
|
||||
LINK_ENTITY_TO_CLASS(trigger_counter, CTriggerCounter, CCSTriggerCounter);
|
||||
|
||||
void CTriggerCounter::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1023,7 +1023,7 @@ void CTriggerCounter::__MAKE_VHOOK(Spawn)()
|
||||
SetUse(&CTriggerCounter::CounterUse);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_transition, CTriggerVolume);
|
||||
LINK_ENTITY_TO_CLASS(trigger_transition, CTriggerVolume, CCSTriggerVolume);
|
||||
|
||||
// Define space that travels across a level transition
|
||||
void CTriggerVolume::__MAKE_VHOOK(Spawn)()
|
||||
@ -1038,7 +1038,7 @@ void CTriggerVolume::__MAKE_VHOOK(Spawn)()
|
||||
pev->modelindex = 0;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(fireanddie, CFireAndDie);
|
||||
LINK_ENTITY_TO_CLASS(fireanddie, CFireAndDie, CCSFireAndDie);
|
||||
|
||||
void CFireAndDie::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1057,7 +1057,7 @@ void CFireAndDie::__MAKE_VHOOK(Think)()
|
||||
UTIL_Remove(this);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_changelevel, CChangeLevel);
|
||||
LINK_ENTITY_TO_CLASS(trigger_changelevel, CChangeLevel, CCSChangeLevel);
|
||||
IMPLEMENT_SAVERESTORE(CChangeLevel, CBaseTrigger);
|
||||
|
||||
// Cache user-entity-field values until spawn is called.
|
||||
@ -1184,7 +1184,7 @@ void CChangeLevel::ChangeLevelNow(CBaseEntity *pActivator)
|
||||
// Create an entity to fire the changetarget
|
||||
if (m_changeTarget)
|
||||
{
|
||||
CFireAndDie *pFireAndDie = GetClassPtr((CFireAndDie *)NULL);
|
||||
CFireAndDie *pFireAndDie = GetClassPtr<CCSFireAndDie>((CFireAndDie *)NULL);
|
||||
|
||||
if (pFireAndDie)
|
||||
{
|
||||
@ -1324,7 +1324,7 @@ int CChangeLevel::ChangeList(LEVELLIST *pLevelList, int maxList)
|
||||
|
||||
while (!FNullEnt(pentChangelevel))
|
||||
{
|
||||
CChangeLevel *pTrigger = GetClassPtr((CChangeLevel *)VARS(pentChangelevel));
|
||||
CChangeLevel *pTrigger = GetClassPtr<CCSChangeLevel>((CChangeLevel *)VARS(pentChangelevel));
|
||||
|
||||
if (pTrigger != NULL)
|
||||
{
|
||||
@ -1426,11 +1426,11 @@ NOXREF void NextLevel()
|
||||
if (FNullEnt(pent))
|
||||
{
|
||||
gpGlobals->mapname = ALLOC_STRING("start");
|
||||
pChange = GetClassPtr((CChangeLevel *)NULL);
|
||||
pChange = GetClassPtr<CCSChangeLevel>((CChangeLevel *)NULL);
|
||||
Q_strcpy(pChange->m_szMapName, "start");
|
||||
}
|
||||
else
|
||||
pChange = GetClassPtr((CChangeLevel *)VARS(pent));
|
||||
pChange = GetClassPtr<CCSChangeLevel>((CChangeLevel *)VARS(pent));
|
||||
|
||||
Q_strcpy(st_szNextMap, pChange->m_szMapName);
|
||||
g_fGameOver = TRUE;
|
||||
@ -1442,7 +1442,7 @@ NOXREF void NextLevel()
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_ladder, CLadder);
|
||||
LINK_ENTITY_TO_CLASS(func_ladder, CLadder, CCSLadder);
|
||||
|
||||
void CLadder::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -1474,7 +1474,7 @@ void CLadder::__MAKE_VHOOK(Spawn)()
|
||||
pev->movetype = MOVETYPE_PUSH;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_push, CTriggerPush);
|
||||
LINK_ENTITY_TO_CLASS(trigger_push, CTriggerPush, CCSTriggerPush);
|
||||
|
||||
void CTriggerPush::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -1615,7 +1615,7 @@ void CBaseTrigger::TeleportTouch(CBaseEntity *pOther)
|
||||
pevToucher->velocity = pevToucher->basevelocity = g_vecZero;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_teleport, CTriggerTeleport);
|
||||
LINK_ENTITY_TO_CLASS(trigger_teleport, CTriggerTeleport, CCSTriggerTeleport);
|
||||
|
||||
void CTriggerTeleport::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1623,8 +1623,8 @@ void CTriggerTeleport::__MAKE_VHOOK(Spawn)()
|
||||
SetTouch(&CTriggerTeleport::TeleportTouch);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(info_teleport_destination, CPointEntity);
|
||||
LINK_ENTITY_TO_CLASS(func_buyzone, CBuyZone);
|
||||
LINK_ENTITY_TO_CLASS(info_teleport_destination, CPointEntity, CCSPointEntity);
|
||||
LINK_ENTITY_TO_CLASS(func_buyzone, CBuyZone, CCSBuyZone);
|
||||
|
||||
void CBuyZone::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1651,7 +1651,7 @@ void CBuyZone::BuyTouch(CBaseEntity *pOther)
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_bomb_target, CBombTarget);
|
||||
LINK_ENTITY_TO_CLASS(func_bomb_target, CBombTarget, CCSBombTarget);
|
||||
|
||||
void CBombTarget::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1680,7 +1680,7 @@ void CBombTarget::BombTargetUse(CBaseEntity *pActivator, CBaseEntity *pCaller, U
|
||||
SUB_UseTargets(NULL, USE_TOGGLE, 0);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_hostage_rescue, CHostageRescue);
|
||||
LINK_ENTITY_TO_CLASS(func_hostage_rescue, CHostageRescue, CCSHostageRescue);
|
||||
|
||||
void CHostageRescue::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1701,7 +1701,7 @@ void CHostageRescue::HostageRescueTouch(CBaseEntity *pOther)
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_escapezone, CEscapeZone);
|
||||
LINK_ENTITY_TO_CLASS(func_escapezone, CEscapeZone, CCSEscapeZone);
|
||||
|
||||
void CEscapeZone::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1746,7 +1746,7 @@ void CEscapeZone::EscapeTouch(CBaseEntity *pOther)
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_vip_safetyzone, CVIP_SafetyZone);
|
||||
LINK_ENTITY_TO_CLASS(func_vip_safetyzone, CVIP_SafetyZone, CCSVIP_SafetyZone);
|
||||
|
||||
void CVIP_SafetyZone::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1774,7 +1774,7 @@ void CVIP_SafetyZone::VIP_SafetyTouch(CBaseEntity *pOther)
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_autosave, CTriggerSave);
|
||||
LINK_ENTITY_TO_CLASS(trigger_autosave, CTriggerSave, CCSTriggerSave);
|
||||
|
||||
void CTriggerSave::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1802,7 +1802,7 @@ void CTriggerSave::SaveTouch(CBaseEntity *pOther)
|
||||
SERVER_COMMAND("autosave\n");
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_endsection, CTriggerEndSection);
|
||||
LINK_ENTITY_TO_CLASS(trigger_endsection, CTriggerEndSection, CCSTriggerEndSection);
|
||||
|
||||
void CTriggerEndSection::EndSectionUse(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
|
||||
{
|
||||
@ -1864,7 +1864,7 @@ void CTriggerEndSection::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
CBaseTrigger::KeyValue(pkvd);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_gravity, CTriggerGravity);
|
||||
LINK_ENTITY_TO_CLASS(trigger_gravity, CTriggerGravity, CCSTriggerGravity);
|
||||
|
||||
void CTriggerGravity::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -1881,7 +1881,7 @@ void CTriggerGravity::GravityTouch(CBaseEntity *pOther)
|
||||
pOther->pev->gravity = pev->gravity;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_changetarget, CTriggerChangeTarget);
|
||||
LINK_ENTITY_TO_CLASS(trigger_changetarget, CTriggerChangeTarget, CCSTriggerChangeTarget);
|
||||
IMPLEMENT_SAVERESTORE(CTriggerChangeTarget, CBaseDelay);
|
||||
|
||||
void CTriggerChangeTarget::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
@ -1917,7 +1917,7 @@ void CTriggerChangeTarget::__MAKE_VHOOK(Use)(CBaseEntity *pActivator, CBaseEntit
|
||||
}
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(trigger_camera, CTriggerCamera);
|
||||
LINK_ENTITY_TO_CLASS(trigger_camera, CTriggerCamera, CCSTriggerCamera);
|
||||
IMPLEMENT_SAVERESTORE(CTriggerCamera, CBaseDelay);
|
||||
|
||||
void CTriggerCamera::__MAKE_VHOOK(Spawn)()
|
||||
@ -2185,10 +2185,10 @@ void CTriggerCamera::Move()
|
||||
pev->velocity = ((pev->movedir * pev->speed) * fraction) + (pev->velocity * (1 - fraction));
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_snow, CWeather);
|
||||
LINK_ENTITY_TO_CLASS(func_snow, CWeather);
|
||||
LINK_ENTITY_TO_CLASS(env_rain, CWeather);
|
||||
LINK_ENTITY_TO_CLASS(func_rain, CWeather);
|
||||
LINK_ENTITY_TO_CLASS(env_snow, CWeather, CCSWeather);
|
||||
LINK_ENTITY_TO_CLASS(func_snow, CWeather, CCSWeather);
|
||||
LINK_ENTITY_TO_CLASS(env_rain, CWeather, CCSWeather);
|
||||
LINK_ENTITY_TO_CLASS(func_rain, CWeather, CCSWeather);
|
||||
|
||||
void CWeather::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -2231,4 +2231,4 @@ void CClientFog::__MAKE_VHOOK(Spawn)()
|
||||
pev->rendermode = kRenderTransTexture;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_fog, CClientFog);
|
||||
LINK_ENTITY_TO_CLASS(env_fog, CClientFog, CCSClientFog);
|
||||
|
@ -39,14 +39,14 @@
|
||||
#define MAX_ENTITY 512 // We can only ever move 512 entities across a transition
|
||||
|
||||
// triggers
|
||||
#define SF_TRIGGER_ALLOWMONSTERS 1 // monsters allowed to fire this trigger
|
||||
#define SF_TRIGGER_NOCLIENTS 2 // players not allowed to fire this trigger
|
||||
#define SF_TRIGGER_ALLOWMONSTERS 1 // monsters allowed to fire this trigger
|
||||
#define SF_TRIGGER_NOCLIENTS 2 // players not allowed to fire this trigger
|
||||
#define SF_TRIGGER_PUSHABLES 4 // only pushables can fire this trigger
|
||||
|
||||
#define SF_TRIGGER_PUSH_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
||||
#define SF_TRIGGER_PUSH_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
||||
#define SF_TRIGGER_HURT_TARGETONCE 1 // Only fire hurt target once
|
||||
#define SF_TRIGGER_HURT_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
||||
#define SF_TRIGGER_HURT_NO_CLIENTS 8 // spawnflag that makes trigger_push spawn turned OFF
|
||||
#define SF_TRIGGER_HURT_START_OFF 2 // spawnflag that makes trigger_push spawn turned OFF
|
||||
#define SF_TRIGGER_HURT_NO_CLIENTS 8 // spawnflag that makes trigger_push spawn turned OFF
|
||||
#define SF_TRIGGER_HURT_CLIENTONLYFIRE 16 // trigger hurt will only fire its target if it is hurting a client
|
||||
#define SF_TRIGGER_HURT_CLIENTONLYTOUCH 32 // only clients may touch this trigger.
|
||||
|
||||
@ -744,7 +744,7 @@ public:
|
||||
};
|
||||
|
||||
void PlayCDTrack(int iTrack);
|
||||
int BuildChangeList(LEVELLIST * pLevelList, int maxList);
|
||||
int BuildChangeList(LEVELLIST *pLevelList, int maxList);
|
||||
void NextLevel();
|
||||
|
||||
#endif // TRIGGERS_H
|
||||
|
@ -409,7 +409,7 @@ CBaseEntity *UTIL_FindEntityByString_Old(CBaseEntity *pStartEntity, const char *
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CBaseEntity *UTIL_FindEntityByString(CBaseEntity *pStartEntity, const char *szKeyword, const char *szValue)
|
||||
CBaseEntity *EXT_FUNC UTIL_FindEntityByString(CBaseEntity *pStartEntity, const char *szKeyword, const char *szValue)
|
||||
{
|
||||
edict_t *pentEntity;
|
||||
int startEntityIndex;
|
||||
@ -421,7 +421,7 @@ CBaseEntity *UTIL_FindEntityByString(CBaseEntity *pStartEntity, const char *szKe
|
||||
|
||||
startEntityIndex = ENTINDEX(pentEntity);
|
||||
|
||||
//it best each entity list
|
||||
// it best each entity list
|
||||
if (*szKeyword == 'c')
|
||||
{
|
||||
int hash;
|
||||
@ -1456,7 +1456,7 @@ void UTIL_PrecacheOther(const char *szClassname)
|
||||
REMOVE_ENTITY(pent);
|
||||
}
|
||||
|
||||
void UTIL_LogPrintf(char *fmt, ...)
|
||||
void UTIL_LogPrintf(const char *fmt, ...)
|
||||
{
|
||||
va_list argptr;
|
||||
static char string[1024];
|
||||
@ -1938,7 +1938,7 @@ void CSave::BufferData(const char *pdata, int size)
|
||||
int CRestore::ReadField(void *pBaseData, TYPEDESCRIPTION *pFields, int fieldCount, int startField, int size, char *pName, void *pData)
|
||||
{
|
||||
float time = 0.0f;
|
||||
Vector position = Vector(0, 0, 0);
|
||||
Vector position(0, 0, 0);
|
||||
|
||||
if (m_pdata)
|
||||
{
|
||||
|
@ -123,7 +123,7 @@ extern globalvars_t *gpGlobals;
|
||||
#define SF_BRUSH_ROTATE_Z_AXIS 4
|
||||
#define SF_BRUSH_ROTATE_X_AXIS 8
|
||||
#define SF_PENDULUM_AUTO_RETURN 16
|
||||
#define SF_PENDULUM_PASSABLE 32
|
||||
#define SF_PENDULUM_PASSABLE 32
|
||||
|
||||
#define SF_BRUSH_ROTATE_SMALLRADIUS 128
|
||||
#define SF_BRUSH_ROTATE_MEDIUMRADIUS 256
|
||||
@ -158,75 +158,15 @@ extern globalvars_t *gpGlobals;
|
||||
|
||||
#endif
|
||||
|
||||
#define LINK_ENTITY_TO_CLASS(mapClassName, DLLClassName)\
|
||||
#define REGAMEDLL_ALLOC_FUNC
|
||||
#define LINK_ENTITY_TO_CLASS(mapClassName, DLLClassName, DLLClassWrapName)\
|
||||
C_DLLEXPORT void EXT_FUNC mapClassName(entvars_t *pev);\
|
||||
void mapClassName(entvars_t *pev)\
|
||||
{\
|
||||
GetClassPtr((DLLClassName *)pev);\
|
||||
REGAMEDLL_ALLOC_FUNC\
|
||||
GetClassPtr<DLLClassWrapName>((DLLClassName *)pev);\
|
||||
}
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ignore_monsters = 1,
|
||||
dont_ignore_monsters = 0,
|
||||
missile = 2
|
||||
|
||||
} IGNORE_MONSTERS;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ignore_glass = 1,
|
||||
dont_ignore_glass = 0
|
||||
|
||||
} IGNORE_GLASS;
|
||||
|
||||
enum
|
||||
{
|
||||
point_hull = 0,
|
||||
human_hull = 1,
|
||||
large_hull = 2,
|
||||
head_hull = 3
|
||||
};
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MONSTERSTATE_NONE = 0,
|
||||
MONSTERSTATE_IDLE,
|
||||
MONSTERSTATE_COMBAT,
|
||||
MONSTERSTATE_ALERT,
|
||||
MONSTERSTATE_HUNT,
|
||||
MONSTERSTATE_PRONE,
|
||||
MONSTERSTATE_SCRIPT,
|
||||
MONSTERSTATE_PLAYDEAD,
|
||||
MONSTERSTATE_DEAD
|
||||
|
||||
} MONSTERSTATE;
|
||||
|
||||
// Things that toggle (buttons/triggers/doors) need this
|
||||
typedef enum
|
||||
{
|
||||
TS_AT_TOP,
|
||||
TS_AT_BOTTOM,
|
||||
TS_GOING_UP,
|
||||
TS_GOING_DOWN,
|
||||
|
||||
} TOGGLE_STATE;
|
||||
|
||||
typedef struct hudtextparms_s
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
int effect;
|
||||
byte r1,g1,b1,a1;
|
||||
byte r2,g2,b2,a2;
|
||||
float fadeinTime;
|
||||
float fadeoutTime;
|
||||
float holdTime;
|
||||
float fxTime;
|
||||
int channel;
|
||||
|
||||
} hudtextparms_t;
|
||||
|
||||
class UTIL_GroupTrace
|
||||
{
|
||||
public:
|
||||
@ -237,35 +177,14 @@ private:
|
||||
int m_oldgroupop;
|
||||
};
|
||||
|
||||
inline edict_t *FIND_ENTITY_BY_CLASSNAME(edict_t *entStart, const char *pszName)
|
||||
{
|
||||
return FIND_ENTITY_BY_STRING(entStart, "classname", pszName);
|
||||
}
|
||||
// Inlines
|
||||
inline edict_t *FIND_ENTITY_BY_CLASSNAME(edict_t *entStart, const char *pszName) { return FIND_ENTITY_BY_STRING(entStart, "classname", pszName); }
|
||||
inline edict_t *FIND_ENTITY_BY_TARGETNAME(edict_t *entStart, const char *pszName) { return FIND_ENTITY_BY_STRING(entStart, "targetname", pszName); }
|
||||
|
||||
inline edict_t *FIND_ENTITY_BY_TARGETNAME(edict_t *entStart, const char *pszName)
|
||||
{
|
||||
return FIND_ENTITY_BY_STRING(entStart, "targetname", pszName);
|
||||
}
|
||||
|
||||
inline edict_t *ENT(const entvars_t *pev)
|
||||
{
|
||||
return pev->pContainingEntity;
|
||||
}
|
||||
|
||||
inline edict_t *ENT(EOFFSET eoffset)
|
||||
{
|
||||
return (*g_engfuncs.pfnPEntityOfEntOffset)(eoffset);
|
||||
}
|
||||
|
||||
inline EOFFSET OFFSET(const edict_t *pent)
|
||||
{
|
||||
return (*g_engfuncs.pfnEntOffsetOfPEntity)(pent);
|
||||
}
|
||||
|
||||
inline EOFFSET OFFSET(const entvars_t *pev)
|
||||
{
|
||||
return OFFSET(ENT(pev));
|
||||
}
|
||||
inline edict_t *ENT(const entvars_t *pev) { return pev->pContainingEntity; }
|
||||
inline edict_t *ENT(EOFFSET eoffset) { return (*g_engfuncs.pfnPEntityOfEntOffset)(eoffset); }
|
||||
inline EOFFSET OFFSET(const edict_t *pent) { return (*g_engfuncs.pfnEntOffsetOfPEntity)(pent); }
|
||||
inline EOFFSET OFFSET(const entvars_t *pev) { return OFFSET(ENT(pev)); }
|
||||
|
||||
inline entvars_t *VARS(edict_t *pent)
|
||||
{
|
||||
@ -275,69 +194,26 @@ inline entvars_t *VARS(edict_t *pent)
|
||||
return &pent->v;
|
||||
}
|
||||
|
||||
inline entvars_t *VARS(EOFFSET eoffset)
|
||||
{
|
||||
return VARS(ENT(eoffset));
|
||||
}
|
||||
|
||||
inline int ENTINDEX(const edict_t *pEdict)
|
||||
{
|
||||
return (*g_engfuncs.pfnIndexOfEdict)(pEdict);
|
||||
}
|
||||
|
||||
inline edict_t *INDEXENT(int iEdictNum)
|
||||
{
|
||||
return (*g_engfuncs.pfnPEntityOfEntIndex)(iEdictNum);
|
||||
}
|
||||
|
||||
inline void MESSAGE_BEGIN(int msg_dest, int msg_type, const float *pOrigin, entvars_t *ent)
|
||||
{
|
||||
MESSAGE_BEGIN(msg_dest, msg_type, pOrigin, ENT(ent));
|
||||
}
|
||||
|
||||
inline BOOL FNullEnt(EOFFSET eoffset)
|
||||
{
|
||||
return (eoffset == 0);
|
||||
}
|
||||
|
||||
inline BOOL FNullEnt(entvars_t *pev)
|
||||
{
|
||||
return (pev == NULL || FNullEnt(OFFSET(pev)));
|
||||
}
|
||||
|
||||
inline BOOL FNullEnt(const edict_t *pent)
|
||||
{
|
||||
return (pent == NULL || FNullEnt(OFFSET(pent)));
|
||||
}
|
||||
|
||||
inline BOOL FStringNull(int iString)
|
||||
{
|
||||
return (iString == iStringNull);
|
||||
}
|
||||
|
||||
inline BOOL FStrEq(const char *sz1, const char *sz2)
|
||||
{
|
||||
return (Q_strcmp(sz1, sz2) == 0);
|
||||
}
|
||||
|
||||
inline BOOL FClassnameIs(entvars_t *pev, const char *szClassname)
|
||||
{
|
||||
return FStrEq(STRING(pev->classname), szClassname);
|
||||
}
|
||||
|
||||
inline BOOL FClassnameIs(edict_t *pent, const char *szClassname)
|
||||
{
|
||||
// TODO: check is null?
|
||||
return FStrEq(STRING(VARS(pent)->classname), szClassname);
|
||||
}
|
||||
|
||||
inline void UTIL_MakeVectorsPrivate(Vector vecAngles, float *p_vForward, float *p_vRight, float *p_vUp)
|
||||
{
|
||||
g_engfuncs.pfnAngleVectors(vecAngles, p_vForward, p_vRight, p_vUp);
|
||||
}
|
||||
inline entvars_t *VARS(EOFFSET eoffset) { return VARS(ENT(eoffset)); }
|
||||
inline int ENTINDEX(const edict_t *pEdict) { return (*g_engfuncs.pfnIndexOfEdict)(pEdict); }
|
||||
inline edict_t *INDEXENT(int iEdictNum) { return (*g_engfuncs.pfnPEntityOfEntIndex)(iEdictNum); }
|
||||
inline void MESSAGE_BEGIN(int msg_dest, int msg_type, const float *pOrigin, entvars_t *ent) { MESSAGE_BEGIN(msg_dest, msg_type, pOrigin, ENT(ent)); }
|
||||
inline BOOL FNullEnt(EOFFSET eoffset) { return (eoffset == 0); }
|
||||
inline BOOL FNullEnt(entvars_t *pev) { return (pev == NULL || FNullEnt(OFFSET(pev))); }
|
||||
inline BOOL FNullEnt(const edict_t *pent) { return (pent == NULL || FNullEnt(OFFSET(pent))); }
|
||||
inline BOOL FStringNull(int iString) { return (iString == iStringNull); }
|
||||
inline BOOL FStrEq(const char *sz1, const char *sz2) { return (Q_strcmp(sz1, sz2) == 0); }
|
||||
inline BOOL FClassnameIs(entvars_t *pev, const char *szClassname) { return FStrEq(STRING(pev->classname), szClassname); }
|
||||
inline BOOL FClassnameIs(edict_t *pent, const char *szClassname) { return FStrEq(STRING(VARS(pent)->classname), szClassname); }
|
||||
inline void UTIL_MakeVectorsPrivate(Vector vecAngles, float *p_vForward, float *p_vRight, float *p_vUp) { g_engfuncs.pfnAngleVectors(vecAngles, p_vForward, p_vRight, p_vUp); }
|
||||
|
||||
extern void EMIT_SOUND_DYN(edict_t *entity, int channel, const char *sample, float volume, float attenuation, int flags, int pitch);
|
||||
|
||||
// NOTE: use EMIT_SOUND_DYN to set the pitch of a sound. Pitch of 100
|
||||
// is no pitch shift. Pitch > 100 up to 255 is a higher pitch, pitch < 100
|
||||
// down to 1 is a lower pitch. 150 to 70 is the realistic range.
|
||||
// EMIT_SOUND_DYN with pitch != 100 should be used sparingly, as it's not quite as
|
||||
// fast as EMIT_SOUND (the pitchshift mixer is not native coded).
|
||||
inline void EMIT_SOUND(edict_t *entity, int channel, const char *sample, float volume, float attenuation)
|
||||
{
|
||||
EMIT_SOUND_DYN(entity, channel, sample, volume, attenuation, 0, PITCH_NORM);
|
||||
@ -436,7 +312,7 @@ void UTIL_BubbleTrail(Vector from, Vector to, int count);
|
||||
void UTIL_Remove(CBaseEntity *pEntity);
|
||||
BOOL UTIL_IsValidEntity(edict_t *pent);
|
||||
void UTIL_PrecacheOther(const char *szClassname);
|
||||
void UTIL_LogPrintf(char *fmt, ...);
|
||||
void UTIL_LogPrintf(const char *fmt, ...);
|
||||
float UTIL_DotPoints(const Vector &vecSrc, const Vector &vecCheck, const Vector &vecDir);
|
||||
void UTIL_StripToken(const char *pKey, char *pDest);
|
||||
void EntvarsKeyvalue(entvars_t *pev, KeyValueData *pkvd);
|
||||
|
@ -42,7 +42,7 @@ void FixupAngles2(Vector &v)
|
||||
}
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CFuncVehicle, CBaseEntity);
|
||||
LINK_ENTITY_TO_CLASS(func_vehicle, CFuncVehicle);
|
||||
LINK_ENTITY_TO_CLASS(func_vehicle, CFuncVehicle, CCSFuncVehicle);
|
||||
|
||||
void CFuncVehicle::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
{
|
||||
@ -943,7 +943,7 @@ void CFuncVehicle::__MAKE_VHOOK(Precache)()
|
||||
m_usAdjustPitch = PRECACHE_EVENT(1, "events/vehicle.sc");
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(func_vehiclecontrols, CFuncVehicleControls);
|
||||
LINK_ENTITY_TO_CLASS(func_vehiclecontrols, CFuncVehicleControls, CCSFuncVehicleControls);
|
||||
|
||||
void CFuncVehicleControls::Find()
|
||||
{
|
||||
|
@ -63,27 +63,32 @@ MULTIDAMAGE gMultiDamage;
|
||||
// MaxAmmoCarry - 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(int iszName)
|
||||
int MaxAmmoCarry(const char *szName)
|
||||
{
|
||||
for (int i = 0; i < MAX_WEAPONS; ++i)
|
||||
{
|
||||
ItemInfo *info = &IMPL_CLASS(CBasePlayerItem, ItemInfoArray)[ i ];
|
||||
|
||||
if (info->pszAmmo1 && !Q_strcmp(STRING(iszName), info->pszAmmo1))
|
||||
if (info->pszAmmo1 && !Q_strcmp(szName, info->pszAmmo1))
|
||||
{
|
||||
return info->iMaxAmmo1;
|
||||
}
|
||||
|
||||
if (info->pszAmmo2 && !Q_strcmp(STRING(iszName), info->pszAmmo2))
|
||||
if (info->pszAmmo2 && !Q_strcmp(szName, info->pszAmmo2))
|
||||
{
|
||||
return info->iMaxAmmo2;
|
||||
}
|
||||
}
|
||||
|
||||
ALERT(at_console, "MaxAmmoCarry() doesn't recognize '%s'!\n", STRING(iszName));
|
||||
ALERT(at_console, "MaxAmmoCarry() doesn't recognize '%s'!\n", szName);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int MaxAmmoCarry(int iszName)
|
||||
{
|
||||
return MaxAmmoCarry(STRING(iszName));
|
||||
}
|
||||
|
||||
// ClearMultiDamage - resets the global multi damage accumulator
|
||||
void ClearMultiDamage()
|
||||
{
|
||||
@ -309,7 +314,9 @@ void W_Precache()
|
||||
{
|
||||
Q_memset(IMPL_CLASS(CBasePlayerItem, ItemInfoArray), 0, sizeof(IMPL_CLASS(CBasePlayerItem, ItemInfoArray)));
|
||||
Q_memset(IMPL_CLASS(CBasePlayerItem, AmmoInfoArray), 0, sizeof(IMPL_CLASS(CBasePlayerItem, AmmoInfoArray)));
|
||||
|
||||
giAmmoIndex = 0;
|
||||
WeaponInfoReset();
|
||||
|
||||
// custom items...
|
||||
|
||||
@ -1491,6 +1498,7 @@ void CBasePlayerWeapon::__MAKE_VHOOK(RetireWeapon)()
|
||||
// GetNextAttackDelay - An accurate way of calcualting the next attack time.
|
||||
float CBasePlayerWeapon::GetNextAttackDelay(float delay)
|
||||
{
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
if (m_flLastFireTime == 0.0f || m_flNextPrimaryAttack == -1.0f)
|
||||
{
|
||||
// At this point, we are assuming that the client has stopped firing
|
||||
@ -1498,6 +1506,7 @@ float CBasePlayerWeapon::GetNextAttackDelay(float delay)
|
||||
m_flPrevPrimaryAttack = delay;
|
||||
m_flLastFireTime = gpGlobals->time;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef REGAMEDLL_BUILD_6153
|
||||
|
||||
@ -1529,7 +1538,7 @@ float CBasePlayerWeapon::GetNextAttackDelay(float delay)
|
||||
return flNextAttack;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weaponbox, CWeaponBox);
|
||||
LINK_ENTITY_TO_CLASS(weaponbox, CWeaponBox, CCSWeaponBox);
|
||||
IMPLEMENT_SAVERESTORE(CWeaponBox, CBaseEntity);
|
||||
|
||||
void CWeaponBox::__MAKE_VHOOK(Precache)()
|
||||
@ -1566,7 +1575,7 @@ void CWeaponBox::BombThink()
|
||||
if (!pEntity->IsPlayer() || pEntity->IsDormant())
|
||||
continue;
|
||||
|
||||
CBasePlayer *pTempPlayer = GetClassPtr((CBasePlayer *)pEntity->pev);
|
||||
CBasePlayer *pTempPlayer = GetClassPtr<CCSPlayer>((CBasePlayer *)pEntity->pev);
|
||||
|
||||
if (pTempPlayer->pev->deadflag == DEAD_NO && pTempPlayer->m_iTeam == TERRORIST)
|
||||
{
|
||||
@ -1716,7 +1725,7 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
||||
if (pEntity->pev->flags == FL_DORMANT)
|
||||
continue;
|
||||
|
||||
CBasePlayer *pTempPlayer = GetClassPtr((CBasePlayer *)pEntity->pev);
|
||||
CBasePlayer *pTempPlayer = GetClassPtr<CCSPlayer>((CBasePlayer *)pEntity->pev);
|
||||
|
||||
if (pTempPlayer->pev->deadflag == DEAD_NO && pTempPlayer->m_iTeam == TERRORIST)
|
||||
{
|
||||
@ -1814,6 +1823,11 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
|
||||
{
|
||||
if (!FStringNull(m_rgiszAmmo[n]))
|
||||
{
|
||||
#ifdef REGAMEDLL_FIXES
|
||||
if (m_rgAmmo[n] < MaxAmmoCarry(m_rgiszAmmo[n]))
|
||||
continue;
|
||||
#endif
|
||||
|
||||
// there's some ammo of this type.
|
||||
pPlayer->GiveAmmo(m_rgAmmo[n], (char *)STRING(m_rgiszAmmo[n]), MaxAmmoCarry(m_rgiszAmmo[n]));
|
||||
|
||||
@ -1923,9 +1937,9 @@ int CWeaponBox::GiveAmmo(int iCount, char *szName, int iMax, int *pIndex)
|
||||
if (iCount == 0 || iAdd > 0)
|
||||
{
|
||||
m_rgAmmo[i] += iAdd;
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -1995,6 +2009,29 @@ void CWeaponBox::__MAKE_VHOOK(SetObjectCollisionBox)()
|
||||
pev->absmax = pev->origin + Vector(16, 16, 16);
|
||||
}
|
||||
|
||||
char *armouryItemModels[] = {
|
||||
"models/w_mp5.mdl",
|
||||
"models/w_tmp.mdl",
|
||||
"models/w_p90.mdl",
|
||||
"models/w_mac10.mdl",
|
||||
"models/w_ak47.mdl",
|
||||
"models/w_sg552.mdl",
|
||||
"models/w_m4a1.mdl",
|
||||
"models/w_aug.mdl",
|
||||
"models/w_scout.mdl",
|
||||
"models/w_g3sg1.mdl",
|
||||
"models/w_awp.mdl",
|
||||
"models/w_m3.mdl",
|
||||
"models/w_xm1014.mdl",
|
||||
"models/w_m249.mdl",
|
||||
"models/w_flashbang.mdl",
|
||||
"models/w_hegrenade.mdl",
|
||||
"models/w_kevlar.mdl",
|
||||
"models/w_assault.mdl",
|
||||
"models/w_smokegrenade.mdl",
|
||||
"models/w_kevlar.mdl",
|
||||
};
|
||||
|
||||
void CArmoury::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
Precache();
|
||||
@ -2003,31 +2040,9 @@ void CArmoury::__MAKE_VHOOK(Spawn)()
|
||||
|
||||
UTIL_SetSize(pev, Vector(-16, -16, 0), Vector(16, 16, 16));
|
||||
UTIL_SetOrigin(pev, pev->origin);
|
||||
SetTouch(&CArmoury::ArmouryTouch);
|
||||
|
||||
switch (m_iItem)
|
||||
{
|
||||
case ARMOURY_MP5NAVY: SET_MODEL(ENT(pev), "models/w_mp5.mdl"); break;
|
||||
case ARMOURY_TMP: SET_MODEL(ENT(pev), "models/w_tmp.mdl"); break;
|
||||
case ARMOURY_P90: SET_MODEL(ENT(pev), "models/w_p90.mdl"); break;
|
||||
case ARMOURY_MAC10: SET_MODEL(ENT(pev), "models/w_mac10.mdl"); break;
|
||||
case ARMOURY_AK47: SET_MODEL(ENT(pev), "models/w_ak47.mdl"); break;
|
||||
case ARMOURY_SG552: SET_MODEL(ENT(pev), "models/w_sg552.mdl"); break;
|
||||
case ARMOURY_M4A1: SET_MODEL(ENT(pev), "models/w_m4a1.mdl"); break;
|
||||
case ARMOURY_AUG: SET_MODEL(ENT(pev), "models/w_aug.mdl"); break;
|
||||
case ARMOURY_SCOUT: SET_MODEL(ENT(pev), "models/w_scout.mdl"); break;
|
||||
case ARMOURY_G3SG1: SET_MODEL(ENT(pev), "models/w_g3sg1.mdl"); break;
|
||||
case ARMOURY_AWP: SET_MODEL(ENT(pev), "models/w_awp.mdl"); break;
|
||||
case ARMOURY_M3: SET_MODEL(ENT(pev), "models/w_m3.mdl"); break;
|
||||
case ARMOURY_XM1014: SET_MODEL(ENT(pev), "models/w_xm1014.mdl"); break;
|
||||
case ARMOURY_M249: SET_MODEL(ENT(pev), "models/w_m249.mdl"); break;
|
||||
case ARMOURY_FLASHBANG: SET_MODEL(ENT(pev), "models/w_flashbang.mdl"); break;
|
||||
case ARMOURY_HEGRENADE: SET_MODEL(ENT(pev), "models/w_hegrenade.mdl"); break;
|
||||
case ARMOURY_KEVLAR: SET_MODEL(ENT(pev), "models/w_kevlar.mdl"); break;
|
||||
case ARMOURY_ASSAULT: SET_MODEL(ENT(pev), "models/w_assault.mdl"); break;
|
||||
case ARMOURY_SMOKEGRENADE: SET_MODEL(ENT(pev), "models/w_smokegrenade.mdl"); break;
|
||||
default: SET_MODEL(ENT(pev), "models/w_kevlar.mdl"); break;
|
||||
}
|
||||
SetTouch(&CArmoury::ArmouryTouch);
|
||||
SET_MODEL(ENT(pev), armouryItemModels[m_iItem]);
|
||||
|
||||
if (m_iCount <= 0)
|
||||
{
|
||||
@ -2093,31 +2108,32 @@ void CArmoury::__MAKE_VHOOK(Restart)()
|
||||
|
||||
void CArmoury::__MAKE_VHOOK(Precache)()
|
||||
{
|
||||
switch (m_iItem)
|
||||
{
|
||||
case ARMOURY_MP5NAVY: PRECACHE_MODEL("models/w_mp5.mdl"); break;
|
||||
case ARMOURY_TMP: PRECACHE_MODEL("models/w_tmp.mdl"); break;
|
||||
case ARMOURY_P90: PRECACHE_MODEL("models/w_p90.mdl"); break;
|
||||
case ARMOURY_MAC10: PRECACHE_MODEL("models/w_mac10.mdl"); break;
|
||||
case ARMOURY_AK47: PRECACHE_MODEL("models/w_ak47.mdl"); break;
|
||||
case ARMOURY_SG552: PRECACHE_MODEL("models/w_sg552.mdl"); break;
|
||||
case ARMOURY_M4A1: PRECACHE_MODEL("models/w_m4a1.mdl"); break;
|
||||
case ARMOURY_AUG: PRECACHE_MODEL("models/w_aug.mdl"); break;
|
||||
case ARMOURY_SCOUT: PRECACHE_MODEL("models/w_scout.mdl"); break;
|
||||
case ARMOURY_G3SG1: PRECACHE_MODEL("models/w_g3sg1.mdl"); break;
|
||||
case ARMOURY_AWP: PRECACHE_MODEL("models/w_awp.mdl"); break;
|
||||
case ARMOURY_M3: PRECACHE_MODEL("models/w_m3.mdl"); break;
|
||||
case ARMOURY_XM1014: PRECACHE_MODEL("models/w_xm1014.mdl"); break;
|
||||
case ARMOURY_M249: PRECACHE_MODEL("models/w_m249.mdl"); break;
|
||||
case ARMOURY_FLASHBANG: PRECACHE_MODEL("models/w_flashbang.mdl"); break;
|
||||
case ARMOURY_HEGRENADE: PRECACHE_MODEL("models/w_hegrenade.mdl"); break;
|
||||
case ARMOURY_KEVLAR: PRECACHE_MODEL("models/w_kevlar.mdl"); break;
|
||||
case ARMOURY_ASSAULT: PRECACHE_MODEL("models/w_assault.mdl"); break;
|
||||
case ARMOURY_SMOKEGRENADE: PRECACHE_MODEL("models/w_smokegrenade.mdl"); break;
|
||||
default: PRECACHE_MODEL("models/w_kevlar.mdl"); break;
|
||||
}
|
||||
PRECACHE_MODEL(armouryItemModels[m_iItem]);
|
||||
}
|
||||
|
||||
struct ArmouryItemStruct
|
||||
{
|
||||
const char *entityName;
|
||||
char *ammoName;
|
||||
int giveAmount;
|
||||
MaxAmmoType maxRounds;
|
||||
} armouryItemInfo[] = {
|
||||
{ "weapon_mp5navy", "9mm", 60, MAX_AMMO_9MM }, // ARMOURY_MP5NAVY
|
||||
{ "weapon_tmp", "9mm", 60, MAX_AMMO_9MM }, // ARMOURY_TMP
|
||||
{ "weapon_p90", "57mm", 50, MAX_AMMO_57MM }, // ARMOURY_P90
|
||||
{ "weapon_mac10", "45acp", 60, MAX_AMMO_45ACP }, // ARMOURY_MAC10
|
||||
{ "weapon_ak47", "762Nato", 60, MAX_AMMO_762NATO }, // ARMOURY_AK47
|
||||
{ "weapon_sg552", "556Nato", 60, MAX_AMMO_556NATO }, // ARMOURY_SG552
|
||||
{ "weapon_m4a1", "556Nato", 60, MAX_AMMO_556NATO }, // ARMOURY_M4A1
|
||||
{ "weapon_aug", "556Nato", 60, MAX_AMMO_556NATO }, // ARMOURY_AUG
|
||||
{ "weapon_scout", "762Nato", 30, MAX_AMMO_762NATO }, // ARMOURY_SCOUT
|
||||
{ "weapon_g3sg1", "762Nato", 30, MAX_AMMO_762NATO }, // ARMOURY_G3SG1
|
||||
{ "weapon_awp", "338Magnum", 20, MAX_AMMO_338MAGNUM }, // ARMOURY_AWP
|
||||
{ "weapon_m3", "buckshot", 24, MAX_AMMO_BUCKSHOT }, // ARMOURY_M3
|
||||
{ "weapon_xm1014", "buckshot", 24, MAX_AMMO_BUCKSHOT }, // ARMOURY_XM1014
|
||||
{ "weapon_m249", "556NatoBox", 60, MAX_AMMO_556NATOBOX }, // ARMOURY_M249
|
||||
};
|
||||
|
||||
void CArmoury::ArmouryTouch(CBaseEntity *pOther)
|
||||
{
|
||||
if (!pOther->IsPlayer())
|
||||
@ -2128,80 +2144,26 @@ void CArmoury::ArmouryTouch(CBaseEntity *pOther)
|
||||
if (p->m_bIsVIP)
|
||||
return;
|
||||
|
||||
// weapons
|
||||
if (m_iCount > 0 && m_iItem <= ARMOURY_M249)
|
||||
{
|
||||
if (p->m_bHasPrimary)
|
||||
return;
|
||||
|
||||
m_iCount--;
|
||||
auto item = &armouryItemInfo[m_iItem];
|
||||
|
||||
switch (m_iItem)
|
||||
{
|
||||
case ARMOURY_MP5NAVY:
|
||||
p->GiveNamedItem("weapon_mp5navy");
|
||||
p->GiveAmmo(60, "9mm", MAX_AMMO_9MM);
|
||||
break;
|
||||
case ARMOURY_TMP:
|
||||
p->GiveNamedItem("weapon_tmp");
|
||||
p->GiveAmmo(60, "9mm", MAX_AMMO_9MM);
|
||||
break;
|
||||
case ARMOURY_P90:
|
||||
p->GiveNamedItem("weapon_p90");
|
||||
p->GiveAmmo(50, "57mm", MAX_AMMO_57MM);
|
||||
break;
|
||||
case ARMOURY_MAC10:
|
||||
p->GiveNamedItem("weapon_mac10");
|
||||
p->GiveAmmo(60, "45acp", MAX_AMMO_45ACP);
|
||||
break;
|
||||
case ARMOURY_AK47:
|
||||
p->GiveNamedItem("weapon_ak47");
|
||||
p->GiveAmmo(60, "762Nato", MAX_AMMO_762NATO);
|
||||
break;
|
||||
case ARMOURY_SG552:
|
||||
p->GiveNamedItem("weapon_sg552");
|
||||
p->GiveAmmo(60, "556Nato", MAX_AMMO_556NATO);
|
||||
break;
|
||||
case ARMOURY_M4A1:
|
||||
p->GiveNamedItem("weapon_m4a1");
|
||||
p->GiveAmmo(60, "556Nato", MAX_AMMO_556NATO);
|
||||
break;
|
||||
case ARMOURY_AUG:
|
||||
p->GiveNamedItem("weapon_aug");
|
||||
p->GiveAmmo(60, "556Nato", MAX_AMMO_556NATO);
|
||||
break;
|
||||
case ARMOURY_SCOUT:
|
||||
p->GiveNamedItem("weapon_scout");
|
||||
p->GiveAmmo(30, "762Nato", MAX_AMMO_762NATO);
|
||||
break;
|
||||
case ARMOURY_G3SG1:
|
||||
p->GiveNamedItem("weapon_g3sg1");
|
||||
p->GiveAmmo(30, "762Nato", MAX_AMMO_762NATO);
|
||||
break;
|
||||
case ARMOURY_AWP:
|
||||
p->GiveNamedItem("weapon_awp");
|
||||
p->GiveAmmo(20, "338Magnum", MAX_AMMO_338MAGNUM);
|
||||
break;
|
||||
case ARMOURY_M3:
|
||||
p->GiveNamedItem("weapon_m3");
|
||||
p->GiveAmmo(24, "buckshot", MAX_AMMO_BUCKSHOT);
|
||||
break;
|
||||
case ARMOURY_XM1014:
|
||||
p->GiveNamedItem("weapon_xm1014");
|
||||
p->GiveAmmo(24, "buckshot", MAX_AMMO_BUCKSHOT);
|
||||
break;
|
||||
case ARMOURY_M249:
|
||||
p->GiveNamedItem("weapon_m249");
|
||||
p->GiveAmmo(60, "556NatoBox", MAX_AMMO_556NATOBOX);
|
||||
break;
|
||||
}
|
||||
p->GiveNamedItem(item->entityName);
|
||||
p->GiveAmmo(item->giveAmount, item->ammoName, item->maxRounds);
|
||||
}
|
||||
// items & grenades
|
||||
else if (m_iCount > 0 && m_iItem >= ARMOURY_FLASHBANG)
|
||||
{
|
||||
switch (m_iItem)
|
||||
{
|
||||
case ARMOURY_FLASHBANG:
|
||||
{
|
||||
if (p->AmmoInventory(p->GetAmmoIndex("Flashbang")) >= 2)
|
||||
if (p->AmmoInventory(p->GetAmmoIndex("Flashbang")) >= MaxAmmoCarry("Flashbang"))
|
||||
return;
|
||||
|
||||
p->GiveNamedItem("weapon_flashbang");
|
||||
@ -2210,7 +2172,7 @@ void CArmoury::ArmouryTouch(CBaseEntity *pOther)
|
||||
}
|
||||
case ARMOURY_HEGRENADE:
|
||||
{
|
||||
if (p->AmmoInventory(p->GetAmmoIndex("HEGrenade")) >= 1)
|
||||
if (p->AmmoInventory(p->GetAmmoIndex("HEGrenade")) >= MaxAmmoCarry("HEGrenade"))
|
||||
return;
|
||||
|
||||
p->GiveNamedItem("weapon_hegrenade");
|
||||
@ -2237,7 +2199,7 @@ void CArmoury::ArmouryTouch(CBaseEntity *pOther)
|
||||
}
|
||||
case ARMOURY_SMOKEGRENADE:
|
||||
{
|
||||
if (p->AmmoInventory(p->GetAmmoIndex("SmokeGrenade")) >= 1)
|
||||
if (p->AmmoInventory(p->GetAmmoIndex("SmokeGrenade")) >= MaxAmmoCarry("SmokeGrenade"))
|
||||
return;
|
||||
|
||||
p->GiveNamedItem("weapon_smokegrenade");
|
||||
@ -2269,4 +2231,4 @@ void CArmoury::__MAKE_VHOOK(KeyValue)(KeyValueData *pkvd)
|
||||
CBaseEntity::KeyValue(pkvd);
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(armoury_entity, CArmoury);
|
||||
LINK_ENTITY_TO_CLASS(armoury_entity, CArmoury, CCSArmoury);
|
||||
|
@ -32,9 +32,6 @@
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "weapontype.h"
|
||||
#include "wpn_shared.h"
|
||||
|
||||
class CBasePlayer;
|
||||
|
||||
#define MAX_WEAPONS 32
|
||||
@ -73,6 +70,9 @@ class CBasePlayer;
|
||||
// spawn flags
|
||||
#define SF_DETONATE 0x0001 // Grenades flagged with this will be triggered when the owner calls detonateSatchelCharges
|
||||
|
||||
#include "weapontype.h"
|
||||
#include "wpn_shared.h"
|
||||
|
||||
// custom enum
|
||||
enum ArmouryItemPack
|
||||
{
|
||||
@ -95,6 +95,7 @@ enum ArmouryItemPack
|
||||
ARMOURY_KEVLAR,
|
||||
ARMOURY_ASSAULT,
|
||||
ARMOURY_SMOKEGRENADE,
|
||||
ARMOURY_END
|
||||
};
|
||||
|
||||
struct ItemInfo
|
||||
@ -400,17 +401,17 @@ public:
|
||||
|
||||
int m_iPlayEmptySound;
|
||||
int m_fFireOnEmpty;
|
||||
float m_flNextPrimaryAttack;
|
||||
float m_flNextSecondaryAttack;
|
||||
float m_flTimeWeaponIdle;
|
||||
int m_iPrimaryAmmoType;
|
||||
int m_iSecondaryAmmoType;
|
||||
int m_iClip;
|
||||
int m_iClientClip;
|
||||
int m_iClientWeaponState;
|
||||
int m_fInReload;
|
||||
int m_fInSpecialReload;
|
||||
int m_iDefaultAmmo;
|
||||
float m_flNextPrimaryAttack; // soonest time ItemPostFrame will call PrimaryAttack
|
||||
float m_flNextSecondaryAttack; // soonest time ItemPostFrame will call SecondaryAttack
|
||||
float m_flTimeWeaponIdle; // soonest time ItemPostFrame will call WeaponIdle
|
||||
int m_iPrimaryAmmoType; // "primary" ammo index into players m_rgAmmo[]
|
||||
int m_iSecondaryAmmoType; // "secondary" ammo index into players m_rgAmmo[]
|
||||
int m_iClip; // number of shots left in the primary weapon clip, -1 it not used
|
||||
int m_iClientClip; // the last version of m_iClip sent to hud dll
|
||||
int m_iClientWeaponState; // the last version of the weapon state sent to hud dll (is current weapon, is on target)
|
||||
int m_fInReload; // Are we in the middle of a reload;
|
||||
int m_fInSpecialReload; // Are we in the middle of a reload for the shotguns
|
||||
int m_iDefaultAmmo; // how much ammo you get when you pick up this weapon as placed by a level designer.
|
||||
int m_iShellId;
|
||||
float m_fMaxSpeed;
|
||||
bool m_bDelayFire;
|
||||
@ -431,6 +432,8 @@ public:
|
||||
float m_flDecreaseShotsFired;
|
||||
unsigned short m_usFireGlock18;
|
||||
unsigned short m_usFireFamas;
|
||||
|
||||
// hle time creep vars
|
||||
float m_flPrevPrimaryAttack;
|
||||
float m_flLastFireTime;
|
||||
};
|
||||
@ -553,7 +556,7 @@ public:
|
||||
virtual int GetItemInfo(ItemInfo *p);
|
||||
virtual BOOL Deploy();
|
||||
virtual float GetMaxSpeed() { return MP5N_MAX_SPEED; }
|
||||
int iItemSlot() { return PRIMARY_WEAPON_SLOT; }
|
||||
virtual int iItemSlot() { return PRIMARY_WEAPON_SLOT; }
|
||||
virtual void PrimaryAttack();
|
||||
virtual void Reload();
|
||||
virtual void WeaponIdle();
|
||||
@ -1584,6 +1587,7 @@ public:
|
||||
|
||||
public:
|
||||
int m_iShell;
|
||||
private:
|
||||
unsigned short m_usFireELITE_LEFT;
|
||||
unsigned short m_usFireELITE_RIGHT;
|
||||
};
|
||||
@ -1672,7 +1676,6 @@ public:
|
||||
public:
|
||||
void UMP45Fire(float flSpread, float flCycleTime, BOOL fUseAutoAim);
|
||||
|
||||
public:
|
||||
int m_iShell;
|
||||
int iShellOn;
|
||||
|
||||
@ -1718,8 +1721,6 @@ public:
|
||||
|
||||
public:
|
||||
void SG550Fire(float flSpread, float flCycleTime, BOOL fUseAutoAim);
|
||||
|
||||
public:
|
||||
int m_iShell;
|
||||
|
||||
private:
|
||||
@ -1840,6 +1841,8 @@ void FindHullIntersection(const Vector &vecSrc, TraceResult &tr, float *mins, fl
|
||||
void AnnounceFlashInterval(float interval, float offset = 0);
|
||||
|
||||
int MaxAmmoCarry(int iszName);
|
||||
int MaxAmmoCarry(const char *szName);
|
||||
|
||||
void ClearMultiDamage();
|
||||
void ApplyMultiDamage(entvars_t *pevInflictor, entvars_t *pevAttacker);
|
||||
void AddMultiDamage(entvars_t *pevInflictor, CBaseEntity *pEntity, float flDamage, int bitsDamageType);
|
||||
|
@ -5,6 +5,46 @@
|
||||
*/
|
||||
#ifndef HOOK_GAMEDLL
|
||||
|
||||
WeaponStruct g_weaponStruct[ MAX_WEAPONS ] =
|
||||
{
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
|
||||
{ WEAPON_P228, P228_PRICE, TERRORIST|CT, AUTOBUYCLASS_SECONDARY, AMMO_357SIG_PRICE },
|
||||
{ WEAPON_SCOUT, SCOUT_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_762MM_PRICE },
|
||||
{ WEAPON_XM1014, XM1014_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_BUCKSHOT_PRICE },
|
||||
{ WEAPON_MAC10, MAC10_PRICE, CT, AUTOBUYCLASS_PRIMARY, AMMO_45ACP_PRICE },
|
||||
{ WEAPON_AUG, AUG_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_ELITE, ELITE_PRICE, CT, AUTOBUYCLASS_SECONDARY, AMMO_9MM_PRICE },
|
||||
{ WEAPON_FIVESEVEN, FIVESEVEN_PRICE, TERRORIST|CT, AUTOBUYCLASS_SECONDARY, AMMO_57MM_PRICE },
|
||||
{ WEAPON_UMP45, UMP45_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_45ACP_PRICE },
|
||||
{ WEAPON_SG550, SG550_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_USP, USP_PRICE, TERRORIST|CT, AUTOBUYCLASS_SECONDARY, AMMO_45ACP_PRICE },
|
||||
{ WEAPON_GLOCK18, GLOCK18_PRICE, TERRORIST|CT, AUTOBUYCLASS_SECONDARY, AMMO_9MM_PRICE },
|
||||
{ WEAPON_MP5N, MP5NAVY_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_9MM_PRICE },
|
||||
{ WEAPON_AWP, AWP_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_338MAG_PRICE },
|
||||
{ WEAPON_M249, M249_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_M3, M3_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_BUCKSHOT_PRICE },
|
||||
{ WEAPON_M4A1, M4A1_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_TMP, TMP_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_9MM_PRICE },
|
||||
{ WEAPON_G3SG1, G3SG1_PRICE, CT, AUTOBUYCLASS_PRIMARY, AMMO_762MM_PRICE },
|
||||
{ WEAPON_DEAGLE, DEAGLE_PRICE, TERRORIST|CT, AUTOBUYCLASS_SECONDARY, AMMO_50AE_PRICE },
|
||||
{ WEAPON_SG552, SG552_PRICE, CT, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_AK47, AK47_PRICE, CT, AUTOBUYCLASS_PRIMARY, AMMO_762MM_PRICE },
|
||||
{ WEAPON_P90, P90_PRICE, TERRORIST|CT, AUTOBUYCLASS_PRIMARY, AMMO_57MM_PRICE },
|
||||
{ WEAPON_FAMAS, FAMAS_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
{ WEAPON_GALIL, GALIL_PRICE, CT, AUTOBUYCLASS_PRIMARY, AMMO_556MM_PRICE },
|
||||
// TODO: this have bug, the cost of galil $2000, but not $2250
|
||||
|
||||
{ WEAPON_SHIELDGUN, SHIELDGUN_PRICE, TERRORIST, AUTOBUYCLASS_PRIMARY, 0 },
|
||||
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
AutoBuyInfoStruct g_autoBuyInfo[] =
|
||||
{
|
||||
{ AUTOBUYCLASS_PRIMARY|AUTOBUYCLASS_RIFLE, "galil", "weapon_galil" },
|
||||
@ -184,35 +224,36 @@ WeaponClassAliasInfo weaponClassAliasInfo[] =
|
||||
{ NULL, WEAPONCLASS_NONE }
|
||||
};
|
||||
|
||||
WeaponInfoStruct weaponInfo[] =
|
||||
WeaponInfoStruct weaponInfo[27];
|
||||
WeaponInfoStruct weaponInfo_default[] =
|
||||
{
|
||||
{ WEAPON_P228, P228_PRICE, AMMO_357SIG_PRICE, AMMO_357SIG_BUY, P228_MAX_CLIP, MAX_AMMO_357SIG, AMMO_357SIG, "weapon_p228" },
|
||||
{ WEAPON_GLOCK, GLOCK18_PRICE, AMMO_9MM_PRICE, AMMO_9MM_BUY, GLOCK18_MAX_CLIP, MAX_AMMO_9MM, AMMO_9MM, "weapon_glock18" },
|
||||
{ WEAPON_GLOCK18, GLOCK18_PRICE, AMMO_9MM_PRICE, AMMO_9MM_BUY, GLOCK18_MAX_CLIP, MAX_AMMO_9MM, AMMO_9MM, "weapon_glock18" },
|
||||
{ WEAPON_SCOUT, SCOUT_PRICE, AMMO_762MM_PRICE, AMMO_762NATO_BUY, SCOUT_MAX_CLIP, MAX_AMMO_762NATO, AMMO_762NATO, "weapon_scout" },
|
||||
{ WEAPON_XM1014, XM1014_PRICE, AMMO_BUCKSHOT_PRICE, AMMO_BUCKSHOT_BUY, XM1014_MAX_CLIP, MAX_AMMO_BUCKSHOT, AMMO_BUCKSHOT, "weapon_xm1014" },
|
||||
{ WEAPON_MAC10, MAC10_PRICE, AMMO_45ACP_PRICE, AMMO_45ACP_BUY, MAC10_MAX_CLIP, MAX_AMMO_45ACP, AMMO_45ACP, "weapon_mac10" },
|
||||
{ WEAPON_AUG, AUG_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, AUG_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_aug" },
|
||||
{ WEAPON_ELITE, ELITE_PRICE, AMMO_9MM_PRICE, AMMO_9MM_BUY, ELITE_MAX_CLIP, MAX_AMMO_9MM, AMMO_9MM, "weapon_elite" },
|
||||
{ WEAPON_FIVESEVEN, FIVESEVEN_PRICE, AMMO_57MM_PRICE, AMMO_57MM_BUY, FIVESEVEN_MAX_CLIP, MAX_AMMO_57MM, AMMO_57MM, "weapon_fiveseven" },
|
||||
{ WEAPON_UMP45, UMP45_PRICE, AMMO_45ACP_PRICE, AMMO_45ACP_BUY, UMP45_MAX_CLIP, MAX_AMMO_45ACP, AMMO_45ACP, "weapon_ump45" },
|
||||
{ WEAPON_SG550, SG550_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, SG550_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_sg550" },
|
||||
{ WEAPON_GALIL, GALIL_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, GALIL_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_galil" },
|
||||
{ WEAPON_FAMAS, FAMAS_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, FAMAS_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_famas" },
|
||||
{ WEAPON_USP, USP_PRICE, AMMO_45ACP_PRICE, AMMO_45ACP_BUY, USP_MAX_CLIP, MAX_AMMO_45ACP, AMMO_45ACP, "weapon_usp" },
|
||||
{ WEAPON_AWP, AWP_PRICE, AMMO_338MAG_PRICE, AMMO_338MAG_BUY, AWP_MAX_CLIP, MAX_AMMO_338MAGNUM, AMMO_338MAGNUM, "weapon_awp" },
|
||||
{ WEAPON_MP5N, MP5NAVY_PRICE, AMMO_9MM_PRICE, AMMO_9MM_BUY, MP5N_MAX_CLIP, MAX_AMMO_9MM, AMMO_9MM, "weapon_mp5navy" },
|
||||
{ WEAPON_M249, M249_PRICE, AMMO_556MM_PRICE, AMMO_556NATOBOX_BUY, M249_MAX_CLIP, MAX_AMMO_556NATOBOX, AMMO_556NATOBOX, "weapon_m249" },
|
||||
{ WEAPON_M3, M3_PRICE, AMMO_BUCKSHOT_PRICE, AMMO_BUCKSHOT_BUY, M3_MAX_CLIP, MAX_AMMO_BUCKSHOT, AMMO_BUCKSHOT, "weapon_m3" },
|
||||
{ WEAPON_M4A1, M4A1_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, M4A1_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_m4a1" },
|
||||
{ WEAPON_TMP, TMP_PRICE, AMMO_9MM_PRICE, AMMO_9MM_BUY, TMP_MAX_CLIP, MAX_AMMO_9MM, AMMO_9MM, "weapon_tmp" },
|
||||
{ WEAPON_G3SG1, G3SG1_PRICE, AMMO_762MM_PRICE, AMMO_762NATO_BUY, G3SG1_MAX_CLIP, MAX_AMMO_762NATO, AMMO_762NATO, "weapon_g3sg1" },
|
||||
{ WEAPON_DEAGLE, DEAGLE_PRICE, AMMO_50AE_PRICE, AMMO_50AE_BUY, DEAGLE_MAX_CLIP, MAX_AMMO_50AE, AMMO_50AE, "weapon_deagle" },
|
||||
{ WEAPON_SG552, SG552_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, SG552_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_sg552" },
|
||||
{ WEAPON_AK47, AK47_PRICE, AMMO_762MM_PRICE, AMMO_762NATO_BUY, AK47_MAX_CLIP, MAX_AMMO_762NATO, AMMO_762NATO, "weapon_ak47" },
|
||||
{ WEAPON_P90, P90_PRICE, AMMO_57MM_PRICE, AMMO_57MM_BUY, P90_MAX_CLIP, MAX_AMMO_57MM, AMMO_57MM, "weapon_p90" },
|
||||
{ WEAPON_SHIELDGUN, SHIELDGUN_PRICE, 0, 0, 0, 0, -1, NULL },
|
||||
{ 0, 0, 0, 0, 0, 0, -1, NULL }
|
||||
{ WEAPON_P228, P228_PRICE, AMMO_357SIG_PRICE, AMMO_357SIG_BUY, P228_MAX_CLIP, MAX_AMMO_357SIG, AMMO_357SIG, "weapon_p228", "ammo_357sig" },
|
||||
{ WEAPON_GLOCK, GLOCK18_PRICE, AMMO_9MM_PRICE, AMMO_9MM_BUY, GLOCK18_MAX_CLIP, MAX_AMMO_9MM, AMMO_9MM, "weapon_glock18", "ammo_9mm" },
|
||||
{ WEAPON_GLOCK18, GLOCK18_PRICE, AMMO_9MM_PRICE, AMMO_9MM_BUY, GLOCK18_MAX_CLIP, MAX_AMMO_9MM, AMMO_9MM, "weapon_glock18", "ammo_9mm" },
|
||||
{ WEAPON_SCOUT, SCOUT_PRICE, AMMO_762MM_PRICE, AMMO_762NATO_BUY, SCOUT_MAX_CLIP, MAX_AMMO_762NATO, AMMO_762NATO, "weapon_scout", "ammo_762nato" },
|
||||
{ WEAPON_XM1014, XM1014_PRICE, AMMO_BUCKSHOT_PRICE, AMMO_BUCKSHOT_BUY, XM1014_MAX_CLIP, MAX_AMMO_BUCKSHOT, AMMO_BUCKSHOT, "weapon_xm1014", "ammo_buckshot" },
|
||||
{ WEAPON_MAC10, MAC10_PRICE, AMMO_45ACP_PRICE, AMMO_45ACP_BUY, MAC10_MAX_CLIP, MAX_AMMO_45ACP, AMMO_45ACP, "weapon_mac10", "ammo_45acp" },
|
||||
{ WEAPON_AUG, AUG_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, AUG_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_aug", "ammo_556nato" },
|
||||
{ WEAPON_ELITE, ELITE_PRICE, AMMO_9MM_PRICE, AMMO_9MM_BUY, ELITE_MAX_CLIP, MAX_AMMO_9MM, AMMO_9MM, "weapon_elite", "ammo_ammo_9mm" },
|
||||
{ WEAPON_FIVESEVEN, FIVESEVEN_PRICE, AMMO_57MM_PRICE, AMMO_57MM_BUY, FIVESEVEN_MAX_CLIP, MAX_AMMO_57MM, AMMO_57MM, "weapon_fiveseven", "ammo_57mm" },
|
||||
{ WEAPON_UMP45, UMP45_PRICE, AMMO_45ACP_PRICE, AMMO_45ACP_BUY, UMP45_MAX_CLIP, MAX_AMMO_45ACP, AMMO_45ACP, "weapon_ump45", "ammo_45acp" },
|
||||
{ WEAPON_SG550, SG550_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, SG550_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_sg550", "ammo_556nato" },
|
||||
{ WEAPON_GALIL, GALIL_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, GALIL_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_galil", "ammo_556nato" },
|
||||
{ WEAPON_FAMAS, FAMAS_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, FAMAS_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_famas", "ammo_556nato" },
|
||||
{ WEAPON_USP, USP_PRICE, AMMO_45ACP_PRICE, AMMO_45ACP_BUY, USP_MAX_CLIP, MAX_AMMO_45ACP, AMMO_45ACP, "weapon_usp", "ammo_45acp" },
|
||||
{ WEAPON_AWP, AWP_PRICE, AMMO_338MAG_PRICE, AMMO_338MAG_BUY, AWP_MAX_CLIP, MAX_AMMO_338MAGNUM, AMMO_338MAGNUM, "weapon_awp", "ammo_338magnum" },
|
||||
{ WEAPON_MP5N, MP5NAVY_PRICE, AMMO_9MM_PRICE, AMMO_9MM_BUY, MP5N_MAX_CLIP, MAX_AMMO_9MM, AMMO_9MM, "weapon_mp5navy", "ammo_9mm" },
|
||||
{ WEAPON_M249, M249_PRICE, AMMO_556MM_PRICE, AMMO_556NATOBOX_BUY, M249_MAX_CLIP, MAX_AMMO_556NATOBOX, AMMO_556NATOBOX, "weapon_m249", "ammo_556natobox" },
|
||||
{ WEAPON_M3, M3_PRICE, AMMO_BUCKSHOT_PRICE, AMMO_BUCKSHOT_BUY, M3_MAX_CLIP, MAX_AMMO_BUCKSHOT, AMMO_BUCKSHOT, "weapon_m3", "ammo_buckshot" },
|
||||
{ WEAPON_M4A1, M4A1_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, M4A1_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_m4a1", "ammo_556nato" },
|
||||
{ WEAPON_TMP, TMP_PRICE, AMMO_9MM_PRICE, AMMO_9MM_BUY, TMP_MAX_CLIP, MAX_AMMO_9MM, AMMO_9MM, "weapon_tmp", "ammo_9mm" },
|
||||
{ WEAPON_G3SG1, G3SG1_PRICE, AMMO_762MM_PRICE, AMMO_762NATO_BUY, G3SG1_MAX_CLIP, MAX_AMMO_762NATO, AMMO_762NATO, "weapon_g3sg1", "ammo_762nato" },
|
||||
{ WEAPON_DEAGLE, DEAGLE_PRICE, AMMO_50AE_PRICE, AMMO_50AE_BUY, DEAGLE_MAX_CLIP, MAX_AMMO_50AE, AMMO_50AE, "weapon_deagle", "ammo_50ae" },
|
||||
{ WEAPON_SG552, SG552_PRICE, AMMO_556MM_PRICE, AMMO_556NATO_BUY, SG552_MAX_CLIP, MAX_AMMO_556NATO, AMMO_556NATO, "weapon_sg552", "ammo_556nato" },
|
||||
{ WEAPON_AK47, AK47_PRICE, AMMO_762MM_PRICE, AMMO_762NATO_BUY, AK47_MAX_CLIP, MAX_AMMO_762NATO, AMMO_762NATO, "weapon_ak47", "ammo_762nato" },
|
||||
{ WEAPON_P90, P90_PRICE, AMMO_57MM_PRICE, AMMO_57MM_BUY, P90_MAX_CLIP, MAX_AMMO_57MM, AMMO_57MM, "weapon_p90", "ammo_57mm" },
|
||||
{ WEAPON_SHIELDGUN, SHIELDGUN_PRICE, 0, 0, 0, 0, AMMO_NONE, "weapon_shield", nullptr },
|
||||
{ 0, 0, 0, 0, 0, 0, AMMO_NONE, nullptr, nullptr }
|
||||
};
|
||||
|
||||
#endif // HOOK_GAMEDLL
|
||||
@ -332,7 +373,7 @@ bool IsSecondaryWeapon(int id)
|
||||
return false;
|
||||
}
|
||||
|
||||
WeaponInfoStruct *GetWeaponInfo(int weaponID)
|
||||
WeaponInfoStruct *EXT_FUNC GetWeaponInfo(int weaponID)
|
||||
{
|
||||
for (int i = 0; weaponInfo[i].id != 0; ++i)
|
||||
{
|
||||
@ -343,6 +384,13 @@ WeaponInfoStruct *GetWeaponInfo(int weaponID)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void WeaponInfoReset()
|
||||
{
|
||||
#ifndef HOOK_GAMEDLL
|
||||
Q_memcpy(weaponInfo, weaponInfo_default, sizeof(weaponInfo));
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CanBuyWeaponByMaptype(int playerTeam, WeaponIdType weaponID, bool useAssasinationRestrictions)
|
||||
{
|
||||
if (useAssasinationRestrictions)
|
||||
|
@ -256,6 +256,7 @@ enum MaxAmmoType
|
||||
|
||||
enum AmmoType
|
||||
{
|
||||
AMMO_NONE = -1,
|
||||
AMMO_BUCKSHOT,
|
||||
AMMO_9MM,
|
||||
AMMO_556NATO,
|
||||
@ -359,6 +360,15 @@ enum Bullet
|
||||
BULLET_PLAYER_357SIG,
|
||||
};
|
||||
|
||||
struct WeaponStruct
|
||||
{
|
||||
int m_type;
|
||||
int m_price;
|
||||
int m_side;
|
||||
int m_slot;
|
||||
int m_ammoPrice;
|
||||
};
|
||||
|
||||
struct AutoBuyInfoStruct
|
||||
{
|
||||
AutoBuyClassType m_class;
|
||||
@ -393,11 +403,17 @@ struct WeaponInfoStruct
|
||||
int buyClipSize;
|
||||
int gunClipSize;
|
||||
int maxRounds;
|
||||
int ammoType;
|
||||
AmmoType ammoType;
|
||||
char *entityName;
|
||||
|
||||
#ifndef HOOK_GAMEDLL
|
||||
const char *ammoName;
|
||||
#endif
|
||||
};
|
||||
|
||||
extern AutoBuyInfoStruct g_autoBuyInfo[35];
|
||||
extern WeaponStruct g_weaponStruct[MAX_WEAPONS];
|
||||
extern WeaponInfoStruct weaponInfo[27];
|
||||
|
||||
// WeaponType
|
||||
WeaponIdType AliasToWeaponID(const char *alias);
|
||||
@ -409,5 +425,6 @@ bool IsPrimaryWeapon(int id);
|
||||
bool IsSecondaryWeapon(int id);
|
||||
WeaponInfoStruct *GetWeaponInfo(int weaponID);
|
||||
bool CanBuyWeaponByMaptype(int playerTeam, WeaponIdType weaponID, bool useAssasinationRestrictions);
|
||||
void WeaponInfoReset();
|
||||
|
||||
#endif // WEAPONTYPE_H
|
||||
|
@ -80,7 +80,7 @@ public:
|
||||
void EXPORT TriggerDecal(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS(infodecal, CDecal);
|
||||
LINK_ENTITY_TO_CLASS(infodecal, CDecal, CCSDecal);
|
||||
|
||||
void CDecal::Spawn()
|
||||
{
|
||||
@ -173,7 +173,7 @@ public:
|
||||
virtual int ObjectCaps() { return FCAP_DONT_SAVE; }
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS(bodyque, CCorpse);
|
||||
LINK_ENTITY_TO_CLASS(bodyque, CCorpse, CCSCorpse);
|
||||
|
||||
static void InitBodyQue()
|
||||
{
|
||||
@ -410,7 +410,12 @@ void EXT_FUNC ResetGlobalState()
|
||||
gInitHUD = TRUE;
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS(worldspawn, CWorld);
|
||||
#pragma push_macro("REGAMEDLL_ALLOC_FUNC")
|
||||
#define REGAMEDLL_ALLOC_FUNC Regamedll_AllocEntities(gpGlobals->maxEntities);
|
||||
|
||||
LINK_ENTITY_TO_CLASS(worldspawn, CWorld, CCSWorld);
|
||||
|
||||
#pragma pop_macro("REGAMEDLL_ALLOC_FUNC")
|
||||
|
||||
void CWorld::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
@ -425,7 +430,7 @@ void CWorld::__MAKE_VHOOK(Spawn)()
|
||||
int flength = 0;
|
||||
char *pFile = (char *)LOAD_FILE_FOR_ME(UTIL_VarArgs("maps/%s.txt", STRING(gpGlobals->mapname)), &flength);
|
||||
|
||||
if (pFile && flength != NULL)
|
||||
if (pFile != NULL && flength)
|
||||
{
|
||||
Q_strncpy(g_szMapBriefingText, pFile, ARRAYSIZE(g_szMapBriefingText) - 2);
|
||||
|
||||
@ -475,11 +480,13 @@ void CWorld::__MAKE_VHOOK(Precache)()
|
||||
|
||||
g_pGameRules = InstallGameRules();
|
||||
|
||||
// s1lent: What is the essence of soundent in CS 1.6? I think this is for NPC monsters.
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
// UNDONE why is there so much Spawn code in the Precache function? I'll just keep it here
|
||||
|
||||
// LATER - do we want a sound ent in deathmatch? (sjb)
|
||||
//pSoundEnt = CBaseEntity::Create("soundent", g_vecZero, g_vecZero, edict());
|
||||
pSoundEnt = GetClassPtr((CSoundEnt *)NULL);
|
||||
pSoundEnt = GetClassPtr<CCSSoundEnt>((CSoundEnt *)NULL);
|
||||
|
||||
if (pSoundEnt == NULL)
|
||||
{
|
||||
@ -489,7 +496,7 @@ void CWorld::__MAKE_VHOOK(Precache)()
|
||||
{
|
||||
pSoundEnt->Spawn();
|
||||
}
|
||||
|
||||
#endif
|
||||
InitBodyQue();
|
||||
|
||||
// init sentence group playback stuff from sentences.txt.
|
||||
@ -593,6 +600,7 @@ void CWorld::__MAKE_VHOOK(Precache)()
|
||||
for (int i = 0; i < ARRAYSIZE(gDecals); ++i)
|
||||
gDecals[i].index = DECAL_INDEX(gDecals[i].name);
|
||||
|
||||
#ifndef REGAMEDLL_FIXES
|
||||
// init the WorldGraph.
|
||||
WorldGraph.InitGraph();
|
||||
|
||||
@ -616,6 +624,7 @@ void CWorld::__MAKE_VHOOK(Precache)()
|
||||
ALERT(at_console, "\n*Graph Loaded!\n");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (pev->speed > 0)
|
||||
CVAR_SET_FLOAT("sv_zmax", pev->speed);
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_ak47, CAK47);
|
||||
LINK_ENTITY_TO_CLASS(weapon_ak47, CAK47, CCSAK47);
|
||||
|
||||
void CAK47::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_aug, CAUG);
|
||||
LINK_ENTITY_TO_CLASS(weapon_aug, CAUG, CCSAUG);
|
||||
|
||||
void CAUG::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_awp, CAWP);
|
||||
LINK_ENTITY_TO_CLASS(weapon_awp, CAWP, CCSAWP);
|
||||
|
||||
void CAWP::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_c4, CC4);
|
||||
LINK_ENTITY_TO_CLASS(weapon_c4, CC4, CCSC4);
|
||||
|
||||
void CC4::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_deagle, CDEAGLE);
|
||||
LINK_ENTITY_TO_CLASS(weapon_deagle, CDEAGLE, CCSDEAGLE);
|
||||
|
||||
void CDEAGLE::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_elite, CELITE);
|
||||
LINK_ENTITY_TO_CLASS(weapon_elite, CELITE, CCSELITE);
|
||||
|
||||
void CELITE::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_famas, CFamas);
|
||||
LINK_ENTITY_TO_CLASS(weapon_famas, CFamas, CCSFamas);
|
||||
|
||||
void CFamas::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_fiveseven, CFiveSeven);
|
||||
LINK_ENTITY_TO_CLASS(weapon_fiveseven, CFiveSeven, CCSFiveSeven);
|
||||
|
||||
void CFiveSeven::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_flashbang, CFlashbang);
|
||||
LINK_ENTITY_TO_CLASS(weapon_flashbang, CFlashbang, CCSFlashbang);
|
||||
|
||||
void CFlashbang::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_g3sg1, CG3SG1);
|
||||
LINK_ENTITY_TO_CLASS(weapon_g3sg1, CG3SG1, CCSG3SG1);
|
||||
|
||||
void CG3SG1::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_galil, CGalil);
|
||||
LINK_ENTITY_TO_CLASS(weapon_galil, CGalil, CCSGalil);
|
||||
|
||||
void CGalil::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_glock18, CGLOCK18);
|
||||
LINK_ENTITY_TO_CLASS(weapon_glock18, CGLOCK18, CCSGLOCK18);
|
||||
|
||||
void CGLOCK18::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_hegrenade, CHEGrenade);
|
||||
LINK_ENTITY_TO_CLASS(weapon_hegrenade, CHEGrenade, CCSHEGrenade);
|
||||
|
||||
void CHEGrenade::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_knife, CKnife);
|
||||
LINK_ENTITY_TO_CLASS(weapon_knife, CKnife, CCSKnife);
|
||||
|
||||
void CKnife::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_m249, CM249);
|
||||
LINK_ENTITY_TO_CLASS(weapon_m249, CM249, CCSM249);
|
||||
|
||||
void CM249::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_m3, CM3);
|
||||
LINK_ENTITY_TO_CLASS(weapon_m3, CM3, CCSM3);
|
||||
|
||||
void CM3::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_m4a1, CM4A1);
|
||||
LINK_ENTITY_TO_CLASS(weapon_m4a1, CM4A1, CCSM4A1);
|
||||
|
||||
void CM4A1::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_mac10, CMAC10);
|
||||
LINK_ENTITY_TO_CLASS(weapon_mac10, CMAC10, CCSMAC10);
|
||||
|
||||
void CMAC10::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_mp5navy, CMP5N);
|
||||
LINK_ENTITY_TO_CLASS(weapon_mp5navy, CMP5N, CCSMP5N);
|
||||
|
||||
void CMP5N::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS(weapon_p228, CP228);
|
||||
LINK_ENTITY_TO_CLASS(weapon_p228, CP228, CCSP228);
|
||||
|
||||
void CP228::__MAKE_VHOOK(Spawn)()
|
||||
{
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user