F4MP/tiltedcode/Code/client/Games/Skyrim/TESObjectREFR.h
Jous99 37b16f1547 code upload
codigo original de f4mp y tilted para referencias
2026-01-06 18:45:00 +01:00

229 lines
7.8 KiB
C++

#pragma once
#include <Games/Primitives.h>
#include <Forms/TESForm.h>
#include <NetImmerse/BSFaceGenNiNode.h>
#include "ExtraData.h"
#include <ExtraData/ExtraContainerChanges.h>
#include <Games/Animation/IAnimationGraphManagerHolder.h>
#include <Games/Misc/Lock.h>
#include <Games/Magic/MagicSystem.h>
#include <Magic/MagicCaster.h>
#include <Magic/MagicTarget.h>
#include <Structs/Inventory.h>
#include <ExtraData/ExtraDataList.h>
struct AnimationVariables;
struct TESWorldSpace;
struct TESBoundObject;
struct TESContainer;
enum class ITEM_REMOVE_REASON
{
kRemove,
kSteal,
kSelling,
kDropping,
kStoreInContainer,
kStoreInTeammate
};
struct TESObjectREFR : TESForm
{
enum ChangeFlags : uint32_t
{
CHANGE_REFR_MOVE = 1 << 1,
CHANGE_REFR_HAVOK_MOVE = 1 << 2,
CHANGE_REFR_CELL_CHANGED = 1 << 3,
CHANGE_REFR_SCALE = 1 << 4,
CHANGE_REFR_INVENTORY = 1 << 5,
CHANGE_REFR_EXTRA_OWNERSHIP = 1 << 6,
CHANGE_REFR_BASEOBJECT = 1 << 7,
CHANGE_REFR_PROMOTED = 1 << 25,
CHANGE_REFR_EXTRA_ACTIVATING_CHILDREN = 1 << 26,
CHANGE_REFR_LEVELED_INVENTORY = 1 << 27,
CHANGE_REFR_ANIMATION = 1 << 28,
CHANGE_REFR_EXTRA_ENCOUNTER_ZONE = 1 << 29,
CHANGE_REFR_EXTRA_CREATED_ONLY = 1 << 30,
CHANGE_REFR_EXTRA_GAME_ONLY = 1u << 31,
};
enum OpenState : uint8_t
{
kNone = 0,
kOpen,
kOpening,
kClosed,
kClosing,
};
static TESObjectREFR* GetByHandle(uint32_t aHandle) noexcept;
static uint32_t* GetNullHandle() noexcept;
static void GetItemFromExtraData(Inventory::Entry& arEntry, ExtraDataList* apExtraDataList) noexcept;
static ExtraDataList* GetExtraDataFromItem(const Inventory::Entry& arEntry) noexcept;
virtual void sub_3B();
virtual void sub_3C();
virtual void sub_3D();
virtual void sub_3E();
virtual void Update3DPosition(bool abWarp);
virtual void sub_40();
virtual void sub_41();
virtual void sub_42();
virtual void sub_43();
virtual void sub_44();
virtual void sub_45();
virtual void sub_46();
virtual void sub_47();
virtual void sub_48();
virtual void sub_49();
virtual void sub_4A();
virtual void sub_4B();
virtual void sub_4C();
virtual void sub_4D();
virtual void sub_4E();
virtual void StopCurrentDialogue(bool aForce);
virtual void sub_50();
virtual void sub_51();
virtual void sub_52();
virtual void sub_53();
virtual void sub_54();
virtual void sub_55();
virtual BSPointerHandle<TESObjectREFR> RemoveItem(TESBoundObject* apItem, int32_t aCount, ITEM_REMOVE_REASON aReason, ExtraDataList* apExtraList, TESObjectREFR* apMoveToRef, const NiPoint3* apDropLoc = nullptr, const NiPoint3* apRotate = nullptr);
virtual void sub_57();
virtual void sub_58();
virtual void sub_59();
virtual void AddObjectToContainer(TESBoundObject* apObj, ExtraDataList* aspExtra, int32_t aicount, TESObjectREFR* apOldContainer);
virtual void sub_5B();
virtual MagicCaster* GetMagicCaster(MagicSystem::CastingSource aeSource);
virtual MagicTarget* GetMagicTarget();
virtual void sub_5E();
virtual void sub_5F();
virtual void sub_60();
virtual BSFaceGenNiNode* GetFaceGenNiNode();
virtual void sub_62();
virtual void sub_63();
virtual void sub_64();
virtual void DetachHavok();
virtual void sub_66();
virtual void sub_67();
virtual void sub_68();
virtual void sub_69();
virtual void sub_6A();
virtual void sub_6B();
virtual void sub_6C();
virtual void sub_6D();
virtual void sub_6E();
virtual void sub_6F();
virtual NiNode* GetNiNode();
virtual void sub_71();
virtual void sub_72();
virtual NiPoint3 GetBoundMin();
virtual NiPoint3 GetBoundMax();
virtual void sub_75();
virtual void sub_76();
virtual void sub_77();
virtual void sub_78();
virtual void sub_79();
virtual void sub_7A();
virtual void sub_7B();
virtual void sub_7C();
virtual void sub_7D();
virtual void* sub_7E(bool aUnk);
virtual void sub_7F();
virtual void sub_80();
virtual void sub_81();
virtual void sub_82();
virtual void sub_83();
virtual void SetBaseForm(TESForm* apForm);
virtual void sub_85();
virtual void sub_86();
virtual void sub_87();
virtual void sub_88();
virtual void DisableImpl();
virtual void ResetInventory(bool abLeveledOnly);
virtual void sub_8B();
virtual void sub_8C();
virtual void sub_8D();
virtual void sub_8E();
virtual void sub_8F();
virtual void sub_90();
virtual void sub_91();
virtual void sub_92();
virtual void sub_93();
virtual void sub_94();
virtual void sub_95();
virtual void sub_96();
virtual struct TESObjectCELL* GetParentCell() const;
virtual void SetParentCell(struct TESObjectCELL* apParentCell);
virtual bool VirtIsDead(bool abNotEssential); // TODO: Use this or papyrus IsDead?
virtual void sub_9A();
virtual void sub_9B();
void SetRotation(float aX, float aY, float aZ) noexcept;
BSPointerHandle<TESObjectREFR> GetHandle() const noexcept;
uint32_t GetCellId() const noexcept;
TESWorldSpace* GetWorldSpace() const noexcept;
ExtraContainerChanges::Data* GetContainerChanges() const noexcept;
ExtraDataList* GetExtraDataList() noexcept;
Lock* GetLock() const noexcept;
TESContainer* GetContainer() const noexcept;
int64_t GetItemCountInInventory(TESForm* apItem) const noexcept;
TESObjectCELL* GetParentCellEx() const noexcept;
void SaveAnimationVariables(AnimationVariables& aWriter) const noexcept;
void LoadAnimationVariables(const AnimationVariables& aReader) const noexcept;
uint32_t GetAnimationVariableInt(BSFixedString* apVariableName) noexcept;
void RemoveAllItems() noexcept;
Vector<uint32_t> RemoveNonQuestItems(Inventory& aCurrentInventory) noexcept;
void Delete() const noexcept;
void Disable() const noexcept;
void Enable() const noexcept;
void MoveTo(TESObjectCELL* apCell, const NiPoint3& acPosition) const noexcept;
void PayGold(int32_t aAmount) noexcept;
void PayGoldToContainer(TESObjectREFR* pContainer, int32_t aAmount) noexcept;
bool SendAnimationEvent(BSFixedString* apEventName) noexcept;
bool Activate(TESObjectREFR* apActivator, uint8_t aUnk1, TESBoundObject* apObjectToGet, int32_t aCount, char aDefaultProcessing) noexcept;
bool PlayAnimationAndWait(BSFixedString* apAnimation, BSFixedString* apEventName) noexcept;
bool PlayAnimation(BSFixedString* apEventName) noexcept;
Lock* CreateLock() noexcept;
void LockChange() noexcept;
const float GetHeight() noexcept;
void EnableImpl() noexcept;
OpenState GetOpenState() noexcept;
Inventory GetInventory() const noexcept;
Inventory GetInventory(std::function<bool(TESForm&)> aFilter) const noexcept;
Inventory GetArmor() const noexcept;
Inventory GetWornArmor() const noexcept;
bool IsItemInInventory(uint32_t aFormID) const noexcept;
void SetInventory(const Inventory& acContainer) noexcept;
void SetInventoryRetainingQuestItems(Inventory& aCurrentInventory, const Inventory& acSourceInventory) noexcept;
void AddOrRemoveItem(const Inventory::Entry& arEntry, bool aIsSettingInventory = false) noexcept;
void UpdateItemList(TESForm* pUnkForm) noexcept;
BSHandleRefObject handleRefObject;
uintptr_t unk1C;
IAnimationGraphManagerHolder animationGraphHolder;
TESForm* baseForm; // 40 SE
NiPoint3 rotation;
NiPoint3 position;
TESObjectCELL* parentCell;
void* loadedState;
ExtraDataList extraData;
BSRecursiveLock refLock;
uint16_t scale;
uint16_t referenceFlags;
};
static_assert(sizeof(TESObjectREFR) == 0xA0);
static_assert(offsetof(TESObjectREFR, loadedState) == 0x68);