Fixed/updated TF2_DisguisePlayer (bug 4641, r=fyren).
This commit is contained in:
@@ -143,18 +143,21 @@ cell_t TF2_Disguise(IPluginContext *pContext, const cell_t *params)
|
||||
{
|
||||
static ICallWrapper *pWrapper = NULL;
|
||||
|
||||
//CTFPlayerShared::Disguise(int, int)
|
||||
//CTFPlayerShared::Disguise(int, int, CTFPlayer *)
|
||||
if (!pWrapper)
|
||||
{
|
||||
REGISTER_NATIVE_ADDR("Disguise",
|
||||
PassInfo pass[2]; \
|
||||
PassInfo pass[3]; \
|
||||
pass[0].flags = PASSFLAG_BYVAL; \
|
||||
pass[0].size = sizeof(int); \
|
||||
pass[0].type = PassType_Basic; \
|
||||
pass[1].flags = PASSFLAG_BYVAL; \
|
||||
pass[1].size = sizeof(int); \
|
||||
pass[1].type = PassType_Basic; \
|
||||
pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, pass, 2))
|
||||
pass[2].flags = PASSFLAG_BYVAL; \
|
||||
pass[2].size = sizeof(CBaseEntity *); \
|
||||
pass[2].type = PassType_Basic; \
|
||||
pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, pass, 3))
|
||||
}
|
||||
|
||||
CBaseEntity *pEntity;
|
||||
@@ -164,6 +167,13 @@ cell_t TF2_Disguise(IPluginContext *pContext, const cell_t *params)
|
||||
}
|
||||
|
||||
void *obj = (void *)((uint8_t *)pEntity + playerSharedOffset->actual_offset);
|
||||
|
||||
CBaseEntity *pTarget = NULL;
|
||||
// Compatibility fix for the newly-added target parameter
|
||||
if (params[0] >= 4 && params[4] > 0 && !(pTarget = UTIL_GetCBaseEntity(params[4], true)))
|
||||
{
|
||||
return pContext->ThrowNativeError("Target client index %d is not valid", params[1]);
|
||||
}
|
||||
|
||||
unsigned char vstk[sizeof(void *) + 2*sizeof(int)];
|
||||
unsigned char *vptr = vstk;
|
||||
@@ -174,6 +184,8 @@ cell_t TF2_Disguise(IPluginContext *pContext, const cell_t *params)
|
||||
*(int *)vptr = params[2];
|
||||
vptr += sizeof(int);
|
||||
*(int *)vptr = params[3];
|
||||
vptr += sizeof(int);
|
||||
*(CBaseEntity **)vptr = pTarget;
|
||||
|
||||
pWrapper->Execute(vstk, NULL);
|
||||
|
||||
@@ -254,7 +266,7 @@ cell_t TF2_RemoveCondition(IPluginContext *pContext, const cell_t *params)
|
||||
{
|
||||
static ICallWrapper *pWrapper = NULL;
|
||||
|
||||
// CTFPlayerShared::RemoveCond(int)
|
||||
// CTFPlayerShared::RemoveCond(int, bool)
|
||||
if (!pWrapper)
|
||||
{
|
||||
REGISTER_NATIVE_ADDR("RemoveCondition",
|
||||
|
||||
Reference in New Issue
Block a user