Descriere (adica ce face el mai exact): O abilitata extrasa din Wa3rft , creeaza o spirala pe inamic.
Serverul impune conditii strict HLDS/REHLDS?: REHLDS
Ai cautat pluginul?(daca da, precizeaza cum):
Necesita mod special?: Da, zombie plague
Doresc modificarea acestui plugin, in asa fel incat abilitatea sa se puna pe mai multe persoane
- | Afiseaza codul
#include <amxmodx> #include <fakemeta> #include <fun> #include <cstrike> #include <hamsandwich> #include <zombieplague> #include <engine> #include <ColorChat> #include <fakemeta_util> new SPR_TRAIL, SPR_BEAM #define ENTANGLE_TIME 3.0 #define TASK_RESETSPEED 512 #define TASK_SEARCHING 1738 #define TASK_ENTANGLEWAIT 928 #define SOUND_ENTANGLING "zombie_plague/humans/entanglingrootstarget1.wav" new IsStunned[33], Float:LastSpeed[33], entangle_can[33], Float:g_cenCooldown[33], gCvarEnCoolDown new g_maxplayers public plugin_init() { register_plugin("[ZP] Human Power", "1.0", "Daniel") gCvarEnCoolDown = register_cvar("zp_entangle_cooldown", "35") register_clcmd("radio3", "ulteng") register_event("HLTV", "NewRound", "a", "1=0", "2=0") g_maxplayers = get_maxplayers() register_forward(FM_PlayerPreThink, "FW_playerprethink") } public plugin_precache() { SPR_TRAIL = precache_model("sprites/smoke.spr"); SPR_BEAM = precache_model("sprites/ef_shockwave.spr"); precache_sound(SOUND_ENTANGLING) } public NewRound() { for (new id = 1; id <= g_maxplayers; id++) { if(entangle_can[id]) entangle_can[id] = false } } public FW_playerprethink(id) { if(!zp_get_user_zombie(id)) { new Target, Body; get_user_aiming(id, Target, Body, 9999999); // Entangle Power if(is_user_alive(Target) && !zp_get_user_first_zombie(Target) && is_user_alive(id) && zp_has_round_started()) { if(entangle_can[id] && !IsStunned[Target]) { if(zp_get_user_zombie(id) && zp_get_user_zombie(Target)) { return 0; } if(!zp_get_user_zombie(id) && !zp_get_user_zombie(Target)) { return 0; } Ultimate_Entangle(id, Target) entangle_can[id] = false } } } if(is_user_alive(id) && IsStunned[id]) { set_pev(id, pev_maxspeed, 1.0); set_pev(id, pev_velocity, Float:{0.0,0.0,0.0}) } return PLUGIN_CONTINUE } public ulteng(id) { if(is_user_alive(id) && !entangle_can[id] && !zp_get_user_zombie(id)) { static Float: gametime ; gametime = get_gametime(); if(gametime - float(get_pcvar_num(gCvarEnCoolDown)) > g_cenCooldown[id]) { entangle_can[id] = true; ColorChat(id, GREEN, "[ZC]^x01 Put^x04 your crosshair^x01 on a^x04 victim!") g_cenCooldown[id] = gametime } else { ColorChat(id, GREEN, "[ZC]^x01 Your power will charge in:^x04 %.1f seconds !", float(get_pcvar_num(gCvarEnCoolDown)) - (gametime - g_cenCooldown[id])) return; } } } public Ultimate_Entangle(Caster, Enemy) { new qRed, qGreen, qBlue if(get_user_team(Enemy) == 1) qRed = 0, qGreen = 0, qBlue = 200 else qRed = 200, qGreen = 0, qBlue = 0 message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BEAMFOLLOW) write_short(Enemy) // entity write_short(SPR_TRAIL) // model write_byte(10) // life write_byte(5) // width write_byte(qRed) // red write_byte(qGreen) // green write_byte(qBlue) // blue write_byte(200) // brightness message_end() IsStunned[Enemy] = true; pev(Enemy, pev_maxspeed, LastSpeed[Enemy]) set_pev(Enemy, pev_maxspeed, 1.0); set_pev(Enemy, pev_movetype, MOVETYPE_NONE); new parm[4]; parm[0] = Enemy; parm[1] = 0; parm[2] = 0; parm[3] = 0; EntangleWait(parm); } public EntangleWait(parm[4]) { new id = parm[0]; if(id >= TASK_ENTANGLEWAIT) id -= TASK_ENTANGLEWAIT; if(is_user_connected(id)) { new Origin[3]; get_user_origin(id, Origin); if(Origin[0] == parm[1] && Origin[1] == parm[2] && Origin[2] == parm[3] && (pev(id, pev_flags))) { set_task(ENTANGLE_TIME, "Entangle_ResetMaxSpeed", TASK_RESETSPEED + id); EntangleEffect(id) } else { parm[1] = Origin[0]; parm[2] = Origin[1]; parm[3] = Origin[2]; set_task(0.001, "EntangleWait", TASK_ENTANGLEWAIT + id, parm, 4); } } } public EntangleEffect(id) { new Origin[3]; get_user_origin(id, Origin); emit_sound(id, CHAN_STATIC, SOUND_ENTANGLING, 1.0, ATTN_NORM, 0, PITCH_NORM); new Start[3], End[3], Height; new Radius = 20, Counter = 0; new x1, y1, x2, y2; while(Counter <= 7) { if(Counter == 0 || Counter == 8) x1 = -Radius; else if(Counter == 1 || Counter == 7) x1 = -Radius * 100/141; else if(Counter == 2 || Counter == 6) x1 = 0; else if(Counter == 3 || Counter == 5) x1 = Radius*100/141 else if(Counter == 4) x1 = Radius if(Counter <= 4) y1 = sqroot(Radius*Radius-x1*x1); else y1 = -sqroot(Radius*Radius-x1*x1); ++Counter; if(Counter == 0 || Counter == 8) x2 = -Radius; else if(Counter == 1 || Counter==7) x2 = -Radius*100/141; else if(Counter == 2 || Counter==6) x2 = 0; else if(Counter == 3 || Counter==5) x2 = Radius*100/141; else if(Counter == 4) x2 = Radius; if(Counter <= 4) y2 = sqroot(Radius*Radius-x2*x2); else y2 = -sqroot(Radius*Radius-x2*x2); Height = 16 + 2 * Counter; while(Height > -40) { Start[0] = Origin[0] + (x1 * 2); Start[1] = Origin[1] + (y1 * 2); Start[2] = Origin[2] + (Height * 2); End[0] = Origin[0] + (x2 * 2); End[1] = Origin[1] + (y2 * 2); End[2] = Origin[2] + (Height * 2); new qRed, qGreen, qBlue if(get_user_team(id) == 1) qRed = 0, qGreen = 0, qBlue = 200 else qRed = 200, qGreen = 0, qBlue = 0 message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BEAMPOINTS) write_coord(Start[0]) write_coord(Start[1]) write_coord(Start[2]) write_coord(End[0]) write_coord(End[1]) write_coord(End[2]) write_short(SPR_BEAM) // model write_byte(0) // start frame write_byte(0) // framerate write_byte((floatround(ENTANGLE_TIME) * 10)); // life write_byte(30) // width write_byte(15) // noise write_byte(qRed) // red write_byte(qGreen) // green write_byte(qBlue) // blue write_byte(200) // brightness write_byte(0) // speed message_end() Height -= 16; } } } public Entangle_ResetMaxSpeed(id) { if(id >= TASK_RESETSPEED) id -= TASK_RESETSPEED; task_exists(TASK_ENTANGLEWAIT + id) ? remove_task(TASK_ENTANGLEWAIT + id) : 0; IsStunned[id] = false; if(is_user_alive(id)) set_pev(id, pev_maxspeed, LastSpeed[id]); }