Modificar daño y disparos para el skill
#1
Hola!
Finalmente pude encontrarle la vuelta (gracias a [N]drs que me orientó bastante!)
El tema ahora es que necesito saber y modificar en que momento carga la habilidad si es por daño o por disparos de impactos.. necesito que sea mucho menos sea daño o cantidad de disparos..
Por otro lado tambien me gustaria saber como puedo hacer para ponerle un precio a tal arma (que todos la puedan comprar por "x" valor
Código PHP:
#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>


#define PLUGIN                     "[ZP] Extra: CSO Weapon M3 Big Shark"
#define VERSION                 "1.0"
#define AUTHOR                     "TemplateAuthor:KORD_12.7:WeaponAuthor:PaXaN-ZOMBIE"

#pragma ctrlchar                 '\'
#pragma compress                 1

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

#define WPNLIST    

// Main
#define WEAPON_KEY                8279214
#define WEAPON_NAME                 "weapon_m3dragonm_paxan"

#define WEAPON_REFERANCE            "weapon_xm1014"
#define WEAPON_MAX_CLIP                8
#define WEAPON_DEFAULT_AMMO            32
#define WEAPON_HIT_TO_ACTIVE            32 //32 hit on player for active B mode (Shark)

#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.65

//MissileAttack
#define WEAPON_RADIUS_EXP            200.0
#define WEAPON_DAMAGE_EXP            500.0

//SharkAttack
#define WEAPON_RADIUS_EXP2            110.0
#define WEAPON_DAMAGE_EXP2            400.0

#define ZP_ITEM_NAME                "M3 Big Shark" 
#define ZP_ITEM_COST                5000

// Models
#define MODEL_WORLD                "models/PaXaN/Weapons/w_m3dragonm.mdl"
#define MODEL_VIEW                "models/PaXaN/Weapons/v_m3dragonm.mdl"
#define MODEL_PLAYER                "models/PaXaN/Weapons/p_m3dragonm.mdl"

#define SHARKMODEL                "models/PaXaN/Weapons/m3dragonm_effect.mdl"
#define MISSILEMODEL                "sprites/PaXaN/ef_m3water.spr"

// Sounds
#define SOUND_FIRE                "weapons/m3dragonm-1_1.wav"
#define SOUND_FIRE2                "weapons/m3dragonm-2.wav"
#define SOUND_FIRE3                "weapons/m3dragonm-2.wav"
#define SOUND_EXPLODE                "weapons/m3dragonm_shark_fx.wav"
#define SOUND_DRAGONFX                "weapons/m3dragon_dragon_fx.wav"
#define SOUND_FLAME_LOOP            "weapons/m3dragonm_gas_loop.wav"

// Sprites
#define WEAPON_HUD_TXT                "sprites/weapon_m3dragonm_paxan.txt"
#define WEAPON_HUD_SPR                "sprites/PaXaN/640hud188.spr"
#define WEAPON_HUD_SPR2                "sprites/PaXaN/640hud7.spr"
#define WEAPON_SPR_FLAME            "sprites/PaXaN/m3dragonm_smoke.spr"
#define WEAPON_SPR_FLAME2            "sprites/PaXaN/m3dragonm_smoke2.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,
    
ANIM_SHOOT3
};

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

#define Sprite_SetScale(%0,%1)             set_pev(%0, pev_scale, %1)
#define Sprite_SetFramerate(%0,%1)         set_pev(%0, pev_framerate, %1)

#define POINTCONTENTS(%0)             engfunc(EngFunc_PointContents, %0)

#define GET_STATE(%0)                get_pdata_int(%0, m_fWeaponState, extra_offset_weapon)
#define SET_STATE(%0,%1)            set_pdata_int(%0, m_fWeaponState, %1, extra_offset_weapon)

#define GET_SHOOTS(%0)                get_pdata_int(%0, m_fInCheckShoots, extra_offset_weapon)
#define SET_SHOOTS(%0,%1)            set_pdata_int(%0, m_fInCheckShoots, %1, extra_offset_weapon)

#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 SET_SIZE(%0,%1,%2)            engfunc(EngFunc_SetSize, %0, %1, %2)

#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
#define m_fInCheckShoots            39

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

// CBasePlayerWeapon
#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)

//EnitityClassName
#define MUZZLE_CLASSNAME_LEFT            "SmokeSharkleft"
#define MUZZLE_CLASSNAME_RIGHT            "SmokeSharkright"
#define DRAGON_CLASSNAME            "SharClass"
#define MISSILE_CLASSNAME            "SharkMissileClass"
#define MUZZLE_CLASSNAME2            "MuzzleBigShark"
#define WATER_CLASSNAME                "WaterClassShark"

#define WATERMODEL                "models/PaXaN/Weapons/ef_m3dragonm_sign.mdl"
#define WEAPON_SPR_MUZZLE            "sprites/PaXaN/muzzleflash106.spr"

//**********************************************
//* Let's code our weapon.                     *
//**********************************************
new iBlood[4];

Weapon_OnPrecache()
{
    
PRECACHE_SOUND_FROM_MODEL(MODEL_VIEW);
    
PRECACHE_MODEL(MODEL_WORLD);
    
PRECACHE_MODEL(MODEL_VIEW);
    
PRECACHE_MODEL(MODEL_PLAYER);
    
PRECACHE_MODEL(WATERMODEL);
    
    
PRECACHE_MODEL(SHARKMODEL);
    
PRECACHE_MODEL(MISSILEMODEL);
    
    
PRECACHE_SOUND(SOUND_FIRE);
    
PRECACHE_SOUND(SOUND_FIRE2);
    
PRECACHE_SOUND(SOUND_FIRE3);
    
PRECACHE_SOUND(SOUND_EXPLODE);
    
PRECACHE_SOUND(SOUND_DRAGONFX);
    
PRECACHE_SOUND(SOUND_FLAME_LOOP);

    
#if defined WPNLIST
    
PRECACHE_GENERIC(WEAPON_HUD_TXT);
    
PRECACHE_GENERIC(WEAPON_HUD_SPR);
    
PRECACHE_GENERIC(WEAPON_HUD_SPR2);
    
#endif
    
    
PRECACHE_MODEL(WEAPON_SPR_FLAME);
    
PRECACHE_MODEL(WEAPON_SPR_FLAME2);
    
PRECACHE_MODEL(WEAPON_SPR_MUZZLE);

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

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

Weapon_OnDeploy(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iReloadMode, const iState)
{
    
#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_PLAYERiState ANIM_DRAW_B:ANIM_DRAWANIM_EXTENSION);
    
    switch (
iState)
    {
        case 
1:
        {
            
MuzzleFlash(iPlayerWEAPON_SPR_FLAMEMUZZLE_CLASSNAME_LEFT0.081.020.00.0);
            
MuzzleFlash(iPlayerWEAPON_SPR_FLAMEMUZZLE_CLASSNAME_RIGHT0.081.0329.00.0);
        }
    }
}

Weapon_OnHolster(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iReloadMode, const iState)
{
    
#pragma unused iPlayer, iClip, iAmmoPrimary, iReloadMode, iState
    
    
set_pdata_int(iItemm_fInSpecialReloadfalseextra_offset_weapon);
    
    
set_pev(iItempev_fuser10.0);
}

Weapon_OnReload(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iReloadMode, const iState)
{
    
#pragma unused iState
    
    
if(iAmmoPrimary <= 0)
    {
        return 
HAM_IGNORED;
    }
    
    if (
iClip >=WEAPON_MAX_CLIP)
    {
        return 
HAM_IGNORED;
    }

    switch(
iReloadMode)
    {
        case 
0:
        {
            
Weapon_SendAnim(iPlayerANIM_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(iPlayerANIM_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(iPlayerANIM_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 iReloadMode, const iState)
{
    
#pragma unused iClip, iAmmoPrimary
    
    
ExecuteHamB(Ham_Weapon_ResetEmptySoundiItem);
    
    static 
Float:iFuser;pev(iItempev_fuser1iFuser);
        
    if (
GET_STATE(iItem) && iFuser <= get_gametime())
    {
        
engfunc(EngFunc_EmitSoundiPlayerCHAN_ITEMSOUND_FLAME_LOOP1.0ATTN_NORM0PITCH_HIGH);
            
        
set_pev(iItempev_fuser1get_gametime() + 0.6);
    }

    if(
iClip == WEAPON_MAX_CLIP)
    {
        if(
iReloadMode == 2)
        {
            
Weapon_ReloadEnd(iItemiPlayeriState);
            return;
        }
    }
    
    if(
iAmmoPrimary <= 0)
    {
        if(
iReloadMode == 2)
        {
            
Weapon_ReloadEnd(iItemiPlayeriState);
            return;
        }
    }

    switch(
iReloadMode)
    {
        case 
1:
        {        
            if (
get_pdata_int(iItemm_flTimeWeaponIdleextra_offset_weapon) > 0.0)
            {
                return;
            }
            
            
Weapon_SendAnim(iPlayerANIM_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(iPlayeriState ANIM_IDLE_B:ANIM_IDLE);
    }
}    

Weapon_OnPrimaryAttack(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iReloadMode, const iState)
{
    
#pragma unused iAmmoPrimary
    
    
static iFlagsiAnimDesired
    static 
szAnimation[64];iFlags pev(iPlayerpev_flags);

    if(
iReloadMode && iClip 0)
    {
        
Weapon_ReloadEnd(iItemiPlayeriState);
        return;
    }
    
    
CallOrigFireBullets3(iItemiPlayer)

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

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

    
Weapon_SendAnim(iPlayeriState  ANIM_SHOOT3:ANIM_SHOOT);
    
    switch (
iState)
    {
        case 
0:engfunc(EngFunc_EmitSoundiPlayerCHAN_WEAPONSOUND_FIRE0.9ATTN_NORM0PITCH_NORM);
        case 
1:engfunc(EngFunc_EmitSoundiPlayerCHAN_WEAPONSOUND_FIRE30.9ATTN_NORM0PITCH_NORM);
    }
    
    
set_pdata_float(iItemm_flNextPrimaryAttackWEAPON_TIME_NEXT_ATTACKextra_offset_weapon);
    
set_pdata_float(iItemm_flTimeWeaponIdleWEAPON_TIME_NEXT_ATTACK+1.0extra_offset_weapon);
        
    
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);
    
    
Weapon_MuzzleFlash(iPlayerWEAPON_SPR_MUZZLE0.0810.0Float: {255.0255.0255.0}, 255.0);  
    
    if (!
GET_STATE(iItem) && GET_SHOOTS(iItem) >= WEAPON_HIT_TO_ACTIVE)
    {
        
MuzzleFlash(iPlayerWEAPON_SPR_FLAMEMUZZLE_CLASSNAME_LEFT0.081.020.00.0);
        
MuzzleFlash(iPlayerWEAPON_SPR_FLAMEMUZZLE_CLASSNAME_RIGHT0.081.0329.00.0);
        
        
Weapon_SendAnim(iPlayerANIM_SHOOT2);
        
        
SET_STATE(iItem1);
        
SET_SHOOTS(iItem0);
    }
}

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

    
if (!GET_STATE(iItem))
    {
        return;
    }
    
    static 
iFlagsiAnimDesired
    static 
szAnimation[64];iFlags pev(iPlayerpev_flags);
    
    
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);
    
    
Weapon_SendAnim(iPlayerANIM_SHOOT_B);
    
    
set_pdata_float(iItemm_flTimeWeaponIdle1.5extra_offset_weapon);
    
set_pdata_float(iItemm_flNextPrimaryAttack0.5extra_offset_weapon);
    
set_pdata_float(iItemm_flNextSecondaryAttack0.5extra_offset_weapon);
    
    
Punchangle(iPlayer, .iVecx = -3.5, .iVecy 0.0, .iVecz 0.0);

    
SET_STATE(iItem0);
    
    new 
Float:vecEnd[3];GetWeaponPosition(iPlayer4096.00.00.0vecEnd);
    new 
Float:vecSrc[3];GetWeaponPosition(iPlayer10.00.00.0vecSrc);
    
    
Spawn2(iPlayervecSrcvecEnd);

    
Weapon_MuzzleFlash(iPlayerWEAPON_SPR_MUZZLE0.0810.0Float: {255.0255.0255.0}, 255.0);  
    
    
engfunc(EngFunc_EmitSoundiPlayerCHAN_WEAPONSOUND_FIRE20.9ATTN_NORM0PITCH_NORM);
}

Weapon_ReloadEnd(const iItem, const iPlayer, const iState)
{
    
Weapon_SendAnim(iPlayeriState 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);
}

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

#define MSGID_WEAPONLIST 78

new g_iItemID;

new 
g_iszMuzzleKey;

#define IsCustomMuzzle(%0) (pev(%0, pev_impulse) == g_iszMuzzleKey)

#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
    
    
g_iszMuzzleKey engfunc(EngFunc_AllocStringMUZZLE_CLASSNAME2);
}

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);
    
    
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_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_Item_PostFrame,        WEAPON_REFERANCE,     "HamHook_Item_PostFrame",    false);
    
    
RegisterHam(Ham_Think,             "info_target",        "HamHook_Think",         false);
    
RegisterHam(Ham_Touch,             "info_target",        "HamHook_Touch",         false);
    
    
RegisterHam(Ham_Think,             "env_sprite",        "MuzzleFlash_Think",         false);
    
register_clcmd("say /shark","NativeGiveWeapon")
    
    ;
}
    
//public zp_extra_item_selected(id, itemid)
//{
//    if (itemid == g_iItemID)
//    {
//        Weapon_Give(id);
//    }
//}

public plugin_natives()

    
register_native("GetBuffM3""NativeGiveWeapon"true
}

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

//**********************************************
//* 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;
}

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

    #define _call.%0(%1,%2) \
                                    
\
    
Weapon_On%0                            \
    (                                \
        %
1,                             \
        %
2,                            \
                                    \
        
get_pdata_int(%1m_iClipextra_offset_weapon),    \
        
GetAmmoInventory(%2PrimaryAmmoIndex(%1)),        \
        
get_pdata_int(%1m_fInSpecialReloadextra_offset_weapon), \
        
GET_STATE(%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_PostFrame(const iItem)
{
    static 
iPlayeriButton;

    if (!
CheckItem(iItemiPlayer))
    {
        return 
HAM_IGNORED;
    }
    
    if ((
iButton pev(iPlayerpev_button)) & IN_ATTACK2 && get_pdata_float(iItemm_flNextSecondaryAttackextra_offset_weapon) <= 0.0)
    {
        
_call.SecondaryAttack(iItemiPlayer);
        
set_pev(iPlayerpev_buttoniButton & ~IN_ATTACK2);
    }
        
    return 
HAM_IGNORED;
}

public 
HamHook_Think(const iEntity)
{
    if (!
pev_valid(iEntity))
    {
        return 
HAM_IGNORED;
    }
    
    static 
iClassname[32];pev(iEntitypev_classnameiClassnamesizeof(iClassname));
    
    static 
iAttacker;iAttacker=pev(iEntitypev_owner);
    
    static 
Float:OriginEnt[3];pev(iEntitypev_originOriginEnt);
    
    if (
equal(iClassnameMUZZLE_CLASSNAME_LEFT))
    {    
        static 
iItem;iItem get_pdata_cbase(iAttackerm_pActiveItemextra_offset_player);
        
        
        {
            
set_pev(iEntitypev_flagspev(iEntitypev_flags) | FL_KILLME);
            return 
HAM_SUPERCEDE;
        }
        
        static 
Float:flFrame;

        if (
flFrame >= 29.0)flFrame=0.0;
        
        
flFrame+=random_float(0.40.5);
        
        static 
Float:iAmt;pev(iEntitypev_renderamtiAmt);
        
        if (
iAmt 224.0)iAmt += 3.5;

        
set_pev(iEntitypev_renderamtiAmt);
    
        
set_pev(iEntitypev_frameflFrame);    
        
set_pev(iEntitypev_nextthinkget_gametime() + 0.015);
    }
    else if (
equal(iClassnameMUZZLE_CLASSNAME_RIGHT))
    {    
        static 
iItem;iItem get_pdata_cbase(iAttackerm_pActiveItemextra_offset_player);
        
        
        {
            
set_pev(iEntitypev_flagspev(iEntitypev_flags) | FL_KILLME);
            return 
HAM_SUPERCEDE;
        }
        
        static 
Float:flFrame;

        if (
flFrame >= 59.0)flFrame=30.0;
        
        
flFrame+=random_float(0.40.5);
        
        static 
Float:iAmt;pev(iEntitypev_renderamtiAmt);
        
        if (
iAmt 224.0)iAmt += 3.5;

        
set_pev(iEntitypev_renderamtiAmt);
    
        
set_pev(iEntitypev_frameflFrame);    
        
set_pev(iEntitypev_nextthinkget_gametime() + 0.01);
    }
    else if (
equal(iClassnameMISSILE_CLASSNAME))
    {
        static 
Float:iFuser;pev(iEntitypev_fuser3iFuser);

        if (
pev(iEntitypev_movetype) == MOVETYPE_TOSS)
        {
            
set_pev(iEntitypev_velocityFloat:{0.0,0.0, -1000.0});
        }
    
        if (
iFuser && iFuser <= get_gametime())
        {
            
set_pev(iEntitypev_flagspev(iEntitypev_flags) | FL_KILLME);
            
            
set_pev(iEntitypev_fuser30.0);
    
            
Spawn(pev(iEntitypev_owner), OriginEnt);
            
            return 
HAM_SUPERCEDE;
        }
        
        new 
Float:iAngle[3];
        
        
iAngle[0] = 0.0;
        
iAngle[1] = 0.0;
        
iAngle[2] = random_float(0.0, -360.0);
        
        
set_pev(iEntitypev_anglesiAngle);
        
        
set_pev(iEntitypev_nextthinkget_gametime() + 0.01);
    }
    else if ( 
equal(iClassnameDRAGON_CLASSNAME))
    {
        static 
Float:iFuser;pev(iEntitypev_fuser2iFuser);

        if (
iFuser && iFuser <= get_gametime())
        {
            
set_pev(iEntitypev_flagspev(iEntitypev_flags) | FL_KILLME);
            
set_pev(iEntitypev_fuser20.0);
            
            return 
HAM_IGNORED;
        }
        
        new 
pNull FM_NULLENT;
        
        while((
pNull fm_find_ent_in_sphere(pNullOriginEntWEAPON_RADIUS_EXP2)) != 0)
        {    
            new 
Float:vOrigin[3];pev(pNullpev_originvOrigin);
            
            if (
IsValidPev(pNull) && pev(pNullpev_takedamage) != DAMAGE_NO && pev(pNullpev_solid) != SOLID_NOT)
            {
                
                {
                    new 
Float:vOrigin[3], Float:distFloat:damage;pev(pNullpev_originvOrigin);
                                    
                    
Create_Blood(vOriginiBlood[0], iBlood[1], 7610);
                    
                    static 
Float:iVelo[3];pev(pNullpev_velocityiVelo);iVelo[0] = 0.0;iVelo[1] = 0.0;iVelo[2] += 250.0;
                    
set_pev(pNullpev_velocityiVelo);
                    
                    
dist get_distance_f(OriginEntvOrigin);damage WEAPON_DAMAGE_EXP2 - (WEAPON_DAMAGE_EXP2/WEAPON_DAMAGE_EXP2) * dist;
                    if (
damage 0.0)
                    {
                        
ExecuteHamB(Ham_TakeDamagepNulliEntityiAttackerdamageDMG_BULLET);
                    }
                    
                    
set_pdata_float(pNullm_flVelocityModifier1.0,  extra_offset_player);
                }
            }
        }
        
        
set_pev(iEntitypev_nextthinkget_gametime() + 0.2);
    }
    else if (
equal(iClassnameWATER_CLASSNAME))
    {
        static 
Float:iFuser;pev(iEntitypev_fuser4iFuser);
        
        if (
iFuser && iFuser <= get_gametime())
        {
            
set_pev(iEntitypev_flagspev(iEntitypev_flags) | FL_KILLME);
            
            
set_pev(iEntitypev_fuser40.0);
    
            return 
HAM_SUPERCEDE;
        }
        
        
set_pev(iEntitypev_nextthinkget_gametime() + 0.01);
    }

    return 
HAM_IGNORED;
}    

public 
HamHook_Touch(const iEntity, const iOther)
{
    if(!
pev_valid(iEntity))
    {
        return 
HAM_IGNORED;
    }
    
    static 
Classname[32];pev(iEntitypev_classnameClassnamesizeof(Classname));
    
    static 
Float:OriginEnt[3];pev(iEntitypev_originOriginEnt);
    static 
Float:vOrigin[3];pev(iOtherpev_originvOrigin);
    
    static 
iAttacker;iAttacker pev(iEntitypev_owner);

    if (
equal(ClassnameMISSILE_CLASSNAME))
    {    
        if (
pev(iEntitypev_iuser1))
        {
            return 
HAM_IGNORED;
        }
        
        
set_pev(iEntitypev_movetypeMOVETYPE_TOSS);
        
set_pev(iEntitypev_renderamt0.0);
        
        
engfunc(EngFunc_DropToFlooriEntity);
        
        
set_pev(iEntitypev_iuser11);
        
set_pev(iEntitypev_fuser3get_gametime() + 1.0);

        
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
        
write_byte(TE_EXPLOSION);
        
engfunc(EngFunc_WriteCoordOriginEnt[0]);
        
engfunc(EngFunc_WriteCoordOriginEnt[1]);
        
engfunc(EngFunc_WriteCoordOriginEnt[2] + 50.0);
        
write_short(iBlood[2]);
        
write_byte(20);
        
write_byte(15);
        
write_byte(TE_EXPLFLAG_NOSOUND |TE_EXPLFLAG_NOPARTICLES|TE_EXPLFLAG_NODLIGHTS);
        
message_end();
        
        new 
pNull FM_NULLENT;
    
        while((
pNull fm_find_ent_in_sphere(pNullOriginEntWEAPON_RADIUS_EXP)) != 0)
        {    
            new 
Float:vOrigin[3];pev(pNullpev_originvOrigin);
            
            if (
IsValidPev(pNull) && pev(pNullpev_takedamage) != DAMAGE_NO && pev(pNullpev_solid) != SOLID_NOT)
            {
                
                {
                    new 
Float:vOrigin[3], Float:distFloat:damage;pev(pNullpev_originvOrigin);
                                    
                    
Create_Blood(vOriginiBlood[0], iBlood[1], 7613);
                    
                    
set_pev(pNullpev_velocity, {0.00.0, -100.0});
                    
                    
dist get_distance_f(OriginEntvOrigin);damage WEAPON_DAMAGE_EXP - (WEAPON_DAMAGE_EXP/WEAPON_DAMAGE_EXP) * dist;
                    if (
damage 0.0)
                    {
                        
ExecuteHamB(Ham_TakeDamagepNulliEntityiAttackerdamageDMG_BULLET);
                    }
                }
            }
        }
        
        
engfunc(EngFunc_EmitSoundiEntityCHAN_ITEMSOUND_EXPLODE1.0ATTN_NORM0PITCH_HIGH);
        
        return 
HAM_IGNORED;
    }
    
    return 
HAM_IGNORED;
}

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

CallOrigFireBullets3(const iItem, const iPlayer)
{
    static 
FakeMetaTraceLine;FakeMetaTraceLine=register_forward(FM_TraceLine,"FakeMeta_TraceLine",true)
    
state FireBulletsEnabled;
    static 
FloatvecPuncheAngle[3];pev(iPlayerpev_punchanglevecPuncheAngle);
    
    
ExecuteHam(Ham_Weapon_PrimaryAttackiItem);
    
set_pev(iPlayerpev_punchanglevecPuncheAngle);
    
    
state FireBulletsDisabled;
    
unregister_forward(FM_TraceLine,FakeMetaTraceLine,true)
}

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

public 
FakeMeta_TraceLine(Float:vecStart[3], Float:vecEnd[3], iFlagiIgnoreiTrase)
{
    if (
iFlag IGNORE_MONSTERS)
    {
        return 
FMRES_IGNORED;
    }
    
    static 
Float:vecfEnd[3],iHit,iDecal,glassdecal;
    
    if(!
glassdecal)
    {    
        
glassdecal=engfuncEngFunc_DecalIndex"{bproof1" )
    }
    
    
iHit=get_tr2(iTrase,TR_pHit)
    
    if(
iHit>&& 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(iTraseTR_vecEndPosvecfEnd)
    
    
engfunc(EngFunc_MessageBeginMSG_PASSVC_TEMPENTITYvecfEnd0)
    
write_byte(TE_GUNSHOTDECAL)
    
WRITE_COORD(vecfEnd[0])
    
WRITE_COORD(vecfEnd[1])
    
WRITE_COORD(vecfEnd[2])
    
write_short(iHit iHit 0)
    
write_byte(iDecal)
    
message_end()

    return 
FMRES_IGNORED
}

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

    if (!
BitCheck(g_bitIsConnectediAttacker) || !IsValidPev(iAttacker))
    {
        return;
    }
    
    if (!
IsValidPev(iItem))
    {
        return;
    }
    
    
    {
        
SET_SHOOTS(iItemGET_SHOOTS(iItem)+1);
    }
    
    
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 */ }

Weapon_Create(const FloatvecOrigin[3] = {0.00.00.0}, const FloatvecAngles[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_pev(iWeaponpev_impulseWEAPON_KEY);
    
set_pev(iWeaponpev_anglesvecAngles);
    
    
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 Spawn2(const iPlayer, const Float:iVec[3], const Float:vecEnd[3])
{
    static 
iszAllocStringCached;
    static 
pEntity;

    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(pEntityMISSILEMODEL);
        
SET_ORIGIN(pEntityiVec);

        
set_pev(pEntitypev_classnameMISSILE_CLASSNAME);
        
set_pev(pEntitypev_solidSOLID_TRIGGER);
        
set_pev(pEntitypev_gravity0.01);
        
        
set_pev(pEntitypev_scale0.1);

        
set_pev(pEntitypev_minsFloat:{-1.0, -1.0, -1.0});
        
set_pev(pEntitypev_maxsFloat:{1.01.01.0});
        
        
Sprite_SetTransparency(pEntitykRenderTransAddFloat:{255.0,255.0,255.0}, 255.0);
        
        
set_pev(pEntitypev_nextthinkget_gametime() + 0.01);
        
        new 
Float:Velocity[3];Get_Speed_Vector(iVecvecEnd2000.0Velocity);
        
set_pev(pEntitypev_velocityVelocity);
    }
}

stock Spawn(const iPlayer, const Float:iVec[3])
{
    static 
iszAllocStringCached;
    static 
pEntity;

    if (
iszAllocStringCached || (iszAllocStringCached engfunc(EngFunc_AllocString"info_target")))
    {
        
pEntity engfunc(EngFunc_CreateNamedEntityiszAllocStringCached);
    }
        
    if (
pev_valid(pEntity))
    {
        
set_pev(pEntitypev_movetypeMOVETYPE_TOSS);
        
set_pev(pEntitypev_owneriPlayer);
            
        
SET_MODEL(pEntitySHARKMODEL);
        
SET_ORIGIN(pEntityiVec);

        
set_pev(pEntitypev_classnameDRAGON_CLASSNAME);
        
set_pev(pEntitypev_solidSOLID_NOT);

        
//SET_SIZE(pEntity, Float:{-100.0, -100.0, -100.0}, Float:{100.0, 100.0, 300.0});
        
        
set_pev(pEntitypev_framerate0.7);
        
set_pev(pEntitypev_sequence0);
        
set_pev(pEntitypev_animtimeget_gametime());

        
set_pev(pEntitypev_fuser2get_gametime() + 3.0);

        
set_pev(pEntitypev_nextthinkget_gametime() + 0.1);
    }
    
    static 
iszAllocStringCached2;
    static 
pEntity2;

    if (
iszAllocStringCached2 || (iszAllocStringCached2 engfunc(EngFunc_AllocString"info_target")))
    {
        
pEntity2 engfunc(EngFunc_CreateNamedEntityiszAllocStringCached2);
    }
        
    if (
pev_valid(pEntity2))
    {
        
set_pev(pEntity2pev_movetypeMOVETYPE_TOSS);
        
set_pev(pEntity2pev_owneriPlayer);
            
        
SET_MODEL(pEntity2WATERMODEL);
        
SET_ORIGIN(pEntity2iVec);

        
set_pev(pEntity2pev_classnameWATER_CLASSNAME);
        
set_pev(pEntity2pev_solidSOLID_NOT);

        
//SET_SIZE(pEntity, Float:{-100.0, -100.0, -100.0}, Float:{100.0, 100.0, 300.0});
        
        
set_pev(pEntity2pev_framerate1.0);
        
set_pev(pEntity2pev_sequence0);
        
set_pev(pEntity2pev_animtimeget_gametime());

        
set_pev(pEntity2pev_fuser4get_gametime() + 3.5);

        
set_pev(pEntity2pev_nextthinkget_gametime() + 0.1);
    }
    
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
    
write_byte(TE_EXPLOSION);
    
engfunc(EngFunc_WriteCoordiVec[0]);
    
engfunc(EngFunc_WriteCoordiVec[1] - 60.0);
    
engfunc(EngFunc_WriteCoordiVec[2] + 50.0);
    
write_short(iBlood[3]);
    
write_byte(10);
    
write_byte(16);
    
write_byte(TE_EXPLFLAG_NOSOUND |TE_EXPLFLAG_NOPARTICLES|TE_EXPLFLAG_NODLIGHTS);
    
message_end();
    
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
    
write_byte(TE_EXPLOSION);
    
engfunc(EngFunc_WriteCoordiVec[0]);
    
engfunc(EngFunc_WriteCoordiVec[1] + 60.0);
    
engfunc(EngFunc_WriteCoordiVec[2] + 45.0);
    
write_short(iBlood[3]);
    
write_byte(10);
    
write_byte(17);
    
write_byte(TE_EXPLFLAG_NOSOUND |TE_EXPLFLAG_NOPARTICLES|TE_EXPLFLAG_NODLIGHTS);
    
message_end();
    
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
    
write_byte(TE_EXPLOSION);
    
engfunc(EngFunc_WriteCoordiVec[0]);
    
engfunc(EngFunc_WriteCoordiVec[1] - 20.0);
    
engfunc(EngFunc_WriteCoordiVec[2] + 55.0);
    
write_short(iBlood[3]);
    
write_byte(10);
    
write_byte(18);
    
write_byte(TE_EXPLFLAG_NOSOUND |TE_EXPLFLAG_NOPARTICLES|TE_EXPLFLAG_NODLIGHTS);
    
message_end();
    
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
    
write_byte(TE_EXPLOSION);
    
engfunc(EngFunc_WriteCoordiVec[0]);
    
engfunc(EngFunc_WriteCoordiVec[1] + 20.0);
    
engfunc(EngFunc_WriteCoordiVec[2] + 50.0);
    
write_short(iBlood[3]);
    
write_byte(10);
    
write_byte(15);
    
write_byte(TE_EXPLFLAG_NOSOUND |TE_EXPLFLAG_NOPARTICLES|TE_EXPLFLAG_NODLIGHTS);
    
message_end();
}

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 iClass[], const FloatflScale, const FloatflFramerate, const iBody, const Float:iFrame, const Float:iAmt)
{
    if (
global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
    {
        return 
FM_NULLENT;
    }
    
    new 
iSpriteiszAllocStringCached;
    
    if (
iszAllocStringCached || (iszAllocStringCached engfunc(EngFunc_AllocString"info_target")))
    {
        
iSprite engfunc(EngFunc_CreateNamedEntityiszAllocStringCached);
    }
    
    if (!
IsValidPev(iSprite))
    {
        return 
FM_NULLENT;
    }
    
    new 
Float:Origin[3], Float:iAngles[3];engfunc(EngFunc_GetAttachmentiPlayer0OriginiAngles);

    
SET_MODEL(iSpriteszMuzzleSprite);
    
SET_ORIGIN(iSpriteOrigin);
    
    
set_pev(iSpritepev_classnameiClass);
    
set_pev(iSpritepev_owneriPlayer);
    
set_pev(iSpritepev_movetypeMOVETYPE_FOLLOW);
    
set_pev(iSpritepev_skiniPlayer);
    
set_pev(iSpritepev_bodyiBody);
    
set_pev(iSpritepev_frameiFrame);
    
set_pev(iSpritepev_light_level200.0);

    
Sprite_SetTransparency(iSpritekRenderTransAddFloat:{255.0,255.0,255.0}, iAmt);
    
    
Sprite_SetFramerate(iSpriteflFramerate);
    
Sprite_SetScale(iSpriteflScale);
    
set_pev(iSpritepev_anglesiAngles);

    
set_pev(iSpritepev_nextthinkget_gametime() + 0.01);
    
    return 
iSprite;
}

stock Weapon_MuzzleFlash(const iPlayer, const szMuzzleSprite[], const FloatflScale, const FloatflFramerate, const FloatvecColor[3], const FloatflBrightness)
{
    if (
global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
    {
        return 
FM_NULLENT;
    }
    
    static 
iSpriteiszAllocStringCached;
    if (
iszAllocStringCached || (iszAllocStringCached engfunc(EngFunc_AllocString"env_sprite")))
    {
        
iSprite engfunc(EngFunc_CreateNamedEntityiszAllocStringCached);
    }
    
    if (!
IsValidPev(iSprite))
    {
        return 
FM_NULLENT;
    }
    
    
set_pev(iSpritepev_modelszMuzzleSprite);
    
set_pev(iSpritepev_spawnflagsSF_SPRITE_ONCE);
    
    
set_pev(iSpritepev_classnameMUZZLE_CLASSNAME2);
    
set_pev(iSpritepev_impulseg_iszMuzzleKey);
    
set_pev(iSpritepev_owneriPlayer);
    
    
set_pev(iSpritepev_aimentiPlayer);
    
set_pev(iSpritepev_body1);
    
    
Sprite_SetTransparency(iSpritekRenderTransAddvecColorflBrightness);
    
Sprite_SetFramerate(iSpriteflFramerate);
    
Sprite_SetScale(iSpriteflScale);
    
    
MDLL_Spawn(iSprite);

    return 
iSprite;
}

public 
MuzzleFlash_Think(const iSprite)
{
    static 
FloatflFrame;
    
    if (!
IsValidPev(iSprite) || !IsCustomMuzzle(iSprite))
    {
        return 
HAM_IGNORED;
    }
    
    if (
pev(iSpritepev_frameflFrame) && ++flFrame 1.0 get_pdata_float(iSprite35extra_offset_weapon)) //m_MaxFrame
    
{
        
set_pev(iSpritepev_frameflFrame);
        
set_pev(iSpritepev_nextthinkget_gametime() + 0.035);
        
        return 
HAM_SUPERCEDE;
    }

    
set_pev(iSpritepev_flagsFL_KILLME);
    return 
HAM_SUPERCEDE;
}

stock Get_Speed_Vector(const Float:origin1[3], const Float:origin2[3],Float:speedFloat: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
}

stock Weapon_DefaultDeploy(const iPlayer, const szViewModel[], const szWeaponModel[], const iAnim, const szAnimExt[])
{
    
set_pev(iPlayerpev_viewmodel2szViewModel);
    
set_pev(iPlayerpev_weaponmodel2szWeaponModel);
    
set_pev(iPlayerpev_fov,90.0);
    
    
set_pdata_int(iPlayerm_iFOV90extra_offset_player);
    
set_pdata_int(iPlayerm_fResumeZoom0extra_offset_player);
    
set_pdata_int(iPlayerm_iLastZoom90extra_offset_player);
    
    
set_pdata_string(iPlayerm_szAnimExtention 4szAnimExt, -1extra_offset_player 4);
    
    
Weapon_SendAnim(iPlayeriAnim);
}

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 GetWeaponPosition(const iPlayerFloatforwFloatrightFloatupFloatvStart[])
{
    new 
FloatvOrigin[3], FloatvAngle[3], FloatvForward[3], FloatvRight[3], FloatvUp[3];
    
    
pev(iPlayerpev_originvOrigin);
    
pev(iPlayerpev_view_ofsvUp);
    
xs_vec_add(vOriginvUpvOrigin);
    
pev(iPlayerpev_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;
}

stock Create_Blood(const Float:vStart[3], const iModel, const iModel2, const iColor, const iScale)
{
    
MESSAGE_BEGIN(MSG_BROADCASTSVC_TEMPENTITYvStart0);
    
WRITE_BYTE(TE_BLOODSPRITE);
    
WRITE_COORD(vStart[0])
    
WRITE_COORD(vStart[1])
    
WRITE_COORD(vStart[2])
    
WRITE_SHORT(iModel);
    
WRITE_SHORT(iModel2);
    
WRITE_BYTE(iColor);
    
WRITE_BYTE(iScale);
    
MESSAGE_END();
}

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

public 
client_disconnect(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.                        *
//**********************************************

#if defined WPNLIST
public Cmd_WeaponSelect(const iPlayer)
{
    
engclient_cmd(iPlayerWEAPON_REFERANCE);
    return 
PLUGIN_HANDLED;
}
#endif

public HamHook_Item_AddToPlayer(const iItem, const iPlayer)
{
    switch(
pev(iItempev_impulse))
    {
        case 
0MsgHook_WeaponList(MSGID_WEAPONLISTiItemiPlayer);
        case 
WEAPON_KEY
        {
            
#if defined WPNLIST
            
MsgHook_WeaponList(MSGID_WEAPONLISTiItemiPlayer);
            
#endif
            
SetAmmoInventory(iPlayerPrimaryAmmoIndex(iItem), pev(iItempev_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(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) ?  WEAPON_NAME WEAPON_REFERANCE);
        
        for (new 
isizeof arrWeaponListDataai++)
        {
            
WRITE_BYTE(arrWeaponListData[i]);
        }
        
        
MESSAGE_END();
    }
}

//**********************************************
//* 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;
}

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

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

Responder
#2
Prueba modificando esto
Código PHP:
#define WEAPON_MAX_CLIP                8
#define WEAPON_DEFAULT_AMMO            32
#define WEAPON_HIT_TO_ACTIVE            32 //32 hit on player for active B mode (Shark)

#define WEAPON_MULTIPLIER_DAMAGE            1.65
#define WEAPON_DAMAGE_EXP            500.0
#define WEAPON_DAMAGE_EXP2            400.0 

https://amxmodx-es.com/Thread-Tienda-por-Natives-1-0
Responder
#3
(03/04/2021, 11:08 PM)[N]drs escribió: Prueba modificando esto
Código PHP:
#define WEAPON_MAX_CLIP                8
#define WEAPON_DEFAULT_AMMO            32
#define WEAPON_HIT_TO_ACTIVE            32 //32 hit on player for active B mode (Shark)

#define WEAPON_MULTIPLIER_DAMAGE            1.65
#define WEAPON_DAMAGE_EXP            500.0
#define WEAPON_DAMAGE_EXP2            400.0 

https://amxmodx-es.com/Thread-Tienda-por-Natives-1-0

claro.. era cuestión de leer... Gracias viejo !
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)