EventSequencer é uma poderosa estrutura que permite criar eventos ao vivo e cenas cortadas entre servidores em uma sequência estruturada de ações e gatilhos. Mais especificamente, este módulo ajuda você a:
- Criar um evento ou cena cortada em uma estrutura organizada através de configurações programadas de áudio, animações e tweens.
- Fazer a transição entre várias cenas em múltiplos servidores, sincronizando animações e visuais complexos a uma linha do tempo.
- Navegar por um evento e visualizar a experiência para propósitos de teste e desenvolvimento.
Esta estrutura foi testada em eventos do Roblox como os concertos de Twenty One Pilots e 24kGoldn, bem como em muitas experiências altamente visitadas.
Para ver EventSequencer em ação dentro de um local editável, confira o template de Concerto no Roblox Studio. Este template é um ponto de partida abrangente para desenvolvedores criarem eventos/concertos e se familiarizarem com os diversos recursos e componentes envolvidos.

Uso do Módulo
Instalação
Para usar a estrutura EventSequencer em uma experiência:
No menu Janela do Studio ou na barra de ferramentas da guia Início, abra a Caixa de Ferramentas e selecione a guia Loja do Criador.

Certifique-se de que a ordenação Modelos está selecionada, em seguida clique no botão Ver Todos para Categorias.

Localize e clique no cartão Pacotes.
Localize o módulo Sequenciador de Eventos e clique nele, ou arraste e solte-o na visualização 3D.

Na janela Explorador, mova o modelo EventSequencer inteiro para ServerScriptService. Ao executar a experiência, o módulo começará a ser executado.
Modos de Estrutura
Modo de Substituição
O modo de estrutura padrão é o modo de substituição, no qual você projeta cenas únicas colocando objetos 3D, terreno, propriedades de iluminação, efeitos ambientais e objetos de interface do usuário na pasta Ambiente dessa cena. Quando uma cena é carregada, esses objetos e propriedades são distribuídos em Workspace, Terrain e Lighting, substituindo objetos/propriedades existentes para formar um espaço clonado.
Modo Inline
Um modo alternativo de estrutura é o modo inline no qual você também projeta cenas únicas com lógica de script para seu fluxo/eventos, mas a estrutura não destruirá objetos 3D, terreno, propriedades de iluminação, efeitos ambientais e objetos de interface do usuário para clonar ativos/propriedades da pasta Ambiente de uma cena ao carregar.
Para habilitar o modo inline:
Dentro do modelo EventSequencer que você colocou em ServerScriptService, desça e selecione o valor Inline dentro da pasta ReplicatedStorage.

Na janela Propriedades, ative a caixa de seleção de Valor.

Criar cenas
Uma cena é essencialmente parte de um evento geral ou uma cena cortada envolvida em uma série de pastas. Cada cena contém lógica de script que define seu fluxo/eventos, e uma cena pode armazenar seus próprios objetos 3D, terreno, propriedades de iluminação, efeitos ambientais e objetos de interface do usuário.
Para começar rapidamente, você pode encontrar uma cena vazia dentro da pasta principal do módulo:
Expanda a pasta EventSequencer e localize a pasta BlankScene.

Mova ou copie toda a pasta BlankScene para ReplicatedStorage.

Duração do Tempo
Cada cena deve ter uma duração de tempo, em segundos, que define sua duração — assim como um filme ou um concerto tem uma duração definida. A duração é definida como um atributo numérico na pasta da cena chamada TimeLength, que você pode definir diretamente no Studio ou programaticamente através de Instance:SetAttribute().


Ambiente
A pasta Ambiente de uma cena contém tudo que os usuários veem e ouvem, incluindo objetos 3D, terreno, propriedades de iluminação e efeitos ambientais, e objetos de interface do usuário. Quando uma cena é carregada, esses objetos e propriedades são distribuídos em Workspace, Terrain e Lighting, substituindo objetos/propriedades existentes para formar um espaço clonado.
A pasta Ambiente contém os seguintes contêineres:
| Container | Descrição |
|---|---|
| Cliente | Contém todos os ativos a serem carregados quando qualquer usuário (cliente) entra no evento, como objetos de interface do usuário ou um rig de animação. |
| PlayerSpawns | Contém partes onde os usuários aparecem ao entrar. Qualquer parte nesta pasta se comporta de forma semelhante a um SpawnLocation. |
| Servidor | Contém todos os ativos a serem carregados quando uma cena é criada pela primeira vez em um servidor. É recomendável que a maioria dos ativos visuais vá aqui. |
| Terreno | Contém o terreno da cena. |
| Iluminação | Contém propriedades de iluminação global como atributos, bem como modificadores como efeitos atmosféricos e efeitos de pós-processamento. |
Eventos
A pasta Eventos de uma cena é puramente um espaço reservado para RemoteEvents que se comunicam entre os módulos Cliente e Servidor. Não é obrigatório colocar nada nesta pasta.
Cliente
Este script executa lógica de esquema no cliente.
Servidor
Este script executa lógica de esquema no servidor.
Esquemas de Cena
O esquema de uma cena define o que acontece em que ponto da linha do tempo da cena. Você deve definir o esquema de uma cena tanto em seus módulos Cliente quanto Servidor e incluir ganchos de ciclo de vida para gerenciar quando as configurações ocorrem.
Ganchos de Ciclo de Vida
Os ganchos de ciclo de vida do esquema permitem que você gerencie quando as operações da cena ocorrem. Uma cena em produção geralmente é executada no fluxo mais simples:
OnRun pode ser interrompido ao buscar:
Todos os três ganchos também podem ser repetidos se a cena for reproduzida:
Configurações
As configurações de esquema definem as operações principais de uma cena, como reproduzir áudio em 00:32, enfileirar uma animação para sincronizar com esse áudio, agendar um evento de cena como um show de fogos de artifício e mais. Cada configuração suporta certas funções de retorno de chamada onde o primeiro parâmetro (self) é a instância de configuração.
Navegar pelas cenas
Um recurso exclusivo do EventSequencer é a capacidade de "navegar" pelas cenas, assim como você faria com um vídeo. No Modo de Substituição, você também pode alternar entre cenas para visualizar um evento de múltiplas cenas inteiras antes de implantá-lo em produção.
A busca pela cena não é acessível a todos, já que usuários que simplesmente estão desfrutando do evento não devem ter a capacidade de controlar seu fluxo de tempo. Em vez disso, você deve conceder permissão de busca com base no PlaceId do evento, bem como em UserIds específicos e/ou em grupos e funções dentro deles.
Crie um novo Script dentro de ServerScriptService.
Cole o seguinte código no novo script.
Script - Definir Permissões de Buscalocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.setSeekingPermissions({placeIDs = {},userIDs = {},groups = {{GroupID = , MinimumRankID = },}})Preencha as seguintes tabelas na chamada de setSeekingPermissions da seguinte forma:
placeIDs Lista delimitada por vírgulas de valores de PlaceId para suportar busca. userIDs Lista delimitada por vírgulas de UserIds para aqueles que podem buscar nos lugares suportados. groups Lista delimitada por vírgulas de tabelas, cada uma contendo um ID de grupo e o mínimo grau dos membros desse grupo que podem buscar nos lugares suportados.
Plugin de Gerenciamento de Cena
O plugin Gerenciador de Cena é uma ferramenta útil para carregar e descarregar cenas, iluminação e terreno. A menos que você esteja usando o Modo Inline, é altamente recomendável que você use este plugin em vez de colocar/editá-los manualmente objetos e propriedades de cena.
Para instalar o plugin:
No menu Janela do Studio ou na barra de ferramentas da guia Início, abra a Caixa de Ferramentas.
Com a guia Loja do Criador selecionada, selecione Plugins no menu suspenso.
No campo de pesquisa, digite Gerenciador de Cena e pressione Enter para localizar o plugin.

Clique no ícone do plugin para visualizar seus detalhes e depois clique no botão Instalar.
Assim que o plugin for instalado, ele aparecerá na guia Plugins do Studio.
Carregar e descarregar cenas
Como descrito em criar cenas, a pasta Ambiente de uma cena contém tudo que os usuários veem e ouvem, incluindo objetos 3D. O plugin ajuda você a carregar rapidamente os ativos de uma cena para dentro ou fora de pastas organizadas dentro do espaço de trabalho.
| Ação do Plugin | Descrição |
|---|---|
| Carregar Cliente | Se o conteúdo do cliente da cena estiver descarregado, move sua pasta Ambiente/Cliente para a pasta Workspace/ScenesClient. |
| Carregar Servidor | Se o conteúdo do servidor da cena estiver descarregado, move sua pasta Ambiente/Servidor para a pasta Workspace/ScenesServer. |
| Descarregar Cliente | Se o conteúdo do cliente da cena estiver carregado, move sua pasta Cliente de Workspace/ScenesClient de volta para a pasta [Cena]/Ambiente. |
| Descarregar Servidor | Se o conteúdo do servidor da cena estiver carregado, move sua pasta Servidor de Workspace/ScenesServer de volta para a pasta [Cena]/Ambiente. |
| Descarregar Todas as Cenas | Mova cada pasta Cliente e Servidor de cada cena carregada de volta para sua pasta Ambiente. |
Salvar e carregar iluminação
O serviço Lighting de nível superior armazena todas as propriedades de iluminação e efeitos visuais de um local. Como é um serviço de nível superior, você não pode movê-lo manualmente para a pasta Ambiente/Servidor ou Ambiente/Cliente de uma cena específica. Em vez disso, você pode utilizar o plugin para copiar suas propriedades e filhos para a pasta Ambiente/Iluminação da cena.
Configure as propriedades de iluminação, efeitos de pós-processamento, efeitos atmosféricos e skyboxes da cena através do serviço de nível superior Lighting.

Na janela do plugin Gerenciador de Cena, clique em Salvar Iluminação para a cena desejada.
Selecione e expanda a configuração Ambiente/Iluminação dessa cena e você verá as mesmas propriedades de iluminação como atributos da pasta, bem como filhos clonados do serviço de nível superior Lighting.

Instâncias clonadas 
Atributos salvos Uma vez que as propriedades e filhos de iluminação sejam salvos para uma cena, você pode carregá-los de volta rapidamente para o serviço de nível superior Lighting clicando em Carregar Iluminação na janela do plugin.
Salvar e carregar terreno
Como Terrain é uma classe de nível superior dentro de Workspace, você não pode mover manualmente o terreno gerado ou esculpido para a pasta Ambiente/Servidor ou Ambiente/Cliente de uma cena específica. Em vez disso, você pode utilizar o plugin para copiá-lo para a pasta Ambiente/Terreno da cena.
Configure o terreno da cena através do serviço de nível superior Terreno.

Na janela do plugin Gerenciador de Cena, clique em Salvar Terreno para a cena desejada.
Selecione e expanda a pasta Ambiente/Terreno dessa cena e você verá um objeto TerrainRegion que representa o terreno salvo.

Uma vez que o terreno seja salvo para uma cena, você pode carregá-lo de volta rapidamente para o serviço de nível superior Terrain clicando em Carregar Terreno na janela do plugin.
Referência da API
Ganchos de ciclo de vida do esquema
OnSetup
O gancho de ciclo de vida OnSetup é destinado para inicializar ativos e variáveis que serão referenciados em OnRun ou OnEndScene, configurando conexões que estão destinadas a durar durante a cena, etc. Este gancho recebe o parâmetro timePositionObject, que permite que você leia o tempo atual na configuração.
Esquema do Cliente
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local clientEnvironment
local serverEnvironment
local dummy
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Cliente)")
-- Acesse os ambientes da cena; não se aplica ao Modo Inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- Aguardar por ativos
dummy = clientEnvironment:WaitForChild("Dummy")
print("O tempo atual é:", timePositionObject.Value)
end
Esquema do Servidor
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local serverEnvironment
local partColorConnection
local changePartColorEvent = script.Parent.Events.ChangePartColor
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Servidor)")
-- Acesse o ambiente da cena; não se aplica ao Modo Inline
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("O tempo atual é:", timePositionObject.Value)
end
OnRun
OnRun é o gancho de ciclo de vida operacional principal dentro de um esquema. Ele deve conter todas as configurações temporizadas para a cena, desde o áudio reproduzido ou uma animação até o agendamento de um evento como uma exibição de fogos de artifício.
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Cliente)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("Áudio reproduzido")
end,
OnEnd = function(self)
print("Áudio finalizado")
end
})
end
OnEndScene
O gancho de ciclo de vida OnEndScene é útil para limpar quaisquer pendências na cena, como desconectar conexões criadas em OnSetup ou OnRun que permanecem durante a cena.
Esquema do Servidor
Schema.OnEndScene = function()
print("OnEndScene (Servidor)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end
Configurações do esquema
audio
Cria um objeto Sound no espaço de trabalho que toca em um determinado momento. O som é então excluído após o final da cena ou após a conclusão da reprodução do objeto Sound.
| Chave de Configuração | Descrição |
|---|---|
| StartTime | Quando reproduzir o áudio em relação à duração da cena, em segundos. |
| SoundId | ID do ativo do áudio a ser reproduzido. |
| OnStart | Função personalizada a ser ativada quando o áudio começa a tocar. |
| OnEnd | Função personalizada a ser ativada quando o áudio termina de tocar. |
| Volume | Volume do objeto Sound; o padrão é 0.5. |
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Cliente)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("Áudio reproduzido")
end,
OnEnd = function(self)
print("Áudio finalizado")
end
})
end
animate
Cria uma Animation que toca em um determinado momento.
| Chave de Configuração | Descrição |
|---|---|
| StartTime | Quando tocar a animação em relação à duração da cena, em segundos. |
| EndTime | Tempo opcional quando terminar a animação em relação à duração da cena, em segundos. |
| Rig | O rig de animação para tocar a animação. |
| AnimationId | ID do ativo da animação a ser reproduzida. |
| Speed | Velocidade de reprodução da animação; o padrão é 1. |
| FadeInTime | Quantidade de tempo para o fade-in da animação, em segundos; o padrão é 0.2 (segundos). |
| FadeOutTime | Quantidade de tempo para o fade-out da animação, em segundos; o padrão é 0.2 (segundos). |
| OnStart | Função personalizada a ser ativada quando a animação começa a tocar. |
| OnEnd | Função personalizada a ser ativada quando a animação parar de tocar. |
| Looped | Se a animação deve ser repetida; o padrão é false. |
| SyncToAudio | Tabela definindo se sincronizar a animação a uma configuração de áudio. Aceita as seguintes chaves:
|
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Cliente)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
})
local DanceAnimation = Schema:animate({
AnimationId = "rbxassetid://3695333486",
Rig = Dummy,
Speed = 1,
FadeInTime = 0.1,
FadeOutTime = 0.3,
SyncToAudio = {
Audio = MainAudio,
StartAtAudioTime = 5,
},
OnStart = function(self)
print("Animação reproduzida")
end,
OnEnd = function(self)
print("Animação parada")
end
})
end
tween
Cria um Tween configurável que é preservado na busca e no ingresso dinâmico, significando que você pode encadear tweens em pontos separados no tempo e tudo deve tocar e sincronizar como esperado.
| Chave de Configuração | Descrição |
|---|---|
| StartTimes | Tabela de tempos de início em relação à duração da cena, em segundos. |
| Tween | Tabela definindo o objeto e propriedades a serem interpoladas. Aceita as seguintes chaves:
|
| OnStart | Função personalizada a ser ativada quando a interpolação começa a tocar. |
| OnHeartbeat | Função personalizada a ser ativada em cada Heartbeat; recebe a interpolação alfa como seu segundo parâmetro. |
| OnEnd | Função personalizada a ser ativada quando a interpolação termina de tocar. |
| SyncToAudio | Tabela definindo se sincronizar a interpolação a uma configuração de áudio. Aceita as seguintes chaves:
|
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Cliente)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
})
local LightFadeOut = Schema:tween({
StartTimes = {29.884},
Tween = {
Object = game:GetService("Lighting"),
Info = TweenInfo.new(2, Enum.EasingStyle.Sine, Enum.EasingDirection.Out),
Properties = {
Brightness = 0,
}
},
SyncToAudio = {
Audio = MainAudio,
StartAtAudioTimes = {5, 7.2, 9.4, 11.6},
},
OnStart = function(self)
print("Interpolação reproduzida")
end,
OnHeartbeat = function(self, alpha)
print("Interpolação alfa", alpha)
end,
OnEnd = function(self)
print("Interpolação concluída")
end,
})
end
interval
Executa uma função de callback personalizada durante uma duração especificada em uma frequência especificada, em segundos. Útil para eventos repetidos, como luzes piscando ou pulsando a intensidade de um áudio, etc. A menor frequência possível é 0 segundos, mas tecnicamente a frequência mínima é sempre restringida ao Heartbeat.
| Chave de Configuração | Descrição |
|---|---|
| StartTime | Início da duração do intervalo em relação à duração da cena, em segundos. |
| EndTime | Fim da duração do intervalo em relação à duração da cena, em segundos. |
| Frequency | Com que frequência a função OnInterval deve ser ativada, em segundos, com a primeira execução ocorrendo em StartTime. |
| OnStart | Função personalizada a ser ativada quando a série de intervalos começa. |
| OnInterval | Função personalizada a ser ativada em cada intervalo dentro da duração especificada (StartTime a EndTime). |
| OnEnd | Função personalizada a ser ativada quando a série de intervalos termina. |
| SyncToAudio | Tabela definindo se sincronizar a duração do intervalo a uma configuração de áudio. Aceita as seguintes chaves:
|
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Cliente)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
})
local ClientTimerUpdate = Schema:interval({
Frequency = 1,
SyncToAudio = {
StartAtAudioTime = 2.5,
EndAtAudioTime = 10,
Audio = MainAudio
},
OnInterval = function(self)
print(MainAudio.Sound.TimePosition, MainAudio.CurrentSoundIntensityRatio)
end,
})
end
schedule
Semelhante a interval, exceto que você pode definir vários tempos de início específicos para o mesmo evento, como agendar uma exibição de fogos de artifício duas vezes em uma cena.
| Chave de Configuração | Descrição |
|---|---|
| StartTimes | Tabela de tempos de início em relação à duração da cena, em segundos. |
| OnStart | Função personalizada a ser ativada em cada tempo especificado na tabela StartTimes. |
| Skippable | Booleano definindo se o evento agendado pode ser pulado para usuários que entram tarde, ou quando se busca à frente de um tempo de início agendado. Se definido como false, todos os tempos de início do evento agendados antes do tempo de entrada/busca ocorrerão nesse tempo de entrada/busca. Se definido como true, apenas os tempos de início agendados depois da entrada/busca ocorrerão. O padrão é false. |
| SyncToAudio | Tabela definindo se sincronizar o agendamento a uma configuração de áudio. Aceita as seguintes chaves:
|
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Cliente)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Inicializa a conexão temporária de heartbeat
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Informa à estrutura sobre a conexão
Schema:inform(tempConnection)
end
})
end
inform
Informa à estrutura sobre quaisquer módulos, objetos de UI, conexões, etc. que são criados no gancho de ciclo de vida OnRun, garantindo que sejam limpos adequadamente ao buscar. Casos de uso incluem:
Informar à estrutura sobre uma conexão temporária ad-hoc como RunService.Heartbeat para que a conexão seja limpa ao buscar para um ponto anterior na duração da cena.
Esquema do ServidorSchema.OnRun = function()print("OnRun (Servidor)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Inicializa a conexão temporária de heartbeatlocal tempConnection = RunService.Heartbeat:Connect(function()end)-- Informa à estrutura sobre a conexãoSchema:inform(tempConnection)end})endChamar uma função de "limpeza" personalizada em um ModuleScript que inicializa uma conexão ou outra referência durante o gancho de ciclo de vida OnRun.
Esquema do Servidorlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local RunService = game:GetService("RunService")local customModule = require(ReplicatedStorage:WaitForChild("CustomModule"))local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))local Schema = EventSequencer.createSchema()Schema.OnRun = function()print("OnRun (Servidor)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Chama a função "init" no módulo personalizadocustomModule.init()-- Chama a função "clean" no módulo personalizado na limpeza da cenaSchema:inform(customModule, customModule.clean)end,})endModuleScript - CustomModulelocal RunService = game:GetService("RunService")local CustomModule = {}CustomModule.init = function()-- Inicializa a conexão de heartbeatCustomModule.connection = RunService.Heartbeat:Connect(function()end)endCustomModule.clean = function()-- Desconecta e limpa a conexão de heartbeatif CustomModule.connection thenCustomModule.connection:Disconnect()CustomModule.connection = nilendendreturn CustomModule
Funções
loadScene
loadScene(sceneName: string, startTime: number ?)
Carrega programaticamente uma cena por sceneName e a inicia em startTime desde o seu início. Haverá um "período de graça" de 5 segundos para a cena carregar do servidor antes que a busca ocorra e a cena comece a tocar. Isso significa que se você chamar loadScene("[SceneName]", 20) exatamente às 16:15:00, a estrutura aguardará 5 segundos além dos 20 solicitados, iniciando a cena às 16:15:25.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Descobrir a próxima cena a carregar quando a cena atual terminar
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- "PreShow" terminou; carrega a primeira cena do concerto
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- "Track1" terminou; carrega a segunda cena do concerto
EventSequencer.loadScene("Track2")
else
-- Retorna à cena de pré-show
EventSequencer.loadScene("PreShow")
end
end)
createSchema
createSchema(): table
Retorna uma instância do esquema da cena para criar lógica para a cena.
Esquema do Cliente
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Cliente)")
end
seek
seek(time: number)
Navega para o valor de time, em segundos, a partir do começo da cena atualmente carregada.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.seek(95.58)
setSceneWarningTime
setSceneWarningTime(endSceneTimeWindow: number)
Define a quantidade de tempo a partir do final de todas as cenas em que um aviso é enviado. Você pode detectar o aviso no lado do cliente através do onSceneEndingWarningForClient ou no lado do servidor através do onSceneEndingWarningForServer.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Carregar cena
EventSequencer.loadScene("BeautifulScene")
-- Definir tempo de aviso para 5 segundos antes da cena terminar
EventSequencer.setSceneWarningTime(5)
-- Detectar quando a cena estiver prestes a terminar
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("A cena está prestes a terminar!")
end)
setSeekingPermissions
setSeekingPermissions(permissions: table)
Concede permissão de busca com base no PlaceId do evento, assim como em UserIds e/ou em grupos e funções dentro deles. Veja buscar e alternar cenas para mais informações.
getCurrentSceneEnvironment
getCurrentSceneEnvironment(): Folder (YIELDS)
Retorna a pasta de Ambiente do lado do cliente ou do lado do servidor da cena atual, dependendo se é chamada a partir do script do esquema Cliente ou do script do esquema Servidor.
Esquema do Cliente
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local clientEnvironment
local serverEnvironment
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Cliente)")
-- Acesse os ambientes da cena; não se aplica ao Modo Inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("O tempo atual é:", timePositionObject.Value)
end
Esquema do Servidor
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local serverEnvironment
local partColorConnection
local changePartColorEvent = script.Parent.Events.ChangePartColor
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Servidor)")
-- Acesse o ambiente da cena; não se aplica ao Modo Inline
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
end
getCurrentServerEnvironmentFromClient
getCurrentServerEnvironmentFromClient(): Folder (YIELDS)
Retorna a pasta do lado do servidor da cena atual Ambiente. Ao contrário de getCurrentSceneEnvironment, você pode chamar isso a partir do script do esquema Cliente.
Esquema do Cliente
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local clientEnvironment
local serverEnvironment
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Cliente)")
-- Acesse os ambientes da cena; não se aplica ao Modo Inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("O tempo atual é:", timePositionObject.Value)
end
isLoadingScene
isLoadingScene(): boolean
Chamada a partir do servidor para saber se uma cena está atualmente carregando.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))print(EventSequencer.isLoadingScene())while EventSequencer.isLoadingScene() dotask.wait()endprint("Cena carregada")
Eventos
onSceneEndingWarningForClient
É acionado no cliente antes que a cena esteja prestes a terminar. O tempo padrão é 3 segundos, mas você pode configurá-lo através de setSceneWarningTime. Este evento só pode ser conectado em um LocalScript.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detectar quando a cena está prestes a terminar (lado do cliente)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("A cena está prestes a terminar!")
end)
onSceneEndingWarningForServer
É acionado no servidor antes que a cena esteja prestes a terminar. O tempo padrão é 3 segundos, mas você pode configurá-lo através de setSceneWarningTime. Este evento só pode ser conectado em um Script.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detectar quando a cena está prestes a terminar (lado do servidor)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("A cena está prestes a terminar!")
end)
onSceneLoadedForClient
É acionado no cliente quando a cena está começando. Este evento só pode ser conectado em um LocalScript.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detectar quando a cena está começando (lado do cliente)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("A cena está começando!")
end)
onOrchestrationFinished
É acionado no servidor quando uma cena alcançou seu tempo de duração e efetivamente terminou. Este evento recebe um argumento de string endedSceneName para o nome da cena que acabou de terminar e você pode encadear a partir deste evento para condicionalmente carregar outra cena. Só pode ser conectado em um Script.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Figurar a próxima cena a carregar quando a cena atual terminar
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- "PreShow" terminou; carrega a primeira cena do concerto
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- "Track1" terminou; carrega a segunda cena do concerto
EventSequencer.loadScene("Track2")
else
-- Retorna à cena de pré-show
EventSequencer.loadScene("PreShow")
end
end)