new const WeaponReference[] = "weapon_deagle";
new Float:g_fDeagleBaseDamage;
new HookChain:g_HookChain_IsPenetrableEntity;
public plugin_precache() {
g_iLaserBeam = precache_model("sprites/laserbeam.spr");
register_plugin("Deagle Super Shot", "0.0.1", "Yoshioka Haruki & Albertio");
RegisterHam(Ham_Item_AddToPlayer, WeaponReference, "Deagle_AddToPlayer_Post", true);
RegisterHam(Ham_Weapon_SecondaryAttack, WeaponReference, "Deagle_SecondaryAttack_Pre", false);
RegisterHam(Ham_Item_PostFrame, WeaponReference, "Deagle_PostFrame_Pre", false);
DisableHookChain(g_HookChain_IsPenetrableEntity =
RegisterHookChain(RG_IsPenetrableEntity, "IsPenetrableEntity_Post", true)
public Deagle_AddToPlayer_Post(const iWeapon, const iPlayer) {
if(is_nullent(iWeapon) || !is_user_alive(iPlayer))
set_member(iWeapon, m_Weapon_bHasSecondaryAttack, true);
g_fDeagleBaseDamage = Float:get_member(iWeapon, m_Weapon_flBaseDamage);
public Deagle_SecondaryAttack_Pre(const iWeapon) {
if(is_nullent(iWeapon) || !get_member(iWeapon, m_Weapon_iClip))
set_member(iWeapon, m_Weapon_flNextSecondaryAttack, g_eCvars[SHOOT_DELAY] + 1.0);
set_entvar(iWeapon, var_hold_time, get_gametime() + g_eCvars[SHOOT_DELAY]);
new iPlayer = get_member(iWeapon, m_pPlayer);
rg_send_bartime(iPlayer, floatround(g_eCvars[SHOOT_DELAY]));
public Deagle_PostFrame_Pre(const iWeapon) {
get_entvar(iWeapon, var_hold_time, flHoldTime);
iPlayer = get_member(iWeapon, m_pPlayer);
if(~get_entvar(iPlayer, var_button) & IN_ATTACK2) {
rg_send_bartime(iPlayer, 0);
set_member(iWeapon, m_Weapon_flNextSecondaryAttack, 0.0);
set_entvar(iWeapon, var_hold_time, 0.0);
if(get_gametime() > flHoldTime) {
set_member(iWeapon, m_Weapon_flBaseDamage, g_eCvars[SHOOT_DAMAGE]);
EnableHookChain(g_HookChain_IsPenetrableEntity);
ExecuteHam(Ham_Weapon_PrimaryAttack, iWeapon);
DisableHookChain(g_HookChain_IsPenetrableEntity);
set_member(iWeapon, m_Weapon_flBaseDamage, g_fDeagleBaseDamage);
set_entvar(iWeapon, var_hold_time, 0.0);
set_member(iWeapon, m_Weapon_iShotsFired, 0);
engfunc(EngFunc_PlaybackEvent, 0, iPlayer, get_member(iWeapon, m_DEAGLE_usFire), 0.0,
Float:{-8192.0, -8192.0, -8192.0}, Float:{-8192.0, -8192.0, -8192.0}, 0.0, 0.0, 0, 0,
get_member(iWeapon, m_Weapon_iClip) == 0, false);
get_entvar(iWeapon, var_endpos, vEndPos);
UTIL_BeamentPoint(iPlayer, vEndPos);
set_entvar(iWeapon, var_endpos, NULL_VECTOR);
public IsPenetrableEntity_Post(const Float:vSrc[3], Float:vEnd[3], const iAttacker, const pHit) {
iWeapon = get_member(iAttacker, m_pActiveItem);
set_entvar(iWeapon, var_endpos, vEnd);
static iPointContents; iPointContents = engfunc(EngFunc_PointContents, vEnd);
if(iPointContents == CONTENTS_SKY)
if(pHit && is_nullent(pHit) || (get_entvar(pHit, var_flags) & FL_KILLME) || !ExecuteHam(Ham_IsBSPModel, pHit))
UTIL_GunshotDecalTrace(pHit, vEnd);
if(iPointContents == CONTENTS_WATER)
static Float:vecPlaneNormal[3];
global_get(glb_trace_plane_normal, vecPlaneNormal);
xs_vec_mul_scalar(vecPlaneNormal, random_float(25.0, 30.0), vecPlaneNormal);
UTIL_TE_STREAK_SPLASH(MSG_PAS, vEnd, vecPlaneNormal, 4, random_num(10, 20), 3, 64);
stock UTIL_BeamentPoint(const iPlayer, Float:vEnd[3]) {
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMENTPOINT);
write_short(iPlayer | 0x1000);
write_short(g_iLaserBeam);
stock UTIL_GunshotDecalTrace(const iEnt, const Float:vOrigin[3]) {
new iDecalId = UTIL_DamageDecal(iEnt);
UTIL_TE_GUNSHOTDECAL(MSG_PAS, vOrigin, iEnt, iDecalId);
stock UTIL_DamageDecal(const iEnt) {
new iRenderMode = get_entvar(iEnt, var_rendermode);
if(iRenderMode == kRenderTransAlpha)
iGlassDecalId = engfunc(EngFunc_DecalIndex, "{bproof1");
if(iRenderMode != kRenderNormal)
iShotDecalId = engfunc(EngFunc_DecalIndex, "{shot1");
return (iShotDecalId - random_num(0, 4));
stock UTIL_TE_GUNSHOTDECAL(const iDest, const Float:vOrigin[3], const iEnt, const iDecalId) {
message_begin_f(iDest, SVC_TEMPENTITY, vOrigin);
write_byte(TE_GUNSHOTDECAL);
write_coord_f(vOrigin[0]);
write_coord_f(vOrigin[1]);
write_coord_f(vOrigin[2]);
stock UTIL_TE_STREAK_SPLASH(const iDest, const Float:vOrigin[3], const Float:vDirection[3], const iColor, const iCount, const iSpeed, const iNoise) {
message_begin_f(iDest, SVC_TEMPENTITY, vOrigin);
write_byte(TE_STREAK_SPLASH);
write_coord_f(vOrigin[0]);
write_coord_f(vOrigin[1]);
write_coord_f(vOrigin[2]);
write_coord_f(vDirection[0]);
write_coord_f(vDirection[1]);
write_coord_f(vDirection[2]);
bind_pcvar_float(create_cvar(
"Время(сек) задержки до супер выстрела"),
bind_pcvar_float(create_cvar(
AutoExecConfig(true, "deagle_super_shot");