Leader
Based on game build 722832 | Last updated: 2026-04-18
Overview
Leader manages follower relationships for entities that can lead other creatures (such as players leading pigs or rockies). It tracks both regular followers and item-based followers, handles combat target sharing among followers, and manages follower lifecycle events. This component works closely with the follower component to establish bidirectional leader-follower relationships.
Usage example
local inst = CreateEntity()
inst:AddComponent("leader")
inst:AddComponent("combat")
-- Add a follower
local pig = SpawnPrefab("pig")
pig:AddComponent("follower")
inst.components.leader:AddFollower(pig)
-- Check follower count
local count = inst.components.leader:GetNumFollowers()
-- Force leash followers
inst.components.leader:SetForceLeash()
Dependencies & tags
External dependencies:
util/sourcemodifierlist-- used for roll call source tracking viaSourceModifierList
Components used:
combat-- accessed on followers to suggest targets viaSuggestTarget()follower-- accessed on followers to set leader and checkcanaccepttarget,keepdeadleaderinventory-- checked for equipped items that may be petspetleash-- checked to identify if a target is a pet being dismissedleaderrollcall-- checked to determine if roll calling is enabledminigame_participator-- checked to exclude minigame participants from target sharing
Tags:
player-- checked to determine PVP eligibility and achievement trackingpig-- counted for achievement trackingrocky-- counted for achievement tracking
Properties
| Property | Type | Default Value | Description |
|---|---|---|---|
followers | table | {} | Table mapping follower entities to true. |
numfollowers | number | 0 | Count of regular followers. |
itemfollowers | table | {} | Table for virtual followers that treat this leader as their leader for interaction logic. |
numitemfollowers | number | 0 | Count of item-based followers. |
forceleash | boolean | nil | When true, forces followers to leash to this leader. |
roll_call_sources | SourceModifierList | nil | Tracks roll call modifier sources. |
onfolloweradded | function | nil | Callback fired when a follower is added. |
onremovefollower | function | nil | Callback fired when a follower is removed. |
Main functions
OnRemoveFromEntity()
- Description: Cleans up event listeners and removes all followers when the component is removed from the entity. Resets roll call sources if present.
- Parameters: None
- Returns: None
- Error states: None
SetForceLeash()
- Description: Enables forced leashing for all followers of this leader.
- Parameters: None
- Returns: None
- Error states: None
IsFollower(guy)
- Description: Checks if an entity is currently following this leader (either as regular or item follower).
- Parameters:
guy-- entity instance to check - Returns:
trueif the entity is a follower,falseotherwise - Error states: None
OnAttacked(attacker)
- Description: Called when the leader is attacked. Suggests the attacker as a combat target to all eligible followers. Excludes followers, self, and minigame participants unless PVP is enabled.
- Parameters:
attacker-- entity that attacked the leader - Returns: None
- Error states: None
GetNumFollowers()
- Description: Returns the total count of regular followers. Preferred over
CountFollowers(nil). - Parameters: None
- Returns: Number of followers
- Error states: None
CountFollowers(tag)
- Description: Counts followers optionally filtered by tag. Returns total count if tag is nil.
- Parameters:
tag-- string tag to filter by, ornilfor all followers - Returns: Number of followers matching the tag
- Error states: None
GetFollowersByTag(tag)
- Description: Returns a table of all followers matching a specific tag.
- Parameters:
tag-- string tag to filter by - Returns: Table of follower entities, empty table if tag is nil or no matches
- Error states: None
SetIsRollCaller(source, boolval)
- Description: Sets whether a source is a roll caller. Initializes
roll_call_sourcesif not present. - Parameters:
source-- identifier for the roll call sourceboolval-- boolean value to set
- Returns: None
- Error states: None
IsRollCalling()
- Description: Checks if this leader is currently roll calling. Checks
leaderrollcallcomponent first, then roll call sources. - Parameters: None
- Returns:
trueif roll calling is active,falseotherwise - Error states: None
IsTargetedByFollowers(target)
- Description: Checks if any follower is currently targeting a specific entity.
- Parameters:
target-- entity to check for as a combat target - Returns:
trueif any follower targets this entity,falseotherwise - Error states: None
IsTargetPet(target)
- Description: Determines if a target is a pet that should be dismissed (not shared as combat target). Checks
petleashcomponent on leader and equipped items. - Parameters:
target-- entity to check - Returns:
trueif target is a pet being dismissed,falseotherwise - Error states: None
OnNewTarget(target)
- Description: Called when the leader acquires a new combat target. Shares the target with all eligible followers unless the target is a pet being dismissed. Excludes minigame participants unless PVP is enabled.
- Parameters:
target-- new combat target entity ornil - Returns: None
- Error states: None
RemoveFollower(follower, invalid)
- Description: Removes a follower from the leader's follower list. Fires
stopfollowingevent and clears the follower's leader unless marked invalid. - Parameters:
follower-- entity to remove as followerinvalid-- boolean, iftrueskips cleanup events on the follower
- Returns: None
- Error states: None
AddFollower(follower)
- Description: Adds an entity as a follower. Sets up event listeners for follower death and removal. Triggers achievement checks for pig and rocky followers on player leaders.
- Parameters:
follower-- entity to add as follower - Returns: None
- Error states: None
AddItemFollower(itemfollower)
- Description: Adds an entity as an item-based follower (virtual follower for interaction logic).
- Parameters:
itemfollower-- entity to add as item follower - Returns: None
- Error states: None
RemoveItemFollower(itemfollower)
- Description: Removes an entity from the item follower list.
- Parameters:
itemfollower-- entity to remove - Returns: None
- Error states: None
RemoveFollowersByTag(tag, validateremovefn)
- Description: Removes all followers matching a specific tag. Optionally validates each follower before removal.
- Parameters:
tag-- string tag to filter followers byvalidateremovefn-- optional function that returnstrueto allow removal
- Returns: None
- Error states: None
RemoveAllFollowers()
- Description: Removes all regular followers from this leader.
- Parameters: None
- Returns: None
- Error states: None
RemoveAllFollowersOnDeath()
- Description: Called when the leader dies. Removes all followers except those with
keepdeadleaderset totrue. - Parameters: None
- Returns: None
- Error states: None
HaveFollowersCachePlayerLeader()
- Description: Calls
CachePlayerLeader()on all followers that have a follower component. Used for player leader caching on disconnect. - Parameters: None
- Returns: None
- Error states: None
IsBeingFollowedBy(prefabName)
- Description: Checks if any follower (regular or item) matches a specific prefab name.
- Parameters:
prefabName-- string prefab name to search for - Returns:
trueif a matching follower exists,falseotherwise - Error states: None
OnSave()
- Description: Serializes follower data for saving. Skips saving if the leader is a player. Returns follower GUIDs for persistence.
- Parameters: None
- Returns: Table with
followersarray of GUIDs, plus the array as second return value, ornilif no followers or is player - Error states: None
LoadPostPass(newents, savedata)
- Description: Restores followers from saved data after entity loading. Skips loading if the leader is a player.
- Parameters:
newents-- table mapping GUIDs to loaded entitiessavedata-- saved component data table
- Returns: None
- Error states: None
GetDebugString()
- Description: Returns a debug string showing follower count.
- Parameters: None
- Returns: String in format
"followers:<count>" - Error states: None
Events & listeners
Listens to:
newcombattarget-- callsOnNewTarget()when leader acquires new combat targetattacked-- callsOnAttacked()when leader is attackeddeath-- callsRemoveAllFollowersOnDeath()when leader diesonremove(on followers) -- tracks follower removal via_onfollowerremoveddeath(on followers) -- tracks follower death via_onfollowerdied
Pushes:
startfollowing-- fired on follower when added, data includesleaderentitystopfollowing-- fired on follower when removed, data includesleaderentityleaderchanged-- fired on follower when leader changes (viafollower:SetLeader())