Assault Cannon [MiniGun]

Assault Cannon [MiniGun] 0.1

Нет прав для скачивания
C++:
#include <amxmodx>
#include <fakemeta_util>
#include <hl_wpnmod>

// Weapon settings
#define WEAPON_NAME             "weapon_ac"
#define WEAPON_SLOT            5
#define WEAPON_POSITION            5
#define WEAPON_PRIMARY_AMMO        "9mm"
#define WEAPON_PRIMARY_AMMO_MAX        250
#define WEAPON_SECONDARY_AMMO        "" // NULL
#define WEAPON_SECONDARY_AMMO_MAX    -1
#define WEAPON_MAX_CLIP            -1
#define WEAPON_DEFAULT_AMMO        50
#define WEAPON_FLAGS            0
#define WEAPON_WEIGHT            34
#define WEAPON_DAMAGE            10.0

// Models
#define MODEL_WORLD            "models/w_tfac.mdl"
#define MODEL_VIEW            "models/v_tfac.mdl"
#define MODEL_PLAYER            "models/p_tfac.mdl"
#define MODEL_SHELL            "models/shell.mdl"

// Sounds
#define SOUND_SPINUP            "weapons/asscan1.wav"
#define SOUND_FIRE            "weapons/asscan2.wav"
#define SOUND_SPINDOWN            "weapons/asscan3.wav"
#define SOUND_SPIN            "weapons/asscan4.wav"

// Animation
#define ANIM_EXTENSION            "egon"

new Float:ms,shell

enum _:anima{
    IDLE,
    IDLE2,
    SPINUP,
    SPINDOWN,
    FIRE,
    DRAW,
    HOLSTER
}

public plugin_precache(){
    PRECACHE_MODEL(MODEL_WORLD)
    PRECACHE_MODEL(MODEL_VIEW)
    PRECACHE_MODEL(MODEL_PLAYER)
 
    PRECACHE_SOUND(SOUND_SPINUP)
    PRECACHE_SOUND(SOUND_FIRE)
    PRECACHE_SOUND(SOUND_SPINDOWN)
    PRECACHE_SOUND(SOUND_SPIN)
 
    shell = PRECACHE_MODEL(MODEL_SHELL)
 
    PRECACHE_GENERIC("sprites/weapon_ac.spr")
    PRECACHE_GENERIC("sprites/weapon_ac.txt")
}


public plugin_init() {
    register_plugin("Assault Cannon","0.1","[LF] | Dr.Freeman")
 
    new ac = 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(ac,Fwd_Wpn_Deploy,"fw_AcDeploy")
    wpnmod_register_weapon_forward(ac,Fwd_Wpn_Holster,"fw_AcHolster")
    wpnmod_register_weapon_forward(ac,Fwd_Wpn_PrimaryAttack,"fw_AcPrimary")
    wpnmod_register_weapon_forward(ac,Fwd_Wpn_SecondaryAttack,"fw_AcSecondary")
    wpnmod_register_weapon_forward(ac,Fwd_Wpn_Idle,"fw_AcIdle")
    wpnmod_register_weapon_forward(ac,Fwd_Wpn_Spawn,"fw_AcSpawn")
}

public plugin_cfg(){
    ms = get_cvar_float("sv_maxspeed")
}

public fw_AcDeploy(ent,player){
    return wpnmod_default_deploy(ent,MODEL_VIEW,MODEL_PLAYER,DRAW,ANIM_EXTENSION)
}

public fw_AcPrimary(ent,player,clip,ammo){
    new Float:spintime = wpnmod_get_offset_float(ent,Offset_flStartThrow)
 
    if(ammo<=0){
        if(spintime){
            emit_sound(player,CHAN_WEAPON,SOUND_SPINDOWN,0.9,ATTN_NORM,0,PITCH_NORM)
            fm_set_user_maxspeed(player,ms)
            wpnmod_send_weapon_anim(ent,SPINDOWN)
 
            spintime=0.0
 
            wpnmod_set_offset_float(ent,Offset_flStartThrow,spintime)
        }
    
        wpnmod_play_empty_sound(ent)
        wpnmod_set_offset_float(ent,Offset_flNextPrimaryAttack,0.15)
 
        return
    }
 
    fm_set_user_maxspeed(player,115.0)
 
    if(!spintime)
        emit_sound(player,CHAN_WEAPON,SOUND_SPINUP,0.9,ATTN_NORM,0,PITCH_NORM)
 
    if(spintime<=0.0){
        wpnmod_send_weapon_anim(ent,SPINUP)
        spintime+=0.1
    }else if(spintime<=0.4){
        spintime+=0.1
    }else if(spintime>0.4){
        fm_set_user_maxspeed(player,54.0)
        emit_sound(player,CHAN_WEAPON,SOUND_FIRE,0.9,ATTN_NORM,0,PITCH_NORM)
 
        wpnmod_send_weapon_anim(ent,FIRE)
        wpnmod_set_player_anim(player,PLAYER_ATTACK1)
 
        wpnmod_set_offset_int(player,Offset_iWeaponVolume,LOUD_GUN_VOLUME)
        wpnmod_set_offset_int(player,Offset_iWeaponFlash,BRIGHT_GUN_FLASH)
 
        wpnmod_eject_brass(player,shell,TE_BOUNCE_SHELL,16.0,-18.0,6.0)
        wpnmod_eject_brass(player,shell,TE_BOUNCE_SHELL,16.0,-18.0,6.0)
        wpnmod_fire_bullets(player,player,7,VECTOR_CONE_15DEGREES,4096.0,WEAPON_DAMAGE,DMG_BULLET,7)
 
        wpnmod_set_player_ammo(player,WEAPON_PRIMARY_AMMO,ammo-2)
    }
 
    wpnmod_set_offset_float(ent,Offset_flStartThrow,spintime)
    wpnmod_set_offset_float(ent,Offset_flNextPrimaryAttack,0.1)
    wpnmod_set_offset_float(ent,Offset_flNextSecondaryAttack,0.2)
    wpnmod_set_offset_float(ent,Offset_flTimeWeaponIdle,0.1)
}

public fw_AcSecondary(ent,player,clip,ammo){
    new Float:spintime = wpnmod_get_offset_float(ent,Offset_flStartThrow)
 
    if(ammo<=0){
        if(spintime)
            wpnmod_set_offset_float(ent,Offset_flTimeWeaponIdle,0.1)
    
        wpnmod_play_empty_sound(ent)
        wpnmod_set_offset_float(ent,Offset_flNextPrimaryAttack,0.15)
 
        return
    }
 
    fm_set_user_maxspeed(player,115.0)
 
    if(spintime==0.4)
        wpnmod_send_weapon_anim(ent,FIRE)
 
 
    if(!spintime)
        emit_sound(player,CHAN_WEAPON,SOUND_SPINUP,0.9,ATTN_NORM,0,PITCH_NORM)
 
    if(spintime<=0.0){
        wpnmod_send_weapon_anim(ent,SPINUP)
        spintime+=0.1
    }else if(spintime<=0.4){
        spintime+=0.1
    }else if(spintime>0.4){
        emit_sound(player,CHAN_WEAPON,SOUND_SPIN,0.9,ATTN_NORM,0,PITCH_NORM)
    }
 
    wpnmod_set_offset_float(ent,Offset_flStartThrow,spintime)
    wpnmod_set_offset_float(ent,Offset_flNextSecondaryAttack,0.1)
    wpnmod_set_offset_float(ent,Offset_flTimeWeaponIdle,0.1)
}

public fw_AcIdle(ent,player,clip,ammo){
    wpnmod_reset_empty_sound(ent)
 
    if (wpnmod_get_offset_float(ent,Offset_flTimeWeaponIdle)>0.0)
        return
 
    if(wpnmod_get_offset_float(ent,Offset_flStartThrow)){
        emit_sound(player,CHAN_WEAPON,SOUND_SPINDOWN,0.9,ATTN_NORM,0,PITCH_NORM)
        fm_set_user_maxspeed(player,ms)
        wpnmod_send_weapon_anim(ent,SPINDOWN)
 
        wpnmod_set_offset_float(ent,Offset_flStartThrow,0.0)
        wpnmod_set_offset_float(ent,Offset_flTimeWeaponIdle,3.0)
 
        return
    }
 
    new anim,Float:next
 
    if (random_float(0.0, 1.0) <= 0.75){
        anim = IDLE2
        next = 5.0
    }
    else{
        anim = IDLE
        next = 6.2
    }
 
    wpnmod_send_weapon_anim(ent,anim)
    wpnmod_set_offset_float(ent,Offset_flTimeWeaponIdle,next)
}

public fw_AcHolster(ent,player,clip,ammo){
    if(wpnmod_get_offset_float(ent,Offset_flStartThrow)){
        emit_sound(player,CHAN_WEAPON,SOUND_SPINDOWN,0.9,ATTN_NORM,0,PITCH_NORM)
        fm_set_user_maxspeed(player,ms)
        wpnmod_send_weapon_anim(ent,SPINDOWN)
 
        wpnmod_set_offset_float(ent,Offset_flStartThrow,0.0)
    }
}

public fw_AcSpawn(ent){
    SET_MODEL(ent,MODEL_WORLD)
 
    wpnmod_set_offset_int(ent,Offset_iDefaultAmmo,WEAPON_DEFAULT_AMMO)
}
Назад
Верх