- #include <zombie_escape>
- #include <cstrike>
- #include <engine>
- #define PLUGIN "[ZP] Extra Drag"
- #define VERSION "1.1"
- #define AUTHOR "4eRT"
- //Some vars
- new const g_extra_drag[] = { "Drag ability" }
- new const g_vmodel[] = { "models/barnacle/v_bgrap.mdl" }
- new const g_pmodel[] = { "models/barnacle/p_bgrap.mdl" }
- 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_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", "40")
- cvar_dragspeed = register_cvar("zp_extra_drag_dragspeed", "160")
- cvar_maxdrags = register_cvar("zp_extra_drag_maxdrags", "10")
- cvar_cooldown = register_cvar("zp_extra_drag_cooldown", "5")
- cvar_dmgtostop = register_cvar("zp_extra_drag_dmg2stop", "300")
- cvar_mates = register_cvar("zp_extra_drag_mates", "0")
- cvar_extrahook = register_cvar("zp_extra_drag_extrahook", "2")
- cvar_unb2move = register_cvar("zp_extra_drag_unable_move", "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("Do you want to bind V +drag?"), keys, "bind_v_key")
- g_item_drag = ze_register_item(g_extra_drag, get_pcvar_num(cvar_cost), 0)
- }
- public plugin_precache()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- precache_sound(g_sndDrag)
- precache_sound(g_sndMiss)
- g_Line = precache_model("sprites/zbeam4.spr")
- engfunc(EngFunc_PrecacheModel, g_vmodel)
- engfunc(EngFunc_PrecacheModel, g_pmodel)
- }
- public message_cur_weapon(msg_id, msg_dest, msg_entity)
- replace_models(msg_entity);
- public replace_models(id)
- {
- if (!is_user_alive(id) || !ze_is_user_zombie(id))
- return;
- if(get_user_weapon(id) == CSW_KNIFE && g_has_drag[id])
- {
- set_pev(id, pev_viewmodel2, g_vmodel);
- set_pev(id, pev_weaponmodel2, g_pmodel);
- }
- }
- public ze_select_item_pre(id, item)
- {
- // Return Available and we will block it in Post, So it dosen't affect other plugins
- if (item != g_item_drag)
- return ZE_ITEM_AVAILABLE
- // Available for Humans only, So don't show it for zombies
- if (!ze_is_user_zombie(id))
- return ZE_ITEM_DONT_SHOW
- return ZE_ITEM_AVAILABLE
- }
- public ze_select_item_post(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 drag ability. Now You can frag huamns!")
- replace_models(id)
- if (!g_bind_or_not[id])
- {
- new menu[192]
- format(menu, 191, "Do you want to bind V +drag?^n^n1. Yes^n2. No^n3. Drag on +USE")
- show_menu(id, keys, menu)
- }
- } else
- return
- }
- }
- public ze_user_infected(id, infector)
- if(g_has_drag[infector])
- g_hooksLeft[infector] = g_hooksLeft[infector] + get_pcvar_num(cvar_extrahook)
- public ze_user_humanized(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_disconnected(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 (ze_is_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)) {
- client_print(id, print_chat, "[ZE] You can't drag if you are dead!")
- return PLUGIN_HANDLED
- }
- if (g_hooksLeft[id] <= 0) {
- client_print(id, print_chat, "[ZE] You can't drag anymore!")
- return PLUGIN_HANDLED
- }
- if (get_gametime() - g_lastHook[id] < cdown) {
- client_print(id, print_chat, "[ZE] Wait %.f0 sec. to drag again!", get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id]))
- return PLUGIN_HANDLED
- }
- new hooktarget, body
- get_user_aiming(id, hooktarget, body)
- if (is_user_alive(hooktarget)) {
- if (!ze_is_user_zombie(hooktarget))
- {
- 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, "[ZE] 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 (ze_is_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, "[ZE] 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()
- }
- /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
- *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
- */
Coversion done( not working in server)
Coversion done( not working in server)
i converted the code fully but It doesn't drag humans Pls fix it
LOL
The ZP plugin works for ZP? If yes so maybe you made something wrong while converting so post the original zp item and i'll convert it.
He who fails to plan is planning to fail
that's the original code..i don't think i did something wrong with the plugin it worked in all aspects except the fact that i cant drag a human. Ofc i cant drag teammates (zombies) but for humans idk why it didn't work/
Last edited by Rain1153 5 years ago, edited 1 time in total.
LOL
and bro you should at least test it just to be sure if it works or not ..thanks ..here is the original link (zp_extra_drag_ability is the plugin) https://forums.alliedmods.net/showthrea ... 09?t=90309
LOL
I think you post the converted one, Also i don't test right now as i'm lazy to open local server and install the item. SORRY
TRY:
TRY:
Code: Select all
#include <zombie_escape> #include <engine> #define PLUGIN "[ZE] Extra Drag" #define VERSION "1.1" #define AUTHOR "4eRT" //Some vars new const g_extra_drag[] = { "Drag ability" } new const g_vmodel[] = { "models/barnacle/v_bgrap.mdl" } new const g_pmodel[] = { "models/barnacle/p_bgrap.mdl" } 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("ze_extra_drag", "1") cvar_cost = register_cvar("ze_extra_drag_cost", "10") cvar_dragspeed = register_cvar("ze_extra_drag_dragspeed", "160") cvar_maxdrags = register_cvar("ze_extra_drag_maxdrags", "10") cvar_cooldown = register_cvar("ze_extra_drag_cooldown", "5") cvar_dmgtostop = register_cvar("ze_extra_drag_dmg2stop", "300") cvar_mates = register_cvar("ze_extra_drag_mates", "0") cvar_extrahook = register_cvar("ze_extra_drag_extrahook", "2") cvar_unb2move = register_cvar("ze_extra_drag_unable_move", "1") cvar_nemesis = register_cvar("ze_extra_drag_nemesis", "0") cvar_survivor = register_cvar("ze_extra_drag_survivor", "1") cvar_reset = register_cvar("ze_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("Do you want to bind V +drag?"), keys, "bind_v_key") g_item_drag = ze_register_item(g_extra_drag, get_pcvar_num(cvar_cost), 0) } public plugin_precache() { register_plugin(PLUGIN, VERSION, AUTHOR) precache_sound(g_sndDrag) precache_sound(g_sndMiss) g_Line = precache_model("sprites/zbeam4.spr") engfunc(EngFunc_PrecacheModel, g_vmodel) engfunc(EngFunc_PrecacheModel, g_pmodel) } public message_cur_weapon(msg_id, msg_dest, msg_entity) replace_models(msg_entity); public replace_models(id) { if (!is_user_alive(id) || !ze_is_user_zombie(id)) return; if(get_user_weapon(id) == CSW_KNIFE && g_has_drag[id]) { set_pev(id, pev_viewmodel2, g_vmodel); set_pev(id, pev_weaponmodel2, g_pmodel); } } public ze_select_item_pre(id, itemid) { // Return Available and we will block it in Post, So it dosen't affect other plugins if (itemid != g_item_drag) return ZE_ITEM_AVAILABLE // Available for Zombies only, So don't show it for Humans if (!ze_is_user_zombie(id)) return ZE_ITEM_DONT_SHOW return ZE_ITEM_AVAILABLE } public ze_select_item_post(id, itemid) { // This is not our item, Block it here if (itemid != g_item_drag) return g_hooksLeft[id] = get_pcvar_num(cvar_maxdrags) g_has_drag[id] = true client_print(id, print_chat, "You've bought drag ability. Now have fun with barnacle hand!") replace_models(id) if (!g_bind_or_not[id]) { new menu[192] format(menu, 191, "Do you want to bind V +drag?^n^n1. Yes^n2. No^n3. Drag on +USE") show_menu(id, keys, menu) } } public ze_user_infected(id, infector) if(g_has_drag[infector]) g_hooksLeft[infector] = g_hooksLeft[infector] + get_pcvar_num(cvar_extrahook) public ze_user_humanized(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 (ze_is_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)) { client_print(id, print_chat, "[ZE] You can't drag if you are dead!") return PLUGIN_HANDLED } if (g_hooksLeft[id] <= 0) { client_print(id, print_chat, "[ZE] You can't drag anymore!") return PLUGIN_HANDLED } if (get_gametime() - g_lastHook[id] < cdown) { client_print(id, print_chat, "[ZE] Wait %.f0 sec. to drag again!", get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id])) return PLUGIN_HANDLED } if (get_pcvar_num(cvar_nemesis) == 0) { client_print(id, print_chat, "[ZE] 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 (!ze_is_user_zombie(hooktarget)) { if ( get_pcvar_num(cvar_survivor) == 0 ) { client_print(id, print_chat, "[ZE] 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, "[ZE] 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, "[ZE] 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 (ze_is_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, "[ZE] 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() }
He who fails to plan is planning to fail
not working there is nemesis round and suvivor round in ze wth --
LOL
please exclude all the unnecessary codes bro like nemesis round and survivor
LOL
Here it's:
Code: Select all
#include <zombie_escape> #include <engine> #define PLUGIN "[ZE] Extra Drag" #define VERSION "1.1" #define AUTHOR "4eRT" //Some vars new const g_extra_drag[] = { "Drag ability" } new const g_vmodel[] = { "models/barnacle/v_bgrap.mdl" } new const g_pmodel[] = { "models/barnacle/p_bgrap.mdl" } 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_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("ze_extra_drag", "1") cvar_cost = register_cvar("ze_extra_drag_cost", "10") cvar_dragspeed = register_cvar("ze_extra_drag_dragspeed", "160") cvar_maxdrags = register_cvar("ze_extra_drag_maxdrags", "10") cvar_cooldown = register_cvar("ze_extra_drag_cooldown", "5") cvar_dmgtostop = register_cvar("ze_extra_drag_dmg2stop", "300") cvar_mates = register_cvar("ze_extra_drag_mates", "0") cvar_extrahook = register_cvar("ze_extra_drag_extrahook", "2") cvar_unb2move = register_cvar("ze_extra_drag_unable_move", "1") cvar_reset = register_cvar("ze_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("Do you want to bind V +drag?"), keys, "bind_v_key") g_item_drag = ze_register_item(g_extra_drag, get_pcvar_num(cvar_cost), 0) } public plugin_precache() { register_plugin(PLUGIN, VERSION, AUTHOR) precache_sound(g_sndDrag) precache_sound(g_sndMiss) g_Line = precache_model("sprites/zbeam4.spr") engfunc(EngFunc_PrecacheModel, g_vmodel) engfunc(EngFunc_PrecacheModel, g_pmodel) } public message_cur_weapon(msg_id, msg_dest, msg_entity) replace_models(msg_entity); public replace_models(id) { if (!is_user_alive(id) || !ze_is_user_zombie(id)) return; if(get_user_weapon(id) == CSW_KNIFE && g_has_drag[id]) { set_pev(id, pev_viewmodel2, g_vmodel); set_pev(id, pev_weaponmodel2, g_pmodel); } } public ze_select_item_pre(id, itemid) { // Return Available and we will block it in Post, So it dosen't affect other plugins if (itemid != g_item_drag) return ZE_ITEM_AVAILABLE // Available for Zombies only, So don't show it for Humans if (!ze_is_user_zombie(id)) return ZE_ITEM_DONT_SHOW return ZE_ITEM_AVAILABLE } public ze_select_item_post(id, itemid) { // This is not our item, Block it here if (itemid != g_item_drag) return g_hooksLeft[id] = get_pcvar_num(cvar_maxdrags) g_has_drag[id] = true client_print(id, print_chat, "You've bought drag ability. Now have fun with barnacle hand!") replace_models(id) if (!g_bind_or_not[id]) { new menu[192] format(menu, 191, "Do you want to bind V +drag?^n^n1. Yes^n2. No^n3. Drag on +USE") show_menu(id, keys, menu) } } public ze_user_infected(id, infector) if(g_has_drag[infector]) g_hooksLeft[infector] = g_hooksLeft[infector] + get_pcvar_num(cvar_extrahook) public ze_user_humanized(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 (ze_is_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)) { client_print(id, print_chat, "[ZE] You can't drag if you are dead!") return PLUGIN_HANDLED } if (g_hooksLeft[id] <= 0) { client_print(id, print_chat, "[ZE] You can't drag anymore!") return PLUGIN_HANDLED } if (get_gametime() - g_lastHook[id] < cdown) { client_print(id, print_chat, "[ZE] Wait %.f0 sec. to drag again!", get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id])) return PLUGIN_HANDLED } new hooktarget, body get_user_aiming(id, hooktarget, body) if (is_user_alive(hooktarget)) { if (!ze_is_user_zombie(hooktarget)) { 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, "[ZE] 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, "[ZE] 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 (ze_is_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, "[ZE] 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() }
He who fails to plan is planning to fail
Create an account or sign in to join the discussion
You need to be a member in order to post a reply
Create an account
Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute
Sign in
Who is online
Users browsing this forum: No registered users and 6 guests