Ir para conteúdo
Propaganda

Posts Recomendados

Rapaziada, eu sou novo nesse Revscript e eu estou precisando de uma ajuda, a quest não mostra iniciada (oque não é tão relevante assim para mim) e quando eu clico no bau eu escolho qual dos items eu quero e pego um deles (onde finalizo a quest) não aparece no quest log que aquela quest foi completada ou finalizada etc

No caso a quest era para funcionar assim:
Passa pela porta lvl 200
o tile ou a porta mesmo notifica o player que a quest foi iniciada, e quando clicar no bau a quest finaliza e mostra no quest log, ou então apenas quando ele clica no bau a quest é mostrada finalizada no quest log

 

Esse aqui é meu Moviments

Citar

local theFlameDoor = MoveEvent()

function theFlameDoor.onStepIn(creature, item, position, fromPosition)
    local player = creature:getPlayer()
    if not player then
        return true
    end

    if player:getStorageValue(Storage.Quest.TheFlame.QuestStart) ~= 1 then
        player:setStorageValue(Storage.Quest.TheFlame.QuestStart, 1)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have entered the quest area. Defeat the monsters and claim your reward!")
    end

    return true
end

theFlameDoor:type("stepin")
theFlameDoor:aid(50001) -- Action ID da porta no RME
theFlameDoor:register()
 

 

esse aqui é meu
Storages

Citar

Storage = {
    Quest = {
        Key = {
            ID1000 = 103,
        },
        ExampleQuest = {
            Example = 9000,
            Door = 9001,
        },
        TheFlame = {
            QuestStart = 50001,
            ChestReward = 50002,
            QuestComplete = 50003,
        },
    },

    DelayLargeSeaShell = 30002,
    Imbuement = 30004,
}

GlobalStorage = {
    ExampleQuest = {
        Example = 60000,
    },
}

 

esse é meu LIB/QUEST.LUA

Citar

if not Quests then
    Quests = {
        [1] = {
            name = "Example",
            startStorageId = Storage.Quest.ExampleQuest.Example,
            startStorageValue = 1,
            missions = {
                [1] = {
                    name = "The Hidden Seal",
                    storageId = Storage.Quest.ExampleQuest.Example,
                    missionId = 1,
                    startValue = 1,
                    endValue = 1,
                    description = "You broke the first seal.",
                },
            },
        },
    }
end

-- Adicionando nova quest (sem apagar a anterior)
Quests[#Quests + 1] = {
    name = "The Flame",
    startStorageId = Storage.Quest.TheFlame.QuestStart,
    startStorageValue = 1,
    missions = {
        [1] = {
            name = "The Flame",
            storageId = Storage.Quest.TheFlame.QuestComplete,
            missionId = 1001,
            startValue = 0,
            endValue = 1,
            states = {
                [0] = "Enter The Flame quest area, defeat the monsters and claim your legendary reward!",
                [1] = "You have completed The Flame quest and claimed your legendary weapon!"
            }
        }
    }
}

e esse é meu
ESSE É MEU ACTIONS/QUEST/THE_FLAME_CHEST.LUA
 

Citar

local theFlameChest = Action()

local choiceRewards = {
    [8001] = {id = 3309, count = 1}, -- thunder hammer
    [8002] = {id = 8097, count = 1}, -- solar axe
    [8003] = {id = 8103, count = 1}, -- epiphany (sword)
}

function theFlameChest.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    -- Verifica se o player já pegou a recompensa
    if player:getStorageValue(Storage.Quest.TheFlame.ChestReward) == 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "It is empty.")
        return true
    end

    -- Verifica se o player iniciou a quest
    if player:getStorageValue(Storage.Quest.TheFlame.QuestStart) ~= 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You haven't completed the requirements for this quest.")
        return true
    end

    -- Pega a recompensa do baú específico
    local reward = choiceRewards[item.uid]
    if not reward then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "This chest has no reward.")
        return true
    end

    local rewardItem = player:addItem(reward.id, reward.count)
    if rewardItem then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have found a " .. ItemType(reward.id):getName():lower() .. ".")
        player:setStorageValue(Storage.Quest.TheFlame.ChestReward, 1)
        player:setStorageValue(Storage.Quest.TheFlame.QuestComplete, 1)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Quest completed!")
    else
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You don't have enough space in your inventory.")
    end

    return true
end

-- Registrando os 3 baús pelo UID
theFlameChest:uid(8001)
theFlameChest:uid(8002)
theFlameChest:uid(8003)
theFlameChest:register()

 

Link para o comentário
https://tibiadevs.com/forums/topic/1253-revscript-quest-n%C3%A3o-aparece-no-quest-log-e-n%C3%A3o-da-inicio-de-quest/
Compartilhar em outros sites

Amigo @ Bielzet Abra o arquivo lib/quest.lua no seu servidor, apague todo o conteúdo atual do arquivo e cole o código abaixo no lugar e teste para ver se ele vai ser exibido como você deseja. xD
 

if not Quests then
    Quests = {
        [1] = {
            name = "Example",
            startStorageId = Storage.Quest.ExampleQuest.Example,
            startStorageValue = 1,
            missions = {
                [1] = {
                    name = "The Hidden Seal",
                    storageId = Storage.Quest.ExampleQuest.Example,
                    missionId = 1,
                    startValue = 1,
                    endValue = 1,
                    description = "You broke the first seal.",
                },
            },
        },
        [2] = {
            name = "The Flame",
            startStorageId = Storage.Quest.TheFlame.QuestStart,
            startStorageValue = 1,
            missions = {
                [1] = {
                    name = "The Flame",
                    storageId = Storage.Quest.TheFlame.QuestComplete,
                    missionId = 1001,
                    startValue = 0,
                    endValue = 1,
                    description = "Begin your journey into the flames.",
                    states = {
                        [0] = "Enter The Flame quest area, defeat the monsters and claim your legendary reward!",
                        [1] = "You have completed The Flame quest and claimed your legendary weapon!"
                    }
                }
            }
        }
    }
end


ACTIONS/THE_FLAME_CHEST.LUA

 

local theFlameChest = Action()

-- Tabela de recompensas por UID do baú
local chestRewards = {
    [8001] = {id = 3309, name = "Thunder Hammer"}, -- Thunder Hammer
    [8002] = {id = 8097, name = "Solar Axe"},      -- Solar Axe
    [8003] = {id = 8103, name = "Epiphany"},       -- Epiphany (Sword)
}

-- Mensagens padrão
local MESSAGES = {
    EMPTY = "Está vazio.",
    NOT_ELIGIBLE = "Você não concluiu os requisitos para esta missão.",
    NO_REWARD = "Este baú não tem recompensa.",
    SUCCESS = "Você encontrou um %s.",
    QUEST_COMPLETE = "Missão concluída!",
    NO_SPACE = "Você não tem espaço suficiente no seu inventário."
}

function theFlameChest.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local reward = chestRewards[item.uid]

    -- Verifica se o baú tem recompensa definida
    if not reward then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.NO_REWARD)
        return true
    end

    -- Verifica se o jogador já recebeu a recompensa
    if player:getStorageValue(Storage.Quest.TheFlame.ChestReward) == 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.EMPTY)
        return true
    end

    -- Verifica se o jogador iniciou a quest
    if player:getStorageValue(Storage.Quest.TheFlame.QuestStart) ~= 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.NOT_ELIGIBLE)
        return true
    end

    -- Tenta adicionar o item ao inventário
    local itemReceived = player:addItem(reward.id, 1)
    if itemReceived then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format(MESSAGES.SUCCESS, reward.name:lower()))
        player:setStorageValue(Storage.Quest.TheFlame.ChestReward, 1)
        player:setStorageValue(Storage.Quest.TheFlame.QuestComplete, 1)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.QUEST_COMPLETE)
    else
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.NO_SPACE)
    end

    return true
end

-- Registra os baús com seus respectivos UIDs
for uid in pairs(chestRewards) do
    theFlameChest:uid(uid)
end

theFlameChest:register()



Espero ter ajudado!

  • Thanks 1
Em 24/09/2025 em 20:59, amoxicilina disse:

Amigo @ Bielzet Abra o arquivo lib/quest.lua no seu servidor, apague todo o conteúdo atual do arquivo e cole o código abaixo no lugar e teste para ver se ele vai ser exibido como você deseja. xD
 

if not Quests then
    Quests = {
        [1] = {
            name = "Example",
            startStorageId = Storage.Quest.ExampleQuest.Example,
            startStorageValue = 1,
            missions = {
                [1] = {
                    name = "The Hidden Seal",
                    storageId = Storage.Quest.ExampleQuest.Example,
                    missionId = 1,
                    startValue = 1,
                    endValue = 1,
                    description = "You broke the first seal.",
                },
            },
        },
        [2] = {
            name = "The Flame",
            startStorageId = Storage.Quest.TheFlame.QuestStart,
            startStorageValue = 1,
            missions = {
                [1] = {
                    name = "The Flame",
                    storageId = Storage.Quest.TheFlame.QuestComplete,
                    missionId = 1001,
                    startValue = 0,
                    endValue = 1,
                    description = "Begin your journey into the flames.",
                    states = {
                        [0] = "Enter The Flame quest area, defeat the monsters and claim your legendary reward!",
                        [1] = "You have completed The Flame quest and claimed your legendary weapon!"
                    }
                }
            }
        }
    }
end


ACTIONS/THE_FLAME_CHEST.LUA

 

local theFlameChest = Action()

-- Tabela de recompensas por UID do baú
local chestRewards = {
    [8001] = {id = 3309, name = "Thunder Hammer"}, -- Thunder Hammer
    [8002] = {id = 8097, name = "Solar Axe"},      -- Solar Axe
    [8003] = {id = 8103, name = "Epiphany"},       -- Epiphany (Sword)
}

-- Mensagens padrão
local MESSAGES = {
    EMPTY = "Está vazio.",
    NOT_ELIGIBLE = "Você não concluiu os requisitos para esta missão.",
    NO_REWARD = "Este baú não tem recompensa.",
    SUCCESS = "Você encontrou um %s.",
    QUEST_COMPLETE = "Missão concluída!",
    NO_SPACE = "Você não tem espaço suficiente no seu inventário."
}

function theFlameChest.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local reward = chestRewards[item.uid]

    -- Verifica se o baú tem recompensa definida
    if not reward then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.NO_REWARD)
        return true
    end

    -- Verifica se o jogador já recebeu a recompensa
    if player:getStorageValue(Storage.Quest.TheFlame.ChestReward) == 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.EMPTY)
        return true
    end

    -- Verifica se o jogador iniciou a quest
    if player:getStorageValue(Storage.Quest.TheFlame.QuestStart) ~= 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.NOT_ELIGIBLE)
        return true
    end

    -- Tenta adicionar o item ao inventário
    local itemReceived = player:addItem(reward.id, 1)
    if itemReceived then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format(MESSAGES.SUCCESS, reward.name:lower()))
        player:setStorageValue(Storage.Quest.TheFlame.ChestReward, 1)
        player:setStorageValue(Storage.Quest.TheFlame.QuestComplete, 1)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.QUEST_COMPLETE)
    else
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.NO_SPACE)
    end

    return true
end

-- Registra os baús com seus respectivos UIDs
for uid in pairs(chestRewards) do
    theFlameChest:uid(uid)
end

theFlameChest:register()



Espero ter ajudado!

Funcionou sim irmão, muito obrigado


E se eu fosse fazer uma quest que ganha apenas um item
seria da mesma maneira? @amoxicilina

esse seria o Crystal_Arrow_chest

Citar

local CrystalArrowChest = Action()

-- Tabela de recompensas por UID do baú
local chestRewards = {
    [8004] = {id = 3239, name = "Thunder Hammer"}, -- Thunder Hammer
}

-- Mensagens padrão
local MESSAGES = {
    EMPTY = "Está vazio.",
    NOT_ELIGIBLE = "Você não concluiu os requisitos para esta missão.",
    NO_REWARD = "Este baú não tem recompensa.",
    SUCCESS = "Você encontrou um %s.",
    QUEST_COMPLETE = "Missão concluída!",
    NO_SPACE = "Você não tem espaço suficiente no seu inventário."
}

function CrystalArrowChest.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local reward = chestRewards[item.uid]

    -- Verifica se o baú tem recompensa definida
    if not reward then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.NO_REWARD)
        return true
    end

    -- Verifica se o jogador já recebeu a recompensa
    if player:getStorageValue(Storage.Quest.CrystalArrow.ChestReward) == 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.EMPTY)
        return true
    end

    -- Verifica se o jogador iniciou a quest
    if player:getStorageValue(Storage.Quest.CrystalArrow.QuestStart) ~= 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.NOT_ELIGIBLE)
        return true
    end

    -- Tenta adicionar o item ao inventário
    local itemReceived = player:addItem(reward.id, 1)
    if itemReceived then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format(MESSAGES.SUCCESS, reward.name:lower()))
        player:setStorageValue(Storage.Quest.CrystalArrow.ChestReward, 1)
        player:setStorageValue(Storage.Quest.CrystalArrow.QuestComplete, 1)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.QUEST_COMPLETE)
    else
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, MESSAGES.NO_SPACE)
    end

    return true
end

-- Registra os baús com seus respectivos UIDs
for uid in pairs(chestRewards) do
    CrystalArrowChestt:uid(uid)
end

CrystalArrowChest:register()

esse seria o storage
 

Citar

Storage = {  
    Quest = {  
        Key = {  
            ID1000 = 103,  
        },  
        ExampleQuest = {  
            Example = 9000,  
            Door = 9001,  
        },  
        TheFlame = {  
            QuestStart = 500012,  
            ChestReward = 500022,  
            QuestComplete = 500032,  
        },  
        CrystalArrow = {  
            QuestStart = 50022,  
            ChestReward = 50023,  
            QuestComplete = 50024,  
        },  
    },  
  
    DelayLargeSeaShell = 30002,  
    Imbuement = 30004,  
}  
  
GlobalStorage = {  
    ExampleQuest = {  
        Example = 60000,  
    },  
}


esse seria o quest.lua
 

Citar

if not Quests then  
    Quests = {  
        [1] = {  
            name = "Example",  
            startStorageId = Storage.Quest.ExampleQuest.Example,  
            startStorageValue = 1,  
            missions = {  
                [1] = {  
                    name = "The Hidden Seal",  
                    storageId = Storage.Quest.ExampleQuest.Example,  
                    missionId = 1,  
                    startValue = 1,  
                    endValue = 1,  
                    description = "You broke the first seal.",  
                },  
            },  
        },  
        [2] = {  
            name = "The Flame",  
            startStorageId = Storage.Quest.TheFlame.QuestStart,  
            startStorageValue = 1,  
            missions = {  
                [1] = {  
                    name = "The Flame Trial",  
                    storageId = Storage.Quest.TheFlame.QuestComplete,  
                    missionId = 1001,  
                    startValue = 0,  
                    endValue = 1,  
                    description = "Begin your journey into the flames.",  
                    states = {  
                        [0] = "Enter The Flame quest area, defeat the monsters and claim your legendary reward!",  
                        [1] = "You have completed The Flame quest and claimed your legendary weapon!"  
                    }  
                }  
            }  
        },  
        [3] = {  
            name = "Crystal Arrow",  
            startStorageId = Storage.Quest.CrystalArrow.QuestStart,  -- Storage próprio  
            startStorageValue = 1,  
            missions = {  
                [1] = {  
                    name = "Crystal Arrow",  
                    storageId = Storage.Quest.CrystalArrow.QuestComplete,  -- Storage próprio  
                    missionId = 1002,  
                    startValue = 0,  
                    endValue = 1,  
                    description = "Begin your journey to find the Crystal Arrow.",  
                    states = {  
                        [0] = "Enter Crystal Arrow quest area, defeat the monsters and claim your legendary reward!",  
                        [1] = "You have completed Crystal Arrow quest and claimed your legendary weapon!"  
                    }  
                }  
            }  
        }  
    }  
end

Se estiver errado e puder falar onde eu errei para que eu possa arrumar para aprender e não encher o saco mais do pessoal obrigado mano

  • 2 semanas atrás...
Em 28/09/2025 em 03:44, Bielzet disse:

Funcionou sim irmão, muito obrigado


E se eu fosse fazer uma quest que ganha apenas um item
seria da mesma maneira? @amoxicilina

esse seria o Crystal_Arrow_chest

esse seria o storage
 


esse seria o quest.lua
 

Se estiver errado e puder falar onde eu errei para que eu possa arrumar para aprender e não encher o saco mais do pessoal obrigado mano

Nessa sua dúvida sobre o arquivo Crystal_Arrow_chest.lua, temos duas questões a serem consideradas.

1° Primeira. CORRETA

-- Tabela de recompensas por UID do baú
local chestRewards = {
    [8004] = {id = 3239, name = "Thunder Hammer"}, -- Thunder Hammer
}

2° Segunda. ERRADA
CrystalArrowChestt:uid(uid)
Sua variável é CrystalArrowChest "(com um t)" você colocou com dois.
Isso vai causar erro (attempt to index global 'CrystalArrowChestt')


@ Bielzet Se você tiver outras dúvidas sobre algum assunto específico, recomendo criar um novo tópico. Caso a questão principal deste tópico já tenha sido solucionada, peça aos moderadores para marcá-lo como “Resolvido”. Assim evitamos que o tópico fique poluído e ajudamos a manter o fórum mais organizado e dinâmico, facilitando também para quem, no futuro, tiver dúvidas semelhantes às suas.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
  • Criar Novo...