docs: add plugin setup guide
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
#pragma once
|
||||
|
||||
#include "RE/B/BGSMod.h"
|
||||
#include "RE/B/BGSPreviewTransform.h"
|
||||
#include "RE/B/BGSSoundTagComponent.h"
|
||||
#include "RE/B/BSFixedString.h"
|
||||
#include "RE/B/BSTSmartPointer.h"
|
||||
#include "RE/N/NiNPShortPoint3.h"
|
||||
#include "RE/N/NiPointer.h"
|
||||
#include "RE/T/TBO_InstanceData.h"
|
||||
#include "RE/T/TESObject.h"
|
||||
|
||||
namespace RE
|
||||
{
|
||||
enum class COMMAND_REFUSAL_TYPE;
|
||||
class BGSObjectInstanceExtra;
|
||||
|
||||
class __declspec(novtable) TESBoundObject :
|
||||
public TESObject // 00
|
||||
{
|
||||
public:
|
||||
static constexpr auto RTTI{ RTTI::TESBoundObject };
|
||||
static constexpr auto VTABLE{ VTABLE::TESBoundObject };
|
||||
static constexpr auto FORM_ID{ ENUM_FORM_ID::kNONE };
|
||||
|
||||
class BOUND_DATA
|
||||
{
|
||||
public:
|
||||
// members
|
||||
NiNPShortPoint3 boundMin; // 00
|
||||
NiNPShortPoint3 boundMax; // 06
|
||||
};
|
||||
static_assert(sizeof(BOUND_DATA) == 0xC);
|
||||
|
||||
// add
|
||||
virtual TBO_InstanceData* CreateInstanceData(const TBO_InstanceData*) const { return nullptr; } // 56
|
||||
virtual const TBO_InstanceData* GetBaseInstanceData() const { return nullptr; } // 57
|
||||
virtual bool GetAttachedMarkersVisible(NiAVObject*) const { return false; } // 58
|
||||
virtual void SetAttachedMarkersVisible(NiAVObject*, bool) const { return; } // 59
|
||||
virtual bool QSupportsCountPerInstance() const { return false; } // 5A
|
||||
virtual void SetObjectVoiceType(BGSVoiceType*) { return; } // 5B
|
||||
virtual BGSVoiceType* GetObjectVoiceType() const { return nullptr; } // 5C
|
||||
virtual BGSSoundDescriptorForm* GetSoundForTag(const BSFixedString& a_tag) const; // 5D
|
||||
virtual void Clone3D(TESObjectREFR* a_requester, NiPointer<NiAVObject>& a_obj3D) { TESObject::Clone3D(a_requester, a_obj3D, false); } // 5E
|
||||
virtual bool ReplaceModel(const char* a_filename); // 5F
|
||||
virtual bool GetActivateText(TESObjectREFR* a_itemActivated, BSString& a_resultString); // 60
|
||||
virtual COMMAND_REFUSAL_TYPE CalculateDoFavor(Actor* a_actor, bool a_owned, TESObjectREFR*, float a_moralityMult) const; // 61
|
||||
virtual void HandleRemoveItemFromContainer(TESObjectREFR*) { return; } // 62
|
||||
virtual void OnRemove3D(NiAVObject*) { return; } // 63
|
||||
virtual void OnCheckModels() { return; } // 64
|
||||
virtual void OnCopyReference() { return; } // 65
|
||||
virtual void OnFinishScale() { return; } // 66
|
||||
|
||||
void ApplyMods(BSTSmartPointer<TBO_InstanceData>& a_dest, const BGSObjectInstanceExtra* a_extra) const
|
||||
{
|
||||
using func_t = decltype(&TESBoundObject::ApplyMods);
|
||||
static REL::Relocation<func_t> func{ ID::TESBoundObject::ApplyMods };
|
||||
return func(this, a_dest, a_extra);
|
||||
}
|
||||
|
||||
// members
|
||||
BOUND_DATA boundData; // 20
|
||||
BGSMod::Template::Items objectTemplate; // 30
|
||||
BGSPreviewTransform previewTransform; // 50
|
||||
BGSSoundTagComponent soundTagComponent; // 60
|
||||
};
|
||||
static_assert(sizeof(TESBoundObject) == 0x68);
|
||||
}
|
||||
Reference in New Issue
Block a user