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,89 @@
#pragma once
#include "RE/B/BGSKeywordForm.h"
#include "RE/B/BSTArray.h"
#include "RE/B/BSTSmartPointer.h"
#include "RE/T/TESBoundObject.h"
#include "RE/T/TESFullName.h"
namespace RE
{
class QueuedFile;
namespace MagicSystem
{
enum class CastingType;
enum class Delivery;
enum class SpellType;
}
class __declspec(novtable) MagicItem :
public TESBoundObject, // 00
public TESFullName, // 68
public BGSKeywordForm // 70
{
public:
static constexpr auto RTTI{ RTTI::MagicItem };
static constexpr auto VTABLE{ VTABLE::MagicItem };
static constexpr auto FORM_ID{ ENUM_FORM_ID::kNONE };
class SkillUsageData
{
public:
// members
EffectItem* effect; // 00
ActorValueInfo* skill; // 08
float magnitude; // 10
bool custom; // 14
};
static_assert(sizeof(SkillUsageData) == 0x18);
class Data
{
public:
// members
std::int32_t costOverride; // 0
std::uint32_t flags; // 4
};
static_assert(sizeof(Data) == 0x8);
// add
virtual MagicSystem::SpellType GetSpellType() const = 0; // 67
virtual void SetCastingType([[maybe_unused]] MagicSystem::CastingType a_castingType) { return; } // 68
virtual MagicSystem::CastingType GetCastingType() const = 0; // 69
virtual void SetDelivery([[maybe_unused]] MagicSystem::Delivery a_delivery) { return; } // 6A
virtual MagicSystem::Delivery GetDelivery() const = 0; // 6B
virtual bool IsValidDelivery(MagicSystem::Delivery) { return true; } // 6C
virtual float GetFixedCastDuration() const { return 0.0F; } // 6D
virtual float GetRange() const { return 0.0F; } // 6E
virtual bool IgnoreResistance() const { return false; } // 6F
virtual bool IgnoreLOS() const { return false; } // 70
virtual bool IsFood() const { return false; } // 71
virtual bool GetNoAbsorb() const { return false; } // 72
virtual bool GetNoDualCastModifications() const { return false; } // 73
virtual bool GetSkillUsageData([[maybe_unused]] SkillUsageData& a_data) const { return false; } // 74
virtual bool IsPoison() const; // 75
virtual bool IsMedicine() const { return false; } // 76
virtual void AdjustCost(float&, Actor*) const { return; } // 77
virtual float GetChargeTime() const { return 0.0F; } // 78
virtual std::uint32_t GetMaxEffectCount() const { return 0; } // 79
virtual ActorValueInfo* GetAssociatedSkill() const { return nullptr; } // 7A
virtual bool IsTwoHanded() const { return false; } // 7B
virtual CHUNK_ID GetChunkID() = 0; // 7C
virtual void CopyMagicItemData(MagicItem* a_copy) = 0; // 7D
virtual void LoadMagicItemChunk([[maybe_unused]] TESFile* a_file, [[maybe_unused]] CHUNK_ID a_chunkID) { return; } // 7E
virtual void LoadChunkDataPostProcess([[maybe_unused]] TESFile* a_file) { return; } // 7F
virtual Data* GetData() = 0; // 81
virtual const Data* GetData() const = 0; // 80
virtual std::size_t GetDataSize() const = 0; // 82
virtual void InitFromChunk(TESFile* a_file) = 0; // 83
// members
BSTArray<EffectItem*> listOfEffects; // 98
std::int32_t hostileCount; // B0
EffectSetting* avEffectSetting; // B8
std::uint32_t preloadCount; // C0
BSTSmartPointer<QueuedFile, BSTSmartPointerGamebryoRefCount> preloadedItem; // C8
};
static_assert(sizeof(MagicItem) == 0xD0);
}