Reference API Roblox

Engine API

Website

Related

Reference API Roblox

ChangeHistoryService

Must be used by plugins to communicate to Studio how to undo and redo the changes which they make to the experience.

This class is not creatable. Instances of this class cannot be created with Instance.new.
This class is a service. It is a singleton that may be acquired with GetService.
Tags: [NotCreatable, Service]

Member index 14

HistoryMember
583FinishRecording(identifier: string, operation: FinishRecordingOperation, finalOptions: Dictionary?): null
462GetCanRedo(): Tuple
462GetCanUndo(): Tuple
583IsRecordingInProgress(identifier: string?): bool
573Redo(): null
573ResetWaypoints(): null
573SetEnabled(state: bool): null
573SetWaypoint(name: string): null
583TryBeginRecording(name: string, displayName: string?): string?
573Undo(): null
658OnRecordingFinished(name: string, displayName: string?, identifier: string?, operation: FinishRecordingOperation, finalOptions: Dictionary?)
583OnRecordingStarted(name: string, displayName: string?)
462OnRedo(waypoint: string)
462OnUndo(waypoint: string)
inherited from Instance
731Archivable: bool
731Capabilities: SecurityCapabilities
731IsInSandbox: bool
731Name: string
731Parent: Instance
731PredictionMode: PredictionMode
731Sandboxed: bool
731UniqueId: UniqueId
576AddTag(tag: string): null
573ClearAllChildren(): null
462Clone(): Instance
573Destroy(): null
486FindFirstAncestor(name: string): Instance
486FindFirstAncestorOfClass(className: string): Instance
486FindFirstAncestorWhichIsA(className: string): Instance
486FindFirstChild(name: string, recursive: bool = false): Instance
486FindFirstChildOfClass(className: string): Instance
486FindFirstChildWhichIsA(className: string, recursive: bool = false): Instance
486FindFirstDescendant(name: string): Instance
563GetActor(): Actor
486GetAttribute(attribute: string): Variant
462GetAttributeChangedSignal(attribute: string): RBXScriptSignal
631GetAttributes(): Dictionary
648GetChildren(): Instances
462GetDebugId(scopeLength: int = 4): string
707GetDescendants(): Instances
486GetFullName(): string
706GetStyled(name: string, selector: string?): Variant
657GetStyledPropertyChangedSignal(property: string): RBXScriptSignal
576GetTags(): Array
576HasTag(tag: string): bool
486IsAncestorOf(descendant: Instance): bool
486IsDescendantOf(ancestor: Instance): bool
664IsPropertyModified(property: string): bool
698QueryDescendants(selector: string): Instances
573Remove(): null
576RemoveTag(tag: string): null
664ResetPropertyToDefault(property: string): null
573SetAttribute(attribute: string, value: Variant): null
462WaitForChild(childName: string, timeOut: double): Instance
731children(): Instances
731clone(): Instance
731destroy(): null
731findFirstChild(name: string, recursive: bool = false): Instance
731getChildren(): Instances
731isDescendantOf(ancestor: Instance): bool
731remove(): null
462AncestryChanged(child: Instance, parent: Instance)
462AttributeChanged(attribute: string)
462ChildAdded(child: Instance)
462ChildRemoved(child: Instance)
462DescendantAdded(descendant: Instance)
462DescendantRemoving(descendant: Instance)
500Destroying()
657StyledPropertiesChanged()
731childAdded(child: Instance)
inherited from Object
731ClassName: string
731className: string
647GetPropertyChangedSignal(property: string): RBXScriptSignal
647IsA(className: string): bool
731isA(className: string): bool
647Changed(property: string)

Description

Plugin developers must use ChangeHistoryService to tell Studio how to undo and redo changes that their plugins make to experiences by recording. Before making changes, a plugin calls ChangeHistoryService:TryBeginRecording(), remembering the identifier it assigns, then after making changes, the Plugin calls ChangeHistoryService:FinishRecording() to complete the recording.

Plugins may also programmatically invoke an undo or redo through ChangeHistoryService:Undo() or ChangeHistoryService:Redo().

ChangeHistoryService is not enabled at runtime, so calling its methods in a running experience has no effect.

History 44

Members 14

FinishRecording

Parameters (3)
identifierstring
operationFinishRecordingOperation
finalOptionsDictionary?
Returns (1)
null

Completes a recording that was started with TryBeginRecording(). Pass the identifier returned by that call along with an FinishRecordingOperation describing what to do with the recorded changes:

When the recording finishes, this method fires OnRecordingFinished, forwarding the finalOptions table. It raises an error if the calling plugin has no recording in progress, or if operation is not FinishRecordingOperation.Cancel and identifier does not match the active recording. It has no effect when the service is disabled or while an undo or redo is in progress.

History 1

GetCanRedo

Parameters (0)
No parameters.
Returns (1)
Tuple

Reports whether Redo() currently has an action available to replay. It returns a boolean that is true when a redoable waypoint exists ahead of the current position in the undo/redo history; when that boolean is true, it also returns the name of the waypoint that the next redo would replay.

The boolean is false, with no name returned, when the redo stack is empty because the newest waypoint is already the current one, or when the service is disabled (which is always the case at runtime).

History 4

GetCanUndo

Parameters (0)
No parameters.
Returns (1)
Tuple

Reports whether Undo() currently has an action available to revert. It returns a boolean that is true when an undoable waypoint exists at the current position in the undo/redo history; when that boolean is true, it also returns the name of the waypoint that the next undo would revert.

The boolean is false, with no name returned, when the undo stack is empty because the position is already at the base waypoint, or when the service is disabled (which is always the case at runtime).

History 4

IsRecordingInProgress

Parameters (1)
identifierstring?
Returns (1)
bool

Reports whether the calling plugin has a recording in progress that was started with TryBeginRecording().

When called without an identifier, it returns true if any recording is active for the plugin. When an identifier is supplied, it returns true only if the active recording's identifier matches that value. It returns false when the service is disabled or when the plugin has no active recording.

History 1

OnRecordingFinished

Parameters (5)
namestring
displayNamestring?
identifierstring?
operationFinishRecordingOperation
finalOptionsDictionary?

Fires when a recording started with TryBeginRecording() is completed through FinishRecording(). The operation argument reports how the recording was finished (Commit, Cancel, or Append), and finalOptions is the optional table that was passed to FinishRecording().

History 2

OnRecordingStarted

Parameters (2)
namestring
displayNamestring?

Fires when a plugin begins a recording with TryBeginRecording(), carrying the same name and displayName values that were passed to that call.

History 1

OnRedo

Parameters (1)
waypointstring

Fires immediately after Redo() replays a waypoint, whether the redo was triggered by the user through Studio or invoked programmatically. The waypoint argument is the name of the action that was redone, matching the name that was recorded for that waypoint.

History 2

OnUndo

Parameters (1)
waypointstring

Fires immediately after Undo() reverts a waypoint, whether the undo was triggered by the user through Studio or invoked programmatically. The waypoint argument is the name of the action that was undone, matching the name that was recorded for that waypoint.

History 2

Redo

Parameters (0)
No parameters.
Returns (1)
null

Replays the waypoint immediately ahead of the current position in the undo/redo history, redoing the action that a matching Undo() had reverted, and advances the redo pointer forward by one waypoint. After the waypoint is replayed, it fires OnRedo with the name of the redone waypoint.

This method raises an error if a play is already in progress, if the service is disabled (which is always the case at runtime), or if there is nothing left to redo. Call GetCanRedo() first to confirm a redo is available.

History 5

  • 573 Change ReturnType of Redo from void to null
  • 462 Change ThreadSafety of Redo from to Unsafe
  • 151 Change Security of Redo from security1 to PluginSecurity
  • 150 Change Security of Redo from LocalUserSecurity to security1
  • 47 Add Redo

ResetWaypoints

Parameters (0)
No parameters.
Returns (1)
null

Records the current state as a waypoint named base and then merges every existing waypoint into that single waypoint, leaving no actions to undo or redo. Use this to establish a clean starting point so that later Undo() calls cannot revert past the current state.

This method has no effect when the service is disabled (which is always the case at runtime).

History 5

SetEnabled

Parameters (1)
statebool
Returns (1)
null

Sets whether or not the ChangeHistoryService is enabled. When set to false, the undo/redo list is cleared, and does not repopulate. When set to true again, the original list is not restored, but further operations append to the list once more

History 5

SetWaypoint

Parameters (1)
namestring
Returns (1)
null

This method will be deprecated soon in favor of TryBeginRecording().

ChangeHistoryService tracks plugin history as a stream of property changes. SetWaypoint() creates a cut in that stream of property changes so that the undo and redo actions know where to stop.

By convention, user-invoked actions in Studio must call SetWaypoint() after completing their set of changes to the experience. Calling it before a set of changes may clean up another misbehaving plugin which failed to set a waypoint, but it's a poor reason to justify such usage in your own plugin.

History 5

TryBeginRecording

Parameters (2)
namestring
displayNamestring?
Returns (1)
string?

This method begins a recording to track changes to the data model. You must call it prior to making changes to avoid future warnings or errors.

When the recording is completed, you call FinishRecording() with the returned recording identifier to complete the recording and update the undo/redo stack.

This method will return nil if it fails to begin a recording. Recordings fail if the plugin already has a recording in progress, or if the user is in a solo playtest.

You may use IsRecordingInProgress() to check the recording status of the plugin.

History 1

Undo

Parameters (0)
No parameters.
Returns (1)
null

Unplays the waypoint at the current position in the undo/redo history, reverting the most recent recorded action, and steps the undo pointer back by one waypoint. After the waypoint is reverted, it fires OnUndo with the name of the undone waypoint.

This method raises an error if a play is already in progress, if the service is disabled (which is always the case at runtime), or if there is nothing left to undo. Call GetCanUndo() first to confirm an undo is available.

History 5

  • 573 Change ReturnType of Undo from void to null
  • 462 Change ThreadSafety of Undo from to Unsafe
  • 151 Change Security of Undo from security1 to PluginSecurity
  • 150 Change Security of Undo from LocalUserSecurity to security1
  • 47 Add Undo

Settings