How to make a quest system in Roblox
Short answer
Define quests as data (id, goal type, target, amount, reward), keep each player's progress in their saved profile, and send progress events from your game code ("killed slime", "collected coin"). One server function adds progress to every active quest that matches the event, completes it at the target amount and grants the reward once.
Copy-paste code
Server: quest progress
local QUESTS = {
slimes = { text = "Defeat 10 slimes", event = "kill", target = "Slime", amount = 10, reward = 100 },
coins = { text = "Collect 50 coins", event = "collect", target = "Coin", amount = 50, reward = 75 },
}
local Quests = {}
function Quests.start(data, id)
data.quests = data.quests or {}
if QUESTS[id] and not data.quests[id] then data.quests[id] = { n = 0, done = false } end
end
function Quests.progress(data, event, target, amount)
for id, q in data.quests or {} do
local def = QUESTS[id]
if not q.done and def.event == event and def.target == target then
q.n = math.min(def.amount, q.n + (amount or 1))
if q.n >= def.amount then
q.done = true
data.coins = (data.coins or 0) + def.reward
end
end
end
end
return Quests
-- in your combat code (server): Quests.progress(profiles[player], "kill", "Slime")Good to know
Keep quest text and rewards in one table so designers can add quests without touching the logic.
Send the quest list and progress to the client with a RemoteEvent after each change to update the quest tracker GUI.
Questwren Quest & Dialogue System: Quests and NPC dialogue that just work
from $7Questwren is the full quest and dialogue system: a quest log with chains, daily and weekly resets and timed quests, branching NPC conversations, rewards granted exactly once, and a dialogue box and quest tracker UI.
Secure checkout · 14-day fix-or-refund if it doesn't work as described (terms)Questions
How do I add daily quests?
Store the UTC day the quests were rolled; when it changes, pick new quest ids and reset their progress.
Can NPCs give quests?
Yes: a ProximityPrompt on the NPC calls Quests.start(data, id) on the server.
Free: the Roblox Starter Kit
7 free Luau modules (damage, pets, shop formatting, admin audit log, tycoon guards and more) plus 3 free calculators, then 5 short emails with the scripting fixes we see go wrong most often.