New Member
|
01-09-2019
, 13:57
Removing weapons from certains slots
|
#1
|
I was searching this forums for a way to remove weapons from certain slots, for example remove only grenades, pistols, rifles, etc. And i found some old posts and decided to use this method:
https://forums.alliedmods.net/showpo...6&postcount=77
This is my code:
PHP Code:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
#include <cstrike>
#tryinclude <cstrike_pdatas>
#if !defined _cbaseentity_included
#assert Cstrike Pdatas and Offsets library required! Read the below instructions: \
1. Download it at forums.alliedmods.net/showpost.php?p=1712101#post1712101 \
2. Put it into amxmodx/scripting/include/ folder \
3. Compile this plugin locally, details: wiki.amxmodx.org/index.php/Compiling_Plugins_%28AMX_Mod_X%29 \
4. Install compiled plugin, details: wiki.amxmodx.org/index.php/Configuring_AMX_Mod_X#Installing
#endif
enum _:hudHide ( <<= 1 )
{
HUD_HIDE_CAL = 1,
HUD_HIDE_FLASH,
HUD_HIDE_ALL,
HUD_HIDE_RHA,
HUD_HIDE_TIMER,
HUD_HIDE_MONEY,
HUD_HIDE_CROSS,
HUD_DRAW_CROSS
}
enum _:ammoIndexes
{
ammo_none,
ammo_338magnum = 1, // 30
ammo_762nato, // 90
ammo_556natobox, // 200
ammo_556nato, // 90
ammo_buckshot, // 32
ammo_45acp, // 100
ammo_57mm, // 100
ammo_50ae, // 35
ammo_357sig, // 52
ammo_9mm, // 120
ammo_flashbang, // 2
ammo_hegrenade, // 1
ammo_smokegrenade, // 1
ammo_c4 // 1
}
#define Plugin "Starting Weapons"
#define Version "0.1"
#define Author "me"
public plugin_init( ) {
register_plugin( Plugin, Version, Author )
RegisterHam( Ham_Spawn, "player", "fw_PlayerSpawnPost", 1 )
}
public fw_PlayerSpawnPost( id ) {
if( is_user_alive( id ) ) {
RemovePlayerSlotsItem( id, 1 )
RemovePlayerSlotsItem( id, 2 )
RemovePlayerSlotsItem( id, 4 )
switch( cs_get_user_team( id ) ) {
case CS_TEAM_T: {
give_item( id, "weapon_ak47" )
cs_set_user_bpammo( id, CSW_AK47, 90 )
}
case CS_TEAM_CT: {
give_item( id, "weapon_m4a1" )
cs_set_user_bpammo( id, CSW_M4A1, 90 )
cs_set_user_defuse( id, 1 )
}
}
give_item( id, "weapon_deagle")
cs_set_user_bpammo( id, CSW_DEAGLE, 35 )
give_item( id, "weapon_hegrenade" )
give_item( id, "weapon_flashbang" )
cs_set_user_bpammo( id, CSW_FLASHBANG, 2 )
}
}
RemovePlayerSlotsItem(id, iSlot)
{
if( !(1 <= iSlot <= 5) )
{
return 0
}
new iActiveItem = get_pdata_cbase(id, m_pActiveItem)
if( iSlot == 1 && get_pdata_bool(id, m_bHasShield) )
{
RemoveUserShield( id )
if( 2 <= ExecuteHamB(Ham_Item_ItemSlot, iActiveItem) <= 4 )
{
ExecuteHamB(Ham_Item_Deploy, iActiveItem)
}
return 1
}
new iItem, iWeapons = pev(id, pev_weapons)
while( ( iItem = get_pdata_cbase(id, m_rgpPlayerItems_CBasePlayer[iSlot]) ) > 0 )
{
if( iItem == iActiveItem )
{
ExecuteHamB(Ham_Weapon_RetireWeapon, iItem) // only to call GetNextBestWeapon so player still have a weapon in hands.
}
iWeapons &= ~get_pdata_int(iItem, m_iId, XO_CBASEPLAYERITEM)
ExecuteHamB(Ham_RemovePlayerItem, id, iItem)
ExecuteHamB(Ham_Item_Kill, iItem)
}
set_pev(id, pev_weapons, iWeapons)
if( iSlot == 1 )
{
set_pdata_int(id, m_fHasPrimary, 0)
}
else if( iSlot == 4 )
{
set_pdata_int(id, m_rgAmmo_CBasePlayer[ammo_flashbang], 0)
set_pdata_int(id, m_rgAmmo_CBasePlayer[ammo_hegrenade], 0)
set_pdata_int(id, m_rgAmmo_CBasePlayer[ammo_smokegrenade], 0)
}
return 1
}
RemoveUserShield( id )
{
if ( get_pdata_bool(id, m_bHasShield) )
{
set_pdata_bool(id, m_bHasShield, false)
set_pdata_int(id, m_fHasPrimary, 0)
set_pdata_bool(id, m_bUsesShield, false)
set_pev(id, pev_gamestate, 1)
new iHideHUD = get_pdata_int(id, m_iHideHUD)
if( iHideHUD & HUD_HIDE_CROSS )
{
set_pdata_int(id, m_iHideHUD, iHideHUD & ~HUD_HIDE_CROSS)
}
return 1
}
return 0
}
The problem is... if i have USP it does not removes it entirely. When i choose weapon slot 2, i have Deagle and... USP, but i cannot equip the USP if i drop the deagle. After i drop the deagle the slot looks empty, after i pick it up again i have two icons, one for the deagle and one for the USP.
Do you know a better and updated way to remove weapons from a certain slot?
I'm running AMXMODX 1.8.3 on my test server...
|
|