Descarcare: download
Code: Select all
#include <amxmodx>
#include <hamsandwich>
#include <fun>
#include <fakemeta>
#include <fakemeta_util>
#include <engine>
#include <zombieplague>
#define REGEN_TIME 0.2
#define HUD_TIME 0.3
#define ENT_TYPE_ROCKET 9340
new const jet_model_p[] = "models/zombimod/p_jetpack.mdl";
new const jet_model_v[] = "models/zombimod/v_jetpack.mdl";
new const jet_model_w[] = "models/zombimod/w_jetpack.mdl";
new const jet_model_rocket[] = "models/rpgrocket.mdl";
new const jet_beam_laser[] = "sprites/laserbeam.spr";
new const get_beam_end_laser_no_rtigger[] = "sprites/zombimod/no_trigger.spr";
new const set_beam_center_trigger[] = "sprites/zombimod/trigger_center.spr";
new const set_beam_ligting[] = "sprites/zombimod/lightning.spr";
new const sprite_grenade_ring[] = "sprites/shockwave.spr";
new const set_beam_no_trigger[] = "sprites/zombimod/no_trigger_zombie.spr";
new const spr_lighting[] = "sprites/lgtning.spr";
new const jet_sound_attack_1[] = "zombimod/tesla_attack_1.wav";
new const jet_sound_attack_1_end[] = "zombimod/tesla_attack_1_end.wav";
new const jet_sound_attack_2[] = "zombimod/tesla_attack_2.wav";
new const jet_sound_attack_2_activated[] = "zombimod/tesla_attack_2_activated.wav";
new const jet_sound_drop[] = "zombimod/tesla_drop.wav";
new const jet_sound_flight[] = "zombimod/tesla_flight.wav";
new const jet_sound_give[] = "zombimod/tesla_give.wav";
new const jet_sound_no_fuel[] = "zombimod/tesla_no_fuel.wav";
new const jet_sound_reload[] = "zombimod/tesla_reload.wav";
enum (+= 100)
{
TASK_END_ATTACK_1,
TASK_RELOAD_ATTACK_ONE,
TASK_JET_HUD,
TASK_JET_REGEN_ENERGY,
TASK_SOUND_FLY,
TASK_SOUND_NO_FUEL,
TASK_RELOAD_ATTACK_TWO
}
new const name[] = "\rJetpack+Tesla";
const cost = 60;
new const name_unlimited[] = "\rEnergy Unlimited";
const cost_unlimited = 40;
new bool:jetpack[33], bool:reload_attack_one[33], bool:fly_sound[33];
new bool:reload_attack_two[33], bool:unlimited_energy[33];
new Float:g_current_fuel[33];
new g_jet_item, g_Beam_SprId, g_Burn_SprId, Burn_SprId_Center, Burn_SprId_ligting, Burn_SprId_zeml;
new g_exploSpr, g_MsgHudID, sprLightning, g_item_unlimited;
new cvar_array[50];
public plugin_init()
{
register_plugin("[ZP] Extra: Jetpack+Bazooka", "1.6", ".NET");
cvar_array[0] = register_cvar("zp_jet_fuel", "100");
cvar_array[1] = register_cvar("zp_jet_attack_damage_1", "250.0");
cvar_array[2] = register_cvar("zp_jet_reload_attack_1", "1.0");
cvar_array[3] = register_cvar("zp_jet_fuel_decrease_attack_1", "10");
cvar_array[4] = register_cvar("zp_jet_regen_fuel", "1.5"); // 0.2 milisecond
cvar_array[5] = register_cvar("zp_jet_reload_attack_2", "15.0");
cvar_array[6] = register_cvar("zp_jet_attack_damage_2", "750.0");
cvar_array[7] = register_cvar("zp_jet_fuel_decrease_attack_2", "50");
register_clcmd("drop","cmdDrop");
register_event("CurWeapon", "CurWeaponModel", "be");
register_event("DeathMsg", "DeathMessage", "a");
register_forward(FM_PlayerPreThink, "fw_preThink");
register_forward(FM_EmitSound, "fw_emitSound");
register_forward(FM_Touch, "fw_touch");
g_jet_item = zp_register_extra_item(name, cost, ZP_TEAM_HUMAN);
g_item_unlimited = zp_register_extra_item(name_unlimited, cost_unlimited, ZP_TEAM_HUMAN);
g_MsgHudID = CreateHudSyncObj();
}
public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, jet_model_p);
engfunc(EngFunc_PrecacheModel, jet_model_v);
engfunc(EngFunc_PrecacheModel, jet_model_w);
engfunc(EngFunc_PrecacheModel, jet_model_rocket);
g_Beam_SprId = engfunc(EngFunc_PrecacheModel, jet_beam_laser);
g_Burn_SprId = engfunc(EngFunc_PrecacheModel, get_beam_end_laser_no_rtigger);
Burn_SprId_Center = engfunc(EngFunc_PrecacheModel, set_beam_center_trigger);
Burn_SprId_ligting = engfunc(EngFunc_PrecacheModel, set_beam_ligting);
Burn_SprId_zeml = engfunc(EngFunc_PrecacheModel, set_beam_no_trigger);
g_exploSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_ring);
sprLightning = engfunc(EngFunc_PrecacheModel, spr_lighting);
engfunc(EngFunc_PrecacheSound, jet_sound_attack_1);
engfunc(EngFunc_PrecacheSound, jet_sound_attack_1_end);
engfunc(EngFunc_PrecacheSound, jet_sound_attack_2);
engfunc(EngFunc_PrecacheSound, jet_sound_attack_2_activated);
engfunc(EngFunc_PrecacheSound, jet_sound_drop);
engfunc(EngFunc_PrecacheSound, jet_sound_flight);
engfunc(EngFunc_PrecacheSound, jet_sound_give);
engfunc(EngFunc_PrecacheSound, jet_sound_no_fuel);
engfunc(EngFunc_PrecacheSound, jet_sound_reload);
}
public plugin_natives()
{
register_native("is_jet", "native_is_jet", 1);
}
public client_connect(id)
{
jetpack[id] = false;
reload_attack_one[id] = false;
reload_attack_two[id] = false;
fly_sound[id] = false;
unlimited_energy[id] = false;
}
public client_disconnect(id)
{
jetpack[id] = false;
reload_attack_one[id] = false;
reload_attack_two[id] = false;
fly_sound[id] = false;
unlimited_energy[id] = false;
if (task_exists(id+TASK_END_ATTACK_1))
remove_task(id+TASK_END_ATTACK_1);
if (task_exists(id+TASK_JET_HUD))
remove_task(id+TASK_JET_HUD);
if (task_exists(id+TASK_RELOAD_ATTACK_ONE))
remove_task(id+TASK_RELOAD_ATTACK_ONE);
if (task_exists(id+TASK_JET_REGEN_ENERGY))
remove_task(id+TASK_JET_REGEN_ENERGY);
if (task_exists(id+TASK_SOUND_FLY))
remove_task(id+TASK_SOUND_FLY);
if (task_exists(id+TASK_SOUND_NO_FUEL))
remove_task(id+TASK_SOUND_NO_FUEL);
if (task_exists(id+TASK_RELOAD_ATTACK_TWO))
remove_task(id+TASK_RELOAD_ATTACK_TWO);
}
public zp_round_ended(winteam)
{
remove_jetpack();
for (new id = 1; id <= 32; id++)
{
if (is_user_connected(id) && is_user_alive(id) && jetpack[id])
{
jetpack[id] = false;
reload_attack_one[id] = false;
g_current_fuel[id] = 0.0;
fly_sound[id] = false;
reload_attack_two[id] = false;
if (unlimited_energy[id])
{
unlimited_energy[id] = false;
//colored_print(id, "^x04[ZP]^x01 The action of infinite energy has disappeared.");
}
if (task_exists(id+TASK_END_ATTACK_1))
remove_task(id+TASK_END_ATTACK_1);
if (task_exists(id+TASK_JET_HUD))
remove_task(id+TASK_JET_HUD);
if (task_exists(id+TASK_RELOAD_ATTACK_ONE))
remove_task(id+TASK_RELOAD_ATTACK_ONE);
if (task_exists(id+TASK_JET_REGEN_ENERGY))
remove_task(id+TASK_JET_REGEN_ENERGY);
if (task_exists(id+TASK_SOUND_FLY))
remove_task(id+TASK_SOUND_FLY);
if (task_exists(id+TASK_SOUND_NO_FUEL))
remove_task(id+TASK_SOUND_NO_FUEL);
if (task_exists(id+TASK_RELOAD_ATTACK_TWO))
remove_task(id+TASK_RELOAD_ATTACK_TWO);
new clip, ammo;
new weapon = get_user_weapon(id, clip, ammo);
if (weapon == CSW_KNIFE)
{
if (!zp_get_user_zombie(id) && !zp_get_user_nemesis(id))
{
set_pev(id, pev_viewmodel2, "models/v_knife.mdl");
set_pev(id, pev_weaponmodel2, "models/p_knife.mdl");
}
}
}
}
}
public remove_jetpack()
{
set_task(1.0, "remove_jet");
}
public remove_jet(id)
{
fm_remove_entity_name("zp_jp_jetpack");
return PLUGIN_CONTINUE;
}
public fw_preThink(id)
{
if (!is_user_connected(id))
return PLUGIN_CONTINUE;
if (!jetpack[id])
return PLUGIN_CONTINUE;
if (zp_get_user_zombie(id) || zp_get_user_nemesis(id) || zp_get_user_survivor(id))
return PLUGIN_CONTINUE;
new clip, ammo;
new weapon = get_user_weapon(id, clip, ammo)
if ((pev(id, pev_button) & IN_ATTACK) && !(pev(id, pev_oldbuttons) & IN_ATTACK) && weapon == CSW_KNIFE && reload_attack_one[id] && g_current_fuel[id] >= get_pcvar_float(cvar_array[3]))
{
emit_sound(id, CHAN_AUTO, jet_sound_attack_1, 1.0, ATTN_NORM, 0, PITCH_NORM);
set_task(0.2, "end_attack_1", id+TASK_END_ATTACK_1);
if (!unlimited_energy[id])
g_current_fuel[id] -= get_pcvar_float(cvar_array[3]);
reload_attack_one[id] = false;
set_task(get_pcvar_float(cvar_array[2]), "func_reload_attack_one", id+TASK_RELOAD_ATTACK_ONE);
static Float:startOrigin[3], Float:endOrigin[3], Float:endOrigin2[3];
get_Postion(id, 40.0, 7.5, -5.0, startOrigin);
get_Postion(id, 4096.0, 0.0, 0.0, endOrigin);
static TrResult; TrResult = create_tr2();
engfunc(EngFunc_TraceLine, startOrigin, endOrigin, DONT_IGNORE_MONSTERS, id, TrResult);
get_weapon_attachment(id, endOrigin);
global_get(glb_v_forward, endOrigin2);
xs_vec_mul_scalar(endOrigin2, 1024.0, endOrigin2);
xs_vec_add(endOrigin, endOrigin2, endOrigin2);
get_tr2(TrResult, TR_vecEndPos, endOrigin);
get_tr2(TrResult, TR_vecPlaneNormal, endOrigin2);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMENTPOINT);
write_short(id);
engfunc(EngFunc_WriteCoord, endOrigin[0]);
engfunc(EngFunc_WriteCoord, endOrigin[1]);
engfunc(EngFunc_WriteCoord, endOrigin[2]);
write_short(g_Beam_SprId);
write_byte(0); // start frame
write_byte(1); // frame rate
write_byte(1); // life
write_byte(42); // line width
write_byte(30); // noise amplitude
write_byte(15); // red
write_byte(15); // green
write_byte(200); // blue
write_byte(255); // brightness
write_byte(0); // scroll speed
message_end();
xs_vec_mul_scalar(endOrigin2, 2.5, endOrigin2);
xs_vec_add(endOrigin, endOrigin2, endOrigin2);
message_begin(MSG_BROADCAST ,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION);
engfunc(EngFunc_WriteCoord, endOrigin2[0]);
engfunc(EngFunc_WriteCoord, endOrigin2[1]);
engfunc(EngFunc_WriteCoord, endOrigin2[2]);
write_short(g_Burn_SprId);
write_byte(2);
write_byte(30);
write_byte(TE_EXPLFLAG_NODLIGHTS | TE_EXPLFLAG_NOPARTICLES | TE_EXPLFLAG_NOSOUND);
message_end();
static Hit; Hit = get_tr2(TrResult, TR_pHit);
if (!is_user_alive(Hit))
{
message_begin (MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_SPRITETRAIL);
engfunc(EngFunc_WriteCoord, endOrigin2[0]);
engfunc(EngFunc_WriteCoord, endOrigin2[1]);
engfunc(EngFunc_WriteCoord, endOrigin2[2] + 50.0);
engfunc(EngFunc_WriteCoord, endOrigin2[0]);
engfunc(EngFunc_WriteCoord, endOrigin2[1]);
engfunc(EngFunc_WriteCoord, endOrigin2[2]);
write_short(Burn_SprId_zeml);
write_byte(10) // (count)
write_byte(random_num(5, 10)) // (life in 0.1's)
write_byte(1) // byte (scale in 0.1's)
write_byte(25) // (velocity along vector in 10's)
write_byte(5) // (randomness of velocity in 10's)
message_end();
free_tr2(TrResult);
return PLUGIN_CONTINUE;
}
if(is_user_alive(Hit) && (zp_get_user_zombie(Hit) || zp_get_user_nemesis(Hit)))
{
do_attack(id, Hit, 0, get_pcvar_float(cvar_array[1]));
new Float:originF[3];
pev(Hit, pev_origin, originF);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte (TE_SPRITE);
engfunc(EngFunc_WriteCoord, originF[0]);
engfunc(EngFunc_WriteCoord, originF[1]);
engfunc(EngFunc_WriteCoord, originF[2]);
write_short(Burn_SprId_Center);
write_byte(3);
write_byte(180);
message_end();
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte (TE_SPRITE);
engfunc(EngFunc_WriteCoord, originF[0]);
engfunc(EngFunc_WriteCoord, originF[1]);
engfunc(EngFunc_WriteCoord, originF[2] + 30.0);
write_short(Burn_SprId_ligting);
write_byte(10);
write_byte(180);
message_end();
engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[2] + 555.0) // z axis
write_short(g_exploSpr) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(1) // life
write_byte(25) // width
write_byte(0) // noise
write_byte(255) // red
write_byte(255) // green
write_byte(255) // blue
write_byte(200) // brightness
write_byte(0) // speed
message_end()
}
free_tr2(TrResult);
} else if ((pev(id, pev_button) & IN_ATTACK) && !(pev(id, pev_oldbuttons) & IN_ATTACK) && weapon == CSW_KNIFE && !reload_attack_one[id] && g_current_fuel[id] >= get_pcvar_float(cvar_array[3]))
{
emit_sound(id, CHAN_AUTO, jet_sound_reload, 1.0, ATTN_NORM, 0, PITCH_NORM);
return PLUGIN_CONTINUE;
} else if ((pev(id, pev_button) & IN_ATTACK) && !(pev(id, pev_oldbuttons) & IN_ATTACK) && weapon == CSW_KNIFE && g_current_fuel[id] < get_pcvar_float(cvar_array[3]))
{
emit_sound(id, CHAN_AUTO, jet_sound_no_fuel, 1.0, ATTN_NORM, 0, PITCH_NORM);
//colored_print(id, "^x04[ZP]^x01 Not enough energy required ^x04%.1f^x01.", get_pcvar_float(cvar_array[3]));
return PLUGIN_CONTINUE;
}
if ((pev(id, pev_button) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && weapon == CSW_KNIFE && reload_attack_two[id] && g_current_fuel[id] >= get_pcvar_float(cvar_array[7]))
{
emit_sound(id, CHAN_AUTO, jet_sound_attack_2, 1.0, ATTN_NORM, 0, PITCH_NORM);
if(!unlimited_energy[id])
g_current_fuel[id] -= get_pcvar_float(cvar_array[7]);
reload_attack_two[id] = false;
set_task(get_pcvar_float(cvar_array[5]), "func_reload_attack_two", id+TASK_RELOAD_ATTACK_TWO);
//---------------------------------------------------------------------------------------------------
static Float:startOrigin[3], Float:endOrigin[3], Float:endOrigin2[3];
get_Postion(id, 40.0, 7.5, -5.0, startOrigin);
get_Postion(id, 4096.0, 0.0, 0.0, endOrigin);
static TrResult; TrResult = create_tr2();
engfunc(EngFunc_TraceLine, startOrigin, endOrigin, DONT_IGNORE_MONSTERS, id, TrResult);
get_weapon_attachment(id, endOrigin);
global_get(glb_v_forward, endOrigin2);
xs_vec_mul_scalar(endOrigin2, 1024.0, endOrigin2);
xs_vec_add(endOrigin, endOrigin2, endOrigin2);
get_tr2(TrResult, TR_vecEndPos, endOrigin);
get_tr2(TrResult, TR_vecPlaneNormal, endOrigin2);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMENTPOINT);
write_short(id);
engfunc(EngFunc_WriteCoord, endOrigin[0]);
engfunc(EngFunc_WriteCoord, endOrigin[1]);
engfunc(EngFunc_WriteCoord, endOrigin[2]);
write_short(g_Beam_SprId);
write_byte(0); // start frame
write_byte(1); // frame rate
write_byte(5); // life
write_byte(60); // line width
write_byte(1); // noise amplitude
write_byte(200); // red
write_byte(200); // green
write_byte(200); // blue
write_byte(255); // brightness
write_byte(0); // scroll speed
message_end();
xs_vec_mul_scalar(endOrigin2, 2.5, endOrigin2);
xs_vec_add(endOrigin, endOrigin2, endOrigin2);
engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, endOrigin2, 0)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, endOrigin[0]) // x
engfunc(EngFunc_WriteCoord, endOrigin[1]) // y
engfunc(EngFunc_WriteCoord, endOrigin[2]) // z
engfunc(EngFunc_WriteCoord, endOrigin[0]) // x axis
engfunc(EngFunc_WriteCoord, endOrigin[1]) // y axis
engfunc(EngFunc_WriteCoord, endOrigin[2] + 555.0) // z axis
write_short(g_exploSpr) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(5) // life
write_byte(70) // width
write_byte(0) // noise
write_byte(255) // red
write_byte(255) // green
write_byte(255) // blue
write_byte(200) // brightness
write_byte(0) // speed
message_end()
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte (TE_SPRITE);
engfunc(EngFunc_WriteCoord, endOrigin[0]);
engfunc(EngFunc_WriteCoord, endOrigin[1]);
engfunc(EngFunc_WriteCoord, endOrigin[2]);
write_short(Burn_SprId_ligting);
write_byte(35);
write_byte(180);
message_end();
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_BEAMDISK);
engfunc(EngFunc_WriteCoord, endOrigin[0]);
engfunc(EngFunc_WriteCoord, endOrigin[1]);
engfunc(EngFunc_WriteCoord, endOrigin[2]);
engfunc(EngFunc_WriteCoord, 0);
engfunc(EngFunc_WriteCoord, 0);
engfunc(EngFunc_WriteCoord, 100);
write_short(sprLightning);
write_byte(0) // byte (starting frame)
write_byte(0) // byte (frame rate in 0.1's)
write_byte(10) // byte (life in 0.1's)
write_byte(0) // byte (line width in 0.1's)
write_byte(100) // byte (noise amplitude in 0.01's)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(255) // byte (brightness)
write_byte(0) // byte (scroll speed in 0.1's)
message_end()
new rocket = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
if (pev_valid(rocket))
{
engfunc(EngFunc_SetModel, rocket, jet_model_rocket);
engfunc(EngFunc_SetSize, rocket, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0});
engfunc(EngFunc_SetOrigin, rocket, startOrigin);
set_pev(rocket, pev_classname, "rocket_entity");
set_pev(rocket, pev_dmg, get_pcvar_float(cvar_array[6]));
set_pev(rocket, pev_owner, id);
velocity_by_aim(id, 3000, startOrigin);
set_pev(rocket, pev_velocity, startOrigin);
new Float:vector[3];
engfunc(EngFunc_VecToAngles, startOrigin, vector);
set_pev(rocket, pev_angles, vector);
set_pev(rocket, pev_flSwimTime, ENT_TYPE_ROCKET);
set_pev(rocket, pev_movetype, MOVETYPE_FLY);
set_pev(rocket, pev_effects, EF_LIGHT);
set_pev(rocket, pev_solid, SOLID_BBOX);
}
free_tr2(TrResult);
} else if ((pev(id, pev_button) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && weapon == CSW_KNIFE && !reload_attack_two[id] && g_current_fuel[id] >= get_pcvar_float(cvar_array[7]))
{
emit_sound(id, CHAN_AUTO, jet_sound_reload, 1.0, ATTN_NORM, 0, PITCH_NORM);
return PLUGIN_CONTINUE;
} else if ((pev(id, pev_button) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && weapon == CSW_KNIFE && g_current_fuel[id] < get_pcvar_float(cvar_array[7]))
{
emit_sound(id, CHAN_AUTO, jet_sound_no_fuel, 1.0, ATTN_NORM, 0, PITCH_NORM);
//colored_print(id, "^x04[ZP]^x01 Not enough energy required ^x04%.1f^x01.", get_pcvar_float(cvar_array[7]));
return PLUGIN_CONTINUE;
}
if ((pev(id, pev_button) & IN_DUCK) && !(pev(id, pev_flags) & FL_ONGROUND) && (pev(id, pev_button) & IN_JUMP) && g_current_fuel[id] > 0.3 && get_user_weapon(id) == CSW_KNIFE)
{
new Float:velocity[3], Float:Speed;
pev(id, pev_velocity, velocity);
Speed = velocity[2] + random_float(30.0, 35.0);
velocity_by_aim(id, 250, velocity);
velocity[2] = Speed > 250.0 ? 250.0 : Speed;
set_pev(id, pev_velocity, velocity);
if (fly_sound[id])
{
if (task_exists(id+TASK_SOUND_FLY))
remove_task(id+TASK_SOUND_FLY);
emit_sound(id, CHAN_AUTO, jet_sound_flight, 1.0, ATTN_NORM, 0, PITCH_NORM);
set_task(0.4, "sound_replace", id+TASK_SOUND_FLY);
fly_sound[id] = false;
}
if (!unlimited_energy[id])
g_current_fuel[id] -= 0.3;
}
return PLUGIN_CONTINUE;
}
public sound_replace(taskid)
{
new id = taskid - TASK_SOUND_FLY;
fly_sound[id] = true;
if (task_exists(id+TASK_SOUND_FLY))
remove_task(id+TASK_SOUND_FLY);
return 1;
}
public end_attack_1(taskid)
{
new id = taskid - TASK_END_ATTACK_1;
emit_sound(id, CHAN_AUTO, jet_sound_attack_1_end, 1.0, ATTN_NORM, 0, PITCH_NORM);
if (task_exists(id+TASK_END_ATTACK_1))
remove_task(id+TASK_END_ATTACK_1);
return 1;
}
public func_reload_attack_one(taskid)
{
new id = taskid - TASK_RELOAD_ATTACK_ONE;
reload_attack_one[id] = true;
if (task_exists(id+TASK_RELOAD_ATTACK_ONE))
remove_task(id+TASK_RELOAD_ATTACK_ONE);
return 1;
}
public func_reload_attack_two(taskid)
{
new id = taskid - TASK_RELOAD_ATTACK_TWO;
reload_attack_two[id] = true;
emit_sound(id, CHAN_AUTO, jet_sound_attack_2_activated, 1.0, ATTN_NORM, 0, PITCH_NORM);
if (task_exists(id+TASK_RELOAD_ATTACK_TWO))
remove_task(id+TASK_RELOAD_ATTACK_TWO);
return 1;
}
public fw_emitSound(entity, channel, const sample[]) {
if(is_user_alive(entity)) {
new clip,ammo
new weapon = get_user_weapon(entity,clip,ammo)
if(jetpack[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 CurWeaponModel(id)
{
if (zp_get_user_zombie(id) || zp_get_user_nemesis(id) || zp_get_user_survivor(id))
return PLUGIN_HANDLED;
if (jetpack[id])
{
new clip, ammo;
new weapon = get_user_weapon(id, clip, ammo);
if (weapon == CSW_KNIFE)
{
check_model(id);
if (task_exists(id+TASK_JET_HUD))
{
remove_task(id+TASK_JET_HUD);
set_task(HUD_TIME, "show_hud", id+TASK_JET_HUD, "", 0, "b");
}
if (task_exists(id+TASK_JET_REGEN_ENERGY) && !unlimited_energy[id])
{
remove_task(id+TASK_JET_REGEN_ENERGY);
set_task(REGEN_TIME, "regen_energy", id+TASK_JET_REGEN_ENERGY, "", 0, "b");
}
client_cmd(id, "spk %s", jet_sound_give);
}
return PLUGIN_CONTINUE;
}
return PLUGIN_CONTINUE;
}
public show_hud(taskid)
{
new id = taskid - TASK_JET_HUD;
set_hudmessage(200, 85, 190, 0.85, -0.8, 0, 6.0, 0.4, 0.0, 0.0, -1);
ShowSyncHudMsg(id, g_MsgHudID, "[Energy: %.1f]^n[Laser: %s]^n[Energy impact: %s]", g_current_fuel[id],
reload_attack_one[id] == true ? "Full" : "Loading...",
reload_attack_two[id] == true ? "Full" : "Loading...");
}
public fw_touch(prt, ptd)
{
if (pev_valid(prt))
{
new classname[32];
pev(prt, pev_classname, classname, charsmax(classname));
if (equal(classname, "zp_jp_jetpack"))
{
new id = ptd;
if (id > 0 && id < 34)
{
if (!jetpack[id] && !zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id) && is_user_alive(id))
{
jetpack[id] = true;
reload_attack_one[id] = false;
reload_attack_two[id] = false;
set_task(get_pcvar_float(cvar_array[2]), "func_reload_attack_one", id+TASK_RELOAD_ATTACK_ONE);
set_task(get_pcvar_float(cvar_array[5]), "func_reload_attack_two", id+TASK_RELOAD_ATTACK_TWO);
if (unlimited_energy[id])
{
g_current_fuel[id] = get_pcvar_float(cvar_array[0]);
//colored_print(id, "^x04[ZP]^x01 You have bought endless energy.");
//colored_print(id, "^x04[ZP]^x01 Energy charge is charged on %d.", get_pcvar_num(cvar_array[0]));
}
else if (!unlimited_energy[id])
{
set_task(REGEN_TIME, "regen_energy", id+TASK_JET_REGEN_ENERGY, "", 0, "b");
g_current_fuel[id] = 0.0;
}
client_cmd(id, "spk %s", jet_sound_give);
engclient_cmd(id,"weapon_knife"), check_model(id);
set_task(1.0, "show_hud", id+TASK_JET_HUD, "", 0, "b");
engfunc(EngFunc_RemoveEntity, prt);
}
}
}
else if(equal(classname, "rocket_entity"))
{
static Float:fOrigin[3];
pev(prt, pev_origin, fOrigin);
static attacker; attacker = pev(prt, pev_owner);
if (!is_user_connected(attacker))
{
engfunc(EngFunc_RemoveEntity, prt);
return FMRES_IGNORED;
}
if (pev_valid(ptd) && !is_user_connected(ptd))
{
static szClassName[32];
pev(ptd, pev_classname, szClassName, charsmax(szClassName));
if(equal(szClassName, "func_breakable") && (pev(ptd, pev_solid) != SOLID_NOT))
dllfunc(DLLFunc_Use, ptd, prt);
}
static victim; victim = -1;
while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, 300.0)) != 0)
{
if (is_user_connected(victim) && zp_get_user_zombie(victim))
{
static Float:origin[3], Float:dist, Float:damage;
pev(victim, pev_origin, origin);
dist = get_distance_f(fOrigin, origin);
damage = get_pcvar_float(cvar_array[6]) - (get_pcvar_float(cvar_array[6]) / 300.0) * dist;
if (damage > 0.0)
{
ExecuteHamB(Ham_TakeDamage, victim, prt, attacker, damage, DMG_BULLET);
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0, 0, 0}, victim);
write_short(1<<10);
write_short(1<<10);
write_short(0x0000);
write_byte(200);
write_byte(200);
write_byte(200);
write_byte(75);
message_end();
vector_angle_up(victim, 45.0, 65.0);
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0);
write_byte(TE_IMPLOSION);
engfunc(EngFunc_WriteCoord, origin[0]);
engfunc(EngFunc_WriteCoord, origin[1]);
engfunc(EngFunc_WriteCoord, origin[2]);
write_byte(100);
write_byte(50);
write_byte(5);
message_end();
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte (TE_SPRITE);
engfunc(EngFunc_WriteCoord, origin[0]);
engfunc(EngFunc_WriteCoord, origin[1]);
engfunc(EngFunc_WriteCoord, origin[2]);
write_short(Burn_SprId_Center);
write_byte(3);
write_byte(180);
message_end();
engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, origin, 0)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, origin[0]) // x
engfunc(EngFunc_WriteCoord, origin[1]) // y
engfunc(EngFunc_WriteCoord, origin[2]) // z
engfunc(EngFunc_WriteCoord, origin[0]) // x axis
engfunc(EngFunc_WriteCoord, origin[1]) // y axis
engfunc(EngFunc_WriteCoord, origin[2] + 555.0) // z axis
write_short(g_exploSpr) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(1) // life
write_byte(25) // width
write_byte(0) // noise
write_byte(255) // red
write_byte(255) // green
write_byte(255) // blue
write_byte(200) // brightness
write_byte(0) // speed
message_end()
}
}
}
engfunc(EngFunc_RemoveEntity, prt);
}
}
return FMRES_IGNORED;
}
public DeathMessage()
{
new victim = read_data(2);
if (jetpack[victim])
{
drop_jetpack(victim);
jetpack[victim] = false;
reload_attack_one[victim] = false;
g_current_fuel[victim] = 0.0;
fly_sound[victim] = false;
reload_attack_two[victim] = false;
if (task_exists(victim+TASK_END_ATTACK_1))
remove_task(victim+TASK_END_ATTACK_1);
if (task_exists(victim+TASK_JET_HUD))
remove_task(victim+TASK_JET_HUD);
if (task_exists(victim+TASK_RELOAD_ATTACK_ONE))
remove_task(victim+TASK_RELOAD_ATTACK_ONE);
if (task_exists(victim+TASK_JET_REGEN_ENERGY))
remove_task(victim+TASK_JET_REGEN_ENERGY);
if (task_exists(victim+TASK_SOUND_FLY))
remove_task(victim+TASK_SOUND_FLY);
if (task_exists(victim+TASK_SOUND_NO_FUEL))
remove_task(victim+TASK_SOUND_NO_FUEL);
if (task_exists(victim+TASK_RELOAD_ATTACK_TWO))
remove_task(victim+TASK_RELOAD_ATTACK_TWO);
}
return PLUGIN_CONTINUE;
}
public check_model(id)
{
set_pev(id, pev_viewmodel2, jet_model_v);
set_pev(id, pev_weaponmodel2, jet_model_p);
}
public cmdDrop(id)
{
if (jetpack[id])
{
new clip, ammo;
new weapon = get_user_weapon(id, clip, ammo);
if (weapon == CSW_KNIFE)
{
drop_jetpack(id);
client_cmd(id, "spk %s", jet_sound_drop);
if (task_exists(id+TASK_END_ATTACK_1))
remove_task(id+TASK_END_ATTACK_1);
if (task_exists(id+TASK_JET_HUD))
remove_task(id+TASK_JET_HUD);
if (task_exists(id+TASK_RELOAD_ATTACK_ONE))
remove_task(id+TASK_RELOAD_ATTACK_ONE);
if (task_exists(id+TASK_JET_REGEN_ENERGY))
remove_task(id+TASK_JET_REGEN_ENERGY);
if (task_exists(id+TASK_SOUND_FLY))
remove_task(id+TASK_SOUND_FLY);
if (task_exists(id+TASK_SOUND_NO_FUEL))
remove_task(id+TASK_SOUND_NO_FUEL);
if (task_exists(id+TASK_RELOAD_ATTACK_TWO))
remove_task(id+TASK_RELOAD_ATTACK_TWO);
jetpack[id] = false;
reload_attack_one[id] = false;
g_current_fuel[id] = 0.0;
fly_sound[id] = false;
reload_attack_two[id] = false;
if (!zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id))
{
set_pev(id, pev_viewmodel2, "models/v_knife.mdl");
set_pev(id, pev_weaponmodel2, "models/p_knife.mdl");
}
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
}
public drop_jetpack(id) {
if(jetpack[id]) {
new Float:Aim[3],Float:origin[3]
velocity_by_aim(id, 70, Aim);
pev(id, pev_origin, origin);
origin[0] += Aim[0];
origin[1] += Aim[1];
new jetpack_target = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
set_pev(jetpack_target, pev_classname, "zp_jp_jetpack");
engfunc(EngFunc_SetModel, jetpack_target, jet_model_w);
engfunc(EngFunc_SetSize, jetpack_target, Float:{-16.0,-16.0,-16.0}, Float:{16.0,16.0,16.0});
set_pev(jetpack_target, pev_solid, 1);
set_pev(jetpack_target, pev_movetype, 6);
set_pev(jetpack_target, pev_origin, origin);
jetpack[id] = false;
}
return 1;
}
public zp_extra_item_selected(id, itemid)
{
if (itemid == g_jet_item)
{
new clip, ammo;
new weapon = get_user_weapon(id, clip, ammo);
if (jetpack[id])
{
//colored_print(id, "^x04[ZP]^x01 You already have a Jetpack + Tesla.");
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + cost);
return PLUGIN_HANDLED;
}
jetpack[id] = true;
reload_attack_one[id] = true;
g_current_fuel[id] = get_pcvar_float(cvar_array[0]);
fly_sound[id] = true;
reload_attack_two[id] = true;
if (!unlimited_energy[id])
set_task(REGEN_TIME, "regen_energy", id+TASK_JET_REGEN_ENERGY, "", 0, "b");
client_cmd(id, "spk %s", jet_sound_give);
if (weapon == CSW_KNIFE)
{
check_model(id);
set_task(HUD_TIME, "show_hud", id+TASK_JET_HUD, "", 0, "b");
}
else
{
engclient_cmd(id,"weapon_knife"), check_model(id);
set_task(HUD_TIME, "show_hud", id+TASK_JET_HUD, "", 0, "b");
}
//colored_print(id, "^x04[ZP]^x01 You have received a jetpack + tesla.");
}
if (itemid == g_item_unlimited)
{
if (!jetpack[id])
{
//colored_print(id, "^x04[ZP]^x01 To get infinite energy, first buy Jetpack + Tesla.");
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + cost_unlimited);
return PLUGIN_HANDLED;
}
if (unlimited_energy[id])
{
//colored_print(id, "^x04[ZP]^x01 You already have this effect.");
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + cost_unlimited);
return PLUGIN_HANDLED;
}
unlimited_energy[id] = true;
//colored_print(id, "^x04[ZP]^x01 You have acquired endless energy.");
}
return PLUGIN_CONTINUE;
}
public regen_energy(taskid)
{
new id = taskid - TASK_JET_REGEN_ENERGY;
if (g_current_fuel[id] > get_pcvar_float(cvar_array[0]))
{
g_current_fuel[id] = get_pcvar_float(cvar_array[0]);
return;
}
if (g_current_fuel[id] < get_pcvar_float(cvar_array[0]))
{
if (pev(id, pev_flags) & FL_ONGROUND)
g_current_fuel[id] += get_pcvar_float(cvar_array[4]);
}
return;
}
public zp_user_infected_post(id, infector, nemesis)
{
if (nemesis || zp_get_user_zombie(id))
cmdDrop(id);
}
stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
{
static Float:vfEnd[3], viEnd[3];
get_user_origin(id, viEnd, 3) ;
IVecFVec(viEnd, vfEnd);
static Float:fOrigin[3], Float:fAngle[3];
pev(id, pev_origin, fOrigin);
pev(id, pev_view_ofs, fAngle);
xs_vec_add(fOrigin, fAngle, fOrigin) ;
static Float:fAttack[3];
xs_vec_sub(vfEnd, fOrigin, fAttack);
xs_vec_sub(vfEnd, fOrigin, fAttack);
static Float:fRate;
fRate = fDis / vector_length(fAttack);
xs_vec_mul_scalar(fAttack, fRate, fAttack);
xs_vec_add(fOrigin, fAttack, output);
}
stock get_Postion(id, Float:forw, Float:right, Float:up, Float:vStart[])
{
static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
pev(id, pev_origin, vOrigin);
pev(id, pev_view_ofs,vUp);
xs_vec_add(vOrigin,vUp,vOrigin);
pev(id, pev_v_angle, vAngle);
angle_vector(vAngle, ANGLEVECTOR_FORWARD, vForward);
angle_vector(vAngle, ANGLEVECTOR_RIGHT, vRight);
angle_vector(vAngle, ANGLEVECTOR_UP, vUp);
vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up;
vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up;
vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up;
}
stock do_attack(Attacker, Victim, Inflictor, Float:fDamage)
{
fake_take_damage(Attacker, Victim, fDamage, Inflictor);
}
stock fake_take_damage(iAttacker, iVictim, Float:fDamage, iInflictor = 0, iDamageBit = (DMG_NEVERGIB | DMG_BULLET))
{
iInflictor = (!iInflictor) ? iAttacker : iInflictor;
ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, fDamage, iDamageBit);
}
stock vector_angle_up(target, Float:vec_min, Float:vec_max)
{
new Float:vector[3];
pev(target, pev_velocity, vector);
vector[2] += random_float(vec_min, vec_max);
set_pev(target, pev_velocity, vector);
}
public native_is_jet(id)
{
return jetpack[id];
}
Versiune: 1.6
Link oficial: -
Instalare:
1. Fisierul zombimod_extra_jetpack.sma il puneti in addons/amxmodx/scripting
2. Fisierul zombimod_extra_jetpack.amxx il puneti in addons/amxmodx/plugins
3. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma:
Code: Select all
zombimod_extra_jetpack.amxx
Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg):
Code: Select all
cvar_array[0] = register_cvar("zp_jet_fuel", "100");
cvar_array[1] = register_cvar("zp_jet_attack_damage_1", "250.0");
cvar_array[2] = register_cvar("zp_jet_reload_attack_1", "1.0");
cvar_array[3] = register_cvar("zp_jet_fuel_decrease_attack_1", "10");
cvar_array[4] = register_cvar("zp_jet_regen_fuel", "1.5"); // 0.2 milisecond
cvar_array[5] = register_cvar("zp_jet_reload_attack_2", "15.0");
cvar_array[6] = register_cvar("zp_jet_attack_damage_2", "750.0");
cvar_array[7] = register_cvar("zp_jet_fuel_decrease_attack_2", "50");