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