#pragma once #include "RE/B/BGSStoryManagerTreeForm.h" #include "RE/B/BSFixedString.h" #include "RE/B/BSPointerHandle.h" #include "RE/B/BSSpinLock.h" #include "RE/B/BSStringT.h" #include "RE/B/BSTArray.h" #include "RE/B/BSTHashMap.h" #include "RE/B/BSTSmallIndexScatterTable.h" #include "RE/B/BSTTuple.h" #include "RE/N/NiPointer.h" #include "RE/Q/QUEST_DATA.h" #include "RE/T/TESCondition.h" #include "RE/T/TESFullName.h" namespace RE { class BGSBaseAlias; class BGSQuestInstanceText; class BGSQuestObjective; class BGSStoryEvent; class QueuedPromoteQuestTask; class TESQuestStage; class __declspec(novtable) TESQuest : public BGSStoryManagerTreeForm, // 000 public TESFullName // 028 { public: static constexpr auto RTTI{ RTTI::TESQuest }; static constexpr auto VTABLE{ VTABLE::TESQuest }; static constexpr auto FORM_ID{ ENUM_FORM_ID::kQUST }; class AliasesAccess; class ListObjectivesAccess; class ListStagesAccess; bool SetStage(std::uint16_t a_stage) { using func_t = decltype(&TESQuest::SetStage); static REL::Relocation func{ ID::TESQuest::SetStage }; return func(this, a_stage); } ObjectRefHandle* GetAliasedRef(ObjectRefHandle* a_result, std::uint32_t a_aiAliasID) { using func_t = decltype(&TESQuest::GetAliasedRef); static REL::Relocation func{ ID::TESQuest::GetAliasedRef }; return func(this, a_result, a_aiAliasID); } // members BSTArray instanceData; // 038 std::uint32_t currentInstanceID; // 050 BSTArray> fileOffsets; // 058 BSTArray aliases; // 070 BSTHashMap aliasedLocMap; // 088 BSTArray> aliasedHandles; // 0B8 BSReadWriteLock aliasAccessLock; // 0D0 BGSLocation* nonDormantLocation; // 0D8 TESGlobal* questCompleteXPGlobal; // 0E0 BSFixedString swfFile; // 0E8 QUEST_DATA data; // 0F0 std::uint32_t eventID; // 0F8 BSTArray stages; // 100 BSTArray objectives; // 118 BSTSmallIndexScatterTable, ListStagesAccess> stageTable; // 130 BSTSmallIndexScatterTable, ListObjectivesAccess> objectiveTable; // 150 BSTSmallIndexScatterTable, AliasesAccess> aliasesTable; // 170 TESCondition objConditions; // 190 TESCondition storyManagerConditions; // 198 BSTHashMap*> branchedDialogues[2]; // 1A0 BSTArray topics[6]; // 200 BSTArray scenes; // 290 BSTArray* textGlobal; // 2A8 std::uint32_t totalRefsAliased; // 2B0 std::uint16_t currentStage; // 2B4 bool alreadyRun; // 2B6 BSString formEditorID; // 2B8 const BGSStoryEvent* startEventData; // 2C8 NiPointer promoteTask; // 2D0 BSTArray promotedRefsArray; // 2D8 }; static_assert(sizeof(TESQuest) == 0x2F0); }