PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#define STEP 10.0
#define VERTICAL_SPEED 20.0
#define HORISONTAL_SPEED 60.0
enum (+= 1) {
STATUS_NONE = 0,
STATUS_EFFECT,
STATUS_KILL
}
new g_CvarTimeout;
public plugin_init() {
register_plugin("Remove Drop Weapon", "0.3", "GordonFreeman & F@nt0M");
register_forward(FM_SetModel, "FM_SetModel_Pre", 0)
register_forward(FM_SetModel, "CWeaponBox_ItemModel")
RegisterHam(Ham_Think, "item_thighpack", "fw_WeaponBoxThink")
RegisterHam(Ham_Think,"weapon_shield","fw_WeaponBoxThink")
RegisterHam(Ham_Think,"weaponbox","fw_WeaponBoxThink")
g_CvarTimeout = register_cvar("weapon_time", "30.0")
}
public FM_SetModel_Pre(const iEntity)
{
#define m_rgpPlayerItems2 39 // CBasePlayerItem *
new szClassName[32]; pev(iEntity, pev_classname, szClassName, charsmax(szClassName));
if(!equal(szClassName, "weaponbox")) return FMRES_IGNORED;
new pWeapon = get_pdata_cbase(iEntity, m_rgpPlayerItems2, 4);
if(!pev_valid(pWeapon))
{
set_pev(iEntity, pev_nextthink, get_gametime() + get_pcvar_float(g_CvarTimeout));
}
return FMRES_IGNORED;
}
public CWeaponBox_ItemModel(const iEntity) {
if(!pev_valid(iEntity))
return FMRES_IGNORED;
static szClassName[32]
pev(iEntity, pev_classname, szClassName, charsmax(szClassName))
if(equal(szClassName, "item_thighpack"))
{
set_pev(iEntity, pev_impulse, STATUS_NONE);
set_pev(iEntity, pev_nextthink, get_gametime() + get_pcvar_float(g_CvarTimeout));
}
else if(equal(szClassName, "weapon_shield"))
{
set_task( 0.1, "ChangeNextThinkTime", iEntity )
}
return FMRES_IGNORED;
}
public ChangeNextThinkTime( const iEntity ) {
if( pev_valid(iEntity) ) {
static szClassName[32]
pev(iEntity, pev_classname, szClassName, charsmax(szClassName))
if(equal(szClassName, "weapon_shield")) {
set_pev(iEntity, pev_impulse, STATUS_NONE);
set_pev(iEntity, pev_nextthink, get_gametime() + get_pcvar_float(g_CvarTimeout));
}
}
}
public fw_WeaponBoxThink(iEntity) {
if (!pev_valid(iEntity)) {
return HAM_IGNORED;
}
switch(pev(iEntity, pev_impulse)) {
case STATUS_NONE:{
set_pev(iEntity, pev_movetype, MOVETYPE_FLY);
set_pev(iEntity, pev_solid, SOLID_NOT);
set_pev(iEntity, pev_rendermode, kRenderTransAlpha);
set_pev(iEntity, pev_renderamt, 100.0);
set_pev(iEntity, pev_velocity, Float:{0.0, 0.0, VERTICAL_SPEED});
set_pev(iEntity, pev_avelocity, Float:{0.0, HORISONTAL_SPEED, 0.0})
set_pev(iEntity, pev_impulse, STATUS_EFFECT);
}
case STATUS_EFFECT: {
if (pev(iEntity, pev_renderamt) > 0.0) {
set_pev(iEntity, pev_renderamt, floatmax(0.0, pev(iEntity, pev_renderamt) - STEP));
} else {
set_pev(iEntity, pev_flags, FL_KILLME);
set_pev(iEntity, pev_impulse, STATUS_KILL);
}
}
}
set_pev(iEntity,pev_nextthink,get_gametime() + 0.1)
return HAM_SUPERCEDE;
}