From 579959a98de0ac5aa143f431b63432b4cb37c9da Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Fri, 13 Jul 2012 13:42:19 +0000 Subject: [PATCH] Save Slots! People can now have separate save slots for different character setups, with a customizable maximum of 3 slots per account. Since the preference files are now numbered and named differently I made it detect old saves, when a player loads a save file, so it can rename it. Basically, everything should be saved still. Character Setup UI change. I changed the layout of the character screen to not require scrolling. Screenshot 1: http://i.imgur.com/xPAzn.png Screenshot 2: http://i.imgur.com/iBKJ6.png I've made the limit variable in the All-In-One grinder actually do something. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4058 316c924e-a436-60f5-8080-3fe189b3f50e --- code/modules/chemical/Chemistry-Machinery.dm | 4 +- code/modules/client/client defines.dm | 1 + code/modules/mob/new_player/preferences.dm | 74 ++++++++++++++------ code/modules/mob/new_player/savefile.dm | 22 +++++- html/changelog.html | 5 ++ 5 files changed, 80 insertions(+), 26 deletions(-) diff --git a/code/modules/chemical/Chemistry-Machinery.dm b/code/modules/chemical/Chemistry-Machinery.dm index 041cc172f9..8e49344f5a 100644 --- a/code/modules/chemical/Chemistry-Machinery.dm +++ b/code/modules/chemical/Chemistry-Machinery.dm @@ -745,10 +745,10 @@ O.contents -= G G.loc = src holdingitems += G - if((holdingitems && holdingitems.len >= 10) || beaker.reagents.total_volume >= 80) //Sanity checking so the blender doesn't overfill + if((holdingitems && holdingitems.len >= limit) || beaker.reagents.total_volume >= 80) //Sanity checking so the blender doesn't overfill user << "You fill the All-In-One grinder to the brim." break - if(src.contents.len < 10 && src.reagents.total_volume < 80) + if(src.contents.len < limit && src.reagents.total_volume < 80) user << "You empty the plant bag into the All-In-One grinder." src.updateUsrDialog() diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index f267a6bd76..e53d753695 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -38,6 +38,7 @@ var/be_pai = 1 //Consider client when searching for players to recruit as a pAI var/vote = null var/showvote = null + var/activeslot = 1 //Default active slot! var/STFU_ghosts //80+ people rounds are fun to admin when text flies faster than airport security var/STFU_radio //80+ people rounds are fun to admin when text flies faster than airport security diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm index 008d9f2ac1..f68eb10f78 100644 --- a/code/modules/mob/new_player/preferences.dm +++ b/code/modules/mob/new_player/preferences.dm @@ -29,10 +29,11 @@ var/const/BE_CULTIST =(1<<8) var/const/BE_MONKEY =(1<<9) - +var/const/MAX_SAVE_SLOTS = 3 datum/preferences + var/real_name var/be_random_name = 0 var/gender = MALE @@ -122,7 +123,28 @@ datum/preferences update_preview_icon() user << browse_rsc(preview_icon_front, "previewicon.png") user << browse_rsc(preview_icon_side, "previewicon2.png") - var/dat = "" + var/dat = "
" + + + if(!IsGuestKey(user.key)) + var/list/saves = list() + for(var/i = 1; i <= MAX_SAVE_SLOTS; i += 1) + saves += "Save Slot [i]" + + for(var/i = 1; i <= MAX_SAVE_SLOTS; i += 1) + if(i == user.client.activeslot) + dat += "Save Slot [i]" + else + dat += "[saves[i]]" + + if(i != MAX_SAVE_SLOTS) + dat += " / " + + else + dat += "Please create an account to save your preferences." + + dat += "

" + dat += "Name: " dat += "[real_name] " dat += "(®) " @@ -142,17 +164,17 @@ datum/preferences dat += "OOC Notes: Edit
" if((user.client) && (user.client.holder) && (user.client.holder.rank)) - dat += "
Adminhelp sound: " - dat += "[(sound_adminhelp)?"On":"Off"] toggle" + dat += "Adminhelp sound: " + dat += "[(sound_adminhelp)?"On":"Off"] toggle
" if(user.client.holder.level >= 5) - dat += "
OOC
" - dat += "Change color
__
" + dat += "
OOC
" + dat += "Change color
__

" - dat += "
Occupation Choices
" + dat += "
Occupation Choices
" dat += "\tSet Preferences
" - dat += "
Body " + dat += "
Body " dat += "(®)" // Random look dat += "
" dat += "Blood Type: [b_type]
" @@ -168,22 +190,24 @@ datum/preferences dat += "
Preview
" //Carn: Now with profile! - dat += "
Hair
" + dat += "
" + + dat += "
Hair
" dat += "Change Color
__
" - dat += "Style: [h_style]" + dat += "Style: [h_style]
" - dat += "
Facial
" + dat += "
Facial
" dat += "Change Color
__
" - dat += "Style: [f_style]" + dat += "Style: [f_style]
" - dat += "
Eyes
" + dat += "
Eyes
" dat += "Change Color
__
" - dat += "
" + dat += "

" if(jobban_isbanned(user, "Syndicate")) dat += "You are banned from antagonist roles." src.be_special = 0 @@ -199,16 +223,16 @@ datum/preferences else dat += "Be [i]: [src.be_special&(1<
" n++ - dat += "
" + dat += "

" if(!IsGuestKey(user.key)) - dat += "Load Setup
" - dat += "Save Setup
" + dat += "Undo - " + dat += "Save Setup - " - dat += "Reset Setup
" - dat += "" + dat += "Reset Setup" + dat += "
" - user << browse(dat, "window=preferences;size=300x710") + user << browse(dat, "window=preferences;size=550x545") proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), width = 550, height = 500) //limit - The amount of jobs allowed per column. Defaults to 17 to make it look nice. @@ -640,8 +664,14 @@ datum/preferences savefile_save(user) else if(link_tags["load"]) - if(!savefile_load(user, 0)) - alert(user, "You do not have a savefile.") + if(!savefile_load(user)) + alert(user, "You do not have a savefile or a convertable savefile.") + + else if(link_tags["changeslot"]) + savefile_save(user) + user.client.activeslot = text2num(link_tags["changeslot"]) + savefile_load(user) + if(link_tags["reset_all"]) gender = MALE diff --git a/code/modules/mob/new_player/savefile.dm b/code/modules/mob/new_player/savefile.dm index e447928818..92c846cd05 100644 --- a/code/modules/mob/new_player/savefile.dm +++ b/code/modules/mob/new_player/savefile.dm @@ -2,7 +2,10 @@ #define SAVEFILE_VERSION_MAX 7 datum/preferences/proc/savefile_path(mob/user) - return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/preferences.sav" + if(!user.client) + return null + else + return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/preferences[user.client.activeslot].sav" datum/preferences/proc/savefile_save(mob/user) if (IsGuestKey(user.key)) @@ -81,7 +84,22 @@ datum/preferences/proc/savefile_load(mob/user) if(IsGuestKey(user.key)) return 0 var/path = savefile_path(user) - if(!fexists(path)) return 0 + + if(!fexists(path)) + //Is there a preference file before this was committed? + path = "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/preferences.sav" + if(!fexists(path)) + //No there is not + return 0 + else + //Yes there is. Let's rename it. + var/savefile/oldsave = new/savefile(path) + fcopy(oldsave, savefile_path(user)) + fdel(path) // We don't need the old file anymore + path = savefile_path(user) + // Did nothing break? + if(!fexists(path)) + return 0 var/savefile/F = new /savefile(path) diff --git a/html/changelog.html b/html/changelog.html index ee8373d850..ecf15b083b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,11 @@ should be listed in the changelog upon commit tho. Thanks. -->
  • Added FLOORLENGTH HAIR. YEESSSSSSSS!!!! :3 If you like it say thanks to Ausops for fixing it up. Credits to Powerfulstation for the original sprite.
+

Giacom updated:

+
    +
  • Save Slots! You can now have separate save slots for different character setups, with a customizable maximum of 3 slots per account. If you are wondering, you will not lose your old saved setup.
  • +
  • The character setup screen was updated to look nicer and to fit on the screen.
  • +