Ir para conteúdo

Mateus Robeerto

Héroi
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Olá amigos da Comunidade Tibiaking venho trazer a vocês este tutorial de como compilar o TFS v1.0 em windows 32 or 64 bits com Microsoft Visual Studio 2013 (Obs: Eu uso a 2013 Ultimater Recomendo).   Vamos ao tutorial >>   1) Primeito baixe os programas abaixo se não tiver claro:   MSVS 2013 >> Click Here http://www.visualstudio.com/downloads/download-visual-studio-vs   Agora baixar os Programas do TFS v1.0:   TFS Sdk >> Click Here - Link 2: (Mirror)
      Source Do TFS v1.0 >> Click Here
      Atenção Baixe apenas a Boost da versão do Pc 32 or 64 Bits.   Boost MSVS 2013 32Bits >> Click Here
      Boost MSVS 2013 64Bits >> Click Here
      2) Agora vamos começar a instalar os Programs do TFS v1.0 >> Primeiro instale o Boost 32 or 64Bits No diretorio raiz do seu HD:   Print >>  
      Agora coloque o SDK Extraido na raiz do Seu HD:   Print >>       Faça a mesma coisa com a source do TFS v1.0:   Print>>     Depois de ter feito tudo isso abra a pasta da source e abra a pasta vc12 e siga a print: ( Obs: Você vera Boost32 isso acontece porque na instalação  eu coloquei no diretório como Boost32 (Primeira foto) mas basta você deixar como C:\Boost  ( A letra C:\  Refere-se a letrado do seu HD  ela pode ser D - H - F e Etc... Varia de Pc a Pc.) )   Print >>     Com o Visual Studio (2013 Recomendado) aberto Siga as Prints abaixo:   Click com botão direito no projeto e vá em propriedades:   Print >>     Depois Click em Cofiguration manager:   Print >>   Vamos as explicações: 1 >> Click la Primeiro Quando abrir a caixa com os passos 2-3 and 4 siga-os abaixo >> 2>> Coloque release e só nada mais. 3>> escolha para qual sistema de 32 or 64Bits. (Lembrado que ali e de acordo com a Boost oks. ) 4>> Só Click lá quando terminar de fazer os passos acima. Rsrs.] ------------------------------------|||||------------------------------- 3) Terceira parte Passos 1 do tutorial vamos lá >> Primeiro agora depois de fazer os passos anteriores faça os seguintes passos Click em C/C++ >>> General e siga a Print:   Print>>     Caso você não entendeu siga as explicações: Vamos as explicações: 1>> Onde você Deve clicar C/C++ >> General. 2>> Click onde a seta esta apontado e click em edit ou de dois clicks. 3>> Quando abrir a caixa de dialogo  deixe os diretórios iguais ao da foto e de um Ok. ( Obs: Você vera Boost32 isso acontece porque na instalação  eu coloquei no diretório como Boost32 (Primeira foto) mas basta você deixar como C:\Boost )   Terceira parte passo 2 Click em Linker >> General e siga  as Prints >>   Prints >>     Vamos as explicações: 1>> Onde você deve Clicar depois de fazer os passos anteriores da terceira parte passos 1. Oks. 2>> igual ao passo 2 da parte 1 da terceira parte só que mais explicativo. 3>> Click em Edit e espere abrir a caixa de Dialogo siga a Print 2.   Print 2>>     Deixe igual a caixa de dialogo  onde esta marcado com o 1 Grande Oks. Depois basta da um OK e um Apply e Ok e esperar aparecer Ready >>    
      Print>>     Explicações: 1>> Esperar o Ready. 2>> Click com o botão direito no projeto e depois em BuilD.            Basta Esperar terminar a compilação e Pronto.            Caso o tutorial não tenha sido bem explicativo Posso melhorá-lo a sugestão e depois posto a foto final da compilação Oks.   Se quiser me agradecer eu serei grato pois deu trabalho fazer esse tutorial pois bugo algumas vezes.   Um grande abraço e fiquem com Deus!   Nota: Eu Tenho permissão do autor do tutorial Original em Inglês para criar o post em PT-Br Não e permitido copiar ou reproduzir sem a devida autorização de Dominique120. Não e permitido postar o Faq do mesmo aqui neste tutorial para ver mais informações siga o LINK ou Veja os #créditos.   #Creditos: -------------------///------------------ Dominique120 >> Click aqui para ver o tutorial original  -------------------///-------------------- ZORAN  >> Click aqui para ver o meu perfil
  2. Gostei
    Olá galera, esse topico agora será destinado para o Otg Server, se trata de uma base limpa, sem global map / scripts, totalmente clean/limpa para o publico que deseja uma base boa para fazer algo proprio custom e ter features importantes como Prey, Imbuements, Store in game, Reward Daily e diversas otimizações. projeto aberto no github para todos colaborarem. Estamos adicionando em uma branch separada features para Otcv8 / Menah, no qual você contará com wings, aura e shaders.
     
    Segue uma imagem do que você encontrará aqui:

     
    Agradecer ao @Mateus Robeerto pela ajuda que está dando, trazendo grandes contribuições para todos repositorios da Otg Server.
  3. Curtir
    @Johncore Anima dar uma atualizada nessa bagaça ?
  4. Gostei
    Antes de mais nada, você precisa saber que o revscriptsys é compatível apenas com:
    TFS 1.3+. Canary. OTX 5, que foi criado usando como base o TFS 1.3 e OTG-Global.
    O revscriptsys é uma nova forma de registrar scripts para que você não precise fazer isso via XML (apenas em Lua). Você só precisa colocar seus scripts Lua dentro de "data/scripts/" ou em qualquer subpasta dele, se desejar. Os scripts de monstro são colocados em um caminho diferente: data/monster também sendo possível colocar em qualquer subpasta e organizar como você bem entender.
    Este sistema suporta o uso de diferentes metatables no mesmo script (Actions, MoveEvents, GlobalEvents... Etc). Isso é muito útil se você fizer missões prolongadas (por exemplo), não necessitando criar arquivos separados para cada metatable. O script deve conter um cabeçalho e rodapé, confirme mostrado no exemplo a seguir.
     
    -- Este é o nosso cabeçalho, é a primeira coisa que deve ser colocada, com exceção das variáveis de configuração local testAction = Action() -- Aqui, nós registramos a action na função onUse, se você esquecer de declarar a variável testAction aqui, o script não funcionará function testAction.onUse(player, item, fromPosition, target, toPosition, isHotkey) return print("We used this item: " .. item.itemid ..".) end -- Aqui você registra o id do item testAction:id(2550) -- Este é o rodapé, deve sempre ser a última função registrada testAction:register() -- Movement local testMovement = MoveEvent() function testMovement.onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end print(player:getName(), item:getId(), item:getName()) return true end testMovement:id(426) testMovement:register()  
    No exemplo acima, temos uma Action e um MoveEvent dentro do mesmo script, lembra da introdução?
    O revscriptsys suporta o uso de diferentes metatables no mesmo script.

    O "testAction" é uma variável (local), o que significa que você pode mudar ele para qualquer outro nome do seu gosto, por exemplo:
    local scythe = Action() Fazendo isso, você também precisa modificar a variável que fica na linha do function, ficando assim:
    function scythe.onUse(player, item, fromPosition, target, toPosition, isHotkey) Também precisa modificar a variável do "id", ficando assim:
    scythe:id(2550) E a do register, ficando assim:
    scythe:register() Conclusão agora não é necessário mais registrar via xml você tem as tags de registro com base no nome da função no próprio script lua
    ilocal scythe = Action() NOME DA FUNÇÂO + Modulo action nesse caso.
    function scythe.onUse(player, item, fromPosition, target, toPosition, isHotkey)  Função scythe declarada com modulo Action sendo usado na função onUse. 
    scythe:id(2550) Registro do ITEMID
    scythe:register() Registro Do EVENTO

    Então repare que agora nos scripts sempre no inicio você vai ter o nome da função que esta sendo declarada junto do modulo e no final os tipos de registros atrelado a função.
  5. Gostei
    Aqui ja deu uma melhorada kkkkk
     
     
  6. Gostei
    Using onStatsChange in TFS 1.x? That's completely incorrect — the proper way is to use onHealthChange and onManaChange.
    However, there is an alternative that doesn't require using two separate functions. It's working — I did it for OTG Global. Take a look at this:
    https://github.com/otg-br/global-11x/blob/main/data/scripts/custom_system_event/boosted_creature_system_full.lua#L192
     
     
    @Under, dá uma olhada nesse sistema. O que eu fiz é bem diferente do seu, mas está funcionando 100%.
    Ele exibe monstros como estátuas, mostra informações de boost, porcentagem de XP e loot. Também envia mensagens com essas informações ao logar.
    Além disso, dá pra colocar em um piso com actionID, e quando o jogador pisa, aparece a mensagem ou executa um comando. Tudo está funcionando perfeitamente, inclusive o loot e a experiência.
    Se quiser, fique à vontade para dar uma olhada, adaptar para o seu GitHub ou até tornar público.
  7. Gostei
    Tutorial Completo: Como Adicionar uma Nova Vocação no Canary Server
     
     
     
     
     
    1. Entendendo a Lógica das Vocações
    No servidor Canary, cada vocação representa uma classe de personagem com habilidades, atributos e características específicas. Para que o servidor reconheça uma nova vocação, é necessário:
    - Definir um identificador único (ID);
    - Registrar o ClientID (usado para exibição no cliente);
    - Especificar um BaseID (para herança de características ou evolução);
    - Configurar atributos, fórmulas e habilidades no XML.
     
     
    2. Alterando a Enumeração das Vocações (Código Fonte C++)
    Arquivo: `src/creatures/creatures_definitions.hpp`
    Adicione os novos IDs no enum `Vocation_t`:
     
    enum Vocation_t : uint16_t {     VOCATION_NONE = 0,     VOCATION_SORCERER = 1,     VOCATION_DRUID = 2,     VOCATION_PALADIN = 3,     VOCATION_KNIGHT = 4,     VOCATION_MASTER_SORCERER = 5,     VOCATION_ELDER_DRUID = 6,     VOCATION_ROYAL_PALADIN = 7,     VOCATION_ELITE_KNIGHT = 8,     VOCATION_WARRIOR = 9,     VOCATION_ELITE_WARRIOR = 10,     VOCATION_LAST = VOCATION_ELITE_WARRIOR };  
     
     
     
     
    3. Atualizando o Script de Vocações (Lua)
    Arquivo: `data/libs/vocation.lua`
    Adicione os novos valores nas três seções do objeto `VOCATION`:
     
    VOCATION = {     ID = {         WARRIOR = 9,         ELITE_WARRIOR = 10,         ...     },     CLIENT_ID = {         WARRIOR = 0,         ELITE_WARRIOR = 0,         ...     },     BASE_ID = {         WARRIOR = 5,         ...     } }  
     
     
     
     
    4. Criando Função de Verificação da Nova Vocação
    Arquivo: `data/libs/functions/player.lua`
    Adicione a seguinte função no final do arquivo:
     
    function Player.isWarrior(self)     return table.contains({VOCATION.ID.WARRIOR, VOCATION.ID.ELITE_WARRIOR}, self:getVocation():getId()) end  
     
     
     
     
    5. Configurando as Vocações no XML
    Arquivo: `data/XML/vocations.xml`
    Adicione o bloco de cada nova vocação com os atributos desejados:
     
    <vocation id="9" clientid="0" baseid="5" name="Warrior" description="a warrior"   magicshield="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="4000"   gainhpamount="1" gainmanaticks="6000" gainmanaamount="2" manamultiplier="3.0"   attackspeed="2000" basespeed="110" soulmax="200" gainsoulticks="15000" fromvoc="5">     <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" />     <skill id="0" multiplier="1.1" />     <skill id="1" multiplier="1.1" />     <skill id="2" multiplier="1.1" />     <skill id="3" multiplier="1.1" />     <skill id="4" multiplier="1.4" />     <skill id="5" multiplier="1.1" />     <skill id="6" multiplier="1.1" /> </vocation> <vocation id="10" clientid="0" baseid="6" name="Elite Warrior" description="an elite warrior"   magicshield="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="4000"   gainhpamount="1" gainmanaticks="6000" gainmanaamount="2" manamultiplier="3.0"   attackspeed="2000" basespeed="110" soulmax="200" gainsoulticks="15000" fromvoc="5">     <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" />     <skill id="0" multiplier="1.1" />     <skill id="1" multiplier="1.1" />     <skill id="2" multiplier="1.1" />     <skill id="3" multiplier="1.1" />     <skill id="4" multiplier="1.4" />     <skill id="5" multiplier="1.1" />     <skill id="6" multiplier="1.1" /> </vocation>  
     
     
     
     
    6. Compilando o Servidor
    Após todas as alterações, é obrigatório recompilar o servidor para que as novas vocações sejam reconhecidas corretamente.
     
     
     
    Conclusão:
     
    Ao seguir todos os passos, suas novas vocações estarão totalmente integradas ao servidor. Você poderá usá-las para personagens.
     
     
  8. Gostei
    Vi que muitas pessoas estão reclamando e que não funciona, bugs, erros no console, etc. Então, resolvi baixar a base do Thunder feita por MovieBr, atualizei do TFS 1.3 para o TFS 1.5 e corrigi cerca de 80% dos problemas. No entanto, ainda não consigo encontrar alguns bugs. Quem encontrar os bugs pode me relatar pelo Discord: 82mateusroberto. Dependendo do meu dia, pode levar alguns dias para eu responder e corrigir ou não. Acredito que vocês conseguem corrigir os erros, apenas precisam aprender a consertá-los. Não é difícil. Aproveitem para usar como base do seu mapa ou mesmo do projeto Thunder futuramente! Seguem as imagens que mostram a implementação de montaria e modal widow.
     
    Obs: Alguns mapas/cavernas podem estar vazios por falta de adição. Eu não tinha boas ideias para adicionar, mas vocês podem adicionar ao seu gosto. Tenham uma boa utilização e sucesso com o projeto no futuro!
     
    https://www.mediafire.com/file/0jtn2slt2j67666/baiakthunder-master.rar/file
    https://www.mediafire.com/file/bougg0q6dlpu2fq/tfs+1.5+source.rar/file
    https://www.mediafire.com/file/yq1s63xo6np9v53/860.rar/file
     
    Este servidor só usa o OtClient. Abra o arquivo otclient/modules/game_feature/feature.lua e procure por esta linha.
    if (versão >= 860) then adicione abaixo e salve.. pronto
    g_game.enableFeature(GamePlayerMounts)  
     
    Aqui estão os GIFs
    https://imgur.com/UGdQoSS
    https://imgur.com/OwJ4hpp
    https://imgur.com/7sN1MaJ
     
     
     
    Para quem deseja usar uma gamestore personalizada, há uma disponível para TFS 1.5 e 8.6. Já a compartilhei há alguns dias. Dê uma olhada aqui.
     
     
  9. Gostei
    Para aqueles que estão interessados em adotar a base do Nekiro, gostaria de anunciar que as montarias e a modal widow agora estão disponíveis. Se você deseja implementar sistemas como o de crafting com modal e outros recursos, sinta-se à vontade para fazer o download e testar.
    É importante observar que o Nekiro não incluiu mapas nesta versão. Portanto, será necessário migrar seus próprios mapas para o TFS 1.5 8.6. Alternativamente, você pode considerar utilizar a base do Luciano, conhecida como STYLLER OT. Após realizar testes, posso confirmar que essa é uma opção bastante interessante. Esta versão já está completa, permitindo que você utilize seus próprios mapas sem dificuldades significativas.
    Além disso, estou disponibilizando os sprites no formato 13x para a versão 8.6, juntamente com os arquivos items.otb e XML. Quanto à correção de eventuais erros, isso fica a seu critério, mas gostaria de ressaltar que não é uma tarefa difícil de realizar.
     
    É com satisfação que compartilho que a source está agora disponível para acesso público. Caso você deseje, pode realizar atualizações através dos commits. Estou preparando uma lista abrangente de atualizações necessárias, pois há muitas modificações a serem feitas.
    Para acessar a source, por favor, clique no link abaixo:
    https://www.mediafire.com/file/0680a4b624163pd/TFS-1.5-Downgrades-8.60.rar/file
     
    Dentro da SRC que implementei, você encontrará os seguintes recursos:
    Sistema de Montaria: Agora você pode adicionar essa funcionalidade ao seu servidor.
    Modal Window: Esta é uma janela modal, proporcionando uma experiência mais interativa para os jogadores.
     
    Custom Attributes(Boost e Relfect:: https://github.com/otland/forgottenserver/pull/2807/commits/18f5afa52a36a02ea56dae97b29e683233d15c25.
     
    Além disso, gostaria de compartilhar três repositórios no GitHub que podem ser valiosos para você. Três deles são mantidos pelos usuários @Movie e @ralke23 e a Sarah (MillhioreBT). Esses repositórios contêm recursos e scripts úteis que podem aprimorar a experiência do seu servidor. Sinta-se à vontade para explorar e utilizar esses recursos conforme necessário.
    https://github.com/moviebr/TFS-1.5-Downgrades
    https://github.com/ralke23/Greed-TFS-1.5-Downgrades
    https://github.com/MillhioreBT/forgottenserver-downgrade
     
    Para os interessados nos sprites 13x para a versão 8.6, estou disponibilizando o link para download abaixo:
    https://mega.nz/folder/5FQEnT4R#pAbmAAhpBhmcP1jaVkXm8Q
     
    Recomendo também o uso do ObjectBuilder_0_5_5-dev para facilitar o processo:
    https://github.com/punkice3407/ObjectBuilder/releases/tag/v0.5.5
     
    Para aqueles que enfrentam dificuldades na compilação do executável, estou disponibilizando um arquivo para download que pode ajudar:
    https://www.mediafire.com/file/cxirgq7n1cm2p3i/dlls+e+exe.rar/file
     
     
    Quanto à ativação do sistema de montarias via OTClient, basta acessar o arquivo game_features/features.lua e localizar a linha: 'if(version >= 860) then!' e adicionar abaixo 'g_game.enableFeature(GamePlayerMounts)'.
     
    É necessário baixar ambos os arquivos, mounts.xml e outfits.xml, para que o OtClient funcione corretamente. Sem esses arquivos, o cliente pode apresentar bugs ou até mesmo crashar sozinho. É obrigatório o uso desses arquivos. Basta fazer o download e colocá-los na base do Luciano. Basta ir até a pasta data/xml e inserir os arquivos lá. Se você estiver usando seu próprio mapa, os arquivos são igualmente necessários, independentemente de suas preferências.
    outfits.xml
    mounts.xml
     

    ATENÇÃO: Sobre a base do Luciano ou do Nekiro downgrade que você baixou (schemas.sql), ela está totalmente limpa, sem implementações adicionais. Cabe a você implementar por conta própria. Por exemplo, se você for usar o Znote, ele solicitará o esquema e as colunas necessárias. Isso não são erros, são apenas avisos. Você deve procurar pelas colunas necessárias e inseri-las para que funcione corretamente. Isso não é difícil de fazer.
    https://github.com/slawkens/myaac
    https://github.com/gesior/Gesior2012
    https://github.com/Znote/ZnoteAAC/tree/v2
     
     
    Antes de prosseguir com o download, sugiro que realize uma verificação de vírus nos arquivos. Seguem os links para o scan:
     
    Scan da SRC
    https://www.virustotal.com/gui/file/1364b14cab10a34ca7102d3581e427396f8224cc5156d6bc3859b4ebcb155de6?nocache=1
    Scan das DLLs e Executável
    https://www.virustotal.com/gui/file/603c853dbd5b40ff21b0b0004c129e5039c9954277da22722b2980fcbfcbe0ce?nocache=1
     
    IMPORTANTE: Por favor, note que a funcionalidade de montaria e janela modal não está disponível para versão old do client (CipSoft). Infelizmente, não estou oferecendo suporte para essas versões no momento. No entanto, é possível adquirir uma DLL especial que pode ser injetada no client old (CipSoft) para habilitar essas funcionalidades. Caso esteja interessado, conheço um vendedor confiável que oferece essa DLL. Para mais informações, por favor, entre em contato através do Discord: Sharingan.
  10. Curtir
    Gostaria de saber se é possível fazer isso também no Gesior?
  11. Gostei
    Mateus Robeerto deu reputação a Fabi Marzan em Gesior - Baiak-PvP 2020   
    Pra quem tem esse problema:
     
    Warning: parse_ini_file(cache/DONT_EDIT_serverstatus.txt) [function.parse-ini-file]: failed to open stream: No such file or directory in C:\xampp\htdocs\system\load.compat.php on line 750 Warning: fopen(cache/DONT_EDIT_serverstatus.txt) [function.fopen]: failed to open stream: No such file or directory in C:\xampp\htdocs\system\load.compat.php on line 772 Warning: rewind() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\system\load.compat.php on line 779 Warning: fwrite() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\system\load.compat.php on line 780 Warning: fclose() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\system\load.compat.php on line 781 Warning: fopen(cache/DONT_EDIT_usercounter.txt) [function.fopen]: failed to open stream: No such file or directory in C:\xampp\htdocs\system\load.compat.php on line 798 Warning: fputs() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\system\load.compat.php on line 800 Warning: fclose() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\system\load.compat.php on line 801  
    basta ir em htdocs/config: 
    Dentro você encontrará uma pasta chamada Cache, mova essa pasta para fora da config e restar a página e isso será resolvido.
     
    Outro problema:

     
    Você tem que ir para config.php e procurar por esta linha
    $config['site']['google_captcha_enabled'] = true; mude para false
     
     
     
  12. Gostei
    Mateus Robeerto deu reputação a Under em [7.72] TFS Nekiro Downgrade Full Setup (Video)   
    Hey bro i love the video, i think you should add some Enligh documentation also on topic based on your steps in the video ( that will enable more users follow your tutorial)
    I'm almost 100% sure there is an free ia service to do text based on video then ask GPT to create a topic and BAM update it here!
    Great Content!
  13. Gostei
    Apresentando o Tibia-IA: A IA para Desenvolvimento de Servidores Tibia! 
     O que é o Tibia-IA?
    Um modelo de IA especializado para Tibia! Ele está atualmente em teste gratuito, e eu adoraria que vocês o experimentassem. Basta acessar https://ai.tibiaking.com, criar uma conta e começar a usar totalmente de graça! 
     Versão Experimental Fechada
    Atualmente, algumas funcionalidades ainda estão em desenvolvimento. No momento, apenas a geração de scripts está disponível para o público.
    Se encontrarem qualquer problema nos scripts gerados, me avisem! Vamos juntos construir a IA mais poderosa para ajudar no desenvolvimento de servidores Tibia!  
    Contato direto discord : underewar
     Acesse agora: https://ai.tibiaking.com
     Como funciona?
     Geração automática de scripts LUA para TFS  Suporte a diferentes eventos, criaturas, NPCs, magias, etc.  Ferramenta em constante evolução para aprimorar o desenvolvimento Novidades em breve confira no site. O acesso ao Tibia-IA está disponível para testes GRATUITOS! Até dia 05/05/2025
    Basta criar uma conta em: https://ai.tibiaking.com
    Utilize a IA para gerar seus scripts de forma simples e rápida
    Envie feedbacks para ajudarmos a tornar a ferramenta ainda melhor!

    Problemas relatar diretamente no meu discord pessoal : underewar
     



  14. Obrigado
    Mateus Robeerto recebeu reputação de Erimyth em TFS 1.4+ Guild System – Classic Style!   
    Eu estava trabalhando neste sistema apenas por diversão, mas acabei gostando muito dele. Quem se lembra dos velhos dias do TFS 0.x, 0.3.6 e 0.4, quando você podia usar o comando !create guild name para convidar outros jogadores? Bons tempos!

    Decidi compartilhá-lo com a comunidade tibiaking. Está funcionando e foi testado na versão 1.4.2 (build 1098). Acredito que deve funcionar a partir da versão 1.3+ em diante.

    Aqui estão as imagens..
    .Guild_System _ Classic_Style.lua
  15. Haha
    @WakeSoft EU NÃO ACHEI ESSE SISTEMA EM NENHUM FORUM DE TIBIA.
  16. Curtir
    qualquer sistema eh possivel fazer em 8.6
    depende só do client, pode ter algumas limitações no client.

    esse sistema ai parece bem simples, então tem como sim fazer ele no 8.6
    mas vai ser um pouco dificil e demorado, relacionado as mecanicas de como upar o level da guild
  17. Curtir
    Mateus Robeerto recebeu reputação de Rodrigo94 em (Resolvido)Alguem ai tem cliente 8.6 estendido ?   
    Você tem duas opções: pode usar o DLL para ter o client estendido ou, sem o DLL, fazer a alteração no client para ler o cliente estendido. Vou mandar os dois links...
     
     
    ddraw.dll
    SEM DLL.
     
  18. Você Tentou
    Mateus Robeerto deu reputação a mane stick em Estou com um problema com as skillss   
    estou com um problema nas skills, tenho um script de comprar skill
    ek e rp o maximo que era pra ser 350 de skill mas o meu script ta bugado e fica passando o skill fica bugadao,
    o ed e ms ta certinho coloquei limite de ml 200 e ta tudo certo só as skills sword,axe,club,distance,first que estão bugados
     
    é um revscript tfs 1.3 otg
     
     
     
     
  19. Gostei
    Mateus Robeerto recebeu reputação de Black Frost21 em Teleport Problem   
    <!-- StepIn for multiple action IDs leading to the PVP arena --> <movevent event="StepIn" actionid="7400" script="arenaPVP.lua" /> <movevent event="StepIn" actionid="7401" script="arenaPVP.lua" /> <!-- StepIn for returning to the saved position --> <movevent event="StepIn" actionid="7402" script="backsavedposition.lua" />  
    arenaPVP.lua
    function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end -- Save the player's current position to storage local playerPosition = player:getPosition() -- Save the exact X, Y, Z coordinates in player's storage player:setStorageValue(50001, playerPosition.x) -- Save X position player:setStorageValue(50002, playerPosition.y) -- Save Y position player:setStorageValue(50003, playerPosition.z) -- Save Z position -- Teleport the player to the PVP area local pvpPosition = Position(158, 122, 7) -- Coordinates of the PVP area player:teleportTo(pvpPosition) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) -- Send a welcome message player:sendTextMessage(MESSAGE_INFO_DESCR, "Welcome to the PVP area. Fight with honor!") return true end backsavedposition.lua
    function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end -- Retrieve the player's original position from storage local x = player:getStorageValue(50001) local y = player:getStorageValue(50002) local z = player:getStorageValue(50003) -- Check if the position is valid (storage returns -1 if nothing was saved) if x == -1 or y == -1 or z == -1 then player:sendTextMessage(MESSAGE_STATUS_WARNING, "Error: No original position found.") return true end -- Increment Y by 1 to move the player down one tile y = y + 1 -- Create the corrected original position object using the stored values local originalPosition = Position(x, y, z) -- Teleport the player back to their adjusted original position player:teleportTo(originalPosition) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) return true end
  20. Curtir
    Mateus Robeerto deu reputação a Fabi Marzan em Spell Effect na direção que o player esta olhando   
    Imagino que o CONST_ME_SLASH seja igual para todos os direçãos, você teria que criar outro efeito mas para o outro lado
    então você tem que usar
    if creature:getDirection() == DIRECTION_NORTH then
    if creature:getDirection() == DIRECTION_EAST then
    if creature:getDirection() == DIRECTION_SOUTH then
    if creature:getDirection() == DIRECTION_WEST then
  21. Obrigado
    Mateus Robeerto recebeu reputação de L3K0T em (Resolvido)Adicionar para ganhar damage_percent no script reset   
    https://tibiaking.com/forums/topic/111239-reset-system-otx-2/?tab=comments#comment-573049
  22. Obrigado
    Mateus Robeerto recebeu reputação de L3K0T em (Resolvido)Trocar varios items por 1 por avalanva   
    Boa tarde! Fiz um script melhor e bem simples. É possível entender o script, Segue o GIF para ver como ele funciona e foi testado no tfs 0.4, tudo certo. Divirta-se
    function onUse(cid, item, frompos, item2, topos) local playerLocation = getCreaturePosition(cid) local itemData = { {itemId = 2400, x = 722, y = 658, z = 7}, {itemId = 2401, x = 722, y = 657, z = 7}, {itemId = 2376, x = 724, y = 658, z = 7} -- Adicione mais itens para combinação aqui } local newItemId = 2406 -- ID do novo item após a combinação local newItemPosition = {x = 724, y = 657, z = 7} -- Posição para o novo item local foundItems = {} local hasAllItems = true for _, data in ipairs(itemData) do local tileItem = getTileItemById({x = data.x, y = data.y, z = data.z}, data.itemId) if tileItem.uid > 0 then table.insert(foundItems, tileItem.uid) else hasAllItems = false break end end if hasAllItems then for _, uid in ipairs(foundItems) do if not doRemoveItem(uid, 1) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Erro ao remover um dos itens necessários.") return false end end local newItem = doCreateItem(newItemId, 1, newItemPosition) if newItem ~= LUA_ERROR then doSendMagicEffect(newItemPosition, 39) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Erro ao criar o novo item.") return false end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você não possui todos os itens necessários para a combinação.") return false end return true end
    @deza
     

    20231130_150112.mp4
  23. Obrigado
    Mateus Robeerto recebeu reputação de L3K0T em (Resolvido)Adicionar (CHANCE) no script   
    local levels = { [-1] = {itemid = 6541, chance = 10}, [10] = {itemid = 6542, chance = 20}, [20] = {itemid = 6543, chance = 5}, [30] = {itemid = 6544, chance = 30}, [40] = {itemid = 6545, chance = 80}, } local config = { storage = 19333, chance = 1, --- chance de achar um item ou não k = 1, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } local terra = {11787} function getDrops(cid) local drops = {} for i = -1, getPlayerStorageValue(cid, config.storage) do if levels[i] then local item = levels[i].itemid local chance = levels[i].chance if config.chance >= math.random(1, 100) then -- Ajustado para um intervalo de 1 a 100 if math.random(1, 100) <= chance then table.insert(drops, item) end end end end return drops end function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} if isInArray(terra, itemEx.itemid) then drops = getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience) + 1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8 + (getPlayerStorageValue(cid, config.storage) ^ 2)) / config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage) + 1) doPlayerSendTextMessage(cid, 27, "Parabens, voce subiu de nivel! Seu nivel atual e " .. getPlayerStorageValue(cid, config.storage) .. ".") if getPlayerStorageValue(cid, config.storage) == 100 then doPlayerSendTextMessage(cid, 20, "[MINING] --> Por alcancar o nivel " .. getPlayerStorageValue(cid, config.storage) .. " voce foi premiado com o capacete de mineracao.") doPlayerAddItem(cid, 7497, 1, true) end end if config.chance >= math.random(1, 150) then if #drops >= 1 then local item = drops[math.random(1, #drops)] doPlayerSendTextMessage(cid, 27, "[MINING] --> Voce encontrou um(a) " .. getItemNameById(item) .. ".") doSendAnimatedText(toPosition, "Sucesso", 210) doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendAnimatedText(toPosition, "Tack", 215) doSendMagicEffect(toPosition, 2) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "[MINING] --> Seu nivel na mineracao e: [" .. getPlayerStorageValue(cid, config.storage) .. "].") else return false end return true end  
  24. Obrigado
    Mateus Robeerto recebeu reputação de L3K0T em (Resolvido)System DAMAGE   
    local config = { effectonuse = 14, levelsdamage = 100, storagedamage = 14335 } function onUse(cid, item, frompos, item2, topos) local currentDamage = getPlayerStorageValue(cid, config.storagedamage) or 0 if currentDamage < config.levelsdamage then local newDamage = currentDamage + 1 doRemoveItem(item.uid, 1) doSendMagicEffect(topos, config.effectonuse) setPlayerStorageValue(cid, config.storagedamage, newDamage) local message = string.format("Seu damage foi aumentado para [%d/100].", newDamage) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, message) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já atingiu o nível máximo de damage.\nParabéns!!!!") return false end local damage = getPlayerStorageValue(cid, config.storagedamage) or 0 local calculatedDamage = damage * 2.5 -- Fórmula para calcular o damage baseado no valor storage. local finalMessage = string.format('Seu damage atual é: %d', calculatedDamage) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, finalMessage) return true end Se o tópico estiver resolvido, por favor, marque como resolvido e crie outro tópico para suas dúvidas/ajuda, etc. Isso ajuda a evitar scams, já que muitos usuários estão procurando pelo sistema necessário. Pode ficar confuso aqui. É melhor marcar como resolvido e criar outro tópico apenas para suas dúvidas.
  25. Obrigado
    function onLogin(cid) local storageKeys = { 13545, } local alreadyReceived = true for _, storageKey in ipairs(storageKeys) do if getCreatureStorage(cid, storageKey) ~= 1 then alreadyReceived = false break end end if not alreadyReceived then for _, storageKey in ipairs(storageKeys) do if getCreatureStorage(cid, storageKey) ~= 1 then doCreatureSetStorage(cid, storageKey, 1) end end local days = 2 addVipDays(cid, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você recebeu " .. days .. " dias de VIP.") end return true end  

Informação Importante

Confirmação de Termo