HHHEEEEEEEEELLLLP!!!!!!!!!!!!!!!!!!!!!!!! in Developer Help
|
|
I need help on how to give my New players verbs when they create a player. not when they log in.
I AM USING THIS SAVING SYSTEM!!!!!
#include
#define BASE_MENU_CREATE_CHARACTER "Create New Character"
#define BASE_MENU_DELETE_CHARACTER "Delete Character"
#define BASE_MENU_CANCEL "Cancel"
#define BASE_MENU_QUIT "Quit"
// Implementation
client/var/tmp
base_num_characters_allowed = 1
base_autoload_character = 1
base_autosave_character = 1
base_autodelete_mob = 1
base_save_verbs = 1
mob
var/tmp/base_save_allowed = 1 // Is this mob allowed to be saved?
var/list/base_saved_verbs // If we're saving verbs they are stored here.
proc/base_InitFromSavefile()
return
mob/BaseCamp
base_save_allowed = 0 // BaseCamp mobs are for admin only.
Login()
RemoveVerbs()
return
Stat()
return
Logout()
return
proc/RemoveVerbs()
for (var/my_verb in verbs)
verbs -= my_verb
mob/BaseCamp/FirstTimePlayer
proc/FirstTimePlayer()
return 1
mob/BaseCamp/ChoosingCharacter
Login()
// spawn to make sure all administrative tasks are over.
spawn()
ChooseCharacter()
return ..()
proc/ChooseCharacter()
var/list/available_char_names = client.base_CharacterNames()
var/list/menu = new()
menu += available_char_names
if (length(available_char_names) < client.base_num_characters_allowed)
if (client.base_num_characters_allowed == 1)
// If only one character allowed, jump right to creating character.
client.base_NewMob()
del(src)
return
else
menu += BASE_MENU_CREATE_CHARACTER
if (length(available_char_names))
menu += BASE_MENU_DELETE_CHARACTER
menu += BASE_MENU_QUIT
var/default = null
var/result = input(src, "Who do you want to be today?", "Welcome to [world.name]!", default) in menu
switch(result)
if (0, BASE_MENU_QUIT)
// Kick them off.
del(src)
return
if (BASE_MENU_CREATE_CHARACTER)
client.base_NewMob()
del(src)
return
if (BASE_MENU_DELETE_CHARACTER)
// Give them a chance to delete something, but then they need to choose.
DeleteCharacter()
ChooseCharacter()
return
// They must have chosen a character, so load it.
var/mob/Mob = client.base_LoadMob(result)
if (Mob)
del(src)
else
ChooseCharacter()
proc/DeleteCharacter()
var/list/available_char_names = client.base_CharacterNames()
var/list/menu = new()
menu += available_char_names
menu += BASE_MENU_CANCEL
menu += BASE_MENU_QUIT
var/default = null
var/result = input(src, "Which character do you want to delete?", "Deleting character", default) in menu
switch(result)
if (0, BASE_MENU_QUIT)
// Kick them off.
del(src)
return
if (BASE_MENU_CANCEL)
return
// They chose a character to delete.
client.base_DeleteMob(result)
ChooseCharacter()
return
client
var/tmp/savefile/_base_player_savefile
New()
// Let them choose/create a character.
if (base_autoload_character)
base_ChooseCharacter()
base_Initialize()
return
return ..()
Del()
// Save character.
if (base_autosave_character)
base_SaveMob()
// Delete mob.
if (base_autodelete_mob)
del(mob)
return ..()
proc/base_PlayerSavefile()
if (!_base_player_savefile)
// Put in players/[first_initial]/[ckey].sav
var/start = 1
var/end = 2
var/first_initial = copytext(ckey, start, end)
var/filename = "players/[first_initial]/[ckey].sav"
_base_player_savefile = new(filename)
return _base_player_savefile
proc/base_FirstTimePlayer()
var/mob/BaseCamp/FirstTimePlayer/first_mob = new()
first_mob.name = key
first_mob.gender = gender
mob = first_mob
return first_mob.FirstTimePlayer()
proc/base_ChooseCharacter()
// Switches the player to a choosing character mob.
// In case switching in middle of game, save previous mob.
base_SaveMob()
var/mob/BaseCamp/ChoosingCharacter/chooser
// Do they have any characters to choose from?
var/list/names = base_CharacterNames()
if (!length(names))
// They must be a first time player.
var/result = base_FirstTimePlayer()
if (!result)
// They weren't approved, so boot 'em.
del(src)
return
// Okay let them create their first character.
chooser = new()
mob = chooser
return
// If only one character is allowed, try to just load it.
if (base_num_characters_allowed == 1)
base_LoadMob(names[1])
return
chooser = new()
mob = chooser
return
proc/base_CharacterNames()
// Get the full names of all this player's characters.
var/list/names = new()
var/savefile/F = base_PlayerSavefile()
F.cd = "/players/[ckey]/mobs/"
var/list/characters = F.dir
var/char_name
for (var/entry in characters)
F["[entry]/name"] >> char_name
names += char_name
return names
proc/base_NewMob()
// Give the player a standard mob.
// First save existing mob if necessary.
base_SaveMob()
var/mob/new_mob
new_mob = new world.mob()
new_mob.name = key
new_mob.gender = gender
mob = new_mob
// new_mob.base_Initialize()
// Clear out the savefile to keep it from staying open.
_base_player_savefile = null
return new_mob
proc/base_SaveMob()
// Saves the player's current mob based on the ckey of its name.
if (!mob || !mob.base_save_allowed)
return
// If we're saving verbs, move them over now.
if (base_save_verbs)
mob.base_saved_verbs = mob.verbs
var/savefile/F = base_PlayerSavefile()
var/mob_ckey = ckey(mob.name)
var/directory = "/players/[ckey]/mobs/[mob_ckey]"
F.cd = directory
F["name"] << mob.name
F["mob"] << mob
_base_player_savefile = null
proc/base_LoadMob(char_name)
// Look for a character with the ckey version of this name.
// If found, load it, set the client mob to it, and return it.
// Otherwise return null.
var/mob/new_mob
var/char_ckey = ckey(char_name)
var/savefile/F = base_PlayerSavefile()
_base_player_savefile = null
F.cd = "/players/[ckey]/mobs/"
var/list/characters = F.dir
if (!characters.Find(char_ckey))
world.log << "[key]'s client.LoadCharacter() could not locate character [char_name]."
mob << "Unable to load [char_name]."
return null
F["[char_ckey]/mob"] >> new_mob
if (new_mob)
mob = new_mob
new_mob.base_InitFromSavefile()
// If we're doing verbs, set them now.
if (base_save_verbs && new_mob.base_saved_verbs)
for (var/item in new_mob.base_saved_verbs)
new_mob.verbs += item
return new_mob
return null
proc/base_DeleteMob(char_name)
// Look for a character with the ckey version of this name.
// If found, delete it.
var/char_ckey = ckey(char_name)
var/savefile/F = base_PlayerSavefile()
F.cd = "/players/[ckey]/mobs/"
F.dir.Remove(char_ckey)
</<></<>
|