PHP Code:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <engine>
#include <fakemeta_util>
#include <hamsandwich>
#include <zombieplague>
new bool:g_haswp[33]
const m_pPlayer = 41
const m_iId = 43
const m_fKnown = 44
const m_flNextPrimaryAttack = 46
const m_flNextSecondaryAttack = 47
const m_flTimeWeaponIdle = 48
const m_iPrimaryAmmoType = 49
const m_iClip = 51
const m_fInReload = 54
const m_fInSpecialReload = 55
const m_fSilent = 74
// players offsets
const m_flNextAttack = 83
const m_rgAmmo_player_Slot0 = 376
stock const g_iDftMaxClip[CSW_P90+1] = {
-1, 13, -1, 10, 1, 7, 1, 30, 30, 1, 30,
20, 25, 30, 35, 25, 12, 20, 10, 30, 100,
8 , 30, 30, 20, 2, 7, 30, 30, -1, 50}
stock const Float:g_fDelay[CSW_P90+1] = {
0.00, 2.70, 0.00, 2.00, 0.00, 0.55, 0.00, 3.15, 3.30, 0.00, 4.50,
2.70, 3.50, 3.35, 2.45, 3.30, 2.70, 2.20, 2.50, 2.63, 4.70,
0.55, 3.05, 2.12, 3.50, 0.00, 2.20, 3.00, 2.45, 0.00, 3.40
}
const SILENT_BS = ((1<<CSW_USP)|(1<<CSW_M4A1))
stock const g_iReloadAnims[CSW_P90+1] = {
-1, 5, -1, 3, -1, 6, -1, 1, 1, -1, 14,
4, 2, 3, 1, 1, 13, 7, 4, 1, 3,
6, 11, 1, 3, -1, 4, 1, 1, -1, 1}
new v_model[64] = "models/v_m95.mdl"
new p_model[64] = "models/p_m95.mdl"
new w_model[64] = "models/w_m95.mdl"
#define weapon_impulse 1212454554
new g_dmg, g_speed, g_clip, g_ammo, g_speed_player
new g_itemid
public plugin_init()
{
register_plugin("barrett - M95", "1.1", "Teo")
register_event("Curweapon", "current_weapon", "be", "1=1")
RegisterHam(Ham_TakeDamage, "player", "fw_takedamage")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_awp", "fw_speed",1)
register_forward(FM_SetModel, "forward_setmodel", 1)
register_forward(FM_PlayerPreThink,"fw_ppt")
RegisterHam(Ham_Item_AddToPlayer, "weapon_ak47", "fw_item_addplayer")
RegisterHam(Ham_Item_PostFrame, "weapon_awp", "Item_PostFrame")
g_itemid = zp_register_extra_item(" Barrett M95",25,ZP_TEAM_HUMAN)
g_dmg = register_cvar("zp_m95_dmg","5")
g_speed = register_cvar("zp_m95_speed","3")
g_clip = register_cvar("zp_m95_clip","5")
g_ammo = register_cvar("zp_m95_ammo","30")
g_speed_player = register_cvar("zp_m95_player_speed","200")
}
public plugin_precache()
{
precache_model(v_model)
precache_model(p_model)
precache_model(w_model)
}
public current_weapon(id)
{
if(g_haswp[id] && get_user_weapon(id) == CSW_AWP)
{
set_pev(id, pev_viewmodel2, v_model)
set_pev(id, pev_weaponmodel2, p_model)
}
}
public fw_speed(ent)
{
new id = pev(id, pev_owner)
if(g_haswp[id] && get_user_weapon(id) == CSW_AWP)
{
if(!ent)
return
new Float:Delay = get_pdata_float(ent, 46, 4) * get_pcvar_float(g_speed)
set_pdata_float(ent, 46, Delay, 4)
}
return
}
public fw_takedamage(id, inflictor, victim, Float:damage, damagebits)
{
if(g_haswp[id] && get_user_weapon(id) == CSW_AWP)
{
SetHamParamFloat(4, damage * get_pcvar_float(g_dmg))
}
}
public Item_PostFrame(iEnt)
{
static id ; id = get_pdata_cbase(iEnt, m_pPlayer, 4)
new plrClip, plrAmmo, plrWeapId
plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
if (plrWeapId == CSW_AWP && g_haswp[id])
{
static iId ; iId = get_pdata_int(iEnt, m_iId, 4)
static iMaxClip ; iMaxClip = get_pcvar_num(g_clip)
static fInReload ; fInReload = get_pdata_int(iEnt, m_fInReload, 4)
static Float:flNextAttack ; flNextAttack = get_pdata_float(id, m_flNextAttack, 5)
static iAmmoType ; iAmmoType = m_rgAmmo_player_Slot0 + get_pdata_int(iEnt, m_iPrimaryAmmoType, 4)
static iBpAmmo ; iBpAmmo = get_pdata_int(id, iAmmoType, 5)
static iClip ; iClip = get_pdata_int(iEnt, m_iClip, 4)
if( fInReload && flNextAttack <= 0.0 )
{
new j = min(iMaxClip - iClip, iBpAmmo)
set_pdata_int(iEnt, m_iClip, iClip + j, 4)
set_pdata_int(id, iAmmoType, iBpAmmo-j, 5)
set_pdata_int(iEnt, m_fInReload, 0, 4)
fInReload = 0
}
static iButton ; iButton = pev(id, pev_button)
if( (iButton & IN_ATTACK2 && get_pdata_float(iEnt, m_flNextSecondaryAttack, 4) <= 0.0)
|| (iButton & IN_ATTACK && get_pdata_float(iEnt, m_flNextPrimaryAttack, 4) <= 0.0) )
{
return
}
if( iButton & IN_RELOAD && !fInReload )
{
if( iClip >= iMaxClip )
{
set_pev(id, pev_button, iButton & ~IN_RELOAD)
if( SILENT_BS & (1<<iId) && !get_pdata_int(iEnt, m_fSilent, 4) )
{
SendWeaponAnim( id, iId == CSW_USP ? 8 : 7 )
}
else
{
SendWeaponAnim(id, 0)
}
}
else if( iClip == g_iDftMaxClip[iId] )
{
if( iBpAmmo )
{
set_pdata_float(id, m_flNextAttack, g_fDelay[iId], 5)
if( SILENT_BS & (1<<iId) && get_pdata_int(iEnt, m_fSilent, 4) )
{
SendWeaponAnim( id, iId == CSW_USP ? 5 : 4 )
}
else
{
SendWeaponAnim(id, g_iReloadAnims[iId])
}
set_pdata_int(iEnt, m_fInReload, 1, 4)
set_pdata_float(iEnt, m_flTimeWeaponIdle, g_fDelay[iId] + 0.5, 4)
}
}
}
}
}
SendWeaponAnim(id, iAnim)
{
set_pev(id, pev_weaponanim, iAnim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
write_byte(iAnim)
write_byte(pev(id,pev_body))
message_end()
}
public zp_extra_item_selected(id, itemid)
{
if(itemid == g_itemid)
{
g_haswp[id] = true
fm_give_item(id,"weapon_awp")
new ent = fm_find_ent_by_owner(-1,"weapon_awp",id)
if(!ent)
return
cs_set_user_bpammo(id,CSW_AWP,get_pcvar_num(g_ammo))
cs_set_weapon_ammo(ent, get_pcvar_num(g_clip))
}
}
public forward_setmodel(entity, const model[])
{
if(!is_valid_ent(entity))
return FMRES_IGNORED;
static szClassName[33]
entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED;
static Owner
Owner = pev(entity, pev_owner)
if(equal(model, "models/w_ak47.mdl"))
{
static weapid
weapid = find_ent_by_owner(-1, "weapon_m249", entity)
if(!is_valid_ent(weapid))
return FMRES_IGNORED;
if(g_haswp[Owner])
{
entity_set_int(weapid, EV_INT_impulse, weapon_impulse)
g_haswp[Owner] = false
entity_set_model(entity, w_model)
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}
public fw_item_addplayer(ent, id)
{
if(!is_valid_ent(ent) || !is_user_connected(id))
return HAM_IGNORED;
if(entity_get_int(ent, EV_INT_impulse) == weapon_impulse)
{
g_haswp[id] = true
entity_set_int(ent, EV_INT_impulse, 0)
return HAM_HANDLED;
}
return HAM_IGNORED;
}
public fw_ppt(id)
{
if(!is_user_alive(id) || zp_get_user_zombie(id))
return FMRES_IGNORED
if(g_haswp[id] && get_user_weapon(id) == CSW_AWP)
{
set_pev(id, pev_maxspeed, get_pcvar_num(g_speed_player))
}
return FMRES_IGNORED
}