Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''xml''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Taverna
  • Projetos Open Source
    • Canary
    • OTServBR-Global
    • Mehah OTClient
    • MyAAC
  • OpenTibia
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
  • Outros
    • Design

Encontrado 5 registros

  1. Scripting Cooldown

    Base: The Forgotten Server 1.2, Versão: 8.60 Qual a sua pergunta? Estou com problemas em arrumar o exhaustion de uma runa, queria que ela não tivesse muito, ser algo que possa ser muito rápido, porém, parece que tem um minimo de exhaustion e não pode ser menor que o minimo e eu não faço a minima ideia de como deixar ela rapida. Tentei mudar no spells.xml, colocar no script (vi que dava certo '-') a função "Player.getExhaustion" e "Player.setExhaustion"... Tentei mudar na distro no spells.cpp o cooldown estava 1000 e eu deixar em 1 (pensei que era um padrão), mas não funcionou.... Alguem tem alguma ideia? Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: (A runa seria uma arma de fogo, nesse exemplo a ak47) Eu fiz varios testes no script, então o que eu utilizava dês do inicio era esse
  2. Scripting Ajuda a configurar !

    configurar esse script para encher 3 de life e 1 de mana a cada 1 segundo e meio do kina . 3 de mana e 1 de life o do mage e 2 de mana e 2 de life o do pala, tudo a cada 1.5 segundos. (+rep) <?xml version="1.0" encoding="UTF-8"?> <vocations> <vocation id="0" clientid="0" name="None" description="none" gaincap="10" gainhp="5" gainmana="5" gainhpticks="12" gainhpamount="1" gainmanaticks="6" gainmanaamount="2" manamultiplier="4.0" attackspeed="2000" basespeed="220" soulmax="100" gainsoulticks="120" fromvoc="0"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.5" /> <skill id="1" multiplier="2.0" /> <skill id="2" multiplier="2.0" /> <skill id="3" multiplier="2.0" /> <skill id="4" multiplier="2.0" /> <skill id="5" multiplier="1.5" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="1" clientid="3" name="Sorcerer" description="a sorcerer" gaincap="10" gainhp="5" gainmana="30" gainhpticks="12" gainhpamount="1" gainmanaticks="3" gainmanaamount="2" manamultiplier="1.1" attackspeed="2000" basespeed="220" soulmax="100" gainsoulticks="120" fromvoc="1"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.5" /> <skill id="1" multiplier="2.0" /> <skill id="2" multiplier="2.0" /> <skill id="3" multiplier="2.0" /> <skill id="4" multiplier="2.0" /> <skill id="5" multiplier="1.5" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="2" clientid="4" name="Druid" description="a druid" gaincap="10" gainhp="5" gainmana="30" gainhpticks="12" gainhpamount="1" gainmanaticks="3" gainmanaamount="2" manamultiplier="1.1" attackspeed="2000" basespeed="220" soulmax="100" gainsoulticks="120" fromvoc="2"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.5" /> <skill id="1" multiplier="1.8" /> <skill id="2" multiplier="1.8" /> <skill id="3" multiplier="1.8" /> <skill id="4" multiplier="1.8" /> <skill id="5" multiplier="1.5" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="3" clientid="2" name="Paladin" description="a paladin" gaincap="20" gainhp="10" gainmana="15" gainhpticks="8" gainhpamount="1" gainmanaticks="4" gainmanaamount="2" manamultiplier="1.4" attackspeed="2000" basespeed="220" soulmax="100" gainsoulticks="120" fromvoc="3"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.2" /> <skill id="1" multiplier="1.2" /> <skill id="2" multiplier="1.2" /> <skill id="3" multiplier="1.2" /> <skill id="4" multiplier="1.1" /> <skill id="5" multiplier="1.1" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="4" clientid="1" name="Knight" description="a knight" gaincap="25" gainhp="15" gainmana="5" gainhpticks="6" gainhpamount="1" gainmanaticks="6" gainmanaamount="2" manamultiplier="3.0" attackspeed="2000" basespeed="220" soulmax="100" gainsoulticks="120" fromvoc="4"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.1" /> <skill id="1" multiplier="1.1" /> <skill id="2" multiplier="1.1" /> <skill id="3" multiplier="1.1" /> <skill id="4" multiplier="1.4" /> <skill id="5" multiplier="1.1" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="5" clientid="3" name="Master Sorcerer" description="a master sorcerer" gaincap="10" gainhp="5" gainmana="30" gainhpticks="12" gainhpamount="1" gainmanaticks="2" gainmanaamount="2" manamultiplier="1.1" attackspeed="1500" basespeed="220" soulmax="200" gainsoulticks="15" fromvoc="1"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.5" /> <skill id="1" multiplier="2.0" /> <skill id="2" multiplier="2.0" /> <skill id="3" multiplier="2.0" /> <skill id="4" multiplier="2.0" /> <skill id="5" multiplier="1.5" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="6" clientid="4" name="Elder Druid" description="an elder druid" gaincap="10" gainhp="5" gainmana="30" gainhpticks="12" gainhpamount="1" gainmanaticks="2" gainmanaamount="2" manamultiplier="1.1" attackspeed="1500" basespeed="220" soulmax="200" gainsoulticks="15" fromvoc="2"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.5" /> <skill id="1" multiplier="1.8" /> <skill id="2" multiplier="1.8" /> <skill id="3" multiplier="1.8" /> <skill id="4" multiplier="1.8" /> <skill id="5" multiplier="1.5" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="7" clientid="2" name="Royal Paladin" description="a royal paladin" gaincap="20" gainhp="10" gainmana="15" gainhpticks="6" gainhpamount="1" gainmanaticks="3" gainmanaamount="3" manamultiplier="1.4" attackspeed="1500" basespeed="220" soulmax="200" gainsoulticks="15" fromvoc="3"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.2" /> <skill id="1" multiplier="1.2" /> <skill id="2" multiplier="1.2" /> <skill id="3" multiplier="1.2" /> <skill id="4" multiplier="1.1" /> <skill id="5" multiplier="1.1" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="8" clientid="1" name="Elite Knight" description="an elite knight" gaincap="25" gainhp="15" gainmana="5" gainhpticks="4" gainhpamount="1" gainmanaticks="6" gainmanaamount="3" manamultiplier="3.0" attackspeed="1500" basespeed="220" soulmax="200" gainsoulticks="15" fromvoc="4"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.1" /> <skill id="1" multiplier="1.1" /> <skill id="2" multiplier="1.1" /> <skill id="3" multiplier="1.1" /> <skill id="4" multiplier="1.4" /> <skill id="5" multiplier="1.1" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="9" name="Dark Master Sorcerer" description="an Dark master sorcerer" needpremium="1" gaincap="10" gainhp="5" gainmana="30" gainhpticks="4" gainhpamount="10" gainmanaticks="2" gainmanaamount="25" manamultiplier="1.1" attackspeed="750" soulmax="200" gainsoulticks="15" fromvoc="5" lessloss="50"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="2.0" sword="2.0" axe="2.0" distance="2.0" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="10" name="Divine Elder Druid" description="an Divine elder druid" needpremium="1" gaincap="10" gainhp="5" gainmana="30" gainhpticks="4" gainhpamount="10" gainmanaticks="2" gainmanaamount="25" manamultiplier="1.1" attackspeed="750" soulmax="200" gainsoulticks="15" fromvoc="6" lessloss="50"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="1.8" sword="1.8" axe="1.8" distance="1.8" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> <vocation id="11" name="Epic Royal Paladin" description="an epic royal paladin" needpremium="1" gaincap="20" gainhp="10" gainmana="15" gainhpticks="3" gainhpamount="15" gainmanaticks="3" gainmanaamount="20" manamultiplier="1.4" attackspeed="750" soulmax="200" gainsoulticks="15" fromvoc="7" lessloss="50"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.2" club="1.2" sword="1.2" axe="1.2" distance="1.1" shielding="1.1" fishing="1.1" experience="1.0"/> </vocation> <vocation id="12" name="Heroic Elite Knight" description="an Heroic elite knight" needpremium="1" gaincap="25" gainhp="15" gainmana="5" gainhpticks="8" gainhpamount="25" gainmanaticks="4" gainmanaamount="10" manamultiplier="3.0" attackspeed="750" soulmax="200" gainsoulticks="15" fromvoc="8" lessloss="50"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.1" club="1.1" sword="1.1" axe="1.1" distance="1.4" shielding="1.1" fishing="1.1" experience="1.0"/> </vocation> </vocations>
  3. fazendo site para ot XML[outro método]P3

    bem aqui começa a 3 parte do tutorial caso não tenha lido a parte ^^ continuação: bem como avia dito antes irei mostra e explicar agora o mostra_acc.php em partes. 1° <?php session_start(); if(IsSet($_SESSION["nacc"])){ ?> iniciamos a secção para podermos pegar o valor da variável de secção e depois verificamos se ela tem um valor. se não tiver o Jogador vai de volta pra pagina de login para fazer isso no final da pagina colocaremos o seguinte código: <?php } else{ echo("<script>location=\"formulario_login.html\";</script>"); } ?> 2° isso fica logo após fecharmos a tag do php no inicio do código. <table border="1"> <tr> <td>Nome</td> <td>Excluir?</td> </tr> esse é o inicio da tabela que mostraremos ao jogador após ele se logar. 3° <?php $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); caregamos novamente a conta do jogador. 4° foreach($acc->characters->character as $char){ echo(" <tr> <td> ".$char["name"]." </td> <td><a href=\"apaga_char.php?char=".$char["name"]."\">Excluir</a></td> </tr> "); } agora tem coisa nova: já que um jogador pode ter mais de um personagem por conta( e tag do que guarda o nome tem sempre o mesmo nome <character name=""> ) então usamos a função foreach(){} para guardar os parâmetro da tag <character> dentro da variável $char, e essa função ira ficar em LOOP ate que que não tenha mais valores fazendo isto linha a linha. ou seja no primeiro LOOP termos dentro da variável $char["name"] o nome do primeiro personagem no segundo LOOP o do segundo personagem e assim por diante ate que que não aja + personagem. Depois escrevemos o corpo da nossa tabela e colocamos um link para excluir o personagem, ?char=".$char["name"]." e para sabermos na proxima pagina que vamos apagar. 3° ?> <table> <a href="Formulario_personagem.php">criar novo personagem</a> <a href="sair.php">sair</a> agora fechamos a tag do php, concluimos a tabele e colocamos 2 link 1 é para o Jogador poder criar um novo personagem e o outro é para fazer LOGOUT. agora juntando tudo temos o seguinte código no arquivo mostra_acc.php <?php session_start(); if(IsSet($_SESSION["nacc"])){ ?> <table border="1"> <tr> <td>Nome</td> <td>Excluir?</td> </tr> <?php $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); foreach($acc->characters->character as $char){ echo(" <tr> <td> ".$char["name"]." </td> <td><a href=\"apaga_char.php?char=".$char["name"]."\">Excluir</a></td> </tr> "); } ?> <table> <a href="Formulario_personagem.php">criar novo personagem</a> <a href="sair.php">sair</a> <?php } else{ echo("<script>location=\"formulario_login.html\";</script>"); } ?> bem agora vamos criar o arquivo Formulario_personagem.php , mas por que ele primeiro e não apaga_char.php? por que para apagar primeiro tem que criar...^^ o código de arquivo é simples é a parte em php serve apenas para que pessoas não logas não vejam essa pagina.(e já foi usado na pagina mostra_acc.php e vai ser usado também na apaga_char.php) <?php session_start(); if(IsSet($_SESSION["nacc"])){ ?> <html> <head> <title>criar personagem</title> </head> <body> <form method="POST" action="cria_char.php"> Nome<br/> <input type="text" name="name"/><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"> </form> </body> </html> <?php } else{ echo("<script>location=\"formulario_login.html\";</script>"); } ?> certo agora vamos a parte interessante que é como fazer para criar o personagem novo. arquivo cria_char.php 1° <?php session_start(); if(IsSet($_SESSION["nacc"])){ include("config.inc.php"); inicimanos a secção, verificamos se ele esta logado e incluimos o arquivo de configuração. 2° if(IsSet($_POST["name"])){ if(!@strpbrk($_POST["name"],"*/\!@#$%")){ if(!file_exists($serverdata."players/".$_POST["name"].".xml")){ verificamos se o nome do personagem foi digitado, se não contem carcters especiais e se o personagem ja esiste. 3° /* coloca o personagme na conta */ $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); $char = $acc->characters->addChild('character'); $char->addAttribute('name',$_POST["name"]); $char->addAttribute('worldid',"1"); file_put_contents($serverdata."accounts/".$_SESSION["nacc"].".xml", $acc->asXML()); carregamos o XML da conta, adicionamos o personagem e depois actualizamos o XML com a função file_put_contents() 4° /* cria o personagem */ $CharBase = simplexml_load_file($bases."Char_Base.xml"); $CharBase["name"] = $_POST["name"]; $CharBase["account"] = $_SESSION["nacc"]; $CharBase["sex"] = $_POST["sex"]; $CharBase->spawn["x"] = $spawn["x"]; $CharBase->spawn["y"] = $spawn["y"]; $CharBase->spawn["z"] = $spawn["z"]; $CharBase->temple["x"] = $temple["x"]; $CharBase->temple["y"] = $temple["y"]; $CharBase->temple["z"] = $temple["z"]; $char = fopen($serverdata."players/".$_POST["name"].".xml", "x"); fwrite($char,$CharBase->asXML()); fclose($char); echo("<script>alert(\"Seu novo personagem foi criado, Divritase\");location=\"mostra_acc.php\";</script>"); aqui fasemos basicamente o mesmo que fisemos quando criamos a conta( ja que criamos um personagem junto) juntando tudo no cria_char.php temos <?php session_start(); if(IsSet($_SESSION["nacc"])){ include("config.inc.php"); if(IsSet($_POST["name"])){ if(!@strpbrk($_POST["name"],"*/\!@#$%")){ if(!file_exists($serverdata."players/".$_POST["name"].".xml")){ /* coloca o personagme na conta */ $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); $char = $acc->characters->addChild('character'); $char->addAttribute('name',$_POST["name"]); $char->addAttribute('worldid',"1"); file_put_contents($serverdata."accounts/".$_SESSION["nacc"].".xml", $acc->asXML()); /* cria o personagem */ $CharBase = simplexml_load_file($bases."Char_Base.xml"); $CharBase["name"] = $_POST["name"]; $CharBase["account"] = $_SESSION["nacc"]; $CharBase["sex"] = $_POST["sex"]; $CharBase->spawn["x"] = $spawn["x"]; $CharBase->spawn["y"] = $spawn["y"]; $CharBase->spawn["z"] = $spawn["z"]; $CharBase->temple["x"] = $temple["x"]; $CharBase->temple["y"] = $temple["y"]; $CharBase->temple["z"] = $temple["z"]; $char = fopen($serverdata."players/".$_POST["name"].".xml", "x"); fwrite($char,$CharBase->asXML()); fclose($char); echo("<script>alert(\"Seu novo personagem foi criado, Divritase\");location=\"mostra_acc.php\";</script>"); } else{ echo("<script>alert(\"Este Personagme Já exite\");location=\"Formulario_personagem.php\";</script>"); } } else{ echo("<script>alert(\"o nome do Personagme não pode ter caracters especiais\");location=\"Formulario_personagem.php\";</script>"); } } else{ echo("<script>alert(\"digite um nome para seu Personagme\");location=\"Formulario_personagem.php\";</script>"); } } else{ echo("<script>location=\"formulario_login.html\";</script>"); } ?> certo prosima parte apagado o personagem.... arquivo apaga_char.php 1° /* apaga o personagem da conta */ $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); $i=0; caregamos o arquivo da conta e criamos uma variavel com valor 0 2° foreach($acc->characters->character as $char){ if($char["name"] == $_GET["char"]){ unset($acc->characters->character[$i]); break; } $i++; } o foreach de novo, agora verificamos se a linha que estanos e a do personagem que quemos apagar se for usamos a função unset para apagar essa linha e a função break; para para o foreach (pois ja apagamos a linha que queriamos enão não presisamos + dele), o $i++ fais o mesmo que $i = $i + 1; e serve para sabermos o numero da linha que estamos. 3° file_put_contents($serverdata."accounts/".$_SESSION["nacc"].".xml", $acc->asXML()); unlink($serverdata."players/".$_GET["char"].".xml"); echo("<script>alert(\"o personagem ".$_GET["char"]." foi apagado\");location=\"mostra_acc.php\";</script>"); atutalizamos o XML da conta e usamos a função unlink para apagar o XML do personagem. e juntando tudo no arquivo apaga_char.php temos: <?php session_start(); if(IsSet($_SESSION["nacc"])){ /* apaga o personagem da conta */ $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); $i=0; foreach($acc->characters->character as $char){ if($char["name"] == $_GET["char"]){ unset($acc->characters->character[$i]); break; } $i++; } file_put_contents($serverdata."accounts/".$_SESSION["nacc"].".xml", $acc->asXML()); unlink($serverdata."players/".$_GET["char"].".xml"); echo("<script>alert(\"o personagem ".$_GET["char"]." foi apagado\");location=\"mostra_acc.php\";</script>"); } else{ echo("<script>location=\"formulario_login.html\";</script>"); } ?> e agora o arquivo mais simples de todos o sair.php <?php session_start(); session_destroy(); echo("<script>location=\"formulario_login.html\";</script>"); ?> onde iniciamos a seção, depois destrimos seu contedudo e mandomos o Jogador para a pagina do formulario de LOGIN. PARABENS agora você (teoricamente) SABE faser um saite para criar contas personagem e apagalos para um OT XML. A sim verifique se a pasta esta organisada da seguinte maneira: WWW/ -site_ot/ config.inc.php -formulario_acc.html -cria_acc.php -formulario_login.html -loga_acc.php -mostra_acc.php -Formulario_personagem.php -cria_char.php -apaga_char.php -sair.php -bases/ -Char_Base.XML -Acc_base.XML se não estiver organise ela sim para não dar erros e é só.
  4. fazendo site para ot XML[outro método]p1

    Bem basicamente nesse tutorial pretendo ensinar um método diferente de se:criar uma conta, criar um personagem, apagar um personagem, fazer LogIn e LogOut em uma conta para quem tem um Sever baseado em XML PS: algumas ideias foram baseadas no tutorial do usuário Eltrus (Criando um Website para OT XML) Dificuldade: Intermediaria Requisitos: 1°Conhecer html 2°Saber um pouco de lógica de programação 3°php 5 (o seu servidor web tem quer o php 5 senão esse código não funciona, aconselho usar o Vertrigo pois a versão do easyphp com php não é muito estável...) 4°Um editor de teste (bloco de notas serve...) 5°Dedicação claro Inicio: Bem primeiro abra a pasta do seu www do seu servidor e crie uma pasta para podermos trabalhar.Ex: site_ot agora vamos fazer 2 arquivos XML que serão nossa base, o Acc_base.XML <?xml version="1.0" encoding="UTF-8"?> <account [b][color=Navy]pass="" premDays="0" premEnd="0"[/color][/b]> <characters> </characters> </account> Azul escuro: isto é chamado de parâmetro. e o Char_Base.XML <?xml version="1.0" encoding="UTF-8"?> <player name="" account="" sex="" lookdir="1" exp="4200" voc="" level="8" access="0" cap="380" maglevel="0" soul="0" maxdepotitems="1000" lastlogin="0" married="" stamina="1660"> <spawn x="" y="" z=""/> <temple x="" y="" z=""/> <health now="190" max="190" food="0"/> <mana now="40" max="40" spent="0"/> <skull redskulltime="0" redskull="0"/> <look type="128" head="0" body="94" legs="126" feet="81" 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/> <spells/> <blessings/> <inventory> <slot slotid="1"> <item id="2475"/> </slot> <slot slotid="2"> <item id="2173"/> </slot> <slot slotid="3"> <item id="1988"> <inside> <item id="2456"/> <item id="2190"/> <item id="2182"/> <item id="2160" count="2"/> <item id="2120"/> </inside> </item> </slot> <slot slotid="4"> <item id="2476"/> </slot> <slot slotid="5"> <item id="2516"/> </slot> <slot slotid="6"> <item id="2392"/> </slot> <slot slotid="7"> <item id="2477"/> </slot> <slot slotid="8"> <item id="2643"/> </slot> <slot slotid="10"> <item id="2544" count="1"/> </slot> </inventory> <depots> <depot depotid="1"> <item id="2590"> </item> </depot> </depots> <storage> </storage> </player> obs: o Char_Base.XML que esta acima é um exemplo se quiser que o personagem no inicio seja diferente mude o que quiser mas deixe os campos que estão em branco do jeito que estão. Agora devemos ter as pastas + ou - assim WWW/ -site_ot/ -bases/ -Char_Base.XML -Acc_base.XML certo agora vamos criar na pasta site_ot/ crie o arquivo config.inc.php ele guarda algumas configuração que iremos usar varias vezes por isso vamos guarda-los em um único arquivo:D config.inc.php <?php $bases = "./bases/"; //local onde estão as bases tanto das contas como dos personagens $serverdata = "./"; /*endereso da pasta data do seu servidor. ex: C:/ot/data/ */ /* Cordenadas de onde o jogador ira aparecer ao se logar */ $spawn["x"] = "793"; // X $spawn["y"] = "1014"; // Y $spawn["z"] = "7"; // Z /* Cordenadas do tenplo inicial */ $temple["x"] = "793"; // X $temple["y"] = "1014"; // Y $temple["z"] = "7"; // Z ?> Vermelho:onde estamos abrindo e fechando a Tag do php. Azul:As variaveis que usaremos varias vezes no próximos arquivos. Sublinhado :Os valores atribuídos as variáveis Verde:Os comentários que explicam para que cada variável será usada.(eles não surtem efeito nenhum no código) osb: na hora de colocar o caminho para a pasta data do seu servidor não esquece de que se você colocar C:\ot\data\ ocorrera um erro pois para o php / é diferente de \ Certo agora fazer o nosso primeiro formulário o pra criar a conta e o personagem junto (quase igual ao que o Eltrus fez no seu tutorial) com o nome: formulario_acc.html <html> <head> <title>Criar conta</title> </head> <body> <form[color=Blue] method="post" [/color]action="cria_acc.php"> Numero da conta<br/> <input type="text" name="acc"/><br/> Senha<br/> <input type="password" name="pass"/><br/> Nome(personagem)<br/> <input type="text" name="name"/><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" /><br/> </form> </body> <html> Azul:O jeito que o formulario será enviado o post é o mais segura pois o usuário não poderá muda-los depois. Vermelho:para onde esse formulario será enviado. agora veremos o grandioso(é grande mesmo) cria_acc.php ,iremos velo em partes pois ele é muito grande.... 1°parte include("config.inc.php"); a função include vai adicionar no inicio do nosso arquivo o conteúdo do arquivo config.inc.php assim não precisamos defini-las aqui de novo e se precisarmos mudar alguma mudamos no config.inc.phpif 2°parte: if que não acaba mais ^^ if(IsSet($_POST["acc"]) && IsSet($_POST["pass"])){ if(!is_nan($_POST["acc"])){ if(strlen($_POST["pass"]) < 20 || strlen($_POST["pass"]) > 3){ if(!file_exists($serverdata."accounts/".$_POST["acc"].".xml")){ if(IsSet($_POST["name"])){ if(!@strpbrk($_POST["name"],"*/\!@#$%")){ if(!file_exists($serverdata."players/".$_POST["name"].".xml")){ linha2: verifica se o numero da conta é numérico, mas por algum motivo ela a função is_nan diz SIM se acc$_POST["acc"](que é a variável que agora guarda o numero da conta) não for um numero, mas queremos que elas diga SIM se for um numero, por isso colocamos uma ! antes da função para que ela diga a respostas oposta ou seja se ela quiser dizer sim ela diz não ^^.(o mesmo vale para todas as vezes que o ! aparecer antes da função) linha3:verificamos se a senha tem um mínimo de digito e um maximo com a função strlen(obs: $_POST["pass"]e onde esta guardada a senha ) que nos diz quantos dígitos tem o que esta dentro daquela variável. obs: o || tem o mesmo significado que OR(ou). linha4: vamos ate a pasta do servidor ver se já tem uma conta com esse numero e 3 linha mais em baixo verificamos a mesma coisa só que com o Jogador. lembra da variável $serverdataque definimos antes olha onde estamos usando elas. linha1: aqui usamos a função IsSet pra ver se o numero da conta e a senha estão preenchidos ou não e na ante-penultima linha fazemos o mesmo com o nome do personagem($_POST["nome"]). linha5:estamos verificando se o nome do personagem não possui caracteres especiais, a @ esta manipulado a função strpbrkpois elas não serve par dizer verdade caso ache um daqueles caracteres ela apenas diz falso se não achar,por isso usamos a @ para fazer ela dizer verdade caso consiga. 3°criando o xml da conta(Para entender melhor essa parte tenha a vista o arquivo: Acc_base.xml) /*Cria a Conta*/ $AccBase = simplexml_load_file($bases."Acc_base.xml"); $AccBase["pass"] = $_POST["pass"]; $char = $AccBase->characters->addChild('character'); $char->addAttribute('name',$_POST["name"]); $char->addAttribute('worldid',"1"); $acc = fopen($serverdata."accounts/".$_POST["acc"].".xml", "x"); fwrite($acc,$AccBase->asXML()); fclose($acc); agora sim conplica(nem tanto) linha1 :bem nessa linha nos pegamos o arquivo Acc_base.xml e gardamos de uma forma muito dinamica na variavel $AccBase Linha2:bem sabe a tag <account>que é a tag do XML da conta, agora ela esta na variavel $AccBase, então para colocarrmos a senha so presisamos atribuir um valor a um parametro basta faser como fisemos na linha 2 do codigo acima. linha3: na linha 3 nois adicionamos uma nova tag chamda <character>(é a que garda que personagem a conta tem) dentro da tag <characters> que esta dentro da tag <account>(representada agora por $AccBase) e gardamos isso em uma nova variavel (para facilitar). linha4 e 5: adicionamos a tag do personagem o atributo que garda seu nome e seu repectivo valor, asim como o atriboto que dis em qual mundo esta o personajem linha 6: bem aqui comesamos a gravar a conta do jogador.a função fopen abre o arquivo(no caso o xml cojo nome é o numero da conta) nesse caso ele cria o arquivo e o abre. linha 8: bem aqui gravamos dentro do arquvio da conta o seu conteudo. mas por que usar $AccBase->asXML() é não só $AccBase? simples a variavel $AccBase não é uma cadei de carcters que representa um arquivo xml + sim um objeto que representa um xml por isso temos que usar $AccBase->asXML() que o que seja gravado no aquivo da conta seja uma cadeia de caracters que representa um XML. linha9:fecha o arquivo e pronto o arquivo da conta foi criado con suseso. Bem irei ficar por aqui com o tutorial pois o Post ja esta muito grade na prosima parte do tutorial explicarei a parte que cria o XML do personagem.
  5. fazendo site para ot XML[outro método]P2

    Antes de mais nada, essa é a parte 2 do tutorial se você não leu a parte 1 ela se encontra no seguinte link:http://forums.otserv.com.br/f34/fazendo-site-para-ot-xml-outro-metodo-p1-89165/ Continuando: Bem na parte 1 do tutorial eu avia parado após terminar de explicar a criação do arquivo da conta bem agora vamos para a parte que cria o arquivo do Personagem. /*cria o Personagem inicial*/ $CharBase = simplexml_load_file($bases."Char_Base.xml"); Essa parte é simples pois já foi explica, estamos pegado o arquivo base da conta do personagem e guardado na variável $CharBase $CharBase["name"] = $_POST["name"]; $CharBase["account"] = $_POST["acc"]; $CharBase["sex"] = $_POST["sex"]; $CharBase["voc"] = $_POST["voc"]; aqui estamos adicionado os valores dos parâmetros nome(nome do personagem), account(a conta a qual ele pertence), sex(o sexo do personagem) e voc(a classe do personagem). $CharBase->spawn["x"] = $spawn["x"]; $CharBase->spawn["y"] = $spawn["y"]; $CharBase->spawn["z"] = $spawn["z"]; $CharBase->temple["x"] = $temple["x"]; $CharBase->temple["y"] = $temple["y"]; $CharBase->temple["z"] = $temple["z"]; aqui estamos adicionando as coordenadas do templo do personagem e as coordenadas de onde ele ira aparecer ao se logar. $char = fopen($serverdata."players/".$_POST["name"].".xml", "x"); fwrite($char,$CharBase->asXML()); fclose($char); como já explicado, aqui estamos criando um novo arquivo com o nome do personagem com a função fopen, escrevendo seu conteúdo com a função fwrite, e fechando o arquivo com a função fclose. echo("Sua conta foi criada com sucesso"); agora vamos usar a função echo, que não faz nada alem de escrever na tela ou no código fonte dependendo do caso,para mostra para o Jogador uma mensagem de que a conta dele foi criada. } else{ echo("<script>alert(\"Este Personagme Já exite\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"o nome do Personagme não pode ter caracters especiais\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"digite um nome para seu Personagme\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"esta conta já existe\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"o numero da conta deve ter entre 3 e 20 digitos\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"o numero da conta nesesita ser numerico\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"numero da conta ou senha não preenchidos\");location=\"formulario_acc.html\";</script>"); } agora você deve querer saber, pra que essa bagunça ai em cima? bem essa bagunça é onde dizemos pro jogador se ele errou algo na gora de preencher o formulário pra criar a conta e o personagem. bem agora volt explicar o'que um deles faz pois todos funcionam quase igual. } else{ echo("<script>alert(\"Este Personagme Já exite\");location=\"formulario_acc.html\";</script>"); } a chave( } ) na primeira linha esta fechado o ultimo if aberto o else{ seria se não satisfazer as condições do if para avançar venha aqui e fase isso, o echo nesse caso esta escrevendo no código fonte da pagina as aspas ("") estão ali para dizer: aqui é só texto ignore todo aqui dentro que parece com funções do php ou variáveis. assim o php apenas escreve aquilo e pronto. as \ antes das aspas aspas e pra não haver erro. exemplo: se fizermos o código <?php echo(" eu "sou" eu"); ?> o resultado será um erro pois PHP vai achar que o sou é um tipo de variável e como ela não existe(alem de estar colocada de modo errado numa entre uma pilha de texto) mas se fizermos assim: <?php echo(" eu \"sou\" eu"); ?> teremos como resualta o seguinte texto: eu "sou" eu agora voltado a explicação do codigo la en cima: a tag <script></script> indeca que estou comesando um codigo en javascript, alert() é uma função do javascrip que tem como resultado: a função location do javascript manda vc para outra pagina nesse caso a pagina de cadastro. bem agora juntando tudo tenos no arquivo cria_acc.php o seguinte codigo <?php include("config.inc.php"); if(IsSet($_POST["acc"]) && IsSet($_POST["pass"])){ if(!is_nan($_POST["acc"])){ if(strlen($_POST["pass"]) < 20 || strlen($_POST["pass"]) > 3){ if(!file_exists($serverdata."accounts/".$_POST["acc"].".xml")){ if(IsSet($_POST["name"])){ if(!@strpbrk($_POST["name"],"*/\!@#$%")){ if(!file_exists($serverdata."players/".$_POST["name"].".xml")){ /*Cria a Conta*/ $AccBase = simplexml_load_file($bases."Acc_base.xml"); $AccBase["pass"] = $_POST["pass"]; $char = $AccBase->characters->addChild('character'); $char->addAttribute('name',$_POST["name"]); $char->addAttribute('worldid',"1"); $acc = fopen($serverdata."accounts/".$_POST["acc"].".xml", "x"); fwrite($acc,$AccBase->asXML()); fclose($acc); /*cria o Personagem inicial*/ $CharBase = simplexml_load_file($bases."Char_Base.xml"); $CharBase["name"] = $_POST["name"]; $CharBase["account"] = $_POST["acc"]; $CharBase["sex"] = $_POST["sex"]; $CharBase["voc"] = $_POST["voc"]; $CharBase->spawn["x"] = $spawn["x"]; $CharBase->spawn["y"] = $spawn["y"]; $CharBase->spawn["z"] = $spawn["z"]; $CharBase->temple["x"] = $temple["x"]; $CharBase->temple["y"] = $temple["y"]; $CharBase->temple["z"] = $temple["z"]; $char = fopen($serverdata."players/".$_POST["name"].".xml", "x"); fwrite($char,$CharBase->asXML()); fclose($char); echo("Sua conta foi criada con suseso"); } else{ echo("<script>alert(\"Este Personagme Já exite\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"o nome do Personagme não pode ter caracters especiais\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"digite um nome para seu Personagme\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"esta conta já existe\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"o numero da conta deve ter entre 3 e 20 digitos\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"o numero da conta nesesita ser numerico\");location=\"formulario_acc.html\";</script>"); } } else{ echo("<script>alert(\"numero da conta ou senha não preenchidos\");location=\"formulario_acc.html\";</script>"); } ?> e devemos ter a seginte ierarquia de pastas: [font=Verdana]WWW/[/font][font=Verdana] -site_[/font][font=Verdana][color=black]ot[/color][/font][font=Verdana]/ -formulario_acc.html -cria_acc.php [/font][font=Verdana]-bases/ -[/font][font=Verdana][color=black]Char[/color][/font][font=Verdana]_Base.[/font][font=Verdana][color=black]XML [/color][/font][font=Verdana]-[/font][font=Verdana][color=black]Acc[/color][/font][font=Verdana]_base.[/font][font=Verdana][color=black]XML[/color][/font][font=Verdana] [/font] bem agora vamos pra o prosimo html: o formulario_login.html <html> <head> <title>Criar conta</title> </head> <body> <form method="post" action="loga_acc.php"> Numero da conta<br/> <input type="text" name="acc"/><br/> Senha<br/> <input type="password" name="pass"/><br/> <input type="submit" /><br/> </form> <a href="formulario_acc.html">não tem conta? então se cadastre</a> </body> <html> esse é um simples formulario de login com um link que leva para a pagina de cadastro caso o jogador não tenha conta ainda. azul: o type="password" quer diser que enver da sua senha apareser (pra qualquer incherico ler)so vão apareser uma pilha de ******* muito + legal não é? agora vamos ver o loga_acc.php include("config.inc.php"); if(IsSet($_POST["acc"]) && IsSet($_POST["pass"]) && is_numeric($_POST["acc"]) && file_exists($serverdata."accounts/".$_POST["acc"].".xml")){ 1° como fisemos antes estamos incluindo o arquivo de configurão config.inc.php 2° estamos verificando em um unico if se o numero da conta foi digitado, se a senha foi digitada, se o numero da conta é um unmero, e se esa conta esite. mas por que verificar isso tudo de uma ves só aqui se quando criamos a conta verificamos um por um? simples: para se cadastras o usuario presisa saber o que esta erado, mas se diser oque esta errado quando ele tenta logar ele pode tentar hackar uma conta por tentaviva e erro pois ele vai saber se o numero da conta é de uma conta ecxisten e se a senha é ou não dessa conta. $acc = simplexml_load_file($serverdata."accounts/".$_POST["acc"].".xml"); if($_POST["pass"] == $acc["pass"]){ caregamos o XML da conta e verificamos se a senha esta coreta. session_start(); //inicia a seção $_SESSION["nacc"]=$_POST["acc"]; iniciamos uma seção e gardamos numa variavel de seção o numero da conta. mas o que é uma variavel de seção? pense nela como uma variavel que so perdera seu valor quando for destrida o que so acontese de 2 maneras 1° usando a função do php session_destroy(); 2° se o jogador que se fez LOGIN se desconctar da internet. e para que iniciar a seção? bem uma variavel de seção so pode ser acesada se uma seção for inicida. echo("<script>location=\"mostra_acc.php\";</script>"); e agora mandamos ele para a prosima pagina que vai mostra para o jogador os personagem que ele posui e dar a ele a posibilidade de exluilos ou criar um personagem novo. ok agora so falta os else para diser que ele digito algo erado: else{ echo("<script>alert(\"numero da conta ou senha incoreto\");location=\"formulario_login.html\";</script>"); } } else{ echo("<script>alert(\"numero da conta ou senha incoreto\");location=\"formulario_login.html\";</script>"); } e dai juntamos tudo no arquivo loga_acc.php que ficara asim: <?php include("config.inc.php"); if(IsSet($_POST["acc"]) && IsSet($_POST["pass"]) && is_numeric($_POST["acc"]) && file_exists($serverdata."accounts/".$_POST["acc"].".xml")){ $acc = simplexml_load_file($serverdata."accounts/".$_POST["acc"].".xml"); if($_POST["pass"] == $acc["pass"]){ session_start(); $_SESSION["nacc"]=$_POST["acc"]; echo("<script>location=\"mostra_acc.php\";</script>"); } else{ echo("<script>alert(\"numero da conta ou senha incoreto\");location=\"formulario_login.html\";</script>"); } } else{ echo("<script>alert(\"numero da conta ou senha incoreto\");location=\"formulario_login.html\";</script>"); } ?> ok por em quanto é só, pois não quero faser um post muito longo. na prosima parte mostro e esplico o arquivo mostra_acc.php
×