I've seen it somewhere before. The guys officially used SG552 Zoom as AWP ZOOM. And I decided to test it. I could not do it with any kind of effort. If you have friends who can do it with you, then I'm happy.
PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <cstrike>
new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
new g_event, g_has[33], g_clip[33], oldweap[33]
new g_hasZoom2, g_hasZoom, Float:g_flNextUseTime[33], smoke
public plugin_init()
{
register_plugin("[Weapon]: SG552 ZOOM for AWP ZOOM", "0.1", "unknown")
register_event("CurWeapon","CurrentWeapon","be","1=1")
//register_forward(FM_SetModel, "SetModel")
register_forward(FM_UpdateClientData, "UpdateClientData_Post", 1)
register_forward(FM_PlaybackEvent, "PlaybackEvent")
RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
RegisterHam(Ham_Item_AddToPlayer, "weapon_sg552", "AddToPlayer")
RegisterHam(Ham_Item_PostFrame, "weapon_sg552", "ItemPostFrame")
RegisterHam(Ham_Weapon_Reload, "weapon_sg552", "Reload")
RegisterHam(Ham_Weapon_Reload, "weapon_sg552", "Reload_Post", 1)
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_sg552", "PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_sg552", "PrimaryAttack_Post", 1)
RegisterHam(Ham_Item_Holster, "weapon_sg552", "Holster_Post", 1)
register_forward(FM_CmdStart, "CmdStart")
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_sg552", "SecondaryAttack")
register_clcmd("say sg552", "give_weapon")
}
public plugin_precache()
{
smoke = precache_model("sprites/sniper_scope.spr")
}
public SecondaryAttack(weapon)
{
new id = get_pdata_cbase(weapon, 41, 4)
if(g_has[id])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
if(!is_user_alive(iAttacker))
return
new g_currentweapon = get_user_weapon(iAttacker)
if(g_currentweapon != CSW_SG552) return
if(!g_has[iAttacker]) return
static Float:flEnd[3]
get_tr2(ptr, TR_vecEndPos, flEnd)
if(iEnt)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
engfunc(EngFunc_WriteCoord,flEnd[0])
engfunc(EngFunc_WriteCoord,flEnd[1])
engfunc(EngFunc_WriteCoord,flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
write_short(iEnt)
message_end()
}
else
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
engfunc(EngFunc_WriteCoord,flEnd[0])
engfunc(EngFunc_WriteCoord,flEnd[1])
engfunc(EngFunc_WriteCoord,flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
engfunc(EngFunc_WriteCoord,flEnd[0])
engfunc(EngFunc_WriteCoord,flEnd[1])
engfunc(EngFunc_WriteCoord,flEnd[2])
write_short(iAttacker)
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
//public PrecacheEvent_Post(type, const name[]) if(equal("events/sg552.sc", name)) g_event = get_orig_retval()
public client_disconnect(id) g_has[id] = false
/*public SetModel(ent, model[])
{
if(!is_valid_ent(ent))
return FMRES_IGNORED
static szClassName[33]
entity_get_string(ent, EV_SZ_classname, szClassName, charsmax(szClassName))
if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED
if(equal(model, "models/w_sg552.mdl"))
{
if(!is_valid_ent(find_ent_by_owner(-1, "weapon_sg552", ent)))
return FMRES_IGNORED
if(g_has[entity_get_edict(ent, EV_ENT_owner)])
{
entity_set_int(find_ent_by_owner(-1, "weapon_sg552", ent), EV_INT_impulse, 45488)
g_has[entity_get_edict(ent, EV_ENT_owner)] = false
entity_set_model(ent, "models/w_sg552.mdl")
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}*/
public give_weapon(id)
{
new iWep2 = give_item(id,"weapon_sg552")
if( iWep2 > 0 )
{
cs_set_weapon_ammo(iWep2, 50)
cs_set_user_bpammo (id, CSW_SG552, 250)
set_anim(id, 2)
set_pdata_float(id, 83, 1.0, 5)
}
g_has[id] = true
}
public AddToPlayer(wpn, id)
{
if(!is_valid_ent(wpn) || !is_user_connected(id))
return HAM_IGNORED
if(entity_get_int(wpn, EV_INT_impulse) == 45488)
{
g_has[id] = true
entity_set_int(wpn, EV_INT_impulse, 0)
}
return HAM_IGNORED
}
public CurrentWeapon(id)
{
replace_weapon_models(id, read_data(2))
if(read_data(2) != CSW_SG552 || !g_has[id]) return
if(g_hasZoom == 1 || g_hasZoom2 == 2)
{
set_pev(id, pev_viewmodel2, "")
}
else set_pev(id, pev_viewmodel2, "models/v_sg552.mdl")
}
replace_weapon_models(id, wpnid)
{
switch (wpnid)
{
case CSW_SG552:
{
if(g_has[id])
{
set_pev(id, pev_viewmodel2, "models/v_sg552.mdl")
set_pev(id, pev_weaponmodel2, "models/p_sg552.mdl")
if(oldweap[id] != CSW_SG552)
{
set_anim(id, 2)
set_pdata_float(id, 83, 1.0, 5)
}
}
}
}
oldweap[id] = wpnid
}
public UpdateClientData_Post(Player, SendWeapons, CD_Handle)
{
if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_SG552 || !g_has[Player]))
return FMRES_IGNORED
set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
return FMRES_HANDLED
}
public client_PostThink(id)
{
if(!is_user_alive(id) || !g_has[id] || get_user_weapon(id) != CSW_SG552)
return
if(g_hasZoom2 && g_hasZoom)
{
static Float:Origin[3]; get_position(id, 3.0, -4.0, -7.0, Origin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(smoke)
write_byte(5)
write_byte(1)
write_byte(14)
message_end()
}
}
public PrimaryAttack(wpn)
{
new id = get_pdata_cbase(wpn, 41, 4)
if (!g_has[id]) return
}
public PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
if ((eventid != g_event))
return FMRES_IGNORED
if (!(1 <= invoker <= get_maxplayers()))
return FMRES_IGNORED
playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
return FMRES_SUPERCEDE
}
public PrimaryAttack_Post(wpn)
{
new id = get_pdata_cbase(wpn, 41, 4)
if(!is_user_alive(id) || !g_has[id])
return
emit_sound(id, CHAN_WEAPON, "weapons/sg552-1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
emit_sound(id, CHAN_WEAPON, "weapons/sg552-2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
set_anim(id, random_num(3,5))
}
stock set_anim(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte(Sequence)
write_byte(pev(Player, pev_body))
message_end()
}
public ItemPostFrame(wpn)
{
new id = pev(wpn, pev_owner)
if (!is_user_connected(id)) return HAM_IGNORED
if (!g_has[id])return HAM_IGNORED
static iClipExtra
iClipExtra = 50
new Float:flNextAttack = get_pdata_float(id, 83, 5)
new iBpAmmo = cs_get_user_bpammo(id, CSW_SG552)
new iClip = get_pdata_int(wpn, 51, 4)
new fInReload = get_pdata_int(wpn, 54, 4)
if( fInReload && flNextAttack <= 0.0 )
{
new j = min(iClipExtra - iClip, iBpAmmo)
set_pdata_int(wpn, 51, iClip + j, 4)
cs_set_user_bpammo(id, CSW_SG552, iBpAmmo-j)
set_pdata_int(wpn, 54, 0, 4)
fInReload = 0
}
return HAM_IGNORED
}
public Reload(wpn)
{
new id = pev(wpn, pev_owner)
if(!is_user_connected(id)) return HAM_IGNORED
if(!g_has[id]) return HAM_IGNORED
static iClipExtra
//if(g_has[id])
iClipExtra = 50
g_clip[id] = -1
new iBpAmmo = cs_get_user_bpammo(id, CSW_SG552)
new iClip = get_pdata_int(wpn, 51, 4)
if (iBpAmmo <= 0)
return HAM_SUPERCEDE
if (iClip >= iClipExtra)
return HAM_SUPERCEDE
g_clip[id] = iClip
return HAM_IGNORED
}
public Reload_Post(wpn)
{
new id = pev(wpn, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED
if (!g_has[id])
return HAM_IGNORED
if (g_clip[id] == -1)
return HAM_IGNORED
set_pdata_int(wpn, 51, g_clip[id], 4)
set_pdata_int(wpn, 54, 1, 4)
g_hasZoom = 0
g_hasZoom2 = 0
set_anim(id, 1)
return HAM_IGNORED
}
public Holster_Post(weapon_entity)
{
static Player
Player = get_pdata_cbase(weapon_entity, 41, 4)
g_flNextUseTime[Player] = 0.0
if(g_has[Player])
{
g_hasZoom = false
g_hasZoom2 = false
cs_set_user_zoom(Player, CS_RESET_ZOOM, 1)
}
}
public CmdStart(id, uc_handle, seed)
{
if (!is_user_alive(id) || !g_has[id])
return FMRES_IGNORED
if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2))
{
new szClip, szAmmo
new szWeapID = get_user_weapon(id, szClip, szAmmo)
if(szWeapID == CSW_SG552 && g_has[id] && !g_hasZoom == true)
{
g_hasZoom = 1
cs_set_user_zoom(id, CS_SET_FIRST_ZOOM, 1)
emit_sound(id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100)
}
else if(szWeapID == CSW_SG552 && g_has[id] && !g_hasZoom2 == true)
{
g_hasZoom2 = true
cs_set_user_zoom(id, CS_SET_SECOND_ZOOM, 2)
emit_sound(id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100)
}
else if(szWeapID == CSW_SG552 && g_has[id] && g_hasZoom)
{
g_hasZoom = false
g_hasZoom2 = 0
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
}
}
return FMRES_IGNORED
}
stock get_position(ent, Float:forw, Float:right, Float:up, Float:vStart[])
{
static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
pev(ent, pev_origin, vOrigin)
pev(ent, pev_view_ofs,vUp) //for player
xs_vec_add(vOrigin,vUp,vOrigin)
pev(ent, pev_v_angle, vAngle) // if normal entity ,use pev_angles
angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors
angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}