Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Tópico aprovado e movido a área correta, obrigado por compartilhar.

Você recebeu um REP pela contribuição.

Link para o post
Compartilhar em outros sites

Boa tarde DkAngel83 ...

Eu to olhando aqui, adicionei todas as scripts e parece estar funcionando perfeitamente, porem mesmo nos itens iniciais como arrow por exemplo, fala que preciso de Basic Smithing 10 e fala que tenho (-1) ...

E eu nao tenho Smithing como skill, ou nao peguei, sei la, como eu faço isso? 

Tem uma msg na Window desta forma ( No Specialty training ), como se eu nao tivesse ainda, como eu pego ela ou adiciono? s2

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

Conheça agora os planos e preços da TKS Host.

Qualidade e Preço Justo!

 

www.tkshost.com

Link para o post
Compartilhar em outros sites

Se esta aparecendo -1 você deve ter feito algo diferente, ou está usando uam versão diferente da proposta, ou esta com algo faltando.. eu testei o sistema em tfs 1.2.. TODAS as opções, e foi testado também em 1.1 sem erro algum... em outro fórum 2 pessoas relataram erros (por pm ou no topico) e o erro foi falta de atenção em fazer a 'instalação' 

 

Não sei como prestar ajuda por isso antes de trazer fiz questão de testar para ter certeza de que não haveria erro..

 

Como eu disse paraa outra pessoa, preste um pouco de atenção na hora em que fez a cópia dos códigos, na hora que colou, talvez seu server tenha algo que esta em conflito ou alguma feature missing.. 

 

Desculpa não poder ajudar de forma ativa.. oq posso dizer e reiterar é que o sistema esta livre de falhas.. alchemy quando crafting.. os erros relatados agora foram resolvidos quando as pessoas refizeram todo o caminho prestando mais atenção e uma delas refez usando um server zerado pois ja estava com outros sistemas.. que acabaram 'conflitando' apesar de não gerar erro no console..

Peço a mesma coisa a você :)

Link para o post
Compartilhar em outros sites
  • 1 month later...

Da um erro no meu servidor, o erro é esse -> No valid type for creature event: modal window

Poderia me ajudar?

Link para o post
Compartilhar em outros sites
  • 3 weeks later...

Da um erro no meu servidor, o erro é esse -> No valid type for creature event: modal window

Poderia me ajudar?

 

 

bump  

 

TFS 0.4

Link para o post
Compartilhar em outros sites

O sistema funciona apenas em TFS1.1 +, pois precisa da modal window que só tem nessas versões do TFS.

Link para o post
Compartilhar em outros sites
  • 1 year later...

desculpe reviver o topico, porem aqui nao esta expandindo quando se clica em 1 item...
das.png.9f6c51463fc4a90714b6eb16dc732996.png

eu clico expand e simplesmente fecha o quadrado

Link para o post
Compartilhar em outros sites
  • 1 month later...
  • 4 years later...
function onSay(player, words, param)
        for i = 40000, 40012 do
            player:setStorageValue(i, 10)
            player:setStorageValue(i + 1000, 0)
        end
end

 

Para quem tiver problemas que a skill sai em -1 ou não sai, deixo esta talkaction, você coloca o comando que quiser. isso ativará todas as habilidades com 10

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 Goddess Freya
      OI, TUDO BOM??
      Queria te mostrar um servidor que jogo há um tempão já, o Everdale!

      Everdale é um servidor TOTALMENTE CUSTOM, feito DO ZERO e que ja está online há 4 ANOS, em constante desenvolvimento e com updates cada vez mais incríveis
      O objetivo é providenciar um servidor de 1x exp, em um ambiente NO PAY TO WIN.

      A conta Premium só inclui caraterísticas de qualidade de vida tais como auto-loot, casas, outfits e mais algumas coisas
       
      Site para você se registrar:
      https://everdale.net/register.php?referral=RnJleWE=
       
      /\ esse link faz parte do programa de referencia, em que você ganha prêmios assim que seus amigos alcançam o nível 50, se usarem seu código de referencia...)
       
      Se qusier saber mais, já entra no nosso grupo do Discord:
      https://discord.gg/YR5bUWuk
       
      Em Everdale, temos 7 classes:
      - Assassin O verdadeiro ninja, usa 2 espadas de uma mão, causa sangramento e cria clones igual ao Naruto! XD.
      - Berserker: A maquina de destruição perfeita. aniquile seus inimigos com uma arma de duas mãos e golpes pesados!
      - Priest O melhor curador de todo o continente, com buffs excelentes para o time e o pesadelo de qualquer morto-vivo.
      - Ranger: Legolas ou Robin Hood, você pode escolher qual deles você quer ser! Mate os inimigos a longa distancia! 
      - Templar: O grande e sagrado cavaleiro, capaz de repelir ataques e com grande poder de cura. O segundo maior pesadelo dos morto-vivos.
      - Summoner: Para que lutar se um exército pode lutar por você?! Se você deseja isso, essa é a classe perfeita pra você
      - Wizard: O elementalista: controla fogo, gelo e raio, com grande poder mental e magias destrutivas em área!
       
      PROFISSÕES NO JOGO:
      Mining: Mineração de vários tipos de minérios, usados para muitos tipos de crafting
      Herbalism: Colete flores ao redor de florestas no mapa, usado para craftar potions e buffs
      Skinning: ARRANQUE a cabeleira dos dragões que você matar, além de outros mobs usado para craftings também.
      Cada personagem pode ter 2x profissões nesse momento:
      *Armorcrafting - A arte de fazer armaduras 
      *Weaponcrafting - A arte blabláblá de fazer armas
      *Enchanting - Aqui tem coisa boa e nova. Permite você criar encantamentos poderosos para colocar nos teus itens e dar status extras...
      *Jewelcrafting - Craft de anéis, amuletos... (será você o próximo Senhor dos anéis?) kkk zueira...
      *Alchemy - Permite você criar poções, buffs, etc...

      +Sistemas:
      Mysteriandos (quests secretas e difíceis de serem encontradas, com recompensas realmente ÚNICAS, espalhadas pelo mapa)
      Sistema de Dungeon: Sozinho ou em grupo, excelente para obter novos itens e reputação...
      Sistema de Task diaria: Excelente pra farmar, aumentar skill, etc...
       
      Outras coisinhas:
      Axe, Sword e Club se tornaram Melee Skill
      Sistema de reputação nas cidades - Ao aumentar a reputação, obtém melhores preços com os vendedores e mais itens para trocar, além de desbloquear missões e aumentares o número de missões diárias.
      Missões diárias - Completas estas missões para aumentar a tua reputação numa cidade.
      Sistema de auto-loot (isso sim é vida!)
      Itens editados e únicos!

      Sistema de raridade de itens (itens podem vir com status diferentes e poderosos, de acordo com a força do item)
      As raridades são: Common, Uncommon, Rare e Epic.
       
      Esperamos que você se divirta muito e não hesite em deixar comentários ou sugestões.
      Gostaríamos de continuar desenvolvendo o jogo com base em seus comentários para criar um ótimo servidor.
       
      Um agradecimento, God Pox (dono do server) e Freya (jogadora mais antiga, antiga tutora também).
       
       











    • Por DarkrestOnline
      Desencadeie o futuro em 15 de setembro de 2023 às 19:00 CEST, quando lançamos nosso servidor, destinado a redefinir os domínios de desempenho, aventura e PvP.
      19:00 CEST | 18:00 WEST | 02:00 PM GMT-3 | 10:00 AM PDT
       
      -
       
       
       
      Website: https://darkrest.online
       
      Lembra-se da emoção de se aventurar no mundo clássico de Tibia? O entusiasmo de cada nível ganho, o desespero por cada derrota árdua e a camaradagem com sua guilda? Nosso objetivo é trazer essa sensação de volta, mas com um toque novo. É por isso que o chamamos de "Nostalgia Redefinida".
       
      Informações do Servidor
      Exp: x2 (Rookgaard x6) Habilidade: x2 Mágica: x1 Saque: x1 Host: Canadá + Proxy para EU Renascimento: +35% maior que no vanilla 7.4  
      Estamos comprometidos em tornar este um servidor sem wipes a longo prazo. O motivo para as taxas mais baixas é justamente incentivar um ambiente de jogo estável e duradouro. Nosso servidor é projetado para ser um RPG difícil, mas com um forte ênfase em PVP. Prepare-se para uma experiência de jogo que testará suas habilidades, estratégia e trabalho em equipe.
       
       
       
      Novos Recursos
      Sistema de Criação Raridade e Bônus Sistema de Tarefas Personalizadas Coleta Novas Vocações e Magias O respawn não pode ser bloqueado Lanças e pequenas pedras aparecem no chão e têm 3% de chance de quebra  
       
      Política de Zero Tolerância para Bots, Macros e MC
      Temos uma política estrita de tolerância zero para trapaças, uso de bots e macros. Violar essas regras resultará em banimento permanente de todas as contas associadas ao indivíduo ofensor.
      Website: https://darkrest.online
       
      Informações Geek
      - Testamos nosso servidor com um total de 134 contas registradas durante a fase de teste e 183 jogadores.
      - Completamos 290 tarefas (cartões estilo Jira) com melhorias de desempenho, mudanças de equilíbrio, correções de bugs e novos recursos.
      - Reescrevemos completamente o salvamento de casas, a busca de caminhos (multithread), NPCs e melhoramos a IA dos monstros.
      Website: https://darkrest.online
       
    • 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 DeCarvalho
      Bem procurei aqui na comunidade um VIP System mais informativo e nada, além de ter tido problema com os que estão aqui e acabei achando em outro lugar um que funcionou perfeitamente para mim.
       
      Usando tfs disponibilizado neste tópico http://www.tibiaking.com/forum/topic/53099-1078-tfs-12-cast-system-novos-outfits-mounts/
       
      Só estou trazendo o conteúdo e por não conhecer bem não posso dar suporte mas do jeito que está é só 'instalar' e vai funcionar.
       
      Creditos.: Summ
       
      Sistema Vip
       



       
      Talkaction !checkvip para todos os players
       



       
      Talkaction /vip para membros da staff
      - /vip adddays, NomedoPlayer, 5 --> Adiciona 5 dias vip para o Player. - /vip removedays, NomedoPlayer, 5 --> Remove 5 dias vip do Player. - /vip remove, PlayerName --> Remove todos os dias vip do Player. - /vip check, NomedoPlayer --> Checa quantos dias vip o Player tem. - /vip addinfinite, NomedoPlayer --> Adiciona tempo vip infinito para o Player.


       
      Tiles VIP



       
      Portas VIP / Actions



       
      Items que adicionam dias VIP
      ItemId 10135 adiciona 10 dias vip. ItemId 10134 adiciona 30 dias vip. ItemId 10133 adiciona 90 dias vip.


       
      Imagens
       
      Comando !checkvip mas sem ter vip



       
      Comando /vip adddays, dracoknight, 5



       
      Comando !checkvip após adicionar 5 dias



       
      Comando /vip addinfinite, dracoknight



       
      Comando !checkvip após usar infinite 



       
      Comando /vip remove, dracoknight



    • Por Diego767
      Boa tarde, nao sei se estou no lugar certo para fazer a pergunta, mas vamos tentar...
      Meu ot esta rodando bem, porem os itens e monstros mais novos nao tem (cobra sword, terra helmet, e nem os monstros que dropam isso)
      O que eu poderia fazer para add eles, os itens e os monstros? 
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo