Fix incorrect assignment in SDKHook_TakeDamage + cleanup (bug 5911, r=psychonic).
Fix incorrect assignment in SDKHook_TakeDamage + cleanup (
bug 5911, r=psychonic).
1.1 --- a/extensions/sdkhooks/natives.cpp Thu Sep 05 22:31:44 2013 -0400
1.2 +++ b/extensions/sdkhooks/natives.cpp Fri Sep 06 18:37:13 2013 -0400
1.3 @@ -116,7 +116,7 @@
1.4 if (!pInflictor)
1.5 return pContext->ThrowNativeError("Invalid entity index %d for inflictor", params[2]);
1.6
1.7 - CBaseEntity *pAttacker = NULL;
1.8 + CBaseEntity *pAttacker;
1.9 if (params[3] != -1)
1.10 {
1.11 pAttacker = UTIL_GetCBaseEntity(params[3]);
1.12 @@ -125,21 +125,28 @@
1.13 return pContext->ThrowNativeError("Invalid entity index %d for attackerr", params[3]);
1.14 }
1.15 }
1.16 + else
1.17 + {
1.18 + pAttacker = NULL;
1.19 + }
1.20
1.21 float flDamage = sp_ctof(params[4]);
1.22 int iDamageType = params[5];
1.23
1.24 - CBaseEntity *pWeapon = NULL;
1.25 + CBaseEntity *pWeapon;
1.26 if (params[6] != -1)
1.27 {
1.28 - pAttacker = UTIL_GetCBaseEntity(params[6]);
1.29 - if (!pAttacker)
1.30 + pWeapon = UTIL_GetCBaseEntity(params[6]);
1.31 + if (!pWeapon)
1.32 {
1.33 return pContext->ThrowNativeError("Invalid entity index %d for weapon", params[6]);
1.34 }
1.35 }
1.36 + else
1.37 + {
1.38 + pWeapon = NULL;
1.39 + }
1.40
1.41 - Vector vecDamageForce = Vector(0.0f, 0.0f, 0.0f);
1.42 cell_t *addr;
1.43 int err;
1.44 if ((err = pContext->LocalToPhysAddr(params[7], &addr)) != SP_ERROR_NONE)
1.45 @@ -147,26 +154,29 @@
1.46 return pContext->ThrowNativeError("Could not read damageForce vector");
1.47 }
1.48
1.49 + Vector vecDamageForce;
1.50 if (addr != pContext->GetNullRef(SP_NULL_VECTOR))
1.51 {
1.52 - vecDamageForce = Vector(
1.53 - sp_ctof(addr[0]),
1.54 - sp_ctof(addr[1]),
1.55 - sp_ctof(addr[2]));
1.56 + vecDamageForce.Init(sp_ctof(addr[0]), sp_ctof(addr[1]), sp_ctof(addr[2]));
1.57 + }
1.58 + else
1.59 + {
1.60 + vecDamageForce.Init();
1.61 }
1.62
1.63 - Vector vecDamagePosition = vec3_origin;
1.64 if ((err = pContext->LocalToPhysAddr(params[8], &addr)) != SP_ERROR_NONE)
1.65 {
1.66 return pContext->ThrowNativeError("Could not read damagePosition vector");
1.67 }
1.68
1.69 + Vector vecDamagePosition;
1.70 if (addr != pContext->GetNullRef(SP_NULL_VECTOR))
1.71 {
1.72 - vecDamagePosition = Vector(
1.73 - sp_ctof(addr[0]),
1.74 - sp_ctof(addr[1]),
1.75 - sp_ctof(addr[2]));
1.76 + vecDamagePosition.Init(sp_ctof(addr[0]), sp_ctof(addr[1]), sp_ctof(addr[2]));
1.77 + }
1.78 + else
1.79 + {
1.80 + vecDamagePosition = vec3_origin;
1.81 }
1.82
1.83 CTakeDamageInfoHack info(pInflictor, pAttacker, flDamage, iDamageType, pWeapon, vecDamageForce, vecDamagePosition);