Ir para conteúdo
  • Cadastre-se

Posts Recomendados

  • Respostas 84
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Capernia Datapack: making the ultimate datapack for OTS (Open Tibia Server) Bom dia a todos, considerando que todas as datapacks presentes nesse fórum contém bugs absurdos e estão longe de serem

Parabéns pelo seu trabalho manolo! A tempos que não vejo uma pessoa preocupada em entregar algo de graça por aqui..  Se precisar de ajuda com alguma coisa.. só dar um toque!!    Mais uma vez

http://www.halfaway.net/index.php?home

On 6/26/2014 at 3:28 PM, Mitsuig said:

 

 

On 5/17/2016 at 11:43 PM, gordonbays said:

Capernia Datapack: making the ultimate datapack for OTS (Open Tibia Server)

Bom dia a todos, considerando que todas as datapacks presentes nesse fórum contém bugs absurdos e estão longe de serem confiáveis para um servidor final, eu convido todos a participarem e colaborarem nesse projeto chamado Capernia. O objetivo é unificar as ações em um único projeto e permitir que as correções realizadas isoladamente se propaguem para todos em tempo real.

Vários problemas já foram corrigidos como a replicação de cristal coins da ferumbras e queda de servidor pelo método da parcel. Novos problemas são reportados diariamente e eu farei o possível para atender a todos. Se você tem interesse em contribuir ou utilizar o projeto Capernia acesse:

 

https://github.com/gordonbay/capernia-ots-datapack

 

Como todos sabem não existe projeto "Full" ou "100%" e o mesmo está longe de existir porém você pode fazer a diferença agora reportando erros encontrados ou enviando as suas atualizações, entretanto tudo é realizado utilizando o idioma inglês e sem customizações.

 

Últimas atualizações:

 

0.0.9 (17/05/2016)

Bugfixes:

  • fix wrong monsters corpses as requested here #17
  • fix missing Yalahar gates and Captain Max not checking mission status in order to teleport a character. As described here #16
  • fix Edron's Bog Raider's missing spaws and wrong map textures as requested here #14

0.0.8 (14/05/2016)

Enhancements:

  • added 10.92 new itens and potions

0.0.7 (13/05/2016)

Bugfixes:

  • fix a bug on Ferumbras' Ascendant Quest as requested here #13

Enhancements:

  • Reward Chest has been removed from Thais due violations of Capernia rules about custom content

 

 

Why you don't give source ? I can't change from 10.92 to 10.93 :/  

Link para o post
Compartilhar em outros sites
On 23/5/2016 at 1:58 AM, ArkSeyonet said:

If anyone would like to share the 10.93 sources, items.otb, or even RME 10.93 then I would love to switch to this datapack, and see what I can find to fix. I've been mostly fixing the rl map project quests.

just get them from TFS

https://github.com/otland/forgottenserver/archive/master.zip

Link para o post
Compartilhar em outros sites

@gordonbays It is advisable to start a stable server with these files?

 

Problems:

 

1. Traning teleport is here? http://i.imgur.com/GmS75oP.png

2. Venore select town bug :/ Abyssador kill xd

 

Fail?

Editado por bycar (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Parabéns pelo seu trabalho manolo! A tempos que não vejo uma pessoa preocupada em entregar algo de graça por aqui..  Se precisar de ajuda com alguma coisa.. só dar um toque!! 

 

Mais uma vez Parabéns....

 

OFF: Ano passado fiz uma vídeo aula ensinando a colocar ot online e o @Azhaurn postou.. é um vídeo bem completo que ensina 100% a colocar ot online se quiser colocar o link para ajudar a galera que está começando agora.. Lembrando que eu mantenho o tópico ativo, e sempre respondo todas as dúvidas..

Link \/

 

Link para o post
Compartilhar em outros sites
31 minutos atrás, Brutal System disse:

Meu antivírus detectou Win32:Evo-gen.

 

Isso é normal até para as compilações oficiais disponíveis em:

https://nightlies.otland.net/

 

Pois são utilizadas bibliotecas semelhantes a desse vírus. Além disso, seu antivírus não detectou o vírus Win32:Evo-gen, o que ele provavelmente alertou a você foi:  Win32:Evo-gen [Susp].

 

https://www.virustotal.com/pt/file/b7131c9144287fed3e7359f1e88721093bd8643f83a0ccd77ed4c4e61b91368e/analysis/1464369890/

13 horas atrás, bycar disse:

@gordonbays It is advisable to start a stable server with these files?

 

Problems:

 

1. Traning teleport is here? http://i.imgur.com/GmS75oP.png

2. Venore select town bug :/ Abyssador kill xd

 

Fail?

 

Its not advisable use it by your on your own risk, wrong place to post bugs, there is no Venore town bug for a long time and this project does not suport custom stuff as trainning rooms.

Editado por gordonbays (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
5 hours ago, gordonbays said:

 

This is normal for even the official compilations available at:

https://nightlies.otland.net/

 

For similar libraries of this virus are used. Also, your antivirus did not detect the virus Win32: Evo-gen, which he probably warned you was:   Win32: Evo-gen [Susp] .

 

https://www.virustotal.com/pt/file/b7131c9144287fed3e7359f1e88721093bd8643f83a0ccd77ed4c4e61b91368e/analysis/1464369890/

 

Its not advisable to use it by your on your own risk, wrong place to post bugs, there is the town Venore bug for a long time and this project does not suport custom stuff the trainning rooms.

 

Is there a reason why you don't include the sources? I'm curious. 

And are you planning to add support for the "Tibia Store" button? Or waiting for it to be part of tfs?

 

I know you are just focused on completing the data pack and get it closer to being 100% Global Tibia, but do you plan on also having as many Global Tibia features as you can?

 

Last question, I fixed two quests in your Data Pack in the Children of Revolution quest and Ape City quest. Would you like for those fixes to be suggested in your github as well?

Editado por ArkSeyonet (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
El 20/05/2016 a las 16:46, givera12 dijo:

Necesito la fuente 10.93 

im using ubuntu and when i download and use a tfs ghitub master.. mor erros xml npc etc on tfs.. and its compiled...

Editado por aleixoto (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Bugs:

 

  • Dead Blood Priest - Dando debug!
 

<item id="21265" article="a" name="dead blood priest">
        <attribute key="weight" value="6300" />
        <attribute key="containerSize" value="25" />
        <attribute key="decayTo" value="22546" />
        <attribute key="duration" value="10" />
        <attribute key="corpseType" value="blood" />
        <attribute key="fluidSource" value="blood" />
    </item>

 

  • Gates de yalahar precisando de quest pra passar! mechanism.lua em data\actions\scripts\quests\in service of yalahar\
 

 


local mechanisms = {
    [3091] = {pos = {x = 32744, y = 31161, z = 5}, value = 21}, -- Alchemist
    [3092] = {pos = {x = 32744, y = 31164, z = 5}, value = 21},
    [3093] = {pos = {x = 32833, y = 31269, z = 5}, value = 24}, -- Trade
    [3094] = {pos = {x = 32833, y = 31266, z = 5}, value = 24},
    [3095] = {pos = {x = 32729, y = 31200, z = 5}, value = 29}, -- Arena
    [3096] = {pos = {x = 32734, y = 31200, z = 5}, value = 29},
    [3097] = {pos = {x = 32776, y = 31141, z = 5}, value = 35}, -- Cemetery
    [3098] = {pos = {x = 32776, y = 31145, z = 5}, value = 35},
    [3099] = {pos = {x = 32874, y = 31202, z = 5}, value = 41}, -- Sunken
    [3100] = {pos = {x = 32869, y = 31202, z = 5}, value = 41},
    [3101] = {pos = {x = 32856, y = 31251, z = 5}, value = 45}, -- Factory
    [3102] = {pos = {x = 32854, y = 31248, z = 5}, value = 45}
}

local mechanisms2 = {
    [9235] = {pos = {x = 32773, y = 31116, z = 7}},
    [9236] = {pos = {x = 32780, y = 31115, z = 7}}
}

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if(mechanisms[item.uid]) then
--        if(player:getStorageValue(Storage.InServiceofYalahar.Questline) >= mechanisms[item.uid].value) then
            player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
            player:teleportTo(mechanisms[item.uid].pos)
            player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
--        else
--            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "The gate mechanism won't move. You probably have to find a way around until you figure out how to operate the gate.")
--        end
    elseif(mechanisms2[item.uid]) then
        player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
        player:teleportTo(mechanisms2[item.uid].pos)
        player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
    end
    return true
end

 

  • Acesso ao barco de goroma somente pela sorte!
  • Acesso ao interior de goroma somente com quest!
  • Renegade Knight com 65 de HP e dando 0 de Exp!

Em breve posto mais!

Editado por Droox (veja o histórico de edições)

60cb89cab929e5d4179b538c4176ab11a2e58de6.gif

Link para o post
Compartilhar em outros sites
4 horas atrás, Droox disse:

Bugs:

 

  • Dead Blood Priest - Dando debug!
  Ocultar conteúdo

<item id="21265" article="a" name="dead blood priest">
        <attribute key="weight" value="6300" />
        <attribute key="containerSize" value="25" />
        <attribute key="decayTo" value="22546" />
        <attribute key="duration" value="10" />
        <attribute key="corpseType" value="blood" />
        <attribute key="fluidSource" value="blood" />
    </item>

 

  • Gates de yalahar precisando de quest pra passar! mechanism.lua em data\actions\scripts\quests\in service of yalahar\
  Ocultar conteúdo

 


local mechanisms = {
    [3091] = {pos = {x = 32744, y = 31161, z = 5}, value = 21}, -- Alchemist
    [3092] = {pos = {x = 32744, y = 31164, z = 5}, value = 21},
    [3093] = {pos = {x = 32833, y = 31269, z = 5}, value = 24}, -- Trade
    [3094] = {pos = {x = 32833, y = 31266, z = 5}, value = 24},
    [3095] = {pos = {x = 32729, y = 31200, z = 5}, value = 29}, -- Arena
    [3096] = {pos = {x = 32734, y = 31200, z = 5}, value = 29},
    [3097] = {pos = {x = 32776, y = 31141, z = 5}, value = 35}, -- Cemetery
    [3098] = {pos = {x = 32776, y = 31145, z = 5}, value = 35},
    [3099] = {pos = {x = 32874, y = 31202, z = 5}, value = 41}, -- Sunken
    [3100] = {pos = {x = 32869, y = 31202, z = 5}, value = 41},
    [3101] = {pos = {x = 32856, y = 31251, z = 5}, value = 45}, -- Factory
    [3102] = {pos = {x = 32854, y = 31248, z = 5}, value = 45}
}

local mechanisms2 = {
    [9235] = {pos = {x = 32773, y = 31116, z = 7}},
    [9236] = {pos = {x = 32780, y = 31115, z = 7}}
}

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if(mechanisms[item.uid]) then
--        if(player:getStorageValue(Storage.InServiceofYalahar.Questline) >= mechanisms[item.uid].value) then
            player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
            player:teleportTo(mechanisms[item.uid].pos)
            player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
--        else
--            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "The gate mechanism won't move. You probably have to find a way around until you figure out how to operate the gate.")
--        end
    elseif(mechanisms2[item.uid]) then
        player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
        player:teleportTo(mechanisms2[item.uid].pos)
        player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
    end
    return true
end

 

  • Acesso ao barco de goroma somente pela sorte!
  • Acesso ao interior de goroma somente com quest!
  • Renegade Knight com 65 de HP e dando 0 de Exp!

Em breve posto mais!

 

Obrigado por reportar porém o procedimento para investigação de falhas no projeto é realizado nesse link:

https://github.com/gordonbay/capernia-ots-datapack/issues

Link para o post
Compartilhar em outros sites

Poderia tentar um "Capernia RL Website" :p

 

Hoje em dia a situação é feia em relação aos sites. Todos são feitos para algum servidor em si que, quase 100% das vezes, tem algum bug sério, seja no site ou in-game (sim, sei que o banco de dados é pro TFS 1.2, mas sempre têm aqueles "diferenciais" que mexem no DB padrão e bugam alguma modificação do site).

 

Boa sorte. Se quiser ajuda com o site é só chamar o/

Ass. MatheusGrilo

IOZ0bIF.gif

Link para o post
Compartilhar em outros sites
6 minutos atrás, Grilo disse:

Poderia tentar um "Capernia RL Website" :p

 

Hoje em dia a situação é feia em relação aos sites. Todos são feitos para algum servidor em si que, quase 100% das vezes, tem algum bug sério, seja no site ou in-game (sim, sei que o banco de dados é pro TFS 1.2, mas sempre têm aqueles "diferenciais" que mexem no DB padrão e bugam alguma modificação do site).

 

Boa sorte. Se quiser ajuda com o site é só chamar o/

 

Ja estava prevendo enviar um hoje para o projeto e ir trabalhando em cima dele.

Link para o post
Compartilhar em outros sites
4 horas atrás, gordonbays disse:

Obrigado por reportar porém o procedimento para investigação de falhas no projeto é realizado nesse link:

https://github.com/gordonbay/capernia-ots-datapack/issues

 

Entendi, estou no trabalho e aqui não abre github.

 

1 hora atrás, aleixoto disse:

no tiene trainers..

 

Pelo que entendi, o projeto busca ser o mais RL possível, e não terá treiners on-line!

60cb89cab929e5d4179b538c4176ab11a2e58de6.gif

Link para o post
Compartilhar em outros sites
3 minutos atrás, aleixoto disse:

ok entendi! trainers=no rl

y los trainers offline?

estaria bien publicar los sources para compilar en linux 

 

Mais tem treiners offline, em todas as cidades!

60cb89cab929e5d4179b538c4176ab11a2e58de6.gif

Link para o post
Compartilhar em outros sites

Os novos potions, consegui ativar em meu ot server, na actions/scripts/potions e nos items.xml, mas ingame ele não está usando nos jogadores, o que posso fazer para normalizar? urgente pf.

Link para o post
Compartilhar em outros sites
5 horas atrás, ADM Argel disse:

Os novos potions, consegui ativar em meu ot server, na actions/scripts/potions e nos items.xml, mas ingame ele não está usando nos jogadores, o que posso fazer para normalizar? urgente pf.

 

Aqui funciona normalmente.

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Glacial
      Boa tarde galera, tudo bem?
       
      Meu nome é Gustavo/Glacial, gostaria de compartilhar com a comunidade meu projeto solo no RME 3.5 /Client 10.98 do Tibia.
      Glacial City, com houses, hunts, lojas, quests, bosses e depot.

      Os teleportes já estão redirecionados, falta apenas itens nos baús das quests.
       
      Espero que curtam e podem baixar pra colocar no ot de vocês!
       
      Atualização versão 2.0:
      - Houses na cidade
      - Hive Lair (Lady Bug)
      - Silencer & Frazzle/Guzzlemaw Hunt
      - Drakens + Demons Hunt (área maior)
       
      Links MediaFire e VirusTotal:
      Download Mapas: https://www.mediafire.com/folder/hz0q694t9nk86/Mapas_Glacial
      versão 1.0 Virus Total: https://www.virustotal.com/gui/file/b4e94903752e24aba63b291f9929f15f6bd7f4feb44d5a1f42ec3d755ee7977e?nocache=1
      versão 2.0 Virus Total: https://www.virustotal.com/gui/file/d88ae087e966bed6e2f2348f31246c1858831c1fb13d4e8613ba98f6ede37503?nocache=1
       
      Segue fotos em anexo.
       

       

       

       
       
       

       

       

    • Por Jaurez
      Me pediram e aí está, todos juntos em um arquivo.
      Atlantyda,
      Ethno,
      Gengia,
      Ghala,
      Ghenov,
      Oken,
      Pyre,
      Vikia.
      Download:
      Scan:
       
      Fotos
      Créditos 5mok3 pelo mapa Atlantyda,
      Tylik pelos outros mapas.

      @Reupload
      https://mega.nz/file/JKogHATS#pApVHybjYNOWJ4gNERFVA541axhXzbXSCthzEKORtfY
    • Por Glacial
      Boa tarde galera, tudo bem?
      Meu nome é Gustavo/Glacial, gostaria de compartilhar com a comunidade meu projeto solo no RME 3.5 /Client 10.98 do Tibia.
      Espero que curtam ai e podem baixar pra colocar no OT de vocês caso queiram.
       
      Download Mapas: https://www.mediafire.com/folder/hz0q694t9nk86/Mapas_Glacial
      versão 1.0 Virus Total: https://www.virustotal.com/gui/file/b4e94903752e24aba63b291f9929f15f6bd7f4feb44d5a1f42ec3d755ee7977e?nocache=1
      versão 2.0 Virus Total: https://www.virustotal.com/gui/file/d88ae087e966bed6e2f2348f31246c1858831c1fb13d4e8613ba98f6ede37503?nocache=1
       
      Fotos e detalhes no post atualizado e continuação do projeto:
       
       
      Obrigado pela atenção!
      Att.
      Gustavo Glacial.
    • Por Codex NG
      Sorry I don't speak spanish so you will have to bare with me.
       
      This is a new way for people to create npc's which use different types of currency, rather than a coming up with different items to trade with the npc or trying to edit the npc modules this method simplifies everything by providing the npc with a npc currency id.
       
      All this npc currency id is, is a storage value.. pretty simple eh?
      If the npc doesn't have a currency id then it will use the normal currency e.g. gold, plat, cc etc..
       
      I originally posted this on otland, but fuck them xD
       
      Using Lailene here you can see she has a currency attribute with id of 123456
      <?xml version="1.0" encoding="UTF-8"?> <npc name="Lailene" currency="123456" script="lailene.lua" walkinterval="2000" floorchange="0" speechbubble="2"> <health now="100" max="100"/> <look type="279" head="114" body="94" legs="113" feet="114" addons="0"/> </npc>  
      Now any player who has a storage value of 123456 can purchase things from her shop provided they have enough value stored within the storage, similar to having money in the bank.
      The money or in this case the storage value is added and removed from the player in real time.
       
      Lets get to the code
       
      game.cpp
      Find this
      bool Game::removeMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/) Replace the whole function with this.
      bool Game::removeMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/) { if (cylinder == nullptr) { return false; } if (money == 0) { return true; } uint32_t currencyId = 0; Player* player; if (Creature* creature = cylinder->getCreature()) { if (Player* p = creature->getPlayer()) { currencyId = p->getNpcCurrencyId(); player = p; } } if (!currencyId) { std::vector<Container*> containers; std::multimap<uint32_t, Item*> moneyMap; uint64_t moneyCount = 0; for (size_t i = cylinder->getFirstIndex(), j = cylinder->getLastIndex(); i < j; ++i) { Thing* thing = cylinder->getThing(i); if (!thing) { continue; } Item* item = thing->getItem(); if (!item) { continue; } Container* container = item->getContainer(); if (container) { containers.push_back(container); } else { const uint32_t worth = item->getWorth(); if (worth != 0) { moneyCount += worth; moneyMap.emplace(worth, item); } } } size_t i = 0; while (i < containers.size()) { Container* container = containers[i++]; for (Item* item : container->getItemList()) { Container* tmpContainer = item->getContainer(); if (tmpContainer) { containers.push_back(tmpContainer); } else { const uint32_t worth = item->getWorth(); if (worth != 0) { moneyCount += worth; moneyMap.emplace(worth, item); } } } } if (moneyCount < money) { return false; } for (const auto& moneyEntry : moneyMap) { Item* item = moneyEntry.second; if (moneyEntry.first < money) { internalRemoveItem(item); money -= moneyEntry.first; } else if (moneyEntry.first > money) { const uint32_t worth = moneyEntry.first / item->getItemCount(); const uint32_t removeCount = (money / worth) + 1; addMoney(cylinder, (worth * removeCount) - money, flags); internalRemoveItem(item, removeCount); break; } else { internalRemoveItem(item); break; } } } else { int32_t value; player->getStorageValue(currencyId, value); if (value < money) { return false; } player->addStorageValue(currencyId, value - money); } return true; } Next find this
      void Game::addMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/) Replace the whole function with this
      void Game::addMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/) { if (money == 0) { return; } if (Creature* creature = cylinder->getCreature()) { if (Player* player = creature->getPlayer()) { if(uint32_t currencyId = player->getNpcCurrencyId()){ int32_t value; player->getStorageValue(currencyId, value); player->addStorageValue(currencyId, value + money); return; } } } 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; } 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; } 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); } } }  
      npc.cpp
      Look for this
      pugi::xml_attribute attr; if ((attr = npcNode.attribute("speed"))) { baseSpeed = pugi::cast<uint32_t>(attr.value()); } else { baseSpeed = 100; } Right underneath that you are going to place this.
      if ((attr = npcNode.attribute("currency"))) { currency = pugi::cast<uint32_t>(attr.value()); }  
      npc.h
      Look for this
      bool isPushable() const final { return walkTicks > 0; } Place this right underneath
      uint32_t getCurrencyId() const { return currency; } Look for this
      uint32_t walkTicks; Place this right underneath
      uint32_t currency;  
      player.cpp
      Find this
      void Player::openShopWindow(Npc* npc, const std::list<ShopInfo>& shop) Replace that function with this
      void Player::openShopWindow(Npc* npc, const std::list<ShopInfo>& shop) { shopItemList = shop; sendShop(npc); sendSaleItemList(npc); } Next find this
      bool Player::updateSaleShopList(const Item* item) Replace that function with this
      bool Player::updateSaleShopList(const Item* item) { uint16_t itemId = item->getID(); if (itemId != ITEM_GOLD_COIN && itemId != ITEM_PLATINUM_COIN && itemId != ITEM_CRYSTAL_COIN) { auto it = std::find_if(shopItemList.begin(), shopItemList.end(), [itemId](const ShopInfo& shopInfo) { return shopInfo.itemId == itemId && shopInfo.sellPrice != 0; }); if (it == shopItemList.end()) { const Container* container = item->getContainer(); if (!container) { return false; } const auto& items = container->getItemList(); return std::any_of(items.begin(), items.end(), [this](const Item* containerItem) { return updateSaleShopList(containerItem); }); } } if (client) { client->sendSaleItemList(shopOwner, shopItemList); } return true; } Next you are going to look for
      uint64_t Player::getMoney() const Now right underneath that function you are going to place these.
      uint64_t Player::getMoney(Npc* npc) const { uint64_t cash; setNpcCurrencyId(npc); uint32_t currencyId = getNpcCurrencyId(); if (currencyId) { int32_t value; getStorageValue(currencyId, value); cash = (uint64_t)value; } else { cash = getMoney(); } return cash; } void Player::setNpcCurrencyId(Npc* npc) const{ currencyId = npc->getCurrencyId(); } uint32_t Player::getNpcCurrencyId() const { return currencyId; }  
      player.h
      Look for this
      uint64_t getMoney() const; Place this right underneath
      uint64_t getMoney(Npc*) const; void setNpcCurrencyId(Npc*) const; uint32_t getNpcCurrencyId() const; Find this
      void sendShop(Npc* npc) const { if (client) { client->sendShop(npc, shopItemList); } } Place this right underneath
      void sendSaleItemList(Npc* npc) const { if (client) { client->sendSaleItemList(npc, shopItemList); } } Find this
      uint32_t manaMax; Place this right underneath
      mutable uint32_t currencyId;  
      protocolgame.cpp
      Now find this function
      void ProtocolGame::sendSaleItemList(const std::list<ShopInfo>& shop) Place this right underneath
      void ProtocolGame::sendSaleItemList(Npc* npc, const std::list<ShopInfo>& shop) { NetworkMessage msg; msg.addByte(0x7B); msg.add<uint64_t>(player->getMoney(npc)); std::map<uint16_t, uint32_t> saleMap; if (shop.size() <= 5) { // For very small shops it's not worth it to create the complete map for (const ShopInfo& shopInfo : shop) { if (shopInfo.sellPrice == 0) { continue; } int8_t subtype = -1; const ItemType& itemType = Item::items[shopInfo.itemId]; if (itemType.hasSubType() && !itemType.stackable) { subtype = (shopInfo.subType == 0 ? -1 : shopInfo.subType); } uint32_t count = player->getItemTypeCount(shopInfo.itemId, subtype); if (count > 0) { saleMap[shopInfo.itemId] = count; } } } else { // Large shop, it's better to get a cached map of all item counts and use it // We need a temporary map since the finished map should only contain items // available in the shop std::map<uint32_t, uint32_t> tempSaleMap; player->getAllItemTypeCount(tempSaleMap); // We must still check manually for the special items that require subtype matches // (That is, fluids such as potions etc., actually these items are very few since // health potions now use their own ID) for (const ShopInfo& shopInfo : shop) { if (shopInfo.sellPrice == 0) { continue; } int8_t subtype = -1; const ItemType& itemType = Item::items[shopInfo.itemId]; if (itemType.hasSubType() && !itemType.stackable) { subtype = (shopInfo.subType == 0 ? -1 : shopInfo.subType); } if (subtype != -1) { uint32_t count; if (!itemType.isFluidContainer() && !itemType.isSplash()) { count = player->getItemTypeCount(shopInfo.itemId, subtype); // This shop item requires extra checks } else { count = subtype; } if (count > 0) { saleMap[shopInfo.itemId] = count; } } else { std::map<uint32_t, uint32_t>::const_iterator findIt = tempSaleMap.find(shopInfo.itemId); if (findIt != tempSaleMap.end() && findIt->second > 0) { saleMap[shopInfo.itemId] = findIt->second; } } } } uint8_t itemsToSend = std::min<size_t>(saleMap.size(), std::numeric_limits<uint8_t>::max()); msg.addByte(itemsToSend); uint8_t i = 0; for (std::map<uint16_t, uint32_t>::const_iterator it = saleMap.begin(); i < itemsToSend; ++it, ++i) { msg.addItemId(it->first); msg.addByte(std::min<uint32_t>(it->second, std::numeric_limits<uint8_t>::max())); } writeToOutputBuffer(msg); }  
      protocolgame.h
      Find this
      void sendSaleItemList(const std::list<ShopInfo>& shop); Place this right underneath
      void sendSaleItemList(Npc* npc, const std::list<ShopInfo>& shop);  
      luascript.cpp
      Find
      int LuaScriptInterface::luaPlayerAddMoney(lua_State* L) Replace that whole function with this
      int LuaScriptInterface::luaPlayerAddMoney(lua_State* L) { // player:addMoney(money[, currencyId]) uint64_t money = getNumber<uint64_t>(L, 2); uint32_t currencyId = getNumber<uint32_t>(L, 3); Player* player = getUserdata<Player>(L, 1); if (player) { if (currencyId) { int32_t value; player->getStorageValue(currencyId, value); player->addStorageValue(currencyId, value + money); } else { g_game.addMoney(player, money); } pushBoolean(L, true); } else { lua_pushnil(L); } return 1; } Next find this function which should be right below it.
      int LuaScriptInterface::luaPlayerRemoveMoney(lua_State* L) Replace that whole function with this
      int LuaScriptInterface::luaPlayerRemoveMoney(lua_State* L) { // player:removeMoney(money[, currencyId]) Player* player = getUserdata<Player>(L, 1); if (player) { uint64_t money = getNumber<uint64_t>(L, 2); uint32_t currencyId = getNumber<uint32_t>(L, 3); if (currencyId) { int32_t value; player->getStorageValue(currencyId, value); if (value < money) { pushBoolean(L, false); return 1; } player->addStorageValue(currencyId, value - money); pushBoolean(L, true); } else { pushBoolean(L, g_game.removeMoney(player, money)); } } else { lua_pushnil(L); } return 1; }  
    • Por GuiAmaro
      ,
       
      Download: Clique Aqui
      Scan: Clique Aqui
      Descrição: Ilha completinha para vocês galera os que quiserem acompanhar o show-off do Mapa segue o video abaixo. Gosto de criar um mapa depois de forjar um RPG curto sobre o local para despertar mais criatividade na hora de criar os locais e nesta cidade eu me baseei na história de Moisés e as 10 pragas do Egito do livro Êxodo da Bíblia onde as caves são locais devastado por um poder Divino que castigou seres que adoravam coisas que não importavam e traziam desgraça aos locais e as pessoas boas que habitavam a Ilha, e o castigo levou tudo isso que danificava o lado bom da ilha ao subsolo dela e o que era bom e gracioso ficou na parte do térreo da Ilha. Eu dei referência a duas das 10 pragas do Egito em um andar e é representada pela praga que torno as águas do Egito em sangue e no andar abaixo o minimap desenha uma Rã que foi uma das pragas que caiu sobre a nação de Ramsés II. 
       
      Acompanhem o video, se puderem compartilhem com os amigos de vocês que se interessem por mapas únicos. Fiz o mapa do zero durante 1 mês nas minhas horas vagas. Dentro do canal vocês encontrarão vídeos de como eu mapeio, outra cidade e uma hunt, quem quiser se inscrever para acompanhar meus conteúdos agradeço. Ficaria mais grato ainda se vocês curtirem e compartilharem o video em outras comunidades que não tenho acesso. Mapeio tem 10 anos e quero enriquecer bastante a área de mapping da comunidade.
       
      REPORTEM BUGS
       

       
       

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo