Fix incorrect assignment in SDKHook_TakeDamage + cleanup (bug 5911, r=psychonic).

This commit is contained in:
Kyle Sanderson 2013-09-06 18:37:13 -04:00
parent cb128162e6
commit 3308f0644c

View File

@ -116,7 +116,7 @@ cell_t Native_TakeDamage(IPluginContext *pContext, const cell_t *params)
if (!pInflictor) if (!pInflictor)
return pContext->ThrowNativeError("Invalid entity index %d for inflictor", params[2]); return pContext->ThrowNativeError("Invalid entity index %d for inflictor", params[2]);
CBaseEntity *pAttacker = NULL; CBaseEntity *pAttacker;
if (params[3] != -1) if (params[3] != -1)
{ {
pAttacker = UTIL_GetCBaseEntity(params[3]); pAttacker = UTIL_GetCBaseEntity(params[3]);
@ -125,21 +125,28 @@ cell_t Native_TakeDamage(IPluginContext *pContext, const cell_t *params)
return pContext->ThrowNativeError("Invalid entity index %d for attackerr", params[3]); return pContext->ThrowNativeError("Invalid entity index %d for attackerr", params[3]);
} }
} }
else
{
pAttacker = NULL;
}
float flDamage = sp_ctof(params[4]); float flDamage = sp_ctof(params[4]);
int iDamageType = params[5]; int iDamageType = params[5];
CBaseEntity *pWeapon = NULL; CBaseEntity *pWeapon;
if (params[6] != -1) if (params[6] != -1)
{ {
pAttacker = UTIL_GetCBaseEntity(params[6]); pWeapon = UTIL_GetCBaseEntity(params[6]);
if (!pAttacker) if (!pWeapon)
{ {
return pContext->ThrowNativeError("Invalid entity index %d for weapon", params[6]); return pContext->ThrowNativeError("Invalid entity index %d for weapon", params[6]);
} }
} }
else
{
pWeapon = NULL;
}
Vector vecDamageForce = Vector(0.0f, 0.0f, 0.0f);
cell_t *addr; cell_t *addr;
int err; int err;
if ((err = pContext->LocalToPhysAddr(params[7], &addr)) != SP_ERROR_NONE) if ((err = pContext->LocalToPhysAddr(params[7], &addr)) != SP_ERROR_NONE)
@ -147,26 +154,29 @@ cell_t Native_TakeDamage(IPluginContext *pContext, const cell_t *params)
return pContext->ThrowNativeError("Could not read damageForce vector"); return pContext->ThrowNativeError("Could not read damageForce vector");
} }
Vector vecDamageForce;
if (addr != pContext->GetNullRef(SP_NULL_VECTOR)) if (addr != pContext->GetNullRef(SP_NULL_VECTOR))
{ {
vecDamageForce = Vector( vecDamageForce.Init(sp_ctof(addr[0]), sp_ctof(addr[1]), sp_ctof(addr[2]));
sp_ctof(addr[0]), }
sp_ctof(addr[1]), else
sp_ctof(addr[2])); {
vecDamageForce.Init();
} }
Vector vecDamagePosition = vec3_origin;
if ((err = pContext->LocalToPhysAddr(params[8], &addr)) != SP_ERROR_NONE) if ((err = pContext->LocalToPhysAddr(params[8], &addr)) != SP_ERROR_NONE)
{ {
return pContext->ThrowNativeError("Could not read damagePosition vector"); return pContext->ThrowNativeError("Could not read damagePosition vector");
} }
Vector vecDamagePosition;
if (addr != pContext->GetNullRef(SP_NULL_VECTOR)) if (addr != pContext->GetNullRef(SP_NULL_VECTOR))
{ {
vecDamagePosition = Vector( vecDamagePosition.Init(sp_ctof(addr[0]), sp_ctof(addr[1]), sp_ctof(addr[2]));
sp_ctof(addr[0]), }
sp_ctof(addr[1]), else
sp_ctof(addr[2])); {
vecDamagePosition = vec3_origin;
} }
CTakeDamageInfoHack info(pInflictor, pAttacker, flDamage, iDamageType, pWeapon, vecDamageForce, vecDamagePosition); CTakeDamageInfoHack info(pInflictor, pAttacker, flDamage, iDamageType, pWeapon, vecDamageForce, vecDamagePosition);