Quote:
Originally Posted by Bugsy
plugin_end() is only called on a graceful shutdown or map change. In the case of a crash, everything comes to a dead stop with no events getting triggered. You should concentrate on fixing the crash and then save data at disconnect.
Only other option is to save data at an interval using a timer/set_task(). I would avoid saving to vault every time data changes since you have a large number of variables.
|
plugin_end() is calling when the server get shotdown or map change??
But why when i close vault using function of plugin end() and if the server has shutdown the data doesn't get saved!!
Code:
PHP Code:
if ( ( g_Vault = nvault_open( "Bank" ) ) == INVALID_HANDLE )
set_fail_state( "Error opening vault." );
public client_authorized(id)
{
get_user_authid( id , g_iPlayerData[ id ][ AuthID ] , charsmax( g_iPlayerData[ ][ AuthID ] ) );
get_user_name( id , g_iPlayerData[ id ][ Name ] , charsmax( g_iPlayerData[ ][ Name ] ) );
get_user_ip( id, g_iPlayerData[ id ][ IP ] , charsmax(g_iPlayerData[ ][ IP ]), 1 );
if(!is_user_hltv(id) && !is_user_bot(id))
{
LoadData(id);
}
}
public client_disconnect(id)
{
if(!is_user_hltv(id) && !is_user_bot(id))
{
SaveData(id);
}
}
public SaveData(id)
{
new szData[8], szKey[64];
switch( get_pcvar_num(g_iCvars[SAVE_DATA]) )
{
case 2: formatex(szKey , charsmax(szKey), "%s-NAME" , g_iPlayerData[ id ][ Name ] );
case 3: formatex(szKey , charsmax(szKey), "%s-IP" , g_iPlayerData[ id ][ IP ] );
default: formatex(szKey , charsmax(szKey), "%s-ID" , g_iPlayerData[ id ][ AuthID ] );
}
formatex( szData , charsmax( szData ) , "%i" , g_iPlayerData[ id ][ Cash ] );
nvault_set( g_Vault , szKey , szData );
}
public LoadData(id)
{
new szData[8], szKey[64], iCash[10];
switch( get_pcvar_num(g_iCvars[SAVE_DATA]) )
{
case 2: formatex(szKey , charsmax(szKey), "%s-NAME" , g_iPlayerData[ id ][ Name ] );
case 3: formatex(szKey , charsmax(szKey), "%s-IP" , g_iPlayerData[ id ][ IP ] );
default: formatex(szKey , charsmax(szKey), "%s-ID" , g_iPlayerData[ id ][ AuthID ] );
}
formatex( szData , charsmax( szData ) , "%i" , g_iPlayerData[ id ][ Cash ] );
nvault_get( g_Vault, szKey, szData, charsmax(szData) )
parse(szData, iCash, charsmax(iCash));
g_iPlayerData[ id ][ Cash ] = str_to_num(iCash)
}
public plugin_end()
{
nvault_close( g_Vault );
}
Should i put the function of plugin_end() on the top of the plugin !?
__________________