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

Hook ZP Help


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
HowToRuski
Senior Member
Join Date: Feb 2019
Location: Hungary
Old 03-28-2021 , 12:46   Hook ZP Help
Reply With Quote #1

Hello, im having troubles making this hook plugin to only have hook on +USE and without that menu to choose binds, i mean to remove it.
Anyone can help me out?

And i noticed a bug that the zombie doesnt stop when using option 2 on zp_extra_drag_unable_move, is it fixable?

PHP Code:
/*
*    -----------------------------------
*    -----[ZP] Extra Item: Drag---------
*    -----------------------------------
*    ------Author: 4eRT (aka pff)-------
*    -----------------------------------
*        About:
*    Extra Item for Zombies: drag ability. It works like Smoker drag.
*    -----------------------------------
*        Discription:
*    It's similar Smoker zombie ability. With this extra you can drag players by holding "V" or +USE
*    Drag speed, max drags, cooldown, drag teammates, unable to move may be customized by Cvars.
*    -----------------------------------
*        Credits:
*    yang - great thanks for his Scorpion superhero plugin where I borrow harpoon&drag code.
*    xPaw - really thx for help optimization Smoker plugin. For Entity_Set_Vector.
*    -----------------------------------
*        Cvars:
*    zp_extra_drag_drags 10 // how many times you can drag player? def=10
*    zp_extra_drag_dragspeed 160 // speed of dragging player. def=160
*    zp_extra_drag_cooldown 5 // time in sec before you can use drag again. def=5
*    zp_extra_drag_mates 0 // can you drag teammates to? 1=yes 0=no def=0
*    zp_extra_drag_dmg2stop 300 // damage to stop dragging. set 0 to disable it. def=300
*    zp_extra_drag_extrahook 2 // additional hooks after infects smb. def=2
*    zp_extra_drag_unable_move 1 // 0=human & you can move / 1=unable human to move when dragging / 2=unable you to move / 3=unable both
*    zp_extra_drag_nemesis 0 // 0=can't drag players if is Nemesis round/ 1=can. def=0
*    zp_extra_drag_survivor 1 // 0=can't drag Survivor / 1=can. def=1
*    zp_extra_drag_reset 0 // 0=delete drag ability on humanizing / 1=not
*    -----------------------------------
*        Modules:
*    hamsandwich
*    fakemeta
*    engine
*    -----------------------------------
*        History:
*    0.1b (14.01.10)
*        First release.
*    1.0 (15.01.10)
*        Barnacle hand model added. Code optimized.
*    1.1 (24.01.10)
*        Fixed model bug.
*    -----------------------------------
*/

#include <amxmodx>
#include <zombieplague>
#include <fakemeta>
#include <hamsandwich>
#include <engine>

#define PLUGIN "[ZP] Extra Drag"
#define VERSION "1.1"
#define AUTHOR "4eRT"

//Some vars
new const g_extra_drag[] = { "Hook" 
new 
g_sndMiss[] = "zombie_plague/Smoker_TongueHit_miss.wav"
new g_sndDrag[] = "zombie_plague/Smoker_TongueHit_drag.wav"
new g_hooked[33], g_hooksLeft[33], g_unable2move[33], g_over_dmg[33]
new 
Float:g_lastHook[33]
new 
g_Lineg_item_drag
new cvar_enabledcvar_costcvar_maxdragscvar_dragspeedcvar_cooldowncvar_dmgtostopcvar_matescvar_extrahookcvar_unb2movecvar_nemesiscvar_survivorcvar_reset
new keys MENU_KEY_1|MENU_KEY_2|MENU_KEY_3
new boolg_has_drag[33], boolg_bind_use[33], boolg_bind_or_not[33], boolg_drag_i[33]

public 
plugin_init()
{
    
cvar_enabled register_cvar("zp_extra_drag""1")
    
cvar_cost register_cvar("zp_extra_drag_cost""5")
    
cvar_dragspeed register_cvar("zp_extra_drag_dragspeed""160")
    
cvar_maxdrags register_cvar("zp_extra_drag_maxdrags""2")
    
cvar_cooldown register_cvar("zp_extra_drag_cooldown""5")
    
cvar_dmgtostop register_cvar("zp_extra_drag_dmg2stop""30")
    
cvar_mates register_cvar("zp_extra_drag_mates""0")
    
cvar_extrahook register_cvar("zp_extra_drag_extrahook""0")
    
cvar_unb2move register_cvar("zp_extra_drag_unable_move""2")
    
cvar_nemesis register_cvar("zp_extra_drag_nemesis""0")
    
cvar_survivor register_cvar("zp_extra_drag_survivor""1")
    
cvar_reset register_cvar("zp_extra_drag_reset""0")
    
register_event("HLTV""newSpawn""a""1=0""2=0")
    
register_event("DeathMsg""player_death""a")
    
register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
    
register_forward(FM_PlayerPreThink"fw_PlayerPreThink")
    
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage")
    
register_clcmd("+drag","drag_start"ADMIN_USER"bind ^"key^" ^"+drag^"")
    
register_clcmd("-drag","drag_end")
    
register_menucmd(register_menuid("Bind V +drag?"), keys"bind_v_key")
    
g_item_drag zp_register_extra_item(g_extra_dragget_pcvar_num(cvar_cost), ZP_TEAM_ZOMBIE)
}

public 
plugin_precache()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
precache_sound(g_sndDrag)
    
precache_sound(g_sndMiss)
    
g_Line precache_model("sprites/zbeam4.spr")
}

public 
message_cur_weapon(msg_idmsg_destmsg_entity)
    
replace_models(msg_entity);

public 
replace_models(id)
{
    if (!
is_user_alive(id) || !zp_get_user_zombie(id))
        return;
}

public 
zp_extra_item_selected(iditem)
{
    if (
item == g_item_drag)
    {
        if(
is_user_alive(id) && get_pcvar_num(cvar_enabled) == 1)
        {
            
g_hooksLeft[id] = get_pcvar_num(cvar_maxdrags)
            
g_has_drag[id] = true
            client_print
(idprint_chat"You've bought Hook!")
            
            if (!
g_bind_or_not[id])
            {
                new 
menu[192]
                
format(menu191"Bind V +drag?^n^n1. Yes^n2. No^n3. Drag on +USE")
                
show_menu(idkeysmenu)
            }
        } else
            return
    }
}

public 
zp_user_infected_post(idinfector)
    if(
g_has_drag[infector])
        
g_hooksLeft[infector] = g_hooksLeft[infector] + get_pcvar_num(cvar_extrahook)

public 
zp_user_humanized_post(id)
    if(
get_pcvar_num(cvar_reset) == 1)
        
g_has_drag[id] = false

public newSpawn()
{
    for (new 
id 1id <= 32id++)
    {
        if (
g_hooked[id])
            
drag_end(id)
    
        
g_has_drag[id] = false
    
}
}

public 
player_death()
{
    new 
attacker read_data(1)
    new 
id read_data(2)
    
    if (
g_hooked[attacker])
        
drag_end(id)
    
    
g_has_drag[id] = false
}

public 
client_connect(id)
    
g_has_drag[id] = false

public client_disconnect(id)
{
    if (
g_hooked[id])
        
drag_end(id)
    
    if(
g_unable2move[id])
        
g_unable2move[id] = false
    
    g_has_drag
[id] = false
}

public 
drag_start(id)
{        
    if (
zp_get_user_zombie(id) && g_has_drag[id] && !g_drag_i[id]) {
        
        static 
Float:cdown
        cdown 
get_pcvar_float(cvar_cooldown)

        if (!
is_user_alive(id)) {
            return 
PLUGIN_HANDLED
        
}

        if (
g_hooksLeft[id] <= 0) {
            
client_print(idprint_chat"[ZP] You can't drag anymore!")
            return 
PLUGIN_HANDLED
        
}

        if (
get_gametime() - g_lastHook[id] < cdown) {
            
client_print(idprint_chat"[ZP] Wait %.f0 sec. to drag again!"get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id]))
            return 
PLUGIN_HANDLED
        
}
        
        if (
zp_is_nemesis_round() && get_pcvar_num(cvar_nemesis) == 0) {
            
client_print(idprint_chat"[ZP] You can't drag in Nemesis mode!")
            return 
PLUGIN_HANDLED
        
}

        new 
hooktargetbody
        get_user_aiming
(idhooktargetbody)
        
        if (
is_user_alive(hooktarget)) {
            if (!
zp_get_user_zombie(hooktarget))
                {
                    if (
zp_get_user_survivor(hooktarget) && get_pcvar_num(cvar_survivor) == 0) {
                        
client_print(idprint_chat"[ZP] You can't drag Survivor!")
                        return 
PLUGIN_HANDLED
                    
}
                    
                    
g_hooked[id] = hooktarget
                    emit_sound
(hooktargetCHAN_BODYg_sndDrag1.0ATTN_NORM0PITCH_HIGH)
                }
            else
                {
                    if (
get_pcvar_num(cvar_mates) == 1)
                    {
                        
g_hooked[id] = hooktarget
                        emit_sound
(hooktargetCHAN_BODYg_sndDrag1.0ATTN_NORM0PITCH_HIGH)
                    }
                    else
                    {
                        
client_print(idprint_chat"[ZP] You can't drag teammates!")
                        return 
PLUGIN_HANDLED
                    
}
                }

            if (
get_pcvar_float(cvar_dragspeed) <= 0.0)
                
cvar_dragspeed 1
            
            
new parm[2]
            
parm[0] = id
            parm
[1] = hooktarget
            
            set_task
(0.1"reelin_player"idparm2"b")
            
harpoon_target(parm)
            
            
g_hooksLeft[id]--
            
client_print(idprint_chat"[ZP] You can drag player to youself %d time%s"g_hooksLeft[id], (g_hooksLeft[id] < 2) ? "" "s")
            
g_drag_i[id] = true
            
            
if(get_pcvar_num(cvar_unb2move) == 1)
                
g_unable2move[hooktarget] = true
                
            
if(get_pcvar_num(cvar_unb2move) == 2)
                
g_unable2move[id] = true
                
            
if(get_pcvar_num(cvar_unb2move) == 3)
            {
                
g_unable2move[hooktarget] = true
                g_unable2move
[id] = true
            
}
        } else {
            
g_hooked[id] = 33
            noTarget
(id)
            
emit_sound(hooktargetCHAN_BODYg_sndMiss1.0ATTN_NORM0PITCH_HIGH)
            
g_drag_i[id] = true
            g_hooksLeft
[id]--
            
client_print(idprint_chat"[ZP] You can drag player to youself %d time%s"g_hooksLeft[id], (g_hooksLeft[id] < 2) ? "" "s")
        }
    }
    else
        return 
PLUGIN_HANDLED
    
    
return PLUGIN_CONTINUE
}

public 
reelin_player(parm[])
{
    new 
id parm[0]
    new 
victim parm[1]

    if (!
g_hooked[id] || !is_user_alive(victim))
    {
        
drag_end(id)
        return
    }

    new 
Float:fl_Velocity[3]
    new 
idOrigin[3], vicOrigin[3]

    
get_user_origin(victimvicOrigin)
    
get_user_origin(ididOrigin)

    new 
distance get_distance(idOriginvicOrigin)

    if (
distance 1) {
        new 
Float:fl_Time distance get_pcvar_float(cvar_dragspeed)

        
fl_Velocity[0] = (idOrigin[0] - vicOrigin[0]) / fl_Time
        fl_Velocity
[1] = (idOrigin[1] - vicOrigin[1]) / fl_Time
        fl_Velocity
[2] = (idOrigin[2] - vicOrigin[2]) / fl_Time
    
} else {
        
fl_Velocity[0] = 0.0
        fl_Velocity
[1] = 0.0
        fl_Velocity
[2] = 0.0
    
}

    
entity_set_vector(victimEV_VEC_velocityfl_Velocity)
}

public 
drag_end(id)
{
    
g_hooked[id] = 0
    beam_remove
(id)
    
remove_task(id)
    
    if (
g_drag_i[id])
        
g_lastHook[id] = get_gametime()
    
    
g_drag_i[id] = false
    g_unable2move
[id] = false
}

public 
fw_TakeDamage(victiminflictorattackerFloat:damage)
{
    if (
is_user_alive(attacker) && (get_pcvar_num(cvar_dmgtostop) > 0))
    {
        
g_over_dmg[victim] = g_over_dmg[victim] + floatround(damage)
        if (
g_over_dmg[victim] >= get_pcvar_num(cvar_dmgtostop))
        {
            
g_over_dmg[victim] = 0
            drag_end
(victim)
            return 
HAM_IGNORED;
        }
    }

    return 
HAM_IGNORED;
}

public 
fw_PlayerPreThink(id)
{
    if (!
is_user_alive(id))
        return 
FMRES_IGNORED
    
    
new button get_user_button(id)
    new 
oldbutton get_user_oldbutton(id)
    
    if (
zp_get_user_zombie(id) && g_has_drag[id])
    {
        if(
g_bind_use[id])
        {
            if (!(
oldbutton IN_USE) && (button IN_USE))
                
drag_start(id)
        
            if ((
oldbutton IN_USE) && !(button IN_USE))
                
drag_end(id)
        }
    }
    
    if (!
g_drag_i[id])
        
g_unable2move[id] = false
        
    
if (g_unable2move[id] && get_pcvar_num(cvar_unb2move) > 0)
        
set_pev(idpev_maxspeed1.0)
    
    return 
PLUGIN_CONTINUE
}

public 
harpoon_target(parm[])
{
    new 
id parm[0]
    new 
hooktarget parm[1]

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(8)
    
write_short(id)
    
write_short(hooktarget)
    
write_short(g_Line)
    
write_byte(0)
    
write_byte(0)
    
write_byte(200)
    
write_byte(8)
    
write_byte(1)
    
write_byte(255)
    
write_byte(0)
    
write_byte(0)
    
write_byte(90)
    
write_byte(10)
    
message_end()
}

public 
bind_v_key(idkeys)
{
    
g_bind_or_not[id] = true
    
switch(keys)
    {
        case 
0:
            
client_cmd(id"bind v ^"+drag^"")
    
        case 
1:
            
client_print(idprint_chat"[ZP] To drag player to youself (bind ^'^'key^'^' ^'^'+drag^'^') hold binded key")
            
        case 
2:
            
g_bind_use[id] = true
            
        
default:
            
g_bind_or_not[id] = false
    
}
    
    return 
PLUGIN_HANDLED
}

public 
noTarget(id)
{
    new 
endorigin[3]

    
get_user_origin(idendorigin3)

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byteTE_BEAMENTPOINT );
    
write_short(id)
    
write_coord(endorigin[0])
    
write_coord(endorigin[1])
    
write_coord(endorigin[2])
    
write_short(g_Line)
    
write_byte(0)
    
write_byte(0)
    
write_byte(200)
    
write_byte(8)
    
write_byte(1)
    
write_byte(255)
    
write_byte(0)
    
write_byte(0)
    
write_byte(75)
    
write_byte(0)
    
message_end()
}

public 
beam_remove(id)
{
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(99)
    
write_short(id)
    
message_end()


Last edited by HowToRuski; 03-28-2021 at 12:47.
HowToRuski is offline
HowToRuski
Senior Member
Join Date: Feb 2019
Location: Hungary
Old 03-29-2021 , 10:20   Re: Hook ZP Help
Reply With Quote #2

Anyone?
HowToRuski 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 06:16.


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