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)
}