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ć?