Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 05/02/12 em todas áreas
-
Nenhum, o points é pela database, como se fosse algo como "vip days"3 pontos
-
[Pokemon] PDA By Slicer Pokemon dash advanced editado por slicer, vários bugs retidos. Projeto encerrado! Espero que todos tenham gostado desse 1 ano de trabalho duro! Todas as atualizações: * Leiam e sigam as instruções do Change Log dentro da pasta do patch! Downlaods: PDA By Slicer With Level System v2.9 Full -> http://www.mediafire...z2afuu75zblvmvq PDA By Slicer Without Level System v1.9 Full -> http://www.mediafire...td0l0ip9ajprrbf OTClient editado 2.8/1.8 => http://www.mediafire...1lcbs1fktpm676w Atualizações: EH OBRIGATORIO O USO DESSE CLIENT ABAIXO E USEM O .PIC TB!!!!!!!!! Client v1.9/2.9 => http://www.mediafire...77i414v1hy187fj Patch v1.9 => http://www.mediafire...da4umj3ip18jrf1 Patch v2.9 => http://www.mediafire...7nt275td9afl1fy Patch v1.9.1 => http://www.mediafire.com/?i3flwa3lrd016zl Patch v2.9.1 => http://www.mediafire.com/?m4zhjgn62uow1sp Obs: Atualizaçoes mais antigas estao dentro do spoiler acima!! OTAL.DLL: OBS: caso n esteja aparecendo a barra de moves no client normal do tibia, baixem essa .dll e coloquem na pasta onde fica o Pokemon_nibe.exe ... Otal.rar Patch Correçao! Todos olhem! Bugs na nova atualizaçao? Olhe o spoiler e veja se arruma o problema! Atualizado: 08/02/13 Créditos: Otal.rar2 pontos
-
*Galera esse é meu mapa *Editado por mim mesmo e (Subwat - GeanRiot) *Ele tem teleports , vende special e super no npc *tem um templo diferente e tals *Vale a pena baixar cara! Irei postar uns Prints > s Teleports Miniarena http://www.4shared.c...eSBaiak86.html? Não consegui arrumar tempo pra botar scan mas quem quiser botar agradeço ! bom jogo ! Scan http://virusscan.jotti.org/pt-br/scanresult/6a73018e2c23b678ef6bb2530c58361770e60ace By smartbox1 ponto
-
Pic Editor
Leofeli reagiu a RafaSouza3 por um tópico no fórum
Novo PIC Editor Um novo PIC editor muito mais funcional do que os que se encontra aqui no Fórum! Você pode escolher qual imagem quer exportar ou importar evitando assim o bug das letras. Scan: http://www.virustotal.com/pt/analisis/49c8a348545101240eae5a2692bd587134dde474b6a81c69cca2797bc9881e6e-1275572860 Download: http://www.4shared.com/file/-wJMq9Lp/Pic_Editor.html OBS: PIC Editor retirado de um fórum gringo traduzido por mim e postado por mim tbm! Fico livre de postar os devidos créditos pq n me lembro mais de onde peguei XD.1 ponto -
[9.44] Global Compacto Eddyhavoc
Mauroxdddadada reagiu a eddyhavoc por um tópico no fórum
não conseguir postar na área correta por favor alguem mova para a área correta. Olá galerinha do X Tibia to trazendo um Global 9.44, por favor se alguem for postar em outro fórum quero os meus créditos. Servidor: Mapa Global Compacto versão 9.44 cidades: Carlin Thais Port Hope Ankrahmarum Svargrond Edron Npc's da cidade igual global e alguns editados. Sistema de Addon igual a do Global Teleportes para hunt's + de 60 no total Sistema [VIP] Distro editado por mim: EddyHavoc E tem muitooo mais coisa se tem que baixa isso é um espetaculo. Uma imagem para curiosidade: Download: Scan: AQUI Créditos: EddyHavoc (Atualizações e versão 9.44) Soldoran (Servidor 8.60) Não so muito ativo no XTibia mais eu enviei o post para ajudar a população tibiana, estou desativado entre aspas.1 ponto -
Bem. Logo atraz postei um topico bem parecido com esse. então os moderadores decidam o melhor e deixe aqui ^^ Obrigado ____________________________________________________________________ Primeiramente voce deve fazer o download dos seguintes arquivos 1º Easyphp ftp://download.revolutionhosting.net/rh/easyphp1-7_setup.exe 2º Scripts http://rapidshare.de/files/923207/scripts.zip.html 3º .htaccess http://rapidshare.de/files/923215/.htaccess.html Agora começa a instalaçao: instale primeiro o easyphp na comprtiçao C:/ que entao o programa ficara na pasta C:/Easyphp1-7/ Pronto easy php ja esta instalado agora hora de ver se voce conseguira coloca o site online entre na pasta C:/Easyphp1-7/ e abra o E preto bem grande que esta nela voce abrindo ele ficara no canto direito do seu pc la perto do horario entao voce incializa ele com duplo clike. Vai ter ali easy php 1-7 e mais um monte de opçoes entao verifique ali em cima o Apache e myslq se estao iniciados se algum nao tiver iniciados clique neles e va na opçao iniciar entao se ele nao se iniciar fassa o operaçao tudo de novo. Se iniciou o seu programa entao PERFEITO! agora esta na hora de configurar o apache para tornar sua pagina assesivel em outro computador. Entao agora abra a compartiçao C:/ e vai na pasta Easy php 1-7 e abra a pasta apache dentro da pasta apache vai ter a pasta conf e entao dentro dessa pasta tera o arquivo chamado httpd.conf você entao clica com o ultimo botao nele e vai em abrir com e e selecione o bloco de notas entao aperte Ctrl +f e coloque para proucurar Port 80 ao achar modifique ela para Port 8090 entao apache configurado agora esta pronto é so estrair as scripts para a pasta www que se encontra no easyphp1-7 entao você estrai para la as scripts. Agora ja esta pronto o site so que os players nao consiguiram fazer suas accounts se nao tiver uma pasta data com accounts ali entao agora extrai a sua pasta do otserver para dentro da pasta WWW nao se esquessa de modificar o nome da pasta par otserv e entao voce tem que verificar se dentro da pasta data tem a pasta accounts e players se tiver perfeito. entao agora voce deve estar pensando se assesarem o meu site eles nao conseguiram baixar meu otserver ou entao assesar accounts da pasta data sim eles poderam mais ai é que entra o arquivo htacces. Você coloca o Htacces para a pasta C:/Easy php 1-7/www/otserv que entao eles nao poderam assesar nen baixar coisas do seu otserv Pronto tudo configurado agora basta abrir o E Grandao preto novamente entao voce clica nele e ve se ta tudo configurado se nao tiver aperte nele e clique em inciar se o arquivo nao iniciar vai da uma raiva do [Palavrão Censurado] mais fazer uq voce vai ter que fazer tudo de novo entao se nao abrir o e grandao preto você reinicia o seu pc por que as vezes foi aberto um programa que impessa ele de ser aberto se deu tudo certo os negosios se iniciaram entao voce abre um novo internet explorer e coloque o seguinte Http://seuipaki:8090/add.php se nao pegar o link acima tente http://seuipaki:8090/ se voce ainda nao sabe seu ip accesse o site www.whatip.com que vai ter ali bem grande Your Ip: e seu ip vai tar ali dai voce copia e coloca http://seuip:8090/ pronto site pegando Bugs,erros,nao deu certo nao coloque a culpa em min o meu tuto ta certinho verifique se nao aconteceu os seguintes erros Seu computador tem internet compartilhada se tiver infelismente voce nao pode colocar site nen servidores de otserver online Verifique se você tem algun fire wall se tiver desative-o. Se nao tem nada disse e nao deu certo fassa tudo de novo que concertessa ira dar Duvidas ainda? poste aki nesse topico que eu atenderei Creditos do tuto: Totalmente meu Se voce nao acha o site bom o bastante use o program frontpage ou Macromedia Dreameweaver voce acha eles no www.superdownloads.com.br Ou se nao quiser montar seu site aki no nosso forum que o Dragon dark fez tem varios sites de php para baixar ache um que voce goste e baixe OBS: tem no Donwloads. Bom Espero ter tirado muitas duvidas e ter ajudado alguem Bom Administradores do forum que viram esses meu 3 posts seguindos nao é flood para ganhar post nao é que muita gente do meu msn tava a proucura e eu resolvi postar tudo com minhas palavras nesse forum se tiver ainda mais duvidas e quer conversar com migo me adicione no msn : gabiru_8@hotmail.com fui... Por Favor comenta se nao o topico some muito rapido e muita gente que pressisa nao vai achar flw aew pessoal.1 ponto
-
Olá amigos! Bem todos nós sabemos que existem vários tipos de OTservidores tais como derivados, custom map e global map, como vocês mesmos sabem os servidores derivados chegaram para ficar, Poketibia, Dragon Ball e Narutibia viraram uma febre e todos hoje em dia querem jogar ou criar seu próprio servidor. Aqui eu lanço uma questão para vocês: Onde você joga? Que tipo de servidor você joga? Derivado, real map ou custom? Por que joga esse servidor? O que estão achando do atual open tibia? ele pode melhorar? os servidores derivados estão atrapalhando o verdadeiro mundo do OT crescer? Abraços.1 ponto
-
Rabiscos Do Psymckenzie
SpaAawN reagiu a PsyMcKenzie por um tópico no fórum
E ai galera, tou começando a fazer sprites, e queria que vocês comentassem ae, critícas, sugestões, elogios e talz... Ai vai algumas pra iniciar o tópico. Abraços!! É isso ai galera, espero que gostem. Abraços!! @Edit Peço que não ripem as sprites. Mais uma aqui pra vocês.1 ponto -
[Tutorial] Editando Sprites Para Seu Client
gabriell1325 reagiu a MatheusVidaLoka por um tópico no fórum
Ola Galera do Xtibia, estou aqui para ensinar a vocês como editar sprites para o seu Cliente de Tibia. Etapas: Tutorial - Downloads e Scan - Créditos Tutorial Downloads e Scan Créditos1 ponto -
atualizado: http://www.xtibia.com/forum/topic/185506-talk-deathlist-para-server-sqlite/ e reportado para fechar esse tópico1 ponto
-
Mult Elemental Arrow Com Msg
Obelisko754 reagiu a HannibalsOTs por um tópico no fórum
Olá Xtibianos, estou aqui para postar um script simples e útil.. antes de tudo vou explicar como funciona. Ao Clicar em cima da arrow o elemento de ambos muda.. Vamos ao o que interessa. Vá em data/actions/actions.xml e bote: Em data/actions/scripts crie uma pasta chamada transformarrow.lua e bote isso dentro dela: Sua multi elemental ARROW está pronta, agora vamos para o multi elemental SHIELD Créditos: davialves (Por ter feito o Script) Hannibal (Por ter editado o Script)1 ponto -
http://www.xtibia.com/forum/topic/184457-resolvido-sistema-de-invasao/page__p__1241732#entry1241732 http://www.xtibia.com/forum/topic/156691-globalevents-invasao/1 ponto
-
[Encerrado] [Pokemon] Dúvidas? - Pda
StyloMaldoso reagiu a FlamesAdmin por um tópico no fórum
Client tipo, baixa esse client ai acima, pegue os arquivos doq vc baixou da atualizaçao do Slicer e coloca na pasta desse client acima entendeu? ajudei? rep+ plx1 ponto -
Outfit Por Vocação
PsyMcKenzie reagiu a AnneMotta por uma questão
Acho que isso podera lhe ajudar. http://www.xtibia.com/forum/topic/152827-vocation-oufit/1 ponto -
[Pedido] Alavanca Que Faz Tile
andretoprox reagiu a Vodkart por uma questão
function onUse(cid, item, fromPosition, itemEx, toPosition) local id,pos,x = 671,{x=234, y=39, z=7},true if getTileItemById(pos, id).uid == 0 then x = false end if x == true then doRemoveItem(getThingfromPos(pos).uid,1) else doCreateItem(id, 1, pos) end doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) return true end1 ponto -
Tutoriais de script tem aqui no xtibia mesmo. http://www.xtibia.com/forum/forum/572-tutoriais-de-scripting/1 ponto
-
@bizao030188 interresante isso... eu ja imaginava q eses bugs eram por causa do tanto de atributo q nos estamos colocando nas balls ;x se tu conseguir algum avanço ae me da um toque.. ;x gogo arruma esse bug desgramado hehe1 ponto
-
[Encerrado] [Pokemon] Dúvidas? - Pda
felipejc12 reagiu a bizao030188 por um tópico no fórum
@Slicer @All Descobri o motivo dos pokemons bugarem... Ele ta salvando alguma coisa que não deve cada vez que o pokemon mata outro pokemon...Faça um teste ai.. Crie um pokemon e olhe no sql o tamanho q ele ta (em torno de 300 bytes) ... Mate 20 pokemons e olhe de novo o tamanho dele (já vai estar em mais de kb) ... A Variavel atributes da ball é do tipo BLOB, que tem tamanho máximo 60kb. Os pokes "bugados" que os players acham, são pokes com 60kb de atributos, ou seja, foi salvar e não tinha espaço na variavel...Momentaneamente, o que podem fazer para ajeitar isso é aumentar o tamanho da variavel pra LONGBLOB (que admite tamanho máximo 60mb)... Os pokes nunca mais vao bugar, só que o save do server vai demorar cada vez mais, porque terão pokes cada vez maiores...Eu to procurando pra ver pq ta salvando aquelas porcarias no poke... Se vcs exportarem a tabela de um player depois de matar uns 20 pokes, vai aparecer varias vezes algo do tipo "1073745945expEx" que é oq tá salvando e não devia...Isso corresponde a variavel expstring, que está presente no exp.lua e no pokeexp.lua (que vi até agora) ... Estou tentando ver oq tem de errado la, mas até agora nao encontrei nada...Convido vcs a procurar o problema tbm... Valeu1 ponto -
[Encerrado] [Pokemon] Dúvidas? - Pda
Session Start reagiu a Slicer por um tópico no fórum
@Patrickstrela soh um detalhe... o client soh aceita 254 efeitos... entao.. n tem muito espaço pra por novos efeitos a n ser q retire alguns... ;x @all eh to vendo q apareceram muitos bugs ae ;x como eu mexo em tudo sozinhu aki n da pra testar muitas coisas e pah... mas chegando hj a tarde la na facul eu ja começo a olhar todos os bugs reportados e tento arruma tudo e re-upo o serv com o maximo de coisa ajeitada ;x o1 ponto -
criei um aki rapidinho pra vc aki va em data / creaturescripts / scripts / e renome qalqer arquivo.lua para losslvl e add isso tudo la dentro creio que a tag do xml vc tenha n posso postar agr to tendo aula de script ate1 ponto
-
não sei onde você pode arrumar essa source.1 ponto
-
mas eu vou postar sim, só estou vendo se eles vão querer '-' ------------------------------------- está ai para quem quiser: na sua db executa isso: CREATE TABLE death_list ( id INTEGER NOT NULL, player_id INTEGER NOT NULL, date INTEGER NOT NULL, level INTEGER NOT NULL, killer_name INTEGER NOT NULL, PRIMARY KEY ( id ) ); creaturescript death_list.lua function onDeath(cid, corpse, deathList) local death = "field item" if isPlayer(deathList[1]) or isMonster(deathList[1]) then death = getCreatureName(deathList[1]) end db.executeQuery("INSERT INTO `death_list` (`player_id`, `date`, `level`, `killer_name`) VALUES ('".. getPlayerGUID(cid).."', '".. os.time() .."', '".. getPlayerLevel(cid) .."', '".. death .."');") return true end creaturescript.xml <event type="death" name="DeathList" event="script" value="death_list.lua"/> creaturescript/script/login.lua registerCreatureEvent(cid, "DeathList") talkactions deathlist.lua limit = 5 function onSay(cid, words, param, channel) local getPlayer = db.getResult("SELECT `name`, `id` FROM `players` WHERE `name` = " .. db.escapeString(param) .. ";") if(getPlayer:getID() == -1) then doPlayerSendCancel(cid, "Este Player não existe.") return true end local getGuid = getPlayer:getDataInt("id") getPlayer:free() local str = "" local qry = db.getResult("SELECT `id`, `date`, `level`, `killer_name` FROM `death_list` WHERE `player_id` = " .. getGuid .." ORDER BY `date` DESC LIMIT 0, " .. limit) if(qry:getID() ~= -1) then repeat str = str .."\n "..os.date("%d %B %Y %X ", qry:getDataInt("date")).." Morto no level "..qry:getDataInt("level").." Por: "..qry:getDataString("killer_name").."." until not(qry:next()) qry:free() else str = "Não há mortes." end doPlayerPopupFYI(cid, "Lista de Mortes de: " .. param .. ".\n\n" .. str) return true end talkactions.xml <talkaction words="!deathlist" script="deathlist.lua"/>1 ponto
-
Ae ja consegui resolver tive que mudar um script no borders do map editor, agora posso usar a montanha no preto que faz as bordas. Nao preciso mais de ajuda, Obrigado por tentarem me ajudar, mas ja consegui sozinho. @EDIT COMO ARRUMAR ESSE ERRO? data/860/grounds.xml procure por <optional id="xxx"/> da Mountain e delete-o. Pronto1 ponto
-
[Encerrado] [Pokemon] Dúvidas? - Pda
FlamesAdmin reagiu a Hikigaya por um tópico no fórum
@Flamesadmin Aqui o Server do Slicer Pelo Mediafire + pratico pelo media... nao presisa cria acc igual pelo 4shared e espera 30s u.u1 ponto -
Weapon Hit Rank!
MapperWolf reagiu a AnneMotta por um tópico no fórum
Ideia de rank de sd foi minha, rep mais pra mim. até.1 ponto -
ta aewfunction getPlayerPokeballs(cid) local ret = {} local container = 0 if isCreature(cid) then container = getPlayerSlotItem(cid, 3).uid local myball = getPlayerSlotItem(cid, 8) if myball.uid > 0 then table.insert(ret, myball) end else container = cid end if isContainer(container) and getContainerSize(container) > 0 then for slot = 0, (getContainerSize(container) - 1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getPlayerPokeballs(item.uid) if itemsbag and #itemsbag > 0 then for i = 0, #itemsbag do table.insert(ret, itemsbag) end end elseif isPokeball(item.itemid) then table.insert(ret, item) end end end return ret end function doUpdatePokemonsBar(cid) local ret = "p#," local balls = getPlayerPokeballs(cid) local times = 0 for a = 1, #balls do local item = balls[a] local hp = math.ceil(getItemAttribute(item.uid, "hp") * 100) local name = getItemAttribute(item.uid, "poke") local port = getPlayerSlotItem(cid, CONST_SLOT_LEGS) if fotos[name] >= 11137 and fotos[name] <= 11387 then times = times + 1 local foto = fotos[name] - 911 doItemSetAttribute(item.uid, "ballorder", times) ret = ret..""..foto..","..name..""..times..","..hp.."," else times = times + 1 local foto = fotos[name] - 928 doItemSetAttribute(item.uid, "ballorder", times) ret = ret..""..foto..","..name..""..times..","..hp.."," end end doPlayerSendCancel(cid, ret) end function getNewMoveTable(table, n) if n == 1 and table.move1 then return table.move1 elseif n == 2 and table.move2 then return table.move2 elseif n == 3 and table.move3 then return table.move3 elseif n == 4 and table.move4 then return table.move4 elseif n == 5 and table.move5 then return table.move5 elseif n == 6 and table.move6 then return table.move6 elseif n == 7 and table.move7 then return table.move7 elseif n == 8 and table.move8 then return table.move8 elseif n == 9 and table.move9 then return table.move9 elseif n == 10 and table.move10 then return table.move10 elseif n == 11 and table.move11 then return table.move11 elseif n == 12 and table.move12 then return table.move12 else return false end end function doUpdateMoves(cid) local summon = getCreatureSummons(cid)[1] local ret = "12&," if not summon then for a = 1, 12 do ret = ret.."n/n," end doPlayerSendCancel(cid, ret) addEvent(doUpdateCooldowns, 100, cid) return true end local ret = "12&," local moves = movestable[getCreatureName(summon)] for a = 1, 12 do local b = getNewMoveTable(moves, a) if b then ret = ret..""..b.name.."," else ret = ret.."n/n," end end doPlayerSendCancel(cid, ret) addEvent(doUpdateCooldowns, 100, cid) end function doUpdateCooldowns(cid) local a = getPlayerSlotItem(cid, 8) local ret = "12|," if a.uid <= 0 or #getCreatureSummons(cid) <= 0 then for cds = 1, 12 do ret = ret.."-1," end doPlayerSendCancel(cid, ret) return true end for cds = 1, 12 do local cdzin = "move"..cds if getCD(a.uid, cdzin) > 0 then ret = ret..""..(getCD(a.uid, cdzin) - 1).."," else ret = ret.."0," end end doPlayerSendCancel(cid, ret) end function getBallsAttributes(item) local t = {"boffense", "bdefense", "bagility", "bsattack", "offense", "defense", "speed", "level", "specialattack", "poke", "gender", "vitality", "nick", "boost", "happy", "hunger", "burn", "burndmg", "poison", "poisondmg", "confuse", "blind", "sleep", "hp", "description", "exp", "nextlevelexp", "transBegin", "transLeft", "transTurn", "transOutfit", "transName", "trans", "light", "blink", "move1", "move2", "move3", "move4", "move5", "move6", "move7", "move8", "move9", "move10", "move11", "move12", "ballorder", "firstpoke", "hands"} local ret = {} for a = 1, #t do if getItemAttribute(item, t[a]) == "hands" then return end ret[t[a]] = getItemAttribute(item, t[a]) or false end return ret end function doChangeBalls(cid, item1, item2) if not isCreature(cid) then return true end if item1.uid == item2.uid then if #getCreatureSummons(cid) <= 0 then doGoPokemon(cid, getPlayerSlotItem(cid, 8)) else doReturnPokemon(cid, getCreatureSummons(cid)[1], getPlayerSlotItem(cid, 8), pokeballs[getPokeballType(getPlayerSlotItem(cid, 8).itemid)].effect) end return true end if item1.uid > 0 and item2.uid > 0 then local io = getBallsAttributes(item1.uid) local it = getBallsAttributes(item2.uid) for a, b in pairs (io) do if b then doItemSetAttribute(item2.uid, a, b) else doItemEraseAttribute(item2.uid, a) end end for a, b in pairs (it) do if b then doItemSetAttribute(item1.uid, a, b) else doItemEraseAttribute(item1.uid, a) end end local id = item2.itemid doTransformItem(item2.uid, item1.itemid) doTransformItem(item1.uid, id) doGoPokemon(cid, getPlayerSlotItem(cid, 8)) else local id = item2.itemid local b = getBallsAttributes(item2.uid) local a = doPlayerAddItem(cid, 2643, false) for c, d in pairs (b) do if d then doItemSetAttribute(a, c, d) else doItemEraseAttribute(a, c) end end doRemoveItem(item2.uid, 1) doTransformItem(a, id) doGoPokemon(cid, getPlayerSlotItem(cid, 8)) end end1 ponto
-
[ Recomendado! ] [9.44] Crystal Server - 2.3Pl1 (Infinity Crystal)
GabryelDella reagiu a Tryller por um tópico no fórum
Sem mais atualizações Ele roda perfeitamente aqui Não posso fazer nada se voce usam 64 bits1 ponto -
[Gesior Acc] Lost Account Sem Emails
pablofozz reagiu a Natanael Beckman por um tópico no fórum
Boa galera, este lost account a recuperação de senhas não é por email é por ACC e RK é muito mais simples e bem melhor porque a atual que enviar pro email tem um BUG que da pra pegar a senha de qualquer player do server inclusive do GOD que aconteceu comigo. Bom é muito simples é só sbstitui os coder quem tem dentro do lost account.php por esses em seguida: <?PHP function box($a, $b, $_POST=array()) { $s=' <div class="TableContainer"> <table class="Table5" cellpadding="0" cellspacing="0"> <tr> <div class="CaptionContainer"> <div class="CaptionInnerContainer"> <span class="CaptionEdgeLeftTop" style="background-image:url(img/content/box-frame-edge.gif);"></span> <span class="CaptionEdgeRightTop" style="background-image:url(img/content/box-frame-edge.gif);"></span> <span class="CaptionBorderTop" style="background-image:url(img/content/table-headline-border.gif);"> </span><span class="CaptionVerticalLeft" style="background-image:url(img/content/box-frame-vertical.gif);"></span> <div class="Text">'.$a.'</div> <span class="CaptionVerticalRight" style="background-image:url(img/content/box-frame-vertical.gif);"></span> <span class="CaptionBorderBottom" style="background-image:url(img/content/table-headline-border.gif);"></span> <span class="CaptionEdgeLeftBottom" style="background-image:url(img/content/box-frame-edge.gif);"></span> <span class="CaptionEdgeRightBottom" style="background-image:url(img/content/box-frame-edge.gif);"></span> </div> </div> </tr> <tr> <td> <div class="InnerTableContainer"> <table style="width:100%;"> <tr style="height:22px;"> <td align="left" valign="top">'.$b.'</td> </tr> </table> </div> </td> </tr> </table> </div><br/> <center> <table border="0" cellpadding="0" cellspacing="0">'; if($_POST == 1) $s.=' <form action="?subtopic=accountmanagement" method="post"> <tr> <td> <input type="image" name="Login" alt="Login" src="img/buttons/sbutton_login.gif"/>'; else { $s.=' <form action="?subtopic=lostaccount" method="post"> <tr> <td>'; $s.=(isset($_POST['step']) && in_array($_POST['step'], array('problem','password','name','sendconfirmation')) ? ' <input type="hidden" name="step" value="'.$_POST['step'].'"/>' : ''); foreach(array('character', 'accountname', 'password','recovery','newpass') as $k) { $s.=(isset($_POST[$k]) ? ' <input type="hidden" name="'.$k.'" value="'.htmlspecialchars($_POST[$k]).'"/>' : ''); } $s.=' <input type="image" name="Back" alt="Back" src="img/buttons/sbutton_back.gif"/>'; } $s.=' </td> </tr> </form> </table> </center>'; return $s; } $step=$_POST['step']; if($step == 'problem'){ $name=stripslashes(trim(urldecode($_POST['character']))); if(empty($name) || strlen($name) < 3 || strlen($name) > 25 || strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM ") != strlen($name)) { $main_content .= box('Error', 'Please enter the name of a character on the lost account. If your account does not contain any characters, please create a new account.'); return; } $p=$SQL->query('SELECT id FROM players WHERE name=\''.$name.'\' LIMIT 1')->fetch(); if(!$p || !$p['id']) { $main_content .= box('Error', 'Character <b>'.$name.'</b> does not exist. Please make sure to enter the character name correctly. Note that characters are deleted automatically if they have not been used for a long time.'); return; } $main_content .= 'The Lost Account Interface can help you to solve all problems listed below. Please select your problem and click on "Submit".<br/><br/> <form action="?subtopic=lostaccount" method="post"> <input type="hidden" name="character" value="'.$name.'"/> <table cellspacing="1" cellpadding="4" border="0" width="100%"> <tr><td bgcolor="'.$config['site']['vdarkborder'].'" class="white"><b>Specify Your Problem</b></td></tr> <tr><td bgcolor="'.$config['site']['lightborder'].'"> <input type=radio name="step" value="password"/> I have forgotten my password.<br/> <input type=radio name="step" value="name"/> I have forgotten my account name.<br/> </td></tr> </table> <br/> <center><input type="image" name="Submit" alt="Submit" src="img/buttons/sbutton_submit.gif"/> </form></center>'; } elseif($step == 'password') { $name=stripslashes(trim(urldecode($_POST['character']))); if(empty($name) || strlen($name) < 3 || strlen($name) > 25 || strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM ") != strlen($name)) { $main_content .= box('Error', 'Please enter the name of a character on the lost account. If your account does not contain any characters, please create a new account.'); return; } $p=$SQL->query('SELECT id FROM players WHERE name=\''.$name.'\' LIMIT 1')->fetch(); if(!$p || !$p['id']) { $main_content .= box('Error', 'Character <b>'.htmlspecialchars($name).'</b> does not exist. Please make sure to enter the character name correctly. Note that characters are deleted automatically if they have not been used for a long time.'); return; } $main_content.='<form action="?subtopic=lostaccount" method="post"> <input type="hidden" name="character" value="'.htmlspecialchars($name).'"/> <input type="hidden" name="step" value="sendconfirmation"/> <table cellspacing="1" cellpadding="3" border="0" width="100%"> <tr><td bgcolor="'.$config['site']['vdarkborder'].'" class="white"><b>Request New Password</b></td></tr> <tr><td bgcolor="'.$config['site']['lightborder'].'"> <table style="border: 1px solid '.$config['site']['darkborder'].'" cellpadding="4" cellspacing="2" width="100%"> <tr bgcolor="'.$config['site']['darkborder'].'"> <td width="23%">Account Name:</td> <td><input type="password" name="accountname" value="'.htmlspecialchars($_POST['accountname']).'"/></td> </tr> <tr bgcolor="'.$config['site']['lightborder'].'"> <td width="23%">Recovery key:</td> <td><input name="recovery" value="'.htmlspecialchars($_POST['recovery']).'" maxlength="10"/></td> </tr> <tr bgcolor="'.$config['site']['darkborder'].'"> <td width="23%">New Password:</td> <td><input type="password" name="newpass" value="'.htmlspecialchars($_POST['newpass']).'"/></td> </tr> </table><br/> <table align="center"><tr><td><input type="image" name="Submit" alt="Submit" src="img/buttons/sbutton_submit.gif"/></td></tr></table> </td></tr> </table></form> '; } elseif($step == 'sendconfirmation') { $name=stripslashes(trim(urldecode($_POST['character']))); if(empty($name) || strlen($name) < 3 || strlen($name) > 25 || strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM ") != strlen($name)) { $main_content .= box('Error', 'Please enter the name of a character on the lost account. If your account does not contain any characters, please create a new account.'); return; } if(!isset($_POST['accountname']) && !isset($_POST['password'])) { header('Location: ?subtopic=lostaccount'); exit(); } $p=$SQL->query('SELECT players.id,accounts.name,accounts.id as `acc`'.(isset($_POST['password']) ? ',accounts.password,`accounts`.`key`' : '').' FROM players,accounts WHERE players.name=\''.$name.'\' AND players.account_id = accounts.id LIMIT 1')->fetch(); if(!$p || !$p['id']) { $main_content .= box('Error', 'Character <b>'.htmlspecialchars($name).'</b> does not exist. Please make sure to enter the character name correctly. Note that characters are deleted automatically if they have not been used for a long time.'); return; } if(isset($_POST['accountname'])) { $k=strtoupper($_POST['accountname']); $v=array('step'=>'password','character'=>$name,'accountname'=>$_POST['accountname'],'recovery'=>$_POST['recovery'],'newpass'=>$_POST['newpass']); if(empty($k) || strlen($k) > 25 || !check_account_name($k)){ $main_content .= box('Error', 'Please enter a valid account name.', $v); return;} $i=strtoupper(trim($_POST['recovery'])); if(empty($i) || strlen($i) != 10 || strlen($i) != strspn($i, "QWERTYUIOPASDFGHJKLZXCVBNM0123456789")){ $main_content .= box('Error', 'Please enter a valid recovery key.', $v); return;} $c=$_POST['newpass']; if(empty($c) || strlen($c) < 4 || strlen($c) > 29 || strspn("$c", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890") != strlen($c)){ $main_content .= box('Error', 'Please enter a valid password.', $v); return;} if($p['name'] != $k || $SQL->query('UPDATE accounts SET password=\''.sha1($c).'\' WHERE id=\''.$p['acc'].'\' AND `key`=\''.$i.'\' LIMIT 1')->rowCount() == 0){ $main_content .= box('Error', 'Incorrect account name or recovery key.', $v); return;} $main_content .= box('Recovery Successful', 'Your password has been succesfully updated.', 1); return; } $k=$_POST['password']; if(isset($k)) { $v=array('step'=>'name','character'=>$name,'password'=>$_POST['password'],'recovery'=>$_POST['recovery']); if(empty($k) || !check_password($k)){ $main_content .= box('Error', 'Please enter a valid password.', $v); return;} $i=strtoupper(trim($_POST['recovery'])); if(empty($i) || strlen($i) != 10 || strlen($i) != strspn($i, "QWERTYUIOPASDFGHJKLZXCVBNM0123456789")){ $main_content .= box('Error', 'Please enter a valid recovery key.', $v); return;} if($p['password'] != sha1($k)){ $main_content .= box('Error', 'Incorrect password or recovery key.', $v); return;} $main_content .= box('Recovery Successful', 'You have successfully recovered your account name.<br/><br/><table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td width="13%"><b>Account Name:</b></td><td><input type="text" readonly="readonly" size="'.(strlen($p['name'])-1).'" onclick="this.select();" value="'.$p['name'].'"/></td></tr></table>', 1); return; } } elseif($step == 'name') { $name=stripslashes(trim(urldecode($_POST['character']))); if(empty($name) || strlen($name) < 3 || strlen($name) > 25 || strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM ") != strlen($name)) { $main_content .= box('Error', 'Please enter the name of a character on the lost account. If your account does not contain any characters, please create a new account.'); return; } $p=$SQL->query('SELECT id FROM players WHERE name=\''.$name.'\' LIMIT 1')->fetch(); if(!$p || !$p['id']) { $main_content .= box('Error', 'Character <b>'.htmlspecialchars($name).'</b> does not exist. Please make sure to enter the character name correctly. Note that characters are deleted automatically if they have not been used for a long time.'); return; } $main_content.='<form action="?subtopic=lostaccount" method="post"> <input type="hidden" name="character" value="'.htmlspecialchars($name).'"/> <input type="hidden" name="step" value="sendconfirmation"/> <table cellspacing="1" cellpadding="3" border="0" width="100%"> <tr><td bgcolor="'.$config['site']['vdarkborder'].'" class="white"><b>Request Account Name</b></td></tr> <tr><td bgcolor="'.$config['site']['lightborder'].'"> <table style="border: 1px solid '.$config['site']['darkborder'].'" cellpadding="4" cellspacing="2" width="100%"> <tr bgcolor="'.$config['site']['darkborder'].'"> <td width="23%">Password:</td> <td><input type="password" name="password" value="'.htmlspecialchars($_POST['accountname']).'"/></td> </tr> <tr bgcolor="'.$config['site']['lightborder'].'"> <td width="23%">Recovery key:</td> <td><input name="recovery" value="'.htmlspecialchars($_POST['recovery']).'" maxlength="10"/></td> </tr> </table><br/> <table align="center"><tr><td><input type="image" name="Submit" alt="Submit" src="img/buttons/sbutton_submit.gif"/></td></tr></table> </td></tr> </table></form> '; } else { $name=stripslashes(trim(urldecode($_POST['character']))); if(!empty($name) && strlen($name) > 2 && strlen($name) < 26 && strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM ") == strlen($name)) { $main_content .= box('Error', 'Please specify your problem.', array('step'=>'problem','character'=>$name)); return; } $main_content .= '<table cellpadding="0" cellspacing="0" border="0" width="100%"><tr> <td><img src="img/blank.gif" width="10" height="1" border="0" alt=""/></td> <td> <b>Welcome to the Lost Account Interface!</b><br/><br/> If you have lost access to your account, this interface can help you. Of course, you need to prove that your claim to the account is justified. Enter the requested data and follow the instructions carefully. Please understand there is no way to get access to your lost account if the interface cannot help you.<br/><br/> By using the Lost Account Interface you can <ul><li>get a new password if you have lost the current password,</li> <li>receive your account name if you do not know it anymore,</li></ul><br/> As a first step to use the Lost Account Interface please enter the name of a character on the lost account and click on "Submit".<br/><br/></td> <td><img src="img/blank.gif" width="10" height="1" border="0" alt=""/></td> </tr> </table> <form action="?subtopic=lostaccount" method="post"> <input type="hidden" name="step" value="problem"/> <table cellspacing="1" cellpadding="4" border="0" width="98%" align="center"> <tr><td bgcolor="'.$config['site']['vdarkborder'].'" class="white"><b>Enter Character Name</b></td></tr> <tr><td bgcolor="'.$config['site']['darkborder'].'">Character name: <input name="character" size="30" maxlength="25"/></td></tr> </table><br/> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td align="center"> <input type="image" name="Submit" alt="Submit" src="img/buttons/sbutton_submit.gif"/> </td> </tr> </table> </form>'; } ?> Bom galera ele é mais simples mais é bem mais seguro. By Cykotitan!1 ponto