← Back to Portal Hub

Arquitetura de Missões no Roblox: Grafos DAG, Máquinas de Estado & Diálogos Ramificados

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

Missões e diálogos são o coração narrativo dos RPGs no Roblox. Sistemas frágeis falham quando jogadores desconectam no meio de animações ou cancelam tarefas.

Unindo grafos DAG para controlar pré-requisitos, buses de eventos para separar sistemas, árvores de diálogo com opções condicionais e compressão por bitfield, cria-se uma estrutura confiável.

1. Missões como Grafos Acíclicos Dirigidos (DAGs)

Construindo tramas complexas sem travamentos circulares:

2. Máquina de Estados Finitos (FSM) no Ciclo das Missões

Transições regulamentadas para impedir fraudes:

ServerScriptService.QuestSystem.QuestManager
-- Gerenciador de Missões 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. Rastreamento Desacoplado via Bus de Eventos

Separando a jogabilidade da verificação de tarefas:

4. Árvores de Diálogo com Tomada de Decisão

Conversas dinâmicas com impacto direto no jogo:

5. Salvamento Compacto no DataStore com ProfileService

Guardando centenas de missões concluídas com peso quase nulo:

Frequently Asked Questions

Por que estruturar missões como um grafo DAG?

Para assegurar que nenhuma missão dependa de si mesma em um ciclo infinito, garantindo progressão fluida.

Como o bus de eventos melhora o rendimento?

Elimina verificações constantes por quadro; o sistema reage apenas aos acontecimentos de interesse.

Como evitar perda de progresso em quedas de sinal?

Utilizando o ProfileService com bloqueio de sessão para sincronizar dados em memória e disco com segurança.

Como entregar itens com segurança através de diálogos?

A interface roda no cliente, mas a atribuição do prêmio é checada e realizada exclusivamente no servidor.

Explore More Interactive Tests & Guides

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

Go to Portal Hub