VerseIsland
Feed Learn Leaderboard Guides Reference Explore Search Docs Verse Library
Sign in
Feed Learn 📖 Codex Leaderboard Guides Reference Explore Search Docs Verse Library
Verse Library › Spawning
Browse Verse Library

Library

Devices 634
  • Devices171
  • Triggers & Logic118
  • UI & HUD40
  • Audio39
  • Items & Inventory29
  • Events27
  • Scoring & Objectives25
  • Spawning19
  • Classes & Interfaces18
  • Game Modes17
  • Props & Meshes14
  • Variables & Mutability12
  • Player Management11
  • Modules & Structure10
  • Round Flow8
  • Animation6
  • Concurrency6
  • Functions6
  • Getting Started6
  • Teams & Classes6
  • NPCs & AI5
  • Tutorials5
  • VFX & Particles5
  • Arrays & Maps4
  • Cameras4
  • Debugging4
  • Control Flow3
  • Cinematics2
  • Other2
  • Persistence2
  • Scene Graph2
  • Structs & Enums2
  • Building1
  • Physics1
  • Publishing & Islands1
  • Syntax & Types1
  • Vehicles1
  • Weapons1
Verse Language 257
  • Control Flow35
  • Functions26
  • Arrays & Maps25
  • Classes & Interfaces22
  • Variables & Mutability22
  • Concurrency21
  • Syntax & Types18
  • Modules & Structure12
  • Debugging8
  • Devices8
  • Events7
  • Player Management6
  • Structs & Enums6
  • Triggers & Logic6
  • Game Modes5
  • Failure & Options4
  • Scene Graph4
  • UI & HUD4
  • Getting Started3
  • Round Flow3
  • Spawning3
  • VFX & Particles3
  • Reference2
  • Animation1
  • Best Practices1
  • Other1
  • Props & Meshes1
Materials/VFX 154
  • Triggers & Logic27
  • UI & HUD17
  • Devices16
  • VFX & Particles14
  • Props & Meshes11
  • Scoring & Objectives9
  • Game Modes7
  • Items & Inventory7
  • Functions6
  • Arrays & Maps5
  • Animation3
  • Cinematics3
  • Classes & Interfaces3
  • Control Flow3
  • Events3
  • Modules & Structure3
  • Round Flow3
  • Spawning3
  • Getting Started2
  • Scene Graph2
  • Variables & Mutability2
  • Concurrency1
  • Persistence1
  • Player Management1
  • Structs & Enums1
  • Syntax & Types1
General 153
  • Devices22
  • Events20
  • Triggers & Logic20
  • Classes & Interfaces10
  • Variables & Mutability8
  • Round Flow6
  • Scoring & Objectives6
  • UI & HUD6
  • Functions5
  • Player Management5
  • Game Modes4
  • Getting Started4
  • Props & Meshes4
  • Control Flow3
  • Syntax & Types3
  • VFX & Particles3
  • Arrays & Maps2
  • Best Practices2
  • NPCs & AI2
  • Other2
  • Physics2
  • Scene Graph2
  • Spawning2
  • Structs & Enums2
  • Tutorials2
  • Building1
  • Cameras1
  • Cinematics1
  • Failure & Options1
  • Items & Inventory1
  • Teams & Classes1
Player 133
  • Player Management22
  • Teams & Classes19
  • Classes & Interfaces12
  • Devices11
  • Events9
  • Persistence7
  • Triggers & Logic7
  • Arrays & Maps6
  • Functions4
  • Game Modes4
  • Items & Inventory4
  • Round Flow4
  • Debugging3
  • Getting Started3
  • Modules & Structure3
  • Concurrency2
  • Control Flow2
  • Scoring & Objectives2
  • Spawning2
  • Structs & Enums2
  • Physics1
  • Props & Meshes1
  • UI & HUD1
  • Variables & Mutability1
  • Weapons1
Building & Props 131
  • Variables & Mutability15
  • Props & Meshes14
  • Triggers & Logic12
  • Classes & Interfaces10
  • Devices10
  • UI & HUD10
  • Events7
  • Teams & Classes7
  • Animation5
  • Building5
  • Functions5
  • VFX & Particles5
  • Structs & Enums4
  • Control Flow3
  • Game Modes3
  • Items & Inventory3
  • Round Flow3
  • Scene Graph3
  • Arrays & Maps2
  • Concurrency2
  • Reference2
  • Modules & Structure1
NPCs & AI 76
  • NPCs & AI35
  • Spawning7
  • Animation5
  • Variables & Mutability5
  • Classes & Interfaces3
  • Debugging3
  • UI & HUD3
  • Audio2
  • Concurrency2
  • Game Modes2
  • Props & Meshes2
  • Triggers & Logic2
  • Devices1
  • Functions1
  • Getting Started1
  • Reference1
  • VFX & Particles1
Spawning 73
  • Spawning31
  • Events7
  • Concurrency6
  • Player Management6
  • Vehicles5
  • Props & Meshes4
  • Devices3
  • Scene Graph3
  • Items & Inventory2
  • Teams & Classes2
  • Control Flow1
  • Publishing & Islands1
  • Reference1
  • Scoring & Objectives1
Cinematics 71
  • Cameras19
  • Cinematics15
  • Devices11
  • Audio5
  • Animation4
  • Triggers & Logic4
  • Functions2
  • Game Modes2
  • UI & HUD2
  • Classes & Interfaces1
  • Concurrency1
  • Control Flow1
  • Items & Inventory1
  • Modules & Structure1
  • Scene Graph1
  • Templates1
UI 57
  • UI & HUD35
  • Devices5
  • Scoring & Objectives4
  • Classes & Interfaces3
  • Round Flow2
  • Scene Graph2
  • Arrays & Maps1
  • Props & Meshes1
  • Structs & Enums1
  • Templates1
  • Triggers & Logic1
  • Variables & Mutability1
Scene Graph 40
  • Scene Graph9
  • Items & Inventory8
  • Classes & Interfaces3
  • Events3
  • Props & Meshes3
  • Functions2
  • Arrays & Maps1
  • Building1
  • Control Flow1
  • Debugging1
  • Modules & Structure1
  • Player Management1
  • Reference1
  • Structs & Enums1
  • Syntax & Types1
  • Triggers & Logic1
  • UI & HUD1
  • VFX & Particles1
Vehicles 38
  • Spawning11
  • Devices7
  • Vehicles7
  • Props & Meshes4
  • Functions2
  • Game Modes2
  • Failure & Options1
  • Items & Inventory1
  • Reference1
  • Teams & Classes1
  • Tutorials1
Tutorials 37
  • Game Modes6
  • Triggers & Logic5
  • Classes & Interfaces4
  • Events4
  • Props & Meshes3
  • Building2
  • Devices2
  • Items & Inventory2
  • Scoring & Objectives2
  • Animation1
  • Arrays & Maps1
  • Cameras1
  • Concurrency1
  • Physics1
  • Player Management1
  • Structs & Enums1
Weapons 30
  • Game Modes6
  • Weapons6
  • Devices5
  • Items & Inventory3
  • Scoring & Objectives3
  • Spawning2
  • Teams & Classes2
  • Best Practices1
  • Functions1
  • Triggers & Logic1
Items 28
  • Items & Inventory23
  • Devices2
  • Triggers & Logic2
  • Spawning1
Assets 20
  • Modules & Structure6
  • Arrays & Maps3
  • Functions3
  • Scene Graph2
  • Best Practices1
  • Devices1
  • Events1
  • Failure & Options1
  • Physics1
  • Variables & Mutability1
Animation 19
  • Animation10
  • Variables & Mutability4
  • Devices1
  • Player Management1
  • Props & Meshes1
  • Scene Graph1
  • Syntax & Types1
Release Notes 17
  • Classes & Interfaces5
  • Modules & Structure3
  • Concurrency2
  • Control Flow2
  • Variables & Mutability2
  • Debugging1
  • Devices1
  • Items & Inventory1
Input & Controls 16
  • Functions4
  • UI & HUD3
  • Control Flow2
  • Animation1
  • Arrays & Maps1
  • Cinematics1
  • Debugging1
  • Devices1
  • Events1
  • Items & Inventory1
Publishing 8
  • Control Flow5
  • Arrays & Maps1
  • Devices1
  • Syntax & Types1
Audio 7
  • Audio5
  • UI & HUD2
Landscape 7
  • Other4
  • VFX & Particles2
  • Scene Graph1
Persistence 6
  • Structs & Enums2
  • Items & Inventory1
  • Persistence1
  • Publishing & Islands1
  • Variables & Mutability1
Physics 5
  • Functions2
  • Classes & Interfaces1
  • Devices1
  • Syntax & Types1
Creator Economy 3
  • Publishing & Islands2
  • Modules & Structure1
Discovery 3
  • Devices1
  • NPCs & AI1
  • Structs & Enums1
Editor & Project 3
  • Other1
  • Props & Meshes1
  • Tutorials1

Live Event Scheduler

Module — 2 files
These files compile together (same module folder).
cue_based_event.verse
using { /Verse.org/SceneGraph }
using { /Verse.org/Simulation }
using { /Fortnite.com/Devices }


# Strategy interface for event scheduling
schedule_strategy<public> := interface<castable>(p_interface):
    ScheduleEvent<public>(Event:live_event)<suspends>:void

<#
    Sleep strategy: Sleeps until event time
    Note: Sleep() uses simulation time, so server lag can cause delays
#>
sleep_schedule_strategy<public> := class<concrete>(schedule_strategy):

    ScheduleEvent<override>(Event:live_event)<suspends>:void=
        # If recurring event timestamp is in the past, jump to next future occurrence
        if (RecurInterval := Event.RecurEvery?):
            CurrentTime := GetSecondsSinceEpoch()
            if (Event.Timestamp < CurrentTime):
                TimeSinceStart := CurrentTime - Event.Timestamp
                PeriodsToAdd := Ceil[TimeSinceStart / RecurInterval] or 1
                set Event.Timestamp = Event.Timestamp + (PeriodsToAdd * RecurInterval)

        loop:
            CurrentTime := GetSecondsSinceEpoch()
            TimeUntilEvent := Event.Timestamp - CurrentTime

            if (TimeUntilEvent <= 0.0):
                spawn. Event.RunEvent()

                # Schedule next occurrence
                if (RecurInterval := Event.RecurEvery?):
                    TimeSinceTrigger := CurrentTime - Event.Timestamp
                    PeriodsToAdd := Max(1, Ceil[TimeSinceTrigger / RecurInterval]) or 1
                    set Event.Timestamp = Event.Timestamp + (PeriodsToAdd * RecurInterval)
                else:
                    break
            else:
                Sleep(TimeUntilEvent)

<#
    Polling strategy: Checks every PollInterval seconds
    Note: Not affected by simulation lag, but has continuous polling overhead
#>
polling_schedule_strategy<public> := class<concrete>(schedule_strategy):

    @editable
    PollInterval : float = 1.0

    ScheduleEvent<override>(Event:live_event)<suspends>:void=
        # Jump to next future occurrence if timestamp is in the past
        if (RecurInterval := Event.RecurEvery?):
            CurrentTime := GetSecondsSinceEpoch()
            if (Event.Timestamp < CurrentTime):
                TimeSinceStart := CurrentTime - Event.Timestamp
                PeriodsToAdd := Ceil[TimeSinceStart / RecurInterval] or 1
                set Event.Timestamp = Event.Timestamp + (PeriodsToAdd * RecurInterval)

        loop:
            CurrentTime := GetSecondsSinceEpoch()

            if (CurrentTime >= Event.Timestamp):
                spawn. Event.RunEvent()

                # Skip to next future occurrence
                if (RecurInterval := Event.RecurEvery?):
                    TimeSinceTrigger := CurrentTime - Event.Timestamp
                    PeriodsToAdd := Max(1, Ceil[TimeSinceTrigger / RecurInterval]) or 1
                    set Event.Timestamp = Event.Timestamp + (PeriodsToAdd * RecurInterval)
                else:
                    break

            Sleep(PollInterval)


# Interface for schedulers. Provides default implementation
schedulable<public> := interface<castable>(p_interface):

    @editable
    EventsToSchedule<public> : []entity = array{}

    @editable
    Strategy<public> : schedule_strategy = sleep_schedule_strategy{}

    # Default implementation: gets live_event components from entities and schedules them
    ScheduleAllEvents<public>():void=
        for:
            EventEntity : EventsToSchedule
            LiveEventComponent : EventEntity.GetComponentsWithInterface(live_event)
        do:
            spawn. Strategy.ScheduleEvent(LiveEventComponent)


# Main scheduler component
live_event_scheduler_component<public> := class<final_super>(component, schedulable):

    OnBeginSimulation<override>():void=
        (super:)OnBeginSimulation()
        ScheduleAllEvents()


live_event<public> := interface<unique><castable>(p_interface):

    @editable
    var Timestamp<public> : float = 0.0  # Unix epoch seconds when event should trigger
    
    @editable
    RecurEvery<public> : ?float = false  # Optional: recur every N seconds
    RunEvent<public>()<suspends>:void  # Event implementation


# Cue-based event: Non-programmers can create events in the editor
cue_based_event := class<concrete>(creative_device, live_event):

    @editable
    Cue : cue_sequence = cue_sequence{}

    RunEvent<override>()<suspends>:void=
        Cue.Invoke()
        return

cue := class<abstract>:
    Invoke()<suspends>:void

cue_group := class<abstract>(cue):

    @editable
    Cues : []cue = array{}

    Invoke<override>()<suspends>:void

cue_sequence := class<concrete>(cue_group):

    Invoke<override>()<suspends>:void=
        for (Cue : Cues):
            Cue.Invoke()

cue_parallell := class<concrete>(cue_group):

    Invoke<override>()<suspends>:void=
        RecursiveSync(for (Cue : Cues) { Cue.Invoke })

cue_print := class<concrete>(cue):

    @editable
    Text : string = ""

    Invoke<override>():void=
        Print(Text)

cue_wait := class<concrete>(cue):

    @editable
    Time : float = 1.0

    Invoke<override>()<suspends>:void=
        Sleep(Time)

cue_play_sequencer := class<concrete>(cue):

    @editable
    Sequencer : cinematic_sequence_device = cinematic_sequence_device{}

    @editable
    WaitForFinish : logic = false

    Invoke<override>()<suspends>:void=
        Sequencer.Play()

        if (WaitForFinish = true):
            Sequencer.StoppedEvent.Await()

cue_trigger := class<concrete>(cue):

    @editable
    TriggerDevice : trigger_device = trigger_device{}

    Invoke<override>()<suspends>:void=
        TriggerDevice.Trigger()


# Example event
example_event := class<final_super>(component, live_event):

    RunEvent<override>()<suspends>:void=
        Print("Event just started!")
        Sleep(5.0)
        Print("Event is finished!")
p_interface.verse
using { /Verse.org/Simulation }

LUF := import(/Verse.org/SpatialMath)
XYZ := import(/UnrealEngine.com/Temporary/SpatialMath)

<#> Data
p_interface := interface{}


<#> Concurrency
RecursiveSync(Expressions:[](type{_()<suspends>:t}) where t:type)<suspends>:[]t=
    if:
        Mid := Floor(Expressions.Length / 2)
        RightExprs := Expressions.Slice[0, Mid]
        LeftExprs := Expressions.Slice[Mid]
    then:
        Res := sync:
            RecursiveSync(RightExprs)
            RecursiveSync(LeftExprs)
        Res(0) + Res(1)
    
    # E1 exists, but Slice 1 fails -> 1 element left
    else if (E1 := Expressions[0]):
        array{E1()}
    else:
        array{}

RecursiveRace(Expressions:[](type{_()<suspends>:t}) where t:type)<suspends>:t=
    if:
        Mid := Floor(Expressions.Length / 2)
        RightExprs := Expressions.Slice[0, Mid]
        LeftExprs := Expressions.Slice[Mid]
    then:
        race:
            RecursiveRace(RightExprs)
            RecursiveRace(LeftExprs)
    
    # E1 exists, but Slice fails -> 1 element left
    else if (E1 := Expressions[0]):
        E1()
    else:
        Err()


<#> SG Utils
using { /Verse.org/SceneGraph }

(Entity:entity).GetComponentsWithInterface(iface:castable_subtype(p_interface))<reads>:[]iface=
    for (Component : Entity.GetComponents(), IFace := iface[Component]):
        IFace

(Entity:entity).GetDescendantComponentsWithInterface(iface:castable_subtype(p_interface))<transacts>:[]iface=
    for (Component : Entity.FindDescendantComponents(component), IFace := iface[Component]):
        IFace
Sign in to download module

Copy-paste each file above is always free.

Comments

    Sign in to vote, comment, or suggest an edit. Sign in
    📄
    Source
    Epic Games Community

    Created by a member of the Epic Games community. Rights remain with the original author, under Epic's community content terms. Terms ↗

    View original Sources & licensing
    Request removal
    Last updated Jun 23, 2026
    Verse module (2 files)
    Compiles · verified Jun 24, 2026

    Download the full module (zip) from the code panel above.

    Keep exploring
    More in Verse Language · 7 of 106
    Prev
    fortnite simple insta reload
    Next
    fortnite helper parametric functions for the generator t type
    Related topics
    • Fortnite Real Time Api Beta Verse Language
    • Fortnite Awaiting Custom Event Verse Language
    • Fortnite Fort Round Gameplay Interface For Scene Graph Components Ui
    • Debugging And Troubleshooting In Verse Verse Language
    • Gameplay Events In Sequencer In Unreal Editor For Fortnite Cinematics

    Related

    Open in graph →

    Related topics

    • Fortnite Real Time Api Beta
    • Fortnite Awaiting Custom Event
    • Fortnite Fort Round Gameplay Interface For Scene Graph Components
    • Debugging And Troubleshooting In Verse
    • Gameplay Events In Sequencer In Unreal Editor For Fortnite
    VerseIsland · an archipelago of Verse & UEFN knowledge
    🗺️ Island atlas Learn Guides History About & Press Sources & Licensing Status

    Not affiliated with Epic Games. Fortnite, UEFN, Unreal Engine, and Verse are trademarks of Epic Games, Inc. Content is attributed to its source — see Sources & Licensing.

    🦜

    Scout · your island guide

    The Isle of Verse