Skip to main content

Types

Shared Luau type definitions for skill trees, configuration, and server state.

Types

NodePosition

interface NodePosition {
xnumber
ynumber
}

Canvas position for a node.

CostMap

type CostMap = {[string]number}

Currency-to-amount mapping for unlock costs.

PrerequisiteLevel

interface PrerequisiteLevel {
minLevelnumber
}

Minimum player level requirement.

PrerequisiteNode

interface PrerequisiteNode {
nodeIdstring
}

Parent node that must be unlocked.

PrerequisiteDependency

interface PrerequisiteDependency {
nodeIds{string}
}

Set of specific nodes that must all be unlocked.

PrerequisiteCustom

interface PrerequisiteCustom {
predicate(
playerIdstring,
) → boolean
}

Custom validation function.

Prerequisites

interface Prerequisites {
parents{PrerequisiteNode}?
dependencies{PrerequisiteDependency}?
custom{PrerequisiteCustom}?
}

Union of prerequisite constraints. Any number of these can be combined.

EffectData

type EffectData = {[string]any}

Effect payload passed to EffectHandler.

NodeConfig

interface NodeConfig {
idstring
type"passive" | "active" | "multirank" | "exclusive"
namestring
descriptionstring?
iconstring?
maxRanknumber
costCostMap
prerequisitesPrerequisites?
positionNodePosition
effectDataEffectData?
categorystring?
exclusiveGroupstring?
}

Declarative definition of a skill tree node.

CategoryConfig

interface CategoryConfig {
idstring
namestring
iconstring?
descriptionstring?
positionNodePosition
nodes{NodeConfig}
}

Top-level category definition for radial layout.

SkillTreeConfig

interface SkillTreeConfig {
categories{CategoryConfig}?
nodes{NodeConfig}?
layout"linear" | "branching" | "web" | "radial"?
currencies{string}
}

Full skill tree configuration supporting multiple layout topologies.

PlayerSkillState

interface PlayerSkillState {
playerIdstring
unlockedNodes{[string]number}
currencies{[string]number}
levelnumber
}

Player-specific skill tree state, serializable for storage.

UnlockResult

interface UnlockResult {
successboolean
reasonstring
}

Result of an unlock or upgrade attempt.

RemoteConfig

interface RemoteConfig {
unlockRequestRemoteEvent
upgradeRequestRemoteEvent
stateUpdatedRemoteEvent
}

Configuration for client-server RemoteEvent communication.

Show raw api
{
    "functions": [],
    "properties": [],
    "types": [
        {
            "name": "NodePosition",
            "desc": "Canvas position for a node.",
            "fields": [
                {
                    "name": "x",
                    "lua_type": "number",
                    "desc": ""
                },
                {
                    "name": "y",
                    "lua_type": "number",
                    "desc": ""
                }
            ],
            "source": {
                "line": 12,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "CostMap",
            "desc": "Currency-to-amount mapping for unlock costs.",
            "lua_type": "{ [string]: number }",
            "source": {
                "line": 20,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "PrerequisiteLevel",
            "desc": "Minimum player level requirement.",
            "fields": [
                {
                    "name": "minLevel",
                    "lua_type": "number",
                    "desc": ""
                }
            ],
            "source": {
                "line": 27,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "PrerequisiteNode",
            "desc": "Parent node that must be unlocked.",
            "fields": [
                {
                    "name": "nodeId",
                    "lua_type": "string",
                    "desc": ""
                }
            ],
            "source": {
                "line": 36,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "PrerequisiteDependency",
            "desc": "Set of specific nodes that must all be unlocked.",
            "fields": [
                {
                    "name": "nodeIds",
                    "lua_type": "{ string }",
                    "desc": ""
                }
            ],
            "source": {
                "line": 45,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "PrerequisiteCustom",
            "desc": "Custom validation function.",
            "fields": [
                {
                    "name": "predicate",
                    "lua_type": "(playerId: string, state: PlayerSkillState) -> boolean",
                    "desc": ""
                }
            ],
            "source": {
                "line": 54,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "Prerequisites",
            "desc": "Union of prerequisite constraints. Any number of these can be combined.",
            "fields": [
                {
                    "name": "level",
                    "lua_type": "PrerequisiteLevel?",
                    "desc": ""
                },
                {
                    "name": "parents",
                    "lua_type": "{ PrerequisiteNode }?",
                    "desc": ""
                },
                {
                    "name": "dependencies",
                    "lua_type": "{ PrerequisiteDependency }?",
                    "desc": ""
                },
                {
                    "name": "custom",
                    "lua_type": "{ PrerequisiteCustom }?",
                    "desc": ""
                }
            ],
            "source": {
                "line": 66,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "EffectData",
            "desc": "Effect payload passed to EffectHandler.",
            "lua_type": "{ [string]: any }",
            "source": {
                "line": 76,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "NodeConfig",
            "desc": "Declarative definition of a skill tree node.",
            "fields": [
                {
                    "name": "id",
                    "lua_type": "string",
                    "desc": ""
                },
                {
                    "name": "type",
                    "lua_type": "\"passive\" | \"active\" | \"multirank\" | \"exclusive\"",
                    "desc": ""
                },
                {
                    "name": "name",
                    "lua_type": "string",
                    "desc": ""
                },
                {
                    "name": "description",
                    "lua_type": "string?",
                    "desc": ""
                },
                {
                    "name": "icon",
                    "lua_type": "string?",
                    "desc": ""
                },
                {
                    "name": "maxRank",
                    "lua_type": "number",
                    "desc": ""
                },
                {
                    "name": "cost",
                    "lua_type": "CostMap",
                    "desc": ""
                },
                {
                    "name": "prerequisites",
                    "lua_type": "Prerequisites?",
                    "desc": ""
                },
                {
                    "name": "position",
                    "lua_type": "NodePosition",
                    "desc": ""
                },
                {
                    "name": "effectData",
                    "lua_type": "EffectData?",
                    "desc": ""
                },
                {
                    "name": "category",
                    "lua_type": "string?",
                    "desc": ""
                },
                {
                    "name": "exclusiveGroup",
                    "lua_type": "string?",
                    "desc": ""
                }
            ],
            "source": {
                "line": 94,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "CategoryConfig",
            "desc": "Top-level category definition for radial layout.",
            "fields": [
                {
                    "name": "id",
                    "lua_type": "string",
                    "desc": ""
                },
                {
                    "name": "name",
                    "lua_type": "string",
                    "desc": ""
                },
                {
                    "name": "icon",
                    "lua_type": "string?",
                    "desc": ""
                },
                {
                    "name": "description",
                    "lua_type": "string?",
                    "desc": ""
                },
                {
                    "name": "position",
                    "lua_type": "NodePosition",
                    "desc": ""
                },
                {
                    "name": "nodes",
                    "lua_type": "{ NodeConfig }",
                    "desc": ""
                }
            ],
            "source": {
                "line": 119,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "SkillTreeConfig",
            "desc": "Full skill tree configuration supporting multiple layout topologies.",
            "fields": [
                {
                    "name": "categories",
                    "lua_type": "{ CategoryConfig }?",
                    "desc": ""
                },
                {
                    "name": "nodes",
                    "lua_type": "{ NodeConfig }?",
                    "desc": ""
                },
                {
                    "name": "layout",
                    "lua_type": "\"linear\" | \"branching\" | \"web\" | \"radial\"?",
                    "desc": ""
                },
                {
                    "name": "currencies",
                    "lua_type": "{ string }",
                    "desc": ""
                }
            ],
            "source": {
                "line": 136,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "PlayerSkillState",
            "desc": "Player-specific skill tree state, serializable for storage.",
            "fields": [
                {
                    "name": "playerId",
                    "lua_type": "string",
                    "desc": ""
                },
                {
                    "name": "unlockedNodes",
                    "lua_type": "{ [string]: number }",
                    "desc": ""
                },
                {
                    "name": "currencies",
                    "lua_type": "{ [string]: number }",
                    "desc": ""
                },
                {
                    "name": "level",
                    "lua_type": "number",
                    "desc": ""
                }
            ],
            "source": {
                "line": 151,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "UnlockResult",
            "desc": "Result of an unlock or upgrade attempt.",
            "fields": [
                {
                    "name": "success",
                    "lua_type": "boolean",
                    "desc": ""
                },
                {
                    "name": "reason",
                    "lua_type": "string",
                    "desc": ""
                }
            ],
            "source": {
                "line": 164,
                "path": "src/Types.luau"
            }
        },
        {
            "name": "RemoteConfig",
            "desc": "Configuration for client-server RemoteEvent communication.",
            "fields": [
                {
                    "name": "unlockRequest",
                    "lua_type": "RemoteEvent",
                    "desc": ""
                },
                {
                    "name": "upgradeRequest",
                    "lua_type": "RemoteEvent",
                    "desc": ""
                },
                {
                    "name": "stateUpdated",
                    "lua_type": "RemoteEvent",
                    "desc": ""
                }
            ],
            "source": {
                "line": 176,
                "path": "src/Types.luau"
            }
        }
    ],
    "name": "Types",
    "desc": "Shared Luau type definitions for skill trees, configuration, and server state.",
    "source": {
        "line": 5,
        "path": "src/Types.luau"
    }
}