Skip to content

Releases: ScriptedEvents/ScriptedEventsReloaded

Version 1.0.0 - Experimental 2

11 Apr 20:47

Choose a tag to compare

Pre-release

SetProperty no more!

Instead of using a method to set a property of a reference value, you can use custom syntax instead:

# before
SetProperty *generator isOpen true

# now
*generator -> isOpen = true

valType property for all values

Allows you to verify what kind of value a variable has, especially important for $literal values!

!-- CustomCommand timer
-- description "sets a timer"
-- arguments duration

if {$duration -> valType} isnt "Duration"
    Error ...
end

Verification of text experssions

If you use an invalid expression in text, like "my name is {get @x name}", you will immediatelly get a compile error!
This is a very welcome verification procedure that helped to catch some errors within example scripts!

New CustomCommand flag arguments

  • -- maxUses: The maximum number of times a player can use this command
  • -- onMaxUsesMessage: Defines a message for when the player tries to run a command but has reached their maximum usage limit
  • -- globalMaxUses: The maximum number of times this command can be used globally
  • -- onGlobalMaxUsesMessage: Defines a message for when the command has reached its global usage limit

New methods

  • HasPermission: Checks if a player has a specific permission
  • AnimatedBroadcast: Sends an animated broadcast to all players
  • PlayerAnimatedBroadcast: Sends an animated broadcast to specified players [EXILED ONLY]

Changes added in v1.0.0 - Experimental 1

Main addition - SetProperty method

This version adds a way for you to not only access all properties a reference has, but also MODIFY them!

Using a script like this, you can open all generators, even when SER developers haven't made a dedicated method for that:

over {GetGenerators} with *generator
    SetProperty *generator isOpen true
end

With this, the properties option for serhelp tells you whether a property can be modified. Search for [settable] tag:

>>> serhelp properties generator

--- Base properties ---
...
> isOpen (bool value) [settable]
> isUnlocked (bool value) [settable]
> position (reference to Vector3) [settable]
> remainingTime (number value) [settable]
> requiredPermissions (enum value of DoorPermissionFlags) [settable]
> room (reference to Room)
...

Tesla Rule Methods

Additionally, new methods were added to allow for easier tinkering with teslas ignoring players:

  • Ignored___ByTesla methods featuring Players, Roles and Teams
  • ResetIgnored___ByTesla methods featuring Players, Roles and Teams

Other Additions:

  • Mute & ResetMute methods
  • SetRadioRange method
  • GetGenerators, GetCameras, GetDoors, GetPickups, GetRagdolls, GetRoomLights, GetRooms & GetTeslas methods

Changes added in v0.16.0 - Experimental 3

Version 0.16 is a landmark release that fundamentally transforms how you write SER scripts. We've overhauled the syntax to make your code cleaner, more intuitive, and more powerful than ever before. Say goodbye to excessive brackets and hello to modern, readable scripting.

Warmly welcome @RetroReul - newest SER contributor!

Retro is behind most of the new methods and properties in version 0.16! Glad to have you on our team :)

The Arrow Operator (->)

The most significant change in v0.16 replaces clunky method calls with the elegant arrow operator. This single character revolutionizes how you access data throughout your scripts.

Cleaner Variable Definitions

No more wrapping properties in curly braces just to assign them to variables:

  • Old Syntax: $name = {@plr name}
  • New Syntax: $name = @plr -> name

Goodbye Redundant Info Methods

Specialized methods like ItemInfo, DamageInfo, and PickupInfo are now history:

  • Old (Item): $type = ItemInfo *item type
  • New (Item): $type = *item -> type
  • Old (Pickup): @owner = PickupInfo *pickup lastOwner
  • New (Pickup): @owner = *pickup -> lastOwner

Direct Property Access Revolution

SER now automatically scans game objects and exposes all their properties directly. No more waiting for developers to add specific properties-if it exists in the game's source code, you can access it:

# Access any property of any game object
$customProp = *reference -> somePropertyFromGameCode

All available properties are also searchable via serhelp properties command - use e.g. serhelp properties room and see for yourself!

SER Values Get Superpowers

Methods like DurationInfo and TextLength are now built-in properties:

  • Old: $seconds = DurationInfo $duration totalSeconds
  • New: $seconds = $duration -> totalSeconds
  • Old: $length = TextLength $text
  • New: $length = $text -> length

Property Chaining Mastery

Drill through multiple objects in a single, readable line:

  • New: $nameLengthOdd = @sender -> name -> length -> isOdd
  • New: $roomName = @plr -> roomRef -> name

Enhanced Player Control

Stamina System

Full control over player stamina with regeneration delay options:

Stamina set @plr 50% true  # Set to 50%, delay regeneration
Stamina add @plr 30%  # Add 30% stamina
Stamina remove @plr 20%  # Remove 20% stamina

Enhanced Movement

Jump @plr 2.5  # Make player jump with 2.5x strength

Visual Feedback

ShowHitMarker @plr 3.5 false  # Critical hit marker, no audio

New Player Properties

Access comprehensive player state information:

if {@plr -> isSpeaking} is true
    Print "Player is talking"
end

$unit = @plr -> unit  # Returns e.g. "FOXTROT-03" for NTF
$color = @plr -> roleColor  # Hex value of role color

New Properties Added:

  • isSpeaking - Whether player is using voice chat
  • isSpectatable - Whether player can be spectated
  • isJumping - Whether player is currently jumping
  • isGrounded - Whether player is on the ground
  • movementState - Current movement state
  • lifeId - Unique life identifier
  • unitId - Unit identifier (e.g., 03)
  • unit - Full unit name (e.g., "FOXTROT-03")

New Methods & Game Integration

Environmental Interactions

SetElevatorText "EMERGENCY ONLY"  # Custom elevator panel text
PryGate GateA true  # Pry gate with button effects

Player Management

ForceEquip @plr KeycardO5  # Force equip item like RA command

World Objects

CreateRagdoll ClassD "Victim" 10 5 2  # Spawn ragdoll at coordinates

Utility Methods

if {ContainsText $text "secret"} is true
    Print "Found secret!"
end

if {SpeakerExists "AnnouncementSystem"} is true
    PlayAudio "AnnouncementSystem" "alarm"
end

if {ScriptExists "myScript"} is false
    Print "Script not found!"
end

Streamlined Syntax & Flow Control

Math Without Parentheses

The bracket tax on math expressions is gone:

  • Old: $five = (2 + 3)
  • New: $five = 2 + 3

Inline with Statements

Keep your loops and functions clean and compact:

# Loop with player iteration
over @all with @plr
    Print {@plr -> name}
end

# Function with parameters
func $Add with $a $b
    return $a + $b
end

# Repeat with iteration counter
repeat 5 with $i
    Print "Iteration {$i}"
end

Keywords Replace Methods

Yield commands are now proper keywords for better flow control:

  • Old: Wait 5s
  • New: wait 5s
  • Old: WaitUntil ({AmountOf @all} is 0)
  • New: wait_until {AmountOf @all} is 0

Inline Comments

Document your code as you write it:

Print "Hello"  # Greet the player
if $hp < 20  # Critical health check
    Heal @sender 100  # Heal player
end

Built-in Effect System

Base-game status effects are now natively supported! No more EXILED dependency for basic effect management:

# Apply base-game effects
GiveEffect @plr Bleeding 5s  # Apply bleeding for 5 seconds
RemoveEffect @plr Bleeding  # Remove bleeding effect

Effect Properties

&effects = @plr -> effects  # Collection of active effect names
&effectRefs = @plr -> effectReferences  # Collection of effect references

Enhanced Door Properties

if {*door -> isGate} is true
    Print "This is a gate!"
end

if {*door -> isBreakable} is true
    Print "This door can be broken!"
end

if {*door -> isCheckpoint} is true
    Print "This is a part of a checkpoint!"
end

Other Notable Changes

Spawn Wave Control

SpawnWave ntfSpawnWave  # Spawn NTF wave

Interactable Toy Management

SetInteractableProperties *toy Box 5s true  # Modify interactable toy behavior

Improved Audio System

Improved LoadAudio method with better file handling and clearer documentation.

Enhanced Event Information

serhelp now shows whether events are cancellable for better event handling.

Updated Examples

All example scripts updated to use new syntax and moved to a custom folder for easy GitHub access.

Complete Documentation

Added llms-full.md with the entire SER language specification for AI-assisted development.

Version 1.0.0 - Experimental

10 Apr 19:03

Choose a tag to compare

Pre-release

Main addition - SetProperty method

This version adds a way for you to not only access all properties a reference has, but also MODIFY them!

Using a script like this, you can open all generators, even when SER developers haven't made a dedicated method for that:

over {GetGenerators} with *generator
    SetProperty *generator isOpen true
end

With this, the properties option for serhelp tells you whether a property can be modified. Search for [settable] tag:

>>> serhelp properties generator

--- Base properties ---
...
> isOpen (bool value) [settable]
> isUnlocked (bool value) [settable]
> position (reference to Vector3) [settable]
> remainingTime (number value) [settable]
> requiredPermissions (enum value of DoorPermissionFlags) [settable]
> room (reference to Room)
...

Tesla Rule Methods

Additionally, new methods were added to allow for easier tinkering with teslas ignoring players:

  • Ignored___ByTesla methods featuring Players, Roles and Teams
  • ResetIgnored___ByTesla methods featuring Players, Roles and Teams

Other Additions:

  • Mute & ResetMute methods
  • SetRadioRange method
  • GetGenerators, GetCameras, GetDoors, GetPickups, GetRagdolls, GetRoomLights, GetRooms & GetTeslas methods

Changes added in V0.16.0 - Experimental 3

Version 0.16 is a landmark release that fundamentally transforms how you write SER scripts. We've overhauled the syntax to make your code cleaner, more intuitive, and more powerful than ever before. Say goodbye to excessive brackets and hello to modern, readable scripting.

Warmly welcome @RetroReul - newest SER contributor!

Retro is behind most of the new methods and properties in version 0.16! Glad to have you on our team :)

The Arrow Operator (->)

The most significant change in v0.16 replaces clunky method calls with the elegant arrow operator. This single character revolutionizes how you access data throughout your scripts.

Cleaner Variable Definitions

No more wrapping properties in curly braces just to assign them to variables:

  • Old Syntax: $name = {@plr name}
  • New Syntax: $name = @plr -> name

Goodbye Redundant Info Methods

Specialized methods like ItemInfo, DamageInfo, and PickupInfo are now history:

  • Old (Item): $type = ItemInfo *item type
  • New (Item): $type = *item -> type
  • Old (Pickup): @owner = PickupInfo *pickup lastOwner
  • New (Pickup): @owner = *pickup -> lastOwner

Direct Property Access Revolution

SER now automatically scans game objects and exposes all their properties directly. No more waiting for developers to add specific properties-if it exists in the game's source code, you can access it:

# Access any property of any game object
$customProp = *reference -> somePropertyFromGameCode

All available properties are also searchable via serhelp properties command - use e.g. serhelp properties room and see for yourself!

SER Values Get Superpowers

Methods like DurationInfo and TextLength are now built-in properties:

  • Old: $seconds = DurationInfo $duration totalSeconds
  • New: $seconds = $duration -> totalSeconds
  • Old: $length = TextLength $text
  • New: $length = $text -> length

Property Chaining Mastery

Drill through multiple objects in a single, readable line:

  • New: $nameLengthOdd = @sender -> name -> length -> isOdd
  • New: $roomName = @plr -> roomRef -> name

Enhanced Player Control

Stamina System

Full control over player stamina with regeneration delay options:

Stamina set @plr 50% true  # Set to 50%, delay regeneration
Stamina add @plr 30%  # Add 30% stamina
Stamina remove @plr 20%  # Remove 20% stamina

Enhanced Movement

Jump @plr 2.5  # Make player jump with 2.5x strength

Visual Feedback

ShowHitMarker @plr 3.5 false  # Critical hit marker, no audio

New Player Properties

Access comprehensive player state information:

if {@plr -> isSpeaking} is true
    Print "Player is talking"
end

$unit = @plr -> unit  # Returns e.g. "FOXTROT-03" for NTF
$color = @plr -> roleColor  # Hex value of role color

New Properties Added:

  • isSpeaking - Whether player is using voice chat
  • isSpectatable - Whether player can be spectated
  • isJumping - Whether player is currently jumping
  • isGrounded - Whether player is on the ground
  • movementState - Current movement state
  • lifeId - Unique life identifier
  • unitId - Unit identifier (e.g., 03)
  • unit - Full unit name (e.g., "FOXTROT-03")

New Methods & Game Integration

Environmental Interactions

SetElevatorText "EMERGENCY ONLY"  # Custom elevator panel text
PryGate GateA true  # Pry gate with button effects

Player Management

ForceEquip @plr KeycardO5  # Force equip item like RA command

World Objects

CreateRagdoll ClassD "Victim" 10 5 2  # Spawn ragdoll at coordinates

Utility Methods

if {ContainsText $text "secret"} is true
    Print "Found secret!"
end

if {SpeakerExists "AnnouncementSystem"} is true
    PlayAudio "AnnouncementSystem" "alarm"
end

if {ScriptExists "myScript"} is false
    Print "Script not found!"
end

Streamlined Syntax & Flow Control

Math Without Parentheses

The bracket tax on math expressions is gone:

  • Old: $five = (2 + 3)
  • New: $five = 2 + 3

Inline with Statements

Keep your loops and functions clean and compact:

# Loop with player iteration
over @all with @plr
    Print {@plr -> name}
end

# Function with parameters
func $Add with $a $b
    return $a + $b
end

# Repeat with iteration counter
repeat 5 with $i
    Print "Iteration {$i}"
end

Keywords Replace Methods

Yield commands are now proper keywords for better flow control:

  • Old: Wait 5s
  • New: wait 5s
  • Old: WaitUntil ({AmountOf @all} is 0)
  • New: wait_until {AmountOf @all} is 0

Inline Comments

Document your code as you write it:

Print "Hello"  # Greet the player
if $hp < 20  # Critical health check
    Heal @sender 100  # Heal player
end

Built-in Effect System

Base-game status effects are now natively supported! No more EXILED dependency for basic effect management:

# Apply base-game effects
GiveEffect @plr Bleeding 5s  # Apply bleeding for 5 seconds
RemoveEffect @plr Bleeding  # Remove bleeding effect

Effect Properties

&effects = @plr -> effects  # Collection of active effect names
&effectRefs = @plr -> effectReferences  # Collection of effect references

Enhanced Door Properties

if {*door -> isGate} is true
    Print "This is a gate!"
end

if {*door -> isBreakable} is true
    Print "This door can be broken!"
end

if {*door -> isCheckpoint} is true
    Print "This is a part of a checkpoint!"
end

Other Notable Changes

Spawn Wave Control

SpawnWave ntfSpawnWave  # Spawn NTF wave

Interactable Toy Management

SetInteractableProperties *toy Box 5s true  # Modify interactable toy behavior

Improved Audio System

Improved LoadAudio method with better file handling and clearer documentation.

Enhanced Event Information

serhelp now shows whether events are cancellable for better event handling.

Updated Examples

All example scripts updated to use new syntax and moved to a custom folder for easy GitHub access.

Complete Documentation

Added llms-full.md with the entire SER language specification for AI-assisted development.

Version 0.16.0 - Experimental 3

08 Apr 18:57

Choose a tag to compare

Pre-release

Fixes to the Experimental 2 version

  • Properly implemented all of the player properties
  • Made roleColor player property return a color value instead of text value

Original changelog for Experimental 2

Version 0.16 is a landmark release that fundamentally transforms how you write SER scripts. We've overhauled the syntax to make your code cleaner, more intuitive, and more powerful than ever before. Say goodbye to excessive brackets and hello to modern, readable scripting.

Warmly welcome @RetroReul - newest SER contributor!

Retro is behind most of the new methods and properties in version 0.16! Glad to have you on our team :)

The Arrow Operator (->)

The most significant change in v0.16 replaces clunky method calls with the elegant arrow operator. This single character revolutionizes how you access data throughout your scripts.

Cleaner Variable Definitions

No more wrapping properties in curly braces just to assign them to variables:

  • Old Syntax: $name = {@plr name}
  • New Syntax: $name = @plr -> name

Goodbye Redundant Info Methods

Specialized methods like ItemInfo, DamageInfo, and PickupInfo are now history:

  • Old (Item): $type = ItemInfo *item type
  • New (Item): $type = *item -> type
  • Old (Pickup): @owner = PickupInfo *pickup lastOwner
  • New (Pickup): @owner = *pickup -> lastOwner

Direct Property Access Revolution

SER now automatically scans game objects and exposes all their properties directly. No more waiting for developers to add specific properties-if it exists in the game's source code, you can access it:

# Access any property of any game object
$customProp = *reference -> somePropertyFromGameCode

All available properties are also searchable via serhelp properties command - use e.g. serhelp properties room and see for yourself!

SER Values Get Superpowers

Methods like DurationInfo and TextLength are now built-in properties:

  • Old: $seconds = DurationInfo $duration totalSeconds
  • New: $seconds = $duration -> totalSeconds
  • Old: $length = TextLength $text
  • New: $length = $text -> length

Property Chaining Mastery

Drill through multiple objects in a single, readable line:

  • New: $nameLengthOdd = @sender -> name -> length -> isOdd
  • New: $roomName = @plr -> roomRef -> name

Enhanced Player Control

Stamina System

Full control over player stamina with regeneration delay options:

Stamina set @plr 50% true  # Set to 50%, delay regeneration
Stamina add @plr 30%  # Add 30% stamina
Stamina remove @plr 20%  # Remove 20% stamina

Enhanced Movement

Jump @plr 2.5  # Make player jump with 2.5x strength

Visual Feedback

ShowHitMarker @plr 3.5 false  # Critical hit marker, no audio

New Player Properties

Access comprehensive player state information:

if {@plr -> isSpeaking} is true
    Print "Player is talking"
end

$unit = @plr -> unit  # Returns e.g. "FOXTROT-03" for NTF
$color = @plr -> roleColor  # Hex value of role color

New Properties Added:

  • isSpeaking - Whether player is using voice chat
  • isSpectatable - Whether player can be spectated
  • isJumping - Whether player is currently jumping
  • isGrounded - Whether player is on the ground
  • movementState - Current movement state
  • lifeId - Unique life identifier
  • unitId - Unit identifier (e.g., 03)
  • unit - Full unit name (e.g., "FOXTROT-03")

New Methods & Game Integration

Environmental Interactions

SetElevatorText "EMERGENCY ONLY"  # Custom elevator panel text
PryGate GateA true  # Pry gate with button effects

Player Management

ForceEquip @plr KeycardO5  # Force equip item like RA command

World Objects

CreateRagdoll ClassD "Victim" 10 5 2  # Spawn ragdoll at coordinates

Utility Methods

if {ContainsText $text "secret"} is true
    Print "Found secret!"
end

if {SpeakerExists "AnnouncementSystem"} is true
    PlayAudio "AnnouncementSystem" "alarm"
end

if {ScriptExists "myScript"} is false
    Print "Script not found!"
end

Streamlined Syntax & Flow Control

Math Without Parentheses

The bracket tax on math expressions is gone:

  • Old: $five = (2 + 3)
  • New: $five = 2 + 3

Inline with Statements

Keep your loops and functions clean and compact:

# Loop with player iteration
over @all with @plr
    Print {@plr -> name}
end

# Function with parameters
func $Add with $a $b
    return $a + $b
end

# Repeat with iteration counter
repeat 5 with $i
    Print "Iteration {$i}"
end

Keywords Replace Methods

Yield commands are now proper keywords for better flow control:

  • Old: Wait 5s
  • New: wait 5s
  • Old: WaitUntil ({AmountOf @all} is 0)
  • New: wait_until {AmountOf @all} is 0

Inline Comments

Document your code as you write it:

Print "Hello"  # Greet the player
if $hp < 20  # Critical health check
    Heal @sender 100  # Heal player
end

Built-in Effect System

Base-game status effects are now natively supported! No more EXILED dependency for basic effect management:

# Apply base-game effects
GiveEffect @plr Bleeding 5s  # Apply bleeding for 5 seconds
RemoveEffect @plr Bleeding  # Remove bleeding effect

Effect Properties

&effects = @plr -> effects  # Collection of active effect names
&effectRefs = @plr -> effectReferences  # Collection of effect references

Enhanced Door Properties

if {*door -> isGate} is true
    Print "This is a gate!"
end

if {*door -> isBreakable} is true
    Print "This door can be broken!"
end

if {*door -> isCheckpoint} is true
    Print "This is a part of a checkpoint!"
end

Other Notable Changes

Spawn Wave Control

SpawnWave ntfSpawnWave  # Spawn NTF wave

Interactable Toy Management

SetInteractableProperties *toy Box 5s true  # Modify interactable toy behavior

Improved Audio System

Improved LoadAudio method with better file handling and clearer documentation.

Enhanced Event Information

serhelp now shows whether events are cancellable for better event handling.

Updated Examples

All example scripts updated to use new syntax and moved to a custom folder for easy GitHub access.

Complete Documentation

Added llms-full.md with the entire SER language specification for AI-assisted development.

Version 0.16.0 - Experimental 2

07 Apr 16:34

Choose a tag to compare

Pre-release

Version 0.16 is a landmark release that fundamentally transforms how you write SER scripts. We've overhauled the syntax to make your code cleaner, more intuitive, and more powerful than ever before. Say goodbye to excessive brackets and hello to modern, readable scripting.

Warmly welcome @RetroReul - newest SER contributor!

Retro is behind most of the new methods and properties in version 0.16! Glad to have you on our team :)

The Arrow Operator (->)

The most significant change in v0.16 replaces clunky method calls with the elegant arrow operator. This single character revolutionizes how you access data throughout your scripts.

Cleaner Variable Definitions

No more wrapping properties in curly braces just to assign them to variables:

  • Old Syntax: $name = {@plr name}
  • New Syntax: $name = @plr -> name

Goodbye Redundant Info Methods

Specialized methods like ItemInfo, DamageInfo, and PickupInfo are now history:

  • Old (Item): $type = ItemInfo *item type
  • New (Item): $type = *item -> type
  • Old (Pickup): @owner = PickupInfo *pickup lastOwner
  • New (Pickup): @owner = *pickup -> lastOwner

Direct Property Access Revolution

SER now automatically scans game objects and exposes all their properties directly. No more waiting for developers to add specific properties-if it exists in the game's source code, you can access it:

# Access any property of any game object
$customProp = *reference -> somePropertyFromGameCode

All available properties are also searchable via serhelp properties command - use e.g. serhelp properties room and see for yourself!

SER Values Get Superpowers

Methods like DurationInfo and TextLength are now built-in properties:

  • Old: $seconds = DurationInfo $duration totalSeconds
  • New: $seconds = $duration -> totalSeconds
  • Old: $length = TextLength $text
  • New: $length = $text -> length

Property Chaining Mastery

Drill through multiple objects in a single, readable line:

  • New: $nameLengthOdd = @sender -> name -> length -> isOdd
  • New: $roomName = @plr -> roomRef -> name

Enhanced Player Control

Stamina System

Full control over player stamina with regeneration delay options:

Stamina set @plr 50% true  # Set to 50%, delay regeneration
Stamina add @plr 30%  # Add 30% stamina
Stamina remove @plr 20%  # Remove 20% stamina

Enhanced Movement

Jump @plr 2.5  # Make player jump with 2.5x strength

Visual Feedback

ShowHitMarker @plr 3.5 false  # Critical hit marker, no audio

New Player Properties

Access comprehensive player state information:

if {@plr -> isSpeaking} is true
    Print "Player is talking"
end

$unit = @plr -> unit  # Returns e.g. "FOXTROT-03" for NTF
$color = @plr -> roleColor  # Hex value of role color

New Properties Added:

  • isSpeaking - Whether player is using voice chat
  • isSpectatable - Whether player can be spectated
  • isJumping - Whether player is currently jumping
  • isGrounded - Whether player is on the ground
  • movementState - Current movement state
  • lifeId - Unique life identifier
  • unitId - Unit identifier (e.g., 03)
  • unit - Full unit name (e.g., "FOXTROT-03")

New Methods & Game Integration

Environmental Interactions

SetElevatorText "EMERGENCY ONLY"  # Custom elevator panel text
PryGate GateA true  # Pry gate with button effects

Player Management

ForceEquip @plr KeycardO5  # Force equip item like RA command

World Objects

CreateRagdoll ClassD "Victim" 10 5 2  # Spawn ragdoll at coordinates

Utility Methods

if {ContainsText $text "secret"} is true
    Print "Found secret!"
end

if {SpeakerExists "AnnouncementSystem"} is true
    PlayAudio "AnnouncementSystem" "alarm"
end

if {ScriptExists "myScript"} is false
    Print "Script not found!"
end

Streamlined Syntax & Flow Control

Math Without Parentheses

The bracket tax on math expressions is gone:

  • Old: $five = (2 + 3)
  • New: $five = 2 + 3

Inline with Statements

Keep your loops and functions clean and compact:

# Loop with player iteration
over @all with @plr
    Print {@plr -> name}
end

# Function with parameters
func $Add with $a $b
    return $a + $b
end

# Repeat with iteration counter
repeat 5 with $i
    Print "Iteration {$i}"
end

Keywords Replace Methods

Yield commands are now proper keywords for better flow control:

  • Old: Wait 5s
  • New: wait 5s
  • Old: WaitUntil ({AmountOf @all} is 0)
  • New: wait_until {AmountOf @all} is 0

Inline Comments

Document your code as you write it:

Print "Hello"  # Greet the player
if $hp < 20  # Critical health check
    Heal @sender 100  # Heal player
end

Built-in Effect System

Base-game status effects are now natively supported! No more EXILED dependency for basic effect management:

# Apply base-game effects
GiveEffect @plr Bleeding 5s  # Apply bleeding for 5 seconds
RemoveEffect @plr Bleeding  # Remove bleeding effect

Effect Properties

&effects = @plr -> effects  # Collection of active effect names
&effectRefs = @plr -> effectReferences  # Collection of effect references

Enhanced Door Properties

if {*door -> isGate} is true
    Print "This is a gate!"
end

if {*door -> isBreakable} is true
    Print "This door can be broken!"
end

if {*door -> isCheckpoint} is true
    Print "This is a part of a checkpoint!"
end

Other Notable Changes

Spawn Wave Control

SpawnWave ntfSpawnWave  # Spawn NTF wave

Interactable Toy Management

SetInteractableProperties *toy Box 5s true  # Modify interactable toy behavior

Improved Audio System

Improved LoadAudio method with better file handling and clearer documentation.

Enhanced Event Information

serhelp now shows whether events are cancellable for better event handling.

Updated Examples

All example scripts updated to use new syntax and moved to a custom folder for easy GitHub access.

Complete Documentation

Added llms-full.md with the entire SER language specification for AI-assisted development.

Version 0.16.0 - Experimental

31 Mar 16:27

Choose a tag to compare

Pre-release

SER v0.16: The Syntax Update

Version 0.16 is a major quality-of-life overhaul designed to make your scripts look more like modern code and less like a sea of brackets. We’ve focused on "syntactic sugar" to reduce typing and improve readability across the board.


💎 The Property Revolution (->)

The most significant change in v0.16 is how you access data. We are moving away from clunky method calls and bracketed properties in favor of the arrow operator.

Property Access in Variables

You no longer need to wrap properties in curly braces when defining variables.

  • Old Syntax: $name = {@plr name}
  • New Syntax: $name = @plr -> name

Replacing <Type>Info Methods for References

Specialized info methods (like ItemInfo, DamageInfo, or PickupInfo) have been deprecated or removed in favor of the more intuitive arrow syntax.

  • Old (Item): $type = ItemInfo *item type
  • New (Item): $type = *item -> type
  • Old (Pickup): @owner = PickupInfo *pickup lastOwner
  • New (Pickup): @owner = *pickup -> lastOwner

Direct Property Access

SER now scans references to give you direct access to their underlying properties. You are no longer limited to properties manually added by developers—if it exists in the source code, you can grab it with the -> operator. This opens up deep script customization for almost any game object.

SER Values have Properties

Methods like DurationInfo have been removed in favor of having direct properties of SER values.

  • Old: $seconds = DurationInfo $duration totalSeconds
  • New: $seconds = $duration -> totalSeconds
  • Old: $length = TextLength $text
  • New: $length = $text -> length

Property Chaining

You can now drill down through multiple objects in a single line of code.

  • New Capability: $nameLengthOdd = @sender -> name -> length -> isOdd

⏳ Keyword Rework: wait and wait_until

We have transitioned yielding commands from Methods to Keywords. This better represents their role in controlling the script's internal execution flow. Note the shift to lowercase.

  • Old Syntax: Wait 5s
  • New Syntax: wait 5s
  • Old Syntax: WaitUntil ({AmountOf @all} is 0)
  • New Syntax: wait_until {AmountOf @all} is 0

🧹 Streamlined Logic & Expressions

Math Without the "Bracket Tax"

Math expressions in variable definitions are now much cleaner. The engine is now smart enough to parse these without requiring parentheses.

  • Old Syntax: $five = (2 + 3)
  • New Syntax: $five = 2 + 3

Inline with Statements

To keep your loops and functions compact, the with keyword can now reside on the same line as the header.

  • Old (Loop):
    over @all
        with @plr
        ...
    end
    
  • New (Loop):
    over @all with @plr
        ...
    end
    
  • Old (Function):
    func $Add
        with $a $b
        ...
    end
    
  • New (Function):
    func $Add with $a $b
        ...
    end
    

📝 Modern Scripting Comforts

Inline Comments

You can finally document your code as you write it. Inline comments are now fully supported using the # symbol.

  • Example: Print "Hello" # This method prints "Hello"
  • Example: if $x > $y # Check if $x is bigger than $y

The VSCode color extension

The extension will soon be recieving an update to properly handle the new syntax, but it is not ready yet.

Version 0.15.1

15 Mar 18:34

Choose a tag to compare

Fixes

  • Fixed return and break keywords not terminating functions until a yield
  • Fixed Exiled being requried to load the plugin (again)
  • Fixed SetToyRotation and SetToyScale operating on Exiled toys instead of LabApi toys
  • FIxed addDurationIfActive argument in GiveEffectMethod method not being applied correctly
  • Fixed invalid database storing of text values (@Tosoks67)

Additions

  • Added the ability to get the type of error and stack trace of the error in on_error statement (@Tosoks67)
    attempt
        ...
    on_error
        #              👇       👇
        with $message $type $stackTrace
        ...
    end
    
  • Added color value type (part of literal values)
    # this creates a red color value
    $color = ff0000
    
  • Added SetSpectatability method
  • Added RemoveDBKey method (@Tosoks67)

Improvements

  • Improved the serhelp methods command to list methods that can be added by frameworks, even if a given framework is not present

Version 0.15

08 Mar 13:05

Choose a tag to compare

CustomCommand flag additions

  • *command local variable
  • ResetGlobalCommandCooldown method
  • ResetPlayerCommandCooldown method
  • -- invalidRankMessage argument
  • -- neededPermission argument
  • -- noPermissionMessage argument
  • -- onCooldownMessage argument
  • -- globalCooldown argument
  • -- onGlobalCooldownMessage argument
  • Optional arguments for -- arguments option

Enum flag changes

(not to be confused with script flags)

  • Added new syntax to define multiple enum values for the same argument using | syntax
    Instead of using ToFlags method, use the Val1|Val2|Val3 system instead.
    Example: SetPrimitiveObjectProperties *toy _ _ Collidable|Visible
    Be sure to NOT put a space there! Doing so will result in SER viewing them as different arguments.
  • Removed ToFlags method

Fixes

  • Fixed damage option of DamageInfo method returning text instead of a number
  • Fixed the description in text arguments saying that text can be provided without quotes when not
  • Fixed Chance method having inverted chance of returning true
  • Fixed stop keyword crashing the server if used in specific circumstances
  • Fixed RespawnWaveInfo not being compatible with all wave references (@Tosoks67)
  • Fixed EXILED being required for SER to load (@Tosoks67)
  • Fixed some enums not being searchable using serhelp command
  • Fixed obsolete enum values being listed as available to use
  • Fixed events tring to create invalid variables
  • Fixed TPRoom method erroring when not providing optional arguments
  • Fixed incorrect tracking of running scripts resulting in "ghost scripts"
  • Fixed OnEvent flag not erroring when provided with an incorrect event name

Additions

  • Added default value of RemoteAdmin for lock reason argument in LockElevator method
  • Added more example scripts
  • Added attempt and on_error statements (@Tosoks67)
  • Added Overlapping method
  • Added FriendlyFire method

Improvements

  • Checking if script is attempting to use a yielding method inside {} brackets
  • Better checking of inputs in enum arguments
  • Printing of StaticTextValue and DynamicTextValue types in method help
  • If script has multiple errors, all of them will be provided in a list, instead of only the first one
  • Added hint to use serhelp <enum name> in enum argument
  • Better error message formatting for invalid tokens
  • Custom error for when an invalid method is used inside {} brackets

Version 0.14.1 - Experimental 3

06 Mar 18:55

Choose a tag to compare

Pre-release

Fixes

  • Fixed incorrect tracking of running scripts resulting in "ghost scripts"
  • Fixed OnEvent flag not erroring when provided with an incorrect event name

Improvements

  • Better error message formatting for invalid tokens
  • Custom error for when an invalid method is used inside {} brackets

Removed

  • ToFlags method

Enum flag rework

(not to be confused with script flags)

Instead of using ToFlags to include multiple enum values, you can now use the | (pipe) operator like so:
SetPrimitiveObjectProperties *toy _ _ Collidable|Visible


Changes from version 0.14.1 - experimental 2

Fixes

  • Fixed error when trying to get a friendly name of a value
  • Fixed error when some events tried to create invalid variables
  • Fixed TPRoom method erroring when not providing optional arguments

Added

  • FriendlyFire method

Changes from version 0.14.1 - experimental 1

Fixes

  • damage option of DamageInfo method returning text instead of a number
  • Description in text arguments saying that text can be provided without quotes when not
  • Chance method having inverted chance of returning true
  • stop keyword crashing the server if used in specific circumstances
  • RespawnWaveInfo not being compatible with all wave references (@Tosoks67)
  • EXILED being required for SER to load (@Tosoks67)
  • Some enums not being searchable using serhelp command
  • Obsolete enum values wont be listed as available to use

Additions

  • Default value of RemoteAdmin for lock reason argument in LockElevator method
  • More example scripts
  • attempt and on_error statements (@Tosoks67)
  • -- invalidRankMessage argument for CustomCommand flag
  • Overlapping method

Improvements

  • Checking if script is attempting to use a yielding method inside {} brackets
  • Better checking of inputs in enum arguments
  • Printing of StaticTextValue and DynamicTextValue types in method help
  • If script has multiple errors, all of them will be provided in a list, instead of only the first one
  • Added hint to use serhelp <enum name> in enum argument

Version 0.14.1 - Experimental 2

05 Mar 18:07

Choose a tag to compare

Pre-release

Fixes

  • Fixed error when trying to get a friendly name of a value
  • Fixed error when some events tried to create invalid variables
  • Fixed TPRoom method erroring when not providing optional arguments

Added

  • FriendlyFire method

Changes from version 0.14.1 - experimental 1

Fixes

  • damage option of DamageInfo method returning text instead of a number
  • Description in text arguments saying that text can be provided without quotes when not
  • Chance method having inverted chance of returning true
  • stop keyword crashing the server if used in specific circumstances
  • RespawnWaveInfo not being compatible with all wave references (@Tosoks67)
  • EXILED being required for SER to load (@Tosoks67)
  • Some enums not being searchable using serhelp command
  • Obsolete enum values wont be listed as available to use

Additions

  • Default value of RemoteAdmin for lock reason argument in LockElevator method
  • More example scripts
  • attempt and on_error statements (@Tosoks67)
  • -- invalidRankMessage argument for CustomCommand flag
  • Overlapping method

Improvements

  • Checking if script is attempting to use a yielding method inside {} brackets
  • Better checking of inputs in enum arguments
  • Printing of StaticTextValue and DynamicTextValue types in method help
  • If script has multiple errors, all of them will be provided in a list, instead of only the first one
  • Added hint to use serhelp <enum name> in enum argument

Version 0.14.1 - Experimental

28 Feb 16:57

Choose a tag to compare

Pre-release

Fixes

  • damage option of DamageInfo method returning text instead of a number
  • Description in text arguments saying that text can be provided without quotes when not
  • Chance method having inverted chance of returning true
  • stop keyword crashing the server if used in specific circumstances
  • RespawnWaveInfo not being compatible with all wave references (@Tosoks67)
  • EXILED being required for SER to load (@Tosoks67)
  • Some enums not being searchable using serhelp command
  • Obsolete enum values wont be listed as available to use

Additions

  • Default value of RemoteAdmin for lock reason argument in LockElevator method
  • More example scripts
  • attempt and on_error statements (@Tosoks67)
  • -- invalidRankMessage argument for CustomCommand flag
  • Overlapping method

Improvements

  • Checking if script is attempting to use a yielding method inside {} brackets
  • Better checking of inputs in enum arguments
  • Printing of StaticTextValue and DynamicTextValue types in method help
  • If script has multiple errors, all of them will be provided in a list, instead of only the first one
  • Added hint to use serhelp <enum name> in enum argument