[ Dual Beretta Gunslinger ] Friendly Fire
#1
Hola necesito que me ayuden a quitarle el friendly fire a esta arma ya que al usar el click derecho ataca como en el CSNZ y con sus animaciones pero mata a la persona que este usando el arma haga ese ataque

CODIGO
Código PHP:
#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>

#define PLUGIN                     "[ZP] Extra: CSO Weapon Dual Beretta Gunslinger"
#define VERSION                 "0.1"
#define AUTHOR                     "KORD_12.7"

#pragma ctrlchar                 '\'
#pragma compress                 1

//**********************************************
//* Weapon Settings.                           *
//**********************************************

// Main
#define WEAPON_KEY                9753153

#define WEAPON_NAME                 "weapon_buffbaretta"
#define WEAPON_NAME2                "weapon_buffbaretta2"
#define WEAPON_REFERANCE            "weapon_usp"
#define WEAPON_MAX_CLIP                36
#define WEAPON_DEFAULT_AMMO            100

#define WEAPON_MULTIPLIER_DAMAGE         1.15
#define WEAPON_RADIUS_DAMAGE_ATTACK        random_float(30.0, 70.0)
#define WEAPON_RADIUS_ATTACK            250.0
#define WEAPON_KNOCKBACK_POWER            500.0

#define WEAPON_TIME_NEXT_IDLE             3.0
#define WEAPON_TIME_NEXT_ATTACK         0.07
#define WEAPON_TIME_DELAY_DEPLOY         1.0
#define WEAPON_TIME_DELAY_RELOAD         2.0

#define ZP_ITEM_NAME                "Dual Beretta Gunslinger" 

#define MODEL_VIEW                "models/v_buffbarreta_fix3.mdl"
#define MODEL_PLAYER                "models/p_buffbaretta.mdl"
#define MODEL_PLAYER3                "models/ef_scorpion_hole.mdl"
#define MODEL_WORLD                "models/w_buffbaretta.mdl"
#define MODEL_MAN                "models/ef_man.mdl"

// Sounds
#define SOUND_FIRE                "weapons/gunkata-1.wav"
#define SOUND_EXP                "weapons/gunkata_skill_last_exp.wav"
#define SOUND_HIT                "weapons/turbulent9_hit1.wav"
#define SOUND_HIT2                "weapons/turbulent9_hit2.wav"

// Sprites
#define WEAPON_HUD_TXT                "sprites/weapon_buffbaretta.txt"
#define WEAPON_HUD_TXT2                "sprites/weapon_buffbaretta2.txt"

#define WEAPON_HUD_SPR_1            "sprites/640hud176.spr"
#define WEAPON_HUD_SPR_2            "sprites/640hud18_2.spr"
#define WEAPON_HUD_SPR_HIT            "sprites/640hudnull.spr"

#define WEAPON_SPR_MUZZLE            "sprites/muzzleflash77.spr"

// Animation
#define ANIM_EXTENSION                "dualpistols"

// Animation sequences
enum
{    
    
ANIM_IDLE_A,
    
ANIM_IDLE_B,
    
    
ANIM_SHOOT_A,
    
ANIM_SHOOT_LAST_A,
    
    
ANIM_SHOOT_B,
    
ANIM_SHOOT_LAST_B,
    
    
ANIM_RELOAD_A,
    
ANIM_RELOAD_B,

    
ANIM_DRAW_A,
    
ANIM_DRAW_B,
    
    
ANIM_SKILL_LEVEL_1,
    
ANIM_SKILL_LEVEL_2,
    
ANIM_SKILL_LEVEL_3,
    
ANIM_SKILL_LEVEL_4,
    
ANIM_SKILL_LEVEL_5,
    
ANIM_SKILL_LAST
};

//**********************************************
//* Some macroses.                             *
//**********************************************

#define GET_ATTACHMENT(%0,%1,%2,%3)    engfunc(EngFunc_GetAttachment, %0, %1, %2, %3)

#define GET_TIME(%0)            get_pdata_float(%0, m_flLastEventCheck, extra_offset_weapon)
#define SET_TIME(%0,%1)            set_pdata_float(%0, m_flLastEventCheck, %1, extra_offset_weapon)

#define MDLL_Spawn(%0)            dllfunc(DLLFunc_Spawn, %0)
#define MDLL_Touch(%0,%1)        dllfunc(DLLFunc_Touch, %0, %1)

#define SET_MODEL(%0,%1)        engfunc(EngFunc_SetModel, %0, %1)
#define SET_ORIGIN(%0,%1)        engfunc(EngFunc_SetOrigin, %0, %1)

#define PRECACHE_MODEL(%0)        engfunc(EngFunc_PrecacheModel, %0)
#define PRECACHE_SOUND(%0)        engfunc(EngFunc_PrecacheSound, %0)
#define PRECACHE_GENERIC(%0)        engfunc(EngFunc_PrecacheGeneric, %0)

#define MESSAGE_BEGIN(%0,%1,%2,%3)    engfunc(EngFunc_MessageBegin, %0, %1, %2, %3)
#define MESSAGE_END()            message_end()

#define WRITE_ANGLE(%0)            engfunc(EngFunc_WriteAngle, %0)
#define WRITE_BYTE(%0)            write_byte(%0)
#define WRITE_COORD(%0)            engfunc(EngFunc_WriteCoord, %0)
#define WRITE_STRING(%0)        write_string(%0)
#define WRITE_SHORT(%0)            write_short(%0)

#define BitSet(%0,%1)             (%0 |= (1 << (%1 - 1)))
#define BitClear(%0,%1)         (%0 &= ~(1 << (%1 - 1)))
#define BitCheck(%0,%1)         (%0 & (1 << (%1 - 1)))

//**********************************************
//* PvData Offsets.                            *
//**********************************************

// Linux extra offsets
#define extra_offset_weapon        4
#define extra_offset_player        5

new g_bitIsConnected;

#define m_fInSuperBullets        30
#define m_rgpPlayerItems_CWeaponBox    34
#define m_flLastEventCheck          38

// CBasePlayerItem
#define m_pPlayer            41
#define m_pNext                42

// CBasePlayerWeapon
#define m_fFireOnEmpty             45
#define m_flNextPrimaryAttack        46
#define m_flNextSecondaryAttack        47
#define m_flTimeWeaponIdle        48
#define m_iPrimaryAmmoType        49
#define m_iClip                51
#define m_fInReload            54
#define m_iDirection            60
#define m_flAccuracy             62
#define m_iShotsFired            64
#define m_fWeaponState            74
#define m_flNextAttack            83
#define m_iLastZoom             109
#define m_fResumeZoom              110

// CBasePlayer
#define m_iFOV                363
#define m_rgpPlayerItems_CBasePlayer    367
#define m_pActiveItem            373
#define m_rgAmmo_CBasePlayer        376
#define m_szAnimExtention        492

#define IsValidPev(%0)             (pev_valid(%0) == 2)

#define MUZZLE_CLASSNAME        "MuzzleBuffBarreta"
#define EXPLODE_CLASSNAME        "ExplodeModel"
#define MAN_CLASSNAME            "ManModel"
#define SKILL_CLASSNAME            "SkillModel"

//**********************************************
//* Let's code our weapon.                     *
//**********************************************

new iBlood[2];

Weapon_OnPrecache()
{
    
PRECACHE_SOUND_FROM_MODEL(MODEL_VIEW);
    
PRECACHE_MODEL(MODEL_VIEW);
    
PRECACHE_MODEL(MODEL_PLAYER);
    
PRECACHE_MODEL(MODEL_PLAYER3);
    
PRECACHE_MODEL(MODEL_WORLD);
    
PRECACHE_MODEL(MODEL_MAN);
    
    
PRECACHE_SOUND(SOUND_FIRE);
    
PRECACHE_SOUND(SOUND_EXP);
    
    
PRECACHE_SOUND(SOUND_HIT);
    
PRECACHE_SOUND(SOUND_HIT2);
    
    
PRECACHE_SOUND("weapons/gunkata_skill_01.wav");
    
PRECACHE_SOUND("weapons/gunkata_skill_02.wav");
    
PRECACHE_SOUND("weapons/gunkata_skill_03.wav");
    
PRECACHE_SOUND("weapons/gunkata_skill_04.wav");
    
PRECACHE_SOUND("weapons/gunkata_skill_05.wav");
    
    
PRECACHE_GENERIC(WEAPON_HUD_TXT);
    
PRECACHE_GENERIC(WEAPON_HUD_TXT2);
    
PRECACHE_GENERIC(WEAPON_HUD_SPR_1);
    
PRECACHE_GENERIC(WEAPON_HUD_SPR_2);
    
PRECACHE_GENERIC(WEAPON_HUD_SPR_HIT);
    
PRECACHE_MODEL(WEAPON_SPR_MUZZLE);
    
    
iBlood[0] = PRECACHE_MODEL("sprites/bloodspray.spr");
    
iBlood[1] = PRECACHE_MODEL("sprites/blood.spr");
}

Weapon_OnSpawn(const iItem)
{
    
// Setting world model.
    
SET_MODEL(iItemMODEL_WORLD);
}

Weapon_OnDeploy(const iItem, const iPlayer, const iClip, const iBullets, const iState, const iAmmoPrimary)
{
    
#pragma unused iClip, iAmmoPrimary, iState

    
set_pdata_int(iItemm_fInReload0extra_offset_weapon);

    
set_pdata_string(iPlayerm_szAnimExtention 4ANIM_EXTENSION, -1extra_offset_player 4);
    
    
set_pdata_float(iItemm_flTimeWeaponIdleWEAPON_TIME_DELAY_DEPLOYextra_offset_weapon);
    
set_pdata_float(iPlayerm_flNextAttackWEAPON_TIME_DELAY_DEPLOYextra_offset_player);
    
    new 
iAnim;
    
    switch (
iBullets)
    {
        case 
1,2,3:iAnim=ANIM_DRAW_A
        
case 4,5,6:iAnim=ANIM_DRAW_B
    
}

    
Weapon_DefaultDeploy(iPlayerMODEL_VIEWMODEL_PLAYERiAnimANIM_EXTENSION);
    
    
set_pev(iItempev_iuser10);
    
set_pev(iItempev_iuser40);
}

Weapon_OnHolster(const iItem, const iPlayer, const iClip, const iBullets, const iState, const iAmmoPrimary)
{
    
#pragma unused iPlayer, iClip, iBullets, iAmmoPrimary, iState
    
    
set_pdata_int(iItemm_fInReload0extra_offset_weapon);
    
    
set_pev(iItempev_iuser10);
}

Weapon_OnIdle(const iItem, const iPlayer, const iClip, const iBullets, const iState, const iAmmoPrimary)
{
    
#pragma unused iClip, iAmmoPrimary, iState
    
    
ExecuteHamB(Ham_Weapon_ResetEmptySoundiItem);

    if (
get_pdata_float(iItemm_flTimeWeaponIdleextra_offset_weapon) > 0.0)
    {
        return;
    }
    
    new 
iAnim;
    
    switch (
iBullets)
    {
        case 
1,2,3:iAnim=ANIM_IDLE_A
        
case 4,5,6:iAnim=ANIM_IDLE_B
    
}
    
    
Weapon_SendAnim(iPlayeriAnim);

    
set_pdata_float(iItemm_flTimeWeaponIdleWEAPON_TIME_NEXT_IDLEextra_offset_weapon);
}

Weapon_OnReload(const iItem, const iPlayer, const iClip, const iBullets, const iState, const iAmmoPrimary)
{
    
#pragma unused iBullets, iState
    
    
if (min(WEAPON_MAX_CLIP iClipiAmmoPrimary) <= || pev(iItempev_fuser1))
    {
        return;
    }
    
    
set_pdata_int(iItemm_iClip0extra_offset_weapon);
    
    
ExecuteHam(Ham_Weapon_ReloadiItem);
    
    
set_pdata_int(iItemm_iClipiClipextra_offset_weapon);
    
    static 
szAnimation[64];
    
formatex(szAnimationcharsmax(szAnimation), "ref_reload_%s"ANIM_EXTENSION);
    
Player_SetAnimation(iPlayerszAnimation);
    
    
set_pdata_float(iPlayerm_flNextAttackWEAPON_TIME_DELAY_RELOADextra_offset_player);
    
set_pdata_float(iItemm_flTimeWeaponIdleWEAPON_TIME_DELAY_RELOADextra_offset_weapon);
    
Weapon_SendAnim(iPlayerrandom_num(ANIM_RELOAD_AANIM_RELOAD_B));
}

Weapon_OnPrimaryAttack(const iItem, const iPlayer, const iClip, const iBullets, const iState, const iAmmoPrimary)
{
    
#pragma unused iAmmoPrimary, iState
    
    
if (iClip <= 0)
    {
        if (
get_pdata_int(iItemm_fFireOnEmptyextra_offset_player))
        {
            
ExecuteHamB(Ham_Weapon_PlayEmptySoundiItem);
            
set_pdata_float(iItemm_flNextPrimaryAttack0.2extra_offset_weapon);
        }
        return;
    }
    
    
CallOrigFireBullets3(iItem);
    
    static 
szAnimation[64];
    
    switch (
iBullets)
    {
        case 
1:
        {
            
Weapon_ShootAnim(iItemiPlayerANIM_SHOOT_AWEAPON_TIME_NEXT_ATTACK);
            
MuzzleFlash(iPlayerWEAPON_SPR_MUZZLE0.061.01);
        }
        case 
2:
        {
            
Weapon_ShootAnim(iItemiPlayerANIM_SHOOT_AWEAPON_TIME_NEXT_ATTACK);
            
MuzzleFlash(iPlayerWEAPON_SPR_MUZZLE0.061.01);
        }
        case 
3:
        {
            
Weapon_ShootAnim(iItemiPlayerANIM_SHOOT_LAST_A0.4);
            
MuzzleFlash(iPlayerWEAPON_SPR_MUZZLE0.061.01);
        }
        case 
4:
        {
            
Weapon_ShootAnim(iItemiPlayerANIM_SHOOT_BWEAPON_TIME_NEXT_ATTACK);
            
MuzzleFlash(iPlayerWEAPON_SPR_MUZZLE0.061.03);
        }
        case 
5:
        {
            
Weapon_ShootAnim(iItemiPlayerANIM_SHOOT_BWEAPON_TIME_NEXT_ATTACK);
            
MuzzleFlash(iPlayerWEAPON_SPR_MUZZLE0.061.03);
        }
        case 
6:
        {
            
Weapon_ShootAnim(iItemiPlayerANIM_SHOOT_LAST_B0.4);
            
MuzzleFlash(iPlayerWEAPON_SPR_MUZZLE0.061.03);
            
set_pdata_int(iItemm_fInSuperBullets0extra_offset_weapon);
        }
    }
    
    
formatex(szAnimationcharsmax(szAnimation), "ref_shoot_%s"ANIM_EXTENSION);
    
Player_SetAnimation(iPlayerszAnimation);
    
    
set_pdata_int(iItemm_iShotsFired0extra_offset_weapon);
    
set_pdata_float(iItemm_flAccuracy1.0extra_offset_weapon);
    
set_pdata_int(iItemm_fInSuperBulletsget_pdata_int(iItemm_fInSuperBulletsextra_offset_weapon)+1,  extra_offset_weapon);
    
    
Punchangle(iPlayer, .iVecx = - 1.0, .iVecy 0.0, .iVecz 0.0)
    
    
emit_sound(iPlayerCHAN_WEAPONSOUND_FIRE0.9ATTN_NORM0PITCH_NORM);
}

Weapon_OnSecondaryAttack(const iItem, const iPlayer, const iClip, const iBullets, const iState, const iAmmoPrimary)
{
    
#pragma unused iAmmoPrimary, iBullets
    
    
if (iClip <= 0)
    {
        
Weapon_SendAnim(iPlayerANIM_SKILL_LAST);
        
        
set_pdata_float(iItemm_flTimeWeaponIdle1.0extra_offset_weapon);
        
set_pdata_float(iItemm_flNextSecondaryAttack1.0extra_offset_weapon);
        
        
set_pev(iItempev_fuser2get_gametime() + 0.5);
        
set_pev(iItempev_iuser11);
        return;
    }
    
    
#define ANIM_EXTENSION2    "grenade"
    
    
static szAnimation[64];formatex(szAnimationcharsmax(szAnimation), "ref_shoot_%s"ANIM_EXTENSION2);Player_SetAnimation(iPlayerszAnimation);
    static 
Float:StartPos[3];pev(iPlayerpev_originStartPos);

    switch (
iState)
    {
        case 
0:
        {
            
Weapon_SkillAnim(iItemiPlayerANIM_SKILL_LEVEL_10.6);
            
            
Spawn_Man(iPlayer06);
    
            
emit_sound(iPlayerCHAN_WEAPON"weapons/gunkata_skill_01.wav"0.9ATTN_NORM0PITCH_NORM);
            
set_pdata_int(iItemm_fWeaponStateiState+1extra_offset_weapon);
        }
        case 
1:
        {    
            
Weapon_SkillAnim(iItemiPlayerANIM_SKILL_LEVEL_20.67);
            
            
Spawn_Man(iPlayer17);
    
            
emit_sound(iPlayerCHAN_WEAPON"weapons/gunkata_skill_02.wav"0.9ATTN_NORM0PITCH_NORM);
            
set_pdata_int(iItemm_fWeaponStateiState+1extra_offset_weapon);
        }
        case 
2:
        {
            
Weapon_SkillAnim(iItemiPlayerANIM_SKILL_LEVEL_30.7);
            
            
Spawn_Man(iPlayer28);

            
emit_sound(iPlayerCHAN_WEAPON"weapons/gunkata_skill_03.wav"0.9ATTN_NORM0PITCH_NORM);
            
set_pdata_int(iItemm_fWeaponStateiState+1extra_offset_weapon);
        }
        case 
3:
        {
            
Weapon_SkillAnim(iItemiPlayerANIM_SKILL_LEVEL_40.6);
            
            
Spawn_Man(iPlayer39);

            
emit_sound(iPlayerCHAN_WEAPON"weapons/gunkata_skill_04.wav"0.9ATTN_NORM0PITCH_NORM);
            
set_pdata_int(iItemm_fWeaponStateiState+1extra_offset_weapon);
        }
        case 
4:
        {
            
Weapon_SkillAnim(iItemiPlayerANIM_SKILL_LEVEL_50.6);
            
            
Spawn_Man(iPlayerrandom_num(4,5), random_num(1011));

            
emit_sound(iPlayerCHAN_WEAPON"weapons/gunkata_skill_05.wav"0.9ATTN_NORM0PITCH_NORM);
            
set_pdata_int(iItemm_fWeaponState0extra_offset_weapon);
        }
    }
}

Weapon_ShootAnim(const iItem, const iPlayer, const iAnim, const Float:iTime)
{
    
set_pdata_float(iItemm_flTimeWeaponIdleiTime 0.4extra_offset_weapon);
    
set_pdata_float(iItemm_flNextPrimaryAttackiTimeextra_offset_weapon);
    
set_pdata_float(iItemm_flNextSecondaryAttackiTimeextra_offset_weapon);
    
set_pdata_float(iPlayerm_flNextAttackiTimeextra_offset_player);
    
    
Weapon_SendAnim(iPlayeriAnim);
}

Weapon_SkillAnim(const iItem, const iPlayer, const iAnim, const Float:iTime)
{
    
Weapon_SendAnim(iPlayeriAnim);
    
    
set_pdata_float(iItemm_flTimeWeaponIdleiTimeextra_offset_weapon);
    
set_pdata_float(iItemm_flNextPrimaryAttackiTimeextra_offset_weapon);
    
set_pdata_float(iItemm_flNextSecondaryAttackiTimeextra_offset_weapon);
}

//*********************************************************************
//*           Don't modify the code below this line unless            *
//*               you know _exactly_ what you are doing!!!             *
//*********************************************************************

#define MSGID_WEAPONLIST 78

new g_iItemID;

#define IsCustomItem(%0) (pev(%0, pev_impulse) == WEAPON_KEY)

public plugin_precache()
{
    
Weapon_OnPrecache();

    
register_clcmd(WEAPON_NAME"Cmd_WeaponSelect");
    
register_clcmd(WEAPON_NAME2"Cmd_WeaponSelect");
    
register_message(MSGID_WEAPONLIST"MsgHook_WeaponList");
    
    
register_message(get_user_msgid("DeathMsg"), "MsgHook_Death");
}

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR);
    
    
register_forward(FM_SetModel,        "FakeMeta_SetModel",            false);
    
register_forward(FM_PlaybackEvent,    "FakeMeta_PlaybackEvent",        false);
    
register_forward(FM_UpdateClientData,    "FakeMeta_UpdateClientData_Post",    true);
    
register_forward(FM_Think,         "FakeMeta_Think",            false);

    
// Weaponbox
    
RegisterHam(Ham_Spawn,             "weaponbox",         "HamHook_Weaponbox_Spawn_Post"true);
    
RegisterHam(Ham_TraceAttack,        "func_breakable",    "HamHook_Entity_TraceAttack",     false);
    
RegisterHam(Ham_TraceAttack,        "info_target",         "HamHook_Entity_TraceAttack",     false);
    
RegisterHam(Ham_TraceAttack,        "player",         "HamHook_Entity_TraceAttack",     false);
    
    
RegisterHam(Ham_Item_Deploy,        WEAPON_REFERANCE,     "HamHook_Item_Deploy_Post",    true);
    
RegisterHam(Ham_Item_Holster,        WEAPON_REFERANCE,     "HamHook_Item_Holster",        false);
    
RegisterHam(Ham_Item_AddToPlayer,    WEAPON_REFERANCE,     "HamHook_Item_AddToPlayer",    false);
    
RegisterHam(Ham_Item_PostFrame,        WEAPON_REFERANCE,     "HamHook_Item_PostFrame",    false);
    
    
RegisterHam(Ham_Weapon_Reload,        WEAPON_REFERANCE,     "HamHook_Item_Reload",        false);
    
RegisterHam(Ham_Weapon_WeaponIdle,    WEAPON_REFERANCE,     "HamHook_Item_WeaponIdle",    false);
    
RegisterHam(Ham_Weapon_PrimaryAttack,    WEAPON_REFERANCE,     "HamHook_Item_PrimaryAttack",    false);
    
RegisterHam(Ham_Weapon_SecondaryAttack,    WEAPON_REFERANCE,     "HamHook_Item_SecondaryAttack",    false);
    
    
RegisterHam(Ham_TakeDamage,         "player",         "HamHook_HamTakeDamage"false);
    
}
public 
plugin_natives( )
    
register_native"arma_dualbuff""zp_extra_item_selected")
    
    
public 
zp_extra_item_selected(id)
{
        
Weapon_Give(id);
}

//**********************************************
//* Block client weapon.                       *
//**********************************************

public FakeMeta_UpdateClientData_Post(const iPlayer, const iSendWeapons, const CD_Handle)
{
    static 
iActiveItem;iActiveItem get_pdata_cbase(iPlayerm_pActiveItemextra_offset_player);
    static 
Float:flGameTime;flGameTime get_gametime();
    
    if (!
IsValidPev(iActiveItem) || !IsCustomItem(iActiveItem))
    {
        return 
FMRES_IGNORED;
    }

    
set_cd(CD_HandleCD_flNextAttackget_gametime() + 0.001);
    
    if (
GET_TIME(iActiveItem) && GET_TIME(iActiveItem) <= flGameTime)
    {    
        
MESSAGE_BEGIN(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), {0.0,0.0,0.0}, iPlayer);
        
WRITE_BYTE(1>>6);
        
MESSAGE_END();
        
        
MsgHook_WeaponList(MSGID_WEAPONLISTiActiveItemiPlayerfalse);
        
        
MESSAGE_BEGIN(MSG_ONEget_user_msgid("CurWeapon"), {0.00.00.0}, iPlayer);
        
WRITE_BYTE(1);
        
WRITE_BYTE(CSW_USP);
        
WRITE_BYTE(get_pdata_int(iActiveItemm_iClipextra_offset_weapon));
        
MESSAGE_END();

        
SET_TIME(iActiveItem0.0);
    }
    
    return 
FMRES_IGNORED;
}

//**********************************************
//* Item (weapon) hooks.                       *
//**********************************************

    #define _call.%0(%1,%2) \
                                    
\
    
Weapon_On%0                            \
    (                                \
        %
1,                             \
        %
2,                            \
                                    \
        
get_pdata_int(%1m_iClipextra_offset_weapon),    \
        
get_pdata_int(%1m_fInSuperBulletsextra_offset_weapon),    \
        
get_pdata_int(%1m_fWeaponStateextra_offset_weapon), \
        
GetAmmoInventory(%2PrimaryAmmoIndex(%1))        \
    ) 

public 
HamHook_Item_Deploy_Post(const iItem)
{
    new 
iPlayer
    
    if (!
CheckItem(iItemiPlayer))
    {
        return 
HAM_IGNORED;
    }
    
    
_call.Deploy(iItemiPlayer);
    return 
HAM_IGNORED;
}

public 
HamHook_Item_Holster(const iItem)
{
    new 
iPlayer
    
    if (!
CheckItem(iItemiPlayer))
    {
        return 
HAM_IGNORED;
    }
    
    
set_pev(iPlayerpev_viewmodel0);
    
set_pev(iPlayerpev_weaponmodel0);
    
    
_call.Holster(iItemiPlayer);
    return 
HAM_SUPERCEDE;
}

public 
HamHook_Item_WeaponIdle(const iItem)
{
    static 
iPlayer
    
    if (!
CheckItem(iItemiPlayer))
    {
        return 
HAM_IGNORED;
    }

    
_call.Idle(iItemiPlayer);
    return 
HAM_SUPERCEDE;
}

public 
HamHook_Item_Reload(const iItem)
{
    static 
iPlayer
    
    if (!
CheckItem(iItemiPlayer))
    {
        return 
HAM_IGNORED;
    }
    
    
_call.Reload(iItemiPlayer);
    return 
HAM_SUPERCEDE;
}

public 
HamHook_Item_PrimaryAttack(const iItem)
{
    static 
iPlayer
    
    if (!
CheckItem(iItemiPlayer))
    {
        return 
HAM_IGNORED;
    }
    
    
_call.PrimaryAttack(iItemiPlayer);
    return 
HAM_SUPERCEDE;
}

public 
HamHook_Item_SecondaryAttack(const iItem)
{
    static 
iPlayer
    
    if (!
CheckItem(iItemiPlayer))
    {
        return 
HAM_IGNORED;
    }
    
    
_call.SecondaryAttack(iItemiPlayer);
    return 
HAM_SUPERCEDE;
}

public 
HamHook_Item_PostFrame(const iItem)
{
    static 
iPlayer;
    
    if (!
CheckItem(iItemiPlayer))
    {
        return 
HAM_IGNORED;
    }

    if (
get_pdata_int(iItemm_fInReloadextra_offset_weapon))
    {
        new 
iClip        get_pdata_int(iItemm_iClipextra_offset_weapon); 
        new 
iPrimaryAmmoIndex    PrimaryAmmoIndex(iItem);
        new 
iAmmoPrimary    GetAmmoInventory(iPlayeriPrimaryAmmoIndex);
        new 
iAmount        min(WEAPON_MAX_CLIP iClipiAmmoPrimary);
        
        
set_pdata_int(iItemm_iClipiClip iAmountextra_offset_weapon);
        
set_pdata_int(iItemm_fInReloadfalseextra_offset_weapon);

        
SetAmmoInventory(iPlayeriPrimaryAmmoIndexiAmmoPrimary iAmount);
        
        
set_pdata_int(iItemm_fInSuperBullets1extra_offset_weapon);
        
set_pdata_int(iItemm_fWeaponState0extra_offset_weapon);
        
        
set_pev(iItempev_iuser10);
    }
    
    static 
pevVictimpevVictim  = -1;
    static 
Float:iTime2;pev(iItempev_fuser2iTime2);
    static 
Float:Origin[3];pev(iPlayerpev_originOrigin);
    
    if (
pev(iItempev_iuser1) && get_pdata_int(iItemm_iClipextra_offset_weapon) == && iTime2 <= get_gametime())
    {
        static 
pevVictimpevVictim  = -1;
        
        static 
Float:StartPos[3], iEntExp;pev(iPlayerpev_originStartPos);StartPos[2] -= 30.0;
        
iEntExp engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"));
        
        
SET_MODEL(iEntExpMODEL_PLAYER3);
        
SET_ORIGIN(iEntExpStartPos);
    
        
set_pev(iEntExppev_classnameEXPLODE_CLASSNAME);
        
set_pev(iEntExppev_movetypeMOVETYPE_FLY);
        
set_pev(iEntExppev_solidSOLID_NOT);
        
set_pev(iEntExppev_framerate1.0);
        
set_pev(iEntExppev_sequence1);
        
set_pev(iEntExppev_animtimeget_gametime())
        
set_pev(iEntExppev_nextthinkget_gametime() + 0.6);
        
        while((
pevVictim engfunc(EngFunc_FindEntityInSpherepevVictimOriginWEAPON_RADIUS_ATTACK)) != )
        {
            if (!
is_user_alive(pevVictim))continue;
        
            
CreateKnockBack(iPlayerpevVictimWEAPON_KNOCKBACK_POWER*3)
        }
        
        
emit_sound(iPlayerCHAN_ITEMSOUND_EXP0.9ATTN_NORM0PITCH_NORM);

        
set_pdata_int(iItemm_fInSuperBullets1extra_offset_weapon);
        
set_pdata_int(iItemm_fWeaponState0extra_offset_weapon);
        
        new 
iClip        get_pdata_int(iItemm_iClipextra_offset_weapon); 
        new 
iPrimaryAmmoIndex    PrimaryAmmoIndex(iItem);
        new 
iAmmoPrimary    GetAmmoInventory(iPlayeriPrimaryAmmoIndex);
        new 
iAmount        min(WEAPON_MAX_CLIP iClipiAmmoPrimary);
    
        
set_pdata_int(iItemm_iClipiClip iAmountextra_offset_weapon);
        
set_pdata_int(iItemm_fInReloadfalseextra_offset_weapon);

        
SetAmmoInventory(iPlayeriPrimaryAmmoIndexiAmmoPrimary iAmount);
        
        
set_pdata_float(iPlayerm_flNextAttack0.8extra_offset_player);
        
        
set_pev(iItempev_iuser10);
        
set_pev(iItempev_fuser20.0);
    }

    if (
pev(iPlayerpev_button) & IN_ATTACK2 && get_pdata_float(iPlayerm_flNextAttackextra_offset_player) <= 0.0)
    {
        if (
get_pdata_int(iItemm_iClipextra_offset_weapon) <= 0)
        {
            return 
HAM_IGNORED;
        }
            
        while((
pevVictim engfunc(EngFunc_FindEntityInSpherepevVictimOriginWEAPON_RADIUS_ATTACK)) != )
        {
            if (!
is_user_alive(pevVictim))continue;

            new 
Float:vOrigin[3];pev(pevVictimpev_originvOrigin);
        
            
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
            
write_byte(TE_BLOODSPRITE);
            
WRITE_COORD(vOrigin[0]);
            
WRITE_COORD(vOrigin[1]);
            
WRITE_COORD(vOrigin[2]);
            
write_short(iBlood[0]);
            
write_short(iBlood[1]);
            
write_byte(76);
            
write_byte(10);
            
message_end();
            
            switch (
random(2))
            {
                case 
0:emit_sound(iPlayerCHAN_VOICESOUND_HIT0.5ATTN_NORM0PITCH_NORM);
                case 
1:emit_sound(iPlayerCHAN_ITEMSOUND_HIT20.5ATTN_NORM0PITCH_NORM);
            }
                
            
ExecuteHamB(Ham_TakeDamagepevVictimiPlayeriPlayerWEAPON_RADIUS_DAMAGE_ATTACKDMG_BULLET);
        }
            
        
set_pdata_int(iItemm_iClipget_pdata_int(iItemm_iClipextra_offset_weapon)-1extra_offset_weapon);
        
set_pdata_float(iPlayerm_flNextAttack0.11extra_offset_player);
        
set_pev(iItempev_iuser41);
    }
    else
    {
        if (!
iTime2 && pev(iItempev_iuser4))
        {
            
ExecuteHamB(Ham_Item_DeployiItem);
        }
    }

    return 
HAM_IGNORED;
}

public 
HamHook_HamTakeDamage(const iVictim, const iInflictor, const iAttacker, const Float:fDamage, const iBitDamage
{   
    static 
iItem;

    if (!
BitCheck(g_bitIsConnectediAttacker) || !IsValidPev(iAttacker))
    {
        return;
    }
    
    
iItem get_pdata_cbase(iAttackerm_pActiveItemextra_offset_player);
    
    if (!
IsValidPev(iItem))
    {
        return;
    }



//**********************************************
//* Fire Bullets.                              *
//**********************************************

CallOrigFireBullets3(const iItem)
{
    static 
FakeMetaTraceLine;FakeMetaTraceLine=register_forward(FM_TraceLine,"FakeMeta_TraceLine",true)
    
state FireBulletsEnabled;

    
ExecuteHam(Ham_Weapon_PrimaryAttackiItem);
    
    
state FireBulletsDisabled;
    
unregister_forward(FM_TraceLine,FakeMetaTraceLine,true)
}

public 
FakeMeta_TraceLine(Float:vecStart[3], Float:VecEnd[3], iFlagsIgnoreiTrase)// Chrescoe1
{
    if (
iFlags IGNORE_MONSTERS)
    {
        return 
FMRES_IGNORED;
    }
    
    static 
iHit;
    static 
Decal;
    static 
glassdecal;
    static 
Float:vecPlaneNormal[3];
    static 
Float:vecEndPos[3];
    
    
iHit=get_tr2(iTrase,TR_pHit);
    
    if (!
glassdecal)
    {
        
glassdecal=engfuncEngFunc_DecalIndex"{bproof1" );
    }
    
    if(
iHit>&& pev_valid(iHit))
        if(
pev(iHit,pev_solid)!=SOLID_BSP)return FMRES_IGNORED;
        else if(
pev(iHit,pev_rendermode)!=0)Decal=glassdecal;
        else 
Decal=random_num(41,45);
    else 
Decal=random_num(41,45);
    
    
get_tr2(iTraseTR_vecEndPosvecEndPos);
    
get_tr2(iTraseTR_vecPlaneNormalvecPlaneNormal);
    
    
MESSAGE_BEGIN(MSG_PASSVC_TEMPENTITYvecEndPos0);
    
WRITE_BYTE(TE_GUNSHOTDECAL);
    
WRITE_COORD(vecEndPos[0]);
    
WRITE_COORD(vecEndPos[1]);
    
WRITE_COORD(vecEndPos[2]);
    
WRITE_SHORT(iHit iHit 0);
    
WRITE_BYTE(Decal);
    
MESSAGE_END();
    
    
MESSAGE_BEGIN(MSG_PVSSVC_TEMPENTITYvecEndPos0);
    
WRITE_BYTE(TE_STREAK_SPLASH)
    
WRITE_COORD(vecEndPos[0]);
    
WRITE_COORD(vecEndPos[1]);
    
WRITE_COORD(vecEndPos[2]);
    
WRITE_COORD(vecPlaneNormal[0] * random_float(20.0,30.0));
    
WRITE_COORD(vecPlaneNormal[1] * random_float(20.0,30.0));
    
WRITE_COORD(vecPlaneNormal[2] * random_float(20.0,30.0));
    
WRITE_BYTE(26);    //Colorid
    
WRITE_SHORT(10);    //Count
    
WRITE_SHORT(3);        //Speed
    
WRITE_SHORT(60);    //Random speed
    
MESSAGE_END();

    return 
FMRES_IGNORED;
}
public 
FakeMeta_Think(const iEnt)
{
    if (!
pev_valid(iEnt))
    {
        return 
FMRES_IGNORED;
    }
    
    static 
iClassname[32];pev(iEntpev_classnameiClassnamesizeof(iClassname));
    
    static 
iAttacker;iAttacker pev(iEntpev_owner);
    
    if (
equal(iClassnameEXPLODE_CLASSNAME))
    {
        
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_KILLME);
        return 
FMRES_SUPERCEDE;
    }
    
    
    if (
equal(iClassnameMAN_CLASSNAME))
    {    
        static 
Float:iAmt;pev(iEntpev_renderamtiAmt);
        
        
iAmt -= 20.0;
        
        if (
iAmt <= 0.0)
        {
            
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_KILLME);
            return 
FMRES_SUPERCEDE;
        }
        
        
set_pev(iEntpev_renderamtiAmt);
        
        
set_pev(iEntpev_nextthinkget_gametime() + 0.1);
    }
    
    if (
equal(iClassnameMUZZLE_CLASSNAME))
    {
        
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_KILLME);
        return 
FMRES_SUPERCEDE;
    }
    
    if (
equal(iClassnameSKILL_CLASSNAME))
    {    
        static 
Float:iTime;pev(iEntpev_fuser4iTime);
        
        static 
Float:StartPos[3];GetPosition(iAttacker0.00.00.0StartPos);
        static 
Float:iAngles[3];pev(iAttackerpev_v_angleiAngles);
        static 
Float:Angles[3];
    
        
Angles[0] = 360.0 iAngles[0];
        
Angles[1] = iAngles[1];
        
Angles[2] = iAngles[2];

        
SET_ORIGIN(iEntStartPos);
        
set_pev(iEntpev_anglesAngles);
        
        if (
iTime <= get_gametime())
        {
            
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_KILLME);
            return 
FMRES_SUPERCEDE;
        }
            
        
set_pev(iEntpev_nextthinkget_gametime() + 0.01);
    }

    return 
FMRES_IGNORED;
}

public 
MsgHook_Death() <FireBulletsEnabled>
{
    static 
szTruncatedWeaponName[32];
    
    if (
szTruncatedWeaponName[0] == EOS)
    {
        
copy(szTruncatedWeaponNamecharsmax(szTruncatedWeaponName), WEAPON_NAME);
        
replace(szTruncatedWeaponNamecharsmax(szTruncatedWeaponName), "weapon_""");
    }
    
    
set_msg_arg_string(4szTruncatedWeaponName);
}

public 
FakeMeta_PlaybackEvent() <FireBulletsEnabled>
{
    return 
FMRES_SUPERCEDE;
}

public 
HamHook_Entity_TraceAttack(const iEntity, const iAttacker, const FloatflDamage) <FireBulletsEnabled>
{
    static 
iItem;

    if (!
BitCheck(g_bitIsConnectediAttacker) || !IsValidPev(iAttacker))
    {
        return;
    }
    
    
iItem get_pdata_cbase(iAttackerm_pActiveItemextra_offset_player);
    
    if (!
IsValidPev(iItem))
    {
        return;
    }
    
    
SetHamParamFloat(3flDamage WEAPON_MULTIPLIER_DAMAGE);
}

public 
MsgHook_Death()            </* Empty statement */>        { /* Fallback */ }
public 
MsgHook_Death()            <FireBulletsDisabled>        { /* Do notning */ }

public 
FakeMeta_PlaybackEvent()     </* Empty statement */>        { return FMRES_IGNORED; }
public 
FakeMeta_PlaybackEvent()     <FireBulletsDisabled>        { return FMRES_IGNORED; }

public 
HamHook_Entity_TraceAttack()     </* Empty statement */>        { /* Fallback */ }
public 
HamHook_Entity_TraceAttack()     <FireBulletsDisabled>        { /* Do notning */ }

//**********************************************
//* Create and check our custom weapon.        *
//**********************************************

Weapon_Create(const FloatvecOrigin[3] = {0.00.00.0})
{
    new 
iWeapon;

    static 
iszAllocStringCached;
    if (
iszAllocStringCached || (iszAllocStringCached engfunc(EngFunc_AllocStringWEAPON_REFERANCE)))
    {
        
iWeapon engfunc(EngFunc_CreateNamedEntityiszAllocStringCached);
    }
    
    if (!
IsValidPev(iWeapon))
    {
        return 
FM_NULLENT;
    }
    
    
MDLL_Spawn(iWeapon);
    
SET_ORIGIN(iWeaponvecOrigin);
    
    
set_pdata_int(iWeaponm_iClipWEAPON_MAX_CLIPextra_offset_weapon);
    
set_pdata_int(iWeaponm_fInSuperBullets1extra_offset_weapon);
    
set_pev(iWeaponpev_impulseWEAPON_KEY);
    
set_pev(iWeaponpev_angles, {0.00.00.0});
    
    
Weapon_OnSpawn(iWeapon);
    
    return 
iWeapon;
}

Weapon_Give(const iPlayer)
{
    if (!
IsValidPev(iPlayer))
    {
        return 
FM_NULLENT;
    }
    
    new 
iWeaponFloatvecOrigin[3];
    
pev(iPlayerpev_originvecOrigin);
    
    if ((
iWeapon Weapon_Create(vecOrigin)) != FM_NULLENT)
    {
        
Player_DropWeapons(iPlayerExecuteHamB(Ham_Item_ItemSlotiWeapon));
        
        
set_pev(iWeaponpev_spawnflagspev(iWeaponpev_spawnflags) | SF_NORESPAWN);
        
MDLL_Touch(iWeaponiPlayer);
        
        
SetAmmoInventory(iPlayerPrimaryAmmoIndex(iWeapon), WEAPON_DEFAULT_AMMO);
        
        return 
iWeapon;
    }
    
    return 
FM_NULLENT;
}

Player_DropWeapons(const iPlayer, const iSlot)
{
    new 
szWeaponName[32], iItem get_pdata_cbase(iPlayerm_rgpPlayerItems_CBasePlayer iSlotextra_offset_player);

    while (
IsValidPev(iItem))
    {
        
pev(iItempev_classnameszWeaponNamecharsmax(szWeaponName));
        
engclient_cmd(iPlayer"drop"szWeaponName);

        
iItem get_pdata_cbase(iItemm_pNextextra_offset_weapon);
    }
}

Weapon_SendAnim(const iPlayer, const iAnim)
{
    
set_pev(iPlayerpev_weaponanimiAnim);

    
MESSAGE_BEGIN(MSG_ONE_UNRELIABLESVC_WEAPONANIM, {0.00.00.0}, iPlayer);
    
WRITE_BYTE(iAnim);
    
WRITE_BYTE(0);
    
MESSAGE_END();
}

stock Punchangle(iPlayerFloat:iVecx 0.0Float:iVecy 0.0Float:iVecz 0.0)
{
    static 
Float:iVec[3];pev(iPlayerpev_punchangle,iVec);
    
iVec[0] = iVecx;iVec[1] = iVecy;iVec[2] = iVecz
    set_pev
(iPlayerpev_punchangleiVec);
}

stock Weapon_DefaultDeploy(const iPlayer, const szViewModel[], const szWeaponModel[], const iAnim, const szAnimExt[])
{
    
set_pev(iPlayerpev_viewmodel2szViewModel);
    
set_pev(iPlayerpev_weaponmodel2szWeaponModel);
    
set_pev(iPlayerpev_fov89.0);
    
    
set_pdata_int(iPlayerm_iFOV89extra_offset_player);
    
set_pdata_int(iPlayerm_fResumeZoom0extra_offset_player);
    
set_pdata_int(iPlayerm_iLastZoom89extra_offset_player);
    
    
set_pdata_string(iPlayerm_szAnimExtention 4szAnimExt, -1extra_offset_player 4);

    
Weapon_SendAnim(iPlayeriAnim);
}

stock Player_SetAnimation(const iPlayer, const szAnim[])
{
    
#define ACT_RANGE_ATTACK1   28
   
    // Linux extra offsets
    #define extra_offset_animating   4
   
    // CBaseAnimating
    #define m_flFrameRate      36
    #define m_flGroundSpeed      37
    #define m_flLastEventCheck   38
    #define m_fSequenceFinished   39
    #define m_fSequenceLoops   40
   
    // CBaseMonster
    #define m_Activity      73
    #define m_IdealActivity      74
   
    // CBasePlayer
    #define m_flLastAttackTime   220
   
    
new iAnimDesiredFloatflFrameRateFloatflGroundSpeedboolbLoops;
      
    if ((
iAnimDesired lookup_sequence(iPlayerszAnimflFrameRatebLoopsflGroundSpeed)) == -1)
    {
        
iAnimDesired 0;
    }
   
    new 
FloatflGametime get_gametime();
    
    
set_pev(iPlayerpev_frame0.0);
    
set_pev(iPlayerpev_framerate1.0);
    
set_pev(iPlayerpev_animtimeflGametime );
    
set_pev(iPlayerpev_sequenceiAnimDesired);
       
    
set_pdata_int(iPlayerm_fSequenceLoopsbLoopsextra_offset_animating);
    
set_pdata_int(iPlayerm_fSequenceFinished0extra_offset_animating);
       
    
set_pdata_float(iPlayerm_flFrameRateflFrameRateextra_offset_animating);
    
set_pdata_float(iPlayerm_flGroundSpeedflGroundSpeedextra_offset_animating);
    
set_pdata_float(iPlayerm_flLastEventCheckflGametime extra_offset_animating);
       
    
set_pdata_int(iPlayerm_ActivityACT_RANGE_ATTACK1extra_offset_player);
    
set_pdata_int(iPlayerm_IdealActivityACT_RANGE_ATTACK1extra_offset_player);   
    
set_pdata_float(iPlayerm_flLastAttackTimeflGametime extra_offset_player);
}

stock Spawn_Man(const iPlayer, const iSec, const iSecDuck)
{
    static 
Float:StartPos[3];pev(iPlayerpev_originStartPos);
    static 
Float:Angle[3];pev(iPlayerpev_anglesAngle);
    
    static 
iFlags;iFlags = (pev(iPlayerpev_flags) & FL_DUCKING)
    
    static 
iszAllocStringCached;
    static 
iEntity;
    
    
    if (
iszAllocStringCached || (iszAllocStringCached engfunc(EngFunc_AllocString"info_target")))
    {
        
iEntity engfunc(EngFunc_CreateNamedEntityiszAllocStringCached)
    }
    
    
//static currentmodel[32];fm_cs_get_user_model(iPlayer, currentmodel, charsmax(currentmodel));
    //fm_cs_set_user_model_index(iEntity, currentmodel);
    //static model[100];formatex(model, charsmax(model), "models/player/%s/%s.mdl", currentmodel, currentmodel)
    //SET_MODEL(iEntity, model);
    
    
SET_MODEL(iEntityMODEL_MAN);
    
SET_ORIGIN(iEntityStartPos);
            
    
set_pev(iEntitypev_classnameMAN_CLASSNAME);
    
set_pev(iEntitypev_movetypeMOVETYPE_NONE);
    
set_pev(iEntitypev_solidSOLID_NOT);
    
set_pev(iEntitypev_framerate1.0);
    
set_pev(iEntitypev_sequenceiFlags iSecDuck:iSec);
    
set_pev(iEntitypev_owneriPlayer);
    
    
set_pev(iEntitypev_rendermodekRenderTransAdd);
    
set_pev(iEntitypev_renderfxkRenderFxHologram);
    
set_pev(iEntitypev_renderamt255.0);
    
    
set_pev(iEntitypev_anglesAngle);

    
set_pev(iEntitypev_animtimeget_gametime());
    
set_pev(iEntitypev_nextthinkget_gametime() + 0.01);
}

public 
Spawn_Skill(const iPlayer, const iSec, const Float:iTime)
{
    static 
Float:StartPos[3];GetPosition(iPlayer0.00.00.0StartPos);
    static 
Float:iAngles[3];pev(iPlayerpev_v_angleiAngles);
    static 
Float:Angles[3];
    
    static 
iszAllocStringCached;
    static 
iEntity;
    
    if (
iszAllocStringCached || (iszAllocStringCached engfunc(EngFunc_AllocString"info_target")))
    {
        
iEntity engfunc(EngFunc_CreateNamedEntityiszAllocStringCached)
    }
    
    
    
Angles[0] = 360.0 iAngles[0];
    
Angles[1] = iAngles[1];
    
Angles[2] = iAngles[2];
    
    
SET_MODEL(iEntityMODEL_VIEW);
    
SET_ORIGIN(iEntityStartPos);
            
    
set_pev(iEntitypev_classnameSKILL_CLASSNAME);
    
set_pev(iEntitypev_movetypeMOVETYPE_FOLLOW);
    
set_pev(iEntitypev_solidSOLID_NOT);
    
set_pev(iEntitypev_owneriPlayer);
    
set_pev(iEntitypev_animtime ,get_gametime())
    
set_pev(iEntitypev_framerate0.8);
    
set_pev(iEntitypev_sequenceiSec);
    
set_pev(iEntitypev_anglesAngles);
    
set_pev(iEntitypev_velocity, {0.01,0.01,0.01});
    
set_pev(iEntitypev_fuser4get_gametime() + iTime);
    
set_pev(iEntitypev_nextthinkget_gametime() + 0.01);
    
    
set_pev(iEntitypev_flagspev(iEntitypev_flags) &~ (1<<8));
}

stock CreateKnockBack(iAttackeriVictimFloat:fMulti)
{
    new 
Float:vVictim[3], Float:vAttacker[3];pev(iVictimpev_originvVictim);pev(iAttackerpev_originvAttacker);

    new 
Float:vVelocity[3];pev(iVictimpev_velocityvVelocity);vVictim[2] += 10.0;

    
xs_vec_sub(vVictimvAttackervVictim);
    
xs_vec_normalize(vVictimvVictim);
    
xs_vec_mul_scalar(vVictimfMultivVictim);
    
xs_vec_add(vVelocityvVictimvVelocity);

    
set_pev(iVictimpev_velocityvVictim);
}

stock GetPosition(id,Float:forwFloat:rightFloat:upFloat:vStart[]) 
{
    static 
Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3];
    
    
pev(idpev_originvOrigin);
    
pev(idpev_view_ofsvUp);
    
    
xs_vec_add(vOriginvUpvOrigin);
    
    
pev(idpev_v_anglevAngle);
    
    
angle_vector(vAngleANGLEVECTOR_FORWARDvForward);
    
angle_vector(vAngleANGLEVECTOR_RIGHTvRight);
    
angle_vector(vAngleANGLEVECTOR_UPvUp);
    
    
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;
}

public 
client_putinserver(id)
{
    
BitSet(g_bitIsConnectedid);
}

public 
client_disconnected(id)
{
    
BitClear(g_bitIsConnectedid);
}


boolCheckItem(const iItem, &iPlayer)
{
    if (!
IsValidPev(iItem) || !IsCustomItem(iItem))
    {
        return 
false;
    }
    
    
iPlayer get_pdata_cbase(iItemm_pPlayerextra_offset_weapon);
    
    if (!
IsValidPev(iPlayer) || !BitCheck(g_bitIsConnectediPlayer))
    {
        return 
false;
    }
    
    return 
true;
}

//**********************************************
//* Weapon list update.                        *
//**********************************************

public Cmd_WeaponSelect(const iPlayer)
{
    
engclient_cmd(iPlayerWEAPON_REFERANCE);
    return 
PLUGIN_HANDLED;
}

public 
HamHook_Item_AddToPlayer(const iItem, const iPlayer)
{
    if (!
IsValidPev(iItem) || !IsValidPev(iPlayer))
    {
        return 
HAM_IGNORED;
    }
    
    switch(
pev(iItempev_impulse))
    {
        case 
0
        {
            
MsgHook_WeaponList(MSGID_WEAPONLISTiItemiPlayerfalse);
        }
        case 
WEAPON_KEY
        {
            
MsgHook_WeaponList(MSGID_WEAPONLISTiItemiPlayerfalse);
    
            
SetAmmoInventory(iPlayerPrimaryAmmoIndex(iItem), pev(iItempev_iuser2));
            
            
MESSAGE_BEGIN(MSG_ONEget_user_msgid("AmmoPickup"), {0.0,0.0,0.0}, iPlayer);
            
WRITE_BYTE(6);       // Ammoid
            
WRITE_BYTE(get_pdata_int(iItemm_iClipextra_offset_weapon));                   // Ammount
            
MESSAGE_END();
        }
    }
    
    return 
HAM_IGNORED;
}


public 
MsgHook_WeaponList(const iMsgID, const iMsgDest, const iMsgEntitybool:iSet)
{
    static 
arrWeaponListData[8];
    
    if (!
iMsgEntity)
    {
        new 
szWeaponName[32];
        
get_msg_arg_string(1szWeaponNamecharsmax(szWeaponName));
        
        if (!
strcmp(szWeaponNameWEAPON_REFERANCE))
        {
            for (new 
isizeof arrWeaponListDataai++)
            {
                
arrWeaponListData[i] = get_msg_arg_int(2);
            }
        }
    }
    else
    {
        if (!
IsCustomItem(iMsgDest) && pev(iMsgDestpev_impulse))
        {
            return;
        }
        
        
MESSAGE_BEGIN(MSG_ONEiMsgID, {0.00.00.0}, iMsgEntity);
        
WRITE_STRING(IsCustomItem(iMsgDest) ? iSet WEAPON_NAME2 WEAPON_NAME WEAPON_REFERANCE);
        
        for (new 
isizeof arrWeaponListDataai++)
        {
            
WRITE_BYTE(arrWeaponListData[i]);
        }
        
        
MESSAGE_END();
    }
}

//**********************************************
//* Muzzleflash stuff.                          *
//**********************************************

stock Sprite_SetTransparency(const iSprite, const iRendermode, const FloatvecColor[3], const FloatflAmt, const iFx kRenderFxNone)
{
    
set_pev(iSpritepev_rendermodeiRendermode);
    
set_pev(iSpritepev_rendercolorvecColor);
    
set_pev(iSpritepev_renderamtflAmt);
    
set_pev(iSpritepev_renderfxiFx);
}

stock MuzzleFlash(const iPlayer, const szMuzzleSprite[], const FloatflScale, const FloatflFramerate, const iBody)
{
    if (
global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
    {
        return 
FM_NULLENT;
    }
    
    static 
iSpriteiszAllocStringCached;
    if (
iszAllocStringCached || (iszAllocStringCached engfunc(EngFunc_AllocString"info_target")))
    {
        
iSprite engfunc(EngFunc_CreateNamedEntityiszAllocStringCached);
    }
    
    if (!
IsValidPev(iSprite))
    {
        return 
FM_NULLENT;
    }
    
    static 
Float:iAngles[3];pev(iSpritepev_anglesiAngles);iAngles[2] = random_float(0.0180.0);
    static 
Float:Origin[3], Float:Angles[3];GET_ATTACHMENT(iPlayer0OriginAngles);

    
SET_MODEL(iSpriteszMuzzleSprite);
    
SET_ORIGIN(iSpriteOrigin);
    
    
set_pev(iSpritepev_classnameMUZZLE_CLASSNAME);
    
set_pev(iSpritepev_owneriPlayer);
    
set_pev(iSpritepev_movetypeMOVETYPE_FOLLOW);
    
set_pev(iSpritepev_skiniPlayer);
    
set_pev(iSpritepev_bodyiBody);
    
set_pev(iSpritepev_frame0.0);
    
    
Sprite_SetTransparency(iSpritekRenderTransAddFloat:{250.0,250.0,250.0}, 250.0);
    
    
set_pev(iSpritepev_framerateflFramerate);
    
set_pev(iSpritepev_scaleflScale);
    
set_pev(iSpritepev_anglesiAngles);
    
    
set_pev(iSpritepev_nextthinkget_gametime() + 0.03);
    
    return 
iSprite;
}

//**********************************************
//* Weaponbox world model.                     *
//**********************************************

public HamHook_Weaponbox_Spawn_Post(const iWeaponBox)
{
    if (
IsValidPev(iWeaponBox))
    {
        
state (IsValidPev(pev(iWeaponBoxpev_owner))) WeaponBoxEnabled;
    }
    
    return 
HAM_IGNORED;
}

public 
FakeMeta_SetModel(const iEntity) <WeaponBoxEnabled>
{
    
state WeaponBoxDisabled;
    
    if (!
IsValidPev(iEntity))
    {
        return 
FMRES_IGNORED;
    }
    
    
#define MAX_ITEM_TYPES    6
    
    
for (new iiItemMAX_ITEM_TYPESi++)
    {
        
iItem get_pdata_cbase(iEntitym_rgpPlayerItems_CWeaponBox iextra_offset_weapon);
        
        if (
IsValidPev(iItem) && IsCustomItem(iItem))
        {
            
SET_MODEL(iEntityMODEL_WORLD);
            
            
set_pev(iItempev_iuser2GetAmmoInventory(pev(iEntity,pev_owner), PrimaryAmmoIndex(iItem)))

            return 
FMRES_SUPERCEDE;
        }
    }
    
    return 
FMRES_IGNORED;
}

public 
FakeMeta_SetModel()    </* Empty statement */>    { /*  Fallback  */ return FMRES_IGNORED; }
public 
FakeMeta_SetModel()     < WeaponBoxDisabled >    { /* Do nothing */ return FMRES_IGNORED; }

//**********************************************
//* Ammo Inventory.                            *
//**********************************************

PrimaryAmmoIndex(const iItem)
{
    return 
get_pdata_int(iItemm_iPrimaryAmmoTypeextra_offset_weapon);
}

GetAmmoInventory(const iPlayer, const iAmmoIndex)
{
    if (
iAmmoIndex == -1)
    {
        return -
1;
    }

    return 
get_pdata_int(iPlayerm_rgAmmo_CBasePlayer iAmmoIndexextra_offset_player);
}

SetAmmoInventory(const iPlayer, const iAmmoIndex, const iAmount)
{
    if (
iAmmoIndex == -1)
    {
        return 
0;
    }

    
set_pdata_int(iPlayerm_rgAmmo_CBasePlayer iAmmoIndexiAmountextra_offset_player);
    return 
1;
}


PRECACHE_SOUND_FROM_MODEL(const szModelPath[])
{
    new 
iFile;
    
    if ((
iFile fopen(szModelPath"rt")))
    {
        new 
szSoundPath[64];
        
        new 
iNumSeqiSeqIndex;
        new 
iEventiNumEventsiEventIndex;
        
        
fseek(iFile164SEEK_SET);
        
fread(iFileiNumSeqBLOCK_INT);
        
fread(iFileiSeqIndexBLOCK_INT);
        
        for (new 
k0iNumSeqi++)
        {
            
fseek(iFileiSeqIndex 48 176 iSEEK_SET);
            
fread(iFileiNumEventsBLOCK_INT);
            
fread(iFileiEventIndexBLOCK_INT);
            
fseek(iFileiEventIndex 176 iSEEK_SET);

            for (
0iNumEventsk++)
            {
                
fseek(iFileiEventIndex 76 kSEEK_SET);
                
fread(iFileiEventBLOCK_INT);
                
fseek(iFile4SEEK_CUR);
                
                if (
iEvent != 5004)
                {
                    continue;
                }

                
fread_blocks(iFileszSoundPath64BLOCK_CHAR);
                
                if (
strlen(szSoundPath))
                {
                    
strtolower(szSoundPath);
                    
PRECACHE_SOUND(szSoundPath);
                }
            }
        }
    }
    
    
fclose(iFile);

Ze_Jurassic_World_Z [52%]
Ze_Jumping_Area [37%]
(04/02/2019, 05:15 PM)kikizon2 escribió: Me voy por un tiempo y cuando regreso veo esto... Oh god why
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)