LeyWll 51 Postado 8 de Maio Compartilhar Postado 8 de Maio ================================================================================================================ Eae rapaziada, eu vou postar uma atualização do sistema original feito pelo Movie This is the hidden content, please Entre ou Cadastre-se , com algumas adições e explicações. ================================================================================================================ Testado no TFS 1.2 | OTC 10.98 ================================================================================================================ Source do Server Spoiler 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) ================================================================================================================ Server Spoiler Vá até actions/script/changegold.lua, e 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 ================================================================================================================ Essenciais ================================================================================================================ Spoiler Lembre-se de adicionar o item que vai representar a nova moeda ao servidor, adicionando a sprite no OBB e registrando ele em data/items/items.xml. Adicione a action changegold à moeda nova. Vá em data/actions/actions.xml e adicione isso: <action itemid="IDDOITEM" script="other/changegold.lua" /> ================================================================================================================ Melhorias ================================================================================================================ Spoiler Várias pessoas que pegaram esse sistema relataram que ao usar comandos de adicionar dinheiro ou usar o sistema de banco, a moeda nova não era entregue. Para resolver isso, eu fiz algumas alterações na source: Vá em game.cpp e procure a função void Game::addMoney Troque a função inteira por essa: void Game::addMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/) { if (money == 0) { return; } // 1kk (1,000,000 gold) uint64_t goldIngot = money / 1000000; money -= goldIngot * 1000000; while (goldIngot > 0) { const uint16_t count = std::min<uint64_t>(100, goldIngot); Item* remaindItem = Item::CreateItem(ITEM_GOLD_INGOT, count); ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags); if (ret != RETURNVALUE_NOERROR) { internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT); } goldIngot -= count; } // Crystal Coins (10,000 gold) uint32_t crystalCoins = money / 10000; money -= crystalCoins * 10000; while (crystalCoins > 0) { const uint16_t count = std::min<uint32_t>(100, crystalCoins); Item* remaindItem = Item::CreateItem(ITEM_CRYSTAL_COIN, count); ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags); if (ret != RETURNVALUE_NOERROR) { internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT); } crystalCoins -= count; } // Platinum Coins (100 gold) uint16_t platinumCoins = money / 100; if (platinumCoins != 0) { Item* remaindItem = Item::CreateItem(ITEM_PLATINUM_COIN, platinumCoins); ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags); if (ret != RETURNVALUE_NOERROR) { internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT); } money -= platinumCoins * 100; } // Gold Coins (1 gold) if (money != 0) { Item* remaindItem = Item::CreateItem(ITEM_GOLD_COIN, money); ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags); if (ret != RETURNVALUE_NOERROR) { internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT); } } } Bom, é isso, espero que dê certo pra todos, qualquer dúvida pode mandar ai que eu tento ajudar a resolver. Crédito total ao Movie. 30 2 Link para o comentário https://tibiadevs.com/forums/topic/1097-tfs-1x-adicionando-nova-moeda-1kk/ Compartilhar em outros sites Mais opções de compartilhamento...
DaviSousa 1 Postado 8 de Maio Compartilhar Postado 8 de Maio Worth no items.xml facilitaria um pouco o processo também! <attribute key="worth" value="X" /> 1 Link para o comentário https://tibiadevs.com/forums/topic/1097-tfs-1x-adicionando-nova-moeda-1kk/#findComment-5648 Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados
Crie uma conta ou entre para comentar
Você precisar ser um membro para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora