EvenementSequencer is een krachtig framework dat je in staat stelt om live, cross-server evenementen en cutscenes te bouwen op een gestructureerde volgorde van acties en triggers. Meer specifiek helpt deze module je:
- Een evenement of cutscene te bouwen op een gestructureerd framework door middel van geplande configuraties van audio, animaties en tweens.
- Over te schakelen tussen meerdere scènes op meerdere servers, waarbij complexe animaties en visuals worden gesynchroniseerd met een tijdlijn.
- Door een evenement te zoeken en het spel te previewen voor test- en ontwikkelingsdoeleinden.
Dit framework is uitvoerig getest in Roblox-evenementen zoals de Twenty One Pilots en 24kGoldn concerten, evenals in veel drukbezochte games.
Om EvenementSequencer in actie te zien binnen een bewerkbare plaats, bekijk de Concert template in Roblox Studio. Deze template is een uitgebreid startpunt voor ontwikkelaars om evenementen/concerten te creëren en zich vertrouwd te maken met de verschillende functies en componenten die betrokken zijn.

Module gebruik
Installatie
Om het EvenementSequencer framework in een game te gebruiken:
Open vanuit het Venster menu of de Start tabblad werkbalk de Toolbox en selecteer het Creator Store tabblad.

Zorg ervoor dat de Modellen sortering is geselecteerd, klik dan op de Bekijk Alle knop voor Categorieën.

Zoek en klik op de Pakketten tegel.
Zoek de Evenement Sequencer module en klik erop, of sleep en laat het in de 3D-weergave vallen.

Verplaats in het Explorer venster het gehele EvenementSequencer model naar ServerScriptService. Bij het uitvoeren van het spel zal de module beginnen te draaien.
Framework modi
Vervangmodus
De standaard framework modus is vervangmodus waarin je unieke scènes ontwerpt door 3D-objecten, terrein, verlichtingsinstellingen, milieu-effecten, en gebruikersinterface-objecten in de Omgeving map van die scène te plaatsen. Wanneer een scène laadt, worden die objecten en eigenschappen verdeeld over Workspace, Terrain, en Lighting, vervangend bestaande objecten/eigenschappen om een gekloond ruimte te vormen.
Inline modus
Een alternatieve framework modus is inline modus waarin je op dezelfde manier unieke scènes ontwerpt met scriptlogica voor hun flow/evenementen, maar het framework zal geen bestaande 3D-objecten, terrein, verlichtingsinstellingen, milieu-effecten, en gebruikersinterface-objecten vernietigen om activa/eigenschappen uit de Omgeving map van een scène te klonen bij het laden.
Om inline modus in te schakelen:
Binnen het EvenementSequencer model dat je in ServerScriptService hebt geplaatst, ga naar beneden en selecteer de Inline waarde binnen de ReplicatedStorage map.

In het Eigenschappen venster, schakel het Waarde selectievakje in.

Scènes maken
Een scène is in wezen een onderdeel van een algemeen evenement of een cutscene verpakt in een reeks mappen. Elke scène bevat scriptlogica die de flow/evenementen definieert, en een scène kan zijn eigen 3D-objecten, terrein, verlichtingsinstellingen, milieu-effecten, en gebruikersinterface-objecten opslaan.
Om snel aan de slag te gaan, kun je een lege scène vinden in de hoofdmap van de module:
Vouw de EvenementSequencer map uit en zoek de BlankScene map.

Verplaats of kopieer de gehele BlankScene map naar ReplicatedStorage.

Tijdlengte
Elke scène moet een tijdlengte hebben, in seconden, die de duur ervan definieert — net zoals een film of concert een vaste duur heeft. De tijdlengte wordt gedefinieerd als een numerieke attribuut op de map van de scène genaamd TimeLength die je direct in Studio of programmatisch kunt instellen via Instance:SetAttribute().


Omgeving
De Omgeving map van een scène bevat alles wat gebruikers zien en horen, inclusief 3D-objecten, terrein, verlichtingsinstellingen en milieu-effecten, en gebruikersinterface-objecten. Wanneer een scène laadt, worden die objecten en eigenschappen verdeeld over Workspace, Terrain, en Lighting, waarbij bestaande objecten/eigenschappen worden vervangen om een gekloond ruimte te vormen.
De Omgeving map bevat de volgende containers:
| Container | Beschrijving |
|---|---|
| Client | Bevat alle activa die moeten worden geladen wanneer een gebruiker (client) zich bij het evenement voegt, zoals gebruikersinterface-objecten of een animatierig. |
| PlayerSpawns | Bevat delen waar gebruikers spawnen bij het joinen. Elk deel in deze map gedraagt zich als een SpawnLocation. |
| Server | Bevat alle activa die moeten worden geladen wanneer een scène voor het eerst op een server wordt gemaakt. Het wordt aanbevolen dat de meeste visuele activa hierheen gaan. |
| Terrain | Bevat het terrein van de scène. |
| Lighting | Bevat globale verlichtingsinstellingen als attributen, evenals modifiers zoals atmosferische effecten en post-processing effecten. |
Evenementen
De Evenementen map van een scène is puur een placeholder voor RemoteEvents die communiceren tussen de Client en Server modules. Het is niet verplicht om iets in deze map te plaatsen.
Client
Dit script voert schema logica uit op de client.
Server
Dit script voert schema logica uit op de server.
Scene schema's
Een scène's schema definieert wat er op welk punt in de tijdlijn van de scène gebeurt. Je moet een scène's schema definiëren in zowel zijn Client als Server modules en levenscyclus hooks opnemen om te beheren wanneer configuraties plaatsvinden.
Levenscyclus hooks
Schema levenscyclus hooks stellen je in staat om te beheren wanneer scène-operaties plaatsvinden. Een scène in productie zal typisch draaien in de meest eenvoudige flow:
OnRun kan worden onderbroken bij het zoeken:
Alle drie de hooks kunnen ook herhaald worden als de scène opnieuw wordt afgespeeld:
Configuraties
Schema configuraties definiëren de kernoperaties van een scène, bijvoorbeeld audio afspelen op 00:32, een animatie in de wachtrij zetten om te synchroniseren met die audio, een scène-evenement zoals een vuurwerkshow plannen, en meer. Elke configuratie ondersteunt bepaalde callback-functies waarbij de eerste parameter (self) de configuratie-instantie is.
Scènes zoeken
Een unieke functie van EvenementSequencer is de mogelijkheid om "te zoeken" door scènes zoals je misschien door een video zou zoeken. In Vervangmodus kun je ook tussen scènes schakelen om een volledig multi-scène evenement te previewen voordat je het in productie neemt.
Scène zoeken is niet toegankelijk voor iedereen aangezien gebruikers die gewoon van het evenement genieten, niet de mogelijkheid moeten hebben om de tijdstroom ervan te controleren. In plaats daarvan moet je zoektoestemming verlenen op basis van de PlaceId van het evenement, evenals specifieke UserIds en/of groepen en rollen binnen hen.
Maak een nieuwe Script binnen ServerScriptService.
Plak de volgende code in het nieuwe script.
Script - Stel Zoektoestemming Inlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))EvenementSequencer.setSeekingPermissions({placeIDs = {},userIDs = {},groups = {{GroupID = , MinimumRankID = },}})Vul de volgende tabellen in binnen de setSeekingPermissions aanroep als volgt:
placeIDs Komma-gescheiden lijst van PlaceId waarden om binnen te ondersteunen. userIDs Komma-gescheiden lijst van UserIds voor degenen die binnen de ondersteunde plaatsen kunnen zoeken. groups Komma-gescheiden lijst van tabellen, elk met een groep ID en de minimale rang van de leden van die groep die binnen de ondersteunde plaatsen kunnen zoeken.
Scene manager plugin
De Scene Manager plugin is een nuttig hulpmiddel voor het laden en ontladen van scènes, verlichting, en terrein. Tenzij je Inline Mode gebruikt, wordt het ten zeerste aanbevolen dat je deze plugin gebruikt in plaats van handmatig scène-objecten en eigenschappen te plaatsen/bewerken.
Om de plugin te installeren:
Open vanuit het Venster menu of de Start tabblad werkbalk de Toolbox.
Met het Creator Store tabblad geselecteerd, selecteer Plugins uit het dropdownmenu.
Typ in het zoekveld Scene Manager en druk op Enter om de plugin te vinden.

Klik op het pictogram van de plugin om de details te bekijken en klik vervolgens op de Installeren knop.
Zodra de plugin is geïnstalleerd, verschijnt deze in het Plugins tabblad van Studio.
Scènes laden en ontladen
Zoals uiteengezet in scènes maken, bevat de Omgeving map van een scène alles wat gebruikers zien en horen, inclusief 3D-objecten. De plugin helpt je snel de activa van een scène in of uit georganiseerde mappen binnen de werkruimte te laden.
| Plugin actie | Beschrijving |
|---|---|
| Laad Client | Als de clientinhoud van de scène is ontladen, verplaatst het zijn Omgeving/Client map naar de Workspace/ScenesClient map. |
| Laad Server | Als de serverinhoud van de scène is ontladen, verplaatst het zijn Omgeving/Server map naar de Workspace/ScenesServer map. |
| Ontlaad Client | Als de clientinhoud van de scène is geladen, verplaatst het zijn Client map van Workspace/ScenesClient terug naar de [Scene]/Omgeving map. |
| Ontlaad Server | Als de serverinhoud van de scène is geladen, verplaatst het zijn Server map van Workspace/ScenesServer terug naar de [Scene]/Omgeving map. |
| Ontlaad Alle Scènes | Verplaatst de Client en Server map van elke geladen scène terug naar zijn Omgeving map. |
Verlichting opslaan en laden
De top-level Lighting service slaat alle verlichtingsinstellingen en visuele effecten van een plaats op. Aangezien het een top-level service is, kun je het niet handmatig verplaatsen naar een specifieke scène's Omgeving/Server of Omgeving/Client map. In plaats daarvan kun je de plugin gebruiken om zijn eigenschappen en kinderen naar de Omgeving/Verlichting map van de scène te kopiëren.
Configureer de verlichtingsinstellingen van de scène verlichtingsinstellingen, post-processing effecten, atmosferische effecten, en skyboxes via de top-level Lighting service.

Klik in het Scene Manager plugin venster op Verlichting Opslaan voor de gewenste scène.
Selecteer en vouw de Omgeving/Verlichting configuratie van die scène uit en je zult dezelfde verlichtingsinstellingen zien als attributen van de map, evenals gekloonde kinderen van de top-level Lighting service.

Gekloonde instanties 
Opgeslagen attributen Zodra verlichtingsinstellingen en kinderen zijn opgeslagen voor een scène, kun je ze snel terugladen in de top-level Lighting service door op Verlichting Laden te klikken vanuit het plugin venster.
Terrein opslaan en laden
Aangezien Terrain een top-level klasse is binnen Workspace, kun je geen gegenereerd of gesculpteerd terrein handmatig verplaatsen naar een specifieke scène's Omgeving/Server of Omgeving/Client map. In plaats daarvan kun je de plugin gebruiken om het naar de Omgeving/Terrain map van de scène te kopiëren.
Configureer het terrein van de scène via de top-level Terrain service.

Klik in het Scene Manager plugin venster op Terrein Opslaan voor de gewenste scène.
Selecteer en vouw de Omgeving/Terrain map van die scène uit en je zult een TerrainRegion object zien dat het opgeslagen terrein vertegenwoordigt.

Zodra terrein is opgeslagen voor een scène, kun je het snel terugladen in de top-level Terrain service door op Terrein Laden te klikken vanuit het plugin venster.
API referentie
Schema levenscyclus hooks
OnSetup
De OnSetup levenscyclus hook is bedoeld voor het initialiseren van activa en variabelen die zullen worden geraadpleegd in OnRun of OnEndScene, het opzetten van verbindingen die bedoeld zijn om te duren voor de duur van de scène, enzovoort. Deze hook ontvangt de timePositionObject parameter waarmee je de huidige tijd bij de setup kunt lezen.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
local Schema = EvenementSequencer.createSchema()
local clientEnvironment
local serverEnvironment
local dummy
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
-- Toegang tot scène omgevingen; geldt niet voor Inline Mode
clientEnvironment = EvenementSequencer.getCurrentSceneEnvironment()
serverEnvironment = EvenementSequencer.getCurrentServerEnvironmentFromClient()
-- Wacht op activa
dummy = clientEnvironment:WaitForChild("Dummy")
print("Huidige tijd is:", timePositionObject.Value)
endlocal ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
local Schema = EvenementSequencer.createSchema()
local serverEnvironment
local partColorConnection
local changePartColorEvent = script.Parent.Events.ChangePartColor
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Server)")
-- Toegang tot scène omgeving; geldt niet voor Inline Mode
serverEnvironment = EvenementSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("Huidige tijd is:", timePositionObject.Value)
endOnRun
OnRun is de belangrijkste operationele levenscyclus hook binnen een schema. Het moet alle getimede configuraties voor de scène bevatten, van het afspelen van audio of een animatie tot het plannen van een evenement zoals een vuurwerkshow.
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("Audio aan het afspelen")
end,
OnEnd = function(self)
print("Audio is afgelopen")
end
})
endOnEndScene
De OnEndScene levenscyclus hook is nuttig voor het opruimen van alles wat nog openstaat in de scène, zoals het ontkoppelen van verbindingen die zijn gemaakt in OnSetup of OnRun die voor de duur van de scène blijven bestaan.
Schema.OnEndScene = function()
print("OnEndScene (Server)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
endSchema configuraties
audio
Maakt een Sound object in de werkruimte dat op een bepaald moment afspeelt. Het geluid wordt vervolgens verwijderd nadat de scène is afgelopen of nadat het Sound object is afgelopen met afspelen.
| Configuratie Sleutel | Beschrijving |
|---|---|
| StartTime | Wanneer de audio moet worden afgespeeld in relatie tot de scène duur, in seconden. |
| SoundId | Asset ID van de audio die moet worden afgespeeld. |
| OnStart | Aangepaste functie die wordt aangeroepen wanneer de audio begint met afspelen. |
| OnEnd | Aangepaste functie die wordt aangeroepen wanneer de audio is afgelopen met afspelen. |
| Volume | Volume van het Sound object; standaard is 0.5. |
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("Audio aan het afspelen")
end,
OnEnd = function(self)
print("Audio is afgelopen")
end
})
endanimate
Maakt een Animation die op een bepaald moment afspeelt.
| Configuratie Sleutel | Beschrijving |
|---|---|
| StartTime | Wanneer de animatie moet worden afgespeeld in relatie tot de scène duur, in seconden. |
| EndTime | Optionele tijd wanneer de animatie moet eindigen in relatie tot de scène duur, in seconden. |
| Rig | Het animatierig waarop de animatie moet worden afgespeeld. |
| AnimationId | Asset ID van de animatie die moet worden afgespeeld. |
| Speed | Afspeelsnelheid van de animatie; standaard is 1. |
| FadeInTime | Hoeveel tijd om de animatie in te faden, in seconden; standaard is 0.2 (seconden). |
| FadeOutTime | Hoeveel tijd om de animatie uit te faden, in seconden; standaard is 0.2 (seconden). |
| OnStart | Aangepaste functie die wordt aangeroepen wanneer de animatie begint met afspelen. |
| OnEnd | Aangepaste functie die wordt aangeroepen wanneer de animatie is afgelopen met afspelen. |
| Looped | Of de animatie moet worden herhaald; standaard is false. |
| SyncToAudio | Tabel die definieert of de animatie moet worden gesynchroniseerd met een audio configuratie. Accepteert de volgende sleutels:
|
Schema.OnRun = function()
print("OnRun (Client)")
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("Animatie aan het afspelen")
end,
OnEnd = function(self)
print("Animatie gestopt")
end
})
endtween
Maakt een configureerbare Tween die behouden blijft bij het zoeken en in dynamische join, wat betekent dat je tweens kunt ketenen op verschillende tijdstippen en alles zoals verwacht moet afspelen en synchroniseren.
| Configuratie Sleutel | Beschrijving |
|---|---|
| StartTimes | Tabel van starttijden in relatie tot de scène duur, in seconden. |
| Tween | Tabel die het object en de eigenschappen definieert om te tween. Accepteert de volgende sleutels:
|
| OnStart | Aangepaste functie die wordt aangeroepen wanneer de tween begint met afspelen. |
| OnHeartbeat | Aangepaste functie die wordt aangeroepen bij elke Heartbeat; ontvangt de tween alpha als tweede parameter. |
| OnEnd | Aangepaste functie die wordt aangeroepen wanneer de tween is afgelopen met afspelen. |
| SyncToAudio | Tabel die definieert of de tween moet worden gesynchroniseerd met een audio configuratie. Accepteert de volgende sleutels:
|
Schema.OnRun = function()
print("OnRun (Client)")
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("Tween aan het afspelen")
end,
OnHeartbeat = function(self, alpha)
print("Tween alpha", alpha)
end,
OnEnd = function(self)
print("Tween voltooid")
end,
})
endinterval
Voert een aangepaste callbackfunctie uit over een gespecificeerde duur met een gespecificeerde frequentie, in seconden. Nuttig voor herhalende evenementen zoals knipperende lichten, pulserende intensiteit van audio, enz. De laagst mogelijke frequentie is 0 seconden, maar technisch gezien is de minimumfrequentie altijd beperkt tot Heartbeat.
| Configuratie Sleutel | Beschrijving |
|---|---|
| StartTime | Begin van de intervalduur in relatie tot de scène duur, in seconden. |
| EndTime | Einde van de intervalduur in relatie tot de scène duur, in seconden. |
| Frequency | Hoe vaak de OnInterval functie moet worden aangeroepen, in seconden, waarbij de eerste uitvoering plaatsvindt bij StartTime. |
| OnStart | Aangepaste functie die wordt aangeroepen wanneer de reeks intervallen begint. |
| OnInterval | Aangepaste functie die wordt aangeroepen bij elk interval binnen de gespecificeerde duur (StartTime tot EndTime). |
| OnEnd | Aangepaste functie die wordt aangeroepen wanneer de reeks intervallen eindigt. |
| SyncToAudio | Tabel die definieert of de intervalduur moet worden gesynchroniseerd met een audio configuratie. Accepteert de volgende sleutels:
|
Schema.OnRun = function()
print("OnRun (Client)")
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,
})
endschedule
Vergelijkbaar met interval behalve dat je meerdere specifieke starttijden voor hetzelfde evenement kunt definiëren, zoals het plannen van een vuurwerkshow twee keer in een scène.
| Configuratie Sleutel | Beschrijving |
|---|---|
| StartTimes | Tabel van starttijden in relatie tot de scène duur, in seconden. |
| OnStart | Aangepaste functie die wordt aangeroepen op elk specifiek tijdstip in de StartTimes tabel. |
| Skippable | Boolean die definieert of het geplande evenement kan worden overgeslagen voor gebruikers die laat joinen, of voor wanneer er vooruit wordt gezocht naar een gepland starttijd. Als ingesteld op false, zullen alle starttijden die vóór de join/zoektijd zijn gepland, plaatsvinden op dat join/zoektijd. Als ingesteld op true, zullen alleen de starttijden die na join/zoek zijn gepland plaatsvinden. Standaard is false. |
| SyncToAudio | Tabel die definieert of de planning moet worden gesynchroniseerd met een audio configuratie. Accepteert de volgende sleutels:
|
Schema.OnRun = function()
print("OnRun (Client)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Initialiseer tijdelijke heartbeat verbinding
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Informeer framework over verbinding
Schema:inform(tempConnection)
end
})
endinform
Informeert het framework over modules, UI-objecten, verbindingen, enz. die zijn gemaakt in de OnRun levenscyclus hook, zodat ze correct worden opgeruimd bij zoeken. Gebruiksscenario's omvatten:
Het informeren van het framework over een tijdelijke ad-hoc verbinding zoals RunService.Heartbeat zodat de verbinding wordt opgeruimd bij het zoeken naar een eerder punt in de duur van de scène.
Server SchemaSchema.OnRun = function()print("OnRun (Server)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Initialiseer tijdelijke heartbeat verbindinglocal tempConnection = RunService.Heartbeat:Connect(function()end)-- Informeer framework over verbindingSchema:inform(tempConnection)end})endHet aanroepen van een aangepaste "opruim" functie in een ModuleScript die een verbinding of andere referentie initialiseert tijdens de OnRun levenscyclus hook.
Server Schemalocal ReplicatedStorage = game:GetService("ReplicatedStorage")local RunService = game:GetService("RunService")local customModule = require(ReplicatedStorage:WaitForChild("CustomModule"))local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))local Schema = EvenementSequencer.createSchema()Schema.OnRun = function()print("OnRun (Server)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Roep "init" functie aan in aangepaste modulecustomModule.init()-- Roep "clean" functie aan in aangepaste module bij scène opruimenSchema:inform(customModule, customModule.clean)end,})endModuleScript - CustomModulelocal RunService = game:GetService("RunService")local CustomModule = {}CustomModule.init = function()-- Initialiseer heartbeat verbindingCustomModule.connection = RunService.Heartbeat:Connect(function()end)endCustomModule.clean = function()-- Ontkoppel en wis heartbeat verbindingif CustomModule.connection thenCustomModule.connection:Disconnect()CustomModule.connection = nilendendreturn CustomModule
Functies
loadScene
loadScene(sceneName: string, startTime: number ?)
Laadt programatisch een scène door sceneName en start deze op startTime vanaf het begin. Er zal een "grace period" van 5 seconden zijn voor de scène om van de server te laden voordat de zoekactie plaatsvindt en de scène begint te spelen. Dit betekent dat als je loadScene("[SceneName]", 20) precies om 16:15:00 aanroept, het framework 5 seconden wacht bovenop de gevraagde 20, waardoor de scène om 16:15:25 begint.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
-- Bepaal de volgende scène om te laden wanneer de huidige scène is afgelopen
EvenementSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- "PreShow" is afgelopen; laad de eerste scène in het concert
EvenementSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- "Track1" is afgelopen; laad de tweede scène in het concert
EvenementSequencer.loadScene("Track2")
else
-- Loop terug naar de pre-show scène
EvenementSequencer.loadScene("PreShow")
end
end)createSchema
createSchema(): table
Geeft een instantie van het scène schema terug om logica voor de scène te creëren.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
local Schema = EvenementSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
endseek
seek(time: number)
Zoekt naar de time waarde, in seconden, vanaf het begin van de momenteel geladen scène.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
EvenementSequencer.seek(95.58)setSceneWarningTime
setSceneWarningTime(endSceneTimeWindow: number)
Stelt de hoeveelheid tijd in vanaf het einde van alle scènes waarop een waarschuwing wordt verzonden. Je kunt de waarschuwing detecteren ofwel client-side via onSceneEndingWarningForClient of server-side via onSceneEndingWarningForServer.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
-- Laad scène
EvenementSequencer.loadScene("BeautifulScene")
-- Stel waarschuwingstijd in op 5 seconden voordat de scène eindigt
EvenementSequencer.setSceneWarningTime(5)
-- Detecteer wanneer de scène op het punt staat te eindigen
EvenementSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scène staat op het punt te eindigen!")
end)setSeekingPermissions
setSeekingPermissions(permissions: table)
Verleent zoektoestemming op basis van de PlaceId van het evenement, evenals specifieke UserIds en/of groepen en rollen binnen hen. Zie zoeken en scènes wisselen voor meer informatie.
getCurrentSceneEnvironment
getCurrentSceneEnvironment(): Folder (YIELDS)
Geeft de client-side of server-side Omgeving map van de huidige scène terug, afhankelijk van of het wordt aangeroepen vanuit de Client schema script of Server schema script respectievelijk.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
local Schema = EvenementSequencer.createSchema()
local clientEnvironment
local serverEnvironment
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
-- Toegang tot scène omgevingen; geldt niet voor Inline Mode
clientEnvironment = EvenementSequencer.getCurrentSceneEnvironment()
serverEnvironment = EvenementSequencer.getCurrentServerEnvironmentFromClient()
print("Huidige tijd is:", timePositionObject.Value)
endlocal ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
local Schema = EvenementSequencer.createSchema()
local serverEnvironment
local partColorConnection
local changePartColorEvent = script.Parent.Events.ChangePartColor
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Server)")
serverEnvironment = EvenementSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
endgetCurrentServerEnvironmentFromClient
getCurrentServerEnvironmentFromClient(): Folder (YIELDS)
Geeft de huidige scène's server-side Omgeving map terug. In tegenstelling tot getCurrentSceneEnvironment, kun je dit aanroepen vanuit de Client schema script.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
local Schema = EvenementSequencer.createSchema()
local clientEnvironment
local serverEnvironment
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
-- Toegang tot scène omgevingen; geldt niet voor Inline Mode
clientEnvironment = EvenementSequencer.getCurrentSceneEnvironment()
serverEnvironment = EvenementSequencer.getCurrentServerEnvironmentFromClient()
print("Huidige tijd is:", timePositionObject.Value)
endisLoadingScene
isLoadingScene(): boolean
Wordt vanuit de server aangeroepen om te weten of een scène momenteel aan het laden is.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
print(EvenementSequencer.isLoadingScene())
while EvenementSequencer.isLoadingScene() do
task.wait()
end
print("Scène geladen")Evenementen
onSceneEndingWarningForClient
Vindt plaats op de client voordat de scène op het punt staat te eindigen. De standaardtijd is 3 seconden, maar je kunt deze configureren via setSceneWarningTime. Dit evenement kan alleen worden verbonden in een LocalScript.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
-- Detecteer wanneer de scène op het punt staat te eindigen (client-side)
EvenementSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Scène staat op het punt te eindigen!")
end)onSceneEndingWarningForServer
Vindt plaats op de server voordat de scène op het punt staat te eindigen. De standaardtijd is 3 seconden, maar je kunt deze configureren via setSceneWarningTime. Dit evenement kan alleen worden verbonden in een Script.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
-- Detecteer wanneer de scène op het punt staat te eindigen (server-side)
EvenementSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scène staat op het punt te eindigen!")
end)onSceneLoadedForClient
Vindt plaats op de client wanneer de scène begint. Dit evenement kan alleen worden verbonden in een LocalScript.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
-- Detecteer wanneer de scène begint (client-side)
EvenementSequencer.onSceneLoadedForClient:Connect(function()
warn("Scène begint!")
end)onOrchestrationFinished
Vindt plaats op de server wanneer een scène zijn tijdlengte heeft bereikt en effectief is afgelopen. Dit evenement ontvangt een endedSceneName string naamargument voor de scène die net is afgelopen en je kunt op dit evenement conditioneel een andere scène laden. Kan alleen worden verbonden in een Script.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EvenementSequencer = require(ReplicatedStorage:WaitForChild("EvenementSequencer"))
-- Bepaal de volgende scène om te laden wanneer de huidige scène is afgelopen
EvenementSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- "PreShow" is afgelopen; laad de eerste scène in het concert
EvenementSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- "Track1" is afgelopen; laad de tweede scène in het concert
EvenementSequencer.loadScene("Track2")
else
-- Loop terug naar de pre-show scène
EvenementSequencer.loadScene("PreShow")
end
end)