Untested
Edit: Added load\save data on authorized\disconnect.
PHP Code:
#include <amxmodx>
#include <nvault>
new const szVersion[] = "0.1";
const MAXPLAYERS = 32;
enum UpgradeTypes
{
utIncAlienSpeed,
utAddAlienHealth,
utAddPredHealth,
utDecrScreamCooldown,
utUnlockUltraClasses
}
enum UpgradeInfo
{
szDescription[ 64 ],
iValue,
szMessage[ 64 ]
}
new const g_Upgrades[ UpgradeTypes ][ UpgradeInfo ] =
{
{ "Increase Alien Speed" , 2130 , "Your ^3Alien running speed ^1is now ^4increased" } ,
{ "Additional Alien Health" , 2650 , "You will now get more ^3health points ^1as an ^4Alien" } ,
{ "Additional predator Health" , 3200 , "You will now get more ^3health points ^1as a ^4Predator" } ,
{ "Decrease Scream Cooldown" , 750 , "You can now ^3scream ^1more often" } ,
{ "Unlock Ultra Classes" , 5000 , "You now have access to the ^3Ultra Classes^1" }
};
new g_PlayerUpgrades[ MAXPLAYERS + 1 ];
new g_szAuthID[ MAXPLAYERS + 1 ][ 34 ];
new g_Vault;
public plugin_init()
{
register_plugin( "Upgrade Example" , szVersion , "bugsy" );
if ( ( g_Vault = nvault_open( "upgrades" ) ) == INVALID_HANDLE )
set_fail_state( "Error opening nvault" );
}
public plugin_end()
{
nvault_close( g_Vault );
}
public client_authorized( id )
{
get_user_authid( id , g_szAuthID[ id ] , charsmax( g_szAuthID[] ) );
LoadUpgrades( id );
}
public client_disconnect( id )
{
SaveUpgrades( id );
}
public AddUpgrade( iPlayer , UpgradeTypes:utUpgrade )
{
g_PlayerUpgrades[ iPlayer ] |= ( 1 << _:utUpgrade );
client_print( iPlayer , print_chat , "%s upgrade added: %s" , g_Upgrades[ utUpgrade ][ szDescription ] , g_Upgrades[ utUpgrade ][ szMessage ] );
}
public RemoveUpgrade( iPlayer , UpgradeTypes:utUpgrade )
{
g_PlayerUpgrades[ iPlayer ] &= ~( 1 << _:utUpgrade );
client_print( iPlayer , print_chat , "%s upgrade has been removed" , g_Upgrades[ utUpgrade ][ szDescription ] );
}
public ClearUpgrades( iPlayer , UpgradeTypes:utUpgrade )
{
g_PlayerUpgrades[ iPlayer ] = _:0;
client_print( iPlayer , print_chat , "All upgrades have been removed" );
}
public bool:PlayerHasUpgrade( iPlayer , UpgradeTypes:utUpgrade )
{
return bool:!!( g_PlayerUpgrades[ iPlayer ] & ( 1 << _:utUpgrade ) );
}
public SaveUpgrades( id )
{
new szVal[ 12 ];
num_to_str( g_PlayerUpgrades[ id ] , szVal , charsmax( szVal ) );
nvault_set( g_Vault , g_szAuthID[ id ] , szVal );
}
public LoadUpgrades( id )
{
g_PlayerUpgrades[ id ] = nvault_get( g_Vault , g_szAuthID[ id ] );
}
__________________