ID:2463560
 
(See the best response by Popisfizzy.)
Code:
mob
player
Login()
SaveFile.cd = "/"
if(ckey in SaveFile.dir)
SaveFile.cd = ckey
Read(SaveFile)
usr << "Welcome to Living Your Best Life Simulator 3.2!"
else
var/savefile/F = new(ckey)
Write(F)
src.Move(locate(/mob/create_character))


Problem description:
Login.dm:126:error: bad argument definition

Line 26 is below usr.Move. If it's relevant, there is a load/save overwrite for location on Logout().


Edits: to show a different thing I tried.
Best response
The problem is that everything under Login() should be indented by one more tab. Nevertheless, there's some other, less-obvious problems with this code that also need resolved. I would advise reading the DM guide.
I have been reading the DM Guide extensively.

Let's take it back to basics because that is my skill level!

I used the DM Guide to begin my load/save adventure. The bad argument error simply masked a whole bunch of other errors, which all began when following the DM Guide tutorial for save/load. The majority of the errors refer to DM not recognizing SaveFile - but it's supposed to be an object in DM already.

Does it require further definition?
mob
step_size = 8
layer = 2
var
stat
Rank
Health
Strength
Dexterity
Endurance
Wisdom
New()
Rank = new("E")
Health = new(100)
Strength = new(5)
Dexterity = new(5)
Endurance = new(5)
Wisdom = new(5)
Stat()
statpanel("Inventory")
stat(src)
stat(src.contents)
statpanel("Stats")
stat("Rank", Rank.ToText())
stat("Health", Health.ToText())
stat("Strength", Strength.ToText())
stat("Dexterity", Dexterity.ToText())
stat("Endurance", Endurance.ToText())
stat("Widsom", Wisdom.ToText())
statpanel("Skills")

create_character
var/mob/character
Login()
var/charactername = input("Who goes there? Name yourself.","Name",src.key)
switch(input("How do you identify?","Gender") in list ("Female", "Male","Non-Binary"))
if("Female")
switch(input("Which option describes your appearance?","Appearance") in list ("Ghostly","Pale","Light","Milk Chocolate","Dark Chocolate"))
if("Ghostly")
character = new /mob/player/female/ghostly()
if("Pale")
character = new /mob/player/female/pale()
if("Light")
character = new /mob/player/female/light()
if("Milk Chocolate")
character = new /mob/player/female/milkc()
if("Dark Chocolate")
character = new /mob/player/female/dkc()
if("Male")
switch(input("Which option describes your appearance?","Appearance") in list ("Ghostly","Pale","Light","Milk Chocolate","Dark Chocolate"))
if("Ghostly")
character = new /mob/player/male/ghostly()
if("Pale")
character = new /mob/player/male/pale()
if("Light")
character = new /mob/player/male/light()
if("Milk Chocolate")
character = new /mob/player/male/milkc()
if("Dark Chocolate")
character = new /mob/player/male/dkc()
if("Non-Binary")
switch(input("Which option describes your appearance?","Appearance") in list ("Ghostly","Pale","Light","Milk Chocolate","Dark Chocolate"))
if("Ghostly")
character = new /mob/player/nonbinary/ghostly()
if("Pale")
character = new /mob/player/nonbinary/pale()
if("Light")
character = new /mob/player/nonbinary/light()
if("Milk Chocolate")
character = new /mob/player/nonbinary/milkc()
if("Dark Chocolate")
character = new /mob/player/nonbinary/dkc()
character.name = charactername
character.loc = locate(/turf/start)
src.client.mob = character
del(src)


I have tried adding 1 million variations to this portion of code. The end goal is to check for a savefile and otherwise send players to create_character. I am wondering if:
a.) They all need to start in create_character and if(saveile exist) it needs to then send them to saved coords,
b.) Login() can be used in multiple places? How do you 'proc' the switches for create_character if a player is 'moved' to it?
Try this text about Login()

Login()
--src<<"Hello"
--..()

Login()
..()
--src<<"123"

Login is like a river, u put a boat in the middle
In response to Klogaum
But... is it the only boat? How many different places can this river take the boat?

Login() isn't the issue, the issue is savefile and DM not 'recognizing' it. I'll do another couple tests and share my results.
In response to Klogaum
mob
create_character
var/mob/character
Login()
SaveFile.cd = "/"
if(ckey in SaveFile.dir)
SaveFile.cd = ckey
Read(SaveFile)
else
var/charactername = input("Who goes there? Name yourself.","Name",src.key)
switch(input("How do you identify?","Gender") in list ("Female", "Male","Non-Binary"))
if("Female")
switch(input("Which option describes your appearance?","Appearance") in list ("Ghostly","Pale","Light","Milk Chocolate","Dark Chocolate"))
if("Ghostly")
character = new /mob/player/female/ghostly()
if("Pale")
character = new /mob/player/female/pale()
if("Light")
character = new /mob/player/female/light()
if("Milk Chocolate")
character = new /mob/player/female/milkc()
if("Dark Chocolate")
character = new /mob/player/female/dkc()
if("Male")
switch(input("Which option describes your appearance?","Appearance") in list ("Ghostly","Pale","Light","Milk Chocolate","Dark Chocolate"))
if("Ghostly")
character = new /mob/player/male/ghostly()
if("Pale")
character = new /mob/player/male/pale()
if("Light")
character = new /mob/player/male/light()
if("Milk Chocolate")
character = new /mob/player/male/milkc()
if("Dark Chocolate")
character = new /mob/player/male/dkc()
if("Non-Binary")
switch(input("Which option describes your appearance?","Appearance") in list ("Ghostly","Pale","Light","Milk Chocolate","Dark Chocolate"))
if("Ghostly")
character = new /mob/player/nonbinary/ghostly()
if("Pale")
character = new /mob/player/nonbinary/pale()
if("Light")
character = new /mob/player/nonbinary/light()
if("Milk Chocolate")
character = new /mob/player/nonbinary/milkc()
if("Dark Chocolate")
character = new /mob/player/nonbinary/dkc()
character.name = charactername
character.loc = locate(/turf/start)
src.client.mob = character
del(src)
..()


Returns:
Login.dm:69:error: SaveFile.cd: undefined var
Login.dm:70:error: SaveFile.dir: undefined var
Login.dm:71:error: SaveFile.cd: undefined var
Login.dm:72:error: SaveFile: undefined var
mob/var/list/V
mob/proc/SaveK()src.Savenownow()
mob/var/playerfile="Nada"
mob/verb/Savenownow()
set hidden=1
set name="lulalaou"
if(src.cansave)
xco=x;yco=y;zco=z
src.V=src.verbs
var/savefile/F=new("[src.playerfile]")
Write(F)
proc/Auto_Save()
while(1)
for(var/mob/Player/M)
M.Savenownow()
sleep(world.tick_lag)
sleep(6000)

Of the my game
mob/Logout()
if(src in PlayersLogados)
world<<"[src] deslogou"
world<<output("[src] \[[src.key]\] deslogou.","contido7.output1")
else
world<<output("Desconhecido da key [src.key] deslogou.","contido7.output1")
PlayersLogados-=src
Players-=src
for(var/mob/Player/M)M.Marcados-=src

var/obj/o=src.healthbar;del o

src.Logado=0
src.Desbuga()
src.KillBunshins()
src.inkaku=0
src.overlays-='kaku.dmi'
src.earthscroll=0
src.heavenscroll=0
src.overlays-='peacock.dmi'
src.overlays-='Rainarmor.dmi'
src.Rainarmor=0
src.overlays-='cloud.dmi'
src.overlays-='flight.dmi'
src.overlays-='staraura.dmi'
src.overlays-='darkaura.dmi'
src.overlays-='sunaura.dmi'
src.overlays-='WaterStrom.dmi'
src.overlays-='rockball.dmi'
src.captured=0
src.caught=0
src.froze=0
src.Frozen=0
src.healthjutsu=0
src.chakrajutsu=0
src.kunaijutsu=0
src.shurikenjutsu=0
src.armadilhajutsu=0
src.aura=0
src.Warmor=0
src.overlays-='Wprison.dmi'
src.cter=0
src.overlays-='counter.dmi'
src:sight&=~BLIND
src.buoyu=0
src.tagset=0
src.Flight=0
src.density=1
src.overlays-='Flight.dmi'
src.overlays-='wings.dmi'
src.overlays-='flydeidara.dmi'
src.verbs-=new/mob/tag/verb/Explode
src.verbs-=new/mob/tag/verb/Explode
src.verbs-=new/mob/tag/verb/Explode
src.verbs-=new/mob/tag/verb/Explode
src.verbs-=new/mob/tag/verb/Explode
src.dead=0
src.resting=0
src.Frozen=0
src.Moveing=0
src.firing=0
src.Mountain=0
src.onwater=0
src.tagset=0
src.tai=src.Mtai
src.nin=src.Mnin
src.gen=src.Mgen
src.focusing=0
src.icon=src.Oicon
src.overlays-='Bun.dmi'
src.Kshibari=0
src.kubi=0
src.firing=0
src.overlays-='meattank.dmi'
src.inspike=0
src.overlays-='hakkeshou.dmi'
src.Kaiten=0
src.overlays-='gatsuuga.dmi'
src.ingat=0
src.overlays-='lotus.dmi'
src.gate1=0
src.overlays-='lotus.dmi'
src.gate2=0
src.overlays-='lotus.dmi'
src.gate3=0
src.overlays-='lotus.dmi'
src.gate4=0
src.overlays-='lotus.dmi'
src.gate5=0
src.overlays-='lotus.dmi'
src.gate6=0
src.overlays-='lotus.dmi'
src.gate7=0
src.overlays-='lotus.dmi'
src.gate8=0
src.overlays-='Marmor.dmi'
src.overlays-='mist.dmi'
src.Marmor=0
src.overlays-='Larmor.dmi'
src.Larmor=0
src.overlays-='Iarmor.dmi'
src.Iarmor=0
src.overlays-='BeeArmor.dmi'
src.Barmor=0
src.overlays-='Farmor.dmi'
src.Farmor=0
src.overlays-='Zarmor.dmi'
src.Zarmor=0
src.SHarmor=0
src.overlays-='sharingan.dmi'
src.overlays-='Bun.dmi'
src.overlays-='Chidori.dmi'
src.overlays-='Rasengan.dmi'
src.overlays-='electricity.dmi'
src.overlays-='byakugan.dmi'
src.overlays-='Suirou.dmi'
src.overlays-='SenpoMyojinmon.dmi'
src.icon='Deidara 1.dmi'
src.overlays-=/obj/Karura
src.overlays-=/obj/Karura2
src.overlays-=/obj/Karura3
src.overlays-=/obj/Sphere
src.overlays-='sasoriFmarionete2.dmi'
src.overlays-=/obj/Kaiten8
src.overlays-=/obj/Kaiten9
src.sphr=0
src.overlays-='Sarmor.dmi'
src.Sarmor=0
src.overlays-='uzaroo.dmi'
src.inbaika=0
src.overlays-='MTS.dmi'
src.intank=0
src.overlays-='Tan.dmi'
src.overlays-='white.dmi'
src.overlays-='black.dmi'
src.overlays-='blue.dmi'
src.overlays-='red.dmi'
src.overlays-='yellow.dmi'
src.overlays-='vamp.dmi'
src.overlays-='omote.dmi'
src.overlays-='ura.dmi'
src.doton=0
src.screwed=0
src.deathforest=0
src.inkyuubi=0
src.overlays-='kyuubi.dmi'
src.overlays-='sharingan.dmi'
src.incs=0
src.overlays-='cs.dmi'
src.overlays-='cs.dmi'
src.overlays-='cs.dmi'
src.overlays-='cs2.dmi'
src.overlays-='cs2.dmi'
src.overlays-='cs2.dmi'
src.overlays-='cs3.dmi'
src.overlays-='cs3.dmi'
src.overlays-='cs3.dmi'
src.ovl-=/obj/SeloA/parte1
src.ovl-=/obj/SeloA/parte2
src.ovl-=/obj/SeloA/parte3
src.overlays-=/obj/CCurseSeal3T
src.overlays-=/obj/CKyuubi4Tails
src.overlays-=/obj/TKyuubi4Tails
src.overlays-=/obj/BLKyuubi4Tails
src.overlays-=/obj/BRKyuubi4Tails
src.overlays-=/obj/TLKyuubi4Tails
src.overlays-=/obj/TRKyuubi4Tails
src.overlays-=/obj/CCurseSeal3T
src.overlays-=/obj/TCurseSeal3T
src.overlays-=/obj/BLCurseSeal3T
src.overlays-=/obj/BRCurseSeal3T
src.overlays-=/obj/TLCurseSeal3T
src.overlays-=/obj/TRCurseSeal3T
src.overlays-=/obj/CCurseSeal3White
src.overlays-=/obj/TCurseSeal3White
src.overlays-=/obj/BLCurseSeal3White
src.overlays-=/obj/BRCurseSeal3White
src.overlays-=/obj/TLCurseSeal3White
src.overlays-=/obj/TRCurseSeal3White
src.overlays-=/obj/CCurseSeal3Black
src.overlays-=/obj/TCurseSeal3Black
src.overlays-=/obj/BLCurseSeal3Black
src.overlays-=/obj/BRCurseSeal3Black
src.overlays-=/obj/TLCurseSeal3Black
src.overlays-=/obj/TRCurseSeal3Black
src.overlays-=/obj/CCurseSeal3Blue
src.overlays-=/obj/TCurseSeal3Blue
src.overlays-=/obj/BLCurseSeal3Blue
src.overlays-=/obj/BRCurseSeal3Blue
src.overlays-=/obj/TLCurseSeal3Blue
src.overlays-=/obj/TRCurseSeal3Blue
src.overlays-=/obj/CCurseSeal3Red
src.overlays-=/obj/TCurseSeal3Red
src.overlays-=/obj/BLCurseSeal3Red
src.overlays-=/obj/BRCurseSeal3Red
src.overlays-=/obj/TLCurseSeal3Red
src.overlays-=/obj/TRCurseSeal3Red
src.overlays-=/obj/CCurseSeal3Vamp
src.overlays-=/obj/TCurseSeal3Vamp
src.overlays-=/obj/BLCurseSeal3Vamp
src.overlays-=/obj/BRCurseSeal3Vamp
src.overlays-=/obj/TLCurseSeal3Vamp
src.overlays-=/obj/TRCurseSeal3Vamp
src.overlays-=/obj/CCurseSeal3Yellow
src.overlays-=/obj/TCurseSeal3Yellow
src.overlays-=/obj/BLCurseSeal3Yellow
src.overlays-=/obj/BRCurseSeal3Yellow
src.overlays-=/obj/TLCurseSeal3Yellow
src.overlays-=/obj/TRCurseSeal3Yellow
src.overlays-='BaseT Wing Shield.dmi'
src.overlays-='Base white Wing Shield.dmi'
src.overlays-='BaseBlack Wing Shield.dmi'
src.overlays-='BaseBlue Wing Shield.dmi'
src.overlays-='BaseRed Wing Shield.dmi'
src.overlays-='BaseVamp Wing Shield.dmi'
src.overlays-='BaseYellow Wing Shield.dmi'
src.overlays-='Kyuubi Aura Shield.dmi'
src.KASS=0
src.CSWS=0
src.inthewar=0
for(var/mob/puppet/F in src.contents)
del(F)
if(src.deathforest)
src.loc=locate(6,58,20)
src.icon=src.Oicon
src.icon_state=""
src.Savenownow()
src.cansave=0
..()
del src
ob/SM7/verb/Recrutar()
set category="7sm"
if("[usr.key]" in Membros7sm)
var/list/disp=new/list
if(Membros7sm[2]=="Vazio")disp+="Ikazuki no Kiba"
if(Membros7sm[3]=="Vazio")disp+="Nuibari"
if(Membros7sm[4]=="Vazio")disp+="Samehada"
if(Membros7sm[5]=="Vazio")disp+="Shibuki"
if(disp.len>0)
var/an=input("Escolha uma espada antes da pessoa","Vagas: [5-disp.len]/5")in disp+list("Cancelar")
if(an=="Cancelar")return

var/list/a=new/list
for(var/mob/Player/U)if(U.rank=="Nukenin")a+=U

var/mob/M=input("Escolha um desses para recrutar","Vagas: [5/disp.len]/5")in a+list("Cancelar")
if(M=="Cancelar")return
if(!M){usr<<"Falhou";return}
M.rank="Membro";M.Village="[usr.Village]"

switch(an)
if("Ikazuki no Kiba")
Membros7sm[2]="[M.key]"
world<<"[M] Entrou na 7sm a espada Ikazuki no Kiba"
new/obj/sevenswrodmen/Ikazuki_Kiba(M)
if("Nuibari")
Membros7sm[3]="[M.key]"
world<<"[M] Entrou na 7sm a espada Nuibari"
new/obj/sevenswrodmen/Nuibari(M)
if("Samehada")
Membros7sm[4]="[M.key]"
world<<"[M] Entrou na 7sm a espada Samehada"
new/obj/sevenswrodmen/Samehada(M)
if("Shibuki")
Membros7sm[5]="[M.key]"
world<<"[M] Entrou na 7sm e recebeu a espada Shibuki"
new/obj/sevenswrodmen/Shibuki(M)
M.squads=1;M.squad="[usr.squad]"

for(var/obj/Headband/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/UniformeChuunin/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/LeafSuit/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
M.verbs-=new/mob/jutsu/verb/JourouSenbon()
for(var/obj/AnbuSuit/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/Ninjaken/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/Ranbu/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/Sanbu/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/Danbu/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/Ganbu/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/Banbu/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/Yanbu/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/Sanbu/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/Eanbu/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/Panbu/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/UniformeSannin/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/HokageSuit/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/HokageHat/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/KazekageSuit/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/KazekageHat/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/RaikageSuit/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/RaikageHat/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/MizukageSuit/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/MizukageHat/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/TsuchikageSuit/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/TsuchikageHat/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
for(var/obj/SunSage/O in M){if(O.suffix=="Equipped"){O.Click()};del O}
M.Savenownow();Save_7sm()
obj
PilulasVerde
name="Pílulas Verde"
icon='Pilulas.dmi'
icon_state="verde"
verb
Olhar()
usr<<"Esta é a pílula verde."
usr<<"<font color=yellow>Efeitos:"
usr<<"Depois de come-la, você podera comer pílula amarela."
Largar()
src.loc=locate(usr.x,usr.y-1,usr.z)
usr.SaveK()
Pegar()
set src in oview(1)
src.loc=usr
usr<<"Você pegou uma [src]"
Click()
usr<<"Você comeu uma Pilulas verde"
usr.verde=1
del(src)
world
hub="klogaum.NCFB"
hub_password="1234567"
name="Quebrando regras ninja"
status="Ligando o servidor..."
cache_lifespan=2
view=5
fps=10
tick_lag=1
loop_checks=0
mob=/mob/Player
map_format=TILED_ICON_MAP
New()
..()
spawn(11)Auto_Save()
spawn(12)Load_Aktsuki()
spawn(12)Load_7sm()
spawn(12)Load_squad()
spawn(14)
_lista_ban_load()
_cids_ban_load()
spawn(15)Linha_do_tempo()
log=file("erros.txt")
Del()
for(var/mob/Player/M)if(M.client)winset(M,"default","title='Em update'")
sleep(1)
..()
client/default_verb_category="Comandos"
mob/proc/Load1()
src.Load2()
if(src.Load3()!=10)
spawn(12)
if(src)winset(src,null,"command=.quit")
else if(usr)winset(usr,null,"command=.quit")
world<<"Sistema: [src] precisou ser deslogado 1 vez"
src.Correcao1()

spawn(11)src.Vip_Correr_Tempoou()
spawn(3)src.ver_vida()
PlayersLogados+=src
src.OOC=1
src.cansave=1
src.Frozen=0
src.Logado=1
src.PK=0
spawn(-1)src.logincrap()
src.client.view=10
if(src.loc==null)src.loc=locate(6,58,20)

mob/proc/Load2()
src.playerfile="players/[src.key].sav"
var/savefile/F=new("[src.playerfile]")
F["xco"]>>x;F["yco"]>>y;F["zco"]>>z
Read(F)

mob/proc/Load3(){src.verbs+=src.V;return 10}

Load
client/New(){..();if(mob)src.mob.cansave=0}
mob/Login(){src.cansave=0;..()}
mob/Login()
..()
src.cansave=0
if(closedword||!src||!src.client||!src.key){spawn(1);wse(src,null,"command=.quit");return}
else
src<<output({"<style type="text/css">
body{background-color:#DEB887;color:black;font-family:Tahoma;font-size:11px;}
.box{height:22px;width:138px;border:1px solid #950000;background-color:#bbbbbb;font-family:Tahoma;font-size:7pt;color:black;}
.button{border:1px solid #950000;background-color:#bbbbbb;font-family:Tahoma;font-size:8pt;color:#DEB887;}
a:link, a:active, a:visited, a:hover{font-family:Tahoma;}
TD{font-family: Tahoma;font-size: 11px;line-height: 13px;color: black;}</style>"}
,"Painel2.browser9")

spawn(10)src.wait01seg=0
wse(src,"mapa.bar101","is-visible=false");wse(src,"mapa.bar201","is-visible=false")
wse(src,"mapa.blackbar1","is-visible=false")
for(var/a=1 to 32)wse(src,"mapa.pi[a]","is-visible=false")
wse(src,"default","title='Quebrando regras ninja';is-maximized=false;pos=0x0;size=786x590")
spawn(2)winset(src,"default","title='Quebrando regras ninja \[[PlayersLogados.len]/[Players.len]\]'")
if(!("[src.key]" in logaramhoje))logaramhoje+="[src.key]"
spawn(2)
wse(src,null,"menu.souns.soun1.is-checked=true menu.souns.soun2.is-checked=false menu.souns.soun3.is-checked=false menu.souns.soun4.is-checked=false menu.souns.soun5.is-checked=false")
wse(src,null,"menu.souns.soun1.is-disabled=true menu.souns.soun2.is-disabled=true menu.souns.soun3.is-disabled=true menu.souns.soun4.is-disabled=true menu.souns.soun5.is-disabled=true")
wse(src,null,"menu.iidm1.iid12.is-checked=true")
wse(src,null,"menu.iidm1.iid11.is-checked=false")
wse(src,null,"menu.iidm1.iid13.is-checked=false")
wse(src,null,"menu.iidm1.iid22.is-checked=false")
wse(src,null,"menu.iidm1.iid21.is-checked=false")
wse(src,null,"menu.iidm1.iid23.is-checked=true")
wse(src,null,"menu.iidm1.iid22.is-disabled=true")
wse(src,null,"menu.iidm1.iid21.is-disabled=true")
wse(src,null,"menu.iidm1.iid23.is-disabled=true")
wse(src,null,"menu.iidm1.iid32.is-checked=true")
wse(src,null,"menu.iidm1.iid31.is-checked=false")
wse(src,null,"menu.iidm1.iid33.is-checked=false")
wse(src,null,"menu.iidm2.iid12.is-checked=true")
wse(src,null,"menu.iidm2.iid11.is-checked=false")
wse(src,null,"menu.iidm2.iid13.is-checked=false")
spawn(1)
for(var/a=2 to 6)wse(src,"vol0[a]","is-visible=false")
src<<"<font color=#900><b>Computador fala para Você: <font color=#600>Bem vindo ao servidor"
src<<output("<font color=#bc1403><b>Computador fala para Você: <font color=#a00>Bem vindo ao servidor","contido2.outputpv")
src<<sound('song_opening.mid',volume=35)
src.objinmochi=-10
src.carregar_browser_vip()
src.AjustesNaTela()

_ban_key_login()
_cids_ban_login()
LoopTickLag()

for(var/r=1 to 5)wse(src,"mapa.uu[r]","is-visible=false")
wse(src,"mapa.php","is-visible=false")
wse(src,"mapa.pca","is-visible=false")
wse(src,"mapa.pch","is-visible=false")
wse(src,"mapa.mouse","is-visible=false")
wse(src,"mapa.seguro","is-visible=false")

wse(src,"chat.inputf","text='Global: '")
wse(src,"mapa.map","focus=true")
winset(src,"chat.tab1","tabs='chcon1,chcon2,contido3,chcon4'")
winset(src,"chat.tab1","current-tab='chcon1'")
src<<output(null,"contido2.outputpv")
src<<output(null,"contido1.output")
wse(src,"Painel3.tab1","current-tab=stpcon1")
wse(src,"chat.tab1","current-tab=chcon1")
wse(src,"chcon2","title='PM+'")
wse(src,"Status","is-visible=false")
wse(src,"default.child1","splitter=50")
wse(src,"direita.child2","splitter=50")
wse(src,"mapa.map","icon-size=32")
wse(src,"default.NoRec","is-visible=false")
//wse(src,"contido4","size=500x1220")
wse(src,"mapa.button92","is-visible=true")
wse(src,"mapa.button93","is-visible=true")
wse(src,"mapa.button94","is-visible=true")
wse(src,"mapa.button95","is-visible=true")
wse(src,"mapa.Status","is-visible=false")
wse(src,"mapa.Opsis1","is-visible=true")
wse(src,"mapa.Opsis2","is-visible=true")
wse(src,"mapa.Opsis3","is-visible=true")

wse(src,"tutorial.pagina","text='Página 0'")
wse(src,"tutorial.texto","text='Use o botão verde'")
wse(src,"mapa.bancon","is-visible=false")
wse(src,"mapa.minmap","is-visible=false")
wse(src,"mapa.ques","is-visible=false")
wse(src,"mapa.banquero","is-visible=false")
wse(src,"mapa.ch7sm","is-visible=false")
wse(src,"mapa.ChiFoll","is-visible=false")
wse(src,"mapa.chakatsuki","is-visible=false")
wse(src,"mapa.bancon","is-visible=false")
wse(src,"mapa.bancon","is-visible=false")
wse(src,"mapa.Status","is-visible=false")
wse(src,"mapa.TLMAP","is-visible=false")
wse(src,"mapa.TRMAP","is-visible=false")
wse(src,"mapa.radar","is-visible=false")

Players+=src;src.loc=locate(7,7,20)

if(findtext(src.key,"Guest-")!=0)
src.client:perspective=EYE_PERSPECTIVE
src.client:eye=locate(38,12,189)
for(var/a=1 to 4)
src<<"Cadastre uma conta em: https://secure.byond.com/Join"
sleep(60)

Login
Way too much irrelevant information in Klogaum's response, so I'm just gonna start fresh with you, Keynote. The problem is that Savefile is not defined:

Login.dm:69:error: SaveFile.cd: undefined var
Login.dm:70:error: SaveFile.dir: undefined var
Login.dm:71:error: SaveFile.cd: undefined var
-> Login.dm:72:error: SaveFile: undefined var

You can fix this by declaring Savefile somewhere in the scope of the proc you are planning to use it:

var/Savefile


This is covered more in depth in the DM guide, chapter 5 section 4: the Life of a Variable

http://www.byond.com/docs/guide/chap05.html

And also that Savefile is not the right kind of variable:

-> Login.dm:69:error: SaveFile.cd: undefined var
-> Login.dm:70:error: SaveFile.dir: undefined var
-> Login.dm:71:error: SaveFile.cd: undefined var
Login.dm:72:error: SaveFile: undefined var

You can fix this by declaring a type for savefile:

var/savefile/Savefile


Declaring a type for variables tells the compiler that they are a specific type of object, and this will allow you to use their unique variables, procs and verbs without the compiler complaining about it.

This is covered more in depth in the DM Guide, chapter 5 section 2.2.1 Declaring Variable Types:

http://www.byond.com/docs/guide/chap05.html
I did want to take the time to point out that you have a lot of redundant code, as well as more than just those two issues I mentioned, but because I don't have enough information to be sure that my assumptions are correct, I wanted to only point out the most obvious errors.

Your redundant code can be reduced by instead of using a different type for every single possible combination of character stats, by using a list to store different icons and changing the player's icon to match any premade character appearances. You can also do this programmatically by making the player's skin its own icon and shifting its colors with color matrices or via icon operations if you so desire. You could also include male and female distinctive features as overlays and underlays of the player's icon and use the neutral gender as the base state if you so chose, so you have a lot of options.

But there are a few options for addressing redundant code:


using the list-based approach:

//create a 2D associative list of character icons by gender x tone:

var/list/character_icons = list(
"Male" = list(
"Ghostly"='mghostly.dmi',
"Pale"='mpale.dmi'
"Light"='mlight.dmi'
"Milk Chocolate"='mmlk.dmi'
"Dark Chocolate"='mdrk.dmi'),
"Female" = list(
"Ghostly"='fghostly.dmi',
"Pale"='fpale.dmi'
"Light"='flight.dmi'
"Milk Chocolate"='fmlk.dmi'
"Dark Chocolate"='fdrk.dmi'),
"Non-Binary" = list(
"Ghostly"='nbghostly.dmi',
"Pale"='nbpale.dmi'
"Light"='nblight.dmi'
"Milk Chocolate"='nbmlk.dmi'
"Dark Chocolate"='nbdrk.dmi'))

mob
create_character
var/mob/character
Login()
SaveFile.cd = "/" //this is still an error.
if(ckey in SaveFile.dir)
SaveFile.cd = ckey
Read(SaveFile) //You should never call Read manually. It works... Sometimes, but it's bad practice.

else
var/charactername = input("Who goes there? Name yourself.","Name",src.key)

//pick the gender and tone from a list:
var/charactergender = input("How do you identify?","Gender") in list ("Female", "Male","Non-Binary")
var/charactertone = input("Which option describes your appearance?","Appearance") in list ("Ghostly","Pale","Light","Milk Chocolate","Dark Chocolate")

//create a base character:
character = new/mob/player()

//look up the character's icon by both picked indexes:
character.icon = character_icons[charactergender][charactertone]
character.name = charactername

character.loc = locate(/turf/start)
src.client.mob = character
del(src)
..() //you don't need this, also it was tabbed wrong.



Still using types, but using text2path():

//declare two associative lists that store user-friendly names for tones and gender associated with code-friendly values:
var
list
character_genders = list("Female"="female", "Male"="male","Non-Binary"="nonbinary")
character_tones = list("Ghostly"="ghostly","Pale"="pale","Light"="light","Milk Chocolate"="milkc","Dark Chocolate"="dkc")
mob
create_character
var/mob/character
Login()
SaveFile.cd = "/" //this is still an error.
if(ckey in SaveFile.dir)
SaveFile.cd = ckey
Read(SaveFile) //You should never call Read manually. It works... Sometimes, but it's bad practice.
else
var/charactername = input("Who goes there? Name yourself.","Name",src.key)

//pick from the global gender and tone lists:
var/charactergender = input("How do you identify?","Gender") in character_genders
var/charactertone = input("Which option describes your appearance?","Appearance") in character_tones

//build a type by looking up the code-friendly values linked to the user-friendly gender and tone names that were picked
var/charactertype = text2path("/mob/player/[character_genders[charactergender]]/[character_tones[charactertone]]")

//create the character's instance from the stored type we built using text2path()
character = new charactertype()

character.name = charactername

character.loc = locate(/turf/start)
src.client.mob = character
del(src)
..() //you don't need this, also it was tabbed wrong.



There is another issue with the code you linked:

Your code clearly belongs under mob/create_character, but because of your tabbing, you have inserted it under /mob.

mob
create_character
var/mob/character
Login()


That's how it should look instead.
I suffer from anxiety
Ur post was good to me, to remember the options and ...

my read() never give me problem on my way (NEVER)

i HAD ERRORS BUT IN THIS SCHEME I NEVER

if logout dont proced, roll back ten minutes, events importants like drop item, save at the time
In response to Ter13
Thank you, Ter!

After a lot of soulsearching and re-reading all the tutorials again, I did find many of my mistakes. I was aware of the excess of code, mainly used so I could test a working model before breaking into the whole list thing.

I was misunderstanding how paths/directories work, but I finally have a handle on that as well.

What I am left with is a cyclical character creation which I hoped to fix by placing our save code directly under mob.

mob
Login()
if(fexists("SaveFile/[src.ckey].sav"))
Read("[src.ckey].sav")
else
client.mob = new/mob/create_character
..()

I have read your tutorial like 50 times now, with a new epiphany each time!

The end goal is to have a start screen where you select 'Load' or 'New', but I have only been playing in Dream Maker for a couple weeks. I'm just laying the groundwork here for all of the next steps, so I can learn it from inside and out.

Back to character creation...
I am working on the lists thing. In the mean time, how do I end this so the new var/mob/character is properly switched with src and we can move along and play the game?

mob 
create_character
Login()
var/mob/character
var/charactername = input("Who goes there? Name yourself.","Name",src.key)
switch(input("How do you identify?","Gender") in list ("Female", "Male","Non-Binary"))
if("Female")
switch(input("Which option describes your appearance?","Appearance") in list ("Ghostly","Pale","Light","Milk Chocolate","Dark Chocolate"))
if("Ghostly")
character = new /mob/player/female/ghostly()
if("Pale")
character = new /mob/player/female/pale()
if("Light")
character = new /mob/player/female/light()
if("Milk Chocolate")
character = new /mob/player/female/milkc()
if("Dark Chocolate")
character = new /mob/player/female/dkc()
if("Male")
switch(input("Which option describes your appearance?","Appearance") in list ("Ghostly","Pale","Light","Milk Chocolate","Dark Chocolate"))
if("Ghostly")
character = new /mob/player/male/ghostly()
if("Pale")
character = new /mob/player/male/pale()
if("Light")
character = new /mob/player/male/light()
if("Milk Chocolate")
character = new /mob/player/male/milkc()
if("Dark Chocolate")
character = new /mob/player/male/dkc()
if("Non-Binary")
switch(input("Which option describes your appearance?","Appearance") in list ("Ghostly","Pale","Light","Milk Chocolate","Dark Chocolate"))
if("Ghostly")
character = new /mob/player/nonbinary/ghostly()
if("Pale")
character = new /mob/player/nonbinary/pale()
if("Light")
character = new /mob/player/nonbinary/light()
if("Milk Chocolate")
character = new /mob/player/nonbinary/milkc()
if("Dark Chocolate")
character = new /mob/player/nonbinary/dkc()
character.name = charactername
character.loc = locate(/turf/start)
src.client.mob = character
del(src)


Edit: Typo and clarification.
So, Login() is called every time a client's mob is switched. That's why character creation/handling being under /mob is a bad idea.

An example of how to go about what you are trying to do:

//declare two associative lists that store user-friendly names for tones and gender associated with code-friendly values:
var
list
character_genders = list("Female"="female", "Male"="male","Non-Binary"="nonbinary")
character_tones = list("Ghostly"="ghostly","Pale"="pale","Light"="light","Milk Chocolate"="milkc","Dark Chocolate"="dkc")


world
mob = /mob/create_character //the default mob that is created if there is no key match for a client.

mob
Logout() //delete mobs when a client is done with them.
loc = null
del src

create_character //this is the temporary character creation mob.

//this will only happen when the client connects to a create_character mob.
Login()
//do not call ..() It is not necessary.
var/mob/player/character
if(fexists("SaveFile/[ckey].sav"))
var/savefile/Savefile = new/savefile("SaveFile/[ckey].sav")
Savefile >> character //read the mob from the savefile
return //this proc should have already bailed out because the client should automatically switch to the new mob because it saves the key variable by default.

if(!character)
var/charactername = input("Who goes there? Name yourself.","Name",src.key)

//pick from the global gender and tone lists:
var/charactergender = input("How do you identify?","Gender") in character_genders
var/charactertone = input("Which option describes your appearance?","Appearance") in character_tones

//build a type by looking up the code-friendly values linked to the user-friendly gender and tone names that were picked
var/charactertype = text2path("/mob/player/[character_genders[charactergender]]/[character_tones[charactertone]]")

//create the character's instance from the stored type we built using text2path()
character = new charactertype()

character.name = charactername

character.loc = locate(/turf/start)
src.client.mob = character
return

player //this is the playable character.

//override the player's Logout() proc to force a save.
Logout()
Save()
..() //do what /mob/Logout() does.

proc
Save()
. = 1 //prepare a successful return value

var/savefile/Savefile = new/savefile("SaveFile/[ckey]_temp.sav") //use a temporary file to save so saving doesn't result in corruption in case of errors

//try-catch allows you to react to runtime errors.
try
Savefile << src
fcopy("SaveFile/[ckey]_temp.sav","SaveFile/[ckey].sav") //copy the temporary file over the permanent file
catch(var/exception/e) //when there's been an error saving the player or copying the temp save.
. = 0 //prepare a failed return value
fdel("SaveFile/[ckey]_temp.sav") //delete the temporary file

//demonstrating overriding Write() to store the player's location.
Write(savefile/F)
..()
F.cd = "_location"
F << x
F << y
F << z
/* if using pixel movement:
F << step_x
F << step_y*/

F.cd = ".."

//demonstrating overriding Read() to restore the player's location.
Read(savefile/F)
..()
F.cd = "_location"
var/sx,spx,sy,spy,sz
F >> sx
F >> sy
F >> sz
loc = locate(sx,sy,sz)
/* if using pixel movement:
F >> spx
F >> spy*/

F.cd = ".."
step_x = spx
step_y = spy


The important bit is understanding all the different moving parts of what you are trying to do. The basic cycle should go:

1) If the player has an existing savefile, automatically load that savefile and pull the saved mob out of it.

2a) By default, the mob's current key should save. This will automatically switch the client to the mob saved in that savefile, calling client/Logout(), which will destroy the create_character mob.

2b) If the player does not have an existing savefile, create a new character and manually change the client's mob to the new player we created.

3) The player is now logged into the new mob.

4) When the player logs out, Save() the mob into a savefile and destroy the mob.
Working on it still. As per usual, I will try one-thousand different variations before it (hopefully) works.

Getting this:
runtime error: Cannot create objects of type null.
proc name: Login (/mob/create_character/Login)
usr: (src)
src: Ted Talks (/mob/create_character)
src.loc: null
call stack:
Ted Talks (/mob/create_character): Login()
Page: 1 2