Fix incorrect assignment in SDKHook_TakeDamage + cleanup (bug 5911, r=psychonic).
authorKyle Sanderson <kyle.leet@gmail.com>
Fri Sep 06 18:37:13 2013 -0400 (2013-09-06)
changeset 411828b0497ef235
parent 4117 34801001399a
child 4119 4de47ca41c58
Fix incorrect assignment in SDKHook_TakeDamage + cleanup (bug 5911, r=psychonic).
extensions/sdkhooks/natives.cpp
     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);