#pragma once #include "RE/B/BGSTypedFormValuePair.h" #include "RE/B/BSTArray.h" #include "RE/B/BSTTuple.h" #include "RE/B/BaseFormComponent.h" namespace RE { enum class ENUM_FORM_ID; class CALCED_OBJECT; class ContainerItemExtra; class LEVELED_OBJECT; class INSTANCE_FILTER; class __declspec(novtable) TESLeveledList : public BaseFormComponent // 00 { public: static constexpr auto RTTI{ RTTI::TESLeveledList }; static constexpr auto VTABLE{ VTABLE::TESLeveledList }; enum class LeveledListAllBelowForce { kNever = -1, kDefault = 0, kAlways = 1, kShiftUp = 2, }; // add virtual std::int8_t GetChanceNone(); // 07 virtual bool GetMultCalc(); // 08 virtual std::int32_t GetMaxLevelDifference() { return 0; } // 09 virtual const char* GetOverrideName() { return nullptr; } // 0A virtual bool GetCanContainFormsOfType(ENUM_FORM_ID a_type) const = 0; // 0B LEVELED_OBJECT* AddLeveledObject(std::uint16_t a_level, std::uint16_t a_count, std::int8_t a_chanceNone, TESForm* a_item, ContainerItemExtra* a_itemExtra) { using func_t = decltype(&TESLeveledList::AddLeveledObject); static REL::Relocation func{ ID::TESLeveledList::AddLeveledObject }; return func(this, a_level, a_count, a_chanceNone, a_item, a_itemExtra); } void CalculateCurrentFormList( std::uint16_t a_level, std::uint16_t a_count, BSScrapArray& a_outCont, LeveledListAllBelowForce a_allBelowForce = LeveledListAllBelowForce::kDefault, bool a_clampToPlayer = false, INSTANCE_FILTER* a_instanceFilter = nullptr, const char* a_overrideName = nullptr) { using func_t = decltype(&TESLeveledList::CalculateCurrentFormList); static REL::Relocation func{ ID::TESLeveledList::CalculateCurrentFormList }; return func(this, a_level, a_count, a_outCont, a_allBelowForce, a_clampToPlayer, a_instanceFilter, a_overrideName); } void CalculateCurrentFormListForRef(TESObjectREFR* a_ref, BSScrapArray& a_outCont, bool a_legendary) { using func_t = decltype(&TESLeveledList::CalculateCurrentFormListForRef); static REL::Relocation func{ ID::TESLeveledList::CalculateCurrentFormListForRef }; return func(this, a_ref, a_outCont, a_legendary); } bool GetUseAll() { using func_t = decltype(&TESLeveledList::GetUseAll); static REL::Relocation func{ ID::TESLeveledList::GetUseAll }; return func(this); } // members TESGlobal* chanceGlobal; // 08 BSTArray>* keywordChances; // 10 LEVELED_OBJECT* leveledLists; // 18 LEVELED_OBJECT** scriptAddedLists; // 20 std::int8_t scriptListCount; // 28 std::int8_t baseListCount; // 29 std::int8_t chanceNone; // 2A std::int8_t llFlags; // 2B std::int8_t maxUseAllCount; // 2C }; static_assert(sizeof(TESLeveledList) == 0x30); }