Ir para conteúdo

VitorNM

Membro
  • Registro em

  • Última visita

Tudo que VitorNM postou

  1. Então, após essa alteração, a conta é localizada e autenticada corretamente, mas quando entra em qualquer character, o cliente crasha... Tem ideia do quê pode ser?
  2. Também estou tentando utilizar o cliente 12.30 mas recebo o mesmo erro. Alguém possui o login.php ou sabe como é que faz para utilizar o novo protocolo?
  3. VitorNM postou uma resposta no tópico em Suporte Tibia OTServer
    Qual a versão do TFS e qual a versão do tibia você está rodando? Se tiver algum link de referência de qual ot você baixou como base também seria interessante, para eu entender direito o que está rolando --EDIT Esquece quanto a versão do TFS e do tibia, não reparei no post original, mas você ja informou isso
  4. VitorNM postou uma resposta no tópico em Suporte Tibia OTServer
    Me manda seu init.lua e gamestore.lua para eu dar uma olhada por favor
  5. VitorNM postou uma resposta no tópico em Suporte Tibia OTServer
    Eu consegui resolver por conta própria, porém acredito de fato que não seja o melhor jeito para resolver essa situação, mas foi da única forma que consegui. 1 - No arquivo "src/iologindata.cpp", altere o seguinte trecho: De: DBInsert preyDataQuery("INSERT INTO `prey_slots` (`player_id`, `num`, `state`, `unlocked`, `current`, `monster_list`, `free_reroll_in`, `time_left`, `next_use`, `bonus_type`, `bonus_value`, `bonus_grade`) VALUES "); for (size_t num = 0; num < PREY_SLOTNUM_THIRD + 1; num++) { query << player->getGUID() << ',' << num << ',' << 3 << ',' << 1 << ',' << db.escapeString("") << ',' << db.escapeString("") << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0; if (!preyDataQuery.addRow(query)) { return false; } } Para: DBInsert preyDataQuery("INSERT INTO `prey_slots` (`player_id`, `num`, `state`, `unlocked`, `current`, `monster_list`, `free_reroll_in`, `time_left`, `next_use`, `bonus_type`, `bonus_value`, `bonus_grade`) VALUES "); for (size_t num = 0; num < PREY_SLOTNUM_THIRD + 1; num++) { query << player->getGUID() << ',' << num << ',' << "CASE WHEN `num` = 2 AND `player_id` NOT IN(SELECT `player_id` FROM `player_storage` WHERE `key` = 63253 AND `value` = 1) THEN 1 ELSE 3 END" << ',' << "CASE WHEN `num` = 2 AND `player_id` NOT IN(SELECT `player_id` FROM `player_storage` WHERE `key` = 63253 AND `value` = 1) THEN 0 ELSE 1 END" << ',' << db.escapeString("") << ',' << db.escapeString("") << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0; if (!preyDataQuery.addRow(query)) { return false; } } 2 - No arquivo "data/modules/scripts/gamestore/gamestore.lua" defina o preço da compra do slot prey e guarde esse valor pois será utilizado no próximo arquivo. 3 - No arquivo "data/modules/scripts/gamestore/init.lua" altere o seguinte trecho: De: function GameStore.processPreySlotPurchase(player) if player:getStorageValue(63253) < 1 then player:setStorageValue(63253, 1) end player:setStorageValue(63253, 1) end Para: function GameStore.processPreySlotPurchase(player) local playerId = player:getId() local playerGuid = player:getGuid() local accountId = player:getAccountId() if player:getStorageValue(63253) < 1 then local tile = Tile(player:getPosition()) if (tile) then if (not tile:hasFlag(TILESTATE_PROTECTIONZONE)) then return error({code = 1, message = "You can unlock your third prey slot only in Protection Zone."}) end end player:setStorageValue(63253, 1) message = "You have successfully unlocked your third prey slot permanently, relogin!" player:remove() db.query("UPDATE `prey_slots` SET `state` = 3, `unlocked` = 1 WHERE `player_id` = " .. playerGuid .. " AND `num` = 2") db.query("UPDATE `accounts` SET `coins` = `coins` -30 WHERE `id` = " .. accountId) GameStore.insertHistory(accountId, GameStore.HistoryTypes.HISTORY_TYPE_NONE, "Permanent Prey Slot", -30) addEvent(function() local player = Player(playerId) if not player then return false end end, 500) end end Na parte 3, você precisará alterar o valor da prey slot definida na gamestore. Altere nesses dois trechos em vermelho: 1: db.query("UPDATE `accounts` SET `coins` = `coins` -30 WHERE `id` = " .. accountId) 2: GameStore.insertHistory(accountId, GameStore.HistoryTypes.HISTORY_TYPE_NONE, "Permanent Prey Slot", -30) Feito isso, basta compilar novamente o tfs e testar. Aqui funcionou direito. Caso tenha algum problema, pode me perguntar que eu tento ajudar. Vale ressaltar novamente: o método que eu utilizei não é o mais adequado por causa dos CASES no iologindata.cpp e também por dar muita volta atoa, mas foi o único jeito que consegui pois me falta muito conhecimento em C++ e LUA para poder desenvolver melhor esse código. []s
  6. .Qual servidor ou website você utiliza como base? OTServBR - Global (https://github.com/opentibiabr/OTServBR-Global) Qual o motivo deste tópico? No servidor que estou utilizando como base, os três prey slots vem liberados por padrão. Eu gostaria de bloquear o terceiro slot, e permitir liberá-lo através da compra na game store. A informação desses slots fica guardada na tabela "prey_slots", onde temos as colunas "player_id, num, state e unlocked". A coluna "num" identifica qual slot é (0, 1 ou 2). A coluna "state" identifica se o slot está sem nenhum bixo selecionado, se há algum bixo selecionado ou se está inativa. A coluna "unlocked" identifica se o slot está liberado ou desativado (0 ou 1). Por padrão, quando você loga pela primeira vez no char, é registrado na tabela "prey_slots" os seguites registros: Cabeçalho: player_id, num, state, unlocked. x, 0, 3, 1 x, 1, 3, 1 x, 2, 3, 1 Onde "x" é o id do player, state = 3 para todos indicando que o slot está disponível para selecionar alguma criatura, e unlocked = 1 para todos indicando que o player "x" possui permissão de utilizar o slot. Essa informação de como os registros serão registrados nessa tabela fica nesse trecho de código do arquivo "src/iologindata.cpp": Então para bloquear o terceiro slot por padrão, pensei em alterar a query que insere os registros, desse jeito: De: DBInsert preyDataQuery("INSERT INTO `prey_slots` (`player_id`, `num`, `state`, `unlocked`, `current`, `monster_list`, `free_reroll_in`, `time_left`, `next_use`, `bonus_type`, `bonus_value`, `bonus_grade`) VALUES "); for (size_t num = 0; num < PREY_SLOTNUM_THIRD + 1; num++) { query << player->getGUID() << ',' << num << ',' << 3 << ',' << 1 << ',' << db.escapeString("") << ',' << db.escapeString("") << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0; Para: DBInsert preyDataQuery("INSERT INTO `prey_slots` (`player_id`, `num`, `state`, `unlocked`, `current`, `monster_list`, `free_reroll_in`, `time_left`, `next_use`, `bonus_type`, `bonus_value`, `bonus_grade`) VALUES "); for (size_t num = 0; num < PREY_SLOTNUM_THIRD + 1; num++) { query << player->getGUID() << ',' << num << ',' << "CASE WHEN `num` = 2 THEN 1 ELSE 3 END" << ',' << "CASE WHEN `num` = 2 THEN 0 ELSE 1 END" << ',' << db.escapeString("") << ',' << db.escapeString("") << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0 << ',' << 0; Até ai beleza... Consegui - de um jeito bem porco - bloquear o terceiro slot por padrão. Porém agora não sei o que fazer para liberar esse slot quando o player compra na gamestore. Atualmente, quando o jogador compra o slot na gamestore, ele recebe o storage id "63253" com o valor "1", porém nada mais acontece. Pensei então em botar para atribuir o storage e então logo em seguida rodar o update na tabela "prey_slots" atualizando os valores de "state" para 3 e "unlocked" para 1 onde "num" for 2, e quando isso acontece, ele até atualiza no banco de dados porém o slot não é liberado instantaneamente para o player, teoricamente ele deveria deslogar e logar para que sejam lidos os novos valores dessa tabela, mas quando ele reloga, os valores de "state" e "unlocked" voltam para 1 e 0 respectivamente. Já tentei colocar esse mesmo update no arquivo "data/creaturescript/scripts/others/logout.lua", verificando se o player possui a storage e se o valor de "unlocked" for 0, mas não funcionou. Não vou conseguir postar as minhas tentativas além desse de/para que postei acima do arquivo iologindata.cpp porque esmurrei tanto os arquivos que acabei fazendo muita merda e tive que retornar para o ponto onde estava quando apenas deixei o terceiro slot bloqueado. Me falta muito conhecimento a respeito da sintaxe C++ e também LUA, por isso estou me ferrando tanto, e por isso também que optei por bloquear o terceiro slot pela query ao invés de ir por um caminho mais descente. Se alguém puder me ajudar, ficarei muito grato e com certeza darei rep++ para todos que pelo menos tentarem me ajudar. Caso faltei com alguma informação essencial, por gentileza me questione abaixo que forneço o que for preciso. Perdoem-me pelo textão, eu sei, TLDR mas tentei ser o mais claro o possível e agora já são 13:32 e estou trabalhando em implementações e correções desde ontem de tarde, então já estou bem lesado kkk. Está surgindo algum erro? Se sim coloque-o aqui. -- Você tem o código disponível? Se tiver publique-o aqui: -- Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. --
  7. VitorNM postou uma resposta no tópico em Suporte & Pedidos
    Animo easy
  8. É uma opção válida. Vamos supor esse cenário: Servidor 1 - Servidor atual, com o problema da tabela. Servidor 2 - Servidor do qual você utilizará os scripts do sistema de castle e as tables do mesmo BD 1 - Banco de dados do servidor atual (faltando tabelas do sistema castle) BD 2 - Banco de dados do servidor do qual utilizará para extrair os scripts e as tables Depois de substituir os scripts e o mapa, quando você rodar o Servidor 1, ele dará um erro apontando a falta da tabela. Você terá de fazer um dump da tabela no BD 2, para então importar no BD 1 Entendeu o processo?
  9. Substituir os scripts pelo que? Para criar a table que funcione com o script você precisa saber quais são as colunas da tabela e os tipos de dados das mesmas, não adianta nada criar a tabela sem saber essas informações só para o problema parar de aparecer, sendo que o sistema em questão não vai funcionar corretamente, podendo até gerar uma falha de segurança no servidor, compreende?
  10. Acho que o mais indicado seria entrar em contato com o desenvolvedor do servidor para que ele possa ajudar com isso. Normalmente o desenvolvedor disponibiliza a base de dados pronta para uso compatível com o servidor, estranho estar faltando tables.
  11. Caraio mano, muito obrigado por compartilhar. Estou baixando para testar, pelo visto é bem completo. Rep ++ Pessoal quer tudo na mão beijada é foda, já não basta ele compartilhar com o fórum querem que faça tutorial ensinando fazer tudo. Google e TibiaKing estão ai pra isso negada, vlw flw.
  12. Opa, boa noite. Seguinte, se você está usando mysql + site, você precisa primeiro desativar o account manager, isso pode gerar uns problemas futuros. Essa alteração deve ser feita na pasta base do servidor, no arquivo "config.lua". A linha "accountManager = true" deve ser alterada para "accountManager = false". Feito isso, o acc manager será desativado. Agora, vamos mudar a posição inicial do player quando loga um char novo. Acesse seu banco de dados e rode essa query: SELECT * FROM players WHERE name LIKE '%sample%'; Esse comando te trará o player que é usado como base para os novos chares, todo char novo será copiado dele (inclusive a posição inicial). Então no resultado da query, procure pelo campo "posx" "posy" e "posz" essa é a posição inicial dele, todos os chares começarão nessa coordenada (x, y e z). Basta alterar esses campos do char sample, se estiver usando phpMyAdmin é só dar um clique duplo no número para alterar, ou pode alterar utilizando a seguinte query: UPDATE players SET posx = 111, posy = 222, posz = 7 WHERE id = X; Lembrando que os valores dos campos "posx, posy e posz" é você quem determinará, e o campo "id = X" é o ID do player sample, que você consegue checar na primeira query que eu passei. O post pode estar bem bagunçado, mas acredito que sanou as dúvidas, estou escrevendo correndo isso pois o tempo está curto Qualquer dúvida coloco-me a disposição. Atenciosamente, VitorNM.
  13. Você adicionou um sistema de guild castle, onde ele faz contato com o banco de dados do servidor, e esse erro está sendo apontado pela falta da tabela em questão, que impede o sistema funcionar corretamente. A solução seria criar a tabela no banco de dados, para isso você precisa saber quais as colunas dessa tabela e os tipos de dados de cada uma, as chaves primárias e extrangeiras... Você possui essas informações? De onde você pegou esse script de guild castle? Talvez lá deve estar explicando como criar a estrutura no banco de dados para ser compatível com o script..
  14. A table "castle_dono" do bd "otservs" não existe.. Sua dúvida é como cria a table?
  15. Bom, é o seguinte, no servidor que estou trabalhando, o attack type GROUND não da dano em pokemons do type elétrico, no caso deveria ser ao contrário: Attack elétrico não daria dano em pokemons do type ground. Não sei onde fica esse tipo de configuração, já procurei bastante e não consigo achar... Alguém ai disposto a ajudar? Rep++
  16. Tudo mesma coisa, basta colocar no ip do client 127.0.0.1 para o computador host e o IPv4 para os demais computadores... Não precisa de hamachi se for nesse padrão de rede local.
  17. Vou tentar explicar com exemplos (prints dentro de spoiler box) Quando você digita ipconfig no prompt de comando, você deve buscar o IPv4, segue uma foto de onde localizá-lo: Repare que meu endereço de IPv4 é 192.168.1.31 Lá no config.lua você deve setar esse endereço de ip para o servidor, segue foto: Eu estou fazendo essas configurações em um servidor de poketibia, porém o procedimento é padrão, tanto para poketibia como para tibia e outros derivados. Na hora de conectar-se ao servidor, o computador que está rodando o servidor deve se conectar através do ip 127.0.0.1 (localhost) já os outros computadores da rede, devem se conectar através do IPv4... Caso não tenha conseguido, se desejar posso tentar te ajudar pessoalmente através do teamviewer ou você me manda os arquivos e eu os configuro pra ti...
  18. É o jeito hahah boa sorte ai Se precisar de alguma ajuda só avisar tento o possível
  19. hahah normal cara, faz o seguinte, cria uma cópia da db e tente limpá-la, caso de errado, basta excluir e fazer outra cópia...
  20. O comando /cb é executado seguido de alguns parâmetros, dependendo da versão do servidor que está utilizando, alguns parâmetros podem mudar. Na maioria dos casos, quando está utilizando um servidor sem o level system de pokemons, o comando utiliza esse formato: /cb [nome do pokemon],[boost level 1~50], [gênero X] Observe que eu coloquei um X no gênero porque isso varia muito de servidor para servidor, você precisa testar, geralmente 0 é female, 1 é male e 2 é sem gênero. Há alguns servidores em que 0 é sem gênero, 1 é male e 2 é female, outros são 3 female, 4 male e 5 sem gênero... Realmente precisa testar. Caso o servidor for com Level System, o comando é seguido por essa sequência de parâmetros: /cb [nome do pokemon], [level do pokemon], [boost do pokemon], [gênero X] onde X tem como valor 3 para female e 4 para male, e na maioria dos casos não há sem gênero. (0=3 e 1=4) Me perdoe se fui muito confuso, mas não achei forma melhor de explicar ;/
  21. C:/xampp/htdocs/config.php (diretório padrão quando está utilizando apache+mysql do xampp)
  22. Você precisa entrar na pasta (diretório padrão) "C:/xampp" e substituir a pasta htdocs pela pasta do site do servidor
  23. O que você pode fazer é um Drop na database e importá-la novamente, limpa... Caso você não possua uma database limpa, aconselho a tirar um tempo para limpá-la manualmente e salvá-la como backup. Não tenho certeza se esse é o melhor método, porém são as únicas soluções que eu imagino, meu conhecimento com MySQL é precário..

Informação Importante

Confirmação de Termo