2#include <unordered_set>
14 RE::ActorValue::kOneHanded, RE::ActorValue::kTwoHanded, RE::ActorValue::kArchery,
15 RE::ActorValue::kBlock, RE::ActorValue::kSmithing, RE::ActorValue::kHeavyArmor,
16 RE::ActorValue::kLightArmor, RE::ActorValue::kPickpocket, RE::ActorValue::kLockpicking,
17 RE::ActorValue::kSneak, RE::ActorValue::kAlchemy, RE::ActorValue::kSpeech,
18 RE::ActorValue::kAlteration, RE::ActorValue::kConjuration, RE::ActorValue::kDestruction,
19 RE::ActorValue::kIllusion, RE::ActorValue::kRestoration, RE::ActorValue::kEnchanting};
25 static void TraversePerkNode(RE::BGSSkillPerkTreeNode* node, std::unordered_set<RE::BGSPerk*>& set_out,
26 std::unordered_set<RE::BGSSkillPerkTreeNode*>& visited)
28 if (!node || !visited.insert(node).second)
33 set_out.insert(node->perk);
36 for (
auto* child : node->children)
48 std::unordered_set<RE::BGSPerk*> out;
52 std::unordered_set<RE::BGSSkillPerkTreeNode*> visited;
53 if (
const auto avif = RE::ActorValueList::GetActorValueInfo(av); avif && avif->perkTree)
79 RE::ActorValue::kOneHanded, RE::ActorValue::kTwoHanded, RE::ActorValue::kHeavyArmor,
80 RE::ActorValue::kArchery, RE::ActorValue::kSmithing, RE::ActorValue::kBlock};
82 RE::ActorValue::kSpeech, RE::ActorValue::kAlchemy, RE::ActorValue::kLockpicking,
83 RE::ActorValue::kSneak, RE::ActorValue::kPickpocket, RE::ActorValue::kLightArmor};
84 static constexpr std::array<RE::ActorValue, 6>
kMageSkills = {
85 RE::ActorValue::kAlteration, RE::ActorValue::kConjuration, RE::ActorValue::kDestruction,
86 RE::ActorValue::kIllusion, RE::ActorValue::kEnchanting, RE::ActorValue::kRestoration};
88 static std::unordered_set<RE::BGSPerk*>
GetPerksForSkills(std::span<const RE::ActorValue> skills)
90 std::unordered_set<RE::BGSPerk*> out;
91 std::unordered_set<RE::BGSSkillPerkTreeNode*> visited;
93 for (
const auto av : skills)
95 if (
const auto avif = RE::ActorValueList::GetActorValueInfo(av); avif && avif->perkTree)
static std::unordered_set< RE::BGSPerk * > GetPerksForSkill(RE::ActorValue av)
Gets an unordered_set of all the perks from a given skill early return if skill is not part of Styy...
Definition st-perks.h:46
static std::unordered_set< RE::BGSPerk * > GetPerksForSkills(std::span< const RE::ActorValue > skills)
Definition st-perks.h:88
static std::unordered_set< RE::BGSPerk * > GetAllWarriorPerks()
Gets all perks belonging to warrior skills (One-Handed, Two-Handed, Archery, Block,...
Definition st-perks.h:75
static constexpr std::array< RE::ActorValue, 6 > kWarriorSkills
Definition st-perks.h:78
static constexpr std::array< RE::ActorValue, 6 > kMageSkills
Definition st-perks.h:84
static std::unordered_set< RE::BGSPerk * > GetAllPlayablePerks()
Definition st-perks.h:60
static void TraversePerkNode(RE::BGSSkillPerkTreeNode *node, std::unordered_set< RE::BGSPerk * > &set_out, std::unordered_set< RE::BGSSkillPerkTreeNode * > &visited)
recursively look through the perk tree nodes in an AVIF
Definition st-perks.h:25
static constexpr std::array< RE::ActorValue, 18 > kPlayableSkills
array of all skill relevant for the stats menu. Does not take any custom skill or the likes into acco...
Definition st-perks.h:13
static constexpr std::array< RE::ActorValue, 6 > kThiefSkills
Definition st-perks.h:81
static std::unordered_set< RE::BGSPerk * > GetAllThiefPerks()
Gets all perks belonging to thief skills (Pickpocket, Lockpicking, Light Armor, Alchemy,...
Definition st-perks.h:70
static std::unordered_set< RE::BGSPerk * > GetAllMagicPerks()
Gets all perks belonging to magic skills (Alteration, Conjuration, Destruction, Illusion,...
Definition st-perks.h:65