Edit: All 3 weapon commands can now be used in each round. The per-round command limit is controlled via cvar.
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <fakemeta_util>
#define m_rgpPlayerItems_slot1 368
#define ACCESS_FLAG ADMIN_VOTE
enum _:AmmoOffsets
{
OFFSET_AWM_AMMO = 377,
OFFSET_SCOUT_AMMO,
OFFSET_PARA_AMMO,
OFFSET_FAMAS_AMMO,
OFFSET_M3_AMMO,
OFFSET_USP_AMMO,
OFFSET_FIVESEVEN_AMMO,
OFFSET_DEAGLE_AMMO,
OFFSET_P228_AMMO,
OFFSET_GLOCK_AMMO,
OFFSET_FLASH_AMMO,
OFFSET_HE_AMMO,
OFFSET_SMOKE_AMMO,
OFFSET_C4_AMMO
};
enum _:WeaponCvar
{
AWP,
AK47,
M4A1
}
new g_iWeaponsGiven[ 33 ][ 3 ];
new g_iMaxPlayers;
new g_pCVar[ 3 ];
public plugin_init()
{
register_plugin( "WeaponMe" , "1.0" , "bugsy" );
register_clcmd( "amx_awpme" , "GiveAwp" , ACCESS_FLAG , "give an awp" );
register_clcmd( "amx_akme" , "GiveAk" , ACCESS_FLAG , "give an ak47" );
register_clcmd( "amx_m4me" , "GiveM4" , ACCESS_FLAG , "give an m4a1" );
register_event( "HLTV" , "fw_EvNewRound" , "a" , "1=0" , "2=0" );
g_pCVar[ AWP ] = register_cvar( "wm_awp" , "1" );
g_pCVar[ AK47 ] = register_cvar( "wm_ak47" , "1" );
g_pCVar[ M4A1 ] = register_cvar( "wm_m4a1" , "1" );
g_iMaxPlayers = get_maxplayers();
}
public fw_EvNewRound()
{
for ( new id = 1 ; id <= g_iMaxPlayers ; id++ )
{
g_iWeaponsGiven[ id ][ AWP ] = 0;
g_iWeaponsGiven[ id ][ AK47 ] = 0;
g_iWeaponsGiven[ id ][ M4A1 ] = 0;
}
}
public GiveAwp( id , level , cid )
{
if ( !cmd_access(id, level, cid, 1) || !is_user_alive( id ) )
return PLUGIN_HANDLED;
static iCVar; iCVar = get_pcvar_num( g_pCVar[ AWP ] );
if ( g_iWeaponsGiven[ id ][ AWP ] >= iCVar )
{
client_print( id , print_chat , "* You may only use this command %d time%s per round." , iCVar , ( iCVar > 1 ) ? "s" : "" );
return PLUGIN_HANDLED;
}
CmdTransaction( id , "weapon_awp" , 30 );
return PLUGIN_HANDLED;
}
public GiveAk( id , level , cid )
{
if ( !cmd_access(id, level, cid, 1) || !is_user_alive( id ) )
return PLUGIN_HANDLED;
static iCVar; iCVar = get_pcvar_num( g_pCVar[ AK47 ] );
if ( g_iWeaponsGiven[ id ][ AK47 ] >= iCVar )
{
client_print( id , print_chat , "* You may only use this command %d time%s per round." , iCVar , ( iCVar > 1 ) ? "s" : "" );
return PLUGIN_HANDLED;
}
CmdTransaction( id , "weapon_ak47" , 90 );
return PLUGIN_HANDLED;
}
public GiveM4( id , level , cid )
{
if ( !cmd_access(id, level, cid, 1) || !is_user_alive( id ) )
return PLUGIN_HANDLED;
static iCVar; iCVar = get_pcvar_num( g_pCVar[ M4A1 ] );
if ( g_iWeaponsGiven[ id ][ M4A1 ] >= iCVar )
{
client_print( id , print_chat , "* You may only use this command %d time%s per round." , iCVar , ( iCVar > 1 ) ? "s" : "" );
return PLUGIN_HANDLED;
}
CmdTransaction( id , "weapon_m4a1" , 90 );
return PLUGIN_HANDLED;
}
public CmdTransaction( id , szGiveWeapon[] , iMaxBPAmmo )
{
static szWeapon[ 20 ] , iPrimaryWeapon , iGiveWeaponID;
iPrimaryWeapon = get_pdata_cbase( id , m_rgpPlayerItems_slot1 , 5 );
if ( iPrimaryWeapon != -1 )
{
pev( iPrimaryWeapon , pev_classname , szWeapon , 19 );
engclient_cmd( id , "drop" , szWeapon );
}
iGiveWeaponID = get_weaponid( szGiveWeapon );
fm_give_item( id , szGiveWeapon );
fm_set_user_bpammo( id , iGiveWeaponID , iMaxBPAmmo );
switch ( iGiveWeaponID )
{
case CSW_AWP: g_iWeaponsGiven[ id ][ AWP ]++;
case CSW_AK47: g_iWeaponsGiven[ id ][ AK47 ]++;
case CSW_M4A1: g_iWeaponsGiven[ id ][ M4A1 ]++;
}
return PLUGIN_HANDLED;
}
public fm_set_user_bpammo(index, weapon, amount)
{
new offset;
switch(weapon)
{
case CSW_AWP: offset = OFFSET_AWM_AMMO;
case CSW_SCOUT,CSW_AK47,CSW_G3SG1: offset = OFFSET_SCOUT_AMMO;
case CSW_M249: offset = OFFSET_PARA_AMMO;
case CSW_M4A1,CSW_FAMAS,CSW_AUG,CSW_SG550,CSW_GALI,CSW_SG552: offset = OFFSET_FAMAS_AMMO;
case CSW_M3,CSW_XM1014: offset = OFFSET_M3_AMMO;
case CSW_USP,CSW_UMP45,CSW_MAC10: offset = OFFSET_USP_AMMO;
case CSW_FIVESEVEN,CSW_P90: offset = OFFSET_FIVESEVEN_AMMO;
case CSW_DEAGLE: offset = OFFSET_DEAGLE_AMMO;
case CSW_P228: offset = OFFSET_P228_AMMO;
case CSW_GLOCK18,CSW_MP5NAVY,CSW_TMP,CSW_ELITE: offset = OFFSET_GLOCK_AMMO;
case CSW_FLASHBANG: offset = OFFSET_FLASH_AMMO;
case CSW_HEGRENADE: offset = OFFSET_HE_AMMO;
case CSW_SMOKEGRENADE: offset = OFFSET_SMOKE_AMMO;
case CSW_C4: offset = OFFSET_C4_AMMO;
default:
{
new invalidMsg[27];
formatex(invalidMsg,26,"Invalid weapon id %d",weapon);
set_fail_state(invalidMsg);
return 0;
}
}
set_pdata_int(index,offset,amount);
return 1;
}