Releases: ScriptedEvents/ScriptedEventsReloaded
Version 1.0.0 - Experimental 5
🚀 SER 1.0 update (experimental 5)
This is probably the last experimental update before version 1.0 is released.
Below, you will find the changelog that will most likely be used for the official 1.0 update.
This update represents a complete paradigm shift for the SER language. The flat, unstructured method architecture of v0.15.1 has been replaced with dot-notation namespacing, direct object manipulation, and dedicated syntax rules.
Caution
If you are upgrading from v0.15.1, your scripts will require rewriting.
🎉 Community Shoutout
Luke & Jraylor - major SER sponsors! The 1.0 update wouldn't be possible without their support!
@RetroReul - newest SER contributor! Retro is behind some of the new methods and properties, glad to have you on our team! :)
1. Syntax & Operators Overhaul
The Arrow Operator (->) & Native Properties
The language now automatically hooks into underlying game objects, exposing their properties natively. You can drill through multiple objects in a single line, entirely replacing the old Info wrapper methods (like DamageInfo, ItemInfo, DoorInfo).
- Direct Access:
$name = @plr -> namecompletely replaces$name = {@plr name}. - Native Property Modification: You can now directly alter the game state using assignment expressions! If a property is settable, just assign it:
*generator -> isOpen = true. - Chaining: Drill down through data seamlessly:
$nameLengthOdd = @sender -> name -> length -> isOdd.
Mathematical Expressions
The "bracket tax" on mathematical operations has been eliminated. Math no longer requires wrapping in parentheses to be evaluated.
- Old:
$five = (2 + 3) - New:
$five = 2 + 3
2. Scope & Block Management
Inline Block Parameters (with)
Looping and function definitions now use the with keyword to attach parameters or iterators directly, cleaning up visual clutter.
over @all with @plr
Print {@plr -> name}
end
Ephemeral Variables (ephm)
Introduced the ephm keyword to define variables that automatically delete themselves the moment their current block (like a func or if statement) finishes executing, preventing memory leaks in complex scripts.
3. Native Keywords vs. Methods
Core logic and memory management have been moved out of the method parser and into the engine's low-level keywords for better performance.
- Timing Flow:
Wait 5sis now the native keywordwait 5s. - Conditional Flow:
WaitUntil ...is now the native keywordwait_until .... - Memory Management: The old
PopVariable $varmethod has been replaced by the nativedelete $varkeyword. - Probability Flow: Added the native
chancestatement block to streamline random probability checks without needing math blocks.
4. The Great API Namespacing (Method Restructure)
Version 1.0 abandons the flat, cluttered global method list. Hundreds of methods were renamed and grouped into logical namespaces using dot-notation, while redundant methods were purged entirely.
- Audio System (
Audio.*&Speaker.*):LoadAudiois nowAudio.Load.CreateGlobalSpeakeris nowSpeaker.CreateGlobal. - Admin Toys (
Toy.*):CreateToyis nowToy.Create.TPToyPosis nowToy.TPPosition. - Collections (
Coll.*):CollectionInsertis nowColl.Insert.EmptyCollectionis nowColl.Create. - Discord (
Discord.*&Embed.*):DiscordMessageis nowDiscord.CreateMessage.DiscordEmbedis nowEmbed.Create. - Web & Data (
HTTP.*,JSON.*,DB.*):HTTPGetis nowHTTP.Get.AppendDBis nowDB.Add. - Text (
Text.*):PadTextis nowText.Pad.SubTextis nowText.Slice.
5. New Core Frameworks
Brand new structural features were added to extend what SER scripts are capable of building.
- Dictionaries (
Dict.*): A full C#-style key-value mapping system natively implemented (Dict.Add,Dict.Contains,Dict.Create,Dict.Get,Dict.Remove). - Custom Roles (
CRole.*): Base-game custom role handling without multi-file setups. IncludesCRole.Register,CRole.SetCallbacks, and native framework integrations likeCRole.CreateBracketSpawnSystem. - Configurations (
Config.*): Scripts can now generate and read personalized configuration options natively (Config.GetOption,Config.Read). - Unified Map Queries: Added a singular, high-performance
GetFromMapmethod that queries any object layout or structural element in the active round instance.
6. Player Control & Interactions
- Native Base-Game Effects: Full status-effect bindings without requiring external EXILED plugin hooks (
GiveEffect,ClearEffect). - Stamina & Actions: Added direct control over stamina (
Staminamethod) , jump height (Jump) , and combat visuals (ShowHitMarker). - Targeting & Rulesets: Added
AddDamageRule/RemoveDamageRuleandAddTeslaIgnoreRule/RemoveTeslaIgnoreRule. - Network / IP Data: Integrated
GetIPInfoandGetIPInfoWithKeyfor proxy and connection validation directly inside scripts.
7. Compiler Safety & Tooling
- Strict Compile-Time Linting: Invalid expressions inside text strings are now caught immediately at compile time. For example, if you write
"my name is {get @x name}", the compiler will throw an error immediately, enforcing the correctv1.0syntax:"my name is {@x -> name}". - Nested Bracket Engine Fix: The underlying text tokenizer now utilizes balancing groups, safely compiling deeply nested curly brackets (e.g.,
"{Round {*evDamageHandler -> damage}}") without breaking string parsing. - SER Visual Editor: Launched a standalone web application (available on GitHub) providing a visual node-based workspace to construct scripts without layout/syntax text editing issues.
🌟 Real-World Examples: v1.0 Syntax in Action
To give you a vague idea of how clean and readable SER scripting has become, here are a few snippets utilizing the new v1.0.0 syntax!
Example 1: Ephemeral Variables & Namespaces (Discord Webhooks)
Using the new ephm keyword to automatically clean up variables, and the new dot-notation namespaces for Discord embeds.
func *GetDiscordMessage
# variables using 'ephm' are ephemeral and will be deleted after the function ends
ephm $title = "{ServerInfo name} status"
ephm $content = "There are {AmountOf @all} players on the server:{Show @all name "<br> -" true}"
return Discord.CreateMessage _ $title _ {Embed.Create $title $content}
end
# ... later in the script ...
*msg = run *GetDiscordMessage
Discord.EditMessage $url $messageId *msg
Example 2: The chance block & Arrow Syntax (Chaos Coin)
A clean implementation of random probabilities using the new chance block, and direct object evaluation using the -> operator.
# 50% chance to lose the coin
chance 50%
Hint @evPlayer 3s "<color=#ff5555>Your coin has turned into dust..."
AdvDestroyItem {@evPlayer -> heldItemRef}
end
# Check if the player's role changed during a countdown
if {@evPlayer -> role} isnt $initRole
ClearCountdown @evPlayer
SetPlayerData @evPlayer "coin locked" false
stop
end
Example 3: Native Custom Roles Framework
Registering custom roles natively in one file using the new CRole.* framework.
!-- OnEvent WaitingForPlayers
*spawnSystem = CRole.CreateChanceSpawnSystem ClassD 20%
CRole.Register janitor "LCZ Janitor" ClassD *spawnSystem
!-- OnCRole spawned
-- forRoles janitor
TPRoom @evPlayer LczToilets
GiveItem @evPlayer KeycardJanitor
Version 1.0.0 - Experimental 4
Renamed:
Godmode->SetGodModeLockLobby->SetLobbyLockLockRound->SetRoundLock- various
rotationandpositionoptions torotandpos SetInfoArea->SetShownPlayerInfo-- requiredVars->-- requirefor!-- OnEventflagLightsOut->DisableLights- all audio methods (like
Audio.Method) - all toy methods (like
Toy.Method) - all Callvote methods (like
Vote.Method) - all custom role methods (like
CRole.Method) - all database methods (like
DB.Method) - all discord methods (like
Discord.Method/Embed.Method) - all HTTP methods (like
HTTP.Method) .Emptysuffix ->.Createsuffix
Removed:
ParsePlayersmethod- keyword examples from example scripts
RemoveCRolemethod
Added:
AddDamageRulemethodRemoveDamageRulemethodToPlayerVarmethodCreateSpeakerOnPositionmethodStopAudiomethod- EXILED version of SER
isTransmittingplayer propertyCRole.CreateChanceSpawnmethodhasRemoteAdminAccessplayer property
Fixed:
- elevator arguments not supporting elevator references
- normal statements like
ifnot wipingephmvariables
Changes:
- Shortened duration value properties (e.g. from
totalMillisecondstototalMs) - Made
playersarguments accept parsing byRoleTypeIdandTeamenums, while removing*joker - Reworked "rule" methods to allow for constant checking of provided players (allowing for hands free updating when e.g. someone changes roles)
- Changed waiting syntax for
AnimatedBroadcastmethod
Improved:
- assembly handling for references and properties
- enum resolving in method arguments
- "Did you mean ?" messages when invalid input is provided
- default value system, where some arguments can now force user to explicitly skip for readability
- example scripts
Changes added in v1.0.0 - Experimental 3
⚠️ Important ⚠️
This update changed a lot of method names and removed ones that were not needed due to the new arrow syntax.
Example:
NocliptoSetNoclipRoundLocktoLockRoundEmptyCollectiontoColl.EmptySubtexttoText.SliceLimitPlayerstoTake- removed
ValidReffor*ref -> isValid/*ref -> isInvalid - removed
TextLengthfor$text -> length
and much, much more...
Added
Custom Roles
Added an entire system for base SER custom role handling, e.g.:
SetCRoleRegisterCRoleProceduralSpawnSystemBracketSpawnSystem!-- OnCustomRoleflag
and more.
SER Visual Editor
You can now write SER scripts using a simple web app!
Just download it from the GitHub release and write your script.
This is very much a work-in-progress kind of app, but should work for basic script writing.
Functions as callbacks
The event handling and custom role systems can now be used without flags.
This allows for defining key event-related behaviors in a single file.
func OnSpawned with @plr *role
TPRoom @plr LczToilets
Broadcast @plr 5s "You are a {*role -> displayName}"
end
RegisterCRole janitor "Janitor" ClassD
SetCRoleCallbacks janitor OnSpawned
Wave management methods
WaveInfluenceWaveRespawnTimeWaveRespawnTokens
Variable related keywords
Added delete keyword to replace PopVariable method:
PopVariable local $someVariable # before
delete $someVariable # now
Added ephm keyword for defining variables that are to be removed after a statement ends.
func *GetDiscordMessage
# variables using 'ephm' are ephemeral and will be deleted after the function ends
ephm $title = "{ServerInfo name} status"
ephm $content = "There are {AmountOf @all} players on the server:{Show @all name "<br> -" true}"
return DiscordMessage _ $title _ {DiscordEmbed $title $content}
end
Here, $title and $content will be removed as soon as the *GetDiscordMessage function ends executing.
Dictionaries
Added methods for dictionary handling. This allows you to create, modify and use dictionaries as you would in a higher level language like C#:
Dict.AddDict.ContainsDict.EmptyDict.GetDict.Remove
Smaller additions
-- requiredVarsargument for!-- OnEventflagRoundNumbermethodRestartRoundmethod- some other methods i forgot about
Improved
- text handling in arguments, removing unintended behaviors
- AnimatedBroadcast system
- inefficient code for method arguments
- SER value comparison system
- enum flags fetching from references
Removed
- EXILED effect handling methods
Changes added in v1.0.0 - Experimental 2
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 permissionAnimatedBroadcast: Sends an animated broadcast to all playersPlayerAnimatedBroadcast: 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___ByTeslamethods featuring Players, Roles and TeamsResetIgnored___ByTeslamethods featuring Players, Roles and Teams
Other Additions:
Mute&ResetMutemethodsSetRadioRangemethodGetGenerators,GetCameras,GetDoors,GetPickups,GetRagdolls,GetRoomLights,GetRooms&GetTeslasmethods
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%, d...
Version 1.0.0 - Experimental 3
⚠️ Important ⚠️
This update changed a lot of method names and removed ones that were not needed due to the new arrow syntax.
Example:
NocliptoSetNoclipRoundLocktoLockRoundEmptyCollectiontoColl.EmptySubtexttoText.SliceLimitPlayerstoTake- removed
ValidReffor*ref -> isValid/*ref -> isInvalid - removed
TextLengthfor$text -> length
and much, much more...
Added
Custom Roles
Added an entire system for base SER custom role handling, e.g.:
SetCRoleRegisterCRoleProceduralSpawnSystemBracketSpawnSystem!-- OnCustomRoleflag
and more.
SER Visual Editor
You can now write SER scripts using a simple web app!
Just download it from the GitHub release and write your script.
This is very much a work-in-progress kind of app, but should work for basic script writing.
Functions as callbacks
The event handling and custom role systems can now be used without flags.
This allows for defining key event-related behaviors in a single file.
func OnSpawned with @plr *role
TPRoom @plr LczToilets
Broadcast @plr 5s "You are a {*role -> displayName}"
end
RegisterCRole janitor "Janitor" ClassD
SetCRoleCallbacks janitor OnSpawned
Wave management methods
WaveInfluenceWaveRespawnTimeWaveRespawnTokens
Variable related keywords
Added delete keyword to replace PopVariable method:
PopVariable local $someVariable # before
delete $someVariable # now
Added ephm keyword for defining variables that are to be removed after a statement ends.
func *GetDiscordMessage
# variables using 'ephm' are ephemeral and will be deleted after the function ends
ephm $title = "{ServerInfo name} status"
ephm $content = "There are {AmountOf @all} players on the server:{Show @all name "<br> -" true}"
return DiscordMessage _ $title _ {DiscordEmbed $title $content}
end
Here, $title and $content will be removed as soon as the *GetDiscordMessage function ends executing.
Dictionaries
Added methods for dictionary handling. This allows you to create, modify and use dictionaries as you would in a higher level language like C#:
Dict.AddDict.ContainsDict.EmptyDict.GetDict.Remove
Smaller additions
-- requiredVarsargument for!-- OnEventflagRoundNumbermethodRestartRoundmethod- some other methods i forgot about
Improved
- text handling in arguments, removing unintended behaviors
- AnimatedBroadcast system
- inefficient code for method arguments
- SER value comparison system
- enum flags fetching from references
Removed
- EXILED effect handling methods
Changes added in v1.0.0 - Experimental 2
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 permissionAnimatedBroadcast: Sends an animated broadcast to all playersPlayerAnimatedBroadcast: 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___ByTeslamethods featuring Players, Roles and TeamsResetIgnored___ByTeslamethods featuring Players, Roles and Teams
Other Additions:
Mute&ResetMutemethodsSetRadioRangemethodGetGenerators,GetCameras,GetDoors,GetPickups,GetRagdolls,GetRoomLights,GetRooms&GetTeslasmethods
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 chatisSpectatable- Whether player can be spectatedisJumping- Whether player is currently jumpingisGrounded- Whether player is on the groundmovementState- Current movement statelifeId- Unique life identifierunitId- 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 l...
Version 1.0.0 - Experimental 2
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 permissionAnimatedBroadcast: Sends an animated broadcast to all playersPlayerAnimatedBroadcast: 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___ByTeslamethods featuring Players, Roles and TeamsResetIgnored___ByTeslamethods featuring Players, Roles and Teams
Other Additions:
Mute&ResetMutemethodsSetRadioRangemethodGetGenerators,GetCameras,GetDoors,GetPickups,GetRagdolls,GetRoomLights,GetRooms&GetTeslasmethods
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 chatisSpectatable- Whether player can be spectatedisJumping- Whether player is currently jumpingisGrounded- Whether player is on the groundmovementState- Current movement statelifeId- Unique life identifierunitId- 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
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___ByTeslamethods featuring Players, Roles and TeamsResetIgnored___ByTeslamethods featuring Players, Roles and Teams
Other Additions:
Mute&ResetMutemethodsSetRadioRangemethodGetGenerators,GetCameras,GetDoors,GetPickups,GetRagdolls,GetRoomLights,GetRooms&GetTeslasmethods
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 chatisSpectatable- Whether player can be spectatedisJumping- Whether player is currently jumpingisGrounded- Whether player is on the groundmovementState- Current movement statelifeId- Unique life identifierunitId- 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
Fixes to the Experimental 2 version
- Properly implemented all of the player properties
- Made
roleColorplayer property return acolor valueinstead oftext 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 chatisSpectatable- Whether player can be spectatedisJumping- Whether player is currently jumpingisGrounded- Whether player is on the groundmovementState- Current movement statelifeId- Unique life identifierunitId- 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
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 chatisSpectatable- Whether player can be spectatedisJumping- Whether player is currently jumpingisGrounded- Whether player is on the groundmovementState- Current movement statelifeId- Unique life identifierunitId- 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
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
Fixes
- Fixed
returnandbreakkeywords not terminating functions until a yield - Fixed Exiled being requried to load the plugin (again)
- Fixed
SetToyRotationandSetToyScaleoperating on Exiled toys instead of LabApi toys - FIxed
addDurationIfActiveargument inGiveEffectMethodmethod 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_errorstatement (@Tosoks67)attempt ... on_error # 👇 👇 with $message $type $stackTrace ... end - Added
colorvalue type (part of literal values)# this creates a red color value $color = ff0000 - Added
SetSpectatabilitymethod - Added
RemoveDBKeymethod (@Tosoks67)
Improvements
- Improved the
serhelp methodscommand to list methods that can be added by frameworks, even if a given framework is not present
Version 0.15
CustomCommand flag additions
*commandlocal variableResetGlobalCommandCooldownmethodResetPlayerCommandCooldownmethod-- invalidRankMessageargument-- neededPermissionargument-- noPermissionMessageargument-- onCooldownMessageargument-- globalCooldownargument-- onGlobalCooldownMessageargument- Optional arguments for
-- argumentsoption
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 usingToFlagsmethod, use theVal1|Val2|Val3system 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
ToFlagsmethod
Fixes
- Fixed
damageoption ofDamageInfomethod returning text instead of a number - Fixed the description in text arguments saying that text can be provided without quotes when not
- Fixed
Chancemethod having inverted chance of returningtrue - Fixed
stopkeyword crashing the server if used in specific circumstances - Fixed
RespawnWaveInfonot being compatible with all wave references (@Tosoks67) - Fixed EXILED being required for SER to load (@Tosoks67)
- Fixed some enums not being searchable using
serhelpcommand - Fixed obsolete enum values being listed as available to use
- Fixed events tring to create invalid variables
- Fixed
TPRoommethod erroring when not providing optional arguments - Fixed incorrect tracking of running scripts resulting in "ghost scripts"
- Fixed
OnEventflag not erroring when provided with an incorrect event name
Additions
- Added default value of
RemoteAdminforlock reasonargument inLockElevatormethod - Added more example scripts
- Added
attemptandon_errorstatements (@Tosoks67) - Added
Overlappingmethod - Added
FriendlyFiremethod
Improvements
- Checking if script is attempting to use a yielding method inside
{}brackets - Better checking of inputs in enum arguments
- Printing of
StaticTextValueandDynamicTextValuetypes 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