|
New Member
|

11-12-2014
, 17:57
[ZP] Double ability
|
#1
|
Hello, I need help with this code, is an Smoker Zombie but I want to add Ghost's Ability.
My code:
PHP Code:
#include <amxmodx> #include <zombieplague> #include <fakemeta> #include <hamsandwich> #include <engine> #include <zmvip> #include <fun>
#define PLUGIN "[ZP] Class Smoker" #define VERSION "1.3" #define AUTHOR "4eRT"
//Main Class, modelT & Sprite Beam new g_zclass_smoker, g_Line
//Habilidad 1 - Ghost new i_stealth_time_hud[33] new g_cooldown[33] new g_infections[33] new Float:g_stealth_time[33] new i_cooldown_time[33] new g_maxplayers
// --- config ------------------------ Ghost// new Float:g_stealth_time_standart = 5.0 //first stealth time new Float:g_stealth_cooldown_standart = 45.0 //cooldown time new const sound_ghost_stealth[] = "zombie_plague/spells/zombie_ghost/stealth.wav" //stealth sound new const sound_ghost_stealth_end[] = "zombie_plague/spells/zombie_ghost/end_stealth.wav" //end stealth sound // ----------------------------------- //
//Sounds new g_sndMiss[] = "AGZombieP/ssjgohan_kamehame.wav" new g_sndDrag[] = "AGZombieP/ssjgohan_ha.wav" //Some vars new g_hooked[33], g_hooksLeft[33], g_unable2move[33], g_ovr_dmg[33] new Float:g_lastHook[33] new bool: g_bind_use[33] = false, bool: g_bind_or_not[33] = false, bool: g_drag_i[33] = false //Cvars new cvar_maxdrags, cvar_dragspeed, cvar_cooldown, cvar_dmg2stop, cvar_mates, cvar_unb2move, cvar_nemesis, cvar_survivor //Menu keys
//Smoker Atributes new const zclass_name[] = { "Doble habilidad" } new const zclass_info[] = { "Zombie con 2 habilidades" } new const zclass_model[] = { "zombie_source" } new const zclass_clawmodel[] = { "v_knife_zombie.mdl" } const zclass_health = 1400 const zclass_speed = 190 const Float:zclass_gravity = 1.0 const Float:zclass_knockback = 1.0
public plugin_init() { register_cvar("zp_zclass_ghost_zombie",VERSION,FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY) cvar_dragspeed = register_cvar("zp_smoker_dragspeed", "560") cvar_maxdrags = register_cvar("zp_smoker_maxdrags", "20") cvar_cooldown = register_cvar("zp_smoker_cooldown", "5") cvar_dmg2stop = register_cvar("zp_smoker_dmg2stop", "300") cvar_mates = register_cvar("zp_smoker_mates", "0") cvar_unb2move = register_cvar("zp_smoker_unable_move", "1") cvar_nemesis = register_cvar("zp_smoker_nemesis", "0") cvar_survivor = register_cvar("zp_smoker_survivor", "1") register_clcmd("habilidad1", "use_ability_one") register_concmd("habilidad1", "use_ability_one") register_logevent("roundStart", 2, "1=Round_Start") register_event("ResetHUD", "newSpawn", "b") register_event("DeathMsg", "smoker_death", "a") register_forward(FM_PlayerPreThink, "fw_PlayerPreThink") RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage1") RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage2") register_clcmd("+habilidad2","drag_start", ADMIN_LEVEL_C, "bind ^"key^" ^"+drag^"") register_clcmd("-gokuzombielith","drag_end") g_maxplayers = get_maxplayers() } public plugin_precache() { register_plugin(PLUGIN, VERSION, AUTHOR) g_zclass_smoker = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback) precache_sound(g_sndDrag) precache_sound(g_sndMiss) precache_sound(sound_ghost_stealth) precache_sound(sound_ghost_stealth_end) g_Line = precache_model("sprites/AGZombieP/gohan_trail_blue.spr")
}
public roundStart() { for (new i = 1; i <= g_maxplayers; i++) { i_cooldown_time[i] = floatround(g_stealth_cooldown_standart) g_cooldown[i] = 0 remove_task(i) } }
public use_ability_one(id) { if(is_valid_ent(id) && is_user_alive(id) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && zp_get_user_zombie_class(id) == g_zclass_smoker) { if(g_cooldown[id] == 0) { set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0) emit_sound(id, CHAN_STREAM, sound_ghost_stealth, 1.0, ATTN_NORM, 0, PITCH_NORM) set_task(g_stealth_time[id],"ghost_make_visible",id) set_task(g_stealth_cooldown_standart,"reset_cooldown",id) g_cooldown[id] = 1 i_cooldown_time[id] = floatround(g_stealth_cooldown_standart) i_stealth_time_hud[id] = floatround(g_stealth_time[id]) set_task(1.0, "ShowHUD", id, _, _, "a",i_cooldown_time[id]) set_task(1.0, "ShowHUDstealthes", id, _, _, "a",i_stealth_time_hud[id]) } } }
public ShowHUD(id) { if(is_valid_ent(id) && is_user_alive(id)) { i_cooldown_time[id] = i_cooldown_time[id] - 1; set_hudmessage(200, 100, 0, 0.75, 0.92, 0, 1.0, 1.1, 0.0, 0.0, -1) show_hudmessage(id, "Invisibilidad: %d",i_cooldown_time[id]) }else{ remove_task(id) } }
public ShowHUDstealthes(id) { if(is_valid_ent(id) && is_user_alive(id)) { i_stealth_time_hud[id] = i_stealth_time_hud[id] - 1; set_hudmessage(200, 100, 0, -1.0, 0.92, 0, 1.0, 1.1, 0.0, 0.0, -1) show_hudmessage(id, "Tiempo de invisibilidad: %d",i_stealth_time_hud[id]) }else{ remove_task(id) } }
public ghost_make_visible(id) { if(is_valid_ent(id) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && zp_get_user_zombie_class(id) == g_zclass_smoker) { set_user_rendering(id, kRenderFxHologram, 0, 0, 0, kRenderTransAlpha, 125) emit_sound(id, CHAN_STREAM, sound_ghost_stealth_end, 1.0, ATTN_NORM, 0, PITCH_NORM) } }
public reset_cooldown(id) { if(is_valid_ent(id) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && zp_get_user_zombie_class(id) == g_zclass_smoker) { g_cooldown[id] = 0 new text[100] format(text,99,"^x04[ZP]^x01 Your ability ^x04Stealth^x01 is ready.") message_begin(MSG_ONE,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() } }
public zp_user_infected_pre(id, infector) { if ((zp_get_user_zombie_class(id) == g_zclass_smoker) && !zp_get_user_nemesis(id) && !(get_user_flags(id) & ADMIN_LEVEL_C)) { zp_set_user_zombie_class(id, 0) client_print(id, print_chat, "Esta clase zombie es solo para Lithium bitch!") { g_hooksLeft[infector] = g_hooksLeft[infector] } { set_user_rendering(id, kRenderFxHologram, 0, 0, 0, kRenderTransAlpha, 125) new text[100] new note_cooldown = floatround(g_stealth_cooldown_standart) new note_stealthtime = floatround(g_stealth_time_standart) format(text,99,"^x04[ZP]^x01 Your ability is ^x04Stealth^x01. Cooldown:^x04 %d ^x01seconds. Stealth time: ^x04%d^x01 seconds.",note_cooldown,note_stealthtime) message_begin(MSG_ONE,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() i_cooldown_time[id] = floatround(g_stealth_cooldown_standart) remove_task(id) g_stealth_time[id] = g_stealth_time_standart g_cooldown[id] = 0 g_infections[id] = 0 } } if((zp_get_user_zombie_class(infector) == g_zclass_smoker) && !zp_get_user_nemesis(infector)) { g_hooksLeft[id] = get_pcvar_num(cvar_maxdrags) g_stealth_time[infector] = g_stealth_time[infector] + 1; infections_hud(infector) } }
public infections_hud(id) { if(is_valid_ent(id) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && zp_get_user_zombie_class(id) == g_zclass_smoker) { new i_stealth_time = floatround(g_stealth_time[id]) new text[100] format(text,99,"^x04[ZP]^x01 Your stealth time is^x04 %d ^x01seconds.",i_stealth_time) message_begin(MSG_ONE,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() } }
public zp_user_humanized_post(id) { set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 255) remove_task(id) }
public zp_user_unfrozen(id) { if(is_valid_ent(id) && is_user_alive(id) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && zp_get_user_zombie_class(id) == g_zclass_smoker) { set_user_rendering(id, kRenderFxHologram, 0, 0, 0, kRenderTransAlpha, 125) } }
public newSpawn(id) { if (g_hooked[id]) drag_end(id) }
public drag_start(id) // starts drag, checks if player is Smoker, checks cvars { if (zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_zclass_smoker) && !g_drag_i[id]) { static Float:cdown cdown = get_pcvar_float(cvar_cooldown)
if (!is_user_alive(id)) { client_print(id, print_chat, "[ZP] You can't drag if you are dead!") 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 } new hooktarget, body get_user_aiming(id, hooktarget, body) if (zp_get_user_nemesis(id) && get_pcvar_num(cvar_nemesis) == 0) { client_print(id, print_chat, "[ZP] You can't drag if you are Nemesis!") return PLUGIN_HANDLED } 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, "smoker_reelin", 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 smoker_reelin(parm[]) // dragging player to smoker { 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) //<- rewritten. now uses engine }
public drag_end(id) // drags end function { 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 smoker_death() // if smoker dies drag off { new id = read_data(2) beam_remove(id) if (g_hooked[id]) drag_end(id) }
public fw_TakeDamage1(victim, inflictor, attacker, Float:damage) // if take damage drag off { if (is_user_alive(attacker) && (get_pcvar_num(cvar_dmg2stop) > 0)) { g_ovr_dmg[victim] = g_ovr_dmg[victim] + floatround(damage) if (g_ovr_dmg[victim] >= get_pcvar_num(cvar_dmg2stop)) { g_ovr_dmg[victim] = 0 drag_end(victim) return HAM_IGNORED; } }
return HAM_IGNORED; }
public fw_TakeDamage2(victim, inflictor, attacker, Float:damage, damage_type) { if (!(damage_type & DMG_FALL) || !zp_get_user_zombie(victim) || zp_get_user_zombie_class(victim) != g_zclass_smoker) return HAM_IGNORED SetHamParamFloat(4, 0.0) return HAM_HANDLED }
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 (g_bind_use[id] && zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_zclass_smoker)) { set_pev(id, pev_flTimeStepSound, 999) 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 client_disconnect(id) // if client disconnects drag off { if (id <= 0 || id > 32) return if (g_hooked[id]) drag_end(id) if(g_unable2move[id]) g_unable2move[id] = false }
public harpoon_target(parm[]) // set beam (ex. tongue:) if target is player { new id = parm[0] new hooktarget = parm[1]
message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(8) // TE_BEAMENTS write_short(id) write_short(hooktarget) write_short(g_Line) // sprite index write_byte(0) // start frame write_byte(0) // framerate write_byte(200) // life write_byte(8) // width write_byte(1) // noise write_byte(155) // r, g, b write_byte(155) // r, g, b write_byte(55) // r, g, b write_byte(90) // brightness write_byte(10) // speed 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) // set beam if target isn't player { new endorigin[3]
get_user_origin(id, endorigin, 3)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte( TE_BEAMENTPOINT ); // TE_BEAMENTPOINT write_short(id) write_coord(endorigin[0]) write_coord(endorigin[1]) write_coord(endorigin[2]) write_short(g_Line) // sprite index write_byte(0) // start frame write_byte(0) // framerate write_byte(200) // life write_byte(8) // width write_byte(1) // noise write_byte(155) // r, g, b write_byte(155) // r, g, b write_byte(55) // r, g, b write_byte(75) // brightness write_byte(0) // speed message_end() }
public beam_remove(id) // remove beam { message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(99) //TE_KILLBEAM write_short(id) //entity message_end() }
It compiles, but the abilities don't work.
Last edited by neutrobox; 11-12-2014 at 18:01.
|
|