| Randomize |
09-14-2013 07:16 |
Delay Knife Attack
How to make the damage delay? It only delay the animation.
PHP Code:
#include <amxmodx> #include <amxmisc> #include <fakemeta> #include <engine> #include <hamsandwich> #include <xs>
#define PLUGIN "Knife Delay" #define VERSION "1.0" #define AUTHOR "DavidJr"
#define m_flNextPrimaryAttack 46 #define m_flNextSecondaryAttack 47 #define m_flTimeWeaponIdle 48
new primary_delay, secondary_delay, primary_distance, secondary_distance
// Player vars new g_attacking[33] // get attacking
// Cached stuff for players #define MAX_DISTANCE 40
new bool:g_amok_kukri[33] new bool:g_bRemoveBlood[33]
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) //Register Event register_event("CurWeapon", "Event_CurWeapon", "be", "1=1") //Register Console Command register_concmd("amok","cmdBuy") //Register Forward register_forward(FM_TraceLine, "fw_TraceLine") register_forward(FM_TraceHull, "fw_TraceHull") //Register Ham RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fw_PrimaryAttack") RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fw_SecondaryAttack") RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fw_PrimaryAttack_Post", 1) RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fw_SecondaryAttack_Post", 1) RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "Knife_PrimaryAttack", 1) RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "Knife_SecondaryAttack", 1) RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "Ham_KnifeAttack_Post", 1) RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "Ham_KnifeAttack_Post", 1) RegisterHam(Ham_TakeDamage, "player", "Ham_TakeDamage_Pre", 0) RegisterHam(Ham_BloodColor, "player", "Ham_BloodColor_Pre", 0) // Register Cvar primary_delay = register_cvar("knife_attack1", "1.1") //Delay Primary Attack secondary_delay = register_cvar("knife_attack2", "1.25") //Delay Secondary primary_distance = register_cvar("knife_distance1", "48.0") //Distance Primary Attack secondary_distance = register_cvar("knife_distance2", "48.0") //Distance Secondary Attack } public plugin_precache() { precache_model("models/nst_wpn/p_primary_1.mdl") precache_model("models/nst_wpn/v_amok_kukri.mdl") }
public client_connect(id) { g_amok_kukri[id] = false } public cmdBuy(id) { g_amok_kukri[id] = true } public Event_CurWeapon(id) { new weapon = get_user_weapon(id) if(weapon == CSW_KNIFE) { if(g_amok_kukri[id]) { entity_set_string(id, EV_SZ_viewmodel, "models/nst_wpn/v_amok_kukri.mdl") entity_set_string(id, EV_SZ_weaponmodel, "models/nst_wpn/p_primary_1.mdl") } } } /*================================================================================ [Main Forwards] =================================================================================*/ public fw_PrimaryAttack(weapon_ent) { static owner owner = pev(weapon_ent, pev_owner) g_attacking[owner] = 1 } public fw_SecondaryAttack(weapon_ent) { // Get owner static owner owner = pev(weapon_ent, pev_owner) g_attacking[owner] = 2 } public fw_PrimaryAttack_Post(weapon_ent) { // Get owner static owner owner = pev(weapon_ent, pev_owner) g_attacking[owner] = 0 } public fw_SecondaryAttack_Post(weapon_ent) { // Get owner static owner owner = pev(weapon_ent, pev_owner) g_attacking[owner] = 0 } public fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monster, id, handle) { // Not alive if (!is_user_alive(id)) return FMRES_IGNORED; // Not using knife if (get_user_weapon(id) != CSW_KNIFE) return FMRES_IGNORED; // Not attacking if (!g_attacking[id]) return FMRES_IGNORED; pev(id, pev_v_angle, vector_end) angle_vector(vector_end, ANGLEVECTOR_FORWARD, vector_end) if (g_attacking[id] == 1) { xs_vec_mul_scalar(vector_end, get_pcvar_float(primary_distance), vector_end) } else { xs_vec_mul_scalar(vector_end, get_pcvar_float(secondary_distance), vector_end) } xs_vec_add(vector_start, vector_end, vector_end) engfunc(EngFunc_TraceLine, vector_start, vector_end, ignored_monster, id, handle) return FMRES_SUPERCEDE } public fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monster, hull, id, handle) { // Not alive if (!is_user_alive(id)) return FMRES_IGNORED; // Not using knife if (get_user_weapon(id) != CSW_KNIFE) return FMRES_IGNORED; // Not attacking if (!g_attacking[id]) return FMRES_IGNORED; pev(id, pev_v_angle, vector_end) angle_vector(vector_end, ANGLEVECTOR_FORWARD, vector_end) if (g_attacking[id] == 1) { xs_vec_mul_scalar(vector_end, get_pcvar_float(primary_distance), vector_end) } else { xs_vec_mul_scalar(vector_end, get_pcvar_float(secondary_distance), vector_end) } xs_vec_add(vector_start, vector_end, vector_end) engfunc(EngFunc_TraceHull, vector_start, vector_end, ignored_monster, hull, id, handle) return FMRES_SUPERCEDE } public Ham_BloodColor_Pre(id) { if(g_bRemoveBlood[id]) { SetHamReturnInteger(-1) return HAM_SUPERCEDE } return HAM_IGNORED } public Ham_KnifeAttack_Post(iEntity) { new id = pev(iEntity, pev_owner) new iParams[4] iParams[0] = id iParams[1] = 35 iParams[2] = DMG_NEVERGIB | DMG_SLASH iParams[3] = iEntity set_task(2.0, "Task_CheckDamage", _, iParams, sizeof iParams) return HAM_IGNORED } public Ham_TakeDamage_Pre(iVictim, iInflictor, iAttacker, Float:flDamage, iBits) { if(!is_user_alive(iAttacker) || !is_user_alive(iVictim)) return HAM_IGNORED; if(get_user_weapon(iAttacker) == CSW_KNIFE) { g_bRemoveBlood[iAttacker] = true return HAM_SUPERCEDE } else g_bRemoveBlood[iAttacker] = false return HAM_IGNORED; } public Task_CheckDamage(szParams[]) { new iAttacker = szParams[0] new iDamage = szParams[1] new iBits = szParams[2] new iInflictor = szParams[3] if(!is_user_alive(iAttacker)) return new iTarget, iBody get_user_aiming(iAttacker, iTarget, iBody, MAX_DISTANCE)
if(!is_user_alive(iTarget)) return; ExecuteHam(Ham_TakeDamage, iTarget, iInflictor, iAttacker, float(iDamage), iBits) return; } public Knife_PrimaryAttack(ent) { static Float:delay ; delay = get_pcvar_float(primary_delay) set_pdata_float(ent, m_flNextPrimaryAttack, delay, 4) set_pdata_float(ent, m_flTimeWeaponIdle, delay, 4) } public Knife_SecondaryAttack(ent) { static Float:delay ; delay = get_pcvar_float(secondary_delay) set_pdata_float(ent, m_flNextSecondaryAttack, delay, 4) set_pdata_float(ent, m_flTimeWeaponIdle, delay, 4) }
|