Raised This Month: $ Target: $400
 0% 

bazooka


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Compro
Junior Member
Join Date: Nov 2011
Old 12-13-2011 , 08:26   bazooka
Reply With Quote #1

Hi. Emm i put a bazooka plugin to my zp 4.3 server, This plugin causes in server lags. When i remove from server bazooka plugin, server stops lagging.

PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>

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

static const 
mrocket[] = "models/rpgrocket.mdl";
static const 
mrpg_w[] = "models/w_rpg.mdl";
static const 
mrpg_v[] = "models/v_rpg.mdl";
static const 
mrpg_p[] = "models/p_rpg.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";
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/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 );
    }
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/ 
Can someone optimize this bazooka plugin code ?

Last edited by Compro; 12-13-2011 at 08:27.
Compro 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 12:29.


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