Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 06/04/14 em todas áreas
-
[Pagseguro Automático] 100% e com Double Points OPCIONAL
[Pagseguro Automático] 100% e com Double Points OPCIONAL
ITALOx e 7 outros reagiu a Absolute por uma resposta no tópico
8 pontosFala linduxos do TK, hoje vim trazer para vocês um sistema que venho modificando a algum tempo. O Sistema de pagseguro automático, ao longo do script ensinarei perfeitamente como instalar/configurar. Lembrando que uso esse sistema em um servidor meu e está 100% entregando os pontos no mesmo instante, adicionei a opção de entregar pontos dobrados, para promoção double points acima de X valor. Vá em sua pasta www ou htocs/config abra o arquivo config.php e procure por: $config['site']['layout'] = ... embaixo disto adicione o seguinte: // Pagseguro Automático by Absolute on Luminera // Seu email cadastrado no PagSeguro $config['pagseguro']['email'] = 'SEU E-MAIL DO PAGSEGURO'; // Nome do produto $config['pagseguro']['produtoNome'] = 'Premium Points'; // Valor de cada ponto // Exemplo de valores: // 100 = R$ 1,00 // 250 = R$ 2,50 $config['pagseguro']['produtoValor'] = '100'; Simples explicação sobre este passo: em SEU E-MAIL DO PAGSEGURO basta colocar o seu e-mail do pagseguro, ficando como exemplo: $config['pagseguro']['email'] = '[email protected]'; (não mexa em mais nada) Próximo passo: Agora vá na sua pasta www ou htocs e crie um arquivo chamado pagseguro_retorno.php (Extensão PHP formato de página PHP), dentro do pagseguro_retorno.php adicione: <?PHP $host = "localhost"; /* HOST */ $user = "root"; /* USER */ $passwd = "SENHADOPHPMYADMIN"; /* PASSWORD */ $db = "NOMEDADATABASE"; /* DB */ ############################################################## # CONFIGURAÇÕES ############################################################## $retorno_token = 'SEUTOKENPAGSEGURO'; // Token gerado pelo PagSeguro if (empty($_POST['Referencia'])) { header("Location http://pagseguro.com.br"); } list($accname, $world) = explode('-', $_POST['Referencia']); if ($world=='sv') { $retorno_host = "$host"; // Local da base de dados MySql $retorno_database = "$db"; // Nome da base de dados MySql $retorno_usuario = "$user"; // Usuario com acesso a base de dados MySql $retorno_senha = "$passwd"; // Senha de acesso a base de dados MySql } ############################################################### # ATENÇÃO TIBIAKING NÃO ALTERE DESTA LINHA PARA BAIXO OK? Absolute Agradeçe hihi # $lnk = mysql_connect("$host", "$user", "$passwd") or die ('Nao foi possível conectar ao MySql: ' . mysql_error()); mysql_select_db("$db", $lnk) or die ('Nao foi possível ao banco de dados selecionado no MySql: ' . mysql_error()); // Validando dados no PagSeguro $PagSeguro = 'Comando=validar'; $PagSeguro .= '&Token=' . $retorno_token; $Cabecalho = "Retorno PagSeguro"; foreach ($_POST as $key => $value) { $value = urlencode(stripslashes($value)); $PagSeguro .= "&$key=$value"; } if (function_exists('curl_exec')) { $curl = true; } elseif ( (PHP_VERSION >= 4.3) && ($fp = @fsockopen ('ssl://pagseguro.uol.com.br', 443, $errno, $errstr, 30)) ) { $fsocket = true; } elseif ($fp = @fsockopen('pagseguro.uol.com.br', 80, $errno, $errstr, 30)) { $fsocket = true; } if ($curl == true) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $PagSeguro); 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); curl_setopt($ch, CURLOPT_URL, 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx'); $resp = curl_exec($ch); curl_close($ch); $confirma = (strcmp ($resp, "VERIFICADO") == 0); } elseif ($fsocket == true) { $Cabecalho = "POST /Security/NPI/Default.aspx HTTP/1.0\r\n"; $Cabecalho .= "Content-Type: application/x-www-form-urlencoded\r\n"; $Cabecalho .= "Content-Length: " . strlen($PagSeguro) . "\r\n\r\n"; if ($fp || $errno>0) { fputs ($fp, $Cabecalho . $PagSeguro); $confirma = false; $resp = ''; while (!feof($fp)) { $res = @fgets ($fp, 1024); $resp .= $res; if (strcmp ($res, "VERIFICADO") == 0) { $confirma=true; break; } } fclose ($fp); } else { echo "$errstr ($errno)<br />\n"; } } if ($confirma) { ## Recebendo Dados ## $TransacaoID = $_POST['TransacaoID']; $VendedorEmail = $_POST['VendedorEmail']; $Referencia = $_POST['Referencia']; $TipoFrete = $_POST['TipoFrete']; $ValorFrete = $_POST['ValorFrete']; $Extras = $_POST['Extras']; $Anotacao = $_POST['Anotacao']; $TipoPagamento = $_POST['TipoPagamento']; $StatusTransacao = $_POST['StatusTransacao']; $CliNome = $_POST['CliNome']; $CliEmail = $_POST['CliEmail']; $CliEndereco = $_POST['CliEndereco']; $CliNumero = $_POST['CliNumero']; $CliComplemento = $_POST['CliComplemento']; $CliBairro = $_POST['CliBairro']; $CliCidade = $_POST['CliCidade']; $CliEstado = $_POST['CliEstado']; $CliCEP = $_POST['CliCEP']; $CliTelefone = $_POST['CliTelefone']; $NumItens = $_POST['ProdValor_1']; $ProdQuantidade_x = $POST['ProdQuantidade_1']; # GRAVA OS DADOS NO BANCO DE DADOS # mysql_query("INSERT into pagsegurotransacoes SET TransacaoID='$TransacaoID', VendedorEmail='$VendedorEmail', Referencia='$Referencia', TipoFrete='$TipoFrete', ValorFrete='$ValorFrete', Extras='$Extras', Anotacao='$accname', TipoPagamento='$TipoPagamento', StatusTransacao='$StatusTransacao', CliNome='$CliNome', CliEmail='$CliEmail', CliEndereco='$CliEndereco', CliNumero='$CliNumero', CliComplemento='$CliComplemento', CliBairro='$CliBairro', CliCidade='$CliCidade', CliEstado='$CliEstado', CliCEP='$CliCEP', CliTelefone='$CliTelefone', NumItens='$NumItens', Data=now(), ProdQuantidade_x='$ProdQuantidade_x';"); if ($NumItens >= 5) { $pontosadd = $NumItens * 2; } else { $pontosadd = $NumItens; } if ($StatusTransacao == "Aprovado") { mysql_query("UPDATE accounts SET premium_points = premium_points + '$pontosadd' WHERE name = '".htmlspecialchars($accname)."'"); mysql_query("UPDATE pagsegurotransacoes SET StatusTransacao = 'Entregue' WHERE CONVERT( `pagsegurotransacoes`.`TransacaoID` USING utf8 ) = '$TransacaoID' AND CONVERT( `PagSeguroTransacoes`.`StatusTransacao` USING utf8 ) = 'Aprovado' LIMIT 1 ;"); mysql_query('OPTIMIZE TABLE `pagsegurotransacoes`'); } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Donate Server</title> <style type="text/css"> body { font-family: Tahoma, Geneva, sans-serif; font-size: 16px; width: 900px; margin: 0px auto; margin-top: 30px; } b { font-size: 18px; font-weight: bold; } </style> </head> <body> <table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="11%" align="center" valign="middle"><img src="images/true.png" height="auto" width="64" /></td> <td width="89%"><p><b>S</b>ua compra está sendo processada por nossos sistemas de apuração, dentro de no máximo <u>1 hora seus pontos serão creditados</u>, caso o pagamento não for efetuado, ficará em aberto 1 ou mais pagamentos pendentes em sua conta. Caso você tenha mais de 3 pagamentos pendentes por falta de pagamento, sua conta será bloqueada temporariamente para efetuar pagamentos.</p></td> </tr> </table> <p><b>ID de Transação:</b> <?php echo $_POST['TransacaoID']; ?></p> </body> </html> Explicação de configuração deste passo: Coloque a senha que você usa para entrar no phpmyadmin aqui: $passwd = "SENHADOPHPMYADMIN"; /* PASSWORD */ Exemplo de como ficaria: $passwd = "absolute123"; /* PASSWORD */ Coloque aqui o nome que está seu banco de dados (o mesmo que vai no config.lua, onde salva os characters, contas e cia): $db = "NOMEDADATABASE"; /* DB */ ; Exemplo de como ficaria: $db = "otserver"; /* DB */ IMPORTANTE, TOKEN Pagseguro! Você irá entrar neste link, aparecerá uma página pedindo para colocar a url de retorno, no entanto você colocará o seu site terminado em /pagseguro_retorno.php, exemplo de link para colocar: http://otglobal.com/pagseguro_retorno.php (LEMBRANDO QUE É APENAS UM EXEMPLO, SERÁ SEUSITE.COM/pagseguro_retorno.php, como na imagem a seguir: Pós verificar a seleção do "Ativar" e o link correto clique em Salvar. Agora descendo um pouco esta página onde terá a opção a cima terá uma opção como a imagem a seguir: Clique em GERAR, você receberá o seu código token e coloque no script que estará na sua pasta www ou htocs, mude na linha: $retorno_token = 'SEUTOKENPAGSEGURO'; // Token gerado pelo PagSeguro EM SEUTOKENPAGSEGURO coloque o TOKEN que você acabou de pegar, será vários números e letras, exemplo de como ficaria: $retorno_token = 'AE89464AE8145487484PAEA978E91'; // Token gerado pelo PagSeguro DOUBLE POINTS EXPLICAÇÃO: Neste mesmo script há algumas linhas com a seuginte função: if ($NumItens >= 5) { $pontosadd = $NumItens * 2; Isto quer dizer, > 5 (A cima de 5 pontos, receba: NumItens * 2, receba em 2x PONTOS EM DOBRO!) Para alterar o valor a cima que a pessoa receberá em dobro: NumItens >= 5) 5 pontos ou mais a pessoa receberá em dobro, caso seja para qualquer valor, troque o 5 pelo 1. Caso não deseje DOUBLE POINTS e sim 50% do valor em pontos, exemplo: 10R$ = 15 Pontos, altere para: $pontosadd = $NumItens * 1.5; Caso não deseje promoção e queira que seja 1 Real = 1 Ponto: $pontosadd = $NumItens * 1; Próximo passo: Calma gente, está quase acabando eu prometo, então abra o seu PHPMYADMIN, localhost/phpmyadmin ou seusite.com/phpmyadmin, exemplo: www.absolutewar.com/phpmyadmin ; absoluteot.servegame.com/phpmyadmin, clique na opção SQL do phpmyadmin (como mostrarei na imagem e de executar. Código a inserir no "espaço": 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; Pós executar irá aparecer uma mensagem que o código foi aceito e uma tabela nova foi criada, como na imagem a seguir: Agora por fim o ÚLTIMO PASSO Novamente na pasta www ou htdocs substitua o seu arquivo donate.php por este: <?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 .= '<br><br><b>Valores:</b><br> 1 Point = R$ 1,00<br> 10 Points = R$ 10,00<br> 20 Points = R$ 20,00<br> E assim por diante...<br><br> '; $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="10" 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 - é rápido, grátis e seguro!" /> </td> </tr> </tbody></table></form> <b><span style="color:#ff0000;">OBS¹:</span></b> Os pontos são entregues <b>automáticamente</b> logo após a <u>aprovação</u> do seu pagamento pelo PagSeguro, ou seja, pagou e foi aprovado pontos depositados. Você pdoerá acessar o shop offer e desfrutar dos melhores items do servidor! <?php } ?>'; } ?> Pronto galera tão fácil né? agora vocês poderão pegar seu guarda sol, sua água de coco e sentar na sua cadeira de praia enquanto o script entregará os pontos automáticamente em menos de 1 minuto. Espero ter ajudado, quaisquer dúvidas podem solicitar no tópico ou até mesmo me mandar uma mensagem privado que estarei disposto a ajuda-los. Créditos: Absolute (EU) Matheus Sesso pela página donate.php Nos vemos na próxima! Enjoy.8 pontos -
[FireStorm Event] Chuva de fogos! Desespero [ON]
[FireStorm Event] Chuva de fogos! Desespero [ON]
Arysoooon e 4 outros reagiu a Absolute por uma resposta no tópico
5 pontosHello nação TK, de um tempo pra cá eu e o membro ViitinG resolvemos trabalhar em cima de um novo evento para vocês, é o FireStorm event! Eu vim trabalhando no script do evento em MODS e o Victor no mapa do mesmo. WTF DE FAIRIEISTORMIII IS IT? Pois é galera, o nome já diz tudo "Chuva de Fogos". Algum membro da equipe executará o comando !startfire para dar início ao evento, então irá aparecer uma mensagem para todos os jogadores do servidor que o evento Fire Storm foi aberto. Então os jogadores irão dizer: !joinfire para entrar no evento, os jogadores ficarão imóveis até que o evento comece, o jogador não poderá usar o comando quando estiver com battle fight. Pós dar o tempo para inciar o evento (configurável no script) os jogadores serão teleportados para a área específica do mesmo onde em 1 minuto começará a cair FOGOS do céu, onde os jogadores contaram com a habilidade e a sorte para fugir dos fogos. A regra é clara Casa Grande, foi atingido é teleportado para o templo com a mensagem "You loss" VOCÊ PERDEU BABY! O Último sobrevivente da arena é recompensado com X item automáticamente (configurável). Sem mimimi vamos ao que interessa: Na pasta incial do seu servidor há uma pasta com o nome de MODS, então crie um arquivo com o nome de w-fire.xml dentro dela com o conteúdo abaixo: <?xml version="1.0" encoding="UTF-8"?> <mod name="Fire_Storm_Event" version="0.1" author="Absolute Version" contact="lu.lukinha" enabled="yes"> <config name="config_fire_storm_event"> <![CDATA[ configFireStormEvent = { storages = { main = 'fireStormEventMain', -- set free storage player = 'fireStormEventPlayer', -- set free storage joining = 'fireStormEventJoining', -- set free storage exhaust = 'fireStormEventExhaust', -- set free storage countEvent = 'fireStormEventCountEvent' -- set free storage }, position = {x=890 ,y=993,z=7}, -- posiotion to which player is teleporting room = { from = {x=736,y=933,z=7}, -- left top corner of event room to = {x=781,y=955,z=7} -- right bottom corner of event room }, rewards = {8858, 2346, 2538, 2437}, -- reward id which player can win (reward is random) players = { max = 80, min = 2, minLevel = 100 }, days = { ['Tuesday'] = {'19:59:20'}, ['Thursday'] = {'19:59:20'}, ['Sunday'] = {'19:59:20'} }, fireStormDelay = 1000, -- milisecond delayTime = 5.0, -- time in which players who joined to event are teleporting to teleport position startEvent = 5 -- time from teleport to start event text = '-PL-\nAby wygrac i otrzymac nagrode, utrzymaj sie jak najdluzej na arenie.\n\n-ENG-\nTo win and get a Rewards, to stay as long as possible in the arena.' } y, x = 1, 1 -- don't change it ]]> </config> <lib name="lib_fire_storm_event"> <![CDATA[ function doStartFireStormEvent() doSetStorage(configFireStormEvent.storages.joining, -1) if configFireStormEvent.players.min <= doCountPlayersFireStormEvent() then for _, cid in ipairs(getPlayersOnline()) do if getCreatureStorage(cid, configFireStormEvent.storages.player) > 0 then doCreatureSetNoMove(cid, false) doRemoveCondition(cid, CONDITION_INFIGHT) doTeleportThing(cid, configFireStormEvent.position) doCreatureSetStorage(cid, configFireStormEvent.storages.player, -1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Get ready. Fire Storm Event start in '..configFireStormEvent.startEvent..' seconds.') end end addEvent(doSetStorage, configFireStormEvent.startEvent * 1000, configFireStormEvent.storages.main, 1) addEvent(doRepeatCheckFireStorm, configFireStormEvent.startEvent * 1000 + 2000) doBroadcastMessage('Fire Storm Event has started. LET\'S GO!') else for _, cid in ipairs(getPlayersOnline()) do if getCreatureStorage(cid, configFireStormEvent.storages.player) > 0 then doCreatureSetNoMove(cid, false) doRemoveCondition(cid, CONDITION_INFIGHT) end end doBroadcastMessage('Fire Storm hasn\'t started beacuse there were not enough players.') end end function doRepeatCheckFireStorm() if getStorage(configFireStormEvent.storages.main) > 0 then local xTable, yTable, playerTable = {}, {}, {} for x = configFireStormEvent.room.from.x, configFireStormEvent.room.to.x do for y = configFireStormEvent.room.from.y, configFireStormEvent.room.to.y do table.insert(xTable, x) table.insert(yTable, y) local n, i = getTileInfo({x=x, y=y, z=configFireStormEvent.room.to.z}).creatures, 1 if n ~= 0 then local v = getThingfromPos({x=x, y=y, z=configFireStormEvent.room.to.z, stackpos=i}).uid while v ~= 0 do if isPlayer(v) then table.insert(playerTable, v) if n == #playerTable then break end end i = i + 1 v = getThingfromPos({x=x, y=y, z=configFireStormEvent.room.to.z, stackpos=i}).uid end end end end if #playerTable == 1 then local prize = math.random(#configFireStormEvent.rewards) doCreatureAddHealth(playerTable[1], getCreatureMaxHealth(playerTable[1]) - getCreatureHealth(playerTable[1])) doCreatureAddMana(playerTable[1], getCreatureMaxMana(playerTable[1]) - getCreatureMana(playerTable[1])) doTeleportThing(playerTable[1], getTownTemplePosition(getPlayerTown(playerTable[1])), true) doPlayerAddItem(playerTable[1], configFireStormEvent.rewards[prize], 1) doPlayerSendTextMessage(playerTable[1], MESSAGE_EVENT_ADVANCE, 'You win! You have received ' .. getItemNameById(configFireStormEvent.rewards[prize]) .. ' as reward.') doBroadcastMessage('Fire Storm Event has finished. The winner is ' .. getCreatureName(playerTable[1]) .. '. Congratulations.') doSetStorage(configFireStormEvent.storages.main, -1) db.query("INSERT INTO `events` (`event_name`, `winner_name`, `won_item`, `time_win`) VALUES (\"Fire\", \"" .. getCreatureName(playerTable[1]) .. "\", \"" .. getItemNameById(configFireStormEvent.rewards[prize]) .. "\", " .. getStorage(configFireStormEvent.storages.countEvent) ..");") doSetStorage(configFireStormEvent.storages.countEvent, getStorage(configFireStormEvent.storages.countEvent) + 1) x, y = 1, 1 elseif #playerTable > 1 then for a = 1, y do addEvent( function() local pos = {x=xTable[math.random(#xTable)], y=yTable[math.random(#yTable)], z=7} for _, player in ipairs(playerTable) do local pPos = getThingPos(player) if pPos.x == pos.x and pPos.y == pos.y and pPos.z == pos.z then doCreatureAddHealth(player, - getCreatureMaxHealth(player)) end end doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA) end, math.random(100,1000) ) end if x == 5 * y then y = y + 1 end x = x + 1 else doBroadcastMessage('No one have won in Fire Storm Event.') doSetStorage(configFireStormEvent.storages.main, -1) doSetStorage(configFireStormEvent.storages.countEvent, getStorage(configFireStormEvent.storages.countEvent) + 1) x, y = 1, 1 end addEvent(doRepeatCheckFireStorm, configFireStormEvent.fireStormDelay) end end function doCountPlayersFireStormEvent() local x = 0 for _, cid in ipairs(getPlayersOnline()) do if getCreatureStorage(cid, configFireStormEvent.storages.player) > 0 then x = x + 1 end end return x end function doStartCountingFireStormEvent(x) if configFireStormEvent.delayTime-x > 0 then doBroadcastMessage('Fire Storm Event will start in '..configFireStormEvent.delayTime-x..' minutes. You can join to the event by say "!fire join".') addEvent(doStartCountingFireStormEvent, 60*1000, x+1) end end ]]> </lib> <talkaction words="!fire" event="script"> <![CDATA[ domodlib("config_fire_storm_event") function onSay(cid, words, param) if getStorage(configFireStormEvent.storages.joining) ~= 1 then return doPlayerSendCancel(cid, 'Fire Storm Event hasn\'t started yet.') elseif param == '' then return doPlayerSendCancel(cid, 'Command param required (say: "!fire join" or "!fire leave.").') elseif getPlayerLevel(cid) < configFireStormEvent.players.minLevel then return doPlayerSendCancel(cid, 'You can\'t join to the event if you don\'t have a require '..configFireStormEvent.players.minLevel..' level.') elseif getTileInfo(getThingPos(cid)).protection ~= true then return doPlayerSendCancel(cid, 'You can\'t join to the event if you aren\'t in protection zone.') elseif exhaustion.check(cid, configFireStormEvent.storages.exhaust) ~= false then return doPlayerSendCancel(cid, 'You must wait '..exhaustion.get(cid, configFireStormEvent.storages.exhaust)..' seconds to use this command again.') end if param == 'join' then if getCreatureStorage(cid, configFireStormEvent.storages.player) > 0 then return doPlayerSendCancel(cid, 'You have arleady joined to event. Wait patiently for start.') elseif doCountPlayersFireStormEvent() == configFireStormEvent.players.max then return doPlayerSendCancel(cid, 'Max players in the event have been reached.') end doCreatureSetNoMove(cid, true) doPlayerPopupFYI(cid, configFireStormEvent.text) doCreatureSetStorage(cid, configFireStormEvent.storages.player, 1) doAddCondition(cid, createConditionObject(CONDITION_INFIGHT, -1)) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'You have joined to Fire Storm Event. You can\'t move until event don\'t start. Wait patiently for the event start.') doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have joined to Fire Storm Event.') elseif param == 'leave' then if getCreatureStorage(cid, configFireStormEvent.storages.player) <= 0 then return doPlayerSendCancel(cid, 'You can\'t leave from the event if you don\'t join.') end doCreatureSetNoMove(cid, false) doRemoveCondition(cid, CONDITION_INFIGHT) doCreatureSetStorage(cid, configFireStormEvent.storages.player, -1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have left from the Fire Storm Event.') end exhaustion.set(cid, configFireStormEvent.storages.exhaust, 5) return true end ]]> </talkaction> <talkaction words="!startfire" access="4" event="script"> <![CDATA[ domodlib("config_fire_storm_event") domodlib("lib_fire_storm_event") function onSay(cid, words, param) if getStorage(configFireStormEvent.storages.main) > 0 then return doPlayerSendCancel(cid, 'Fire Storm Event is already running.') end doStartCountingFireStormEvent(0) for _, pid in ipairs(getPlayersOnline()) do if getCreatureStorage(pid, configFireStormEvent.storages.player) > 0 then doCreatureSetStorage(pid, configFireStormEvent.storages.player, -1) doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true) end end doSetStorage(configFireStormEvent.storages.joining, 1) addEvent(doStartFireStormEvent, configFireStormEvent.delayTime * 60 * 1000) return true end ]]> </talkaction> <globalevent name="Fire_Storm_Event_Days" interval="1000" event="script"> <![CDATA[ domodlib("config_fire_storm_event") domodlib("lib_fire_storm_event") local daysOpen = {} for k, v in pairs(configFireStormEvent.days) do table.insert(daysOpen, k) end function onThink(interval) if isInArray(daysOpen, os.date('%A')) then if isInArray(configFireStormEvent.days[os.date('%A')], os.date('%X', os.time())) then if getStorage(configFireStormEvent.storages.joining) ~= 1 then doStartCountingFireStormEvent(0) for _, pid in ipairs(getPlayersOnline()) do if getCreatureStorage(pid, configFireStormEvent.storages.player) > 0 then doCreatureSetStorage(pid, configFireStormEvent.storages.player, -1) doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true) end end doSetStorage(configFireStormEvent.storages.joining, 1) addEvent(doStartFireStormEvent, configFireStormEvent.delayTime * 60 * 1000) end end end return true end ]]> </globalevent> <event type="statschange" name="Fire_Storm_Event_Dead" event="script"> <![CDATA[ domodlib("config_fire_storm_event") function onStatsChange(cid, attacker, type, combat, value) if type == 1 and getCreatureHealth(cid) <= value then if isInRange(getThingPos(cid), configFireStormEvent.room.from, configFireStormEvent.room.to) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid)) doCreatureAddMana(cid, getCreatureMaxMana(cid) - getCreatureMana(cid)) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You loss.') return false end end return true end ]]> </event> <event type="login" name="Fire_Storm_Event_Login" event="script"> <![CDATA[ domodlib("config_fire_storm_event") function onLogin(cid) if getCreatureStorage(cid, configFireStormEvent.storages.player) > 0 then doCreatureSetStorage(cid, configFireStormEvent.storages.player, -1) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), true) doCreatureSetNoMove(cid, false) doRemoveCondition(cid, CONDITION_INFIGHT) end registerCreatureEvent(cid, 'Fire_Storm_Event_Dead') return true end ]]> </event> <globalevent name="Fire_Storm_Event_Start" type="startup" event="script"> <![CDATA[ domodlib("config_fire_storm_event") function onStartup() doSetStorage(configFireStormEvent.storages.main, -1) doSetStorage(configFireStormEvent.storages.joining, -1) return true end ]]> </globalevent> </mod> Como configurar: position = {x=890 ,y=993,z=7}, -- posiotion to which player is teleporting - Aqui você deve colocar o centro da posição do mapa que o linduxo do meu querido amigo e parceiro vosso disponibiliza AQUI from = {x=736,y=933,z=7}, -- left top corner of event room - Aqui você deve colocar a posição superior esquerda da área do evento, como exemplo na imagem: to = {x=781,y=955,z=7} -- right bottom corner of event room - Aqui você deve colocar a posição inferior direita da área do evento, como exemplo na imagem: Configurar prêmio: rewards = {8858, 2346, 2538, 2437}, -- reward id which player can win (reward is random) - onde está os números de exemplo 8858, 2346, 2538, 2437 são os IDS dos items que você colocará como premiação, o player ganhará apenas UM item que pode ser um dos 4 (sorteio). Caso você queira colocar apenas 1 item específico altere para: rewards = {8858}, -- reward id which player can win (reward is random) Permissão para abrir o evento: <talkaction words="!startfire" access="4" event="script"> - em acess="4" você poderá alterar o membro da staff que poderá abrir, o número 4 indica que CM e ADMS poderão abrir, caso troque para 3, GM'S, CM'S E ADM'S poderão executar o comando !startfire para abrir o evento quando quiser. Configuração automática: days = { ['Tuesday'] = {'19:59:20'}, ['Thursday'] = {'19:59:20'}, ['Sunday'] = {'19:59:20'} Simples, os dias são colocados em inglês, então basta ajustar, por exemplo, você quer que o evento ocorra na segunda-feira ás 19:00, segue um exemplo: ['Monday'] = {'19:00:00'}, Lembrando que o dia e horário deve corresponder com o horário atual da máquina onde roda o servidor. É isso meus queridos, na próxima versão do evento colocarei para entrar no mesmo por teleport. Não esqueçam de baixar e usar o mapa que recomendo do Victor aqui. É ideal para o evento =) Qualquer dúvida não deixe de me perguntar. Créditos: CollocorpuseK base do evento Absolute (adaptação, funções e abertura por comando) VitiinG (mapa) Nós vemos na próxima versão! Enjoy.5 pontos -
Mapa para FireStorm Event
Mapa para FireStorm Event
Orientalz e 3 outros reagiu a ViitinG por uma resposta no tópico
4 pontosEste é o mapa do FireStorm Event.O link para o tópico do evento estará no final do tópico,espero que gostem do mapa ! Abra o spoiler caso queira ver a imagem do mapa : OBS : Coloque No Logout Tool em toda a area do mapa !! Download Mapa : http://www.mediafire.com/download/cbmkd2s1pqi0wgy/FireStorm+Event.rar Link para o tópico do evento : http://www.tibiaking.com/forum/topic/34805-firestorm-event-chuva-de-fogos-desespero-on/ Creditos : ViitinG. Absolute.4 pontos -
Anti Clone System [GlobalEvents] Shop.lua[Gesior] / CheckItens.lua
Anti Clone System [GlobalEvents] Shop.lua[Gesior] / CheckItens.lua
adolfbig e um outro reagiu a Emersonssss por uma resposta no tópico
2 pontosEm GlobalEvents crie um Arquivo chamado Check.lua local function CheckPlayer_Items() query = db.getResult("SELECT *, SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) AS 'serial' FROM player_items WHERE CONVERT( attributes USING latin1 ) LIKE '%description%' GROUP BY SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) having count(*) > 1") if (query:getID() == -1) then textquery = "\n Check Items : Nenhum item encontrado." print(textquery) return true end if (query:getID() ~= -1) then text = "\n[!] -> Deleting item player_items: [Player ID: " .. getPlayerNameByGUID(query:getDataInt("player_id")) .. " - Sid: "..(query:getDataInt("sid")).." - Pid: "..(query:getDataInt("pid")).." - Itemtype: "..(query:getDataInt("itemtype")).." - Serial: " .. query:getDataString("serial") .."" db.query("DELETE FROM `otservs`.`player_items` WHERE `player_items`.`player_id` =" .. (query:getDataInt("player_id")) .. " AND `player_items`.`sid` ="..(query:getDataInt("sid")).." AND `player_items`.`pid` ="..(query:getDataInt("pid"))..";") db.query("DELETE FROM `otservs`.`player_depotitems` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") db.query("DELETE FROM `otservs`.`tile_items` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") f = io.open("data/logs/AntiClone.txt", "a+") f:write("Player: "..text.." - " .. os.date("%d %B %Y - %X.", os.time()) .."\n\n----------------------------------------------------------\n") f:close() print(text) if (query:getID() == -1) then textplayer_items = "\n Check Items : Todos os Items Foram Removidos." print(textplayer_items) return true end CheckPlayer_Items() end return true end local function CheckPlayer_DepotItems() query = db.getResult("SELECT *, SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) AS 'serial' FROM player_depotitems WHERE CONVERT( attributes USING latin1 ) LIKE '%description%' GROUP BY SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) having count(*) > 1") if (query:getID() == -1) then textquery = "\n Check Items : Nenhum item encontrado." print(textquery) return true end if (query:getID() ~= -1) then text = "\n[!] -> Deleting item player_depotitems: [Player ID: " .. getPlayerNameByGUID(query:getDataInt("player_id")) .. " - Sid: "..(query:getDataInt("sid")).." - Pid: "..(query:getDataInt("pid")).." - Itemtype: "..(query:getDataInt("itemtype")).." - Serial: " .. query:getDataString("serial") .."" db.query("DELETE FROM `otservs`.`player_items` WHERE `player_items`.`player_id` =" .. (query:getDataInt("player_id")) .. " AND `player_items`.`sid` ="..(query:getDataInt("sid")).." AND `player_items`.`pid` ="..(query:getDataInt("pid"))..";") db.query("DELETE FROM `otservs`.`player_depotitems` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") db.query("DELETE FROM `otservs`.`tile_items` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") f = io.open("data/logs/AntiClone.txt", "a+") f:write("Player: "..text.." - " .. os.date("%d %B %Y - %X.", os.time()) .."\n\n----------------------------------------------------------\n") f:close() print(text) if (query:getID() == -1) then textplayer_items = "\n Check Items : Todos os Items Foram Removidos." print(textplayer_items) return true end CheckPlayer_DepotItems() end return true end function onStartup() CheckPlayer_Items() CheckPlayer_DepotItems() return true end em globalevents.xml Adicione <globalevent name="AntiClone" type="start" event="script" value="Check.lua"/> Para Adicionar a Opção de Verificar itens Clonados Adicione um Serial em todos os Itens Vips : em shop.lua Adicione ( Modern Acc ) function onThink(interval, lastExecution, thinkInterval) local result = db.getResult("SELECT * FROM shop_history WHERE `processed` = 0;") if(result:getID() ~= -1) then while(true) do cid = getCreatureByName(getPlayerNameByGUID(tonumber(result:getDataInt("player")))) product = tonumber(result:getDataInt("product")) itemr = db.getResult("SELECT * FROM shop_offer WHERE `id` = "..product..";") if isPlayer(cid) then local um_um = {1,2,3,4,5,6,7,8,9,0} um = um_um[math.random(1, #um_um)] local dois_dois = {1,2,3,4,5,6,7,8,9,0} dois = dois_dois[math.random(1, #dois_dois)] local tres_tres = {1,2,3,4,5,6,7,8,9,0} tres = tres_tres[math.random(1, #tres_tres)] local quatro_quatro = {1,2,3,4,5,6,7,8,9,0} quatro = quatro_quatro[math.random(1, #quatro_quatro)] local id = tonumber(itemr:getDataInt("item")) local tid = tonumber(result:getDataInt("id")) local count = tonumber(itemr:getDataInt("count")) local tipe = tonumber(itemr:getDataInt("type")) local productn = tostring(itemr:getDataString("name")) if isInArray({5,8},tipe) then if getPlayerFreeCap(cid) >= getItemWeightById(id, count) then if isContainer(getPlayerSlotItem(cid, 3).uid) then received = doPlayerAddItem(cid, id, count, false) if received then doItemSetAttribute(received, "description", ''.. productn ..' by ' .. getCreatureName(cid) .. ' [ID:' .. um .. '' .. dois .. '' .. tres .. '' .. quatro .. '].') doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system") db.query("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";") f = io.open("data/logs/Shop.txt", "a+") f:write("Player : '".. productn .." by ".. getCreatureName(cid) .." [ID: ".. um .."".. dois .."".. tres .."".. quatro .."] Item : "..productn.." - "..getCreatureName(cid).."- " .. os.date("%d %B %Y - %X.", os.time()) .."\n----------------------------------------------------------\n") f:close() else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space on container to receive >> "..productn.." <<") end else doPlayerSendTextMessage(cid,19, "Sorry, you don't have a container to receive >> "..productn.." <<") end else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)") end elseif isInArray({6,7},tipe) then if tipe == 6 then bcap = 8 bid = 1987 elseif tipe == 7 then bcap = 20 bid = 1988 end if isItemRune(id) then count = 1 end if getPlayerFreeCap(cid) >= (getItemWeightById(1987, 1) + getItemWeightById(id,count * bcap)) then local bag = doCreateItemEx(bid, 1) for i = 1,bcap do doAddContainerItem(bag, id, count) end received = doPlayerAddItemEx(getPlayerSlotItem(cid, 3).uid, bag) if received == RETURNVALUE_NOERROR then doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system") db.query("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";") else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space to receive >> "..productn.." <<") end else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)") end end end itemr:free() if not(result:next()) then break end end result:free() end return true end Tag : <globalevent name="shop" interval="3000" event="script" value="shop.lua"/> Creditos : Emerson Henrique < DBO INFINITY> Comandos e Codigos Adaptados de varios sistemas Ajuda : Arthur Luna (Ajudou no limite de Caracteres) PS : Meu Shop salva na db. apenas o ID do player e não o nome essa Adaptação não vou disponibilizar. http://otsbrasil.com/dbo Servidor Derivado Dragon Ball Online 8.6 + Cast System + War System entre outros sistemas. [ADM] Aaron Autorizo modificações e Postar em Qualquer Forum, esse codigo é meu e fiz de graça e forneço de Graça. PS2 : Se Possivel mudar o Titulo para Anti Clone System [GlobalEvents] Shop.lua[Modern Acc] / CheckItens.lua2 pontos -
[TalkActions] !online diferente
[TalkActions] !online diferente
NighteyeTV e um outro reagiu a Ryzor por uma resposta no tópico
2 pontosEae galera bom aqui é um script que o !online e diferente para quem ta acustumado ver aquele online igual de todo ot .. ele vai falar quantos player tem online o uptime quantos npc existi no mapa e quantos monstros também espero que aproveitem... em data/talkactions/online.lua apaga tudo que está dentro e poe isso [( Script created by Ryzor for www.tibiaking.com )] -- function onSay(cid, words, param, channel) local tmp = getWorldUpTime() local hours = math.ceil(tmp / 3600) - 1 local minutes = math.ceil((tmp - (3600 * hours)) / 60) if(minutes == 60) then minutes = 0 hours = hours + 1 end local showGamemasters,on,count = false,getPlayersOnline(),0 for _, cid in pairs(on) do if getPlayerAccess(cid) < 3 then count = count + 1 end end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[Modo: PVP] - [UpTime: " .. hours .. " hours and " .. minutes .. " minutes.] - [Players Online: " .. (showGamemasters == true and #on or count) .. "] - [NPCs: 51] - [Monstros: 8215]") return TRUE end2 pontos -
Sistema de Reset 100%
Sistema de Reset 100%
bagulhoescroto reagiu a xWhiteWolf por uma resposta no tópico
1 pontoFala galera do TK, hoje vim pra trazer pra vocês um npc criado por mim e pelo Nogard numa madrugada aí para solucionar a dúvida de um cara no suporte. Eu dei uma melhorada no script original, tirei umas coisas repetidas e adicionei novas funções; Você agora pode configurar se quer que o preço aumente a cada reset, se quer que o level pra resetar aumente e se vc quer que a vida resete junto (e quanto % da vida atual será a vida após resetar). Testado em TFS 0.3.6, Versão 8.45 Sem mais delongas, vamos ao script. Antes de tudo crie um arquivo chamado reseter.lua na pasta data\npc\scripts\ e coloque isso daqui dentro dele: Você pode editar tudo mexendo aqui: local config = { minlevel = 150, --- level inical para resetar price = 10000, --- preço inicial para resetar newlevel = 20, --- level após reset priceByReset = 0, --- preço acrescentado por reset percent = 100, ---- porcentagem da vida/mana que você terá ao resetar (em relação à sua antiga vida total) levelbyreset = 0 --- quanto de level vai precisar a mais no próximo reset } Feito isso, crie agora o npc que irá utilizar esse script.. em data\npc crie um arquivo.xml chamado Reseter.xml e coloque isso dentro dele: Agora é só colocar o seu npc no mapa pelo mapa editor e curtir OBS 1: Se seu server for 8.6 ou maior troque no script.lua as funções db.executeQuery por db.query OBS 2: Esse script dava pra ser diminuido ainda mais mas por hora deixa ele assim, se vc tiver alguma proposta melhor por favor poste nos comentários que eu testo a sua versão e edito o tópico se for o caso. OBS 3: Não remova os créditos, isso é a coisa mais baixa e suja que alguém pode fazer.. eu scripto pra ajudar a comunidade do Tibia a evoluir e libero 99% doque eu faço, se vocês não removerem os créditos e não postarem em outros fórums sem minha permissão isso pode continuar assim. --- EDIT: Coloquei algumas imagens pra vcs verem como fica no server EDIT: Arrumei o problema de o npc não dar bye automáticamente qnd o player se afasta, bugando em algumas versões e impedindo de conversar com outros npcs. Apenas substituam o arquivo em scripts pela versão atualizada, grato. EDIT2: Novos erros arrumados, agora o NPC dá bye automaticamente e não buga qnd te reseta. EDIT3: Resolvido bug de dar hi, reset, yes várias vezes e derrubar o servidor (troque tanto o xml qnt o script do npc) O script também foi identado.1 ponto -
Anél de Experiência' [Exp Ring]
Anél de Experiência' [Exp Ring]
HaragOT reagiu a Adriano SwaTT por uma resposta no tópico
1 pontoEu tentei achar aqui no TibiaKing o Anél de Experiência (Ring of Experience ou Exp Ring), e só achei um tutorial, mas está meio imcompleto e confuso... No entanto decidi postar este que criei há alguns meses. Como o nome diz, é um anél que aumenta a experiência de sua caçada' (configurável) \o/ Vamos lá... 1º Passo 2º Passo <movevent type="Equip" itemid="7697" slot="ring" event="script" value="exp_ring.lua"/> <movevent type="DeEquip" itemid="7697" slot="ring" event="script" value="exp_ring.lua"/> <movevent type="Equip" itemid="7708" slot="ring" event="script" value="exp_ring.lua"/> <movevent type="DeEquip" itemid="7708" slot="ring" event="script" value="exp_ring.lua"/> Pronto, em "movements.xml" é só. 3º Passo Aqui, temos duas opções... O Exp Ring Tradicional é para server com Experiência fixa, ou seja, a EXP é sempre a mesma.. Já o Exp Ring por Stages é para server que a Experiência varia de acordo com o level do player. Clique no Spoiler referente ao seu server. EXP RING Tradicional: function onEquip(cid, item, slot) doTransformItem(item.uid, 7697, 1) doPlayerSendTextMessage(cid, 22, 'Agora ganha 2x mais experiencia!') doPlayerSetExperienceRate(cid, getConfigValue("rateExperience")*0.2) return TRUE end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 7708, 1) doPlayerSendTextMessage(cid, 22, 'Experiencia extra cancelada.') doPlayerSetExperienceRate(cid, 1) return TRUE end EXP RING por Stages: function onEquip(cid, item, slot) local rate = {} if getPlayerLevel(cid) <= 200 then rate = 1.3 elseif getPlayerLevel(cid) > 200 and getPlayerLevel(cid) <= 280 then rate = 1.15 elseif getPlayerLevel(cid) > 280 then rate = 1.05 end doTransformItem(item.uid, 7697, 1) doPlayerSendTextMessage(cid, 22, "Sua experiencia foi aumentada em "..((rate - 1)*100).." %.") doPlayerSetExperienceRate(cid, rate) return TRUE end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 7708, 1) doPlayerSendTextMessage(cid, 22, "Sua experiencia esta de volta ao normal.") doPlayerSetExperienceRate(cid, 1.0) return TRUE end Salve-o e feche o arquivo. Para aprender configurar a rate do Script clique no spoiler abaixo: Azul: É o valor em vezes que aumentará a experiência. Ex: Onde está o "2" no código, você pode substituir por quantas vezes que que seja a multiplicação da EXP' (2 é igual a 2x mais Exp)... Ou pode por em porcentagens usando como está abaixo: 1.5 = 50% 1.2 = 20% E assim sucessivamente. Se quer um Anel de Experiencia Recarregável (como soft boots), clique no Spoiler abaixo. Configurações do NPC: Recolhe: "broken experience ring" Custo: "50k" Devolte: "Brand-New Experience Ring" 5º Passo É, acho que é isso... Qualquer coisa postem aqui para resolvermos juntos. Eu editei o Script, criei o NPC e criei o Tutorial. Créditos pelo tutorial: AdrianoSwaTT Créditos pelo Exp Ring Stages: Vodkart Créditos pelo Script: OTLand Abraços, espero que seja útil' 2º Passo <movevent type="Equip" itemid="7697" slot="ring" event="script" value="exp_ring.lua"/> <movevent type="DeEquip" itemid="7697" slot="ring" event="script" value="exp_ring.lua"/> <movevent type="Equip" itemid="7708" slot="ring" event="script" value="exp_ring.lua"/> <movevent type="DeEquip" itemid="7708" slot="ring" event="script" value="exp_ring.lua/"> Pronto, em "movements.xml" é só. 3º Passo function onEquip(cid, item, slot) doTransformItem(item.uid, 7697, 1) doPlayerSendTextMessage(cid, 22, 'Agora ganha 2x mais experiencia!') doPlayerSetExperienceRate(cid, getConfigValue("rateExperience")*0.2) return TRUE end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 7708, 1) doPlayerSendTextMessage(cid, 22, 'Experiencia extra cancelada.') doPlayerSetExperienceRate(cid, 1) return TRUE end 4º Passo <!--?xml version="1.0" encoding="UTF-8"?--> <npc name="Joalheiro" script="data/npc/scripts/Sell/ring_repair.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"> <look type="128" head="40" body="37" legs="116" feet="95" addons="0"> <parameters> <parameter key="message_greet" value="Just great, another ... 'customer'. Hello, |PLAYERNAME|. If you want to trade, let's get it over with."> <parameter key="message_farewell" value="That's music in my ears."> <parameter key="message_walkaway" value="Yeah, get lost."> <parameter key="message_onsendtrade" value="Yeah, buy something."> <parameter key="module_shop" value="1"> </parameters> </npc> Salve e feche. Agora vá na pasta ( Data / NPC / Scripts / Sell ) e crie um arquivo com o nome "ring_repair.lua" (pode copiar um arquivo existente e renomeá-lo). Após fazer isto, abra este arquivo (ring_repair.lua) e cole o código abaixo dentro. Obs: se tiver algo escrito do arquivo, apague-o e deixe somente o código abaixo. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if(msgcontains(msg, 'ring') or msgcontains(msg, 'experience')) then selfSay('Do you want to repair your experience ring for 50000 gold coins?', cid) talkState[talkUser] = 1 elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if(getPlayerItemCount(cid, 2122) >= 1) then if(doPlayerRemoveMoney(cid, 50000) == TRUE) then doPlayerRemoveItem(cid, 2122, 1) doPlayerAddItem(cid, 7697) selfSay('Here you are.', cid) else selfSay('Sorry, you don\'t have enough gold.', cid) end else selfSay('Sorry, you don\'t have the item.', cid) end talkState[talkUser] = 0 elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then talkState[talkUser] = 0 selfSay('Ok then.', cid) return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Salve e feche.1 ponto -
Global Server 10.10
Global Server 10.10
Samuel Cstr reagiu a alissonfgp por uma resposta no tópico
1 pontoEstou liberando o update de correção de bugs, tivemos muitos reportes de bugs, mas consegui trabalhar bem na reparação dos erros. Pesso desculpa pelo atraso neste update. Segue abaixo o que foi corrigido neste update: * Sem os novos sistemas de Browse Field, PVP(10.10) e Guild mark 10.10 * New Ab'Dendriel 98% * Houses De Ab'Dendriel Adicionadas * Protection Zones das novas areas * New Drefia 98% * Monsters 10.10, mas nao completos faltam loots e attacks (Postarei em breve no forum caso ninguem poste) * Npcs adicionado (mas estao com nome e outfit alterada tem que ajustar.) * Bug de Fibula removido * Bug dos 15kk Trolls Removido * Bug da ML removido * Bug Factory Quarter Yalahar new cave de War golems corrigido agora 100% acessivel * Adicionado Trainers Offline em Ab'Dendriel e Ankrahmun (as que faltavam) * Protection Zone em Quirefang * Concertado hits de alguns monstros das versoes 9.4 ~~ 9.6 * Bug Demon Oak, entrar mais que 1 player foi corrigido, Só entra 1 agora * Bug Warzones (agora pode refaze-las apos 20h) * Npc Avar Tar entregando Demon outfits and addons * Save configurado agora nao salva frequentemente * Buracos no mapa corrigido-- se encontrarem mais por favor reportem * Novas mounts adicionadas * NPCS Gamon(Thais), Nydala(Carlin) e Allen(Venore) vendendo a nova cama canopy bed kit adicionado * Database concertada (erro quando deslogava character resetava o player)-- precisa importa sql doc gatilho player dentro da pasta * Items.xml com corpses dos novos monstros * Items.xml Alguns items adicionados (Nail case, Tiles entre outros, Nao estao 100% peso, Descriçao e talz) * /newtype adicionado 10x (para quem quiser ver as novas looktype) * Porta da ilha Vegas trancada (Soft boots free ¬¬) * D'lair Kazz Adicionada * Lizard Chosen new respawn adicionado * Lancer Beetle new respawn adicionado Sources nao postarei ainda vou tentar adicionar os novos sistemas. Creditos: 8.6 Denner 8.6x+ Alissonfgp (EU) Outros (reportaram bugs, no mapa, scripts e talz) Distro: TFS Team 9.86 e Update 10.10 feito por min(Alissonfgp). Links: Datapack: http://www.4shared.com/rar/j-GBsosP/Global1010byAlissonfgpPT_2_.html Distro TFS 0.3: http://www.mediafire.com/?cbvkjxe1oggcr52 Source 0.3 Novo Sistema de Party adicionado: http://www.4shared.com/rar/lpVxPgKU/03_Source_1010_By_Alissonfgp.html Scans: SCAN DATAPACK: https://www.virustotal.com/pt-br/url/908394709feeffb6a947ded09b79db2b659ead4f655e75072bab33e77a222ff7/analysis/1381322018/ SCAN TFS 0.3: https://www.virustotal.com/pt-br/url/b30016d7ece4a831a9a4e02c002bc0255736f4356cd96b8cfdc4f13d04c8b4f7/analysis/1377522194/ Senha do God... Account: tibia Password: 234567 Update dia 13/10/2013 Link: http://www.4shared.com/rar/j-GBsosP/Global1010byAlissonfgpPT_2_.html Scan: https://www.virustotal.com/pt-br/url/908394709feeffb6a947ded09b79db2b659ead4f655e75072bab33e77a222ff7/analysis/1381322018/ Alguns Bugs Removidos... * Novo Sistema de Party Adicionado * Quest Drefia Adicionado * Portas de Drefia e Buracos, onde se usa Corda(rope) arrumado * Monsters 10.10 98% loots e atks (by Avronex) * Database Sqlite arrumado * Portas de Venore concertadas (as portas com a maçaneta brilhando e que nao querem abrir adicione actionid 100) * Libs sem utilizaçao removidas. * Mounts e Mount doll concertados... * Bug Container Removido * Bug 64 Bits para win64 removido (agr roda sem esse erros) * NPC e Escada em Thais, npc Xodet de Potions... Breve... Browse field e Novo Sistema de Guild e a Source. E removerei mais bugs... Algumas imagens: Novo Party System Drefia Ab'dendriel Norte Carlin Norte Ab'dendriel Hellgate1 ponto -
Shop Admin Gesior 2012 (TFS 0.3.6 ~ 0.4, 1.0)
[+] Shop Admin Gesior 2012 (TFS 0.3.6 ~ 0.4, 1.0) [+] [+] Nova versão 2015 [+] Olá pessoal! Quero apresentar a mais nova versão do meu script para administrar Web Shop do Gesior 2012. [+] O que tem de novo?: O script foi revisado; Comentado as principais partes; Escrito algumas funções e ações novas; Revisado anti-inject; Agora você pode adicionar pontos para quem fizer doação; De uma forma geral, foi revisado de cabo à rabo ! [+] Imagens: [+] Galeria de imagens online http://postimg.org/gallery/1ssnwbf1i/ [+] Instalação: Basta você ter o Gesior 2012 instalado junto aos scripts LUA de shop do mesmo; Ter o banco de dados instalado e um servidor TFS 0.3.6+, TFS 1.0, 1 rodando também. + Vá na pata {seu_web_server}\www ou htdocs\pages\ e renomeie o arquivo 'shopadmin.php' para 'shopadmin.php.old'; + Faça download do script novo e cole na pasta que citei à cima; + Faça download desse arquivo http://item-images.ots.me/items_images_1076.zip; + Copie e cole a pasta que vem dentro desse arquivo e cole na pasta {seu_web_server}\www ou htdocs\images\ ficando assim {seu_web_server}\www ou htdocs\images\items\ e dentro dessa pasta as imagens dos itens do tibia; + Pronto! [+] Download: http://www.mediafire.com/view/z62d9zxylpg36dz/shopadmin.php [+] Scan: https://www.virustotal.com/pt/file/c06a2f7e1c1909b34f4dee2a7c27930a6c7cad1882edfcdf101689b0b61899d9/analysis/1399682407/ [+] ATENÇÃO: Bug encontrado: Na realidade o shopadmin.php desenvolvido por mim, não contém bug's, ele faz o registro das ofertas corretamente, o que eu não consegui consertar foi o data/globalevents/scripts/others/shop.lua. Ele não consegue criar o container e adicionar os itens dentro desse container da oferta cadastrada, exemplo: se você criar uma BP de SD, dá o seguinte erro: Lua Script Error: [GlobalEvent Interface] data/globalevents/scripts/others/shop.lua:onThink LuaScriptInterface::luaPlayerAddItemEx(). Item not found stack traceback: [C]: in function 'addItemEx' data/lib/compat/compat.lua:363: in function 'doPlayerAddItemEx' data/globalevents/scripts/others/shop.lua:50: in function <data/globalev ents/scripts/others/shop.lua:7> Claro que estou correndo atrás de resolver esse problema, mas se por um acaso alguém tiver a solução, peço que por gentileza, poste aqui que darei os devidos créditos! [+] Como adicionar items? Para adicionar items ao shopping é muito fácil, basta você seguir igual eu postei nas fotos a configuração, respeitando o ID do item, Quantidade, o Tipo da oferta e etc, assim você enviará uma nova oferta para o seu site. Para adicionar uma oferta do tipo Container (Bp, Bag, etc) é fácil também, basta você preencher como na imagem à seguir: [+] Explicando: Coloque o 'Nome' da oferta. Insira uma 'Descrição' para essa oferta. Diga a quantidade de 'Premium points' necessários. Selecione o tipo da oferta: 'Item' ou 'Container'. Coloque o 'ID Item 1' à ser vendido, caso seja um item normal: armadura, espada, etc. Preencha a 'Qtde. Item 1' que o player irá receber quando comprar essa oferta. Deixe em branco 'ID Item 2' e 'Qtde. Item 2'. Caso seja BP, selecione o tipo para 'Container', no 'ID Item 1' coloque o Id da BP. Em 'Qtde. Item 1' você deve colocar a quantidade para cada item dentro do container, exemplo: se for BP de Runa, para preencher a BP você terá um total de 20 slots preenchidos pela quantidade de runas do 'Qtde. Item 2', então coloque 20, pois representa a quantidade de slots dentro do container. Agora em 'ID Item 2' você coloca o ID da Runa ou do item que você está vendendo dentro do container. Preencha a 'Qtde. Item 2' com a quantidade para cada slot do container que você está vendendo. Clique em salvar. Pronto, adicionado! [+] Isso é necessário: Lembrando que você precisa estar já com os scripts em lua funcionando corretamente do sistema de shop do Gesior 2012, você pode encontrá-los aqui: http://otland.net/threads/gesior2012-items-shop-installation-administration.170654/ Obrigado à todos!!!1 ponto
-
[8.54] Digimon Online v1.0
[8.54] Digimon Online v1.0
Trynclor reagiu a .HuRRiKaNe por uma resposta no tópico
1 pontoInformações: Sistema VIP Mapa próprio 3 cidades 1 evento automático 251 digimons 100% Corpos dos digimons 30% Capturar digimons 100% E mais! Imagens: Download server: http://www.4shared.com/rar/mCAKkkoIba/Digimon_Ot_CerberusVrs10_-_Xti.html Download client: http://www.4shared.com/rar/7AVT3I44/client_digicerb_vrs_10_xtibia.html Scan: Use o scan automático do 4Shared! Créditos TFS Team Cerberus1 ponto -
Como criar TalkAction de spellbook (!spells)
Como criar TalkAction de spellbook (!spells)
Fransuar N reagiu a lutavio2 por uma resposta no tópico
1 pontoe ae pessoal!! vou ensinar vcs a colocarem a uma TalkAction no seu ot 8.6 que serve para vcs verem o spellbook sem precisar te-lo apenas digitando !spells. 1º: primeiramente va na pasta do seu ot vá em data/talkactions e clique no arquivo xml chamado talkactions (vc pode abri-lo com bloco de notas ou com OTScript Live!) adicione a linha de comando em player se preferir <talkaction words="!spells" event="script" value="talkspellbook.lua"/> obs*: coloque como os outros! salve e feche 2º: depois vá em data/talkactions/scripts copie e cole um arquivo .lua (formato LUA) renomeie para talkspellbook abra-o apague tudo e cole: function onSay(cid, words, param, channel) local count = getPlayerInstantSpellCount(cid) local text = "" local t = {} for i = 0, count - 1 do local spell = getPlayerInstantSpellInfo(cid, i) if spell.level ~= 0 then if spell.manapercent > 0 then spell.mana = spell.manapercent .. "%" end table.insert(t, spell) end end table.sort(t, function(a, b) return a.level < b.level end) local prevLevel = -1 for i, spell in ipairs(t) do local line = "" if prevLevel ~= spell.level then if i ~= 1 then line = "\n" end line = line .. "Spells for Level " .. spell.level .. "\n" prevLevel = spell.level end text = text .. line .. " " .. spell.words .. " - " .. spell.name .. " : " .. spell.mana .. "\n" end doShowTextDialog(cid, words, text) return TRUE end SALVE E Feche agora abra seu ot e com qualquer player digite !spells que vai abri o spellbook! gente esse é meu primeiro post ake no tibia king espero que tenham gostado (clika em gostei pra me ajuda)1 ponto -
OTClient pararecido com PXG! [Download]
Primeiramente: Peço desculpas se errei o lugar porque pra min um Client de algum server e um ultilitario então peço desculpas se errei novamente o lugar. Segundamente: Aqui estou postando um Client parecido com o da PXG Logo digo não fui eu que fiz e ele e beta então pode a ver rejeição em alguns servers eu testei ele no servidor de poketibia do gabrielTxu 3.0 a 3.2 e as vezes a vara de pescar não funciona então quem quiser pegar como base para seu Client pode usar a vontade. Por isso que estou postando e uma base não um pronto para usar entendido então não me venha reclamar dizendo que enganei vocês. Aqui esta uma print: Aqui esta o Download do Client: CLICK AQUI SCAN: CLICK AQUI Me agradecer não cai o dedo Vlws. Um grande abraço e fiquem com Deus.1 ponto
-
{Baiak Rox} Evolution 01/06/2014
{Baiak Rox} Evolution 01/06/2014
killcaster reagiu a fabiodias por uma resposta no tópico
1 ponto.:: BAIAK ROX ::. Então estou aqui postando mais um Baiak editado e modificado pra galera !!!!!! ::: O Que ele possui? ::: -- Baiak City -- Vip 1 -- Vip 2 -- New Vip 3, Com Bixos e Caves Novas ::: Castle ::: ::: City Nova ::: ::: NPC ROX No templo Vendendo As Melhores Armas ::: ::: Potions Editadas Para Melhor PVP ::: ::: Efeitos Do Heal Editados ::: ::: Templo Editado Para War ::: ::: Para Comprar Vip 3 Basta Falar, !buyvip3 ::: ::: Armas Rox No npc Rox no templo custando 20kk ::: ::: O Que foi melhorado? ::: Foi melhorado a cidade baiak city Foi Melhorado as caves free Foi Melhorado as caves da cidade vip 3 Foi Melhorado as armas ROX Foi melhorado o templo proncipal .:: Bugs Corrigidos ::. - Bug do account manager (corrigido) - Bug do dinheiro (corrigido) - Bug do Npc rox (corrigido) - Bug vip 3 (corrigido) CONTA DO GOD: god/god Fotos Do servidor: Templo Principal Houses de frente para o templo Principal. Download: http://www.speedyshare.com/N3CWB/Baiak-Rox-8.60-Criado-Por-Vinicius.rar Virus Toral: https://www.virustotal.com/pt/file/7585306bccaa1293d37e20ff7bd01751fce7ea16ecaf4be7ebc4c578c7b08249/analysis/1401646620/ CREDITOS (Vinny Por disponibilisa o mapa) (Eu Por Ter editado e remover os bugs) (Baiak Yurots) (Tibiaking)1 ponto -
[8.6] EekBaiak Editado DeathRocks v1
[8.6] EekBaiak Editado DeathRocks v1
kennedydx reagiu a DeathRocks por uma resposta no tópico
1 pontoFale Ae Galera Do Tibia King, Venho Trazer meu Primeiro Baiak Eek Que Editei v1 ------------------------------------------------------------------------------------------------------- Este é o Meu Primeiro Poste O Que Contem no Servidor ? Distro Tfs 0.3.6 City totalmente reformulada 8.60 Nova city donate Removido 8 Vips; Adicionado 2 Vips, 1 free e outra Donate Items, set editados melhor War Items donate Novas areas hunts Novas quests Monstros novos Areas de eventos Cassino System 5 Novos eventos automaticos adicionados; CTF ( Capture de Flag ) *Automatico* Zombie Event *Automatico* Battle field *Automatico Blood Castle *Automatico Castle 24h Com Castelo e Hunts Exclusivas GFS ( Guild Frag System ) com !guildfrags rank Dodge Sytem Oque eu Mudei ? ou Adicionei Editado DeathRocks v1 !! Arrumei Alguns Bugs no Mapa Reformulei o Templo Deixando Baiak City Totalmente Ice Dodge System Adicionado Task System com !task e NPC Frags no Look e com !rank frags Castle 24Horas Agora com CASTELO EXCLUSIVO E Hunts Vocações Equilibradas Potions e Magias Arrumadas Area de Amostra Donate com NPC que vende Moedas Donate Master Vip Itens Arrumado Anti Nuker de "Account Manager" Maximo 10 Exclusivo Para Uma War Legal Servidor Totalmente em Sqlite Wand e Rods Atacam com 0 a 6 de Distancia Loteria System Arrumado E Muito Mais Confira ! Algumas Scheenshots ! TEMPLO. TELEPORTES. AMOSTRA DONATE COM NPC ! CASTLE 24 HORAS COM CASTELO EXCLUSIVO ENTRADA PARA CASTELO OU ATALHO E ENTRADA PARA DOMINAR O CASTELO AREA DONATE,AMOSTRA TELEPORTES 1 "Não Mudei" AREA DONATE,AMOSTRA TELEPORTES 2 "Não Mudei" NPC Ludger De Pegar As Task,Localizado Em Cima do Templo ACC DO ADM: eek/eek SCAN - https://www.virustotal.com/pt/file/161f9dbb5aa91dd814daf848a6785628f1f9ff14d2995997fb0be2c1793cfbd6/analysis/1400174692/ DOWNLOAD: - http://www.mediafire.com/download/9n809yfhwbrdatr/Editado+By+DeathRocks.rar Obs: Se Nao Conseguir Num,Tente no Outro =D CREDITOS : |- Juliosky (Criado) |- DeathRocks (Por Editar)1 ponto -
Mapa do Radbr
Mapa do Radbr
Eric Gg reagiu a vinicius tatim por uma resposta no tópico
1 pontoQuests King Helmet King Legs King Armor King Shield King Boots Demon Armor Demon Helmet Botas Magicas Blessed Shield Inquistion Remix Hyper Armor Hyper Legs Hyper Helmet Hiper Boots Hyper Armas Exp <stage minlevel="1" maxlevel="550" multiplier="30000"/> <stage minlevel="551" maxlevel="1000" multiplier="20000"/> <stage minlevel="1001" maxlevel="1400" multiplier="15000"/> <stage minlevel="1401" maxlevel="1500" multiplier="30"/> <stage minlevel="1501" multiplier="1"/> Ranks Sistemas de; Rank Vida Rank Mana Rank Level Rank Reset DOWNLOAD http://www.4shared.com/rar/lXVUgyml/ssss.html? SCREENSHOTS CRÉDITOS Marcelo Machado De Olivera Cristiano FLorao Dos Santos Vinicius Amarante Tatim EU Valeu galerinha, clica em Gostei para novos posts e até mais!1 ponto -
Ibot Crack 10.37 (Download)
1 pontoIbot 10.37 Versão 2.3.5 Efetue o download do iBot 2.3.3 Aqui: DOWNLOAD Scan (AQUI) Extraia Na Area De Trabalho Faça Cadastro no fórum PoisonX.us Abra o iBot.exe [COMO ADMINISTRADOR <-] Depois entre com seu Login e Senha cadastrada no fórum PoisonX.us Agora Espere O IBOT Abrir Creditos : PoisonX E Eu Por Postar Aqui -q LOG : Postado Dia 12/03/2014 - 23:03 Scan Adicionado Dia 14/03/2014 - 14:29 Links Corrigidos Dia 14/03/2014 - 14:30 Link Do Topico Original (Inglês) Adicionado (Aqui) 14/03/2014 - 14:33 Duvida ? Deixe Nos Comentarios Se Ajudei De Um Up Não Custa Nada Topico Original (Inglês) (Aqui)1 ponto
-
Erro site
Erro site
Amanditaah reagiu a ViitinG por uma resposta no tópico
1 pontoAmanda é proibido pedir suporte fora do fórum.Use o próprio fórum para pedir ajuda,como você é um membro novo no fórum vo pedir para que remova o skype do tópico por gentileza. Leia as regras do fórum : http://www.tibiaking.com/forum/forum/23-regras-do-forum/1 ponto -
(Resolvido)Ajuda Rep+ Como Deixar Todas As Vocações Com 100 De Mana?
Amigo usa essa script... cria uma tag com função login e registre o evento em login.lua os players sempre terão 100 de mana manamax.lua login.lua creaturescript.xml Facilitei já deixei a tag e o registro do evento.1 ponto
-
Mapa para FireStorm Event
Mapa para FireStorm Event
ViitinG reagiu a luanluciano93 por uma resposta no tópico
1 pontoReputado seu fofo!1 ponto -
(Resolvido)Ajuda Rep+ Como Deixar Todas As Vocações Com 100 De Mana?
Vê la o tutorial, a parte 1.1 lá tem detalhadamente onde colocar. @edit Se ñ conseguir me manda seu arquivo forgottenserver.s3db pra eu baixar que eu ponho aqui.1 ponto
-
[Pagseguro Automático] 100% e com Double Points OPCIONAL
[Pagseguro Automático] 100% e com Double Points OPCIONAL
lucasmuniz67 reagiu a luanluciano93 por uma resposta no tópico
1 pontoAté onde eu sei ele usa a porta do apache ... Nesse campo você escolhe a quantidade de pontos: <input name="item_quant_1" type="text" value="10" size="5" maxlength="5"> Verificando os campos .. $NumItens = $_POST['ProdValor_1']; $ProdQuantidade_x = $POST['ProdQuantidade_1']; No scripts esta usando o ProdValor_1, mas acho que o valor que recebe o item quantidade é o ProdQuantidade_1 .. mas não testei, não sei ... Agora seguindo a linha do script para não ter promoções basta retirar isso: if ($NumItens >= 5) { $pontosadd = $NumItens * 2; } else { $pontosadd = $NumItens; } E mudar aqui: mysql_query("UPDATE accounts SET premium_points = premium_points + '$pontosadd' WHERE name = '".htmlspecialchars($accname)."'"); Por isso: mysql_query("UPDATE accounts SET premium_points = premium_points + '$NumItens' WHERE name = '".htmlspecialchars($accname)."'"); Teste ai!1 ponto -
(Resolvido)Nao consigo logar
(Resolvido)Nao consigo logar
VitorTibia14 reagiu a Danihcv por uma resposta no tópico
1 pontoSim, o problema é o pc que ñ ta aguentando.1 ponto -
(Resolvido)Nao consigo logar
(Resolvido)Nao consigo logar
VitorTibia14 reagiu a Absolute por uma resposta no tópico
1 pontoFalta de memória RAM/USO DO CPU, no entando o mesmo atinge 100% e crasha o servidor, aconselho manter o theforgottenserver desligado para edição!1 ponto -
(Resolvido)Nao consigo logar
(Resolvido)Nao consigo logar
VitorTibia14 reagiu a Danihcv por uma resposta no tópico
1 pontoComeçou dps q vc editou o mapa?? O computador tem a devida memória e capacidade para suportar o server??1 ponto -
queria uma pessoal que saiba mecher com ot global
Ryzor informou-lhe no outro tópico (fechado por flood) para aumentar os 8GBs de memória pos X players online, então aqui a resposta simples: Negativo Ryzor, mapa global não usa mais que 6GB de ram, no entanto se o mapa rodou perfeitamente o que vai controlar os jogadores é o processador, nele ficaram digamos que "armazenados" os jogadores online fazendo o uso em porcentagem do theforgottenserver, dando um htop (linux) você poderá ver como está o USO do processador no tfs, ficando até 60% está nos padrões e razoável.1 ponto
-
(Resolvido)[Spells] Juntar script sem bugar ajuda
(Resolvido)[Spells] Juntar script sem bugar ajuda
poko360 reagiu a xWhiteWolf por uma resposta no tópico
1 pontoo dano tá aqui: doTargetCombatHealth(cid, target, config.damage, -getPlayerLevel(cid), -getPlayerLevel(cid), config.effect) ta dando damage do cid (quem usa a magia) no target (pessoa que tá sendo atacada), o tipo de dano é o config.damage damage = COMBAT_PHYSICALDAMAGE ou seja, dano físico. e o dano minimo e máximo é - o level do player. O efeito que vai sair é o config.effect, Se vc quiser mudar o dano é só fazer doTargetCombatHealth(cid, target, config.damage, -DANO MINIMO, -DANO MÁXIMO, config.effect) lembrando sempre de colocar o - se não ele vai recuperar vida. Se vc quiser que seja 1,5x o level do player só fazer local min = math.ceil(getPlayerLevel(cid) * 1.5) doTargetCombatHealth(cid, target, config.damage, -min, -min, config.effect) ps: se vc quiser fazer em área é só mudar a função doTargetCombatHealth pra doAreaCombatHealth(cid, type, pos, area, min, max, effect) na area vc faz igual um script normal area = {0,0,0,1,0,0,0, 0,0,0,3,0,0,0, 0,0,0,1,0,0,0} e o resto tá no script acima1 ponto -
(Resolvido)ajuda erro [Warning - Houses::loadFromXml] House entry not set for: Unnamed House
1 pontoKKKK é pra postar o arquivo Seumapa-house.xml e não o nome amigo1 ponto
-
[HELP] Action
1 pontoTeste assim amigo E da prox vez mais respeito com os membros e moderação do forum... Se vc entra no forum está sujeito as regras dele... E não definir a seu critério as suas próprias regras... Se eu ver isso novamente... Vou procurar não te ajudar mais. Att:lucas1 ponto
-
(Resolvido){Ajuda} Script Montaria
(Resolvido){Ajuda} Script Montaria
NathanAmaro reagiu a llucas75 por uma resposta no tópico
1 pontoCara então é muito mais facil vc passar todos seus scripts pro 8.7 do que fazer essa painel -_-1 ponto -
(Resolvido)Pedido - Sistema de Broadcast para players (pago)
(Resolvido)Pedido - Sistema de Broadcast para players (pago)
Zyros reagiu a xWhiteWolf por uma resposta no tópico
1 ponto<talkaction log="yes" words="/anuncio" event="script" value="broadcast.lua"/> local config = { storage = 19400, -- storage em que será salvo o tempo cor = "green", -- de acordo com o constant.lua da lib tempo = 2, -- em minutos price = 200000, -- quantidade de dinheiro que irá custar level = 100 -- level pra poder utilizar o broadcast } function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getPlayerLevel(cid) >= config.level then if getPlayerStorageValue(cid, config.storage) - os.time() <= 0 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo*60)) doBroadcastMessage(""..getCreatureName(cid).." [ANUNCIO]: "..param.."", config.cor) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You have successfully sent a broadcast, now you'll have to wait " ..config.tempo.. " minute(s) until you broadcast again.") else doPlayerSendCancel(cid, "You don't have " ..config.price.. " gp's for broadcasting.") return true end else doPlayerSendCancel(cid, "You have to wait " ..(getPlayerStorageValue(cid, config.storage) - os.time()).. " seconds until you can broadcast again.") return true end else doPlayerSendCancel(cid, "You have to be level " ..config.level.. " or more in order to use broadcast.") end end ps: editei com doRemoveMoney1 ponto -
(Resolvido)Pedido - Sistema de Broadcast para players (pago)
(Resolvido)Pedido - Sistema de Broadcast para players (pago)
Wolf Admin reagiu a xWhiteWolf por uma resposta no tópico
1 pontovc tem que ser mais específico cara, 200 thousand dollar notes é contado como money? qual o ID dela? Que versão é seu server? o [ANUNCIO] fica antes ou depois do nome do player?1 ponto -
(Resolvido)Rep+ o3o (Alguem me passa um servidor 8.6).
Solide, confira este que postei, bem básico, estável para uma base http://www.tibiaking.com/forum/topic/34448-86-global-teleports-absolute-edited-perfect/#entry1943151 ponto
-
(Resolvido)Rep+ o3o (Alguem me passa um servidor 8.6).
http://www.tibiaking.com/forum/topic/10756-perfect-server-global-compacto/ eu sempre gostei de mexer com este servidor por ser estável e bem leve.1 ponto
-
(Resolvido){Ajuda} Script Montaria
(Resolvido){Ajuda} Script Montaria
NathanAmaro reagiu a llucas75 por uma resposta no tópico
1 pontoSegue essa base para todas montarias...(daria um trabalho imenso como eu havia dito e não prevendo a possibilidade de addons(caso alguém saiba me diga como) , Uma boa saída é fazer um sprite genérica como assim? Quando um homem da use no item vem a sprite do homem em cima do bixo e quando a mulher da use aparece a sprite da mulher... Eu fiz contando até o outfit7 para colocar mais só siga a lógica do script montaria1.lua1 ponto -
(Resolvido)[NPC] Premiun
1 pontoem npcs crie um arquivo com o nome premium account.xml e adicione isso dentro: <?xml version="1.0"?> <npc name="Premium Account" script="data/npc/scripts/premiumaccount.lua" walkinterval="2500" floorchange="0"> <health now="100" max="100"/> <look type="148" head="0" body="112" legs="93" feet="95" addons="3"/> <parameters> <parameter key="message_greet" value="Ola {|PLAYERNAME|}, voce deseja comprar premium account?" /> </parameters> </npc> Em npcs/scripts crie um arquivo com o nome premiumaccount.lua e adicione isso dentro: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local days = 30 -- dias de premium local money = 10000 -- 10k if msgcontains(msg, 'yes') then if getPlayerMoney(cid) >= money then doPlayerAddPremiumDays(cid, days) doPlayerRemoveMoney(cid, money) selfSay('Parabens '..getPlayerName(cid)..', voce adquiriu 30 dias de Premium Account!', cid) doSendMagicEffect(getPlayerPosition(cid), 28) else selfSay(''..getPlayerName(cid)..', voce nao tem dinheiro suficiente.', cid) doSendMagicEffect(getPlayerPosition(cid), 2) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())1 ponto
-
[PEDIDO] Script fácil, porém não achei
Só mudar o 6030 que no caso é o UID do lugar deverá ser clicado o item: function onUse(cid, item, fromPosition, itemEx, toPosition) local config = { -- {{posição que o player tem que estar}, {posição que o player sera levado}} {{x = ?, y = ?, z = ?, stackpos = 253}, {x = ?, y = ?, z = ?, stackpos = 253}}, -- 1 {{x = ?, y = ?, z = ?, stackpos = 253}, {x = ?, y = ?, z = ?, stackpos = 253}}, -- 2 {{x = ?, y = ?, z = ?, stackpos = 253}, {x = ?, y = ?, z = ?, stackpos = 253}}, -- 3 {{x = ?, y = ?, z = ?, stackpos = 253}, {x = ?, y = ?, z = ?, stackpos = 253}}, -- 4 {{x = ?, y = ?, z = ?, stackpos = 253}, {x = ?, y = ?, z = ?, stackpos = 253}}, -- 5 } if itemEx.uid == 6030 then local check = 0 for _, mob in ipairs(config) do if isPlayer(getThingfromPos(mob[1]).uid) then check = check + 1 end end local quant = 0 for i = 1, #config do quant = quant + 1 end if check == quant then for _, mob in ipairs(config) do doTeleportThing(getThingfromPos(mob[1]).uid, mob[2]) end doRemoveItem(item.uid, 1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Your "..getItemNameById(item.itemid).." as broken.") else doPlayerSendCancel(cid, "Don't have players enough.") end end return true end1 ponto
-
(Resolvido)[Spells] Juntar script sem bugar ajuda
local config = { hits = 3, -- quantos hits vai dar effect = 41, -- efeito distance_effect = 28, -- efeito de distance delay = 350, -- tempo entre os hits damage = COMBAT_PHYSICALDAMAGE -- tipo de combat } local combat = createCombatObject() local function doHitCreature(target, cid, times) if isCreature(cid) and isCreature(target) and times ~= 0 then doTargetCombatHealth(cid, target, config.damage, -getPlayerLevel(cid), -getPlayerLevel(cid), config.effect) doSendDistanceShoot(getThingPos(cid), getThingPos(target), config.distance_effect) addEvent(doHitCreature, config.delay, target, cid, times-1) end return true end function onTargetCreature(cid, target) return addEvent(doHitCreature, 1, target, cid, config.hits) end setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") function onCastSpell(cid, var) return doCombat(cid, combat,var) end1 ponto
-
SISTEMA ANTI-DDOS
SISTEMA ANTI-DDOS
luanluciano93 reagiu a Absolute por uma resposta no tópico
1 pontoLuan, hoje em dia está muito fácil spamar ataques DDoS, qualquer pessoa com 20 R$ na mão compra uma simples máquina, ve um tutorial de compilação com programas flooders como g3m, t50, juno, c4 entre demais ataques, no entanto você pode ver que enormes jogos são vítimas deste maldito DDoS, dentre eles, League Of Legends, Tibia Cipsoft, Pangya, frequentemente esses jogos vem tendo problemas com ddos e infelizmente hoje em dia está difícil suprir esse problema, mas temos que nos preparar e aprender com os tombos, é sempre bom ter modificações que pertubam, que dificultam o ser de má fé ("ATACADOR") pegar o IP real da sua máquina, isto seria alguns proxys escondendo o seu próprio IP real. Porém hoje em dia a maior datacenter para servidores de jogos, no caso otserver é a OVH, e a empresa terceirizada e na minha opnião uma das melhores no ramo a Servercore trabalha com eles. Espero ter ajudado um pouco.1 ponto -
Duvida
Duvida
Gerberlutz reagiu a Absolute por uma resposta no tópico
1 pontoPreciso ver o script da quest, tem quest que ganha storage para passar de X lugar para X lugar, então no caso, remove a função do storage ou retira o script do xml caso não afete em mais anda, por isso que falei que preciso ver o script...1 ponto -
Duvida
Duvida
Gerberlutz reagiu a Absolute por uma resposta no tópico
1 pontoFala Gerberlutz, você terá de pegar o script da quest e tirar a storage, caso seja em action/unique tirar do map.1 ponto -
(Resolvido)Bug Remeres poketibia
1 pontoSimples Fredson, pega o items.otb do ot que você está tentando editar (na apsta items) e coloca na pasta do rme data/pastadaversão, reabre e sucesso!1 ponto
-
Source 10.37 - Cast System - Exclusiva !
Era dele, ai depois ficou 99%, ai depois 80%, jajá é 50%, jajá é 30%, jajá é 10%, jajá o primo dele que fez, jajá o amigo que passou pro primo que o vizinho ajudou a codar. Matheus falou e disse, afinal pode ser de quem for, ele adaptou o sistema do Summ nas sources do Mark e disponibilizou no TK, o único que tem direito a pedir remoção do mesmo é Summ ou Mark, não TCHUERLZ AUEHAUEHAUEHAUEHA wtf de programdor is it. @Topic, Parabéns pelo esforço da source ajudando os membros do TK, a intenção é sempre o que importa.1 ponto
-
[Pedido] Spells de healar mana
1 ponto
-
The Forgotenserver
The Forgotenserver
VitorTibia14 reagiu a luanluciano93 por uma resposta no tópico
1 pontoJá tem um executável aberto, e você esta tentando abrir outro, sendo que o segundo esta com o mesmo World_ID do primeiro, então dá esse erro!1 ponto -
[pedido] Script balanceamento de Teams em WAR/Hardcore
Moveevents1 ponto
-
(Ajuda) Como coloca corpse para os mortos!
(Ajuda) Como coloca corpse para os mortos!
Mas Ou Menos Stoker reagiu a Bryan Robert por uma resposta no tópico
1 pontoFiz a Script Se usar de um Rep vlw Custa nadinha e para mim é como se fosse um agradecimento! Vá a Pasta do seu server data e Creaturescripts resumindo: %SERVER%/data/creaturescripts/scripts/ Crie um arquivo chamado niwdeath.lua e dentro poe assim: na parte vermelha entre [ ] poe a vocação ... na parte azul você poe o ID do corpo ... (Lembre a ultima não contem virgula se for adicionar mais a ultima fica sem e as demais com virgula) Depois disso vá em login.lua em Creaturescripts > Scripts registra o evento: registerCreatureEvent(cid, "Niwdeath") e por ultimo mas não o menos importante é na pasta Creaturescripts tem creaturescripts.xml nele adicione: <event type="death" name="Niwdeath" event="script" value="niwdeath.lua"/> Teste e pronto De um REP não custa nada \/1 ponto -
Você Jogaria num ot com essas propostas?
Versão que eu gosto é 9.6+ e 10x, devido aos gráficos agradáveis e as montarias. Na questão mapa, melhor, para mim, é mapa próprio, porquê no global pelo que vi tem várias hunts horríveis(não são todas) que só foram criadas para emendar novos jogadores. Na questão mapa próprio os mappers capricham para trazer jogadores(não são todos) por isso da prazer em jogar. em relação aos bot, sou completamente contra, pois facilita demais o jogo e acaba perdendo a graça, sempre opino em jogar ots com sistema anti-bot. exp: baixa é perfeito. só quando é de reset, que eu jogo com 50x acima disso eu paro.1 ponto
-
[Pedido] Mudar barra de Hp e Mana do OTClient
Jovem, comentei em outro tópico seu referente ao assunto. Mas posso ajuda-lo a fazer algo parecido, barras arredondadas e a barra de mana menor que a de life. Basta alterar duas coisas. 1 - Coloque essa imagem (progressbar) no lugar da progressbar do Otclient. 2 - No arquivo healthInfo.otui. Procure por esse código e acrescente a ultima linha. ManaBar < ProgressBar id: manaBar background-color: #E3BC05 anchors.top: prev.bottom anchors.left: parent.left anchors.right: parent.right margin: 1 margin-top: 3 margin-right: 8 <EDIT> A cor da minha barra está diferente da sua.1 ponto
-
ShopGuild Points 100% add em player offline. Atualizado
ShopGuild Points 100% add em player offline. Atualizado
Cellu reagiu a Natanael Beckman por uma resposta no tópico
1 pontoObrigado! Sempre que poder estarei contribuindo.1 ponto -
[10.91] Remere's Map Editor
[10.91] Remere's Map Editor
Apache reagiu a Bruno Carvalho por uma resposta no tópico
1 pontoWTF? Cara, isso é um mapa editor e não um mapa... LoL1 ponto