Próbuje zmodyfikować odrzut gdy gracz w pozycji kucaka zostaje ostrzelany z dowolnej broni. Wprowadziłem kod, który działa ale wykonuje się tylko w momencie gdy gracz wywoła komende będąc na kucaka, inaczej nie przynosi skutku. Poniżej wklejam kod z trzech relewantnych części kodu:
Hook łapiący oddawanie strzału
public bacon_traceattack_player(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagetype)
{
if(!g_gamestarted)
return HAM_SUPERCEDE
if(!get_pcvar_num(cvar_knockback) || !(damagetype & DMG_BULLET))
return HAM_IGNORED
if(!is_user_connected(attacker) || !g_zombie[victim])
return HAM_IGNORED
if(g_kbReduction[victim] == 1.0)
return HAM_IGNORED
static kbpower
kbpower = g_weapon_knockback[get_user_weapon(attacker)]
if(kbpower != -1)
{
static flags
flags = pev(victim, pev_flags)
if(get_pcvar_num(cvar_knockback_duck) && (isDucking(victim) && (flags & FL_ONGROUND)))
return HAM_IGNORED
static Float:origins[2][3]
pev(victim, pev_origin, origins[0])
pev(attacker, pev_origin, origins[1])
if(get_distance_f(origins[0], origins[1]) <= get_pcvar_float(cvar_knockback_dist))
{
static Float:velocity[3]
pev(victim, pev_velocity, velocity)
static Float:tempvec
tempvec = velocity[2]
xs_vec_mul_scalar(direction, damage, direction)
if(g_kbReduction[victim] == 0.0)
xs_vec_mul_scalar(direction, g_knockbackpower[kbpower], direction)
else
xs_vec_mul_scalar(direction, g_kbReduction[victim]*g_knockbackpower[kbpower], direction)
xs_vec_add(direction, velocity, velocity)
velocity[2] = tempvec
set_pev(victim, pev_velocity, velocity)
return HAM_HANDLED
}
}
return HAM_IGNORED
}
Funkcja mająca na celu redukcje odrzutu (knockbacku):
public set_user_kbimmunity(id, Float:fReduction, bool:bUserCrouched)
{
if(bUserCrouched == true)
{
if(isDucking(id))
g_kbReduction[id] = fReduction;
} else
g_kbReduction[id] = fReduction;
}
Makrodefinicja isDucking:
#define isDucking(%1) (pev(%1, pev_flags) & FL_DUCKING)
deklaracja zmiennej: new Float:g_kbReduction[33];
Jedyny pomysł jaki przychodzi i do głowy to stworzenie enuma, dołączenie go do tablicy i sprawdzanie stanu na jego podstawie.. Ale jak to później wykorzystać jako natyw? Czy może z obecną strukturą zmiennej da się to zrobić?


Dodatki SourceMod




Moja zawartość
Mężczyzna
