Ir para conteúdo

samuelandrade45

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    samuelandrade45 recebeu reputação de carloos em Como colocar exhaustion corretamente em suas spells   
    Olá pessoal do TibiaKing, hoje venho aqui trazer um mini tutorial de como colocar o exhaustion corretamente em suas spells, bastante gente utiliza o exaustion que está no proprio xml, mas por lá acontece alguns erros exemplo: se tiver uma spell com 8000 de exaustion, e outra de 2000 e você vai no seu servidor e usa a spell com 8000 de exhaustion, tem que esperar o tempo dela pra usar qualquer outra, o método que venho trazer aqui ele funciona corretamente e ainda avisa no console quanto tempo falta para usar a spell, sem mais delongas vamos lá!
     
    1- vá até o seu XML procure a magia que quer por o exhaustion
    exemplo:
    perceba que ela tem um exhaustion definido ali em cima, para esse método funcionar corretamente e recomendado deixar o exhaustion do XML em 1000.
     
    forma correta:
     
    2- feito isso vamos ate a pasta onde se encontra seu script e abra ele:
    como exemplo irei utilizar uma spell de área que empurra os players próximos!
     
     
    3- com a spell aberta, logo no inicio da spells vamos inserir as seguintes linhas de código:
     
    ficando assim:
     
    4- por fim, logo abaixo do function onCastSpell(cid, var) vamos adicionar as seguintes linhas de código:
     
     
    ficando assim:
     
    Pronto com isso o exhaution já foi adicionado a sua spell, faça bom proveito:
    Print:
     

  2. Obrigado
    samuelandrade45 recebeu reputação de Sivermisty em [OTCLIENT] Remover IP e versão do otclient   
    funcionou obrigado +REP
  3. Curtir
    samuelandrade45 recebeu reputação de Ghaz em Como colocar exhaustion corretamente em suas spells   
    Olá pessoal do TibiaKing, hoje venho aqui trazer um mini tutorial de como colocar o exhaustion corretamente em suas spells, bastante gente utiliza o exaustion que está no proprio xml, mas por lá acontece alguns erros exemplo: se tiver uma spell com 8000 de exaustion, e outra de 2000 e você vai no seu servidor e usa a spell com 8000 de exhaustion, tem que esperar o tempo dela pra usar qualquer outra, o método que venho trazer aqui ele funciona corretamente e ainda avisa no console quanto tempo falta para usar a spell, sem mais delongas vamos lá!
     
    1- vá até o seu XML procure a magia que quer por o exhaustion
    exemplo:
    perceba que ela tem um exhaustion definido ali em cima, para esse método funcionar corretamente e recomendado deixar o exhaustion do XML em 1000.
     
    forma correta:
     
    2- feito isso vamos ate a pasta onde se encontra seu script e abra ele:
    como exemplo irei utilizar uma spell de área que empurra os players próximos!
     
     
    3- com a spell aberta, logo no inicio da spells vamos inserir as seguintes linhas de código:
     
    ficando assim:
     
    4- por fim, logo abaixo do function onCastSpell(cid, var) vamos adicionar as seguintes linhas de código:
     
     
    ficando assim:
     
    Pronto com isso o exhaution já foi adicionado a sua spell, faça bom proveito:
    Print:
     

  4. Curtir
    samuelandrade45 recebeu reputação de Capitao wyz em Como colocar exhaustion corretamente em suas spells   
    Olá pessoal do TibiaKing, hoje venho aqui trazer um mini tutorial de como colocar o exhaustion corretamente em suas spells, bastante gente utiliza o exaustion que está no proprio xml, mas por lá acontece alguns erros exemplo: se tiver uma spell com 8000 de exaustion, e outra de 2000 e você vai no seu servidor e usa a spell com 8000 de exhaustion, tem que esperar o tempo dela pra usar qualquer outra, o método que venho trazer aqui ele funciona corretamente e ainda avisa no console quanto tempo falta para usar a spell, sem mais delongas vamos lá!
     
    1- vá até o seu XML procure a magia que quer por o exhaustion
    exemplo:
    perceba que ela tem um exhaustion definido ali em cima, para esse método funcionar corretamente e recomendado deixar o exhaustion do XML em 1000.
     
    forma correta:
     
    2- feito isso vamos ate a pasta onde se encontra seu script e abra ele:
    como exemplo irei utilizar uma spell de área que empurra os players próximos!
     
     
    3- com a spell aberta, logo no inicio da spells vamos inserir as seguintes linhas de código:
     
    ficando assim:
     
    4- por fim, logo abaixo do function onCastSpell(cid, var) vamos adicionar as seguintes linhas de código:
     
     
    ficando assim:
     
    Pronto com isso o exhaution já foi adicionado a sua spell, faça bom proveito:
    Print:
     

  5. Curtir
    samuelandrade45 recebeu reputação de papamix em Como colocar exhaustion corretamente em suas spells   
    Olá pessoal do TibiaKing, hoje venho aqui trazer um mini tutorial de como colocar o exhaustion corretamente em suas spells, bastante gente utiliza o exaustion que está no proprio xml, mas por lá acontece alguns erros exemplo: se tiver uma spell com 8000 de exaustion, e outra de 2000 e você vai no seu servidor e usa a spell com 8000 de exhaustion, tem que esperar o tempo dela pra usar qualquer outra, o método que venho trazer aqui ele funciona corretamente e ainda avisa no console quanto tempo falta para usar a spell, sem mais delongas vamos lá!
     
    1- vá até o seu XML procure a magia que quer por o exhaustion
    exemplo:
    perceba que ela tem um exhaustion definido ali em cima, para esse método funcionar corretamente e recomendado deixar o exhaustion do XML em 1000.
     
    forma correta:
     
    2- feito isso vamos ate a pasta onde se encontra seu script e abra ele:
    como exemplo irei utilizar uma spell de área que empurra os players próximos!
     
     
    3- com a spell aberta, logo no inicio da spells vamos inserir as seguintes linhas de código:
     
    ficando assim:
     
    4- por fim, logo abaixo do function onCastSpell(cid, var) vamos adicionar as seguintes linhas de código:
     
     
    ficando assim:
     
    Pronto com isso o exhaution já foi adicionado a sua spell, faça bom proveito:
    Print:
     

  6. Gostei
    samuelandrade45 deu reputação a Sociopata em Adicionar PagSeguro em Seu Site(Gesior Acc)   
    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. Gostei
    samuelandrade45 recebeu reputação de felippepsa em (Resolvido)Buff que troca Outfit   
    tente este aqui:
     
    script:
     
  8. Gostei
    samuelandrade45 recebeu reputação de Salazar Slytherin em PEDIDO Transformação temporária   
    É um talkactions, só você configura o que pede no script e falar transformar no servidor, e vai transformar por x tempo
  9. Gostei
    samuelandrade45 recebeu reputação de Salazar Slytherin em PEDIDO Transformação temporária   
    fiz o script testei aqui e está 100%
    vá ate seu talkactions/scripts crie um arquivo lua com nome vocationportime.lua e cole esse código la.
    OBS: altere o script somente na parte do local config se não souber mecher
     
    Script:
    vá no seu talkactions.xml e coloque essa linha de código lá:
     
     
    vá no seu data/creaturescripts/scripts e crie um arquivo lua chamado retvocation.lua e coloque esse script lá:
     
    script:
     
    vá no seu creaturescripts.xml e coloque essa linha de código lá:
     
    pronto.
     
    ta ai é só modificar oque os scripts pedem e funcionara 100%
    sou iniciante em programação em lua, comecei a poucos dias, essa foi a forma que encontrei de fazer esse script, creio que deva haver alguma mais simples rsrs, mas ta ai!
  10. Gostei
    samuelandrade45 deu reputação a Skyforever em Como usar a funçao doRemoveItem ?   
    A função doRemoveItem(uid,n) se resume a



    uid = item

    n = pos

    então se for um item especifico você usa assim

    getTileItemById(pos, itemId)

    exêmplo:

    local item = getTileItemById({x = 1, y = 2, z = 3}, 2160)
    if item.uid > 0 then
    return doRemoveItem(item.uid, 1)
    end


    agora tem outra função

    getThingFromPos(pos)

    que pode usar assim

    doRemoveItem(getThingFromPos(pos).uid, 1).
  11. Gostei
    samuelandrade45 deu reputação a Storm em Script de evento que acontece na hora X   
    @samuelandrade45 Confesso que tive ajuda e ainda tive trabalho
     
    -- <globalevent name="Terça" time="14:00" event="script" value="evento.lua"/> -- <globalevent name="Quinta" time="18:00" event="script" value="evento.lua"/> -- <globalevent name="Sabado" time="09:30" event="script" value="evento.lua"/> local day = "Tuesday", "Thursday","Saturday" -- em ingles function onTimer() if (os.date("%A") == config.day) then if math.random(1,3) == 1 then ExecuteCometa() elseif math.random(1,3) == 2 then ExecuteLuaCheia() elseif math.random(1,3) == 3 then ExecuteLunar() end return true end end function ExecuteCometa() local hora = 3 -- horas de duração do evento 1 local online = getPlayersOnline() for _, pid in pairs(online) do -- by xWhiteWolf if getPlayerVocation(pid) == 7 then doPlayerSetVocation(pid, 9) addEvent(doPlayerSetVocation, 1000 * 60 * 3, pid, 7) elseif getPlayerVocation(pid) == 8 then doPlayerSetVocation(pid, 9) addEvent(doPlayerSetVocation, 1000 * 60 * 3, pid, 8) end end doBroadcastMessage("O cometa sozin chegou ao mundo avatar, os dobradores de fogo tem o dano de suas dobras aumentadas em 50%", 17) return true end function ExecuteLuaCheia() local horaa = 3 -- horas de duração do evento 1 local onlini = getPlayersOnline() for _, pidd in pairs(onlini) do -- by xWhiteWolf if getPlayerVocation(pidd) == 1 then doPlayerSetVocation(pidd, 10) addEvent(doPlayerSetVocation, 1000 * 60 * horaa, pidd, 1) elseif getPlayerVocation(pidd) == 2 then doPlayerSetVocation(pidd, 10) addEvent(doPlayerSetVocation, 1000 * 60 * horaa, pidd, 2) end end doBroadcastMessage("A lua cheia chegou ao mundo avatar, os dobradores de agua tem o dano de suas dobras aumentadas em 50%", 17) return true end function ExecuteLunar() local horaaa = 3 -- horas de duração do evento 1 local onlinii = getPlayersOnline() for _, piddd in pairs(onlinii) do -- by xWhiteWolf if getPlayerVocation(piddd) == 7 then doPlayerSetVocation(piddd, 11) addEvent(doPlayerSetVocation, 1000 * 60 * horaaa, piddd, 7) elseif getPlayerVocation(piddd) == 8 then doPlayerSetVocation(piddd, 11) addEvent(doPlayerSetVocation, 1000 * 60 * horaaa, piddd, 8) elseif getPlayerVocation(piddd) == 1 then doPlayerSetVocation(piddd, 12) addEvent(doPlayerSetVocation, 1000 * 60 * horaaa, piddd, 1) elseif getPlayerVocation(piddd) == 2 then doPlayerSetVocation(piddd, 12) addEvent(doPlayerSetVocation, 1000 * 60 * horaaa, piddd, 2) end end doBroadcastMessage("O eclipe lunar chegou ao mundo avatar, os dobradores de fogo e agua tem o dano de suas dobras reduzidas em 50%", 17) return true end  
  12. Gostei
    samuelandrade45 deu reputação a Storm em (Resolvido)Global Storage   
    local Online = getPlayersOnline() -- Retorna uma Tabela local storage,value = 2442, 1 for pid = 1, #Online do setPlayerStorageValue(Online[pid], storage, value) end Ou
     
    setGlobalStorageValue(valueid, newvalue)  
  13. Gostei
    samuelandrade45 deu reputação a poko360 em NpC Travel   
    ola, Crie um arquivo lua em (data/npc) e coloque isso
     
    <npc name="Capitain Johnny" script="data/npc/scripts/captain free.lua" walkinterval="1000" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="96" head="114" body="119" legs="114" feet="114" corpse="2212"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|. ! Eu posso te levar para {central}, {yalahar}, {carlin} Onde deseja ir?" /> <parameter key="message_decline" value="Vai custar |TOTALCOST| gold coins. Vai viajar?!"/> </parameters> </npc>       Após fazer isso crie um arquivo em ( data/npc/script ) e cole isso:         local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler)       -- OTServ event handling functions start function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end -- OTServ event handling functions end         -- Don't forget npcHandler = npcHandler in the parameters. It is required for all StdModule functions! local travelNode = keywordHandler:addKeyword({'central'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer viajar para central por 0 gold coins?'}) travelNode:addChildKeyword({'yes'}, StdModule.travel, {npcHandler = npcHandler, premium = false, level = 1, cost = 0, destination = {x=114, y=12, z=6} }) travelNode:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'I wouldn\'t go there either.'})   -- Don't forget npcHandler = npcHandler in the parameters. It is required for all StdModule functions! local travelNode = keywordHandler:addKeyword({'yalahar'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer viajar para yalahar por 0 gold coins?'}) travelNode:addChildKeyword({'yes'}, StdModule.travel, {npcHandler = npcHandler, premium = false, level = 50000, cost = 0, destination = {x=2097, y=2749, z=6} }) travelNode:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'I wouldn\'t go there either.'})     -- Makes sure the npc reacts when you say hi, bye etc. npcHandler:addModule(FocusModule:new())           Cidade Position frase editavel     caso queira adicionar mais uma cidade é só copiar essa linha e botar abaixo da outra  -- Don't forget npcHandler = npcHandler in the parameters. It is required for all StdModule functions! local travelNode = keywordHandler:addKeyword({'yalahar'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer viajar para yalahar por 0 gold coins?'}) travelNode:addChildKeyword({'yes'}, StdModule.travel, {npcHandler = npcHandler, premium = false, level = 50000, cost = 0, destination = {x=2097, y=2749, z=6} }) travelNode:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'I wouldn\'t go there either.'})  
  14. Gostei
    samuelandrade45 deu reputação a Luan Zero em Sprites NTO   
    Bom, estarei sempre trazendo algumas sprites antigas perdidas em meu computador, lembrando que elas são 100% de minha autoria, antes que qualquer zé merdinha comente que é de fulano, até por quê tenho provas que são minhas.
     
    Prints : 
     
    Madara
     
    Naruto
     
    Shikamaru
     
     
    Raikage
     
    Kiba
     
     
    Itachi 
     
    Lembrando que algumas dessas sprites são de 2016, ou começo de 2017, e outras do fim de 2017, todas sprites que estão circulando por ai sem minha permissão, eu irei postar para que todos possam ter acesso, irei postar várias outras que estarei fiscalizando nos server e colocando aqui.
     
    Downloand
     
    http://www.mediafire.com/file/xz1zrl8ojx28hj3/Sprites Zero.rar
     
    Scan :
     
     
     
    By: Zeroº
  15. Curtir
    samuelandrade45 recebeu reputação de Hokograma em (Resolvido)Mensagem broadcast quando o player ganhar tal item   
    retirado:
     
  16. Gostei
    samuelandrade45 deu reputação a nociam em (Resolvido)addEvent em uma storage   
    Obrigado, tb percebi que tava usando errado o addEvent eu deveria ter feito assim
     
    function teste(cid)
    if isCreature(cid) then
      setPlayerStorageValue(cid, 21103, -1)
    end
    end
     
    ai chamar o addEvent assim,-->   addEvent(teste, 2000, cid).
     
    por isso os erros.
  17. Curtir
    samuelandrade45 recebeu reputação de Hokograma em (Resolvido)Mensagem broadcast quando o player ganhar tal item   
    Creio que seja isto para o baú, se tiver algum erro me avise:

     
     
  18. Curtir
    samuelandrade45 recebeu reputação de Hokograma em (Resolvido)Mensagem broadcast quando o player ganhar tal item   
    function onUse(cid, item, fromPos, item2, toPos) local nomeitem = "nome do item especial" local cor = 5 -- Cor da mensagem, veja as cores no /y de seu servidor ex: /y 25 local item1 = 2160 -- item especial local item2 = 2152 -- item local item3 = 2148 -- item local item4 = 2152 -- item local item5 = 2148 -- item local item6 = 2160 -- item local item7 = 2160 -- item local storage = 255154 if math.random(1,7) == 1 and getPlayerStorageValue(cid, storage) == -1 then doPlayerAddItem(cid, item1, 1) doBroadcastMessage("O Player "..getPlayerName(cid).." ganhou o item "..nomeitem, cor) setPlayerStorageValue(cid, storage, 1) elseif math.random(1,7) == 2 and getPlayerStorageValue(cid, storage) == -1 then doPlayerAddItem(cid, item2, 1) setPlayerStorageValue(cid, storage, 1) elseif math.random(1,7) == 3 and getPlayerStorageValue(cid, storage) == -1 then doPlayerAddItem(cid, item3, 1) setPlayerStorageValue(cid, storage, 1) elseif math.random(1,7) == 4 and getPlayerStorageValue(cid, storage) == -1 then doPlayerAddItem(cid, item4, 1) setPlayerStorageValue(cid, storage, 1) elseif math.random(1,7) == 5 and getPlayerStorageValue(cid, storage) == -1 then doPlayerAddItem(cid, item5, 1) setPlayerStorageValue(cid, storage, 1) elseif math.random(1,7) == 6 and getPlayerStorageValue(cid, storage) == -1 then doPlayerAddItem(cid, item6, 1) setPlayerStorageValue(cid, storage, 1) elseif math.random(1,7) == 7 and getPlayerStorageValue(cid, storage) == -1 then doPlayerAddItem(cid, item7, 1) setPlayerStorageValue(cid, storage, 1) else doPlayerSendCancel(cid, "Voce ja fez essa quest!") end return true end  
  19. Obrigado
    samuelandrade45 recebeu reputação de Hokograma em (Resolvido)Mensagem broadcast quando o player ganhar tal item   
    Aqui está o script funcionando 100% sobre a chance do drop eu não tá funcionando está tipo igual para todos os items, mas no meio de 7 pra achar 1 exato precisa de sorte!
     
    script corrigido e testado:

     
     
  20. Curtir
    samuelandrade45 recebeu reputação de Hokograma em (Resolvido)Mensagem broadcast quando o player ganhar tal item   
    function onUse(cid, item, fromPos, item2, toPos)     local nomeitem = "nome do item especial"     local cor = 5 -- Cor da mensagem, veja as cores no /y de seu servidor ex: /y 25     local item1 = 2160 --  % de chance item especial     local item2 = 2152 -- % de chance      local item3 = 2148 -- % de chance     local item4 = 2152 -- % de chance     local item5 = 2148 -- % de chance     local item6 = 2160 -- % de chance     local item7 = 2160 -- % de chance     local storage = 255154          if math.random(1,7) == 1 and getPlayerStorageValue(cid, storage) == -1 then         doPlayerAddItem(cid, item1, 1)         doBroadcastMessage("O Player "..getPlayerName(cid).." ganhou o item "..nomeitem, cor)         setPlayerStorageValue(cid, storage, 1)             elseif math.random(1,7) == 2 and getPlayerStorageValue(cid, storage) == -1 then         doPlayerAddItem(cid, item2, 1)         doBroadcastMessage("O Player "..getPlayerName(cid).." ganhou o item "..nomeitem, cor)         setPlayerStorageValue(cid, storage, 1)          elseif math.random(1,7) == 3 and getPlayerStorageValue(cid, storage) == -1 then         doPlayerAddItem(cid, item3, 1)         doBroadcastMessage("O Player "..getPlayerName(cid).." ganhou o item "..nomeitem, cor)         setPlayerStorageValue(cid, storage, 1)              elseif math.random(1,7) == 4 and getPlayerStorageValue(cid, storage) == -1 then         doPlayerAddItem(cid, item4, 1)         doBroadcastMessage("O Player "..getPlayerName(cid).." ganhou o item "..nomeitem, cor)         setPlayerStorageValue(cid, storage, 1)              elseif math.random(1,7) == 5 and getPlayerStorageValue(cid, storage) == -1 then         doPlayerAddItem(cid, item5, 1)         doBroadcastMessage("O Player "..getPlayerName(cid).." ganhou o item "..nomeitem, cor)         setPlayerStorageValue(cid, storage, 1)              elseif math.random(1,7) == 6 and getPlayerStorageValue(cid, storage) == -1 then         doPlayerAddItem(cid, item6, 1)         doBroadcastMessage("O Player "..getPlayerName(cid).." ganhou o item "..nomeitem, cor)         setPlayerStorageValue(cid, storage, 1)              elseif math.random(1,7) == 7 and getPlayerStorageValue(cid, storage) == -1 then         doPlayerAddItem(cid, item7, 1)         doBroadcastMessage("O Player "..getPlayerName(cid).." ganhou o item "..nomeitem, cor)         setPlayerStorageValue(cid, storage, 1)              else        doPlayerSendCancel(cid, "Voce ja fez essa quest!")     end return true end Código modificado testa ai!
  21. Curtir
    samuelandrade45 recebeu reputação de seminu em Como colocar exhaustion corretamente em suas spells   
    Olá pessoal do TibiaKing, hoje venho aqui trazer um mini tutorial de como colocar o exhaustion corretamente em suas spells, bastante gente utiliza o exaustion que está no proprio xml, mas por lá acontece alguns erros exemplo: se tiver uma spell com 8000 de exaustion, e outra de 2000 e você vai no seu servidor e usa a spell com 8000 de exhaustion, tem que esperar o tempo dela pra usar qualquer outra, o método que venho trazer aqui ele funciona corretamente e ainda avisa no console quanto tempo falta para usar a spell, sem mais delongas vamos lá!
     
    1- vá até o seu XML procure a magia que quer por o exhaustion
    exemplo:
    perceba que ela tem um exhaustion definido ali em cima, para esse método funcionar corretamente e recomendado deixar o exhaustion do XML em 1000.
     
    forma correta:
     
    2- feito isso vamos ate a pasta onde se encontra seu script e abra ele:
    como exemplo irei utilizar uma spell de área que empurra os players próximos!
     
     
    3- com a spell aberta, logo no inicio da spells vamos inserir as seguintes linhas de código:
     
    ficando assim:
     
    4- por fim, logo abaixo do function onCastSpell(cid, var) vamos adicionar as seguintes linhas de código:
     
     
    ficando assim:
     
    Pronto com isso o exhaution já foi adicionado a sua spell, faça bom proveito:
    Print:
     

  22. Gostei
    samuelandrade45 deu reputação a SoulSarti em [SCRIPT] Adicionar item no chão por x tempo   
    vc n trocou o codigo, ou pelo menos n citou o correto:
    a alteração esta na funçao removeItem()
    -- item = id do item que vai ser criado na invasão -- time = tempo em segundos para o item em questao ser apagado -- para adicionar mais posições, basta copiar a posição e adicionar depois da ultima. -- lembrando de acrescentar a vírgula na penúltima e deixar a ultima sem, conforme está no modelo. local config = {monster = "fire soldier", item = 1487, time = 60, pos = { {x= 1012, y= 1034, z= 7}, {x= 1016, y= 1030, z= 7}, {x= 1016, y= 1038, z= 7}, {x= 1014, y= 1044, z= 7}, {x= 1012, y= 1047, z= 7}, {x= 1024, y= 1052, z= 7}, {x= 1028, y= 1056, z= 7}, {x= 1022, y= 1061, z= 7}, {x= 1028, y= 1065, z= 7}, {x= 1035, y= 1065, z= 7}, {x= 1040, y= 1058, z= 7}, {x= 1046, y= 1055, z= 7}, {x= 1052, y= 1056, z= 7}, {x= 1049, y= 1051, z= 7}, {x= 1058, y= 1059, z= 7}, {x= 1059, y= 1049, z= 7}, {x= 1059, y= 1044, z= 7}, {x= 1064, y= 1036, z= 7}, {x= 1056, y= 1031, z= 7}, {x= 1072, y= 1038, z= 7}, {x= 1079, y= 1039, z= 7}, {x= 1087, y= 1031, z= 7}, {x= 1092, y= 1038, z= 7}, {x= 1082, y= 1025, z= 7}, {x= 1086, y= 1014, z= 7}, {x= 1086, y= 1004, z= 7}, {x= 1097, y= 1002, z= 7}, {x= 1103, y= 998, z= 7}, {x= 1108, y= 994, z= 7}, {x= 1081, y= 996, z= 7}, {x= 1067, y= 993, z= 7}, {x= 1057, y= 995, z= 7}, {x= 1045, y= 996, z= 7}, {x= 1036, y= 1005, z= 7}, {x= 1034, y= 998, z= 7}, {x= 1021, y= 996, z= 7}, {x= 1015, y= 999, z= 7}, {x= 1008, y= 993, z= 7}, {x= 1008, y= 1009, z= 7}, {x= 1004, y= 1021, z= 7}, {x= 1005, y= 1045, z= 7}, {x= 1065, y= 1024, z= 7}, {x= 1053, y= 1015, z= 7}, {x= 1044, y= 1006, z= 7}, {x= 1048, y= 1024, z= 7}, {x= 1038, y= 1030, z= 7}, {x= 1044, y= 1043, z= 7} }} function removeItem() for k = 1, #config.pos do config.pos[k].stackpos = STACKPOS_TOP_FIELD local t = getThingFromPos(config.pos[k]) if t then doRemoveItem(t.uid, 1) end end end function onSay(cid, words, param) -- Monster for i = 1, #config.pos do doCreateItem(config.item, 1, config.pos[i]) doCreateMonster(config.monster, config.pos[i]) end addEvent(removeItem, config.time * 1000) return true end  
    ponha esse codigo e me diga se o erro persiste.
  23. Gostei
    samuelandrade45 deu reputação a zipter98 em [SPELL] Magia De Trap em Area   
    local config = {     wallArea = {         {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},         {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},         {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},          {0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},         {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},         {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},         {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      },     effect = xxx,          --Efeito.     wallId = xxx,          --ID da parede.     time = 5,              --Duração da parede.     cooldown = {20, 10},   --{sucessCooldown, failCooldown},     chance = 30,           --Chance da spell funcionar.     storage = 9571, } function isWalkable(pos, creature, proj, pz)-- by Nord     if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end     if getTopCreature(pos).uid > 0 and creature then return false end     if getTileInfo(pos).protection and pz then return false, true end     local n = not proj and 3 or 2     for i = 0, 255 do         pos.stackpos = i         local tile = getTileThingByPos(pos)         if tile.itemid ~= 0 and not isCreature(tile.uid) then             if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then                 return false             end         end     end     return true end function getPosfromArea(cid, area)    --by Dokmos     icenter = math.floor(table.getn(area)/2)+1     jcenter = math.floor(table.getn(area[1])/2)+1     center = area[icenter]     ivar = table.getn(area)     jvar = table.getn(area[1])     i = table.getn(area)^2     j = table.getn(area[1])^2     local mydir = isCreature(getCreatureTarget(cid)) and getCreatureDirectionToTarget(cid, getCreatureTarget(cid)) or getCreatureLookDir(cid)     setPlayerStorageValue(cid, 21101, -1)     if center[jcenter] == 3 then         if mydir == 0 then             signal = {-1,1,1,2}         elseif mydir == 1 then             signal = {1,-1,2,1}         elseif mydir == 2 then             signal = {1,-1,1,2}         elseif mydir == 3 then             signal = {-1,1,2,1}         end     else         signal = {-1,1,1,2}     end     POSITIONS = {}       P = 0           repeat         pvar = {0,0}         I = area[ivar]         J = I[jvar]         i = i-1         j = j-1         if J == 1 then             if jvar < jcenter then                   pvar[signal[3]] = signal[1]*math.abs((jcenter-jvar))              elseif jvar > jcenter then                   pvar[signal[3]] = signal[2]*math.abs((jcenter-jvar))              end                          if ivar < icenter then                   pvar[signal[4]] = signal[1]*math.abs((icenter-ivar))              elseif ivar > icenter then                 pvar[signal[4]] = signal[2]*math.abs((icenter-ivar))             end         end             if jvar > 1 then             jvar = (jvar-1)         elseif ivar > 1 then             jvar = table.getn(area[1])             ivar = (ivar-1)         end           local pos = getThingPos(cid)         local areapos = {x=pos.x+(pvar[1]),y=pos.y+(pvar[2]),z=pos.z}           if pos.x ~= areapos.x or pos.y ~= areapos.y then             P = P+1             POSITIONS[P] = areapos         end       until i <= 0 and j <= 0     return POSITIONS end function onCastSpell(cid)     if getPlayerStorageValue(cid, config.storage) > os.time() then         doPlayerSendCancel(cid, "Wait "..getPlayerStorageValue(cid, config.storage) - os.time().." second(s).")     else         if math.random(1, 100) > config.chance then             doPlayerSendCancel(cid, "Your spell failed.")             doSendAnimatedText(getThingPos(cid), "FAIL!", 215)             setPlayerStorageValue(cid, config.storage, os.time() + config.cooldown[2])         else             local positions = {}             setPlayerStorageValue(cid, config.storage, os.time() + config.cooldown[1])             for _, pos in pairs(getPosfromArea(cid, config.wallArea)) do                 if isWalkable(pos) and not getTileInfo(pos).protection then                     doCreateItem(config.wallId, 1, pos)                     doSendMagicEffect(pos, config.effect)                     table.insert(positions, pos)                 end             end             if #positions > 0 then                 addEvent(function()                     for i = 1, #positions do                         local item = getTileItemById(positions[i], config.wallId).uid                         if item > 0 then                             doRemoveItem(item)                         end                     end                 end, config.time * 1000)             end         end     end     return true end
  24. Gostei
    samuelandrade45 deu reputação a Hokograma em [SPELL] spell de boost   
    tenta assim:
     
    -- dash as it was in avaOT by Night Wolf local damage = 20 -- dano que toma qnd bate em algum obstáculo local speed = 910 -- velocidade do player ao usar o dash (vai de 0 a mil) local pzprotect = true -- nao deixa entrar em pz com a spell local distance = 15 -- quantos sqms anda local function isWalkable(pos, creature, proj, pz)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function onWalk(cid) if isCreature(cid) then local poslook = getCreatureLookPosition(cid) poslook.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE if isWalkable(poslook, false, false, pzprotect) then if not isCreature(getThingfromPos(poslook).uid) then doMoveCreature(cid, getPlayerLookDirection(cid)) doSendMagicEffect(getPlayerPosition(cid), 14) else doCreatureAddHealth(cid, -damage) doSendMagicEffect(getPlayerPosition(cid), 31) doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180) end else doCreatureAddHealth(cid, -damage) doSendMagicEffect(getPlayerPosition(cid), 31) doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180) end end return true end function onCastSpell(cid, var) for i = 0, distance do addEvent(onWalk, (1001- math.min(speed, 1000)) *i, cid) end return true end  
    Creditos: Night Wolf
  25. Gostei
    samuelandrade45 deu reputação a Crypter em Spell de área buga se estiver com target   
    <instant name="Air Suffocation" words="Air Suffocation" lvl="42" maglv="1" mana="45" exhaustion="3000" prem="0" needlearn="0" direction="1" blockwalls="0" aggressive="1" event="script" value="Air/air suffocation.lua"> <vocation id="5"/> <vocation id="6"/> </instant> Você estava usando a opção casterTargetOrDirection no spells.xml ou seja - Conjurar no Target ou na direção, agora que coloquei só direction vai corrigir o problema.

Informação Importante

Confirmação de Termo