PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <gunxpmod>
#include <engine>
#include <cstrike>
#include <zombieplague>
new PLUGIN_NAME[] = "UNLOCK : Sawn Off Shotgun"
new PLUGIN_AUTHOR[] = "xbatista"
new PLUGIN_VERSION[] = "1.0"
new const WEAPON_V_MDL[] = "models/gunxpmod/v_double.mdl";
#define WEAPON_CSW CSW_M3
new const weapon_n[] = "weapon_xm1014";
const m_pPlayer = 41;
const m_flPrimaryAttack = 46;
const m_iClip = 51;
#define IsPlayer(%1) ( 1 <= %1 <= g_maxplayers )
new g_damagedealt_human[33], cvar_dmg_ap_allow, cvar_ammodamage, cvar_ammo_quantity;
new g_hasZoom[33];
new g_ammopacks[33];
new damage_weapon, pCvarRof, weapon_recoil;
new g_maxplayers;
new bool:g_Weapon[33]=false;
new Float:cl_pushangle[33][3];
new szClip, szAmmo;
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
//register_gxm_item("Sawn Off Shotgun", "-Clip -Aim -Rate +Power +Scope ( Xm1014 )", 120)
damage_weapon = register_cvar("gxm_damage_xm","10.0"); // damage multiplier
pCvarRof = register_cvar( "xm_rof", "0.2" ); // weapon rof
weapon_recoil = register_cvar( "xm_recoil", "2.0" ); // weapon recoil
cvar_dmg_ap_allow = register_cvar("gxm_dmg_ap_reward_allow", "1")
cvar_ammodamage = register_cvar("gxm_dmg_for_reward", "500")
cvar_ammo_quantity = register_cvar("gxm_reward_ap_quantity", "1")
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1");
RegisterHam( Ham_Weapon_PrimaryAttack, weapon_n, "Fwd_AttackSpeedPost" , 1 );
RegisterHam(Ham_Weapon_PrimaryAttack, weapon_n, "Fwd_AttackSpeedPre");
RegisterHam(Ham_TakeDamage, "player", "Ham_DamageWeapon");
register_forward( FM_CmdStart, "Fwd_CmdStart" );
g_maxplayers = get_maxplayers();
}
public gunxp_level_change_post(id, level){
g_Weapon[id] = false;
if (level == 28){
g_Weapon[id] = true;
}
}
public gunxp_gun_selected(id, gun){
if(gun > 7)
g_Weapon[id] = false;
if (gun == 28){
g_Weapon[id] = true;
}
}
public client_connect(id)
{
g_Weapon[id] = false;
}
public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, WEAPON_V_MDL);
}
public Fwd_AttackSpeedPre(Ent)
{
new id = pev(Ent,pev_owner);
entity_get_vector( id, EV_VEC_punchangle, cl_pushangle[id]);
}
public Fwd_AttackSpeedPost( const Entity )
{
static id ; id = get_pdata_cbase(Entity, m_pPlayer, 4)
if (g_Weapon[id] && IsPlayer(id) )
{
if ( pev_valid(Entity) )
{
static iClip ; iClip = get_pdata_int(Entity, m_iClip, 4)
if ( iClip > 4 )
{
set_pdata_int(Entity, m_iClip, iClip - 3, 4)
}
else if ( iClip <= 4 )
{
set_pdata_int(Entity, m_iClip, 0, 4)
}
}
set_pdata_float( Entity, m_flPrimaryAttack, get_pcvar_float( pCvarRof ), 4 );
new Float:push[3];
entity_get_vector( id, EV_VEC_punchangle, cl_pushangle[id]);
xs_vec_sub( push, cl_pushangle[id], push);
xs_vec_mul_scalar( push, get_pcvar_float( weapon_recoil ), push);
xs_vec_add( push, cl_pushangle[id], push);
entity_set_vector( id, EV_VEC_punchangle, push);
}
}
public Ham_DamageWeapon(id, inflictor, attacker, Float:damage, damagebits)
{
if ( !IsPlayer(attacker) || !g_Weapon[attacker] )
return HAM_IGNORED;
new weapon2 = get_user_weapon(attacker, _, _);
if( weapon2 == WEAPON_CSW)
{
SetHamParamFloat(4, damage * get_pcvar_float(damage_weapon));
return HAM_HANDLED;
}
if(get_pcvar_num(cvar_dmg_ap_allow))
{
// Store damage dealt
g_damagedealt_human[attacker] += floatround(damage)
// Reward ammo packs for every [ammo damage] dealt
while (g_damagedealt_human[attacker] > get_pcvar_num(cvar_ammodamage))
{
g_ammopacks[attacker]++
g_damagedealt_human[attacker] -= get_pcvar_num(cvar_ammodamage)
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + get_pcvar_num(cvar_ammo_quantity))
}
}
return HAM_IGNORED;
}
public Event_CurWeapon(id)
{
if ( !g_Weapon[id] || !is_user_alive(id) )
return PLUGIN_CONTINUE;
new Gun = read_data(2)
if( Gun == WEAPON_CSW)
{
entity_set_string(id, EV_SZ_viewmodel, WEAPON_V_MDL)
}
return PLUGIN_CONTINUE;
}
public Fwd_CmdStart( id, uc_handle, seed )
{
if( !is_user_alive( id ) || !g_Weapon[id] )
return FMRES_IGNORED;
if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
{
new szWeapID = get_user_weapon( id, szClip, szAmmo )
if( szWeapID == WEAPON_CSW && !g_hasZoom[ id ])
{
g_hasZoom[ id ] = true
cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 1 )
}
else
{ if( g_hasZoom[ id ] )
{
g_hasZoom[ id ] = false
cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
}
}
return FMRES_HANDLED;
}
return FMRES_IGNORED;
}