Code:
#include < amxmodx >
#include < amxmisc >
#include < cstrike >
#include < fakemeta >
#include < fun >
#include < hamsandwich >
#define PLUGIN "VIP Menu"
#define VERSION "1.0"
#define AUTHOR "AMXX Community"
#define JUMPS_NUMBER 1 // 1 means +1 (2 jumps)
enum _:Items {
HEALTH = 0,
HEGRENADE,
RESPAWN,
AMMO,
DOUBLE_JUMP,
SILENT_RUN
};
new const g_szMenuItems[ ][ ] = {
"+25 HP",
"Hegrenade",
"Respawn (25hp)",
"Ammo Refill",
"Double Jump"
// "Silent Run"
};
new const g_szRegClCmd[ ][ ] = {
"say /vipmenu",
"say .vipmenu",
"say vipmenu",
"say_team .vipmenu",
"say_team /vipmenu",
"say_team vipmenu"
};
new bool:g_bItemUsed[ 33 ][ Items ];
new bool:g_bMenuOpened[ 33 ];
new bool:g_bDoJump[ 33 ];
new g_iJumps[ 33 ], g_Callback;
public plugin_init( ) {
register_plugin( PLUGIN, VERSION, AUTHOR );
register_event( "HLTV", "Event_NewRound", "a", "1=0", "2=0" );
for( new i = 0; i < sizeof( g_szRegClCmd ); i++ )
register_clcmd( g_szRegClCmd[ i ], "Menu_Vip", ADMIN_RESERVATION );
g_Callback = menu_makecallback( "MenuItems_Check" );
RegisterHam( Ham_Spawn, "player", "Forward__PlayerSpawn_Post", 1 );
register_forward( FM_PlayerPreThink, "Forward__PlayerPreThink" );
register_forward( FM_PlayerPostThink, "Forward__PlayerPostThink" );
}
public Menu_Vip( id, lvl, cid ) {
if( !has_flag( id, "b" ) || g_bMenuOpened[ id ] )
return PLUGIN_HANDLED;
new menu = menu_create( "V.I.P Menu", "MenuHandler_Vip" );
for( new i = 0; i < sizeof( g_szMenuItems ); i++ )
menu_additem( menu, g_szMenuItems[ i ], _, _, g_Callback );
menu_display( id, menu, 0 );
return PLUGIN_HANDLED;
}
public MenuItems_Check( id, menu, item ) {
switch( item ) {
case 0: {
if( g_bItemUsed[ id ][ HEALTH ] || pev( id, pev_health ) > 75.0 )
return ITEM_DISABLED;
}
case 1: {
if( g_bItemUsed[ id ][ HEGRENADE ] || user_has_weapon( id, CSW_HEGRENADE ) )
return ITEM_DISABLED;
}
case 2: {
if( g_bItemUsed[ id ][ RESPAWN ] || pev( id, pev_health ) > 25.0 )
return ITEM_DISABLED;
}
case 3: {
if( g_bItemUsed[ id ][ AMMO ] )
return ITEM_DISABLED;
}
case 4: {
if( g_bItemUsed[ id ][ DOUBLE_JUMP ] )
return ITEM_DISABLED;
}
case 5: {
if( g_bItemUsed[ id ][ SILENT_RUN ] )
return ITEM_DISABLED;
}
}
return ITEM_ENABLED;
}
public MenuHandler_Vip( id, menu, item ) {
if( item == MENU_EXIT ) {
menu_destroy( menu );
return PLUGIN_HANDLED;
}
switch( item ) {
case 0:
{
set_pev( id, pev_health, pev( id, pev_health ) + 25.0 );
g_bItemUsed[ id ][ HEALTH ] = true;
}
case 1:
{
give_item( id, "weapon_hegrenade" );
g_bItemUsed[ id ][ HEGRENADE ] = true;
}
case 2:
{
ExecuteHamB( Ham_CS_RoundRespawn, id );
g_bItemUsed[ id ][ RESPAWN ] = true;
}
case 3:
{
new iWeapon = get_user_weapon( id );
set_weapon_fullammo( id, iWeapon );
g_bItemUsed[ id ][ AMMO ] = true;
}
case 4:
{
g_bItemUsed[ id ][ DOUBLE_JUMP ] = true;
}
case 5:
{
set_user_footsteps( id, 1 );
g_bItemUsed[ id ][ SILENT_RUN ] = true;
}
}
g_bMenuOpened[ id ] = true;
menu_destroy( menu );
return PLUGIN_HANDLED;
}
public Event_NewRound( iPlayer ) {
g_bItemUsed[ iPlayer ][ HEALTH ] = false;
g_bItemUsed[ iPlayer ][ HEGRENADE ] = false;
g_bItemUsed[ iPlayer ][ RESPAWN ] = false;
g_bItemUsed[ iPlayer ][ AMMO ] = false;
if( g_bItemUsed[ iPlayer ][ DOUBLE_JUMP ] ) {
g_bItemUsed[ iPlayer ][ DOUBLE_JUMP ] = false;
g_bDoJump[ iPlayer ] = false;
g_iJumps[ iPlayer ] = 0;
}
if( g_bItemUsed[ iPlayer ][ SILENT_RUN ] ) {
g_bItemUsed[ iPlayer ][ SILENT_RUN ] = false;
set_user_footsteps( iPlayer, 0 );
}
g_bMenuOpened[ iPlayer ] = false;
}
public Forward__PlayerSpawn_Post( iPlayer ) {
g_bItemUsed[ iPlayer ][ HEALTH ] = false;
g_bItemUsed[ iPlayer ][ HEGRENADE ] = false;
g_bItemUsed[ iPlayer ][ RESPAWN ] = false;
g_bItemUsed[ iPlayer ][ AMMO ] = false;
if( g_bItemUsed[ iPlayer ][ DOUBLE_JUMP ] ) {
g_bItemUsed[ iPlayer ][ DOUBLE_JUMP ] = false;
g_bDoJump[ iPlayer ] = false;
g_iJumps[ iPlayer ] = 0;
}
if( g_bItemUsed[ iPlayer ][ SILENT_RUN ] ) {
g_bItemUsed[ iPlayer ][ SILENT_RUN ] = false;
set_user_footsteps( iPlayer, 0 );
}
g_bMenuOpened[ iPlayer ] = false;
}
public Forward__PlayerPreThink( iPlayer ) {
if( g_bItemUsed[ iPlayer ][ DOUBLE_JUMP ] ) {
if( !( pev( iPlayer, pev_button ) & IN_JUMP ) )
return;
if( !( pev( iPlayer, pev_oldbuttons ) & IN_JUMP ) && !( pev( iPlayer, pev_flags ) & FL_ONGROUND ) ) {
if( g_iJumps[ iPlayer ] < JUMPS_NUMBER )
{
g_bDoJump[ iPlayer ] = true;
g_iJumps[ iPlayer ]++;
}
}
else if( pev( iPlayer, pev_flags ) & FL_ONGROUND ) {
g_iJumps[ iPlayer ] = 0;
return;
}
}
}
public Forward__PlayerPostThink( iPlayer ) {
if( !g_bDoJump[ iPlayer ] )
return;
static Float:fVelocity[ 3 ];
pev( iPlayer, pev_velocity, fVelocity );
fVelocity[ 2 ] = 265.0;
set_pev( iPlayer, pev_velocity, fVelocity );
g_bDoJump[ iPlayer ] = false;
}
stock set_weapon_fullammo(id, CSW_WEAPON) {
static const iBPAmmo[CSW_P90 + 1] = {
0, 52, 90, -1, 32, -1, 100, 90, 1, 120, 100, 120, 90, 90, 90,
90, 100, 120, 30, 120, 200, 32, 90, 120, 90, 1, 35, 90, 90, -1, 100
}
static const NullWeapons = ( (1<<CSW_C4) | (1<<CSW_KNIFE) )
if( (1<<CSW_WEAPON) & NullWeapons || (!(CSW_P228 <= CSW_WEAPON <= CSW_P90) ) || !is_user_connected(id))
return 0
cs_set_user_bpammo(id, CSW_WEAPON, iBPAmmo[CSW_WEAPON])
return 1
}
Ammo Refill gives alot of nades. (tried with HE- nades. equipped it and used ammo refill. Then i had 32 Nades). So how do make so that it doesnt Give any nades ( got reported that it had same bug with flashes and smokes also)