Thread: [Solved] [Help] Weapon Drop
View Single Post
Author Message
Thew_ConFiger
Member
Join Date: Apr 2019
Old 01-23-2021 , 06:58   [Help] Weapon Drop
Reply With Quote #1

Hello .How can i make this weapon undroppable (Players cant drop this weapon )
PHP Code:
#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>

#define PLUGIN "Tornado"
#define VERSION "1.0"
#define AUTHOR "GenDa"

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


#define m_rgpPlayerItems_CWeaponBox 34


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


#define m_flNextPrimaryAttack 46
#define m_flNextSecondaryAttack 47
#define m_flTimeWeaponIdle 48
#define m_iPrimaryAmmoType 49
#define m_iClip 51
#define m_fInReload 54
#define m_iWeaponState 74
#define m_flNextReload 75


#define m_flNextAttack 83


#define m_rpgPlayerItems 367
#define m_pActiveItem 373
#define m_rgAmmo 376
#define m_szAnimExtention 492

#define ANIM_IDLE 2
#define ANIM_ATTACK 5
#define ANIM_ATTACK_END 11
#define ANIM_ATTACK_EMPTY 8
#define ANIM_RELOAD 14
#define ANIM_DRAW 19

#define ANIM_IDLE_TIME 6.04
#define ANIM_RELOAD_TIME 3.54
#define ANIM_DRAW_TIME 1.37

#define WEAPON_KEY 40
#define WEAPON_TORN "weapon_aug"
#define WEAPON_NEW "weapon_tornado"
#define WEAPON_LASER "sprites/tornado-laser.spr"

#define WEAPON_ITEM_NAME "Tornado"
#define WEAPON_ITEM_COST 0

#define WEAPON_MODEL_V "models/v_tornado.mdl"
#define WEAPON_MODEL_P "models/p_tornado.mdl"
#define WEAPON_MODEL_W "models/w_tornado.mdl"
#define WEAPON_SOUND_S "weapons/tornado-3.wav"
#define WEAPON_SOUND_E "weapons/tornado-shoot_end.wav"
#define WEAPON_BODY 0

#define WEAPON_CLIP 70
#define WEAPON_AMMO 210
#define WEAPON_RATE 0.09
#define WEAPON_RECOIL 0.3
#define WEAPON_DAMAGE 1.1

new g_AllocString_Vg_AllocString_Pg_AllocString_E
new HamHook:g_fw_TraceAttack[4]
new 
g_iMsgID_Weaponlist
new iSpriteIndexTrail
public plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR);
    
RegisterHam(Ham_Item_DeployWEAPON_TORN"fw_Item_Deploy_Post"1);
    
RegisterHam(Ham_Item_HolsterWEAPON_TORN"fw_Item_Holster_Post"1);
    
RegisterHam(Ham_Item_PostFrameWEAPON_TORN"fw_Item_PostFrame");
    
RegisterHam(Ham_Item_AddToPlayerWEAPON_TORN"fw_Item_AddToPlayer_Post"1);
    
    
RegisterHam(Ham_Weapon_ReloadWEAPON_TORN"fw_Weapon_Reload");
    
RegisterHam(Ham_Weapon_WeaponIdleWEAPON_TORN"fw_Weapon_WeaponIdle");
    
RegisterHam(Ham_Weapon_PrimaryAttackWEAPON_TORN"fw_Weapon_PrimaryAttack");
    
    
g_fw_TraceAttack[0] = RegisterHam(Ham_TraceAttack"func_breakable""fw_TraceAttack");
    
g_fw_TraceAttack[1] = RegisterHam(Ham_TraceAttack"info_target",    "fw_TraceAttack");
    
g_fw_TraceAttack[2] = RegisterHam(Ham_TraceAttack"player",         "fw_TraceAttack");
    
g_fw_TraceAttack[3] = RegisterHam(Ham_TraceAttack"hostage_entity""fw_TraceAttack");
    
fm_ham_hook(false);
    
register_forward(FM_UpdateClientData"fw_UpdateClientData_Post"1);
    
register_forward(FM_PlaybackEvent"fw_PlaybackEvent");
    
register_forward(FM_SetModel"fw_SetModel");
    
g_iMsgID_Weaponlist get_user_msgid("WeaponList");
    
register_clcmd(WEAPON_NEW"HookSelect");
}
public 
plugin_precache() {
    
g_AllocString_V engfunc(EngFunc_AllocStringWEAPON_MODEL_V);
    
g_AllocString_P engfunc(EngFunc_AllocStringWEAPON_MODEL_P);
    
g_AllocString_E engfunc(EngFunc_AllocStringWEAPON_TORN);
    
iSpriteIndexTrail engfunc(EngFunc_PrecacheModelWEAPON_LASER);
    
engfunc(EngFunc_PrecacheModelWEAPON_MODEL_V);
    
engfunc(EngFunc_PrecacheModelWEAPON_MODEL_P);
    
engfunc(EngFunc_PrecacheModelWEAPON_MODEL_W);

    new const 
WPN_SOUND[][] = {
        
"weapons/tornado_clipin.wav",
        
"weapons/tornado_clipout.wav",
        
"weapons/tornado_draw.wav"
    
}
    for(new 
0sizeof WPN_SOUND;i++) engfunc(EngFunc_PrecacheSoundWPN_SOUND[i]);
    
engfunc(EngFunc_PrecacheSoundWEAPON_SOUND_S);
    
engfunc(EngFunc_PrecacheSoundWEAPON_SOUND_E);
    
precache_generic("sprites/weapon_tornado.txt")
precache_generic("sprites/640hud149.spr")
precache_generic("sprites/640hud17.spr")
// Get
    
register_clcmd("tornado""give_weapon")
}
public 
plugin_natives() {
    
register_native("tornado""give_weapon"1);
}
public 
HookSelect(iPlayer) {
    
engclient_cmd(iPlayerWEAPON_TORN);
    return 
PLUGIN_HANDLED;
}
public 
give_weapon(iPlayer) {
    static 
iEntiEnt engfunc(EngFunc_CreateNamedEntityg_AllocString_E);
    if(
iEnt <= 0) return 0;
    
set_pev(iEntpev_spawnflagsSF_NORESPAWN);
    
set_pev(iEntpev_impulseWEAPON_KEY);
    
ExecuteHam(Ham_SpawniEnt);
    
UTIL_DropWeapon(iPlayer1);
    if(!
ExecuteHamB(Ham_AddPlayerItemiPlayeriEnt)) {
        
engfunc(EngFunc_RemoveEntityiEnt);
        return 
0;
    }
    
ExecuteHamB(Ham_Item_AttachToPlayeriEntiPlayer);
    
set_pdata_int(iEntm_iClipWEAPON_CLIP4);
    new 
iAmmoType m_rgAmmo +get_pdata_int(iEntm_iPrimaryAmmoType4);
    if(
get_pdata_int(iPlayerm_rgAmmo5) < WEAPON_AMMO)
    
set_pdata_int(iPlayeriAmmoTypeWEAPON_AMMO5);
    
emit_sound(iPlayerCHAN_ITEM"items/gunpickup2.wav"VOL_NORMATTN_NORM0PITCH_NORM);
    return 
1;
}
public 
fw_Item_Deploy_Post(iItem) {
    if(!
CustomItem(iItem)) return;
    static 
iPlayeriPlayer get_pdata_cbase(iItemm_pPlayer4);
    
set_pev_string(iPlayerpev_viewmodel2g_AllocString_V);
    
set_pev_string(iPlayerpev_weaponmodel2g_AllocString_P);
    
set_pdata_string(iPlayerm_szAnimExtention 4"m249", -120);
    
UTIL_SendWeaponAnim(iPlayerANIM_DRAW);
    
set_pdata_float(iPlayerm_flNextAttackANIM_DRAW_TIME5);
    
set_pdata_float(iItemm_flTimeWeaponIdleANIM_DRAW_TIME4);
    
set_pdata_float(iItemm_flNextReload0.04);
    
set_pdata_int(iItemm_iWeaponState04);
}
public 
fw_Item_Holster_Post(iItem) {
    if(!
CustomItem(iItem)) return HAM_IGNORED;
    new 
iPlayeriPlayer get_pdata_cbase(iItemm_pPlayer4);
    
emit_sound(iPlayerCHAN_WEAPON"common/null.wav"1.0ATTN_NORM0PITCH_NORM);
    return 
HAM_IGNORED;
}
public 
fw_Item_PostFrame(iItem) {
    if(!
CustomItem(iItem)) return HAM_IGNORED;
    static 
iPlayeriPlayer get_pdata_cbase(iItemm_pPlayer4);
    if(
get_pdata_int(iItemm_fInReload4) == 1) {
        static 
iClipiClip get_pdata_int(iItemm_iClip4);
        static 
iAmmoTypeiAmmoType m_rgAmmo get_pdata_int(iItemm_iPrimaryAmmoType4);
        static 
iAmmoiAmmo get_pdata_int(iPlayeriAmmoType5);
        static 
jmin(WEAPON_CLIP iClipiAmmo);
        
set_pdata_int(iItemm_iClipiClip+j4);
        
set_pdata_int(iPlayeriAmmoTypeiAmmo-j5);
        
set_pdata_int(iItemm_fInReload04);
    }
    if(!(
pev(iPlayerpev_oldbuttons) & IN_ATTACK)) {
        if(
get_pdata_int(iItemm_iWeaponState4) == 1) {
            
set_pdata_int(iItemm_iWeaponState04);
            
emit_sound(iPlayerCHAN_WEAPONWEAPON_SOUND_EVOL_NORMATTN_NORM0PITCH_NORM);
            
UTIL_SendWeaponAnim(iPlayerANIM_ATTACK_END);
            
set_pdata_float(iItemm_flTimeWeaponIdle0.74);
            
set_pdata_float(iItemm_flNextReload0.04);
            
set_pdata_float(iPlayerm_flNextAttack0.75);
        }
    }
    return 
HAM_IGNORED;
}
public 
fw_Item_AddToPlayer_Post(iItemiPlayer) {
    switch(
pev(iItempev_impulse)) {
        case 
WEAPON_KEYs_weaponlist(iPlayertrue);
        case 
0s_weaponlist(iPlayerfalse);
    }
}
public 
fw_Weapon_Reload(iItem) {
    if(!
CustomItem(iItem)) return HAM_IGNORED;
    static 
iClipiClip get_pdata_int(iItemm_iClip4);
    if(
iClip >= WEAPON_CLIP) return HAM_SUPERCEDE;
    static 
iPlayeriPlayer get_pdata_cbase(iItemm_pPlayer4);
    static 
iAmmoTypeiAmmoType m_rgAmmo get_pdata_int(iItemm_iPrimaryAmmoType4);
    if(
get_pdata_int(iPlayeriAmmoType5) <= 0) return HAM_SUPERCEDE

    set_pdata_int
(iItemm_iClip04);
    
ExecuteHam(Ham_Weapon_ReloadiItem);
    
set_pdata_int(iItemm_iClipiClip4);
    
set_pdata_float(iItemm_flNextPrimaryAttackANIM_RELOAD_TIME4);
    
set_pdata_float(iItemm_flNextSecondaryAttackANIM_RELOAD_TIME4);
    
set_pdata_float(iItemm_flTimeWeaponIdleANIM_RELOAD_TIME4);
    
set_pdata_float(iPlayerm_flNextAttackANIM_RELOAD_TIME5);

    
UTIL_SendWeaponAnim(iPlayerANIM_RELOAD);
    return 
HAM_SUPERCEDE;
}
public 
fw_Weapon_WeaponIdle(iItem) {
    if(!
CustomItem(iItem) || get_pdata_float(iItemm_flTimeWeaponIdle4) > 0.0) return HAM_IGNORED;
    
UTIL_SendWeaponAnim(get_pdata_cbase(iItemm_pPlayer4), ANIM_IDLE);
    
set_pdata_float(iItemm_flTimeWeaponIdleANIM_IDLE_TIME4);
    return 
HAM_SUPERCEDE;
}
public 
fw_Weapon_PrimaryAttack(iItem) {
    if(!
CustomItem(iItem)) return HAM_IGNORED;
    static 
iPlayeriPlayer get_pdata_cbase(iItemm_pPlayer4);
    if(
get_pdata_int(iItemm_iClip4) == 0) {
        
ExecuteHam(Ham_Weapon_PlayEmptySoundiItem);
        
set_pdata_float(iItemm_flNextPrimaryAttack0.24);
        if(
pev(iPlayerpev_weaponanim) != ANIM_ATTACK_EMPTY) {
            
UTIL_SendWeaponAnim(iPlayerANIM_ATTACK_EMPTY);
        }
        return 
HAM_SUPERCEDE;
    }
    static 
fw_TraceLinefw_TraceLine register_forward(FM_TraceLine"fw_TraceLine_Post"1);
    
fm_ham_hook(true);
    
state FireBulletsEnabled;
    
ExecuteHam(Ham_Weapon_PrimaryAttackiItem);
    
state FireBulletsDisabled;
    
unregister_forward(FM_TraceLinefw_TraceLine1);
    
fm_ham_hook(false);
    static 
Float:vecPunchangle[3];
    static 
Float:vecOrigin[3]; fm_get_aim_origin(iPlayervecOrigin);

    
pev(iPlayerpev_punchanglevecPunchangle);
    
vecPunchangle[0] *= WEAPON_RECOIL;
    
vecPunchangle[1] *= WEAPON_RECOIL;
    
vecPunchangle[2] *= WEAPON_RECOIL;
    
set_pev(iPlayerpev_punchanglevecPunchangle);
    if(
get_pdata_float(iItemm_flNextReload4) <= get_gametime()) {
        
emit_sound(iPlayerCHAN_WEAPONWEAPON_SOUND_SVOL_NORMATTN_NORM0PITCH_NORM);
        
set_pdata_float(iItemm_flNextReloadget_gametime() + 10.04);
    }
    if(
pev(iPlayerpev_weaponanim) != ANIM_ATTACK) {
        
UTIL_SendWeaponAnim(iPlayerANIM_ATTACK);
    }

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
    
write_byte(TE_BEAMENTPOINT);
    
write_short(iPlayer 0x1000);
    
engfunc(EngFunc_WriteCoordvecOrigin[0]);
    
engfunc(EngFunc_WriteCoordvecOrigin[1]);
    
engfunc(EngFunc_WriteCoordvecOrigin[2]);
    
write_short(iSpriteIndexTrail);
    
write_byte(0); // framestart
    
write_byte(1); // framerate
    
write_byte(2); // life
    
write_byte(10); // width
    
write_byte(3); // noise
    
write_byte(0); // red
    
write_byte(128); // green
    
write_byte(255); // blue
    
write_byte(200); // brightness
    
write_byte(10); // speed
    
message_end();

    
set_pdata_int(iItemm_iWeaponState14);
    
set_pdata_float(iItemm_flNextPrimaryAttackWEAPON_RATE4);
    
set_pdata_float(iItemm_flTimeWeaponIdle0.54);

    return 
HAM_SUPERCEDE;
}
public 
fw_PlaybackEvent() <FireBulletsEnabled> { return FMRES_SUPERCEDE; }
public 
fw_PlaybackEvent() <FireBulletsDisabled> { return FMRES_IGNORED; }
public 
fw_PlaybackEvent() <> { return FMRES_IGNORED; }
public 
fw_TraceAttack(iVictimiAttackerFloat:flDamage) {
    if(!
is_user_connected(iAttacker)) return;
    static 
iItemiItem get_pdata_cbase(iAttackerm_pActiveItem5);
    if(
iItem <= || !CustomItem(iItem)) return;
        
SetHamParamFloat(3flDamage WEAPON_DAMAGE);
}
public 
fw_UpdateClientData_Post(iPlayerSendWeaponsCD_Handle) {
    if(
get_cd(CD_HandleCD_DeadFlag) != DEAD_NO) return;
    static 
iItemiItem get_pdata_cbase(iPlayerm_pActiveItem5);
    if(
iItem <= || !CustomItem(iItem)) return;
    
set_cd(CD_HandleCD_flNextAttack999999.0);
}
public 
fw_SetModel(iEnt) {
    static 
iszClassname[32], iItem
    
pev(iEntpev_classnameszClassname31);
    if(!
equal(szClassname"weaponbox")) return FMRES_IGNORED;
    for(
06i++) {
        
iItem get_pdata_cbase(iEntm_rgpPlayerItems_CWeaponBox i4);
        if(
iItem && CustomItem(iItem)) {
            
engfunc(EngFunc_SetModeliEntWEAPON_MODEL_W);
            
set_pev(iEntpev_bodyWEAPON_BODY);
            return 
FMRES_SUPERCEDE;
        }
    }
    return 
FMRES_IGNORED;
}
public 
fw_TraceLine_Post(const Float:flOrigin1[3], const Float:flOrigin2[3], iFragiIgnoretr) {
    if(
iFrag IGNORE_MONSTERS) return FMRES_IGNORED;
    static 
pHitpHit get_tr2(trTR_pHit);
    if(
pHit 0) {
        if(
pev(pHitpev_solid) != SOLID_BSP) return FMRES_IGNORED;
    }
    return 
FMRES_IGNORED;
}
public 
fm_ham_hook(bool:on) {
    if(
on) {
        
EnableHamForward(g_fw_TraceAttack[0]);
        
EnableHamForward(g_fw_TraceAttack[1]);
        
EnableHamForward(g_fw_TraceAttack[2]);
        
EnableHamForward(g_fw_TraceAttack[3]);
    }
    else {
        
DisableHamForward(g_fw_TraceAttack[0]);
        
DisableHamForward(g_fw_TraceAttack[1]);
        
DisableHamForward(g_fw_TraceAttack[2]);
        
DisableHamForward(g_fw_TraceAttack[3]);
    }
}
stock UTIL_SendWeaponAnim(iPlayeriSequence) {
    
set_pev(iPlayerpev_weaponanimiSequence);
    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM_iPlayer);
    
write_byte(iSequence);
    
write_byte(0);
    
message_end();
}
stock UTIL_DropWeapon(iPlayeriSlot) {
    static 
iEntityiNextszWeaponName[32]; 
    
iEntity get_pdata_cbase(iPlayerm_rpgPlayerItems iSlot5);
    if(
iEntity 0) {       
                do{
                        
iNext get_pdata_cbase(iEntitym_pNext4)
                        if(
get_weaponname(get_pdata_int(iEntitym_iId4), szWeaponName31)) {  
                                
engclient_cmd(iPlayer"drop"szWeaponName);
            }
                } while(( 
iEntity iNext) > 0);
    }
}
//  4,  90, -1, -1, 0, 14,8,  0, // weapon_aug
stock s_weaponlist(iPlayerbool:on) {
    
message_begin(MSG_ONEg_iMsgID_Weaponlist_iPlayer);
    
write_string(on WEAPON_NEW WEAPON_TORN);
    
write_byte(4);
    
write_byte(on WEAPON_AMMO 90);
    
write_byte(-1);
    
write_byte(-1);
    
write_byte(0);
    
write_byte(14);
    
write_byte(8);
    
write_byte(0);
    
message_end();


Last edited by Thew_ConFiger; 01-23-2021 at 07:45.
Thew_ConFiger is offline