Senior Member
Join Date: Feb 2019
Location: Hungary
|
03-28-2021
, 12:46
Hook ZP Help
|
#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_Line, g_item_drag new cvar_enabled, cvar_cost, cvar_maxdrags, cvar_dragspeed, cvar_cooldown, cvar_dmgtostop, cvar_mates, cvar_extrahook, cvar_unb2move, cvar_nemesis, cvar_survivor, cvar_reset new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3 new bool: g_has_drag[33], bool: g_bind_use[33], bool: g_bind_or_not[33], bool: g_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_drag, get_pcvar_num(cvar_cost), ZP_TEAM_ZOMBIE) }
public plugin_precache() { register_plugin(PLUGIN, VERSION, AUTHOR) precache_sound(g_sndDrag) precache_sound(g_sndMiss) g_Line = precache_model("sprites/zbeam4.spr") }
public message_cur_weapon(msg_id, msg_dest, msg_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(id, item) { 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(id, print_chat, "You've bought Hook!") if (!g_bind_or_not[id]) { new menu[192] format(menu, 191, "Bind V +drag?^n^n1. Yes^n2. No^n3. Drag on +USE") show_menu(id, keys, menu) } } else return } }
public zp_user_infected_post(id, infector) 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 = 1; id <= 32; id++) { 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(id, print_chat, "[ZP] You can't drag anymore!") return PLUGIN_HANDLED }
if (get_gametime() - g_lastHook[id] < cdown) { client_print(id, print_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(id, print_chat, "[ZP] You can't drag in Nemesis mode!") return PLUGIN_HANDLED }
new hooktarget, body get_user_aiming(id, hooktarget, body) 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(id, print_chat, "[ZP] You can't drag Survivor!") return PLUGIN_HANDLED } g_hooked[id] = hooktarget emit_sound(hooktarget, CHAN_BODY, g_sndDrag, 1.0, ATTN_NORM, 0, PITCH_HIGH) } else { if (get_pcvar_num(cvar_mates) == 1) { g_hooked[id] = hooktarget emit_sound(hooktarget, CHAN_BODY, g_sndDrag, 1.0, ATTN_NORM, 0, PITCH_HIGH) } else { client_print(id, print_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", id, parm, 2, "b") harpoon_target(parm) g_hooksLeft[id]-- client_print(id, print_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(hooktarget, CHAN_BODY, g_sndMiss, 1.0, ATTN_NORM, 0, PITCH_HIGH) g_drag_i[id] = true g_hooksLeft[id]-- client_print(id, print_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(victim, vicOrigin) get_user_origin(id, idOrigin)
new distance = get_distance(idOrigin, vicOrigin)
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(victim, EV_VEC_velocity, fl_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(victim, inflictor, attacker, Float: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(id, pev_maxspeed, 1.0) return PLUGIN_CONTINUE }
public harpoon_target(parm[]) { new id = parm[0] new hooktarget = parm[1]
message_begin(MSG_BROADCAST, SVC_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(id, keys) { g_bind_or_not[id] = true switch(keys) { case 0: client_cmd(id, "bind v ^"+drag^"") case 1: client_print(id, print_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(id, endorigin, 3)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte( TE_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_BROADCAST, SVC_TEMPENTITY) write_byte(99) write_short(id) message_end() }
Last edited by HowToRuski; 03-28-2021 at 12:47.
|
|