Raised This Month: $51 Target: $400
 12% 

Bazooka / rocket launcher edit


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
major2073
New Member
Join Date: Mar 2024
Old 03-06-2024 , 07:09   Bazooka / rocket launcher edit
Reply With Quote #1

Hi there, may anyone add to this rocket any "jumping action" on zombies when they get bombed as you can see in the following video: (https://youtu.be/rx4BfGXIa7Y?si=Oy8Ib6NNGoM9tIOs)



PHP Code:
#include <amxmodx>

#include <amxmisc>

#include <fakemeta>

#include <hamsandwich>

#include <zombieplague>



static const plugin[] = "[ZP] Extra Item: Original Rocket";



static const 
mrocket[] = "models/rocket_missile.mdl";

static const 
mrpg_w[] = "models/v_originalrocket.mdl";

static const 
mrpg_v[] = "models/v_originalrocket.mdl";

static const 
mrpg_p[] = "models/p_originalrocket.mdl";

static const 
sfire[] = "weapons/rocketfire1.wav";

static const 
sfly[] = "weapons/nuke_fly.wav";

static const 
shit[] = "weapons/mortarhit.wav";

static const 
spickup[] = "items/gunpickup2.wav";



static const 
g_item_name[] = "Original Rocket";

const 
g_item_cost 25;

new 
g_itemid;



new 
gmsg_screenshakegmsg_deathgmsg_damagepcvar_delaypcvar_maxdmgpcvar_radiuspcvar_map;

new 
rocketsmokeexplosionbazsmokewhite

new 
bool:has_baz[33], bool:CanShoot[33];

new 
dmgcount[33], pcvar_dmgforpackspcvar_award;



public 
plugin_init()

{

    
register_plugin(plugin"0.6""Random1");

    

    
pcvar_delay register_cvar("zp_baz_delay""10.0");

    
pcvar_maxdmg register_cvar("zp_baz_dmg""500");

    
pcvar_radius register_cvar("zp_baz_radius""750");

    
pcvar_map register_cvar("zp_baz_map""0");

    
pcvar_dmgforpacks get_cvar_pointer("zp_human_damage_reward");

    
pcvar_award register_cvar("zp_baz_awardpacks""1");

    

    if ( 
pcvar_dmgforpacks == ) {

        
set_pcvar_num(pcvar_award0);    //if we couldn't read the dmg cvar from zp then set a stop state on dmg reward

        
log_amx("[%s] error reading zp_human_damage_reward cvar from zombie plague, turning award for damage off"plugin);

    }

    

    
g_itemid zp_register_extra_item(g_item_nameg_item_costZP_TEAM_HUMAN);

    

    
register_concmd("zp_bazooka""give_bazooka"ADMIN_KICK"<name/@all> gives a bazooka to the spcified target");

    
register_event("CurWeapon","switch_to_knife","be","1=1","2=29");

    
register_event("HLTV""event_HLTV""a""1=0""2=0")    // New Round

    
register_clcmd("drop""drop_call");

    

    
//supports 2 methods of firing, attacking while holding knife and a bind

    
register_clcmd("baz_fire""fire_call");

    
register_forward(FM_PlayerPreThink"fw_prethink");

    

    
register_forward(FM_Touch"fw_touch");

        

    
gmsg_screenshake get_user_msgid("ScreenShake");

    
gmsg_death get_user_msgid("DeathMsg");

    
gmsg_damage get_user_msgid("Damage");

}

public 
event_HLTV()

{

    
//remove entities regardless of cvar

    
new rpg_temp engfunc(EngFunc_FindEntityByString, -1"classname""rpg_temp");

    while( 
rpg_temp 0) {

        
engfunc(EngFunc_RemoveEntityrpg_temp);

        
rpg_temp engfunc(EngFunc_FindEntityByString, -1"classname""rpg_temp");

    }

    

    if ( 
get_pcvar_num(pcvar_map) ) return;

    

    for( new 
id 1id <= 32id++ )

        
has_baz[id] = false;

}



public 
zp_extra_item_selected(playeritemid)

{

    if (
itemid == g_itemid)

    {

        if ( 
has_baz[player] )

        {

            
zp_set_user_ammo_packsplayerzp_get_user_ammo_packs(player) + g_item_cost );

            
client_print(playerprint_chat"[ZP BAZ] You already have a bazooka, drop it first by hitting you drop key while holding knife");

        }

        else {

            
has_baz[player] = true;

            
CanShoot[player] = true;

            
client_print(playerprint_chat"[ZP BAZ] You now have a bazooka, attack while holding knife(will take %2.1f seconds to reload"get_pcvar_float(pcvar_delay));

        }

    }

}

public 
give_bazooka(id,level,cid)

{

    if (!
cmd_access(id,level,cid,1)) {

        
console_print(id,"You have no access to that command");

        return;

    }

    if (
read_argc() > 2) {

        
console_print(id,"Too many arguments supplied.");

        return;

    }

    new 
arg1[32];

    
read_argv(1arg1sizeof(arg1) - 1);

    new 
player cmd_target(idarg110);

    if ( !
player ) {

        if ( 
arg1[0] == '@' ) {

            for ( new 
1<= 32i++ ) {

                if ( 
is_user_connected(i) && !has_baz[i] && !zp_get_user_zombie(i) ) {

                    
has_baz[i] = true;

                    
CanShoot[i] = true;

                    
client_print(iprint_chat"[ZP BAZ] You now have a bazooka, attack while holding knife(will take %2.1f seconds to reload"get_pcvar_float(pcvar_delay));

                }

            }

        } else {

            
client_print(idprint_chat"No Such Player/Team");

            return;

        }

    } else if ( !
has_baz[player] && !zp_get_user_zombie(player) ) {

        
has_baz[player] = true;

        
CanShoot[player] = true;

        
client_print(playerprint_chat"[ZP BAZ] You now have a bazooka, attack while holding knife(will take %2.1f seconds to reload"get_pcvar_float(pcvar_delay));

    }

}



public 
zp_user_infected_post(idinfector)

    if ( 
has_baz[id] )

        
drop_rpg_temp(id);



public 
plugin_precache()

{

    
precache_model(mrocket);    



    
precache_model(mrpg_w);

    
precache_model(mrpg_v);

    
precache_model(mrpg_p);



    
precache_sound(sfire);

    
precache_sound(sfly);

    
precache_sound(shit);

    
precache_sound(spickup);

    

    
rocketsmoke precache_model("sprites/smoke.spr");

    
explosion precache_model("sprites/zerogxplode.spr");



}



public 
switch_to_knife(id)

{

    if ( !
is_user_alive(id) ) return;

    

    if ( 
has_baz[id] && CanShoot[id] )

    {

        
set_pev(idpev_viewmodel2mrpg_v);

        
set_pev(idpev_weaponmodel2mrpg_p);

    }

}



public 
fw_prethink(id)

{

    static 
button;

    
button pev(idpev_button);

    if ( 
button IN_ATTACK )

        
fire_call(id);

}

public 
fire_call(id)

{

    if ( !
is_user_alive(id) || !has_baz[id] || !CanShoot[id] ) return;

    

    new 
weapon get_user_weapon(id);

    if ( 
weapon == CSW_KNIFE fire_rocket(id);    

}



fire_rocket(id) {

    if ( !
CanShoot[id] ) return;

    

    
CanShoot[id] = false;

    
set_task(get_pcvar_float(pcvar_delay), "rpg_reload"id);

    
engclient_cmd(id"weapon_knife");    //attempt to force model to reset



    
new Float:StartOrigin[3], Float:Angle[3];

    
pev(idpev_originStartOrigin);

    
pev(idpev_anglesAngle);



    new 
ent engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"));

    
set_pev(entpev_classname"rpgrocket");

    
engfunc(EngFunc_SetModelentmrocket);

    
set_pev(entpev_mins, {-1.0, -1.0, -1.0});

    
set_pev(entpev_maxs, {1.01.01.0});

    
engfunc(EngFunc_SetOriginentStartOrigin);

    
set_pev(entpev_anglesAngle);





    
set_pev(entpev_solid2);

    
set_pev(entpev_movetype5);

    
set_pev(entpev_ownerid);



    new 
Float:nVelocity[3];

    
velocity_by_aim(id1500nVelocity);

    
set_pev(entpev_velocitynVelocity);



    
emit_sound(entCHAN_WEAPONsfireVOL_NORMATTN_NORM0PITCH_NORM);

    
emit_sound(entCHAN_VOICEsflyVOL_NORMATTN_NORM0PITCH_NORM);



    
message_begin(MSG_BROADCASTSVC_TEMPENTITY);

    
write_byte(22);

    
write_short(ent);

    
write_short(rocketsmoke);

    
write_byte(30);

    
write_byte(3);

    
write_byte(255);

    
write_byte(255);

    
write_byte(255);

    
write_byte(255);

    
message_end();

}

//---------------------------------------------------------------------------------------

public rpg_reload(id)

{

    
CanShoot[id] = true;

    if ( 
get_user_weapon(id) == CSW_KNIFE switch_to_knife(id);    //sets our model

}



//---------------------------------------------------------------------------------------

public fw_touch(enttouched)

{

    if ( !
pev_valid(ent) ) return FMRES_IGNORED;

    static 
entclass[32];

    
pev(entpev_classnameentclass31);

    if ( 
equali(entclass"rpg_temp") )

    {

        static 
touchclass[32];

        
pev(touchedpev_classnametouchclass31);

        if ( !
equali(touchclass"player") ) return FMRES_IGNORED;

        

        if( !
is_user_alive(touched) || zp_get_user_zombie(touched) ) return FMRES_IGNORED;

            

        
emit_sound(touchedCHAN_VOICEspickup1.0ATTN_NORM0PITCH_NORM);

        
has_baz[touched] = true;

        

        
engfunc(EngFunc_RemoveEntityent);

    

        return 
FMRES_HANDLED;

    }

    else if ( 
equali(entclass"rpgrocket") )

    {

        new 
Float:EndOrigin[3];

        
pev(entpev_originEndOrigin);

        new 
NonFloatEndOrigin[3];

        
NonFloatEndOrigin[0] = floatround(EndOrigin[0]);

        
NonFloatEndOrigin[1] = floatround(EndOrigin[1]);

        
NonFloatEndOrigin[2] = floatround(EndOrigin[2]);

    

        
emit_sound(entCHAN_WEAPONshitVOL_NORMATTN_NORM0PITCH_NORM);

        
emit_sound(entCHAN_VOICEshitVOL_NORMATTN_NORM0PITCH_NORM);

    

        
message_begin(MSG_BROADCASTSVC_TEMPENTITY);

        
write_byte(17);

        
write_coord(NonFloatEndOrigin[0]);

        
write_coord(NonFloatEndOrigin[1]);

        
write_coord(NonFloatEndOrigin[2] + 128);

        
write_short(explosion);

        
write_byte(60);

        
write_byte(255);

        
message_end();

    

        
message_begin(MSG_BROADCASTSVC_TEMPENTITY);

        
write_byte(5);

        
write_coord(NonFloatEndOrigin[0]);

        
write_coord(NonFloatEndOrigin[1]);

        
write_coord(NonFloatEndOrigin[2] + 256);

        
write_short(bazsmoke);

        
write_byte(125);

        
write_byte(5);

        
message_end();

    

        new 
maxdamage get_pcvar_num(pcvar_maxdmg);

        new 
damageradius get_pcvar_num(pcvar_radius);

    

        new 
PlayerPos[3], distancedamage;

        for (new 
1<= 32i++) {

            if ( 
is_user_alive(i)) 

                {    

                    new 
id pev(entpev_owner)

                     if  ((
zp_get_user_zombie(id)) || (zp_get_user_nemesis(id))) 

                        if ((
zp_get_user_zombie(i)) || (zp_get_user_nemesis(i))) continue;

                        

                    if  ((!
zp_get_user_zombie(id)) && (!zp_get_user_nemesis(id))) 

                        if ((!
zp_get_user_zombie(i)) && (!zp_get_user_nemesis(i))) continue;

                        

                    
get_user_origin(iPlayerPos);

        

                    
distance get_distance(PlayerPosNonFloatEndOrigin);

                    if (
distance <= damageradius) {    

                    
message_begin(MSG_ONEgmsg_screenshake, {0,0,0}, i);

                    
write_short(1<<14);

                    
write_short(1<<14);

                    
write_short(1<<14);

                    
message_end();

        

                    
damage maxdamage floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius))));

                    new 
attacker pev(entpev_owner);

        

                    
baz_damage(iattackerdamage"bazooka");

                }

            }

        }

    

        
message_begin(MSG_BROADCASTSVC_TEMPENTITY);

        
write_byte(21);

        
write_coord(NonFloatEndOrigin[0]);

        
write_coord(NonFloatEndOrigin[1]);

        
write_coord(NonFloatEndOrigin[2]);

        
write_coord(NonFloatEndOrigin[0]);

        
write_coord(NonFloatEndOrigin[1]);

        
write_coord(NonFloatEndOrigin[2] + 320);

        
write_short(white);

        
write_byte(0);

        
write_byte(0);

        
write_byte(16);

        
write_byte(128);

        
write_byte(0);

        
write_byte(255);

        
write_byte(255);

        
write_byte(192);

        
write_byte(128);

        
write_byte(0);

        
message_end();

    

        
engfunc(EngFunc_RemoveEntityent);

        

        return 
FMRES_HANDLED;

    }

    return 
FMRES_IGNORED;

}

//---------------------------------------------------------------------------------------

public drop_call(id)

{

    if ( 
has_baz[id] && get_user_weapon(id) == CSW_KNIFE )

    {

        
drop_rpg_temp(id);

        return 
PLUGIN_HANDLED;    //attempt to block can't drop knife message

    
}

    return 
PLUGIN_CONTINUE;

}



drop_rpg_temp(id) {

    new 
Float:fAim[3] , Float:fOrigin[3];

    
velocity_by_aim(id 64 fAim);

    
pev(id pev_origin fOrigin);



    
fOrigin[0] += fAim[0];

    
fOrigin[1] += fAim[1];



    new 
rpg engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"));



    
set_pev(rpgpev_classname"rpg_temp");

    
engfunc(EngFunc_SetModelrpgmrpg_w);



    
set_pev(rpgpev_mins, { -16.0, -16.0, -16.0 } );

    
set_pev(rpgpev_maxs, { 16.016.016.0 } );



    
set_pev(rpg pev_solid 1);

    
set_pev(rpg pev_movetype 6);



    
engfunc(EngFunc_SetOriginrpgfOrigin);



    
has_baz[id] = false;

}

//---------------------------------------------------------------------------------------

baz_damage(idattackerdamageweaponDescription[])

{

    if ( 
pev(idpev_takedamage) == DAMAGE_NO ) return;

    if ( 
damage <= ) return;



    new 
userHealth get_user_health(id);

    if (
userHealth damage <= ) {

        
dmgcount[attacker] += userHealth damage;

        
set_msg_block(gmsg_deathBLOCK_SET);

        
ExecuteHamB(Ham_Killedidattacker2);

        
set_msg_block(gmsg_deathBLOCK_NOT);

    

        

        
message_begin(MSG_BROADCASTgmsg_death);

        
write_byte(attacker);

        
write_byte(id);

        
write_byte(0);

        
write_string(weaponDescription);

        
message_end();

        

        
set_pev(attackerpev_fragsfloat(get_user_frags(attacker) + 1));

            

        new 
kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];

    

        
get_user_name(attackerkname31);

        
get_user_team(attackerkteam9);

        
get_user_authid(attackerkauthid31);

     

        
get_user_name(idvname31);

        
get_user_team(idvteam9);

        
get_user_authid(idvauthid31);

            

        
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^""

        
knameget_user_userid(attacker), kauthidkteam

         
vnameget_user_userid(id), vauthidvteamweaponDescription);

    }

    else {

        
dmgcount[attacker] += damage;

        new 
origin[3];

        
get_user_origin(idorigin);

        

        
message_begin(MSG_ONE,gmsg_damage,{0,0,0},id);

        
write_byte(21);

        
write_byte(20);

        
write_long(DMG_BLAST);

        
write_coord(origin[0]);

        
write_coord(origin[1]);

        
write_coord(origin[2]);

        
message_end();

        

        
set_pev(idpev_healthpev(idpev_health) - float(damage));

    }

    if ( !
get_pcvar_num(pcvar_award) ) return;

    

    new 
breaker get_pcvar_num(pcvar_dmgforpacks);

    if ( 
dmgcount[attacker] > breaker )

    {

        new 
temp dmgcount[attacker] / breaker

        
if ( temp breaker dmgcount[attacker] ) return; //should never be possible

        
dmgcount[attacker] -= temp breaker;

        
zp_set_user_ammo_packsattackerzp_get_user_ammo_packs(attacker) + temp );

    }



Last edited by major2073; 03-06-2024 at 07:11. Reason: Adding video link for explain
major2073 is offline
georgik57
Veteran Member
Join Date: Oct 2008
Location: 🎧Music World
Old 03-07-2024 , 11:40   Re: Bazooka / rocket launcher edit
Reply With Quote #2

https://forums.alliedmods.net/attach...1&d=1705621330
See "zpnm-zc_item_frog_bomb.sma" code for pushing players away from explosion origin and add it to your rocket explosion code.
__________________
georgik57 is offline
Send a message via MSN to georgik57 Send a message via Yahoo to georgik57 Send a message via Skype™ to georgik57
major2073
New Member
Join Date: Mar 2024
Old 03-07-2024 , 12:15   Re: Bazooka / rocket launcher edit
Reply With Quote #3

Quote:
Originally Posted by georgik57 View Post
https://forums.alliedmods.net/attach...1&d=1705621330
See "zpnm-zc_item_frog_bomb.sma" code for pushing players away from explosion origin and add it to your rocket explosion code.
It doesn't work :/
major2073 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 09:49.


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