← Back to Portal Hub

Arsitektur Quest Roblox: Graf Dependensi DAG, State Machine & Pohon Dialog

By DopaBrain Roblox Systems Engineering Team • 2026-09-29 • Technical Guide

Quest dan dialog adalah tulang punggung narasi dalam game RPG dan petualangan di Roblox. Tanpa arsitektur yang kokoh, pemain yang putus koneksi di tengah cutscene dapat mengalami reset data permanen.

Dengan menerapkan graf DAG untuk prasyarat quest, penanganan event bus yang terpisah, pohon dialog kondisional, serta kompresi bitfield di DataStore, pengembang dapat menyajikan pengalaman bermain yang mulus.

1. Quest sebagai Directed Acyclic Graph (DAG)

Menyusun alur cerita kompleks tanpa kebuntuan sirkular:

2. Finite State Machine (FSM) Siklus Hidup Quest

Penerapan transisi status yang ketat untuk mencegah eksploitasi:

ServerScriptService.QuestSystem.QuestManager
-- Pengelola Quest FSM
local QuestManager = {}
QuestManager.__index = QuestManager
local QuestDatabase = require(game.ReplicatedStorage.QuestDatabase)

function QuestManager.new(player, profileData)
    local self = setmetatable({}, QuestManager)
    self.Player = player
    self.ActiveQuests = profileData.ActiveQuests or {}
    self.CompletedQuests = profileData.CompletedQuests or {}
    return self
end

function QuestManager:CanStartQuest(questId)
    local data = QuestDatabase[questId]
    if not data then return false end
    if self.CompletedQuests[questId] or self.ActiveQuests[questId] then return false end
    for _, prereqId in ipairs(data.Prerequisites) do
        if not self.CompletedQuests[prereqId] then return false end
    end
    return true
end

function QuestManager:AcceptQuest(questId)
    if not self:CanStartQuest(questId) then return false end
    self.ActiveQuests[questId] = {
        Step = 1,
        Counters = table.create(#QuestDatabase[questId].Steps[1].Objectives, 0)
    }
    return true
end

return QuestManager

3. Pelacakan Sasaran Berbasis Event Bus

Memisahkan aksi game dari kode validasi misi:

4. Pohon Dialog Interaktif & Logika Pilihan

Percakapan NPC yang memiliki dampak nyata pada jalannya permainan:

5. Kompresi Penyimpanan DataStore dengan ProfileService

Menyimpan ratusan riwayat quest dengan ukuran memori sangat kecil:

Frequently Asked Questions

Mengapa quest harus dimodelkan sebagai DAG?

Untuk mencegah kebuntuan logika di mana dua misi saling membutuhkan satu sama lain sehingga tidak bisa diselesaikan.

Bagaimana event bus menghemat kinerja game?

Menghilangkan loop pengecekan tiap frame; sistem hanya bereaksi saat pemain melakukan tindakan yang relevan.

Bagaimana cara mencegah hilangnya data saat koneksi terputus?

Gunakan ProfileService dengan session locking untuk mencatat perubahan secara instan di memori dan penyimpanan.

Bagaimana membagikan reward dialog secara aman?

Tampilan dialog dijalankan di klien, tetapi pemberian hadiah diverifikasi dan dieksekusi secara ketat oleh server.

Explore More Interactive Tests & Guides

Discover personalized cognitive assessments, stress evaluations, and game psychology tools on DopaBrain.

Go to Portal Hub