Thread: [Help / Support] Gun for admin!
View Single Post
TribalBlood
Member
Join Date: Oct 2020
Old 11-27-2021 , 21:39   Re: Gun for admin!
Reply With Quote #2

PHP Code:
#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>
#include <zombieplague>

#define PLUGIN                  "[ZP] Extra: CSO Weapon Buff M3"
#define VERSION                 "1.0"
#define AUTHOR                  "KORD_12.7"


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

#define WPNLIST

// Main
#define WEAPON_KEY              785442
#define WEAPON_NAME                 "weapon_m3dragon"

#define WEAPON_REFERANCE            "weapon_xm1014"
#define WEAPON_MAX_CLIP             8
#define WEAPON_DEFAULT_AMMO         32

#define WEAPON_TIME_NEXT_IDLE           15.0
#define WEAPON_TIME_NEXT_ATTACK         1.0
#define WEAPON_TIME_DELAY_DEPLOY        1.0

#define WEAPON_MULTIPLIER_DAMAGE        1.5

#define WEAPON_RADIUS_DRAGON_ATTACK     200.0
#define WEAPON_DRAGON_DAMAGE_ATTACK     random_float(400.0, 500.0)

#define WEAPON_BALL_RADIUS_EXP          150.0
#define WEAPON_DAMAGE_BALL_EXP          random_float(150.0, 200.0)

#define ZP_ITEM_NAME                "buffm3"
#define ZP_ITEM_COST                0

// Models
#define MODEL_WORLD             "models/w_m3dragon.mdl"
#define MODEL_VIEW              "models/v_m3dragon.mdl"
#define MODEL_PLAYER                "models/p_m3dragon.mdl"
#define MODEL_DRAGON                "models/m3dragon_effect.mdl"
#define MODEL_FIREBALL              "models/ef_fireball2.mdl"

// Sounds
#define SOUND_FIRE              "weapons/m3dragon_shoot1.wav"
#define SOUND_FIRE_B                "weapons/m3dragon_shoot2.wav"
#define SOUND_EXPLODE               "weapons/m3dragon_exp.wav"
#define SOUND_DRAGON                "weapons/m3dragon_dragon_fx.wav"

// Sprites
#define WEAPON_HUD_TXT              "sprites/weapon_m3dragon.txt"
#define WEAPON_HUD_SPR              "sprites/640hud18.spr"
#define WEAPON_HUD_SPR2             "sprites/640hud177.spr"
#define WEAPON_SPR_EXP              "sprites/fexplo.spr"
#define WEAPON_SPR_SMOKE            "sprites/steam1.spr"
#define WEAPON_MUZZLE               "sprites/m3dragon_flame.spr"
#define WEAPON_MUZZLE_B             "sprites/m3dragon_flame2.spr"

// Animation
#define ANIM_EXTENSION              "shotgun"

// Animation sequences
enum
{
    
ANIM_IDLE,
    
ANIM_SHOOT,
    
ANIM_SHOOT2,
    
ANIM_INSERT,
    
ANIM_AFTER_RELOAD,
    
ANIM_BEFOR_RELOAD,
    
ANIM_DRAW,

    
ANIM_IDLE_B,
    
ANIM_SHOOT_B,
    
ANIM_INSERT_B,
    
ANIM_AFTER_RELOAD_B,
    
ANIM_BEFOR_RELOAD_B,
    
ANIM_DRAW_B,
};
//**********************************************
//* Some macroses.                             *
//**********************************************

#define MDLL_Spawn(%0)              dllfunc(DLLFunc_Spawn, %0)
#define MDLL_Touch(%0,%1)           dllfunc(DLLFunc_Touch, %0, %1)
#define MDLL_USE(%0,%1)             dllfunc(DLLFunc_Use, %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_rgpPlayerItems_CWeaponBox     34

// CBasePlayerItem
#define m_pPlayer               41
#define m_pNext                 42
#define m_iId                               43

// CBasePlayerWeapon
#define m_fInSuperBullets           30
#define m_flNextPrimaryAttack           46
#define m_flNextSecondaryAttack         47
#define m_flTimeWeaponIdle          48
#define m_iPrimaryAmmoType          49
#define m_iClip                 51
#define m_fInSpecialReload              55
#define m_fWeaponState              74
#define m_flNextAttack              83
#define m_iLastZoom                 109

// CBasePlayer
#define m_flVelocityModifier            108
#define m_fResumeZoom                   110
#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_LEFT           "MuzzleLeft"
#define MUZZLE_CLASSNAME_RIGHT          "MuzzleRight"
#define BALL_CLASSNAME              "FireBall"
#define DRAGON_CLASSNAME            "FireDragon"

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

new iBlood[4];
new 
iSpriteleft[33];
new 
iSpriteright[33];

Weapon_OnPrecache()
{
    
PRECACHE_MODEL(MODEL_WORLD);
    
PRECACHE_MODEL(MODEL_VIEW);
    
PRECACHE_MODEL(MODEL_PLAYER);
    
PRECACHE_MODEL(MODEL_DRAGON);
    
PRECACHE_MODEL(MODEL_FIREBALL);

    
PRECACHE_SOUND(SOUND_FIRE);
    
PRECACHE_SOUND(SOUND_FIRE_B);
    
PRECACHE_SOUND(SOUND_EXPLODE);
    
PRECACHE_SOUND(SOUND_DRAGON);
    
precache_sound("weapons/m3dragon_secondary_draw.wav")
    
precache_sound("weapons/m3dragon_reload_insert.wav")
    
precache_sound("weapons/m3dragon_fire_loop.wav")
    
precache_sound("weapons/m3dragon_after_reload.wav")

    
#if defined WPNLIST
    
PRECACHE_GENERIC(WEAPON_HUD_TXT);
    
PRECACHE_GENERIC(WEAPON_HUD_SPR);
    
PRECACHE_GENERIC(WEAPON_HUD_SPR2);
    
#endif

    
PRECACHE_MODEL(WEAPON_MUZZLE);
    
PRECACHE_MODEL(WEAPON_MUZZLE_B);

    
iBlood[0] = PRECACHE_MODEL("sprites/bloodspray.spr");
    
iBlood[1] = PRECACHE_MODEL("sprites/blood.spr");
    
iBlood[2] = PRECACHE_MODEL(WEAPON_SPR_EXP);
    
iBlood[3] = PRECACHE_MODEL(WEAPON_SPR_SMOKE);
}

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

Weapon_OnDeploy(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
{
    
#pragma unused iClip, iAmmoPrimary, iReloadMode
    
static iszViewModel;
    if (
iszViewModel || (iszViewModel engfunc(EngFunc_AllocStringMODEL_VIEW)))
    {
        
set_pev_string(iPlayerpev_viewmodel2iszViewModel);
    }
    static 
iszPlayerModel;
    if (
iszPlayerModel || (iszPlayerModel engfunc(EngFunc_AllocStringMODEL_PLAYER)))
    {
        
set_pev_string(iPlayerpev_weaponmodel2iszPlayerModel);
    }

    
set_pdata_int(iItemm_fInSpecialReloadfalseextra_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);

    
Weapon_DefaultDeploy(iPlayerMODEL_VIEWMODEL_PLAYERiMode ANIM_DRAW_B:ANIM_DRAWANIM_EXTENSION);

    
Update_HUD(iItemiPlayer0);
    
Update_HUD(iItemiPlayer1);

    if (
iMode)
    {
        
MuzzleFlash_Left(iPlayerWEAPON_MUZZLE0.0820.0);
        
MuzzleFlash_Right(iPlayerWEAPON_MUZZLE_B0.0820.0);
    }
}

Weapon_OnHolster(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
{
    
#pragma unused iPlayer, iClip, iAmmoPrimary, iMode, iReloadMode

    
set_pdata_int(iItemm_fInSpecialReloadfalseextra_offset_weapon);

    
Update_HUD(iItemiPlayer0);

    if (
pev_valid(iSpriteleft[iPlayer]) && pev_valid(iSpriteright[iPlayer]))
    {
        
set_pev(iSpriteleft[iPlayer], pev_fuser1get_gametime() + 0.0);
        
set_pev(iSpriteright[iPlayer], pev_fuser2get_gametime() + 0.0);
    }
}

Weapon_OnReload(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
{
    if(
iAmmoPrimary <= 0)
    {
        return 
HAM_IGNORED;
    }

    if (
iClip >=WEAPON_MAX_CLIP)
    {
        return 
HAM_IGNORED;
    }

    switch(
iReloadMode)
    {
        case 
0:
        {
            
Weapon_SendAnim(iPlayeriMode ANIM_BEFOR_RELOAD_B:ANIM_BEFOR_RELOAD);

            
set_pdata_float(iItemm_flNextPrimaryAttack0.5extra_offset_weapon);
            
set_pdata_float(iItemm_flTimeWeaponIdle0.5extra_offset_weapon);

            
set_pdata_int(iItemm_fInSpecialReload1extra_offset_weapon);

            return 
HAM_IGNORED;
        }
        case 
1:
        {
            if (
get_pdata_int(iItemm_flTimeWeaponIdleextra_offset_weapon) > 0.0)
            {
                return 
HAM_IGNORED;
            }

            
Weapon_SendAnim(iPlayeriMode ANIM_INSERT_B ANIM_INSERT);

            
set_pdata_int(iItemm_fInSpecialReload2extra_offset_weapon);
            
set_pdata_float(iItemm_flTimeWeaponIdle0.5extra_offset_weapon);

            static 
szAnimation[64];

            
formatex(szAnimationcharsmax(szAnimation), "ref_reload_shotgun");
            
Player_SetAnimation(iPlayerszAnimation);

        }
        case 
2:
        {
            
set_pdata_int(iItemm_iClipiClip 1extra_offset_weapon);
            
set_pdata_int(iPlayer381iAmmoPrimary-1extra_offset_player);
            
set_pdata_int(iItemm_fInSpecialReload1extra_offset_weapon);
        }
    }

    switch(
iReloadMode)
    {
        case 
0:
        {
            
Weapon_SendAnim(iPlayeriMode ANIM_BEFOR_RELOAD_B ANIM_BEFOR_RELOAD);

            
set_pdata_float(iItemm_flNextPrimaryAttack0.5extra_offset_weapon);
            
set_pdata_float(iItemm_flTimeWeaponIdle0.5extra_offset_weapon);

            
set_pdata_int(iItemm_fInSpecialReload1extra_offset_weapon);

            return 
HAM_IGNORED;
        }
    }
    return 
HAM_IGNORED;
}


Weapon_OnIdle(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
{
    
#pragma unused iClip, iAmmoPrimary

    
ExecuteHamB(Ham_Weapon_ResetEmptySoundiItem);

    if(
iClip == WEAPON_MAX_CLIP)
    {
        if(
iReloadMode == 2)
        {
            
Weapon_ReloadEnd(iItemiPlayeriMode);
            return;
        }
    }

    if(
iAmmoPrimary <= 0)
    {
        if(
iReloadMode == 2)
        {
            
Weapon_ReloadEnd(iItemiPlayeriMode);
            return;
        }
    }

    switch(
iReloadMode)
    {
        case 
1:
        {
            if (
get_pdata_int(iItemm_flTimeWeaponIdleextra_offset_weapon) > 0.0)
            {
                return;
            }

            
Weapon_SendAnim(iPlayeriMode ANIM_INSERT_BANIM_INSERT);

            
set_pdata_int(iItemm_fInSpecialReload2extra_offset_weapon);
            
set_pdata_float(iItemm_flTimeWeaponIdle0.5extra_offset_weapon);

            static 
szAnimation[64];

            
formatex(szAnimationcharsmax(szAnimation), "ref_reload_shotgun");
            
Player_SetAnimation(iPlayerszAnimation);

        }
        case 
2:
        {
            
set_pdata_int(iItemm_iClipiClip 1extra_offset_weapon);
            
set_pdata_int(iPlayer381iAmmoPrimary-1extra_offset_player);
            
set_pdata_int(iItemm_fInSpecialReload1extra_offset_weapon);
        }
    }

    if(!
iReloadMode)
    {
        if (
get_pdata_int(iItemm_flTimeWeaponIdleextra_offset_weapon) > 0.0)
        {
            return;
        }

        
set_pdata_float(iItemm_flTimeWeaponIdleWEAPON_TIME_NEXT_IDLEextra_offset_weapon);
        
Weapon_SendAnim(iPlayeriMode ANIM_IDLE_B ANIM_IDLE);
    }
}

Weapon_OnPrimaryAttack(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
{
    
#pragma unused iAmmoPrimary

    
static iFlagsiAnimDesired;
    static 
szAnimation[64];iFlags pev(iPlayerpev_flags);

    if(
iReloadMode && iClip 0)
    {
        
Weapon_ReloadEnd(iItemiPlayeriMode);
        return;
    }

    
CallOrigFireBullets3(iItemiPlayer)

    if (
iClip <= || pev(iPlayerpev_waterlevel) == 3)
    {
        return;
    }

    
Punchangle(iPlayer, .iVecx = -2.0, .iVecy 0.0, .iVecz 0.0);

    
Weapon_SendAnim(iPlayeriMode ANIM_SHOOT_B:ANIM_SHOOT);

    
formatex(szAnimationcharsmax(szAnimation), iFlags FL_DUCKING "crouch_shoot_%s" "ref_shoot_%s"ANIM_EXTENSION);

    if ((
iAnimDesired lookup_sequence(iPlayerszAnimation)) == -1)
    {
        
iAnimDesired 0;
    }

    
set_pev(iPlayerpev_sequenceiAnimDesired);

    
set_pdata_float(iItemm_flNextPrimaryAttackWEAPON_TIME_NEXT_ATTACKextra_offset_weapon);
    
set_pdata_float(iItemm_flTimeWeaponIdleWEAPON_TIME_NEXT_ATTACK+1.0extra_offset_weapon);

    
engfunc(EngFunc_EmitSoundiPlayerCHAN_WEAPONSOUND_FIRE0.9ATTN_NORM0PITCH_NORM);
}

Weapon_OnSecondaryAttack(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
{
    
#pragma unused iAmmoPrimary

    
if(iReloadMode && iClip 0)
    {
        
Weapon_ReloadEnd(iItemiPlayeriMode);
        return;
    }

    if (
get_pdata_float(iItemm_flNextSecondaryAttackextra_offset_weapon) > 0.0)
    {
        return;
    }

    if (
pev(iPlayerpev_button) & IN_ATTACK2)
    {
        if (!
iMode || pev(iPlayerpev_waterlevel) == 3)
        {
            return;
        }

        static 
iFlags;
        static 
iAnimDesired;
        static 
szAnimation[64];iFlags pev(iPlayerpev_flags);
        static 
pEntity;
        static 
Float:fOrigin[3],Float:vecEnd[3];fm_get_aim_origin(iPlayervecEnd);Get_Position(iPlayer15.00.0, -5.0fOrigin);
        static 
iszAllocStringCached;

        
Punchangle(iPlayer, .iVecx = -4.0, .iVecy 0.0, .iVecz 0.0);

        
Weapon_SendAnim(iPlayerANIM_SHOOT2);

        
engfunc(EngFunc_EmitSoundiPlayerCHAN_WEAPONSOUND_FIRE_B0.9ATTN_NORM0PITCH_NORM);

        
formatex(szAnimationcharsmax(szAnimation), iFlags FL_DUCKING "crouch_shoot_%s" "ref_shoot_%s"ANIM_EXTENSION);

        if ((
iAnimDesired lookup_sequence(iPlayerszAnimation)) == -1)
        {
            
iAnimDesired 0;
        }

        
set_pev(iPlayerpev_sequenceiAnimDesired);

        
set_pdata_float(iItemm_flNextSecondaryAttack2.0extra_offset_weapon);
        
set_pdata_float(iItemm_flTimeWeaponIdle2.0extra_offset_weapon);

        if (
iszAllocStringCached || (iszAllocStringCached engfunc(EngFunc_AllocString"info_target")))
        {
            
pEntity engfunc(EngFunc_CreateNamedEntityiszAllocStringCached);
        }

        if (
pev_valid(pEntity))
        {
            
set_pev(pEntitypev_movetypeMOVETYPE_FLYMISSILE);
            
set_pev(pEntitypev_owneriPlayer);

            
SET_MODEL(pEntity,MODEL_FIREBALL)
            
SET_ORIGIN(pEntity,fOrigin)

            
set_pev(pEntitypev_classnameBALL_CLASSNAME);
            
set_pev(pEntitypev_minsFloat:{-0.01, -0.01, -0.01});
            
set_pev(pEntitypev_maxsFloat:{0.010.010.01});
            
set_pev(pEntitypev_gravity0.01);
            
set_pev(pEntitypev_solidSOLID_BBOX);
            
set_pev(pEntitypev_nextthinkget_gametime() + 0.1);

            static 
Float:Velocity[3];Get_Speed_Vector(fOriginvecEnd1000.0Velocity);
            
set_pev(pEntitypev_velocityVelocity);

            
Sprite_SetTransparency(pEntitykRenderTransAddFloat:{255.255,255.0,255.0}, 150.0);
        }

        
Update_HUD(iItemiPlayer0);
        
set_pdata_int(iItemm_fWeaponState0extra_offset_weapon);
        
set_pdata_int(iItemm_fInSuperBullets0extra_offset_weapon);
        
Update_HUD(iItemiPlayer1);

        if (
pev_valid(iSpriteleft[iPlayer]) && pev_valid(iSpriteright[iPlayer]))
        {
            
set_pev(iSpriteleft[iPlayer], pev_fuser1get_gametime() + 0.0);
            
set_pev(iSpriteright[iPlayer], pev_fuser2get_gametime() + 0.0);
        }
    }
}

Weapon_ReloadEnd(const iItem, const iPlayer, const iMode)
{
    
Weapon_SendAnim(iPlayeriMode ANIM_AFTER_RELOAD_B:ANIM_AFTER_RELOAD);

    
set_pdata_float(iItemm_flNextPrimaryAttack0.6extra_offset_weapon);
    
set_pdata_float(iItemm_flTimeWeaponIdle1.4extra_offset_weapon);

    
set_pdata_int(iItemm_fInSpecialReload0extra_offset_weapon);
}

Update_HUD(const iItem, const iPlayerUpdateMode)
{
    new 
iSprite[33];
    static 
iMode;iMode=get_pdata_int(iItemm_fWeaponStateextra_offset_weapon);
    
format(iSpritecharsmax(iSprite), "number_%d"iMode);

    if(
UpdateMode && iMode 0)
    {
        
message_begin(MSG_ONEget_user_msgid("StatusIcon"), {0,0,0}, iPlayer);
        
write_byte(1);
        
write_string(iSprite);
        
write_byte(30);
        
write_byte(144);
        
write_byte(255);
        
message_end();
    }
    else
    {
        
message_begin(MSG_ONEget_user_msgid("StatusIcon"), {0,0,0}, iPlayer);
        
write_byte(0);
        
write_string(iSprite);
        
write_byte(30);
        
write_byte(144);
        
write_byte(255);
        
message_end();
    }
}


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

#define MSGID_WEAPONLIST 78

new g_iItemID;
new 
RoundEend;

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

public plugin_precache()
{
    
Weapon_OnPrecache();
    
#if defined WPNLIST
    
register_clcmd(WEAPON_NAME"Cmd_WeaponSelect");
    
register_message(MSGID_WEAPONLIST"MsgHook_WeaponList");
    
#endif
}

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR);

    
register_forward(FM_PlaybackEvent,              "FakeMeta_PlaybackEvent",    false);
    
register_forward(FM_SetModel,                   "FakeMeta_SetModel",         false);
    
register_forward(FM_UpdateClientData,               "FakeMeta_UpdateClientData_Post",true);
    
register_forward(FM_Touch,                  "FakeMeta_Touch",        false);
    
register_forward(FM_Think,                  "FakeMeta_Think",        false);

    
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);

    
g_iItemID zp_register_extra_item(ZP_ITEM_NAME,        ZP_ITEM_COST,           ZP_TEAM_HUMAN);
}

public 
zp_extra_item_selected(iditemid)
{
    if (
itemid == g_iItemID && get_user_flags(id) & ADMIN_BAN)
    {
        
Weapon_Give(id);
    }
    else
    {
        
zp_set_user_ammo_packs(idzp_get_user_ammo_packs(id) + ZP_ITEM_COST)
    }
}

public 
zp_user_infected_post(iPlayer)
{
    if (
pev_valid(iSpriteleft[iPlayer]) && pev_valid(iSpriteright[iPlayer]))
    {
        
set_pev(iSpriteleft[iPlayer], pev_fuser1get_gametime() + 0.0);
        
set_pev(iSpriteright[iPlayer], pev_fuser2get_gametime() + 0.0);
    }
}

public 
plugin_natives()
{
    
register_native("geating_m3""NativeGiveWeapon"true)
}

public 
NativeGiveWeapon(iPlayer)
{
    
Weapon_Give(iPlayer);
}

public 
StartRound()RoundEend=false;
public 
EndRound()RoundEend=true;

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

public FakeMeta_UpdateClientData_Post(const iPlayer, const iSendWeapons, const CD_Handle)
{
    static 
iActiveItem;iActiveItem get_pdata_cbase(iPlayerm_pActiveItemextra_offset_player);

    if (!
IsValidPev(iActiveItem) || !IsCustomItem(iActiveItem))
    {
        return 
FMRES_IGNORED;
    }

    
set_cd(CD_HandleCD_flNextAttackget_gametime() + 0.001);
    return 
FMRES_IGNORED;
}

public 
FakeMeta_Touch(const iEnt, const iOther)
{
    if(!
pev_valid(iEnt))
    {
        return 
FMRES_IGNORED;
    }

    static 
Classname[32];pev(iEntpev_classnameClassnamesizeof(Classname));
    static 
Float:Origin[3];pev(iEntpev_originOrigin);
    static 
iAttackeriAttacker pev(iEntpev_owner);
    static 
pevVictimpevVictim = -1;
    static 
iEntity;
    static 
iszAllocStringCached2;

    if (!
equal(ClassnameBALL_CLASSNAME))
    {
        return 
FMRES_IGNORED;
    }

    if (
engfunc(EngFunc_PointContentsOrigin) == CONTENTS_SKY || engfunc(EngFunc_PointContentsOrigin) == CONTENTS_WATER)
    {
        
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_KILLME);
        return 
FMRES_SUPERCEDE;
    }

    if (!
is_user_connected(iAttacker))
    {
        
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_KILLME);
        return 
FMRES_IGNORED;
    }

    if (
iszAllocStringCached2 || (iszAllocStringCached2 engfunc(EngFunc_AllocString"info_target")))
    {
        
iEntity engfunc(EngFunc_CreateNamedEntityiszAllocStringCached2);
    }

    if (
pev_valid(iEntity))
    {
        
SET_MODEL(iEntity,MODEL_DRAGON)
        
SET_ORIGIN(iEntity,Origin)

        
set_pev(iEntitypev_classnameDRAGON_CLASSNAME);
        
set_pev(iEntitypev_movetypeMOVETYPE_FLY);
        
set_pev(iEntitypev_solidSOLID_NOT);
        
set_pev(iEntitypev_owneriAttacker);
        
set_pev(iEntitypev_framerate0.9);
        
set_pev(iEntitypev_sequence0);
        
set_pev(iEntitypev_animtimeget_gametime());
        
set_pev(iEntitypev_fuser2get_gametime() + 3.4);
        
set_pev(iEntitypev_nextthinkget_gametime() + 1.0);
        
Sprite_SetTransparency(iEntitykRenderTransAddFloat:{255.255,255.0,255.0}, 200.0);
    }

    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYOrigin0);
    
write_byte(TE_EXPLOSION);
    
WRITE_COORD(Origin[0]);
    
WRITE_COORD(Origin[1]);
    
WRITE_COORD(Origin[2] + 10.0);
    
write_short(iBlood[2]);
    
write_byte(20);
    
write_byte(15);
    
write_byte(TE_EXPLFLAG_NOSOUND);
    
message_end();

    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYOrigin0);
    
write_byte(TE_SMOKE)
    
WRITE_COORD(Origin[0]);
    
WRITE_COORD(Origin[1]);
    
WRITE_COORD(Origin[2] - 20.0);
    
write_short(iBlood[3]);
    
write_byte(30);
    
write_byte(5);
    
message_end();

    
engfunc(EngFunc_EmitSoundiEntCHAN_VOICESOUND_DRAGON0.9ATTN_NORM0PITCH_NORM);
    
engfunc(EngFunc_EmitSoundiEntCHAN_ITEMSOUND_EXPLODE0.9ATTN_NORM0PITCH_NORM);

    while((
pevVictim engfunc(EngFunc_FindEntityInSpherepevVictimOriginWEAPON_BALL_RADIUS_EXP)) != )
    {
        if (!
is_user_alive(pevVictim))continue;
        if (!
zp_get_user_zombie(pevVictim))continue;
        if (
RoundEend)continue;

        static 
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(18)
        
message_end()

        
set_hudmessage(25500, -1.00.4600.020.05);
        
show_hudmessage(iAttacker" \     /^n^n/     \");

        ExecuteHamB(Ham_TakeDamage, pevVictim, iEnt, iAttacker, WEAPON_DAMAGE_BALL_EXP, DMG_SONIC);
    }

    set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME);

    return FMRES_IGNORED;
}

public FakeMeta_Think(const iSprite)
{
    if (!pev_valid(iSprite))
    {
        return FMRES_IGNORED;
    }

    static Classname[32];pev(iSprite, pev_classname, Classname, sizeof(Classname));

    static iAttacker; iAttacker = pev(iSprite, pev_owner);

    if (equal(Classname,  DRAGON_CLASSNAME))
    {
        static Float:Origin[3];pev(iSprite, pev_origin, Origin);
        static Float:iTime;pev(iSprite, pev_fuser2, iTime);
        static iVictim;iVictim = -1

        if (iTime <= get_gametime())
        {
            engfunc(EngFunc_RemoveEntity, iSprite);
            return FMRES_SUPERCEDE;
        }

        while((iVictim = engfunc(EngFunc_FindEntityInSphere, iVictim, Origin, WEAPON_RADIUS_DRAGON_ATTACK)) != 0)
        {
            static Float:iVelo[3];pev(iVictim, pev_velocity, iVelo);

            if (!is_user_alive(iVictim))continue;
            if (!zp_get_user_zombie(iVictim))continue;
            if (RoundEend)continue;

            iVelo[0] = 0.0;
            iVelo[1] = 0.0;
            iVelo[2] = 250.0;

            set_hudmessage(255, 0, 0, -1.0, 0.46, 0, 0.02, 0.05);
            show_hudmessage(iAttacker, " 
\     /^n^n/     \");

            ExecuteHamB(Ham_TakeDamage, iVictim, iSprite, iAttacker, WEAPON_DRAGON_DAMAGE_ATTACK, DMG_SONIC);

            set_pdata_float(iVictim, m_flVelocityModifier, 1.0,  extra_offset_player);
            set_pev(iVictim, pev_velocity, iVelo);
        }

        set_pev(iSprite, pev_nextthink, get_gametime() + 0.08);
    }

    if (equal(Classname, MUZZLE_CLASSNAME_LEFT))
    {
        static Float:flFrame;
        static Float:iTime;pev(iSprite, pev_fuser1, iTime);

        flFrame+=1.0

        if (iTime <= get_gametime() || pev(iAttacker, pev_deadflag) == DAMAGE_YES)
        {
            set_pev(iSprite, pev_flags, pev(iSprite, pev_flags) | FL_KILLME);
            return FMRES_SUPERCEDE;
        }

        set_pev(iSprite, pev_frame, flFrame);
        set_pev(iSprite, pev_nextthink, get_gametime() + 0.01);
    }

    if (equal(Classname, MUZZLE_CLASSNAME_RIGHT))
    {
        static Float:flFrame;
        static Float:iTime2;pev(iSprite, pev_fuser2, iTime2);

        flFrame+=1.0

        if (iTime2 <= get_gametime() || pev(iAttacker, pev_deadflag) == DAMAGE_YES)
        {
            set_pev(iSprite, pev_flags, pev(iSprite, pev_flags) | FL_KILLME);
            return FMRES_SUPERCEDE;
        }

        set_pev(iSprite, pev_frame, flFrame);
        set_pev(iSprite, pev_nextthink, get_gametime() + 0.01);
    }


    return FMRES_IGNORED;
}

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

    #define _call.%0(%1,%2) \
                                    \
    Weapon_On%0                         \
    (                               \
        %1,                             \
        %2,                         \
                                    \
        get_pdata_int(%1, m_iClip, extra_offset_weapon),    \
        GetAmmoInventory(%2, PrimaryAmmoIndex(%1)),     \
        get_pdata_int(%1, m_fWeaponState, extra_offset_weapon), \
        get_pdata_int(%1, m_fInSpecialReload, extra_offset_weapon) \
    )

public HamHook_Item_Deploy_Post(const iItem)
{
    new iPlayer;

    if (!CheckItem(iItem, iPlayer))
    {
        return HAM_IGNORED;
    }

    _call.Deploy(iItem, iPlayer);
    return HAM_IGNORED;
}

public HamHook_Item_Holster(const iItem)
{
    new iPlayer;

    if (!CheckItem(iItem, iPlayer))
    {
        return HAM_IGNORED;
    }

    set_pev(iPlayer, pev_viewmodel, 0);
    set_pev(iPlayer, pev_weaponmodel, 0);

    _call.Holster(iItem, iPlayer);
    return HAM_SUPERCEDE;
}

public HamHook_Item_WeaponIdle(const iItem)
{
    static iPlayer;

    if (!CheckItem(iItem, iPlayer))
    {
        return HAM_IGNORED;
    }

    _call.Idle(iItem, iPlayer);
    return HAM_SUPERCEDE;
}

public HamHook_Item_Reload(const iItem)
{
    static iPlayer;

    if (!CheckItem(iItem, iPlayer))
    {
        return HAM_IGNORED;
    }

    _call.Reload(iItem, iPlayer);
    return HAM_SUPERCEDE;
}

public HamHook_Item_PrimaryAttack(const iItem)
{
    static iPlayer;

    if (!CheckItem(iItem, iPlayer))
    {
        return HAM_IGNORED;
    }

    _call.PrimaryAttack(iItem, iPlayer);
    return HAM_SUPERCEDE;
}

public HamHook_Item_PostFrame(const iItem)
{
    static iPlayer;

    if (!CheckItem(iItem, iPlayer))
    {
        return HAM_IGNORED;
    }

    if (get_pdata_float(iItem, m_flNextPrimaryAttack, extra_offset_weapon) <= 0.0 && get_pdata_int(iItem, m_fInSpecialReload, extra_offset_weapon) <= 0)
    {
        _call.SecondaryAttack(iItem, iPlayer);
    }

    return HAM_IGNORED;
}

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

CallOrigFireBullets3(const iItem, const iPlayer)
{
    static FakeMetaTraceLine;FakeMetaTraceLine=register_forward(FM_TraceLine,"
FakeMeta_TraceLine",true)
    state FireBullets: Enabled;
    static Float: vecPuncheAngle[3];pev(iPlayer, pev_punchangle, vecPuncheAngle);

    ExecuteHam(Ham_Weapon_PrimaryAttack, iItem);
    set_pev(iPlayer, pev_punchangle, vecPuncheAngle);

    state FireBullets: Disabled;
    unregister_forward(FM_TraceLine,FakeMetaTraceLine,true)
}

public FakeMeta_PlaybackEvent() <FireBullets: Enabled>
{
    return FMRES_SUPERCEDE;
}

public FakeMeta_TraceLine(Float:vecStart[3], Float:vecEnd[3], iFlag, iIgnore, iTrase)
{
    if (iFlag & IGNORE_MONSTERS)
    {
        return FMRES_IGNORED;
    }

    static Float:vecfEnd[3],iHit,iDecal,glassdecal;

    if(!glassdecal)
    {
        glassdecal=engfunc( EngFunc_DecalIndex, "
{bproof1" )
    }

    iHit=get_tr2(iTrase,TR_pHit)

    if(iHit>0 && pev_valid(iHit))
        if(pev(iHit,pev_solid)!=SOLID_BSP)return FMRES_IGNORED
        else if(pev(iHit,pev_rendermode)!=0)iDecal=glassdecal
        else iDecal=random_num(41,45)
    else iDecal=random_num(41,45)

    get_tr2(iTrase, TR_vecEndPos, vecfEnd)

    engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecfEnd, 0)
    write_byte(TE_GUNSHOTDECAL)
    WRITE_COORD(vecfEnd[0])
    WRITE_COORD(vecfEnd[1])
    WRITE_COORD(vecfEnd[2])
    write_short(iHit > 0 ? iHit : 0)
    write_byte(iDecal)
    message_end()

    return FMRES_IGNORED
}

public HamHook_Entity_TraceAttack(const iEntity, const iAttacker, const Float: flDamage) <FireBullets: Enabled>
{
    static iItem;iItem = get_pdata_cbase(iAttacker, m_pActiveItem, extra_offset_player);

    if (!BitCheck(g_bitIsConnected, iAttacker) || !IsValidPev(iAttacker))
    {
        return;
    }

    if (!IsValidPev(iItem))
    {
        return;
    }

    if (get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon) == 31)
    {
        MuzzleFlash_Left(iAttacker, WEAPON_MUZZLE, 0.08, 20.0);
        MuzzleFlash_Right(iAttacker, WEAPON_MUZZLE_B, 0.08, 20.0);
        Update_HUD(iItem, iAttacker, 0);
        set_pdata_int(iItem, m_fWeaponState, 1, extra_offset_weapon);
        Update_HUD(iItem, iAttacker, 1);
    }

    if (is_user_alive(iEntity) && get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon) < 32 && zp_get_user_zombie(iEntity))
    {
        set_pdata_int(iItem, m_fInSuperBullets, (get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon)+1), extra_offset_weapon);
    }

    set_hudmessage(255, 0, 0, -1.0, 0.46, 0, 0.2, 0.05);
    show_hudmessage(iAttacker, " 
\     /^n^n/     \");

    SetHamParamFloat(3, flDamage * WEAPON_MULTIPLIER_DAMAGE);
}

public MsgHook_Death()          </* Empty statement */>     { /* Fallback */ }
public MsgHook_Death()          <FireBullets: Disabled>     { /* Do notning */ }

public FakeMeta_PlaybackEvent()     </* Empty statement */>     { return FMRES_IGNORED; }
public FakeMeta_PlaybackEvent()     <FireBullets: Disabled>     { return FMRES_IGNORED; }

public HamHook_Entity_TraceAttack()     </* Empty statement */>     { /* Fallback */ }
public HamHook_Entity_TraceAttack()     <FireBullets: Disabled>     { /* Do notning */ }


Weapon_Create(const Float: vecOrigin[3] = {0.0, 0.0, 0.0}, const Float: vecAngles[3] = {0.0, 0.0, 0.0})
{
    new iWeapon;

    static iszAllocStringCached;
    if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, WEAPON_REFERANCE)))
    {
        iWeapon = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
    }

    if (!IsValidPev(iWeapon))
    {
        return FM_NULLENT;
    }

    MDLL_Spawn(iWeapon);
    SET_ORIGIN(iWeapon, vecOrigin);

    set_pdata_int(iWeapon, m_iClip, WEAPON_MAX_CLIP, extra_offset_weapon);
    set_pdata_int(iWeapon, m_fWeaponState, 0, extra_offset_weapon);
    set_pdata_int(iWeapon, m_fInSuperBullets, 0, extra_offset_weapon);

    set_pev(iWeapon, pev_impulse, WEAPON_KEY);
    set_pev(iWeapon, pev_angles, vecAngles);

    Weapon_OnSpawn(iWeapon);

    return iWeapon;
}

Weapon_Give(const iPlayer)
{
    if (!IsValidPev(iPlayer))
    {
        return FM_NULLENT;
    }

    new iWeapon, Float: vecOrigin[3];
    pev(iPlayer, pev_origin, vecOrigin);

    if ((iWeapon = Weapon_Create(vecOrigin)) != FM_NULLENT)
    {
        Player_DropWeapons(iPlayer, ExecuteHamB(Ham_Item_ItemSlot, iWeapon));
        set_pev(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN);
        MDLL_Touch(iWeapon, iPlayer);
        SetAmmoInventory(iPlayer, PrimaryAmmoIndex(iWeapon), WEAPON_DEFAULT_AMMO);

        return iWeapon;
    }

    return FM_NULLENT;
}

Player_DropWeapons(const iPlayer, const iSlot)
{
    new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, extra_offset_player);

    while (IsValidPev(iItem))
    {
        pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName));
        engclient_cmd(iPlayer, "
drop", szWeaponName);

        iItem = get_pdata_cbase(iItem, m_pNext, extra_offset_weapon);
    }
}

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

    MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0.0, 0.0, 0.0}, iPlayer);
    WRITE_BYTE(iAnim);
    WRITE_BYTE(0);
    MESSAGE_END();
}

stock Weapon_DefaultDeploy(const iPlayer, const szViewModel[], const szWeaponModel[], const iAnim, const szAnimExt[])
{
    set_pev(iPlayer, pev_viewmodel2, szViewModel);
    set_pev(iPlayer, pev_weaponmodel2, szWeaponModel);
    set_pev(iPlayer, pev_fov, 90.0);

    set_pdata_int(iPlayer, m_iFOV, 90, extra_offset_player);
    set_pdata_int(iPlayer, m_fResumeZoom, 0, extra_offset_player);
    set_pdata_int(iPlayer, m_iLastZoom, 90, extra_offset_player);

    set_pdata_string(iPlayer, m_szAnimExtention * 4, szAnimExt, -1, extra_offset_player * 4);

    Weapon_SendAnim(iPlayer, iAnim);
}

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

stock Get_Position(id,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(id, pev_origin, vOrigin);
    pev(id, pev_view_ofs, vUp);

    xs_vec_add(vOrigin, vUp, vOrigin);

    pev(id, pev_v_angle, vAngle);

    angle_vector(vAngle, ANGLEVECTOR_FORWARD, vForward);
    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;
}

stock Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
    new_velocity[0] = origin2[0] - origin1[0]
    new_velocity[1] = origin2[1] - origin1[1]
    new_velocity[2] = origin2[2] - origin1[2]
    new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
    new_velocity[0] *= num
    new_velocity[1] *= num
    new_velocity[2] *= num
}

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

public client_putinserver(id)
{
    BitSet(g_bitIsConnected, id);
}

public client_disconnect(id)
{
    BitClear(g_bitIsConnected, id);
}


bool: CheckItem(const iItem, &iPlayer)
{
    if (!IsValidPev(iItem) || !IsCustomItem(iItem))
    {
        return false;
    }

    iPlayer = get_pdata_cbase(iItem, m_pPlayer, extra_offset_weapon);

    if (!IsValidPev(iPlayer) || !BitCheck(g_bitIsConnected, iPlayer))
    {
        return false;
    }

    return true;
}

//**********************************************
//* Weapon list update.                        *
//**********************************************
#if defined WPNLIST
public Cmd_WeaponSelect(const iPlayer)
{
    engclient_cmd(iPlayer, WEAPON_REFERANCE);
    return PLUGIN_HANDLED;
}
#endif
public HamHook_Item_AddToPlayer(const iItem, const iPlayer)
{
    switch(pev(iItem, pev_impulse))
    {
        case 0: MsgHook_WeaponList(MSGID_WEAPONLIST, iItem, iPlayer);
        case WEAPON_KEY:
        {
            #if defined WPNLIST
            MsgHook_WeaponList(MSGID_WEAPONLIST, iItem, iPlayer);
            #endif
            SetAmmoInventory(iPlayer, PrimaryAmmoIndex(iItem), pev(iItem, pev_iuser2));
        }
    }

    return HAM_IGNORED;
}

public MsgHook_WeaponList(const iMsgID, const iMsgDest, const iMsgEntity)
{
    static arrWeaponListData[8];

    if (!iMsgEntity)
    {
        new szWeaponName[32];
        get_msg_arg_string(1, szWeaponName, charsmax(szWeaponName));

        if (!strcmp(szWeaponName, WEAPON_REFERANCE))
        {
            for (new i, a = sizeof arrWeaponListData; i < a; i++)
            {
                arrWeaponListData[i] = get_msg_arg_int(i + 2);
            }
        }
    }
    else
    {
        if (!IsCustomItem(iMsgDest) && pev(iMsgDest, pev_impulse))
        {
            return;
        }

        MESSAGE_BEGIN(MSG_ONE, iMsgID, {0.0, 0.0, 0.0}, iMsgEntity);
        WRITE_STRING(IsCustomItem(iMsgDest) ? WEAPON_NAME : WEAPON_REFERANCE);

        for (new i, a = sizeof arrWeaponListData; i < a; i++)
        {
            WRITE_BYTE(arrWeaponListData[i]);
        }

        MESSAGE_END();
    }
}

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

stock Sprite_SetTransparency(const iSprite, const iRendermode, const Float: vecColor[3], const Float: flAmt, const iFx = kRenderFxNone)
{
    set_pev(iSprite, pev_rendermode, iRendermode);
    set_pev(iSprite, pev_rendercolor, vecColor);
    set_pev(iSprite, pev_renderamt, flAmt);
    set_pev(iSprite, pev_renderfx, iFx);
}

stock MuzzleFlash_Right(const iPlayer, const szMuzzleSprite[], const Float: flScale, const Float: flFramerate)
{
    if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
    {
        return FM_NULLENT;
    }

    static iszAllocStringCached;
    if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "
env_sprite")))
    {
        iSpriteright[iPlayer] = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
    }

    if (!IsValidPev(iSpriteright[iPlayer]))
    {

        return FM_NULLENT;
    }

    set_pev(iSpriteright[iPlayer], pev_model, szMuzzleSprite);

    set_pev(iSpriteright[iPlayer], pev_classname, MUZZLE_CLASSNAME_RIGHT);
    set_pev(iSpriteright[iPlayer], pev_owner, iPlayer);
    set_pev(iSpriteright[iPlayer], pev_aiment, iPlayer);
    set_pev(iSpriteright[iPlayer], pev_body, 4);
    set_pev(iSpriteright[iPlayer], pev_frame, 0.0);

    Sprite_SetTransparency(iSpriteright[iPlayer], kRenderTransAdd, Float:{0.0,0.0,0.0}, 255.0);

    set_pev(iSpriteright[iPlayer], pev_framerate, flFramerate);
    set_pev(iSpriteright[iPlayer], pev_scale, flScale);

    set_pev(iSpriteright[iPlayer], pev_fuser2, get_gametime() + 40.0);
    set_pev(iSpriteright[iPlayer], pev_nextthink, get_gametime() + 0.01);

    MDLL_Spawn(iSpriteright[iPlayer]);

    return iSpriteright[iPlayer];
}

stock MuzzleFlash_Left(const iPlayer, const szMuzzleSprite[], const Float: flScale, const Float: flFramerate)
{
    if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
    {
        return FM_NULLENT;
    }

    static iszAllocStringCached;
    if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "
env_sprite")))
    {
        iSpriteleft[iPlayer] = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
    }

    if (!IsValidPev(iSpriteleft[iPlayer]))
    {

        return FM_NULLENT;
    }

    set_pev(iSpriteleft[iPlayer], pev_model, szMuzzleSprite);

    set_pev(iSpriteleft[iPlayer], pev_classname, MUZZLE_CLASSNAME_LEFT);
    set_pev(iSpriteleft[iPlayer], pev_owner, iPlayer);
    set_pev(iSpriteleft[iPlayer], pev_aiment, iPlayer);
    set_pev(iSpriteleft[iPlayer], pev_body, 3);
    set_pev(iSpriteleft[iPlayer], pev_frame, 0.0);

    Sprite_SetTransparency(iSpriteleft[iPlayer], kRenderTransAdd, Float:{0.0,0.0,0.0}, 255.0);

    set_pev(iSpriteleft[iPlayer], pev_framerate, flFramerate);
    set_pev(iSpriteleft[iPlayer], pev_scale, flScale);

    set_pev(iSpriteleft[iPlayer], pev_fuser1, get_gametime() + 40.0);
    set_pev(iSpriteleft[iPlayer], pev_nextthink, get_gametime() + 0.01);

    MDLL_Spawn(iSpriteleft[iPlayer]);

    return iSpriteleft[iPlayer];
}

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

public HamHook_Weaponbox_Spawn_Post(const iWeaponBox)
{
    if (IsValidPev(iWeaponBox))
    {
        state (IsValidPev(pev(iWeaponBox, pev_owner))) WeaponBox: Enabled;
    }

    return HAM_IGNORED;
}

public FakeMeta_SetModel(const iEntity) <WeaponBox: Enabled>
{
    state WeaponBox: Disabled;

    if (!IsValidPev(iEntity))
    {
        return FMRES_IGNORED;
    }

    #define MAX_ITEM_TYPES  6

    for (new i, iItem; i < MAX_ITEM_TYPES; i++)
    {
        iItem = get_pdata_cbase(iEntity, m_rgpPlayerItems_CWeaponBox + i, extra_offset_weapon);

        if (IsValidPev(iItem) && IsCustomItem(iItem))
        {
            SET_MODEL(iEntity, MODEL_WORLD);
            set_pev(iItem, pev_iuser2, GetAmmoInventory(pev(iEntity,pev_owner), PrimaryAmmoIndex(iItem)))
            return FMRES_SUPERCEDE;
        }
    }

    return FMRES_IGNORED;
}

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

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

PrimaryAmmoIndex(const iItem)
{
    return get_pdata_int(iItem, m_iPrimaryAmmoType, extra_offset_weapon);
}

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

    return get_pdata_int(iPlayer, m_rgAmmo_CBasePlayer + iAmmoIndex, extra_offset_player);
}

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

    set_pdata_int(iPlayer, m_rgAmmo_CBasePlayer + iAmmoIndex, iAmount, extra_offset_player);
    return 1;
}
//vk.com/l.shvendik0
stock Player_SetAnimation(const iPlayer, const szAnim[])
{
       if(!is_user_alive(iPlayer))return;

       #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 iAnimDesired, Float: flFrameRate, Float: flGroundSpeed, bool: bLoops;

       if ((iAnimDesired = lookup_sequence(iPlayer, szAnim, flFrameRate, bLoops, flGroundSpeed)) == -1)
       {
          iAnimDesired = 0;
       }

       new Float: flGametime = get_gametime();

       set_pev(iPlayer, pev_frame, 0.0);
       set_pev(iPlayer, pev_framerate, 1.0);
       set_pev(iPlayer, pev_animtime, flGametime );
       set_pev(iPlayer, pev_sequence, iAnimDesired);

       set_pdata_int(iPlayer, m_fSequenceLoops, bLoops, extra_offset_animating);
       set_pdata_int(iPlayer, m_fSequenceFinished, 0, extra_offset_animating);

       set_pdata_float(iPlayer, m_flFrameRate, flFrameRate, extra_offset_animating);
       set_pdata_float(iPlayer, m_flGroundSpeed, flGroundSpeed, extra_offset_animating);
       set_pdata_float(iPlayer, m_flLastEventCheck, flGametime , extra_offset_animating);

       set_pdata_int(iPlayer, m_Activity, ACT_RANGE_ATTACK1, extra_offset_player);
       set_pdata_int(iPlayer, m_IdealActivity, ACT_RANGE_ATTACK1, extra_offset_player);
       set_pdata_float(iPlayer, m_flLastAttackTime, flGametime , extra_offset_player);
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/ 
__________________
My Steam Profile

- Online Rarely -
TribalBlood is offline