AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   [HELP] Exolent's Hammer plugin (https://forums.alliedmods.net/showthread.php?t=278845)

Elo_Cee 02-09-2016 11:33

[HELP] Exolent's Hammer plugin
 
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



All times are GMT -4. The time now is 09:26.

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