Offline |
|
Csatlakozott:2016.06.20. 10:23 Hozzászólások:489 Megköszönt másnak: 47 alkalommal Megköszönték neki: 15 alkalommal
|
Sziasztok van nekem egy ilyen jetpack, és ezt kellene be rakni vipeseknek csak! Forrás: #include <amxmodx> #include <fun> #include <engine> #include <fakemeta> #include <hamsandwich> #include <zombieplague> #define PLUGINNAME "Jetpack+Bazoka" #define VERSION "3.2" #define AUTHOR "B!gBud" #define ACCESS_LEVEL ADMIN_LEVEL_A #define VOTE_ACCESS ADMIN_CFG #define TE_EXPLOSION 3 #define TE_BEAMFOLLOW 22 #define TE_BEAMCYLINDER 21 #define JETPACK_COST 25 // set how may ammopacks the Jatpack+Rocket cost new ROCKET_MDL[64] = "models/rpgrocket.mdl" new ROCKET_SOUND[64] = "weapons/rocketfire1.wav" new getrocket[64] = "items/9mmclip2.wav" new bool:fly[33] = false new bool:rocket[33] = false new bool:rksound[33] = false new bool:shot[33] = false new Float:gltime = 0.0 new Float:last_Rocket[33] = 0.0 new Float:jp_cal[33] = 0.0 new Float:jp_soun[33] = 0.0 new flame, explosion, trail, white new g_flyEnergy[33], hasjet[33] new cvar_jetpack, cvar_jetpackSpeed, cvar_jetpackUpSpeed, cvar_jetpackAcrate ,cvar_RocketDelay, cvar_RocketSpeed, cvar_RocketDmg, cvar_Dmg_range, cvar_fly_max_engery, cvar_fly_engery, cvar_regain_energy, g_item_jetpack, cvar_cal_time, cvar_oneround public plugin_init() { register_plugin(PLUGINNAME, VERSION, AUTHOR) g_item_jetpack = zp_register_extra_item("Jetpack+Bazooka (one Round)", JETPACK_COST, ZP_TEAM_HUMAN) register_clcmd("drop","cmdDrop") register_clcmd("say /jphelp","cmdHelp",0,": Displays Jetpack help") new ver[64] format(ver,63,"%s v%s",PLUGINNAME,VERSION) register_cvar("zp_jp_version",ver,FCVAR_SERVER) cvar_jetpack = register_cvar("zp_jetpack", "2") cvar_jetpackSpeed=register_cvar("zp_jp_forward_speed","300.0") cvar_jetpackUpSpeed=register_cvar("zp_jp_up_speed","35.0") cvar_jetpackAcrate=register_cvar("zp_jp_accelerate","100.0") cvar_RocketDelay=register_cvar("zp_jp_rocket_delay","12.0") cvar_RocketSpeed=register_cvar("zp_jp_rocket_speed","1500") cvar_RocketDmg=register_cvar("zp_jp_rocket_damage","1500") cvar_Dmg_range=register_cvar("zp_jp_damage_radius","350") cvar_fly_max_engery = register_cvar("zp_jp_max_engery", "100") cvar_fly_engery = register_cvar("zp_jp_engery", "10") cvar_regain_energy = register_cvar("zp_jp_regain_energy", "3") cvar_cal_time = register_cvar("zp_jp_energy_cal", "1.0") cvar_oneround = register_cvar("zp_jp_oneround", "0") register_event("CurWeapon", "check_models", "be") register_event("DeathMsg", "player_die", "a") register_event("HLTV", "event_round_start", "a", "1=0", "2=0") register_forward(FM_StartFrame, "fm_startFrame") register_forward(FM_EmitSound, "emitsound") } public plugin_precache() { precache_model("models/p_egon.mdl") precache_model("models/v_egon.mdl") precache_model("models/w_egon.mdl") precache_sound("jetpack.wav") precache_sound("jp_blow.wav") precache_model(ROCKET_MDL) precache_sound(ROCKET_SOUND) precache_sound(getrocket) explosion = precache_model("sprites/zerogxplode.spr") trail = precache_model("sprites/smoke.spr") flame = precache_model("sprites/xfireball3.spr") white = precache_model("sprites/white.spr") } public client_putinserver(id) { fly[id] = false rocket[id] = false hasjet[id] = 0 g_flyEnergy[id] = 0 } public client_disconnect(id) { fly[id] = false rocket[id] = false hasjet[id] = 0 g_flyEnergy[id] = 0 } public event_round_start() { remove_jetpacks(); if (get_pcvar_num(cvar_oneround) == 1) { for (new id; id <= 32; id++) hasjet[id] = 0, g_flyEnergy[id] = 0, fly[id] = false; } } public fm_startFrame(){ gltime = get_gametime() static id for (id = 1; id <= 32; id++) { jp_forward(id) } } public jp_forward(player) { if (!is_user_alive(player) && (zp_get_user_zombie(player) || zp_get_user_nemesis(player) || zp_get_user_survivor(player))) return FMRES_IGNORED if (!hasjet[player]) return FMRES_IGNORED if(jp_cal[player] < gltime){ jp_energy(player); jp_cal[player] = gltime + get_pcvar_float(cvar_cal_time) } check_rocket(player) new clip,ammo new wpnid = get_user_weapon(player,clip,ammo) if (wpnid == CSW_KNIFE){ if(get_pcvar_num(cvar_jetpack) == 1){ if(!(pev(player, pev_flags)&FL_ONGROUND) && pev(player,pev_button)&IN_ATTACK){ if((g_flyEnergy[player] > get_pcvar_num(cvar_fly_max_engery)*0.3) && (g_flyEnergy[player] <= get_pcvar_num(cvar_fly_max_engery))){ if(jp_soun[player] < gltime){ emit_sound(player,CHAN_ITEM,"jetpack.wav",1.0,ATTN_NORM,1,PITCH_HIGH) jp_soun[player] = gltime + 1.0 } } else if((g_flyEnergy[player] > 0) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.3)){ if(jp_soun[player] < gltime){ emit_sound(player,CHAN_ITEM,"jp_blow.wav",1.0,ATTN_NORM,1,PITCH_HIGH) jp_soun[player] = gltime + 1.0 } } } human_fly(player) attack(player) } if((pev(player,pev_button)&IN_ATTACK2)){ attack2(player) } } if((get_pcvar_num(cvar_jetpack) == 2 && !(pev(player, pev_flags)&FL_ONGROUND)) && (pev(player,pev_button)&IN_JUMP && pev(player,pev_button)&IN_DUCK)){ if((g_flyEnergy[player] > get_pcvar_num(cvar_fly_max_engery)*0.3) && (g_flyEnergy[player] <= get_pcvar_num(cvar_fly_max_engery))){ if(jp_soun[player] < gltime){ emit_sound(player,CHAN_ITEM,"jetpack.wav",1.0,ATTN_NORM,1,PITCH_HIGH) jp_soun[player] = gltime + 1.0 } } else if((g_flyEnergy[player] > 0) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.3)){ if(jp_soun[player] < gltime){ emit_sound(player,CHAN_ITEM,"jp_blow.wav",1.0,ATTN_NORM,1,PITCH_HIGH) jp_soun[player] = gltime + 1.0 } } human_fly(player) attack(player) } // Icon Show system /*if (!is_user_alive(player) && zp_get_user_zombie(player) && zp_get_user_nemesis(player) && zp_get_user_survivor(player)) Icon_Energy({0, 255, 0}, 0, player); //Icon_Energy({128, 128, 0}, 0, player); //Icon_Energy({255, 255, 0}, 0, player); }*/ if((g_flyEnergy[player] >= get_pcvar_num(cvar_fly_max_engery)*0.8) && (g_flyEnergy[player] <= get_pcvar_num(cvar_fly_max_engery))){ Icon_Energy({0, 255, 0}, 1, player); // Green } else if((g_flyEnergy[player] >= get_pcvar_num(cvar_fly_max_engery)*0.5) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.8)){ Icon_Energy({255, 255, 0}, 1, player); // yellow } else if((g_flyEnergy[player] >= get_pcvar_num(cvar_fly_max_engery)*0.3) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.5)){ Icon_Energy({255, 215, 0}, 2, player); } else if((g_flyEnergy[player] > 0) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.3)){ Icon_Energy({255, 0, 0}, 1, player); } return FMRES_IGNORED } public jp_energy(player) { if (!(pev(player, pev_flags)&FL_ONGROUND) && pev(player,pev_button)&IN_ATTACK) { // Get our current velocity new clip,ammo new wpnid = get_user_weapon(player,clip,ammo) if (wpnid == CSW_KNIFE) { // flying if(g_flyEnergy[player] > get_pcvar_num(cvar_fly_max_engery)*0.09) g_flyEnergy[player] = g_flyEnergy[player] - get_pcvar_num(cvar_fly_engery); // Increase distance counter } } else if ((get_pcvar_num(cvar_jetpack) == 2 && !(pev(player, pev_flags)&FL_ONGROUND)) && (pev(player,pev_button)&IN_JUMP && pev(player,pev_button)&IN_DUCK)) { if(g_flyEnergy[player] > get_pcvar_num(cvar_fly_max_engery)*0.09) g_flyEnergy[player] = g_flyEnergy[player] - get_pcvar_num(cvar_fly_engery); // Increase distance counter } // Walking/Runnig if (pev(player, pev_flags) & FL_ONGROUND) g_flyEnergy[player] = g_flyEnergy[player] + get_pcvar_num(cvar_regain_energy);// Decrease distance counter } public attack(player) { //code snippa from TS_Jetpack 1.0 - Jetpack plugin for The Specialists. //http://forums.alliedmods.net/showthread.php?s=3ea22295e3e5a292fa82899676583326&t=55709&highlight=jetpack //By: Bad_Bud if(fly[player]) { static Float:JetpackData[3] pev(player,pev_velocity,JetpackData) new fOrigin[3],Float:Aim[3] VelocityByAim(player, 10, Aim) get_user_origin(player,fOrigin) fOrigin[0] -= floatround(Aim[0]) fOrigin[1] -= floatround(Aim[1]) fOrigin[2] -= floatround(Aim[2]) if((pev(player,pev_button)&IN_FORWARD) && !(pev(player, pev_flags) & FL_ONGROUND)) { message_begin(MSG_ALL,SVC_TEMPENTITY) write_byte(17) write_coord(fOrigin[0]) write_coord(fOrigin[1]) write_coord(fOrigin[2]) write_short(flame) write_byte(10) write_byte(255) message_end() static Float:Speed Speed=floatsqroot(JetpackData[0]*JetpackData[0]+JetpackData[1]*JetpackData[1]) if(Speed!=0.0)//Makes players only lay down if their speed isn't 0; if they are thrusting forward. { set_pev(player,pev_gaitsequence,0) set_pev(player,pev_sequence,111) } if(Speed<get_pcvar_float(cvar_jetpackSpeed)) Speed+=get_pcvar_float(cvar_jetpackAcrate) static Float:JetpackData2[3] pev(player,pev_angles,JetpackData2) JetpackData2[2]=0.0//Remove the Z value/ angle_vector(JetpackData2,ANGLEVECTOR_FORWARD,JetpackData2) JetpackData2[0]*=Speed JetpackData2[1]*=Speed JetpackData[0]=JetpackData2[0] JetpackData[1]=JetpackData2[1] } if(JetpackData[2]<get_pcvar_float(cvar_jetpackSpeed)&&JetpackData[2]>0.0)//Jetpacks get more power on the way down -- it helps landing. JetpackData[2]+=get_pcvar_float(cvar_jetpackUpSpeed) else if(JetpackData[2]<0.0) JetpackData[2]+=(get_pcvar_float(cvar_jetpackUpSpeed)*1.15) set_pev(player,pev_velocity,JetpackData) } } public attack2(player) { if (rocket[player]) { new rocket = create_entity("info_target") if(rocket == 0) return PLUGIN_CONTINUE entity_set_string(rocket, EV_SZ_classname, "zp_jp_rocket") entity_set_model(rocket, ROCKET_MDL) entity_set_size(rocket, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0}) entity_set_int(rocket, EV_INT_movetype, MOVETYPE_FLY) entity_set_int(rocket, EV_INT_solid, SOLID_BBOX) new Float:vSrc[3] entity_get_vector(player, EV_VEC_origin, vSrc) new Float:Aim[3],Float:origin[3] VelocityByAim(player, 64, Aim) entity_get_vector(player,EV_VEC_origin,origin) vSrc[0] += Aim[0] vSrc[1] += Aim[1] entity_set_origin(rocket, vSrc) new Float:velocity[3], Float:angles[3] VelocityByAim(player, get_pcvar_num(cvar_RocketSpeed), velocity) entity_set_vector(rocket, EV_VEC_velocity, velocity) vector_to_angle(velocity, angles) entity_set_vector(rocket, EV_VEC_angles, angles) entity_set_edict(rocket,EV_ENT_owner,player) entity_set_float(rocket, EV_FL_takedamage, 1.0) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BEAMFOLLOW) write_short(rocket) write_short(trail) write_byte(25) write_byte(5) write_byte(224) write_byte(224) write_byte(255) write_byte(255) message_end() emit_sound(rocket, CHAN_WEAPON, ROCKET_SOUND, 1.0, ATTN_NORM, 0, PITCH_NORM) shot[player] = true last_Rocket[player] = gltime + get_pcvar_num(cvar_RocketDelay) } return PLUGIN_CONTINUE } public check_models(id) { if (zp_get_user_zombie(id) || zp_get_user_nemesis(id) || zp_get_user_survivor(id)) return FMRES_IGNORED if(hasjet[id]) { new clip,ammo new wpnid = get_user_weapon(id,clip,ammo) if ( wpnid == CSW_KNIFE ) { switchmodel(id) } return PLUGIN_CONTINUE } return PLUGIN_CONTINUE } public switchmodel(id) { entity_set_string(id,EV_SZ_viewmodel,"models/v_egon.mdl") entity_set_string(id,EV_SZ_weaponmodel,"models/p_egon.mdl") } public remove_jetpacks() { new nextitem = find_ent_by_class(-1,"zp_jp_jetpack") while(nextitem) { remove_entity(nextitem) nextitem = find_ent_by_class(-1,"zp_jp_jetpack") } return PLUGIN_CONTINUE } public emitsound(entity, channel, const sample[]) { if(is_user_alive(entity)) { new clip,ammo new weapon = get_user_weapon(entity,clip,ammo) if(hasjet[entity] && weapon == CSW_KNIFE) { if(equal(sample,"weapons/knife_slash1.wav")) return FMRES_SUPERCEDE if(equal(sample,"weapons/knife_slash2.wav")) return FMRES_SUPERCEDE if(equal(sample,"weapons/knife_deploy1.wav")) return FMRES_SUPERCEDE if(equal(sample,"weapons/knife_hitwall1.wav")) return FMRES_SUPERCEDE if(equal(sample,"weapons/knife_hit1.wav")) return FMRES_SUPERCEDE if(equal(sample,"weapons/knife_hit2.wav")) return FMRES_SUPERCEDE if(equal(sample,"weapons/knife_hit3.wav")) return FMRES_SUPERCEDE if(equal(sample,"weapons/knife_hit4.wav")) return FMRES_SUPERCEDE if(equal(sample,"weapons/knife_stab.wav")) return FMRES_SUPERCEDE } } return FMRES_IGNORED } public Icon_Show(icon[], color[3], mode, player) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusIcon"), {0,0,0}, player); write_byte(mode); // status (0=hide, 1=show, 2=flash) write_string(icon); // sprite name write_byte(color[0]); // red write_byte(color[1]); // green write_byte(color[2]); // blue message_end(); } public Icon_Energy(color[3], mode, player) { Icon_Show("item_longjump", color, mode, player) } public human_fly(player) { if (g_flyEnergy[player] <= get_pcvar_num(cvar_fly_max_engery)*0.1) { jp_off(player); } if (g_flyEnergy[player] > get_pcvar_num(cvar_fly_max_engery)*0.1) { jp_on(player); } } public jp_on(player) { fly[player] = true } public jp_off(player) { fly[player] = false } public check_rocket(player) { if (last_Rocket[player] > gltime) { rk_forbidden(player) rksound[player] = true } else { if (shot[player]) { rksound[player] = false shot[player] = false } rk_sound(player) rk_allow(player) } } public rk_allow(player) { rocket[player] = true } public rk_forbidden(player) { rocket[player] = false } public rk_sound(player) { if (!rksound[player]) { engfunc(EngFunc_EmitSound, player, CHAN_WEAPON, getrocket, 1.0, ATTN_NORM, 0, PITCH_NORM) client_print(player, print_center, "*Bazooka Ujratoltve*") rksound[player] = true } else if (rksound[player]) { } } public cmdHelp(id) { new g_max = get_pcvar_num(cvar_fly_max_engery) new g_lost = get_pcvar_num(cvar_fly_engery) new g_back = get_pcvar_num(cvar_regain_energy) new g_dmg = get_pcvar_num(cvar_RocketDmg) new g_delay = get_pcvar_num(cvar_RocketDelay) new jpmotd[2048], title[64], dpos = 0 format(title,63,"[ZP] %s ver.%s",PLUGINNAME,VERSION) dpos += format(jpmotd[dpos],2047-dpos,"<html><head><style type=^"text/css^">pre{color:#FF0505;}body{background:#000000;margin-left:16px;margin-top:1px;}</style></head><pre><body>") dpos += format(jpmotd[dpos],2047-dpos,"<b>%s</b>^n^n",title) dpos += format(jpmotd[dpos],2047-dpos,"Hogyan hasznaljuk:^n") dpos += format(jpmotd[dpos],2047-dpos,"=============^n^n") if(get_pcvar_num(cvar_jetpack) == 1) { dpos += format(jpmotd[dpos],2047-dpos,"- Valts kersre a loveshez! Es jobb klick^n") dpos += format(jpmotd[dpos],2047-dpos,"^n") dpos += format(jpmotd[dpos],2047-dpos,"- Bazooka hasznalata Job klick!^n^n") } else if(get_pcvar_num(cvar_jetpack) == 2){ dpos += format(jpmotd[dpos],2047-dpos,"- A repuleshez nyomd a ctrl+spacet egybe!") dpos += format(jpmotd[dpos],2047-dpos,"^n") dpos += format(jpmotd[dpos],2047-dpos,"A raketa kiloveseert nyomd a Job kiclket^n^n") } dpos += format(jpmotd[dpos],2047-dpos,"INFO's^n") dpos += format(jpmotd[dpos],2047-dpos,"Max energia : <b>%i Units</b>^n^n", g_max) dpos += format(jpmotd[dpos],2047-dpos,"Jatpack repulesi sebessege %i 1masodperc. to work^n", g_lost) dpos += format(jpmotd[dpos],2047-dpos,"Energia ujratoltese %i . (when you are on the ground)^n^n", g_back) dpos += format(jpmotd[dpos],2047-dpos,"Raketa sebzese: <b>%i dmg</b>^n",g_dmg) dpos += format(jpmotd[dpos],2047-dpos,"New Rocket comes ervry <b>%i Sec.</b>^n^n", g_delay ) dpos += format(jpmotd[dpos],2047-dpos,"-Hasznald egessegel!!^n") show_motd(id,jpmotd,title) } public player_die() { new id = read_data(2) if(hasjet[id]) { drop_jetpack(id) hasjet[id] = 0 rocket[id] = false g_flyEnergy[id] = 0 } return PLUGIN_CONTINUE } public cmdDrop(id) { if(hasjet[id]) { new clip,ammo new weapon = get_user_weapon(id,clip,ammo) if(weapon == CSW_KNIFE) { drop_jetpack(id) if(!zp_get_user_zombie(id)){ entity_set_string(id,EV_SZ_viewmodel,"models/v_knife.mdl") entity_set_string(id,EV_SZ_weaponmodel,"models/p_knife.mdl") } return PLUGIN_HANDLED } } return PLUGIN_CONTINUE } public drop_jetpack(player) { if(hasjet[player]) { new Float:Aim[3],Float:origin[3] VelocityByAim(player, 64, Aim) entity_get_vector(player,EV_VEC_origin,origin) origin[0] += Aim[0] origin[1] += Aim[1] new jetpack = create_entity("info_target") entity_set_string(jetpack,EV_SZ_classname,"zp_jp_jetpack") entity_set_model(jetpack,"models/w_egon.mdl") entity_set_size(jetpack,Float:{-16.0,-16.0,-16.0},Float:{16.0,16.0,16.0}) entity_set_int(jetpack,EV_INT_solid,1) entity_set_int(jetpack,EV_INT_movetype,6) entity_set_vector(jetpack,EV_VEC_origin,origin) Icon_Energy({255, 255, 0}, 0, player) Icon_Energy({128, 128, 0}, 0, player ) Icon_Energy({0, 255, 0}, 0, player) hasjet[player] = 0 rocket[player] = false } } public pfn_touch(ptr, ptd) { if(is_valid_ent(ptr)) { new classname[32] entity_get_string(ptr,EV_SZ_classname,classname,31) if(equal(classname, "zp_jp_jetpack")) { if(is_valid_ent(ptd)) { new id = ptd if(id > 0 && id < 34) { if(!hasjet[id] && !zp_get_user_zombie(id) && is_user_alive(id)) { hasjet[id] = 1 g_flyEnergy[id] = get_pcvar_num(cvar_fly_max_engery) rocket[id] = true client_cmd(id,"spk items/gunpickup2.wav") engclient_cmd(id,"weapon_knife") switchmodel(id) remove_entity(ptr) } } } }else if(equal(classname, "zp_jp_rocket")) { new Float:fOrigin[3] new iOrigin[3] entity_get_vector(ptr, EV_VEC_origin, fOrigin) FVecIVec(fOrigin,iOrigin) jp_radius_damage(ptr) message_begin(MSG_BROADCAST,SVC_TEMPENTITY,iOrigin) write_byte(TE_EXPLOSION) write_coord(iOrigin[0]) write_coord(iOrigin[1]) write_coord(iOrigin[2]) write_short(explosion) write_byte(30) write_byte(15) write_byte(0) message_end() message_begin(MSG_ALL,SVC_TEMPENTITY,iOrigin) write_byte(TE_BEAMCYLINDER) write_coord(iOrigin[0]) write_coord(iOrigin[1]) write_coord(iOrigin[2]) write_coord(iOrigin[0]) write_coord(iOrigin[1]) write_coord(iOrigin[2]+200) write_short(white) write_byte(0) write_byte(1) write_byte(6) write_byte(8) write_byte(1) write_byte(255) write_byte(255) write_byte(192) write_byte(128) write_byte(5) message_end() if(is_valid_ent(ptd)) { new classname2[32] entity_get_string(ptd,EV_SZ_classname,classname2,31) if(equal(classname2,"func_breakable")) force_use(ptr,ptd) } remove_entity(ptr) } } return PLUGIN_CONTINUE } public zp_user_infected_pre(player, infector){ Icon_Energy({0, 255, 0}, 0, player); cmdDrop(player); hasjet[player] = 0; g_flyEnergy[player] = 0; rocket[player] = false; } public zp_extra_item_selected(player, itemid){ new clip,ammo new weapon = get_user_weapon(player,clip,ammo) if (itemid == g_item_jetpack) { client_print(player, print_chat, "[New -Zombie] ird be hogy /jphelp a jetpack segicseghez") hasjet[player] = 1 g_flyEnergy[player] = get_pcvar_num(cvar_fly_max_engery) rocket[player] = true client_cmd(player,"spk items/gunpickup2.wav") if(weapon == CSW_KNIFE){ switchmodel(player) } else { engclient_cmd(player,"weapon_knife"),switchmodel(player) } } } stock jp_radius_damage(entity) { new id = entity_get_edict(entity,EV_ENT_owner) for(new i = 1; i < 33; i++) { if(is_user_alive(i)) { new dist = floatround(entity_range(entity,i)) if(dist <= get_pcvar_num(cvar_Dmg_range)) { new hp = get_user_health(i) new Float:damage = get_pcvar_float(cvar_RocketDmg)-(get_pcvar_float(cvar_RocketDmg)/get_pcvar_float(cvar_Dmg_range))*float(dist) new Origin[3] get_user_origin(i,Origin) if(zp_get_user_zombie(id) != zp_get_user_zombie(i)) { if(hp > damage) jp_take_damage(i,floatround(damage),Origin,DMG_BLAST) else log_kill(id,i,"Jetpack Rocket",0) } } } } } stock log_kill(killer, victim, weapon[], headshot) { // code from MeRcyLeZZ set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET) ExecuteHamB(Ham_Killed, victim, killer, 2) // set last param to 2 if you want victim to gib set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT) message_begin(MSG_BROADCAST, get_user_msgid("DeathMsg")) write_byte(killer) write_byte(victim) write_byte(headshot) write_string(weapon) message_end() // if(get_user_team(killer)!=get_user_team(victim)) set_user_frags(killer,get_user_frags(killer) +1) if(get_user_team(killer)==get_user_team(victim)) set_user_frags(killer,get_user_frags(killer) -1) new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10] get_user_name(killer, kname, 31) get_user_team(killer, kteam, 9) get_user_authid(killer, kauthid, 31) get_user_name(victim, vname, 31) get_user_team(victim, vteam, 9) get_user_authid(victim, vauthid, 31) log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"", kname, get_user_userid(killer), kauthid, kteam, vname, get_user_userid(victim), vauthid, vteam, weapon) return PLUGIN_CONTINUE; } stock jp_take_damage(victim,damage,origin[3],bit) { message_begin(MSG_ONE,get_user_msgid("Damage"),{0,0,0},victim) write_byte(21) write_byte(20) write_long(bit) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]) message_end() set_user_health(victim,get_user_health(victim)-damage) }
Itt egy vipes extra cuccis h ki tudjatok indulni ! Forrás: #include <amxmodx> #include <hamsandwich> #include <fun> #include <engine> #include <cstrike> #include <fakemeta> #include <xs> #include <zombieplague> #include <zmvip> /*================================================================================ [Customizations] =================================================================================*/ // Item Cost const antidotegun_ap_cost = 30 // Sprites new const antidotegun_sprite_beam[] = "sprites/zbeam6.spr" new const antidotegun_sprite_ring[] = "sprites/shockwave.spr" // Weapon Fire Sound, you can add more than 1 new const antidotegun_firesound[][] = { "weapons/gauss2.wav" } // Hit Sound, you can add more than 1 new const antidotegun_hitsound[][] = { "warcraft3/frostnova.wav" } // Ammo bought Sound, you can add more than 1 new const antidotegun_ammopickupsound[][] = { "items/9mmclip1.wav" } // Weaponbox Glow RGB Colors R G B new antidotegun_wb_color[] = { 0, 255, 255 } // Uncomment this line if you want to add support to old ZP versions // Use if it's necessary, from version 4.2 to below // If you uncomment this line, this item can be buyed only in infection // rounds, because the main disinfect native in old versions works // only on infection rounds. //#define OLD_VERSION_SUPPORT /*================================================================================ Customization ends here! Yes, that's it. Editing anything beyond here is not officially supported. Proceed at your own risk... =================================================================================*/ // Booleans new bool:g_bHasAntidoteGun[33], bool:g_bIsConnected[33], bool:g_bIsAlive[33] // Cvar pointers new cvar_enable, cvar_oneround, cvar_firerate, cvar_maxclip, cvar_maxbpammo, cvar_wboxglow, cvar_buyindelay, cvar_reloadspeed, cvar_hitslowdown // Arrays new g_iCurrentWeapon[33], Float:g_flLastFireTime[33] // Variables new g_iItemID, g_iMaxPlayers, g_msgSayText, g_msgDeathMsg, g_msgCurWeapon, g_msgAmmoX, g_msgAmmoPickup, g_msgScreenFade, g_sprBeam, g_sprRing, HamHook:g_iHhPostFrame_fw // Offsets const m_pPlayer = 41 const m_fInReload = 54 const m_pActiveItem = 373 const m_flNextAttack = 83 const m_flTimeWeaponIdle = 48 const m_flNextPrimaryAttack = 46 const m_flNextSecondaryAttack = 47 // Some constants const FFADE_IN = 0x0000 const ENG_NULLENT = -1 const UNIT_SECOND = (1<<12) const AMMOID_GALIL = 4 const GALIL_DFT_MAXCLIP = 35 const V_GAUSS_ANIM_FIRE = 6 const V_GAUSS_ANIM_DRAW = 8 const V_GAUSS_ANIM_RELOAD = 2 const EV_INT_WEAPONKEY = EV_INT_impulse const ANTIDOTEGUN_WPNKEY = 2816 // Buy in delay cvar it's disabled // for old versions #if defined OLD_VERSION_SUPPORT #pragma unused cvar_buyindelay #endif // Cached cvars new bool:g_bCvar_Enabled, bool:g_bCvar_BuyUntilMode, Float:g_flCvar_FireRate, Float:g_flCvar_ReloadSpeed, Float:g_flCvar_HitSlowdown, g_iCvar_MaxClip, g_iCvar_MaxBPAmmo // Plug info. #define PLUG_VERSION "0.6" #define PLUG_AUTH "meTaLiCroSS" // Macros #define is_user_valid_alive(%1) (1 <= %1 <= g_iMaxPlayers && g_bIsAlive[%1]) #define is_user_valid_connected(%1) (1 <= %1 <= g_iMaxPlayers && g_bIsConnected[%1]) /*================================================================================ [Init and Precache] =================================================================================*/ public plugin_init() { // Plugin info register_plugin("[ZP] Extra Item: Advanced Antidote Gun", PLUG_VERSION, PLUG_AUTH) // Events register_event("CurWeapon", "event_CurWeapon", "b", "1=1") register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0") // Fakemeta Forwards register_forward(FM_SetModel, "fw_SetModel") register_forward(FM_CmdStart, "fw_CmdStart") register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1) // Hamsandwich Forwards RegisterHam(Ham_Killed, "player", "fw_PlayerKilled") RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1) RegisterHam(Ham_Item_Deploy, "weapon_galil", "fw_Galil_Deploy_Post", 1) RegisterHam(Ham_Item_AddToPlayer, "weapon_galil", "fw_Galil_AddToPlayer") RegisterHam(Ham_Weapon_Reload, "weapon_galil", "fw_Galil_Reload_Post", 1) g_iHhPostFrame_fw = RegisterHam(Ham_Item_PostFrame, "weapon_galil", "fw_Galil_PostFrame") // Cvars cvar_enable = register_cvar("zp_antidotegun_enable", "1") cvar_oneround = register_cvar("zp_antidotegun_oneround", "0") cvar_firerate = register_cvar("zp_antidotegun_fire_rate", "0.6") cvar_maxclip = register_cvar("zp_antidotegun_max_clip", "3") cvar_maxbpammo = register_cvar("zp_antidotegun_max_bpammo", "25") cvar_reloadspeed = register_cvar("zp_antidotegun_reload_speed", "2.5") cvar_wboxglow = register_cvar("zp_antidotegun_wbox_glow", "1") cvar_buyindelay = register_cvar("zp_antidotegun_buy_before_modestart", "0") cvar_hitslowdown = register_cvar("zp_antidotegun_hit_slowdown", "0.4") static szCvar[30] formatex(szCvar, charsmax(szCvar), "v%s by %s", PLUG_VERSION, PLUG_AUTH) register_cvar("zp_extra_adv_antidotegun", szCvar, FCVAR_SERVER|FCVAR_SPONLY) // Variables g_iMaxPlayers = get_maxplayers() g_msgAmmoX = get_user_msgid("AmmoX") g_msgSayText = get_user_msgid("SayText") g_msgDeathMsg = get_user_msgid("DeathMsg") g_msgCurWeapon = get_user_msgid("CurWeapon") g_msgAmmoPickup = get_user_msgid("AmmoPickup") g_msgScreenFade = get_user_msgid("ScreenFade") g_iItemID = zv_register_extra_item("Antidote Gun", "Desinfecting people", antidotegun_ap_cost, ZV_TEAM_HUMAN) } public plugin_precache() { // Models precache_model("models/v_gauss.mdl") precache_model("models/p_gauss.mdl") precache_model("models/w_gauss.mdl") // Sprites g_sprBeam = precache_model(antidotegun_sprite_beam) g_sprRing = precache_model(antidotegun_sprite_ring) // Sounds static i for(i = 0; i < sizeof antidotegun_firesound; i++) precache_sound(antidotegun_firesound[i]) for(i = 0; i < sizeof antidotegun_ammopickupsound; i++) precache_sound(antidotegun_ammopickupsound[i]) for(i = 0; i < sizeof antidotegun_hitsound; i++) precache_sound(antidotegun_hitsound[i]) } public plugin_cfg() { // Cache some cvars after init is called cache_cvars() // Check the max clip cvar if(g_iCvar_MaxClip && g_iCvar_MaxClip != GALIL_DFT_MAXCLIP) { EnableHamForward(g_iHhPostFrame_fw) } else { // Should disable it if isn't necesary to check DisableHamForward(g_iHhPostFrame_fw) } } /*================================================================================ [Main Events] =================================================================================*/ public event_CurWeapon(id) { // Not alive... if(!g_bIsAlive[id]) return PLUGIN_CONTINUE // Updating weapon array g_iCurrentWeapon[id] = read_data(2) // Zombie or Survivor if(zp_get_user_zombie(id) || zp_get_user_survivor(id)) return PLUGIN_CONTINUE // Doesn't has an Antidote Gun and weapon isn't Galil if(!g_bHasAntidoteGun[id] || g_iCurrentWeapon[id] != CSW_GALIL) return PLUGIN_CONTINUE // Change his models entity_set_string(id, EV_SZ_viewmodel, "models/v_gauss.mdl") entity_set_string(id, EV_SZ_weaponmodel, "models/p_gauss.mdl") return PLUGIN_CONTINUE } public event_RoundStart() { // Some cvars cache on round start cache_cvars() } /*================================================================================ [Zombie Plague Forwards] =================================================================================*/ public zp_user_humanized_pre(id) { // Update bool when was buyed an antidote g_bHasAntidoteGun[id] = false } public zp_user_infected_post(id) { // Update bool when was infected g_bHasAntidoteGun[id] = false } public zv_extra_item_selected(id, itemid) { // It's an antidote gun itemid if(itemid == g_iItemID) { // Should be enabled if(g_bCvar_Enabled) { // Buy until round starts? if (!zp_has_round_started() && !g_bCvar_BuyUntilMode) { client_printcolor(id, "/g[ZP]/y You must wait until the round starts") #if defined OLD_VERSION_SUPPORT zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost) return PLUGIN_CONTINUE #else return ZV_PLUGIN_HANDLED #endif } #if defined OLD_VERSION_SUPPORT // Check actual mode id if(zp_is_plague_round() || zp_is_swarm_round() || zp_is_nemesis_round() || zp_is_survivor_round()) { client_printcolor(id, "/g[ZP]/y You can't buy this gun in this round") zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost) return PLUGIN_CONTINUE } #endif // Some vars with info new iWpnID, iAmmo, iBPAmmo, bool:bAlreadyHasGalil = bool:user_has_weapon(id, CSW_GALIL) // Already has this gun if(g_bHasAntidoteGun[id] && bAlreadyHasGalil) { // Update the current backpack ammo iBPAmmo = cs_get_user_bpammo(id, CSW_GALIL) // We can't give more ammo if(iBPAmmo >= g_iCvar_MaxBPAmmo) { client_printcolor(id, "/g[ZP]/y Your Antidote Gun backpack ammo it's full") #if defined OLD_VERSION_SUPPORT zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost) return PLUGIN_CONTINUE #else return ZV_PLUGIN_HANDLED #endif } // Get the new ammo it are going to be used by the player static iNewAmmo iNewAmmo = g_iCvar_MaxBPAmmo - iBPAmmo // Give the new amount of ammo cs_set_user_bpammo(id, CSW_GALIL, iBPAmmo + iNewAmmo) // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID_GALIL) // ammo id write_byte(iNewAmmo) // ammo amount message_end() // Play clip purchase sound emit_sound(id, CHAN_ITEM, antidotegun_ammopickupsound[random_num(0, sizeof antidotegun_ammopickupsound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) } else { // We need to get if has an ordinary galil if(bAlreadyHasGalil) ham_strip_weapon(id, "weapon_galil") // Update player bool g_bHasAntidoteGun[id] = true // Give and store the weapon id iWpnID = give_item(id, "weapon_galil") // Set the normal weapon ammo if(g_iCvar_MaxClip && g_iCvar_MaxClip != GALIL_DFT_MAXCLIP) cs_set_weapon_ammo(iWpnID, g_iCvar_MaxClip) // Set the max bpammo cs_set_user_bpammo(id, CSW_GALIL, g_iCvar_MaxBPAmmo) } // We should update this var if isn't info into. if(!iWpnID) iWpnID = find_ent_by_owner(ENG_NULLENT, "weapon_galil", id) // Yes or yes we need to update this vars with the current ammo amount iAmmo = cs_get_weapon_ammo(iWpnID) iBPAmmo = cs_get_user_bpammo(id, CSW_GALIL) // Force to change his gun engclient_cmd(id, "weapon_galil") // Update the player ammo update_ammo_hud(id, iAmmo, iBPAmmo) } else { // A message client_printcolor(id, "/g[ZP]/y Antidote Gun item has been disabled. /gContact Admin") #if defined OLD_VERSION_SUPPORT zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost) return PLUGIN_CONTINUE #else return ZV_PLUGIN_HANDLED #endif } } return PLUGIN_CONTINUE } /*================================================================================ [Main Forwards] =================================================================================*/ public client_putinserver(id) { // Updating bools g_bIsConnected[id] = true g_bHasAntidoteGun[id] = false } public client_disconnect(id) { // Updating bools g_bIsAlive[id] = false g_bIsConnected[id] = false g_bHasAntidoteGun[id] = false } public fw_PlayerSpawn_Post(id) { // Not alive... if(!is_user_alive(id)) return HAM_IGNORED // Player is alive g_bIsAlive[id] = true // Remove Weapon if(get_pcvar_num(cvar_oneround) || !g_bCvar_Enabled) { if(g_bHasAntidoteGun[id]) { // Reset player vars g_bHasAntidoteGun[id] = false // Strip his galil ham_strip_weapon(id, "weapon_galil") } } return HAM_IGNORED } public fw_PlayerKilled(victim, attacker, shouldgib) { // Player victim if(is_user_valid_connected(victim)) { // Victim is not alive g_bIsAlive[victim] = false // Reset player vars g_bHasAntidoteGun[victim] = false return HAM_HANDLED } return HAM_IGNORED } public fw_CmdStart(id, handle, seed) { // Skip not alive users if(!is_user_valid_alive(id)) return FMRES_IGNORED // Without an antidote gun if(!g_bHasAntidoteGun[id]) return FMRES_IGNORED // Not human if(zp_get_user_zombie(id) || zp_get_user_survivor(id)) return FMRES_IGNORED // Isn't holding a Galil if(g_iCurrentWeapon[id] != CSW_GALIL) return FMRES_IGNORED // Get Buttons static iButton iButton = get_uc(handle, UC_Buttons) // User pressing +attack Button if(iButton & IN_ATTACK) { // Buttons set_uc(handle, UC_Buttons, iButton & ~IN_ATTACK) // Some vars static Float:flCurrentTime flCurrentTime = halflife_time() // Fire rate not over yet if (flCurrentTime - g_flLastFireTime[id] < g_flCvar_FireRate) return FMRES_IGNORED // Another vars with info static iWpnID, iClip iWpnID = get_pdata_cbase(id, m_pActiveItem, 5) iClip = cs_get_weapon_ammo(iWpnID) // Skip if is in reload if(get_pdata_int(iWpnID, m_fInReload, 4)) return FMRES_IGNORED // To don't reload instantly (bugfix) set_pdata_float(iWpnID, m_flNextPrimaryAttack, g_flCvar_FireRate, 4) set_pdata_float(iWpnID, m_flNextSecondaryAttack, g_flCvar_FireRate, 4) set_pdata_float(iWpnID, m_flTimeWeaponIdle, g_flCvar_FireRate, 4) // Update last fire time array g_flLastFireTime[id] = flCurrentTime // 0 bullets if(iClip <= 0) { // Play empty clip sound ExecuteHamB(Ham_Weapon_PlayEmptySound, iWpnID) return FMRES_IGNORED } // Process fire primary_attack(id) // Real fire push knockback launch_push(id, 40) // Update Ammo cs_set_weapon_ammo(iWpnID, --iClip) update_ammo_hud(id, iClip, cs_get_user_bpammo(id, CSW_GALIL)) return FMRES_IGNORED } return FMRES_IGNORED } public fw_SetModel(entity, model[]) { // Entity is not valid if(!is_valid_ent(entity)) return FMRES_IGNORED; // Entity model is not w_galil if(!equal(model, "models/w_galil.mdl")) return FMRES_IGNORED; // Get classname static szClassName[33] entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName)) // Not a Weapon box if(!equal(szClassName, "weaponbox")) return FMRES_IGNORED // Some vars static iOwner, iStoredGalilID // Get owner iOwner = entity_get_edict(entity, EV_ENT_owner) // Get drop weapon index (galil) to use in fw_Galil_AddToPlayer forward iStoredGalilID = find_ent_by_owner(ENG_NULLENT, "weapon_galil", entity) // Entity classname is weaponbox, and galil has founded if(g_bHasAntidoteGun[iOwner] && is_valid_ent(iStoredGalilID)) { // Setting weapon options entity_set_int(iStoredGalilID, EV_INT_WEAPONKEY, ANTIDOTEGUN_WPNKEY) // Reset user vars g_bHasAntidoteGun[iOwner] = false // Set weaponbox new model entity_set_model(entity, "models/w_gauss.mdl") // Glow if(get_pcvar_num(cvar_wboxglow)) set_rendering(entity, kRenderFxGlowShell, antidotegun_wb_color[0], antidotegun_wb_color[1], antidotegun_wb_color[2], kRenderNormal, 25) return FMRES_SUPERCEDE } return FMRES_IGNORED } public fw_UpdateClientData_Post(id, sendweapons, handle) { // Skip not alive users if(!is_user_valid_alive(id)) return FMRES_IGNORED // Without an antidote gun if(!g_bHasAntidoteGun[id]) return FMRES_IGNORED // Not human if(zp_get_user_zombie(id) || zp_get_user_survivor(id)) return FMRES_IGNORED // Isn't holding a Galil if(g_iCurrentWeapon[id] != CSW_GALIL) return FMRES_IGNORED // Player can't attack with the AG set_cd(handle, CD_flNextAttack, halflife_time() + 0.001) return FMRES_HANDLED } public fw_Galil_Deploy_Post(galil) { // Get galil owner static id id = get_pdata_cbase(galil, m_pPlayer, 4) // The current galil owner has an antidote gun? if(is_user_valid_connected(id) && g_bHasAntidoteGun[id]) { // Update the current ammo update_ammo_hud(id, cs_get_weapon_ammo(galil), cs_get_user_bpammo(id, CSW_GALIL)) // Send the draw animation set_user_weaponanim(id, V_GAUSS_ANIM_DRAW) } return HAM_IGNORED } public fw_Galil_AddToPlayer(galil, player) { // Is an antidote gun? if(is_valid_ent(galil) && is_user_valid_connected(player) && entity_get_int(galil, EV_INT_WEAPONKEY) == ANTIDOTEGUN_WPNKEY) { // Set vars g_bHasAntidoteGun[player] = true // Reset weapon options entity_set_int(galil, EV_INT_WEAPONKEY, 0) return HAM_HANDLED } return HAM_IGNORED } public fw_Galil_PostFrame(galil) { // Get galil owner static id id = get_pdata_cbase(galil, m_pPlayer, 4) // His owner has an antidote gun? if(is_user_valid_alive(id) && g_bHasAntidoteGun[id]) { // Some vars static Float:flNextAttack, iBpAmmo, iClip, iInReload // Weapon is on middle reload iInReload = get_pdata_int(galil, m_fInReload, 4) // Next player attack flNextAttack = get_pdata_float(id, m_flNextAttack, 5) // Player back pack ammo iBpAmmo = cs_get_user_bpammo(id, CSW_GALIL) // Current weapon clip iClip = cs_get_weapon_ammo(galil) // End of reload if(iInReload && flNextAttack <= 0.0) { // Get the minimun amount between maxclip sub. current clip // and the player backpack ammo new j = min(g_iCvar_MaxClip - iClip, iBpAmmo) // Set the new weapon clip cs_set_weapon_ammo(galil, iClip + j) // Set the new player backpack ammo cs_set_user_bpammo(id, CSW_GALIL, iBpAmmo-j) // Update the weapon offset "inreload" to 0 ("false") iInReload = 0 set_pdata_int(galil, m_fInReload, 0, 4) } // Get the current player buttons static iButton iButton = get_user_button(id) // The player stills pressing the fire button if((iButton & IN_ATTACK2 && get_pdata_float(galil, m_flNextSecondaryAttack, 4) <= 0.0) || (iButton & IN_ATTACK && get_pdata_float(galil, m_flNextPrimaryAttack, 4) <= 0.0)) return // Trying to reload pressing the reload button when isn't it if(iButton & IN_RELOAD && !iInReload) { // The current weapon clip exceed the new max clip if(iClip >= g_iCvar_MaxClip) { // Retrieve player reload button entity_set_int(id, EV_INT_button, iButton & ~IN_RELOAD) // Send idle animation set_user_weaponanim(id, 0) } // The current weapon clip it's the same like the old max weapon clip else if(iClip == GALIL_DFT_MAXCLIP) { // Has an amount of bpammo? if(iBpAmmo) { // Should make a reload antidotegun_reload(id, galil, 1) } } } } // Credits and thanks to ConnorMcLeod for his Weapon MaxClip plugin! } public fw_Galil_Reload_Post(galil) { // Get galil owner static id id = get_pdata_cbase(galil, m_pPlayer, 4) // It's in reload and his owner has an antidote gun? if(is_user_valid_alive(id) && g_bHasAntidoteGun[id] && get_pdata_int(galil, m_fInReload, 4)) { // Change normal reload options antidotegun_reload(id, galil) } } /*================================================================================ [Internal Functions] =================================================================================*/ cache_cvars() { // Some cvars g_bCvar_Enabled = bool:get_pcvar_num(cvar_enable) g_flCvar_FireRate = get_pcvar_float(cvar_firerate) g_flCvar_ReloadSpeed = get_pcvar_float(cvar_reloadspeed) g_flCvar_HitSlowdown = get_pcvar_float(cvar_hitslowdown) g_iCvar_MaxClip = clamp(get_pcvar_num(cvar_maxclip), 0, 120) g_iCvar_MaxBPAmmo = clamp(get_pcvar_num(cvar_maxbpammo), 1, 90) #if defined OLD_VERSION_SUPPORT g_bCvar_BuyUntilMode = false #else g_bCvar_BuyUntilMode = bool:get_pcvar_num(cvar_buyindelay) #endif } primary_attack(id) { // Fire Effect set_user_weaponanim(id, V_GAUSS_ANIM_FIRE) entity_set_vector(id, EV_VEC_punchangle, Float:{ -1.5, 0.0, 0.0 }) emit_sound(id, CHAN_WEAPON, antidotegun_firesound[random_num(0, sizeof antidotegun_firesound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) // Some vars static iTarget, iBody, iEndOrigin[3] // Get end origin from eyes get_user_origin(id, iEndOrigin, 3) // Make gun beam beam_from_gun(id, iEndOrigin) // Get user aiming get_user_aiming(id, iTarget, iBody) // Do sound by a new entity new iEnt = create_entity("info_target") // Integer vector into a Float vector static Float:flOrigin[3] IVecFVec(iEndOrigin, flOrigin) // Set entity origin entity_set_origin(iEnt, flOrigin) // Sound emit_sound(iEnt, CHAN_WEAPON, antidotegun_hitsound[random_num(0, sizeof antidotegun_firesound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) // Remove entity remove_entity(iEnt) // Aim target it's a player if(is_user_valid_alive(iTarget)) { // Hit slowdown, first should be enabled if(g_flCvar_HitSlowdown > 0.0) { // Get his current velocity vector static Float:flVelocity[3] get_user_velocity(iTarget, flVelocity) // Multiply his velocity by a number xs_vec_mul_scalar(flVelocity, g_flCvar_HitSlowdown, flVelocity) // Set his new velocity vector set_user_velocity(iTarget, flVelocity) } // It's allowed to be disinfected if(zp_get_user_zombie(iTarget) && !zp_get_user_nemesis(iTarget) && !zp_get_user_last_zombie(iTarget)) { // Disinfect user #if defined OLD_VERSION_SUPPORT zp_disinfect_user(iTarget) #else zp_disinfect_user(iTarget, 1) #endif // Death message message_begin(MSG_BROADCAST, g_msgDeathMsg) write_byte(id) // killer write_byte(iTarget) // victim write_byte(iBody == HIT_HEAD ? 1 : 0) // headshot flag write_string("antidote gun") // killer's weapon message_end() // Screen fade fx message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, iTarget) write_short(UNIT_SECOND*1) // duration write_short(UNIT_SECOND/2) // hold time write_short(FFADE_IN) // fade type write_byte(0) // r write_byte(255) // g write_byte(255) // b write_byte(227) // alpha message_end() // Beam Cylinder fx message_begin(MSG_PVS, SVC_TEMPENTITY, iEndOrigin) write_byte(TE_BEAMCYLINDER) // TE id write_coord(iEndOrigin[0]) // position.x write_coord(iEndOrigin[1]) // position.y write_coord(iEndOrigin[2]) // position.z write_coord(iEndOrigin[0]) // x axis write_coord(iEndOrigin[1]) // y axis write_coord(iEndOrigin[2] + 385) // z axis write_short(g_sprRing) // sprite write_byte(0) // startframe write_byte(0) // framerate write_byte(4) // life write_byte(30) // width write_byte(0) // noise write_byte(0) // red write_byte(255) // green write_byte(255) // blue write_byte(200) // brightness write_byte(0) // speed message_end() } // Can't be disinfected else { // Faster particles message_begin(MSG_PVS, SVC_TEMPENTITY, iEndOrigin) write_byte(TE_PARTICLEBURST) // TE id write_coord(iEndOrigin[0]) // position.x write_coord(iEndOrigin[1]) // position.y write_coord(iEndOrigin[2]) // position.z write_short(45) // radius write_byte(208) // particle color write_byte(10) // duration * 10 will be randomized a bit message_end() } } else { // Aim target entity it's valid and isn't worldspawn? if((iTarget > 0) && is_valid_ent(iTarget)) { // Get aim target classname static szClassname[32] entity_get_string(iTarget, EV_SZ_classname, szClassname, charsmax(szClassname)) // It's a breakable entity if(equal(szClassname, "func_breakable")) { // Get destroy this ent force_use(id, iTarget) } } } } antidotegun_reload(id, galil, force_reload = 0) { // Next player attack time set_pdata_float(id, m_flNextAttack, g_flCvar_ReloadSpeed, 5) // Send to the player the reload animation set_user_weaponanim(id, V_GAUSS_ANIM_RELOAD) // Update the weapon offset "inreload" to 1 ("true") if(force_reload) set_pdata_int(galil, m_fInReload, 1, 4) // Next idle weapon time, soonest time ItemPostFrame will call WeaponIdle. set_pdata_float(galil, m_flTimeWeaponIdle, g_flCvar_ReloadSpeed + 0.5, 4) // I'll be honest, i don't know what do this. entity_set_float(id, EV_FL_frame, 200.0) } update_ammo_hud(id, iAmmoAmount, iBPAmmoAmount) { // Display the new antidotegun bullets if(iAmmoAmount != -1) { message_begin(MSG_ONE_UNRELIABLE, g_msgCurWeapon, _, id) write_byte(1) // active write_byte(CSW_GALIL) // weapon write_byte(iAmmoAmount) // clip message_end() } // Display the new amount of BPAmmo if(iBPAmmoAmount != -1) { message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoX, _, id) write_byte(AMMOID_GALIL) // ammoid write_byte(iBPAmmoAmount) // ammo amount message_end() } } beam_from_gun(id, iEndOrigin[3]) { // Make a cool beam message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BEAMENTPOINT) // TE id write_short(id | 0x1000) // start entity write_coord(iEndOrigin[0]) // endposition.x write_coord(iEndOrigin[1]) // endposition.y write_coord(iEndOrigin[2]) // endposition.z write_short(g_sprBeam) // sprite index write_byte(1) // framestart write_byte(1) // framerate write_byte(1) // life in 0.1's write_byte(10) // width write_byte(0) // noise write_byte(0) // r write_byte(255) // g write_byte(255) // b write_byte(200) // brightness write_byte(0) // speed message_end() // Dynamic Light message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iEndOrigin) write_byte(TE_DLIGHT) // TE id write_coord(iEndOrigin[0]) // position.x write_coord(iEndOrigin[1]) // position.y write_coord(iEndOrigin[2]) // position.z write_byte(30) // radius write_byte(0) // red write_byte(255) // green write_byte(255) // blue write_byte(10) // life write_byte(45) // decay rate message_end() // Sparks message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iEndOrigin) write_byte(TE_SPARKS) // TE id write_coord(iEndOrigin[0]) // position.x write_coord(iEndOrigin[1]) // position.y write_coord(iEndOrigin[2]) // position.z message_end() } /*================================================================================ [Stocks] =================================================================================*/ stock set_user_weaponanim(id, anim) { entity_set_int(id, EV_INT_weaponanim, anim) message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id) write_byte(anim) write_byte(entity_get_int(id, EV_INT_body)) message_end() } stock launch_push(id, velamount) // from my Nemesis Rocket Launcher plugin. { static Float:flNewVelocity[3], Float:flCurrentVelocity[3] velocity_by_aim(id, -velamount, flNewVelocity) get_user_velocity(id, flCurrentVelocity) xs_vec_add(flNewVelocity, flCurrentVelocity, flNewVelocity) set_user_velocity(id, flNewVelocity) } stock ham_strip_weapon(id, weapon[]) { if(!equal(weapon,"weapon_",7)) return 0 new wId = get_weaponid(weapon) if(!wId) return 0 new wEnt while((wEnt = find_ent_by_class(wEnt, weapon)) && entity_get_edict(wEnt, EV_ENT_owner) != id) {} if(!wEnt) return 0 if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt); if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0 ExecuteHamB(Ham_Item_Kill, wEnt) entity_set_int(id, EV_INT_weapons, entity_get_int(id, EV_INT_weapons) & ~(1<<wId)) return 1 } stock client_printcolor(id, const input[], any:...) { static iPlayersNum[32], iCount; iCount = 1 static szMsg[191] vformat(szMsg, charsmax(szMsg), input, 3) replace_all(szMsg, 190, "/g", "^4") // green txt replace_all(szMsg, 190, "/y", "^1") // orange txt replace_all(szMsg, 190, "/ctr", "^3") // team txt replace_all(szMsg, 190, "/w", "^0") // team txt if(id) iPlayersNum[0] = id else get_players(iPlayersNum, iCount, "ch") for (new i = 0; i < iCount; i++) { if (g_bIsConnected[iPlayersNum[i]]) { message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, iPlayersNum[i]) write_byte(iPlayersNum[i]) write_string(szMsg) message_end() } } }
_________________ BfS* #Team ~Global Offensive IP: 217.144.54.193:27148
|
|