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,20 @@
#pragma once
#include "RE/F/FACTION_CRIME_DATA_VALUES.h"
namespace RE
{
class FACTION_CRIME_DATA
{
public:
// members
TESObjectREFR* factionJailMarker; // 00
TESObjectREFR* factionWaitMarker; // 08
TESObjectREFR* factionStolenContainer; // 10
TESObjectREFR* factionPlayerInventoryContainer; // 18
BGSListForm* crimeGroup; // 20
BGSOutfit* jailOutfit; // 28
FACTION_CRIME_DATA_VALUES crimeValues; // 30
};
static_assert(sizeof(FACTION_CRIME_DATA) == 0x48);
}
@@ -0,0 +1,20 @@
#pragma once
namespace RE
{
class FACTION_CRIME_DATA_VALUES
{
public:
// members
bool arrest; // 00
bool attackOnSight; // 01
std::uint16_t murderCrimeGold; // 02
std::uint16_t assaultCrimeGold; // 04
std::uint16_t trespassCrimeGold; // 06
std::uint16_t pickpocketCrimeGold; // 08
float stealCrimeGoldMult; // 0C
std::uint16_t escapeCrimeGold; // 10
std::uint16_t unused; // 12
};
static_assert(sizeof(FACTION_CRIME_DATA_VALUES) == 0x14);
}
@@ -0,0 +1,12 @@
#pragma once
namespace RE
{
class FACTION_DATA
{
public:
// members
std::uint32_t flags; // 0
};
static_assert(sizeof(FACTION_DATA) == 0x4);
}
@@ -0,0 +1,13 @@
#pragma once
namespace RE
{
class FACTION_RANK
{
public:
// members
TESFaction* faction; // 00
std::int8_t rank; // 08
};
static_assert(sizeof(FACTION_RANK) == 0x10);
}
@@ -0,0 +1,22 @@
#pragma once
#include "RE/F/FACTION_VENDOR_DATA_VALUES.h"
namespace RE
{
class PackageLocation;
class TESCondition;
class FACTION_VENDOR_DATA
{
public:
// members
FACTION_VENDOR_DATA_VALUES vendorValues; // 00
PackageLocation* vendorLocation; // 10
TESCondition* vendorConditions; // 18
BGSListForm* vendorSellBuyList; // 20
TESObjectREFR* merchantContainer; // 28
std::uint32_t lastDayReset; // 30
};
static_assert(sizeof(FACTION_VENDOR_DATA) == 0x38);
}
@@ -0,0 +1,17 @@
#pragma once
namespace RE
{
class FACTION_VENDOR_DATA_VALUES
{
public:
// members
std::uint16_t startHour; // 0
std::uint16_t endHour; // 2
std::uint32_t locationRadius; // 4
bool buysStolen; // 8
bool notBuySell; // 9
bool buysNonStolen; // A
};
static_assert(sizeof(FACTION_VENDOR_DATA_VALUES) == 0xC);
}
@@ -0,0 +1,12 @@
#pragma once
namespace RE
{
enum class FIGHT_REACTION : std::int32_t
{
kNeutral = 0x0,
kEnemy = 0x1,
kAlly = 0x2,
kFriend = 0x3
};
}
@@ -0,0 +1,14 @@
#pragma once
namespace RE
{
class FILE_HEADER
{
public:
// members
float version; // 0
std::uint32_t formCount; // 4
std::uint32_t nextFormID; // 8
};
static_assert(sizeof(FILE_HEADER) == 0xC);
}
@@ -0,0 +1,18 @@
#pragma once
namespace RE
{
class FORM
{
public:
// members
std::uint32_t form; // 00
std::uint32_t length; // 04
std::uint32_t flags; // 08
TESFormID formID; // 0C
std::uint32_t versionControl; // 10
std::uint16_t formVersion; // 14
std::uint16_t vcVersion; // 16
};
static_assert(sizeof(FORM) == 0x18);
}
@@ -0,0 +1,16 @@
#pragma once
#include "RE/E/ENUM_FORM_ID.h"
namespace RE
{
class FORM_ENUM_STRING
{
public:
// members
ENUM_FORM_ID formID; // 00
const char* formString; // 08 - "GRUP"
std::uint32_t formCode; // 10 - 'PURG'
};
static_assert(sizeof(FORM_ENUM_STRING) == 0x18);
}
@@ -0,0 +1,15 @@
#pragma once
namespace RE
{
enum class SCRIPT_OUTPUT;
class FUNCTION_DATA
{
public:
// members
REX::TEnumSet<SCRIPT_OUTPUT, std::uint16_t> function; // 00
void* param[2]; // 08
};
static_assert(sizeof(FUNCTION_DATA) == 0x18);
}
@@ -0,0 +1,15 @@
#pragma once
namespace RE
{
namespace FatmanDeaths
{
class Event
{
public:
// members
Actor* victim; // 00
};
static_assert(sizeof(Event) == 0x8);
}
}
@@ -0,0 +1,16 @@
#pragma once
namespace RE
{
namespace FavoriteMgr_Events
{
class ComponentFavoriteEvent
{
public:
// members
BGSComponent* component; // 00
bool isFavorited; // 08
};
static_assert(sizeof(ComponentFavoriteEvent) == 0x10);
}
}
@@ -0,0 +1,94 @@
#pragma once
#include "RE/B/BSInputEventSingleUser.h"
#include "RE/B/BSTArray.h"
#include "RE/B/BSTEvent.h"
#include "RE/B/BSTHashMap.h"
#include "RE/B/BSTSingleton.h"
#include "RE/N/NiPointer.h"
#include "RE/Q/QuickContainerStateEvent.h"
namespace RE
{
class QueuedFile;
namespace BGSInventoryListEvent
{
class Event;
}
namespace FavoriteMgr_Events
{
class ComponentFavoriteEvent;
}
namespace InventoryInterface
{
class FavoriteChangedEvent;
}
class __declspec(novtable) FavoritesManager :
public BSInputEventSingleUser, // 000
public BSTEventSink<BGSInventoryListEvent::Event>, // 020
public BSTEventSink<InventoryInterface::FavoriteChangedEvent>, // 028
public BSTSingletonSDM<FavoritesManager>, // 030
public BSTEventSource<FavoriteMgr_Events::ComponentFavoriteEvent> // 038
{
public:
static constexpr auto RTTI{ RTTI::FavoritesManager };
static constexpr auto VTABLE{ VTABLE::FavoritesManager };
enum class FAVORITE_SLOT
{
kLeft3 = 0x0,
kLeft2 = 0x1,
kLeft1 = 0x2,
kRight1 = 0x3,
kRight2 = 0x4,
kRight3 = 0x5,
kUp3 = 0x6,
kUp2 = 0x7,
kUp1 = 0x8,
kDown1 = 0x9,
kDown2 = 0xA,
kDown3 = 0xB
};
[[nodiscard]] static FavoritesManager* GetSingleton()
{
static REL::Relocation<FavoritesManager**> singleton{ ID::FavoritesManager::Singleton };
return *singleton;
}
[[nodiscard]] bool IsComponentFavorite(const TESBoundObject* a_component)
{
using func_t = decltype(&FavoritesManager::IsComponentFavorite);
static REL::Relocation<func_t> func{ ID::FavoritesManager::IsComponentFavorite };
return func(this, a_component);
}
[[nodiscard]] bool UseQuickkeyItem(std::uint32_t a_quickkeyIndex)
{
using func_t = decltype(&FavoritesManager::UseQuickkeyItem);
static REL::Relocation<func_t> func{ ID::FavoritesManager::UseQuickkeyItem };
return func(this, a_quickkeyIndex);
}
void ClearCurrentAmmoCount()
{
using func_t = decltype(&FavoritesManager::ClearCurrentAmmoCount);
static REL::Relocation<func_t> func{ ID::FavoritesManager::ClearCurrentAmmoCount };
return func(this);
}
// members
TESBoundObject* storedFavTypes[12]; // 090
NiPointer<QueuedFile> bufferedFavGeometries[12]; // 0F0
BSTSet<const BGSConstructibleObject*> favoriteMods; // 150
BSTHashMap<const TESBoundObject*, std::uint32_t> favoritedComponents; // 180
BSTSmallArray<std::int32_t, 12> weaponLoadedAmmo; // 1B0
BSTValueEventSink<QuickContainerStateEvent> quickContainerMode; // 1F0
bool allowStimpakUse; // 2C8
};
static_assert(sizeof(FavoritesManager) == 0x2D0);
}
@@ -0,0 +1,20 @@
#pragma once
#include "RE/P/Projectile.h"
namespace RE
{
class __declspec(novtable) FlameProjectile :
public Projectile // 000
{
public:
static constexpr auto RTTI{ RTTI::FlameProjectile };
static constexpr auto VTABLE{ VTABLE::FlameProjectile };
static constexpr auto FORM_ID{ ENUM_FORM_ID::kPFLA };
// members
float expirationTimer; // 270
float coneAngle; // 274
};
static_assert(sizeof(FlameProjectile) == 0x280);
}
@@ -0,0 +1,30 @@
#pragma once
#include "RE/B/BSFixedString.h"
#include "RE/B/BSTEvent.h"
#include "RE/B/BSTSingleton.h"
namespace RE
{
class UIAdvanceMenusFunctionCompleteEvent;
class __declspec(novtable) FlatScreenModel :
public BSTEventSink<UIAdvanceMenusFunctionCompleteEvent>, // 00
public BSTSingletonSDM<FlatScreenModel> // 08
{
public:
static constexpr auto RTTI{ RTTI::FlatScreenModel };
static constexpr auto VTABLE{ VTABLE::FlatScreenModel };
[[nodiscard]] static FlatScreenModel* GetSingleton()
{
static REL::Relocation<FlatScreenModel**> singleton{ ID::FlatScreenModel::Singleton };
return *singleton;
}
// members
BSFixedString customRendererName; // 10
void* model; // 18 - TODO
};
static_assert(sizeof(FlatScreenModel) == 0x20);
}
@@ -0,0 +1,31 @@
#pragma once
#include "RE/B/BSPointerHandle.h"
#include "RE/B/BSTArray.h"
#include "RE/N/NiPoint3.h"
#include "RE/T/TESPackage.h"
namespace RE
{
class __declspec(novtable) FleePackage :
public TESPackage // 000
{
public:
static constexpr auto RTTI{ RTTI::FleePackage };
static constexpr auto VTABLE{ VTABLE::FleePackage };
static constexpr auto FORM_ID{ ENUM_FORM_ID::kPACK };
// members
BSTArray<ObjectRefHandle> avoidRefs; // 0C8
NiPoint3 fleePoint; // 0E0
float fleeTimer; // 0EC
ObjectRefHandle teleportDoor; // 0F0
ObjectRefHandle refFleeTo; // 0F4
bool evaluatePoint; // 0F8
bool combatMode; // 0F9
bool fleeSucceeded; // 0FA
bool knowstarget; // 0FB
bool usehorse; // 0FC
};
static_assert(sizeof(FleePackage) == 0x100);
}
@@ -0,0 +1,27 @@
#pragma once
#include "RE/B/BSTPoint.h"
#include "RE/N/NiPoint3.h"
#include "RE/T/TESCameraState.h"
namespace RE
{
class __declspec(novtable) FreeCameraState :
public TESCameraState
{
public:
static constexpr auto RTTI{ RTTI::FreeCameraState };
static constexpr auto VTABLE{ VTABLE::FreeCameraState };
static constexpr auto STATE{ CameraStates::kFree };
NiPoint3 translation;
BSTPoint2<float> rotation;
BSTPoint2<float> upDown;
BSTPoint2<float> leftThumbstick;
BSTPoint2<float> rightThumbstick;
std::int16_t worldZDirection;
bool runInput;
bool lockToZPlane;
};
static_assert(sizeof(FreeCameraState) == 0x58);
}
@@ -0,0 +1,12 @@
#pragma once
namespace RE
{
class FriendshipFactionsStruct
{
public:
// members
std::uint16_t friendCounts[4]; // 0
};
static_assert(sizeof(FriendshipFactionsStruct) == 0x8);
}