-
Posts
30 -
Joined
-
Last visited
-
Days Won
1
Content Type
Profiles
Warranty Claims
Downloads
Forums
Store
Support
DOWNLOADS EXTRA
Services
Everything posted by Gd.Kenni
-
- 21 comments
-
Changed Status from Pending to Not a Bug
-
Indeed, if this is your first installation, it can't be due to the plugin, as the data is created directly from the plugin. A very strange error if it breaks the configuration of another plugin.
-
Is this the first time you've run the plugin ? Was the configuration already created ?
-
A first node has no parent, as in my example, so if you can't unlock it, either you don't have the resources, or the branch before this node contains a node that hasn't been unlocked. Refer to the configuration generated when the plugin is launched It's not possible for my plugin to interfere with the official techtree, I'm not modifying anything in the basic game.
-
Changed Status from Pending to Closed Changed Fixed In to Next Version
- 1 reply
-
- 1
-
-
The blueprint can be learned from the official tree, the research table and the custom techtree. But it must be an item and not a url. "Name": "A1", "Parent": "", "Image URL or Item": { "Type": "Item", "Value": { "Item ID": 1608640313, "Skin ID": 0 } }, I don't understand your problem, I think it's just a matter of understanding the configuration.
-
If you learn about a blueprint from the research table or the official techtree, the item will be unlocked in the plugin tree. The bps check is performed in the background so as not to affect the opening of the display. A blueprint learned by the research table will be directly taken into account. A blueprint learned by the official techtree will have to be verified when the display is opened. Rust 2025-02-25 19-19-34.mp4
-
- 21 comments
-
- 21 comments
-
- 21 comments
-
- 21 comments
-
- 1
-
-
- 21 comments
-
- 21 comments
-
- 1
-
-
- 21 comments
-
The plugin is not designed to recreate the Rust techtree; you can assign chat commands, console commands and economic rewards, but this requires the reward to be unlocked on the plugin's techtree. If you want a special feature, I can try to integrate it but I need to know exactly what behavior to ask for. Does this answer your question?
- 21 comments
-
Version 1.3.16
20 downloads
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); } } }$14.99- 21 comments
-
- 1
-
-