mirror of
https://github.com/rehlds/reapi.git
synced 2025-02-05 10:10:38 +03:00
Added api hook RG_RoundEnd
Added natives rg_round_end, rg_update_teamscores
This commit is contained in:
parent
3000269b18
commit
ea35220838
@ -17,13 +17,13 @@
|
||||
#include <reapi_engine.inc> // NOTE: only for ReHLDS
|
||||
#include <reapi_gamedll.inc> // NOTE: only for gamedll Counter-Strike (ReGameDLL_CS)
|
||||
|
||||
// return constants
|
||||
// hookchain return type
|
||||
enum
|
||||
{
|
||||
HC_CONTINUE = 0,
|
||||
HC_OVERRIDE,
|
||||
HC_SUPERCEDE,
|
||||
HC_BREAK
|
||||
HC_CONTINUE = 0, // plugin didn't take any action
|
||||
HC_OVERRIDE, // call real function, but use my return value
|
||||
HC_SUPERCEDE, // skip real function, use my return value
|
||||
HC_BREAK // skip a call each forward in AMXX plugins
|
||||
};
|
||||
|
||||
// hookchain types
|
||||
@ -80,7 +80,7 @@ native bool:EnableHookChain(HookChain:hook);
|
||||
*
|
||||
* native SetHookChainReturn(AType:type, any:...);
|
||||
*/
|
||||
native SetHookChainReturn(HookChainReturn:type, any:...);
|
||||
native SetHookChainReturn(AType:type, any:...);
|
||||
|
||||
/*
|
||||
* Gets the return value of a hookchain.
|
||||
|
@ -65,3 +65,6 @@ native rg_multidmg_add(inflictor, victim, Float:flDamage, bitsDamageType);
|
||||
|
||||
native rg_fire_bullets(inflictor, attacker, shots, Float:vecSrc[3], Float:vecDirShooting[3], Float:vecSpread[3], Float:flDistance, iBulletType, iTracerFreq, iDamage);
|
||||
native Float:[3] rg_fire_bullets3(inflictor, attacker, Float:vecSrc[3], Float:vecDirShooting[3], Float:vecSpread, Float:flDistance, iPenetration, iBulletType, iDamage, Float:flRangeModifier, bool:bPistol, shared_rand);
|
||||
|
||||
native rg_round_end(Float:tmDelay, WinStatus:st, ScenarionEventEndRound:event = ROUND_NONE, const message[] = "default", const sentence[] = "default");
|
||||
native rg_update_teamscores(iCtsWins = 0, iTsWins = 0, bool:bAdd = true);
|
||||
|
@ -11,6 +11,35 @@
|
||||
#define SIGNAL_ESCAPE (1<<3)
|
||||
#define SIGNAL_VIPSAFETY (1<<4)
|
||||
|
||||
enum WinStatus
|
||||
{
|
||||
WINSTATUS_CTS = 1,
|
||||
WINSTATUS_TERRORISTS,
|
||||
WINSTATUS_DRAW,
|
||||
};
|
||||
|
||||
// used for EndRoundMessage() logged messages
|
||||
enum ScenarionEventEndRound
|
||||
{
|
||||
ROUND_NONE,
|
||||
ROUND_TARGET_BOMB,
|
||||
ROUND_VIP_ESCAPED,
|
||||
ROUND_VIP_ASSASSINATED,
|
||||
ROUND_TERRORISTS_ESCAPED,
|
||||
ROUND_CTS_PREVENT_ESCAPE,
|
||||
ROUND_ESCAPING_TERRORISTS_NEUTRALIZED,
|
||||
ROUND_BOMB_DEFUSED,
|
||||
ROUND_CTS_WIN,
|
||||
ROUND_TERRORISTS_WIN,
|
||||
ROUND_END_DRAW,
|
||||
ROUND_ALL_HOSTAGES_RESCUED,
|
||||
ROUND_TARGET_SAVED,
|
||||
ROUND_HOSTAGE_NOT_RESCUED,
|
||||
ROUND_TERRORISTS_NOT_ESCAPED,
|
||||
ROUND_VIP_NOT_ESCAPED,
|
||||
ROUND_GAME_COMMENCE,
|
||||
};
|
||||
|
||||
enum PLAYER_ANIM
|
||||
{
|
||||
PLAYER_IDLE,
|
||||
@ -33,22 +62,28 @@ enum GamedllFunc
|
||||
* Return type: int
|
||||
* Params: (const pObserver)
|
||||
*/
|
||||
RH_GetForceCamera = 1024,
|
||||
RG_GetForceCamera = 1024,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const index, const inflictor, const attacker, const Float:fadeTime, const Float:fadeHold, const alpha, Float:color[3])
|
||||
*/
|
||||
RH_PlayerBlind,
|
||||
RG_PlayerBlind,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const index, inflictor, attacker, Float:vecSrc[3], Float:vecSpot[3], tracehandle)
|
||||
*/
|
||||
RH_RadiusFlash_TraceLine,
|
||||
RG_RadiusFlash_TraceLine,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (WinStatus:status, ScenarionEventEndRound:event, Float:tmDelay)
|
||||
*/
|
||||
RG_RoundEnd,
|
||||
|
||||
// [...]
|
||||
RH_GameDLL_End
|
||||
RG_End
|
||||
};
|
||||
|
||||
enum GamedllFunc_CBaseAnimating
|
||||
@ -57,10 +92,10 @@ enum GamedllFunc_CBaseAnimating
|
||||
* Description: -
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBaseAnimating_ResetSequenceInfo = 2048,
|
||||
RG_CBaseAnimating_ResetSequenceInfo = 2048,
|
||||
|
||||
// [...]
|
||||
RH_CBaseAnimating_End
|
||||
RG_CBaseAnimating_End
|
||||
};
|
||||
|
||||
enum GamedllFunc_CBasePlayer
|
||||
@ -69,20 +104,20 @@ enum GamedllFunc_CBasePlayer
|
||||
* Description: -
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_Spawn = 3072,
|
||||
RG_CBasePlayer_Spawn = 3072,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_Precache,
|
||||
RG_CBasePlayer_Precache,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Return type: int
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_ObjectCaps,
|
||||
RG_CBasePlayer_ObjectCaps,
|
||||
|
||||
|
||||
/**
|
||||
@ -90,128 +125,128 @@ enum GamedllFunc_CBasePlayer
|
||||
* Return type: int
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_Classify,
|
||||
RG_CBasePlayer_Classify,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this, pevAttacker, Float:flDamage, Float:vecDir[3], tracehandle, bitsDamageType)
|
||||
*/
|
||||
RH_CBasePlayer_TraceAttack,
|
||||
RG_CBasePlayer_TraceAttack,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Return type: int
|
||||
* Params: (const this, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
|
||||
*/
|
||||
RH_CBasePlayer_TakeDamage,
|
||||
RG_CBasePlayer_TakeDamage,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this, Float:flHealth, bitsDamageType)
|
||||
*/
|
||||
RH_CBasePlayer_TakeHealth,
|
||||
RG_CBasePlayer_TakeHealth,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this, pevAttacker, iGib)
|
||||
*/
|
||||
RH_CBasePlayer_Killed,
|
||||
RG_CBasePlayer_Killed,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this, score, bAllowNegativeScore)
|
||||
*/
|
||||
RH_CBasePlayer_AddPoints,
|
||||
RG_CBasePlayer_AddPoints,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this, score, bAllowNegativeScore)
|
||||
*/
|
||||
RH_CBasePlayer_AddPointsToTeam,
|
||||
RG_CBasePlayer_AddPointsToTeam,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Return type: BOOL
|
||||
* Params: (const this, const pItem)
|
||||
*/
|
||||
RH_CBasePlayer_AddPlayerItem,
|
||||
RG_CBasePlayer_AddPlayerItem,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Return type: BOOL
|
||||
* Params: (const this, const pItem)
|
||||
*/
|
||||
RH_CBasePlayer_RemovePlayerItem,
|
||||
RG_CBasePlayer_RemovePlayerItem,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Return type: int
|
||||
* Params: (const this, iAmount, szName[], iMax)
|
||||
*/
|
||||
RH_CBasePlayer_GiveAmmo,
|
||||
RG_CBasePlayer_GiveAmmo,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_ResetMaxSpeed,
|
||||
RG_CBasePlayer_ResetMaxSpeed,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_Jump,
|
||||
RG_CBasePlayer_Jump,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_Duck,
|
||||
RG_CBasePlayer_Duck,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_PreThink,
|
||||
RG_CBasePlayer_PreThink,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_PostThink,
|
||||
RG_CBasePlayer_PostThink,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_UpdateClientData,
|
||||
RG_CBasePlayer_UpdateClientData,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_ImpulseCommands,
|
||||
RG_CBasePlayer_ImpulseCommands,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this)
|
||||
*/
|
||||
RH_CBasePlayer_RoundRespawn,
|
||||
RG_CBasePlayer_RoundRespawn,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this, Float:flUntilTime, Float:flHoldTime, Float:flFadeTime, iAlpha)
|
||||
*/
|
||||
RH_CBasePlayer_Blind,
|
||||
RG_CBasePlayer_Blind,
|
||||
|
||||
/**
|
||||
* Description: -
|
||||
* Params: (const this, iPlayerIndex, bool:bSameTeam)
|
||||
*/
|
||||
RH_CBasePlayer_Observer_IsValidTarget,
|
||||
RG_CBasePlayer_Observer_IsValidTarget,
|
||||
|
||||
// [...]
|
||||
RH_CBasePlayer_End
|
||||
RG_CBasePlayer_End
|
||||
};
|
||||
|
||||
// CSGameRules
|
||||
|
@ -71,7 +71,8 @@ enum
|
||||
// used for EndRoundMessage() logged messages
|
||||
enum ScenarionEventEndRound
|
||||
{
|
||||
ROUND_TARGET_BOMB = 1,
|
||||
ROUND_NONE,
|
||||
ROUND_TARGET_BOMB,
|
||||
ROUND_VIP_ESCAPED,
|
||||
ROUND_VIP_ASSASSINATED,
|
||||
ROUND_TERRORISTS_ESCAPED,
|
||||
@ -375,6 +376,13 @@ public:
|
||||
void MarkSpawnSkipped() { m_bSkipSpawn = false; }
|
||||
float TimeRemaining() { return m_iRoundTimeSecs - gpGlobals->time + m_fRoundCount; }
|
||||
bool IsMatchStarted() { return (m_fTeamCount != 0.0f || m_fCareerRoundMenuTime != 0.0f || m_fCareerMatchMenuTime != 0.0f); }
|
||||
|
||||
inline void TerminateRound(float tmDelay, int iWinStatus)
|
||||
{
|
||||
m_iRoundWinStatus = iWinStatus;
|
||||
m_fTeamCount = gpGlobals->time + tmDelay;
|
||||
m_bRoundTerminating = true;
|
||||
}
|
||||
public:
|
||||
CVoiceGameMgr m_VoiceGameMgr;
|
||||
float m_fTeamCount; // m_flRestartRoundTime, the global time when the round is supposed to end, if this is not 0
|
||||
@ -458,6 +466,10 @@ public:
|
||||
int m_iRoundWinDifference;
|
||||
float m_fCareerMatchMenuTime;
|
||||
bool m_bSkipSpawn;
|
||||
|
||||
// custom
|
||||
bool m_bNeededPlayers;
|
||||
float m_flEscapeRatio;
|
||||
};
|
||||
|
||||
typedef struct mapcycle_item_s
|
||||
|
@ -68,6 +68,16 @@ public:
|
||||
virtual void unregisterHook(hookfunc_t hook) = 0;
|
||||
};
|
||||
|
||||
// Hook chain registry(for hooks [un]registration)
|
||||
template<typename t_ret, typename ...t_args>
|
||||
class IHookChainRegistryClassEmpty {
|
||||
public:
|
||||
typedef t_ret(*hookfunc_t)(IHookChain<t_ret, t_args...>*, t_args...);
|
||||
|
||||
virtual void registerHook(hookfunc_t hook) = 0;
|
||||
virtual void unregisterHook(hookfunc_t hook) = 0;
|
||||
};
|
||||
|
||||
// Hook chain registry(for hooks [un]registration)
|
||||
template<typename ...t_args>
|
||||
class IVoidHookChainRegistry {
|
||||
|
@ -170,6 +170,10 @@ typedef IVoidHookChainRegistry<class CBasePlayer *, struct entvars_s *, struct e
|
||||
typedef IVoidHookChain<class CBasePlayer *, struct entvars_s *, struct entvars_s *, Vector &, Vector &, struct TraceResult *> IReGameHook_RadiusFlash_TraceLine;
|
||||
typedef IVoidHookChainRegistry<class CBasePlayer *, struct entvars_s *, struct entvars_s *, Vector &, Vector &, struct TraceResult *> IReGameHookRegistry_RadiusFlash_TraceLine;
|
||||
|
||||
// RoundEnd hook
|
||||
typedef IHookChain<bool, int, ScenarionEventEndRound, float> IReGameHook_RoundEnd;
|
||||
typedef IHookChainRegistryClassEmpty<bool, int, ScenarionEventEndRound, float> IReGameHookRegistry_RoundEnd;
|
||||
|
||||
class IReGameHookchains {
|
||||
public:
|
||||
virtual ~IReGameHookchains() {}
|
||||
@ -211,6 +215,7 @@ public:
|
||||
virtual IReGameHookRegistry_GetForceCamera* GetForceCamera() = 0;
|
||||
virtual IReGameHookRegistry_PlayerBlind* PlayerBlind() = 0;
|
||||
virtual IReGameHookRegistry_RadiusFlash_TraceLine* RadiusFlash_TraceLine() = 0;
|
||||
virtual IReGameHookRegistry_RoundEnd* RoundEnd() = 0;
|
||||
|
||||
};
|
||||
|
||||
@ -229,6 +234,8 @@ struct ReGameFuncs_t {
|
||||
void (*ApplyMultiDamage)(entvars_t *pevInflictor, entvars_t *pevAttacker);
|
||||
void (*AddMultiDamage)(entvars_t *pevInflictor, CBaseEntity *pEntity, float flDamage, int bitsDamageType);
|
||||
|
||||
void (*EndRoundMessage)(const char *sentence, int event);
|
||||
|
||||
};
|
||||
|
||||
class IReGameApi {
|
||||
|
@ -68,12 +68,12 @@ public:
|
||||
virtual void SetObjectCollisionBox() = 0;
|
||||
virtual int Classify() = 0;
|
||||
virtual void DeathNotice(struct entvars_s *pevChild) = 0;
|
||||
virtual void TraceAttack(struct entvars_s *pevAttacker, float flDamage, Vector vecDir, struct TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual void TraceAttack(struct entvars_s *pevAttacker, float flDamage, Vector &vecDir, struct TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual int TakeDamage(struct entvars_s *pevInflictor, struct entvars_s *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
virtual int TakeHealth(float flHealth, int bitsDamageType) = 0;
|
||||
virtual void Killed(struct entvars_s *pevAttacker, int iGib) = 0;
|
||||
virtual int BloodColor() = 0;
|
||||
virtual void TraceBleed(float flDamage, Vector vecDir, struct TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual void TraceBleed(float flDamage, Vector &vecDir, struct TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual bool IsTriggered(CCSEntity *pActivator) = 0;
|
||||
virtual ICSMonster *MyMonsterPointer() = 0;
|
||||
virtual ICSquadMonster *MySquadMonsterPointer() = 0;
|
||||
@ -118,8 +118,8 @@ public:
|
||||
public:
|
||||
virtual struct entvars_s *GetEntVars() const = 0;
|
||||
virtual class CBaseEntity *GetEntity() const = 0;
|
||||
virtual void FireBullets(int iShots, Vector vecSrc, Vector vecDirShooting, Vector vecSpread, float flDistance, int iBulletType, int iTracerFreq, int iDamage, entvars_t *pevAttacker) = 0;
|
||||
virtual Vector FireBullets3(Vector vecSrc, Vector vecDirShooting, float vecSpread, float flDistance, int iPenetration, int iBulletType, int iDamage, float flRangeModifier, entvars_t *pevAttacker, bool bPistol, int shared_rand) = 0;
|
||||
virtual void FireBullets(int iShots, Vector &vecSrc, Vector &vecDirShooting, Vector &vecSpread, float flDistance, int iBulletType, int iTracerFreq, int iDamage, entvars_t *pevAttacker) = 0;
|
||||
virtual Vector FireBullets3(Vector &vecSrc, Vector &vecDirShooting, float vecSpread, float flDistance, int iPenetration, int iBulletType, int iDamage, float flRangeModifier, entvars_t *pevAttacker, bool bPistol, int shared_rand) = 0;
|
||||
};
|
||||
|
||||
class ICSDelay: public ICSEntity {
|
||||
@ -208,7 +208,7 @@ public:
|
||||
class ICSMonster: public ICSToggle {
|
||||
public:
|
||||
virtual void KeyValue(struct KeyValueData_s *pkvd) = 0;
|
||||
virtual void TraceAttack(struct entvars_s *pevAttacker, float flDamage, Vector vecDir, struct TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual void TraceAttack(struct entvars_s *pevAttacker, float flDamage, Vector &vecDir, struct TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual int TakeDamage(struct entvars_s *pevInflictor, struct entvars_s *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
virtual int TakeHealth(float flHealth, int bitsDamageType) = 0;
|
||||
virtual void Killed(struct entvars_s *pevAttacker, int iGib) = 0;
|
||||
@ -260,7 +260,7 @@ public:
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual int Classify() = 0;
|
||||
virtual void TraceAttack(struct entvars_s *pevAttacker, float flDamage, Vector vecDir, struct TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual void TraceAttack(struct entvars_s *pevAttacker, float flDamage, Vector &vecDir, struct TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual int TakeDamage(struct entvars_s *pevInflictor, struct entvars_s *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
virtual int TakeHealth(float flHealth, int bitsDamageType) = 0;
|
||||
virtual void Killed(struct entvars_s *pevAttacker, int iGib) = 0;
|
||||
@ -846,7 +846,7 @@ public:
|
||||
virtual int Save(CSave &save) = 0;
|
||||
virtual int Restore(CRestore &restore) = 0;
|
||||
virtual int ObjectCaps() = 0;
|
||||
virtual void TraceAttack(struct entvars_s *pevAttacker, float flDamage, Vector vecDir, struct TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual void TraceAttack(struct entvars_s *pevAttacker, float flDamage, Vector &vecDir, struct TraceResult *ptr, int bitsDamageType) = 0;
|
||||
virtual int TakeDamage(struct entvars_s *pevInflictor, struct entvars_s *pevAttacker, float flDamage, int bitsDamageType) = 0;
|
||||
virtual int DamageDecal(int bitsDamageType) = 0;
|
||||
virtual void Use(CCSEntity *pActivator, CCSEntity *pCaller, USE_TYPE useType, float value) = 0;
|
||||
|
@ -245,6 +245,7 @@
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\reapi_utils.cpp" />
|
||||
<ClCompile Include="..\src\sdk_util.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -698,6 +698,9 @@
|
||||
<ClCompile Include="..\src\natives_misc.cpp">
|
||||
<Filter>src\natives</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\reapi_utils.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\extra\amxmodx\scripting\include\reapi.inc">
|
||||
|
@ -55,7 +55,7 @@ struct amxx_module_info_s
|
||||
|
||||
/* calling convention for native functions */
|
||||
#if !defined AMX_NATIVE_CALL
|
||||
#define AMX_NATIVE_CALL
|
||||
#define AMX_NATIVE_CALL FORCE_STACK_ALIGN
|
||||
#endif
|
||||
/* calling convention for all interface functions and callback functions */
|
||||
#if !defined AMXAPI
|
||||
|
@ -55,7 +55,7 @@ void CBasePlayer_Spawn(IReGameHook_CBasePlayer_Spawn *chain, CBasePlayer *pthis)
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_Spawn, original, pthis->entindex());
|
||||
callVoidForward(RG_CBasePlayer_Spawn, original, pthis->entindex());
|
||||
}
|
||||
|
||||
void CBasePlayer_Precache(IReGameHook_CBasePlayer_Precache *chain, CBasePlayer *pthis)
|
||||
@ -65,7 +65,7 @@ void CBasePlayer_Precache(IReGameHook_CBasePlayer_Precache *chain, CBasePlayer *
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_Precache, original, pthis->entindex());
|
||||
callVoidForward(RG_CBasePlayer_Precache, original, pthis->entindex());
|
||||
}
|
||||
|
||||
int CBasePlayer_ObjectCaps(IReGameHook_CBasePlayer_ObjectCaps *chain, CBasePlayer *pthis)
|
||||
@ -75,7 +75,7 @@ int CBasePlayer_ObjectCaps(IReGameHook_CBasePlayer_ObjectCaps *chain, CBasePlaye
|
||||
return chain->callNext();
|
||||
};
|
||||
|
||||
return callForward<int>(RH_CBasePlayer_ObjectCaps, original, pthis->entindex());
|
||||
return callForward<int>(RG_CBasePlayer_ObjectCaps, original, pthis->entindex());
|
||||
}
|
||||
|
||||
int CBasePlayer_Classify(IReGameHook_CBasePlayer_Classify *chain, CBasePlayer *pthis)
|
||||
@ -85,7 +85,7 @@ int CBasePlayer_Classify(IReGameHook_CBasePlayer_Classify *chain, CBasePlayer *p
|
||||
return chain->callNext();
|
||||
};
|
||||
|
||||
return callForward<int>(RH_CBasePlayer_Classify, original, pthis->entindex());
|
||||
return callForward<int>(RG_CBasePlayer_Classify, original, pthis->entindex());
|
||||
}
|
||||
|
||||
void CBasePlayer_TraceAttack(IReGameHook_CBasePlayer_TraceAttack *chain, CBasePlayer *pthis, entvars_t *pevAttacker, float flDamage, Vector& vecDir, TraceResult *ptr, int bitsDamageType)
|
||||
@ -97,7 +97,7 @@ void CBasePlayer_TraceAttack(IReGameHook_CBasePlayer_TraceAttack *chain, CBasePl
|
||||
chain->callNext(PEV(_pevAttacker), _flDamage, vecDirCopy, (TraceResult *)_ptr, _bitsDamageType);
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_TraceAttack, original, pthis->entindex(), indexOfEdict(pevAttacker), flDamage, g_amxxapi.PrepareCellArrayA(reinterpret_cast<cell *>(&vecDirCopy), 3, true), int(ptr), bitsDamageType);
|
||||
callVoidForward(RG_CBasePlayer_TraceAttack, original, pthis->entindex(), indexOfEdict(pevAttacker), flDamage, g_amxxapi.PrepareCellArrayA(reinterpret_cast<cell *>(&vecDirCopy), 3, true), int(ptr), bitsDamageType);
|
||||
}
|
||||
|
||||
int CBasePlayer_TakeDamage(IReGameHook_CBasePlayer_TakeDamage *chain, CBasePlayer *pthis, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType)
|
||||
@ -107,7 +107,7 @@ int CBasePlayer_TakeDamage(IReGameHook_CBasePlayer_TakeDamage *chain, CBasePlaye
|
||||
return chain->callNext(PEV(_pevInflictor), PEV(_pevAttacker), _flDamage, _bitsDamageType);
|
||||
};
|
||||
|
||||
return callForward<int>(RH_CBasePlayer_TakeDamage, original, pthis->entindex(), indexOfEdict(pevInflictor), indexOfEdict(pevAttacker), flDamage, bitsDamageType);
|
||||
return callForward<int>(RG_CBasePlayer_TakeDamage, original, pthis->entindex(), indexOfEdict(pevInflictor), indexOfEdict(pevAttacker), flDamage, bitsDamageType);
|
||||
}
|
||||
|
||||
int CBasePlayer_TakeHealth(IReGameHook_CBasePlayer_TakeHealth *chain, CBasePlayer *pthis, float flHealth, int bitsDamageType)
|
||||
@ -117,7 +117,7 @@ int CBasePlayer_TakeHealth(IReGameHook_CBasePlayer_TakeHealth *chain, CBasePlaye
|
||||
return chain->callNext(_flHealth, _bitsDamageType);
|
||||
};
|
||||
|
||||
return callForward<int>(RH_CBasePlayer_TakeHealth, original, pthis->entindex(), flHealth, bitsDamageType);
|
||||
return callForward<int>(RG_CBasePlayer_TakeHealth, original, pthis->entindex(), flHealth, bitsDamageType);
|
||||
}
|
||||
|
||||
void CBasePlayer_Killed(IReGameHook_CBasePlayer_Killed *chain, CBasePlayer *pthis, entvars_t *pevAttacker, int iGib)
|
||||
@ -127,7 +127,7 @@ void CBasePlayer_Killed(IReGameHook_CBasePlayer_Killed *chain, CBasePlayer *pthi
|
||||
chain->callNext(PEV(_pevAttacker), _iGib);
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_Killed, original, pthis->entindex(), indexOfEdict(pevAttacker), iGib);
|
||||
callVoidForward(RG_CBasePlayer_Killed, original, pthis->entindex(), indexOfEdict(pevAttacker), iGib);
|
||||
}
|
||||
|
||||
void CBasePlayer_AddPoints(IReGameHook_CBasePlayer_AddPoints *chain, CBasePlayer *pthis, int score, BOOL bAllowNegativeScore)
|
||||
@ -137,7 +137,7 @@ void CBasePlayer_AddPoints(IReGameHook_CBasePlayer_AddPoints *chain, CBasePlayer
|
||||
chain->callNext(_score, _bAllowNegativeScore);
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_AddPoints, original, pthis->entindex(), score, bAllowNegativeScore);
|
||||
callVoidForward(RG_CBasePlayer_AddPoints, original, pthis->entindex(), score, bAllowNegativeScore);
|
||||
}
|
||||
|
||||
void CBasePlayer_AddPointsToTeam(IReGameHook_CBasePlayer_AddPointsToTeam *chain, CBasePlayer *pthis, int score, BOOL bAllowNegativeScore)
|
||||
@ -147,7 +147,7 @@ void CBasePlayer_AddPointsToTeam(IReGameHook_CBasePlayer_AddPointsToTeam *chain,
|
||||
chain->callNext(_score, _bAllowNegativeScore);
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_AddPointsToTeam, original, pthis->entindex(), score, bAllowNegativeScore);
|
||||
callVoidForward(RG_CBasePlayer_AddPointsToTeam, original, pthis->entindex(), score, bAllowNegativeScore);
|
||||
}
|
||||
|
||||
BOOL CBasePlayer_AddPlayerItem(IReGameHook_CBasePlayer_AddPlayerItem *chain, CBasePlayer *pthis, CBasePlayerItem *pItem)
|
||||
@ -157,7 +157,7 @@ BOOL CBasePlayer_AddPlayerItem(IReGameHook_CBasePlayer_AddPlayerItem *chain, CBa
|
||||
return chain->callNext(getPrivate<CBasePlayerItem>(_pItem));
|
||||
};
|
||||
|
||||
return callForward<BOOL>(RH_CBasePlayer_AddPlayerItem, original, pthis->entindex(), pItem->entindex());
|
||||
return callForward<BOOL>(RG_CBasePlayer_AddPlayerItem, original, pthis->entindex(), pItem->entindex());
|
||||
}
|
||||
|
||||
BOOL CBasePlayer_RemovePlayerItem(IReGameHook_CBasePlayer_RemovePlayerItem *chain, CBasePlayer *pthis, CBasePlayerItem *pItem)
|
||||
@ -167,7 +167,7 @@ BOOL CBasePlayer_RemovePlayerItem(IReGameHook_CBasePlayer_RemovePlayerItem *chai
|
||||
return chain->callNext(getPrivate<CBasePlayerItem>(_pItem));
|
||||
};
|
||||
|
||||
return callForward<BOOL>(RH_CBasePlayer_RemovePlayerItem, original, pthis->entindex(), pItem->entindex());
|
||||
return callForward<BOOL>(RG_CBasePlayer_RemovePlayerItem, original, pthis->entindex(), pItem->entindex());
|
||||
}
|
||||
|
||||
int CBasePlayer_GiveAmmo(IReGameHook_CBasePlayer_GiveAmmo *chain, CBasePlayer *pthis, int iAmount, char *szName, int iMax)
|
||||
@ -177,7 +177,7 @@ int CBasePlayer_GiveAmmo(IReGameHook_CBasePlayer_GiveAmmo *chain, CBasePlayer *p
|
||||
return chain->callNext(_iAmount, _szName, _iMax);
|
||||
};
|
||||
|
||||
return callForward<int>(RH_CBasePlayer_GiveAmmo, original, pthis->entindex(), iAmount, szName, iMax);
|
||||
return callForward<int>(RG_CBasePlayer_GiveAmmo, original, pthis->entindex(), iAmount, szName, iMax);
|
||||
}
|
||||
|
||||
void CBasePlayer_ResetMaxSpeed(IReGameHook_CBasePlayer_ResetMaxSpeed *chain, CBasePlayer *pthis)
|
||||
@ -187,7 +187,7 @@ void CBasePlayer_ResetMaxSpeed(IReGameHook_CBasePlayer_ResetMaxSpeed *chain, CBa
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_ResetMaxSpeed, original, pthis->entindex());
|
||||
callVoidForward(RG_CBasePlayer_ResetMaxSpeed, original, pthis->entindex());
|
||||
}
|
||||
|
||||
void CBasePlayer_Jump(IReGameHook_CBasePlayer_Jump *chain, CBasePlayer *pthis)
|
||||
@ -197,7 +197,7 @@ void CBasePlayer_Jump(IReGameHook_CBasePlayer_Jump *chain, CBasePlayer *pthis)
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_Jump, original, pthis->entindex());
|
||||
callVoidForward(RG_CBasePlayer_Jump, original, pthis->entindex());
|
||||
}
|
||||
|
||||
void CBasePlayer_Duck(IReGameHook_CBasePlayer_Duck *chain, CBasePlayer *pthis)
|
||||
@ -207,7 +207,7 @@ void CBasePlayer_Duck(IReGameHook_CBasePlayer_Duck *chain, CBasePlayer *pthis)
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_Duck, original, pthis->entindex());
|
||||
callVoidForward(RG_CBasePlayer_Duck, original, pthis->entindex());
|
||||
}
|
||||
|
||||
void CBasePlayer_PreThink(IReGameHook_CBasePlayer_PreThink *chain, CBasePlayer *pthis)
|
||||
@ -217,7 +217,7 @@ void CBasePlayer_PreThink(IReGameHook_CBasePlayer_PreThink *chain, CBasePlayer *
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_PreThink, original, pthis->entindex());
|
||||
callVoidForward(RG_CBasePlayer_PreThink, original, pthis->entindex());
|
||||
}
|
||||
|
||||
void CBasePlayer_PostThink(IReGameHook_CBasePlayer_PostThink *chain, CBasePlayer *pthis)
|
||||
@ -227,7 +227,7 @@ void CBasePlayer_PostThink(IReGameHook_CBasePlayer_PostThink *chain, CBasePlayer
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_PostThink, original, pthis->entindex());
|
||||
callVoidForward(RG_CBasePlayer_PostThink, original, pthis->entindex());
|
||||
}
|
||||
|
||||
void CBasePlayer_UpdateClientData(IReGameHook_CBasePlayer_UpdateClientData *chain, CBasePlayer *pthis)
|
||||
@ -237,7 +237,7 @@ void CBasePlayer_UpdateClientData(IReGameHook_CBasePlayer_UpdateClientData *chai
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_UpdateClientData, original, pthis->entindex());
|
||||
callVoidForward(RG_CBasePlayer_UpdateClientData, original, pthis->entindex());
|
||||
}
|
||||
|
||||
void CBasePlayer_ImpulseCommands(IReGameHook_CBasePlayer_ImpulseCommands *chain, CBasePlayer *pthis)
|
||||
@ -247,7 +247,7 @@ void CBasePlayer_ImpulseCommands(IReGameHook_CBasePlayer_ImpulseCommands *chain,
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_ImpulseCommands, original, pthis->entindex());
|
||||
callVoidForward(RG_CBasePlayer_ImpulseCommands, original, pthis->entindex());
|
||||
}
|
||||
|
||||
void CBasePlayer_RoundRespawn(IReGameHook_CBasePlayer_RoundRespawn *chain, CBasePlayer *pthis)
|
||||
@ -257,7 +257,7 @@ void CBasePlayer_RoundRespawn(IReGameHook_CBasePlayer_RoundRespawn *chain, CBase
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_RoundRespawn, original, pthis->entindex());
|
||||
callVoidForward(RG_CBasePlayer_RoundRespawn, original, pthis->entindex());
|
||||
}
|
||||
|
||||
void CBasePlayer_Blind(IReGameHook_CBasePlayer_Blind *chain, CBasePlayer *pthis, float flUntilTime, float flHoldTime, float flFadeTime, int iAlpha)
|
||||
@ -267,7 +267,7 @@ void CBasePlayer_Blind(IReGameHook_CBasePlayer_Blind *chain, CBasePlayer *pthis,
|
||||
chain->callNext(_flUntilTime, _flHoldTime, _flFadeTime, _iAlpha);
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_Blind, original, pthis->entindex(), flUntilTime, flHoldTime, flFadeTime, iAlpha);
|
||||
callVoidForward(RG_CBasePlayer_Blind, original, pthis->entindex(), flUntilTime, flHoldTime, flFadeTime, iAlpha);
|
||||
}
|
||||
|
||||
CBaseEntity *CBasePlayer_Observer_IsValidTarget(IReGameHook_CBasePlayer_Observer_IsValidTarget *chain, CBasePlayer *pthis, int iPlayerIndex, bool bSameTeam)
|
||||
@ -277,7 +277,7 @@ CBaseEntity *CBasePlayer_Observer_IsValidTarget(IReGameHook_CBasePlayer_Observer
|
||||
return chain->callNext(_iPlayerIndex, _bSameTeam);
|
||||
};
|
||||
|
||||
return callForward<CBaseEntity *>(RH_CBasePlayer_Observer_IsValidTarget, original, pthis->entindex(), iPlayerIndex, bSameTeam);
|
||||
return callForward<CBaseEntity *>(RG_CBasePlayer_Observer_IsValidTarget, original, pthis->entindex(), iPlayerIndex, bSameTeam);
|
||||
}
|
||||
|
||||
void CBasePlayer_SetAnimation(IReGameHook_CBasePlayer_SetAnimation *chain, CBasePlayer *pthis, PLAYER_ANIM playerAnim)
|
||||
@ -287,7 +287,7 @@ void CBasePlayer_SetAnimation(IReGameHook_CBasePlayer_SetAnimation *chain, CBase
|
||||
chain->callNext(_playerAnim);
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_SetAnimation, original, pthis->entindex(), playerAnim);
|
||||
callVoidForward(RG_CBasePlayer_SetAnimation, original, pthis->entindex(), playerAnim);
|
||||
}
|
||||
|
||||
void CBasePlayer_GiveDefaultItems(IReGameHook_CBasePlayer_GiveDefaultItems *chain, CBasePlayer *pthis)
|
||||
@ -297,7 +297,7 @@ void CBasePlayer_GiveDefaultItems(IReGameHook_CBasePlayer_GiveDefaultItems *chai
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_GiveDefaultItems, original, pthis->entindex());
|
||||
callVoidForward(RG_CBasePlayer_GiveDefaultItems, original, pthis->entindex());
|
||||
}
|
||||
|
||||
void CBasePlayer_GiveNamedItem(IReGameHook_CBasePlayer_GiveNamedItem *chain, CBasePlayer *pthis, const char *pszName)
|
||||
@ -307,7 +307,7 @@ void CBasePlayer_GiveNamedItem(IReGameHook_CBasePlayer_GiveNamedItem *chain, CBa
|
||||
chain->callNext(_pszName);
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_GiveNamedItem, original, pthis->entindex(), pszName);
|
||||
callVoidForward(RG_CBasePlayer_GiveNamedItem, original, pthis->entindex(), pszName);
|
||||
}
|
||||
|
||||
void CBasePlayer_AddAccount(IReGameHook_CBasePlayer_AddAccount *chain, CBasePlayer *pthis, int amount, bool bTrackChange)
|
||||
@ -317,7 +317,7 @@ void CBasePlayer_AddAccount(IReGameHook_CBasePlayer_AddAccount *chain, CBasePlay
|
||||
chain->callNext(_amount, _bTrackChange);
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_AddAccount, original, pthis->entindex(), amount, bTrackChange);
|
||||
callVoidForward(RG_CBasePlayer_AddAccount, original, pthis->entindex(), amount, bTrackChange);
|
||||
}
|
||||
|
||||
void CBasePlayer_GiveShield(IReGameHook_CBasePlayer_GiveShield *chain, CBasePlayer *pthis, bool bDeploy)
|
||||
@ -327,7 +327,7 @@ void CBasePlayer_GiveShield(IReGameHook_CBasePlayer_GiveShield *chain, CBasePlay
|
||||
chain->callNext(_bDeploy);
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBasePlayer_GiveShield, original, pthis->entindex(), bDeploy);
|
||||
callVoidForward(RG_CBasePlayer_GiveShield, original, pthis->entindex(), bDeploy);
|
||||
}
|
||||
|
||||
void CBaseAnimating_ResetSequenceInfo(IReGameHook_CBaseAnimating_ResetSequenceInfo *chain, CBaseAnimating *pthis)
|
||||
@ -337,7 +337,7 @@ void CBaseAnimating_ResetSequenceInfo(IReGameHook_CBaseAnimating_ResetSequenceIn
|
||||
chain->callNext();
|
||||
};
|
||||
|
||||
callVoidForward(RH_CBaseAnimating_ResetSequenceInfo, original, pthis->entindex());
|
||||
callVoidForward(RG_CBaseAnimating_ResetSequenceInfo, original, pthis->entindex());
|
||||
}
|
||||
|
||||
int GetForceCamera(IReGameHook_GetForceCamera *chain, CBasePlayer *pObserver)
|
||||
@ -347,7 +347,7 @@ int GetForceCamera(IReGameHook_GetForceCamera *chain, CBasePlayer *pObserver)
|
||||
return chain->callNext(getPrivate<CBasePlayer>(_pObserver));
|
||||
};
|
||||
|
||||
return callForward<int>(RH_GetForceCamera, original, pObserver->entindex());
|
||||
return callForward<int>(RG_GetForceCamera, original, pObserver->entindex());
|
||||
}
|
||||
|
||||
void PlayerBlind(IReGameHook_PlayerBlind *chain, CBasePlayer *pPlayer, entvars_t *pevInflictor, entvars_t *pevAttacker, float fadeTime, float fadeHold, int alpha, Vector& color)
|
||||
@ -359,7 +359,7 @@ void PlayerBlind(IReGameHook_PlayerBlind *chain, CBasePlayer *pPlayer, entvars_t
|
||||
chain->callNext(getPrivate<CBasePlayer>(_pPlayer), PEV(_pevInflictor), PEV(_pevAttacker), _fadeTime, _fadeHold, _alpha, colorCopy);
|
||||
};
|
||||
|
||||
callVoidForward(RH_PlayerBlind, original, pPlayer->entindex(), indexOfEdict(pevInflictor), indexOfEdict(pevAttacker), fadeTime, fadeHold, alpha, g_amxxapi.PrepareCellArrayA(reinterpret_cast<cell *>(&colorCopy), 3, true));
|
||||
callVoidForward(RG_PlayerBlind, original, pPlayer->entindex(), indexOfEdict(pevInflictor), indexOfEdict(pevAttacker), fadeTime, fadeHold, alpha, g_amxxapi.PrepareCellArrayA(reinterpret_cast<cell *>(&colorCopy), 3, true));
|
||||
}
|
||||
|
||||
void RadiusFlash_TraceLine(IReGameHook_RadiusFlash_TraceLine *chain, CBasePlayer *pPlayer, entvars_t *pevInflictor, entvars_t *pevAttacker, Vector& vecSrc, Vector& vecSpot, TraceResult *ptr)
|
||||
@ -371,5 +371,15 @@ void RadiusFlash_TraceLine(IReGameHook_RadiusFlash_TraceLine *chain, CBasePlayer
|
||||
chain->callNext(getPrivate<CBasePlayer>(_pPlayer), PEV(_pevInflictor), PEV(_pevAttacker), vecSrcCopy, vecSpotCopy, (TraceResult *)_ptr);
|
||||
};
|
||||
|
||||
callVoidForward(RH_RadiusFlash_TraceLine, original, pPlayer->entindex(), indexOfEdict(pevInflictor), indexOfEdict(pevAttacker), g_amxxapi.PrepareCellArrayA(reinterpret_cast<cell *>(&vecSrcCopy), 3, true), g_amxxapi.PrepareCellArrayA(reinterpret_cast<cell *>(&vecSpotCopy), 3, true), int(ptr));
|
||||
callVoidForward(RG_RadiusFlash_TraceLine, original, pPlayer->entindex(), indexOfEdict(pevInflictor), indexOfEdict(pevAttacker), g_amxxapi.PrepareCellArrayA(reinterpret_cast<cell *>(&vecSrcCopy), 3, true), g_amxxapi.PrepareCellArrayA(reinterpret_cast<cell *>(&vecSpotCopy), 3, true), int(ptr));
|
||||
}
|
||||
|
||||
bool RoundEnd(IReGameHook_RoundEnd *chain, int winStatus, ScenarionEventEndRound event, float tmDelay)
|
||||
{
|
||||
auto original = [chain](int _winStatus, ScenarionEventEndRound _event, float _tmDelay)
|
||||
{
|
||||
return chain->callNext(_winStatus, _event, _tmDelay);
|
||||
};
|
||||
|
||||
return callForward<bool>(RG_RoundEnd, original, winStatus, event, tmDelay);
|
||||
}
|
||||
|
@ -3,10 +3,10 @@
|
||||
// hookchain return type
|
||||
enum HookChainState
|
||||
{
|
||||
HC_CONTINUE = 0,
|
||||
HC_OVERRIDE,
|
||||
HC_SUPERCEDE,
|
||||
HC_BREAK
|
||||
HC_CONTINUE = 0, // plugin didn't take any action
|
||||
HC_OVERRIDE, // call real function, but use my return value
|
||||
HC_SUPERCEDE, // skip real function, use my return value
|
||||
HC_BREAK // skip all forwards and real function, use my return value
|
||||
};
|
||||
|
||||
// api types
|
||||
@ -200,6 +200,7 @@ void Cvar_DirectSet(IRehldsHook_Cvar_DirectSet *chain, cvar_t *var, const char *
|
||||
int GetForceCamera(IReGameHook_GetForceCamera *chain, CBasePlayer *pObserver);
|
||||
void PlayerBlind(IReGameHook_PlayerBlind *chain, CBasePlayer *pPlayer, entvars_t *pevInflictor, entvars_t *pevAttacker, float fadeTime, float fadeHold, int alpha, Vector& color);
|
||||
void RadiusFlash_TraceLine(IReGameHook_RadiusFlash_TraceLine *chain, CBasePlayer *pPlayer, entvars_t *pevInflictor, entvars_t *pevAttacker, Vector& vecSrc, Vector& vecSpot, TraceResult *ptr);
|
||||
bool RoundEnd(IReGameHook_RoundEnd *chain, int winStatus, ScenarionEventEndRound event, float tmDelay);
|
||||
|
||||
// regamedll functions - player
|
||||
void CBasePlayer_Spawn(IReGameHook_CBasePlayer_Spawn *chain, CBasePlayer *pthis);
|
||||
|
@ -1,14 +1,16 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
inline size_t getFwdParamType(void(*)(int)) { return FP_CELL; }
|
||||
inline size_t getFwdParamType(void(*)(bool)) { return FP_CELL; }
|
||||
inline size_t getFwdParamType(void(*)(Vector&)) { return FP_CELL; }
|
||||
inline size_t getFwdParamType(void(*)(PLAYER_ANIM)) { return FP_CELL; }
|
||||
inline size_t getFwdParamType(void(*)(float)) { return FP_FLOAT; }
|
||||
inline size_t getFwdParamType(void(*)(const char *)) { return FP_STRING; }
|
||||
inline size_t getFwdParamType(void(*)(int)) { return FP_CELL; }
|
||||
inline size_t getFwdParamType(void(*)(bool)) { return FP_CELL; }
|
||||
inline size_t getFwdParamType(void(*)(Vector&)) { return FP_ARRAY; }
|
||||
inline size_t getFwdParamType(void(*)(PLAYER_ANIM)) { return FP_CELL; }
|
||||
inline size_t getFwdParamType(void(*)(ScenarionEventEndRound)) { return FP_CELL; }
|
||||
inline size_t getFwdParamType(void(*)(float)) { return FP_FLOAT; }
|
||||
inline size_t getFwdParamType(void(*)(const char *)) { return FP_STRING; }
|
||||
inline size_t getFwdParamType(void(*)(char *)) { return FP_STRING; }
|
||||
|
||||
template<typename T>
|
||||
inline size_t getFwdParamType(void(*)(T *)) { return FP_CELL; }
|
||||
inline size_t getFwdParamType(void(*)(T *)) { return FP_CELL; }
|
||||
|
||||
template<size_t current = 0>
|
||||
void setupParamTypes(size_t param_types[], void (*)())
|
||||
@ -66,11 +68,12 @@ hook_t hooklist_engine[] = {
|
||||
ENG(Cvar_DirectSet)
|
||||
};
|
||||
|
||||
#define DLL(h) { {}, {}, #h, "ReGameDLL", [](){ return api_cfg.hasReGameDLL(); }, ((!(RH_##h & (MAX_REGION_RANGE - 1)) ? regfunc::current_cell = 1, true : false) || (RH_##h & (MAX_REGION_RANGE - 1)) == regfunc::current_cell++) ? regfunc(h) : regfunc(#h " doesn't match hook definition"), [](){ g_ReGameHookchains->##h##()->registerHook(&##h); }, [](){ g_ReGameHookchains->##h##()->unregisterHook(&##h); }}
|
||||
#define DLL(h) { {}, {}, #h, "ReGameDLL", [](){ return api_cfg.hasReGameDLL(); }, ((!(RG_##h & (MAX_REGION_RANGE - 1)) ? regfunc::current_cell = 1, true : false) || (RG_##h & (MAX_REGION_RANGE - 1)) == regfunc::current_cell++) ? regfunc(h) : regfunc(#h " doesn't match hook definition"), [](){ g_ReGameHookchains->##h##()->registerHook(&##h); }, [](){ g_ReGameHookchains->##h##()->unregisterHook(&##h); }}
|
||||
hook_t hooklist_gamedll[] = {
|
||||
DLL(GetForceCamera),
|
||||
DLL(PlayerBlind),
|
||||
DLL(RadiusFlash_TraceLine)
|
||||
DLL(RadiusFlash_TraceLine),
|
||||
DLL(RoundEnd)
|
||||
};
|
||||
|
||||
hook_t hooklist_animating[] = {
|
||||
|
@ -63,42 +63,10 @@ struct hooklist_t
|
||||
|
||||
enum EngineFunc
|
||||
{
|
||||
//RH_Steam_NotifyClientConnect = 0,
|
||||
//RH_SV_ConnectClient,
|
||||
//RH_SV_GetIDString,
|
||||
//RH_SV_SendServerinfo,
|
||||
//RH_SV_CheckProtocol,
|
||||
//RH_SVC_GetChallenge,
|
||||
//RH_SV_CheckKeyInfo,
|
||||
//RH_SV_CheckIPRestrictions,
|
||||
//RH_SV_FinishCertificateCheck,
|
||||
//RH_Steam_NotifyBotConnect,
|
||||
//RH_SV_SerializeSteamid,
|
||||
//RH_SV_CompareUserID,
|
||||
//RH_Steam_NotifyClientDisconnect,
|
||||
//RH_NET_GetPacketPreprocessor,
|
||||
//RH_ValidateCommand,
|
||||
//RH_ClientConnected,
|
||||
//RH_SV_HandleClientMessage,
|
||||
//RH_Mod_LoadBrushModel,
|
||||
//RH_Mod_LoadStudioModel,
|
||||
//RH_ExecuteServerStringCmd,
|
||||
//RH_SV_EmitEvents,
|
||||
//RH_EV_PlayReliableEvent,
|
||||
RH_SV_StartSound = BEGIN_FUNC_REGION(engine),
|
||||
//RH_PF_Remove_I,
|
||||
//RH_PF_BuildSoundMsg_I,
|
||||
//RH_SV_WriteFullClientUpdate,
|
||||
//RH_SV_CheckConsistencyResponse,
|
||||
RH_SV_DropClient,
|
||||
RH_SV_ActivateServer,
|
||||
//RH_SV_WriteVoiceCodec,
|
||||
//RH_Steam_GSGetSteamID,
|
||||
//RH_SV_TransferConsistencyInfo,
|
||||
//RH_Steam_GSBUpdateUserData,
|
||||
RH_Cvar_DirectSet,
|
||||
//RH_SV_EstablishTimeBase,
|
||||
//RH_SV_Spawn_f,
|
||||
|
||||
// [...]
|
||||
RH_EngineFunc_End
|
||||
@ -106,55 +74,56 @@ enum EngineFunc
|
||||
|
||||
enum GamedllFunc
|
||||
{
|
||||
RH_GetForceCamera = BEGIN_FUNC_REGION(gamedll),
|
||||
RH_PlayerBlind,
|
||||
RH_RadiusFlash_TraceLine,
|
||||
RG_GetForceCamera = BEGIN_FUNC_REGION(gamedll),
|
||||
RG_PlayerBlind,
|
||||
RG_RadiusFlash_TraceLine,
|
||||
RG_RoundEnd,
|
||||
|
||||
// [...]
|
||||
RH_GameDLL_End
|
||||
RG_End
|
||||
};
|
||||
|
||||
enum GamedllFunc_CBaseAnimating
|
||||
{
|
||||
RH_CBaseAnimating_ResetSequenceInfo = BEGIN_FUNC_REGION(animating),
|
||||
RG_CBaseAnimating_ResetSequenceInfo = BEGIN_FUNC_REGION(animating),
|
||||
|
||||
// [...]
|
||||
RH_CBaseAnimating_End
|
||||
RG_CBaseAnimating_End
|
||||
};
|
||||
|
||||
enum GamedllFunc_CBasePlayer
|
||||
{
|
||||
// CBasePlayer virtual
|
||||
RH_CBasePlayer_Spawn = BEGIN_FUNC_REGION(player),
|
||||
RH_CBasePlayer_Precache,
|
||||
RH_CBasePlayer_ObjectCaps,
|
||||
RH_CBasePlayer_Classify,
|
||||
RH_CBasePlayer_TraceAttack,
|
||||
RH_CBasePlayer_TakeDamage,
|
||||
RH_CBasePlayer_TakeHealth,
|
||||
RH_CBasePlayer_Killed,
|
||||
RH_CBasePlayer_AddPoints,
|
||||
RH_CBasePlayer_AddPointsToTeam,
|
||||
RH_CBasePlayer_AddPlayerItem,
|
||||
RH_CBasePlayer_RemovePlayerItem,
|
||||
RH_CBasePlayer_GiveAmmo,
|
||||
RH_CBasePlayer_ResetMaxSpeed,
|
||||
RH_CBasePlayer_Jump,
|
||||
RH_CBasePlayer_Duck,
|
||||
RH_CBasePlayer_PreThink,
|
||||
RH_CBasePlayer_PostThink,
|
||||
RH_CBasePlayer_UpdateClientData,
|
||||
RH_CBasePlayer_ImpulseCommands,
|
||||
RH_CBasePlayer_RoundRespawn,
|
||||
RH_CBasePlayer_Blind,
|
||||
RG_CBasePlayer_Spawn = BEGIN_FUNC_REGION(player),
|
||||
RG_CBasePlayer_Precache,
|
||||
RG_CBasePlayer_ObjectCaps,
|
||||
RG_CBasePlayer_Classify,
|
||||
RG_CBasePlayer_TraceAttack,
|
||||
RG_CBasePlayer_TakeDamage,
|
||||
RG_CBasePlayer_TakeHealth,
|
||||
RG_CBasePlayer_Killed,
|
||||
RG_CBasePlayer_AddPoints,
|
||||
RG_CBasePlayer_AddPointsToTeam,
|
||||
RG_CBasePlayer_AddPlayerItem,
|
||||
RG_CBasePlayer_RemovePlayerItem,
|
||||
RG_CBasePlayer_GiveAmmo,
|
||||
RG_CBasePlayer_ResetMaxSpeed,
|
||||
RG_CBasePlayer_Jump,
|
||||
RG_CBasePlayer_Duck,
|
||||
RG_CBasePlayer_PreThink,
|
||||
RG_CBasePlayer_PostThink,
|
||||
RG_CBasePlayer_UpdateClientData,
|
||||
RG_CBasePlayer_ImpulseCommands,
|
||||
RG_CBasePlayer_RoundRespawn,
|
||||
RG_CBasePlayer_Blind,
|
||||
|
||||
RH_CBasePlayer_Observer_IsValidTarget,
|
||||
RH_CBasePlayer_SetAnimation,
|
||||
RH_CBasePlayer_GiveDefaultItems,
|
||||
RH_CBasePlayer_GiveNamedItem,
|
||||
RH_CBasePlayer_AddAccount,
|
||||
RH_CBasePlayer_GiveShield,
|
||||
RG_CBasePlayer_Observer_IsValidTarget,
|
||||
RG_CBasePlayer_SetAnimation,
|
||||
RG_CBasePlayer_GiveDefaultItems,
|
||||
RG_CBasePlayer_GiveNamedItem,
|
||||
RG_CBasePlayer_AddAccount,
|
||||
RG_CBasePlayer_GiveShield,
|
||||
|
||||
// [...]
|
||||
RH_CBasePlayer_End
|
||||
RG_CBasePlayer_End
|
||||
};
|
||||
|
@ -41,14 +41,16 @@ void CAmxxHook::SetState(fwdstate st)
|
||||
void CHookManager::clearHandlers() const
|
||||
{
|
||||
#define CLEAR_HOOKLIST(__END__, __START__)\
|
||||
for (size_t i = BEGIN_FUNC_REGION(__START__); i < RH_##__END__##_End; ++i) {\
|
||||
for (size_t i = BEGIN_FUNC_REGION(__START__); i < ##__END__; ++i) {\
|
||||
if (m_hooklist[i])\
|
||||
m_hooklist[i]->clear();\
|
||||
}
|
||||
|
||||
CLEAR_HOOKLIST(EngineFunc, engine);
|
||||
CLEAR_HOOKLIST(GameDLL, gamedll);
|
||||
CLEAR_HOOKLIST(CBasePlayer, player);
|
||||
CLEAR_HOOKLIST(RH_EngineFunc_End, engine);
|
||||
|
||||
CLEAR_HOOKLIST(RG_End, gamedll);
|
||||
CLEAR_HOOKLIST(RG_CBaseAnimating_End, animating);
|
||||
CLEAR_HOOKLIST(RG_CBasePlayer_End, player);
|
||||
}
|
||||
|
||||
hook_t* CHookManager::getHook(size_t func) const
|
||||
|
@ -31,7 +31,7 @@ int regmember::current_cell = 1;
|
||||
|
||||
#define GM_MEMBERS(mx, mtype) ((!(mx & (MAX_REGION_RANGE - 1)) ? regmember::current_cell = 1, true : false) || (mx & (MAX_REGION_RANGE - 1)) == regmember::current_cell++) ? regmember(((CHalfLifeMultiplay *)&mem_dummy)->##mx, sizeof(((CHalfLifeMultiplay *)&mem_dummy)->##mx), offsetof(CHalfLifeMultiplay, mx), mtype) : regmember(#mx " doesn't match member definition")
|
||||
#define GM_VOICE_MEMBERS(mx, mtype) ((!(mx & (MAX_REGION_RANGE - 1)) ? regmember::current_cell = 1, true : false) || (mx & (MAX_REGION_RANGE - 1)) == regmember::current_cell++) ? regmember(((CVoiceGameMgr *)&mem_dummy)->##mx, sizeof(((CVoiceGameMgr *)&mem_dummy)->##mx), offsetof(CVoiceGameMgr, mx), mtype) : regmember(#mx " doesn't match member definition")
|
||||
member_t memberlist_gamerules[] = {
|
||||
member_t memberlist_gamerules[] = {
|
||||
GM_MEMBERS(m_bFreezePeriod, MEMBER_INTEGER),
|
||||
GM_MEMBERS(m_bBombDropped, MEMBER_INTEGER),
|
||||
// m_VoiceGameMgr ->
|
||||
@ -348,7 +348,7 @@ member_t memberlist_player[] = {
|
||||
memberlist_t memberlist;
|
||||
|
||||
member_t *memberlist_t::operator[](size_t members) const
|
||||
{
|
||||
{
|
||||
#define CASE(h) case ht_##h: if (index < arraysize(memberlist_##h)) return &memberlist_##h[index]; else break;
|
||||
|
||||
const auto table = members_tables_e(members / MAX_REGION_RANGE);
|
||||
|
@ -4,6 +4,7 @@
|
||||
meta_globals_t *gpMetaGlobals;
|
||||
gamedll_funcs_t *gpGamedllFuncs;
|
||||
mutil_funcs_t *gpMetaUtilFuncs;
|
||||
enginefuncs_t *g_pengfuncsTable;
|
||||
|
||||
plugin_info_t Plugin_info =
|
||||
{
|
||||
@ -51,6 +52,7 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
GET_HOOK_TABLES(PLID, &g_pengfuncsTable, nullptr, nullptr);
|
||||
memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS));
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ static cell AMX_NATIVE_CALL SetHookChainReturn(AMX *amx, cell *params)
|
||||
case ATYPE_FLOAT:
|
||||
retVal._interger = *srcAddr;
|
||||
break;
|
||||
|
||||
|
||||
case ATYPE_STRING:
|
||||
{
|
||||
if (retVal._string != nullptr)
|
||||
@ -271,7 +271,7 @@ AMX_NATIVE_INFO HookChain_Natives[] =
|
||||
|
||||
{ "EnableHookChain", EnableHookChain },
|
||||
{ "DisableHookChain", DisableHookChain },
|
||||
|
||||
|
||||
{ "SetHookChainReturn", SetHookChainReturn },
|
||||
{ "GetHookChainReturn", GetHookChainReturn },
|
||||
|
||||
|
@ -164,6 +164,77 @@ static cell AMX_NATIVE_CALL rg_fire_bullets3(AMX *amx, cell *params)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
struct {
|
||||
const char *msg;
|
||||
const char *sentence;
|
||||
size_t status;
|
||||
} msg_sentence_list[] = {
|
||||
{ "", "" }, // ROUND_NONE
|
||||
{ "#Target_Bombed", "terwin", WINSTATUS_TERRORISTS }, // ROUND_TARGET_BOMB
|
||||
{ "#VIP_Escaped", "ctwin", WINSTATUS_CTS }, // ROUND_VIP_ESCAPED
|
||||
{ "#VIP_Assassinated", "terwin", WINSTATUS_TERRORISTS }, // ROUND_VIP_ASSASSINATED
|
||||
{ "#Terrorists_Escaped", "terwin", WINSTATUS_TERRORISTS }, // ROUND_TERRORISTS_ESCAPED
|
||||
{ "#CTs_PreventEscape", "ctwin", WINSTATUS_CTS }, // ROUND_CTS_PREVENT_ESCAPE
|
||||
{ "#Escaping_Terrorists_Neutralized", "ctwin", WINSTATUS_CTS }, // ROUND_ESCAPING_TERRORISTS_NEUTRALIZED
|
||||
{ "#Bomb_Defused", "ctwin", WINSTATUS_CTS }, // ROUND_BOMB_DEFUSED
|
||||
{ "#CTs_Win", "ctwin", WINSTATUS_CTS }, // ROUND_CTS_WIN
|
||||
{ "#Terrorists_Win", "terwin", WINSTATUS_TERRORISTS }, // ROUND_TERRORISTS_WIN
|
||||
{ "#Round_Draw", "rounddraw", WINSTATUS_DRAW }, // ROUND_END_DRAW
|
||||
{ "#All_Hostages_Rescued", "ctwin", WINSTATUS_CTS }, // ROUND_ALL_HOSTAGES_RESCUED
|
||||
{ "#Target_Saved", "ctwin", WINSTATUS_CTS }, // ROUND_TARGET_SAVED
|
||||
{ "#Hostages_Not_Rescued", "terwin", WINSTATUS_TERRORISTS }, // ROUND_HOSTAGE_NOT_RESCUED
|
||||
{ "#Terrorists_Not_Escaped", "ctwin", WINSTATUS_CTS }, // ROUND_TERRORISTS_NOT_ESCAPED
|
||||
{ "#VIP_Not_Escaped", "terwin", WINSTATUS_TERRORISTS }, // ROUND_VIP_NOT_ESCAPED
|
||||
{ "#Game_Commencing", "", WINSTATUS_DRAW }, // ROUND_GAME_COMMENCE
|
||||
};
|
||||
|
||||
// native rg_round_end(Float:tmDelay, WinStatus:st, ScenarionEventEndRound:event = ROUND_NONE, const message[] = "default", const sentence[] = "default");
|
||||
static cell AMX_NATIVE_CALL rg_round_end(AMX *amx, cell *params)
|
||||
{
|
||||
enum args_e { arg_count, arg_delay, arg_win, arg_event, arg_message, arg_sentence, arg_silent };
|
||||
|
||||
size_t winstatus = params[arg_win];
|
||||
if (winstatus <= 0) {
|
||||
MF_LogError(amx, AMX_ERR_NATIVE, "rg_round_end: unknown win-status %i", winstatus);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
const char *_sentence, *_message;
|
||||
ScenarionEventEndRound event = static_cast<ScenarionEventEndRound>(params[arg_event]);
|
||||
|
||||
_sentence = getAmxString(amx, params[arg_sentence]);
|
||||
_message = getAmxString(amx, params[arg_message]);
|
||||
|
||||
if (event != ROUND_NONE) {
|
||||
auto& lst = msg_sentence_list[event];
|
||||
if (strcmp(_sentence, "default") == 0)
|
||||
_sentence = lst.sentence;
|
||||
if (strcmp(_message, "default") == 0)
|
||||
_message = lst.msg;
|
||||
}
|
||||
|
||||
if (_sentence[0])
|
||||
Broadcast(_sentence);
|
||||
|
||||
if (_message[0])
|
||||
g_ReGameFuncs->EndRoundMessage(_message, event);
|
||||
|
||||
(*g_pCSGameRules)->TerminateRound(*(float *)¶ms[arg_delay], winstatus);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// native rg_update_teamscores(iCtsWins = 0, iTsWins = 0, bool:bAdd = true);
|
||||
static cell AMX_NATIVE_CALL rg_update_teamscores(AMX *amx, cell *params)
|
||||
{
|
||||
enum args_e { arg_count, arg_cts, arg_ts, arg_add };
|
||||
|
||||
(*g_pCSGameRules)->m_iNumCTWins = ((params[arg_add] != 0) ? (*g_pCSGameRules)->m_iNumCTWins : 0) + params[arg_cts];
|
||||
(*g_pCSGameRules)->m_iNumTerroristWins = ((params[arg_add] != 0) ? (*g_pCSGameRules)->m_iNumTerroristWins : 0) + params[arg_ts];
|
||||
UpdateTeamScores();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
AMX_NATIVE_INFO Misc_Natives[] =
|
||||
{
|
||||
{ "rg_set_animation", rg_set_animation },
|
||||
@ -180,6 +251,9 @@ AMX_NATIVE_INFO Misc_Natives[] =
|
||||
{ "rg_fire_bullets", rg_fire_bullets },
|
||||
{ "rg_fire_bullets3", rg_fire_bullets3 },
|
||||
|
||||
{ "rg_round_end", rg_round_end },
|
||||
{ "rg_update_teamscores", rg_update_teamscores },
|
||||
|
||||
{ nullptr, nullptr }
|
||||
};
|
||||
|
||||
|
36
reapi/src/reapi_utils.cpp
Normal file
36
reapi/src/reapi_utils.cpp
Normal file
@ -0,0 +1,36 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
void Broadcast(const char *sentence)
|
||||
{
|
||||
char text[32];
|
||||
|
||||
strcpy(text, "%!MRAD_");
|
||||
strcat(text, UTIL_VarArgs("%s", sentence));
|
||||
|
||||
static int gmsgSendAudio = 0;
|
||||
if (gmsgSendAudio == 0 && !(gmsgSendAudio = REG_USER_MSG("SendAudio", -1)))
|
||||
return;
|
||||
|
||||
g_pengfuncsTable->pfnMessageBegin(MSG_BROADCAST, REG_USER_MSG("SendAudio", -1), NULL, NULL);
|
||||
g_pengfuncsTable->pfnWriteByte(0);
|
||||
g_pengfuncsTable->pfnWriteString(text);
|
||||
g_pengfuncsTable->pfnWriteShort(100);
|
||||
g_pengfuncsTable->pfnMessageEnd();
|
||||
}
|
||||
|
||||
void UpdateTeamScores()
|
||||
{
|
||||
static int gmsgTeamScore = 0;
|
||||
if (gmsgTeamScore == 0 && !(gmsgTeamScore = REG_USER_MSG("TeamScore", -1)))
|
||||
return;
|
||||
|
||||
g_pengfuncsTable->pfnMessageBegin(MSG_ALL, gmsgTeamScore, NULL, NULL);
|
||||
g_pengfuncsTable->pfnWriteString("CT");
|
||||
g_pengfuncsTable->pfnWriteShort((*g_pCSGameRules)->m_iNumCTWins);
|
||||
g_pengfuncsTable->pfnMessageEnd();
|
||||
|
||||
g_pengfuncsTable->pfnMessageBegin(MSG_ALL, gmsgTeamScore, NULL, NULL);
|
||||
g_pengfuncsTable->pfnWriteString("TERRORIST");
|
||||
g_pengfuncsTable->pfnWriteShort((*g_pCSGameRules)->m_iNumTerroristWins);
|
||||
g_pengfuncsTable->pfnMessageEnd();
|
||||
}
|
@ -8,6 +8,7 @@ char(&ArraySizeHelper(T(&array)[N]))[N];
|
||||
#define ENTINDEX indexOfEdict
|
||||
|
||||
extern edict_t* g_pEdicts;
|
||||
extern enginefuncs_t* g_pengfuncsTable;
|
||||
|
||||
inline size_t indexOfEdict(edict_t* ed)
|
||||
{
|
||||
@ -78,4 +79,7 @@ inline T get_member_direct(edict_t *pEntity, int offset, int element = 0, int si
|
||||
return get_member_direct<T>(pEntity->pvPrivateData, offset, element, size);
|
||||
}
|
||||
|
||||
void Broadcast(const char *sentence);
|
||||
void UpdateTeamScores();
|
||||
|
||||
extern void __declspec(noreturn) UTIL_SysError(const char *fmt, ...);
|
||||
|
Loading…
x
Reference in New Issue
Block a user