Bitsums can be useful for storing what weapons a player has, if you want to store clip\bp-ammo or any other info then it will take some more coding, as backstabnoob said.
This will save\restore all primary\secondary weapons as well as grenades. Let me know if you have any problems.
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <fun>
#include <cstrike>
#include <nvault>
new const Version[] = "0.1";
new const VaultName[] = "weapondata";
const NoClipAmmo = ( ( 1 << CSW_FLASHBANG ) | ( 1 << CSW_HEGRENADE ) | ( 1 << CSW_SMOKEGRENADE ) );
const IgnoreWeapons = ( ( 1 << CSW_C4 ) | ( 1 << CSW_KNIFE ) );
new g_Vault , g_szAuthID[ 33 ][ 35 ] , g_FirstSpawn;
public plugin_init()
{
register_plugin( "Save and Restore Weapons" , Version , "bugsy" );
RegisterHam( Ham_Spawn , "player" , "fw_HamSpawn_Post" , 1 );
if ( ( g_Vault = nvault_open( VaultName ) ) == -1 )
log_amx( "Error opening vault" );
}
public plugin_end()
{
nvault_close( g_Vault );
}
public client_putinserver( id )
{
get_user_authid( id , g_szAuthID[ id ] , charsmax( g_szAuthID[] ) );
g_FirstSpawn |= ( 1 << ( id & 31 ) );
}
public fw_HamSpawn_Post( id )
{
if ( is_user_alive( id ) )
{
if ( g_FirstSpawn & ( 1 << ( id & 31 ) ) )
{
new szData[ 256 ] , iTS;
if ( nvault_lookup( g_Vault , g_szAuthID[ id ] , szData , charsmax( szData ) , iTS ) )
{
new bool:bHasC4 = bool:user_has_weapon( id , CSW_C4 );
strip_user_weapons( id );
give_item( id , "weapon_knife" );
if ( bHasC4 )
give_item( id , "weapon_c4" );
new iWeapon , szWeapon[ 20 ] , szWeaponData[ 14 ] , szClip[ 4 ] , szBP[ 4 ] , iClip , iBP;
for ( new i = 0 ; i <= 30 ; i++ )
{
if ( !( IgnoreWeapons & ( 1 << i ) ) )
{
strbreak( szData , szWeaponData , charsmax( szWeaponData ) , szData , charsmax( szData ) );
strbreak( szWeaponData , szClip , charsmax( szClip ) , szBP , charsmax( szBP ) );
iClip = str_to_num( szClip );
iBP = str_to_num( szBP );
if ( iClip > -1 )
{
get_weaponname( i , szWeapon , charsmax( szWeapon ) );
if ( ( iWeapon = give_item( id , szWeapon ) ) > -1 )
{
if ( !( NoClipAmmo & ( 1 << i ) ) && ( iClip > 0 ) )
cs_set_weapon_ammo( iWeapon , iClip );
if ( iBP > 0 )
cs_set_user_bpammo( id , i , iBP );
}
}
}
}
}
g_FirstSpawn &= ~( 1 << ( id & 31 ) );
}
}
}
public client_disconnect( id )
{
if ( is_user_alive( id ) )
{
new iWeapons = pev( id , pev_weapons ) , szData[ 256 ] , iPos , szWeapon[ 20 ] , iEntity , iWeaponAmmo;
for ( new i = 0 ; i <= 30 ; i++ )
{
if ( !( IgnoreWeapons & ( 1 << i ) ) )
{
if ( iWeapons & ( 1 << i ) )
{
get_weaponname( i , szWeapon , charsmax( szWeapon ) );
if ( NoClipAmmo & ( 1 << i ) )
{
iWeaponAmmo = 0;
}
else
{
iEntity = fm_find_ent_by_owner( -1 , szWeapon , id );
iWeaponAmmo = cs_get_weapon_ammo( iEntity );
}
iPos += formatex( szData[ iPos ] , charsmax( szData ) - iPos , "^"%d %d^" " , iWeaponAmmo , cs_get_user_bpammo( id , i ) );
}
else
{
iPos += copy( szData[ iPos ] , charsmax( szData ) - iPos , "^"-1 -1^" " );
}
}
}
nvault_set( g_Vault , g_szAuthID[ id ] , szData );
}
else
{
nvault_remove( g_Vault , g_szAuthID[ id ] );
}
}
__________________