Ir para conteúdo

Criando Um Website Para Ot Xml


Nostradamus

Posts Recomendados

Introdução

 

Estava observando que em 99,9 % dos casos de sites, a maioria apenas troca de layout. Pois hoje ensinarei a criar um website simples em PHP na garra!

 

Requerimentos

  • Conheçimento básico de HTML
  • Um pouco de lógica, para saber o que é possível e o que não é dentro do PHP
  • Dedicação
  • Editor de textos (Bloco de notas, notepad++, entre outros)

Lógica estruturada

 

Primeiramente, antes de entrar em qualquer linguagem, vamos planejar como o site será.

 

Formulário para account, senha, nome do char, vocação, sexo

  1. Inclur arquivo de configuração do site
  2. Pegar dados informados
  3. Verificar caso campos em branco
  4. Verificar se a account é numérica
  5. Verificar o número de dígitos da account e da senha
  6. Verificar se não foi usado caracteres especiais (*, /, \, !, @, #, $, %, entre outros)
  7. Verificar se a account existe
  8. Verificar se o char existe
  9. Criar a conta com os dados informados

Arquivo de configuração do site

  1. Configuração de diretório do servidor
  2. Configurar nome do servidor
  3. Configurar life, mana, level, skills, entre outros dos jogadores a serem criados

Rápida explicação

 

Para entender o que iremos fazer em PHP é fácil vamos trabalhar com isso no código:

  1. Variavel - Toda variável no PHP é seguida de um $ (ex: $variavel)
  2. Condições - A sintaxe das condições no PHP é: if(condição) { // executar algo }
  3. Inicialização de código - No PHP indicamos o início de um código pelas "tags": <?php e no final por ?>
  4. Comentários - No PHP indicamos um comentário simples por // texto livre ou um comentário multi-linha por /* texto
    simples */

 

 

Usaremos algumas funções nativas do PHP, são elas:

  1. file_exists('dir/arquivo.xml') - Função que checa se um arquivo existe
  2. fopen('dir/arquivo.xml', 'w') - Função para abrir/criar arquivos, nesse caso usamos "w" então criaremos um arquivo.
  3. fwrite('texto', 'dir/arquivo.xml') - Função para escrevermos num arquivo
  4. fclose('dir/arquivo.xml') - Função para fechar um arquivo
  5. is_numeric($variavel) - Função para verificar se algo é numérico
  6. IsSet($variavel) - Função para verificar se algo foi setado ou mesmo usado
  7. echo - Função para imprimir uma mensagem na tela
  8. strlen - Função para verificar o número de caracteres de uma palavra (string)

Mãos na massa!

 

Primeiramente, criemos uma variável e damos a ela um valor de um diretório, o diretório da pasta data:

 

$dir = "C:/otserv/data"; // não coloque o "/" no final

 

Agora, vamos fazer um formulário em HTML, irei fazer um bem simples para o fácil entendimento:

 

<form method="post">

Account <br />

<input type="text" name="account" /> <br />

Password <br />

<input type="text" name="password" /> <br />

Nome <br />

<input type="text" name="nick" /> <br />

Sexo <br />

<select name="sex">

<option value="0">Feminino</option>

<option value="1">Masculino</option>

</select> <br />

Vocação <br />

<select name="voc">

<option value="1">Sorcerer</option>

<option value="2">Druid</option>

<option value="3">Paladin</option>

<option value="4">Knight</option>

</select> <br />

<input type="submit" name="make" value="Criar" /> <br />

</form>

 

Vejamos agora o texto em negrito:

 

Podemos observar que demos nomes para os campos para texto e botões, podemos dar o nome disso de identificação. Usaremos isso para saber quais valores correspondem a tais lugares. Pois sem isso, como saberíamos os dados informados?

 

Observe que usamos o método (method) post para pegar os dados, que no PHP é "chamado" por $_POST['campo'];

 

Vejamos como pegamos a account, senha, nome, e dados do player com POST:

 

$account = $_POST['account'];
$password = $_POST['password'];
$name = $_POST['nick'];
$sex = $_POST['sex'];
$voc = $_POST['voc'];

 

 

Depois de tudo pronto, está na hora de por a mão na massa começando a fazer as condições de criação. Primeiramente vamos ver quais faremos:

  1. Caso a account não seja numérica, exibir mensagem de erro
  2. Caso a account senha maior ou menor que 7, exibir mensagem de erro
  3. Caso a senha seja maior que 20 ou menor que 3, exibir mensagem de erro
  4. Caso o nome não ser letras, exibir mensagem de erro
  5. Caso a account exista
  6. Caso o char exista

Vamos fazer pela ordem então:

 

1) Caso a account não seja numérica, exibir mensagem de erro

 

if(!is_numeric($account)) {
echo "Account não numérica";
}

 

2) Caso a account senha maior ou menor que 7, exibir mensagem de erro

 

if(strlen($account) != 7) {
echo "Account deve conter 7 números";
}

 

3) Caso a senha seja maior que 20 ou menor que 3, exibir mensagem de erro

 

if(strlen($password) > 20 or strlen($password) < 3) {
echo "Senha deve ser entre 3 a 20 dígitos";
}

 

4) Caso o nome não ser letras, exibir mensagem de erro

 

 

 

5) Caso a account exista

 

if(file_exists("$dir/accounts/$account.xml") {
echo "A account já existe em nosso banco de dados";
}

 

6) Caso o char exista

 

if(file_exists("$dir/players/$name.xml") {
echo "O jogador já existe em nosso banco de dados";
}

 

Agora depois de todas as condições, faremos a parte de criação da account:

 

$arquivo = fopen("$dir/account/$account.xml");
fwrite($arquivo, '
	  <?xml version="1.0"?>
		<account pass="'.$password.'" premDays="0" premEnd="0">
			<characters>
			<character name="'.$name.'"/>
			</characters>
		</account>
	');
fclose($arquivo);

 

OBS: Lembrando que estou me baseando no Evolutions.

 

Agora vamos fazer a criação do player:

 

$arquivoII = fopen($dir/players/$name.xml");

fwrite($arquivoII, '

<?xml version="1.0" encoding="UTF-8"?>

<player name="'.$name.'" account="'.$account.'" sex="'.$sex.'" lookdir="2" exp="3200" voc="'.$voc.'" level="8" access="1" cap="300" maglevel="0" soul="100" maxdepotitems="1000" lastlogin="0">

<spawn x="300" y="300" z="7"/>

<temple x="300" y="300" z="7"/>

<health now="100" max="100" food="0"/>

<mana now="0" max="0" spent="0"/>

<skull redskulltime="0" redskull="0"/>

<look type="128" head="20" body="30" legs="40" feet="50" addons="0"/>

<skills>

<skill skillid="0" level="10" tries="0"/>

<skill skillid="1" level="10" tries="0"/>

<skill skillid="2" level="10" tries="0"/>

<skill skillid="3" level="10" tries="0"/>

<skill skillid="4" level="10" tries="0"/>

<skill skillid="5" level="10" tries="0"/>

<skill skillid="6" level="10" tries="0"/>

</skills>

<addons/>

<deaths>

</deaths>

<blessings>

<blessings/>

<spells>

</spells>

<inventory>

<slot slotid="5">

<item id="2431"/>

</slot>

<slot slotid="6">

<item id="2160" count="99"/>

</slot>

<slot slotid="10">

<item id="2152" count="48"/>

</slot>

</inventory>

<depots>

<depot depotid="1">

<item id="2590">

<inside>

<item id="2594">

<inside>

<item id="2152" count="50"/>

</inside> </item>

</inside>

</item>

</depot>

</depots>

<storage/>

</player>

');

fclose($arquivoII);

 

OBS: Eu apenas peguei o player padrão que vem no servidor do Evolutions, caso queira modificar, é simples.

 

Agora, vamos para a última parte: iremos juntar tudo que foi feito.

 

<form method="post">

Account <br />

<input type="text" name="account" /> <br />

Password <br />

<input type="text" name="password" /> <br />

Nome <br />

<input type="text" name="nick" /> <br />

Sexo <br />

<select name="sex">

<option value="0">Feminino</option>

<option value="1">Masculino</option>

</select> <br />

Vocação <br />

<select name="voc">

<option value="1">Sorcerer</option>

<option value="2">Druid</option>

<option value="3">Paladin</option>

<option value="4">Knight</option>

</select> <br />

<input type="submit" name="make" value="Criar" /> <br />

</form>

 

<?php

$dir = "C:/otserv/data";

if(IsSet($_POST['make'])) {

$account = $_POST['account'];

$password = $_POST['password'];

$name = $_POST['nick'];

$sex = $_POST['sex'];

$voc = $_POST['voc'];

 

if(!is_numeric($account)) {

echo "Account não numérica";

}

 

 

else if(strlen($account) != 7) {

echo "Account deve conter 7 números";

}

 

else if(strlen($password) > 20 or strlen($password) < 3) {

echo "Senha deve ser entre 3 a 20 dígitos";

}

 

else if(file_exists("$dir/accounts/$account.xml") {

echo "A account já existe em nosso banco de dados";

}

 

 

else if(file_exists("$dir/players/$name.xml") {

echo "O jogador já existe em nosso banco de dados";

}

 

else {

$arquivo = fopen("$dir/account/$account.xml");

fwrite($arquivo, '

<?xml version="1.0"?>

<account pass="'.$password.'" premDays="0" premEnd="0">

<characters>

<character name="'.$name.'"/>

</characters>

</account>

');

fclose($arquivo);

 

$arquivoII = fopen($dir/players/$name.xml");

fwrite($arquivoII, '

<?xml version="1.0" encoding="UTF-8"?>

<player name="'.$name.'" account="'.$account.'" sex="'.$sex.'" lookdir="2" exp="3200" voc="'.$voc.'" level="8" access="1" cap="300" maglevel="0" soul="100" maxdepotitems="1000" lastlogin="0">

<spawn x="300" y="300" z="7"/>

<temple x="300" y="300" z="7"/>

<health now="100" max="100" food="0"/>

<mana now="0" max="0" spent="0"/>

<skull redskulltime="0" redskull="0"/>

<look type="128" head="20" body="30" legs="40" feet="50" addons="0"/>

<skills>

<skill skillid="0" level="10" tries="0"/>

<skill skillid="1" level="10" tries="0"/>

<skill skillid="2" level="10" tries="0"/>

<skill skillid="3" level="10" tries="0"/>

<skill skillid="4" level="10" tries="0"/>

<skill skillid="5" level="10" tries="0"/>

<skill skillid="6" level="10" tries="0"/>

</skills>

<addons/>

<deaths>

</deaths>

<blessings>

<blessings/>

<spells>

</spells>

<inventory>

<slot slotid="5">

<item id="2431"/>

</slot>

<slot slotid="6">

<item id="2160" count="99"/>

</slot>

<slot slotid="10">

<item id="2152" count="48"/>

</slot>

</inventory>

<depots>

<depot depotid="1">

<item id="2590">

<inside>

<item id="2594">

<inside>

<item id="2152" count="50"/>

</inside>

</item>

</inside>

</item>

</depot>

</depots>

<storage/>

</player>

');

fclose($arquivoII);

 

// Para não perder tempo, usaremos minha função de adicionar itens ao players.xml

 

function players_xml(&$nick) {

if(!file_exists("$dir/players/players.xml") {

$fp = fopen("$dir/players/players.xml", "w");

fwrite($fp, '

<?xml version="1.0"?>

<players>

</players>

');

fclose($fp);

}

else {

$xml = new SimpleXMLElement(file_get_contents("$dir/players/players.xml"));

$xml->players->addChild('player');

 

$player = end($xml->xpath('/players/player'));

$nextGuid = (int) $player['guid'] + 1;

$newPlayer = end($xml->xpath('/players'))->addChild('player');

$newPlayer->addAttribute('guid', $nextGuid);

$newPlayer->addAttribute('name', $nick);

 

$xml->asXML("$dir/players/players.xml");

}

}

 

players_xml($name);

 

 

echo "Char criado com sucesso";

}

}

?>

 

OBS: O fórum acabou com minha estruturação do código.

 

E chegamos ao fim de mais um tutorial, qualquer dúvida, é só postar aqui.

Editado por Nostradamus
Link para o comentário
Compartilhar em outros sites

  • Respostas 44
  • Created
  • Última resposta

Top Posters In This Topic

  • 2 weeks later...

Olá Xtibiano,

 

Parabéns, seu tutorial foi aprovado.

 

Estarei movendo ele para a área de tutoriais.

 

Obrigado por trazer conteúdo para o Xtibia.com e espero que continue com o ótimo trabalho.

 

 

Atenciosamente,

JV Chequer *Diretor Xtibia.com*

Link para o comentário
Compartilhar em outros sites

~Nostra, estou aqui para avisar que adicionei seu tutorial no meu listão de tutoriais relacionados a websites.

 

~Topic

 

Muito bom 100% ORGANIZADO.

 

Atenciosamente,

~DD ou ~DarezinhUu - Campeão da 1ª MDS Xtibia

Link para o comentário
Compartilhar em outros sites

Ai Nostra

 

Pode da uma ajuda?

Eu não to hostando o site, to fazendo isso usando o 110mb

Dai o que eu coloco nessa parte:

$dir = "C:/otserv/data"; // não coloque o "/" no final

O endereço normalmente?

Eu fiz isso e não deu certo...

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Boas... desculpa o icomodo...

mas eassim eu n touy percebendo como hei de fazer isso... o 1º code k vc deu num bloko de notas... mas n sei como fazer apartir dai... lxs me ajude..

Link para o comentário
Compartilhar em outros sites

Ñ e k oseu tutorial teja mal feito pk por akilo k vi e consegui perceber ate ta mt bem explicado eu e k n tou conseguindo perceber como faço para meter todos os codigos k vc deu.. n sei se meto tudo jundo no mesmo bloco de notas se meto separado.... me ajude por favor.. bgd ...

Link para o comentário
Compartilhar em outros sites

Kiurtu, não faça double post*

Espero que não volte a acontecer.

 

Legenda:

*Double post = dois posts seguidos, sem necessidade, pois pode usar o botão editar.

 

@Tópico:

Realmente nunca me dei bem com websites, mas vou tentar seguir esse tuto. THX ;)

Editado por HunterHero
Link para o comentário
Compartilhar em outros sites


×
×
  • Criar Novo...