Skip to content
Search/
CyberMax › Answers

How to make a quest system in Roblox

Updated 2026-10-26 · Roblox and game developers · by CyberMax

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 icon

Questwren Quest & Dialogue System: Quests and NPC dialogue that just work

from $7

Questwren 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.

You get one email to confirm first. Then the kit, and 5 short emails over two weeks. One-click unsubscribe in every email; we never share your address.

Related answers

Roblox daily rewards script with a login streakA server-side daily reward and streak script for Roblox: UTC day numbers, a streak that resets after a missed A Roblox DataStore save script that never wipes player dataCopy-paste Luau for loading and saving player data with DataStoreService: retries, UpdateAsync, BindToClose an