Автор:
- KORD_12.7
С кода по-долу може да се засече нанасяните щети в гърба на играч и да се направи някакво действие. Примерно да се блокират.
HIT_BACK не е имплементирана, като останалите - HIT_HEAD, HIT_CHEST и т.н.
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
public plugin_init()
{
RegisterHam(Ham_TakeDamage, "player", "Player_TakeDamage")
}
public Player_TakeDamage(iVictim, iInflictor, iAttacker, Float: flDamage, const bitsDamageType)
{
if (!is_user_connected(iAttacker) || !is_user_connected(iInflictor))
{
return HAM_IGNORED
}
new Float: vecSrc[3];
new Float: vecAngles[3];
new Float: vecForward[3];
new Float: vecAttackDir[3];
GetCenter(iVictim, vecSrc);
GetCenter(iInflictor, vecAttackDir);
xs_vec_sub(vecAttackDir, vecSrc, vecAttackDir);
xs_vec_normalize(vecAttackDir, vecAttackDir);
pev(iVictim, pev_angles, vecAngles);
engfunc(EngFunc_MakeVectors, vecAngles);
global_get(glb_v_forward, vecForward);
xs_vec_mul_scalar(vecAttackDir, -1.0, vecAttackDir);
if (xs_vec_dot(vecForward, vecAttackDir) > 0.3 )
{
// HIT_BACK
//return HAM_SUPERCEDE //if you want to block the damage
}
return HAM_IGNORED
}
GetCenter(const iEntity, Float: vecSrc[3])
{
new Float: vecAbsMax[3];
new Float: vecAbsMin[3];
pev(iEntity, pev_absmax, vecAbsMax);
pev(iEntity, pev_absmin, vecAbsMin);
xs_vec_add(vecAbsMax, vecAbsMin, vecSrc);
xs_vec_mul_scalar(vecSrc, 0.5, vecSrc);
}