Added multiple character slots!

This commit is contained in:
Tastyfish
2011-11-29 19:32:07 -05:00
parent 26093c367e
commit 719002dbee
3 changed files with 164 additions and 16 deletions
+2 -2
View File
@@ -34,7 +34,7 @@
if(watch_locations.len>0)
loc = pick(watch_locations)
if(!preferences.savefile_load(src, 0))
if(!preferences.savefile_load(src, 1))
preferences.ShowChoices(src)
if(!client.changes)
changes()
@@ -43,7 +43,7 @@
if(!client.changes && preferences.lastchangelog!=lastchangelog)
changes()
preferences.lastchangelog = lastchangelog
preferences.savefile_save(src)
preferences.savefile_save(src, 1)
new_player_panel()
//PDA Resource Initialisation =======================================================>
+66 -7
View File
@@ -102,6 +102,9 @@ datum/preferences
job_engsec_med = 0
job_engsec_low = 0
// slot stuff
var/slotname
var/curslot = 0
New()
hair_style = new/datum/sprite_accessory/hair/short
@@ -172,14 +175,32 @@ datum/preferences
src.be_special = 0
dat += "<hr>"
if(!IsGuestKey(user.key))
dat += "<a href='byond://?src=\ref[user];preferences=1;load=1'>Load Setup</a><br>"
dat += "<a href='byond://?src=\ref[user];preferences=1;save=1'>Save Setup</a><br>"
// slot options
if (!IsGuestKey(user.key))
if(!curslot)
dat += "<a href='byond://?src=\ref[user];preferences=1;saveslot=1'>Save Slot 1</a><br>"
else
dat += "<a href='byond://?src=\ref[user];preferences=1;saveslot=[curslot]'>Save Slot [curslot]</a><br>"
dat += "<a href='byond://?src=\ref[user];preferences=1;loadslot2=1'>Load</a><br>"
dat += "<a href='byond://?src=\ref[user];preferences=1;createslot=1'>Create New Slot</a><br>"
dat += "<a href='byond://?src=\ref[user];preferences=1;reset_all=1'>Reset Setup</a><br>"
dat += "</body></html>"
user << browse(dat, "window=preferences;size=300x710")
proc/loadsave(mob/user)
var/dat = "<body>"
dat += "<tt><center>"
var/list/slots = savefile_getslots(user)
for(var/slot=1, slot<=slots.len, slot++)
dat += "<a href='byond://?src=\ref[user];preferences=1;loadslot=[slot]'>Load Slot [slot] ([slots[slot]]) </a><a href='byond://?src=\ref[user];preferences=1;removeslot=[slot]'>(R)</a><br><br>"
dat += "<a href='byond://?src=\ref[user];preferences=1;loadslot=CLOSE'>Close</a><br>"
dat += "</center></tt>"
user << browse(dat, "window=saves;size=300x640")
proc/closesave(mob/user)
user << browse(null, "window=saves;size=300x640")
proc/SetChoices(mob/user, changedjob)
var/HTML = "<body>"
@@ -536,13 +557,51 @@ datum/preferences
if(link_tags["b_random_name"])
be_random_name = !be_random_name
// slot links
if(!IsGuestKey(user.key))
if(link_tags["save"])
savefile_save(user)
if(link_tags["saveslot"])
var/slot = text2num(link_tags["saveslot"])
else if(link_tags["load"])
if(!savefile_load(user, 0))
savefile_save(user, slot)
else if(link_tags["loadslot"])
var/slot = text2num(link_tags["loadslot"])
if(slot == "CLOSE")
closesave(user)
return
if(!savefile_load(user, slot))
alert(user, "You do not have a savefile.")
else
curslot = slot
loadsave(user)
if(link_tags["removeslot"])
var/slot = text2num(link_tags["removeslot"])
if(!slot)
return
savefile_removeslot(user, slot)
usr << "Slot [slot] Deleted."
slot = 1
loadsave(usr)
if(link_tags["loadslot2"])
loadsave(user)
if(link_tags["createslot"])
var/list/slots = savefile_getslots(user)
var/count = slots.len
count++
if(count > 10)
usr << "You have reached the character limit."
return
var/slotname = input(usr,"Choose a name for your slot","Name","Default")
savefile_createslot(user, slotname)
if(!savefile_load(user, count))
alert(user, "You do not have a savefile.")
else
curslot = count
closesave(user)
if(link_tags["reset_all"])
gender = MALE
+96 -7
View File
@@ -4,16 +4,94 @@
datum/preferences/proc/savefile_path(mob/user)
return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/preferences.sav"
datum/preferences/proc/savefile_save(mob/user)
datum/preferences/proc/savefile_getslots(mob/user)
if(IsGuestKey(user.key))
return new/list()
var/path = savefile_path(user)
if(!fexists(path))
return new/list()
var/list/slots = new()
var/savefile/F = new(path)
// slot 1
slots.Add(F["slotname"] ? F["slotname"] : "Default") // allow old prefs saves to be loaded as slot 1
// slots 2 - len
for(var/slot=2, slot<=F.dir.len, slot++)
var/dname = F.dir[slot]
if(copytext(dname, 1, 6) == "slot.")
slots.Add(copytext(dname, 6))
return slots
datum/preferences/proc/savefile_createslot(mob/user, slotname)
if(IsGuestKey(user.key))
return
var/path = savefile_path(user)
if(!fexists(path))
return
var/savefile/F = new(path)
// 1st?
if(!F["real_name"])
F["slotname"] = "Default"
randomize_name()
else
F.dir.Add("slot." + slotname)
var/list/slots = savefile_getslots(user)
savefile_save(user, slots.len)
datum/preferences/proc/savefile_removeslot(mob/user, slot)
if(IsGuestKey(user.key))
return
var/path = savefile_path(user)
if(!fexists(path))
return
var/list/slots = savefile_getslots(user)
if(slot > 1)
var/savefile/F = new(path)
F.dir.Remove("slot." + slots[slot])
else if(slots.len >= 2)
// otherwise, we're deleting slot 1, and must move slot 2 to slot 1
savefile_load(user, 2)
savefile_save(user, 1)
var/savefile/F = new(path)
F["slotname"] = slots[2] // slot 1's name <- slot 2's name
F.dir.Remove("slot." + slots[2])
else
// otherwise, we're wiping the last save (slot 1)
// actually no, that makes unintuitive, weird things happen
//F["slotname"] = null
//F["real_name"] = null
user << "You must have at least one slot!"
datum/preferences/proc/savefile_save(mob/user, slot)
if (IsGuestKey(user.key))
return 0
var/savefile/F = new /savefile(src.savefile_path(user))
// var/version
// F["version"] >> version
var/list/slots = savefile_getslots(user)
var/savefile/F = new(savefile_path(user))
// var/version
// F["version"] >> version
F["version"] << SAVEFILE_VERSION_MAX
// make this compatible with old single-slot system, making slot 1 be in root
if(slot != 1)
if(slots.len < slot)
return 0
F.cd = "slot." + slots[slot]
F["real_name"] << src.real_name
F["name_is_always_random"] << src.be_random_name
@@ -62,13 +140,15 @@ datum/preferences/proc/savefile_save(mob/user)
// returns 1 if loaded (or file was incompatible)
// returns 0 if savefile did not exist
datum/preferences/proc/savefile_load(mob/user)
datum/preferences/proc/savefile_load(mob/user, slot)
if(IsGuestKey(user.key)) return 0
var/path = savefile_path(user)
if(!fexists(path)) return 0
if(!fexists(path))
// make it then!
savefile_save(user, slot)
var/savefile/F = new /savefile(path)
var/savefile/F = new(path)
var/version = null
F["version"] >> version
@@ -78,6 +158,15 @@ datum/preferences/proc/savefile_load(mob/user)
alert(user, "Your savefile was incompatible with this version and was deleted.")
return 0
// make this compatible with old single-slot system, making slot 1 be in root
if(slot == 0)
return 0
if(slot != 1)
var/list/slots = savefile_getslots(user)
if(slots.len < slot)
return 0
F.cd = "slot." + slots[slot]
F["real_name"] >> src.real_name
F["gender"] >> src.gender
F["age"] >> src.age