Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 01/24/12 em todas áreas

  1. Como fazer um Shield by wolo

    Sociopata e 4 outros reagiu a Mophus por uma resposta no tópico

    5 pontos
    Tutorial: Wolowizard Atenciosamente, Mophus
  2. Frames

    Weddson e 2 outros reagiu a ferlations por uma resposta no tópico

    3 pontos
    Nota: algumas imagens tem magias em branco, portanto não é possível vê-las, para vê-las vá ao tópico original. Fazer suas primeiras magias/spells é sempre um passo importante par aum spriter. Poucos são aqueles que se aventuram nesse ramo, visto que é importante ter uma boa noção de perspectiva, cor e animação para alcançar um bom resultado. Este tutorial é uma boa forma que encontrei para treinar cada um de vocês na arte das magias, algo que demorei um bom tempo para aprender mas que agora, será passado a vocês de forma muito mais simples: Toda spell, para ser bem fluida (sem intervalos estranhos ou imperfeições - smooth) precisa ter no mínimo 8 frames. O grande macete é começar com 4 frames, que chamamos de Frames Principais para depois adicionarmos Frames Intermediários. Um dos grandes problemas que enfrentei no começo era o fato de sempre ter que voltar para corrigir frames das spells que fazia. Então minha grande dica para solucionar esse problema é rascunhar sua spell com cor branca como veremos abaixo: Começamos então com uma animação de 4 frames: Assim podemos visualizar o aspecto geral na nossa animação, apenas olhando cada um dos quatro frames: A spell começa Tem um efeito sobre o personagem/monstro Começa a desaparecer Desaparece. Em seguida adicionamos os Frames Intermediários (marcados em vermelho). Com isso, chegamos a nossa animação rascunho, que agora está pronta! Confira: Por fim, nos resta adicionar cor (spells não levam outline), e no final do processo teremos nossa spell pronta: Muitas outras spells podem ser feitas com esse modelo, contendo muito mais frames: Autor: André (Galiant)
  3. Como fazer um outfit

    Sociopata e 2 outros reagiu a Mophus por uma resposta no tópico

    3 pontos
    Como fazer um OUTFIT créditos: sandfox Bem, primeiro, o mais básico de tudo: abra uma imagem 32x32. Depois, arranje a cabeça de um outfit de citizen de frente, e cole na imagem. Após posiciona-la no extremo noroeste do quadrado, faça uma base. Tente copiar de um outro outfit, para você ir "pegando a manha". Não precisa caprichar muito, pois é só um esboço. Após ter a base pronta, comece os detalhes. Depois, passe linhas pretas no contorno e defina as linhas internas num tom cinza escuro. Pinte os espaços em branco num tom cinza claro e o outfit estara pronto. Se você quizer fazer um outfit pra mudar de cor depois, mantenha as cores cinzas, se não, decida a cor agora. Após sombreado, repita o processo com o personagem de costas. Caso queira fazer o outfit andando, pegue o outfit do personagem parado(antes de sombrea-lo) e mude a posição de suas mãos, pernas e tronco, afim de fazer com que ele pareça estar andando Resultado Final: Ps: Se forem fazer algo na cabeça dele, não exitem em aumentar o quadrado do outfit. Ps2: Lembrem sempre de alinhar os braços e os ombros. Atenciosamente, Mophus
  4. [Show-Off] Underwater

    Sociopata e 2 outros reagiu a GuuhTorres por uma resposta no tópico

    3 pontos
    Underwater Olá pessoal do Tibia King, Neste show off,vamos falar sobre a estrutura underwater,seus detalhes e entre outras coisas. Vamos começar por partes. Primeiramente devemos pensar no que vamos fazer, uma hunt? uma cidade? um barco naufragado? Depois podemos começar a base do local, usando os IDs 5405~5410. Lembrando que devemos fazer isso no sub-solo. Eu irei fazer parte de uma cidade naufragada, como a conhecida atlantis. Começarei por uma casa. Erga a estrutura da sua casa, utilizei os ids 9147 até 9152 junto com os de stone wall, que começam a partir do id 6466. Não se esqueça de usar os ids de walls quebradas ids 3394~, que é o que da o tom de abandono... Podemos colocar o piso e alguns detalhes interiores. Utilizei o piso de id 406, achei de combinou legal. Depois de colocar o piso, utilize as bordas de id 5427 até 5438. Como é uma cidade naufragada, podemos dar uma sujadinha na casa, adicionando debris (6374) em alguns lugares, detalhes típicos de underwater como algas, pedras, corais, entre outros... Mas não exagere e, não se esqueça de colocar alguns detalhes que diga que aquela construção é uma casa, detalhes como: quadros, ornamentos, lamparinas... As casas acabam por aqui, agora podemos partir para uma loja, como exemplo farei uma forjaria. Para isso, erga as paredes. Agora utilizarei as paredes de id 9153 junto com as de id 1025, elas combinam mais com a forjaria. Depois de fazer isso, adicione o piso, eu utilizei o de id 413, utilize o que você achar melhor. Assim que terminar de adicionar o piso, podemos começar com os detalhes. Como é uma forjaria, podemos usar itens como os de id 10041, 8653~, lembrando que estamos de baixo da agua, portando não podemos utilizar algo pegando fogo. Além dos detalhes da forjaria, não podemos esquecer os de underwater. Dê uma olhadinha como ficou a minha. Ficamos por aqui galera, acho que deu para dar uma ajudinha ai pro pessoal que não se dava muito com a estrutura underwater, caso alguem ainda tenha dúvidas, ai vai mais alguns mapas feitos por mim e, se mesmo assim a dúvida persistir, utilize este tópico para saná-las. Caso vocês façam uma cidade submersa,é uma boa usa-la como hunt de quaras...Com uma bela historia de invasão,dando um RPG bem maneiro ao mapa,criem! Autor : Sir Kausen Espero que comentem,critiquem e elogiem.Obrigado.Att GuuhTorres.
  5. [TRUQUE] Caves Entrances

    Davi xD e um outro reagiu a Mophus por uma resposta no tópico

    2 pontos
    Caves Entrances Entrada de Caves Olá você aí, que nunca consegue fazer suas caves entrances, eu tenho a solução para você! Preste atenção. Se você quando vai fazer suas caves entrances elas ficam assim por causa do id 919: E você não sabe como arrumar aquele vazio ali basta utilizar o ID 8260, assim: Tudo isto acontece por causa que o ID 919 não é walkable, então impossibilitando de preencher aquele vazio, se eu colocasse um 919 para preencher ali, ele iria apagar a parede abaixo. Então utilizando o 8260 que é walkable, não irá acontecer nada e tudo irá ficar magavilhoso. +Lista de ID's das caves entrances: É isso, qualquer dúvida perguntem. Até o próximo tutorial. (: Tutorial: dartier Atenciosamente, Mophus
  6. 1 ponto
    Bem esse é um tutorial simples de como add PagSeguro automático no seu site pq essa é uma duvida que tive e possivelmente outros tem, com isso o PagSeguro entrega os points automaticamente sem necessidade de confirmação , bem vamos lá No Seu Htdocs va em Config/config.php e coloque isso no final: // Sistema automatico Pagseguro by tatu_hunter // Seu email cadastrado no pagseguro $config['pagseguro']['email'] = 'seu e-mail'; // Valor unitario do produto ou seja valor de cada ponto // Exemplo de valores // 100 = R$ 1,00 // 235 = R$ 2,35 // 4254 = R$ 42,54 $config['pagseguro']['produtoValor'] = '100'; // Token gerado no painel do pagseguro $config['pagseguro']['token'] = 'SEU TOKEN PAGSEGURO AQUI'; crie um arquivo chamado retPagseguro.php nas pasta htdocs Dentro adicione isso: <?php include('config-and-functions.php'); define('TOKEN', $config['pagseguro']['token']); // Incluindo o arquivo da biblioteca include('retorno.php'); // Função que captura os dados do retorno function retorno_automatico ( $VendedorEmail, $TransacaoID, $Referencia, $TipoFrete, $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento, $StatusTransacao, $CliNome, $CliEmail, $CliEndereco, $CliNumero, $CliComplemento, $CliBairro, $CliCidade, $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens) { global $config; if(strtolower($StatusTransacao) == 'aprovado') { $account_logged = $ots->createObject('Account'); $account_logged->find($Referencia); if($account_logged->isLoaded()) { $pontos = $account_logged->getCustomField("premium_points"); $account_logged->setCustomField("premium_points", $pontos + $produtos[0]['ProdQuantidade']); $nome = $Referencia.'-'.date('d-m-Y',$_SERVER['REQUEST_TIME']).'.txt'; if(file_exists('logsPagseguro/'.$nome)) $nome = $Referencia.'-2-'.date('d-m-Y',$_SERVER['REQUEST_TIME']).'.txt'; $arquivo = fopen('logsPagseguro/'.$nome, "w+"); $dados = "Conta: ".$Referencia."\n"; $dados = "Email: ".$CliEmail."\n"; $dados .= "Total de Points: ".$produtos[0]['ProdQuantidade']."\n"; $dados .= "Hora da Transação: ". date('d-m-Y H:i:s', $_SERVER['REQUEST_TIME']).""; fwrite($arquivo, $dados); fclose($arquivo); } } } // A partir daqui, é só HTML: ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <h1>Pedido em processamento</h1> <p>Recebemos seu pedido e estamos aguardando pela confirmação do pagamento. Obrigado por comprar conosco.</p> </body> </html> Depois crie um arquivo chamado retorno.php e adicione isso: <?php if (!defined('TOKEN')) define ('TOKEN', ''); /** * RetornoPagSeguro * * Classe de manipulação para o retorno do post do pagseguro * * @package PagSeguro */ class RetornoPagSeguro { /** * _preparaDados * * Prepara os dados vindos do post e converte-os para url, adicionando * o token do usuario quando necessario. * * @internal é usado pela {@see RetornoPAgSeguro::verifica} para gerar os, * dados que serão enviados pelo PagSeguro * * @access private * * @param array $post Array contendo os posts do pagseguro * @param bool $confirmacao Controlando a adicao do token no post * @return string */ function _preparaDados($post, $confirmacao=true) { if ('array' !== gettype($post)) $post=array(); if ($confirmacao) { $post['Comando'] = 'validar'; $post['Token'] = TOKEN; } $retorno=array(); foreach ($post as $key=>$value){ if('string'!==gettype($value)) $post[$key]=''; $value=urlencode(stripslashes($value)); $retorno[]="{$key}={$value}"; } return implode('&', $retorno); } /** * _tipoEnvio * * Checa qual será a conexao de acordo com a versao do PHP * preferencialmente em CURL ou via socket * * em CURL o retorno será: * <code> array ('curl','https://pagseguro.uol.com.br/Security/NPI/Default.aspx') </code> * já em socket o retorno será: * <code> array ('fsocket', '/Security/NPI/Default.aspx', $objeto-de-conexao) </code> * se não encontrar nenhum nem outro: * <code> array ('','') </code> * * @access private * @global string $_retPagSeguroErrNo Numero de erro do pagseguro * @global string $_retPagSeguroErrStr Texto descritivo do erro do pagseguro * @return array Array com as configurações * */ function _tipoEnvio() { //Prefira utilizar a função CURL do PHP //Leia mais sobre CURL em: http://us3.php.net/curl global $_retPagSeguroErrNo, $_retPagSeguroErrStr; if (function_exists('curl_exec')) return array('curl', 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx'); elseif ((PHP_VERSION >= 4.3) && ($fp = @fsockopen('ssl://pagseguro.uol.com.br', 443, $_retPagSeguroErrNo, $_retPagSeguroErrStr, 30))) return array('fsocket', '/Security/NPI/Default.aspx', $fp); elseif ($fp = @fsockopen('pagseguro.uol.com.br', 80, $_retPagSeguroErrNo, $_retPagSeguroErrStr, 30)) return array('fsocket', '/Security/NPI/Default.aspx', $fp); return array ('', ''); } /** * not_null * * Extraido de OScommerce 2.2 com base no original do pagseguro, * Checa se o valor e nulo * * @access public * * @param mixed $value Variável a ser checada se é nula * @return bool */ function not_null($value) { if (is_array($value)) { if (sizeof($value) > 0) { return true; } else { return false; } } else { if (($value != '') && (strtolower($value) != 'null') && (strlen(trim($value)) > 0)) { return true; } else { return false; } } } /** * verifica * * Verifica o tipo de conexão aberta e envia os dados vindos * do post * * @access public * * @use RetornoPagSeguro::_tipoenvio() * @global string $_retPagSeguroErrNo Numero de erro do pagseguro * @global string $_retPagSeguroErrStr Texto descritivo do erro do pagseguro * @param array $post Array contendo os posts do pagseguro * @param bool $tipoEnvio (opcional) Verifica o tipo de envio do post * @return bool */ function verifica($post, $tipoEnvio=false) { global $_retPagSeguroErrNo, $_retPagSeguroErrStr; if ('array' !== gettype($tipoEnvio)) $tipoEnvio = RetornoPagSeguro::_tipoEnvio(); $spost=RetornoPagSeguro::_preparaDados($post); if (!in_array($tipoEnvio[0], array('curl', 'fsocket'))) return false; $confirma = false; if ($tipoEnvio[0] === 'curl') { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $tipoEnvio[1]); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $spost); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $resp = curl_exec($ch); if (!RetornoPagSeguro::not_null($resp)) { curl_setopt($ch, CURLOPT_URL, $tipoEnvio[1]); $resp = curl_exec($ch); } curl_close($ch); $confirma = (strcmp ($resp, 'VERIFICADO') == 0); } elseif ($tipoEnvio[0] === 'fsocket') { if (!$tipoEnvio[2]) { die ("{$_retPagSeguroErrStr} ($_retPagSeguroErrNo)"); } else { $cabecalho = "POST {$tipoEnvio[1]} HTTP/1.0\r\n"; $cabecalho .= "Content-Type: application/x-www-form-urlencoded\r\n"; $cabecalho .= "Content-Length: " . strlen($spost) . "\r\n\r\n"; $resp = ''; fwrite ($tipoEnvio[2], "{$cabecalho}{$spost}"); while (!feof($tipoEnvio[2])) { $resp = fgets ($tipoEnvio[2], 1024); if (strcmp ($resp, 'VERIFICADO') == 0) { $confirma = (strcmp ($resp, 'VERIFICADO') == 0); $confirma=true; break; } } fclose ($tipoEnvio[2]); } } if ($confirma && function_exists('retorno_automatico')) { $itens = array ( 'VendedorEmail', 'TransacaoID', 'Referencia', 'TipoFrete', 'ValorFrete', 'Anotacao', 'DataTransacao', 'TipoPagamento', 'StatusTransacao', 'CliNome', 'CliEmail', 'CliEndereco', 'CliNumero', 'CliComplemento', 'CliBairro', 'CliCidade', 'CliEstado', 'CliCEP', 'CliTelefone', 'NumItens', ); foreach ($itens as $item) { if (!isset($post[$item])) $post[$item] = ''; if ($item=='ValorFrete') $post[$item] = str_replace(',', '.', $post[$item]); } $produtos = array (); for ($i=1;isset($post["ProdID_{$i}"]);$i++) { $produtos[] = array ( 'ProdID' => $post["ProdID_{$i}"], 'ProdDescricao' => $post["ProdDescricao_{$i}"], 'ProdValor' => (double) (str_replace(',', '.', $post["ProdValor_{$i}"])), 'ProdQuantidade' => $post["ProdQuantidade_{$i}"], 'ProdFrete' => (double) (str_replace(',', '.', $post["ProdFrete_{$i}"])), 'ProdExtras' => (double) (str_replace(',', '.', $post["ProdExtras_{$i}"])), ); } retorno_automatico ( $post['VendedorEmail'], $post['TransacaoID'], $post['Referencia'], $post['TipoFrete'], $post['ValorFrete'], $post['Anotacao'], $post['DataTransacao'], $post['TipoPagamento'], $post['StatusTransacao'], $post['CliNome'], $post['CliEmail'], $post['CliEndereco'], $post['CliNumero'], $post['CliComplemento'], $post['CliBairro'], $post['CliCidade'], $post['CliEstado'], $post['CliCEP'], $post['CliTelefone'], $produtos, $post['NumItens'] ); } return $confirma; } } if ($_POST) { RetornoPagSeguro::verifica($_POST); die(); } ?> No seu buypoints.php,basta colocar isso: <?php if(!$logged) if($action == "logout") $main_content .= '<div class="TableContainer" > <table class="Table1" cellpadding="0" cellspacing="0" > <div class="CaptionContainer" > <div class="CaptionInnerContainer" > <span class="CaptionEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionBorderTop" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <div class="Text" >Logout Successful</div> <span class="CaptionVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <span class="CaptionBorderBottom" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> </div> </div> <tr> <td> <div class="InnerTableContainer" > <table style="width:100%;" ><tr><td>You have logged out of your '.$config['server']['serverName'].' account. In order to view your account you need to <a href="?subtopic=accountmanagement" >log in</a> again.</td></tr> </table> </div> </table></div></td></tr>'; else $main_content .= 'Please enter your account name and your password.<br/><a href="?subtopic=createaccount" >Create an account</a> if you do not have one yet.<br/><br/><form action="?subtopic=accountmanagement" method="post" ><div class="TableContainer" > <table class="Table1" cellpadding="0" cellspacing="0" > <div class="CaptionContainer" > <div class="CaptionInnerContainer" > <span class="CaptionEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionBorderTop" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <div class="Text" >Account Login</div> <span class="CaptionVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <span class="CaptionBorderBottom" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> </div> </div> <tr> <td> <div class="InnerTableContainer" > <table style="width:100%;" ><tr><td class="LabelV" ><span >Account Name:</span></td><td style="width:100%;" ><input type="password" name="account_login" SIZE="10" maxlength="10" ></td></tr><tr><td class="LabelV" ><span >Password:</span></td><td><input type="password" name="password_login" size="30" maxlength="29" ></td></tr> </table> </div> </table></div></td></tr><br/><table width="100%" ><tr align="center" ><td><table border="0" cellspacing="0" cellpadding="0" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Submit" alt="Submit" src="'.$layout_name.'/images/buttons/_sbutton_submit.gif" ></div></div></td><tr></form></table></td><td><table border="0" cellspacing="0" cellpadding="0" ><form action="?subtopic=lostaccount" method="post" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Account lost?" alt="Account lost?" src="'.$layout_name.'/images/buttons/_sbutton_accountlost.gif" ></div></div></td></tr></form></table></td></tr></table>'; else { $main_content .= ' <form target="pagseguro" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml"> <input type="hidden" name="email_cobranca" value="'. $config['pagseguro']['email']. '"> <input type="hidden" name="tipo" value="CP"> <input type="hidden" name="moeda" value="BRL"> <input type="hidden" name="item_id_1" value="1"> <input type="hidden" name="item_descr_1" value="Pontos na account de nome: '.$account_logged->getCustomField("name").'"> <input type="hidden" name="item_valor_1" value="'. $config['pagseguro']['produtoValor'] .'"> <input type="hidden" name="item_frete_1" value="0"> <input type="hidden" name="item_peso_1" value="0"> <input type="hidden" name="ref_transacao" value="'.$account_logged->getCustomField("name").'"> <table border="0" cellpadding="4" cellspacing="1" width="100%" id="#estilo"><tbody> <tr bgcolor="#505050" class="white"> <th colspan="2"><strong>Escolha a quantidade de pontos que deseja comprar</strong></th> </tr> <tr> <td width="10%">Sua conta</td> <td><strong>'.$account_logged->getCustomField("name").'</strong></td> </tr> <tr> <td width="10%">Pontos</td> <td> <input name="item_quant_1" type="text" value="1" size="5" maxlength="5"> </td> </tr> <tr> <td colspan="2"> <input type="image" src="https://p.simg.uol.com.br/out/pagseguro/i/botoes/carrinhoproprio/btnFinalizar.jpg" name="submit" alt="Pague com PagSeguro - &eacute; r&aacute;pido, gr&aacute;tis e seguro!" /> </td> </tr> </tbody></table></form>'; } ?> Para finalizar: Adicione no seu phpmyadmin,na parte SQL,a seguinte database: CREATE TABLE `retorno_automatico` ( `TransacaoID` varchar(36) NOT NULL, `VendedorEmail` varchar(200) NOT NULL, `Referencia` varchar(200) default NULL, `TipoFrete` char(2) default NULL, `ValorFrete` decimal(10,2) default NULL, `Extras` decimal(10,2) default NULL, `Anotacao` text, `TipoPagamento` varchar(50) NOT NULL, `StatusTransacao` varchar(50) NOT NULL, `CliNome` varchar(200) NOT NULL, `CliEmail` varchar(200) NOT NULL, `CliEndereco` varchar(200) NOT NULL, `CliNumero` varchar(10) default NULL, `CliComplemento` varchar(100) default NULL, `CliBairro` varchar(100) NOT NULL, `CliCidade` varchar(100) NOT NULL, `CliEstado` char(2) NOT NULL, `CliCEP` varchar(9) NOT NULL, `CliTelefone` varchar(14) default NULL, `NumItens` int(11) NOT NULL, `Data` datetime NOT NULL, `status` tinyint(1) unsigned NOT NULL default '0', UNIQUE KEY `TransacaoID` (`TransacaoID`,`StatusTransacao`), KEY `Referencia` (`Referencia`), KEY `status` (`status`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; E essa outra aqui : CREATE TABLE `PagSeguroTransacoes` ( `TransacaoID` varchar(36) NOT NULL, `VendedorEmail` varchar(200) NOT NULL, `Referencia` varchar(200) default NULL, `TipoFrete` char(2) default NULL, `ValorFrete` decimal(10,2) default NULL, `Extras` decimal(10,2) default NULL, `Anotacao` text, `TipoPagamento` varchar(50) NOT NULL, `StatusTransacao` varchar(50) NOT NULL, `CliNome` varchar(200) NOT NULL, `CliEmail` varchar(200) NOT NULL, `CliEndereco` varchar(200) NOT NULL, `CliNumero` varchar(10) default NULL, `CliComplemento` varchar(100) default NULL, `CliBairro` varchar(100) NOT NULL, `CliCidade` varchar(100) NOT NULL, `CliEstado` char(2) NOT NULL, `CliCEP` varchar(9) NOT NULL, `CliTelefone` varchar(14) default NULL, `NumItens` int(11) NOT NULL, `Data` datetime NOT NULL, `status` tinyint(1) unsigned NOT NULL default '0', UNIQUE KEY `TransacaoID` (`TransacaoID`,`StatusTransacao`), KEY `Referencia` (`Referencia`), KEY `status` (`status`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CRéDITOS: Walef Xavier Sociopata
  7. 1 ponto
    Créditos no script. Explicação: no script, quando você upar level 50 você ganhará 30k (valores podem ser facilmente editádos através do config) 1. Crie um arquivo com o nome de "recompensa.lua" (sem aspas) em : data/creaturescripts/scripts. Ponha: --[script by Renato Ribeiro to TibiaKing.com]-- local config = { level = 50, -- level que irá ganhar storage = 9557, -- storage msg = "Você ganhou 30k por avaçar ao level 50.", -- mensagem ao ganhar qnt = 3; -- quantidade de crystal coin msgtp = MESSAGE_EVENT_ADVANCE, -- tipo da mensagem itemid = 2160, -- id do crystal coin (pode mudar se quiser) } function onAdvance(cid, oldLevel, newLevel) if getPlayerStorageValue(cid, config.storage) < 1 and getPlayerLevel(cid) >= config.level then doPlayerAddItem(cid, config.itemid, config.qnt) setPlayerStorageValue(cid, config.storage, 1) doPlayerSendTextMessage(cid, config.msgtp, config.msg) end return TRUE end [/code] [b]2. Em, data/creaturescripts abra o arquivo creaturescripts.xml.[/b] Adicione a tag: [code]<event type="advance" name="recompensa" event="script" value="recompensa.lua"/> 3. Em, data/creaturescripts/scripts abra o arquivo longin.lua. Adicione esta linha antes do ultimo return true: registerCreatureEvent(cid, "recompensa") Meu primeiro CreatureEvent Quem gostou pede Biiiis! (:
  8. Sim, tive a ideia ao ver o shop system do skyd, mas não peguei nada do script dele. Instalando talkactions/scripts/shop.lua local config = { ["demon shield"] = {id = 2520, sell = 'yes 32000', buy = 'yes 70000' }, ["magic plate armor"] = {id = 2472, sell = 'yes 120000', buy = 'no' }, ["boots of haste"] = {id = 2195, sell = 'yes 30000', buy = 'no' } } function upperfirst(first, rest) return first:upper()..rest:lower() end function onSay(cid, words, param, channel) if (param == nil or param == '' or param == 'lista' or param == 'list') then if (words == "!sell" or words == "/sell") then str = "Showing items that you can sell:\n\n" else str = "Showing items that you can buy:\n\n" end for item, vars in pairs(config) do if (words == "!sell" or words == "/sell") then expl = string.explode(vars.sell, " ") else expl = string.explode(vars.buy, " ") end item = item:gsub("(%a)([%w_']*)", upperfirst) if (expl[1] == 'no') then str = str else str = str .. item.. " - " .. expl[2] .. " gps\n" end end return doShowTextDialog(cid, 2160, str) end local item = config[param:lower()] param = param:lower() if (item) then local sell = string.explode(item.sell, " ") local buy = string.explode(item.buy, " ") if (words == "!sell" or words == "/sell") then if (sell[1] == "yes") then if (doPlayerRemoveItem(cid, item.id, 1)) then doPlayerAddMoney(cid, sell[2]) doSendMagicEffect(getPlayerPosition(cid), 30) return doPlayerSendTextMessage(cid,29,"Here are, you sold "..param.." for "..sell[2].." gold coins.") else doSendMagicEffect(getPlayerPosition(cid), 2) return doPlayerSendTextMessage(cid,29,"You don't have anything "..param.." to sell.") end else doSendMagicEffect(getPlayerPosition(cid), 2) return doPlayerSendTextMessage(cid,29,"Sorry, "..param.." cannot be sold.") end else if (buy[1] == "yes") then if (doPlayerRemoveMoney(cid, buy[2])) then doPlayerAddItem(cid, item.id) doSendMagicEffect(getPlayerPosition(cid), 28) return doPlayerSendTextMessage(cid,29,"Here are, you bought "..param.." for "..buy[2].." gold coins.") else doSendMagicEffect(getPlayerPosition(cid), 2) return doPlayerSendTextMessage(cid,29,"You don't have enough money.") end else doSendMagicEffect(getPlayerPosition(cid), 2) return doPlayerSendTextMessage(cid,29,"Sorry, "..param.." cannot be bought.") end end else doSendMagicEffect(getPlayerPosition(cid), 2) if (words == "!sell") then return doPlayerSendTextMessage(cid,29,"Sorry, this item cannot be sold or it does't exist.") else return doPlayerSendTextMessage(cid,29,"Sorry, this item cannot be bought or it does't exist.") end end end [/code] [b]talkactions/talkactions.xml[/b] [code]<talkaction words="!sell;/sell;!buy;/buy" event="script" value="shop.lua"/> Adicionando novos itens ♣ Config Observem no começo do código estas linhas: local config = { ["demon shield"] = {id = 2520, sell = 'yes 32000', buy = 'yes 70000' }, ["magic plate armor"] = {id = 2472, sell = 'yes 120000', buy = 'yes 60000' }, ["boots of haste"] = {id = 2195, sell = 'yes 30000', buy = 'no' } }[/code] Seguindo uma ordem óbvia, adicionem abaixo do boots of haste e antes do '}' que fecha o config. assim para adicionar sigam o modelo ["nome do item"], repectivamente de suas variáveis. [b]♣ Variáveis[/b] [color=#800080][b]id[/b][/color] - é onde você coloca o id do item [color=#800080][b]sell [/b][/color]- você precisa colocar se o item pode ser vendido por "yes" ou "no", caso for yes de um espaço (se não der espaço não funciona) e bote o valor em gold coins (não é k) [color=#800080][b]buy [/b][/color]- segue a ordem igual ao sell porem é se o item pode ser comprado pelo !buy ou não, e o preço que o player pagará. [b]♣ Exemplos[/b] Assim, digamos que desejo acrescentar um mastermind shield onde o player pode vender por 60k e comprar por 120k, adicionarei: [code]["mastermind shield"] = {id = 2514, sell = 'yes 60000', buy = 'yes 120000' }, Em seguida quero adicionar uma soft boots que pode ser vendida por 300k, mas NÃO PODE ser comprada. Colocarei: ["soft boots"] = {id = 6132, sell = 'yes 300000', buy = 'no' }, local config = { ["demon shield"] = {id = 2520, sell = 'yes 32000', buy = 'yes 70000' }, ["magic plate armor"] = {id = 2472, sell = 'yes 120000', buy = 'no' }, ["boots of haste"] = {id = 2195, sell = 'yes 30000', buy = 'yes 60000' }, ["mastermind shield"] = {id = 2514, sell = 'yes 60000', buy = 'yes 120000' }, ["soft boots"] = {id = 6132, sell = 'yes 300000', buy = 'no' } }[/code] [color=#ff0000][size=5][b]Atenção![/b][/size][/color] [color=#ff0000]Reparem que em todas as linhas finalizam-se com }, mas na última há ausência da vírgula, isto ocorre por que não pode ter vírgula no último, não sei ao certo se dará erro, não cheguei a testar, mas em muitas linguagens de programação ocorre um erro. Então é melhor ficar atento.[/color] Creio que passei as devidas instruções corretamente, e não é nenhum bixo de sete cabeças... qualquer um que tenha uma mentalidade normal conseguirá configurar. [size=5][b] [size=6][color=#006400]Explicando as talkactions[/color][/size][/b][/size] [b]♣ Comprando[/b] Bom, agora que já adicionou todos os items, vou explicar como funciona: O player comprará uma boh (item sugestivo) item por: [color=#800080][b]!buy boots of haste[/b][/color], caso não tenha grana, não vai conseguir, caso tenha comprará. [b]♣ Vendendo[/b] O mesmo quando ele for vender, ele falará: [color=#800080][b]!sell boots of haste[/b][/color], caso não tenha o item, o script negará, caso tenha o item some e o dinheiro aparece (: [center][/center] [center][/center] [b]♣ Lista de items[/b] [i]Ohh, não sei quais items pode ser comprados, e também não sei quanto custa, e agora?[/i] Diga [b][color=#800080]!buy[/color][/b], ou [b][color=#800080]!buy[/color] [color=#800080]list [/color][/b]ou [b][color=#800080]!buy[/color] [color=#800080]lista[/color][/b] para ver todos os items [center][/center] [i]O mesmo com os items que podem ser vendidos:[/i] [b][color=#800080]!sell[/color][/b], [b][color=#800080]!sell list[/color][/b] ou [b][color=#800080]!sell lista[/color][/b] [center][/center] [size=7][color=#006400]Versão 2[/color][/size] Deixo aberto sugestões para a versão 2 E claro, caso haja, correção de bugs. __________________ [b]♣ Créditos[/b] Renato - Desenvolvimento skydangerous - Ideia Então, meu config ficará desta forma:
  9. Fazendo quest complicada

    Mophus reagiu a Yara por uma resposta no tópico

    1 ponto
    Ola pessoal do Tibiaking meu 1 post nesse forum Action: Pelo mapa você coloca um unique id na alavanca, vamos pegar por exemplo 5000(pode ser qualquer número, desde que já não seja usado no arquivo actions.xml você adiciona essa linha: Sendo que o nome do script é onde vai ficar as informações que vem abaixo: Ai em cima já tem tudo o que modificar explicado. Tá agora o cara foi teleportado para o outro lugar Nesse outro lugar você anda... ai tem outra sala com alguns bichos e uma alavanca, que ao puxar nasce o boss da quest. Vou explicar agora: No mapa na alavanca você coloca outro unique ID, por exemplo 5001(já que o 5000 tá sendo usado na action ali de cima) E adiciona no actions.xml isso: Onde o nome_do_script vai ser o que está aqui em baixo: Ai nasce o boss, você e seu time , o matam e pegam o loot da quest... Bom poderia acabar aqui, ter um teleport para fora do lugar e pronto =)... mas porque não colocar alavancas ,onde o cara tem que puxar a certa se não é teleportado para um lugar onde provavelmente morre, outro para um lugar seria interessante não? Bom caso você queira que tenha só um teleport no final da quest o tutorial acaba aqui Espero ter ajudado Ps: Yara
  10. Um novo modo de criar magias?

    Tiago12345 reagiu a Garou por uma resposta no tópico

    1 ponto
    UM NOVO MODO DE CRIAR MAGIAS? Tudo bem com vocês, grandes tibianos desse reino? Quando eu criava magias, eu sempre notei a quantidade de linhas que uma boa e trabalhada magia adquire ao se finalizar o script. Por um tempinho, estudei como funcionava toda a estrutura e pensei em como criar um único bloco de código para configurar a magia uma vez só. Os spellmakers de plantão comprovam: Se uma magia com vários efeitos e tipos de dano é criada, você precisa criar muitas variáveis locais. Então, resolvi criar uma tabela que tratava essas variáveis locais como indexes e seus atributos como conteúdo de tabelas secundárias. Nascia esse novo modo de programar magias, que parece um tanto versátil e ao mesmo tempo, reduz o tamanho de uma magia. O SCRIPT O script é bem simples, uma tabela bem básica que qualquer criança configura e se diverte e blocos de códigos que, olha que legal, você não precisa mexer. Veja abaixo o novo modelo: local spell = { { damage = COMBAT_ICEDAMAGE, effect = {CONST_ME_ICEATTACK}, formula = {0.2, 3, 0.2, 4.2, 200, 300}, area = createCombatArea({ {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } local returnSpell = {} for var, config in ipairs(spell) do returnSpell[var] = createCombatObject() setCombatParam(returnSpell[var], COMBAT_PARAM_TYPE, config.damage) setCombatParam(returnSpell[var], COMBAT_PARAM_EFFECT, (type(config.effect) == "table" and config.effect[1] or config.effect)) if type(config.effect) == "table" and config.effect[2] ~= nil then setCombatParam(returnSpell[var], COMBAT_PARAM_DISTANCEEFFECT, config.effect[2]) end if config.area then setCombatArea(returnSpell[var], config.area) end function getSpellDamage(cid, level, maglevel) local min = ((level*config.formula[1] + maglevel*config.formula[2]) + config.formula[5]) local max = ((level*config.formula[3] + maglevel*config.formula[4]) + config.formula[6]) return -min, -max end setCombatCallback(returnSpell[var], CALLBACK_PARAM_LEVELMAGICVALUE, "getSpellDamage") end function onCallCombat(parameters) return doCombat(unpack(parameters)) end function onCastSpell(cid, var) if #returnSpell > 1 then for i = 1, #returnSpell do addEvent(onCallCombat, (i*280)+32, {cid, returnSpell[i], var}) end else doCombat(cid, ret[1], var) end return true end Parece que eu compliquei tudo, né? Pois bem, finja que você não vê nada aí, apenas essa tabela abaixo: local spell = { { damage = COMBAT_ICEDAMAGE, effect = {CONST_ME_ICEATTACK}, formula = {0.2, 3, 0.2, 4.2, 200, 300}, area = createCombatArea({ {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } Aqui que você irá configurar sua magia, como ela vai funcionar, que área que ela irá atingir e etcétera. Vou comentar cada linha da tabela para que você entenda: local spell = { { damage = COMBAT_ICEDAMAGE, effect = {CONST_ME_ICEATTACK}, formula = {0.2, 3, 0.2, 4.2, 200, 300}, area = createCombatArea({ {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } Sobre a fórmula, você não precisa mais ter dor de cabeça como você vai diminuir o dano da sua magia e etcétera. Veja o quê cada número significa abaixo: formula = {MIN_LEVEL, MIN_MAGLEVEL, MAX_LEVEL, MAX_MAGLEVEL, MIN_OFFSET, MAX_OFFSET} min = (level*MIN_LEVEL + maglevel * MIN_MAGLEVEL) + MIN_OFFSET max = (level*MAX_LEVEL + maglevel * MAX_MAGLEVEL) + MAX_OFFSET E sobre a área, você pode usar áreas pré-configuras naquele arquivo spells.lua dentro de spells/lib, assim você diminuirá ainda mais o código. area = createCombatArea(AREA_BEAM4) Se a magia for do tipo "strike", você pode configurar o efeito de distância assim: effect = {CONST_ME_ICEATTACK, CONST_ANI_ICE} Para criar uma magia com múltiplos danos, basta duplicar, triplicar, conforme sua necessidade a sub-tabela dentro da tabela principal - atenção - não esqueça de separar as várias subtabelas com uma vírgula, por exemplo: local spell = { { damage = COMBAT_ICEDAMAGE, -- O tipo de dano effect = {CONST_ME_ICEATTACK}, -- Os efeitos da magia formula = {0.2, 3, 0.2, 4.2, 200, 300}, -- A formula de dano da magia area = createCombatArea({ -- Area da magia {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) }, -- virgula { damage = COMBAT_ICEDAMAGE, -- O tipo de dano effect = {CONST_ME_ICEATTACK}, -- Os efeitos da magia formula = {0.2, 3, 0.2, 4.2, 200, 300}, -- A formula de dano da magia area = createCombatArea({ -- Area da magia {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } [/code] [size=3][font=tahoma,geneva,sans-serif]Essa é uma magia com dois hits de gelo, se você entendeu todo o tópico [/font][/size] [size=3][font=tahoma,geneva,sans-serif][hr][/font][/size] [size=4][b][font=tahoma,geneva,sans-serif]CONCLUSÃO[/font][/b][/size] [size=3][font=tahoma,geneva,sans-serif][hr][/font][/size] [size=3][font=tahoma,geneva,sans-serif]Eu reconheço que esse novo modelo parece um pouco inútil e estranho, mas ele foi criado com intuíto de otimizar magias com múltiplos efeitos e tipos de dano.[/font][/size] [size=3][font=tahoma,geneva,sans-serif]Até o próximo tópico, abraços.[/font][/size] [size=3][font=tahoma,geneva,sans-serif][hr][/font][/size]
  11. Tutorial Criação Armor

    Sociopata reagiu a Mophus por uma resposta no tópico

    1 ponto
    Tutorial Criação Armor TibiaKing.com ~ Resultado ~ Atenciosamente, Mophus Criação do tutorial: Landfear
  12. [Show-Off] Loja de Magias

    Davi xD reagiu a GuuhTorres por uma resposta no tópico

    1 ponto
    [show-Off] Loja de Magias Olá pessoal do Tibia King,hoje estarei disponilizando mais um show-off para vocês,ensinando a fazer uma simples Loja de Magias,em 3 passos.Veja a seguir : 1º Passo : Há base,vejam que eu não utilizo o auto border. 2º Passo : Detalhamento principal. 3º Passo : Detalhamento Final. Autor : GuuhTorres. Espero que tenham gostado,comentem,critiquem e elogie.
  13. Arena de Pixels #1 Ed

    Uissu reagiu a arturmove por uma resposta no tópico

    1 ponto
    ~ Fodase essa merda ~ eu vou é de patins a jato '-' (Nunca fiz sprite de nada )
  14. [Templo Draken] Novato

    GuuhTorres reagiu a Davi xD por uma resposta no tópico

    1 ponto
    Eae Galera do TibiaKing, vou postar um Templo em estilo Draken, si eh que me entendem hehe,espero ter melhorado um pouco. Eh isso ai,espero ter melhorado,e obrigado ai GuuhTorres,por me dar algumas dicas Abraços.
  15. 1 ponto
    Isso é um problema aparentemente do Daopay Entre neste link -> http://www.daopay.com/support/?complete-purchase, digite o código verificador, depois click nesta opção -> "I received a PIN-code, but did not get my product (coins, cash, points. etc.)" que ele irá explicar como proceder para receber a sua premmy!
  16. Pokemon Dash Advanced

    IGlobal reagiu a GuuhTorres por uma resposta no tópico

    1 ponto
    Tenta criar pelo sql,ou então tente o comando /attr group 6
  17. [Templo Draken] Novato

    GuuhTorres reagiu a Davi xD por uma resposta no tópico

    1 ponto
    Ok,Obrigado pela a dica,proximo mapa,algo que eu fizer,vou tentar me expirar mais nisso,e Obrigado novamente
  18. Pokemon Dash Advanced

    Netojose Sadasd reagiu a GuuhTorres por uma resposta no tópico

    1 ponto
    Ele está no multiupload,está dando para baixar normalmente. Veja e confira.
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo