ScriptableObjectClass

A script class that doesn't represent any particular game object.

The scriptable object is automatically synchronized to all clients.

Can receive events sent with sm.event.sendToScriptableObject.

Fields

Name Type Description
scriptableObject ScriptableObject The ScriptableObject belonging to this class instance.
network Network A Network object that can be used to send messages between client and server.
storage Storage (Server side only, if isSaveObject is enabled) A Storage object that can be used to store data for the next time loading this object after being unloaded.
data any Data from the "data" json element.
params any Parameter sent to sm.scriptableObject.createScriptableObject.

Constants

Name Type Description
isSaveObject boolean Enables or disables saving of this scriptable object. (Defaults to false)

isSaveObject

Value type: boolean

Enables or disables saving of this scriptable object. (Defaults to false)

If enabled, the ScriptableObject will be recreated when loading a game. Otherwise, the ScriptableObject is considered a temporary object.

Note: If disabled, self.storage can not be used.

Server + Client

onCreate

ScriptableObjectClass:server_onCreate(  )
ScriptableObjectClass:client_onCreate(  )

Called when the scripted object is created. This occurs when a new object is built, spawned, or loaded from the save file.

Parameters:

Name Type Description
self table The class instance.

onDestroy

ScriptableObjectClass:server_onDestroy(  )
ScriptableObjectClass:client_onDestroy(  )

Called when the scripted object is destroyed.

Parameters:

Name Type Description
self table The class instance.

onRefresh

ScriptableObjectClass:server_onRefresh(  )
ScriptableObjectClass:client_onRefresh(  )

Called if the Lua script attached to the object is modified while the game is running.

Note: This event requires Scrap Mechanic to be running with the '-dev' flag. This will allow scripts to automatically refresh upon changes.

Parameters:

Name Type Description
self table The class instance.

onFixedUpdate

ScriptableObjectClass:server_onFixedUpdate( timeStep )
ScriptableObjectClass:client_onFixedUpdate( timeStep )

Called every game tick – 40 ticks a second. If the frame rate is lower than 40 fps, this event may be called twice.

During a fixed update, physics and logic between interactables are updated.

Parameters:

Name Type Description
self table The class instance.
timeStep number The time period of a tick. (Is always 0.025, a 1/40th of a second.)

Server-only

onReceiveUpdate

ScriptableObjectClass:server_onReceiveUpdate(  )

Called occasionally to indicate that some time has passed.

For performance reasons; it recommended to use this instead of server_onFixedUpdate for updates that do not need to happen frequently.

Use sm.game.getCurrentTick to calculate the time.

Parameters:

Name Type Description
self table The class instance.

onUnload

ScriptableObjectClass:server_onUnload(  )

Called when the ScriptableObject is unloaded when exiting the game.

Parameters:

Name Type Description
self table The class instance.

Client-only

onUpdate

ScriptableObjectClass:client_onUpdate( deltaTime )

Called every frame.

During a frame update, graphics, animations and effects are updated.

Warning: Because of how frequent this event is called, the game's frame rate is greatly affected by the amount of code executed here. For any non-graphics related code, consider using client_onFixedUpdate instead. If the event is not in use, consider removing it from the script. (Event callbacks that are not implemented will not be called.)

Parameters:

Name Type Description
self table The class instance.
deltaTime number Delta time since the last frame.

onClientDataUpdate

ScriptableObjectClass:client_onClientDataUpdate( data, channel )

Called when the client receives new client data updates from the server set with Network.setClientData.

Data set in this way is persistent and the latest data will automatically be sent to new clients.

The data will arrive after client_onCreate during the same tick.

Channel 1 will be received before channel 2 if both are updated.

Parameters:

Name Type Description
self table The class instance.
data any Any lua object set with Network.setClientData
channel integer Client data channel, 1 or 2. (default: 1)

onLocalPlayerChangedWorld

ScriptableObjectClass:client_onLocalPlayerChangedWorld( world )

Called when the client player changes world.

Parameters:

Name Type Description
self table The class instance.
world World The entered world.