docs: add plugin setup guide
This commit is contained in:
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user