1 [Tutorial] como fazer um sistema de login em BYOND Sáb 22 Set 2012, 22:59
Halt
Administrador
/*
Aqui, definiremos as funções básicas de personagem, como salvar, carregar e criar.
Tudo começa aqui ;D
*/
// proc para client para salvar
client/proc/Salvar()
var/organizar=copytext(src.ckey, 1, 2)
// vai selecionar a priemeira letra da KEY do player
var/savefile/F = new("players/[organizar]/[src.ckey].sav")
// vai criar o arquivo save na pasta players/letra/key.sav
var/char_ckey = cKey(src.mob.name)
//vai pegar a key do char em letras minusculas
F["/[ckey]/[char_ckey]"] << src.mob
// vai enviar os dados do char para o arquivo onde src.mob é o player
client/proc/Carregar(char_ckey)
// proc para client para carregar o char
var/organizar=copytext(src.ckey, 1, 2)
// vai selecionar a priemeira letra da KEY do player
var/savefile/F = new("players/[organizar]/[src.ckey].sav")
// vai escolher o .sav do player
F["/[ckey]/[char_ckey]"] >> src.mob
// vai enviar os dados para o src.mob que é o player
world << "[src.mob.name] entrou!"
// Aqui, definiremos então como tratar um player que acabou de logar.
mob/novoplayer
Login()
// Ao logar, tomaremos as ações necessárias, com o call_parent
..()
// Depois posicionaremos o player
usr.loc=locate(1,1,2)
// E em seguida chamaremos a rotina para Criar/Carregar chars.
src.Selecao()
//Rotina para selecionar se deseja Criar/Carregar chars
proc/Selecao()
var/list/personagens = src.Personagens()
//vai solicitar a list dos personagnes a proc criada.
var/novochar = "Novo Personagem"
// poem uma variavel novochar escrita "Novo Personagem"
var/list/menu = new()
// vai criar um menu
menu += personagens
// vai por os personagens na lista do menu
menu += novochar
// vai por a variavel novochar na list
var/resposta = input("Criação de Personagem", "By Renato") in menu
// Perguntaremos se o jogador deseja carregar um personagem, ou criar um novo
if (resposta == novochar)
src.NovoChar()
// Essa é a rotina de criação de personagem
return
else
var/sucesso = src.client.Carregar(resposta)
//vai pedir para carregar o char
if(sucesso)
//vai conferir se carregou
usr << "Você carregou o char [resposta]"
// vai enviar uma mensagem.
//Rotina para Criar chars
proc/NovoChar()
var/nome = input(src, "Qual seu nome?", "Criação de Personagem", "") as text
// Seleciona um nome através de input()
var/mob/novomob
novomob = new /mob/player()
novomob.name = nome
// Abre um novo mob, e nomeia-o com o nome escolhido
switch(input("Qual seu sexo?", "Criação de Personagem") in list ("Masculino","Femino"))
// Pede para selecionar o sexo
if("Masculino")
novomob.sexo = "Masculino"
novomob.icon = 'Homen.dmi'
// Escolhe o icon apropriado
novomob.icon_state = ""
novomob.loc = locate(10,10,1)
// Posiciona o char
src.client.mob = novomob
// Define que o jogador é aquele mob.
if("Feminino")
novomob.sexo = "Feminino"
novomob.icon = 'Mulher.dmi'
// Escolhe o icon apropriado
novomob.icon_state = ""
novomob.loc = locate(10,10,1)
// Posiciona o char
src.client.mob = novomob
// Define que o jogador é aquele mob.
// Rotina para Carregar chars
mob/proc
Personagens()
var/firstletter=copytext(src.ckey, 1, 2)
// vai selecionar a priemeira letra da KEY do player
var/savefile/F = new("players/[firstletter]/[src.ckey].sav")
// vai escolher o .sav do player
F.cd = "/[ckey]"
// vai escolher uma "subpasta" dentro do save que é a key do player
var/list/personagens = F.dir
// vai criar uma variavel list onde são os char do .sav
return personagens
//vai retornar a proc. fiz assim para ficar mais organizado
// Agora, vem o comando de salvar o char.
mob/verb/Save()
set category = "Salvar"
set name = "Salvar"
// Ele simplesmente chama um rotina que vai fazer o save
usr.client.Salvar()
// Aqui, uma rotina padrão do DM, a Del() que é chamada para toda coisa toda vez que
// fazemos del(coisa). No caso, o ato de deslogar um char, chama a client.Del()
client/Del()
if(istype(src.mob, /mob/novoplayer))
// Se o jogador deslogando é um novoplayer
return ..()
// sairemos sem fazer nada
// Caso contrário, precisamos salvá-lo
src.Salvar()
// Então chamamos a função de salvar
return ..()
// e saímos
// Agora, as duas funções básicas para se fazer save e load: Wirte e Read.
// Elas trabalham salvando ou carregando todas as variáveis do dono da rotina num
// arquivo de save, indicado em seus parâmetros. Porém, há variáveis que nós usamos mas não
// estão definidas na árvore do mob, como os verbos não-padrão e as variáveis de posição
// x,y e z (note que elas não estão no arquivo mob.dm, nem tampouco são variáveis padrão
// que o byond guarda. São consideradas var/tmp. Logo, para salvá-las, temos que usar de
// um artifício.
mob
// Proc para salvar (escrever)
Write(savefile/F)
..()
// Por exemplo aqui, todas as variáveis do mob serão salvas no arquivo F
F["last_x"] << x
F["last_y"] << y
F["last_z"] << z
// E aqui está o artifício citado. Forçamos o salvamento das variáveis x, y e z
// que estarão no savefile com os nomes last_x, last_y e last_z.
// Proc para carregar (ler)
Read(savefile/F)
..()
// Mesmo funcionamento já explicado
var/last_x
var/last_y
var/last_z
// Agora criamos variáveis para armazenar os valores de onde o mob estava posicionado
// da última vez q salvou
F["last_x"] >> last_x
F["last_y"] >> last_y
F["last_z"] >> last_z
// Carregamos os dados do savefile para essas variáveis
loc = locate(last_x, last_y, last_z)
// E setamos o local do mob para o local indicado por essas coordenadas.
// Por fim, definimos quais os valores das variáveis básicas quando se é um mob do tipo player Sem isso não roda
mob/player
hp = 100
mp = 100
maxhp = 100
maxmp = 100
forca = 10
defesa = 5
velocidade = 10
Aqui, definiremos as funções básicas de personagem, como salvar, carregar e criar.
Tudo começa aqui ;D
*/
// proc para client para salvar
client/proc/Salvar()
var/organizar=copytext(src.ckey, 1, 2)
// vai selecionar a priemeira letra da KEY do player
var/savefile/F = new("players/[organizar]/[src.ckey].sav")
// vai criar o arquivo save na pasta players/letra/key.sav
var/char_ckey = cKey(src.mob.name)
//vai pegar a key do char em letras minusculas
F["/[ckey]/[char_ckey]"] << src.mob
// vai enviar os dados do char para o arquivo onde src.mob é o player
client/proc/Carregar(char_ckey)
// proc para client para carregar o char
var/organizar=copytext(src.ckey, 1, 2)
// vai selecionar a priemeira letra da KEY do player
var/savefile/F = new("players/[organizar]/[src.ckey].sav")
// vai escolher o .sav do player
F["/[ckey]/[char_ckey]"] >> src.mob
// vai enviar os dados para o src.mob que é o player
world << "[src.mob.name] entrou!"
// Aqui, definiremos então como tratar um player que acabou de logar.
mob/novoplayer
Login()
// Ao logar, tomaremos as ações necessárias, com o call_parent
..()
// Depois posicionaremos o player
usr.loc=locate(1,1,2)
// E em seguida chamaremos a rotina para Criar/Carregar chars.
src.Selecao()
//Rotina para selecionar se deseja Criar/Carregar chars
proc/Selecao()
var/list/personagens = src.Personagens()
//vai solicitar a list dos personagnes a proc criada.
var/novochar = "Novo Personagem"
// poem uma variavel novochar escrita "Novo Personagem"
var/list/menu = new()
// vai criar um menu
menu += personagens
// vai por os personagens na lista do menu
menu += novochar
// vai por a variavel novochar na list
var/resposta = input("Criação de Personagem", "By Renato") in menu
// Perguntaremos se o jogador deseja carregar um personagem, ou criar um novo
if (resposta == novochar)
src.NovoChar()
// Essa é a rotina de criação de personagem
return
else
var/sucesso = src.client.Carregar(resposta)
//vai pedir para carregar o char
if(sucesso)
//vai conferir se carregou
usr << "Você carregou o char [resposta]"
// vai enviar uma mensagem.
//Rotina para Criar chars
proc/NovoChar()
var/nome = input(src, "Qual seu nome?", "Criação de Personagem", "") as text
// Seleciona um nome através de input()
var/mob/novomob
novomob = new /mob/player()
novomob.name = nome
// Abre um novo mob, e nomeia-o com o nome escolhido
switch(input("Qual seu sexo?", "Criação de Personagem") in list ("Masculino","Femino"))
// Pede para selecionar o sexo
if("Masculino")
novomob.sexo = "Masculino"
novomob.icon = 'Homen.dmi'
// Escolhe o icon apropriado
novomob.icon_state = ""
novomob.loc = locate(10,10,1)
// Posiciona o char
src.client.mob = novomob
// Define que o jogador é aquele mob.
if("Feminino")
novomob.sexo = "Feminino"
novomob.icon = 'Mulher.dmi'
// Escolhe o icon apropriado
novomob.icon_state = ""
novomob.loc = locate(10,10,1)
// Posiciona o char
src.client.mob = novomob
// Define que o jogador é aquele mob.
// Rotina para Carregar chars
mob/proc
Personagens()
var/firstletter=copytext(src.ckey, 1, 2)
// vai selecionar a priemeira letra da KEY do player
var/savefile/F = new("players/[firstletter]/[src.ckey].sav")
// vai escolher o .sav do player
F.cd = "/[ckey]"
// vai escolher uma "subpasta" dentro do save que é a key do player
var/list/personagens = F.dir
// vai criar uma variavel list onde são os char do .sav
return personagens
//vai retornar a proc. fiz assim para ficar mais organizado
// Agora, vem o comando de salvar o char.
mob/verb/Save()
set category = "Salvar"
set name = "Salvar"
// Ele simplesmente chama um rotina que vai fazer o save
usr.client.Salvar()
// Aqui, uma rotina padrão do DM, a Del() que é chamada para toda coisa toda vez que
// fazemos del(coisa). No caso, o ato de deslogar um char, chama a client.Del()
client/Del()
if(istype(src.mob, /mob/novoplayer))
// Se o jogador deslogando é um novoplayer
return ..()
// sairemos sem fazer nada
// Caso contrário, precisamos salvá-lo
src.Salvar()
// Então chamamos a função de salvar
return ..()
// e saímos
// Agora, as duas funções básicas para se fazer save e load: Wirte e Read.
// Elas trabalham salvando ou carregando todas as variáveis do dono da rotina num
// arquivo de save, indicado em seus parâmetros. Porém, há variáveis que nós usamos mas não
// estão definidas na árvore do mob, como os verbos não-padrão e as variáveis de posição
// x,y e z (note que elas não estão no arquivo mob.dm, nem tampouco são variáveis padrão
// que o byond guarda. São consideradas var/tmp. Logo, para salvá-las, temos que usar de
// um artifício.
mob
// Proc para salvar (escrever)
Write(savefile/F)
..()
// Por exemplo aqui, todas as variáveis do mob serão salvas no arquivo F
F["last_x"] << x
F["last_y"] << y
F["last_z"] << z
// E aqui está o artifício citado. Forçamos o salvamento das variáveis x, y e z
// que estarão no savefile com os nomes last_x, last_y e last_z.
// Proc para carregar (ler)
Read(savefile/F)
..()
// Mesmo funcionamento já explicado
var/last_x
var/last_y
var/last_z
// Agora criamos variáveis para armazenar os valores de onde o mob estava posicionado
// da última vez q salvou
F["last_x"] >> last_x
F["last_y"] >> last_y
F["last_z"] >> last_z
// Carregamos os dados do savefile para essas variáveis
loc = locate(last_x, last_y, last_z)
// E setamos o local do mob para o local indicado por essas coordenadas.
// Por fim, definimos quais os valores das variáveis básicas quando se é um mob do tipo player Sem isso não roda
mob/player
hp = 100
mp = 100
maxhp = 100
maxmp = 100
forca = 10
defesa = 5
velocidade = 10