Files
Commonwealth-Online-Public/plugin/lib/commonlibf4/include/RE/A/ActiveEffect.h
T
2026-05-30 18:33:24 +12:00

85 lines
2.6 KiB
C++

#pragma once
#include "RE/A/ActiveEffectReferenceEffectController.h"
#include "RE/B/BSIntrusiveRefCounted.h"
#include "RE/B/BSPointerHandle.h"
#include "RE/B/BSSimpleList.h"
#include "RE/B/BSSoundHandle.h"
#include "RE/E/ENUM_FORM_ID.h"
#include "RE/N/NiPointer.h"
namespace RE
{
class MagicTarget;
class NiNode;
class ReferenceEffect;
namespace MagicSystem
{
enum class CastingSource : std::int32_t;
}
class __declspec(novtable) ActiveEffect :
public BSIntrusiveRefCounted
{
public:
static constexpr auto RTTI{ RTTI::ActiveEffect };
static constexpr auto VTABLE{ VTABLE::ActiveEffect };
static constexpr auto FORM_ID{ ENUM_FORM_ID::kActiveEffect };
enum class Flags : std::uint32_t
{
kNone = 0,
kNoHitShader = 1U << 1,
kNoHitEffectArt = 1U << 2,
kNoInitialFlare = 1U << 4,
kApplyingHitEffects = 1U << 5,
kApplyingSounds = 1U << 6,
kHasConditions = 1U << 7,
kRecover = 1U << 9,
kDualCasted = 1U << 12,
kInactive = 1U << 15,
kAppliedEffects = 1U << 16,
kRemovedEffects = 1U << 17,
kDispelled = 1U << 18,
kWornOff = 1U << 31
};
enum class ConditionStatus : std::uint32_t
{
kNotAvailable = 0xFFFFFFFF,
kFalse = 0,
kTrue = 1
};
virtual ~ActiveEffect();
bool CheckDisplacementSpellOnTarget()
{
using func_t = decltype(&ActiveEffect::CheckDisplacementSpellOnTarget);
static REL::Relocation<func_t> func{ ID::ActiveEffect::CheckDisplacementSpellOnTarget };
return func(this);
}
// members
ActiveEffectReferenceEffectController hitEffectController; // 0C
BSSoundHandle persistentSound; // 30
ActorHandle caster; // 38
NiPointer<NiNode> sourceNode; // 40
MagicItem* spell; // 48
EffectItem* effect; // 50
MagicTarget* target; // 58
TESBoundObject* source; // 60
BSSimpleList<ReferenceEffect*>* hitEffects; // 68
MagicItem* displacementSpell; // 70
float elapsedSeconds; // 74
float duration; // 78
float magnitude; // 7C
REX::TEnumSet<Flags, std::uint32_t> flags; // 80
ConditionStatus conditionStatus; // 84
std::uint16_t uniqueID; // 8C
MagicSystem::CastingSource castingSource; // 90
};
static_assert(sizeof(ActiveEffect) == 0x98);
}