Fix linux compilation

cleanup
fixed offset some of a members of the class
Reversed CRecharge, CCStrikeGameMgrHelper, CVoiceGameMgr
This commit is contained in:
s1lentq 2015-07-02 03:22:46 +06:00
parent 56c2cb635f
commit c35c7c60b3
48 changed files with 1169 additions and 675 deletions

View File

@ -125,7 +125,7 @@ void setupToolchain(NativeBinarySpec b) {
}
b.lib LazyNativeDepSet.create(dep_bzip2, 'bzip2', b.buildType.name, true)
cfg.singleDefines 'USE_BREAKPAD_HANDLER', 'DEDICATED', 'REGAMEDLL_SELF'
cfg.singleDefines 'USE_BREAKPAD_HANDLER', 'DEDICATED', 'REGAMEDLL_SELF', 'HOOK_GAMEDLL'
if (cfg instanceof MsvcToolchainConfig) {
@ -168,9 +168,13 @@ void setupToolchain(NativeBinarySpec b) {
// TODO: check it
//if (!unitTestExecutable && !mpLib) {
cfg.singleDefines 'HOOK_GAMEDLL'
// cfg.singleDefines 'HOOK_GAMEDLL'
//}
if (unitTestExecutable) {
cfg.singleDefines 'REGAMEDLL_UNIT_TESTS'
}
if (regamedllFixes) {
cfg.singleDefines 'REGAMEDLL_FIXES', 'REGAMEDLL_CHECKS'
}

View File

@ -175,16 +175,6 @@ typedef struct mleaf_s
byte ambient_sound_level[ NUM_AMBIENTS ];
} mleaf_t;
#ifdef CUSTOM_H
void da(void)
{
;
}
#endif// TI_LOX
struct msurface_s
{
int visframe; // should be drawn when node is crossed

View File

@ -1297,7 +1297,6 @@ private:
};/* size: 8, cachelines: 1, members: 2 */
/* <5a0af3> ../cstrike/dlls/bot/cs_bot.h:1114 */
class PathCost
{
@ -1396,7 +1395,84 @@ public:
private:
CCSBot *m_bot;
RouteType m_route;
};
};/* size: 8, cachelines: 1, members: 2 */
/* <568fae> ../cstrike/dlls/bot/states/cs_bot_follow.cpp:95 */
class FollowTargetCollector
{
public:
FollowTargetCollector(CBasePlayer *player)
{
m_player = player;
Vector playerVel = player->pev->velocity;
m_forward.x = playerVel.x;
m_forward.y = playerVel.y;
float speed = m_forward.NormalizeInPlace();
Vector playerOrigin = player->pev->origin;
const float walkSpeed = 100.0f;
if (speed < walkSpeed)
{
m_cutoff.x = playerOrigin.x;
m_cutoff.y = playerOrigin.y;
m_forward.x = 0.0f;
m_forward.y = 0.0f;
}
else
{
const float k = 1.5f; // 2.0f;
float trimSpeed = min(speed, 200.0f);
m_cutoff.x = playerOrigin.x + k * trimSpeed * m_forward.x;
m_cutoff.y = playerOrigin.y + k * trimSpeed * m_forward.y;
}
m_targetAreaCount = 0;
}
enum { MAX_TARGET_AREAS = 128 };
/* <568dc3> ../cstrike/dlls/bot/states/cs_bot_follow.cpp:124 */
bool operator()(CNavArea *area)
{
if (m_targetAreaCount >= MAX_TARGET_AREAS)
return false;
// only use two-way connections
if (!area->GetParent() || area->IsConnected(area->GetParent(), NUM_DIRECTIONS))
{
if (m_forward.IsZero())
{
m_targetArea[ m_targetAreaCount++ ] = area;
}
else
{
// collect areas in the direction of the player's forward motion
Vector2D to(((*area->GetCenter()).x - m_cutoff.x), (*area->GetCenter()).y - m_cutoff.y);
to.NormalizeInPlace();
//if (DotProduct( to, m_forward ) > 0.7071f)
if ((to.x * m_forward.x + to.y * m_forward.y) > 0.7071f)
m_targetArea[ m_targetAreaCount++ ] = area;
}
}
return (m_targetAreaCount < MAX_TARGET_AREAS);
}
CBasePlayer *m_player;
Vector2D m_forward;
Vector2D m_cutoff;
CNavArea *m_targetArea[ MAX_TARGET_AREAS ];
int m_targetAreaCount;
};/* size: 536, cachelines: 9, members: 5 */
#ifdef HOOK_GAMEDLL

View File

@ -387,7 +387,7 @@ public:
NOBODY static void MonitorBotCVars(void);
NOBODY static void MaintainBotQuota(void);
NOBODY static bool AddBot(BotProfile *profile, BotProfileTeamType team);
NOBODY static bool BotAddCommand(BotProfileTeamType, bool isFromConsole);
NOBODY static bool BotAddCommand(BotProfileTeamType team, bool isFromConsole);
#ifndef HOOK_GAMEDLL
private:

View File

@ -26,83 +26,6 @@ NOBODY void FollowState::ComputeLeaderMotionState(float leaderSpeed)
// }
}
/* <568fae> ../cstrike/dlls/bot/states/cs_bot_follow.cpp:95 */
class FollowTargetCollector
{
public:
FollowTargetCollector(CBasePlayer *player)
{
m_player = player;
Vector playerVel = player->pev->velocity;
m_forward.x = playerVel.x;
m_forward.y = playerVel.y;
float speed = m_forward.NormalizeInPlace();
Vector playerOrigin = player->pev->origin;
const float walkSpeed = 100.0f;
if (speed < walkSpeed)
{
m_cutoff.x = playerOrigin.x;
m_cutoff.y = playerOrigin.y;
m_forward.x = 0.0f;
m_forward.y = 0.0f;
}
else
{
const float k = 1.5f; // 2.0f;
float trimSpeed = min(speed, 200.0f);
m_cutoff.x = playerOrigin.x + k * trimSpeed * m_forward.x;
m_cutoff.y = playerOrigin.y + k * trimSpeed * m_forward.y;
}
m_targetAreaCount = 0;
}
enum { MAX_TARGET_AREAS = 128 };
/* <568dc3> ../cstrike/dlls/bot/states/cs_bot_follow.cpp:124 */
bool operator()(CNavArea *area)
{
if (m_targetAreaCount >= MAX_TARGET_AREAS)
return false;
// only use two-way connections
if (!area->GetParent() || area->IsConnected(area->GetParent(), NUM_DIRECTIONS))
{
if (m_forward.IsZero())
{
m_targetArea[ m_targetAreaCount++ ] = area;
}
else
{
// collect areas in the direction of the player's forward motion
Vector2D to(((*area->GetCenter()).x - m_cutoff.x), (*area->GetCenter()).y - m_cutoff.y);
to.NormalizeInPlace();
//if (DotProduct( to, m_forward ) > 0.7071f)
if ((to.x * m_forward.x + to.y * m_forward.y) > 0.7071f)
m_targetArea[ m_targetAreaCount++ ] = area;
}
}
return (m_targetAreaCount < MAX_TARGET_AREAS);
}
CBasePlayer *m_player;
Vector2D m_forward;
Vector2D m_cutoff;
CNavArea *m_targetArea[ MAX_TARGET_AREAS ];
int m_targetAreaCount;
};/* size: 536, cachelines: 9, members: 5 */
/* <569368> ../cstrike/dlls/bot/states/cs_bot_follow.cpp:164 */
NOBODY void FollowState::OnUpdate(CCSBot *me)
{

View File

@ -74,7 +74,6 @@ public:
void SendPartialNotification(void);
private:
//int ()(void) * * _vptr.CCareerTask;
bool m_isComplete;
const char *m_name;
@ -95,13 +94,15 @@ private:
typedef std::list<CCareerTask *> CareerTaskList;
/* <1efed1> ../cstrike/dlls/career_tasks.cpp:636 */
class CCareerTaskManager
{
public:
CCareerTaskManager(void);
public:
void Create(void);
static void Create(void);
void Reset(bool deleteTasks);
void AddTask(const char *taskName, const char *weaponName, int eventCount, bool mustLive, bool crossRounds, bool isComplete);
@ -138,19 +139,17 @@ public:
void UnlatchRoundEndMessage(void);
private:
CareerTaskList m_tasks; // Lin - 0 | Win - 0
#if defined(_WIN32) && defined(HOOK_GAMEDLL)
// TODO: std::list have be size with 12 on platform Windows
int padding_std_list_size_12;
int unknown_padding1;
#endif // HOOK_GAMEDLL
int m_nextId; // Lin - 8 | Win - 12
float m_roundStartTime; // Lin - 12 | Win - 16
int m_taskTime; // Lin - 16 | Win - 20
int m_finishedTaskTime; // Lin - 20 | Win - 24
CareerTaskList m_tasks;
int m_nextId;
float m_roundStartTime;
int m_taskTime;
int m_finishedTaskTime;
int m_finishedTaskRound;
GameEventType m_roundEndMessage;
@ -168,6 +167,7 @@ struct TaskInfo
};/* size: 12, cachelines: 1, members: 3 */
/* <1ef56d> ../cstrike/dlls/career_tasks.cpp:139 */
class CPreventDefuseTask: public CCareerTask
{
public:

View File

@ -430,7 +430,7 @@ public:
}
virtual BOOL ReflectGauss(void)
{
return (IsBSPModel() && pev->takedamage == 0.0f);
return (IsBSPModel() && pev->takedamage == DAMAGE_NO);
}
virtual BOOL HasTarget(string_t targetname)
{
@ -667,7 +667,10 @@ class CPointEntity: public CBaseEntity
{
public:
NOBODY virtual void Spawn(void);
NOBODY virtual int ObjectCaps(void);
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
#ifdef HOOK_GAMEDLL
@ -918,17 +921,12 @@ public:
int Restore_(CRestore &restore);
int ObjectCaps_(void)
{
if(pev->takedamage == 0.0f)
if(pev->takedamage == DAMAGE_NO)
return FCAP_IMPULSE_USE;
return (CBaseToggle::ObjectCaps() & ~FCAP_ACROSS_TRANSITION);
}
#endif // HOOK_GAMEDLL
public:

View File

@ -98,6 +98,9 @@ NOBODY void CBaseDoor::SetToggleState_(int state)
// int state); // 350
}
#define noiseMoving noise1
#define noiseArrived noise2
/* <6924c> ../cstrike/dlls/doors.cpp:359 */
NOBODY void CBaseDoor::Precache_(void)
{

View File

@ -32,9 +32,6 @@
#pragma once
#endif
#define noiseMoving noise1
#define noiseArrived noise2
#define DOOR_SENTENCEWAIT 6
#define DOOR_SOUNDWAIT 3
#define BUTTON_SOUNDWAIT 0.5

View File

@ -79,12 +79,6 @@ LINK_ENTITY_TO_CLASS(env_bubbles, CBubbling);
/* <741e0> ../cstrike/dlls/effects.cpp:68 */
IMPLEMENT_SAVERESTORE(CBubbling, CBaseEntity);
/* <73427> ../cstrike/dlls/effects.cpp:48 */
NOBODY int CBubbling::ObjectCaps_(void)
{
return 0;
}
/* <7344d> ../cstrike/dlls/effects.cpp:73 */
NOBODY void CBubbling::Spawn_(void)
{
@ -1245,11 +1239,6 @@ int CSprite::Restore(CRestore &restore)
return Restore_(restore);
}
int CSprite::ObjectCaps(void)
{
return ObjectCaps_();
}
void CSprite::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
{
Use_(pActivator, pCaller, useType, value);
@ -1265,16 +1254,6 @@ void CBeam::Precache(void)
Precache_();
}
int CBeam::ObjectCaps(void)
{
return ObjectCaps_();
}
Vector CBeam::Center(void)
{
return Center_();
}
void CLaser::Spawn(void)
{
Spawn_();
@ -1330,11 +1309,6 @@ int CBubbling::Restore(CRestore &restore)
return Restore_(restore);
}
int CBubbling::ObjectCaps(void)
{
return ObjectCaps_();
}
void CBubbling::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
{
Use_(pActivator, pCaller, useType, value);

View File

@ -77,14 +77,10 @@ public:
NOBODY virtual void Restart(void);
NOBODY virtual int Save(CSave &save);
NOBODY virtual int Restore(CRestore &restore);
NOBODY virtual int ObjectCaps(void);
//{
// int flags = 0;
// if (pev->spawnflags & SF_SPRITE_TEMPORARY)
// flags = FCAP_DONT_SAVE;
// return (CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION)|flags;
//}
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
#ifdef HOOK_GAMEDLL
@ -187,18 +183,14 @@ class CBeam: public CBaseEntity
public:
NOBODY virtual void Spawn(void);
NOBODY virtual void Precache(void);
NOBODY virtual int ObjectCaps(void);
//{
// int flags = 0;
// if (pev->spawnflags & SF_BEAM_TEMPORARY)
// flags = FCAP_DONT_SAVE;
// return (CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION)|flags;
//}
NOBODY virtual Vector Center(void);
//{
// return (GetStartPos() + GetEndPos()) * 0.5;
//}
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
NOBODY virtual Vector Center(void)
{
return Center_();
}
#ifdef HOOK_GAMEDLL
@ -402,10 +394,10 @@ public:
NOBODY virtual void KeyValue(KeyValueData *pkvd);
NOBODY virtual int Save(CSave &save);
NOBODY virtual int Restore(CRestore &restore);
NOBODY virtual int ObjectCaps(void);
//{
// return 0;//CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION;
//}
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
#ifdef HOOK_GAMEDLL
@ -415,7 +407,10 @@ public:
void KeyValue_(KeyValueData *pkvd);
int Save_(CSave &save);
int Restore_(CRestore &restore);
int ObjectCaps_(void);
int ObjectCaps_(void)
{
return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION;
}
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
#endif // HOOK_GAMEDLL

View File

@ -82,6 +82,8 @@ extern enginefuncs_t g_engfuncs;
#define CRC32_FINAL (*g_engfuncs.pfnCRC32_Final)
#define RANDOM_LONG (*g_engfuncs.pfnRandomLong)
#define RANDOM_FLOAT (*g_engfuncs.pfnRandomFloat)
#define ADD_SERVER_COMMAND (*g_engfuncs.pfnAddServerCommand)
#define SET_CLIENT_LISTENING (*g_engfuncs.pfnVoice_SetClientListening)
#define GETPLAYERAUTHID (*g_engfuncs.pfnGetPlayerAuthId)
#define IS_CAREER_MATCH (*g_engfuncs.pfnIsCareerMatch)

View File

@ -485,12 +485,6 @@ LINK_ENTITY_TO_CLASS(func_tankcontrols, CFuncTankControls);
/* <8d71d> ../cstrike/dlls/func_tank.cpp:995 */
IMPLEMENT_SAVERESTORE(CFuncTankControls, CBaseEntity);
/* <8d2ea> ../cstrike/dlls/func_tank.cpp:997 */
NOBODY int CFuncTankControls::ObjectCaps_(void)
{
return (CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | FCAP_IMPULSE_USE;
}
/* <8d310> ../cstrike/dlls/func_tank.cpp:1003 */
NOBODY void CFuncTankControls::Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
{
@ -631,11 +625,6 @@ int CFuncTankControls::Restore(CRestore &restore)
return Restore_(restore);
}
int CFuncTankControls::ObjectCaps(void)
{
return ObjectCaps_();
}
void CFuncTankControls::Think(void)
{
Think_();

View File

@ -260,7 +260,10 @@ public:
NOBODY virtual void Spawn(void);
NOBODY virtual int Save(CSave &save);
NOBODY virtual int Restore(CRestore &restore);
NOBODY virtual int ObjectCaps(void);
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
NOBODY virtual void Think(void);
NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
@ -269,7 +272,10 @@ public:
void Spawn_(void);
int Save_(CSave &save);
int Restore_(CRestore &restore);
int ObjectCaps_(void);
int ObjectCaps_(void)
{
return (CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | FCAP_IMPULSE_USE;
}
void Think_(void);
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);

View File

@ -85,6 +85,13 @@ void CGameRules::RefreshSkillData_(void)
/* <ada23> ../cstrike/dlls/gamerules.cpp:157 */
NOBODY CGameRules *InstallGameRules(void)
{
SERVER_COMMAND("exec game.cfg\n");
SERVER_EXECUTE();
if (!gpGlobals->deathmatch)
return new CHalfLifeTraining;
return new CHalfLifeMultiplay;
}
#ifdef HOOK_GAMEDLL

View File

@ -35,7 +35,9 @@
#include "game_shared/voice_gamemgr.h"
#define MAX_RULE_BUFFER 1024
#define MAX_VOTE_MAPS 100
#define ITEM_RESPAWN_TIME 30
#define MAX_VIP_QUEUES 5
enum
{
@ -487,7 +489,7 @@ public:
int m_iTotalArmourCount;
int m_iUnBalancedRounds;
int m_iNumEscapeRounds;
int m_iMapVotes[100];
int m_iMapVotes[ MAX_VOTE_MAPS ];
int m_iLastPick;
int m_iMaxMapTime;
int m_iMaxRounds;
@ -498,7 +500,7 @@ public:
float m_flForceChaseCamValue;
float m_flFadeToBlackValue;
CBasePlayer *m_pVIP;
CBasePlayer *VIPQueue[5];
CBasePlayer *VIPQueue[ MAX_VIP_QUEUES ];
protected:
float m_flIntermissionEndTime;
float m_flIntermissionStartTime;
@ -537,23 +539,75 @@ class CMapInfo: public CPointEntity
public:
virtual void Spawn(void);
virtual void KeyValue(KeyValueData *pkvd);
#ifdef HOOK_GAMEDLL
void Spawn_(void);
void KeyValue_(KeyValueData *pkvd);
#endif // HOOK_GAMEDLL
public:
int m_iBuyingStatus;
float m_flBombRadius;
};/* size: 160, cachelines: 3, members: 3 */
/* <111732> ../cstrike/dlls/multiplay_gamerules.cpp:292 */
class CCStrikeGameMgrHelper: public IVoiceGameMgrHelper
{
public:
virtual bool CanPlayerHearPlayer(CBasePlayer *pListener, CBasePlayer *pSender)
{
return CanPlayerHearPlayer_(pListener, pSender);
}
#ifdef HOOK_GAMEDLL
bool CanPlayerHearPlayer_(CBasePlayer *pListener, CBasePlayer *pSender)
{
if (!pSender->IsPlayer() || pListener->m_iTeam != pSender->m_iTeam)
return false;
BOOL bListenerAlive = pListener->IsAlive();
BOOL bSenderAlive = pSender->IsAlive();
if (pListener->IsObserver())
return true;
if (bListenerAlive)
{
if (!bSenderAlive)
return false;
}
else
{
if (bSenderAlive)
return true;
}
return (bListenerAlive == bSenderAlive);
}
#endif // HOOK_GAMEDLL
};/* size: 4, cachelines: 1, members: 1 */
#ifdef HOOK_GAMEDLL
#define g_pGameRules (*pg_pGameRules)
#define g_GameMgrHelper (*pg_GameMgrHelper)
#define sv_clienttrace (*psv_clienttrace)
#define g_pMPGameRules (*pg_pMPGameRules)
#endif // HOOK_GAMEDLL
extern CHalfLifeMultiplay *g_pGameRules;
extern CCStrikeGameMgrHelper g_GameMgrHelper;
extern cvar_t *sv_clienttrace;
extern CHalfLifeMultiplay *g_pMPGameRules;
NOBODY CGameRules *InstallGameRules(void);
CGameRules *InstallGameRules(void);
/*
* Multiplay gamerules

View File

@ -703,11 +703,6 @@ int CGrenade::Restore(CRestore &restore)
Restore_(restore);
}
//int CGrenade::ObjectCaps(void)
//{
// return ObjectCaps_();
//}
void CGrenade::Killed(entvars_t *pevAttacker, int iGib)
{
Killed_(pevAttacker, iGib);

39
regamedll/dlls/h_ai.h Normal file
View File

@ -0,0 +1,39 @@
/*
*
* 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.
*
*/
#ifndef H_AI_H
#define H_AI_H
#ifdef _WIN32
#pragma once
#endif
NOBODY BOOL FBoxVisible(entvars_t *pevLooker, entvars_t *pevTarget, Vector &vecTargetOrigin, float flSize);
NOBODY Vector VecCheckToss(entvars_t *pev, Vector &vecSpot1, Vector vecSpot2, float flGravityAdj);
NOBODY Vector VecCheckThrow(entvars_t *pev, Vector &vecSpot1, Vector vecSpot2, float flSpeed, float flGravityAdj);
#endif // H_AI_H

View File

@ -29,55 +29,142 @@ LINK_ENTITY_TO_CLASS(func_recharge, CRecharge);
/* <c648b> ../cstrike/dlls/h_battery.cpp:66 */
void CRecharge::KeyValue_(KeyValueData *pkvd)
{
// FStrEq(const char *sz1,
// const char *sz2); // 68
// FStrEq(const char *sz1,
// const char *sz2); // 69
// FStrEq(const char *sz1,
// const char *sz2); // 70
// FStrEq(const char *sz1,
// const char *sz2); // 71
// FStrEq(const char *sz1,
// const char *sz2); // 72
// FStrEq(const char *sz1,
// const char *sz2); // 76
// atoi(const char *__nptr); // 78
if (FStrEq(pkvd->szKeyName, "style")
|| FStrEq(pkvd->szKeyName, "height")
|| FStrEq(pkvd->szKeyName, "value1")
|| FStrEq(pkvd->szKeyName, "value2")
|| FStrEq(pkvd->szKeyName, "value3"))
{
pkvd->fHandled = TRUE;
}
else if (FStrEq(pkvd->szKeyName, "dmdelay"))
{
m_iReactivate = atoi(pkvd->szValue);
pkvd->fHandled = TRUE;
}
else
CBaseToggle::KeyValue(pkvd);
}
/* <c616f> ../cstrike/dlls/h_battery.cpp:85 */
void CRecharge::Spawn_(void)
{
Precache();
pev->solid = SOLID_BSP;
pev->movetype = MOVETYPE_PUSH;
UTIL_SetOrigin(pev, pev->origin); // set size and link into world
UTIL_SetSize(pev, pev->mins, pev->maxs);
SET_MODEL(ENT(pev), STRING(pev->model));
m_iJuice = (int)gSkillData.suitchargerCapacity;
pev->frame = 0;
}
/* <c6122> ../cstrike/dlls/h_battery.cpp:99 */
void CRecharge::Precache_(void)
{
PRECACHE_SOUND("items/suitcharge1.wav");
PRECACHE_SOUND("items/suitchargeno1.wav");
PRECACHE_SOUND("items/suitchargeok1.wav");
}
/* <c630e> ../cstrike/dlls/h_battery.cpp:107 */
void CRecharge::Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
{
// FClassnameIs(entvars_t *pev,
// const char *szClassname); // 110
// Use(CRecharge *const this,
// class CBaseEntity *pActivator,
// class CBaseEntity *pCaller,
// USE_TYPE useType,
// float value); // 107
// if it's not a player, ignore
if (!FClassnameIs(pActivator->pev, "player"))
return;
// if there is no juice left, turn it off
if (m_iJuice <= 0)
{
pev->frame = 1;
Off();
}
// if the player doesn't have the suit, or there is no juice left, make the deny noise
if (m_iJuice <= 0 || !(pActivator->pev->weapons & (1 << WEAPON_SUIT)))
{
if (m_flSoundTime <= gpGlobals->time)
{
m_flSoundTime = gpGlobals->time + 0.62;
EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/suitchargeno1.wav", 0.85, ATTN_NORM);
}
return;
}
pev->nextthink = pev->ltime + 0.25;
SetThink(&CRecharge::Off);
// Time to recharge yet?
if (m_flNextCharge >= gpGlobals->time)
return;
// Make sure that we have a caller
if (!pActivator)
return;
m_hActivator = pActivator;//EHANDLE::CBaseEntity *operator=
//only recharge the player
if (!m_hActivator->IsPlayer())
return;
// Play the on sound or the looping charging sound
if (!m_iOn)
{
m_iOn++;
EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/suitchargeok1.wav", 0.85, ATTN_NORM);
m_flSoundTime = gpGlobals->time + 0.56;
}
if (m_iOn == 1 && m_flSoundTime <= gpGlobals->time)
{
m_iOn++;
EMIT_SOUND(ENT(pev), CHAN_STATIC, "items/suitcharge1.wav", 0.85, ATTN_NORM);
}
// charge the player
if (m_hActivator->pev->armorvalue < 100)
{
m_iJuice--;
m_hActivator->pev->armorvalue += 1;
if (m_hActivator->pev->armorvalue > 100)
m_hActivator->pev->armorvalue = 100;
}
// govern the rate of charge
m_flNextCharge = gpGlobals->time + 0.1;
}
/* <c6149> ../cstrike/dlls/h_battery.cpp:178 */
void CRecharge::Recharge(void)
{
m_iJuice = gSkillData.suitchargerCapacity;
pev->frame = 0;
SetThink(&CRecharge::SUB_DoNothing);
}
/* <c622e> ../cstrike/dlls/h_battery.cpp:185 */
void CRecharge::Off(void)
{
// STOP_SOUND(edict_t *entity,
// int channel,
// const char *sample); // 189
// Off(CRecharge *const this); // 185
// Stop looping sound.
if (m_iOn > 1)
STOP_SOUND(ENT(pev), CHAN_STATIC, "items/suitcharge1.wav");
m_iOn = 0;
if (!m_iJuice && (m_iReactivate = g_pGameRules->FlHEVChargerRechargeTime()) > 0)
{
pev->nextthink = pev->ltime + m_iReactivate;
SetThink(&CRecharge::Recharge);
}
else
SetThink(&CRecharge::SUB_DoNothing);
}
#ifdef HOOK_GAMEDLL

View File

@ -35,16 +35,32 @@
class CRecharge: public CBaseToggle
{
public:
NOBODY virtual void Spawn(void);
NOBODY virtual void Precache(void);
NOBODY virtual void KeyValue(KeyValueData *pkvd);
NOBODY virtual int Save(CSave &save);
NOBODY virtual int Restore(CRestore &restore);
NOBODY virtual int ObjectCaps(void)
virtual void Spawn(void);
virtual void Precache(void);
virtual void KeyValue(KeyValueData *pkvd);
virtual int Save(CSave &save);
virtual int Restore(CRestore &restore);
virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
#ifdef HOOK_GAMEDLL
void Spawn_(void);
void Precache_(void);
void KeyValue_(KeyValueData *pkvd);
int Save_(CSave &save);
int Restore_(CRestore &restore);
int ObjectCaps_(void)
{
return ((CBaseToggle::ObjectCaps()|FCAP_CONTINUOUS_USE) & ~FCAP_ACROSS_TRANSITION);
}
NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
#endif // HOOK_GAMEDLL
public:
void EXPORT Off(void);
void EXPORT Recharge(void);
@ -65,19 +81,6 @@ public:
int m_iOn;
float m_flSoundTime;
#ifdef HOOK_GAMEDLL
NOBODY void Spawn_(void);
NOBODY void Precache_(void);
NOBODY void KeyValue_(KeyValueData *pkvd);
NOBODY int Save_(CSave &save);
NOBODY int Restore_(CRestore &restore);
NOBODY void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
#endif // HOOK_GAMEDLL
};/* size: 332, cachelines: 6, members: 7 */
#endif // H_BATTERY_H

View File

@ -16,6 +16,7 @@
#endif // HOOK_GAMEDLL
CHostageManager *g_pHostages;
int g_iHostageNumber;
/* <45c3fa> ../cstrike/dlls/hostage/hostage.cpp:47 */
LINK_ENTITY_TO_CLASS(hostage_entity, CHostage);

View File

@ -271,10 +271,12 @@ private:
#ifdef HOOK_GAMEDLL
#define g_pHostages (*pg_pHostages)
#define g_iHostageNumber (*pg_iHostageNumber)
#endif // HOOK_GAMEDLL
extern CHostageManager *g_pHostages;
extern int g_iHostageNumber;
NOBODY void Hostage_RegisterCVars(void);
NOBODY void InstallHostageManager(void);

View File

@ -13,12 +13,6 @@ TYPEDESCRIPTION CLight::m_SaveData[] =
#else
TYPEDESCRIPTION CLight::m_SaveData2[] =
{
DEFINE_FIELD(CLight, m_iStyle, FIELD_INTEGER),
DEFINE_FIELD(CLight, m_iszPattern, FIELD_STRING),
};
TYPEDESCRIPTION (*CLight::m_SaveData)[2];
#endif // HOOK_GAMEDLL
@ -153,9 +147,6 @@ void CEnvLight::KeyValue_(KeyValueData *pkvd)
g = pow( g / 114.0, 0.6 ) * 264;
b = pow( b / 114.0, 0.6 ) * 264;
//r = (int)(powf(r / 114.0, 0.6) * 264);
//g = (int)(powf(g / 114.0, 0.6) * 264);
//b = (int)(powf(b / 114.0, 0.6) * 264);
pkvd->fHandled = TRUE;
char szColor[64];

View File

@ -55,7 +55,7 @@ public:
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
#endif // HOOK_GAMEDLL
static TYPEDESCRIPTION m_SaveData2[2];
#ifndef HOOK_GAMEDLL
static TYPEDESCRIPTION m_SaveData[2];
#else // HOOK_GAMEDLL

View File

@ -157,12 +157,6 @@ NOBODY void CGameText::Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_T
// float value); // 321
}
/* <eee07> ../cstrike/dlls/maprules.cpp:357 */
NOBODY int CGameTeamMaster::ObjectCaps_(void)
{
return CRulePointEntity:: ObjectCaps() | FCAP_MASTER;
}
/* <f0bfe> ../cstrike/dlls/maprules.cpp:371 */
LINK_ENTITY_TO_CLASS(game_team_master, CGameTeamMaster);
@ -489,11 +483,6 @@ void CGameTeamMaster::KeyValue(KeyValueData *pkvd)
KeyValue_(pkvd);
}
int CGameTeamMaster::ObjectCaps(void)
{
return ObjectCaps_();
}
BOOL CGameTeamMaster::IsTriggered(CBaseEntity *pActivator)
{
return IsTriggered_(pActivator);

View File

@ -218,7 +218,10 @@ class CGameTeamMaster: public CRulePointEntity
{
public:
NOBODY virtual void KeyValue(KeyValueData *pkvd);
NOBODY virtual int ObjectCaps(void);
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
NOBODY virtual BOOL IsTriggered(CBaseEntity *pActivator);
NOBODY virtual const char *TeamID(void);
NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
@ -226,7 +229,10 @@ public:
#ifdef HOOK_GAMEDLL
void KeyValue_(KeyValueData *pkvd);
int ObjectCaps_(void);
int ObjectCaps_(void)
{
return CRulePointEntity::ObjectCaps() | FCAP_MASTER;
}
BOOL IsTriggered_(CBaseEntity *pActivator);
const char *TeamID_(void);
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);

View File

@ -6,17 +6,17 @@
#ifndef HOOK_GAMEDLL
//static char mp_com_token[1500];
//cvar_t *sv_clienttrace;
cvar_t *sv_clienttrace;
#else
//char mp_com_token[1500];
//cvar_t *sv_clienttrace;
cvar_t *sv_clienttrace;
#endif // HOOK_GAMEDLL
//CCStrikeGameMgrHelper g_GameMgrHelper;
//CHalfLifeMultiplay *g_pMPGameRules;
CCStrikeGameMgrHelper g_GameMgrHelper;
CHalfLifeMultiplay *g_pMPGameRules;
//void info_map_parameters(entvars_t *pev)
@ -128,7 +128,7 @@ BOOL CHalfLifeMultiplay::IsCareer(void)
}
/* <113e08> ../cstrike/dlls/multiplay_gamerules.cpp:263 */
NOBODY void CMapInfo::KeyValue(KeyValueData *pkvd)
NOBODY void CMapInfo::KeyValue_(KeyValueData *pkvd)
{
// FStrEq(const char *sz1,
// const char *sz2); // 265
@ -140,7 +140,7 @@ NOBODY void CMapInfo::KeyValue(KeyValueData *pkvd)
}
/* <112879> ../cstrike/dlls/multiplay_gamerules.cpp:280 */
NOBODY void CMapInfo::Spawn(void)
NOBODY void CMapInfo::Spawn_(void)
{
}
@ -150,35 +150,6 @@ NOBODY void CMapInfo::Spawn(void)
// GetClassPtr<CMapInfo>(CMapInfo *a); // 288
//}
/* <111732> ../cstrike/dlls/multiplay_gamerules.cpp:292 */
class CCStrikeGameMgrHelper: public IVoiceGameMgrHelper
{
public:
virtual bool CanPlayerHearPlayer(CBasePlayer *pListener, CBasePlayer *pSender)
{
if (pListener->m_iTeam == pSender->m_iTeam)
{
BOOL bListenerAlive = pListener->IsAlive();
BOOL bSenderAlive = pSender->IsAlive();
if (!pListener->pev->iuser1)
return true;
if (!bListenerAlive)
{
if (bSenderAlive)
return true;
}
else
{
if (!bSenderAlive)
return false;
}
return (bListenerAlive == bSenderAlive);
}
}
};/* size: 4, cachelines: 1, members: 1 */
/* <11474f> ../cstrike/dlls/multiplay_gamerules.cpp:331 */
NOBODY void Broadcast(const char *sentence)
{
@ -223,22 +194,187 @@ NOBODY void ReadMultiplayCvars(CHalfLifeMultiplay *mp)
/* <11492c> ../cstrike/dlls/multiplay_gamerules.cpp:479 */
NOBODY CHalfLifeMultiplay::CHalfLifeMultiplay(void)
{
// {
// float flAutoKickIdle; // 570
// bool installedCommands; // 633
// RefreshSkillData(CHalfLifeMultiplay *const this); // 483
// {
// int j; // 541
// }
// {
// char *lservercfgfile; // 612
// {
// char szCommand; // 616
// }
// }
// {
// }
// }
m_VoiceGameMgr.Init(&g_GameMgrHelper, gpGlobals->maxClients);
RefreshSkillData();
m_flIntermissionEndTime = 0;
m_flIntermissionStartTime = 0;
m_fTeamCount = 0;
m_iAccountCT = 0;
m_iAccountTerrorist = 0;
m_iHostagesRescued = 0;
m_iRoundWinStatus = 0;
m_iNumCTWins = 0;
m_iNumTerroristWins = 0;
m_pVIP = NULL;
m_iNumCT = 0;
m_iNumTerrorist = 0;
m_iNumSpawnableCT = 0;
m_iNumSpawnableTerrorist = 0;
m_bMapHasCameras = 2;
g_fGameOver = FALSE;
m_iLoserBonus = 1400;
m_iNumConsecutiveCTLoses = 0;
m_iNumConsecutiveTerroristLoses = 0;
m_iC4Guy = 0;
m_bBombDefused = false;
m_bTargetBombed = false;
m_bFreezePeriod = TRUE;
m_bLevelInitialized = false;
m_tmNextPeriodicThink = 0;
m_bFirstConnected = 0;
m_bCompleteReset = false;
m_flRequiredEscapeRatio = 0.5;
m_iNumEscapers = 0;
m_bCTCantBuy = false;
m_bTCantBuy = false;
m_flBombRadius = 500.0;
m_iTotalGunCount = 0;
m_iTotalGrenadeCount = 0;
m_iTotalArmourCount = 0;
m_iConsecutiveVIP = 0;
m_iUnBalancedRounds = 0;
m_iNumEscapeRounds = 0;
m_bRoundTerminating = false;
g_iHostageNumber = 0;
m_bBombDropped = FALSE;
m_iMaxRounds = (int)CVAR_GET_FLOAT("mp_maxrounds");
if (m_iMaxRounds < 0)
{
m_iMaxRounds = 0;
CVAR_SET_FLOAT("mp_maxrounds", 0);
}
m_iTotalRoundsPlayed = 0;
m_iMaxRoundsWon = (int)CVAR_GET_FLOAT("mp_winlimit");
if (m_iMaxRoundsWon < 0)
{
m_iMaxRoundsWon = 0;
CVAR_SET_FLOAT("mp_winlimit", 0);
}
memset(m_iMapVotes, 0, sizeof(m_iMapVotes));
m_iLastPick = 1;
m_bMapHasEscapeZone = false;
m_iMapHasVIPSafetyZone = 0;
m_bMapHasBombZone = false;
m_bMapHasRescueZone = false;
m_iStoredSpectValue = (int)allow_spectators.value;
for (int j = 0; j < MAX_VIP_QUEUES; j++)
VIPQueue[ j ] = NULL;
CVAR_SET_FLOAT("cl_himodels", 0);
ReadMultiplayCvars(this);
m_iIntroRoundTime += 2;
m_fMaxIdlePeriod = m_iRoundTime * 2;
float flAutoKickIdle = CVAR_GET_FLOAT("mp_autokick_timeout");
if (flAutoKickIdle > 0.0)
m_fMaxIdlePeriod = flAutoKickIdle;
m_bInCareerGame = false;
m_iRoundTimeSecs = m_iIntroRoundTime;
if (IS_DEDICATED_SERVER())
{
CVAR_SET_FLOAT("pausable", 0);
}
else
{
if (IsCareer())
{
CVAR_SET_FLOAT("pausable", 1);
CVAR_SET_FLOAT("sv_aim", 0);
CVAR_SET_FLOAT("sv_maxspeed", 322);
CVAR_SET_FLOAT("sv_cheats", 0);
CVAR_SET_FLOAT("mp_windifference", 2);
m_bInCareerGame = true;
UTIL_LogPrintf("Career Start\n");
}
else
{
CVAR_SET_FLOAT("pausable", 0);
const char *lservercfgfile = CVAR_GET_STRING("lservercfgfile");
if (lservercfgfile && *lservercfgfile)
{
char szCommand[256];
ALERT(at_console, "Executing listen server config file\n");
Q_sprintf(szCommand, "exec %s\n", lservercfgfile);
SERVER_COMMAND(szCommand);
}
}
}
m_fRoundCount = 0;
m_fIntroRoundCount = 0;
InstallBotControl();
InstallHostageManager();
m_bSkipSpawn = m_bInCareerGame;
static bool installedCommands = false;
if (!installedCommands)
{
if (UTIL_IsGame("czero"))
{
#if defined(HOOK_GAMEDLL) && !defined(REGAMEDLL_UNIT_TESTS)
ADD_SERVER_COMMAND("career_continue", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z13SV_Continue_fv", (void *)SV_Continue_f));
ADD_SERVER_COMMAND("career_matchlimit", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z21SV_CareerMatchLimit_fv", (void *)SV_CareerMatchLimit_f));
ADD_SERVER_COMMAND("career_add_task", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z18SV_CareerAddTask_fv", (void *)SV_CareerAddTask_f));
ADD_SERVER_COMMAND("career_endround", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z20SV_Career_EndRound_fv", (void *)SV_Career_EndRound_f));
ADD_SERVER_COMMAND("career_restart", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z19SV_Career_Restart_fv", (void *)SV_Career_Restart_f));
ADD_SERVER_COMMAND("tutor_toggle", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z17SV_Tutor_Toggle_fv", (void *)SV_Tutor_Toggle_f));
#else
ADD_SERVER_COMMAND("career_continue", SV_Continue_f);
ADD_SERVER_COMMAND("career_matchlimit", SV_CareerMatchLimit_f);
ADD_SERVER_COMMAND("career_add_task", SV_CareerAddTask_f);
ADD_SERVER_COMMAND("career_endround", SV_Career_EndRound_f);
ADD_SERVER_COMMAND("career_restart", SV_Career_Restart_f);
ADD_SERVER_COMMAND("tutor_toggle", SV_Tutor_Toggle_f);
#endif // HOOK_GAMEDLL
}
#if defined(HOOK_GAMEDLL) && !defined(REGAMEDLL_UNIT_TESTS)
ADD_SERVER_COMMAND("perf_test", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z15loopPerformancev", (void *)loopPerformance));
ADD_SERVER_COMMAND("print_ent", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z13printEntitiesv", (void *)printEntities));
#else
ADD_SERVER_COMMAND("perf_test", loopPerformance);
ADD_SERVER_COMMAND("print_ent", printEntities);
#endif // HOOK_GAMEDLL
installedCommands = true;
}
m_fCareerRoundMenuTime = 0;
m_fCareerMatchMenuTime = 0;
m_iCareerMatchWins = 0;
m_iRoundWinDifference = (int)CVAR_GET_FLOAT("mp_windifference");
CCareerTaskManager::Create();
if (m_iRoundWinDifference < 1)
{
m_iRoundWinDifference = 1;
CVAR_SET_FLOAT("mp_windifference", 1);
}
sv_clienttrace = CVAR_GET_POINTER("sv_clienttrace");
InstallTutor(CVAR_GET_POINTER("tutor_enable") != NULL);
g_pMPGameRules = this;
}
/* <113b92> ../cstrike/dlls/multiplay_gamerules.cpp:678 */
@ -1488,6 +1624,16 @@ NOBODY void CHalfLifeMultiplay::ClientUserInfoChanged_(CBasePlayer *pPlayer, cha
#ifdef HOOK_GAMEDLL
void CMapInfo::Spawn(void)
{
Spawn_();
}
void CMapInfo::KeyValue(KeyValueData *pkvd)
{
KeyValue_(pkvd);
}
void CHalfLifeMultiplay::RefreshSkillData(void)
{
RefreshSkillData_();

View File

@ -70,18 +70,6 @@ TYPEDESCRIPTION (*CGunTarget::m_SaveData)[1];
#endif // HOOK_GAMEDLL
/* <12d629> ../cstrike/dlls/plats.cpp:36 */
NOBODY int CBasePlatTrain::ObjectCaps_(void)
{
return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION;
}
/* <12d64f> ../cstrike/dlls/plats.cpp:41 */
NOBODY BOOL CBasePlatTrain::IsTogglePlat_(void)
{
return (pev->spawnflags & SF_PLAT_TOGGLE) != 0;
}
/* <12e11a> ../cstrike/dlls/plats.cpp:59 */
IMPLEMENT_SAVERESTORE(CBasePlatTrain, CBaseToggle);
@ -105,6 +93,8 @@ NOBODY void CBasePlatTrain::KeyValue_(KeyValueData *pkvd)
// atof(const char *__nptr); // 90
}
#define noiseMoving noise
#define noiseArrived noise1
/* <12d675> ../cstrike/dlls/plats.cpp:105 */
NOBODY void CBasePlatTrain::Precache_(void)
@ -132,6 +122,9 @@ NOBODY void CFuncPlat::CallHitBottom(void)
/* <130666> ../cstrike/dlls/plats.cpp:244 */
LINK_ENTITY_TO_CLASS(func_plat, CFuncPlat);
#define noiseMovement noise
#define noiseStopMoving noise1
/* <130730> ../cstrike/dlls/plats.cpp:275 */
NOBODY void CFuncPlat::Setup(void)
{
@ -697,12 +690,6 @@ NOBODY void CFuncTrackTrain::Precache_(void)
/* <1314d9> ../cstrike/dlls/plats.cpp:1595 */
LINK_ENTITY_TO_CLASS(func_traincontrols, CFuncTrainControls);
/* <12d7cc> ../cstrike/dlls/plats.cpp:1591 */
NOBODY int CFuncTrainControls::ObjectCaps_(void)
{
return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION;
}
/* <12fb10> ../cstrike/dlls/plats.cpp:1598 */
NOBODY void CFuncTrainControls::Find(void)
{
@ -922,32 +909,6 @@ NOBODY void CFuncTrackAuto::Use_(CBaseEntity *pActivator, CBaseEntity *pCaller,
// float value); // 2083
}
/* <12d873> ../cstrike/dlls/plats.cpp:2146 */
NOBODY int CGunTarget::BloodColor_(void)
{
return DONT_BLEED;
}
/* <12d899> ../cstrike/dlls/plats.cpp:2147 */
NOBODY int CGunTarget::Classify_(void)
{
return CLASS_MACHINE;
}
/* <12d8bf> ../cstrike/dlls/plats.cpp:2150 */
NOBODY Vector CGunTarget::BodyTarget_(const Vector &posSrc)
{
return pev->origin;
// Vector(Vector *const this,
// const Vector &v); // 2150
}
/* <12d921> ../cstrike/dlls/plats.cpp:2152 */
NOBODY int CGunTarget::ObjectCaps_(void)
{
return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION;
}
/* <131c90> ../cstrike/dlls/plats.cpp:2163 */
LINK_ENTITY_TO_CLASS(func_guntarget, CGunTarget);
@ -1051,16 +1012,6 @@ int CBasePlatTrain::Restore(CRestore &restore)
return Restore_(restore);
}
int CBasePlatTrain::ObjectCaps(void)
{
return ObjectCaps_();
}
BOOL CBasePlatTrain::IsTogglePlat(void)
{
return IsTogglePlat_();
}
void CFuncPlat::Spawn(void)
{
Spawn_();
@ -1096,11 +1047,6 @@ void CFuncPlat::HitBottom(void)
HitBottom_();
}
int CPlatTrigger::ObjectCaps(void)
{
return ObjectCaps_();
}
void CPlatTrigger::Touch(CBaseEntity *pOther)
{
Touch_(pOther);
@ -1141,11 +1087,6 @@ void CFuncPlatRot::HitBottom(void)
HitBottom_();
}
void CFuncTrain::Spawn(void)
{
Spawn_();
@ -1226,11 +1167,6 @@ int CFuncTrackTrain::Restore(CRestore &restore)
return Restore_(restore);
}
int CFuncTrackTrain::ObjectCaps(void)
{
return ObjectCaps_();
}
void CFuncTrackTrain::OverrideReset(void)
{
OverrideReset_();
@ -1256,17 +1192,6 @@ void CFuncTrainControls::Spawn(void)
Spawn_();
}
int CFuncTrainControls::ObjectCaps(void)
{
return ObjectCaps_();
}
void CFuncTrackChange::Spawn(void)
{
Spawn_();
@ -1347,14 +1272,6 @@ void CFuncTrackAuto::UpdateAutoTargets(int toggleState)
UpdateAutoTargets_(toggleState);
}
void CGunTarget::Spawn(void)
{
Spawn_();
@ -1370,39 +1287,19 @@ int CGunTarget::Restore(CRestore &restore)
return Restore_(restore);
}
int CGunTarget::ObjectCaps(void)
{
return ObjectCaps_();
}
void CGunTarget::Activate(void)
{
Activate_();
}
int CGunTarget::Classify(void)
{
return Classify_();
}
int CGunTarget::TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType)
{
return TakeDamage_(pevInflictor, pevAttacker, flDamage, bitsDamageType);
}
int CGunTarget::BloodColor(void)
{
return BloodColor_();
}
void CGunTarget::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
{
Use_(pActivator, pCaller, useType, value);
}
Vector CGunTarget::BodyTarget(const Vector &posSrc)
{
return BodyTarget_(posSrc);
}
#endif // HOOK_GAMEDLL

View File

@ -34,14 +34,6 @@
#define SF_PLAT_TOGGLE 0x0001
// CBasePlatTrain
#define noiseMoving noise
#define noiseArrived noise1
// CFuncPlat
#define noiseMovement noise
#define noiseStopMoving noise1
#define TRAIN_STARTPITCH 60
#define TRAIN_MAXPITCH 200
#define TRAIN_MAXSPEED 1000
@ -62,10 +54,16 @@ public:
NOBODY virtual void KeyValue(KeyValueData *pkvd);
NOBODY virtual int Save(CSave &save);
NOBODY virtual int Restore(CRestore &restore);
NOBODY virtual int ObjectCaps(void);
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
// This is done to fix spawn flag collisions between this class and a derived class
NOBODY virtual BOOL IsTogglePlat(void);
NOBODY virtual BOOL IsTogglePlat(void)
{
return IsTogglePlat_();
}
#ifdef HOOK_GAMEDLL
@ -73,8 +71,14 @@ public:
void KeyValue_(KeyValueData *pkvd);
int Save_(CSave &save);
int Restore_(CRestore &restore);
int ObjectCaps_(void);
BOOL IsTogglePlat_(void);
int ObjectCaps_(void)
{
return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION;
}
BOOL IsTogglePlat_(void)
{
return (pev->spawnflags & SF_PLAT_TOGGLE) != 0;
}
#endif // HOOK_GAMEDLL
@ -131,7 +135,10 @@ public:
class CPlatTrigger: public CBaseEntity
{
public:
NOBODY virtual int ObjectCaps(void);
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
NOBODY virtual void Touch(CBaseEntity *pOther);
#ifdef HOOK_GAMEDLL
@ -249,12 +256,18 @@ class CFuncTrainControls: public CBaseEntity
{
public:
NOBODY virtual void Spawn(void);
NOBODY virtual int ObjectCaps(void);
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
#ifdef HOOK_GAMEDLL
void Spawn_(void);
int ObjectCaps_(void);
int ObjectCaps_(void)
{
return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION;
}
#endif // HOOK_GAMEDLL
@ -370,26 +383,50 @@ public:
NOBODY virtual void Spawn(void);
NOBODY virtual int Save(CSave &save);
NOBODY virtual int Restore(CRestore &restore);
NOBODY virtual int ObjectCaps(void);
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
NOBODY virtual void Activate(void);
NOBODY virtual int Classify(void);
NOBODY virtual int Classify(void)
{
return Classify_();
}
NOBODY virtual int TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType);
NOBODY virtual int BloodColor(void);
NOBODY virtual int BloodColor(void)
{
return BloodColor_();
}
NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
NOBODY virtual Vector BodyTarget(const Vector &posSrc);
NOBODY virtual Vector BodyTarget(const Vector &posSrc)
{
return BodyTarget_(posSrc);
}
#ifdef HOOK_GAMEDLL
void Spawn_(void);
int Save_(CSave &save);
int Restore_(CRestore &restore);
int ObjectCaps_(void);
int ObjectCaps_(void)
{
return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION;
}
void Activate_(void);
int Classify_(void);
int Classify_(void)
{
return CLASS_MACHINE;
}
int TakeDamage_(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType);
int BloodColor_(void);
int BloodColor_(void)
{
return DONT_BLEED;
}
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
Vector BodyTarget_(const Vector &posSrc);
Vector BodyTarget_(const Vector &posSrc)
{
return pev->origin;
}
#endif // HOOK_GAMEDLL
@ -412,22 +449,8 @@ private:
};/* size: 408, cachelines: 7, members: 3 */
NOBODY void PlatSpawnInsideTrigger(entvars_t *pevPlatform);
NOBODY float Fix(float angle);
NOBODY void FixupAngles(Vector &v);
#endif // PLATS_H

View File

@ -770,7 +770,7 @@ int TrainSpeed(int iSpeed, int iMax)
}
/* <153c8e> ../cstrike/dlls/player.cpp:902 */
void CBasePlayer::DeathSound(void)
NOXREF void CBasePlayer::DeathSound(void)
{
switch (RANDOM_LONG(1, 4))
{
@ -823,7 +823,7 @@ void CBasePlayer::TraceAttack_(entvars_t *pevAttacker, float flDamage, Vector ve
if (CVAR_GET_FLOAT("mp_friendlyfire") == 0 && m_iTeam == pAttacker->m_iTeam)
bShouldBleed = false;
if (!pev->takedamage)
if (pev->takedamage == DAMAGE_NO)
return;
m_LastHitGroup = ptr->iHitgroup;
@ -3202,14 +3202,8 @@ NOBODY void FixPlayerCrouchStuck(edict_t *pPlayer)
/* <153ef5> ../cstrike/dlls/player.cpp:4580 */
NOBODY void CBasePlayer::Duck_(void)
{
//TODO: check it, check last of update.
#ifdef _WIN32
if (pev->button & IN_DUCK)
SetAnimation(PLAYER_WALK);
#else
if (pev->button & IN_DUCK && pev->modelindex && (m_flFlinchTime < gpGlobals->time || pev->health <= 0.0f))
SetAnimation(PLAYER_WALK);
#endif
}
/* <150f8f> ../cstrike/dlls/player.cpp:4591 */
@ -3761,11 +3755,6 @@ NOBODY const char *CBasePlayer::TeamID_(void)
{
}
/* <151094> ../cstrike/dlls/player.cpp:7007 */
NOBODY int CSprayCan::ObjectCaps_(void)
{
}
/* <1573aa> ../cstrike/dlls/player.cpp:7010 */
NOBODY void CSprayCan::Spawn(entvars_t *pevOwner)
{
@ -5699,11 +5688,6 @@ int CBasePlayer::Restore(CRestore &restore)
return Restore_(restore);
}
int CBasePlayer::ObjectCaps(void)
{
return ObjectCaps_();
}
int CBasePlayer::Classify(void)
{
return Classify_();
@ -5919,11 +5903,6 @@ void CSprayCan::Think(void)
Think_();
}
int CSprayCan::ObjectCaps(void)
{
return ObjectCaps_();
}
void CInfoIntermission::Spawn(void)
{
Spawn_();

View File

@ -329,12 +329,18 @@ class CSprayCan: public CBaseEntity
{
public:
NOBODY virtual void Think(void);
NOBODY virtual int ObjectCaps(void);
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
#ifdef HOOK_GAMEDLL
void Think_(void);
int ObjectCaps_(void);
int ObjectCaps_(void)
{
return FCAP_DONT_SAVE;
}
#endif // HOOK_GAMEDLL
@ -362,10 +368,10 @@ public:
NOBODY virtual void Precache(void);
NOBODY virtual int Save(CSave &save);
NOBODY virtual int Restore(CRestore &restore);
virtual int ObjectCaps(void);
//{
// return (CBaseMonster::ObjectCaps() & ~FCAP_ACROSS_TRANSITION);
//}
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
virtual int Classify(void);
virtual void TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType);
NOBODY virtual int TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType);
@ -562,7 +568,7 @@ public:
void FlashlightTurnOn(void);
NOBODY void FlashlightTurnOff(void);
NOBODY void UpdatePlayerSound(void);
void DeathSound(void);
NOXREF void DeathSound(void);
void SetAnimation(PLAYER_ANIM playerAnim);
NOBODY void SetWeaponAnimType(const char *szExtention);
NOBODY void CheatImpulseCommands(int iImpulse);

View File

@ -111,7 +111,10 @@ public:
NOBODY virtual void KeyValue(KeyValueData* pkvd);
NOBODY virtual int Save(CSave &save);
NOBODY virtual int Restore(CRestore &restore);
NOBODY virtual int ObjectCaps(void);
NOBODY virtual int ObjectCaps(void)
{
return ObjectCaps_();
}
NOBODY virtual void OverrideReset(void);
NOBODY virtual BOOL OnControls(entvars_t *pev);
NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);

View File

@ -140,7 +140,7 @@ public:
int Restore_(CRestore &restore);
int ObjectCaps_(void)
{
return m_bIsC4 != false ? FCAP_CONTINUOUS_USE : 0;
return m_bIsC4 ? FCAP_CONTINUOUS_USE : 0;
}
void Killed_(entvars_t *pevAttacker, int iGib);
int BloodColor_(void)

60
regamedll/engine/cmd.h Normal file
View File

@ -0,0 +1,60 @@
/*
*
* 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.
*
*/
#ifndef CMD_H
#define CMD_H
#ifdef _WIN32
#pragma once
#endif
#define FCMD_HUD_COMMAND BIT(0)
#define FCMD_GAME_COMMAND BIT(1)
#define FCMD_WRAPPER_COMMAND BIT(2)
/* <8f1> ../engine/cmd.h:65 */
typedef void (*xcommand_t)(void);
/* <904> ../engine/cmd.h:71 */
typedef struct cmd_function_s
{
struct cmd_function_s *next;
char *name;
xcommand_t function;
int flags;
} cmd_function_t;
/* <95a> ../engine/cmd.h:80 */
typedef enum cmd_source_s
{
src_client = 0, // came in over a net connection as a clc_stringcmd. host_client will be valid during this state.
src_command = 1, // from the command buffer.
} cmd_source_t;
#endif // CMD_H

View File

@ -52,6 +52,7 @@
typedef unsigned int string_t; // from engine's pr_comp.h;
typedef int EOFFSET;
typedef int BOOL;
#ifndef __cplusplus
typedef enum { false, true } qboolean;

View File

@ -253,6 +253,10 @@ public:
protected:
#if defined(_WIN32) && defined(HOOK_GAMEDLL)
int unknown_padding1;
#endif // HOOK_GAMEDLL
BotProfileList m_profileList;
VoiceBankList m_voiceBanks;

View File

@ -49,8 +49,7 @@ HidingSpotList TheHidingSpotList;
NavAreaList TheNavAreaList;
CNavAreaGrid TheNavAreaGrid;
CNavArea *(*CNavArea::m_openList);
//bool CNavArea::m_isReset = false;
bool (*CNavArea::m_isReset);
//float lastDrawTimestamp;
NavAreaList goodSizedAreaList;
@ -210,49 +209,46 @@ NOBODY CNavArea::CNavArea(CNavNode *nwNode, class CNavNode *neNode, class CNavNo
/* <4d58d7> ../game_shared/bot/nav_area.cpp:295 */
NOBODY CNavArea::~CNavArea(void)
{
// {
// iterator iter; // 302
// {
// class CNavArea *area; // 305
// OnDestroyNotify(CNavArea *const this,
// class CNavArea *dead); // 310
// }
// operator++(_List_iterator<CNavArea*> *const this); // 303
// {
// int i; // 314
// { /* ~CNavArea+0x18e */
// iterator liter; // 316
// {
// class CNavLadder *ladder; // 318
// OnDestroyNotify(CNavLadder *const this,
// class CNavArea *dead); // 320
// }
// operator++(_List_iterator<CNavLadder*> *const this); // 316
// }
// }
// RemoveNavArea(CNavAreaGrid *const this,
// class CNavArea *area); // 325
// }
// ~list(list<CNavArea*, std::allocator<CNavArea*>> *const this,
// int const __in_chrg); // 295
// ~list(list<CNavLadder*, std::allocator<CNavLadder*>> *const this,
// int const __in_chrg); // 295
// ~list(list<NavConnect, std::allocator<NavConnect>> *const this,
// int const __in_chrg); // 295
// ~list(list<SpotEncounter, std::allocator<SpotEncounter>> *const this,
// int const __in_chrg); // 295
// ~list(list<HidingSpot*, std::allocator<HidingSpot*>> *const this,
// int const __in_chrg); // 295
// ~list(list<CNavArea*, std::allocator<CNavArea*>> *const this,
// int const __in_chrg); // 295
// ~list(list<CNavLadder*, std::allocator<CNavLadder*>> *const this,
// int const __in_chrg); // 295
// ~list(list<NavConnect, std::allocator<NavConnect>> *const this,
// int const __in_chrg); // 295
// ~list(list<SpotEncounter, std::allocator<SpotEncounter>> *const this,
// int const __in_chrg); // 295
// ~list(list<HidingSpot*, std::allocator<HidingSpot*>> *const this,
// int const __in_chrg); // 295
#ifndef HOOK_GAMEDLL
if (m_isReset)
#else
if (*m_isReset)
#endif // HOOK_GAMEDLL
{
//m_overlapList.~list();
//m_ladder->~list();
//m_connect->~list();
//m_spotEncounterList.~list();
//m_hidingSpotList.~list();
return;
}
// tell the other areas we are going away
NavAreaList::iterator iter;
for (iter = TheNavAreaList.begin(); iter != TheNavAreaList.end(); ++iter)
{
CNavArea *area = *iter;
if (area == this)
continue;
area->OnDestroyNotify(this);
}
// unhook from ladders
for (int i = 0; i < NUM_LADDER_DIRECTIONS; ++i)
{
for (NavLadderList::iterator liter = m_ladder[i].begin(); liter != m_ladder[i].end(); ++liter)
{
CNavLadder *ladder = *liter;
ladder->OnDestroyNotify(this);
}
}
// remove the area from the grid
TheNavAreaGrid.RemoveNavArea(this);
}
/* <4c67f0> ../game_shared/bot/nav_area.cpp:333 */
@ -1510,6 +1506,16 @@ NOBODY void CNavArea::UpdateOnOpenList(void)
/* <4cbdbc> ../game_shared/bot/nav_area.cpp:2713 */
NOBODY void CNavArea::RemoveFromOpenList(void)
{
if (m_prevOpen)
m_prevOpen->m_nextOpen = m_nextOpen;
else
(*m_openList) = m_nextOpen;
if (m_nextOpen)
m_nextOpen->m_prevOpen = m_prevOpen;
// zero is an invalid marker
m_openMarker = 0;
}
/* <4cbddf> ../game_shared/bot/nav_area.cpp:2731 */

View File

@ -524,12 +524,13 @@ private:
friend class CCSBotManager;
void Initialize(void);
static bool m_isReset;
#ifndef HOOK_GAMEDLL
static bool m_isReset;
static unsigned int m_nextID;
#else
public:
static bool (*m_isReset);
static unsigned int (*m_nextID);
private:
#endif // HOOK_GAMEDLL
@ -549,7 +550,16 @@ private:
float m_danger[MAX_AREA_TEAMS];
float m_dangerTimestamp[MAX_AREA_TEAMS];
#if defined(_WIN32) && defined(HOOK_GAMEDLL)
int unknown_padding1;
#endif // HOOK_GAMEDLL
HidingSpotList m_hidingSpotList;
#if defined(_WIN32) && defined(HOOK_GAMEDLL)
int unknown_padding2;
#endif // HOOK_GAMEDLL
SpotEncounterList m_spotEncounterList;
enum { MAX_APPROACH_AREAS = 16 };
@ -579,14 +589,38 @@ public:
private:
#endif // HOOK_GAMEDLL
CNavArea *m_nextOpen, *m_prevOpen;
CNavArea *m_nextOpen;
CNavArea *m_prevOpen;
unsigned int m_openMarker;
#ifdef _WIN32
int unknown_padding3;
#endif // _WIN32
NavConnectList m_connect[ NUM_DIRECTIONS ];
#ifdef _WIN32
int unknown_padding4;
int unknown_padding5;
int unknown_padding6;
int unknown_padding7;
#endif // _WIN32
NavLadderList m_ladder[ NUM_LADDER_DIRECTIONS ];
#ifdef _WIN32
int unknown_padding8;
#endif // _WIN32
CNavNode *m_node[ NUM_CORNERS ];
#ifdef _WIN32
int unknown_padding9;
#endif // _WIN32
NavAreaList m_overlapList;
CNavArea *m_prevHash;
CNavArea *m_nextHash;
@ -594,11 +628,13 @@ private:
extern NavAreaList TheNavAreaList;
/* <4c1534> ../game_shared/bot/nav_area.h:417 */
inline bool CNavArea::IsDegenerate(void) const
{
return (m_extent.lo.x >= m_extent.hi.x || m_extent.lo.y >= m_extent.hi.y);
}
/* <568e1d> ../game_shared/bot/nav_area.h:422 */
inline CNavArea *CNavArea::GetAdjacentArea(NavDirType dir, int i) const
{
NavConnectList::const_iterator iter;
@ -611,6 +647,7 @@ inline CNavArea *CNavArea::GetAdjacentArea(NavDirType dir, int i) const
return NULL;
}
/* <5a01dc> ../game_shared/bot/nav_area.h:435 */
inline bool CNavArea::IsOpen(void) const
{
#ifndef HOOK_GAMEDLL
@ -620,6 +657,7 @@ inline bool CNavArea::IsOpen(void) const
#endif // HOOK_GAMEDLL
}
/* <5a0a62> ../game_shared/bot/nav_area.h:440 */
inline bool CNavArea::IsOpenListEmpty(void)
{
#ifndef HOOK_GAMEDLL
@ -629,6 +667,7 @@ inline bool CNavArea::IsOpenListEmpty(void)
#endif // HOOK_GAMEDLL
}
/* <5a1483> ../game_shared/bot/nav_area.h:445 */
inline CNavArea *CNavArea::PopOpenList(void)
{
#ifndef HOOK_GAMEDLL
@ -649,6 +688,7 @@ inline CNavArea *CNavArea::PopOpenList(void)
return NULL;
}
/* <5a0a2a> ../game_shared/bot/nav_area.h:460 */
inline bool CNavArea::IsClosed(void) const
{
if (IsMarked() && !IsOpen())
@ -657,16 +697,19 @@ inline bool CNavArea::IsClosed(void) const
return false;
}
/* <5a0a46> ../game_shared/bot/nav_area.h:468 */
inline void CNavArea::AddToClosedList(void)
{
Mark();
}
/* <5a01f8> ../game_shared/bot/nav_area.h:473 */
inline void CNavArea::RemoveFromClosedList(void)
{
}
/* <4cf943> ../game_shared/bot/nav_area.cpp:4947 */
class CNavAreaGrid
{
public:

View File

@ -5,137 +5,220 @@
*/
#ifndef HOOK_GAMEDLL
//cvar_t voice_serverdebug = { "voice_serverdebug", "0" };
//cvar_t sv_alltalk = { "sv_alltalk", "0", FCVAR_SERVER };
cvar_t voice_serverdebug = { "voice_serverdebug", "0" };
cvar_t sv_alltalk = { "sv_alltalk", "0", FCVAR_SERVER };
#else
//cvar_t voice_serverdebug;
//cvar_t sv_alltalk;
cvar_t voice_serverdebug;
cvar_t sv_alltalk;
#endif // HOOK_GAMEDLL
//CPlayerBitVec g_PlayerModEnable;
//CBitVec<32> g_BanMasks[32];
//CBitVec<32> g_SentGameRulesMasks[32];
//CBitVec<32> g_SentBanMasks[32];
//CPlayerBitVec g_bWantModEnable;
CPlayerBitVec g_PlayerModEnable;
CBitVec< VOICE_MAX_PLAYERS > g_BanMasks[ VOICE_MAX_PLAYERS ];
CBitVec< VOICE_MAX_PLAYERS > g_SentGameRulesMasks[ VOICE_MAX_PLAYERS ];
CBitVec< VOICE_MAX_PLAYERS > g_SentBanMasks[ VOICE_MAX_PLAYERS ];
CPlayerBitVec g_bWantModEnable;
/* <2d3c38> ../game_shared/voice_gamemgr.cpp:68 */
NOBODY void VoiceServerDebug(const char *pFmt, ...)
void VoiceServerDebug(const char *pFmt, ...)
{
// {
// char msg; // 70
// va_list marker; // 71
// }
char msg[4096];
va_list marker;
if (!voice_serverdebug.value)
return;
va_start(marker, pFmt);
Q_vsnprintf(msg, sizeof(msg), pFmt, marker);
va_end(marker);
ALERT(at_console, "%s", msg);
}
/* <2d3cd1> ../game_shared/voice_gamemgr.cpp:89 */
CVoiceGameMgr::CVoiceGameMgr(void)
{
m_UpdateInterval = 0;
m_nMaxPlayers = 0;
}
/* <2d3c98> ../game_shared/voice_gamemgr.cpp:96 */
CVoiceGameMgr::~CVoiceGameMgr(void)
{
// ~CVoiceGameMgr(CVoiceGameMgr::~CVoiceGameMgr(); // 98
;
}
/* <2d3d0b> ../game_shared/voice_gamemgr.cpp:101 */
NOBODY bool CVoiceGameMgr::Init(IVoiceGameMgrHelper *pHelper, int maxClients)
bool CVoiceGameMgr::Init(IVoiceGameMgrHelper *pHelper, int maxClients)
{
m_pHelper = pHelper;
m_nMaxPlayers = (maxClients > VOICE_MAX_PLAYERS) ? VOICE_MAX_PLAYERS : maxClients;
PRECACHE_MODEL("sprites/voiceicon.spr");
m_msgPlayerVoiceMask = REG_USER_MSG("VoiceMask", VOICE_MAX_PLAYERS_DW * 4 * 2);
m_msgRequestState = REG_USER_MSG("ReqState", 0);
// register voice_serverdebug if it hasn't been registered already
if (!CVAR_GET_POINTER("voice_serverdebug"))
CVAR_REGISTER(&voice_serverdebug);
if (!CVAR_GET_POINTER("sv_alltalk"))
CVAR_REGISTER(&sv_alltalk);
return true;
}
/* <2d3d4e> ../game_shared/voice_gamemgr.cpp:123 */
NOBODY void CVoiceGameMgr::SetHelper(IVoiceGameMgrHelper *pHelper)
NOXREF void CVoiceGameMgr::SetHelper(IVoiceGameMgrHelper *pHelper)
{
m_pHelper = pHelper;
}
/* <2d4486> ../game_shared/voice_gamemgr.cpp:129 */
NOBODY void CVoiceGameMgr::Update(double frametime)
void CVoiceGameMgr::Update(double frametime)
{
// Only update periodically.
m_UpdateInterval += frametime;
if(m_UpdateInterval >= UPDATE_INTERVAL)
UpdateMasks();
}
/* <2d3d82> ../game_shared/voice_gamemgr.cpp:140 */
NOBODY void CVoiceGameMgr::ClientConnected(edict_t *pEdict)
void CVoiceGameMgr::ClientConnected(edict_t *pEdict)
{
// {
// int index; // 142
// ENTINDEX(edict_t *pEdict); // 142
// operator=(CBitVecAccessor *const this,
// int val); // 145
// Init(CBitVec<32> *const this,
// int val); // 146
// Init(CBitVec<32> *const this,
// int val); // 147
// }
int index = ENTINDEX(pEdict) - 1;
// Clear out everything we use for deltas on this guy.
g_bWantModEnable[index] = true;
g_SentGameRulesMasks[index].Init(0);
g_SentBanMasks[index].Init(0);
}
// Called to determine if the Receiver has muted (blocked) the Sender
// Returns true if the receiver has blocked the sender
/* <2d3ec5> ../game_shared/voice_gamemgr.cpp:152 */
NOBODY bool CVoiceGameMgr::PlayerHasBlockedPlayer(CBasePlayer *pReceiver, CBasePlayer *pSender)
bool CVoiceGameMgr::PlayerHasBlockedPlayer(CBasePlayer *pReceiver, CBasePlayer *pSender)
{
// {
// int iReceiverIndex; // 154
// int iSenderIndex; // 154
// entindex(CBaseEntity *const this); // 159
// entindex(CBaseEntity *const this); // 160
// operator uint32(CBitVecAccessor *const this); // 165
// }
int iReceiverIndex, iSenderIndex;
if (!pReceiver || !pSender)
return false;
iReceiverIndex = pReceiver->entindex() - 1;
iSenderIndex = pSender->entindex() - 1;
if (iReceiverIndex < 0 || iReceiverIndex >= m_nMaxPlayers || iSenderIndex < 0 || iSenderIndex >= m_nMaxPlayers)
return false;
return (g_BanMasks[ iReceiverIndex ][ iSenderIndex ] != 0);
}
NOBODY bool CVoiceGameMgr::ClientCommand(CBasePlayer *pPlayer, const char *cmd)
/* <2d401a> ../game_shared/voice_gamemgr.cpp:169 */
bool CVoiceGameMgr::ClientCommand(CBasePlayer *pPlayer, const char *cmd)
{
int playerClientIndex = pPlayer->entindex() - 1;
if (playerClientIndex < 0 || playerClientIndex >= m_nMaxPlayers)
{
VoiceServerDebug("CVoiceGameMgr::ClientCommand: cmd %s from invalid client (%d)\n", cmd, playerClientIndex);
return true;
}
bool bBan = Q_stricmp(cmd, "vban") == 0;
if (bBan && CMD_ARGC() >= 2)
{
for (int i = 1; i < CMD_ARGC(); i++)
{
uint32 mask = 0;
sscanf(CMD_ARGV(i), "%x", &mask);
if (i <= VOICE_MAX_PLAYERS_DW)
{
VoiceServerDebug("CVoiceGameMgr::ClientCommand: vban (0x%x) from %d\n", mask, playerClientIndex);
g_BanMasks[ playerClientIndex ].SetDWord(i - 1, mask);
}
else
VoiceServerDebug("CVoiceGameMgr::ClientCommand: invalid index (%d)\n", i);
}
return true;
}
else if (Q_stricmp(cmd, "VModEnable") == 0 && CMD_ARGC() >= 2)
{
VoiceServerDebug("CVoiceGameMgr::ClientCommand: VModEnable (%d)\n", !!atoi(CMD_ARGV(1)));
g_PlayerModEnable[ playerClientIndex ] = !!atoi(CMD_ARGV(1));
g_bWantModEnable[ playerClientIndex ] = false;
return true;
}
return false;
}
/* <2d416b> ../game_shared/voice_gamemgr.cpp:215 */
NOBODY void CVoiceGameMgr::UpdateMasks(void)
void CVoiceGameMgr::UpdateMasks(void)
{
// {
// bool bAllTalk; // 219
// {
// int iClient; // 221
// {
// class CBaseEntity *pEnt; // 223
// class CBasePlayer *pPlayer; // 234
// CPlayerBitVec gameRulesMask; // 236
// operator uint32(CBitVecAccessor *const this); // 228
// MESSAGE_BEGIN(int msg_dest,
// int msg_type,
// const float *pOrigin,
// entvars_t *ent); // 230
// CBitVec(CBitVec<32> *const this); // 236
// {
// int iOtherClient; // 240
// {
// class CBaseEntity *pEnt; // 242
// operator=(CBitVecAccessor *const this,
// int val); // 245
// }
// }
// operator!=(CBitVec<32> *const this,
// const class CBitVec<32> &other); // 251
// operator!=(CBitVec<32> *const this,
// const class CBitVec<32> &other); // 252
// {
// int dw; // 258
// operator=(CBitVec<32> *const this,
// const class CBitVec<32> &other); // 254
// operator=(CBitVec<32> *const this,
// const class CBitVec<32> &other); // 255
// MESSAGE_BEGIN(int msg_dest,
// int msg_type,
// const float *pOrigin,
// entvars_t *ent); // 257
// }
// {
// int iOtherClient; // 268
// {
// bool bCanHear; // 270
// operator uint32(CBitVecAccessor *const this); // 270
// operator uint32(CBitVecAccessor *const this); // 270
// }
// }
// }
// }
// }
m_UpdateInterval = 0;
bool bAllTalk = !!(sv_alltalk.value);
for (int iClient = 0; iClient < m_nMaxPlayers; iClient++)
{
CBaseEntity *pEnt = UTIL_PlayerByIndex(iClient + 1);
if (!pEnt || !pEnt->IsPlayer())
continue;
CBasePlayer *pPlayer = (CBasePlayer *)pEnt;
CPlayerBitVec gameRulesMask;
// Request the state of their "VModEnable" cvar.
if (g_bWantModEnable[ iClient ])
{
MESSAGE_BEGIN(MSG_ONE, m_msgRequestState, NULL, pEnt->pev);
MESSAGE_END();
}
if (g_PlayerModEnable[ iClient ])
{
// Build a mask of who they can hear based on the game rules.
for (int iOtherClient = 0; iOtherClient < m_nMaxPlayers; iOtherClient++)
{
CBaseEntity *pEnt = UTIL_PlayerByIndex(iOtherClient + 1);
if (pEnt && (bAllTalk || m_pHelper->CanPlayerHearPlayer(pPlayer, (CBasePlayer *)pEnt)))
{
gameRulesMask[ iOtherClient ] = true;
}
}
}
// If this is different from what the client has, send an update.
if (gameRulesMask != g_SentGameRulesMasks[ iClient ] || g_BanMasks[ iClient ] != g_SentBanMasks[ iClient ])
{
g_SentGameRulesMasks[ iClient ] = gameRulesMask;
g_SentBanMasks[ iClient ] = g_BanMasks[ iClient ];
MESSAGE_BEGIN(MSG_ONE, m_msgPlayerVoiceMask, NULL, pPlayer->pev);
int dw;
for (dw = 0; dw < VOICE_MAX_PLAYERS_DW; dw++)
{
WRITE_LONG(gameRulesMask.GetDWord(dw));
WRITE_LONG(g_BanMasks[ iClient ].GetDWord(dw));
}
MESSAGE_END();
}
// Tell the engine.
for (int iOtherClient = 0; iOtherClient < m_nMaxPlayers; iOtherClient++)
{
bool bCanHear = gameRulesMask[ iOtherClient ] && !g_BanMasks[ iClient ][ iOtherClient ];
SET_CLIENT_LISTENING(iClient + 1, iOtherClient + 1, bCanHear);
}
}
}

View File

@ -32,14 +32,39 @@
#pragma once
#endif
#define UPDATE_INTERVAL 0.3
#include "voice_common.h"
#ifdef HOOK_GAMEDLL
#define voice_serverdebug (*pvoice_serverdebug)
#define sv_alltalk (*psv_alltalk)
#define g_PlayerModEnable (*pg_PlayerModEnable)
#define g_BanMasks (*pg_BanMasks)
#define g_SentGameRulesMasks (*pg_SentGameRulesMasks)
#define g_SentBanMasks (*pg_SentBanMasks)
#define g_bWantModEnable (*pg_bWantModEnable)
#endif // HOOK_GAMEDLL
extern cvar_t voice_serverdebug;
extern cvar_t sv_alltalk;
extern CPlayerBitVec g_PlayerModEnable;
extern CBitVec< VOICE_MAX_PLAYERS > g_BanMasks[ VOICE_MAX_PLAYERS ];
extern CBitVec< VOICE_MAX_PLAYERS > g_SentGameRulesMasks[ VOICE_MAX_PLAYERS ];
extern CBitVec< VOICE_MAX_PLAYERS > g_SentBanMasks[ VOICE_MAX_PLAYERS ];
extern CPlayerBitVec g_bWantModEnable;
/* <111716> ../game_shared/voice_gamemgr.h:23 */
class IVoiceGameMgrHelper
{
public:
virtual ~IVoiceGameMgrHelper() {}
NOBODY virtual bool CanPlayerHearPlayer(CBasePlayer *pListener, CBasePlayer *pTalker) = 0;
};/* size: 4, cachelines: 1, members: 1 */
class CVoiceGameMgr
@ -47,20 +72,30 @@ class CVoiceGameMgr
public:
CVoiceGameMgr(void);
virtual ~CVoiceGameMgr(void);
NOBODY bool Init(IVoiceGameMgrHelper *pHelper, int maxClients);
NOBODY void SetHelper(IVoiceGameMgrHelper *pHelper);
NOBODY void Update(double frametime);
NOBODY void ClientConnected(edict_t *pEdict);
NOBODY bool ClientCommand(CBasePlayer *pPlayer, const char *cmd);
NOBODY bool PlayerHasBlockedPlayer(CBasePlayer *pReceiver, CBasePlayer *pSender);
bool Init(IVoiceGameMgrHelper *pHelper, int maxClients);
NOXREF void SetHelper(IVoiceGameMgrHelper *pHelper);
void Update(double frametime);
void ClientConnected(edict_t *pEdict);
bool ClientCommand(CBasePlayer *pPlayer, const char *cmd);
bool PlayerHasBlockedPlayer(CBasePlayer *pReceiver, CBasePlayer *pSender);
#ifdef HOOK_GAMEDLL
public:
#else
private:
NOBODY void UpdateMasks(void);
#endif // HOOK_GAMEDLL
void UpdateMasks(void);
private:
int m_msgPlayerVoiceMask;
int m_msgRequestState;
IVoiceGameMgrHelper *m_pHelper;
int m_nMaxPlayers;
double m_UpdateInterval;
};/* size: 28, cachelines: 1, members: 6 */
void VoiceServerDebug(const char *pFmt, ...);
#endif // VOICE_GAMEMGR_H

View File

@ -99,12 +99,14 @@ extern const size_t g_BaseOffset = NULL;
//#define Nav_Region
//#define Hostage_Region
//#define GameShr_BotProfile_Region
//#define VoiceManager_Region
//#define Data_References_Region
//#define Function_References_Region
FunctionHook g_FunctionHooks[] =
{
#ifndef Mem_Region
#ifdef _WIN32
@ -1775,6 +1777,7 @@ FunctionHook g_FunctionHooks[] =
#endif // MapRules_Region
#ifndef HintMessage_Region
//CHintMessage
//{ 0x0, "_ZNK12CHintMessage11GetDurationEv", mfunc_ptr_cast(&CHintMessage::GetDuration) }, // NOXREF
//{ 0x0, "_ZN12CHintMessage4SendER11CBaseEntity", mfunc_ptr_cast(&CHintMessage::Send) }, // NOXREF
@ -2405,7 +2408,7 @@ FunctionHook g_FunctionHooks[] =
#ifndef GameRules_Region
//{ 0x0, "_Z16InstallGameRulesv", (size_t)&InstallGameRules },
//{ 0x01D80C90, "_Z16InstallGameRulesv", (size_t)&InstallGameRules },
{ 0x01D80C00, "_ZN10CGameRules16RefreshSkillDataEv", mfunc_ptr_cast(&CGameRules::RefreshSkillData_) },
//{ 0x0, "_ZN10CGameRules18GetPlayerSpawnSpotEP11CBasePlayer", mfunc_ptr_cast(&CGameRules::GetPlayerSpawnSpot_) },
//{ 0x0, "_ZN10CGameRules17CanHavePlayerItemEP11CBasePlayerP15CBasePlayerItem", mfunc_ptr_cast(&CGameRules::CanHavePlayerItem_) },
@ -2464,6 +2467,7 @@ FunctionHook g_FunctionHooks[] =
//CHalfLifeMultiplay
//virtual func
//{ 0x01D8B8A0, "_ZN18CHalfLifeMultiplayC2Ev", mfunc_ptr_cast(&CHalfLifeMultiplay::CHalfLifeMultiplay) }, // constuctor
{ 0x01D8BF00, "_ZN18CHalfLifeMultiplay16RefreshSkillDataEv", mfunc_ptr_cast(&CHalfLifeMultiplay::RefreshSkillData_) },
//{ 0x0, "_ZN18CHalfLifeMultiplay5ThinkEv", mfunc_ptr_cast(&CHalfLifeMultiplay::Think_) },
//{ 0x0, "_ZN18CHalfLifeMultiplay16IsAllowedToSpawnEP11CBaseEntity", mfunc_ptr_cast(&CHalfLifeMultiplay::IsAllowedToSpawn_) },
@ -2559,7 +2563,7 @@ FunctionHook g_FunctionHooks[] =
//{ 0x0, "_Z9BroadcastPKc", (size_t)&Broadcast },
{ 0x01D8B780, "_Z7GetTeami", (size_t)&GetTeam },
//{ 0x0, "_Z15EndRoundMessagePKci", (size_t)&EndRoundMessage },
//{ 0x0, "_ZL18ReadMultiplayCvarsP18CHalfLifeMultiplay", (size_t)&ReadMultiplayCvars },
//{ 0x01D8BD80, "_ZL18ReadMultiplayCvarsP18CHalfLifeMultiplay", (size_t)&ReadMultiplayCvars },
//{ 0x0, "_Z15DestroyMapCycleP10mapcycle_s", (size_t)&DestroyMapCycle },
//{ 0x0, "_Z15MP_COM_GetTokenv", (size_t)&MP_COM_GetToken },
//{ 0x0, "_Z12MP_COM_ParsePc", (size_t)&MP_COM_Parse },
@ -2568,6 +2572,13 @@ FunctionHook g_FunctionHooks[] =
//{ 0x0, "_Z12CountPlayersv", (size_t)&CountPlayers },
//{ 0x0, "_Z20ExtractCommandStringPcS_", (size_t)&ExtractCommandString },
//{ 0x0, "_Z11GetMapCountv", (size_t)&GetMapCount },
//CCStrikeGameMgrHelper
//virtual func
{ 0x01D8B630, "_ZN21CCStrikeGameMgrHelper19CanPlayerHearPlayerEP11CBasePlayerS1_", mfunc_ptr_cast(&CCStrikeGameMgrHelper::CanPlayerHearPlayer_) },
//CMapInfo
//virtual func
//{ 0x0, "_ZN21CCStrikeGameMgrHelper19CanPlayerHearPlayerEP11CBasePlayerS1_", mfunc_ptr_cast(&CMapInfo::Spawn_) },
//{ 0x0, "_ZN21CCStrikeGameMgrHelper19CanPlayerHearPlayerEP11CBasePlayerS1_", mfunc_ptr_cast(&CMapInfo::KeyValue_) },
#endif // Multiplay_GameRules_Region
@ -2626,7 +2637,7 @@ FunctionHook g_FunctionHooks[] =
//{ 0x0, "_ZNK11CCareerTask10IsValidForEP11CBasePlayer ", mfunc_ptr_cast(&CCareerTask::IsValidFor) },
//{ 0x0, "_ZN11CCareerTask23SendPartialNotificationEv", mfunc_ptr_cast(&CCareerTask::SendPartialNotification) },
//CCareerTaskManager
//{ 0x0, "_ZN18CCareerTaskManager6CreateEv", mfunc_ptr_cast(&CCareerTaskManager::Create) },
//{ 0x01DDD750, "_ZN18CCareerTaskManager6CreateEv", mfunc_ptr_cast(&CCareerTaskManager::Create) },
//{ 0x01DDD800, "_ZN18CCareerTaskManager5ResetEb", mfunc_ptr_cast(&CCareerTaskManager::Reset) },
//{ 0x0, "_ZN18CCareerTaskManager7AddTaskEPKcS1_ibbb", mfunc_ptr_cast(&CCareerTaskManager::AddTask) },
//{ 0x0, "_ZN18CCareerTaskManager11HandleEventE13GameEventTypeP11CBasePlayerS2_", mfunc_ptr_cast(&CCareerTaskManager::HandleEvent) },
@ -3895,7 +3906,6 @@ FunctionHook g_FunctionHooks[] =
//{ 0x0, "_ZN9IdleState7OnEnterEP6CCSBot", mfunc_ptr_cast(&IdleState::OnEnter) },
//{ 0x0, "_ZN9IdleState8OnUpdateEP6CCSBot", mfunc_ptr_cast(&IdleState::OnUpdate) },
//{ 0x0, "_ZNK9IdleState7GetNameEv", mfunc_ptr_cast(&IdleState::GetName) },
//{ 0x0, "___XAXAXAX____", mfunc_ptr_cast(&IdleState::OnExit) },
//HuntState
//virtual func
//{ 0x0, "_ZN9HuntState7OnEnterEP6CCSBot", mfunc_ptr_cast(&HuntState::OnEnter) },
@ -3991,13 +4001,17 @@ FunctionHook g_FunctionHooks[] =
//non-virtual func
//{ 0x0, "_ZN14UseEntityState9SetEntityEP11CBaseEntity", mfunc_ptr_cast(&UseEntityState::SetEntity) }, // NOXREF
#ifdef _WIN32
//{ 0x01D12F90, "_ZN8PathCostclEP8CNavAreaS1_PK10CNavLadder", mfunc_ptr_cast(&FollowTargetCollector::operator()) },
#endif // _WIN32
#endif // CS_BotState_Region
#ifndef Bot_Region
//ActiveGrenade
//virtual func
//{ 0x0, "__XAX__", mfunc_ptr_cast(&ActiveGrenade::ActiveGrenade) },
//{ 0x0, "_ZN13ActiveGrenadeC2EiP8CGrenade", mfunc_ptr_cast(&ActiveGrenade::ActiveGrenade) },
{ 0x01D34080, "_ZN13ActiveGrenade12OnEntityGoneEv", mfunc_ptr_cast(&ActiveGrenade::OnEntityGone) },
{ 0x01D340A0, "_ZNK13ActiveGrenade7IsValidEv", mfunc_ptr_cast(&ActiveGrenade::IsValid) },
//{ 0x0, "_ZNK13ActiveGrenade8IsEntityEP8CGrenade", mfunc_ptr_cast(&ActiveGrenade::IsEntity) }, // NOXREF
@ -4265,20 +4279,24 @@ FunctionHook g_FunctionHooks[] =
#ifndef H_Region
//AI
//{ 0x01D848B0, "_Z11FBoxVisibleP9entvars_sS0_R6Vectorf", (size_t)&FBoxVisible }, // NOXREF
//{ 0x01D84A10, "_Z12VecCheckTossP9entvars_sRK6VectorS1_f", (size_t)&VecCheckToss }, // NOXREF
//{ 0x01D84EB0, "_Z13VecCheckThrowP9entvars_sRK6VectorS1_ff", (size_t)&VecCheckThrow }, // NOXREF
//CRecharge
//virtual func
//{ 0x0, "_ZN9CRecharge5SpawnEv", mfunc_ptr_cast(&CRecharge::Spawn_) },
//{ 0x0, "_ZN9CRecharge8PrecacheEv", mfunc_ptr_cast(&CRecharge::Precache_) },
//{ 0x01D85130, "_ZN9CRecharge8KeyValueEP14KeyValueData_s", mfunc_ptr_cast(&CRecharge::KeyValue_) },
//{ 0x0, "_ZN9CRecharge4SaveER5CSave", mfunc_ptr_cast(&CRecharge::Save_) },
//{ 0x0, "_ZN9CRecharge7RestoreER8CRestore", mfunc_ptr_cast(&CRecharge::Restore_) },
//{ 0x0, "_ZN9CRecharge10ObjectCapsEv", mfunc_ptr_cast(&CRecharge::ObjectCaps_) },
//{ 0x01D852A0, "_ZN9CRecharge3UseEP11CBaseEntityS1_8USE_TYPEf", mfunc_ptr_cast(&CRecharge::Use_) },
{ 0x01D851E0, "_ZN9CRecharge5SpawnEv", mfunc_ptr_cast(&CRecharge::Spawn_) },
{ 0x01D85270, "_ZN9CRecharge8PrecacheEv", mfunc_ptr_cast(&CRecharge::Precache_) },
{ 0x01D85130, "_ZN9CRecharge8KeyValueEP14KeyValueData_s", mfunc_ptr_cast(&CRecharge::KeyValue_) },
{ 0x01D85070, "_ZN9CRecharge4SaveER5CSave", mfunc_ptr_cast(&CRecharge::Save_) },
{ 0x01D850A0, "_ZN9CRecharge7RestoreER8CRestore", mfunc_ptr_cast(&CRecharge::Restore_) },
{ 0x01D85120, "_ZN9CRecharge10ObjectCapsEv", mfunc_ptr_cast(&CRecharge::ObjectCaps_) },
{ 0x01D852A0, "_ZN9CRecharge3UseEP11CBaseEntityS1_8USE_TYPEf", mfunc_ptr_cast(&CRecharge::Use_) },
//non-virtual func
//{ 0x01D850D0, "func_recharge", (size_t)&func_recharge },
//{ 0x0, "_ZN9CRecharge3OffEv", mfunc_ptr_cast(&CRecharge::Off) },
//{ 0x0, "_ZN9CRecharge3OffEv", mfunc_ptr_cast(&CRecharge::Off) },
//{ 0x0, "_ZN9CRecharge8RechargeEv", mfunc_ptr_cast(&CRecharge::Recharge) },
{ 0x01D855A0, "_ZN9CRecharge3OffEv", mfunc_ptr_cast(&CRecharge::Off) },
{ 0x01D85570, "_ZN9CRecharge8RechargeEv", mfunc_ptr_cast(&CRecharge::Recharge) },
//CCycler
//virtual func
//{ 0x0, "_ZN7CCycler5SpawnEv", mfunc_ptr_cast(&CCycler::Spawn_) },
@ -4582,12 +4600,30 @@ FunctionHook g_FunctionHooks[] =
//{ 0x0, "_ZN17BotProfileManager13GetCustomSkinEi", mfunc_ptr_cast(&BotProfileManager::GetCustomSkin) },
{ 0x01D35DD0, "_ZN17BotProfileManager22GetCustomSkinModelnameEi", mfunc_ptr_cast(&BotProfileManager::GetCustomSkinModelname) },
{ 0x01D35DB0, "_ZN17BotProfileManager18GetCustomSkinFnameEi", mfunc_ptr_cast(&BotProfileManager::GetCustomSkinFname) },
//{ 0x0, "_ZN17BotProfileManager18GetCustomSkinIndexEPKcS1_", mfunc_ptr_cast(&BotProfileManager::GetCustomSkinIndex) },
//{ 0x01D35DF0, "_ZN17BotProfileManager18GetCustomSkinIndexEPKcS1_", mfunc_ptr_cast(&BotProfileManager::GetCustomSkinIndex) }, // NOXREF
//{ 0x0, "_ZNK17BotProfileManager13GetVoiceBanksEv", mfunc_ptr_cast(&BotProfileManager::GetVoiceBanks) }, // NOXREF
//{ 0x0, "_ZN17BotProfileManager18FindVoiceBankIndexEPKc", mfunc_ptr_cast(&BotProfileManager::FindVoiceBankIndex) },
#endif // GameShr_BotProfile_Region
#ifndef VoiceManager_Region
//CVoiceGameMgr
//virtual func
//{ 0x0, "_ZN13CVoiceGameMgrD0Ev", mfunc_ptr_cast(&CVoiceGameMgr::~CVoiceGameMgr) },
//non-virtual func
//{ 0x01DCC6F0, "_ZN13CVoiceGameMgrC2Ev", mfunc_ptr_cast(&CVoiceGameMgr::CVoiceGameMgr) },
{ 0x01DCC740, "_ZN13CVoiceGameMgr4InitEP19IVoiceGameMgrHelperi", mfunc_ptr_cast(&CVoiceGameMgr::Init) },
//{ 0x01DCC7D0, "_ZN13CVoiceGameMgr9SetHelperEP19IVoiceGameMgrHelper", mfunc_ptr_cast(&CVoiceGameMgr::SetHelper) }, // NOXREF
{ 0x01DCC7E0, "_ZN13CVoiceGameMgr6UpdateEd", mfunc_ptr_cast(&CVoiceGameMgr::Update) },
{ 0x01DCC800, "_ZN13CVoiceGameMgr15ClientConnectedEP7edict_s", mfunc_ptr_cast(&CVoiceGameMgr::ClientConnected) },
{ 0x01DCC910, "_ZN13CVoiceGameMgr13ClientCommandEP11CBasePlayerPKc", mfunc_ptr_cast(&CVoiceGameMgr::ClientCommand) },
{ 0x01DCC890, "_ZN13CVoiceGameMgr22PlayerHasBlockedPlayerEP11CBasePlayerS1_", mfunc_ptr_cast(&CVoiceGameMgr::PlayerHasBlockedPlayer) },
{ 0x01DCCB10, "_ZN13CVoiceGameMgr11UpdateMasksEv", mfunc_ptr_cast(&CVoiceGameMgr::UpdateMasks) },
{ 0x01DCCAB0, "_Z14GetBspFilenamePKc", (size_t)&VoiceServerDebug },
#endif // VoiceManager_Region
#ifndef Nav_Region
//Nav_File
@ -4726,16 +4762,16 @@ FunctionHook g_FunctionHooks[] =
//{ 0x0, "", mfunc_ptr_cast<CNAV_AREA_TWO_VECTOR>(&CNavArea::CNavArea) },
//{ 0x0, "", mfunc_ptr_cast<CNAV_AREA_VECTOR>(&CNavArea::CNavArea) },
//{ 0x0, "", mfunc_ptr_cast<CNAV_AREA_NAVNODE>(&CNavArea::CNavArea) },
//{ 0x0, "", mfunc_ptr_cast(&CNavArea::~CNavArea) },
//{ 0x01D386A0, "", mfunc_ptr_cast(&CNavArea::~CNavArea) },
//{ 0x0, "_ZN8CNavArea10InitializeEv", mfunc_ptr_cast(&CNavArea::Initialize) },
//{ 0x0, "_ZN8CNavArea15OnDestroyNotifyEPS_", mfunc_ptr_cast(&CNavArea::OnDestroyNotify) },
//{ 0x01D388A0, "_ZN8CNavArea15OnDestroyNotifyEPS_", mfunc_ptr_cast(&CNavArea::OnDestroyNotify) }, // NOXREF
//{ 0x0, "_ZN8CNavArea9ConnectToEPS_10NavDirType", mfunc_ptr_cast(&CNavArea::ConnectTo) },
//{ 0x0, "_ZN8CNavArea10DisconnectEPS_", mfunc_ptr_cast(&CNavArea::Disconnect) },
//{ 0x01D389D0, "_ZN8CNavArea10DisconnectEPS_", mfunc_ptr_cast(&CNavArea::Disconnect) }, // NOXREF
//{ 0x0, "_ZN8CNavArea11FinishMergeEPS_", mfunc_ptr_cast(&CNavArea::FinishMerge) },
//{ 0x0, "_ZN8CNavArea24MergeAdjacentConnectionsEPS_", mfunc_ptr_cast(&CNavArea::MergeAdjacentConnections) },
//{ 0x0, "_ZN8CNavArea11AssignNodesEPS_", mfunc_ptr_cast(&CNavArea::AssignNodes) },
//{ 0x01D38D70, "_ZN8CNavArea11AssignNodesEPS_", mfunc_ptr_cast(&CNavArea::AssignNodes) },
//{ 0x0, "_ZN8CNavArea9SplitEditEbfPPS_S1_", mfunc_ptr_cast(&CNavArea::SplitEdit) },
//{ 0x0, "_ZNK8CNavArea11IsConnectedEPKS_10NavDirType", mfunc_ptr_cast(&CNavArea::IsConnected) },
//{ 0x01D390F0, "_ZNK8CNavArea11IsConnectedEPKS_10NavDirType", mfunc_ptr_cast(&CNavArea::IsConnected) },
//{ 0x0, "_ZN8CNavArea19ComputeHeightChangeEPKS_", mfunc_ptr_cast(&CNavArea::ComputeHeightChange) },
//{ 0x0, "_ZN8CNavArea15FinishSplitEditEPS_10NavDirType", mfunc_ptr_cast(&CNavArea::FinishSplitEdit) },
//{ 0x0, "_ZN8CNavArea10SpliceEditEPS_", mfunc_ptr_cast(&CNavArea::SpliceEdit) },
@ -4760,7 +4796,7 @@ FunctionHook g_FunctionHooks[] =
//{ 0x0, "_ZN8CNavArea16DrawMarkedCornerE13NavCornerTypehhhi", mfunc_ptr_cast(&CNavArea::DrawMarkedCorner) },
//{ 0x0, "_ZN8CNavArea13AddToOpenListEv", mfunc_ptr_cast(&CNavArea::AddToOpenList) },
//{ 0x0, "_ZN8CNavArea16UpdateOnOpenListEv", mfunc_ptr_cast(&CNavArea::UpdateOnOpenList) },
//{ 0x0, "_ZN8CNavArea18RemoveFromOpenListEv", mfunc_ptr_cast(&CNavArea::RemoveFromOpenList) },
//{ 0x01D3DBC0, "_ZN8CNavArea18RemoveFromOpenListEv", mfunc_ptr_cast(&CNavArea::RemoveFromOpenList) },
//{ 0x0, "_ZN8CNavArea16ClearSearchListsEv", mfunc_ptr_cast(&CNavArea::ClearSearchLists) },
//{ 0x0, "_ZNK8CNavArea9GetCornerE13NavCornerType", mfunc_ptr_cast(&CNavArea::GetCorner) },
//{ 0x0, "_ZNK8CNavArea21IsHidingSpotCollisionEPK6Vector", mfunc_ptr_cast(&CNavArea::IsHidingSpotCollision) },
@ -4783,7 +4819,7 @@ FunctionHook g_FunctionHooks[] =
//{ 0x0, "_ZN12CNavAreaGrid5ResetEv", mfunc_ptr_cast(&CNavAreaGrid::Reset) },
//{ 0x0, "_ZN12CNavAreaGrid10InitializeEffff", mfunc_ptr_cast(&CNavAreaGrid::Initialize) },
//{ 0x0, "_ZN12CNavAreaGrid10AddNavAreaEP8CNavArea", mfunc_ptr_cast(&CNavAreaGrid::AddNavArea) },
//{ 0x0, "_ZN12CNavAreaGrid13RemoveNavAreaEP8CNavArea", mfunc_ptr_cast(&CNavAreaGrid::RemoveNavArea) },
//{ 0x01D43560, "_ZN12CNavAreaGrid13RemoveNavAreaEP8CNavArea", mfunc_ptr_cast(&CNavAreaGrid__RemoveNavArea) },
//!@{ 0x01D43710, "_ZNK12CNavAreaGrid10GetNavAreaEPK6Vectorf", mfunc_ptr_cast(&CNavAreaGrid::GetNavArea) }, // Used refs
//!@{ 0x01D43860, "_ZNK12CNavAreaGrid17GetNearestNavAreaEPK6Vectorb", mfunc_ptr_cast(&CNavAreaGrid::GetNearestNavArea) }, // Used refs
//{ 0x0, "_ZNK12CNavAreaGrid14GetNavAreaByIDEj", mfunc_ptr_cast(&CNavAreaGrid::GetNavAreaByID) },
@ -5014,7 +5050,7 @@ FunctionHook g_FunctionHooks[] =
//{ 0x0, "_ZN19HostageAnimateState6OnExitEP14CHostageImprov", mfunc_ptr_cast(&HostageAnimateState::OnExit) },
//{ 0x0, "_ZNK19HostageAnimateState7GetNameEv", mfunc_ptr_cast(&HostageAnimateState::GetName) },
//non-virtual func
//{ 0x01D49D60, "_ZN19HostageAnimateState5ResetEv", mfunc_ptr_cast(&HostageAnimateState__Reset) },
//{ 0x01D49D60, "_ZN19HostageAnimateState5ResetEv", mfunc_ptr_cast(&HostageAnimateState::Reset) },
//{ 0x0, "_ZN19HostageAnimateState11AddSequenceEP14CHostageImprovPKcff", mfunc_ptr_cast<ADD_SEQUENCE_NAME>(&HostageAnimateState::AddSequence) },
//{ 0x01D49F00, "_ZN19HostageAnimateState11AddSequenceEP14CHostageImproviff", mfunc_ptr_cast<ADD_SEQUENCE_NUMBER>(&HostageAnimateState::AddSequence) },
//{ 0x0, "_ZNK19HostageAnimateState6IsBusyEv", mfunc_ptr_cast(&HostageAnimateState::IsBusy) },
@ -5173,6 +5209,7 @@ AddressRef g_DataRefs[] =
{ 0x01E61E4C, "WorldGraph", (size_t)&pWorldGraph },
{ 0x01E61B98, "g_pGameRules", (size_t)&pg_pGameRules },
{ 0x01E62560, "g_pMPGameRules", (size_t)&pg_pMPGameRules },
{ 0x01E0B0B0, "weaponAliasInfo", (size_t)&pweaponAliasInfo },
{ 0x01E0B1E8, "weaponBuyAliasInfo", (size_t)&pweaponBuyAliasInfo },
@ -5304,6 +5341,17 @@ AddressRef g_DataRefs[] =
{ 0x01E61B84, "g_psv_aim", (size_t)&pg_psv_aim },//TODO: unused, used cvar_t *sv_aim
{ 0x01E63598, "sv_aim", (size_t)&psv_aim },
{ 0x01E61E6C, "sv_clienttrace", (size_t)&psv_clienttrace },
{ 0x01E61E68, "g_GameMgrHelper", (size_t)&pg_GameMgrHelper },
{ 0x01E22624, "voice_serverdebug", (size_t)&pvoice_serverdebug },
{ 0x01E22638, "sv_alltalk", (size_t)&psv_alltalk },
{ 0x01E75D20, "g_PlayerModEnable", (size_t)&pg_PlayerModEnable },
{ 0x01E75D28, "g_BanMasks", (size_t)&pg_BanMasks },
{ 0x01E75DA8, "g_SentGameRulesMasks", (size_t)&pg_SentGameRulesMasks },
{ 0x01E75E30, "g_SentBanMasks", (size_t)&pg_SentBanMasks },
{ 0x01E75E28, "g_bWantModEnable", (size_t)&pg_bWantModEnable },
{ 0x01E76580, "s_tutorDisabledThisGame", (size_t)&ps_tutorDisabledThisGame },
{ 0x01E76584, "s_nextCvarCheckTime", (size_t)&ps_nextCvarCheckTime },
@ -5460,6 +5508,7 @@ AddressRef g_DataRefs[] =
{ 0x01E1BE38, "_ZN6CLight10m_SaveDataE", mfunc_ptr_cast(&CLight::m_SaveData) },
{ 0x01E1BB00, "_ZN11CWallHealth10m_SaveDataE", mfunc_ptr_cast(&CWallHealth::m_SaveData) },
{ 0x01E1B850, "_ZN9CRecharge10m_SaveDataE", mfunc_ptr_cast(&CRecharge::m_SaveData) },
//{ 0x0, "_ZN16CFuncMortarField10m_SaveDataE", mfunc_ptr_cast(&CFuncMortarField::m_SaveData) },
//{ 0x0, "_ZN13CEnvExplosion10m_SaveDataE", mfunc_ptr_cast(&CEnvExplosion::m_SaveData) },
//{ 0x0, "_ZN13CFuncRotating10m_SaveDataE", mfunc_ptr_cast(&CFuncRotating::m_SaveData) },
@ -5563,7 +5612,9 @@ AddressRef g_DataRefs[] =
{ 0x01E11588, "_ZN10HidingSpot8m_nextIDE", mfunc_ptr_cast(&HidingSpot::m_nextID) },
//{ 0x0, "_ZN10HidingSpot14m_masterMarkerE", mfunc_ptr_cast(&HidingSpot::m_masterMarker) },
{ 0x01E2A100, "_ZN8CNavArea9m_isResetE", mfunc_ptr_cast(&CNavArea::m_isReset) },
{ 0x01E2A0FC, "_ZN8CNavArea10m_openListE", mfunc_ptr_cast(&CNavArea::m_openList) },
//{ 0x0, "lastDrawTimestamp", (size_t)&plastDrawTimestamp },
//{ 0x0, "goodSizedAreaList", (size_t)&pgoodSizedAreaList },
//{ 0x0, "markedArea", (size_t)&pmarkedArea },
@ -5586,6 +5637,7 @@ AddressRef g_DataRefs[] =
{ 0x01E287F0, "TheBotPhrases", (size_t)&pTheBotPhrases },
{ 0x01E7657C, "TheTutor", (size_t)&pTheTutor },
{ 0x01E2A25C, "g_pHostages", (size_t)&pg_pHostages },
{ 0x01E2A258, "g_iHostageNumber", (size_t)&pg_iHostageNumber },
{ 0x01E16EE0, "outputLevel", (size_t)&poutputLevel },
{ 0x01E61B40, "theDebugOutputTypes", (size_t)&ptheDebugOutputTypes },

View File

@ -27,4 +27,5 @@
*/
#include "common.h"
#include "cmd.h"
#include "unicode_strtools.h"

View File

@ -543,6 +543,7 @@
<ClInclude Include="..\dlls\hostage\hostage_improv.h" />
<ClInclude Include="..\dlls\hostage\hostage_localnav.h" />
<ClInclude Include="..\dlls\hostage\hostage_states.h" />
<ClInclude Include="..\dlls\h_ai.h" />
<ClInclude Include="..\dlls\h_battery.h" />
<ClInclude Include="..\dlls\h_cycler.h" />
<ClInclude Include="..\dlls\h_export.h" />
@ -579,6 +580,7 @@
<ClInclude Include="..\dlls\vehicle.h" />
<ClInclude Include="..\dlls\weapons.h" />
<ClInclude Include="..\engine\cdll_int.h" />
<ClInclude Include="..\engine\cmd.h" />
<ClInclude Include="..\engine\common.h" />
<ClInclude Include="..\engine\custom.h" />
<ClInclude Include="..\engine\customentity.h" />

View File

@ -1094,6 +1094,12 @@
<ClInclude Include="..\dlls\sound.h">
<Filter>dlls</Filter>
</ClInclude>
<ClInclude Include="..\dlls\h_ai.h">
<Filter>dlls</Filter>
</ClInclude>
<ClInclude Include="..\engine\cmd.h">
<Filter>engine</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\linux\appversion.sh">

View File

@ -119,6 +119,7 @@
#include "hostage/hostage_improv.h"
#include "airtank.h"
#include "h_ai.h"
#include "h_cycler.h"
#include "h_battery.h"

View File

@ -25,35 +25,50 @@
#define REPEAT_OFFSETOF(st,memb)\
offsetof(st,memb), offsetof(st,memb)
#define REPEAT_SIZEOF_PRINT(st)\
printf("sizeof %s: 0x%2X (%d)\n", #st, sizeof(st), sizeof(st))
#define REPEAT_OFFSETOF_PRINT(st,memb)\
printf("sizeof %s::%s: 0x%2X (%d)\n", #st, #memb, offsetof(st,memb), offsetof(st,memb))
TEST(StructOffsets, ReversingChecks, 5000)
{
// sizeof class
REPEAT_SIZEOF_PRINT(CNavArea);
REPEAT_SIZEOF_PRINT(CBot);
REPEAT_SIZEOF_PRINT(CCSBot);
REPEAT_SIZEOF_PRINT(CBotManager);
REPEAT_SIZEOF_PRINT(CCSBotManager);
REPEAT_SIZEOF_PRINT(BotPhraseManager);
REPEAT_SIZEOF_PRINT(CBasePlayer);
REPEAT_SIZEOF_PRINT(ActiveGrenade);
REPEAT_SIZEOF_PRINT(CHostageImprov);
REPEAT_SIZEOF_PRINT(HostageStateMachine);
REPEAT_SIZEOF_PRINT(HostageFollowState);
REPEAT_SIZEOF_PRINT(CHalfLifeMultiplay);
REPEAT_SIZEOF_PRINT(CHalfLifeTraining);
// offset the members
REPEAT_OFFSETOF_PRINT(CBaseEntity, pev);
REPEAT_OFFSETOF_PRINT(CBaseEntity, has_disconnected);
// assert
CHECK_CLASS_SIZE(CNavArea, 0x238u, 0x214u);
CHECK_CLASS_SIZE(CBasePlayer, 0x9B0, 0x9C4);
CHECK_CLASS_SIZE(CHostageImprov, 0x1C8Cu, 0x1C8Cu);
CHECK_CLASS_SIZE(BotPhraseManager, 0x21Cu, 0x214u);
CHECK_CLASS_SIZE(CHalfLifeMultiplay, 0x2D0u, 0x2C4u);
CHECK_CLASS_SIZE(CHalfLifeTraining, 0x2E8u, 0x2D8u);
//CHECK_CLASS_SIZE(CBotManager, 12u, 12);
//CHECK_CLASS_SIZE(CCSBotManager, 740, 0x2E0u);//0x2E4u | 0x2E0u
//CHECK_CLASS_SIZE(HostageStateMachine, 0x10, 0x10);
//CHECK_CLASS_SIZE(HostageFollowState, 0x4C, 0x4C);
//CHECK_CLASS_SIZE(CCSBot, 0x2CA0, 0x2CA0);
printf("sizeof CBot: 0x%2X (%d)\n", REPEAT_SIZEOF(CBot));
printf("sizeof CCSBot: 0x%2X (%d)\n", REPEAT_SIZEOF(CCSBot));
printf("sizeof CBotManager: 0x%2X (%d)\n", REPEAT_SIZEOF(CBotManager));
printf("sizeof CCSBotManager: 0x%2X (%d)\n", REPEAT_SIZEOF(CCSBotManager));
printf("sizeof BotPhraseManager: 0x%2X (%d)\n", REPEAT_SIZEOF(BotPhraseManager));
printf("sizeof CBasePlayer: 0x%2X (%d)\n", REPEAT_SIZEOF(CBasePlayer));
printf("sizeof ActiveGrenade: 0x%2X (%d)\n", REPEAT_SIZEOF(ActiveGrenade));
printf("sizeof CHostageImprov: 0x%2X (%d)\n", REPEAT_SIZEOF(CHostageImprov));
printf("sizeof HostageStateMachine: 0x%2X (%d)\n", REPEAT_SIZEOF(HostageStateMachine));
printf("sizeof HostageFollowState: 0x%2X (%d)\n", REPEAT_SIZEOF(HostageFollowState));
printf("offsetof CBaseEntity::pev: 0x%2X (%d)\n", REPEAT_OFFSETOF(CBaseEntity, pev));
printf("offsetof CBaseEntity::has_disconnected: 0x%2X (%d)\n", REPEAT_OFFSETOF(CBaseEntity, has_disconnected));
}
#pragma warning( pop )