BANNED
|
10-19-2009
, 12:36
Swarm classes
|
#1
|
How i need to do that swarm had classes?
Like these, but this has made for plague how to change for Swarm?
PHP Code:
#include <amxmodx> #include <hamsandwich> #include <fakemeta> #include <zombieplague> #include <fun> new const sprite_grenade_glass[] = { "models/glassgibs.mdl" } new const grenade_frost_break[][] = { "warcraft3/impalelaunch1.wav" } new const grenade_frost_player[][] = { "warcraft3/impalehit.wav" } const BREAK_GLASS = 0x01 const UNIT_SECOND = (1<<12) const FFADE_IN = 0x0000 new dano_multiplicado[33] new witch_dmg new const zclass14_name[] = { "Zombie Witch" } new const zclass14_info[] = { "(Paralyze & 2x More Damage)" } new const zclass14_model[] = { "zm_witch" } new const zclass14_clawmodel[] = { "v_knife_witch.mdl" } const zclass14_health = 1600 const zclass14_speed = 230 const Float:zclass14_gravity = 0.9 const Float:zclass14_knockback = 0.9 new g_zclass14 new cvar_freezeduration, g_glassSpr, g_msgScreenFade, cvar_humangravity new g_frozen[33] new g_zombie[33] new Array:g_zclass_grav new g_zombieclass[33] new cvar_nemgravity new cvar_survgravity public plugin_init() { register_forward(FM_PlayerPreThink, "fw_PlayerPreThink") register_event("HLTV", "event_new_round", "a", "1=0", "2=0") register_event("DeathMsg", "event_DeathMsg", "a"); RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage") witch_dmg = register_cvar("zp_witch_damage", "2.0") cvar_freezeduration = get_cvar_pointer("zp_frost_duration") cvar_humangravity = get_cvar_pointer("zp_human_gravity") cvar_nemgravity = get_cvar_pointer("zp_nem_gravity") cvar_survgravity = get_cvar_pointer("zp_surv_gravity") g_msgScreenFade = get_user_msgid("ScreenFade") } public plugin_precache() { register_plugin("[ZP] Zombie Class: Witch", "1.2", "Bummps")
new i
for (i = 0; i < sizeof grenade_frost_break; i++) engfunc(EngFunc_PrecacheSound, grenade_frost_break[i])
for (i = 0; i < sizeof grenade_frost_player; i++) engfunc(EngFunc_PrecacheSound, grenade_frost_player[i])
g_glassSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_glass) g_zclass14 = zp_register_zombie_class(zclass14_name, zclass14_info, zclass14_model, zclass14_clawmodel, zclass14_health, zclass14_speed, zclass14_gravity, zclass14_knockback) } public client_connect(id) { dano_multiplicado[id] = false remove_freeze(id) } public event_new_round(id) { dano_multiplicado[id] = false remove_freeze(id) } public client_disconnect(id) { dano_multiplicado[id] = false remove_freeze(id) } public event_DeathMsg(id) { dano_multiplicado[id] = false remove_freeze(id) } public zp_user_humanized_post(id) { dano_multiplicado[id] = false remove_freeze(id) } public zp_user_humanized_pre(id) { dano_multiplicado[id] = false remove_freeze(id) } public fw_PlayerPreThink(id) { if (!is_user_alive(id)) return; if (g_frozen[id]) { set_pev(id, pev_velocity, Float:{0.0,0.0,0.0}) set_pev(id, pev_maxspeed, 1.0) } } public zp_user_infected_post(id, infector) { if (zp_get_user_zombie_class(id) == g_zclass14) { dano_multiplicado[id] = true } } public fw_TakeDamage(victim, inflictor, attacker, Float:damage) { if ( is_user_alive( attacker ) && get_user_weapon(attacker) == CSW_KNIFE && dano_multiplicado[attacker] && zp_get_user_zombie_class(attacker) == g_zclass14 && g_zombie[attacker] ) { SetHamParamFloat(4, damage * get_pcvar_float( witch_dmg ) ) frost_victim(victim) } } public frost_victim(victim) { if (!is_user_alive(victim) || g_frozen[victim]) return; #if defined HANDLE_MODELS_ON_SEPARATE_ENT fm_set_rendering(g_ent_playermodel[victim], kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25) #else fm_set_rendering(victim, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25) #endif engfunc(EngFunc_EmitSound, victim, CHAN_BODY, grenade_frost_player[random_num(0, sizeof grenade_frost_player - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM) static Float:freezeduration freezeduration = get_pcvar_float(cvar_freezeduration) message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, victim) write_short(UNIT_SECOND*1) write_short(floatround(UNIT_SECOND*freezeduration)) write_short(FFADE_IN) write_byte(0) write_byte(50) write_byte(200) write_byte(100) message_end() if (pev(victim, pev_flags) & FL_ONGROUND) set_pev(victim, pev_gravity, 999999.9) else set_pev(victim, pev_gravity, 0.000001) g_frozen[victim] = true; set_task(freezeduration, "remove_freeze", victim) } public remove_freeze(id) { if (!g_frozen[id] || !is_user_alive(id)) return; g_frozen[id] = false; if (zp_get_user_nemesis(id)) { set_pev(id, pev_gravity, get_pcvar_float(cvar_nemgravity)) } if (zp_get_user_survivor(id)) { set_pev(id, pev_gravity, get_pcvar_float(cvar_survgravity)) } if (g_zombie[id]) { set_pev(id, pev_gravity, Float:ArrayGetCell(g_zclass_grav, g_zombieclass[id])) } else { set_pev(id, pev_gravity, get_pcvar_float(cvar_humangravity)) } engfunc(EngFunc_EmitSound, id, CHAN_BODY, grenade_frost_break[random_num(0, sizeof grenade_frost_break - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM) #if defined HANDLE_MODELS_ON_SEPARATE_ENT fm_set_rendering(g_ent_playermodel[id]) #else fm_set_rendering(id) #endif static Float:origin2F[3] pev(id, pev_origin, origin2F) engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin2F, 0) write_byte(TE_BREAKMODEL) engfunc(EngFunc_WriteCoord, origin2F[0]) engfunc(EngFunc_WriteCoord, origin2F[1]) engfunc(EngFunc_WriteCoord, origin2F[2]+24.0) write_coord(16) write_coord(16) write_coord(16) write_coord(random_num(-50, 50)) write_coord(random_num(-50, 50)) write_coord(25) write_byte(10) write_short(g_glassSpr) write_byte(10) write_byte(25) write_byte(BREAK_GLASS) message_end() } stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) { static Float:color[3] color[0] = float(r) color[1] = float(g) color[2] = float(b)
set_pev(entity, pev_renderfx, fx) set_pev(entity, pev_rendercolor, color) set_pev(entity, pev_rendermode, render) set_pev(entity, pev_renderamt, float(amount)) } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1046\\ f0\\ fs16 \n\\ par } */
PHP Code:
#include <amxmodx> #include <zombieplague> #include <fakemeta> #include <engine> #include <fun> #define PLUGINNAME "[ZP] Class Boomer" #define VERSION "1.2.2" #define AUTHOR "tii" new g_zclass_boomer, g_maxplayers, spr_smoke_steam1,cvar_max_damage,cvar_damage_radius,mdl_gib_legbone, mdl_gib_flesh,mdl_gib_meat,mdl_gib_head,spr_blood_drop,spr_blood_spray new bool:lamuerteexplosiva[33] = false new g_sndExplode[] = "weapons/c4_explode1.wav" new spr_zerogxplode new gmsgDeathMsg,gmsgScoreInfo,mdl_gib_lung,mdl_gib_spine new const zclass_name[] = { "Boomer" } new const zclass_info[] = { "Explode after die" } new const zclass_model[] = { "zboomer" } new const zclass_clawmodel[] = { "v_knife_zombie.mdl" } const zclass_health = 2020 const zclass_speed = 200 const Float:zclass_gravity = 1.0 const Float:zclass_knockback = 0.2 public plugin_init(){ register_plugin(PLUGINNAME, VERSION, AUTHOR) register_event("DeathMsg", "boomer_death", "a") cvar_max_damage = register_cvar("zp_bomer_maxdmg","200") cvar_damage_radius = register_cvar("zp_bomer_raius","350") g_maxplayers = get_maxplayers() gmsgDeathMsg = get_user_msgid("DeathMsg") gmsgScoreInfo = get_user_msgid("ScoreInfo") } public plugin_precache() { g_zclass_boomer = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback) mdl_gib_lung = precache_model("models/GIB_Lung.mdl") mdl_gib_meat = precache_model("models/GIB_B_Gib.mdl") mdl_gib_head = precache_model("models/GIB_Skull.mdl") mdl_gib_flesh = precache_model("models/Fleshgibs.mdl") mdl_gib_spine = precache_model("models/GIB_B_Bone.mdl") mdl_gib_legbone = precache_model("models/GIB_Legbone.mdl") precache_sound("weapons/mortarhit.wav") spr_blood_drop = precache_model("sprites/blood.spr") spr_blood_spray = precache_model("sprites/bloodspray.spr") spr_zerogxplode = precache_model("sprites/zerogxplode.spr") spr_smoke_steam1 = precache_model("sprites/steam1.spr") precache_sound(g_sndExplode) spr_zerogxplode = precache_model("sprites/zerogxplode.spr") precache_model("models/w_egon.mdl") } public zp_user_infected_post(player, infector) { if (zp_get_user_zombie_class(player) == g_zclass_boomer) { lamuerteexplosiva[player] = true client_print(player, print_chat, "[ZP] Explode after die!") } } public zp_user_humanized_post(player) { lamuerteexplosiva[player] = false } public boomer_death() { new attacker = read_data(1) new victim = read_data(2) if(lamuerteexplosiva[victim]) { static victim_name[33] static attacker_name[33] get_user_name(victim, victim_name, sizeof victim_name -1) get_user_name(attacker, attacker_name, sizeof attacker_name -1) new Float:origin[3], origin2[3] entity_get_vector(victim,EV_VEC_origin,origin) origin2[0] = floatround(origin[0]) origin2[1] = floatround(origin[1]) origin2[2] = floatround(origin[2]) for (new id2; id2 <= g_maxplayers; id2++) { if (zp_get_user_zombie_class(id2) == g_zclass_boomer && zp_get_user_zombie(id2) && !zp_get_user_nemesis(id2)) { emit_sound(victim, CHAN_WEAPON, "weapons/mortarhit.wav", 1.0, 0.5, 0, PITCH_NORM) emit_sound(victim, CHAN_VOICE, "weapons/mortarhit.wav", 1.0, 0.5, 0, PITCH_NORM)
for (new e = 1; e < 8; e++) { // Random Explosion 8 Times message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_SPRITE) write_coord(origin2[0] + random_num(-60,60)) write_coord(origin2[1] + random_num(-60,60)) write_coord(origin2[2] +128) write_short(spr_zerogxplode) write_byte(random_num(30,65)) write_byte(255) message_end()
} for (new e = 1; e < 3; e++) { // Random Smoke 3 Times message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_SMOKE) write_coord(origin2[0]) write_coord(origin2[1]) write_coord(origin2[2] + 256) write_short(spr_smoke_steam1) write_byte(random_num(80,150)) write_byte(random_num(5,10)) message_end() }
// Create the burn decal message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_GUNSHOTDECAL) write_coord(origin2[0]) write_coord(origin2[1]) write_coord(origin2[2]) write_short(0) write_byte(random_num(46,48)) // decal message_end() new Max_Damage = get_pcvar_num(cvar_max_damage) new Damage_Radius = get_pcvar_num(cvar_damage_radius) new PlayerPos[3], Distance, Damage for (new i = 1; i < 32; i++) { if (is_user_alive(i) == 1) { get_user_origin(i, PlayerPos) Distance = get_distance(PlayerPos, origin2) if (Distance <= Damage_Radius) { // Screenshake Radius
message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, i) // Shake Screen write_short(1<<14) write_short(1<<14) write_short(1<<14) message_end() Damage = Max_Damage - floatround(floatmul(float(Max_Damage), floatdiv(float(Distance), float(Damage_Radius)))) //if(!zp_get_user_zombie(id2) && !zp_get_user_nemesis(id2)) do_victim(i,victim,Damage,0) }
}
} } } lamuerteexplosiva[victim] = false } } public do_victim (victim,attacker,Damage,team_kill) { new namek[32],namev[32],authida[35],authidv[35],teama[32],teamv[32] get_user_name(victim,namev,31) get_user_name(attacker,namek,31) get_user_authid(victim,authidv,34) get_user_authid(attacker,authida,34) get_user_team(victim,teamv,31) get_user_team(attacker,teama,31) if(Damage >= get_user_health(victim)) { if(get_cvar_num("mp_logdetail") == 3) {
log_message("^"%s<%d><%s><%s>^" attacked ^"%s<%d><%s><%s>^" with ^"bomber^" (hit ^"chest^") (Damage ^"%d^") (health ^"0^")", namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),authidv,teamv,Damage)
} client_print(attacker,print_chat,"[AMXX] You killed %s with that bomber",namev) client_print(victim,print_chat,"[AMXX] You were killed by %s's bomber",namek) if(team_kill == 0) {
set_user_frags(attacker,get_user_frags(attacker) + 1 )
}
set_msg_block(gmsgDeathMsg,BLOCK_ONCE) set_msg_block(gmsgScoreInfo,BLOCK_ONCE) user_kill(victim,1) replace_dm(attacker,victim,0) log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"bomber^"", namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),authidv,teamv) if (Damage > 100) {
new iOrigin[3] get_user_origin(victim,iOrigin) set_user_rendering(victim,kRenderFxNone,0,0,0,kRenderTransAlpha,0) fx_gib_explode(iOrigin,3) fx_blood_large(iOrigin,5) fx_blood_small(iOrigin,15) iOrigin[2] = iOrigin[2] - 20 set_user_origin(victim,iOrigin) }
} else { set_user_health(victim,get_user_health(victim) - Damage ) if(get_cvar_num("mp_logdetail") == 3) {
log_message("^"%s<%d><%s><%s>^" attacked ^"%s<%d><%s><%s>^" with ^"bomber^" (hit ^"chest^") (Damage ^"%d^") (health ^"%d^")", namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),authidv,teamv,Damage,get_user_health(victim))
} client_print(attacker,print_chat,"[AMXX] You hurt %s with that bomber",namev) client_print(victim,print_chat,"[AMXX] You were hurt by %s's bomber",namek) }
} public client_disconnect(id) { lamuerteexplosiva[id] = false } public client_putinserver(id) { lamuerteexplosiva[id] = false } public replace_dm (id,tid,tbody) { //Update killers scorboard with new info message_begin(MSG_ALL,gmsgScoreInfo) write_byte(id) write_short(get_user_frags(id)) write_short(get_user_deaths(id)) write_short(0) write_short(get_user_team(id)) message_end() //Update victims scoreboard with correct info message_begin(MSG_ALL,gmsgScoreInfo) write_byte(tid) write_short(get_user_frags(tid)) write_short(get_user_deaths(tid)) write_short(0) write_short(get_user_team(tid)) message_end() //Headshot Kill if (tbody == 1) { message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(id) write_byte(tid) write_string(" missile") message_end()
} //Normal Kill else {
message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(id) write_byte(tid) write_byte(0) write_string("missile") message_end()
} return PLUGIN_CONTINUE
} static fx_blood_small (origin[3],num) {
// Small splash for (new j = 0; j < num; j++) {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_WORLDDECAL) write_coord(origin[0]+random_num(-100,100)) write_coord(origin[1]+random_num(-100,100)) write_coord(origin[2]-36)
write_byte(random_num(190,197)) // Blood decals message_end()
}
} static fx_blood_large (origin[3],num) {
// Large splash for (new i = 0; i < num; i++) {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_WORLDDECAL) write_coord(origin[0] + random_num(-50,50)) write_coord(origin[1] + random_num(-50,50)) write_coord(origin[2]-36) write_byte(random_num(204,205)) // Blood decals
message_end()
}
} static fx_gib_explode (origin[3],num) {
new flesh[3], x, y, z flesh[0] = mdl_gib_flesh flesh[1] = mdl_gib_meat flesh[2] = mdl_gib_legbone
// Gib explosion // Head message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_MODEL) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]) write_coord(random_num(-100,100)) write_coord(random_num(-100,100)) write_coord(random_num(100,200)) write_angle(random_num(0,360)) write_short(mdl_gib_head) write_byte(0) write_byte(500) message_end()
// Spine message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_MODEL) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]) write_coord(random_num(-100,100)) write_coord(random_num(-100,100)) write_coord(random_num(100,200)) write_angle(random_num(0,360)) write_short(mdl_gib_spine) write_byte(0) write_byte(500) message_end()
// Lung for(new i = 0; i < random_num(1,2); i++) {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_MODEL) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]) write_coord(random_num(-100,100)) write_coord(random_num(-100,100)) write_coord(random_num(100,200)) write_angle(random_num(0,360)) write_short(mdl_gib_lung) write_byte(0) write_byte(500) message_end()
}
// Parts, 5 times for(new i = 0; i < 5; i++) {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_MODEL) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]) write_coord(random_num(-100,100)) write_coord(random_num(-100,100)) write_coord(random_num(100,200)) write_angle(random_num(0,360)) write_short(flesh[random_num(0,2)]) write_byte(0) write_byte(500) message_end()
}
// Blood for(new i = 0; i < num; i++) {
x = random_num(-100,100) y = random_num(-100,100) z = random_num(0,100)
for(new j = 0; j < 5; j++) {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_BLOODSPRITE) write_coord(origin[0]+(x*j)) write_coord(origin[1]+(y*j)) write_coord(origin[2]+(z*j)) write_short(spr_blood_spray) write_short(spr_blood_drop) write_byte(248) write_byte(15) message_end()
}
}
}
PHP Code:
/* * ----------------------------------- * -----[ZP] Zombie Class: Smoker----- * ----------------------------------- * ------Author: 4eRT (aka pff)------- * ----------------------------------- * About: * When Left4Dead came out i immediately thought about Zombie Class Smoker plugin. * More later(few days ago) I was playing on Superhero Server when i found Scorpion hero. * So it was the way to create this plugin. * ----------------------------------- * Discription: * Smoker is another zombie class for zombie plague like Smoker in L4D. * He can drags humans by holding "V" like /\...yeah, like Smoker. If Smoker receives * 300 damage by human drag ends. If he falls or hurts more 25 dmg drag ends to. * Drag speed, max drags, cooldown, autobind, drag teammates & damage to stop * may be customized by Cvars. * ----------------------------------- * Credits: * yang - great thanks for his Scorpion superhero plugin where I borrow harpoon&drag code. * 5c0r-|3i0 - for his converted Smoker sounds. * Anggara_nothing - for rewritting Entvars_Set_Vector from Vexd_Utilities to engine. but not very useful :/ * xPaw - really thx for help optimization plugin. For Entity_Set_Vector. * frk_14 - for his Smoker model. (hope you finish it ^^) * ----------------------------------- * Cvars: * zp_smoker_maxdrags 10 // how many times Smoker can drag player to himself? def=10 * zp_smoker_dragspeed 160 // speed of dragging player to Smoker def=160 * zp_smoker_cooldown 5 // time in sec before you can use drag again. def=5 * zp_smoker_mates 0 // can Smoker drag teammates to? 1=yes 0=no def=0 * zp_smoker_bind 1 // autobind key V to +drag. 0=no autobind 1=autobind (v) def=1 * zp_smoker_dmg2stop 75 // damage to stop dragging def=75 * ----------------------------------- * History(beta): * 0.0 (14.04.09) * Most of code converted from sh_scorpion. Added 3 cvars. * 0.1 (15.04.09) * Added cooldown, autobind, damage to stop and its cvars. * 0.1 (16.04.09) * Beta testing. First view works perfectly...<- It was wrong belief...>_< * 0.2 (17.04.09) * Entvars_Set_Vector now uses engine, not Vexd_Utilities.inc * 0.3 (19.04.09) * Fixed cooldown. Now it works more stably. Reduced minimum drag distance. * 0.3.1 (21.04.09) * Cooldown works more, more stably. After re-infecting Smoker can use drag * X times(cvar_maxdrags) if drags left when he was zombie last time. * Hope i've fixed dragging teammates. Please test it and say: does it work? * Added Smoker model(+modelT.mdl precacher). * ----------------------------------- * PS: * It's my second useful plugin for amxx so... */ #include <amxmodx> #include <zombieplague> #include <fakemeta> #include <hamsandwich> #include <engine> #define PLUGIN "[ZP] Class Smoker" #define VERSION "0.3.1" #define AUTHOR "4eRT" //Main Class, modelT & Sprite Beam new g_zclass_smoker, g_Line new const generic_models[][] = { "models/player/zombie_smoker/zombie_smokerT.mdl" } //Sounds new g_sndMiss[] = "zombie_plague/Smoker_TongueHit_miss.wav" new g_sndDrag[] = "zombie_plague/Smoker_TongueHit_drag.wav" //Some vars new g_hooked[33], g_hooksLeft[33] new Float:g_lastHook[33] //Cvars new cvar_maxdrags, cvar_dragspeed, cvar_cooldown, cvar_dmg2stop, cvar_mates, cvar_bind //Smoker Atributes new const zclass_name[] = { "Smoker" } new const zclass_info[] = { "Can drag players" } new const zclass_model[] = { "zombie_smoker" } 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() { cvar_dragspeed = register_cvar("zp_smoker_dragspeed", "160") cvar_maxdrags = register_cvar("zp_smoker_maxdrags", "10") cvar_cooldown = register_cvar("zp_smoker_cooldown", "5") cvar_dmg2stop = register_cvar("zp_smoker_dmg2stop", "75") cvar_mates = register_cvar("zp_smoker_mates", "0") cvar_bind = register_cvar("zp_smoker_bind", "1") register_event("ResetHUD", "newSpawn", "b") register_event("DeathMsg", "smoker_death", "a") RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage") register_clcmd("+drag","drag_start", ADMIN_USER, "bind ^"key^" ^"+drag^"") register_clcmd("-drag","drag_end") } 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) g_Line = precache_model("sprites/zbeam4.spr")
for (new i = 0; i < sizeof generic_models; i++) precache_model(generic_models[i]) } public zp_user_infected_post(id, infector) { if (zp_get_user_zombie_class(id) == g_zclass_smoker) { g_hooksLeft[id] = get_pcvar_num(cvar_maxdrags) new mode = get_pcvar_num(cvar_bind)
if (mode == 1) { client_cmd(id, "bind v ^"+drag^"") client_print(id, print_chat, "[ZP] To drag player to youself hold ^'^'V^'^'") } if (mode == 0) { client_print(id, print_chat, "[ZP] To drag player to youself (bind ^'^'key^'^' ^'^'+drag^'^') hold binded key") } } } public newSpawn(id) { g_lastHook[id] = get_gametime()
beam_remove(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) {
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 } if (g_hooksLeft[id] <= 0) { client_print(id, print_chat, "[ZP] You can't drag anymore!") return }
if (get_gametime() - g_lastHook[id] < cdown) { client_print(id, print_chat, "[ZP] Wait %.fsec. to drag again!", get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id])) return } if (g_hooksLeft[id] > 0) { 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") } new hooktarget, body get_user_aiming(id, hooktarget, body)
if (is_user_alive(hooktarget)) { if (get_user_team(hooktarget) != get_user_team(id)) { g_hooked[id] = hooktarget emit_sound(hooktarget, CHAN_BODY, g_sndDrag, 1.0, ATTN_NORM, 0, PITCH_HIGH) } else { if (get_user_team(hooktarget) == get_user_team(id)) { if (get_pcvar_num(cvar_mates) == 0) { client_print(id, print_chat, "[ZP] You can't drag teammates!") return } 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 { g_hooked[id] = 33 noTarget(id) emit_sound(hooktarget, CHAN_BODY, g_sndMiss, 1.0, ATTN_NORM, 0, PITCH_HIGH) return } } new parm[2] parm[0] = id parm[1] = hooktarget
set_task(0.1, "smoker_reelin", id, parm, 2, "b") harpoon_target(parm) } else { g_hooked[id] = 33 noTarget(id) emit_sound(hooktarget, CHAN_BODY, g_sndMiss, 1.0, ATTN_NORM, 0, PITCH_HIGH) } } else { return } } public smoker_reelin(parm[]) // dragging player to smoker { new id = parm[0] new victim = parm[1] if (!g_hooked[id]) return if (!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 (get_gametime() - g_lastHook[id] <= get_pcvar_float(cvar_cooldown) + 0.08) { return } else { g_lastHook[id] = get_gametime() } } 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_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) // if take damage drag off { if (victim == attacker || !is_user_connected(attacker)) { if (damage > 25) { drag_end(victim) return HAM_IGNORED; } }
if (get_user_team(attacker) != get_user_team(victim)) { if (damage > get_pcvar_num(cvar_dmg2stop)) { drag_end(victim) return HAM_IGNORED; } }
return HAM_IGNORED; } public client_disconnect(id) // if client disconnects drag off { if (id <= 0 || id > 32) return
if (g_hooked[id]) drag_end(id) } 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 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() } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par } */
</SPAN></SPAN></SPAN>
|
|