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
@@ -0,0 +1,83 @@
#pragma once
#include "RE/B/BSFixedString.h"
#include "RE/B/BSStreamHeader.h"
#include "RE/B/BSTArray.h"
#include "RE/N/NiPointer.h"
#include "RE/N/NiTArray.h"
#include "RE/N/NiTLargeArray.h"
#include "RE/N/NiTPointerMap.h"
namespace RE
{
class NiBinaryStream;
class NiObject;
class NiObjectGroup;
class NiSearchPath;
class __declspec(novtable) NiStream
{
public:
static constexpr auto RTTI{ RTTI::NiStream };
static constexpr auto VTABLE{ VTABLE::NiStream };
virtual ~NiStream(); // 00
// add
bool Load(NiBinaryStream* a_istr); // 01
bool Load(char* a_buffer, std::uint64_t a_bufferSize); // 02
bool Load(const char* a_fileName); // 03
bool Save(NiBinaryStream* a_ostr); // 04
bool Save(char*& a_buffer, std::uint64_t& a_bufferSize); // 05
bool Save(const char* a_fileName); // 06
bool RegisterFixedString(const BSFixedString& a_string); // 07
bool RegisterSaveObject(NiObject* a_object); // 08
void ChangeObject(NiObject* a_newObject); // 09
std::uint32_t GetLinkIDFromObject(const NiObject* a_object) const; // 0A
void SaveLinkID(const NiObject* a_object); // 0B
bool LoadHeader(); // 0C
void SaveHeader(); // 0D
bool LoadStream(); // 0E
bool SaveStream(); // 0F
void RegisterObjects(); // 10
void LoadTopLevelObjects(); // 11
void SaveTopLevelObjects(); // 12
bool LoadObject(); // 13
std::uint64_t PreSaveObjectSizeTable(); // 14
bool SaveObjectSizeTable(std::uint64_t a_startOffset); // 15
bool LoadObjectSizeTable(); // 16
[[nodiscard]] std::string_view GetFileName() const { return fileName; }
// members
BSStreamHeader bsStreamHeader; // 008
BSTSmallArray<NiObjectGroup*, 4> groups; // 1D0
std::uint32_t nifFileVersion; // 200
std::uint32_t nifFileUserDefinedVersion; // 204
char fileName[260]; // 208
bool saveLittleEndian; // 30C
bool sourceIsLittleEndian; // 30D
NiSearchPath* searchPath; // 310
NiTLargeObjectArray<NiPointer<NiObject>> objects; // 318
NiTLargePrimitiveArray<std::uint32_t> objectSizes; // 338
NiTLargeObjectArray<NiPointer<NiObject>> topObjects; // 358
NiTLargeObjectArray<BSFixedString> fixedStrings; // 378
NiBinaryStream* istr; // 398
NiBinaryStream* ostr; // 3A0
std::uint32_t linkIndex; // 3A8
std::uint32_t linkBlockIndex; // 3AC
NiTPointerMap<const NiObject*, std::uint32_t> registerMap; // 3B0
std::uint16_t niAVObjectFlags; // 3D0
std::uint16_t niTimeControllerFlags; // 3D2
std::uint16_t niPropertyFlags; // 3D4
std::uint16_t streamFlags; // 3D6
std::uint32_t load; // 3D8
std::uint32_t link; // 3DC
std::uint32_t postLink; // 3E0
char lastLoadedRTTI[260]; // 3E4
std::uint32_t lastError; // 4E8
char lastErrorMessage[260]; // 4EC
char filePath[260]; // 5F0
};
static_assert(sizeof(NiStream) == 0x6F8);
}