Exposed third parameter of TF2's AddCond in TF2_AddCondition (bug 5641, r=psychonic).
This commit is contained in:
parent
c8fb05dd4b
commit
2e158a72e2
@ -236,7 +236,7 @@ cell_t TF2_AddCondition(IPluginContext *pContext, const cell_t *params)
|
|||||||
{
|
{
|
||||||
static ICallWrapper *pWrapper = NULL;
|
static ICallWrapper *pWrapper = NULL;
|
||||||
|
|
||||||
// CTFPlayerShared::AddCond(int, float)
|
// CTFPlayerShared::AddCond(int, float, CBaseEntity *)
|
||||||
if (!pWrapper)
|
if (!pWrapper)
|
||||||
{
|
{
|
||||||
REGISTER_NATIVE_ADDR("AddCondition",
|
REGISTER_NATIVE_ADDR("AddCondition",
|
||||||
@ -259,6 +259,13 @@ cell_t TF2_AddCondition(IPluginContext *pContext, const cell_t *params)
|
|||||||
return pContext->ThrowNativeError("Client index %d is not valid", params[1]);
|
return pContext->ThrowNativeError("Client index %d is not valid", params[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CBaseEntity *pInflictor = NULL;
|
||||||
|
// Compatibility fix for the new inflictor parameter; TF2 seems to only use player entities in it
|
||||||
|
if (params[0] >= 4 && params[4] > 0 && !(pInflictor = UTIL_GetCBaseEntity(params[4], true)))
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Inflictor index %d is not valid", params[4]);
|
||||||
|
}
|
||||||
|
|
||||||
void *obj = (void *)((uint8_t *)pEntity + playerSharedOffset->actual_offset);
|
void *obj = (void *)((uint8_t *)pEntity + playerSharedOffset->actual_offset);
|
||||||
|
|
||||||
unsigned char vstk[sizeof(void *) + sizeof(int) + sizeof(float) + sizeof(CBaseEntity *)];
|
unsigned char vstk[sizeof(void *) + sizeof(int) + sizeof(float) + sizeof(CBaseEntity *)];
|
||||||
@ -270,7 +277,7 @@ cell_t TF2_AddCondition(IPluginContext *pContext, const cell_t *params)
|
|||||||
vptr += sizeof(int);
|
vptr += sizeof(int);
|
||||||
*(float *)vptr = *(float *)¶ms[3];
|
*(float *)vptr = *(float *)¶ms[3];
|
||||||
vptr += sizeof(float);
|
vptr += sizeof(float);
|
||||||
*(CBaseEntity **)vptr = NULL;
|
*(CBaseEntity **)vptr = pInflictor;
|
||||||
|
|
||||||
pWrapper->Execute(vstk, NULL);
|
pWrapper->Execute(vstk, NULL);
|
||||||
|
|
||||||
|
@ -202,10 +202,11 @@ native TF2_RegeneratePlayer(client);
|
|||||||
* @param client Player's index.
|
* @param client Player's index.
|
||||||
* @param condition Integer identifier of condition to apply.
|
* @param condition Integer identifier of condition to apply.
|
||||||
* @param duration Duration of condition (does not apply to all conditions).
|
* @param duration Duration of condition (does not apply to all conditions).
|
||||||
|
* @param inflictor Condition inflictor's index (0 for no inflictor).
|
||||||
* @noreturn
|
* @noreturn
|
||||||
* @error Invalid client index, client not in game, or no mod support.
|
* @error Invalid client index, client not in game, or no mod support.
|
||||||
*/
|
*/
|
||||||
native TF2_AddCondition(client, TFCond:condition, Float:duration);
|
native TF2_AddCondition(client, TFCond:condition, Float:duration, inflictor=0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes a condition from a player
|
* Removes a condition from a player
|
||||||
|
Loading…
Reference in New Issue
Block a user