CollabEmoteController
CollabEmoteController is a module script that manages collaborative emote sessions in Highrise Studio. It handles initiating collab emotes, joining sessions, position calculation, movement coordination, and provides events for session lifecycle. Supports friends-only sessions and custom position/movement handlers. This is a module script that can be required in your Lua code.
Properties
Event that fires when the local player arrives at the join position. Client only. Passes the initiator Player as argument.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.ArrivalDetected:Connect(function(initiator)
print("Arrived at join position")
end)
Public event fired when a movement destination is requested. Passes the target Vector3 position.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.MovementDestinationRequest:Connect(function(position)
print("Moving to: " .. tostring(position))
end)
Event that fires when the local player's movement to join position is interrupted. Client only. Passes the initiator Player as argument.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.MovementInterrupted:Connect(function(initiator)
print("Movement interrupted for session by: " .. tostring(initiator))
end)
Public event fired when a movement stop is requested.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.MovementStoppedRequest:Connect(function()
print("Movement stopped")
end)
Event that fires when a player joins a collab emote session. Client only.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.PlayerJoined:Connect(function(session)
print("Player joined session")
end)
Event that fires when a collab emote session ends. Client only.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.SessionEnded:Connect(function(session)
print("Session ended")
end)
Event that fires when a collab emote session starts. Client only.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.SessionStarted:Connect(function(session)
print("Session started by: " .. tostring(session.initiator))
end)
Methods
Enumeration of reasons a collab emote session can be cancelled.
- HostMoved (0): The host moved
- JoinerMoved (1): The joiner moved
- HostStopped (2): The host stopped the emote
- HostLeft (3): The host left the session
- EmoteEnded (4): The emote ended naturally
local CollabEmoteController = require("CollabEmoteController")
if reason == CollabEmoteController.CancelReason.HostMoved then
print("Host moved, session cancelled")
end
Returns
Enumeration of error types that can occur during collab emote operations.
- None (0): No error
- SystemDisabled (1): Collab emotes system is disabled
- PlayerAlreadyInSession (2): Player is already in a session
- PlayerNotFound (3): Player not found
- CannotJoinOwnEmote (4): Cannot join your own emote
- SessionNotFound (5): Session not found
- SessionFull (6): Session is full
- NoValidPath (7): No valid path to join position
- NotAllowedToEndSession (8): Not allowed to end this session
- InitiatorNotFound (9): Initiator not found
- JoinerNotFound (10): Joiner not found
- JoinerBlocked (11): Player is blocked by the initiator
- NoValidJoinPosition (12): Move to an area with more space
local CollabEmoteController = require("CollabEmoteController")
if errorType == CollabEmoteController.ErrorType.SessionFull then
print("Session is full")
end
Returns
Returns the distance scale multiplier for a player based on their humanoid-size item. Returns 1.0 if the player has no size item.
local CollabEmoteController = require("CollabEmoteController")
local scale = CollabEmoteController.GetDistanceScaleForPlayer(player)
print("Distance scale: " .. tostring(scale))
Parameters
player
Returns
Returns a human-readable error message for the given error type.
local CollabEmoteController = require("CollabEmoteController")
local msg = CollabEmoteController.GetErrorMessage(CollabEmoteController.ErrorType.SessionFull)
print(msg) -- "Session is full"
Parameters
errorType
Returns
Returns the normalized playback time (0-1) of an emote given its start time and duration. Returns nil if startTime is nil or duration is zero or negative.
local CollabEmoteController = require("CollabEmoteController")
local t = CollabEmoteController.GetNormalizedTime(startTime, duration)
if t then
print("Playback progress: " .. tostring(t))
end
Parameters
startTime
duration
Returns
Returns whether the collab emotes system is currently enabled.
local CollabEmoteController = require("CollabEmoteController")
if CollabEmoteController.IsEnabled() then
print("Collab emotes are enabled")
end
Returns
Enumeration of player movement states during a collab emote session.
- Moving (0): Player is moving toward the join position
- Arrived (1): Player has arrived at the join position
- Emoting (2): Player is playing the emote
local CollabEmoteController = require("CollabEmoteController")
if state == CollabEmoteController.PlayerMoveState.Arrived then
print("Player arrived")
end
Returns
Registers a custom movement handler that overrides the default NavMeshAgent-based movement. The handler receives the player, target position, and optionally the initiator, and returns true if handled.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.RegisterMoveHandler(function(player, position, initiator)
-- Custom movement logic
return true
end)
Parameters
handler
Returns
Registers a custom position handler that overrides the default join position calculation. The handler receives the initiator, emote data, position index, and optionally the joiner.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.RegisterPositionHandler(function(initiator, emoteData, positionIndex, joiner)
-- Custom position calculation
return Vector3.new(0, 0, 0)
end)
Parameters
handler
Returns
Registers a server-side facing validator that checks for valid join positions and rotates the character to face a direction with available space. The handler receives a Player and emote data, returns true if valid.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.RegisterServerFacingValidator(function(player, emoteData)
return true
end)
Parameters
handler
Returns
Registers a server-side position handler that calculates join positions using platform-specific logic (e.g., NavGrid).
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.RegisterServerPositionHandler(function(initiator, emoteData, positionIndex, joiner)
return Vector3.new(0, 0, 0)
end)
Parameters
handler
Returns
Requests a player to move to a target position. Uses the custom move handler if registered, otherwise falls back to NavMeshAgent-based movement. Returns true if the move was successfully initiated.
local CollabEmoteController = require("CollabEmoteController")
local success = CollabEmoteController.RequestMove(player, targetPosition, initiator)
if success then
print("Moving to position")
end
Stops any active collab emote on the local player.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.StopCollabEmoteOnLocalPlayer()
Returns
Unregisters the custom movement handler, reverting to default movement behavior.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.UnregisterMoveHandler()
Returns
Unregisters the custom position handler, reverting to default position calculation.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.UnregisterPositionHandler()
Returns
Unregisters the server-side facing validator.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.UnregisterServerFacingValidator()
Returns
Unregisters the server-side position handler.
local CollabEmoteController = require("CollabEmoteController")
CollabEmoteController.UnregisterServerPositionHandler()