Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Este sistema é baseado em Reward Chests. Confira o Tibia Wiki para saber mais sobre como funciona. É simples!

 

 

Em relação à Reward, ela será enviada para o depósito designado. Basta localizar a linha 'depotId' e especificar o numero que você deseja enviar para a cidade correspondente; isso garantirá a entrega direta ao depósito. Por exemplo, atribuir o número 1 para a cidade principal e 2 para Thais, e assim por diante, facilita esse processo.

Confira o GIF aqui, basta clicar para ver.

https://imgur.com/wNtfnS4

 

Este script está configurado para ativar um temporizador de 5 minutos após a expiração, removendo automaticamente o Reward Chest Id 21584. Caso deseje estender a duração ou ajustá-la com base nas diretrizes do Tibia Wiki, ele oferece versatilidade. Este sistema é particularmente adequado para salas de chefes onde a derrota do chefe resulta na transformação de seu cadáver no RewardChestId. Os jogadores interagem com ele e, após um período designado, o baú se dissipa.

 

Quando você mata o chefe, ele morre e se transforma em um Baú de Recompensa com ID 21584.


Siga o guia de instalação passo a passo fornecido aqui.

 

  • Registre o evento no arquivo XML do monstro fornecido: 
<script>
<event name="BossDeath"/>
</script>
  • Defina o cadáver do chefe como 0, caso contrário você receberá uma mensagem de loot adicional.

 

<look type="201" corpse="0" />

 

Este é o RevScripts. Coloque o script em qualquer lugar na pasta data/scripts, seja em uma subpasta ou em sua localização preferida.

local bossesList = {
    { name = "Orshabaal", storage = 6655, expirationTime = 5 * 60, loot = { {item = 2160, count = 5, chance = 100000}, {item = 2494, count = 1, chance = 50000}, }, RewardChestId = 21584, depotID = 1 },
    { name = "Cave Rat", storage = 6656, expirationTime = 5 * 60, loot = { {item = 2160, count = 10, chance = 100000}, {item = 2498, count = 1, chance = 75000}, }, RewardChestId = 21584, depotID = 1 },
    -- Add more bosses as needed
}

local STORAGE_KEYS = {
    bossData = "boss_data",
}

local function createRewardChest(bossPosition, rewardChestId, expirationTime)
    local rewardItem = Game.createItem(rewardChestId, 1, bossPosition)
    if rewardItem then
        rewardItem:setAttribute(ITEM_ATTRIBUTE_ACTIONID, ACTION_ID)
        addEvent(function()
            if rewardItem and rewardItem:getPosition() then
                rewardItem:remove()
                local players = Game.getPlayers()
                for _, player in ipairs(players) do
                    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "The reward chest has disappeared!")
                end
            end
        end, expirationTime * 1000)
    else
        print("Error creating reward chest.")
    end
end

local function hasRewardExpired(player, storageKey)
    local expirationTime = player:getStorageValue(storageKey)
    return expirationTime ~= -1 and expirationTime <= os.time()
end

local creatureEvent = CreatureEvent("BossDeath")

function creatureEvent.onDeath(creature, corpse)
    local bossPosition = creature:getPosition()
    local rewardChestId = 0
    local depotID = 0
    local bossName = ""
    for _, boss in ipairs(bossesList) do
        if creature:getName():lower() == boss.name:lower() then
            rewardChestId = boss.RewardChestId
            depotID = boss.depotID
            bossName = boss.name
            break
        end
    end

    if rewardChestId ~= 0 then
        createRewardChest(bossPosition, rewardChestId, bossesList[1].expirationTime)
        creature:say("The reward chest will disappear in 5 minutes!", TALKTYPE_MONSTER_SAY)
    else
        print("Reward chest ID not found.")
    end

    for _, player in ipairs(Game.getPlayers()) do
        if player:isPlayer() then
            for _, boss in ipairs(bossesList) do
                if creature:getName():lower() == boss.name:lower() then
                    player:setStorageValue(boss.storage, 1)
                    local expirationTime = os.time() + boss.expirationTime
                    player:setStorageValue(STORAGE_KEYS.bossData, expirationTime)
                    local message = "You contributed to defeating " .. boss.name .. ". Now go to the chest to claim your reward! Expiration time: " .. os.date("%c", expirationTime)
                    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, message)
                end
            end
        end
    end
end

creatureEvent:register()

local function sendRewardMessage(player, bossName, receivedItems)
    local message
    if #receivedItems > 0 then
        message = "From " .. bossName .. ": " .. table.concat(receivedItems, ", ")
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, message)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Your reward has been sent to your depot.")
    else
        message = "From " .. bossName .. ": Unfortunately, you did not receive any items."
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, message)
    end
end

local rewardAction = Action()

function rewardAction.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if not player or not player:isPlayer() or not item then
        return false
    end

    local depotID = 0
    for _, boss in ipairs(bossesList) do
        if item:getId() == boss.RewardChestId and player:getStorageValue(boss.storage) == 1 then
            depotID = boss.depotID
            local storageKey = "boss_reward_time"
            if hasRewardExpired(player, storageKey) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Your reward from " .. boss.name .. " has expired.")
            else
                local depot = player:getDepotChest(depotID, true)  -- Using depotID from the boss configuration
                if not depot then
                    return false
                end

                local bag = depot:addItem(7343, 1)
                if not bag then
                   print("Failed to add the reward bag to the player's depot.")
                    return false
                end

                local receivedItems = {}
                for _, lootItem in ipairs(boss.loot) do
                    if math.random(100000) <= lootItem.chance then
                        local itemAdded = bag:addItem(lootItem.item, lootItem.count or 1)
                        if itemAdded then
                            local itemName = ItemType(lootItem.item):getPluralName() or ItemType(lootItem.item):getName()
                            table.insert(receivedItems, (lootItem.count or 1) .. "x " .. itemName)
                        end
                    end
                end

                sendRewardMessage(player, boss.name, receivedItems)
            end
            player:setStorageValue(boss.storage, 0)
            player:setStorageValue(storageKey, -1)
            break
        end
    end

    return true
end

rewardAction:aid(ACTION_ID)
rewardAction:register()

 

 

Este script é a segunda versão.

No Baú de Recompensa (por exemplo, no templo ou na sala do chefe), você deve configurá-lo usando o ID de Ação conforme mostrado na imagem.

75559-0943667266c58d86f6989412b9eb7d14.png.d238b040f4643dd870a6393909db3733.png

 

Confira o GIF aqui, basta clicar para ver.

https://imgur.com/B9EezSM

O indivíduo que infligiu o maior dano e outro que infligiu uma quantidade menor ambos recebem uma recompensa. Por outro lado, aqueles que não contribuíram com nenhum dano não recebem nenhuma recompensa. Este sistema opera de forma direta. Espero que você tenha achado esta explicação satisfatória. :)

data/scripts.

-- Define a table listing the bosses and their respective properties
local bossesList = {
    {
        name = "Orshabaal",
        storage = 6655,
        expirationTime = 7 * 24 * 60 * 60, -- 7 days
        loot = {
            {item = 2160, count = 5, chance = 100000}, -- 100% chance
            {item = 2494, count = 1, chance = 50000}, -- 50% chance
        },
        rewardChestId = 21584, -- Reward chest ID
        depotId = 1, -- Depot ID of the main city where the items will be sent
    },
    {
        name = "Cave Rat",
        storage = 6656,
        expirationTime = 7 * 24 * 60 * 60,
        loot = {
            {item = 2160, count = 10, chance = 100000}, -- 100% chance
            {item = 2498, count = 1, chance = 75000}, -- 75% chance
        },
        rewardChestId = 21584, -- Reward chest ID
        depotId = 1, -- Depot ID of the main city where the items will be sent
    },
    -- Add more bosses as needed
}

local ACTION_ID = 2550 -- You need to open the RME Editor and set it to 2550, then save.

local STORAGE_KEYS = {
    bossData = "boss_data"
}

-- Function to check if a reward has expired
local function hasRewardExpired(player, storageKey)
    local expirationTime = player:getStorageValue(storageKey)
    return expirationTime ~= -1 and expirationTime <= os.time()
end

local creatureEvent = CreatureEvent("BossDeath")

function creatureEvent.onDeath(creature, corpse, killer, mostDamageKiller)
    if killer and killer:isPlayer() then
        local creatureName = creature:getName():lower()
        for _, boss in ipairs(bossesList) do
            if creatureName == boss.name:lower() then
                -- Set reward data for the killer
                killer:setStorageValue(boss.storage, 1)
                local expirationTime = os.time() + boss.expirationTime
                killer:setStorageValue(STORAGE_KEYS.bossData, expirationTime)
                local message = "You contributed to defeating " .. boss.name .. ". Now go to the chest to claim your reward! Expiration time: " .. os.date("%c", expirationTime)
                killer:sendTextMessage(MESSAGE_EVENT_ADVANCE, message)

                -- Check if there's a most damage killer
                if mostDamageKiller and mostDamageKiller:isPlayer() and mostDamageKiller:getId() ~= killer:getId() then
                    mostDamageKiller:setStorageValue(boss.storage, 1)
                    mostDamageKiller:setStorageValue(STORAGE_KEYS.bossData, expirationTime)
                    local messageMostDamage = "You dealt the most damage to " .. boss.name .. ". Now go to the chest to claim your reward! Expiration time: " .. os.date("%c", expirationTime)
                    mostDamageKiller:sendTextMessage(MESSAGE_EVENT_ADVANCE, messageMostDamage)
                end
                break
            end
        end
    end
end

creatureEvent:register()

-- Function to send reward message to player
local function sendRewardMessage(player, bossName, receivedItems)
    if #receivedItems > 0 then
        local message = "From " .. bossName .. ": " .. table.concat(receivedItems, ", ")
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, message)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Your reward has been sent to your depot.")
    else
        local message = "From " .. bossName .. ": Unfortunately, you did not receive any items."
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, message)
    end
end

local rewardAction = Action()

function rewardAction.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if not player or not player:isPlayer() or not item then
        return false
    end

    local rewardsClaimed = false
    for _, boss in ipairs(bossesList) do
        if item:getId() == boss.rewardChestId and player:getStorageValue(boss.storage) == 1 then
            local storageKey = STORAGE_KEYS.bossData
            if hasRewardExpired(player, storageKey) then
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Your reward from " .. boss.name .. " has expired.")
            else
                local depot = player:getDepotChest(boss.depotId, true)
                if not depot then
                    return false
                end

                local bag = depot:addItem(7343, 1)

                if not bag then
                   print("Failed to add the reward bag to the player's depot.")
                    return false
                end

                local receivedItems = {}
                for _, lootItem in ipairs(boss.loot) do
                    if math.random(100000) <= lootItem.chance then
                        local itemAdded = bag:addItem(lootItem.item, lootItem.count or 1)
                        if itemAdded then
                            local itemName = ItemType(lootItem.item):getPluralName() or ItemType(lootItem.item):getName()
                            table.insert(receivedItems, (lootItem.count or 1) .. "x " .. itemName)
                        end
                    end
                end

                if #receivedItems > 0 then
                    sendRewardMessage(player, boss.name, receivedItems)
                    player:setStorageValue(boss.storage, 0)
                    player:setStorageValue(storageKey, -1)
                    rewardsClaimed = true
                else
                    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You did not receive any items from " .. boss.name .. ".")
                end
            end
        end
    end

    if not rewardsClaimed then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You need to defeat the corresponding boss first to receive the reward.")
        return false
    end

    return true
end

rewardAction:aid(ACTION_ID)
rewardAction:register()

O que eu fiz foi reescrever o script do zero, créditos para mim mesmo. Espero que gostem deste conteúdo! :) 

Link para o post
Compartilhar em outros sites
  • Administrador
Link para o post
Compartilhar em outros sites
  • Administrador

Sensacional!
Obrigado pela contribuição <3

TibiaKing Team- KingTópicos
www.tibiaking.com

Link para o post
Compartilhar em outros sites
  • Under featured e pinned this tópico

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

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

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

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

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

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por luanluciano93
      STYLLER OT - 2023 - TFS 1.5 (8.60)
       
      Olá pessoal, hoje venho apresentar meu projeto open para vocês. Sou muito fã do mapa STYLLER, sempre em horas vagas procurava joga-lo, para quem não conhece: é um servidor estilo baiak com mais RPG, e como tenho me interessado pelas engines 1.X, resolvi criar um projeto de servidor Styller usando o TFS 1.5 para versão 8.60. O projeto está sendo desenvolvido no github (projeto github) onde posto atualizações diárias (changelog). Vocês podem postar dúvidas, erros/bugs, dicas e qualquer outra coisa aqui no tópico ou criar um issue no github. Lembre-se de dar FOLLOW no projeto no github e SEGUIR o projeto aqui no fórum para acompanhar as atualizações.
      Informações do Servidor e Sistemas:
      Versão: 8.60 Engine: TFS 1.5 MillhioreBT Downgrade - Branch: main (Nov 11, 2023, 104 commits) Informações. Atualizações. Server Info:
      Dúvidas, erros, dicas e contribuições:
      Caso tenha dúvidas, ou queira resolver algum bug/erro, dar dicas para o projeto, ou também ajudar em sua construção, crie um issue / pull requests pelo github ou use esse tópico.
      Website compatível:
      ZnoteACC - ranch: v2 (Jul 10, 2022, 613 commits) Créditos:
      luanluciano93 GOD Bon (mapa yourots) MillhioreBT, Nekiro e TFS team (pela engine do servidor) leoloko12 (mapa styller) outros Download:
      Todos os arquivos, libs e executável (para windows) estão no repositório do projeto no github (que é onde eu atualizo constantemente), basta fazer o download lá e juntar com a primeira parte.
       
      - LINK GITHUB DO PROJETO STYLLER: https://github.com/luanluciano93/styller
       
      Clique em CODE e depois Download ZIP
       

       
      Imagens: 
       
       
       

    • Por Under
      Olá gostaria de contribuir com a comunidade com estes serviços.
      Aproveite é por tempo limitado.
      Conheça um pouco mais sobre quem eu sou.
      Serviços de Desenvolvimento Web
      Excelência em Resolução de Problemas
      Identificação e correção de BUGS em bancos de dados e scripts PHP para um funcionamento perfeito. Criação de Valor
      Implementação de novas funcionalidades em websites, tanto no Front-end quanto no Back-end, para melhorar a experiência dos usuários. Design Atraente
      Habilidade em design responsivo usando Bootstrap para criar interfaces atraentes e compatíveis com diversos dispositivos. Da Ideia à Realidade
      Capacidade de criar websites avançados desde o conceito inicial até a implementação completa, integrando funcionalidades complexas. Personalização Precisa
      Desenvolvimento de websites a partir do zero usando stacks avançadas ou PHP convencional, garantindo personalização total. Desenvolvimento de Open Tibia Server (OTC)
      Melhoria Contínua
      Identificação e solução de BUGS em módulos para aprimorar a estabilidade e jogabilidade no Open Tibia Server. Inovação Impulsionada
      Integração de novas funcionalidades ao OTC, enriquecendo a experiência dos jogadores com recursos inovadores. Módulos Eficientes
      Criação de novos módulos com foco na qualidade do código e na melhoria da interatividade dos jogadores. Desenvolvimento de Otserver (Open Tibia Server)
      Performance Elevada
      Identificação e correção precisa de problemas em scripts para manter a performance e a integridade do otserver. Crescimento Constante
      Introdução de novos scripts e funcionalidades, impulsionando o crescimento contínuo e a inovação do otserver. Atualização Estratégica
      Atualização cuidadosa dos pacotes de compilação de projetos para garantir eficiência e compatibilidade. Otimização e Segurança
      Proteção Robusta
      Implementação de soluções AntiCheat/AntiBot para garantir um ambiente de jogo seguro e livre de trapaças. Escalabilidade e Desempenho
      Configuração especializada em nuvens líderes do mercado, incluindo Google Cloud, Azure Cloud, Amazon Cloud e DigitalOcean Cloud. Defesa Efetiva
      Instalação e configuração do ANTI-DDOS Cloudflare para proteger o servidor contra ataques cibernéticos. Outros Serviços
      Inovação na Blockchain
      Implementação de sistema NFT, incorporando aspectos visuais e lógicos da tecnologia blockchain para criar experiências únicas. Facilitação Financeira
      Integração de pagamento automático em websites, abrangendo uma variedade de plataformas para maior comodidade dos usuários. Infraestrutura Otimizada
      Configuração e instalação nas nuvens, como Google Cloud, Azure Cloud, Amazon Cloud e DigitalOcean Cloud, para alcançar a melhor performance.
        Processo de Contratação Simplificado:
       
      Aqui está a nossa forma descomplicada de lidar com pagamentos:
      Entrada (50%): Depois de escolher o serviço, pedimos metade do valor para começar.
      Saldo (50%): Quando terminarmos e você estiver satisfeito, pedimos o restante antes da entrega final.
       
      Estamos ansiosos para trabalhar juntos. Se tiver dúvidas ou estiver interessado em nossos serviços, sinta-se à vontade para entrar em contato. Mal podemos esperar para construir algo incrível juntos!
       
      Converse Comigo:
      Estou à disposição para conversar e discutir projetos.
      Fique à vontade para me contatar aqui ou através das seguintes redes:
       
      LinkedIn: Rafhael Oliveira
       
      Meus Projetos: Dê uma olhada nos meus projetos no GitHub: GitHub Repositories
       
      Otland: Confira meu perfil no Otland e veja minhas conquistas: Perfil no Otland
       
      Com uma experiência sólida de 10 anos na área de desenvolvimento de OTS,
       

       
    • Por amoxicilina
      Action: Remover skull
       
       
    • Por luanluciano93
      Trade Offline
       

       
      O sistema foi testado apenas em TFS 1.5
       
      O sistema funciona de forma semelhante ao Market System das versões atuais, porem sem exibição gráfica das ofertas in-game, para isso o sistema vai acompanhado de uma página para o Gesior AAC. Este sistema existe no fórum há um bom tempo e já é familiar pra muitos jogadores, essa versão trás consigo algumas melhorias e diferenças que irei listar abaixo.
       
      Sistema
      Ofertas removidas automaticamente no tempo configurado. Agora é possível vender um item exigindo outro item em troca ao invés de dinheiro. Containers com um conjunto de itens dentro agora podem ser anunciados. Agora o sistema verifica as cargas e durações dos itens antes de criar uma oferta. Novo parâmetro adicionado para verificar informações de ofertas in-game. Agora todo valor recebido vai diretamente para o banco do vendedor.  
      Todo essa atualização de versão foi feita com base no script do WooX: 

      TRADE_OFFLINE.LUA: https://raw.githubusercontent.com/luanluciano93/ESTUDOS/master/LUA/trade_offline/trade_offline_revscript.lua

       
  • Estatísticas dos Fóruns

    96843
    Tópicos
    519592
    Posts
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo