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,81 @@
#pragma once
#include "RE/B/BSSpinLock.h"
#include "RE/B/BSTArray.h"
#include "RE/B/BSTEvent.h"
#include "RE/B/BSTSingleton.h"
#include "RE/B/BSTSmartPointer.h"
#include "RE/N/NiPointer.h"
namespace RE
{
class BSLight;
class ProjectileBeginUpdateEvent;
class TESDeathEvent;
class TESHitEvent;
class VATSCameraContext;
class VATSCommand;
class WeaponFiredEvent;
class __declspec(novtable) VATS :
public BSTEventSink<WeaponFiredEvent>, // 00
public BSTEventSink<ProjectileBeginUpdateEvent>, // 08
public BSTEventSink<TESHitEvent>, // 10
public BSTEventSink<TESDeathEvent>, // 18
public BSTSingletonSDM<VATS> // 20
{
public:
static constexpr auto RTTI{ RTTI::VATS };
static constexpr auto VTABLE{ VTABLE::VATS };
enum class VATS_MODE_ENUM
{
kNone = 0x0,
kPlayback = 0x1
};
virtual ~VATS(); // 00
// override
virtual BSEventNotifyControl ProcessEvent(const WeaponFiredEvent& a_event, BSTEventSource<WeaponFiredEvent>* a_source) override; // 01
virtual BSEventNotifyControl ProcessEvent(const ProjectileBeginUpdateEvent& a_event, BSTEventSource<ProjectileBeginUpdateEvent>* a_source) override; // 02
virtual BSEventNotifyControl ProcessEvent(const TESHitEvent& a_event, BSTEventSource<TESHitEvent>* a_source) override; // 03
virtual BSEventNotifyControl ProcessEvent(const TESDeathEvent& a_event, BSTEventSource<TESDeathEvent>* a_source) override; // 04
[[nodiscard]] static VATS* GetSingleton()
{
static REL::Relocation<VATS**> singleton{ ID::VATS::Singleton };
return *singleton;
}
// members
BSTArray<BSTSmartPointer<VATSCommand>> commands; // 28
REX::TEnumSet<VATS_MODE_ENUM, std::uint32_t> mode; // 40
VATSCameraContext* cameraContext; // 48
float castingAfterKillDelay; // 50
NiPointer<Projectile> firstProjectile; // 58
NiPointer<Projectile> lastProjectile; // 60
float fakeShotCounter; // 68
TESIdleForm* meleeAttack; // 70
NiPointer<BSLight> VATSLight; // 78
std::int32_t killCount; // 80
float magicTimeSlowdown; // 84
float playerMagicTimeSlowdown; // 88
NiPointer<TESObjectREFR> VATSTarget; // 90
NiPointer<Actor> VATSAttacker; // 98
NiPointer<Actor> stranger; // A0
NiPointer<Projectile> predictionProjectile; // A8
BSTSmartPointer<VATSCommand> reloadCommand; // B0
BSTSmartPointer<VATSCommand> sightedCommand; // B8
float VATSPlaybackTimer; // C0
float VATSCommandTimer; // C4
bool projectileNearTarget; // C8
bool applyCritical; // C9
bool firstAttackExecuted; // CA
bool firstAttackFired; // CB
bool readyForShutdown; // CC
bool wantsStranger; // CD
BSSpinLock spinLock; // D0
};
static_assert(sizeof(VATS) == 0xD8);
}
@@ -0,0 +1,55 @@
#pragma once
#include "RE/A/ActionPoints.h"
#include "RE/B/BGSBodyPartDefs.h"
#include "RE/B/BSIntrusiveRefCounted.h"
#include "RE/B/BSPointerHandle.h"
#include "RE/H/HitData.h"
#include "RE/N/NiAVObject.h"
#include "RE/N/NiPointer.h"
namespace RE
{
class SpellItem;
class VATSCommand :
public BSIntrusiveRefCounted // 000
{
public:
// members
ActionPoints::Action action; // 004
ObjectRefHandle target; // 008
REX::TEnumSet<BGSBodyPartDefs::LIMB_ENUM, std::uint32_t> limb; // 00C
NiPointer<NiAVObject> aimAtObj; // 010
HitData hitdata; // 20
SpellItem* meleeImpactEffect; // 100
float actionPointCost; // 108
float minActionTime; // 10C
float actionExecuteDelay; // 110
float fakeShotFrequency; // 114
float damageMult; //118
std::uint32_t loadedAmmoCount; // 11C
std::uint8_t fireShots; // 120
struct
{
std::uint8_t stranger: 1;
std::uint8_t paralyzingPalm: 1;
std::uint8_t leftHandCast: 1;
std::uint8_t executeAction: 1;
std::uint8_t actionExecuteSuccess: 1;
std::uint8_t nextShotCausesCritical: 1;
std::uint8_t spendCriticalCharge: 1;
std::uint8_t attackChanceHit: 1;
} flags1; // 121
struct
{
std::uint8_t shotFired: 1;
std::uint8_t criticalAttack: 1;
std::uint8_t syncedAnim: 1;
std::uint8_t attemptChain: 1;
std::uint8_t allowWarp: 1;
std::uint8_t meleeSneakAttack: 1;
} flags2; // 122
};
static_assert(sizeof(VATSCommand) == 0x130);
}
@@ -0,0 +1,18 @@
#pragma once
#include "RE/V/VATS.h"
namespace RE
{
namespace VATSEvents
{
class ModeChange
{
public:
// members
VATS::VATS_MODE_ENUM oldMode; // 00
VATS::VATS_MODE_ENUM newMode; // 04
};
static_assert(sizeof(ModeChange) == 0x8);
}
}
@@ -0,0 +1,12 @@
#pragma once
namespace RE
{
class VOICE_TYPE_DATA
{
public:
// members
std::int8_t flags;
};
static_assert(sizeof(VOICE_TYPE_DATA) == 0x1);
}