Raised This Month: $ Target: $400
 0% 

[HELP] Exolent's Hammer plugin


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
Elo_Cee
Member
Join Date: Jan 2015
Old 02-09-2016 , 11:33   [HELP] Exolent's Hammer plugin
Reply With Quote #1

I have hammer plugin for zp from zombie-mod.ru. I tried to modify this plugin in order to use in normal gameplay (not zp). It works almost perfectly except I can't control damage. I have something to do with victim and attacker when players attack another player, but i don't know where victim was taken damage or when action was performed in the code. So, can anyone read the code below and tell me please??? I'm noob at coding.
When I test, the code didn't print both Test, Damage 0, Damage 1 when I attack someone.

Thank you all. Sorry for my bad english.

Here is the code.
PHP Code:
#include < amxmodx >
#include < amxmisc >
#include < fun >
#include < engine >
#include < zombieplague >
#include < fakemeta >
#include < hamsandwich >
#include < xs >

const OFFSET_PAINSHOCK 108 // ConnorMcLeod
const OFFSET_LINUX 5
#define PLAYER_LINUX_XTRA_OFF        5
#define m_flNextAttack                83

#define ANIM_IDLESLASH            0
#define ANIM_SLASH                 1
#define ANIM_SLASHE                 2
#define ANIM_DRAW                 3
#define ANIM_IDLESTAB             4
#define ANIM_STAB                 5
#define ANIM_DRAWSTAB            6
#define ANIM_MOVESTAB             7
#define ANIM_MOVESLASH             8

new g_has_knife[33] , g_mode[33] , g_oldweap[33] , g_primaryattack[33]
new 
cvar_hammer_dmg cvar_hammer_dmg2 cvar_hammer_speed cvar_hammer_speed2 cvar_hammer_radius cvar_hammer_radius2 cvar_hammer_bloodsize 
new spr_blood1 spr_blood2
new Ham:Ham_Player_ResetMaxSpeed Ham_Item_PreFrame
new knife_vmodel[64] = "models/zm/hammer/v_blurred_hammer.mdl"
new knife_pmodel[64] = "models/zm/hammer/p_hammer.mdl"
new knife_sway[64] = "zm/hammer/"
new g_maxPlayer

new const oldknife_sounds[][] =
{
    
"weapons/knife_deploy1.wav",
    
"weapons/knife_hit1.wav",
    
"weapons/knife_hit2.wav",
    
"weapons/knife_hit3.wav",
    
"weapons/knife_hit4.wav",
    
"weapons/knife_hitwall1.wav",
    
"weapons/knife_slash1.wav",
    
"weapons/knife_slash2.wav",
    
"weapons/knife_stab.wav"
}

new 
knife_sounds[4][100]

public 
plugin_init( )
{
    
register_plugin("Knife Hammer","0.1","=)/Exolent[jNr]/CHyC")

    
RegisterHam(Ham_TakeDamage"player""fw_takedamage")

    
register_forward(FM_EmitSound"fw_emitsound")
    
register_forward(FM_CmdStart"fw_cmdstart")
    
register_forward(FM_TraceLine"fw_traceline")
    
register_forward(FM_UpdateClientData"fw_updateclientdata_post"1)
    
register_forward(FM_PlayerPreThink"fw_playerprethink")
    
register_event("CurWeapon","ev_curweapon","be","1=1"
    
register_logevent("logevent_round_end"2"1=Round_End")

    
RegisterHam(Ham_Weapon_PrimaryAttack"weapon_knife""fw_knifeprimpost"1)
    
RegisterHam(Ham_Weapon_WeaponIdle,"weapon_knife","fw_knifeidleanim")
    
RegisterHam(Ham_TraceAttack,"player","fw_knifetraceattack")
    
RegisterHam(Ham_Spawn,"player","fw_spawnpost")

    
cvar_hammer_dmg register_cvar("zp_hammer_dmg""100.0")
    
cvar_hammer_dmg2 register_cvar("zp_hammer_dmg2""100.0")
    
cvar_hammer_speed register_cvar("zp_hammer_speed""320.0")
    
cvar_hammer_speed2 register_cvar("zp_hammer_speed2""100.0")
    
cvar_hammer_radius register_cvar("zp_hammer_radius""80.0")
    
cvar_hammer_radius2 register_cvar("zp_hammer_radius2""100.0")
    
cvar_hammer_bloodsize register_cvar("zp_hammer_bloodsize""8")
    
    
register_clcmd("admin_get_hammer""Get_Hammer"ADMIN_BAN);
    
    
g_maxPlayer get_maxplayers()
}

public 
plugin_precache()
{
    
precache_model(knife_vmodel)
    
precache_model(knife_pmodel)

    
spr_blood1 precache_model("sprites/blood.spr")
    
spr_blood2 precache_model("sprites/bloodspray.spr")

    
formatex(knife_sounds[0],99,"%shammer_draw.wav",knife_sway)
    
formatex(knife_sounds[1],99,"%shammer_hit_slash.wav",knife_sway)
    
formatex(knife_sounds[2],99,"%shammer_hit_stab.wav",knife_sway)
    
formatex(knife_sounds[3],99,"%shammer_swing.wav",knife_sway)

    for(new 
04i++)
        
precache_sound(knife_sounds[i])
}

public 
Get_Hammer(id)
{
    
g_has_knife[id] = 1
    g_mode
[id] = 0
    g_primaryattack
[id] = 0
    remove_task
(id)

    if(
get_user_weapon(id) == CSW_KNIFE
    {
        
update_model(id)
        
util_playweaponanimation(idANIM_DRAW
        
set_pdata_float(idm_flNextAttack1.5 PLAYER_LINUX_XTRA_OFF)
        
emit_sound(idCHAN_WEAPONknife_sounds[0], VOL_NORMATTN_NORM0PITCH_NORM)
    }
}

public 
fw_spawnpost(id)
{
    if(!
is_user_alive(id))
        return;

    
g_oldweap[id] = get_user_weapon(id)
}

public 
fw_knifetraceattack(idattackerFloat:dmgFloat:direction[3], ptrdmgtype)
{
    if(!
is_user_alive(attacker) || !is_user_alive(id) || get_user_weapon(attacker) != CSW_KNIFE || !g_has_knife[attacker] || g_mode[attacker] == || g_mode[attacker] == || g_mode[attacker] == 4)
        return 
HAM_IGNORED;

    
client_print(0print_chat"yiuyiy");
    new 
Float:end[3
    
get_tr2(ptrTR_vecEndPosend); 
    
message_begin(MSG_BROADCAST,SVC_TEMPENTITY
    
write_byte(TE_BLOODSPRITE
    
engfunc(EngFunc_WriteCoordend[0]) 
    
engfunc(EngFunc_WriteCoordend[1]) 
    
engfunc(EngFunc_WriteCoordend[2]) 
    
write_short(spr_blood1
    
write_short(spr_blood2
    
write_byte(249// color index 
    
write_byte(get_pcvar_num(cvar_hammer_bloodsize)) // size 
    
message_end() 
    return 
HAM_SUPERCEDE;
}

public 
fw_emitsound(idchannel, const sound[])
{
    if(!
is_user_alive(id) || get_user_weapon(id) != CSW_KNIFE || !g_has_knife[id])
        return 
FMRES_IGNORED

    
for(new 0sizeof oldknife_soundsi++)
    {
        if(
equal(soundoldknife_sounds[i]))
        {
            if(
== 1|| == || == || == || == || == 8)
            {
                if(
g_mode[id] == 0emit_sound(idchannelknife_sounds[1], VOL_NORMATTN_NORM0PITCH_NORM)
                if(
g_mode[id] == 1emit_sound(idchannelknife_sounds[2], VOL_NORMATTN_NORM0PITCH_NORM)
            }
            if(
== 6|| == 7)
            {
                
emit_sound(idchannelknife_sounds[3], VOL_NORMATTN_NORM0PITCH_NORM)
            }

            return 
FMRES_SUPERCEDE
        
}
    }
            
    return 
FMRES_IGNORED
}

public 
fw_cmdstart(iduc_handleseed)
{
    if(!
is_user_alive(id) || !g_has_knife[id] || get_user_weapon(id) != CSW_KNIFE)
            return 
FMRES_IGNORED;

    new 
Float:flNextAttack get_pdata_float(idm_flNextAttackPLAYER_LINUX_XTRA_OFF)

    if(
g_primaryattack[id] && !g_mode[id])
    {
        if(
flNextAttack 0.1)
            return 
FMRES_IGNORED;

        
set_pdata_float(idm_flNextAttack0.1PLAYER_LINUX_XTRA_OFF)

        return 
FMRES_SUPERCEDE;
    }

    if((
get_uc(uc_handleUC_Buttons) & IN_ATTACK) && !g_mode[id])
    {
        if(
flNextAttack 0.1)
            return 
FMRES_IGNORED;

        
g_primaryattack[id] = 1
        util_playweaponanimation
(idANIM_SLASH)
        
remove_task(id)
        
set_task(1.0,"knife_attack",id)

        
set_pdata_float(idm_flNextAttack0.1PLAYER_LINUX_XTRA_OFF)
        return 
FMRES_IGNORED;
    }

    if(
g_primaryattack[id]) return FMRES_IGNORED;

    if(
get_uc(uc_handleUC_Buttons) & IN_ATTACK)
    {
        if(
g_mode[id] == || g_mode[id] == || g_mode[id] == 4)
        {
            if(
flNextAttack 0.1)
                return 
FMRES_IGNORED;

            
set_pdata_float(idm_flNextAttack0.1PLAYER_LINUX_XTRA_OFF)
        }

        return 
FMRES_IGNORED;
    }

    if(
flNextAttack 0.1)
        return 
FMRES_IGNORED;

    if((
get_uc(uc_handleUC_Buttons) & IN_ATTACK2))
    {
        if(
g_mode[id] == 0)
        {
            
remove_task(id)
            
g_mode[id] = 2
            util_playweaponanimation
(idANIM_MOVESTAB
            
set_task(1.4,"change_stab",id)
            
set_pdata_float(idm_flNextAttack1.5PLAYER_LINUX_XTRA_OFF)
        }else if(
g_mode[id] == 1){
            
remove_task(id)
            
g_mode[id] = 3
            util_playweaponanimation
(idANIM_MOVESLASH
            
set_task(0.4,"change_slash1",id)
            
set_pdata_float(idm_flNextAttack1.5PLAYER_LINUX_XTRA_OFF)
        }

        
set_pev(idpev_button pev(id,pev_button) & ~IN_ATTACK2)
        return 
FMRES_SUPERCEDE;
    }

    return 
FMRES_IGNORED;
}

public 
fw_knifeprimpost(Weapon)
{
    new 
id get_pdata_cbase(Weapon414)

    if(!
is_user_alive(id) || !g_has_knife[id] || get_user_weapon(id) != CSW_KNIFE)
        return 
HAM_IGNORED;

    if(
g_mode[id])
    {
        
util_playweaponanimation(idANIM_STAB)
        
set_pdata_float(idm_flNextAttack2.0PLAYER_LINUX_XTRA_OFF)
    }

    return 
HAM_IGNORED;
}

public 
fw_knifeidleanim(Weapon)
{
    new 
id get_pdata_cbase(Weapon414)

    if(!
is_user_alive(id) || !g_has_knife[id] || get_user_weapon(id) != CSW_KNIFE)
        return 
HAM_IGNORED;

    if(
g_mode[id] == || g_mode[id] == || g_mode[id] == || g_primaryattack[id]) 
        return 
HAM_SUPERCEDE;

    if(
g_mode[id] == 1
    {
        
util_playweaponanimation(idANIM_IDLESTAB)
        return 
HAM_SUPERCEDE;
    }

    return 
HAM_IGNORED;
}

public 
ev_curweapon(id)
{
    if(!
is_user_alive(id))
        return 
PLUGIN_CONTINUE

    
if(read_data(2) != CSW_KNIFE)
    {
        
remove_task(id)
        
g_primaryattack[id] = 0
        
if(g_mode[id] == 3g_mode[id] = 1
        
if(g_mode[id] == 4g_mode[id] = 1
        
if(g_mode[id] == 2g_mode[id] = 0
        g_oldweap
[id] = read_data(2)
        
        return 
PLUGIN_CONTINUE
    
}

    if(!
g_has_knife[id])
        return 
PLUGIN_CONTINUE

    update_model
(id)

    if(
g_oldweap[id] != CSW_KNIFE
    {
        if(!
g_mode[id]) 
        {
            
util_playweaponanimation(idANIM_DRAW
            
set_pdata_float(idm_flNextAttack1.5 PLAYER_LINUX_XTRA_OFF)
            
emit_sound(idCHAN_WEAPONknife_sounds[0], VOL_NORMATTN_NORM0PITCH_NORM)
        }else{
            
util_playweaponanimation(idANIM_DRAWSTAB
            
set_pdata_float(idm_flNextAttack1.5 PLAYER_LINUX_XTRA_OFF)
            
emit_sound(idCHAN_WEAPONknife_sounds[0], VOL_NORMATTN_NORM0PITCH_NORM)
        }
    }

    
g_oldweap[id] = read_data(2)

    return 
PLUGIN_CONTINUE    
}

public 
logevent_round_end() {
    for(new 
id 1id g_maxPlayerid++) {
        
clear_values(id)
    }
}
    
public 
change_stab(id)
{
    if(!
is_user_alive(id) || !g_has_knife[id] || get_user_weapon(id) != CSW_KNIFE)
        return 
PLUGIN_CONTINUE;

    
g_mode[id] = 1

    
return PLUGIN_CONTINUE;    
}

public 
change_slash1(id)
{
    if(!
is_user_alive(id) || !g_has_knife[id] || get_user_weapon(id) != CSW_KNIFE)
        return 
PLUGIN_CONTINUE;

    
g_mode[id] = 4
    set_task
(1.0,"change_slash2",id)

    return 
PLUGIN_CONTINUE;
}

public 
change_slash2(id)
{
    if(!
is_user_alive(id) || !g_has_knife[id] || get_user_weapon(id) != CSW_KNIFE)
        return 
PLUGIN_CONTINUE;

    
g_mode[id] = 0

    
return PLUGIN_CONTINUE;    
}

public 
fw_takedamage(victiminflictorattackerFloat:damage)
{
    
client_print(0print_chat"Test");
    
    if(!
is_user_alive(attacker) || !is_user_alive(victim) || !g_has_knife[attacker] || get_user_weapon(attacker) != CSW_KNIFE || victim == attacker)
        return 
HAM_IGNORED;

    if(
g_mode[attacker] == || g_mode[attacker] == 3) {
        return 
HAM_SUPERCEDE;
    }

    if(
g_mode[attacker] == 0){
        
client_print(0print_chat"Damage 0");
        
SetHamParamFloat(4damage get_pcvar_float(cvar_hammer_dmg))
    }

    if(
g_mode[attacker] == 1) {
        
client_print(0print_chat"Damage 1");
        
SetHamParamFloat(4damage get_pcvar_float(cvar_hammer_dmg2))
    }
    
/*
    new Float:vec[3], Float:oldvelo[3]
    get_user_velocity(victim, oldvelo)
    vec[0] += oldvelo[0]
    vec[1] += oldvelo[1]
    set_user_velocity(victim , vec)
    */
    
return HAM_IGNORED;
}
/*
public fw_takedamage_post(victim, inflictor, attacker, Float:damage)
{
    if(!is_user_alive(attacker) || !is_user_alive(victim) || !g_has_knife[attacker] || get_user_weapon(attacker) != CSW_KNIFE || victim == attacker)
        return;

    if(g_mode[attacker] == 0)
    {
        client_print(0, print_chat, "Damage 0");
        set_pdata_float(victim, OFFSET_PAINSHOCK, 1.0, OFFSET_LINUX)
    }
    if(g_mode[attacker] == 1)
    {
        client_print(0, print_chat, "Damage 1");
        set_pdata_float(victim, OFFSET_PAINSHOCK, 1.0, OFFSET_LINUX)
    }

    return;
}
*/
public fw_traceline(Float:vector_start[3], Float:vector_end[3], ignored_monsteridhandle)
{
    if (!
is_user_alive(id))
        return 
FMRES_IGNORED;
    
    if (!
g_has_knife[id] || g_mode[id] == 2|| g_mode[id] == || get_user_weapon(id) != CSW_KNIFE)
        return 
FMRES_IGNORED;
    
    
pev(idpev_v_anglevector_end)
    
angle_vector(vector_endANGLEVECTOR_FORWARDvector_end)
    
    if(
g_mode[id] == 0xs_vec_mul_scalar(vector_endget_pcvar_float(cvar_hammer_radius), vector_end)
    if(
g_mode[id] == 1xs_vec_mul_scalar(vector_endget_pcvar_float(cvar_hammer_radius2), vector_end)
    
    
xs_vec_add(vector_startvector_endvector_end)
    
engfunc(EngFunc_TraceLinevector_startvector_endignored_monsteridhandle)

    return 
FMRES_SUPERCEDE;
}

public 
update_model(id)
{
    if(!
is_user_alive(id) || !g_has_knife[id] || get_user_weapon(id) != CSW_KNIFE)
            return 
PLUGIN_CONTINUE;

    
entity_set_string(idEV_SZ_viewmodelknife_vmodel)
    
entity_set_string(idEV_SZ_weaponmodelknife_pmodel)

    return 
PLUGIN_CONTINUE;    
}

public 
clear_values(id)
{
    
g_has_knife[id] = 0
    g_mode
[id] = 0
    g_primaryattack
[id] = 0
    g_oldweap
[id] = -3
    remove_task
(id)
}

public 
knife_attack(id)
{
    if(!
is_user_alive(id) || !g_has_knife[id] || get_user_weapon(id) != CSW_KNIFE || g_mode[id])
        return;
    
    new 
knife find_ent_by_owner ( -1"weapon_knife"id )
    
    
ExecuteHam(Ham_Weapon_PrimaryAttackknife)

    
g_primaryattack[id] = 2
    remove_task
(id)
    
set_task(1.0,"knife_clear",id)
    
set_pdata_float(idm_flNextAttack1.0PLAYER_LINUX_XTRA_OFF)
    
util_playweaponanimation(idANIM_SLASHE)
}

public 
knife_clear(id)
{
    if(!
is_user_alive(id) || !g_has_knife[id] || get_user_weapon(id) != CSW_KNIFE || g_mode[id])
        return;

    
g_primaryattack[id] = 0
}

public 
fw_updateclientdata_post(PlayerSendWeaponsCD_Handle)
{
    if(!
is_user_alive(Player) || get_user_weapon(Player) != CSW_KNIFE || !g_has_knife[Player])
        return 
FMRES_IGNORED
    
    set_cd
(CD_HandleCD_flNextAttackhalflife_time() + 0.001 )

    if(
get_cd(CD_HandleCD_WeaponAnim) != ANIM_MOVESTAB && g_mode[Player] == 2
    {
        
set_cd(CD_HandleCD_WeaponAnimANIM_MOVESTAB); 
        return 
FMRES_SUPERCEDE
    }

    if(
get_cd(CD_HandleCD_WeaponAnim) != ANIM_MOVESLASH && g_mode[Player] == 3
    {
        
set_cd(CD_HandleCD_WeaponAnimANIM_MOVESLASH); 
        return 
FMRES_SUPERCEDE
    }

    return 
FMRES_HANDLED
}

public 
fw_playerprethink(id)
{
    if(!
is_user_alive(id) || !g_has_knife[id])
            return 
PLUGIN_CONTINUE
    
if(get_user_weapon(id) != CSW_KNIFE){
    
ExecuteHamB(Ham_Player_ResetMaxSpeedid)
    return 
PLUGIN_CONTINUE
    
}

    if(
pev(idpev_maxspeed) == 1.0)     
        return 
PLUGIN_CONTINUE

    
if(g_mode[id] == 0set_pev(idpev_maxspeedget_pcvar_float(cvar_hammer_speed))
    if(
g_mode[id] == 1set_pev(idpev_maxspeedget_pcvar_float(cvar_hammer_speed2))
    if(
g_mode[id] == 2set_pev(idpev_maxspeedget_pcvar_float(cvar_hammer_speed2))
    if(
g_mode[id] == 3set_pev(idpev_maxspeedget_pcvar_float(cvar_hammer_speed2))
    if(
g_mode[id] == 4set_pev(idpev_maxspeedget_pcvar_float(cvar_hammer_speed))

    return 
PLUGIN_CONTINUE
}

stock util_playweaponanimation(const Player, const Sequence)
{
    
set_pev(Playerpev_weaponanimSequence)
    
    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, .player Player)
    
write_byte(Sequence)
    
write_byte(pev(Playerpev_body))
    
message_end()
}
/*
stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
    if(!is_user_alive(attacker) || !g_has_knife[attacker] || get_user_weapon(attacker) != CSW_KNIFE || !is_user_alive(victim)) 
        return 0;

    new knockback = 0

    if(!zp_get_user_nemesis(victim))
    {
        if(!g_mode[attacker])
        {
            knockback = get_pcvar_num(cvar_hammer_knockback)
        }else{
            knockback = get_pcvar_num(cvar_hammer_knockback2)
        }
    }else{
        if(!g_mode[attacker])
        {
            knockback = get_pcvar_num(cvar_hammer_knockbackn)
        }else{
            knockback = get_pcvar_num(cvar_hammer_knockbackn2)
        }
    }    

    if(knockback == 0) 
        return 0 ;

    new Float:vicorigin[3];
    new Float:attorigin[3];
    entity_get_vector(victim   , EV_VEC_origin , vicorigin);
    entity_get_vector(attacker , EV_VEC_origin , attorigin);

    new Float:origin2[3]
    origin2[0] = vicorigin[0] - attorigin[0];
    origin2[1] = vicorigin[1] - attorigin[1];

    new Float:largestnum = 0.0;

    if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
    if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);

    origin2[0] /= largestnum;
    origin2[1] /= largestnum;

    velocity[0] = ( origin2[0] * (knockback * 3000) ) / get_entity_distance(victim , attacker);
    velocity[1] = ( origin2[1] * (knockback * 3000) ) / get_entity_distance(victim , attacker);
    if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
        velocity[2] = random_float(200.0 , 275.0);

    return 1;
}
*/
public client_disconnect(idclear_values(id)
public 
client_connect(idclear_values(id

Last edited by Elo_Cee; 02-09-2016 at 11:39.
Elo_Cee is offline
 


Thread Tools
Display Modes

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 09:26.


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