#pragma once #include "RE/B/BGSInventoryItem.h" #include "RE/B/BSFixedString.h" #include "RE/B/BSTArray.h" #include "RE/B/BSTEvent.h" #include "RE/B/BSTHashMap.h" #include "RE/E/ENUM_FORM_ID.h" #include "RE/I/InventoryInterface.h" #include "RE/P/PipboyDataGroup.h" namespace RE { namespace ActorEquipManagerEvent { class Event; } namespace ActorValueEvents { class ActorValueChangedEvent; } namespace BGSInventoryItemEvent { class Event; } namespace BGSInventoryListEvent { class Event; } namespace HolotapeStateChanged { class Event; } namespace InventoryInterface { class FavoriteChangedEvent; } namespace FavoriteMgr_Events { class ComponentFavoriteEvent; } namespace PerkValueEvents { class PerkValueChangedEvent; class PerkEntryUpdatedEvent; } namespace PlayerDifficultySettingChanged { class Event; } class PipboyInventoryData : public PipboyDataGroup, // 00 public BSTEventSink, // 98 public BSTEventSink, // A0 public BSTEventSink, // A8 public BSTEventSink, // B0 public BSTEventSink, // B8 public BSTEventSink, // C0 public BSTEventSink, // C8 public BSTEventSink, // D0 public BSTEventSink, // D8 public BSTEventSink // E0 { public: static constexpr auto RTTI{ RTTI::PipboyInventoryData }; static constexpr auto VTABLE{ VTABLE::PipboyInventoryData }; virtual ~PipboyInventoryData(); enum class ENTRY_TYPE { kInt = 0x0, kFixedString = 0x1, kFloat = 0x1 }; enum class ITEM_ICON_ID { kNone = 0x1, kBasicPistol = 0x2, kLaserPistol = 0x3, kPlasmaPistol = 0x4, kShotgun = 0x5, kBasicRifle = 0x6, kAssaultRifle = 0x7, kGaussRifle = 0x8, kLaserMusket = 0x9, kLaserRifle = 0xA, kPlasmaRifle = 0xB, k1hMelee = 0xC, k2hMelee = 0xD, kH2hWeap = 0xE, kMissileLauncher = 0xF, kFatman = 0x10, kMinigun = 0x11, kGatlingLaser = 0x12, kCryolator = 0x13, kFlamer = 0x14, kFlareGun = 0x15, kGammaGun = 0x16, kJunkJet = 0x17, kRailwayRifle = 0x18, kSyringer = 0x19, kBroadsider = 0x1A, kAlienBlaster = 0x1B, kRipper = 0x1C, kShishkebab = 0x1D, kThrownWeap = 0x1E, kExplosiveMine = 0x1F, kBottlecapMine = 0x20, kCryoMine = 0x21, kCryoGrenade = 0x22, kPlasmaMine = 0x23, kPlasmaGrenade = 0x24, kPulseMine = 0x25, kPulseGrenade = 0x26, kMolotov = 0x27, kNukaGrenade = 0x28, kRepairKit = 0x29, kSurgeryKit = 0x2A, kArmor = 0x2B, kGloves = 0x2C, kHelmet = 0x2D, kBook = 0x2E, kClothes = 0x2F, kAmmo = 0x30, kAdrenaline = 0x31, kDisease = 0x32, kSleep = 0x33, kHunger = 0x34, kThirst = 0x35, kChems = 0x36, kStimpak = 0x37, kFood = 0x38, kAlcohol = 0x39, kStealthBoy = 0x3A, kUnknown = 0x3B, kMax = 0x3B }; enum class SORT_ON_FIELD { kAlphabetically = 0x0, kDamage = 0x1, kRof = 0x2, kRange = 0x3, kAccuracy = 0x4, kValue = 0x5, kWeight = 0x6 }; class StackEntry { public: // members PipboyObject* linkedObject; // 00 const InventoryInterface::Handle inventoryHandle; // 08 }; static_assert(sizeof(StackEntry) == 0x10); class ItemEntry { public: // members void* stackEntries; // 00 - BSTList }; static_assert(sizeof(ItemEntry) == 0x8); // override virtual BSEventNotifyControl ProcessEvent(const PipboyValueChangedEvent& a_event, BSTEventSource* a_source); // 01 // add virtual BSEventNotifyControl ProcessEvent(const BGSInventoryListEvent::Event& a_event, BSTEventSource* a_source); // 02 virtual BSEventNotifyControl ProcessEvent(const ActorEquipManagerEvent::Event& a_event, BSTEventSource* a_source); // 03 virtual BSEventNotifyControl ProcessEvent(const ActorValueEvents::ActorValueChangedEvent& a_event, BSTEventSource* a_source); // 04 virtual BSEventNotifyControl ProcessEvent(const PerkValueEvents::PerkEntryUpdatedEvent& a_event, BSTEventSource* a_source); // 05 virtual BSEventNotifyControl ProcessEvent(const PerkValueEvents::PerkValueChangedEvent& a_event, BSTEventSource* a_source); // 06 virtual BSEventNotifyControl ProcessEvent(const InventoryInterface::FavoriteChangedEvent& a_event, BSTEventSource* a_source); // 07 virtual BSEventNotifyControl ProcessEvent(const HolotapeStateChanged::Event& a_event, BSTEventSource* a_source); // 08 virtual BSEventNotifyControl ProcessEvent(const BGSInventoryItemEvent::Event& a_event, BSTEventSource* a_source); // 09 virtual BSEventNotifyControl ProcessEvent(const FavoriteMgr_Events::ComponentFavoriteEvent& a_event, BSTEventSource* a_source); // 0A virtual BSEventNotifyControl ProcessEvent(const PlayerDifficultySettingChanged::Event& a_event, BSTEventSource* a_source); // 0B virtual void Populate(bool a_arg1); // 0C virtual void DoClearData(); // 0D virtual void DoClearSink(); // 0E void AddItemCardInfoEntry(const BSFixedStringCS* a_string, float a_value, PipboyArray* a_itemCardSection) { using func_t = decltype(&PipboyInventoryData::AddItemCardInfoEntry); static REL::Relocation func{ ID::PipboyInventoryData::AddItemCardInfoEntry }; return func(this, a_string, a_value, a_itemCardSection); } PipboyObject* BaseAddItemCardInfoEntry(const BSFixedStringCS* a_string, PipboyArray* a_itemCardSection) { using func_t = decltype(&PipboyInventoryData::BaseAddItemCardInfoEntry); static REL::Relocation func{ ID::PipboyInventoryData::BaseAddItemCardInfoEntry }; return func(this, a_string, a_itemCardSection); } void PopulateItemCardInfo(const BGSInventoryItem* a_inventoryItem, const BGSInventoryItem::Stack* a_stack, PipboyObject* a_data) { using func_t = decltype(&PipboyInventoryData::PopulateItemCardInfo); static REL::Relocation func{ ID::PipboyInventoryData::PopulateItemCardInfo }; return func(this, a_inventoryItem, a_stack, a_data); } void QueueItemCardRepopulate(ENUM_FORM_ID a_formType) { using func_t = decltype(&PipboyInventoryData::QueueItemCardRepopulate); static REL::Relocation func{ ID::PipboyInventoryData::QueueItemCardRepopulate }; return func(this, a_formType); } void RepopulateItemCardOnSection(ENUM_FORM_ID a_itemTypeID) { using func_t = decltype(&PipboyInventoryData::RepopulateItemCardOnSection); static REL::Relocation func{ ID::PipboyInventoryData::RepopulateItemCardOnSection }; return func(this, a_itemTypeID); } // members PipboyObject* inventoryObject; // E8 BSTHashMap itemEntries; // F0 BSTHashMap invComponents; // 120 BSTArray sortedItems; // 150 BSTSet queuedRepopulateCategories; // 168 }; static_assert(sizeof(PipboyInventoryData) == 0x198); }