Re: Help Edit with Limiting Weapon Giving Per Round
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; }
|