-
Total de itens
842 -
Registro em
-
Última visita
-
Dias Ganhos
19
Histórico de Curtidas
-
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.
-
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í.
-
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.
-
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
-
-
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='';
-
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.
-
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!
-
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
-
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
-
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
-
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.
-
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.
-
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.
-
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
-
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='';
-
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.
-
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).
-
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.
-
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í
-
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
-
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:
-
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='';
-
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...
-
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...