Postado Maio 12, 2020 5 anos Hoje estou bonzinho e vou postar mais uma coisa que eu fiz pro otserver que estou desenvolvendo e vou compartilhar com vocês. Você tem aquela nova moeda no seu servidor, mas os NPCs não aceitam ela e tal? Vou te dar a solução nesse tópico. ================================================================================================================ Testado no TFS 1.3 na versão 8.60 ================================================================================================================ Em player.cpp, procure a função Player::updateSaleShopList Troque essa linha if (itemId != ITEM_GOLD_COIN && itemId != ITEM_PLATINUM_COIN && itemId != ITEM_CRYSTAL_COIN) { por essa if (itemId != ITEM_GOLD_COIN && itemId != ITEM_PLATINUM_COIN && itemId != ITEM_CRYSTAL_COIN && itemId != ITEM_GOLD_INGOT) { ================================================================================================================ Em const.h, procure por ITEM_CRYSTAL_COIN = 2160 Abaixo dela, adicione isso ITEM_GOLD_INGOT = 9971, Sendo que o 9971 é o ID do item que gostariamos que seja a nova moeda. ================================================================================================================ Em item.cpp, procure pela função uint32_t Item::getWorth() const Troque ela toda por isso uint32_t Item::getWorth() const { switch (id) { case ITEM_GOLD_COIN: return count; case ITEM_PLATINUM_COIN: return count * 100; case ITEM_CRYSTAL_COIN: return count * 10000; case ITEM_GOLD_INGOT: return count * 1000000; default: return 0; } } ================================================================================================================ Em luascript.cpp, procure por registerEnum(ITEM_CRYSTAL_COIN) Abaixo disso, coloque isso registerEnum(ITEM_GOLD_INGOT) ================================================================================================================ Agora em actions/script/changegold.lua, troque por isso local config = { [ITEM_GOLD_COIN] = {changeTo = ITEM_PLATINUM_COIN}, [ITEM_PLATINUM_COIN] = {changeBack = ITEM_GOLD_COIN, changeTo = ITEM_CRYSTAL_COIN}, [ITEM_CRYSTAL_COIN] = {changeBack = ITEM_PLATINUM_COIN, changeTo = ITEM_GOLD_INGOT}, [ITEM_GOLD_INGOT] = {changeBack = ITEM_CRYSTAL_COIN} } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local coin = config[item:getId()] if coin.changeTo and item.type == 100 then item:remove() player:addItem(coin.changeTo, 1) player:say("$$$", TALKTYPE_MONSTER_SAY, true) elseif coin.changeBack then item:remove(1) player:addItem(coin.changeBack, 100) player:say("$$$", TALKTYPE_MONSTER_SAY, true) else return false end return true end ================================================================================================================ É isso por hoje. ================================================================================================================
Postado Maio 12, 2020 5 anos Administrador Parabéns, seu tópico de conteúdo foi aprovado! Muito obrigado pela sua contribuição, nós do Tibia King agradecemos. Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP. Mostrar conteúdo oculto Congratulations, your content has been approved! Thank you for your contribution, we of Tibia King we are grateful. Your content will help many other users, you received +1 REP.
Postado Maio 12, 2020 5 anos @Movie O seu arrombado, você não falou que já tinha parado de desenvolver seu OT, que não voltava mais e bla bla bla? Que porra é essa então? No mais é uma boa solução, utilizo exatamente a mesma e funciona bem! Os outros meios que tem por ai, não inclui a moeda nova no jogo (Ela não é aceita por NPCS e quando você faz um saque no banco não vem ela).
Postado Novembro 14, 2020 4 anos Em 12/05/2020 em 18:12, Movie disse: Hoje estou bonzinho e vou postar mais uma coisa que eu fiz pro otserver que estou desenvolvendo e vou compartilhar com vocês. Você tem aquela nova moeda no seu servidor, mas os NPCs não aceitam ela e tal? Vou te dar a solução nesse tópico. ================================================================================================================ Testado no TFS 1.3 na versão 8.60 ================================================================================================================ Em player.cpp, procure a função Player::updateSaleShopList Troque essa linha if (itemId != ITEM_GOLD_COIN && itemId != ITEM_PLATINUM_COIN && itemId != ITEM_CRYSTAL_COIN) { por essa if (itemId != ITEM_GOLD_COIN && itemId != ITEM_PLATINUM_COIN && itemId != ITEM_CRYSTAL_COIN && itemId != ITEM_GOLD_INGOT) { ================================================================================================================ Em const.h, procure por ITEM_CRYSTAL_COIN = 2160 Abaixo dela, adicione isso ITEM_GOLD_INGOT = 9971, Sendo que o 9971 é o ID do item que gostariamos que seja a nova moeda. ================================================================================================================ Em item.cpp, procure pela função uint32_t Item::getWorth() const Troque ela toda por isso uint32_t Item::getWorth() const { switch (id) { case ITEM_GOLD_COIN: return count; case ITEM_PLATINUM_COIN: return count * 100; case ITEM_CRYSTAL_COIN: return count * 10000; case ITEM_GOLD_INGOT: return count * 1000000; default: return 0; } } ================================================================================================================ Em luascript.cpp, procure por registerEnum(ITEM_CRYSTAL_COIN) Abaixo disso, coloque isso registerEnum(ITEM_GOLD_INGOT) ================================================================================================================ Agora em actions/script/changegold.lua, troque por isso local config = { [ITEM_GOLD_COIN] = {changeTo = ITEM_PLATINUM_COIN}, [ITEM_PLATINUM_COIN] = {changeBack = ITEM_GOLD_COIN, changeTo = ITEM_CRYSTAL_COIN}, [ITEM_CRYSTAL_COIN] = {changeBack = ITEM_PLATINUM_COIN, changeTo = ITEM_GOLD_INGOT}, [ITEM_GOLD_INGOT] = {changeBack = ITEM_CRYSTAL_COIN} } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local coin = config[item:getId()] if coin.changeTo and item.type == 100 then item:remove() player:addItem(coin.changeTo, 1) player:say("$$$", TALKTYPE_MONSTER_SAY, true) elseif coin.changeBack then item:remove(1) player:addItem(coin.changeBack, 100) player:say("$$$", TALKTYPE_MONSTER_SAY, true) else return false end return true end ================================================================================================================ É isso por hoje. ================================================================================================================ Não consegui fazer aqui, os NPCS não reconhece essa nova moeda.
Postado Fevereiro 25, 2021 4 anos Em 12/05/2020 em 18:12, Breno Alves disse: Hoje estou bonzinho e vou postar mais uma coisa que eu fiz pro otserver que estou desenvolvendo e vou compartilhar com vocês. Você tem aquela nova moeda no seu servidor, mas os NPCs não aceitam ela e tal? Vou te dar a solução nesse tópico. ================================================================================================================ Testado no TFS 1.3 na versão 8.60 ================================================================================================================ Em player.cpp, procure a função Player::updateSaleShopList Troque essa linha if (itemId != ITEM_GOLD_COIN && itemId != ITEM_PLATINUM_COIN && itemId != ITEM_CRYSTAL_COIN) { por essa if (itemId != ITEM_GOLD_COIN && itemId != ITEM_PLATINUM_COIN && itemId != ITEM_CRYSTAL_COIN && itemId != ITEM_GOLD_INGOT) { ================================================================================================================ Em const.h, procure por ITEM_CRYSTAL_COIN = 2160 Abaixo dela, adicione isso ITEM_GOLD_INGOT = 9971, Sendo que o 9971 é o ID do item que gostariamos que seja a nova moeda. ================================================================================================================ Em item.cpp, procure pela função uint32_t Item::getWorth() const Troque ela toda por isso uint32_t Item::getWorth() const { switch (id) { case ITEM_GOLD_COIN: return count; case ITEM_PLATINUM_COIN: return count * 100; case ITEM_CRYSTAL_COIN: return count * 10000; case ITEM_GOLD_INGOT: return count * 1000000; default: return 0; } } ================================================================================================================ Em luascript.cpp, procure por registerEnum(ITEM_CRYSTAL_COIN) Abaixo disso, coloque isso registerEnum(ITEM_GOLD_INGOT) ================================================================================================================ Agora em actions/script/changegold.lua, troque por isso local config = { [ITEM_GOLD_COIN] = {changeTo = ITEM_PLATINUM_COIN}, [ITEM_PLATINUM_COIN] = {changeBack = ITEM_GOLD_COIN, changeTo = ITEM_CRYSTAL_COIN}, [ITEM_CRYSTAL_COIN] = {changeBack = ITEM_PLATINUM_COIN, changeTo = ITEM_GOLD_INGOT}, [ITEM_GOLD_INGOT] = {changeBack = ITEM_CRYSTAL_COIN} } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local coin = config[item:getId()] if coin.changeTo and item.type == 100 then item:remove() player:addItem(coin.changeTo, 1) player:say("$$$", TALKTYPE_MONSTER_SAY, true) elseif coin.changeBack then item:remove(1) player:addItem(coin.changeBack, 100) player:say("$$$", TALKTYPE_MONSTER_SAY, true) else return false end return true end ================================================================================================================ É isso por hoje. ================================================================================================================ Primeiramente parabéns por trazer esse conteúdo, eu tenho esse mesmo sistema idêntico ao seu, funciona com npcs e tal. Mas tem um problema relacionado ao market, que dar pra comprar coisas no market e não desconta da moeda nova, o market sabe que você tem dinheiro mas não desconta, alguns jogadores já me relataram que isso ocorre deixando na bp ou depot, achei melhor reportar aqui esse problema... para acharmos uma solução, estou tentando encontrar na source onde ele puxa as moedas do market mas ainda não encontrei. Tamo junto
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.