Configuration
Configure Dime Skill Tree nodes, trees, and integration settings
Configuration
Configuration files are located in the dime_skilltree resource folder and are not escrowed.
Dime Skills Integration
First, ensure the Skill Tree DLC integration is enabled in your Dime Skills configuration (dime_skills/shared/config.lua):
-- In dime_skills/shared/config.lua
SkillTree = {
enabled = true, -- Enable skill tree DLC integration
pointsPerLevel = 1, -- Skill points granted per skill level
excludedSkills = {}, -- Skills that don't contribute points
},Integration Options
Prop
Type
Example Configurations
SkillTree = {
enabled = true,
pointsPerLevel = 1,
excludedSkills = {},
}
-- Level 30 across all skills = 290 pointsSkillTree = {
enabled = true,
pointsPerLevel = 2,
excludedSkills = {'stamina'},
}
-- Level 30 across skills (except stamina) = ~580 pointsSkillTree = {
enabled = true,
pointsPerLevel = 1,
excludedSkills = {'stamina', 'driving', 'diving'},
}
-- Only combat/crafting skills grant pointsSkill Tree Configuration
The main skill tree configuration is in dime_skilltree/shared/config.lua:
return {
-- Core Settings
Debug = false,
-- UI Settings
UI = {
keybind = 'J', -- Keybind to open skill tree
command = 'skilltree', -- Chat command
closeOnEscape = true, -- Close UI with ESC
},
-- Trees Configuration
Trees = {
-- See Tree Configuration section below
},
-- Node Definitions
Nodes = {
-- See Node Configuration section below
},
}Tree Configuration
Each tree represents a category of nodes that share a skill point pool.
Trees = {
['combat'] = {
label = 'Combat Mastery',
description = 'Enhance your fighting capabilities',
icon = 'crosshairs',
iconColor = '#EF4444',
-- Optional: Use points from specific skill only
-- skillSource = 'shooting',
},
['crafting'] = {
label = 'Artisan',
description = 'Master the art of creation',
icon = 'hammer',
iconColor = '#F59E0B',
},
['survival'] = {
label = 'Survivor',
description = 'Thrive in harsh conditions',
icon = 'heart',
iconColor = '#10B981',
},
}Tree Properties
Prop
Type
Node Configuration
Nodes are the unlockable elements in each tree.
Nodes = {
-- Combat Tree Nodes
['combat_root'] = {
tree = 'combat',
label = 'Combat Training',
description = 'Begin your journey as a warrior',
icon = 'fist-raised',
position = { x = 0, y = 0 }, -- Center of tree
cost = 0, -- Root nodes are free
prerequisites = {}, -- No prerequisites
effect = {
type = 'unlock', -- Just unlocks, no stat change
},
},
['combat_damage_1'] = {
tree = 'combat',
label = 'Power Strike',
description = 'Increase melee damage by 5%',
icon = 'hand-fist',
position = { x = -1, y = 1 },
cost = 2,
prerequisites = { 'combat_root' },
levelRequirement = 5, -- Optional: min skill level
effect = {
type = 'stat_bonus',
stat = 'melee_damage',
value = 0.05, -- 5% increase
},
},
['combat_damage_2'] = {
tree = 'combat',
label = 'Brutal Force',
description = 'Increase melee damage by additional 10%',
icon = 'hand-fist',
position = { x = -1, y = 2 },
cost = 4,
prerequisites = { 'combat_damage_1' },
effect = {
type = 'stat_bonus',
stat = 'melee_damage',
value = 0.10,
},
},
['combat_accuracy_1'] = {
tree = 'combat',
label = 'Steady Aim',
description = 'Reduce weapon sway by 15%',
icon = 'bullseye',
position = { x = 1, y = 1 },
cost = 2,
prerequisites = { 'combat_root' },
effect = {
type = 'custom',
callback = 'reduce_weapon_sway',
value = 0.15,
},
},
}Node Properties
Prop
Type
Effect Types
Nodes can have different effect types that trigger when unlocked.
Unlock Effect
Simple unlock with no stat changes. Good for root nodes or gates.
effect = {
type = 'unlock',
}Stat Bonus Effect
Modifies a player stat when unlocked.
effect = {
type = 'stat_bonus',
stat = 'melee_damage', -- Stat identifier
value = 0.10, -- Bonus value (10%)
operation = 'multiply', -- 'multiply' or 'add'
}Built-in Stats:
melee_damage- Melee damage multiplierweapon_damage- Ranged weapon damageweapon_accuracy- Weapon accuracyrun_speed- Running speedmax_health- Maximum healthmax_armor- Maximum armorcrafting_speed- Crafting time reductionxp_gain- XP gain multiplier
Custom Effect
Triggers a registered callback function.
effect = {
type = 'custom',
callback = 'my_custom_effect', -- Callback name
value = 100, -- Passed to callback
data = { -- Optional extra data
duration = 3600,
stackable = true,
},
}Register the callback in your resource:
exports.dime_skills:registerNodeEffect('my_custom_effect', function(src, nodeData)
local value = nodeData.value -- 100
local data = nodeData.data -- { duration = 3600, stackable = true }
-- Your custom logic here
TriggerClientEvent('myresource:applyEffect', src, value, data)
end)Ability Unlock Effect
Unlocks an ability or feature.
effect = {
type = 'ability',
ability = 'double_jump', -- Ability identifier
data = {
height = 2.0,
},
}Position System
Nodes are positioned on a grid. The root node is typically at { x = 0, y = 0 }.
y = 0 (top)
│
x = -2 │ x = 2
│
y = 3 (bottom)Example Layout
-- Root at center top
['root'] = { position = { x = 0, y = 0 } },
-- Three branches below
['left_1'] = { position = { x = -1, y = 1 } },
['center_1'] = { position = { x = 0, y = 1 } },
['right_1'] = { position = { x = 1, y = 1 } },
-- Further branching
['left_2a'] = { position = { x = -2, y = 2 } },
['left_2b'] = { position = { x = -1, y = 2 } },Complete Example
Here's a complete tree configuration example:
return {
Debug = false,
UI = {
keybind = 'J',
command = 'skilltree',
closeOnEscape = true,
},
Trees = {
['combat'] = {
label = 'Combat Mastery',
description = 'Enhance your fighting capabilities',
icon = 'crosshairs',
iconColor = '#EF4444',
},
},
Nodes = {
-- Root
['combat_root'] = {
tree = 'combat',
label = 'Combat Training',
description = 'Begin your journey as a warrior',
icon = 'fist-raised',
position = { x = 0, y = 0 },
cost = 0,
prerequisites = {},
effect = { type = 'unlock' },
},
-- Tier 1 - Branches
['melee_path'] = {
tree = 'combat',
label = 'Brawler',
description = 'Focus on close-quarters combat',
icon = 'hand-fist',
position = { x = -1, y = 1 },
cost = 1,
prerequisites = { 'combat_root' },
effect = { type = 'unlock' },
},
['ranged_path'] = {
tree = 'combat',
label = 'Marksman',
description = 'Focus on ranged combat',
icon = 'bullseye',
position = { x = 1, y = 1 },
cost = 1,
prerequisites = { 'combat_root' },
effect = { type = 'unlock' },
},
-- Tier 2 - Melee Branch
['melee_damage'] = {
tree = 'combat',
label = 'Power Strike',
description = '+10% melee damage',
icon = 'bolt',
position = { x = -2, y = 2 },
cost = 2,
prerequisites = { 'melee_path' },
effect = {
type = 'stat_bonus',
stat = 'melee_damage',
value = 0.10,
},
},
['melee_speed'] = {
tree = 'combat',
label = 'Quick Hands',
description = '+15% melee attack speed',
icon = 'gauge-high',
position = { x = -1, y = 2 },
cost = 2,
prerequisites = { 'melee_path' },
effect = {
type = 'stat_bonus',
stat = 'melee_speed',
value = 0.15,
},
},
-- Tier 2 - Ranged Branch
['ranged_accuracy'] = {
tree = 'combat',
label = 'Steady Aim',
description = '+10% weapon accuracy',
icon = 'crosshairs',
position = { x = 1, y = 2 },
cost = 2,
prerequisites = { 'ranged_path' },
effect = {
type = 'stat_bonus',
stat = 'weapon_accuracy',
value = 0.10,
},
},
['ranged_damage'] = {
tree = 'combat',
label = 'Lethal Shot',
description = '+10% weapon damage',
icon = 'gun',
position = { x = 2, y = 2 },
cost = 2,
prerequisites = { 'ranged_path' },
effect = {
type = 'stat_bonus',
stat = 'weapon_damage',
value = 0.10,
},
},
-- Tier 3 - Capstone
['combat_master'] = {
tree = 'combat',
label = 'Combat Master',
description = '+5% all combat stats',
icon = 'crown',
position = { x = 0, y = 3 },
cost = 5,
prerequisites = { 'melee_damage', 'ranged_accuracy' },
levelRequirement = 20,
effect = {
type = 'custom',
callback = 'combat_master_unlock',
value = 0.05,
},
},
},
}Tips
Balancing
- Root nodes should be free (cost = 0)
- Tier 1 nodes: 1-2 points
- Tier 2 nodes: 2-3 points
- Tier 3+ nodes: 3-5+ points
- Capstone nodes: 5-10 points with multiple prerequisites
Tree Design
- Keep trees focused on a theme
- Provide meaningful choices (branches)
- Don't make all nodes mandatory
- Balance stat bonuses with gameplay
Prerequisites
- Use single prerequisites for linear paths
- Use multiple prerequisites for capstone nodes
- Don't create impossible unlock paths