docs: add plugin setup guide

This commit is contained in:
2026-05-30 18:33:24 +12:00
parent f3db41c402
commit b61043a3fe
1776 changed files with 122386 additions and 2 deletions
+162
View File
@@ -0,0 +1,162 @@
#pragma once
#include "RE/B/BSContainer.h"
#include "RE/B/BSSimpleList.h"
#include "RE/B/BSTArray.h"
#include "RE/B/BSTEvent.h"
#include "RE/B/BSTTuple.h"
#include "RE/N/NiPointer.h"
namespace RE
{
class GridCellArray;
class GridDistantArray;
class ImageSpaceModifierInstance;
class LoadedAreaBound;
class NavMeshInfoMap;
class NiAVObject;
class NiDirectionalLight;
class NiFogProperty;
class NiNode;
class NiPoint3;
class NiTexture;
class PositionPlayerEvent;
class QueuedFile;
class Sky;
class TESObjectCELL;
class TESObjectREFR;
class TESRegion;
class TESWorldSpace;
namespace BSResource::Archive2
{
class StreamOpenedEvent;
}
class TES :
public BSTEventSink<BSResource::Archive2::StreamOpenedEvent>, // 000
public BSTEventSink<PositionPlayerEvent> // 008
{
public:
static constexpr auto RTTI{ RTTI::TES };
static constexpr auto VTABLE{ VTABLE::TES };
using TACCallbackFunc_t = void(TESObjectCELL*, void*, void*);
enum class PICKWORLD_NODE
{
kActors = 0x1,
kMarkers = 0x2,
kLand = 0x4,
kStatic = 0x8,
kActive = 0x10,
kAll = 0x1F,
};
enum class TACMode
{
kAll = 0x0,
kMainWorldOnly = 0x1,
kOtherWorldsOnly = 0x2,
kInteriorsOnly = 0x3,
kSpecifiedWorldOnly = 0x4
};
enum class TAC_CONTROL : std::uint32_t
{
kStop = 0xFFFFFFFF,
kContinue = 0x0,
kAllStandard = 0x1,
kInteriorsStandard = 0x2,
kStartInCurrentCell = 0x3,
kAllSaves = 0x4,
kAllSavesAfterChangingObjects = 0x5,
kAllRenderTest = 0x6,
kInteriorsRenderTest = 0x7,
kRegionFilter = 0x8,
kAllFileUsage = 0x9,
kAllGraphicsTest = 0xA,
kAllGraphicsTestLimited = 0xB
};
class ParticleObjectCache
{
public:
// members
NiPointer<NiAVObject> model; // 00
NiPointer<NiAVObject>* clones; // 08
ParticleObjectCache* next; // 10
};
static_assert(sizeof(ParticleObjectCache) == 0x18);
virtual ~TES(); // 00
// override (BSTEventSink<BSResource::ArchiveStreamOpenedEvent>)
BSEventNotifyControl ProcessEvent(const BSResource::Archive2::StreamOpenedEvent& a_event, BSTEventSource<BSResource::Archive2::StreamOpenedEvent>* a_eventSource) override; // 01 - { return BSEventNotifyControl::kContinue; }
// override (BSTEventSink<PositionPlayerEvent>)
BSEventNotifyControl ProcessEvent(const PositionPlayerEvent& a_event, BSTEventSource<PositionPlayerEvent>* a_eventSource) override; // 01
[[nodiscard]] static TES* GetSingleton()
{
static REL::Relocation<TES**> singleton{ ID::TES::Singleton };
return *singleton;
}
void ForEachReference(std::function<BSContainer::ForEachResult(TESObjectREFR* a_ref)> a_callback);
void ForEachReferenceInRange(const NiPoint3& a_origin, const float a_radius, std::function<BSContainer::ForEachResult(TESObjectREFR* a_ref)> a_callback);
void ForEachReferenceInRange(const TESObjectREFR* a_ref, const float a_radius, std::function<BSContainer::ForEachResult(TESObjectREFR* a_ref)> a_callback);
// members
GridDistantArray* gridDistant; // 010
GridCellArray* gridCells; // 018
NiNode* objRoot; // 020
NiNode* lodLandRoot; // 028
NiNode* objLODWaterRoot; // 030
NiDirectionalLight* objLight; // 038
NiFogProperty* objFog; // 040
std::int32_t currentGridX; // 044
std::int32_t currentGridY; // 048
std::int32_t currentQueuedX; // 04C
std::int32_t currentQueuedY; // 050
TESObjectCELL* interiorCell; // 058
TESObjectCELL** interiorBuffer; // 060
TESObjectCELL** exteriorBuffer; // 068
std::uint32_t tempInteriorBufferSize; // 070
std::uint32_t tempExteriorBufferSize; // 074
std::int32_t saveGridX; // 078
std::int32_t saveGridY; // 07C
TACCallbackFunc_t* tacCallbackFunc; // 080
void* tacCallbackData; // 088
TESRegion* tacRegionFilter; // 090
Sky* sky; // 098
BSSimpleList<NiPointer<ImageSpaceModifierInstance>> activeImageSpaceModifiers; // 0A0
std::uint32_t totalToLoad; // 0B0
std::uint32_t loaded; // 0B4
std::uint64_t cellCaptureStartTime; // 0B8
bool disablePercentageUpdate; // 0C0
bool showLANDborders; // 0C1
bool fadeWhenLoading; // 0C2
bool forceUpdateMultiBoundExterior; // 0C3
bool collisionBoxes; // 0C4
bool runningCellTests; // 0C5
bool runningCellTests2; // 0C6
bool runningGraphicsTests; // 0C7
bool runningCellListGraphicsTests; // 0C8
bool runningSubmergedObjectTest; // 0C9
bool allowUnusedPurge; // 0CA
float cellDeltaX; // 0D0
float cellDeltaY; // 0D4
TESWorldSpace* worldSpace; // 0D8
BSTArray<BSTTuple<TESActorBase*, std::uint16_t>> deadCount; // 0E0
NiPointer<QueuedFile> preloadedAddonNodes; // 0F8
NiPointer<NiTexture> bloodDecalPreload1; // 100
NiPointer<QueuedFile> preloadedForms; // 108
NiPointer<QueuedFile> preloadedDefaultModels; // 110
ParticleObjectCache* particleCacheHead; // 118
std::uint32_t placeableWaterCount; // 120
NavMeshInfoMap* navMeshInfoMap; // 128
NiPointer<LoadedAreaBound> loadedAreaBound; // 130
};
static_assert(sizeof(TES) == 0x138);
}