Raised This Month: $32 Target: $400
 8% 

Bug Report Jetpack Bug


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Repsol
Junior Member
Join Date: Jun 2020
Old 06-12-2020 , 05:06   Jetpack Bug
Reply With Quote #1

please help

Code:
L 06/12/2020 - 13:33:27: [AMXX] Displaying debug trace (plugin "zp_extra_jetpack_bazooka32.amxx", version "3.2")
L 06/12/2020 - 13:33:27: [AMXX] Run time error 10: native error (native "zp_get_user_zombie")
L 06/12/2020 - 13:33:27: [AMXX]    [0] zp_extra_jetpack_bazooka32.sma::jp_forward (line 173)
L 06/12/2020 - 13:33:27: [AMXX]    [1] zp_extra_jetpack_bazooka32.sma::fm_startFrame (line 167)
L 06/12/2020 - 13:33:27: [ZP] Invalid Player (1)
PHP Code:
/*|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|*
*. 
* [ZP] Extra Item Jetpack+Bazooka 3.2
*
*|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|*
*
* Original Plugin:
*           AMX Jetpack
*            BY
*            (c) Copyright 2005, KleeneX 
*            This file is provided as is (no warranties)
*
* CREDITS:
*             KleeneX   |>>>|  Original Plugin (http://forums.alliedmods.net/showthread.php?p=119727)
*            Bad_Bud   |>>>|  TS_Jetpack (http://forums.alliedmods.net/showthread.php?t=55709&highlight=TS_Jetpack)
*             MeRcyLeZZ |>>>|  bug fix, some code from [ZP] Stamina (http://forums.alliedmods.net/showpost.php?p=675697&postcount=1300)
*              mogel     |>>>|  Icon code form Predator-Mod (http://forums.alliedmods.net/showthread.php?t=67305&highlight=predator)
*
*|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|*
*
* Plagued Version 3.2 by B!gBud
*

* Allows Humans buy a Jetpack+Bazooka in Zombie Plague [4.0]

*
* CVARS:    
*    zp_jetpack 2         // 0 = Off / 1 = have Knive & Hold ATTACK / 2 = Hold JUMP and DUCK      
*
*    zp_jp_forward_speed 300 // Set the forward speed(when you fly and press FORWARD)
*    zp_jp_up_speed 35    // Set the UP speed(when you press ATTACK and JUMP up)
*    zp_jp_accelerate 100    // How fast you get to the max ForwardSpeed
*
*    zp_jp_rocket_delay 12    // How long you got to wait to shoot the next rocket(in sec.)
*    zp_jp_rocket_speed 1500 // Set the rocket Speed
*    zp_jp_rocket_damage 1500    // Set the max rocket Damage
*    zp_jp_damage_radius 350 // Set the radius of a rocket explosion
*    
*    zp_jp_max_engery 100     // Set the max Energy for the Jetpack
*    zp_jp_engery 10     // Set how many Energy need the JP to fly (time interval is "zp_jp_energy_cal")
*    zp_jp_regain_energy 3    // Set how fast you get JP_Energy back, when you on the ground (time interval is "zp_jp_energy_cal")
*    zp_jp_energy_cal 1.0     // Set time interval for "zp_jp_engery" & "zp_jp_regain_energy"
*    zp_jp_oneround 1    // 0 = jetpack stay on a new round if someone alive / 1 = jetpack for One Round only
*
*|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|*/

#include <amxmodx>
#include <fun>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>

#define PLUGINNAME        "Extra Item Jetpack+Bazooka"
#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 30 // 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 flameexplosiontrailwhite
new g_flyEnergy[33], hasjet[33]
new 
cvar_jetpackcvar_jetpackSpeedcvar_jetpackUpSpeedcvar_jetpackAcrate ,cvar_RocketDelaycvar_RocketSpeedcvar_RocketDmgcvar_Dmg_rangecvar_fly_max_engerycvar_fly_engerycvar_regain_energyg_item_jetpackcvar_cal_timecvar_oneround


public plugin_init() {
    
register_plugin(PLUGINNAMEVERSIONAUTHOR)
    
    
g_item_jetpack zp_register_extra_item("Jetpack+Bazooka (one Round)"JETPACK_COSTZP_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 
idid <= 32id++) hasjet[id] = 0g_flyEnergy[id] = 0,    fly[id] = false;
    }
}

public 
fm_startFrame(){
        
    
gltime get_gametime()
    static 
player
    
for (player 1player <= 32player++)
    {
        
jp_forward(player)
    }
}

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(playerpev_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) == && !(pev(playerpev_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({02550}, 1player); // 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({2552550}, 1player); // 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({2552150}, 2player);
    }
    else if((
g_flyEnergy[player] > 0) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.3)){
        
Icon_Energy({25500}, 1player);
    }
    
    return 
FMRES_IGNORED
}

public 
jp_energy(player) {
            
        if (!(
pev(playerpev_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) == && !(pev(playerpev_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(playerpev_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?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(player10Aim)
        
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(playerpev_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
(rocketEV_SZ_classname"zp_jp_rocket")
        
entity_set_model(rocketROCKET_MDL)
        
        
entity_set_size(rocketFloat:{0.00.00.0}, Float:{0.00.00.0})
        
entity_set_int(rocketEV_INT_movetypeMOVETYPE_FLY)
        
entity_set_int(rocketEV_INT_solidSOLID_BBOX)
        
        new 
Float:vSrc[3]
        
entity_get_vector(playerEV_VEC_originvSrc)
        
        new 
Float:Aim[3],Float:origin[3]
        
VelocityByAim(player64Aim)
        
entity_get_vector(player,EV_VEC_origin,origin)
        
        
vSrc[0] += Aim[0]
        
vSrc[1] += Aim[1]
        
entity_set_origin(rocketvSrc)
        
        new 
Float:velocity[3], Float:angles[3]
        
VelocityByAim(playerget_pcvar_num(cvar_RocketSpeed), velocity)
        
        
entity_set_vector(rocketEV_VEC_velocityvelocity)
        
vector_to_angle(velocityangles)
        
entity_set_vector(rocketEV_VEC_anglesangles)
        
entity_set_edict(rocket,EV_ENT_owner,player)
        
entity_set_float(rocketEV_FL_takedamage1.0)
        
        
message_begin(MSG_BROADCASTSVC_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(rocketCHAN_WEAPONROCKET_SOUND1.0ATTN_NORM0PITCH_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(entitychannel, 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], modeplayer) {
            
    
message_begin(MSG_ONE_UNRELIABLEget_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], modeplayer) {
    
    
Icon_Show("item_longjump"colormodeplayer)
}

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_EmitSoundplayerCHAN_WEAPONgetrocket1.0ATTN_NORM0PITCH_NORM)
        
client_print(playerprint_center"[Bazooka] Reloaded & Ready !!!")
        
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,"How to use:^n")
    
dpos += format(jpmotd[dpos],2047-dpos,"=============^n^n")
    if(
get_pcvar_num(cvar_jetpack) == 1) {
        
dpos += format(jpmotd[dpos],2047-dpos,"- choose/have Knive & use/hold ATTACK to fly^n")
        
dpos += format(jpmotd[dpos],2047-dpos,"^n")
        
dpos += format(jpmotd[dpos],2047-dpos,"- choose/have Knive(Bazooka) & use ATTACK2 to shoot a Rocket^n^n")
    }
    else if(
get_pcvar_num(cvar_jetpack) == 2){
        
dpos += format(jpmotd[dpos],2047-dpos,"- use/hold JUMP & DUCK to flyn")
        
dpos += format(jpmotd[dpos],2047-dpos,"^n")
        
dpos += format(jpmotd[dpos],2047-dpos,"choose/have Knive(Bazooka) & use ATTACK2 to shoot a Rocket^n^n")
    }
    
dpos += format(jpmotd[dpos],2047-dpos,"INFO's^n")
    
dpos += format(jpmotd[dpos],2047-dpos,"MAX Energy set to : <b>%i Units</b>^n^n"g_max)
    
dpos += format(jpmotd[dpos],2047-dpos,"Jetpack need %i Units per 1 Sec. to work^n"g_lost)
    
dpos += format(jpmotd[dpos],2047-dpos,"Energy regain %i Units per 1 Sec. (when you are on the ground)^n^n"g_back)
    
dpos += format(jpmotd[dpos],2047-dpos,"MAX Rocket Dmg set to: <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,"-Have Fun!^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(player64Aim)
        
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({2552550}, 0player)
        
Icon_Energy({1281280}, 0player )
        
Icon_Energy({02550}, 0player)
        
        
hasjet[player] = 0
        rocket
[player] = false
    
}    
}

public 
pfn_touch(ptrptd) {
    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 && 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(ptrEV_VEC_originfOrigin)
            
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(playerinfector){
    
    
Icon_Energy({02550}, 0player);
    
cmdDrop(player);
    
hasjet[player] = 0;
    
g_flyEnergy[player] = 0;
    
rocket[player] = false;
}

public 
zp_extra_item_selected(playeritemid){
    

    new 
clip,ammo
    
new weapon get_user_weapon(player,clip,ammo)
        
    if (
itemid == g_item_jetpack)
    {
        
client_print(playerprint_chat"[ZP] say /jphelp for Display the help page")
        
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 
133i++) {
        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(killervictimweapon[], headshot)
{
// code from MeRcyLeZZ
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
    
ExecuteHamB(Ham_Killedvictimkiller2// set last param to 2 if you want victim to gib
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)

    
    
message_begin(MSG_BROADCASTget_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(killerkname31)
    
get_user_team(killerkteam9)
    
get_user_authid(killerkauthid31)
 
    
get_user_name(victimvname31)
    
get_user_team(victimvteam9)
    
get_user_authid(victimvauthid31)
        
    
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^""
    
knameget_user_userid(killer), kauthidkteam
     
vnameget_user_userid(victim), vauthidvteamweapon)

     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)

Repsol is offline
sayf118
Member
Join Date: Jul 2017
Old 06-13-2020 , 04:46   Re: Jetpack Bug
Reply With Quote #2

PHP Code:
#include <amxmodx>
#include <fun>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>

#define PLUGINNAME        "Extra Item Jetpack+Bazooka"
#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 30 // 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 flameexplosiontrailwhite
new g_flyEnergy[33], hasjet[33]
new 
cvar_jetpackcvar_jetpackSpeedcvar_jetpackUpSpeedcvar_jetpackAcrate ,cvar_RocketDelaycvar_RocketSpeedcvar_RocketDmgcvar_Dmg_rangecvar_fly_max_engerycvar_fly_engerycvar_regain_energyg_item_jetpackcvar_cal_timecvar_oneround

new frame[33]

public 
plugin_init() {
    
register_plugin(PLUGINNAMEVERSIONAUTHOR)
    
    
g_item_jetpack zp_register_extra_item("Jetpack+Bazooka (one Round)"JETPACK_COSTZP_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_PlayerPreThink"fm_prethink")
    
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 
idid <= 32id++) hasjet[id] = 0g_flyEnergy[id] = 0,    fly[id] = false;
    }
}

public 
fm_startFrame(){
        
    
gltime get_gametime()
    static 
player
    
for (player 1player <= 32player++)
    {
        
frame[player]++
    }
}

public 
fm_prethink(id) {

    if(
is_user_alive(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(playerpev_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) == && !(pev(playerpev_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({02550}, 1player); // 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({2552550}, 1player); // 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({2552150}, 2player);
    }
    else if((
g_flyEnergy[player] > 0) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.3)){
        
Icon_Energy({25500}, 1player);
    }
    
    return 
FMRES_IGNORED
}

public 
jp_energy(player) {
            
        if (!(
pev(playerpev_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) == && !(pev(playerpev_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(playerpev_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?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(player10Aim)
        
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(playerpev_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,EV_INT_movetype,6)
                    
set_pev(playerpev_frame0.9)
                }
                    
                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
(rocketEV_SZ_classname"zp_jp_rocket")
        
entity_set_model(rocketROCKET_MDL)
        
        
entity_set_size(rocketFloat:{0.00.00.0}, Float:{0.00.00.0})
        
entity_set_int(rocketEV_INT_movetypeMOVETYPE_FLY)
        
entity_set_int(rocketEV_INT_solidSOLID_BBOX)
        
        new 
Float:vSrc[3]
        
entity_get_vector(playerEV_VEC_originvSrc)
        
        new 
Float:Aim[3],Float:origin[3]
        
VelocityByAim(player64Aim)
        
entity_get_vector(player,EV_VEC_origin,origin)
        
        
vSrc[0] += Aim[0]
        
vSrc[1] += Aim[1]
        
entity_set_origin(rocketvSrc)
        
        new 
Float:velocity[3], Float:angles[3]
        
VelocityByAim(playerget_pcvar_num(cvar_RocketSpeed), velocity)
        
        
entity_set_vector(rocketEV_VEC_velocityvelocity)
        
vector_to_angle(velocityangles)
        
entity_set_vector(rocketEV_VEC_anglesangles)
        
entity_set_edict(rocket,EV_ENT_owner,player)
        
entity_set_float(rocketEV_FL_takedamage1.0)
        
        
message_begin(MSG_BROADCASTSVC_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(rocketCHAN_WEAPONROCKET_SOUND1.0ATTN_NORM0PITCH_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(entitychannel, 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], modeplayer) {
            
    
message_begin(MSG_ONE_UNRELIABLEget_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], modeplayer) {
    
    
Icon_Show("item_longjump"colormodeplayer)
}

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_EmitSoundplayerCHAN_WEAPONgetrocket1.0ATTN_NORM0PITCH_NORM)
        
client_print(playerprint_center"[Bazooka] Reloaded & Ready !!!")
        
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,"How to use:^n")
    
dpos += format(jpmotd[dpos],2047-dpos,"=============^n^n")
    if(
get_pcvar_num(cvar_jetpack) == 1) {
        
dpos += format(jpmotd[dpos],2047-dpos,"- choose/have Knive & use/hold ATTACK to fly^n")
        
dpos += format(jpmotd[dpos],2047-dpos,"^n")
        
dpos += format(jpmotd[dpos],2047-dpos,"- choose/have Knive(Bazooka) & use ATTACK2 to shoot a Rocket^n^n")
    }
    else if(
get_pcvar_num(cvar_jetpack) == 2){
        
dpos += format(jpmotd[dpos],2047-dpos,"- use/hold JUMP & DUCK to flyn")
        
dpos += format(jpmotd[dpos],2047-dpos,"^n")
        
dpos += format(jpmotd[dpos],2047-dpos,"choose/have Knive(Bazooka) & use ATTACK2 to shoot a Rocket^n^n")
    }
    
dpos += format(jpmotd[dpos],2047-dpos,"INFO's^n")
    
dpos += format(jpmotd[dpos],2047-dpos,"MAX Energy set to : <b>%i Units</b>^n^n"g_max)
    
dpos += format(jpmotd[dpos],2047-dpos,"Jetpack need %i Units per 1 Sec. to work^n"g_lost)
    
dpos += format(jpmotd[dpos],2047-dpos,"Energy regain %i Units per 1 Sec. (when you are on the ground)^n^n"g_back)
    
dpos += format(jpmotd[dpos],2047-dpos,"MAX Rocket Dmg set to: <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,"-Have Fun!^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(player64Aim)
        
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({2552550}, 0player)
        
Icon_Energy({1281280}, 0player )
        
Icon_Energy({02550}, 0player)
        
        
hasjet[player] = 0
        rocket
[player] = false
    
}    
}

public 
pfn_touch(ptrptd) {
    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 && 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(ptrEV_VEC_originfOrigin)
            
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(playerinfector){
    
    
Icon_Energy({02550}, 0player);
    
cmdDrop(player);
    
hasjet[player] = 0;
    
g_flyEnergy[player] = 0;
    
rocket[player] = false;
}

public 
zp_extra_item_selected(playeritemid){
    

    new 
clip,ammo
    
new weapon get_user_weapon(player,clip,ammo)
        
    if (
itemid == g_item_jetpack)
    {
        
client_print(playerprint_chat"[ZP] say /jphelp for Display the help page")
        
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 
133i++) {
        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(killervictimweapon[], headshot)
{
// code from MeRcyLeZZ
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
    
ExecuteHamB(Ham_Killedvictimkiller2// set last param to 2 if you want victim to gib
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)

    
    
message_begin(MSG_BROADCASTget_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(killerkname31)
    
get_user_team(killerkteam9)
    
get_user_authid(killerkauthid31)
 
    
get_user_name(victimvname31)
    
get_user_team(victimvteam9)
    
get_user_authid(victimvauthid31)
        
    
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^""
    
knameget_user_userid(killer), kauthidkteam
     
vnameget_user_userid(victim), vauthidvteamweapon)

     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)


Last edited by sayf118; 06-13-2020 at 04:47.
sayf118 is offline
sayf118
Member
Join Date: Jul 2017
Old 06-13-2020 , 04:47   Re: Jetpack Bug
Reply With Quote #3

if u want the best jetpack source code tell me i have always the best things.........
sayf118 is offline
Repsol
Junior Member
Join Date: Jun 2020
Old 06-13-2020 , 05:29   Re: Jetpack Bug
Reply With Quote #4

Quote:
Originally Posted by sayf118 View Post
if u want the best jetpack source code tell me i have always the best things.........
Do you have a better version?
Repsol is offline
sayf118
Member
Join Date: Jul 2017
Old 06-13-2020 , 17:00   Re: Jetpack Bug
Reply With Quote #5

PHP Code:
#include <amxmodx>
#include <fun>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombie_plague_advance>
#include <colorchat>
#include <amxmisc>



// HUD messages
const Float:HUD_EVENT_X = -1.0
const Float:HUD_EVENT_Y 0.17
const Float:HUD_INFECT_X 0.05
const Float:HUD_INFECT_Y 0.45
const Float:HUD_SPECT_X = -1.0
const Float:HUD_SPECT_Y 0.8
const Float:HUD_STATS_X 0.02
const Float:HUD_STATS_Y 0.9

#pragma tabsize 0

#define PLUGINNAME        "[ZP] Extra: Jetpack+Bazooka"
#define VERSION            "1.0"
#define AUTHOR            "SAYFZM"

#define MAX_PLAYERS    32

#define ACCESS_LEVEL    ADMIN_LEVEL_A

#define TE_EXPLOSION    3
#define TE_BEAMFOLLOW    22
#define TE_BEAMCYLINDER    21

#define JETPACK_COST  30 // set how may ammopacks the Jatpack+Rocket cost

new ROCKET_MDL[64] = "models/rpgrocket.mdl"
new ROCKET_SOUND[64] = "zombie_plague/rocket_fire.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 frame[33];

new const 
Float:g_flCoords[][] = 
{
    {
0.500.40},
    {
0.560.44},
    {
0.600.50},
    {
0.560.56},
    {
0.500.60},
    {
0.440.56},
    {
0.400.50},
    {
0.440.44}
}

new 
g_iPlayerPos[MAX_PLAYERS+1]
new 
g_iEventsHudmessage
new g_buyabletimecvar_buy_delay

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 flameexplosiontrailwhite
new g_flyEnergy[33], hasjet[33]
new 
cvar_jetpackcvar_jetpackSpeedcvar_RocketDmgcvar_SniperDmgcvar_Dmg_rangecvar_jetpackUpSpeedcvar_jetpackAcrate ,cvar_RocketDelaycvar_RocketSpeedcvar_fly_max_engerycvar_fly_engerycvar_regain_energyg_item_jetpackcvar_cal_timecvar_oneround


public plugin_init() {
    
register_plugin(PLUGINNAMEVERSIONAUTHOR)
    
    
g_item_jetpack zp_register_extra_item("Jetpack + Bazooka"JETPACK_COSTZP_TEAM_HUMAN)
    
register_clcmd("drop","cmdDrop")
        
    new 
ver[64]
    
format(ver,63,"%s v%s",PLUGINNAME,VERSION)
    
register_cvar("zp_jp_version",ver,FCVAR_SERVER)    
    
    
cvar_jetpack register_cvar("zp_jp_jetpack""2")
    
    
cvar_jetpackSpeed=register_cvar("zp_jp_forward_speed","350.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","1700")
    
cvar_RocketDmg=register_cvar("zp_jp_rocket_damage","950")
    
cvar_SniperDmg=register_cvar("zp_sniper_damage","4000")
    
cvar_Dmg_range=register_cvar("zp_jp_damage_radius","600")    
    
    
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_PlayerPreThink"fm_prethink")
    
register_forward(FM_EmitSound"emitsound")
    
    
    
register_clcmd("zp_jetpack""cmdJetpack"ADMIN_KICK"[ZP] zp_jetpack <name>")
    
register_clcmd("zp_drop_jetpack""cmdDropJetpack"ADMIN_KICK"[ZP] zp_drop_jetpack <name>")

    
    
g_iEventsHudmessage CreateHudSyncObj(0);
    
    
    
set_task(1.0,"regain_dropped")


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")

cvar_buy_delay register_cvar("zp_extra_item_delay""2.0")

}

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()
{
g_buyabletime false
set_task
(get_pcvar_float(cvar_buy_delay), "canbuy");

    
remove_jetpacks();
    if (
get_pcvar_num(cvar_oneround) == 1) {
        for (new 
idid <= 32id++)
        {
        
hasjet[id] = 0
        g_flyEnergy
[id] = 0
        fly
[id] = false
        
}
    }
    else
    {
        for (new 
idid <= 32id++)
        {
        
g_flyEnergy[id] = get_pcvar_num(cvar_fly_max_engery)
        
last_Rocket[id] = 0.0
        rocket
[id]=true
        
}
    }
}


public 
canbuy()
g_buyabletime true

public fm_startFrame(){ 

    
gltime get_gametime() 
    static 
id 
    
for (id 1id <= 32id++) 
    { 
       
frame[id]++;

    } 
}

public 
fm_prethink(id) {

    if(
is_user_alive(id))
       
jp_forward(id
}

public 
jp_forward(player) {
    
    if (!
is_user_alive(player) && (zp_get_user_zombie(player) || zp_get_user_nemesis(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)
    


        if(
get_pcvar_num(cvar_jetpack) == 1){
            if(!(
pev(playerpev_flags)&FL_ONGROUND) && pev(player,pev_button)&IN_ATTACK){
                if(
g_flyEnergy[player] > get_pcvar_num(cvar_fly_max_engery)*0.3){
                    if(
jp_soun[player] < gltime){
                        
emit_sound(player,CHAN_ITEM,"jetpack.wav",1.0,ATTN_NORM,0,PITCH_NORM)
                        
jp_soun[player] = gltime 0.2
                    
}
                }            
                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,0,PITCH_NORM)
                            
jp_soun[player] = gltime 0.1
                    
}
                }
            }
            
human_fly(player)
            
attack(player)    
        }
        if((
pev(player,pev_button)&IN_ATTACK2)){
                
attack2(player)    
            }    
    
    if((
get_pcvar_num(cvar_jetpack) == && !(pev(playerpev_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){
            if(
jp_soun[player] < gltime){
                
emit_sound(player,CHAN_ITEM,"jetpack.wav",1.0,ATTN_NORM,0,PITCH_NORM)
                
jp_soun[player] = gltime 0.2
            
}
        }                    
        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,0,PITCH_NORM)
                
jp_soun[player] = gltime 0.1
            
}
        }
        
human_fly(player)
        
attack(player)
    }    
    
    return 
FMRES_IGNORED
}

public 
jp_energy(player) {
            
        if (!(
pev(playerpev_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) == && !(pev(playerpev_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(playerpev_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?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(player10Aim)
        
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_JUMP && pev(player,pev_button)&IN_DUCK) && !(pev(playerpev_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(8)
                
write_byte(50)
                
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,EV_INT_movetype,6)
                    
set_pev(playerpev_frame0.9)
                }
                    
                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
(rocketEV_SZ_classname"zp_jp_rocket")
        
entity_set_model(rocketROCKET_MDL)
        
        
entity_set_size(rocketFloat:{0.00.00.0}, Float:{0.00.00.0})
        
entity_set_int(rocketEV_INT_movetypeMOVETYPE_FLY)
        
entity_set_int(rocketEV_INT_solidSOLID_BBOX)
        
        new 
Float:vSrc[3]
        
entity_get_vector(playerEV_VEC_originvSrc)
        
        new 
Float:Aim[3],Float:origin[3]
        
VelocityByAim(player64Aim)
        
entity_get_vector(player,EV_VEC_origin,origin)
        
        
vSrc[0] += Aim[0]
        
vSrc[1] += Aim[1]
        
entity_set_origin(rocketvSrc)
        
        new 
Float:velocity[3], Float:angles[3], fOrigin[3]
        
VelocityByAim(playerget_pcvar_num(cvar_RocketSpeed), velocity)
        
        
entity_set_vector(rocketEV_VEC_velocityvelocity)
        
vector_to_angle(velocityangles)
        
entity_set_vector(rocketEV_VEC_anglesangles)
        
entity_set_edict(rocket,EV_ENT_owner,player)
        
entity_set_float(rocketEV_FL_takedamage1.0)
        
        
set_pev(rocketpev_effectsEF_LIGHT)

                
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
        
write_byte(TE_BEAMFOLLOW)
        
write_short(rocket)
        
write_short(trail)
        
write_byte(25)
        
write_byte(8)
        
write_byte(255)
        
write_byte(255)
        
write_byte(255)
        
write_byte(100)
        
message_end()

                
message_beginMSG_BROADCASTSVC_TEMPENTITY );
                
write_byteTE_BEAMTORUS );
                
write_coordfOrigin[0]); // Start X
                
write_coordfOrigin[1] ); // Start Y
                
write_coordfOrigin[2]); // Start Z
                
write_coordfOrigin[0] ); // End X
                
write_coordfOrigin[1] ); // End Y
                
write_coordfOrigin[2] + 10); // End Z
                
write_shortflame ); // sprite
                
write_byte); // Starting frame
                
write_byte50  ); // framerate * 0.1
                
write_byte); // life * 0.1
                
write_byte50 ); // width
                
write_byte); // noise
                
write_byte); // color r,g,b
                
write_byte255 ); // color r,g,b
                
write_byte); // color r,g,b
                
write_byte100 ); // brightness
                
write_byte); // scroll speed
                
message_end();

        
emit_sound(rocketCHAN_WEAPONROCKET_SOUND1.0ATTN_NORM0PITCH_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))
        return 
FMRES_IGNORED
    
    
if(hasjet[id]) {
        new 
clip,ammo
        
new wpnid get_user_weapon(id,clip,ammo)
        
        if ( 
wpnid == CSW_KNIFE ) {
            
switchmodel(id)
        }
        else if (
wpnid == CSW_HEGRENADE )
        {
            
entity_set_string(id,EV_SZ_viewmodel,"models/v_hegrenade.mdl")
            
entity_set_string(id,EV_SZ_weaponmodel,"models/p_hegrenade.mdl")

        }
        else if ( 
wpnid == CSW_FLASHBANG )
        {
            
entity_set_string(id,EV_SZ_viewmodel,"models/v_flashbang.mdl")
            
entity_set_string(id,EV_SZ_weaponmodel,"models/p_flashbang.mdl")

        }
                else if ( 
wpnid == CSW_SMOKEGRENADE )
        {
            
entity_set_string(id,EV_SZ_viewmodel,"models/v_smokegrenade.mdl")
            
entity_set_string(id,EV_SZ_weaponmodel,"models/p_smokegrenade.mdl")

        }
        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(entitychannel, const sample[]) {
    if(
is_user_alive(entity)) {
        
        if(
hasjet[entity]) {
            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 
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_EmitSoundplayerCHAN_WEAPONgetrocket1.0ATTN_NORM0PITCH_NORM)
        
client_print(playerprint_center"")
        
rksound[player] = true
    
}
    else if (
rksound[player])
    {
        
    }
    
}

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(player64Aim)
        
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/p_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)        
        
        
hasjet[player] = 0
        rocket
[player] = false
    
}    
}

public 
pfn_touch(ptrptd) { 
    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 && id 34) { 
                    if(!
hasjet[id] && !zp_get_user_zombie(id) && is_user_alive(id)) { 
                         
                        
hasjet[id] = 
                        
//g_flyEnergy[id] = get_pcvar_num(cvar_fly_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(ptrEV_VEC_originfOrigin)
            
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(20)
            
write_byte(15)
            
write_byte(0)
            
message_end()

                        
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_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(40)
            
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]+400)
            
write_short(white)
            
write_byte(0)
            
write_byte(1)
            
write_byte(6)
            
write_byte(100)
            
write_byte(1)
            
write_byte(255)
            
write_byte(255)
            
write_byte(255)
            
write_byte(100)
            
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]+400)
            
write_short(white)
            
write_byte(0)
            
write_byte(1)
            
write_byte(6)
            
write_byte(100)
            
write_byte(1)
            
write_byte(255)
            
write_byte(255)
            
write_byte(255)
            
write_byte(100)
            
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]+400)
            
write_short(white)
            
write_byte(0)
            
write_byte(1)
            
write_byte(6)
            
write_byte(100)
            
write_byte(1)
            
write_byte(255)
            
write_byte(255)
            
write_byte(255)
            
write_byte(100)
            
write_byte(0)
            
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(playerinfector){
    

    
drop_jetpack(player)
    
hasjet[player] = 0
    rocket
[player] = true
    g_flyEnergy
[player] = get_pcvar_num(cvar_fly_max_engery)
    
last_Rocket[player] = 0.0
}

public 
zp_extra_item_selected(playeritemid){
    

    new 
clip,ammo
    
new weapon get_user_weapon(player,clip,ammo)
         new 
name[32]  
         
get_user_name(playername31)  
        

        
        
    if (
itemid == g_item_jetpack)
    {
    
        if(!
g_buyabletime)
        {
        
ColorChat(player,GREY"^x04[ZP]^x01 Please Wait ...")    
        return
        }
    
        if(!
hasjet[player])
        {
        
set_hudmessage(20510229, -1.000.8010.003.002.001.00, -1);
        
ShowSyncHudMsg(0,g_iEventsHudmessage"%s bought a Jetpack!!"name)
        
ColorChat(playerGREY"^x04[ZP]^x01 ^x01Press ^x03-CTRL+SPACE-^x01 to fly!""grey")
        
ColorChat(playerGREY"^x04[ZP]^x01 ^x01Press ^x03-RIGHT CLICK-^x01 to shoot!""grey")
        }
        
        
cmdDrop(player)
        
        
hasjet[player] = 1
        g_flyEnergy
[player] = get_pcvar_num(cvar_fly_max_engery)
        
rocket[player] = true
        last_Rocket
[player] = 0.0
        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)
    new 
packs,name[32];
    for(new 
133i++) {
        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 
damage
                
                
if(zp_get_user_sniper(id))
                
damageget_pcvar_num(cvar_SniperDmg)
                else
                
damage floatround(get_pcvar_num(cvar_RocketDmg)-(get_pcvar_float(cvar_RocketDmg)/get_pcvar_float(cvar_Dmg_range))*float(dist))
                


                new 
Origin[3]
                
get_user_origin(i,Origin)
                new 
iPos = ++g_iPlayerPos[id]
                if( 
iPos == sizeof(g_flCoords) )
            {
                
iPos g_iPlayerPos[id] = 0
            
}
                
                if(
zp_get_user_zombie(id) != zp_get_user_zombie(i)) {
                        
get_user_name(i,name,31);
                        
                        if(!
zp_get_user_sniper(id))
                        if(
damage>=800)
                            
packs 2;
                        else
                            
packs 1;
                            
                        if(
hp damage)
                        {
                            
                            
zp_set_user_ammo_packs idzp_get_user_ammo_packs id ) + packs );
                            
jp_take_damage(i,damage,Origin,DMG_BLAST)
                            
ColorChat(idGrey"^x04[ZP]^x01 Damage to ^x04%s^x01 ::  ^x04%i^x01 damage"namedamage)

                            
set_hudmessage04080Float:g_flCoords[iPos][0], Float:g_flCoords[iPos][1], 00.12.50.020.02, -)
                            
show_hudmessageid"%i"damage )
                            
                        }
                        else
                        {
                            
log_kill(id,i,"Jetpack Rocket",0)
                            
zp_set_user_ammo_packs idzp_get_user_ammo_packs id ) + );
                        }
                    }
            }
        }
    }
}

stock log_kill(killervictimweapon[], headshot)
{
// code from MeRcyLeZZ
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
    
ExecuteHamB(Ham_Killedvictimkiller2// set last param to 2 if you want victim to gib
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)

    
    
message_begin(MSG_BROADCASTget_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(killerkname31)
    
get_user_team(killerkteam9)
    
get_user_authid(killerkauthid31)
 
    
get_user_name(victimvname31)
    
get_user_team(victimvteam9)
    
get_user_authid(victimvauthid31)
        
    
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^""
    
knameget_user_userid(killer), kauthidkteam
     
vnameget_user_userid(victim), vauthidvteamweapon)

     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)
        
client_cmd(victim,"spk fvox/flatline.wav")
        
msg_screen_fade(victim125500115)
        
msg_screen_shakevictim255<<1010<<10255<<10 );
}

stock msg_screen_fade(idholdtimergba

        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("ScreenFade"), {000}, id
        
write_short(seconds_to_units(holdtime)) 
        
write_short(seconds_to_units(holdtime)) 
        
write_short(0
        
write_byte(r
        
write_byte(g
        
write_byte(b
        
write_byte(a
        
message_end()


stock seconds_to_units(time) { 
        return ((
<< 10) * (time)) 
}

public 
msg_screen_shakeid,  Amplitud ,  DuracionFrecuencia  ){
 
    
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("ScreenShake"), {0,0,0}, id); 
    
write_short(255<<10);
    
write_short(10<<10);
    
write_short(255<<10);
    
message_end() 
 









public 
cmdJetpack(idlevelcid)
{
    if (!
cmd_access(idlevelcid1))
        return 
PLUGIN_HANDLED
    
    
new name2[32],  name[32]
    
    static 
arg[32], player
    read_argv
(1arg31)
    
    
player cmd_target(idarg, (CMDTARGET_ONLY_ALIVE))
    

    if (!
player)
    return 
PLUGIN_HANDLED

        
    
    
new clip,ammo
    
new weapon get_user_weapon(player,clip,ammo)
    
        
        
cmdDrop(player)
        
        
hasjet[player] = 1
        g_flyEnergy
[player] = get_pcvar_num(cvar_fly_max_engery)
        
last_Rocket[player] = 0.0;
        
rocket[player]=true
        client_cmd
(player,"spk items/gunpickup2.wav")
        if(
weapon == CSW_KNIFE){
            
switchmodel(player)
        }
        else
        {
            
engclient_cmd(player,"weapon_knife"),switchmodel(player)
        }
        
        


    
get_user_name(idname31)
    
get_user_name(playername231)
    
    if (
player == id)
    {
    
ColorChat(0Grey"^4[ZP] ^3%s^1 Gave ^3Himself^1 A ^4Jetpack^1!"name)
    }
    else
    
ColorChat(0Grey"^4[ZP] ^3%s^1 Gave ^3%s^1 A ^4Jetpack^1!"namename2)

    return 
PLUGIN_HANDLED
}




public 
cmdDropJetpack(idlevelcid)
{
    if (!
cmd_access(idlevelcid1))
        return 
PLUGIN_HANDLED
    
    
new name2[32],  name[32]
    
    static 
arg[32], player
    read_argv
(1arg31)
    
    
player cmd_target(idarg, (CMDTARGET_ONLY_ALIVE))
    
    if (!
player)
        return 
PLUGIN_HANDLED
    
    cmdDrop
(player);
    
hasjet[player] = 0
    

    set_pev
(playerpev_viewmodel2"models/v_knife.mdl")
    
set_pev(playerpev_weaponmodel2"models/p_knife.mdl")

    
get_user_name(idname31)
    
get_user_name(playername231)
    

    
ColorChat(0Grey"^1[ZP] ^4%s^1 Removed ^4%s^1 ^3Jetpack^1 !"namename2)

    return 
PLUGIN_HANDLED
}












public 
regain_dropped()
{

new 
ii

for(ii=0;ii<32;ii++)
{
    if(!
hasjet[ii] && !zp_get_user_zombie(ii) && g_flyEnergy[ii] < get_pcvar_num(cvar_fly_max_engery))
    {
        
g_flyEnergy[ii] = g_flyEnergy[ii] + get_pcvar_num(cvar_regain_energy);
        
    }
}
    
    
set_task(get_pcvar_float(cvar_cal_time),"regain_dropped")
    

add to favorite MY ZP 6.2 SERVER : 23.97.212.37
FORUM: https://cswhitedevil.ddns.net/

Last edited by sayf118; 06-13-2020 at 17:16. Reason: UPDATED
sayf118 is offline
Old 06-14-2020, 02:13
alferd
This message has been deleted by alferd.
abdelwahab
Member
Join Date: Aug 2019
Old 07-18-2020 , 18:36   Re: Jetpack Bug
Reply With Quote #6

Hello try this code
Quote:
/*|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|*
*.
* [ZP] Extra Item Jetpack+Bazooka 3.2
*
*|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|*
*
* Original Plugin:
* AMX Jetpack
* BY
* (c) Copyright 2005, KleeneX
* This file is provided as is (no warranties)
*
* CREDITS:
* KleeneX |>>>| Original Plugin (http://forums.alliedmods.net/showthread.php?p=119727)
* Bad_Bud |>>>| TS_Jetpack (http://forums.alliedmods.net/showthr...ght=TS_Jetpack)
* MeRcyLeZZ |>>>| bug fix, some code from [ZP] Stamina (http://forums.alliedmods.net/showpos...postcount=1300)
* mogel |>>>| Icon code form Predator-Mod (http://forums.alliedmods.net/showthr...light=predator)
*
*|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|*
*
* Plagued Version 3.2 by B!gBud
*
*
* Allows Humans buy a Jetpack+Bazooka in Zombie Plague [4.0]
*
*
* CVARS:
* zp_jetpack 2 // 0 = Off / 1 = have Knive & Hold ATTACK / 2 = Hold JUMP and DUCK
*
* zp_jp_forward_speed 300 // Set the forward speed(when you fly and press FORWARD)
* zp_jp_up_speed 35 // Set the UP speed(when you press ATTACK and JUMP up)
* zp_jp_accelerate 100 // How fast you get to the max ForwardSpeed
*
* zp_jp_rocket_delay 12 // How long you got to wait to shoot the next rocket(in sec.)
* zp_jp_rocket_speed 1500 // Set the rocket Speed
* zp_jp_rocket_damage 1500 // Set the max rocket Damage
* zp_jp_damage_radius 350 // Set the radius of a rocket explosion
*
* zp_jp_max_engery 100 // Set the max Energy for the Jetpack
* zp_jp_engery 10 // Set how many Energy need the JP to fly (time interval is "zp_jp_energy_cal")
* zp_jp_regain_energy 3 // Set how fast you get JP_Energy back, when you on the ground (time interval is "zp_jp_energy_cal")
* zp_jp_energy_cal 1.0 // Set time interval for "zp_jp_engery" & "zp_jp_regain_energy"
* zp_jp_oneround 1 // 0 = jetpack stay on a new round if someone alive / 1 = jetpack for One Round only
*
*|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|**|_/=\_|*/

#include <amxmodx>
#include <fun>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>

#define PLUGINNAME "Extra Item Jetpack+Bazooka"
#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 30 // 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_SERVE R)

cvar_jetpack = register_cvar("zp_jetpack", "2")

cvar_jetpackSpeed=register_cvar("zp_jp_forwar d_speed","300.0")
cvar_jetpackUpSpeed=register_cvar("zp_jp_up_s peed","35.0")
cvar_jetpackAcrate=register_cvar("zp_jp_accel erate","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_da mage","1500")
cvar_Dmg_range=register_cvar("zp_jp_damage_ra dius","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 player
for (player = 1; player <= 32; player++)
{
jp_forward(player)
}
}

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. && (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.){
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?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)&&JetpackD ata[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],Floatrigin[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,"model s/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] Reloaded & Ready !!!")
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:#000 000;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,"How to use:^n")
dpos += format(jpmotd[dpos],2047-dpos,"=============^n^n")
if(get_pcvar_num(cvar_jetpack) == 1) {
dpos += format(jpmotd[dpos],2047-dpos,"- choose/have Knive & use/hold ATTACK to fly^n")
dpos += format(jpmotd[dpos],2047-dpos,"^n")
dpos += format(jpmotd[dpos],2047-dpos,"- choose/have Knive(Bazooka) & use ATTACK2 to shoot a Rocket^n^n")
}
else if(get_pcvar_num(cvar_jetpack) == 2){
dpos += format(jpmotd[dpos],2047-dpos,"- use/hold JUMP & DUCK to flyn")
dpos += format(jpmotd[dpos],2047-dpos,"^n")
dpos += format(jpmotd[dpos],2047-dpos,"choose/have Knive(Bazooka) & use ATTACK2 to shoot a Rocket^n^n")
}
dpos += format(jpmotd[dpos],2047-dpos,"INFO's^n")
dpos += format(jpmotd[dpos],2047-dpos,"MAX Energy set to : <b>%i Units</b>^n^n", g_max)
dpos += format(jpmotd[dpos],2047-dpos,"Jetpack need %i Units per 1 Sec. to work^n", g_lost)
dpos += format(jpmotd[dpos],2047-dpos,"Energy regain %i Units per 1 Sec. (when you are on the ground)^n^n", g_back)
dpos += format(jpmotd[dpos],2047-dpos,"MAX Rocket Dmg set to: <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,"-Have Fun!^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,"model s/p_knife.mdl")
}
return PLUGIN_HANDLED
}
}
return PLUGIN_CONTINUE
}

public drop_jetpack(player) {
if(hasjet[player]) {
new Float:Aim[3],Floatrigin[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,origi n)

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,classna me,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,iO rigin)
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(
write_byte(1)
write_byte(255)
write_byte(255)
write_byte(192)
write_byte(12
write_byte(5)
message_end()

if(is_valid_ent(ptd)) {
new classname2[32]
entity_get_string(ptd,EV_SZ_classname,classna me2,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, "[ZP] say /jphelp for Display the help page")
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"),switchmo del(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,DM G_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(victi m))
set_user_frags(killer,get_user_frags(killer) +1)
if(get_user_team(killer)==get_user_team(victi m))
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)
}
abdelwahab is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 16:34.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode