client/proc/SaveMob()
var/savefile/F = new("players.sav")
var/char_ckey = ckey(mob.name)
F["[ckey]/[char_ckey]"] << mob
client/proc/LoadMob(char_ckey)
var/savefile/F = new("players.sav")
F["[ckey]/[char_ckey]"] >> mob
mob/player/Login()
var/savefile/F = new("players.sav")
// What characters does this player have?
F.cd = "/[ckey]"
var/list/characters = F.dir
// Put together the menu options.
var/newCharacterChoice = "<Create new character>"
var/list/menu = new()
menu += characters
menu += newCharacterChoice
// Find out which character they want to play.
var/result = input("Choose a character or create a new one", "Who do you want to be today?") in menu
if (result == newCharacterChoice)
name = CreateNewCharacter()
else
// We need to get the full name for this character,
// which is stored in the safefile at '/player_ckey/character_ckey/full_name'.
F.cd = "/[ckey]/[result]"
F["full_name"] >> name
client.LoadMob(result)
return ..()
mob/player/proc
CreateNewCharacter()
var/char_name = input("What is the character's name?", "New character") as text
SaveCharacter(char_name)
return char_name
SaveCharacter(char_name)
var/savefile/F = new("players.sav")
// Get the ckey() version of the name to avoid illegal characters for a directory name.
var/safe_name = ckey(char_name)
// Move to the directory for this character, which is:
// /player_ckey/character_ckey
F.cd = "/[ckey]/[safe_name]"
// Storing the actual name as a value (not a directory), so we don't have to worry about what characters it has.
F["full_name"] << char_name
mob/player
verb
Save()
client.SaveMob()
P.S. It's a runtime error:
runtime error: Cannot execute null.SaveMob().
proc name: Save (/mob/player/verb/Save)
usr: Nova (/mob/player)
src: Nova (/mob/player)
call stack:
Nova (/mob/player): Save()