Add OnTakeDamage_Alive hook support to SDKHooks (bug=6249).
This commit is contained in:
parent
40b1067ef7
commit
be55587d70
@ -90,6 +90,8 @@ HookTypeData g_HookTypes[SDKHook_MAXHOOKS] =
|
|||||||
{"GetMaxHealth", "", false},
|
{"GetMaxHealth", "", false},
|
||||||
{"Blocked", "", false},
|
{"Blocked", "", false},
|
||||||
{"BlockedPost", "", false},
|
{"BlockedPost", "", false},
|
||||||
|
{"OnTakeDamageAlive", "DT_BaseCombatCharacter", false},
|
||||||
|
{"OnTakeDamageAlivePost", "DT_BaseCombatCharacter", false},
|
||||||
};
|
};
|
||||||
|
|
||||||
SDKHooks g_Interface;
|
SDKHooks g_Interface;
|
||||||
@ -168,6 +170,7 @@ SH_DECL_MANUALHOOK0(GetMaxHealth, 0, 0, 0, int);
|
|||||||
#endif
|
#endif
|
||||||
SH_DECL_MANUALHOOK1_void(GroundEntChanged, 0, 0, 0, void *);
|
SH_DECL_MANUALHOOK1_void(GroundEntChanged, 0, 0, 0, void *);
|
||||||
SH_DECL_MANUALHOOK1(OnTakeDamage, 0, 0, 0, int, CTakeDamageInfoHack &);
|
SH_DECL_MANUALHOOK1(OnTakeDamage, 0, 0, 0, int, CTakeDamageInfoHack &);
|
||||||
|
SH_DECL_MANUALHOOK1(OnTakeDamageAlive, 0, 0, 0, int, CTakeDamageInfoHack &);
|
||||||
SH_DECL_MANUALHOOK0_void(PreThink, 0, 0, 0);
|
SH_DECL_MANUALHOOK0_void(PreThink, 0, 0, 0);
|
||||||
SH_DECL_MANUALHOOK0_void(PostThink, 0, 0, 0);
|
SH_DECL_MANUALHOOK0_void(PostThink, 0, 0, 0);
|
||||||
SH_DECL_MANUALHOOK0(Reload, 0, 0, 0, bool);
|
SH_DECL_MANUALHOOK0(Reload, 0, 0, 0, bool);
|
||||||
@ -515,6 +518,7 @@ void SDKHooks::SetupHooks()
|
|||||||
CHECKOFFSET(FireBullets, false, true);
|
CHECKOFFSET(FireBullets, false, true);
|
||||||
CHECKOFFSET(GroundEntChanged, false, true);
|
CHECKOFFSET(GroundEntChanged, false, true);
|
||||||
CHECKOFFSET(OnTakeDamage, true, true);
|
CHECKOFFSET(OnTakeDamage, true, true);
|
||||||
|
CHECKOFFSET(OnTakeDamageAlive,true, true);
|
||||||
CHECKOFFSET(PreThink, true, true);
|
CHECKOFFSET(PreThink, true, true);
|
||||||
CHECKOFFSET(PostThink, true, true);
|
CHECKOFFSET(PostThink, true, true);
|
||||||
CHECKOFFSET(Reload, true, true);
|
CHECKOFFSET(Reload, true, true);
|
||||||
@ -607,6 +611,12 @@ HookReturn SDKHooks::Hook(int entity, SDKHookType type, IPluginFunction *callbac
|
|||||||
case SDKHook_OnTakeDamagePost:
|
case SDKHook_OnTakeDamagePost:
|
||||||
hookid = SH_ADD_MANUALVPHOOK(OnTakeDamage, pEnt, SH_MEMBER(&g_Interface, &SDKHooks::Hook_OnTakeDamagePost), true);
|
hookid = SH_ADD_MANUALVPHOOK(OnTakeDamage, pEnt, SH_MEMBER(&g_Interface, &SDKHooks::Hook_OnTakeDamagePost), true);
|
||||||
break;
|
break;
|
||||||
|
case SDKHook_OnTakeDamageAlive:
|
||||||
|
hookid = SH_ADD_MANUALVPHOOK(OnTakeDamageAlive, pEnt, SH_MEMBER(&g_Interface, &SDKHooks::Hook_OnTakeDamageAlive), false);
|
||||||
|
break;
|
||||||
|
case SDKHook_OnTakeDamageAlivePost:
|
||||||
|
hookid = SH_ADD_MANUALVPHOOK(OnTakeDamageAlive, pEnt, SH_MEMBER(&g_Interface, &SDKHooks::Hook_OnTakeDamageAlivePost), true);
|
||||||
|
break;
|
||||||
case SDKHook_PreThink:
|
case SDKHook_PreThink:
|
||||||
hookid = SH_ADD_MANUALVPHOOK(PreThink, pEnt, SH_MEMBER(&g_Interface, &SDKHooks::Hook_PreThink), false);
|
hookid = SH_ADD_MANUALVPHOOK(PreThink, pEnt, SH_MEMBER(&g_Interface, &SDKHooks::Hook_PreThink), false);
|
||||||
break;
|
break;
|
||||||
@ -999,12 +1009,12 @@ void SDKHooks::Hook_GroundEntChangedPost(void *pVar)
|
|||||||
Call(META_IFACEPTR(CBaseEntity), SDKHook_GroundEntChangedPost);
|
Call(META_IFACEPTR(CBaseEntity), SDKHook_GroundEntChangedPost);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDKHooks::Hook_OnTakeDamage(CTakeDamageInfoHack &info)
|
int SDKHooks::HandleOnTakeDamageHook(CTakeDamageInfoHack &info, SDKHookType hookType)
|
||||||
{
|
{
|
||||||
CBaseEntity *pEntity = META_IFACEPTR(CBaseEntity);
|
CBaseEntity *pEntity = META_IFACEPTR(CBaseEntity);
|
||||||
|
|
||||||
CVTableHook vhook(pEntity);
|
CVTableHook vhook(pEntity);
|
||||||
ke::Vector<CVTableList *> &vtablehooklist = g_HookList[SDKHook_OnTakeDamage];
|
ke::Vector<CVTableList *> &vtablehooklist = g_HookList[hookType];
|
||||||
for (size_t entry = 0; entry < vtablehooklist.length(); ++entry)
|
for (size_t entry = 0; entry < vtablehooklist.length(); ++entry)
|
||||||
{
|
{
|
||||||
if (vhook != vtablehooklist[entry]->vtablehook)
|
if (vhook != vtablehooklist[entry]->vtablehook)
|
||||||
@ -1090,12 +1100,12 @@ int SDKHooks::Hook_OnTakeDamage(CTakeDamageInfoHack &info)
|
|||||||
RETURN_META_VALUE(MRES_IGNORED, 0);
|
RETURN_META_VALUE(MRES_IGNORED, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDKHooks::Hook_OnTakeDamagePost(CTakeDamageInfoHack &info)
|
int SDKHooks::HandleOnTakeDamageHookPost(CTakeDamageInfoHack &info, SDKHookType hookType)
|
||||||
{
|
{
|
||||||
CBaseEntity *pEntity = META_IFACEPTR(CBaseEntity);
|
CBaseEntity *pEntity = META_IFACEPTR(CBaseEntity);
|
||||||
|
|
||||||
CVTableHook vhook(pEntity);
|
CVTableHook vhook(pEntity);
|
||||||
ke::Vector<CVTableList *> &vtablehooklist = g_HookList[SDKHook_OnTakeDamagePost];
|
ke::Vector<CVTableList *> &vtablehooklist = g_HookList[hookType];
|
||||||
for (size_t entry = 0; entry < vtablehooklist.length(); ++entry)
|
for (size_t entry = 0; entry < vtablehooklist.length(); ++entry)
|
||||||
{
|
{
|
||||||
if (vhook != vtablehooklist[entry]->vtablehook)
|
if (vhook != vtablehooklist[entry]->vtablehook)
|
||||||
@ -1136,6 +1146,26 @@ int SDKHooks::Hook_OnTakeDamagePost(CTakeDamageInfoHack &info)
|
|||||||
RETURN_META_VALUE(MRES_IGNORED, 0);
|
RETURN_META_VALUE(MRES_IGNORED, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SDKHooks::Hook_OnTakeDamage(CTakeDamageInfoHack &info)
|
||||||
|
{
|
||||||
|
return HandleOnTakeDamageHook(info, SDKHook_OnTakeDamage);
|
||||||
|
}
|
||||||
|
|
||||||
|
int SDKHooks::Hook_OnTakeDamagePost(CTakeDamageInfoHack &info)
|
||||||
|
{
|
||||||
|
return HandleOnTakeDamageHookPost(info, SDKHook_OnTakeDamagePost);
|
||||||
|
}
|
||||||
|
|
||||||
|
int SDKHooks::Hook_OnTakeDamageAlive(CTakeDamageInfoHack &info)
|
||||||
|
{
|
||||||
|
return HandleOnTakeDamageHook(info, SDKHook_OnTakeDamageAlive);
|
||||||
|
}
|
||||||
|
|
||||||
|
int SDKHooks::Hook_OnTakeDamageAlivePost(CTakeDamageInfoHack &info)
|
||||||
|
{
|
||||||
|
return HandleOnTakeDamageHookPost(info, SDKHook_OnTakeDamageAlivePost);
|
||||||
|
}
|
||||||
|
|
||||||
void SDKHooks::Hook_PreThink()
|
void SDKHooks::Hook_PreThink()
|
||||||
{
|
{
|
||||||
Call(META_IFACEPTR(CBaseEntity), SDKHook_PreThink);
|
Call(META_IFACEPTR(CBaseEntity), SDKHook_PreThink);
|
||||||
|
@ -90,6 +90,8 @@ enum SDKHookType
|
|||||||
SDKHook_GetMaxHealth,
|
SDKHook_GetMaxHealth,
|
||||||
SDKHook_Blocked,
|
SDKHook_Blocked,
|
||||||
SDKHook_BlockedPost,
|
SDKHook_BlockedPost,
|
||||||
|
SDKHook_OnTakeDamageAlive,
|
||||||
|
SDKHook_OnTakeDamageAlivePost,
|
||||||
SDKHook_MAXHOOKS
|
SDKHook_MAXHOOKS
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -288,6 +290,8 @@ public:
|
|||||||
void Hook_GroundEntChangedPost(void *pVar);
|
void Hook_GroundEntChangedPost(void *pVar);
|
||||||
int Hook_OnTakeDamage(CTakeDamageInfoHack &info);
|
int Hook_OnTakeDamage(CTakeDamageInfoHack &info);
|
||||||
int Hook_OnTakeDamagePost(CTakeDamageInfoHack &info);
|
int Hook_OnTakeDamagePost(CTakeDamageInfoHack &info);
|
||||||
|
int Hook_OnTakeDamageAlive(CTakeDamageInfoHack &info);
|
||||||
|
int Hook_OnTakeDamageAlivePost(CTakeDamageInfoHack &info);
|
||||||
void Hook_PreThink();
|
void Hook_PreThink();
|
||||||
void Hook_PreThinkPost();
|
void Hook_PreThinkPost();
|
||||||
void Hook_PostThink();
|
void Hook_PostThink();
|
||||||
@ -339,6 +343,10 @@ private:
|
|||||||
void HandleEntityDeleted(CBaseEntity *pEntity, int ref);
|
void HandleEntityDeleted(CBaseEntity *pEntity, int ref);
|
||||||
void Unhook(CBaseEntity *pEntity);
|
void Unhook(CBaseEntity *pEntity);
|
||||||
void Unhook(IPluginContext *pContext);
|
void Unhook(IPluginContext *pContext);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int HandleOnTakeDamageHook(CTakeDamageInfoHack &info, SDKHookType hookType);
|
||||||
|
int HandleOnTakeDamageHookPost(CTakeDamageInfoHack &info, SDKHookType hookType);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern CGlobalVars *gpGlobals;
|
extern CGlobalVars *gpGlobals;
|
||||||
|
@ -119,6 +119,8 @@ enum SDKHookType
|
|||||||
SDKHook_GetMaxHealth, /**< ep2v and later */
|
SDKHook_GetMaxHealth, /**< ep2v and later */
|
||||||
SDKHook_Blocked,
|
SDKHook_Blocked,
|
||||||
SDKHook_BlockedPost,
|
SDKHook_BlockedPost,
|
||||||
|
SDKHook_OnTakeDamageAlive,
|
||||||
|
SDKHook_OnTakeDamageAlivePost,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -139,6 +141,9 @@ enum SDKHookType
|
|||||||
SDKHook_OnTakeDamage,
|
SDKHook_OnTakeDamage,
|
||||||
SDKHook_OnTakeDamagePost,
|
SDKHook_OnTakeDamagePost,
|
||||||
|
|
||||||
|
SDKHook_OnTakeDamageAlive,
|
||||||
|
SDKHook_OnTakeDamageAlivePost,
|
||||||
|
|
||||||
SDKHook_PreThink,
|
SDKHook_PreThink,
|
||||||
SDKHook_PreThinkPost,
|
SDKHook_PreThinkPost,
|
||||||
|
|
||||||
@ -244,6 +249,7 @@ union SDKHookCB
|
|||||||
function Action (int entity, int &maxhealth);
|
function Action (int entity, int &maxhealth);
|
||||||
|
|
||||||
// OnTakeDamage
|
// OnTakeDamage
|
||||||
|
// OnTakeDamagAlive
|
||||||
// Note: The weapon parameter is not used by all games and damage sources.
|
// Note: The weapon parameter is not used by all games and damage sources.
|
||||||
// Note: Force application is dependent on game and damage type(s)
|
// Note: Force application is dependent on game and damage type(s)
|
||||||
// SDKHooks 1.0+
|
// SDKHooks 1.0+
|
||||||
@ -256,6 +262,7 @@ union SDKHookCB
|
|||||||
float[3] damageForce, float[3] damagePosition, int damagecustom);
|
float[3] damageForce, float[3] damagePosition, int damagecustom);
|
||||||
|
|
||||||
// OnTakeDamagePost
|
// OnTakeDamagePost
|
||||||
|
// OnTakeDamageAlivePost
|
||||||
function void (int victim, int attacker, int inflictor, float damage, int damagetype);
|
function void (int victim, int attacker, int inflictor, float damage, int damagetype);
|
||||||
function void (int victim, int attacker, int inflictor, float damage, int damagetype, const float[3] damageForce, const float[3] damagePosition);
|
function void (int victim, int attacker, int inflictor, float damage, int damagetype, const float[3] damageForce, const float[3] damagePosition);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user