Raised This Month: $51 Target: $400
 12% 

Hammer (Knife) damage error.


Post New Thread Reply   
 
Thread Tools Display Modes
ZombieTheMan01
Senior Member
Join Date: Aug 2015
Location: Turkey
Old 02-23-2017 , 11:50   Re: Hammer (Knife) damage error.
Reply With Quote #61

Quote:
Originally Posted by killerZM View Post
PHP Code:
if(g_mode[attacker] == || g_mode[attacker] == 3)  
        return 
HAM_SUPERCEDE
this is wrong
I know and I've turned it off. But it didn't happen.
__________________
FREE PLUGINS:

2021 and before -> ALL PLUGIN LINK IS HERE <-

2022:
Zombie: The Original [%70 Completed]
ZombieTheMan01 is offline
CrazY.
Veteran Member
Join Date: May 2015
Location: SP, Brazil
Old 02-23-2017 , 18:19   Re: Hammer (Knife) damage error.
Reply With Quote #62

Let me get this straight. When you use the item on the server, the damage works. Now when you use the item on a local server against bots, the damage doesn't work, is it?
__________________









Last edited by CrazY.; 02-23-2017 at 18:20.
CrazY. is offline
ZombieTheMan01
Senior Member
Join Date: Aug 2015
Location: Turkey
Old 02-23-2017 , 23:03   Re: Hammer (Knife) damage error.
Reply With Quote #63

Quote:
Originally Posted by CrazY. View Post
Let me get this straight. When you use the item on the server, the damage works. Now when you use the item on a local server against bots, the damage doesn't work, is it?
Exactly.
__________________
FREE PLUGINS:

2021 and before -> ALL PLUGIN LINK IS HERE <-

2022:
Zombie: The Original [%70 Completed]
ZombieTheMan01 is offline
ZombieTheMan01
Senior Member
Join Date: Aug 2015
Location: Turkey
Old 02-25-2017 , 06:33   Re: Hammer (Knife) damage error.
Reply With Quote #64

Aren't there any people to help me?
__________________
FREE PLUGINS:

2021 and before -> ALL PLUGIN LINK IS HERE <-

2022:
Zombie: The Original [%70 Completed]
ZombieTheMan01 is offline
Black Rose
Veteran Member
Join Date: Feb 2011
Location: Stockholm, Sweden
Old 02-25-2017 , 10:03   Re: Hammer (Knife) damage error.
Reply With Quote #65

This is a big and complicated plugin that includes zombie mods, the worst mods ever written by noobs. It's not as easy as you might think. Especially if someone else wrote it.

As I understand, the problem is delaying the attack which only works in some cases.

I made something like this previously. I don't know if it works as you expect it to though. Try it out, if it works you can merge the two together to create one plugin that does what you want.

Code:
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #include <xs> #define m_pPlayer      41   // CBasePlayerItem  Linux +4 #define m_flNextAttack  83  // CBasePlayer      Linux +5 new const gVModel[] = "models/v_amok_kukri.mdl" new const gPModel[] = "models/p_knife.mdl" //new const gWModel[] = "models/p_knife.mdl" new gKnifeEntity,     ghVModel,     ghPModel, //    ghWModel,     gpcvarPriDelay,     gpcvarPriDamage,     gpcvarPriFreq,     gpcvarPriRange,     gpcvarSecDelay,     gpcvarSecDamage,     gpcvarSecFreq,     gpcvarSecRange,     gpcvarBackStabMult; new const Float:gDamageMultiplier[] = {     1.0,    /* Generic */     4.0,    /* Head */     1.0,    /* Chest */     1.25,   /* Stomach */     1.0,    /* Left Arm */     1.0,    /* Right Arm */     0.75,   /* Left Leg */     0.75    /* Right Leg */ } new const gSoundBHitFlesh[][] = {     "player/bhit_flesh-1.wav",     "player/bhit_flesh-2.wav",     "player/bhit_flesh-3.wav" }; new const gSoundHitPrimary[][] = {     "weapons/knife_hit1.wav",     "weapons/knife_hit2.wav",     "weapons/knife_hit3.wav",     "weapons/knife_hit4.wav" }; new const gSoundHitSecondary[][] = {     "weapons/knife_stab.wav" }; new const gSoundSlash[][] = {     "weapons/knife_slash1.wav",     "weapons/knife_slash2.wav" }; new const gSoundHitWallPrimary[][] = {     "weapons/knife_hitwall1.wav" }; new const gSoundHitWallSecondary[][] = {     "weapons/knife_hitwall1.wav" }; #define ATTACK_PRIMARY 1 #define ATTACK_SECONDARY 2 public plugin_init() {         register_plugin("Delay Knife Attack", "1.0", "[ --{-@ ]");         RegisterHam(Ham_Killed, "player", "fwd_Killed");     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fwdWeaponPrimaryAttackPre");     RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fwdWeaponSecondaryAttackPre");     RegisterHam(Ham_TraceAttack, "player", "fwdTraceAttackPre");     RegisterHam(Ham_Item_Deploy, "weapon_knife", "fwdItemDeployPost", 1);         register_forward(FM_EmitSound, "fwdEmitSound");         if ( ( gKnifeEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "weapon_knife")) ) )         set_pdata_int(gKnifeEntity, m_pPlayer, 0, 4); // Just so Ham won't deny us.         gpcvarPriDelay = register_cvar("knife_delay_pri", "0.5");     gpcvarPriDamage = register_cvar("knife_damage_pri", "15");     gpcvarPriFreq = register_cvar("knife_frequency_pri", "1.0");     gpcvarPriRange = register_cvar("knife_range_pri", "48");         gpcvarSecDelay = register_cvar("knife_delay_sec", "0.8");     gpcvarSecDamage = register_cvar("knife_damage_sec", "65");     gpcvarSecFreq = register_cvar("knife_frequency_sec", "1.2");     gpcvarSecRange = register_cvar("knife_range_sec", "32");     gpcvarBackStabMult = register_cvar("knife_backstab_mult", "3.0"); } public fwdEmitSound(id, channel, const sound[], Float:vol, Float:attn, flags, pitch) {         if ( is_user_connected(id) && ( channel == CHAN_WEAPON || channel == CHAN_ITEM ) && equal(sound, "weapons/knife_", 14) && ! equal(sound[14], "deploy", 6) )         return FMRES_SUPERCEDE;         return FMRES_IGNORED; } public plugin_precache() {     if ( gVModel[0] ) {         ghVModel = engfunc(EngFunc_AllocString, gVModel);         precache_model(gVModel);     }         if ( gPModel[0] ) {         ghPModel = engfunc(EngFunc_AllocString, gPModel);         precache_model(gPModel);     } /*    if ( gWModel[0] ) {         ghWModel = engfunc(EngFunc_AllocString, gWModel);         precache_model(gWModel);     }     */     for ( new i = 0 ; i < sizeof gSoundBHitFlesh ; i++ )         precache_sound(gSoundBHitFlesh[i]);         for ( new i = 0 ; i < sizeof gSoundHitPrimary ; i++ )         precache_sound(gSoundHitPrimary[i]);         for ( new i = 0 ; i < sizeof gSoundHitSecondary ; i++ )         precache_sound(gSoundHitSecondary[i]);         for ( new i = 0 ; i < sizeof gSoundSlash ; i++ )         precache_sound(gSoundSlash[i]);         for ( new i = 0 ; i < sizeof gSoundHitWallPrimary ; i++ )         precache_sound(gSoundHitWallPrimary[i]);         for ( new i = 0 ; i < sizeof gSoundHitWallSecondary ; i++ )         precache_sound(gSoundHitWallSecondary[i]); } public client_disconnect(id)     remove_task(id); public fwdItemDeployPost(ent) {         new id = get_pdata_cbase(ent, m_pPlayer, 4);         if ( is_user_alive(id) ) {         if ( ghVModel )             set_pev_string(id, pev_viewmodel2, ghVModel);         if ( ghPModel )             set_pev_string(id, pev_weaponmodel2, ghPModel);     } } public fwdTraceAttackPre(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits) {     if ( ! is_user_alive(attacker) )         return HAM_IGNORED;     if ( get_user_weapon(attacker) == CSW_KNIFE )         return HAM_SUPERCEDE;         return HAM_IGNORED; } public fwdWeaponPrimaryAttackPre(ent)     ProcessAttack(ent, ATTACK_PRIMARY); public fwdWeaponSecondaryAttackPre(ent)     ProcessAttack(ent, ATTACK_SECONDARY); ProcessAttack(ent, AttackType) {         new id = get_pdata_cbase(ent, m_pPlayer, 4);         new TaskData[2];     TaskData[0] = id;     TaskData[1] = AttackType;         set_pdata_float(id, m_flNextAttack, AttackType == ATTACK_PRIMARY ? get_pcvar_float(gpcvarPriFreq) : get_pcvar_float(gpcvarSecFreq), 5);     set_task(AttackType == ATTACK_PRIMARY ? get_pcvar_float(gpcvarPriDelay) : get_pcvar_float(gpcvarSecDelay), "taskDelayAttack", id, TaskData, 2); } public taskDelayAttack(TaskData[]) {         new id = TaskData[0];     new AttackType = TaskData[1];         new Float:viewofs[3];     new Float:start[3];     new Float:end[3];     new Float:AimVec[3];         pev(id, pev_origin, start);     pev(id, pev_view_ofs, viewofs);     xs_vec_add(start, viewofs, start);         velocity_by_aim(id, 1, AimVec);     xs_vec_mul_scalar(AimVec, AttackType == ATTACK_PRIMARY ? get_pcvar_float(gpcvarPriRange) : get_pcvar_float(gpcvarSecRange), end);     xs_vec_add(start, end, end);         new hTrace, Float:trFraction, bool:trHull;         engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, id, hTrace);     get_tr2(hTrace, TR_flFraction, trFraction);         if ( trFraction >= 1.00 ) {         engfunc(EngFunc_TraceHull, start, end, DONT_IGNORE_MONSTERS, HULL_HEAD, id, hTrace);         get_tr2(hTrace, TR_flFraction, trFraction);         trHull = true;     }         if ( trFraction >= 1.00 )         emit_sound(id, CHAN_WEAPON, gSoundSlash[random(sizeof gSoundSlash)], VOL_NORM, ATTN_NORM, 0, 94);     else {         new trPlayer = get_tr2(hTrace, TR_pHit);         new Float:Damage = ( AttackType == ATTACK_PRIMARY ? get_pcvar_float(gpcvarPriDamage) : ( get_pcvar_float(gpcvarSecDamage) * ( ( IsBackstab(id, trPlayer) ) ? get_pcvar_float(gpcvarBackStabMult) : 1.0 ) ) ) * gDamageMultiplier[get_tr2(hTrace, TR_iHitgroup)];                 if ( is_user_alive(trPlayer) ) {                         emit_sound(trPlayer, CHAN_VOICE, gSoundBHitFlesh[random(sizeof gSoundBHitFlesh)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);                         new hTraceAttack = create_tr2();             if ( trHull )                 engfunc(EngFunc_TraceHull, start, end, DONT_IGNORE_MONSTERS, HULL_HEAD, id, hTraceAttack);             else                 engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, id, hTraceAttack);             ExecuteHam(Ham_TraceAttack, trPlayer, id, Damage, AimVec, hTraceAttack, DMG_BULLET|DMG_NEVERGIB);             free_tr2(hTraceAttack);                         emit_sound(id, CHAN_WEAPON, AttackType == ATTACK_PRIMARY ? gSoundHitPrimary[random(sizeof gSoundHitPrimary)] : gSoundHitSecondary[random(sizeof gSoundHitSecondary)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);             ExecuteHam(Ham_TakeDamage, trPlayer, gKnifeEntity, id, Damage, DMG_BULLET|DMG_NEVERGIB);         }         else             emit_sound(id, CHAN_ITEM, AttackType == ATTACK_PRIMARY ? gSoundHitWallPrimary[random(sizeof gSoundHitWallPrimary)] : gSoundHitWallSecondary[random(sizeof gSoundHitWallSecondary)], VOL_NORM, ATTN_NORM, 0, random_num(98, 101));     }         free_tr2(hTrace); } bool:IsBackstab(const attacker, const victim) {     if ( ! pev_valid(victim) )         return false;         new Float: vec1[3];     new Float: vec2[3];         velocity_by_aim(attacker, 1, vec1);         new Float:invlen = xs_rsqrt(vec1[0] * vec1[0] + vec1[1] * vec1[1]);     vec1[0] *= invlen;     vec1[1] *= invlen;         pev(victim, pev_angles, vec2);     angle_vector(vec2, ANGLEVECTOR_FORWARD, vec2);         return vec1[0] * vec2[0] + vec1[1] * vec2[1] > 0.8 ? true : false; } public fwd_Killed(victim, attacker, shouldgib)     remove_task(victim);
__________________

Last edited by Black Rose; 02-25-2017 at 10:22.
Black Rose is offline
ZombieTheMan01
Senior Member
Join Date: Aug 2015
Location: Turkey
Old 02-25-2017 , 11:11   Re: Hammer (Knife) damage error.
Reply With Quote #66

Quote:
Originally Posted by Black Rose View Post
This is a big and complicated plugin that includes zombie mods, the worst mods ever written by noobs. It's not as easy as you might think. Especially if someone else wrote it.

As I understand, the problem is delaying the attack which only works in some cases.

I made something like this previously. I don't know if it works as you expect it to though. Try it out, if it works you can merge the two together to create one plugin that does what you want.

Code:
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #include <xs> #define m_pPlayer      41   // CBasePlayerItem  Linux +4 #define m_flNextAttack  83  // CBasePlayer      Linux +5 new const gVModel[] = "models/v_amok_kukri.mdl" new const gPModel[] = "models/p_knife.mdl" //new const gWModel[] = "models/p_knife.mdl" new gKnifeEntity,     ghVModel,     ghPModel, //    ghWModel,     gpcvarPriDelay,     gpcvarPriDamage,     gpcvarPriFreq,     gpcvarPriRange,     gpcvarSecDelay,     gpcvarSecDamage,     gpcvarSecFreq,     gpcvarSecRange,     gpcvarBackStabMult; new const Float:gDamageMultiplier[] = {     1.0,    /* Generic */     4.0,    /* Head */     1.0,    /* Chest */     1.25,   /* Stomach */     1.0,    /* Left Arm */     1.0,    /* Right Arm */     0.75,   /* Left Leg */     0.75    /* Right Leg */ } new const gSoundBHitFlesh[][] = {     "player/bhit_flesh-1.wav",     "player/bhit_flesh-2.wav",     "player/bhit_flesh-3.wav" }; new const gSoundHitPrimary[][] = {     "weapons/knife_hit1.wav",     "weapons/knife_hit2.wav",     "weapons/knife_hit3.wav",     "weapons/knife_hit4.wav" }; new const gSoundHitSecondary[][] = {     "weapons/knife_stab.wav" }; new const gSoundSlash[][] = {     "weapons/knife_slash1.wav",     "weapons/knife_slash2.wav" }; new const gSoundHitWallPrimary[][] = {     "weapons/knife_hitwall1.wav" }; new const gSoundHitWallSecondary[][] = {     "weapons/knife_hitwall1.wav" }; #define ATTACK_PRIMARY 1 #define ATTACK_SECONDARY 2 public plugin_init() {         register_plugin("Delay Knife Attack", "1.0", "[ --{-@ ]");         RegisterHam(Ham_Killed, "player", "fwd_Killed");     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fwdWeaponPrimaryAttackPre");     RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fwdWeaponSecondaryAttackPre");     RegisterHam(Ham_TraceAttack, "player", "fwdTraceAttackPre");     RegisterHam(Ham_Item_Deploy, "weapon_knife", "fwdItemDeployPost", 1);         register_forward(FM_EmitSound, "fwdEmitSound");         if ( ( gKnifeEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "weapon_knife")) ) )         set_pdata_int(gKnifeEntity, m_pPlayer, 0, 4); // Just so Ham won't deny us.         gpcvarPriDelay = register_cvar("knife_delay_pri", "0.5");     gpcvarPriDamage = register_cvar("knife_damage_pri", "15");     gpcvarPriFreq = register_cvar("knife_frequency_pri", "1.0");     gpcvarPriRange = register_cvar("knife_range_pri", "48");         gpcvarSecDelay = register_cvar("knife_delay_sec", "0.8");     gpcvarSecDamage = register_cvar("knife_damage_sec", "65");     gpcvarSecFreq = register_cvar("knife_frequency_sec", "1.2");     gpcvarSecRange = register_cvar("knife_range_sec", "32");     gpcvarBackStabMult = register_cvar("knife_backstab_mult", "3.0"); } public fwdEmitSound(id, channel, const sound[], Float:vol, Float:attn, flags, pitch) {         if ( is_user_connected(id) && ( channel == CHAN_WEAPON || channel == CHAN_ITEM ) && equal(sound, "weapons/knife_", 14) && ! equal(sound[14], "deploy", 6) )         return FMRES_SUPERCEDE;         return FMRES_IGNORED; } public plugin_precache() {     if ( gVModel[0] ) {         ghVModel = engfunc(EngFunc_AllocString, gVModel);         precache_model(gVModel);     }         if ( gPModel[0] ) {         ghPModel = engfunc(EngFunc_AllocString, gPModel);         precache_model(gPModel);     } /*    if ( gWModel[0] ) {         ghWModel = engfunc(EngFunc_AllocString, gWModel);         precache_model(gWModel);     }     */     for ( new i = 0 ; i < sizeof gSoundBHitFlesh ; i++ )         precache_sound(gSoundBHitFlesh[i]);         for ( new i = 0 ; i < sizeof gSoundHitPrimary ; i++ )         precache_sound(gSoundHitPrimary[i]);         for ( new i = 0 ; i < sizeof gSoundHitSecondary ; i++ )         precache_sound(gSoundHitSecondary[i]);         for ( new i = 0 ; i < sizeof gSoundSlash ; i++ )         precache_sound(gSoundSlash[i]);         for ( new i = 0 ; i < sizeof gSoundHitWallPrimary ; i++ )         precache_sound(gSoundHitWallPrimary[i]);         for ( new i = 0 ; i < sizeof gSoundHitWallSecondary ; i++ )         precache_sound(gSoundHitWallSecondary[i]); } public client_disconnect(id)     remove_task(id); public fwdItemDeployPost(ent) {         new id = get_pdata_cbase(ent, m_pPlayer, 4);         if ( is_user_alive(id) ) {         if ( ghVModel )             set_pev_string(id, pev_viewmodel2, ghVModel);         if ( ghPModel )             set_pev_string(id, pev_weaponmodel2, ghPModel);     } } public fwdTraceAttackPre(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits) {     if ( ! is_user_alive(attacker) )         return HAM_IGNORED;     if ( get_user_weapon(attacker) == CSW_KNIFE )         return HAM_SUPERCEDE;         return HAM_IGNORED; } public fwdWeaponPrimaryAttackPre(ent)     ProcessAttack(ent, ATTACK_PRIMARY); public fwdWeaponSecondaryAttackPre(ent)     ProcessAttack(ent, ATTACK_SECONDARY); ProcessAttack(ent, AttackType) {         new id = get_pdata_cbase(ent, m_pPlayer, 4);         new TaskData[2];     TaskData[0] = id;     TaskData[1] = AttackType;         set_pdata_float(id, m_flNextAttack, AttackType == ATTACK_PRIMARY ? get_pcvar_float(gpcvarPriFreq) : get_pcvar_float(gpcvarSecFreq), 5);     set_task(AttackType == ATTACK_PRIMARY ? get_pcvar_float(gpcvarPriDelay) : get_pcvar_float(gpcvarSecDelay), "taskDelayAttack", id, TaskData, 2); } public taskDelayAttack(TaskData[]) {         new id = TaskData[0];     new AttackType = TaskData[1];         new Float:viewofs[3];     new Float:start[3];     new Float:end[3];     new Float:AimVec[3];         pev(id, pev_origin, start);     pev(id, pev_view_ofs, viewofs);     xs_vec_add(start, viewofs, start);         velocity_by_aim(id, 1, AimVec);     xs_vec_mul_scalar(AimVec, AttackType == ATTACK_PRIMARY ? get_pcvar_float(gpcvarPriRange) : get_pcvar_float(gpcvarSecRange), end);     xs_vec_add(start, end, end);         new hTrace, Float:trFraction, bool:trHull;         engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, id, hTrace);     get_tr2(hTrace, TR_flFraction, trFraction);         if ( trFraction >= 1.00 ) {         engfunc(EngFunc_TraceHull, start, end, DONT_IGNORE_MONSTERS, HULL_HEAD, id, hTrace);         get_tr2(hTrace, TR_flFraction, trFraction);         trHull = true;     }         if ( trFraction >= 1.00 )         emit_sound(id, CHAN_WEAPON, gSoundSlash[random(sizeof gSoundSlash)], VOL_NORM, ATTN_NORM, 0, 94);     else {         new trPlayer = get_tr2(hTrace, TR_pHit);         new Float:Damage = ( AttackType == ATTACK_PRIMARY ? get_pcvar_float(gpcvarPriDamage) : ( get_pcvar_float(gpcvarSecDamage) * ( ( IsBackstab(id, trPlayer) ) ? get_pcvar_float(gpcvarBackStabMult) : 1.0 ) ) ) * gDamageMultiplier[get_tr2(hTrace, TR_iHitgroup)];                 if ( is_user_alive(trPlayer) ) {                         emit_sound(trPlayer, CHAN_VOICE, gSoundBHitFlesh[random(sizeof gSoundBHitFlesh)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);                         new hTraceAttack = create_tr2();             if ( trHull )                 engfunc(EngFunc_TraceHull, start, end, DONT_IGNORE_MONSTERS, HULL_HEAD, id, hTraceAttack);             else                 engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, id, hTraceAttack);             ExecuteHam(Ham_TraceAttack, trPlayer, id, Damage, AimVec, hTraceAttack, DMG_BULLET|DMG_NEVERGIB);             free_tr2(hTraceAttack);                         emit_sound(id, CHAN_WEAPON, AttackType == ATTACK_PRIMARY ? gSoundHitPrimary[random(sizeof gSoundHitPrimary)] : gSoundHitSecondary[random(sizeof gSoundHitSecondary)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);             ExecuteHam(Ham_TakeDamage, trPlayer, gKnifeEntity, id, Damage, DMG_BULLET|DMG_NEVERGIB);         }         else             emit_sound(id, CHAN_ITEM, AttackType == ATTACK_PRIMARY ? gSoundHitWallPrimary[random(sizeof gSoundHitWallPrimary)] : gSoundHitWallSecondary[random(sizeof gSoundHitWallSecondary)], VOL_NORM, ATTN_NORM, 0, random_num(98, 101));     }         free_tr2(hTrace); } bool:IsBackstab(const attacker, const victim) {     if ( ! pev_valid(victim) )         return false;         new Float: vec1[3];     new Float: vec2[3];         velocity_by_aim(attacker, 1, vec1);         new Float:invlen = xs_rsqrt(vec1[0] * vec1[0] + vec1[1] * vec1[1]);     vec1[0] *= invlen;     vec1[1] *= invlen;         pev(victim, pev_angles, vec2);     angle_vector(vec2, ANGLEVECTOR_FORWARD, vec2);         return vec1[0] * vec2[0] + vec1[1] * vec2[1] > 0.8 ? true : false; } public fwd_Killed(victim, attacker, shouldgib)     remove_task(victim);
Thank you for your answer. It is useful for Skull-9 and similar knife plugin. But I don't think in hammer. I will still look.
__________________
FREE PLUGINS:

2021 and before -> ALL PLUGIN LINK IS HERE <-

2022:
Zombie: The Original [%70 Completed]
ZombieTheMan01 is offline
ZombieTheMan01
Senior Member
Join Date: Aug 2015
Location: Turkey
Old 03-02-2017 , 11:45   Re: Hammer (Knife) damage error.
Reply With Quote #67

Guys, this hammer is now prosperous. Would not it be another hammer instead? But it does not work when I write command. This code belongs to Dias. I do not know how long it will work, but maybe in this.

PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
//#include <biohazard>
#include <fun>

#define PLUGIN "[Zombie: The Hero 2] Melee Weapon: Hammer"
#define VERSION "2.0"
#define AUTHOR "Dias"

#define HAMMER_DRAWTIME_SLASH 1.0
#define HAMMER_DRAWTIME_STAB 0.5
#define HAMMER_CHANGE_TIME 2.0
#define HAMMER_RADIUS_SLASH 120.0
#define HAMMER_RADIUS_STAB 110.0
#define HAMMER_ATTACKTIME_SLASH 1.0
#define HAMMER_ATTACKTIME_STAB 0.1
#define HAMMER_DAMAGE_SLASH 1000
#define HAMMER_DAMAGE_STAB 500
#define HAMMER_WEIGHT 100
#define HAMMER_KNOCKPOWER 5000

new const v_model[] = "models/zombie_thehero/wpn/melee/v_hammer.mdl"
new const p_model[] = "models/zombie_thehero/wpn/melee/p_hammer.mdl"

new const hammer_sound[4][] = 
{
    
"weapons/hammer_draw.wav",
    
"weapons/hammer_hit_slash.wav",
    
"weapons/hammer_hit_stab.wav",
    
"weapons/hammer_miss.wav"
}

enum
{
    
HAMMER_MODE_SLASH 1,
    
HAMMER_MODE_STAB
}

enum
{
    
KNIFE_ANIM_IDLE 0,
    
KNIFE_ANIM_SLASH1,
    
KNIFE_ANIM_SLASH2,
    
KNIFE_ANIM_DRAW,
    
KNIFE_ANIM_STAB_HIT,
    
KNIFE_ANIM_STAB_MISS,
    
KNIFE_ANIM_MIDSLASH1,
    
KNIFE_ANIM_MIDSLASH2
}

enum
{
    
HAMMER_ANIM_IDLESLASH 0,
    
HAMMER_ANIM_SLASH,
    
HAMMER_ANIM_DRAWSLASH,
    
HAMMER_ANIM_MOVETO_STAB,
    
    
HAMMER_ANIM_IDLESTAB,
    
HAMMER_ANIM_STAB,
    
HAMMER_ANIM_DRAWSTAB,
    
HAMMER_ANIM_MOVETO_SLASH
}

const 
m_szAnimExtention 492

#define TASK_CHANGING 42342
#define TASK_ATTACKING 423423

new g_hammerg_old_weapon[33]
new 
g_had_hammer[33], g_hammer_mode[33], g_temp_attack[33], g_changing_mode[33]

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_event("CurWeapon""Event_CurWeapon""be""1=1")
    
    
register_forward(FM_EmitSound"fw_EmitSound")
    
register_forward(FM_CmdStart"fw_CmdStart")
    
register_forward(FM_TraceLine"fw_TraceLine")
    
register_forward(FM_TraceHull"fw_TraceHull")    
    
    
RegisterHam(Ham_CS_Weapon_SendWeaponAnim"weapon_knife""fw_Knife_SendAnim"1)    
    
RegisterHam(Ham_TraceAttack"player""fw_TraceAttack"1)
    
register_clcmd("say hammer""get_hammer")
}

public 
plugin_precache()
{
    
engfunc(EngFunc_PrecacheModelv_model)
    
engfunc(EngFunc_PrecacheModelp_model)
    
    for(new 
0sizeof(hammer_sound); i++)
        
engfunc(EngFunc_PrecacheSoundhammer_sound[i])    
        
    
//g_hammer = zb3_register_weapon("Hammer", WPN_MELEE, 7500)
}

public 
zb3_weapon_selected_post(idwpnid)
{
    if(
wpnid == g_hammerget_hammer(id)
}

public 
zb3_user_spawned(idremove_hammer(id)
public 
zb3_user_dead(idremove_hammer(id)
public 
zb3_user_infected(idremove_hammer(id)

public 
get_hammer(id)
{
    
g_had_hammer[id] = 1
    g_hammer_mode
[id] = HAMMER_MODE_SLASH
    g_temp_attack
[id] = 0
    g_changing_mode
[id] = 0

    
if(get_user_weapon(id) == CSW_KNIFE
    {
        
Event_CurWeapon(id)
        
set_weapon_anim(idHAMMER_ANIM_DRAWSLASH)
    }        
}

public 
remove_hammer(id)
{
    
g_had_hammer[id] = 0
    g_hammer_mode
[id] = 0
    g_temp_attack
[id] = 0
    g_changing_mode
[id] = 0
    
    remove_task
(id+TASK_CHANGING)
    
    
//if(is_user_alive(id) && !is_user_zombie(id)) zb3_reset_user_speed(id)
}

public 
Event_CurWeapon(id)
{
    if(!
is_user_alive(id))
        return 
1
    
    
if(g_old_weapon[id] == CSW_KNIFE && get_user_weapon(id) != CSW_KNIFE && g_had_hammer[id])
        
//zb3_reset_user_speed(id)
    
    
g_old_weapon[id] = get_user_weapon(id)
    
    if(
get_user_weapon(id) != CSW_KNIFE)
        return 
1
    
if(!g_had_hammer[id])
        return 
1
        
    set_pev
(idpev_viewmodel2v_model)
    
set_pev(idpev_weaponmodel2p_model)
        
    return 
0
}

public 
fw_TraceAttack(victimattackerFloat:DamageFloat:direction[3], tracehandledamagebits)
{
    if(!
is_user_alive(victim) || !is_user_alive(attacker))
        return 
HAM_IGNORED
    
if(cs_get_user_team(victim) == cs_get_user_team(attacker))
        return 
HAM_IGNORED    
    
if(get_user_weapon(attacker) != CSW_KNIFE || !g_had_hammer[attacker])
        return 
HAM_IGNORED
    
if(g_hammer_mode[attacker] != HAMMER_MODE_STAB)
        return 
HAM_IGNORED
        
    
static Float:Origin[3]
    
pev(attackerpev_originOrigin)
    
    
hook_ent2(victimOriginfloat(HAMMER_KNOCKPOWER), 2)
        
    return 
HAM_IGNORED
}

public 
fw_EmitSound(idchannel, const sample[], Float:volumeFloat:attnflagspitch)
{
    if(!
is_user_connected(id))
        return 
FMRES_IGNORED
    
if(get_user_weapon(id) != CSW_KNIFE || !g_had_hammer[id])
        return 
FMRES_IGNORED
        
    
if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
    {
        if(
sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
        {    
            return 
FMRES_SUPERCEDE
        
}
        if (
sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't'// hit
        
{
            if(
sample[17] == 'w')
            {
                return 
FMRES_SUPERCEDE
            
} else {
                return 
FMRES_SUPERCEDE
            
}
        }
        if (
sample[14] == 's' && sample[15] == 't' && sample[16] == 'a'// stab
        
{
            return 
FMRES_SUPERCEDE;
        }
    }
    
    return 
FMRES_IGNORED
}

public 
fw_CmdStart(iduc_handleseed)
{
    if (!
is_user_alive(id)) 
        return
    if(
get_user_weapon(id) != CSW_KNIFE)
        return
    if(!
g_had_hammer[id])
        return
    
    static 
ent
    ent 
find_ent_by_owner(-1"weapon_knife"id)
    
    if(!
pev_valid(ent))
        return
    if(
get_pdata_float(ent464) > 0.0 || get_pdata_float(ent474) > 0.0
        return
    
    static 
CurButton
    CurButton 
get_uc(uc_handleUC_Buttons)
    
    if(
CurButton IN_ATTACK)
    {
        
set_uc(uc_handleUC_ButtonsCurButton & ~IN_ATTACK)
        
        if(
g_hammer_mode[id] == HAMMER_MODE_SLASH)
        {
            
g_temp_attack[id] = 1
            ExecuteHamB
(Ham_Weapon_PrimaryAttackget_pdata_cbase(id3735))
            
g_temp_attack[id] = 0
            
            set_weapons_timeidle
(idHAMMER_ATTACKTIME_SLASH 1.0)
            
set_player_nextattack(idHAMMER_ATTACKTIME_SLASH 1.0)
            
            
set_weapon_anim(idHAMMER_ANIM_SLASH)
            
set_task(HAMMER_ATTACKTIME_SLASH"Start_SlashNow"id+TASK_ATTACKING)
        } else {
            
g_temp_attack[id] = 1
            ExecuteHamB
(Ham_Weapon_PrimaryAttackget_pdata_cbase(id3735))
            
g_temp_attack[id] = 0
            
            set_weapons_timeidle
(idHAMMER_ATTACKTIME_STAB 2.0)
            
set_player_nextattack(idHAMMER_ATTACKTIME_STAB 2.0)
            
            
set_weapon_anim(idHAMMER_ANIM_STAB)
            
set_task(HAMMER_ATTACKTIME_STAB"Start_StabNow"id+TASK_ATTACKING)
        }
    } else if(
CurButton IN_ATTACK2) {
        
set_uc(uc_handleUC_ButtonsCurButton & ~IN_ATTACK2)
        
        if(!
g_changing_mode[id])
        {
            
g_changing_mode[id] = 1
            
            set_weapons_timeidle
(idHAMMER_CHANGE_TIME)
            
set_player_nextattack(idHAMMER_CHANGE_TIME)
            
            
set_weapon_anim(idg_hammer_mode[id] == HAMMER_MODE_SLASH HAMMER_ANIM_MOVETO_STAB HAMMER_ANIM_MOVETO_SLASH)
            
set_task(HAMMER_CHANGE_TIME 0.1"Hammer_ChangeMode"id+TASK_CHANGING)
        }
    }
}

public 
Start_SlashNow(id)
{
    
id -= TASK_ATTACKING
    
    g_temp_attack
[id] = 0
    
    
if (!is_user_alive(id)) 
        return
    if(
get_user_weapon(id) != CSW_KNIFE)
        return
    if(!
g_had_hammer[id])
        return    
        
    if(
Check_Slash(id1))
    {
        
emit_sound(idCHAN_WEAPONhammer_sound[1], 1.0ATTN_NORM0PITCH_NORM)
        
Check_Slash(id0)
    } else {
        
emit_sound(idCHAN_WEAPONhammer_sound[3], 1.0ATTN_NORM0PITCH_NORM)
    }
}

public 
Check_Slash(idFirst_Check)
{
    
#define MAX_POINT 2
    
static Float:Max_DistanceFloat:Point[MAX_POINT][3], Float:TB_Distance
    
    Max_Distance 
HAMMER_RADIUS_SLASH
    TB_Distance 
Max_Distance float(MAX_POINT)
    
    static 
Float:VicOrigin[3], Float:MyOrigin[3]
    
pev(idpev_originMyOrigin)
    
    for(new 
0MAX_POINTi++)
        
get_position(idTB_Distance * (1), 0.00.0Point[i])
        
    static 
Have_VictimHave_Victim 0
    
static ent
    ent 
fm_get_user_weapon_entity(idget_user_weapon(id))
        
    if(!
pev_valid(ent))
        return 
0
        
    
for(new 0get_maxplayers(); i++)
    {
        if(!
is_user_alive(i))
            continue
        if(
id == i)
            continue
        if(!
can_see_fm(idi))
            continue
        if(
entity_range(idi) > Max_Distance)
            continue
            
        
pev(ipev_originVicOrigin)
            
        if(
get_distance_f(VicOriginPoint[0]) <= 36.0
        
|| get_distance_f(VicOriginPoint[1]) <= 36.0)
        {
            if(!
Have_VictimHave_Victim 1
            
if(!First_Checkdo_attack(idientfloat(HAMMER_DAMAGE_SLASH))
        }
    }    
    
    if(
Have_Victim)
        return 
1
    
else
        return 
0
    
    
return 0
}    

public 
Start_StabNow(id)
{
    
id -= TASK_ATTACKING
    
    g_temp_attack
[id] = 0
    
    
if (!is_user_alive(id)) 
        return
    if(
get_user_weapon(id) != CSW_KNIFE)
        return
    if(!
g_had_hammer[id])
        return    
        
    if(
Check_Stab(id1))
    {
        
emit_sound(idCHAN_WEAPONhammer_sound[2], 1.0ATTN_NORM0PITCH_NORM)
        
Check_Stab(id0)
    } else {
        
emit_sound(idCHAN_WEAPONhammer_sound[3], 1.0ATTN_NORM0PITCH_NORM)
    }
}

public 
Check_Stab(idFirst_Check)
{
    
#define MAX_POINT 2
    
static Float:Max_DistanceFloat:Point[MAX_POINT][3], Float:TB_Distance
    
    Max_Distance 
HAMMER_RADIUS_STAB
    TB_Distance 
Max_Distance float(MAX_POINT)
    
    static 
Float:VicOrigin[3], Float:MyOrigin[3]
    
pev(idpev_originMyOrigin)
    
    for(new 
0MAX_POINTi++)
        
get_position(idTB_Distance * (1), 0.00.0Point[i])
        
    static 
Have_VictimHave_Victim 0
    
static ent
    ent 
fm_get_user_weapon_entity(idget_user_weapon(id))
        
    if(!
pev_valid(ent))
        return 
0
        
    
for(new 0get_maxplayers(); i++)
    {
        if(!
is_user_alive(i))
            continue
        if(
id == i)
            continue
        if(!
can_see_fm(idi))
            continue
        if(
entity_range(idi) > Max_Distance)
            continue
            
        
pev(ipev_originVicOrigin)
            
        if(
get_distance_f(VicOriginPoint[0]) <= 40.0
        
|| get_distance_f(VicOriginPoint[1]) <= 40.0)
        {
            if(!
Have_VictimHave_Victim 1
            
if(!First_Checkdo_attack(idientfloat(HAMMER_DAMAGE_STAB))
        }
    }    
    
    if(
Have_Victim)
        return 
1
    
else
        return 
0
    
    
return 0
}    

public 
Hammer_ChangeMode(id)
{
    
id -= TASK_CHANGING
    
    g_changing_mode
[id] = 0
    
    
if (!is_user_alive(id)) 
        return
    if(
get_user_weapon(id) != CSW_KNIFE)
        return    
    if(!
g_had_hammer[id])
        return                
        
    if(
g_hammer_mode[id] == HAMMER_MODE_SLASH// Change to Stab
    
{
        
g_hammer_mode[id] = HAMMER_MODE_STAB
        set_weapon_anim
(idHAMMER_ANIM_IDLESTAB)
        
        
//zb3_set_user_speed(id, pev(id, pev_maxspeed) - HAMMER_WEIGHT)
    
} else { // Change to Slash
        
g_hammer_mode[id] = HAMMER_MODE_SLASH
        set_weapon_anim
(idHAMMER_ANIM_IDLESLASH)
        
        
//zb3_reset_user_speed(id)
    
}
}

public 
fw_Knife_SendAnim(entanimskip_local)
{
    if(
pev_valid(ent) != 2)
        return 
HAM_IGNORED
        
    
new id
    id 
get_pdata_cbase(ent41 4)
    
    if(!
g_had_hammer[id])
        return 
HAM_IGNORED
    
    set_pdata_string
(idm_szAnimExtention 4"hammer", -20)
        
    switch(
anim)
    {
        case 
KNIFE_ANIM_DRAW:
        {
            if(
g_hammer_mode[id] == HAMMER_MODE_SLASH)
            {
                
set_weapon_anim(idHAMMER_ANIM_DRAWSLASH)
                
                
set_weapons_timeidle(idHAMMER_DRAWTIME_SLASH)
                
set_player_nextattack(idHAMMER_DRAWTIME_SLASH)
                
                
//zb3_reset_user_speed(id)
            
} else {
                
set_weapon_anim(idHAMMER_ANIM_DRAWSTAB)
                
                
set_weapons_timeidle(idHAMMER_DRAWTIME_STAB)
                
set_player_nextattack(idHAMMER_DRAWTIME_STAB)

                
//zb3_set_user_speed(id, pev(id, pev_maxspeed) - HAMMER_WEIGHT)
            
}
        }
        case 
KNIFE_ANIM_IDLE:
        {
            if(
g_hammer_mode[id] == HAMMER_MODE_SLASH)
            {
                
set_weapon_anim(idHAMMER_ANIM_IDLESLASH)
            } else {
                
set_weapon_anim(idHAMMER_ANIM_IDLESTAB)            
            }            
        }
    }
    
    return 
HAM_IGNORED
}

public 
fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monsteridhandle)
{
    if (!
is_user_alive(id))
        return 
FMRES_IGNORED
    
//if(zb3_get_user_zombie(id))
    //    return FMRES_IGNORED        
    
if (get_user_weapon(id) != CSW_KNIFE)
        return 
FMRES_IGNORED
    
if(!g_had_hammer[id])
        return 
FMRES_IGNORED
    
    
static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3]
    
    
pev(idpev_originfOrigin)
    
pev(idpev_view_ofsview_ofs)
    
xs_vec_add(fOriginview_ofsvecStart)
    
pev(idpev_v_anglev_angle)
    
    
engfunc(EngFunc_MakeVectorsv_angle)
    
get_global_vector(GL_v_forwardv_forward)

    static 
Float:scalar
    
    
if(g_hammer_mode[id] == HAMMER_MODE_SLASH)
        
scalar HAMMER_RADIUS_SLASH
    
else
        
scalar HAMMER_RADIUS_STAB
    
    
if(g_temp_attack[id])
        
scalar 0.0    
    
    xs_vec_mul_scalar
(v_forwardscalarv_forward)
    
xs_vec_add(vecStartv_forwardvecEnd)
    
    
engfunc(EngFunc_TraceLinevecStartvecEndignored_monsteridhandle)
    
    return 
FMRES_SUPERCEDE
}

public 
fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monsterhullidhandle)
{
    if (!
is_user_alive(id))
        return 
FMRES_IGNORED
    
//if(zb3_get_user_zombie(id))
    //    return FMRES_IGNORED
    
if (get_user_weapon(id) != CSW_KNIFE)
        return 
FMRES_IGNORED
    
if(!g_had_hammer[id])
        return 
FMRES_IGNORED
    
    
static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3]
    
    
pev(idpev_originfOrigin)
    
pev(idpev_view_ofsview_ofs)
    
xs_vec_add(fOriginview_ofsvecStart)
    
pev(idpev_v_anglev_angle)
    
    
engfunc(EngFunc_MakeVectorsv_angle)
    
get_global_vector(GL_v_forwardv_forward)
    
    static 
Float:scalar
    
    
if(g_hammer_mode[id] == HAMMER_MODE_SLASH)
        
scalar HAMMER_RADIUS_SLASH
    
else
        
scalar HAMMER_RADIUS_STAB
    
    
if(g_temp_attack[id])
        
scalar 0.0    
    
    xs_vec_mul_scalar
(v_forwardscalarv_forward)
    
xs_vec_add(vecStartv_forwardvecEnd)
    
    
engfunc(EngFunc_TraceHullvecStartvecEndignored_monsterhullidhandle)
    
    return 
FMRES_SUPERCEDE
}

do_attack(AttackerVictimInflictorFloat:fDamage)
{
    
fake_player_trace_attack(AttackerVictimfDamage)
    
fake_take_damage(AttackerVictimfDamageInflictor)
}

fake_player_trace_attack(iAttackeriVictim, &Float:fDamage)
{
    
// get fDirection
    
new Float:fAngles[3], Float:fDirection[3]
    
pev(iAttackerpev_anglesfAngles)
    
angle_vector(fAnglesANGLEVECTOR_FORWARDfDirection)
    
    
// get fStart
    
new Float:fStart[3], Float:fViewOfs[3]
    
pev(iAttackerpev_originfStart)
    
pev(iAttackerpev_view_ofsfViewOfs)
    
xs_vec_add(fViewOfsfStartfStart)
    
    
// get aimOrigin
    
new iAimOrigin[3], Float:fAimOrigin[3]
    
get_user_origin(iAttackeriAimOrigin3)
    
IVecFVec(iAimOriginfAimOrigin)
    
    
// TraceLine from fStart to AimOrigin
    
new ptr create_tr2() 
    
engfunc(EngFunc_TraceLinefStartfAimOriginDONT_IGNORE_MONSTERSiAttackerptr)
    new 
pHit get_tr2(ptrTR_pHit)
    new 
iHitgroup get_tr2(ptrTR_iHitgroup)
    new 
Float:fEndPos[3]
    
get_tr2(ptrTR_vecEndPosfEndPos)

    
// get target & body at aiming
    
new iTargetiBody
    get_user_aiming
(iAttackeriTargetiBody)
    
    
// if aiming find target is iVictim then update iHitgroup
    
if (iTarget == iVictim)
    {
        
iHitgroup iBody
    
}
    
    
// if ptr find target not is iVictim
    
else if (pHit != iVictim)
    {
        
// get AimOrigin in iVictim
        
new Float:fVicOrigin[3], Float:fVicViewOfs[3], Float:fAimInVictim[3]
        
pev(iVictimpev_originfVicOrigin)
        
pev(iVictimpev_view_ofsfVicViewOfs
        
xs_vec_add(fVicViewOfsfVicOriginfAimInVictim)
        
fAimInVictim[2] = fStart[2]
        
fAimInVictim[2] += get_distance_f(fStartfAimInVictim) * floattanfAngles[0] * 2.0degrees )
        
        
// check aim in size of iVictim
        
new iAngleToVictim get_angle_to_target(iAttackerfVicOrigin)
        
iAngleToVictim abs(iAngleToVictim)
        new 
Float:fDis 2.0 get_distance_f(fStartfAimInVictim) * floatsinfloat(iAngleToVictim) * 0.5degrees )
        new 
Float:fVicSize[3]
        
pev(iVictimpev_size fVicSize)
        if ( 
fDis <= fVicSize[0] * 0.5 )
        {
            
// TraceLine from fStart to aimOrigin in iVictim
            
new ptr2 create_tr2() 
            
engfunc(EngFunc_TraceLinefStartfAimInVictimDONT_IGNORE_MONSTERSiAttackerptr2)
            new 
pHit2 get_tr2(ptr2TR_pHit)
            new 
iHitgroup2 get_tr2(ptr2TR_iHitgroup)
            
            
// if ptr2 find target is iVictim
            
if ( pHit2 == iVictim && (iHitgroup2 != HIT_HEAD || fDis <= fVicSize[0] * 0.25) )
            {
                
pHit iVictim
                iHitgroup 
iHitgroup2
                get_tr2
(ptr2TR_vecEndPosfEndPos)
            }
            
            
free_tr2(ptr2)
        }
        
        
// if pHit still not is iVictim then set default HitGroup
        
if (pHit != iVictim)
        {
            
// set default iHitgroup
            
iHitgroup HIT_GENERIC
            
            
new ptr3 create_tr2() 
            
engfunc(EngFunc_TraceLinefStartfVicOriginDONT_IGNORE_MONSTERSiAttackerptr3)
            
get_tr2(ptr3TR_vecEndPosfEndPos)
            
            
// free ptr3
            
free_tr2(ptr3)
        }
    }
    
    
// set new Hit & Hitgroup & EndPos
    
set_tr2(ptrTR_pHitiVictim)
    
set_tr2(ptrTR_iHitgroupiHitgroup)
    
set_tr2(ptrTR_vecEndPosfEndPos)
    
    
// hitgroup multi fDamage
    
new Float:fMultifDamage 
    
switch(iHitgroup)
    {
        case 
HIT_HEADfMultifDamage  4.0
        
case HIT_STOMACHfMultifDamage  1.25
        
case HIT_LEFTLEGfMultifDamage  0.75
        
case HIT_RIGHTLEGfMultifDamage  0.75
        
default: fMultifDamage  1.0
    
}
    
    
fDamage *= fMultifDamage
    
    
// ExecuteHam
    
fake_trake_attack(iAttackeriVictimfDamagefDirectionptr)
    
    
// free ptr
    
free_tr2(ptr)
}

stock fake_trake_attack(iAttackeriVictimFloat:fDamageFloat:fDirection[3], iTraceHandleiDamageBit = (DMG_NEVERGIB DMG_BULLET))
{
    
ExecuteHamB(Ham_TraceAttackiVictimiAttackerfDamagefDirectioniTraceHandleiDamageBit)
}

stock fake_take_damage(iAttackeriVictimFloat:fDamageiInflictor 0iDamageBit = (DMG_NEVERGIB DMG_BULLET))
{
    
iInflictor = (!iInflictor) ? iAttacker iInflictor
    ExecuteHamB
(Ham_TakeDamageiVictimiInflictoriAttackerfDamageiDamageBit)
}

stock get_angle_to_target(id, const Float:fTarget[3], Float:TargetSize 0.0)
{
    new 
Float:fOrigin[3], iAimOrigin[3], Float:fAimOrigin[3], Float:fV1[3]
    
pev(idpev_originfOrigin)
    
get_user_origin(idiAimOrigin3// end position from eyes
    
IVecFVec(iAimOriginfAimOrigin)
    
xs_vec_sub(fAimOriginfOriginfV1)
    
    new 
Float:fV2[3]
    
xs_vec_sub(fTargetfOriginfV2)
    
    new 
iResult get_angle_between_vectors(fV1fV2)
    
    if (
TargetSize 0.0)
    {
        new 
Float:fTan TargetSize get_distance_f(fOriginfTarget)
        new 
fAngleToTargetSize floatroundfloatatan(fTandegrees) )
        
iResult -= (iResult 0) ? fAngleToTargetSize : -fAngleToTargetSize
    
}
    
    return 
iResult
}

stock get_angle_between_vectors(const Float:fV1[3], const Float:fV2[3])
{
    new 
Float:fA1[3], Float:fA2[3]
    
engfunc(EngFunc_VecToAnglesfV1fA1)
    
engfunc(EngFunc_VecToAnglesfV2fA2)
    
    new 
iResult floatround(fA1[1] - fA2[1])
    
iResult iResult 360
    iResult 
= (iResult 180) ? (iResult 360) : iResult
    
    
return iResult
}

stock set_weapons_timeidle(idFloat:TimeIdle)
{
    if(!
is_user_alive(id))
        return
        
    new 
entwpn fm_get_user_weapon_entity(idCSW_KNIFE)
    if (
pev_valid(entwpn)) 
    {
        
set_pdata_float(entwpn46TimeIdle4)
        
set_pdata_float(entwpn47TimeIdle4)
        
set_pdata_float(entwpn48TimeIdle 1.04)
    }
}

stock set_player_nextattack(idFloat:nexttime)
{
    if(!
is_user_alive(id))
        return
        
    const 
m_flNextAttack 83
    set_pdata_float
(idm_flNextAttacknexttime5)
}

stock set_weapon_anim(idanim)
{
    if(!
is_user_alive(id))
        return
        
    
set_pev(idpev_weaponanimanim)
    
    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM_id)
    
write_byte(anim)
    
write_byte(0)
    
message_end()    
}

stock get_position(entFloat:forwFloat:rightFloat:upFloat:vStart[])
{
    new 
Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
    
    
pev(entpev_originvOrigin)
    
pev(entpev_view_ofs,vUp//for player
    
xs_vec_add(vOrigin,vUp,vOrigin)
    
pev(entpev_v_anglevAngle// if normal entity ,use pev_angles
    
    
angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward//or use EngFunc_AngleVectors
    
angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
    
angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
    
    
vStart[0] = vOrigin[0] + vForward[0] * forw vRight[0] * right vUp[0] * up
    vStart
[1] = vOrigin[1] + vForward[1] * forw vRight[1] * right vUp[1] * up
    vStart
[2] = vOrigin[2] + vForward[2] * forw vRight[2] * right vUp[2] * up
}

stock bool:can_see_fm(entindex1entindex2)
{
    if (!
entindex1 || !entindex2)
        return 
false

    
if (pev_valid(entindex1) && pev_valid(entindex1))
    {
        new 
flags pev(entindex1pev_flags)
        if (
flags EF_NODRAW || flags FL_NOTARGET)
        {
            return 
false
        
}

        new 
Float:lookerOrig[3]
        new 
Float:targetBaseOrig[3]
        new 
Float:targetOrig[3]
        new 
Float:temp[3]

        
pev(entindex1pev_originlookerOrig)
        
pev(entindex1pev_view_ofstemp)
        
lookerOrig[0] += temp[0]
        
lookerOrig[1] += temp[1]
        
lookerOrig[2] += temp[2]

        
pev(entindex2pev_origintargetBaseOrig)
        
pev(entindex2pev_view_ofstemp)
        
targetOrig[0] = targetBaseOrig [0] + temp[0]
        
targetOrig[1] = targetBaseOrig [1] + temp[1]
        
targetOrig[2] = targetBaseOrig [2] + temp[2]

        
engfunc(EngFunc_TraceLinelookerOrigtargetOrig0entindex10//  checks the had of seen player
        
if (get_tr2(0TraceResult:TR_InOpen) && get_tr2(0TraceResult:TR_InWater))
        {
            return 
false
        

        else 
        {
            new 
Float:flFraction
            get_tr2
(0TraceResult:TR_flFractionflFraction)
            if (
flFraction == 1.0 || (get_tr2(0TraceResult:TR_pHit) == entindex2))
            {
                return 
true
            
}
            else
            {
                
targetOrig[0] = targetBaseOrig [0]
                
targetOrig[1] = targetBaseOrig [1]
                
targetOrig[2] = targetBaseOrig [2]
                
engfunc(EngFunc_TraceLinelookerOrigtargetOrig0entindex10//  checks the body of seen player
                
get_tr2(0TraceResult:TR_flFractionflFraction)
                if (
flFraction == 1.0 || (get_tr2(0TraceResult:TR_pHit) == entindex2))
                {
                    return 
true
                
}
                else
                {
                    
targetOrig[0] = targetBaseOrig [0]
                    
targetOrig[1] = targetBaseOrig [1]
                    
targetOrig[2] = targetBaseOrig [2] - 17.0
                    engfunc
(EngFunc_TraceLinelookerOrigtargetOrig0entindex10//  checks the legs of seen player
                    
get_tr2(0TraceResult:TR_flFractionflFraction)
                    if (
flFraction == 1.0 || (get_tr2(0TraceResult:TR_pHit) == entindex2))
                    {
                        return 
true
                    
}
                }
            }
        }
    }
    return 
false
}

stock hook_ent2(entFloat:VicOrigin[3], Float:speedtype)
{
    static 
Float:fl_Velocity[3]
    static 
Float:EntOrigin[3]
    static 
Float:EntVelocity[3]
    
    
pev(entpev_velocityEntVelocity)
    
pev(entpev_originEntOrigin)
    static 
Float:distance_f
    distance_f 
get_distance_f(EntOriginVicOrigin)
    
    static 
Float:fl_Timefl_Time distance_f speed
    
    
if(type == 1)
    {
        
fl_Velocity[0] = ((VicOrigin[0] - EntOrigin[0]) / fl_Time) * 1.5
        fl_Velocity
[1] = ((VicOrigin[1] - EntOrigin[1]) / fl_Time) * 1.5
        fl_Velocity
[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time        
    
} else if(type == 2) {
        
fl_Velocity[0] = ((EntOrigin[0] - VicOrigin[0]) / fl_Time) * 1.5
        fl_Velocity
[1] = ((EntOrigin[1] - VicOrigin[1]) / fl_Time) * 1.5
        fl_Velocity
[2] = (EntOrigin[2] - VicOrigin[2]) / fl_Time
    
}

    
xs_vec_add(EntVelocityfl_Velocityfl_Velocity)
    
set_pev(entpev_velocityfl_Velocity)

__________________
FREE PLUGINS:

2021 and before -> ALL PLUGIN LINK IS HERE <-

2022:
Zombie: The Original [%70 Completed]
ZombieTheMan01 is offline
CrazY.
Veteran Member
Join Date: May 2015
Location: SP, Brazil
Old 03-06-2017 , 19:47   Re: Hammer (Knife) damage error.
Reply With Quote #68

Well, it seems that the bots do not register hams as common players. You can try the following ways:

1°: Use something like the following code to register the entity of ham in the bot.
PHP Code:
// Some vars
new cvar_botquotag_hambots;

public 
plugin_init()
{
    
register_plugin("Register Ham Bots""0.1""Crazy");
    
    
// Get the number of bot_quota
    
cvar_botquota get_cvar_pointer("bot_quota");
    
    
// Register a Ham_TakeDamage
    
RegisterHam(Ham_TakeDamage"player""Fw_TakeDamage");
}

public 
client_putinserver(id)
{
    
// Check if user is bot, if dont already registred and if has bots in the game
    
if (is_user_bot(id) && !g_hambots && cvar_botquota)
        
set_task(0.1"register_ham_bots"id); // Set a register ham bots task
}

public 
register_ham_bots(id)
{
    
// Check if user is bot, if dont already registred and if has bots in the game
    
if (!get_pcvar_num(cvar_botquota) || g_hambots || !is_user_bot(id))
        return;
    
    
// Register the ham take damage to bot
    
RegisterHamFromEntity(Ham_TakeDamageid"Fw_TakeDamage");
    
    
// Register completed
    
g_hambots true;
}

public 
Fw_TakeDamage(victiminflictorattackerFloat:damage)
{
    if (!
is_user_alive(attacker))
        return 
HAM_IGNORED;
        
    
// Your code...
    
    
return HAM_IGNORED;

NOTE: You can check that in my extra items.


2°: Use CS_HAM_BOTS_API (LINK);


Well, I hope I have helped you.
__________________









Last edited by CrazY.; 03-06-2017 at 19:48.
CrazY. is offline
ZombieTheMan01
Senior Member
Join Date: Aug 2015
Location: Turkey
Old 03-16-2017 , 14:55   Re: Hammer (Knife) damage error.
Reply With Quote #69

Quote:
Originally Posted by CrazY. View Post
Well, it seems that the bots do not register hams as common players. You can try the following ways:

1°: Use something like the following code to register the entity of ham in the bot.
PHP Code:
// Some vars
new cvar_botquotag_hambots;

public 
plugin_init()
{
    
register_plugin("Register Ham Bots""0.1""Crazy");
    
    
// Get the number of bot_quota
    
cvar_botquota get_cvar_pointer("bot_quota");
    
    
// Register a Ham_TakeDamage
    
RegisterHam(Ham_TakeDamage"player""Fw_TakeDamage");
}

public 
client_putinserver(id)
{
    
// Check if user is bot, if dont already registred and if has bots in the game
    
if (is_user_bot(id) && !g_hambots && cvar_botquota)
        
set_task(0.1"register_ham_bots"id); // Set a register ham bots task
}

public 
register_ham_bots(id)
{
    
// Check if user is bot, if dont already registred and if has bots in the game
    
if (!get_pcvar_num(cvar_botquota) || g_hambots || !is_user_bot(id))
        return;
    
    
// Register the ham take damage to bot
    
RegisterHamFromEntity(Ham_TakeDamageid"Fw_TakeDamage");
    
    
// Register completed
    
g_hambots true;
}

public 
Fw_TakeDamage(victiminflictorattackerFloat:damage)
{
    if (!
is_user_alive(attacker))
        return 
HAM_IGNORED;
        
    
// Your code...
    
    
return HAM_IGNORED;

NOTE: You can check that in my extra items.


2°: Use CS_HAM_BOTS_API (LINK);


Well, I hope I have helped you.
Sorry. It didn't happen. I think there is an error in the g_mode code, unlike this damage code. Because of that, it does not damage it.
__________________
FREE PLUGINS:

2021 and before -> ALL PLUGIN LINK IS HERE <-

2022:
Zombie: The Original [%70 Completed]
ZombieTheMan01 is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 07:56.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode