Jump to content

12 Screenshots

  • 9.8k
  • 164
  • 60.63 kB
  • Update details
    v2.2.9
    Released
    Download size60.63 kB
    Total versions23
    Time between versions 1 day
    Typical update pace About every 22 days
    Freshness 25 days ago

depends on

Required files or plugins needed for this resource to work properly.

Works with

Compatible add-ons, packages, or tools that pair well with this resource.

 

 

techtree.png.f1385f3575b83880973ae6c01aff8d46.png

 

⚠️ If you use Oxide,  Carbon Aliases  if required ! Else ignore this.

 

short-description.png.269ece62023ad556108144b066a0724e.png

 

TechTree is a complete custom techtree system for Rust servers.

It can replace the vanilla workbench tech tree, or it can be used as a custom progression layer opened near a workbench. The goal is simple: give server owners a clean in-game way to control progression without spending their life editing giant JSON files by hand.

You can keep a mostly vanilla progression, build something fully custom, or mix both: vanilla nodes, custom branches, permissions, rewards, custom prices, custom currencies.

 

what-techtree-does.png.8cad55f4a30cb7f94e71ea2cb74e6704.png

 

  • Replaces the vanilla workbench tech tree by default.
  • Optional mode where players open the tree with R near a workbench.
  • Supports Workbench Level 1, Level 2, Level 3, and Engineering.
  • Includes an in-game CUI editor for admins.
  • Lets you add, modify, move, and remove nodes directly in game.
  • Supports custom node prices and custom currency items.
  • Supports item icons and custom URL images.
  • Supports localized node names and descriptions.
  • Supports node rewards: ConsoleCommand, ChatCommand, and Economics.
  • Supports branch permissions for restricted progression paths.
  • Supports free unlock and instant unlock permissions.
  • Can recover vanilla nodes after Rust updates.
  • Can freeze a tree so Facepunch updates do not modify your custom layout.
  • Includes a theme editor with palette and node style settings.
  • Provides hooks and API methods for other plugins.


video-preview.png.049b11ac6589507d14669be06e360386.png

 

 


player-experience.png.09f326770cc81ce0925352b2bbdd86ca.png

 

Players use TechTree from a workbench.

If vanilla replacement is enabled, opening the workbench tech tree opens TechTree instead.

If vanilla replacement is disabled, players stand near a workbench and press R to open the TechTree UI.

Available tree tabs depend on the workbench:

  • Level 1 workbench: Level 1 tree
  • Level 2 workbench: Level 1 and Level 2 trees
  • Level 3 workbench: Level 1, Level 2, and Level 3 trees
  • Engineering workbench: Engineering tree

Nodes clearly show their state: locked, unlockable, unlocked, or restricted by permission. When a player selects a node, the right panel shows the cost, currency, required path cost when relevant, and unlock action.


admin-editor.png.07f88ed777a298096c4794a264c30b1a.png

 

Admins can switch from player mode to edit mode directly from the TechTree UI.

The editor works with a draft session:

  • Changes are previewed immediately.
  • Nothing is permanently written until you press Save.
  • Closing or cancelling edit mode discards unsaved edits.

Admins can:

  • Add a node on an empty grid cell.
  • Modify an existing node.
  • Remove a node.
  • Move nodes on the grid.
  • Set parent nodes.
  • Set a branch permission.
  • Change item icon or URL image.
  • Set name and description.
  • Set price and currency.
  • Add rewards.
  • Edit the grid size.
  • Reset a tree to vanilla.
  • Recover missing vanilla nodes.
  • Exclude vanilla nodes from a frozen/custom tree.
  • Edit and save themes.

This means you can build or adjust a progression tree without leaving the server.

 

vanilla-sync-and-custom-trees.png

 

On first load, TechTree creates its default data from Rust's vanilla workbench tech trees.

Quick difference between vanilla nodes and custom nodes:

Vanilla nodes
Vanilla nodes come from Rust's original Facepunch tech tree. They have a vanilla ID, which allows TechTree to recognize them later.

Because they are linked to Rust's vanilla data, TechTree can synchronize them, recover them, update missing vanilla entries after Rust changes, or exclude them when you intentionally remove them.

You can still fully edit vanilla nodes. You can move them, change their price, change their currency, adjust their unlock path, add permissions, add rewards, or remove them from the tree.

Use vanilla nodes when you want to keep the familiar Rust progression but customize how it behaves on your server.

Custom nodes
Custom nodes are created by you inside the TechTree editor. They do not come from Rust's vanilla tree and they do not have a vanilla ID.

Because they are fully plugin-side nodes, vanilla synchronization does not restore, recover, or replace them. They belong only to your custom TechTree data.

Custom nodes can use the same kind of options as vanilla nodes: price, currency, parents, permissions, rewards, commands, image, name, and description.

A custom node can even reproduce a vanilla unlock if you really want to build it that way, although this is usually not the main reason to use them.

Custom nodes are mostly useful when you want to create progression that does not exist in the default Rust tech tree, such as custom items, plugin rewards, special server progression, profession branches, VIP paths, economy rewards, command unlocks, or server-specific content.

You can mix both types in the same tree. For example, you can keep most vanilla nodes, remove a few unwanted vanilla unlocks, then add custom nodes with rewards or branch permissions.

The important rule:
Only vanilla nodes need vanilla exclusion logic. If you remove a custom node, it is simply removed from your custom data. If you remove a vanilla node and want it to stay removed, you must exclude it correctly so vanilla synchronization does not bring it back later.

There are three important controls:

Auto Vanilla Synchronization
Useful when you want to keep a tree close to vanilla. Missing vanilla nodes can be imported and conflicts can be handled automatically.

Excluded Vanilla IDs
Marks vanilla nodes that were intentionally removed from a custom/frozen tree.

Disable Future Vanilla Imports
Freezes the current workbench tree. Future vanilla additions will not be imported automatically.


how-to-remove-vanilla-nodes-correctly.png.8c06bbe14e84ae7ea0e704f1371777f3.png

 

Important:
Exclude from vanilla sync must be used together with Disable Future Vanilla Imports.

If Disable Future Vanilla Imports is not enabled, vanilla synchronization can import removed vanilla nodes again later.

Safe workflow:

  1. Open the TechTree at the correct workbench.
  2. Switch to Edit Mode.
  3. Open Excluded Nodes.
  4. Enable Disable Future Vanilla Imports.
  5. Select the vanilla node you want to remove.
  6. Click Modify.
  7. Enable Exclude from vanilla sync.
  8. Confirm.
  9. Select the same node again.
  10. Click Remove.
  11. Press Save.

For a fully custom tree:

  1. Open Edit Mode.
  2. Open Excluded Nodes.
  3. Enable Disable Future Vanilla Imports.
  4. Click Exclude All.
  5. Remove the vanilla nodes you do not want.
  6. Build your custom tree.
  7. Save.

If you want to keep receiving future Facepunch additions, keep Auto Vanilla Synchronization enabled and avoid permanently removing vanilla nodes.


global-permissions.png.234a5c70523b4144dc73602e2a542c42.png

 

The config option "Use Permissions ?" enables TechTree permission checks.

This includes the global permissions listed below and the custom branch permissions set on nodes.

When "Use Permissions ?" is false:

  • Players can open TechTree without techtree.use.
  • techtree.unlock.free does not apply.
  • techtree.unlock.instant does not apply.
  • Branch permissions are not enforced.

When "Use Permissions ?" is true:

  • Players need techtree.use to open TechTree.
  • Players with techtree.unlock.free unlock nodes for free.
  • Players with techtree.unlock.instant skip the unlock timer.
  • Branch permissions are enforced when a node has a custom permission set.

Registered global permissions:

techtree.use
Allows the player to open/use TechTree when "Use Permissions ?" is enabled.

techtree.unlock.free
Allows the player to unlock nodes for free when "Use Permissions ?" is enabled.

techtree.unlock.instant
Allows the player to unlock nodes instantly when "Use Permissions ?" is enabled.


branch-permissions.png.6cfa1d148f83af004e9bd1fee2ad3efc.png

 

Branch permissions are custom node permissions.

They are not the same thing as techtree.use, techtree.unlock.free, or techtree.unlock.instant, but they still require "Use Permissions ?" to be enabled.

A branch permission is a custom permission typed directly on a node in the editor. If a player does not have that permission, the node and its child branch are locked for that player.

Example:

Quote

vip.weapons

Recommended workflow:

  1. Open the TechTree editor.
  2. Select the first node of the restricted branch.
  3. Click Modify.
  4. Enter your custom permission in the Permission field.
  5. Confirm.
  6. Save.
  7. Grant the permission to the correct player or group.

Good examples:

Quote

vip.weapons
profession.electrician
progression.tier2
donator.crafting

Common mistake:
Typing the permission in the node editor but never granting it. In that case, the branch stays locked for everyone.


rewards.png.4f393c1cd606c26ee20efb6ca8ad50e9.png

 

Rewards are executed when a player unlocks a node.

You can add multiple rewards to the same node.

Reward types:

ConsoleCommand
Runs a server command from the server console.

Use this for server/admin actions such as granting permissions, giving items, or running plugin commands.

Examples:

Quote

o.grant user playerID vip.weapons
inventory.giveto playerID scrap 500

ChatCommand
Runs a command from the player's client.

Use this only when the command should be executed by the player.

Example:

Quote

say I unlocked a TechTree node!

Economics
Deposits money into the player's Economics balance.

Example value:

Quote

2500

Important:
Most reward actions should use ConsoleCommand. If a command needs server authority, do not use ChatCommand.

The playerID placeholder is automatically replaced with the unlocking player's Steam ID.


configuration.png.fc80a23e9ce55ed8b9b75ae26149596a.png

 

Default configuration:

{
  "Settings": {
    "Wipe Player Data at Wipe": true,
    "Time For Unlock Node": 1.0,
    "Selected Theme": "Default",
    "Use Permissions ?": false,
    "Use Economics ?": false,
    "Replace tree vanilla ? Open with [R] if false": true
  }
}

Config notes:

Wipe Player Data at Wipe
Deletes TechTree player unlock data on a new save.

Time For Unlock Node
Unlock progress duration in seconds.

Selected Theme
Active theme loaded from Themes.json.

Use Permissions ?
Enables the global TechTree permission checks.

Use Economics ?
The config value exists, but Economics integration is handled through the Economics reward type.

Replace tree vanilla ? Open with [R] if false
When true, TechTree replaces the vanilla workbench tech tree. When false, players open it with R near a workbench.


data-files.png.c3d4b8a0c8e7d5f2a82479654e690df7.png

 

TechTree creates separate data files for each workbench tree:

Quote

oxide/data/TechTree/Data/Data_Workbench_1.json
oxide/data/TechTree/Data/Data_Workbench_2.json
oxide/data/TechTree/Data/Data_Workbench_3.json
oxide/data/TechTree/Data/Data_Engineering.json
oxide/data/TechTree/Players/<steamid>.json
oxide/data/TechTree/Themes.json

Player progression is saved separately per player and per workbench.

 

api-and-hooks.png.741c7ab7d2edbffff86bf6f441736821.png

 

TechTree includes API methods and hooks for other plugins.

 

API methods:

API_GetPlayerData(BasePlayer player)
// Returns: Dictionary<string, object>

 

Return format:

{
  "workbench": {
    "Workbench_1": [123, 456],
    "Workbench_2": [789],
    "Workbench_3": [],
    "Engineering": []
  }
}

 

API_SetPlayerData(BasePlayer player, Dictionary<string, object> apiData)
// Returns: bool

 

The plugin cleans invalid node IDs before saving.

 

API_ClearPlayerWorkbenchData(BasePlayer player, Workbench workbench)
// Returns: bool

 

Clears the player's TechTree data only for the workbench category matching the provided Workbench.

 

API_ClearPlayerData(BasePlayer player)
// Returns: bool

 

Clears all TechTree unlock data for that player.


Example API usage:

[PluginReference] Plugin TechTree;

var playerData = TechTree?.Call("API_GetPlayerData", player) as Dictionary<string, object>;

if (playerData != null)
{
    var workbenchData = playerData["workbench"] as Dictionary<string, object>;
}


Node dictionary format used by hooks:

{
  "id": 123456,
  "vanillaId": 84,
  "price": 250,
  "parents": [111111],
  "isVanilla": true,
  "currency": {
    "itemId": -932201673,
    "skinId": 0
  }
}


Tree dictionary format:

{
  "workbench": Workbench,
  "nodes": [ nodeDictionary, nodeDictionary, ... ]
}

Plugin hooks:

// Called before a node is unlocked.
OnNodeUnlock(Workbench workbench, Dictionary<string, object> node, BasePlayer player)
// Return false to block the unlock.
// Return null or true to allow it.
  
  
// Alternative hook format with the full tree dictionary.
OnNodeUnlock(BasePlayer player, Dictionary<string, object> node, Dictionary<string, object> tree)
// Return false to block the unlock.
// Return null or true to allow it.
  
  
// Called after a node has been unlocked.
OnNodeUnlocked(Workbench workbench, Dictionary<string, object> node, BasePlayer player)
  
  
// Called after multiple nodes were unlocked through a path unlock.
OnPathNodeUnlocked(Workbench workbench, List<object> nodes, BasePlayer player)
// The nodes list contains node dictionaries.


Example hook:

private object OnNodeUnlock(Workbench workbench, Dictionary<string, object> node, BasePlayer player)
{
    int nodeId = Convert.ToInt32(node["id"]);

    if (nodeId == 123456 && !permission.UserHasPermission(player.UserIDString, "myplugin.allow"))
    {
        player.ChatMessage("You cannot unlock this node yet.");
        return false;
    }

    return null;
}


Example after-unlock hook:

private void OnNodeUnlocked(Workbench workbench, Dictionary<string, object> node, BasePlayer player)
{
    int nodeId = Convert.ToInt32(node["id"]);
    Puts($"{player.displayName} unlocked TechTree node {nodeId}");
}

Vanilla-compatible hooks are also called for vanilla nodes where possible:

OnTechTreeNodeUnlock(Workbench workbench, TechTreeData.NodeInstance node, BasePlayer player)
OnTechTreeNodeUnlocked(Workbench workbench, TechTreeData.NodeInstance node, BasePlayer player, List<ItemDefinition> unlockedItems)



installation.png.c5176e71efbc967fac1fdd7cb2283626.png

 

  1. Place TechTree.cs in your server plugins folder.
  2. Make sure the file is named exactly TechTree.cs.
  3. Load the plugin.
  4. Let it generate the config and data files.
  5. Open a workbench in game.
  6. As an admin, switch to edit mode.
  7. Customize the tree.
  8. Press Save.


good-to-know.png.1326af1a11a0fbada4d71906f8420323.png

 

  • Always press Save after editing.
  • Back up oxide/data/TechTree before major progression changes.
  • If you remove vanilla nodes, use Disable Future Vanilla Imports first.
  • If a branch permission locks everyone out, check that the permission was granted.
  • If techtree.use blocks players, check that "Use Permissions ?" is enabled and the permission was granted.
  • Use ConsoleCommand for most rewards.
  • Use ChatCommand only for commands that should be executed by the player.
  • If upgrading from very old versions (before v2), older data files may not be compatible with the revamped system.


why-use-techtree.png.7585ca5e4fc00761d280359dc294e480.png

 

TechTree is built for servers that want progression to feel intentional.

You can keep the familiar Rust workbench flow while changing how players unlock items, what path they follow, what they pay, and what they receive along the way.

It works well for:

  • Modded progression servers.
  • Economy servers.
  • Roleplay servers with professions.
  • VIP or group-based branches.
  • Seasonal progression.
  • Servers that want to reorganize, delay, or remove vanilla unlocks.


contact.png.947f052b98787cf27a4ca3316afd8eea.png

 

  • Send me a private message on Codefling.
  • Send me a message on Discord: gd.kenni

 

  • Like 2
  • Love 2

Gd.Kenni's Collection

User Feedback

About Us

Codefling is the largest marketplace for plugins, maps, tools, and more, making it easy for customers to discover new content and for creators to monetize their work.

Downloads
2.7m
Total downloads
Customers
11.5k
Customers served
Files Sold
164.3k
Total sales
Payments
3.5m
Processed total
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.