This section covers more complex features of the plugin, including persistence, networking, and custom C++ extensions.
The system includes built-in support for saving and loading. On the CrimsonSkillTreeManager
component, ensure bSaveSkillTreeAfterEveryChange
and bLoadAllSkillTreesPostInitialize
are checked. The manager will then automatically handle loading data from the specified SaveSlotName
after initialization and will save data whenever a node's state changes.
The plugin is designed for multiplayer from the ground up.
CrimsonSkillTreeManager
.Server_RequestSkillNodeAction
) to securely ask the server to perform the action. The server validates the request before applying the change and replicating it.Many base classes in the plugin are marked as Blueprintable, meaning you can easily create a Blueprint-based child class to add your own logic without writing any C++.
Imagine you have a complex condition and want to provide a more descriptive, dynamically generated tooltip for it in the UI. You can do this by overriding a function in a Blueprint child class.
CrimsonSkillTree_ActivationCondition_AttributeRequirement
. Name your new Blueprint something like BP_MyCustomAttributeRequirementCondition
.You can also just modify the C++ code itself!
The default implementations are generic due to project specific requirements.
For advanced users, the entire system is extensible through C++. You can create new child classes in C++ from pretty much everything!
For example:
UCrimsonSkillTree_NodeEventBase
to create entirely new types of skill effects.UCrimsonSkillTree_ActivationConditionBase
to create new kinds of unlocking rules.UCrimsonSkillTreeWidget_LineDrawingPolicyBase
to create new visual styles for the connection lines.You can even override the base UCrimsonSkillTreeManager
if you need to change any logic depending on your project!