Raised This Month: $51 Target: $400
 12% 

nVault saving enum.


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 06-10-2012 , 08:53   nVault saving enum.
Reply With Quote #1

For example, i'm making an achievement system, but i want to save everything in the enum, should i loop like this or is there some other way to do it:

for(new i; i < sizeof(iAchCount); i++) {
format(vaultdata, 255, "%i#%i#", iAchLevel[id][i], TotalAchievements[id])
}
nvault_set(gVault, vaultkey, vaultdata)

And how about loading the same stats?

EDIT: Full code.

PHP Code:
#include <amxmodx>
#include <colorchat>
#include <fakemeta>
#include <engine>
#include <xs>
#include <nvault>

#define VERSION "1.0.0"

#define MaxPlayers 33

native get_user_achievements(id)
native set_user_achievements(idAchievements)

new 
TotalAchievements[33]
new 
iTotalAchievements 11
new gVault

new const szAchievementSound[] = "Achievements/AchievementReach.wav"

enum _:iAchCount {
    
DIES,
    
SPRAYS,
    
KILLS,
    
CONNECT,
    
HEADSHOT,
    
KNIFE,
    
DISTANCE,
    
SURVIVE,
    
GRENADE,
    
USP,
    
GLOCK
}

new const 
iAchPoints[iAchCount] = {
    
500,
    
1000,
    
1000,
    
500,
    
500,
    
100,
    
3,
    
100,
    
50,
    
250,
    
250
}

new 
iAchLevel[MaxPlayers][iAchCount]


new const 
Float:vecNullOrigin[3]

new 
Float:flDistance[MaxPlayers]
new 
Float:vecOldOrigin[MaxPlayers][3]
new 
Float:g_iFeet 35.0

public plugin_init() {
    
register_plugin("JailBreak Achievements"VERSION"NapoleoN#")
    
    
// Commands
    
register_clcmd("say /achs""Cmd_ShowAchievements")
    
    
// Events
    
register_event("DeathMsg""eDeath""a")
    
register_event("23""player_spray""a""1=112")
    
register_event("SendAudio""TerrorWins""a""2=%!MRAD_terwin")
    
    
// Fakemeta
    
register_forward(FM_CmdStart"CmdStart")
    
    
// nVault
    
nvault_open("AchievementSystem")
}

public 
plugin_natives() {
    
register_library("AchievementsNatives")
    
    
register_native("get_user_achievements""_get_achievements")
    
register_native("set_user_achievements""_set_achievements")
}

public 
_get_achievements(id) {
    return 
TotalAchievements[get_param(1)]
}

public 
_set_achievements(idAchievements) {
    new 
iPlayer get_param(1)
    
TotalAchievements[iPlayer] = max(0get_param(2))
    return 
TotalAchievements[iPlayer]
}

public 
plugin_precache() {
    
precache_sound(szAchievementSound)
}

public 
TerrorWins() {     
    new 
players[32], count
    get_players
(playerscount"ae""TERRORIST")
    if(
count == 1) {
        
        new 
id players[0]
        
iAchLevel[id][SURVIVE]++
        
        if(
iAchLevel[id][SURVIVE] == 100) {
            
TotalAchievements[id]++
            
ColorChat(idGREEN"[Achievements]^1 Congratulations! You have unclocked the achievement:^3 Survivor!")
        }
    }
}

public 
client_putinserver(id) {
    
iAchLevel[id][CONNECT]++
    switch(
iAchLevel[id][CONNECT]) {
        case 
500: {
            
set_task(2.0"ReachAddict"id// Avoid playing the sound and printing the message to early.
        
}
    }
}

public 
ReachAddict(id) {
    
TotalAchievements[id]++
    
ColorChat(idGREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Addict!")
    
emit_sound(idCHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM)
}

public 
eDeath() {
    new 
iClipiAmmoiWeapon get_user_weapon(read_data(1), iClipiAmmo)
    
    if(
is_user_alive(read_data(1))) {
        
iAchLevel[read_data(1)][KILLS]++
    }
    
    if(
read_data(3)) {
        
iAchLevel[read_data(1)][HEADSHOT]++
    }
    
    if(
iWeapon == CSW_KNIFE) {
        
iAchLevel[read_data(1)][KNIFE]++
    }
    
    if(
iWeapon == CSW_HEGRENADE) {
        
iAchLevel[read_data(1)][GRENADE]++
    }
    
    if(
iWeapon == CSW_USP) {
        
iAchLevel[read_data(1)][USP]++
    }
    
    if(
iWeapon == CSW_GLOCK18) {
        
iAchLevel[read_data(1)][GLOCK]++
    }
    
    
iAchLevel[read_data(2)][DIES]++
    
    switch(
iAchLevel[read_data(2)][DIES]) {
        case 
500: {
            
TotalAchievements[read_data(2)]++
            
ColorChat(read_data(2), GREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Anti-GodMode!")
            
emit_sound(read_data(2), CHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM)
        }
    }
    
    switch(
iAchLevel[read_data(1)][KILLS]) {
        case 
1000: {
            
TotalAchievements[read_data(1)]++
            
ColorChat(read_data(1), GREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Prison Breaker!")
            
emit_sound(read_data(1), CHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM)
        }
    }
    
    switch(
iAchLevel[read_data(1)][HEADSHOT]) {
        case 
500: {
            
TotalAchievements[read_data(1)]++
            
ColorChat(read_data(1), GREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 HeadzHunterz!")
            
emit_sound(read_data(1), CHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM)
        }
    }
    
    switch(
iAchLevel[read_data(1)][KNIFE]) {
        case 
100: {
            
TotalAchievements[read_data(1)]++
            
ColorChat(read_data(1), GREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 The Butcher!")
            
emit_sound(read_data(1), CHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM)
        }
    }
    
    switch(
iAchLevel[read_data(1)][GRENADE]) {
        case 
50: {
            
TotalAchievements[read_data(1)]++
            
ColorChat(read_data(1), GREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Grenadier!")
            
emit_sound(read_data(1), CHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM)
        }
    }
    
    switch(
iAchLevel[read_data(1)][USP]) {
        case 
250: {
            
TotalAchievements[read_data(1)]++
            
ColorChat(read_data(1), GREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Officer!")
            
emit_sound(read_data(1), CHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM)
        }
    }
    
    switch(
iAchLevel[read_data(1)][GLOCK]) {
        case 
250: {
            
TotalAchievements[read_data(1)]++
            
ColorChat(read_data(1), GREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Glocker!")
            
emit_sound(read_data(1), CHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM)
        }
    }
}

public 
player_spray() {
    
iAchLevel[read_data(2)][SPRAYS]++
    
    switch(
iAchLevel[read_data(2)][SPRAYS]) {
        case 
1000: {
            
TotalAchievements[read_data(2)]++
            
ColorChat(read_data(2), GREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Graffity Gangster!")
            
emit_sound(read_data(2), CHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM)
        }
    }
}

public 
Cmd_ShowAchievements(id) {
    new 
szTemp[500 char]
    
formatex(szTempcharsmax(szTemp), "JailBreak Achievements Menu^nTotal Achievements: \r%i/%i"TotalAchievements[id], iTotalAchievements)
    
    new 
menu menu_create(szTemp"Ach_Handler")
    
    
formatex(szTempcharsmax(szTemp), "Anti-GodMode! \r%i/%i"iAchLevel[id][DIES], iAchPoints[DIES])
    
menu_additem(menuszTemp"1")
    
    
formatex(szTempcharsmax(szTemp), "Graffity Gangster! \r%i/%i"iAchLevel[id][SPRAYS], iAchPoints[SPRAYS])
    
menu_additem(menuszTemp"2")
    
    
formatex(szTempcharsmax(szTemp), "Prison Breaker! \r%i/%i"iAchLevel[id][KILLS], iAchPoints[KILLS])
    
menu_additem(menuszTemp"3")
    
    
formatex(szTempcharsmax(szTemp), "Addict! \r%i/%i"iAchLevel[id][CONNECT], iAchPoints[CONNECT])
    
menu_additem(menuszTemp"4")
    
    
formatex(szTempcharsmax(szTemp), "HeadzHunterz! \r%i/%i"iAchLevel[id][HEADSHOT], iAchPoints[HEADSHOT])
    
menu_additem(menuszTemp"5")
    
    
formatex(szTempcharsmax(szTemp), "The Butcher! \r%i/%i"iAchLevel[id][KNIFE], iAchPoints[KNIFE])
    
menu_additem(menuszTemp"6")
    
    
formatex(szTempcharsmax(szTemp), "Sprinter! \r%i/%i"iAchLevel[id][DISTANCE], iAchPoints[DISTANCE])
    
menu_additem(menuszTemp"7")
    
    
formatex(szTempcharsmax(szTemp), "Survivor! \r%i/%i"iAchLevel[id][SURVIVE], iAchPoints[SURVIVE])
    
menu_additem(menuszTemp"8")
    
    
formatex(szTempcharsmax(szTemp), "Grenadier! \r%i/%i"iAchLevel[id][GRENADE], iAchPoints[GRENADE])
    
menu_additem(menuszTemp"9")
    
    
formatex(szTempcharsmax(szTemp), "Officer! \r%i/%i"iAchLevel[id][USP], iAchPoints[USP])
    
menu_additem(menuszTemp"10")
    
    
formatex(szTempcharsmax(szTemp), "Glocker! \r%i/%i"iAchLevel[id][GLOCK], iAchPoints[GLOCK])
    
menu_additem(menuszTemp"11")
    
    
menu_display(idmenu)
}

public 
Ach_Handler(idmenuitem) {
    if(
item == MENU_EXIT) {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    
    switch(
item) {
        case 
0: {
            
ColorChat(idGREEN"[Achievements]^1 Reach^3 %i^1 deaths to unlock this^4 Achievement!"iAchPoints[DIES])
            
ColorChat(idGREEN"[Achievements]^3 %i/%i."iAchLevel[id][DIES], iAchPoints[DIES])
        }
        case 
1: {
            
ColorChat(idGREEN"[Achievements]^1 Reach^3 %i^1 sprays to unlock this^4 Achievement!"iAchPoints[SPRAYS])
            
ColorChat(idGREEN"[Achievements]^3 %i/%i."iAchLevel[id][SPRAYS], iAchPoints[SPRAYS])
        }
        case 
2: {
            
ColorChat(idGREEN"[Achievements]^1 Reach^3 %i^1 kills to unlock this^4 Achievement!"iAchPoints[KILLS])
            
ColorChat(idGREEN"[Achievements]^3 %i/%i."iAchLevel[id][KILLS], iAchPoints[KILLS])
        }
        case 
3: {
            
ColorChat(idGREEN"[Achievements]^1 Reach^3 %i^1 connects to unlock this^4 Achievement!"iAchPoints[CONNECT])
            
ColorChat(idGREEN"[Achievements]^3 %i/%i."iAchLevel[id][CONNECT], iAchPoints[CONNECT])
        }
        case 
4: {
            
ColorChat(idGREEN"[Achievements]^1 Reach^3 %i^1 headshots to unlock this^4 Achievement!"iAchPoints[HEADSHOT])
            
ColorChat(idGREEN"[Achievements]^3 %i/%i."iAchLevel[id][HEADSHOT], iAchPoints[HEADSHOT])
        }
        case 
5: {
            
ColorChat(idGREEN"[Achievements]^1 Reach^3 %i^1 knife kills to unlock this^4 Achievement!"iAchPoints[KNIFE])
            
ColorChat(idGREEN"[Achievements]^3 %i/%i."iAchLevel[id][KNIFE], iAchPoints[KNIFE])
        }
        case 
6: {
            new 
Float:footsteps flDistance[id] / g_iFeet
            
            ColorChat
(idGREEN"[Achievements]^1 Reach^3 52800^1 footsteps to unlock this achievement!")
            
ColorChat(idGREEN"[Achievements]^3 %f/52800."footsteps)
        }
        case 
7: {
            
ColorChat(idGREEN"[Achievements]^1 Survive^3 %i^1 rounds to unlock this achievement!"iAchPoints[SURVIVE])
            
ColorChat(idGREEN"[Achievements]^1 %i/%i."iAchLevel[id][SURVIVE], iAchPoints[SURVIVE])
        }
        case 
8: {
            
ColorChat(idGREEN"[Achievements]^1 Kill^3 %i^1 ct's with a he grende to unlock this achievement!"iAchPoints[GRENADE])
            
ColorChat(idGREEN"[Achievements]^1 %i/%i."iAchLevel[id][GRENADE], iAchPoints[GRENADE])
        }
        case 
9: {
            
ColorChat(idGREEN"[Achievements]^1 Kill^3 %i^1 ct's with a USP to unlock this achievement!"iAchPoints[USP])
            
ColorChat(idGREEN"[Achievements]^1 %i/%i."iAchLevel[id][USP], iAchPoints[USP])
        }
        case 
10: {
            
ColorChat(idGREEN"[Achievements]^1 Kill^3 %i^1 ct's with a Glock18 to unlock this achievement!"iAchPoints[GLOCK])
            
ColorChat(idGREEN"[Achievements]^1 %i/%i."iAchLevel[id][GLOCK], iAchPoints[GLOCK])
        }
    }
    return 
PLUGIN_HANDLED
}

public 
CmdStart(id) {
    if(!
is_user_alive(id)) {
        return 
FMRES_IGNORED
    
}
    
    if(
iAchLevel[id][DISTANCE] <= 2) {
        
        new 
Float:vecOrigin]
        
entity_get_vectoridEV_VEC_originvecOrigin )
    
        if(!
xs_vec_equal(vecOldOrigin[id], vecNullOrigin)) {
            
flDistance[id] += get_distance_f(vecOriginvecOldOrigin[id])
        }
        
        
xs_vec_copy(vecOriginvecOldOrigin[id])
        
        switch(
iAchLevel[id][DISTANCE]) {
            case 
0: {
                if(
flDistance[id] / g_iFeet >= 1)
                {
                    
iAchLevel[id][DISTANCE]++
                    
ColorChat(idGREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Baby Footsteps!")
                    
emit_sound(idCHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM )
                }
            }
            case 
1: {
                if(
flDistance[id] / g_iFeet >= 5280) {
                    
iAchLevel[id][DISTANCE]++
                    
ColorChat(idGREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Walk Away!")
                    
emit_sound(idCHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM )
                }
            }
            case 
2: {
                if(
flDistance[id] / g_iFeet >= 52800) {
                    
iAchLevel[id][DISTANCE]++
                    
TotalAchievements[id]++
                    
ColorChat(idGREEN"[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Sprinter!")
                    
emit_sound(idCHAN_STATICszAchievementSound1.0ATTN_NORM0PITCH_NORM )
                }
            }
        }
    }
    return 
FMRES_IGNORED
}

public 
client_authorized(id) {
    
LoadData(id)
}

public 
client_disconnect(id) {
    
SaveData(id)
}

public 
SaveData(id) {
    new 
SteamID[32]; get_user_authid(idSteamIDcharsmax(SteamID))
    new 
vaultkey[64], vaultdata[256
    
    
format(vaultkeycharsmax(vaultkey), "%s-AchievementSystem"SteamID)
    
    for(new 
isizeof(iAchPoints); i++) {
        
format(vaultdatacharsmax(vaultdata), "%i#%i#"iAchLevel[id][i], TotalAchievements[id])
    }
    
    
nvault_set(gVaultvaultkeyvaultdata)
}

public 
LoadData(id) {
    new 
SteamID[35]; get_user_authid(idSteamIDcharsmax(SteamID)) 
    new 
vaultkey[64], vaultdata[256
    
    
format(vaultkeycharsmax(vaultkey), "%s-AchievementSystem"SteamID
    
    for(new 
isizeof(iAchPoints); i++) {
        
format(vaultdatacharsmax(vaultdata), "%i#%i#"iAchLevel[id][i], TotalAchievements[id])
    }
    
    
nvault_get(gVaultvaultkeyvaultdatacharsmax(vaultdata))
    
replace_all(vaultdatacharsmax(vaultdata), "#"" "
    
    new 
achievements[32], level[32]
    
parse(vaultdataachievementscharsmax(achievements)) 
    
    
TotalAchievements[id] = str_to_num(achievements)
    
iAchLevel[id][iAchPoints[id]] = str_to_num(level)

__________________

Last edited by Napoleon_be; 06-10-2012 at 09:04.
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
<VeCo>
Veteran Member
Join Date: Jul 2009
Location: Bulgaria
Old 06-10-2012 , 09:15   Re: nVault saving enum.
Reply With Quote #2

PHP Code:
for(new iiAchCounti++) { 
Or you can add another element after GlOCK (for example: MAX_ACHCOUNT) and make it like this:

PHP Code:
for(new iMAX_ACHCOUNTi++) { 
__________________

Last edited by <VeCo>; 06-10-2012 at 09:15.
<VeCo> is offline
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 06-10-2012 , 10:40   Re: nVault saving enum.
Reply With Quote #3

mhh okay thanks, could you please look at my LoadData, cuz i don't feel like safe with it.. I think there's something wrong at the loop and the: TotalAchievements[id] = str_to_num(achievements)
iAchLevel[id][iAchPoints[id]] = str_to_num(level)
__________________
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
claudiuhks
Yam Inside®™℠
Join Date: Jan 2010
Location: Living Randomly
Old 06-10-2012 , 10:48   Re: nVault saving enum.
Reply With Quote #4

Code is redundant.

Code:
enum {   WEAP_USP,   WEAP_AK47,   WEAP_LAST_DONT_USE_ME_LOL }; public SaveStats( iClient ) {   static cString[ 1024 ], i;   for( i = 0; i < WEAP_LAST_DONT_USE_ME_LOL; i++ )   {     add( cString, sizeof cString - 1, "%d", g_iKills[ iPlayer ][ i ] );     if( i != WEAP_LAST_DONT_USE_ME_LOL - 1 )       add( cString, sizeof cString - 1, " " );   } }

For loading, if there's a Vault and no a MySQL system, the only way to receive data you have is parse
__________________

Last edited by claudiuhks; 06-10-2012 at 10:49.
claudiuhks is offline
Send a message via MSN to claudiuhks Send a message via Yahoo to claudiuhks Send a message via Skype™ to claudiuhks
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 06-10-2012 , 10:55   Re: nVault saving enum.
Reply With Quote #5

Quote:
Originally Posted by claudiuhks View Post
Code is redundant.

Code:
enum { WEAP_USP, WEAP_AK47, WEAP_LAST_DONT_USE_ME_LOL }; public SaveStats( iClient ) { static cString[ 1024 ], i; for( i = 0; i < WEAP_LAST_DONT_USE_ME_LOL; i++ ) { add( cString, sizeof cString - 1, "%d", g_iKills[ iPlayer ][ i ] ); if( i != WEAP_LAST_DONT_USE_ME_LOL - 1 ) add( cString, sizeof cString - 1, " " ); } }


For loading, if there's a Vault and no a MySQL system, the only way to receive data you have is parse
This doesn't really help me... You're not even saving anything in that code...
__________________
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 06-10-2012 , 11:05   Re: nVault saving enum.
Reply With Quote #6

I recently did something similar for someone else, take a look here.

Also, you don't need to add an enum item to reference the count. Just use, in this case, iAchCount as <VeCo> said.

PHP Code:
enum _:iAchCount 
{
    
DIES,
    
SPRAYS,
    
KILLS,
    
CONNECT,
    
HEADSHOT,
    
KNIFE,
    
DISTANCE,
    
SURVIVE,
    
GRENADE,
    
USP,
    
GLOCK
}

for ( new 
DIES iAchCount i++ ) 
__________________
Bugsy is offline
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 06-10-2012 , 11:36   Re: nVault saving enum.
Reply With Quote #7

as far as i know, there's nothing wrong with my savedata, but my loaddata is wrong..

PHP Code:
public SaveData(id) {
    new 
SteamID[32]; get_user_authid(idSteamIDcharsmax(SteamID))
    new 
vaultkey[64], vaultdata[256
    
    
format(vaultkeycharsmax(vaultkey), "%s-AchievementSystem"SteamID)
    
    for(new 
iiAchCounti++) {
        
format(vaultdatacharsmax(vaultdata), "%i#%i#"iAchLevel[id][i], TotalAchievements[id])
    }
    
    
nvault_set(gVaultvaultkeyvaultdata)

Could someone please fix my loaddata?

PHP Code:
public LoadData(id) {
    new 
SteamID[35]; get_user_authid(idSteamIDcharsmax(SteamID)) 
    new 
vaultkey[64], vaultdata[256
    
    
format(vaultkeycharsmax(vaultkey), "%s-AchievementSystem"SteamID
    
    for(new 
iiAchCounti++) {
        
format(vaultdatacharsmax(vaultdata), "%i#%i#"iAchLevel[id][i], TotalAchievements[id])
    }
    
    
nvault_get(gVaultvaultkeyvaultdatacharsmax(vaultdata))
    
replace_all(vaultdatacharsmax(vaultdata), "#"" "
    
    new 
achievements[32], level[32]
    
parse(vaultdataachievementscharsmax(achievements)) 
    
    
TotalAchievements[id] = str_to_num(achievements)
    
iAchLevel[id][iAchPoints[id]] = str_to_num(level)

Edit: Made some logs aswell:

Code:
L 06/10/2012 - 17:48:20: [Achievements.amxx] Loaded: 0, 0
L 06/10/2012 - 17:48:20: [Achievements.amxx] Loaded: 0, 0
L 06/10/2012 - 17:48:20: [Achievements.amxx] Loaded: 0, 0
L 06/10/2012 - 17:48:20: [Achievements.amxx] Loaded: 0, 0
L 06/10/2012 - 17:48:20: [Achievements.amxx] Loaded: 0, 0
L 06/10/2012 - 17:48:20: [Achievements.amxx] Loaded: 0, 0
L 06/10/2012 - 17:48:20: [Achievements.amxx] Loaded: 0, 0
L 06/10/2012 - 17:48:20: [Achievements.amxx] Loaded: 0, 0
L 06/10/2012 - 17:48:20: [Achievements.amxx] Loaded: 0, 0
L 06/10/2012 - 17:48:20: [Achievements.amxx] Loaded: 0, 0
L 06/10/2012 - 17:48:20: [Achievements.amxx] Loaded: 0, 0
L 06/10/2012 - 17:48:38: [admincmd.amxx] Cmd: "NapoleoN#<2><STEAM_0:1:14177475><>" changelevel "de_dust2"
L 06/10/2012 - 17:48:40: [Achievements.amxx] Saved: 0, 0
L 06/10/2012 - 17:48:40: [Achievements.amxx] Saved: 1, 0
L 06/10/2012 - 17:48:40: [Achievements.amxx] Saved: 0, 0
L 06/10/2012 - 17:48:40: [Achievements.amxx] Saved: 1, 0
L 06/10/2012 - 17:48:40: [Achievements.amxx] Saved: 0, 0
L 06/10/2012 - 17:48:40: [Achievements.amxx] Saved: 0, 0
L 06/10/2012 - 17:48:40: [Achievements.amxx] Saved: 1, 0
L 06/10/2012 - 17:48:40: [Achievements.amxx] Saved: 0, 0
L 06/10/2012 - 17:48:40: [Achievements.amxx] Saved: 0, 0
L 06/10/2012 - 17:48:40: [Achievements.amxx] Saved: 0, 0
L 06/10/2012 - 17:48:40: [Achievements.amxx] Saved: 0, 0
It shows which achievements have been saved and loaded, but it shows there isn't loaded anything.. So i guess there's something wrong with the loading part
__________________

Last edited by Napoleon_be; 06-10-2012 at 11:51.
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 06-10-2012 , 11:59   Re: nVault saving enum.
Reply With Quote #8

Neither of your functions are correct. SaveData is only going to save the last iAchCount item. You are also saving TotalAchievements multiple times.

Try these:
PHP Code:
public SaveData(id
{
    new 
SteamID[32]; get_user_authid(idSteamIDcharsmax(SteamID))
    new 
vaultkey[64], vaultdata[256] , iPos 
    
    formatex
(vaultkeycharsmax(vaultkey), "%s-AchievementSystem"SteamID)
    
    
iPos num_to_strTotalAchievements[id] , vaultdata charsmaxvaultdata ) );
    
vaultdataiPos++ ] = ' ';
    
    for( new 
iiAchCounti++ ) 
    {
        
iPos += formatexvaultdataiPos ] , charsmax(vaultdata) - iPos"%i "iAchLevel[id][i] )
    }
    
    
nvault_set(gVaultvaultkeyvaultdata)
}  

public 
LoadData(id
{
    new 
SteamID[35]; get_user_authid(idSteamIDcharsmax(SteamID)) 
    new 
vaultkey[64], vaultdata[256] , szVal]; 
    
    
formatex(vaultkeycharsmax(vaultkey), "%s-AchievementSystem"SteamID
    
    
nvault_getgVault vaultkey vaultdata charsmaxvaultdata ) );

    
strbreakvaultdata szVal charsmaxszVal) , vaultdata charsmaxvaultdata ) );
    
    
TotalAchievementsid ] = str_to_numszVal );
    
    for( new 
iAchCount i++ ) 
    {
        
strbreak(vaultdataszVal charsmaxszVal) , vaultdata charsmaxvaultdata ) ) 
        
iAchLevelid ][ ] = str_to_numszVal );
    }

Tester plugin
PHP Code:
#include <amxmodx>
#include <nvault>

#define MaxPlayers 33

new TotalAchievements[33]
new 
gVault

enum _
:iAchCount {
    
DIES,
    
SPRAYS,
    
KILLS,
    
CONNECT,
    
HEADSHOT,
    
KNIFE,
    
DISTANCE,
    
SURVIVE,
    
GRENADE,
    
USP,
    
GLOCK
}


new 
iAchLevel[MaxPlayers][iAchCount]

public 
plugin_init() 
{
    
gVault nvault_open"TestVault123" );
    
    new 
id 3;
    
    
//Fill with dummy data (for SaveData testing only)
    
TotalAchievementsid ] = 9999;
    for( new 
iiAchCounti++ ) 
    {
        
iAchLevel[id][i] = i;
    }
    
    
// USE SAVEDATA FIRST THEN COMMENT IT OUT AND UNCOMMENT LOADDATA, RECOMPILE, AND RUN AGAIN
    
SaveDataid );
    
//LoadData( id );
    
    //You should see: 9999 0 1 2 3 4 5 6 7 8 9 10
    
server_print"%d %d %d %d %d %d %d %d %d %d %d %d" TotalAchievementsid ] ,
                                
iAchLevel[id][DIES] , 
                                
iAchLevel[id][SPRAYS] ,
                                
iAchLevel[id][KILLS] , 
                                
iAchLevel[id][CONNECT] , 
                                
iAchLevel[id][HEADSHOT] , 
                                
iAchLevel[id][KNIFE] , 
                                
iAchLevel[id][DISTANCE] , 
                                
iAchLevel[id][SURVIVE] , 
                                
iAchLevel[id][GRENADE] , 
                                
iAchLevel[id][USP] , 
                                
iAchLevel[id][GLOCK] );
}

public 
plugin_end() 
{
    
nvault_closegVault );
}

public 
SaveData(id
{
    new 
SteamID[32]; get_user_authid(idSteamIDcharsmax(SteamID))
    new 
vaultkey[64], vaultdata[256] , iPos 
    
    formatex
(vaultkeycharsmax(vaultkey), "%s-AchievementSystem"SteamID)
    
    
iPos num_to_strTotalAchievements[id] , vaultdata charsmaxvaultdata ) );
    
vaultdataiPos++ ] = ' ';
    
    for( new 
iiAchCounti++ ) 
    {
        
iPos += formatexvaultdataiPos ] , charsmax(vaultdata) - iPos"%i "iAchLevel[id][i] )
    }
    
    
nvault_set(gVaultvaultkeyvaultdata)
}  

public 
LoadData(id
{
    new 
SteamID[35]; get_user_authid(idSteamIDcharsmax(SteamID)) 
    new 
vaultkey[64], vaultdata[256] , szVal]; 
    
    
formatex(vaultkeycharsmax(vaultkey), "%s-AchievementSystem"SteamID
    
    
nvault_getgVault vaultkey vaultdata charsmaxvaultdata ) );

    
strbreakvaultdata szVal charsmaxszVal) , vaultdata charsmaxvaultdata ) );
    
    
TotalAchievementsid ] = str_to_numszVal );
    
    for( new 
iAchCount i++ ) 
    {
        
strbreak(vaultdataszVal charsmaxszVal) , vaultdata charsmaxvaultdata ) ) 
        
iAchLevelid ][ ] = str_to_numszVal );
    }

__________________

Last edited by Bugsy; 06-10-2012 at 12:05.
Bugsy is offline
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 06-10-2012 , 15:51   Re: nVault saving enum.
Reply With Quote #9

The tester plugin isn't showing anything... Shouldn't i place a set_task since the player is connected later than the plugin is loaded in the server?

EDIT: Never mind, the tester works, but the other code doesn't, i'll try to fix it myself using the tester plugin, if i can't find a solution, i'll be back here.
__________________

Last edited by Napoleon_be; 06-10-2012 at 15:54.
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 06-11-2012 , 13:28   Re: nVault saving enum.
Reply With Quote #10

Can't figure out how to get this to work... I achieve an achievement, 5 seconds after that, i change map to de_dust2 and it isn't saved or loaded.
__________________
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 13:20.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode