ID:148170
 


heres my code

mob/PC/Login()           //Let's get started:
var/I = input("What would you like to do?","Logging in:","Continue") in list("Continue","Create New Character") //The input command is made so you can get information from whoever is defined and make the variable defined before the input() that value.
if(I == "Continue") //If the player selected continue...
var/savefile/F = new(client.Import()) //Ok, this is an advanced concept so if you get confused by this, skip it because all you really need to know is the format: savefile is a type like mob, obj, turf, area, atom, and so on are. When you create a new savefile, it is saved in the area specified (in this I do not specify a file path because client.Import does it for me.). client.Import will save it in your \BYOND\users\[Your name here]\Keyinfo\ folder... When I get to client.Export (the second part of this, the actual saving of it in other words) I will explain this some more...
if(F) //If there was a file there...
Read(F) //Read the mob specified in the file. The Read() proc reads all vars in the mob in the savefile (tmp vars are not saved, which I will show you a little later in the grouping procedures section.).
else
usr << "You don't have a character saved!"
I = "Create New Character" //Turn I back to "Create New Character" so when it gets to that part of the proc below, it will make the person create a new one.
if(I == "Create New Character") //If they selected to create a new character or if it couldn't find a savefile which is defined above...
Name_Character() //Call this proc which is defined below the Login() proc. This is the same as calling src.Name_Character().
var/C = input("What would you like your character to be?","Class:") in list("female Warrior with pike","Wizard","Male Knight") //Ditto but with class.
if(C == "female Warrior with pike") //Now, to set stats... Because I defined icon_state in a special way above, I wont need to do anymore defining of it.
icon = 'warrior_f1.dmi'
Min_Damage = 1 //A warrior's stats:
Max_Damage = 3
Attack_Delay = 4
HP = 30
MAX_HP = 30
MP = 10
MAX_MP = 10
Strength = 2
Defense = 2
AGI = 3
DEX = 4
EXP_To_Next = 100
if(C == "Male Knight")
icon = 'knight_m4.dmi'
Min_Damage = 1 //A wizard's stats:
Max_Damage = 3
Attack_Delay = 4
HP = 25
MAX_HP = 25
MP = 20
MAX_MP = 20
Strength = 1
Defense = 1
AGI = 2
DEX = 3
EXP_To_Next = 100
if(C == "Wizard")
icon = 'wizard.dmi'
Min_Damage = 1 //A wizard's stats:
Max_Damage = 3
Attack_Delay = 4
HP = 25
MAX_HP = 25
MP = 20
MAX_MP = 20
Strength = 1
Defense = 1
AGI = 2
DEX = 3
EXP_To_Next = 100
if(I == "Create New Character")
loc = locate(102,93,1) //Puts the player at the starting position.
if(I == "Continue")
loc = locate({last_x;last_y;last_z}*********
..() //This will call another Login() proc if it is defined somewhere... Which it is down above grouping which we will get to later.
mob/proc/Name_Character() //This is a proc we called above in Login().
var/N = input("What would you like your name to be?","Name:",key) as text //The input() proc can also be used to get text form the player, or number, type, or whatever!
if(N == ""||N == null) //If the player did not put anything...
alert("You need to enter a name!") //Tell him this...
spawn() //This is used to make loops that could or do go on forever not crash. You can also put a delay in 1/10s of a second in the arguments to make it wait before calling the proc that is called after it.
Name_Character() //And make him do it again!
else //If the player did enter something...
if(length(N) < 25) //Here is that old length() proc again. This time it checks to make sure the player's name he defined isn't too long.
name = N //Make that mob's name into what the player wanted it to be.
else
//If it is too long...
alert("Your name was too long!") //Do this stuff again:
spawn()
Name_Character()

****** = error
Change
loc = locate({last_x;last_y;last_z}*********
to
loc = locate(last_x,last_y,last_z)

BYOND uses ()s for procs, not {}s. Also, locate takes ,s not ;s.
In response to Jon88
i got these errors

The Adventures of Perspolis.dm:420:error: last_y: missing comma ',' or right-paren ')'
The Adventures of Perspolis.dm:420:error: last_y: expected end of statement
The Adventures of Perspolis.dm:420:error: ): expected }
The Adventures of Perspolis.dm:420:error: location of top-most unmatched {
The Adventures of Perspolis.dm:420:error: ): expected }
The Adventures of Perspolis.dm:364:error: location of top-most unmatched {
In response to Jon88
Jon88 wrote:
Change
loc = locate({last_x;last_y;last_z}*********
to
loc = locate(last_x,last_y,last_z)

BYOND uses ()s for procs, not {}s. Also, locate takes ,s not ;s.

i get these three errors:


The Adventures of Perspolis.dm:420:error:last_x:undefined var
The Adventures of Perspolis.dm:420:error:last_y:undefined var
The Adventures of Perspolis.dm:420:error:last_z:undefined var
In response to Nave
i tried defining them and then it says unused var, and undefined var. any help?
In response to Nave
mob/PC/var/last_x
mob/PC/var/last_y
mob/PC/var/last_z

In response to Nave
This is a real error that occures when you forgot to use a )
Read you code again and make sure you close all ('s