Версия: 1.0
Описание: Поднимает оружие при наведении прицела и нажатии кнопки E (аналог CS GO)
Так же выкидывает старое оружие если поднимаешь новое на E
- Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <reapi>
#define DISTANCE 80.0
#define COLOR 75, 0, 255
#define PDATA_VALID 2
#define is_entity(%0) (pev_valid(%0) == PDATA_VALID)
new Float:g_Hud[33], g_Entity[33]
public plugin_init()
{
register_plugin("Weapon USE Pickup", "1.0", "406")
register_forward(FM_AddToFullPack, "fm_AddToFullPackPost", 1)
register_forward(FM_ClientDisconnect, "fm_ClientDisconnectPre")
RegisterHookChain(RG_CBasePlayer_PreThink, "rg_CBasePlayerPreThink")
}
public fm_ClientDisconnectPre(player) g_Entity[player] = 0
public fm_AddToFullPackPost(es_handle, e, entity, host)
{
if(!is_user_alive(host) || host == entity || g_Entity[host] != entity) return FMRES_IGNORED
set_es(es_handle, ES_RenderMode, kRenderNormal)
set_es(es_handle, ES_RenderFx, kRenderFxGlowShell)
set_es(es_handle, ES_RenderAmt, 16)
set_es(es_handle, ES_RenderColor, {COLOR})
return FMRES_IGNORED
}
public rg_CBasePlayerPreThink(player)
{
if(!is_user_alive(player)) return HC_CONTINUE
new Float:vOrigin[3], Float:vAngle[3], entity = FM_NULLENT
ExecuteHam(Ham_Player_GetGunPosition, player, vOrigin)
pev(player, pev_v_angle, vAngle)
angle_vector(vAngle, ANGLEVECTOR_FORWARD, vAngle)
vAngle[0] = vAngle[0] * DISTANCE + vOrigin[0]
vAngle[1] = vAngle[1] * DISTANCE + vOrigin[1]
vAngle[2] = vAngle[2] * DISTANCE + vOrigin[2]
engfunc(EngFunc_TraceLine, vOrigin, vAngle, DONT_IGNORE_MONSTERS, player, 0)
get_tr2(0, TR_vecEndPos, vOrigin)
while((entity = engfunc(EngFunc_FindEntityInSphere, entity, vOrigin, 0.5)))
{
if(is_entity(entity) && FClassnameIs(entity, "weaponbox"))
{
if(g_Hud[player] <= get_gametime())
{
set_hudmessage(COLOR, -1.0, 0.7, 2, 0.0, 1.0, 0.02, 0.5)
show_hudmessage(player, "Press USE to pick up")
g_Hud[player] = get_gametime() + 120.0
}
if(pev(entity, pev_flags) & FL_ONGROUND)
{
g_Entity[player] = entity
if(get_member(player, m_afButtonPressed) & IN_USE)
{
if(is_entity(get_member(entity, m_WeaponBox_rgpPlayerItems, PRIMARY_WEAPON_SLOT)))
rg_drop_items_by_slot(player, PRIMARY_WEAPON_SLOT)
else if(is_entity(get_member(entity, m_WeaponBox_rgpPlayerItems, PISTOL_SLOT)))
rg_drop_items_by_slot(player, PISTOL_SLOT)
dllfunc(DLLFunc_Touch, entity, player)
}
}
return HC_CONTINUE
}
}
g_Entity[player] = 0
return HC_CONTINUE
}
- Код: Выделить всё
cell AMX_NATIVE_CALL is_entity(AMX *amx, cell *params)
{
enum args_e { arg_count, arg_index };
int nIndex = params[arg_index];
if (nIndex < 0 || nIndex > gpGlobals->maxEntities) {
return FALSE;
}
auto pEntity = getPrivate<CBaseEntity>(nIndex);
if (!pEntity) {
return FALSE;
}
// if it is the index of the player
if (pEntity->IsPlayer() && pEntity->has_disconnected) {
return FALSE;
}
return TRUE;
}
- Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <reapi>
#define DISTANCE 80.0
#define COLOR 75, 0, 255
#define PDATA_VALID 2
#define is_entity(%0) (pev_valid(%0) == PDATA_VALID)
new Float:g_Hud[33]
public plugin_init()
{
register_plugin("Weapon USE Pickup", "1.0", "406")
RegisterHookChain(RG_CBasePlayer_PreThink, "rg_CBasePlayerPreThink")
}
public rg_CBasePlayerPreThink(player)
{
if(!is_user_alive(player)) return HC_CONTINUE
new Float:vOrigin[3], Float:vAngle[3], entity = FM_NULLENT
ExecuteHam(Ham_Player_GetGunPosition, player, vOrigin)
pev(player, pev_v_angle, vAngle)
angle_vector(vAngle, ANGLEVECTOR_FORWARD, vAngle)
vAngle[0] = vAngle[0] * DISTANCE + vOrigin[0]
vAngle[1] = vAngle[1] * DISTANCE + vOrigin[1]
vAngle[2] = vAngle[2] * DISTANCE + vOrigin[2]
engfunc(EngFunc_TraceLine, vOrigin, vAngle, DONT_IGNORE_MONSTERS, player, 0)
get_tr2(0, TR_vecEndPos, vOrigin)
while((entity = engfunc(EngFunc_FindEntityInSphere, entity, vOrigin, 0.5)))
{
if(is_entity(entity) && FClassnameIs(entity, "weaponbox"))
{
if(g_Hud[player] <= get_gametime())
{
set_hudmessage(COLOR, -1.0, 0.7, 2, 0.0, 1.0, 0.02, 0.5)
show_hudmessage(player, "Press USE to pick up")
g_Hud[player] = get_gametime() + 120.0
}
if(pev(entity, pev_flags) & FL_ONGROUND && get_member(player, m_afButtonPressed) & IN_USE)
{
if(is_entity(get_member(entity, m_WeaponBox_rgpPlayerItems, PRIMARY_WEAPON_SLOT)))
rg_drop_items_by_slot(player, PRIMARY_WEAPON_SLOT)
else if(is_entity(get_member(entity, m_WeaponBox_rgpPlayerItems, PISTOL_SLOT)))
rg_drop_items_by_slot(player, PISTOL_SLOT)
dllfunc(DLLFunc_Touch, entity, player)
}
return HC_CONTINUE
}
}
return HC_CONTINUE
}
Утверждено. //Leonidddd