Veteran Member
Join Date: Jul 2011
Location: Belgium
|
06-10-2012
, 08:53
nVault saving enum.
|
#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(id, Achievements)
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(id, Achievements) { new iPlayer = get_param(1) TotalAchievements[iPlayer] = max(0, get_param(2)) return TotalAchievements[iPlayer] }
public plugin_precache() { precache_sound(szAchievementSound) }
public TerrorWins() { new players[32], count get_players(players, count, "ae", "TERRORIST") if(count == 1) { new id = players[0] iAchLevel[id][SURVIVE]++ if(iAchLevel[id][SURVIVE] == 100) { TotalAchievements[id]++ ColorChat(id, GREEN, "[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(id, GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Addict!") emit_sound(id, CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM) }
public eDeath() { new iClip, iAmmo, iWeapon = get_user_weapon(read_data(1), iClip, iAmmo) 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_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_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_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_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_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_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_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_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_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_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_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_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_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_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_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM) } } }
public Cmd_ShowAchievements(id) { new szTemp[500 char] formatex(szTemp, charsmax(szTemp), "JailBreak Achievements Menu^nTotal Achievements: \r%i/%i", TotalAchievements[id], iTotalAchievements) new menu = menu_create(szTemp, "Ach_Handler") formatex(szTemp, charsmax(szTemp), "Anti-GodMode! \r%i/%i", iAchLevel[id][DIES], iAchPoints[DIES]) menu_additem(menu, szTemp, "1") formatex(szTemp, charsmax(szTemp), "Graffity Gangster! \r%i/%i", iAchLevel[id][SPRAYS], iAchPoints[SPRAYS]) menu_additem(menu, szTemp, "2") formatex(szTemp, charsmax(szTemp), "Prison Breaker! \r%i/%i", iAchLevel[id][KILLS], iAchPoints[KILLS]) menu_additem(menu, szTemp, "3") formatex(szTemp, charsmax(szTemp), "Addict! \r%i/%i", iAchLevel[id][CONNECT], iAchPoints[CONNECT]) menu_additem(menu, szTemp, "4") formatex(szTemp, charsmax(szTemp), "HeadzHunterz! \r%i/%i", iAchLevel[id][HEADSHOT], iAchPoints[HEADSHOT]) menu_additem(menu, szTemp, "5") formatex(szTemp, charsmax(szTemp), "The Butcher! \r%i/%i", iAchLevel[id][KNIFE], iAchPoints[KNIFE]) menu_additem(menu, szTemp, "6") formatex(szTemp, charsmax(szTemp), "Sprinter! \r%i/%i", iAchLevel[id][DISTANCE], iAchPoints[DISTANCE]) menu_additem(menu, szTemp, "7") formatex(szTemp, charsmax(szTemp), "Survivor! \r%i/%i", iAchLevel[id][SURVIVE], iAchPoints[SURVIVE]) menu_additem(menu, szTemp, "8") formatex(szTemp, charsmax(szTemp), "Grenadier! \r%i/%i", iAchLevel[id][GRENADE], iAchPoints[GRENADE]) menu_additem(menu, szTemp, "9") formatex(szTemp, charsmax(szTemp), "Officer! \r%i/%i", iAchLevel[id][USP], iAchPoints[USP]) menu_additem(menu, szTemp, "10") formatex(szTemp, charsmax(szTemp), "Glocker! \r%i/%i", iAchLevel[id][GLOCK], iAchPoints[GLOCK]) menu_additem(menu, szTemp, "11") menu_display(id, menu) }
public Ach_Handler(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu) return PLUGIN_HANDLED } switch(item) { case 0: { ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 deaths to unlock this^4 Achievement!", iAchPoints[DIES]) ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][DIES], iAchPoints[DIES]) } case 1: { ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 sprays to unlock this^4 Achievement!", iAchPoints[SPRAYS]) ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][SPRAYS], iAchPoints[SPRAYS]) } case 2: { ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 kills to unlock this^4 Achievement!", iAchPoints[KILLS]) ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][KILLS], iAchPoints[KILLS]) } case 3: { ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 connects to unlock this^4 Achievement!", iAchPoints[CONNECT]) ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][CONNECT], iAchPoints[CONNECT]) } case 4: { ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 headshots to unlock this^4 Achievement!", iAchPoints[HEADSHOT]) ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][HEADSHOT], iAchPoints[HEADSHOT]) } case 5: { ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 knife kills to unlock this^4 Achievement!", iAchPoints[KNIFE]) ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][KNIFE], iAchPoints[KNIFE]) } case 6: { new Float:footsteps = flDistance[id] / g_iFeet ColorChat(id, GREEN, "[Achievements]^1 Reach^3 52800^1 footsteps to unlock this achievement!") ColorChat(id, GREEN, "[Achievements]^3 %f/52800.", footsteps) } case 7: { ColorChat(id, GREEN, "[Achievements]^1 Survive^3 %i^1 rounds to unlock this achievement!", iAchPoints[SURVIVE]) ColorChat(id, GREEN, "[Achievements]^1 %i/%i.", iAchLevel[id][SURVIVE], iAchPoints[SURVIVE]) } case 8: { ColorChat(id, GREEN, "[Achievements]^1 Kill^3 %i^1 ct's with a he grende to unlock this achievement!", iAchPoints[GRENADE]) ColorChat(id, GREEN, "[Achievements]^1 %i/%i.", iAchLevel[id][GRENADE], iAchPoints[GRENADE]) } case 9: { ColorChat(id, GREEN, "[Achievements]^1 Kill^3 %i^1 ct's with a USP to unlock this achievement!", iAchPoints[USP]) ColorChat(id, GREEN, "[Achievements]^1 %i/%i.", iAchLevel[id][USP], iAchPoints[USP]) } case 10: { ColorChat(id, GREEN, "[Achievements]^1 Kill^3 %i^1 ct's with a Glock18 to unlock this achievement!", iAchPoints[GLOCK]) ColorChat(id, GREEN, "[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[ 3 ] entity_get_vector( id, EV_VEC_origin, vecOrigin ) if(!xs_vec_equal(vecOldOrigin[id], vecNullOrigin)) { flDistance[id] += get_distance_f(vecOrigin, vecOldOrigin[id]) } xs_vec_copy(vecOrigin, vecOldOrigin[id]) switch(iAchLevel[id][DISTANCE]) { case 0: { if(flDistance[id] / g_iFeet >= 1) { iAchLevel[id][DISTANCE]++ ColorChat(id, GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Baby Footsteps!") emit_sound(id, CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM ) } } case 1: { if(flDistance[id] / g_iFeet >= 5280) { iAchLevel[id][DISTANCE]++ ColorChat(id, GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Walk Away!") emit_sound(id, CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM ) } } case 2: { if(flDistance[id] / g_iFeet >= 52800) { iAchLevel[id][DISTANCE]++ TotalAchievements[id]++ ColorChat(id, GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Sprinter!") emit_sound(id, CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_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(id, SteamID, charsmax(SteamID)) new vaultkey[64], vaultdata[256] format(vaultkey, charsmax(vaultkey), "%s-AchievementSystem", SteamID) for(new i; i < sizeof(iAchPoints); i++) { format(vaultdata, charsmax(vaultdata), "%i#%i#", iAchLevel[id][i], TotalAchievements[id]) } nvault_set(gVault, vaultkey, vaultdata) }
public LoadData(id) { new SteamID[35]; get_user_authid(id, SteamID, charsmax(SteamID)) new vaultkey[64], vaultdata[256] format(vaultkey, charsmax(vaultkey), "%s-AchievementSystem", SteamID) for(new i; i < sizeof(iAchPoints); i++) { format(vaultdata, charsmax(vaultdata), "%i#%i#", iAchLevel[id][i], TotalAchievements[id]) } nvault_get(gVault, vaultkey, vaultdata, charsmax(vaultdata)) replace_all(vaultdata, charsmax(vaultdata), "#", " ") new achievements[32], level[32] parse(vaultdata, achievements, charsmax(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.
|
|