Skip to main content

Types

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

Types​

NodePosition​

interface NodePosition {
x: number
y: number
}

Canvas position for a node.

CostMap​

type CostMap = {[string]: number}

Currency-to-amount mapping for unlock costs.

PrerequisiteLevel​

interface PrerequisiteLevel {
minLevel: number
}

Minimum player level requirement.

PrerequisiteNode​

interface PrerequisiteNode {
nodeId: string
}

Parent node that must be unlocked.

PrerequisiteDependency​

interface PrerequisiteDependency {
nodeIds: {string}
}

Set of specific nodes that must all be unlocked.

PrerequisiteCustom​

interface PrerequisiteCustom {
predicate: (
playerId: string,
) → 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 {
id: string
type: "passive" | "active" | "multirank" | "exclusive"
name: string
description: string?
icon: string?
maxRank: number
cost: CostMap
prerequisites: Prerequisites?
position: NodePosition
effectData: EffectData?
category: string?
exclusiveGroup: string?
}

Declarative definition of a skill tree node.

CategoryConfig​

interface CategoryConfig {
id: string
name: string
icon: string?
description: string?
position: NodePosition
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 {
playerId: string
unlockedNodes: {[string]: number}
currencies: {[string]: number}
level: number
}

Player-specific skill tree state, serializable for storage.

UnlockResult​

interface UnlockResult {
success: boolean
reason: string
}

Result of an unlock or upgrade attempt.

RemoteConfig​

interface RemoteConfig {
unlockRequest: RemoteEvent
upgradeRequest: RemoteEvent
stateUpdated: RemoteEvent
}

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"
    }
}