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

[ZP] Bazooka help


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
EDWHARD
Junior Member
Join Date: Jul 2017
Old 08-17-2017 , 20:37   [ZP] Bazooka help
Reply With Quote #1

I was wondering if someone can help me with this plugin.
What i want is that when bazooka is bought, players can't drop it and when they die, bazooka desapear.
Someone can give me a hand?
Ty!
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>

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

static const 
mrocket[] = "models/rocket_fire_missil.mdl";
static const 
mrpg_w[] = "models/w_bazooka_at4.mdl";
static const 
mrpg_v[] = "models/v_bazooka_at4.mdl";
static const 
mrpg_p[] = "models/p_bazooka_at4.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[] = "Bazooka for Poor";
const 
g_item_cost 30;
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""400");
    
pcvar_radius register_cvar("zp_baz_radius""750");
    
pcvar_map register_cvar("zp_baz_map""1");
    
pcvar_dmgforpacks get_cvar_pointer("zp_human_damage_reward");
    
pcvar_award register_cvar("zp_baz_awardpacks""0");
    
    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"Вы приобрели базуку, достанте нож и нажмите на правую кнопку мыши.");
        }
        else {
            
has_baz[player] = true;
            
CanShoot[player] = true;
            
client_print(playerprint_chat"[LEGA'cy] 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"[LEGA'cy] 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"[LEGA'cy] 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/fexplo.spr");
    
bazsmoke  precache_model("sprites/steam1.spr");
    
white precache_model("sprites/white.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 );
    }

Attached Files
File Type: sma Get Plugin or Get Source (zp_bazooka.sma - 449 views - 13.0 KB)
EDWHARD 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 11:44.


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