Ir para conteúdo
  • Cadastre-se

Movie

Moderador
  • Total de itens

    842
  • Registro em

  • Última visita

  • Dias Ganhos

    19

Histórico de Curtidas

  1. Curtir
    Movie deu reputação a Mateus Robeerto em [8.6] TFS 1.5 Downgrade - Mapa Thunder com montaria e modal widow, apenas OTCLIENT.   
    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.
     
     
  2. Obrigado
    Movie recebeu reputação de Mateus Robeerto em alguem sabe me dizer como funciona desse script? pedra?   
    O Critical funciona através do callback do onHealthChange.
     
    O cálculo é feito através dessa seguinte linha:
    primaryDamage = primaryDamage + math.ceil(primaryDamage * CRITICAL.PERCENT)
     
    Caso queira alterar a fórmula, é aí.
  3. Gostei
    Movie deu reputação a marcoshps11 em Configurando Docker no windows, adeus VM   
    Neste tutorial, irei ensinar configurar o Docker no windows e rodar seu otserver
     
     
    - Diferença entre Docker x Máquina virtual:
      Docker e Máquinas Virtuais (VMs) ambas são fundamentais usadas para isolar recursos em um sistema de computação, mas funcionam de maneiras muito diferentes.
     
      VMs são ambientes de computação completos, incluindo um sistema operacional (SO) completo, que simulam o hardware de um computador físico. Isso significa que cada VM é um sistema autônomo e independente.   Já o Docker, usa a tecnologia de contêineres. Os contêineres compartilham o mesmo sistema operacional do host, mas mantêm seu próprio espaço de processo, arquivos e rede. Isso significa que eles são muito mais leves do que as VMs, pois não precisam de um SO completo, e podem ser iniciados e parados muito mais rapidamente.
    - Vantagens em utilizar o Docker
     O Docker oferece várias vantagens significativas:
    Eficiência de recursos: Como os contêineres Docker compartilham o SO do host, eles são mais leves e usam menos recursos do que as VMs. Portabilidade: O Docker permite que você "construa uma vez, execute em qualquer lugar". Uma vez criado um contêiner Docker, ele pode ser executado em qualquer sistema que suporte o Docker, independentemente das configurações subjacentes. Isolamento: Cada contêiner Docker é isolado do resto do sistema, o que ajuda a evitar conflitos entre diferentes aplicações e versões de software. Integração e entrega contínua: O Docker se integra bem com ferramentas de CI/CD (Integração Contínua / Entrega Contínua), permitindo a automatização de testes e implantação de aplicações. Escalabilidade e Orquestração: O Docker facilita a escalabilidade de aplicações, permitindo que múltiplos contêineres sejam implantados facilmente. Além disso, com ferramentas como Docker Swarm e Kubernetes, a orquestração de contêineres se torna eficiente e gerenciável  
     
    Colocando a mão na massa
     
    Este tutorial será dividido nas seguintes etapas:
    Preparação do Windows Instalando o Docker Instalando imagens mariadb e phpmyadmin Realizando a build da imagem TFS  
    1º PASSO:  Preparando o Windows com o subsistema Linux.
     
    AVISO: Essa Etapa será necessária somente caso ainda não possua o subsistema Linux ativado em seu windows
     
    Os comandos a seguir, serão todos utilizando o POWERSHELL do windows, na barra de pesquisa digite POWERSHELL e execute como administrador.
     

     
    Com o POWERSHELL aberto, execute os seguintes comandos:
     
    Habilitando subsistema Linux:
      dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart  
     
    Habilitando recurso de máquina virtual: dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart  
    Baixe e instale Kernel do Linux:  
    https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
     
    Após essa etapa, será necessário reiniciar o computador para atualização, após reiniciar, abra novamente o PowerShell
     
    Definindo o WSL 2 como padrão: wsl --set-default-version 2  
     
    Após esses passos, basta entrar na Microsoft Store e instalar o sistema Ubuntu:


     
    Após a instalação, abra o Ubuntu, como será a primeira vez, irá solicitar para que digite um nome de usuário e uma senha.

     
     
     
    Etapa 1 concluída.
     
    Fonte: https://learn.microsoft.com/pt-br/windows/wsl/install-manual
     
    2º PASSO:  Instalando Docker.
     
    este é um passo simples, apenas entre no site oficial do Docker, baixe e instale o Docker Desktop

    https://www.docker.com/
     

     
     
    Etapa 2 concluída.
     
     
    3º PASSO:  Instalando imagens MariaDB e phpMyAdmin
     
     Assim como no passo 1, execute novamente o PowerShell como administrador e siga os seguintes passos:
     
    Primeiro vamos baixar as imagens necessárias, execute os seguintes comandos: docker pull mariadb  
    docker pull phpmyadmin/phpmyadmin  
     
    Agora iremos criar uma "Rede" para que o docker se comunique entre os containers que iremos utilizar. Execute o seguinte comando:  
    docker network create mynetwork  
      mynetwork é o nome que defini neste caso, você pode utilizar o nome que achar melhor, porém lembre-se desse nome que iremos utilizar nos próximos passos.
     
    Agora iremos iniciar essas imagens, utilizando os seguintes comandos:  
    docker run --name mariadb --network=mynetwork -e MYSQL_ROOT_PASSWORD=your_password -d mariadb  
    your_password = altere pela senha que deseja utilizar no mysql
    mynetwork = é o nome que criamos no passo anterior
     
    docker run --name myadmin --network=mynetwork --link mariadb:db -d -p 8080:80 phpmyadmin/phpmyadmin  
    Lembrando novamente, mynetwork é o nome criado anteriormente
     
    Após esses passos, será possível ver seu container rodando no Docker Desktop:

     
    Etapa 3 concluída.
     
    4º PASSO:  Gerando Imagem do TFS e configurações necessárias:

     
    Baixe a TFS, nesse exemplo será o repositório oficial https://github.com/otland/forgottenserver Extraia os arquivos após baixar com o container mariadb e phpmyadmin rodando, acesse http://localhost:8080/  com o login root, e a senha que criou no passo 3, crie uma nova base de dados e importe o arquivo schema.sql do servidor edite o arquivo config.lua.dist
     -- MySQL
    mysqlHost = "mariadb"
    mysqlUser = "root"
    mysqlPass = "SUA SENHA CRIADO NO PASSO 3"
    mysqlDatabase = "NOME DA DATABASE"
    mysqlPort = 3306
    mysqlSock = ""

    mariadb é o nome do container que estamos rodando o mysql  
     
    ** Caso queira utilizar todo potencial do seu computador na hora de buildar a TFS, no arquivo Dockerfile, edite a linha 18:
    RUN cmake --preset default && cmake --build --config RelWithDebInfo --preset default para
     
    RUN cmake --preset default && cmake --build --config RelWithDebInfo --preset default -- -j 16  
    onde 16 é o numero de processadores lógicos que deseja ser utilizados, não é necessário utilizar 100% porém quanto mais melhor, porém caso utilize mais do que está disponível poderá travar,  então utilize a quantidade mostrada pra menos.
    no gerenciador de tarefas aba desempenho, é possível visualizar a quantidade de núcleos e processadores lógicos do seu CPU


     
    Após isso, entre no Power Shell e execute o comando:  
    docker build -t server .  
     onde "server" é o nome da imagem que será gerada
     
    Após isso, é só iniciar o servidor com o seguinte comando  
    docker run --name server --network=mynetwork -p 7171:7171 -p 7172:7172 -d server  
    lembrando que mynetwork é o nome que geramos no passo 3, e o ultimo parametro é nome da imagem que geramos anteriormente.
     
    Você poderá ver seu sevidor ronando no Docker Desktop:
     

     
    caso queira parar algum servidor ou iniciar novamente, é só clicar no botão de ação:
     

     
    Caso precise fazer alguma alteração no server, basta utilizar os comandos de build e run citados anteriormente.
     
     
     
     
    Lembrando que isso é um tutorial básico para rodar o servidor na máquina local, qualquer dúvida ou sugestão, deixe comentário.
     
  4. Gostei
    Movie deu reputação a Imperius em [TFS 0.4] SafeZone Event - Adaptação de compatibilidade   
    Olá! Fiz uma adaptação no evento "SafeZone" criado e disponibilizado aqui no TK por @Movie e @luanluciano93.
     
     
    Agora o evento é compatível para TFS 0.4.
     
    IMPORTANTE:  Como mencionado anteriormente, o evento foi criado por "Movie" e "LuanLuciano93". Eu (imperius) APENAS ADAPTEI para funcionar em TFS 0.4. Todos os créditos do evento vão para os criadores originais. Além disso, é importante alertar que esta adaptação não está 100%.
     
    Abaixo está todo o processo explicando como configurar e rodar o evento em seu servidor!
     
     
    Vídeo demonstrativo:
     
     
     
    em data > lib > crie um arquivo chamado safeZone.lua
     
     
     
    data > globalevents > globalevents.xml
     
     
     
    em data > globalevents > scripts > crie um arquivo chamado safeZoneEvent.lua
     
     
     
    data > movements > movements.xml
     
     
     
    em data > movements > scripts > crie um arquivo chamado safeZoneMovement.lua
     
     
     
    por fim, vá até o banco de dados do seu servidor e adicione o seguinte código em "SQL"
     
     
    É isso! Espero ter ajudado o pessoal do TFS 0.4
  5. Obrigado
    Movie deu reputação a amoxicilina em [RevScripts] Action Remover Skull   
    Action: Remover skull
     
     
  6. Gostei
    Movie recebeu reputação de premii em Error ID: Cannot save ItemsList. Player ID not set.   
    Tenta rodar esse SQL na sua database:
    SET GLOBAL sql_mode='';  
  7. Obrigado
    Movie deu reputação a EddyHavoc em Retirar o efeito de sangue nos monstros quando receberem ataque   
    [TUTORIAL] Retirar o efeito de sangue nos monstros quando receberem ataque
    Dependendo do aspecto que você deseja dar ao seu servidor, pode ser que seja necessário retirar alguns efeitos. Na imagem abaixo você pode observar um efeito de respingo de sangue que ocorre quando os monstros levam dano. Pode ser interessante retirar este efeito em determinadas propostas de servidores alternativos, com ar mais amigáveis. (Ex: Pokemon)
     

    (Imagem demonstrando o efeito de sangue nos monstros)
     
    Acesse creature.cpp
    E remova o seguinte código:

    Agora remova o seguinte código:

    Agora acesse o game.cpp

    Dentro de 
    void Game::combatGetTypeInfo(CombatType_t combatType, Creature* target, TextColor_t& color, uint8_t& effect)
    Remova os seguintes códigos:
     
     
     
     
     
     
     
    Após estas remoções, quando os monstros levarem dano, não será mais aplicado o efeito de sangue.
  8. Curtir
    Movie deu reputação a EddyHavoc em Resolvendo o erro "This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer headers. Please update your headers."   
    Mensagem do erro ao tentar compilar Otclient (Mehah):
     
    C1189: #error This file was generated by a newer version of protoc which is  
    Para resolver este erro, é muito simples! Será necessário adicionar a biblioteca atualizada. Execute o seguinte comando no local onde o vcpkg está instalado:
     
    .\vcpkg install liblzma:x86-windows nlohmann-json:x86-windows protobuf:x86-windows  
    Agora é só felicidade!
  9. Obrigado
    Movie recebeu reputação de deza em (Resolvido)Consertar erro GLOBALEVENTS   
    local templeCicleEff = { eff = 4, delay = 100, [1] = {x = 487, y = 493, z = 7,}, [2] = {x = 493, y = 493, z = 7,}, [3] = {x = 495, y = 493, z = 7,}, [4] = {x = 499, y = 495, z = 7,}, [5] = {x = 501, y = 495, z = 7,}, [6] = {x = 505, y = 495, z = 7,}, } function onThink(cid, interval, lastExecution) for i = 1, 6 do local initialPos = templeCicleEff[i] local finalPos = templeCicleEff[i+1] if i == 6 then finalPos = templeCicleEff[1] end doSendDistanceShoot(initialPos, finalPos, templeCicleEff.eff) end return true end  
  10. Curtir
    Movie recebeu reputação de Cat em [TFS 1.5 - 8.60] New TFS Downgrade   
    Novo event adicionado: onChangeZone
     
    Link para o commit: https://github.com/moviebr/TFS-1.5-Downgrades/commit/a07dd9d61a53dc32ae9a6f38e062cc22b69806fe
  11. Obrigado
    Movie recebeu reputação de ramonxxd em Loot Channel TFS 1.X   
    Loot Channel para TFS 1.X
     
    Liberando mais alguns conteúdos para vocês. Dessa vez o loot channel para tfs 1.x.
     
    Crie um arquivo chamado loot.lua na pasta chatchannels/scripts contendo isso
    local STORAGEVALUE_LOOT = 8914 function onSpeak(player, type, message) return false end function onJoin(player) player:setStorageValue(STORAGEVALUE_LOOT, 1) return true end function onLeave(player) player:setStorageValue(STORAGEVALUE_LOOT, 0) return true end  
    Agora em chatchannels.xml adicione a tag
    <channel id="11" name="Loot" script="loot.lua" />  
    Em events/scripts, abra o arquivo monster.lua e você provavelmente irá encontra-lo assim
    function Monster:onDropLoot(corpse) if configManager.getNumber(configKeys.RATE_LOOT) == 0 then return end local player = Player(corpse:getCorpseOwner()) local mType = self:getType() if not player or player:getStamina() > 840 then local monsterLoot = mType:getLoot() for i = 1, #monsterLoot do local item = corpse:createLootItem(monsterLoot[i]) if not item then print('[Warning] DropLoot:', 'Could not add loot item to corpse.') end end if player then local text = ("Loot of %s: %s"):format(mType:getNameDescription(), corpse:getContentDescription()) local party = player:getParty() if party then party:broadcastPartyLoot(text) else player:sendTextMessage(MESSAGE_INFO_DESCR, text) end end else local text = ("Loot of %s: nothing (due to low stamina)"):format(mType:getNameDescription()) local party = player:getParty() if party then party:broadcastPartyLoot(text) else player:sendTextMessage(MESSAGE_INFO_DESCR, text) end end end Altere para esse
    local STORAGEVALUE_LOOT = 8914 function Monster:onDropLoot(corpse) if configManager.getNumber(configKeys.RATE_LOOT) == 0 then return end local player = Player(corpse:getCorpseOwner()) local mType = self:getType() if not player or player:getStamina() > 840 then local monsterLoot = mType:getLoot() for i = 1, #monsterLoot do local item = corpse:createLootItem(monsterLoot[i]) if not item then print('[Warning] DropLoot:', 'Could not add loot item to corpse.') end end if player then local text = ("Loot de %s: %s"):format(mType:getNameDescription(), corpse:getContentDescription()) local party = player:getParty() if party then party:broadcastPartyLoot(text) else if player:getStorageValue(STORAGEVALUE_LOOT) == 1 then sendChannelMessage(11, TALKTYPE_CHANNEL_O, text) else player:sendTextMessage(MESSAGE_INFO_DESCR, text) end end end else local text = ("Loot de %s: nada (devivo a baixa stamina)"):format(mType:getNameDescription()) local party = player:getParty() if party then party:broadcastPartyLoot(text) else if player:getStorageValue(STORAGEVALUE_LOOT) == 1 then sendChannelMessage(11, TALKTYPE_CHANNEL_O, text) else player:sendTextMessage(MESSAGE_INFO_DESCR, text) end end end end  
    Pronto, adicionado o Loot Channel!
     
    Créditos: 100% meu
  12. Obrigado
    Movie recebeu reputação de Tacabala22 em [TFS 1.X] Online Bonus System   
    Olá a todos, e estou de volta pra postar alguns conteúdos...
     
    Fui atrás de um online bonus system para tfs 1.3 e não achei e portanto decidi fazer o meu, com a ajuda do @vankk.
    ================================================================================================================
    Testado em TFS 1.3 na versão 8.60.
    ================================================================================================================

    ================================================================================================================
    No seu banco de dados, execute a seguinte query
    ALTER TABLE `players` ADD `online_time` int(11) NOT NULL DEFAULT 0 ================================================================================================================
    O próximo passo é apenas para quem gostaria de que, a cada server save, o número seja zerado!
    ================================================================================================================
    Em globalevents/scripts/startup.lua, após o inicio da função onStartup() adicione o seguinte código
    db.query("UPDATE `players` SET `online_time` = 0") ================================================================================================================
    Agora crie um arquivo chamado onlinebonus.lua em creaturescripts/scripts com isso dentro
    local event = {} local function addOnlineToken(playerId) local player = Player(playerId) if not player then return false end if player:getIp() == 0 then event[player:getId()] = nil return false end player:addOnlineTime(1) player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você ganhou 1 online token por permanecer online por 1 hora sem deslogar.") player:addItem(12543, 1) event[player:getId()] = addEvent(addOnlineToken, 60 * 60 * 1000, player:getId()) end function onLogin(player) player:registerEvent("OnlineBonus") player:registerEvent("OnlineBonusLogout") if event[player:getId()] == nil then event[player:getId()] = addEvent(addOnlineToken, 60 * 60 * 1000, player:getId()) end return true end function onLogout(player) if event[player:getId()] then event[player:getId()] = nil end return true end -- <event type="login" name="OnlineBonus" script="onlineBonus.lua" /> -- <event type="logout" name="OnlineBonusLogout" script="onlineBonus.lua" /> A tag XML está no fim desse código.
    ================================================================================================================
    Agora, na pasta lib, crie um arquivo chamado onlineTime.lua e coloque isso dentro
    function Player.getOnlineTime(self) local resultId = db.storeQuery(string.format('SELECT online_time FROM `players` WHERE `id` = %d', self:getGuid())) if not resultId then return 0 end local value = result.getNumber(resultId, "online_time") result.free(resultId) return value end function Player.addOnlineTime(self, amount) db.query(string.format("UPDATE `players` SET `online_time` = `online_time` + %d WHERE `id` = %d", amount, self:getGuid())) end Não esqueça de registrar essa lib no lib.lua.
    ================================================================================================================
    Agora, na pasta talkactions/scripts, crie um arquivo chamado onlinebonus.lua com o seguinte código dentro:
    function onSay(player, words, param) local skill = player:getOnlineTime(player) local message = "--------[+]------- [Online Bonus System] -------[+]--------\n\nGanhe um online token a cada hora que você passa online sem deslogar.\n\n---------------------------------------------------\n Total\n Desde o server save você já ganhou " .. skill .. " online tokens." doPlayerPopupFYI(player, message) end -- <talkaction words="!onlinebonus" script="onlineBonus.lua"/> A tag XML está no fim desse código.
    ================================================================================================================
    O usuário irá receber um item a cada hora online sem deslogar.
    O item está no código de creaturescripts com o id 12543, que pode ser alterado para qualquer item que seja agrupável.
    ================================================================================================================
    É isso por hoje.
  13. Obrigado
    Movie recebeu reputação de Nolangg em [TFS 1.5 - 8.60] New TFS Downgrade   
    Depois de um bom tempo, resolvi postar novamente aqui.
    Hoje vou disponibilizar uma datapack com TFS 1.5 para 8.60.
    Ela está sendo atualizada semanalmente no Github do projeto.
     
    Para acompanhar e utilizar clique aqui.
     
    Para relatar erros ou sugestões, utilize o GitHub.
  14. Obrigado
    Movie recebeu reputação de Leandro Vidal Martins em [TFS 1.5 - 8.60] New TFS Downgrade   
    Depois de um bom tempo, resolvi postar novamente aqui.
    Hoje vou disponibilizar uma datapack com TFS 1.5 para 8.60.
    Ela está sendo atualizada semanalmente no Github do projeto.
     
    Para acompanhar e utilizar clique aqui.
     
    Para relatar erros ou sugestões, utilize o GitHub.
  15. Curtir
    Movie deu reputação a Diego Rulez em [TFS 1x+] Problema com script de virar morador   
    @luanluciano93
    Realmente faltava a lib, mas o @Breno Alves me ajudou no Discord, então vou deixar aqui a explicação.
     
    O que acontece é que para funcionar é preciso adicionar o seguinte código no arquivo global.lua
    actionIds = { citizenship = 30020, -- citizenship teleport citizenshipLast = 30050, -- citizenship teleport last }  
    No RME, é preciso setar o actionID:
    30021 - town 1
    30022 - town 2
    30022 - town 3
    E assim por diante.
     
    Já o script citizen.lua, recomendo usar o script abaixo. Foram adicionadas algumas funcionalidades como:  
    - Não permite que o player que já é cidadão entre no teleport referente a cidade dele, somente a outras, impede de entrar e exibe uma mensagem
    - Seta a direção do player ao virar cidadão
    local towns = { [1] = SOUTH, [2] = NORTH, } function onStepIn(creature, item, position, fromPosition) if item.actionid > actionIds.citizenship and item.actionid < actionIds.citizenshipLast then if not creature:isPlayer() then return false end local town = Town(item.actionid - actionIds.citizenship) if not town then return false end if creature:getTown():getId() == town:getId() then creature:teleportTo(fromPosition, true) creature:sendTextMessage(MESSAGE_STATUS_SMALL, "You are already a citizen of " .. town:getName() .. ".") return false end creature:setTown(town) creature:sendTextMessage(MESSAGE_STATUS_SMALL, "You are now a citizen of " .. town:getName() .. ".") creature:teleportTo(town:getTemplePosition()) creature:getPosition():sendMagicEffect(CONST_ME_TELEPORT) creature:setDirection(towns[creature:getTown():getId()]) end return true end  
  16. Gostei
    Movie recebeu reputação de cs007 em Error ID: Cannot save ItemsList. Player ID not set.   
    Tenta rodar esse SQL na sua database:
    SET GLOBAL sql_mode='';  
  17. Gostei
    Movie recebeu reputação de quemtuacha em Gerenciador de Quests [TFS 0.X e TFS 1.X]   
    Fala pessoal, como vocês estão?
    Na academia de codding um usuário pediu ajuda para montar um "gerenciador" de quests, para que todas ficassem no mesmo arquivo sem ficar com aquele "spam" de quests nas actions.

    Esse script foi feito para a TFS 1.X mas, usando a lib do @Mathias Kenfi, você consegue utilizar para TFS 0.X também.

    O link para as libs: https://github.com/kenfi2/KenfiLib

    Na pasta actions/scripts crie um arquivo chamado quests.lua
    config = { quests = { [7172] = { -- ActionID que será colocado no baú name = "dos Crystal Coins", -- Nome da quest rewards = { {id = 2160, count = 100}, -- Prêmio: ID - Count }, level = { active = true, -- Level minimo para pegar? min = 150, -- Se true, qual o minimo }, storage = { active = true, -- Player poderá pegar somente uma vez? key = 91143, -- Apenas uma key por quest }, effectWin = 30, -- Efeito que vai aparecer quando fizer a quest }, [7171] = { -- ActionID que será colocado no baú name = "dos Coins", -- Nome da quest rewards = { {id = 2160, count = 100}, -- Prêmio: ID - Count {id = 2152, count = 100}, -- Prêmio: ID - Count }, level = { active = true, -- Level minimo para pegar? min = 150, -- Se true, qual o minimo }, storage = { active = true, -- Player poderá pegar somente uma vez? key = 91140, -- Apenas uma key por quest }, effectWin = 29, -- Efeito que vai aparecer quando fizer a quest }, }, messages = { notExist = "Essa quest não existe.", win = "Você fez a quest %s.", notWin = "Você já fez a quest %s.", level = "Você precisa de level %d ou maior para fazer a quest %s.", }, } function onUse(cid, item, fromPosition, target, toPosition, isHotkey) local player = Player(cid) local choose = config.quests[item.actionid] if not choose then player:sendCancelMessage(config.messages.notExist) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end if choose.level.active and player:getLevel() < choose.level.min then player:sendCancelMessage(config.messages.level:format(choose.level.min, choose.name)) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end if choose.storage.active and player:getStorageValue(choose.storage.key) >= 0 then player:sendCancelMessage(config.messages.notWin:format(choose.name)) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end for i = 1, #choose.rewards do player:addItem(choose.rewards[i].id, choose.rewards[i].count) end player:setStorageValue(choose.storage.key, 1) player:sendCancelMessage(config.messages.win:format(choose.name)) player:getPosition():sendMagicEffect(choose.effectWin) return true end Para configurar é só utilizar ler os comentários deixados e para adicionar mais quests apenas use o mesmo padrão que deixei aí

    Utilize a tag no actions.xml desse forma
    <action fromaid="7171" toaid="7172" script="quests.lua" /> Sendo que o "fromaid" é a actionid inicial, e o "toaid" é a última actionid registrada no arquivo.

    Qualquer problema, relate nesse tópico.
  18. Gostei
    Movie recebeu reputação de luadograu em [8.60 - TFS 1.3] Baiak Thunder - Oficial TibiaKing.com   
    Os arquivos serão disponibilizados através da plataforma GitHub, onde você poderá acompanhar as atualizações que poderão ocorrer.
    https://github.com/moviebr/baiakthunder

    Updates:
    24/01/2021 - https://github.com/moviebr/baiakthunder/pull/7

    Imagens








    Link para o projeto
    https://github.com/moviebr/baiakthunder

    Créditos
    - Desenvolvedores do TFS;
    - @moviebr (@Breno Alves );
    - @DdJs (Felipe);
    - @crypter (Gustavo);
    - Nolis (Daniel - @Cat).
  19. Obrigado
    Movie recebeu reputação de Matheus Chanavat em [TFS 1.X] Online Bonus System   
    Olá a todos, e estou de volta pra postar alguns conteúdos...
     
    Fui atrás de um online bonus system para tfs 1.3 e não achei e portanto decidi fazer o meu, com a ajuda do @vankk.
    ================================================================================================================
    Testado em TFS 1.3 na versão 8.60.
    ================================================================================================================

    ================================================================================================================
    No seu banco de dados, execute a seguinte query
    ALTER TABLE `players` ADD `online_time` int(11) NOT NULL DEFAULT 0 ================================================================================================================
    O próximo passo é apenas para quem gostaria de que, a cada server save, o número seja zerado!
    ================================================================================================================
    Em globalevents/scripts/startup.lua, após o inicio da função onStartup() adicione o seguinte código
    db.query("UPDATE `players` SET `online_time` = 0") ================================================================================================================
    Agora crie um arquivo chamado onlinebonus.lua em creaturescripts/scripts com isso dentro
    local event = {} local function addOnlineToken(playerId) local player = Player(playerId) if not player then return false end if player:getIp() == 0 then event[player:getId()] = nil return false end player:addOnlineTime(1) player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você ganhou 1 online token por permanecer online por 1 hora sem deslogar.") player:addItem(12543, 1) event[player:getId()] = addEvent(addOnlineToken, 60 * 60 * 1000, player:getId()) end function onLogin(player) player:registerEvent("OnlineBonus") player:registerEvent("OnlineBonusLogout") if event[player:getId()] == nil then event[player:getId()] = addEvent(addOnlineToken, 60 * 60 * 1000, player:getId()) end return true end function onLogout(player) if event[player:getId()] then event[player:getId()] = nil end return true end -- <event type="login" name="OnlineBonus" script="onlineBonus.lua" /> -- <event type="logout" name="OnlineBonusLogout" script="onlineBonus.lua" /> A tag XML está no fim desse código.
    ================================================================================================================
    Agora, na pasta lib, crie um arquivo chamado onlineTime.lua e coloque isso dentro
    function Player.getOnlineTime(self) local resultId = db.storeQuery(string.format('SELECT online_time FROM `players` WHERE `id` = %d', self:getGuid())) if not resultId then return 0 end local value = result.getNumber(resultId, "online_time") result.free(resultId) return value end function Player.addOnlineTime(self, amount) db.query(string.format("UPDATE `players` SET `online_time` = `online_time` + %d WHERE `id` = %d", amount, self:getGuid())) end Não esqueça de registrar essa lib no lib.lua.
    ================================================================================================================
    Agora, na pasta talkactions/scripts, crie um arquivo chamado onlinebonus.lua com o seguinte código dentro:
    function onSay(player, words, param) local skill = player:getOnlineTime(player) local message = "--------[+]------- [Online Bonus System] -------[+]--------\n\nGanhe um online token a cada hora que você passa online sem deslogar.\n\n---------------------------------------------------\n Total\n Desde o server save você já ganhou " .. skill .. " online tokens." doPlayerPopupFYI(player, message) end -- <talkaction words="!onlinebonus" script="onlineBonus.lua"/> A tag XML está no fim desse código.
    ================================================================================================================
    O usuário irá receber um item a cada hora online sem deslogar.
    O item está no código de creaturescripts com o id 12543, que pode ser alterado para qualquer item que seja agrupável.
    ================================================================================================================
    É isso por hoje.
  20. Gostei
    Movie recebeu reputação de Nerivalhs em [TFS 1.X] Dodge & Critical System   
    [Dodge & Critical]

    Sabe aqueles sistemas de dodge e critical que temos nos servidores de baiak? Então, é isso que hoje vou trazer para vocês!
    Há um sistema disponibilizado na internet, porém não funcional, o que eu fiz foi fixá-lo e adicionar o dodge para mana também.

    Testado no TFS 1.3 na versão 8.60

    Na pasta lib crie um arquivo chamado dodgeCritical.lua
    --[[ Dodge & Critical fixado por Movie (Movie#4361) Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] STORAGEVALUE_DODGE = 48900 STORAGEVALUE_CRITICAL = 48901 DODGE = { LEVEL_MAX = 100, -- máximo de level que o dodge será PERCENT = 0.2 -- porcentagem que irá defender o ataque } CRITICAL = { LEVEL_MAX = 100, -- máximo de level que o critical será PERCENT = 0.2 -- porcentagem que irá aumentar o ataque } function Player.getDodgeLevel(self) return self:getStorageValue(STORAGEVALUE_DODGE) end function Player.setDodgeLevel(self, value) return self:setStorageValue(STORAGEVALUE_DODGE, value) end function Player.getCriticalLevel(self) return self:getStorageValue(STORAGEVALUE_CRITICAL) end function Player.setCriticalLevel(self, value) return self:setStorageValue(STORAGEVALUE_CRITICAL, value) end Não esqueça de registrar a lib no lib.lua

    Agora na pasta creaturescript/scripts crie um arquivo chamado dodgeCritical.lua
    --[[ Dodge & Critical fixado por Movie (Movie#4361) Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) if (not attacker or not creature) then return primaryDamage, primaryType, secondaryDamage, secondaryType end if primaryType == COMBAT_HEALING then return primaryDamage, primaryType, secondaryDamage, secondaryType end if ((creature:getDodgeLevel() * 3) >= math.random (0, 1000) and creature:isPlayer()) then primaryDamage = 0 secondaryDamage = 0 creature:say("DODGE!", TALKTYPE_MONSTER_SAY) creature:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT) end if (attacker:isPlayer() and (attacker:getCriticalLevel() * 3) >= math.random (0, 1000)) then primaryDamage = primaryDamage + math.ceil(primaryDamage * CRITICAL.PERCENT) attacker:say("CRITICAL!", TALKTYPE_MONSTER_SAY) creature:getPosition():sendMagicEffect(CONST_ME_EXPLOSIONHIT) end return primaryDamage, primaryType, secondaryDamage, secondaryType end <event type="healthchange" name="DodgeCritical" script="dodgeCritical.lua"/>  
    Agora crie outro arquivo dentro do creaturescripts/scripts com o nome dodgeMana.lua
    --[[ Dodge & Critical fixado por Movie (Movie#4361) Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] function onManaChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) if (not attacker or not creature) then return primaryDamage, primaryType, secondaryDamage, secondaryType end if ((creature:getDodgeLevel() * 3) >= math.random (0, 1000) and creature:isPlayer()) then primaryDamage = 0 secondaryDamage = 0 creature:say("DODGE!", TALKTYPE_MONSTER_SAY) creature:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT) end return primaryDamage, primaryType, secondaryDamage, secondaryType end <event type="manachange" name="DodgeMana" script="dodgeMana.lua"/>  
     
    Não esqueça de registra no login.lua
    player:registerEvent("DodgeCritical") player:registerEvent("DodgeMana") Adicione também no login.lua
    if player:getDodgeLevel() == -1 then player:setDodgeLevel(0) end if player:getCriticalLevel() == -1 then player:setCriticalLevel(0) end
    Agora na pasta scripts/talkactions crie um arquivo chamado dodgeCritical.lua
    --[[ Dodge & Critical fixado por Movie (Movie#4361) Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] local dodge = TalkAction("!dodge") local critical = TalkAction("!critical") function dodge.onSay(player, words, param) local skill = player:getDodgeLevel() local message = "DODGE SYSTEM\nO sistema consiste em defender uma porcentagem dos ataques recebidos.\n\nPor Exemplo:\nCada pedra utilizada atribui 0,3% a mais de chance.\nCom 10 pedras, voce tera 3% de chance de defender 50% dos ataques recebidos.\nCom 100 pedras (maximo), voce tera 30% de chance de defender 50% dos ataques recebidos.\nCada pedra que voce usar, sua skill de dodge aumenta em 1 ponto.\n\n------------------\nDodge Skill: [" .. skill .. "/100]" doPlayerPopupFYI(player, message) end dodge:register() function critical.onSay(player, words, param) local skill = player:getCriticalLevel() local message = "CRITICAL SYSTEM\nO sistema consiste em ter uma chance de dar um dano critico.\n\nPor Exemplo:\nCada pedra utilizada atribui 0,3% a mais de chance.\nCom 10 pedras, voce tera 3% de chance de hitar um dano critico dos ataques desferidos ao seu oponente.\nCom 100 pedras (maximo), voce tera 30% de chance de hitar um dano critico dos ataques desferidos ao seu oponente.\nCada pedra que voce usar, sua skill de dodge aumenta em 1 ponto.\n\n------------------\nCritical Skill: [" .. skill .. "/100]" doPlayerPopupFYI(player, message) end critical:register()
    Pronto, agora você tem o sistema no seu servidor!
    Curtiu? Dá um REP+ aí
  21. Curtir
    Movie recebeu reputação de Jnofom em Loot Channel TFS 1.X   
    Loot Channel para TFS 1.X
     
    Liberando mais alguns conteúdos para vocês. Dessa vez o loot channel para tfs 1.x.
     
    Crie um arquivo chamado loot.lua na pasta chatchannels/scripts contendo isso
    local STORAGEVALUE_LOOT = 8914 function onSpeak(player, type, message) return false end function onJoin(player) player:setStorageValue(STORAGEVALUE_LOOT, 1) return true end function onLeave(player) player:setStorageValue(STORAGEVALUE_LOOT, 0) return true end  
    Agora em chatchannels.xml adicione a tag
    <channel id="11" name="Loot" script="loot.lua" />  
    Em events/scripts, abra o arquivo monster.lua e você provavelmente irá encontra-lo assim
    function Monster:onDropLoot(corpse) if configManager.getNumber(configKeys.RATE_LOOT) == 0 then return end local player = Player(corpse:getCorpseOwner()) local mType = self:getType() if not player or player:getStamina() > 840 then local monsterLoot = mType:getLoot() for i = 1, #monsterLoot do local item = corpse:createLootItem(monsterLoot[i]) if not item then print('[Warning] DropLoot:', 'Could not add loot item to corpse.') end end if player then local text = ("Loot of %s: %s"):format(mType:getNameDescription(), corpse:getContentDescription()) local party = player:getParty() if party then party:broadcastPartyLoot(text) else player:sendTextMessage(MESSAGE_INFO_DESCR, text) end end else local text = ("Loot of %s: nothing (due to low stamina)"):format(mType:getNameDescription()) local party = player:getParty() if party then party:broadcastPartyLoot(text) else player:sendTextMessage(MESSAGE_INFO_DESCR, text) end end end Altere para esse
    local STORAGEVALUE_LOOT = 8914 function Monster:onDropLoot(corpse) if configManager.getNumber(configKeys.RATE_LOOT) == 0 then return end local player = Player(corpse:getCorpseOwner()) local mType = self:getType() if not player or player:getStamina() > 840 then local monsterLoot = mType:getLoot() for i = 1, #monsterLoot do local item = corpse:createLootItem(monsterLoot[i]) if not item then print('[Warning] DropLoot:', 'Could not add loot item to corpse.') end end if player then local text = ("Loot de %s: %s"):format(mType:getNameDescription(), corpse:getContentDescription()) local party = player:getParty() if party then party:broadcastPartyLoot(text) else if player:getStorageValue(STORAGEVALUE_LOOT) == 1 then sendChannelMessage(11, TALKTYPE_CHANNEL_O, text) else player:sendTextMessage(MESSAGE_INFO_DESCR, text) end end end else local text = ("Loot de %s: nada (devivo a baixa stamina)"):format(mType:getNameDescription()) local party = player:getParty() if party then party:broadcastPartyLoot(text) else if player:getStorageValue(STORAGEVALUE_LOOT) == 1 then sendChannelMessage(11, TALKTYPE_CHANNEL_O, text) else player:sendTextMessage(MESSAGE_INFO_DESCR, text) end end end end  
    Pronto, adicionado o Loot Channel!
     
    Créditos: 100% meu
  22. Gostei
    Movie deu reputação a marcoshps11 em Bot Discord - Merlin   
    * Áudio de saudação *
     
     
    O intuito deste bot é auxiliar jogadores de RPG interpretativo, porém podendo ser utilizado como um atrativo dentro do discord do seu projeto
     
    Possui algumas funções como:
    Criação de ficha do personagem Combate contra monstros Level UP Inventário do personagem Set para o personagem entre outras funções  
    É possível sincronizar com seu otserver e implementar ainda mais funções e atrativos para o chat
    * Este projeto ainda não está na sua versão final, é apenas um molde para desenvolvimento *
     
    Para o tópico não ficar muito longo, você pode conferir ele no link:

    https://github.com/marcoshps/Merlin-Bot
     
    algumas prints:
     
     
      
  23. Curtir
    Movie recebeu reputação de duhisback em Error ID: Cannot save ItemsList. Player ID not set.   
    Tenta rodar esse SQL na sua database:
    SET GLOBAL sql_mode='';  
  24. Curtir
    Movie recebeu reputação de jhonathan wendrell em Ensinando como compilar TFS 0.4 [COM IMAGENS]   
    Como compilar no Windows (TFS 0.4)
    E aí pessoal, beleza?
    Apanhei muito para aprender a compilar no Windows, nunca dava conta, e um dia alguém (não me lembro quem) me ajudou e estou aqui para repassar esse conhecimento...
    Enfim, hoje vou ensinar como compilar a TFS 0.4 no Windows, e em breve, no Linux.
     
    Primeiramente, irei deixar a lista de programas que iremos precisar.
     
    ====================================================================================
     
    Dev C++ (Links para download no spoiler)
     
    ====================================================================================
     
    Uma TFS 0.4
    ====================================================================================
    Feito o download de tudo isso, vamos ao passo a passo.
    ====================================================================================
    1º Após baixar a TFS, abra a pasta e encontre a pasta src

    ====================================================================================
    2º Abra a pasta, encontre a pasta dev-cpp encontrada dentro da pasta src

    ====================================================================================
    3º Crie uma pasta chamada "Obj" dentro dessa pasta

    ====================================================================================
    4º Beleza, agora vamos abrir o Dev C++

    ====================================================================================
    5º Com o Dev C++ aberto, vamos abrir o projeto da TFS 0.4

    ====================================================================================
    6º Irá aparecer uma caixa para você escolher qual arquivo você irá procurar. Então vamos naquela pasta dev-cpp e encontraremos o "TheForgottenServer.dev" e selecionaremos ele.

    ====================================================================================
    7º Irá carregar muitos arquivos que apareceram em uma lista, não recomendo vocês mexerem neles se não tiver um conhecimento necessário para tal.

    ====================================================================================
    8º Agora vamos no Menu Project -> Project Options, ou apertar Alt + P

    ====================================================================================
    9º Feito isso, vamos em Parameters e iremos adicionar algumas coisas em C++ compiler e em Linker
    ====================================================================================
    10º Em C++ compiler coloque esses parâmetros
     
    ====================================================================================
    11º Agora em Linker, coloque esses parâmetros
    ====================================================================================
    12º Ainda em Project Options, vamos na aba Build Options e iremos escolher o Object file output directory e colocar aquela pasta "Obj" que criamos lá em cima


    ====================================================================================
    13º Feito isso, irá ficar assim

    ====================================================================================
    14º Agora pode dar Ok no Project Options
     
    ====================================================================================
    15º Agora, vamos COMPILAR!!

    Use o primeiro item (o que tem 4 janelinhas de cores diferentes) ou use Ctrl + F9
     
    ====================================================================================
    16º Irá aparecer uma janela como essa aqui, fique tranquilo, está tudo normal!

    ====================================================================================
    17º Ao terminar, aparecerá essa janela e a sua TFS 0.4 está compilada.

     
    ====================================================================================
    18º Voltamos naquela pasta dev-cpp e encontraremos esse arquivo, ele é a sua Distro.

    ====================================================================================
    19º Agora só jogar ela na sua datapack e utilizá-la. (Não esqueça de adicionar as libs)
     
    ====================================================================================
    É isso pessoal, espero que tenham conseguido, se houver alguma dúvida, vai deixar aqui nos comentários que vou tentar ir respondendo...
     
     



  25. Gostei
    Movie recebeu reputação de Espedito em Ensinando como compilar TFS 0.4 [COM IMAGENS]   
    Como compilar no Windows (TFS 0.4)
    E aí pessoal, beleza?
    Apanhei muito para aprender a compilar no Windows, nunca dava conta, e um dia alguém (não me lembro quem) me ajudou e estou aqui para repassar esse conhecimento...
    Enfim, hoje vou ensinar como compilar a TFS 0.4 no Windows, e em breve, no Linux.
     
    Primeiramente, irei deixar a lista de programas que iremos precisar.
     
    ====================================================================================
     
    Dev C++ (Links para download no spoiler)
     
    ====================================================================================
     
    Uma TFS 0.4
    ====================================================================================
    Feito o download de tudo isso, vamos ao passo a passo.
    ====================================================================================
    1º Após baixar a TFS, abra a pasta e encontre a pasta src

    ====================================================================================
    2º Abra a pasta, encontre a pasta dev-cpp encontrada dentro da pasta src

    ====================================================================================
    3º Crie uma pasta chamada "Obj" dentro dessa pasta

    ====================================================================================
    4º Beleza, agora vamos abrir o Dev C++

    ====================================================================================
    5º Com o Dev C++ aberto, vamos abrir o projeto da TFS 0.4

    ====================================================================================
    6º Irá aparecer uma caixa para você escolher qual arquivo você irá procurar. Então vamos naquela pasta dev-cpp e encontraremos o "TheForgottenServer.dev" e selecionaremos ele.

    ====================================================================================
    7º Irá carregar muitos arquivos que apareceram em uma lista, não recomendo vocês mexerem neles se não tiver um conhecimento necessário para tal.

    ====================================================================================
    8º Agora vamos no Menu Project -> Project Options, ou apertar Alt + P

    ====================================================================================
    9º Feito isso, vamos em Parameters e iremos adicionar algumas coisas em C++ compiler e em Linker
    ====================================================================================
    10º Em C++ compiler coloque esses parâmetros
     
    ====================================================================================
    11º Agora em Linker, coloque esses parâmetros
    ====================================================================================
    12º Ainda em Project Options, vamos na aba Build Options e iremos escolher o Object file output directory e colocar aquela pasta "Obj" que criamos lá em cima


    ====================================================================================
    13º Feito isso, irá ficar assim

    ====================================================================================
    14º Agora pode dar Ok no Project Options
     
    ====================================================================================
    15º Agora, vamos COMPILAR!!

    Use o primeiro item (o que tem 4 janelinhas de cores diferentes) ou use Ctrl + F9
     
    ====================================================================================
    16º Irá aparecer uma janela como essa aqui, fique tranquilo, está tudo normal!

    ====================================================================================
    17º Ao terminar, aparecerá essa janela e a sua TFS 0.4 está compilada.

     
    ====================================================================================
    18º Voltamos naquela pasta dev-cpp e encontraremos esse arquivo, ele é a sua Distro.

    ====================================================================================
    19º Agora só jogar ela na sua datapack e utilizá-la. (Não esqueça de adicionar as libs)
     
    ====================================================================================
    É isso pessoal, espero que tenham conseguido, se houver alguma dúvida, vai deixar aqui nos comentários que vou tentar ir respondendo...
     
     



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo