Ir para conteúdo

GamerGoiano

Membro
  • Registro em

  • Última visita

Tudo que GamerGoiano postou

  1. Esse servidor usa varios recursos aleatórios aqui do forum, módulo healthbar do gengo e varios outros Só editou o visual do servidor Não recomendo usar como base pois pode ter comandos de dar GOD/GM e Items na source Mas parabéns pelo trabalho!
  2. Dica: Linux mais Barato Servidor no EUA é mais barato que no BR, e os players não ficam tão lagados
  3. @gprada A maioria das provesoras de hoje em dia, não possuem portas liberadas, tem que ligar no provedor Só configurando o roteador não resolve
  4. Edita o console.lua Função de: desativar/ativar o chat com o CTRL F em um botão: function hotkeyToggleChat() consoleToggleChat:setChecked(not consoleToggleChat:isChecked()) if consoleToggleChat:isChecked() then disableChat() else enableChat() end end Ai no começo na onde ta os outros atalhos, coloca esse: g_keyboard.bindKeyPress('CTRL+F', hotkeyToggleChat)
  5. Estou afim de fazer um poketibia do 0 (sem pegar nada de PDA / DXP) Tenho conhecimento mediano em C++, C#, Lua e PHP Não sei qual versão vou fazer ainda, será discutido com a equipe Em pauta: TFS 1.4 10.98 / 1.5 8.60 No momento preciso de alguém que me ajude com adição de itens de poketibia no tibia cru para fazer e ficar testando os sistemas. Envie os seguintes dados: Nome: Idade: Contato (Discord ou Whatsapp): Experiência: (Fale sobre algum conhecimento que voce tem)
  6. Opção 1: local function getPlayerData(guid) if not expPotions.playerData[guid] then expPotions.playerData[guid] = {} for itemId in pairs(potions) do expPotions.playerData[guid][itemId] = {rate = 0, duration = 0} end end return expPotions.playerData[guid] end function expPotions:onUse(cid, item, fromPosition, itemEx, toPosition) local itemId = item.itemid local potion = potions[itemId] if not potion then return false end if getPlayerLevel(cid) < potion.needLevel then doPlayerSendCancel(cid, ('Você precisa ser level %d+ para usar esta potion.'):format(potion.needLevel)) return true end local guid = getPlayerGUID(cid) local playerData = getPlayerData(guid) local expData = playerData[itemId] local now = os.time() if expData.duration > now then doCreatureSay(cid, 'Aguarde o bônus atual acabar para usar novamente.', TALKTYPE_ORANGE_1, false, cid) return true end expData.rate = expData.rate + potion.rate expData.duration = potion.duration + now doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ('Agora você tem +%d%% de experiência por %s.'):format( potion.rate * 100, string.diff(potion.duration, true) )) doRemoveItem(item.uid, 1) return true end function expPotions:onLogin(cid) local guid = getPlayerGUID(cid) getPlayerData(guid) return true end Opção 2: local function getPlayerData(guid) if not expPotions.playerData[guid] then expPotions.playerData[guid] = {} for itemId in pairs(potions) do expPotions.playerData[guid][itemId] = {rate = 0, duration = 0} end end return expPotions.playerData[guid] end function expPotions:onUse(cid, item, fromPosition, itemEx, toPosition) local itemId = item.itemid local potion = potions[itemId] if not potion then return false end if getPlayerLevel(cid) < potion.needLevel then doPlayerSendCancel(cid, ('Você precisa ser level %d+ para usar esta potion.'):format(potion.needLevel)) return true end local guid = getPlayerGUID(cid) local playerData = getPlayerData(guid) local expData = playerData[itemId] local now = os.time() if expData.duration > now then doCreatureSay(cid, 'Aguarde o bônus atual acabar para usar novamente.', TALKTYPE_ORANGE_1, false, cid) return true end expData.rate = expData.rate + potion.rate expData.duration = potion.duration + now doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ('Agora você tem +%d%% de experiência por %s.'):format( potion.rate * 100, string.diff(potion.duration, true) )) doRemoveItem(item.uid, 1) -- Salvar as informações na storage Game.setStorageValue(cid, 'expPotion_' .. itemId .. '_rate', expData.rate) Game.setStorageValue(cid, 'expPotion_' .. itemId .. '_duration', expData.duration) return true end function expPotions:onLogin(cid) local guid = getPlayerGUID(cid) local playerData = getPlayerData(guid) -- Restaurar as informações da storage for itemId in pairs(potions) do local rate = Game.getStorageValue(cid, 'expPotion_' .. itemId .. '_rate') local duration = Game.getStorageValue(cid, 'expPotion_' .. itemId .. '_duration') if rate ~= nil and duration ~= nil then playerData[itemId].rate = rate playerData[itemId].duration = duration end end return true end function expPotions:onDeath(cid, corpse, killer) -- Limpar as informações das poções ativas ao morrer local guid = getPlayerGUID(cid) local playerData = getPlayerData(guid) for itemId in pairs(potions) do playerData[itemId].rate = 0 playerData[itemId].duration = 0 Game.setStorageValue(cid, 'expPotion_' .. itemId .. '_rate', nil) Game.setStorageValue(cid, 'expPotion_' .. itemId .. '_duration', nil) end return true end function expPotions:onSay(cid, words, param) local str = 'Experience Potion Combos:\n' local playerData = self.playerData[getPlayerGUID(cid)] if playerData then for itemId, expData in pairs(playerData) do str = str .. ('\n%s - %d%%'):format(getItemInfo(itemId).name, expData.rate * 100) end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str) return true end function expPotions:getCombo(cid) local playerData = self.playerData[getPlayerGUID(cid)] local potionsCombo = 1 if playerData then for itemId, expData in pairs(playerData) do potionsCombo = potionsCombo + expData.rate end end return potionsCombo end function expPotions:onLook(cid, thing, position, lookDistance) if not isPlayer(thing) then return false end local combo = self:getCombo(thing) if combo > 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ('Combo de Experiência: +%d%%'):format((combo - 1) * 100)) end return false end function expPotions:onLogin(cid) local guid = getPlayerGUID(cid) self.playerData[guid] = {} for itemId in pairs(potions) do self.playerData[guid][itemId] = {rate = 0, duration = 0} end return true end function expPotions:onLogout(cid) local guid = getPlayerGUID(cid) self.playerData[guid] = nil return true end function expPotions:onDeath(cid, corpse, killer) local guid = getPlayerGUID(cid) self.playerData[guid] = nil return true end
  7. De qual TFS pra qual TFS?
  8. actions.xml <action uniqueid="12001" event="script" value="outfits.lua"/> -- Hunter outfits.lua function onUse(cid, item, frompos, item2, topos) if item.uid == 12001 then if getPlayerStorageValue(cid, 12010) == -1 then doPlayerSendTextMessage(cid, 21, "You now have the Hunter Outfit!") doPlayerAddOutfitId(cid, 2, 3) setPlayerStorageValue(cid, 12010, 1) doSendMagicEffect(getCreaturePosition(cid), math.random(1, 67)) else doPlayerSendTextMessage(cid, 25, "You Already have the Hunter Outfit.") end end end
  9. E ta registrado no xml ?
  10. Ve se ta funcionando esse código abaixo: function onRemoveItem(creature, item, tile, fromPosition, toPosition) local itemid = item.itemid if itemid >= 1 and itemid <= 30000 then Game.sendAnimatedText(creature:getPosition(), getItemName(itemid), TEXTCOLOR_ORANGE) end end
  11. TEsta ai @Felippe Reine014 local condition = Condition(CONDITION_OUTFIT) condition:setOutfit({lookType=138}) condition:setTicks(-1) function onStepIn(creature, item, position, fromPosition) if not creature:isPlayer() then return false end local prevOutfit = creature:getOutfit() creature:addCondition(condition) local newOutfit = {lookType=138, addons=prevOutfit.addons} creature:setOutfit(newOutfit) return true end function onStepOut(creature, item, position, fromPosition) if not creature:isPlayer() then return false end creature:removeCondition(CONDITION_OUTFIT) local prevOutfit = creature:getOutfit() prevOutfit.lookType=prevOutfit.lookType creature:setOutfit(prevOutfit) return true end
  12. Voce tentou colocar cooldown nas pokebolas, pra evitar esse erro? acho que com o código que te passei ja resolve, pois só vai conseguir usar a pokebola denovo em 3 segundos local cooldown = 3 -- tempo em segundos de exaustão local exhaust = exhaustion.get(cid, 6666) or 0 -- obtém a exaustão atual do jogador if exhaust + cooldown > os.time() then -- se o jogador ainda estiver exausto doPlayerSendCancel(cid, "You must wait "..cooldown.." seconds before using this item again.") -- exibe a mensagem de espera return true -- interrompe a execução da função end exhaustion.set(cid, 6666, os.time() + cooldown) -- define a nova exaustão do jogador
  13. Me manda seu some functions.lua @S H I O N Sabe me dizer o que acontece, o que voce tenta fazer que da o erro luagetcreaturehealth creature not found ?
  14. @Muvuka posta aqui o código do script do seu npc se voce modificou e do arquivo .lua que ta ocasionando esse erro
  15. Mande o seu código completo para eu ver como ficou
  16. Recomende usar VSCODE ou Notepad++ para editar códigos assim, voce comeu alguma letra ali no código @yuriowns
  17. O Tutorial foi feito por mim, qualquer dúvida pode postar nos comentários. 1. Instale o Xampp atual e instale https://www.apachefriends.org/pt_br/index.html 2. Va em C:\xampp e abra o xampp-control.exe 3. Inicie o Apache e o MySQL 4. Baixe o Znote AAC (É o mais fácil de usar) https://github.com/Znote/ZnoteAAC 5. Va até C:\xampp\htdocs e apague tudo que está la dentro 6. Extraia o site Znote AAC que voce baixou, copia todo o conteúdo e cola dentro da pasta htdocs. Ficando assim: 7. Acesse http://127.0.0.1/phpmyadmin e clique em Novo 8. Escreva o nome do banco de dados, eu escolhi Tibia e no lado direito escolha Agrupamento (Collation) e clique em Criar. 9. Clique no banco de dados que voce criou no menu esquerdo (Tibia) e clique em Importar . 10. Clique em escolher arquivo e selecione o arquivo de banco de dados no seu computador 11. Escolha o arquivo schema.sql que está na pasta tfs 1.2 do servidor do link e clique em Executar (ta no final da página o botão) https://www.xtibia.com/forum/topic/250614-tfs-12-1098-sources-otclient-com-tela-maior/ 12. Acesse http://127.0.0.1/ e copie tudo do quadrado Basta clicar no quadrado e dar CTRL A e CTRL C 13. Volte no phpmyadmin, clique no banco de dados que criamos (Tibia) e clique no botão SQL 14. Cole o conteúdo que voce copiou e clique em executar e espere carregar 15. Va em C:\xampp\htdocs e abra o arquivo config.php "Recomendo abrir com o notepad ++ pra ficar mais didático para principiantes" 16. Faça essas mudanças: Troque a linha 21 e 22 pro titulo e descrição do site. Linha 23 $config['site_url'] = "http://demo.znote.eu"; Troque http://demo.znote.eu por http://127.0.0.1 Linha 26 $config['server_path'] = ''; Coloque dentro de aspas o diretório do seu servidor, por exemplo: 'C:\Users\Braz\Desktop\tfs 1.2 + otclient\tfs 1.2 Linhas 33 $config['sqlUser'] = 'tfs13'; Troca tfs13 por root Linha 36 $config['sqlPassword'] = 'tfs13'; Apague tfs13 Linha 39 $config['sqlDatabase'] = 'tfs13'; Troque tfs13 por Tibia (É o banco de dados que criamos) 17. O site ja está funcionando, agora va na pasta do servidor e abra o config.lua e deixe igual está embaixo e salve. 18. Pronto! Agora seu site vai usar o banco de dados para criar contas e seu servidor está preparado para reconhecer as contas e personagens criados.
  18. Esses servidores de dragon ball não tem nenhuma modificação na source, basta voce pegar qualquer servidor 8.60 (ja tem o .exe pra abrir o server ai nem precisa compilar) E ai voce só vai precisar converter o Tibia.SPR (gráfico do jogo) pra 8.60 com o object builder Única modificação que pode ter na source é de attackspeed mas da pra refazer mais atualizado Pega esse TFS 04 860 e as dlls, pega o executavel .exe e coloca na pasta do servidor do Dragon Ball Ai voce ja aproveita o Otclient
  19. Esses servidores de dragon ball não tem nenhuma modificação na source, basta voce pegar qualquer TFS 0.4 8.60 ou TFS 1.0 8.60 (ja tem o .exe pra abrir o server ai nem precisa compilar) E ai voce só vai precisar converter o Tibia.SPR (gráfico do jogo) pra 8.60 com o object builder Única modificação que pode ter na source é de attackspeed mas da pra refazer mais atualizado
  20. Baixa algum projeto atualizado, voce quer abrir servidor de que?
  21. Vocês precisam se registrar em algum banco tipo MercadoPago, Picpay, etc para ter acesso ao API/TOKENS Esse aqui é um exemplo do Banco Central Tem que trocar: sua_chave_pix e sua_autorizacao <?php // Dados da transação $valor = 10.00; // valor da transação $chavePix = "sua_chave_pix"; // chave Pix do recebedor $descricao = "Pagamento de teste"; // descrição da transação // Monta o payload da transação $payload = [ "valor" => [ "original" => (string) $valor ], "chave" => $chavePix, "solicitacaoPagador" => $descricao ]; // Codifica o payload em JSON $payload = json_encode($payload); // Faz a requisição para a API do Banco Central $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => "https://api-pix.gerencianet.com.br/v2/cob", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $payload, CURLOPT_HTTPHEADER => [ "Content-Type: application/json", "Authorization: Bearer sua_autorizacao" ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "Erro na requisição: " . $err; } else { $resposta = json_decode($response, true); // Se a requisição foi bem sucedida, exibe o QR Code para o usuário if ($resposta["status"] == "ATIVA") { echo '<img src="' . $resposta["qrcode"]["imagemQrcode"] . '">'; } else { echo "Erro na criação da cobrança: " . $resposta["mensagem"]; } } Além disso, para conseguir o token, tem que se registrar no portal do desenvolvedor para conseguir ClientID e ClientSecret Como conseguir a autorização: <?php // Dados da sua aplicação $clientID = "seu_client_id"; $clientSecret = "seu_client_secret"; // Monta o payload para a obtenção do token $payload = [ "grant_type" => "client_credentials" ]; // Codifica o payload em JSON $payload = json_encode($payload); // Faz a requisição para a API do Banco Central $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => "https://oauth.hm.bb.com.br/oauth/token", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $payload, CURLOPT_HTTPHEADER => [ "Content-Type: application/json", "Authorization: Basic " . base64_encode($clientID . ":" . $clientSecret) ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "Erro na requisição: " . $err; } else { $resposta = json_decode($response, true); // Armazena o token de autorização $token = $resposta["access_token"]; // Usa o token na requisição de pagamento via Pix // ... }
  22. Voce ta ligando o servidor com banco de dados .s3db? @Vitorelias
  23. Coloca 1 linha depois da function onuse Vai adicionar cooldown de 3 segundos no goback Faz o teste e me diz se deu certo @S H I O N local cooldown = 3 -- tempo em segundos de exaustão local exhaust = exhaustion.get(cid, 6666) or 0 -- obtém a exaustão atual do jogador if exhaust + cooldown > os.time() then -- se o jogador ainda estiver exausto doPlayerSendCancel(cid, "You must wait "..cooldown.." seconds before using this item again.") -- exibe a mensagem de espera return true -- interrompe a execução da função end exhaustion.set(cid, 6666, os.time() + cooldown) -- define a nova exaustão do jogador
  24. Manda o spells.XML e o .lua da spell
  25. Troca: $players_from_logged_acc = $account_logged->getPlayersList(); $players_from_logged_acc->addOrder(new SQL_Order(new SQL_Field('name'), SQL_Order::ASC)); $main_content .= '<center><center>Select the character you want to sell<br><form action="index.php?subtopic=buychar" method="post"><select name="char">'; foreach ($players_from_logged_acc as $player) { $main_content .= '<option value="' . $player->getName() . '">' . $player->getName() . '</option>'; } $main_content .= '</select>'; $main_content .= '<center>Enter the value in Tibia Coins<br><input type="text" name="price" maxlength="5" size="10" > </center><br>'; $main_content .= '<center><input type="submit" name="submit" value="Sell character"></TD></TR></center>'; $main_content .= '</form> </tbody> Por: $players_from_logged_acc = $account_logged->getPlayersList(); $players_from_logged_acc->addOrder(new SQL_Order(new SQL_Field('name'), SQL_Order::ASC)); $main_content .= '<center><center>Select the character you want to sell<br><form action="index.php?subtopic=buychar" method="post"><select name="char">'; foreach ($players_from_logged_acc as $player) { $main_content .= '<option value="' . $player->getName() . '">' . $player->getName() . '</option>'; } $main_content .= '</select>'; $main_content .= '<center>Enter the value in Tibia Coins<br><input type="text" name="price" maxlength="5" size="10" > </center><br>'; // Verifica se o jogador tem 50 pontos para vender o personagem if($account_logged->getCustomField("points") >= 50) { $main_content .= '<center><input type="submit" name="submit" value="Sell character"></TD></TR></center>'; $main_content .= '</form> </tbody>'; } else { $main_content .= '<center>You need 50 points to sell your character. </center>'; } Agora para remover os 50 pontos do jogador Troque: if ($char && $price && $check == 1) { if (is_numeric(trim($_POST['price']))) { $check2 = $SQL->query("SELECT * FROM `players` WHERE `name` = '$char'"); foreach ($check2 as $re) { $voc = $re['vocation']; $oid = $re['account_id']; } $check1 = $SQL->query("UPDATE `players` SET `account_id` = 1 WHERE `name` = '$char'"); $check3 = $SQL->query("INSERT INTO `sellchar` VALUES ('','$char','$voc','$price','1','$oid')"); $main_content .= '<b><center>Character successfully added to sale, Thanks!</b></center>'; header("Location: index.php?subtopic=buychar"); } else { $main_content .= '<b><center>Price in numbers!!</b></center>'; } } else { $main_content .= '<center><h2>' . $mensagem . '</h2></center>'; } } } Por: if ($char && $price && $check == 1) { if (is_numeric(trim($_POST['price']))) { $check2 = $SQL->query("SELECT * FROM `players` WHERE `name` = '$char'"); foreach ($check2 as $re) { $voc = $re['vocation']; $oid = $re['account_id']; } // Verifica se o jogador tem 50 pontos para vender o personagem if($account_logged->getCustomField("points") >= 50) { // Desconta os 50 pontos do jogador $account_logged->setCustomField("points", $account_logged->getCustomField("points") - 50); $check1 = $SQL->query("UPDATE `players` SET `account_id` = 1 WHERE `name` = '$char'"); $check3 = $SQL->query("INSERT INTO `sellchar` VALUES ('','$char','$voc','$price','1','$oid')"); $main_content .= '<b><center>Character successfully added to sale, Thanks!</b></center>'; header("Location: index.php?subtopic=buychar"); } else { $main_content .= '<b><center>You need 50 points to sell your character.</b></center>'; } } else { $main_content .= '<b><center>Price in numbers!!</b></center>'; } } else { $main_content .= '<center><h2>' . $mensagem . '</h2></center>'; }

Informação Importante

Confirmação de Termo