Quest & Objective System
Overview
A complete quest framework for any Roblox game. 12 objective types, 7 reward types, NPC quest givers with dialog UI, world waypoints, branching choices, difficulty variants, quest pools with daily/weekly resets, cross-server leaderboards, A/B cohorts, admin commands, webhook events, Discord webhooks, cinematic completion FX, a Studio plugin for visual editing, and DataStore-backed per-player saves.
Ships with 17+ starter quests, working NPC examples, and three layout presets — runs the moment you install it.
3 UI layouts (Modal / Tabbed / Drawer) and 6 color presets (Teal / Purple / Cyan / Gold / Crimson / Mono) — switch with one config line. Or pick "Custom" to hand-tune every color.
Open source. Plain Luau. No obfuscation. Edit any file freely.
The Engine
12 Objective Types
- Collect — pick up tagged parts (auto-detected on tag-Touched)
- Defeat — kill counter (you fire
_G.CoreShunQuest_AddProgressfrom your combat code) - Reach — auto-detected when player enters a tagged region
- Talk — auto-attached ProximityPrompt on tagged NPC
- Use — auto-attached ProximityPrompt on tagged object
- Earn — watches leaderstats currency increments
- Touch — auto-detected on first contact with tagged part
- Survive — stand in a tagged zone for N seconds, leaving resets timer
- Sequence — touch a list of tagged parts in a specific order
- TimeLimit — auto-fail if quest isn't complete within N seconds
- Stat — auto-polled vs a player attribute or leaderstat
- Custom — register your own polled predicate via
_G.CoreShunQuest_Predicates
7 Reward Types
- Currency — auto-creates leaderstats and adds to IntValues
- Tool — clones a Tool from ServerStorage to backpack + StarterGear
- Teleport — to a CFrame in this place, OR to another place via PlaceId
- Badge — calls BadgeService:AwardBadge
- Buff — multiplies a Humanoid stat (e.g. WalkSpeed × 2) for N seconds
- Title — sets
CSQuestTitleattribute (your nameplate script reads it) - Custom — buyer-defined effects via
_G.CoreShunQuest_OnGrantReward
Quest Pools
- Repeatable quests via random selection — author one pool with N candidates, system rotates fresh per-player picks on each reset
- Daily / weekly resets — UTC-aligned scheduling
- Anti-duplicate window — prevents same quest two cycles in a row
- Per-player rotation — every player gets a different draw from the same pool
- Quest reroll — let players spend currency to re-roll a daily pool, with per-cycle cap
Branching Quests
- Choice modal on claim — player picks one of several paths
- Deferred-claim UX — "Decide later" leaves the quest claimable; clicking Claim Reward again re-shows the modal
- Choice tags persisted — read via
_G.CoreShunQuest_GetChoiceTag(player, questId)from any script (server-side, survives rejoin via DataStore) - Auto-accept Next quest — chosen path's follow-up quest accepts automatically
Difficulty Variants
- Easy / Normal / Hard (configurable) — picker modal on accept
- Per-difficulty multipliers — scale objective targets and currency rewards independently
- Pool quests auto-skip the picker (use the configured default)
The UI
Quest Log Panel
- 3 layout presets — Modal (premium feel) · Tabbed (mobile-first) · Drawer (action games). Switch with one config line.
- 6 color presets — Teal · Purple · Cyan · Gold · Crimson · Mono · Custom. Re-theme the entire UI in one line.
- Filters + Search — search bar + status chips (All / Active / Available / Completed / Locked) at the top of the content column
- History tab — auto-injected sidebar tab showing claimed quests sorted by recent
- Pure scale UI — works on every device + aspect ratio. Mobile breakpoint auto-grows panel. Open button auto-relocates on touch devices.
- Configurable hotkey — keyboard (default: J) + gamepad (default: nil)
HUD Tracker
- Multi-quest tracking — pin multiple quests to the HUD, configurable max simultaneous (FIFO eviction at cap)
- Per-card untrack — × button on each HUD card removes it without opening the menu
- Compact / Detailed / Hidden HUD styles
- Live progress — Survive ticks 0/30 → 30/30 visibly; Sequence ticks 1/3 → 2/3 → 3/3
NPC Quest Givers
- Floating indicator — auto-renders
!(offerable) /✓(claim) / nothing (none) above tagged NPCs - Dialog UI — ProximityPrompt-triggered modal showing offered quests with Accept / Claim / Tracking buttons
- Static + runtime registration — list NPCs in Config OR call
_G.CoreShunQuest_RegisterGiver(part, quests)for dynamic ones
World Waypoints
- 3D arrow — floating cyan ▼ above the next pending objective's tagged part, with live distance label
- Auto-hides when the player is within HideWithinDistance studs (configurable)
- Tracks only the player's tracked quests (configurable to show all active)
- Sequence-aware — points to the NEXT step's part, not all of them
Cinematic Completion
- Confetti shower — colorful particles drop from the top of the screen on completion
- Screen flash — brief white flash that fades out
- Panel pulse — subtle scale boost on the quest panel
- Per-quest completion sound — override
Quest.CompletionSoundIdfor boss-tier moments
Operations & Live-Ops
Admin Commands
- Chat-driven moderation — gate by UserId list and/or group rank
/givequest <player> <questId>— bypasses prereqs/completequest <player> <questId>— auto-accepts if needed/resetquest//resetall//reroll//quests//help- Audit-logged to the server console + optional Discord webhook
Cross-Server Leaderboards
- OrderedDataStore-backed — TotalCompletions, WeeklyCompletions, more (configurable)
- Throttled writes — won't burn DataStore quota
- Read API —
_G.CoreShunQuest_GetLeaderboard(boardId, topN)
Webhook Events
- Discord-compatible JSON webhooks for Accept / Complete / Claim / Abandon / AdminAction events
- Per-event toggles — only forward what you care about
- Throttled to respect Discord's rate limits
A/B Cohorts
- Deterministic UserId hash → bucket assignment with configurable weights (e.g. 50/50)
- Test variant features safely on real players
- Read API —
_G.CoreShunQuest_GetCohort(player)
Procedural Templates
- {VARIABLES} in quest text — render player name, server id, objective targets, custom data
- Built-in vars —
{PLAYER},{USERNAME},{OBJECTIVE_n},{TARGET_n},{REWARD_PRIMARY},{DATE},{SERVER} - Buyer-extensible — register custom vars on
_G.CoreShunQuest_TemplateVars
Studio Plugin
- Live quest browser — search, filter, click to inspect the full quest table
- Validator — same checks the server runs at boot (duplicate IDs, broken Requires, missing categories, undefined currencies, NPC giver typos), prints to Output
- Drop-in install — copy
CoreShunQuestEditor.rbxmto your local Plugins folder
Integrations
- NPC integration — tag a part with
CSQuest_Guide(or list it inConfig.QuestGivers.List), the system auto-attaches a ProximityPrompt and renders the indicator + dialog - Region detection — tag a region BasePart, system polls every 0.5s and progresses Reach / Survive objectives on entry
- Currency rewards — auto-creates leaderstats. List your currencies in
Config.Rewards.Currencies - Toast integration — auto-detected if
CoreShunToastis installed; quest popups route through Toast. Falls back to built-in popups otherwise. - Settings Menu integration — honors
reduce_motion(skips animations) andhigh_contrast(boosts UIStrokes) if Settings Menu is installed
DataStore Persistence
- Per-player saves — quest progress, choice tags, completion counts, weekly buckets all persist across servers and sessions
- Server-side sanitization — bad payloads clamped or rejected
- Race-safe loading — synchronous load in PlayerAdded prevents race-window data loss
- Rate-limited writes — defends against spam from misbehaving clients
- Graceful fallback — falls back to in-memory mode if API access is off (settings still work in-session)
- Smart shutdown flush — saves on PlayerRemoving + BindToClose without double-writing (DataStore quota safe)
- Configurable DataStore name — change in
Config.General.DataStoreName
Buyer Integration (
_G Hooks)Reading (server or client):
_G.CoreShunQuest_GetActive(player)_G.CoreShunQuest_GetCompleted(player)_G.CoreShunQuest_GetProgress(player, id)_G.CoreShunQuest_IsComplete(player, id)_G.CoreShunQuest_GetChoiceTag(player, id)_G.CoreShunQuest_GetCohort(player)_G.CoreShunQuest_GetLeaderboard(boardId, topN)
Writing (server-side):
_G.CoreShunQuest_Accept(player, questId)_G.CoreShunQuest_Abandon(player, questId)_G.CoreShunQuest_AddProgress(player, questId, objIdx, n)_G.CoreShunQuest_Complete(player, questId)— force-complete_G.CoreShunQuest_RerollPool(player, poolId)_G.CoreShunQuest_OfferQuest(player, questId)_G.CoreShunQuest_RegisterGiver(part, quests, displayName)
UI control + lifecycle (client):
_G.CoreShunQuest_Open / Close / Toggle_G.CoreShunQuest_Track / Untrack / GetTracked_G.CoreShunQuest_OpenReroll(poolId)_G.CoreShunQuest_OnAccept / OnProgress / OnComplete / OnClaim / OnAbandon_G.CoreShunQuest_OnGrantReward(player, action, quest)— wire custom rewards_G.CoreShunQuest_OnGrantCurrency(player, currency, amount)— mirror to your own economy_G.CoreShunQuest_Predicates— register polled predicates for Custom objectives_G.CoreShunQuest_TemplateVars— register custom template variables
Cross-Platform
- Desktop — mouse hover, click drag, optional keyboard hotkey (J by default)
- Mobile — touch-friendly buttons, panel auto-grows on small screens, open button auto-relocates to right-edge middle. Uses
Activatedfor tap-tolerance. - Console — D-pad navigable via Roblox's built-in GuiService, optional gamepad hotkey
What's Included
- CoreShunQuestSystem.rbxmx — the full quest system (drop into Workspace + run installer)
- CoreShunQuestEditor.rbxm — the Studio plugin (copy to local Plugins folder)
- QuestConfig.lua — single config ModuleScript (the only file you edit)
- QuestPresets.lua — 6 color palettes (extensible)
- QuestServer.lua — DataStore + remotes + objective watchers + admin commands
- QuestClient.lua — UI + 3 layouts + HUD + popups + cinematic FX
- Installer.lua — one-click command bar installer
- Manual.pdf — comprehensive feature guide
- Cheatsheet.pdf — visual quick-reference
- README.txt — setup + reference
- Rojo project — for active development
Easy Installation
- Drag
CoreShunQuestSystem.rbxmxinto your place - Open the Studio Command Bar
- Run
require(workspace.CoreShunQuestSystem.Installer)() - Tag NPCs / regions / objects with
CSQuest_<TagName>via CollectionService - Press F5 — press J or click the floating ★ button. 17+ starter quests are already wired.
- Optional: copy
CoreShunQuestEditor.rbxmto%LOCALAPPDATA%\Roblox\Plugins\for the Studio editor plugin
Frequently Asked
How do I add my own quests?
Open QuestConfig in ReplicatedStorage. Append to
Config.Quests with an Id, Category, Name, Objectives, and Rewards. Save. Quest appears next playtest.How do I make daily quests vary day-to-day?
Use a Quest Pool. Author 5-20 daily candidates, set
MaxActive = 3, system rotates fresh picks per player on UTC midnight.How do I add an NPC that gives quests?
Tag a BasePart with
CSQuest_Guide, add an entry to Config.QuestGivers.List mapping that tag to a list of quest Ids. Done — floating "!" indicator + dialog UI auto-render.How do I make a branching quest?
Add a
Choices table to any quest. The choice modal pops up on Claim, the chosen Tag is recorded on the player, and the chosen Next quest auto-accepts.How do I make a quest with multiple difficulty levels?
Add a
Difficulties table with TargetMul + RewardMul per tier. A picker modal shows on accept; targets and rewards scale accordingly.My NPC doesn't show a Talk prompt.
Tag the NPC's interaction part with
CSQuest_<YourTag> matching the objective's Tag value. The system auto-attaches a ProximityPrompt on boot.Region quests aren't completing.
The system uses bounding-box hit detection on the player's HRP. Make sure your tagged region is tall enough that the player's body fits inside vertically (a 1-stud-tall floor plate won't trigger; use 6+ studs height).
How do I award currency / items / teleport / titles from a quest?
Add the corresponding reward type to the
Rewards table: Currency, Tool, Teleport, Badge, Buff, Title, or Custom. Manual covers the schema for each.Quest progress resets on rejoin in Studio?
DataStores need API access enabled in Studio: File → Game Settings → Security → "Enable Studio Access to API Services". Without it, the system falls back to in-memory mode and progress is lost on stop.
Does it work on mobile and console?
Yes. Pure scale UI, mobile breakpoint auto-grows the panel, controller D-pad navigation. Open button auto-relocates to avoid Roblox's jump button. Click handlers use
Activated for touch-tolerance.Can I use my own image as the open button?
Yes. Set
Config.OpenButton.Style = "Image" and provide ImageId = "rbxassetid://YOUR_ID".Can I disable a feature I don't want?
Yes — every feature section (
QuestGivers, Waypoints, Branching, Difficulty, Filters, History, Reroll, Admin, Cinematic, Leaderboards, Cohorts, Webhooks, Templates) has an Enabled flag. Toggle off and the rest of the system adapts.Can I open the menu from my own button?
Yes. Call
_G.CoreShunQuest_Open() from any LocalScript.Will it conflict with my existing systems?
It uses its own DataStore name and Remotes folder. Tag names use the
CSQuest_ prefix to avoid collisions.Open source?
Fully. Plain Luau, no obfuscation. Edit any file to customize.
Pairs Well With
- Daily Rewards — daily quests + daily login = full retention loop
- Toast — quest popups route through Toast automatically when installed
- Settings Menu — reduce-motion + high-contrast settings honored
More Tools by coreshun
- In-Game Systems — Settings Menu, Music Player (premium), Simple Music Player, Daily Rewards, Loading Screen, Advanced Chat System, Toast, Anti-Exploit, AutoRejoin, Codes Redemption
- Studio Plugins — Color Picker, UI Wireframe, Gamepass Manager, TODO Tracker (free)
- Bundles — up to 45% off
Support
Discord: discord.com/invite/hdB5tadkk8
$9.99 · 12 objective types · 7 reward types · NPC givers · Waypoints · Branching · Difficulty · Cinematics · Leaderboards · Studio plugin · Open source
