Merge pull request #119 from VoiDeD/sdkhooks-blocked

Implement SDKHook_Blocked and SDKHook_BlockedPost (r=psychonic).
This commit is contained in:
Nicholas Hastings 2014-09-03 10:50:38 -04:00
commit e6ff9c36ed
4 changed files with 54 additions and 0 deletions

View File

@ -88,6 +88,8 @@ HookTypeData g_HookTypes[SDKHook_MAXHOOKS] =
{"Reload", "DT_BaseCombatWeapon", false},
{"ReloadPost", "DT_BaseCombatWeapon", false},
{"GetMaxHealth", "", false},
{"Blocked", "", false},
{"BlockedPost", "", false},
};
SDKHooks g_Interface;
@ -191,6 +193,7 @@ SH_DECL_MANUALHOOK1(Weapon_CanUse, 0, 0, 0, bool, CBaseCombatWeapon *);
SH_DECL_MANUALHOOK3_void(Weapon_Drop, 0, 0, 0, CBaseCombatWeapon *, const Vector *, const Vector *);
SH_DECL_MANUALHOOK1_void(Weapon_Equip, 0, 0, 0, CBaseCombatWeapon *);
SH_DECL_MANUALHOOK2(Weapon_Switch, 0, 0, 0, bool, CBaseCombatWeapon *, int);
SH_DECL_MANUALHOOK1_void(Blocked, 0, 0, 0, CBaseEntity *);
/**
@ -529,6 +532,7 @@ void SDKHooks::SetupHooks()
CHECKOFFSET_W(Equip, true, true);
CHECKOFFSET_W(Switch, true, true);
CHECKOFFSET(VPhysicsUpdate, true, true);
CHECKOFFSET(Blocked, true, true);
// this one is in a class all its own -_-
offset = 0;
@ -699,6 +703,12 @@ HookReturn SDKHooks::Hook(int entity, SDKHookType type, IPluginFunction *callbac
case SDKHook_ShouldCollide:
hookid = SH_ADD_MANUALVPHOOK(ShouldCollide, pEnt, SH_MEMBER(&g_Interface, &SDKHooks::Hook_ShouldCollide), false);
break;
case SDKHook_Blocked:
hookid = SH_ADD_MANUALVPHOOK(Blocked, pEnt, SH_MEMBER(&g_Interface, &SDKHooks::Hook_Blocked), false);
break;
case SDKHook_BlockedPost:
hookid = SH_ADD_MANUALVPHOOK(Blocked, pEnt, SH_MEMBER(&g_Interface, &SDKHooks::Hook_BlockedPost), true);
break;
}
vhook.SetHookID(hookid);
@ -1576,6 +1586,22 @@ void SDKHooks::Hook_VPhysicsUpdatePost(IPhysicsObject *pPhysics)
Call(META_IFACEPTR(CBaseEntity), SDKHook_VPhysicsUpdatePost);
}
void SDKHooks::Hook_Blocked(CBaseEntity *pOther)
{
cell_t result = Call(META_IFACEPTR(CBaseEntity), SDKHook_Blocked, pOther);
if(result >= Pl_Handled)
RETURN_META(MRES_SUPERCEDE);
RETURN_META(MRES_IGNORED);
}
void SDKHooks::Hook_BlockedPost(CBaseEntity *pOther)
{
Call(META_IFACEPTR(CBaseEntity), SDKHook_BlockedPost, pOther);
RETURN_META(MRES_IGNORED);
}
bool SDKHooks::Hook_WeaponCanSwitchTo(CBaseCombatWeapon *pWeapon)
{
cell_t result = Call(META_IFACEPTR(CBaseEntity), SDKHook_WeaponCanSwitchTo, pWeapon);

View File

@ -88,6 +88,8 @@ enum SDKHookType
SDKHook_Reload,
SDKHook_ReloadPost,
SDKHook_GetMaxHealth,
SDKHook_Blocked,
SDKHook_BlockedPost,
SDKHook_MAXHOOKS
};
@ -319,6 +321,8 @@ public:
void Hook_UsePost(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
void Hook_VPhysicsUpdate(IPhysicsObject *pPhysics);
void Hook_VPhysicsUpdatePost(IPhysicsObject *pPhysics);
void Hook_Blocked(CBaseEntity *pOther);
void Hook_BlockedPost(CBaseEntity *pOther);
bool Hook_WeaponCanSwitchTo(CBaseCombatWeapon *pWeapon);
bool Hook_WeaponCanSwitchToPost(CBaseCombatWeapon *pWeapon);
bool Hook_WeaponCanUse(CBaseCombatWeapon *pWeapon);

View File

@ -107,6 +107,12 @@
"linux" "158"
"mac" "158"
}
"Blocked"
{
"windows" "102"
"linux" "103"
"mac" "103"
}
"Weapon_CanSwitchTo"
{
"windows" "265"
@ -246,6 +252,12 @@
"linux" "158"
"mac" "158"
}
"Blocked"
{
"windows" "102"
"linux" "103"
"mac" "103"
}
"Weapon_CanSwitchTo"
{
"windows" "265"
@ -385,6 +397,12 @@
"linux" "158"
"mac" "158"
}
"Blocked"
{
"windows" "102"
"linux" "103"
"mac" "103"
}
"Weapon_CanSwitchTo"
{
"windows" "265"

View File

@ -117,10 +117,15 @@ enum SDKHookType
SDKHook_Reload,
SDKHook_ReloadPost,
SDKHook_GetMaxHealth, /**< ep2v and later */
SDKHook_Blocked,
SDKHook_BlockedPost,
};
/*
Alphabetized for easy readability
SDKHook_Blocked,
SDKHook_BlockedPost,
SDKHook_EndTouch,
SDKHook_EndTouchPost,
@ -210,6 +215,7 @@ union SDKHookCB
// EndTouch
// StartTouch
// Touch
// Blocked
function Action (int entity, int other);
// EndTouchPost