Jump to content

7 Screenshots

  • 2.6k
  • 20
  • 19.29 kB

depends on

Works with

About Techtree

This plugin lets you create a customizable techtree. It's not designed to replace the default Rust techtree, but it does allow you to recreate it to 98%, unlocks plans and can be used to distribute rewards or unlock features in other plugins.

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

 

 

Feature

  • TechTree customizable
  • TechTree by Workbenchlevel
  • Multiple rewards (ChatCommand / ConsoleCommand / Economics)
  • Item custom support
  • Unlock blueprints  
  • Reward if tree is all unlocked
  • Adaptable size with scrolling
  • No command to open
  • Press the Use key R  on the Workbench to open the  Tech Tree

 

 

Permissions

  • techtree.use
  • techtree.unlock.free
  • techtree.unlock.instant

 

Information

  • Default data files are created on plugin load
  • Helper Grid files are created on plugin load

 

General Settings

 

{
  "Settings": {
    "Wipe Player Data at Wipe": true,
    "Time For Unlock Node": 1.0,
    "Selected Theme": "Default",
    "Use Permissions ?": false,
    "Use Economics ?": false,
    "Unlock Blueprint If Item ?": true,
    "Grid Settings": {
      "height": 20,
      "width": 30
    },
    "Level Of Zoom": 1.5
  }
}

 

Techtree Data

 

  • ID: ID  of the node.
  • Parent: Parent node required to unlock this node.
  • Image URL or Item: Image used, via URL or in-game item (ID/Skin).
    • Type: Type of Image (URL  or Item).
    • Value: Url (string) if URL or ItemID and SkinID if Item.
  • Grid Position: Node position on the grid (x, y).
  • Ingame Name: In-game name for this node.
  • Short Description: Short description of the node.
  • Additionnal Description: List of descriptions.
  • Price: Cost to unlock this node.
  • Curency: Resource needed to pay the price (ID/Skin).
  • Rewards: List of rewards obtained after unlocking.
    • Type: Type of reward (ChatCommand, ConsoleCommand or Economics).
    • Value: Value or command associated with the reward (string).

 

"TechTree": [
	{
        "ID": "A2",
        "Parent": "A1",
        "Image URL or Item": {
          "Type": "Url",
          "Value": "https://imgur.com/SRGgaKX.png"
        },
        "Grid Position": {
          "x": 1.0,
          "y": 8.0
        },
        "Player Info": {
          "Ingame Name": "Name A2",
          "Short Description": "A short description",
          "Additionnal Description": [
            "<color=#32CD32><b>First info</b></color>",
            "<color=#FFD700>additionnal info</color>",
            "Warning: <color=#DC143C>a other additionnal info</color>"
          ]
        },
        "Price": 300,
        "Curency": {
          "Item ID": -804769727,
          "Skin ID": 2816495176
        },
        "Rewards": [
          {
            "Type": "ChatCommand",
            "Value": "say Congratulations on unlocking A2!"
          },
          {
            "Type": "ConsoleCommand",
            "Value": "c.grant user playerID perm.use"
          },
          {
            "Type": "Economics",
            "Value": "6500"
          }
        ]
      },
  ],
  "Extra": {
    "Reward On All Node Unlocked": [
      {
        "Type": "ChatCommand",
        "Value": "say Congratulations, you all unlocked!"
      },
      {
        "Type": "Economics",
        "Value": "20000"
      }
    ]
  }

 

Image configuration exemple

With URL :  

"Image URL or Item": {
          "Type": "Url",
          "Value": "https://imgur.com/SRGgaKX.png"
        },

With ITEM :  

"Image URL or Item": {
        "Type": "Item",
        "Value": {
          "Item ID": -1966748496,
          "Skin ID": 0
        }
      },

 

Lang

 

{
  "CLOSE": "CLOSE",
  "UNLOCKED": "UNLOCKED",
  "UNLOCK": "UNLOCK",
  "CANT AFFORD": "CAN'T AFFORD",
  "OPEN": "[R] OPEN",
  "NO PERM": "You don't have permission."
}


Api
 

(bool) IsNodeUnlocked(BasePlayer player, Workbench workbench, string nodeID)
// Return if node is unlocked

(Dictionary<string, bool>) GetUnlockState(BasePlayer player, Workbench workbench)
// Return unlock dictionary (nodeID/bool) for player in Workbench

(void) SetUnlockState(BasePlayer player, Workbench workbench, string nodeID, bool unlocked)
// Set the unlocked/locked state (true/false) for a Workbench node

(void) ResetUnlockState(BasePlayer player, Workbench workbench)
// Resets all unlocks state on a Workbench.


Hook
 

private void OnNodeUnlocked(BasePlayer player, Workbench workbench, string nodeID)
{
  Puts($"Node {nodeID} as been unlocked on workbench {workbench.Workbenchlevel} by {player.UserIDString}");
}


Api and Hook exemple

 

using Oxide.Core.Plugins;
using System;
using System.Collections.Generic;
using UnityEngine;

namespace Carbon.Plugins
{
    [Info("TechTreeApi", "Gd.kenni", "1.0.0")]
    public class TechTreeApi : CarbonPlugin
    {
        [PluginReference] Plugin TechTree;

        private void OnNodeUnlocked(BasePlayer player, Workbench workbench, string nodeID)
        {
            Puts($"Node {nodeID} as been unlocked on workbench {workbench.Workbenchlevel} by {player.UserIDString}");
        }

        [ConsoleCommand("IsNodeUnlocked")]
        private void IsNodeUnlockedCmd(ConsoleSystem.Arg arg)
        {
            BasePlayer player = arg.Player();

            try
            {
                var prefab = GameManager.server.FindPrefab("assets/prefabs/deployable/tier 1 workbench/workbench1.deployed.prefab");
                var bench = prefab.ToBaseEntity() as Workbench;
                var statu = TechTree?.Call<bool>("IsNodeUnlocked", player, bench, "Longsleeve T-Shirt");

                Puts($"{statu}");
            }
            catch (Exception ex)
            {
                PrintError($"Error on command: {ex.Message}");
            }  
        }

        [ConsoleCommand("GetPlayerUnlockState")]
        private void GetPlayerUnlockStateCmd(ConsoleSystem.Arg arg)
        {
            BasePlayer player = arg.Player();

            var prefab = GameManager.server.FindPrefab("assets/prefabs/deployable/tier 1 workbench/workbench1.deployed.prefab");
            var bench = prefab.ToBaseEntity() as Workbench;
            var playerStatus = TechTree?.Call<Dictionary<string, bool>>("GetPlayerUnlockState", player, bench);

            foreach (var kv in playerStatus)
                Puts($"{kv.Key} {kv.Value}");
        }

        [ConsoleCommand("SetNodeUnlockState")]
        private void SetNodeUnlockStateCmd(ConsoleSystem.Arg arg)
        {
            BasePlayer player = arg.Player();

            var prefab = GameManager.server.FindPrefab("assets/prefabs/deployable/tier 1 workbench/workbench1.deployed.prefab");
            var bench = prefab.ToBaseEntity() as Workbench;
            TechTree?.Call("SetNodeUnlockState", player, bench, "Tank Top", true);
        }

        [ConsoleCommand("ResetUnlockState")]
        private void ResetUnlockStateCmd(ConsoleSystem.Arg arg)
        {
            BasePlayer player = arg.Player();

            var prefab = GameManager.server.FindPrefab("assets/prefabs/deployable/tier 1 workbench/workbench1.deployed.prefab");
            var bench = prefab.ToBaseEntity() as Workbench;
            TechTree?.Call("ResetUnlockState", player, bench);
        }
    }
}

 

  • Love 1

Gd.Kenni's Collection

User Feedback

1.9m

Downloads

Total number of downloads.

9.1k

Customers

Total customers served.

133.5k

Files Sold

Total number of files sold.

2.8m

Payments Processed

Total payments processed.

×
×
  • 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.