Overwatch Standard Issue Pulse Rifle

Overwatch Standard Issue Pulse Rifle 1.3.0

Нет прав для скачивания
Код:
#include <amxmodx>      
#include <hl_wpnmod>
#include <xs>                                                       
#include <hamsandwich>        
new g_SpriteIndexExplode1;       
            
#define PLUGIN "[WPN] AR2"                                            
#define VERSION "1.3.0"                                              
#define AUTHOR "Glaster"       

#define WEAPON_NAME "weapon_ar2"                              
#define WEAPON_SLOT    3
#define WEAPON_POSITION    3
#define WEAPON_PRIMARY_AMMO    "ar2_clip"
#define WEAPON_PRIMARY_AMMO_MAX    90
#define WEAPON_SECONDARY_AMMO    "" 
#define WEAPON_SECONDARY_AMMO_MAX    -1 
#define WEAPON_MAX_CLIP    30     
#define WEAPON_DEFAULT_AMMO     30
#define WEAPON_FLAGS    0        
#define WEAPON_WEIGHT    20
#define WEAPON_DAMAGE    20.0  

#define AR2G_DAMAGE            100.0       
#define AR2G_BOUNCE_TIME        3.0       
#define AR2G_BOUNCE_VELOCITY        900
#define AR2G_FLY_VELOCITY        700   

#define MODEL_WORLD    "models/w_ar2.mdl"  
#define MODEL_VIEW    "models/v_ar2.mdl"      
#define MODEL_PLAYER    "models/p_ar2.mdl" 
#define MODEL_AMMO "models/w_ar2clip.mdl"
#define MODEL_AR2G            "models/ar2_grenade.mdl"

#define WEAPON_HUD_TXT    "sprites/weapon_ar2.txt"
#define WEAPON_CHOISEN    "sprites/ar2_choisen.spr"  
#define WEAPON_NOCHOISEN "sprites/ar2_nochoisen.spr"
#define MUZZLE_SPRITE "sprites/ar2_mf.spr"          
#define SPRITE_GLOW            "sprites/energy_ball.spr" 

#define SOUND_FIRE    "weapons/ar2_shoot.wav"
#define SOUND_RELOAD    "weapons/ar2_reload.wav"
#define SOUND_DEPLOY "weapons/ar2_deploy.wav"
#define SOUND_GRENADE "weapons/ar2_grenade.wav"    
#define SOUND_GRENADE_EXP "weapons/ar2gr.wav"

#define ANIM_EXTENSION    "crossbow"    

#define SET_SIZE(%0,%1,%2) engfunc(EngFunc_SetSize,%0,%1,%2)
#define SET_ORIGIN(%0,%1) engfunc(EngFunc_SetOrigin,%0,%1) 
#define NO_RECOIL  Float:{ 0.01, 0.01, 0.01 }              
#define Offset_iGlow Offset_iuser1
#define Offset_iBounce Offset_iuser2  
#define SET_ORIGIN(%0,%1) engfunc(EngFunc_SetOrigin,%0,%1) 

#define SPRITE_EXP "sprites/ar2_explo.spr"           
#define EMPTY_SOUND "weapons/ar2_empty1.wav"  
#define AMMOBOX_CLASSNAME "ammo_ar2" 

new sgb[1];    
public plugin_init() {   

    register_plugin(PLUGIN,VERSION,AUTHOR);    
    new iAR2Ammo= wpnmod_register_ammobox(AMMOBOX_CLASSNAME);                 
    new ar2 = wpnmod_register_weapon
        (
            WEAPON_NAME,
            WEAPON_SLOT,
            WEAPON_POSITION,
            WEAPON_PRIMARY_AMMO,
            WEAPON_PRIMARY_AMMO_MAX,
            WEAPON_SECONDARY_AMMO,
            WEAPON_SECONDARY_AMMO_MAX,
            WEAPON_MAX_CLIP,
            WEAPON_FLAGS,                
            WEAPON_WEIGHT
        );  
    
        wpnmod_register_weapon_forward(ar2, Fwd_Wpn_Spawn,         "AR2_Spawn" );
        wpnmod_register_weapon_forward(ar2, Fwd_Wpn_Deploy,         "AR2_Deploy" );
        wpnmod_register_weapon_forward(ar2, Fwd_Wpn_Idle,         "AR2_Idle" );
        wpnmod_register_weapon_forward(ar2, Fwd_Wpn_PrimaryAttack,    "AR2_PrimaryAttack" );
        wpnmod_register_weapon_forward(ar2, Fwd_Wpn_SecondaryAttack,    "AR2_SecondaryAttack" );
        wpnmod_register_weapon_forward(ar2, Fwd_Wpn_Reload,         "AR2_Reload" );
        wpnmod_register_weapon_forward(ar2, Fwd_Wpn_Holster,         "AR2_Holster" );
        wpnmod_register_ammobox_forward(iAR2Ammo, Fwd_Ammo_Spawn, "AR2Ammo_Spawn");
        wpnmod_register_ammobox_forward(iAR2Ammo, Fwd_Ammo_AddAmmo, "AR2Ammo_AddAmmo");

}

enum _:g_AR2
{
    AR2_LONGIDLE,
    AR2_IDLE1,
    AR2_GRENADE,   
    AR2_RELOAD,  
    AR2_DEPLOY,
    AR2_SHOOT1,    
    AR2_SHOOT2,
    AR2_SHOOT3   
}; 
public plugin_precache()    
{   PRECACHE_MODEL(MODEL_AR2G);
    PRECACHE_MODEL(MODEL_VIEW);
    PRECACHE_MODEL(MODEL_WORLD);  
    PRECACHE_MODEL(MODEL_AMMO);
    PRECACHE_SOUND ("weapons/ar2_grbounce.wav");
    PRECACHE_SOUND(SOUND_GRENADE_EXP);  
    PRECACHE_MODEL(MODEL_PLAYER);          
    PRECACHE_SOUND(SOUND_RELOAD);
    PRECACHE_SOUND(SOUND_FIRE);
    PRECACHE_SOUND(SOUND_DEPLOY);
    PRECACHE_SOUND(SOUND_GRENADE);
    PRECACHE_SOUND(EMPTY_SOUND);
    PRECACHE_GENERIC(WEAPON_HUD_TXT);  
    PRECACHE_GENERIC(SPRITE_GLOW);    
    PRECACHE_MODEL("sprites/energy_ball.spr") 
    //PRECACHE_MODEL(MUZZLE_SPRITE);
    PRECACHE_GENERIC(WEAPON_CHOISEN);
    PRECACHE_GENERIC(WEAPON_NOCHOISEN); 
    g_SpriteIndexExplode1 = PRECACHE_MODEL(SPRITE_EXP);
}

public AR2_Spawn(const iItem)
{
    //Set model to floor
    SET_MODEL(iItem, MODEL_WORLD);
    
    // Give a default ammo to weapon
    wpnmod_set_offset_int(iItem, Offset_iDefaultAmmo, WEAPON_DEFAULT_AMMO);
}
public AR2_Deploy(const iItem, const iPlayer, const iClip)
{
    wpnmod_set_offset_float(iItem, Offset_flNextPrimaryAttack, 1.0);
    wpnmod_set_offset_float(iItem, Offset_flTimeWeaponIdle, 1.2);

    return wpnmod_default_deploy(iItem, MODEL_VIEW, MODEL_PLAYER, AR2_DEPLOY , ANIM_EXTENSION);
}
public AR2_Holster(const iItem)
{
    // Cancel any reload in progress.
    wpnmod_set_offset_int(iItem, Offset_iInSpecialReload, 0);
}
public AR2_Idle(const iItem)
{
    wpnmod_reset_empty_sound(iItem);     
                                                         
    if (wpnmod_get_offset_float(iItem, Offset_flTimeWeaponIdle) > 0.0)
    {
        return;                                                      
    }

    wpnmod_send_weapon_anim(iItem, AR2_IDLE1);
    wpnmod_set_offset_float(iItem, Offset_flTimeWeaponIdle, 15.0);
}
public AR2_Reload(const iItem, const iPlayer, const iClip, const iAmmo)
{
    if (iAmmo <= 0 || iClip >= WEAPON_MAX_CLIP)
    {
        return;                                 
    }                                                         
    wpnmod_default_reload(iItem, WEAPON_MAX_CLIP, AR2_RELOAD, 0.79); 
       emit_sound(iPlayer, CHAN_WEAPON, SOUND_RELOAD, 1.0, ATTN_NORM, 0, PITCH_NORM);
}  
public AR2_PrimaryAttack(const iItem, const iPlayer, iClip)
{ 
        if (pev(iPlayer, pev_waterlevel) == 3 || iClip <= 0)
        {
            wpnmod_play_empty_sound(iItem);
            wpnmod_set_offset_float(iItem, Offset_flNextPrimaryAttack, 0.15);
            return;
        }                                 
         
        wpnmod_set_offset_int(iItem, Offset_iClip, iClip -= 1);
        wpnmod_set_offset_int(iPlayer, Offset_iWeaponVolume, LOUD_GUN_VOLUME);
        wpnmod_set_offset_int(iPlayer, Offset_iWeaponFlash, BRIGHT_GUN_FLASH);
        
        wpnmod_set_offset_float(iItem, Offset_flNextPrimaryAttack, 0.10);
        wpnmod_set_offset_float(iItem, Offset_flTimeWeaponIdle, 15.0);
        
        wpnmod_set_player_anim(iPlayer, PLAYER_ATTACK1);
        
        new reload = random_num(0 ,1);
        switch(reload)
            {
                case 0 :
                {
                    wpnmod_send_weapon_anim(iItem, AR2_SHOOT1);    
                }
                case 1 :
                {
                    wpnmod_send_weapon_anim(iItem, AR2_SHOOT2);
                }
            }                              
        
        wpnmod_fire_bullets
        (                                                                                
            iPlayer, 
            iPlayer, 
            1, 
            NO_RECOIL,                                     
            8192.0,                                 
            WEAPON_DAMAGE, 
            DMG_BULLET | DMG_NEVERGIB,                  
            4                        
        );
                                                             
        emit_sound(iPlayer, CHAN_WEAPON, SOUND_FIRE, 0.9, ATTN_NORM, 0, PITCH_NORM);
        
        set_pev(iPlayer, pev_effects, pev(iPlayer, pev_effects) | EF_MUZZLEFLASH); 
        set_pev(iPlayer, pev_punchangle, Float: {-4.0, 0.0, 0.0});
                                                        
}
public AR2_SecondaryAttack(iItem,iPlayer ,iClip,iAmmo, const bool: bBounce)
{
    if (iClip-15 < 0)
    {   
    emit_sound(iPlayer,0,EMPTY_SOUND,1.0, ATTN_NORM, 0, PITCH_NORM )
    wpnmod_set_offset_float( iItem, Offset_flNextPrimaryAttack, 1.5);
        return;
    }
                                                        
    AR2GG_Fire(iItem, iPlayer, iClip, iAmmo, true);    
             
}

                                   
AR2GR_Create(const Float: vecPosition[3], const Float: vecVelocity[3], const iOwner, const bool: bBounce)
{                                 
    new iAR2GR, Float: vecAngles[3], Float: flGametime = get_gametime();

    static iszAllocStringCached;
    if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "info_target")))
    {                                          
        iAR2GR = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
    }
    
    if (!pev_valid(iAR2GR))
    {
        return FM_NULLENT;
    }                                         
                    
    engfunc(EngFunc_VecToAngles, vecVelocity, vecAngles);

    set_pev(iAR2GR, pev_classname, "AR2GR");
    set_pev(iAR2GR, pev_solid, SOLID_BBOX);
    set_pev(iAR2GR, pev_dmg, AR2G_DAMAGE);
    set_pev(iAR2GR, pev_velocity, vecVelocity);
    set_pev(iAR2GR, pev_angles, vecAngles);
    set_pev(iAR2GR, pev_owner, iOwner);     
    set_pev(iAR2GR, pev_gravity, 0.1);
    set_pev(iAR2GR, pev_spawnflags, ~(1 << SF_EXPLOSION_NODEBRIS));
                               
    if (!bBounce)
    {
        set_pev(iAR2GR, pev_movetype, MOVETYPE_FLY);
        wpnmod_set_touch(iAR2GR, "AR2GR_RocketTouch");
    }
    else
    {
        set_pev(iAR2GR, pev_movetype, MOVETYPE_BOUNCE);
        set_pev(iAR2GR, pev_dmgtime, flGametime + AR2G_BOUNCE_TIME);
        wpnmod_set_touch(iAR2GR, "AR2GR_BounceTouch");
    }
    
    SET_MODEL(iAR2GR, MODEL_AR2G);
    SET_ORIGIN(iAR2GR, vecPosition);
    SET_SIZE(iAR2GR, Float: {0.0, 0.0, 0.0}, Float: {0.0, 0.0, 0.0});
    
    wpnmod_set_think(iAR2GR, "AR2GR_FlyThink");
    set_pev(iAR2GR, pev_nextthink, flGametime + 0.01);
    
    AR2GR_SetGlow(iAR2GR);
    wpnmod_set_offset_int(iAR2GR, Offset_iBounce, bBounce);
    
    return iAR2GR;
}

                                                   
AR2GR_SetGlow(const iAR2GR)
{
    new iGlowSprite;      
    
    static iszAllocStringCached;
    if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "env_sprite")))
    {
        iGlowSprite = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
    }
    
    if (!pev_valid(iGlowSprite))
    {
        return;
    }
    
    wpnmod_set_offset_int(iAR2GR, Offset_iGlow, iGlowSprite);
    
    set_pev(iGlowSprite, pev_classname, "AR2GR_glow");
    set_pev(iGlowSprite, pev_movetype, MOVETYPE_FOLLOW);
    set_pev(iGlowSprite, pev_solid, SOLID_NOT);
    
    set_pev(iGlowSprite, pev_skin, iAR2GR);
    set_pev(iGlowSprite, pev_body, 0);
    set_pev(iGlowSprite, pev_aiment, iAR2GR);
            
    set_pev(iGlowSprite, pev_scale, 0.8);
            
    set_pev(iGlowSprite, pev_renderfx, kRenderFxDistort);
    set_pev(iGlowSprite, pev_rendercolor, Float: {180.0, 180.0, 40.0});
    set_pev(iGlowSprite, pev_rendermode, kRenderTransAdd);
    set_pev(iGlowSprite, pev_renderamt, 100.0);
    
    SET_MODEL(iGlowSprite, SPRITE_GLOW);
}


public AR2GR_FlyThink(const iAR2GR)
{
    static Float: flDmgTime;
    static Float: vecOrigin[3];
    
    pev(iAR2GR, pev_origin, vecOrigin);
    pev(iAR2GR, pev_dmgtime, flDmgTime);
    
    if (wpnmod_get_offset_int(iAR2GR, Offset_iBounce) && flDmgTime <= get_gametime())
    {
        wpnmod_explode_entity(iAR2GR, .szCallBack = "AR2GR_Explode");
        return;
    }

    // Sprite spray

    
    set_pev(iAR2GR, pev_nextthink, get_gametime () + 0.13);
}
                                                       

public AR2GR_RocketTouch(const iAR2GR)
{   emit_sound(iAR2GR, CHAN_VOICE, SOUND_GRENADE_EXP, 0.25, ATTN_NORM, 0, PITCH_NORM);   
    wpnmod_explode_entity(iAR2GR, .szCallBack = "AR2GR_Explode");
    
}

public AR2GR_BounceTouch(const iAR2GR, const iOther)
{

    new Float: flTakeDmg;
    new Float: vecVelocity[3];
    pev(iOther, pev_takedamage, flTakeDmg);
    pev(iAR2GR, pev_velocity, vecVelocity);
    
    if (flTakeDmg > DAMAGE_NO)
    {
        wpnmod_explode_entity(iAR2GR, .szCallBack = "AR2GR_Explode");
        return;
    }
    
    if (pev(iAR2GR, pev_flags) & FL_ONGROUND)
    {
        xs_vec_mul_scalar(vecVelocity, 0.5, vecVelocity);
        set_pev(iAR2GR, pev_velocity, vecVelocity);
    }
    else                                                                 
    {                                                                           
      emit_sound(iAR2GR, CHAN_VOICE, "weapons/ar2_grbounce.wav", 0.25, ATTN_NORM, 0, PITCH_NORM); 
    }                                                                                 
} 


                                                       
public AR2GR_Explode(const iAR2GR, const iTrace)
{   if(pev_valid(iAR2GR)){ 
    new iSpriteGlow = wpnmod_get_offset_int(iAR2GR, Offset_iGlow);
                                            
    if (pev_valid(iSpriteGlow))
    {
        set_pev(iSpriteGlow, pev_flags, FL_KILLME);
    }
                    
    new Float: vecSrc[3];
    new Float: vecOrigin[3];
                        
    pev(iAR2GR, pev_origin, vecOrigin);
    get_tr2(iTrace, TR_vecEndPos, vecSrc);
    
    
     // Explode effect   
    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0);
    write_byte(TE_SPRITE);                                                          
    engfunc(EngFunc_WriteCoord, vecOrigin[0]);
    engfunc(EngFunc_WriteCoord, vecOrigin[1]);    
    engfunc(EngFunc_WriteCoord, vecOrigin[2]);    
    write_short(g_SpriteIndexExplode1);
    write_byte(20);                                                      
    write_byte(128);    
    emit_sound(iAR2GR, CHAN_VOICE, SOUND_GRENADE_EXP, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
    message_end();                                    
}       
}
AR2GG_Fire(const iItem, const iPlayer, iClip, const iAmmo, const bool: bBounce)
{                     
    if (iClip-15 < 0)
    {                                                                        
        emit_sound(iPlayer,0,EMPTY_SOUND,1.0, ATTN_NORM, 0, PITCH_NORM )                                               
        return;
    }                                         

    new Float: vecOrigin[3];
    new Float: vecVelocity[3];                                      
                                                             
    wpnmod_set_offset_int(iItem, Offset_iClip, iClip -= 15);
    wpnmod_set_offset_int(iItem, Offset_iInSpecialReload, 0);
    
    wpnmod_set_offset_int(iPlayer, Offset_iWeaponVolume, LOUD_GUN_VOLUME);
    wpnmod_set_offset_int(iPlayer, Offset_iWeaponFlash, BRIGHT_GUN_FLASH);
    
    wpnmod_set_offset_float(iItem, Offset_flNextPrimaryAttack, 0.5);
    wpnmod_set_offset_float(iItem, Offset_flNextSecondaryAttack, 0.5);
    wpnmod_set_offset_float(iItem, Offset_flTimeWeaponIdle, iClip != 0 ? 0.5 : 0.75);
    
    wpnmod_send_weapon_anim(iItem, AR2_GRENADE);
    wpnmod_set_player_anim(iPlayer, PLAYER_ATTACK1);
                                                              
    velocity_by_aim(iPlayer, bBounce ? AR2G_BOUNCE_VELOCITY : AR2G_FLY_VELOCITY, vecVelocity);
    wpnmod_get_gun_position(iPlayer, vecOrigin, 16.0, 8.0, -8.0);                   
    emit_sound(iPlayer, CHAN_WEAPON, SOUND_GRENADE, 0.9, ATTN_NORM, 0, PITCH_NORM); 
    AR2GR_Create(vecOrigin, vecVelocity, iPlayer, bBounce);
    
} 
   public AR2Ammo_Spawn(const iItem)
{                                           
    // Setting world model
    SET_MODEL(iItem, MODEL_AMMO);
}



public AR2Ammo_AddAmmo(const iItem, const iPlayer)
{
    new iResult =                                            
    (                                                                  
        ExecuteHamB
        (
            Ham_GiveAmmo, 
            iPlayer,             
            WEAPON_MAX_CLIP, 
            WEAPON_PRIMARY_AMMO, 
            WEAPON_PRIMARY_AMMO_MAX
        ) != -1            
    );
    
    if (iResult)              
    {
        emit_sound(iItem, CHAN_ITEM, "items/9mmclip1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
    }
    
    return iResult;
}
Назад
Верх