CommonLibSSE NG
Actor.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/A/AITimeStamp.h"
4 #include "RE/A/ActiveEffect.h"
5 #include "RE/A/ActorState.h"
6 #include "RE/A/ActorValueOwner.h"
7 #include "RE/A/ActorValues.h"
10 #include "RE/B/BSPointerHandle.h"
12 #include "RE/B/BSTArray.h"
13 #include "RE/B/BSTEvent.h"
14 #include "RE/B/BSTList.h"
15 #include "RE/B/BSTSmartPointer.h"
16 #include "RE/B/BSTTuple.h"
18 #include "RE/E/EmotionTypes.h"
19 #include "RE/F/FormTypes.h"
21 #include "RE/M/MagicSystem.h"
22 #include "RE/M/MagicTarget.h"
23 #include "RE/N/NiSmartPointer.h"
24 #include "RE/T/TESNPC.h"
25 #include "RE/T/TESObjectREFR.h"
26 
27 #include "REX/W32/BASE.h"
28 
29 namespace RE
30 {
31  class ActorMagicCaster;
32  class ActorMover;
33  class AIProcess;
34  class bhkCharacterController;
35  class bhkCharacterMoveFinishEvent;
36  class BipedAnim;
37  class BSTransformDeltaEvent;
38  class CombatController;
39  class CombatGroup;
40  class ExtraDataList;
41  class InventoryEntryData;
42  class MovementControllerNPC;
43  class MovementMessageActorCollision;
44  class NiRefObject;
45  class PackageLocation;
46  class PerkEntryVisitor;
47  class TrespassPackage;
48  struct ActorMotionFeedbackData;
49  struct ActorMotionFeedbackOutput;
50  struct HighProcessData;
51  struct MiddleHighProcessData;
52 
54  {
55  kNone = 0,
56  kGooStart = 1,
57  kGooEnd = 2,
59  kDisintegrateEnd = 4,
60 
61  kTotal
62  };
63 
64  struct Modifiers
65  {
66  public:
67  // members
69  };
70  static_assert(sizeof(Modifiers) == 0xC);
71 
73  {
74  public:
75  template <class T>
76  struct LocalMap
77  {
78  public:
79  T* operator[](ActorValue a_actorValue)
80  {
81  return GetAt(static_cast<char>(a_actorValue));
82  }
83 
84  const T* operator[](ActorValue a_actorValue) const
85  {
86  return GetAt(static_cast<char>(a_actorValue));
87  }
88 
89  // members
91  T* entries; // 08
92 
93  private:
94  [[nodiscard]] T* GetAt(char a_actorValue) const
95  {
96  auto akVals = actorValues.data();
97  if (akVals && entries) {
98  std::uint32_t idx = 0;
99  while (akVals[idx] != '\0') {
100  if (akVals[idx] == a_actorValue) {
101  break;
102  }
103  ++idx;
104  }
105 
106  if (akVals[idx] != '\0') {
107  return std::addressof(entries[idx]);
108  }
109  }
110  return 0;
111  }
112  };
113  static_assert(sizeof(LocalMap<float>) == 0x10);
114 
115  // members
118  };
119  static_assert(sizeof(ActorValueStorage) == 0x20);
120 
122 
123  class Actor :
124 #ifndef ENABLE_SKYRIM_AE
125  public TESObjectREFR, // 000
126  public MagicTarget, // 098, 0A0
127  public ActorValueOwner, // 0B0, 0B8
128  public ActorState, // 0B8, 0C0
129  public BSTEventSink<BSTransformDeltaEvent>, // 0C8, 0D0
130  public BSTEventSink<bhkCharacterMoveFinishEvent>, // 0D0, 0D8
131  public IPostAnimationChannelUpdateFunctor // 0D8, 0E0
132 #else
133  public TESObjectREFR // 000
134 #endif
135  {
136  private:
138 
139  public:
140  inline static constexpr auto RTTI = RTTI_Actor;
141  inline static constexpr auto FORMTYPE = FormType::ActorCharacter;
142 
143  struct SlotTypes
144  {
145  enum
146  {
151 
152  kTotal
153  };
154  };
155 
156  enum class BOOL_BITS
157  {
158  kNone = 0,
159  kDelayUpdateScenegraph = 1 << 0,
160  kProcessMe = 1 << 1,
161  kMurderAlarm = 1 << 2,
162  kHasSceneExtra = 1 << 3,
163  kHeadingFixed = 1 << 4,
164  kSpeakingDone = 1 << 5,
166  kSoundFileDone = 1 << 7,
167  kVoiceFileDone = 1 << 8,
168  kInTempChangeList = 1 << 9,
169  kDoNotRunSayToCallback = 1 << 10,
170  kDead = 1 << 11,
171  kForceGreetingPlayer = 1 << 12,
172  kForceUpdateQuestTarget = 1 << 13,
173  kSearchingInCombat = 1 << 14,
174  kAttackOnNextTheft = 1 << 15,
175  kEvpBuffered = 1 << 16,
176  kResetAI = 1 << 17,
177  kInWater = 1 << 18,
178  kSwimming = 1 << 19,
179  kVoicePausedByScript = 1 << 20,
180  kWasInFrustrum = 1 << 21,
181  kShouldRotateToTrack = 1 << 22,
182  kSetOnDeath = 1 << 23,
183  kDoNotPadVoice = 1 << 24,
184  kFootIKInRange = 1 << 25,
185  kPlayerTeammate = 1 << 26,
186  kGivePlayerXP = 1 << 27,
187  kSoundCallbackSuccess = 1 << 28,
188  kUseEmotion = 1 << 29,
189  kGuard = 1 << 30,
190  kParalyzed = 1 << 31
191  };
192 
193  enum class BOOL_FLAGS
194  {
195  kNone = 0,
196  kScenePackage = 1 << 0,
197  kIsAMount = 1 << 1,
198  kMountPointClear = 1 << 2,
199  kGettingOnOffMount = 1 << 3,
200  kInRandomScene = 1 << 4,
201  kNoBleedoutRecovery = 1 << 5,
202  kInBleedoutAnimation = 1 << 6,
203  kCanDoFavor = 1 << 7,
204  kShouldAnimGraphUpdate = 1 << 8,
205  kCanSpeakToEssentialDown = 1 << 9,
206  kBribedByPlayer = 1 << 10,
207  kAngryWithPlayer = 1 << 11,
208  kIsTrespassing = 1 << 12,
209  kCanSpeak = 1 << 13,
210  kIsInKillMove = 1 << 14,
211  kAttackOnSight = 1 << 15,
212  kIsCommandedActor = 1 << 16,
213  kForceOneAnimgraphUpdate = 1 << 17,
214  kEssential = 1 << 18,
215  kProtected = 1 << 19,
216  kAttackingDisabled = 1 << 20,
217  kCastingDisabled = 1 << 21,
218  kSceneHeadTrackRotation = 1 << 22,
219  kForceIncMinBoneUpdate = 1 << 23,
220  kCrimeSearch = 1 << 24,
221  kMovingIntoLoadedArea = 1 << 25,
222  kDoNotShowOnStealthMeter = 1 << 26,
223  kMovementBlocked = 1 << 27,
225  kForceAnimGraphUpdate = 1 << 29,
226  kCheckAddEffectDualCast = 1 << 30,
227  kUnderwater = 1 << 31
228  };
229 
230  struct ChangeFlags
231  {
232  enum ChangeFlag : std::uint32_t
233  {
234  kLifeState = 1 << 10,
235  kPackageExtraData = 1 << 11,
237  kDismemberedLimbs = 1 << 17,
238  kLeveledActor = 1 << 18,
239  kDispModifiers = 1 << 19,
240  kTempModifiers = 1 << 20,
241  kDamageModifiers = 1 << 21,
244  };
245  };
246 
247  struct RecordFlags
248  {
249  enum RecordFlag : std::uint32_t
250  {
251  kDeleted = 1 << 5,
252  kStartsDead = 1 << 9,
253  kPersistent = 1 << 10,
255  kIgnored = 1 << 12,
256  kNoAIAcquire = 1 << 25,
257  kDontHavokSettle = 1 << 29
258  };
259  };
260 
262  {
263  public:
264  inline static constexpr auto RTTI = RTTI_Actor__ForEachSpellVisitor;
265 
266  virtual ~ForEachSpellVisitor() = default; // 00
267 
268  // add
269  virtual BSContainer::ForEachResult Visit(SpellItem* a_spell) = 0; // 01
270  };
271 
272  ~Actor() override; // 000
273 
274  // override (TESObjectREFR)
275  void SaveGame(BGSSaveFormBuffer* a_buf) override; // 00E
276  void LoadGame(BGSLoadFormBuffer* a_buf) override; // 00F
277  void InitLoadGame(BGSLoadFormBuffer* a_buf) override; // 010
278  void FinishLoadGame(BGSLoadFormBuffer* a_buf) override; // 011
279  void Revert(BGSLoadFormBuffer* a_buf) override; // 012
280  void InitItemImpl() override; // 013
281  void SetDelete(bool a_set) override; // 023
282  void Predestroy() override; // 03B
283  [[nodiscard]] BGSLocation* GetEditorLocation1() const override; // 03C - { return editorLocation; }
284  [[nodiscard]] bool GetEditorLocation2(NiPoint3& a_outPos, NiPoint3& a_outRot, TESForm*& a_outWorldOrCell, TESObjectCELL* a_fallback) override; // 03D
285  void ForceEditorLocation(BGSLocation* a_location) override; // 03E - { editorLocation = a_location; }
286  void Update3DPosition(bool a_warp) override; // 03F
287  void UpdateSoundCallBack(bool a_endSceneAction) override; // 040
288  bool SetDialogueWithPlayer(bool a_flag, bool a_forceGreet, TESTopicInfo* a_topic) override; // 041
289  [[nodiscard]] BGSAnimationSequencer* GetSequencer(void) const override; // 045 - { return currentProcess->high->animSequencer; }
290  [[nodiscard]] bool HasKeywordHelper(const BGSKeyword* a_keyword) const override; // 048
291  [[nodiscard]] TESPackage* CheckForCurrentAliasPackage() override; // 049 - { return 0; }
292  [[nodiscard]] BGSScene* GetCurrentScene() const override; // 04A
293  void SetCurrentScene(BGSScene* a_scene) override; // 04B
294  bool UpdateInDialogue(DialogueResponse* a_response, bool a_unused) override; // 04C
295  [[nodiscard]] BGSDialogueBranch* GetExclusiveBranch() const override; // 04D - { return exclusiveBranch; }
296  void SetExclusiveBranch(BGSDialogueBranch* a_branch) override; // 04E - { exclusiveBranch = a_arg1; }
297  void PauseCurrentDialogue(void) override; // 04F
298  [[nodiscard]] NiPoint3 GetStartingAngle() const override; // 052
299  [[nodiscard]] NiPoint3 GetStartingLocation() const override; // 053
300  ObjectRefHandle RemoveItem(TESBoundObject* a_item, std::int32_t a_count, ITEM_REMOVE_REASON a_reason, ExtraDataList* a_extraList, TESObjectREFR* a_moveToRef, const NiPoint3* a_dropLoc = 0, const NiPoint3* a_rotate = 0) override; // 056
301  bool AddWornItem(TESBoundObject* a_item, std::int32_t a_count, bool a_forceEquip, std::uint32_t a_arg4, std::uint32_t a_arg5) override; // 057
302  void DoTrap1(TrapData& a_data) override; // 058
303  void DoTrap2(TrapEntry* a_trap, TargetEntry* a_target) override; // 059
304  void AddObjectToContainer(TESBoundObject* a_object, ExtraDataList* a_extraList, std::int32_t a_count, TESObjectREFR* a_fromRefr) override; // 05A
305  [[nodiscard]] NiPoint3 GetLookingAtLocation() const override; // 05B
306  [[nodiscard]] MagicCaster* GetMagicCaster(MagicSystem::CastingSource a_source) override; // 05C
307  [[nodiscard]] MagicTarget* GetMagicTarget() override; // 05D - { return static_cast<MagicTarget*>(this); }
308  [[nodiscard]] bool IsChild() const override; // 05E - { return false; }
310  bool DetachHavok(NiAVObject* a_obj3D) override; // 065
311  void InitHavok() override; // 066
312  void Unk_67(void) override; // 067 - related to vampire lord cape
313  void Unk_68(void) override; // 068
314  void Unk_69(void) override; // 069
315  NiAVObject* Load3D(bool a_arg1) override; // 06A
316  void Set3D(NiAVObject* a_object, bool a_queue3DTasks = true) override; // 06C
317  bool PopulateGraphProjectsToLoad(void) const override; // 072
318  [[nodiscard]] NiPoint3 GetBoundMin() const override; // 073
319  [[nodiscard]] NiPoint3 GetBoundMax() const override; // 074
320  void Unk_75(void) override; // 075 - "ActorValue GetWeaponSkill()"? really weird call, only works for right hand, and defaults to 1
321  void Unk_78(void) override; // 078
322  void ModifyAnimationUpdateData(BSAnimationUpdateData& a_data) override; // 079
323  bool ShouldSaveAnimationOnUnloading() const override; // 07A - { return false; }
324  bool ShouldSaveAnimationOnSaving() const override; // 07B
325  bool ShouldPerformRevert() const override; // 07C
326  void UpdateAnimation(float a_delta) override; // 07D
327  void RemoveWeapon(BIPED_OBJECT equipIndex) override; // 082
328 #ifndef SKYRIM_CROSS_VR
329  // Override functions past where Skyrim VR breaks compatibility.
330  void SetObjectReference(TESBoundObject* a_object) override; // 084
331  void MoveHavok(bool a_forceRec) override; // 085
332  void GetLinearVelocity(NiPoint3& a_velocity) const override; // 086
333  void SetActionComplete(bool a_set) override; // 087
334  void Disable() override; // 089
335  void ResetInventory(bool a_leveledOnly) override; // 08A
336  NiNode* GetFireNode() override; // 08B
337  void SetFireNode(NiNode* a_fireNode) override; // 08C
338  bool OnAddCellPerformQueueReference(TESObjectCELL& a_cell) const override; // 090
339  void DoMoveToHigh() override; // 091
340  void TryMoveToMiddleLow() override; // 092
341  bool TryChangeSkyCellActorsProcessLevel() override; // 093
342  void TryUpdateActorLastSeenTime() override; // 095
343  void Unk_96(void) override; // 096
344  void SetParentCell(TESObjectCELL* a_cell) override; // 098
345  [[nodiscard]] bool IsDead(bool a_notEssential = true) const override; // 099
346  bool ProcessInWater(hkpCollidable* a_collidable, float a_waterHeight, float a_deltaTime) override; // 09C
347  bool ApplyCurrent(float a_velocityTime, const hkVector4& a_velocity) override; // 09D
348  [[nodiscard]] TESAmmo* GetCurrentAmmo() const override; // 09E
349  void UnequipItem(std::uint64_t a_arg1, TESBoundObject* a_object) override; // 0A1
350 #endif
351 
352  // override (MagicTarget)
353 #ifndef ENABLE_SKYRIM_AE
354  [[nodiscard]] Actor* GetTargetStatsObject() override; // 002 - { return this; }
355  [[nodiscard]] bool MagicTargetIsActor() const override; // 003 - { return true; }
356  [[nodiscard]] BSSimpleList<ActiveEffect*>* GetActiveEffectList() override; // 007
357 #endif
358 
359  // add
360  SKYRIM_REL_VR_VIRTUAL void Unk_A2(void); // 0A2
361  SKYRIM_REL_VR_VIRTUAL void PlayPickUpSound(TESBoundObject* a_object, bool a_pickup, bool a_use); // 0A3
362  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL float GetHeading(bool a_ignoreRaceSettings) const; // 0A4
363  SKYRIM_REL_VR_VIRTUAL void SetAvoidanceDisabled(bool a_set); // 0A5 - { return; }
364  SKYRIM_REL_VR_VIRTUAL void DrawWeaponMagicHands(bool a_draw); // 0A6
367  SKYRIM_REL_VR_VIRTUAL void SetPosition(const NiPoint3& a_pos, bool a_updateCharController); // 0A9
369  SKYRIM_REL_VR_VIRTUAL void Resurrect(bool a_resetInventory, bool a_attach3D); // 0AB
371  SKYRIM_REL_VR_VIRTUAL void Update(float a_delta); // 0AD
372  SKYRIM_REL_VR_VIRTUAL void UpdateNoAI(float a_delta); // 0AE - { return UpdateActor3DPosition(); }
375  SKYRIM_REL_VR_VIRTUAL void UpdateNonRenderSafe(float a_delta); // 0B1
376  SKYRIM_REL_VR_VIRTUAL void OnItemEquipped(bool a_playAnim); // 0B2
377  SKYRIM_REL_VR_VIRTUAL void Unk_B3(void); // 0B3 - { return 1; }
378  SKYRIM_REL_VR_VIRTUAL void Unk_B4(void); // 0B4
379  SKYRIM_REL_VR_VIRTUAL void SetCrimeGoldValue(TESFaction* a_faction, bool a_violent, std::uint32_t a_amount); // 0B5
380  SKYRIM_REL_VR_VIRTUAL void ModCrimeGoldValue(TESFaction* a_faction, bool a_violent, std::int32_t a_amount); // 0B6
381  SKYRIM_REL_VR_VIRTUAL void RemoveCrimeGoldValue(TESFaction* a_faction, bool a_violent, std::int32_t a_amount); // 0B7
382  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL std::uint32_t GetCrimeGoldValue(const TESFaction* a_faction) const; // 0B8
383  SKYRIM_REL_VR_VIRTUAL void GoToPrison(TESFaction* a_faction, bool a_removeInventory, bool a_realJail); // 0B9 - { return; }
384  SKYRIM_REL_VR_VIRTUAL void ServePrisonTime(); // 0BA - { return; }
385  SKYRIM_REL_VR_VIRTUAL void PayFine(TESFaction* a_faction, bool a_goToJail, bool a_removeStolenItems); // 0BB - { return; }
386  SKYRIM_REL_VR_VIRTUAL bool GetCannibal(); // 0BC - { return false; }
387  SKYRIM_REL_VR_VIRTUAL void SetCannibal(bool a_set); // 0BD - { return; }
388  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool GetVampireFeed(); // 0BE - { return false; }
389  SKYRIM_REL_VR_VIRTUAL void SetVampireFeed(bool a_set); // 0BF - { return; }
390  SKYRIM_REL_VR_VIRTUAL void InitiateVampireFeedPackage(Actor* a_target, TESObjectREFR* a_furniture); // 0C0 - { return; }
391  SKYRIM_REL_VR_VIRTUAL void InitiateCannibalPackage(Actor* a_target); // 0C1 - { return; }
392  SKYRIM_REL_VR_VIRTUAL void GetEyeVector(NiPoint3& a_origin, NiPoint3& a_direction, bool a_includeCameraOffset); // 0C2
393  SKYRIM_REL_VR_VIRTUAL void SetRefraction(bool a_enable, float a_refraction); // 0C3
394  SKYRIM_REL_VR_VIRTUAL void Unk_C4(void); // 0C4 - { return; }
395  SKYRIM_REL_VR_VIRTUAL void Unk_C5(void); // 0C5 - { return 1; }
396  SKYRIM_REL_VR_VIRTUAL void Unk_C6(void); // 0C6
397  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL float GetAcrobatics() const; // 0C7 - { return 1.0; }
398  SKYRIM_REL_VR_VIRTUAL bhkCharacterController* Move(float a_arg2, const NiPoint3& a_position); // 0C8
399  SKYRIM_REL_VR_VIRTUAL void Unk_C9(void); // 0C9
400  SKYRIM_REL_VR_VIRTUAL void OnArmorActorValueChanged(); // 0CA - { return; }
401  SKYRIM_REL_VR_VIRTUAL ObjectRefHandle DropObject(const TESBoundObject* a_object, ExtraDataList* a_extraList, std::int32_t a_count, const NiPoint3* a_dropLoc = 0, const NiPoint3* a_rotate = 0); // 0CB
402  SKYRIM_REL_VR_VIRTUAL void PickUpObject(TESObjectREFR* a_object, std::int32_t a_count, bool a_arg3 = false, bool a_playSound = true); // 0CC
405  SKYRIM_REL_VR_VIRTUAL bool AddShout(TESShout* a_shout); // 0CF
406  SKYRIM_REL_VR_VIRTUAL void UnlockWord(TESWordOfPower* a_power); // 0D0 - { return; }
407  SKYRIM_REL_VR_VIRTUAL void Unk_D1(void); // 0D1
408  SKYRIM_REL_VR_VIRTUAL std::uint32_t UseAmmo(std::uint32_t a_shotCount); // 0D2
410  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL CombatGroup* GetCombatGroup() const; // 0D4
412  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool CheckValidTarget(TESObjectREFR& a_target); // 0D6
413  SKYRIM_REL_VR_VIRTUAL bool InitiateTresPassPackage(TrespassPackage* a_trespassPackage); // 0D7 - { return 0; }
415  SKYRIM_REL_VR_VIRTUAL void SetSize(float a_size); // 0D9
418  SKYRIM_REL_VR_VIRTUAL void InitiateSpectator(Actor* a_target); // 0DC - { return; }
419  SKYRIM_REL_VR_VIRTUAL void InitiateFlee(TESObjectREFR* a_fleeRef, bool a_runOnce, bool a_knows, bool a_combatMode, TESObjectCELL* a_cell, TESObjectREFR* a_ref, float a_fleeFromDist, float a_fleeToDist); // 0DD
421  SKYRIM_REL_VR_VIRTUAL void PutCreatedPackage(TESPackage* a_package, bool a_tempPackage, bool a_createdPackage, bool a_allowFromFurniture); // 0DF
423  SKYRIM_REL_VR_VIRTUAL void SetAlpha(float a_alpha = 1.0); // 0E1
424  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL float GetAlpha(); // 0E2
425  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool IsInCombat() const; // 0E3
428  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL float CalcArmorRating(); // 0E6 - { return 0.0; }
429  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL float GetArmorBaseFactorSum(); // 0E7 - { return 0.0; }
430  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL float CalcUnarmedDamage(); // 0E8 - { return 0; }
431  SKYRIM_REL_VR_VIRTUAL void Unk_E9(void); // 0E9 - { return 0; }
432  SKYRIM_REL_VR_VIRTUAL void Unk_EA(void); // 0EA - { return 0; }
433  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL float GetRunSpeed(); // 0EB
434  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL float GetJogSpeed(); // 0EC
435  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL float GetFastWalkSpeed(); // 0ED
436  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL float GetWalkSpeed(); // 0EE
443  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool HasBeenAttacked() const; // 0F5
444  SKYRIM_REL_VR_VIRTUAL void SetBeenAttacked(bool a_set); // 0F6
445  SKYRIM_REL_VR_VIRTUAL void UseSkill(ActorValue a_av, float a_points, TESForm* a_arg3); // 0F7 - { return; }
446  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool IsAtPoint(const NiPoint3& a_point, float a_radius, bool a_expandRadius, bool a_alwaysTestHeight); // 0F8
447  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool IsInFaction(const TESFaction* faction) const; // 0F9
448  SKYRIM_REL_VR_VIRTUAL void ForEachPerk(PerkEntryVisitor& a_visitor) const; // 0FA
449  SKYRIM_REL_VR_VIRTUAL void AddPerk(BGSPerk* a_perk, std::uint32_t a_rank = 0); // 0FB - { return; }
450  SKYRIM_REL_VR_VIRTUAL void RemovePerk(BGSPerk* a_perk); // 0FC - { return; }
451  SKYRIM_REL_VR_VIRTUAL void ApplyTemporaryPerk(BGSPerk* a_perk); // 0FD - { return; }
452  SKYRIM_REL_VR_VIRTUAL void RemoveTemporaryPerk(BGSPerk* a_perk); // 0FE - { return; }
453  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool HasPerkEntries(EntryPoint a_entryType) const; // 0FF
454  SKYRIM_REL_VR_VIRTUAL void ForEachPerkEntry(EntryPoint a_entryType, PerkEntryVisitor& a_visitor) const; // 100
456  SKYRIM_REL_VR_VIRTUAL void StartPowerAttackCoolDown(); // 102 - { return; }
457  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool IsPowerAttackCoolingDown() const; // 103 - { return false; }
458  SKYRIM_REL_VR_VIRTUAL void HandleHealthDamage(Actor* a_attacker, float a_damage); // 104
459  SKYRIM_REL_VR_VIRTUAL void Unk_105(void); // 105
460  SKYRIM_REL_VR_VIRTUAL void Unk_106(void); // 106 - { return; }
461  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool QSpeakingDone() const; // 107 - { return ~(unk0E0 >> 5) & 1; }
462  SKYRIM_REL_VR_VIRTUAL void SetSpeakingDone(bool a_set); // 108
464  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL EmotionType GetEmotionType(); // 10A - { return unk16C; }
465  SKYRIM_REL_VR_VIRTUAL void SetEmotionType(EmotionType a_emotionType); // 10B - { unk16C = a_arg1; }
466  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL std::uint32_t GetEmotionValue(); // 10C - { return unk170; }
467  SKYRIM_REL_VR_VIRTUAL void SetEmotionValue(std::uint32_t a_emotionValue); // 10D - { unk170 = a_arg1; }
468  SKYRIM_REL_VR_VIRTUAL void KillImpl(Actor* a_attacker, float a_damage, bool a_sendEvent, bool a_ragdollInstant); // 10E
469  SKYRIM_REL_VR_VIRTUAL bool DrinkPotion(AlchemyItem* a_potion, ExtraDataList* a_extralist); // 10F
470  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool CheckCast(MagicItem* a_spell, bool a_dualCast, MagicSystem::CannotCastReason* a_reason); // 110
471  SKYRIM_REL_VR_VIRTUAL void CheckTempModifiers(); // 111 - { return; }
472  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL std::int32_t GetCurrentShoutLevel(); // 112 - return -1 on error
473  SKYRIM_REL_VR_VIRTUAL void SetLastRiddenMount(ActorHandle a_mount); // 113 - { return; }
474  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL ActorHandle QLastRiddenMount() const; // 114 - { return {}; }
475  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool CalculateCachedOwnerIsUndead() const; // 115
476  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool CalculateCachedOwnerIsNPC() const; // 116
477  SKYRIM_REL_VR_VIRTUAL void Unk_117(void); // 117 - { return; }
479  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL const BSFixedString& GetResponseString() const; // 119 - { return "ActorResponse"; }
480  SKYRIM_REL_VR_VIRTUAL void ModifyMovementData(float a_delta, NiPoint3& a_arg3, NiPoint3& a_arg4); // 11A
483  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL bool ComputeMotionFeedbackSpeedAndDirection(const ActorMotionFeedbackData& a_data, float a_delta, ActorMotionFeedbackOutput& a_output); // 11D
484  SKYRIM_REL_VR_VIRTUAL bool UpdateFeedbackGraphSpeedAndDirection(const ActorMotionFeedbackOutput& a_output); // 11E
488  SKYRIM_REL_VR_VIRTUAL void ProcessTracking(float a_delta, NiAVObject* a_obj3D); // 122
489  SKYRIM_REL_VR_VIRTUAL void Unk_123(void); // 123
492  SKYRIM_REL_VR_VIRTUAL bool ShouldRespondToActorCollision(const MovementMessageActorCollision& a_msg, const ActorHandlePtr& a_target); // 126
493  [[nodiscard]] SKYRIM_REL_VR_VIRTUAL float CheckClampDamageModifier(ActorValue a_av, float a_delta); // 127
494 
496  static bool LookupByHandle(RefHandle a_refHandle, NiPointer<Actor>& a_refrOut);
497 
499  void AddCastPower(SpellItem* a_power);
500  bool AddSpell(SpellItem* a_spell);
501  void AddToFaction(TESFaction* a_faction, std::int8_t a_rank);
502  void AddWornOutfit(BGSOutfit* a_outfit, bool a_forceUpdate);
503  void AllowBleedoutDialogue(bool a_canTalk);
504  void AllowPCDialogue(bool a_talk);
505  void CastPermanentMagic(bool a_wornItemEnchantments, bool a_baseSpells, bool a_raceSpells, bool a_everyActorAbility);
506  [[nodiscard]] bool CanAttackActor(Actor* a_actor);
507  [[nodiscard]] bool CanFlyHere() const;
508  [[nodiscard]] bool CanOfferServices() const;
509  [[nodiscard]] bool CanPickpocket() const;
510  [[nodiscard]] bool CanTalkToPlayer() const;
511  [[nodiscard]] bool CanUseIdle(TESIdleForm* a_idle) const;
515  [[nodiscard]] ActorHandle CreateRefHandle();
516  bool Decapitate();
517  void DeselectSpell(SpellItem* a_spell);
520  void DoReset3D(bool a_updateWeight);
521  void EnableAI(bool a_enable);
522  void EndInterruptPackage(bool a_skipDialogue);
523  void EvaluatePackage(bool a_immediate = false, bool a_resetAI = false);
524  [[nodiscard]] TESNPC* GetActorBase();
525  [[nodiscard]] const TESNPC* GetActorBase() const;
526  [[nodiscard]] float GetActorValueModifier(ACTOR_VALUE_MODIFIER a_modifier, ActorValue a_value) const;
527  [[nodiscard]] float GetAimAngle() const;
528  [[nodiscard]] float GetAimHeading() const;
530  [[nodiscard]] const InventoryEntryData* GetAttackingWeapon() const;
532  std::uint32_t GetCollisionFilterInfo(std::uint32_t& a_outCollisionFilterInfo);
533  [[nodiscard]] NiPointer<Actor> GetCommandingActor() const;
534  [[nodiscard]] TESFaction* GetCrimeFaction();
535  [[nodiscard]] const TESFaction* GetCrimeFaction() const;
536  [[nodiscard]] TESPackage* GetCurrentPackage();
537  [[nodiscard]] const TESPackage* GetCurrentPackage() const;
538  [[nodiscard]] TESShout* GetCurrentShout();
539  [[nodiscard]] const TESShout* GetCurrentShout() const;
540  [[nodiscard]] InventoryEntryData* GetEquippedEntryData(bool a_leftHand) const;
541  [[nodiscard]] TESForm* GetEquippedObject(bool a_leftHand) const;
542  [[nodiscard]] TESForm* GetEquippedObjectInSlot(const BGSEquipSlot* slot) const;
543  [[nodiscard]] float GetEquippedWeight();
544  [[nodiscard]] std::int32_t GetFactionRank(TESFaction* a_faction, bool a_isPlayer);
545  [[nodiscard]] std::int32_t GetGoldAmount(bool a_noInit = false);
546  [[nodiscard]] ActorHandle GetHandle();
548  [[nodiscard]] float GetHeight();
549  [[nodiscard]] HighProcessData* GetHighProcess() const;
550  [[nodiscard]] Actor* GetKiller() const;
551  [[nodiscard]] std::uint16_t GetLevel() const;
553  [[nodiscard]] bool GetMount(NiPointer<Actor>& a_outMount);
554  [[nodiscard]] bool GetMountedBy(NiPointer<Actor>& a_outRider);
555  [[nodiscard]] double GetMoveDirectionRelativeToFacing();
556  [[nodiscard]] ObjectRefHandle GetOccupiedFurniture() const;
557  [[nodiscard]] TESRace* GetRace() const;
558  [[nodiscard]] float GetRegenDelay(ActorValue a_actorValue) const;
559  [[nodiscard]] bool GetRider(NiPointer<Actor>& a_outRider);
560  [[nodiscard]] TESObjectARMO* GetSkin() const;
561  [[nodiscard]] TESObjectARMO* GetSkin(BGSBipedObjectForm::BipedObjectSlot a_slot, bool a_noInit = false);
562  [[nodiscard]] SOUL_LEVEL GetSoulSize() const;
563  [[nodiscard]] float GetTotalCarryWeight();
564  [[nodiscard]] TESFaction* GetVendorFaction();
565  [[nodiscard]] const TESFaction* GetVendorFaction() const;
566  [[nodiscard]] float GetVoiceRecoveryTime();
567  [[nodiscard]] float GetWarmthRating() const;
568  [[nodiscard]] TESObjectARMO* GetWornArmor(BGSBipedObjectForm::BipedObjectSlot a_slot, bool a_noInit = false);
569  [[nodiscard]] TESObjectARMO* GetWornArmor(FormID a_formID, bool a_noInit = false);
570  [[nodiscard]] bool HasKeywordString(std::string_view a_formEditorID);
571  [[nodiscard]] bool HasLineOfSight(TESObjectREFR* a_ref, bool& a_arg2);
572  [[nodiscard]] bool HasOutfitItems(BGSOutfit* a_outfit);
573  [[nodiscard]] bool HasPerk(BGSPerk* a_perk) const;
574  [[nodiscard]] bool HasShout(TESShout* a_shout) const;
575  [[nodiscard]] bool HasSpell(SpellItem* a_spell) const;
577  void InterruptCast(bool a_restoreMagicka) const;
578  [[nodiscard]] bool IsAttacking() const;
579  [[nodiscard]] bool IsAIEnabled() const;
580  [[nodiscard]] bool IsAlarmed() const;
581  [[nodiscard]] bool IsAMount() const;
582  [[nodiscard]] bool IsAnimationDriven() const;
583  [[nodiscard]] bool IsBeingRidden() const;
584  [[nodiscard]] bool IsBlocking() const;
585  [[nodiscard]] bool IsCasting(MagicItem* a_spell) const;
586  [[nodiscard]] bool IsCommandedActor() const;
587  [[nodiscard]] bool IsCurrentShout(SpellItem* a_power);
588  [[nodiscard]] bool IsDualCasting() const;
589  [[nodiscard]] bool IsEssential() const;
590  [[nodiscard]] bool IsFactionInCrimeGroup(const TESFaction* a_faction) const;
591  [[nodiscard]] bool IsGhost() const;
592  [[nodiscard]] bool IsGuard() const;
593  [[nodiscard]] bool IsHostileToActor(Actor* a_actor);
594  [[nodiscard]] bool IsInCastPowerList(SpellItem* a_power);
595  [[nodiscard]] constexpr bool IsInKillMove() const noexcept { return GetActorRuntimeData().boolFlags.all(BOOL_FLAGS::kIsInKillMove); }
596  [[nodiscard]] bool IsInMidair() const;
597  [[nodiscard]] bool IsInRagdollState() const;
598  [[nodiscard]] bool IsLeveled() const;
599  [[nodiscard]] bool IsLimbGone(std::uint32_t a_limb);
600  [[nodiscard]] bool IsMoving() const;
601  [[nodiscard]] bool IsOnMount() const;
602  [[nodiscard]] bool IsOverEncumbered() const;
603  [[nodiscard]] bool IsPlayerTeammate() const;
604  [[nodiscard]] bool IsProtected() const;
605  [[nodiscard]] bool IsRunning() const;
606  [[nodiscard]] bool IsSneaking() const;
607  [[nodiscard]] bool IsPointSubmergedMoreThan(const NiPoint3& a_pos, TESObjectCELL* a_cell, float a_waterLevel);
608  [[nodiscard]] bool IsSummoned() const noexcept;
609  [[nodiscard]] bool IsTrespassing() const;
611  void PlayASound(BSSoundHandle& a_result, FormID a_formID, bool a_unk03, std::uint32_t a_flags);
612  void ProcessVATSAttack(MagicCaster* a_caster, bool a_hasTargetAnim, TESObjectREFR* a_target, bool a_leftHand);
614  void RemoveCastScroll(SpellItem* a_spell, MagicSystem::CastingSource a_source);
616  void RemoveFromFaction(TESFaction* a_faction);
617  void RemoveOutfitItems(BGSOutfit* a_outfit);
618  bool RemoveSpell(SpellItem* a_spell);
619  [[nodiscard]] std::int32_t RequestDetectionLevel(Actor* a_target, DETECTION_PRIORITY a_priority = DETECTION_PRIORITY::kNormal);
620  bool SetDefaultOutfit(BGSOutfit* a_outfit, bool a_update3D);
621  void SetLifeState(ACTOR_LIFE_STATE a_lifeState);
622  bool SetSleepOutfit(BGSOutfit* a_outfit, bool a_update3D);
623  void SetRotationX(float a_angle);
624  void SetRotationZ(float a_angle);
625  void StealAlarm(TESObjectREFR* a_ref, TESForm* a_object, std::int32_t a_num, std::int32_t a_total, TESForm* a_owner, bool a_allowWarning);
627  void StopInteractingQuick(bool a_unk02);
628  void StopMoving(float a_delta);
629  void SwitchRace(TESRace* a_race, bool a_player);
630  void TrespassAlarm(TESObjectREFR* a_ref, TESForm* a_ownership, std::int32_t a_crime);
631  void UpdateArmorAbility(TESForm* a_armor, ExtraDataList* a_extraData);
632  void UpdateAwakeSound(NiAVObject* a_obj3D);
635  void UpdateRegenDelay(ActorValue a_actorValue, float a_regenDelay);
637  void UpdateWeaponAbility(TESForm* a_weapon, ExtraDataList* a_extraData, bool a_leftHand);
638  void VisitArmorAddon(TESObjectARMO* a_armor, TESObjectARMA* a_arma, std::function<void(bool a_firstPerson, NiAVObject& a_obj)> a_visitor);
639  bool VisitFactions(std::function<bool(TESFaction* a_faction, std::int8_t a_rank)> a_visitor);
641  [[nodiscard]] std::uint8_t WhoIsCasting();
642  bool WouldBeStealing(const TESObjectREFR* a_target) const;
643 
645  {
646 #define RUNTIME_DATA_CONTENT \
647  stl::enumeration<BOOL_BITS, std::uint32_t> boolBits; /* 0E0 */ \
648  float updateTargetTimer; /* 0E4 */ \
649  stl::enumeration<ACTOR_CRITICAL_STAGE, std::uint32_t> criticalStage; /* 0E8 */ \
650  std::uint32_t pad0EC; /* 0EC */ \
651  AIProcess* currentProcess; /* 0F0 */ \
652  ObjectRefHandle dialogueItemTarget; /* 0F8 */ \
653  ActorHandle currentCombatTarget; /* 0FC */ \
654  ActorHandle myKiller; /* 100 */ \
655  float checkMyDeadBodyTimer; /* 104 */ \
656  float voiceTimer; /* 108 */ \
657  float underWaterTimer; /* 10C */ \
658  std::int32_t thiefCrimeStamp; /* 110 */ \
659  std::int32_t actionValue; /* 114 */ \
660  float timerOnAction; /* 118 */ \
661  std::uint32_t unk11C; /* 11C */ \
662  NiPoint3 editorLocCoord; /* 120 */ \
663  float editorLocRot; /* 12C */ \
664  TESForm* editorLocForm; /* 130 */ \
665  BGSLocation* editorLocation; /* 138 */ \
666  ActorMover* actorMover; /* 140 */ \
667  BSTSmartPointer<MovementControllerNPC> movementController; /* 148 */ \
668  TESPackage* unk150; /* 150 */ \
669  CombatController* combatController; /* 158 */ \
670  TESFaction* vendorFaction; /* 160 */ \
671  AITimeStamp calculateVendorFactionTimer; /* 168 */ \
672  EmotionType emotionType; /* 16C */ \
673  std::uint32_t emotionValue; /* 170 */ \
674  std::uint32_t unk174; /* 174 */ \
675  std::uint32_t unk178; /* 178 */ \
676  std::uint32_t intimidateBribeDayStamp; /* 17C */ \
677  std::uint64_t unk180; /* 180 */ \
678  BSTSmallArray<SpellItem*> addedSpells; /* 188 */ \
679  ActorMagicCaster* magicCasters[SlotTypes::kTotal]; /* 1A0 */ \
680  MagicItem* selectedSpells[SlotTypes::kTotal]; /* 1C0 */ \
681  TESForm* selectedPower; /* 1E0 */ \
682  std::uint32_t unk1E8; /* 1E8 */ \
683  std::uint32_t pad1EC; /* 1EC */ \
684  TESRace* race; /* 1F0 */ \
685  float equippedWeight; /* 1F8 */ \
686  stl::enumeration<BOOL_FLAGS, std::uint32_t> boolFlags; /* 1FC */ \
687  ActorValueStorage avStorage; /* 200 */ \
688  BGSDialogueBranch* exclusiveBranch; /* 220 */ \
689  Modifiers healthModifiers; /* 228 */ \
690  Modifiers magickaModifiers; /* 234 */ \
691  Modifiers staminaModifiers; /* 240 */ \
692  Modifiers voicePointsModifiers; /* 24C */ \
693  float lastUpdate; /* 258 */ \
694  std::uint32_t lastSeenTime; /* 25C */ \
695  BSTSmartPointer<BipedAnim> biped; /* 260 */ \
696  float armorRating; /* 268 */ \
697  float armorBaseFactorSum; /* 26C */ \
698  std::int8_t soundCallBackSet; /* 271 */ \
699  std::uint8_t unk271; /* 270 */ \
700  std::uint8_t unk272; /* 272 */ \
701  std::uint8_t unk273; /* 273 */ \
702  std::uint32_t unk274; /* 274 */ \
703  std::uint64_t unk278; /* 278 */ \
704  std::uint64_t unk280; /* 280 */ \
705  REX::W32::CRITICAL_SECTION unk288; /* 288 - havok related */
706 
708  };
709 
710  [[nodiscard]] inline ACTOR_RUNTIME_DATA& GetActorRuntimeData() noexcept
711  {
712  return REL::RelocateMemberIfNewer<ACTOR_RUNTIME_DATA>(SKSE::RUNTIME_SSE_1_6_629, this, 0xE0, 0xE8);
713  }
714 
715  [[nodiscard]] inline const ACTOR_RUNTIME_DATA& GetActorRuntimeData() const noexcept
716  {
717  return REL::RelocateMemberIfNewer<ACTOR_RUNTIME_DATA>(SKSE::RUNTIME_SSE_1_6_629, this, 0xE0, 0xE8);
718  }
719 
720  [[nodiscard]] inline MagicTarget* AsMagicTarget() noexcept {
721  return &REL::RelocateMemberIfNewer<MagicTarget>(SKSE::RUNTIME_SSE_1_6_629, this, 0x98, 0xA0);
722  }
723 
724  [[nodiscard]] inline const MagicTarget* AsMagicTarget() const noexcept {
725  return &REL::RelocateMemberIfNewer<MagicTarget>(SKSE::RUNTIME_SSE_1_6_629, this, 0x98, 0xA0);
726  }
727 
728  [[nodiscard]] inline ActorValueOwner* AsActorValueOwner() noexcept {
729  return &REL::RelocateMemberIfNewer<ActorValueOwner>(SKSE::RUNTIME_SSE_1_6_629, this, 0xB0, 0xB8);
730  }
731 
732  [[nodiscard]] inline const ActorValueOwner* AsActorValueOwner() const noexcept {
733  return &REL::RelocateMemberIfNewer<ActorValueOwner>(SKSE::RUNTIME_SSE_1_6_629, this, 0xB0, 0xB8);
734  }
735 
736  [[nodiscard]] inline ActorState* AsActorState() noexcept {
737  return &REL::RelocateMemberIfNewer<ActorState>(SKSE::RUNTIME_SSE_1_6_629, this, 0xB8, 0xC0);
738  }
739 
740  [[nodiscard]] inline const ActorState* AsActorState() const noexcept {
741  return &REL::RelocateMemberIfNewer<ActorState>(SKSE::RUNTIME_SSE_1_6_629, this, 0xB8, 0xC0);
742  }
743 
745  return &REL::RelocateMemberIfNewer<BSTEventSink<BSTransformDeltaEvent>>(SKSE::RUNTIME_SSE_1_6_629, this, 0xC8, 0xD0);
746  }
747 
748  [[nodiscard]] inline const BSTEventSink<BSTransformDeltaEvent>* AsBSTransformDeltaEventSink() const noexcept {
749  return &REL::RelocateMemberIfNewer<BSTEventSink<BSTransformDeltaEvent>>(SKSE::RUNTIME_SSE_1_6_629, this, 0xC8, 0xD0);
750  }
751 
753  return &REL::RelocateMemberIfNewer<BSTEventSink<bhkCharacterMoveFinishEvent>>(SKSE::RUNTIME_SSE_1_6_629, this, 0xD0, 0xD8);
754  }
755 
756  [[nodiscard]] inline const BSTEventSink<bhkCharacterMoveFinishEvent>* AsCharacterMoveFinishEventSink() const noexcept {
757  return &REL::RelocateMemberIfNewer<BSTEventSink<bhkCharacterMoveFinishEvent>>(SKSE::RUNTIME_SSE_1_6_629, this, 0xD0, 0xD8);
758  }
759 
761  return &REL::RelocateMemberIfNewer<IPostAnimationChannelUpdateFunctor>(SKSE::RUNTIME_SSE_1_6_629, this, 0xD8, 0xE0);
762  }
763 
764  [[nodiscard]] inline const IPostAnimationChannelUpdateFunctor* AsIPostAnimationChannelUpdateFunctor() const noexcept {
765  return &REL::RelocateMemberIfNewer<IPostAnimationChannelUpdateFunctor>(SKSE::RUNTIME_SSE_1_6_629, this, 0xD8, 0xE0);
766  }
767 
768  // members
769 #ifndef ENABLE_SKYRIM_AE
771 #endif
772 
773  private:
774  void CalculateCurrentVendorFaction() const;
775  float CalcEquippedWeight();
776  TESFaction* GetCrimeFactionImpl() const;
777  };
778 #ifndef ENABLE_SKYRIM_AE
779  static_assert(sizeof(Actor) == 0x2B0);
780 #endif
781 }
782 #undef RUNTIME_DATA_CONTENT
#define RUNTIME_DATA_CONTENT
Definition: Actor.h:646
#define SKYRIM_REL_VR_VIRTUAL
Definition: Common.h:94
Definition: ActorState.h:93
Definition: ActorValueOwner.h:8
Definition: Actor.h:262
virtual BSContainer::ForEachResult Visit(SpellItem *a_spell)=0
static constexpr auto RTTI
Definition: Actor.h:264
virtual ~ForEachSpellVisitor()=default
Definition: Actor.h:135
SKYRIM_REL_VR_VIRTUAL void StopCombat()
bool IsCommandedActor() const
SKYRIM_REL_VR_VIRTUAL void SetVampireFeed(bool a_set)
void StopInteractingQuick(bool a_unk02)
void UpdateRegenDelay(ActorValue a_actorValue, float a_regenDelay)
const IPostAnimationChannelUpdateFunctor * AsIPostAnimationChannelUpdateFunctor() const noexcept
Definition: Actor.h:764
void KillImmediate()
bool IsMoving() const
ObjectRefHandle GetOccupiedFurniture() const
bool GetRider(NiPointer< Actor > &a_outRider)
SKYRIM_REL_VR_VIRTUAL void ServePrisonTime()
float GetActorValueModifier(ACTOR_VALUE_MODIFIER a_modifier, ActorValue a_value) const
SKYRIM_REL_VR_VIRTUAL void AttachArrow(const BSTSmartPointer< BipedAnim > &a_biped)
TESFaction * GetVendorFaction()
SKYRIM_REL_VR_VIRTUAL void Unk_106(void)
SKYRIM_REL_VR_VIRTUAL float CheckClampDamageModifier(ActorValue a_av, float a_delta)
NiPoint3 GetBoundMin() const override
BGSAnimationSequencer * GetSequencer(void) const override
SKYRIM_REL_VR_VIRTUAL bool AddShout(TESShout *a_shout)
SKYRIM_REL_VR_VIRTUAL bool QSpeakingDone() const
bool IsChild() const override
SKYRIM_REL_VR_VIRTUAL void SetRefraction(bool a_enable, float a_refraction)
SKYRIM_REL_VR_VIRTUAL void SetSize(float a_size)
void SaveGame(BGSSaveFormBuffer *a_buf) override
void Unk_69(void) override
MagicTarget * GetMagicTarget() override
std::int32_t RequestDetectionLevel(Actor *a_target, DETECTION_PRIORITY a_priority=DETECTION_PRIORITY::kNormal)
bool ProcessInWater(hkpCollidable *a_collidable, float a_waterHeight, float a_deltaTime) override
SKYRIM_REL_VR_VIRTUAL void SetCrimeGoldValue(TESFaction *a_faction, bool a_violent, std::uint32_t a_amount)
BOOL_FLAGS
Definition: Actor.h:194
SKYRIM_REL_VR_VIRTUAL void SetEmotionValue(std::uint32_t a_emotionValue)
bool ShouldPerformRevert() const override
SKYRIM_REL_VR_VIRTUAL void UpdateNoAI(float a_delta)
SKYRIM_REL_VR_VIRTUAL void PotentiallyFixRagdollState()
SKYRIM_REL_VR_VIRTUAL void RemoveCrimeGoldValue(TESFaction *a_faction, bool a_violent, std::int32_t a_amount)
void AddToFaction(TESFaction *a_faction, std::int8_t a_rank)
void UpdateSoundCallBack(bool a_endSceneAction) override
std::uint8_t WhoIsCasting()
SKYRIM_REL_VR_VIRTUAL void Unk_C4(void)
bool HasShout(TESShout *a_shout) const
SKYRIM_REL_VR_VIRTUAL void Resurrect(bool a_resetInventory, bool a_attach3D)
SKYRIM_REL_VR_VIRTUAL void ForEachPerkEntry(EntryPoint a_entryType, PerkEntryVisitor &a_visitor) const
bool IsDualCasting() const
static NiPointer< Actor > LookupByHandle(RefHandle a_refHandle)
bool IsEssential() const
SKYRIM_REL_VR_VIRTUAL void SetAvoidanceDisabled(bool a_set)
NiPoint3 GetLookingAtLocation() const override
SKYRIM_REL_VR_VIRTUAL bool IsInFaction(const TESFaction *faction) const
bool GetMountedBy(NiPointer< Actor > &a_outRider)
SKYRIM_REL_VR_VIRTUAL bool MoveToMiddleHigh()
bhkCharacterController * GetCharController() const
TESFaction * GetCrimeFaction()
float GetRegenDelay(ActorValue a_actorValue) const
void MoveHavok(bool a_forceRec) override
ObjectRefHandle RemoveItem(TESBoundObject *a_item, std::int32_t a_count, ITEM_REMOVE_REASON a_reason, ExtraDataList *a_extraList, TESObjectREFR *a_moveToRef, const NiPoint3 *a_dropLoc=0, const NiPoint3 *a_rotate=0) override
void DispelAlteredStates(RE::EffectArchetype a_exception)
void SetFireNode(NiNode *a_fireNode) override
bool IsCurrentShout(SpellItem *a_power)
SKYRIM_REL_VR_VIRTUAL bhkCharacterController * Move(float a_arg2, const NiPoint3 &a_position)
SKYRIM_REL_VR_VIRTUAL void UnlockWord(TESWordOfPower *a_power)
TESObjectARMO * GetWornArmor(BGSBipedObjectForm::BipedObjectSlot a_slot, bool a_noInit=false)
SKYRIM_REL_VR_VIRTUAL void ApplyTemporaryPerk(BGSPerk *a_perk)
NiAVObject * Load3D(bool a_arg1) override
SKYRIM_REL_VR_VIRTUAL std::uint32_t GetEmotionValue()
bool RemoveSpell(SpellItem *a_spell)
bool OnAddCellPerformQueueReference(TESObjectCELL &a_cell) const override
SKYRIM_REL_VR_VIRTUAL void AddPerk(BGSPerk *a_perk, std::uint32_t a_rank=0)
Actor * GetTargetStatsObject() override
MagicCaster * GetMagicCaster(MagicSystem::CastingSource a_source) override
SKYRIM_REL_VR_VIRTUAL void ModifyMovementData(float a_delta, NiPoint3 &a_arg3, NiPoint3 &a_arg4)
SKYRIM_REL_VR_VIRTUAL float GetWalkSpeed()
void RemoveExtraArrows3D()
NiPoint3 GetStartingAngle() const override
const BSTEventSink< bhkCharacterMoveFinishEvent > * AsCharacterMoveFinishEventSink() const noexcept
Definition: Actor.h:756
SKYRIM_REL_VR_VIRTUAL void DrawWeaponMagicHands(bool a_draw)
SKYRIM_REL_VR_VIRTUAL void InitiateFlee(TESObjectREFR *a_fleeRef, bool a_runOnce, bool a_knows, bool a_combatMode, TESObjectCELL *a_cell, TESObjectREFR *a_ref, float a_fleeFromDist, float a_fleeToDist)
void Revert(BGSLoadFormBuffer *a_buf) override
bool IsTrespassing() const
void AllowPCDialogue(bool a_talk)
SKYRIM_REL_VR_VIRTUAL void ApplyPerksFromBase()
SKYRIM_REL_VR_VIRTUAL void HandleHealthDamage(Actor *a_attacker, float a_damage)
void AddObjectToContainer(TESBoundObject *a_object, ExtraDataList *a_extraList, std::int32_t a_count, TESObjectREFR *a_fromRefr) override
bool HasLineOfSight(TESObjectREFR *a_ref, bool &a_arg2)
std::int32_t GetGoldAmount(bool a_noInit=false)
bool AddAnimationGraphEventSink(BSTEventSink< BSAnimationGraphEvent > *a_sink) const
const TESFaction * GetCrimeFaction() const
bool ShouldSaveAnimationOnSaving() const override
void InitHavok() override
void InitiateDoNothingPackage()
NiAVObject * GetHeadPartObject(BGSHeadPart::HeadPartType a_type)
SKYRIM_REL_VR_VIRTUAL EmotionType GetEmotionType()
SKYRIM_REL_VR_VIRTUAL void Unk_117(void)
SKYRIM_REL_VR_VIRTUAL void Unk_C5(void)
SKYRIM_REL_VR_VIRTUAL void PickUpObject(TESObjectREFR *a_object, std::int32_t a_count, bool a_arg3=false, bool a_playSound=true)
SKYRIM_REL_VR_VIRTUAL void SetCannibal(bool a_set)
SKYRIM_REL_VR_VIRTUAL void GoToPrison(TESFaction *a_faction, bool a_removeInventory, bool a_realJail)
void SetDelete(bool a_set) override
BGSDialogueBranch * GetExclusiveBranch() const override
SKYRIM_REL_VR_VIRTUAL void WornArmorChanged(void)
void RemoveWeapon(BIPED_OBJECT equipIndex) override
static constexpr auto RTTI
Definition: Actor.h:140
NiNode * GetFireNode() override
SKYRIM_REL_VR_VIRTUAL void Unk_123(void)
bool IsBeingRidden() const
void DoMoveToHigh() override
float GetAimHeading() const
SKYRIM_REL_VR_VIRTUAL bool CheckValidTarget(TESObjectREFR &a_target)
SKYRIM_REL_VR_VIRTUAL void InitiateVampireFeedPackage(Actor *a_target, TESObjectREFR *a_furniture)
SKYRIM_REL_VR_VIRTUAL void DetachArrow(const BSTSmartPointer< BipedAnim > &a_biped)
void UnequipItem(std::uint64_t a_arg1, TESBoundObject *a_object) override
void ClearExpressionOverride()
SKYRIM_REL_VR_VIRTUAL bool IsAtPoint(const NiPoint3 &a_point, float a_radius, bool a_expandRadius, bool a_alwaysTestHeight)
void Disable() override
SKYRIM_REL_VR_VIRTUAL bool CalculateCachedOwnerIsNPC() const
TESAmmo * GetCurrentAmmo() const override
SKYRIM_REL_VR_VIRTUAL void UseSkill(ActorValue a_av, float a_points, TESForm *a_arg3)
void Unk_67(void) override
SKYRIM_REL_VR_VIRTUAL float GetRunSpeed()
bool UpdateInDialogue(DialogueResponse *a_response, bool a_unused) override
const BSTEventSink< BSTransformDeltaEvent > * AsBSTransformDeltaEventSink() const noexcept
Definition: Actor.h:748
ActorHandle CreateRefHandle()
bool IsRunning() const
bool IsPointSubmergedMoreThan(const NiPoint3 &a_pos, TESObjectCELL *a_cell, float a_waterLevel)
SKYRIM_REL_VR_VIRTUAL void Unk_C6(void)
SKYRIM_REL_VR_VIRTUAL bool PutActorOnMountQuick()
SKYRIM_REL_VR_VIRTUAL void OnItemEquipped(bool a_playAnim)
void SetCurrentScene(BGSScene *a_scene) override
SKYRIM_REL_VR_VIRTUAL void PlayPickUpSound(TESBoundObject *a_object, bool a_pickup, bool a_use)
bool GetMount(NiPointer< Actor > &a_outMount)
bool MagicTargetIsActor() const override
void SwitchRace(TESRace *a_race, bool a_player)
SOUL_LEVEL GetSoulSize() const
const ACTOR_RUNTIME_DATA & GetActorRuntimeData() const noexcept
Definition: Actor.h:715
bool IsProtected() const
SKYRIM_REL_VR_VIRTUAL void UpdateCharacterControllerSimulationSettings(bhkCharacterController &a_controller)
bool CanFlyHere() const
TESObjectARMO * GetWornArmor(FormID a_formID, bool a_noInit=false)
SKYRIM_REL_VR_VIRTUAL void CheckTempModifiers()
bool Decapitate()
SKYRIM_REL_VR_VIRTUAL void PayFine(TESFaction *a_faction, bool a_goToJail, bool a_removeStolenItems)
void TryUpdateActorLastSeenTime() override
SKYRIM_REL_VR_VIRTUAL void ModCrimeGoldValue(TESFaction *a_faction, bool a_violent, std::int32_t a_amount)
bool CanUseIdle(TESIdleForm *a_idle) const
bool IsAttacking() const
bool SetSleepOutfit(BGSOutfit *a_outfit, bool a_update3D)
SKYRIM_REL_VR_VIRTUAL void UpdateCombatControllerSettings()
void SetExclusiveBranch(BGSDialogueBranch *a_branch) override
TESObjectARMO * GetSkin() const
NiPoint3 GetBoundMax() const override
void UpdateWeaponAbility(TESForm *a_weapon, ExtraDataList *a_extraData, bool a_leftHand)
bool IsHostileToActor(Actor *a_actor)
SKYRIM_REL_VR_VIRTUAL float GetFastWalkSpeed()
const InventoryEntryData * GetAttackingWeapon() const
bool IsAIEnabled() const
void UpdateHairColor()
SKYRIM_REL_VR_VIRTUAL float GetArmorBaseFactorSum()
void Set3D(NiAVObject *a_object, bool a_queue3DTasks=true) override
SKYRIM_REL_VR_VIRTUAL void Unk_B4(void)
BOOL_BITS
Definition: Actor.h:157
void UpdateSkinColor()
SKYRIM_REL_VR_VIRTUAL void SetEmotionType(EmotionType a_emotionType)
float GetWarmthRating() const
SKYRIM_REL_VR_VIRTUAL bool ShouldRespondToActorCollision(const MovementMessageActorCollision &a_msg, const ActorHandlePtr &a_target)
SKYRIM_REL_VR_VIRTUAL void PrecacheData()
SKYRIM_REL_VR_VIRTUAL bool IsInCombat() const
TESObjectARMO * GetSkin(BGSBipedObjectForm::BipedObjectSlot a_slot, bool a_noInit=false)
TESForm * GetEquippedObject(bool a_leftHand) const
SKYRIM_REL_VR_VIRTUAL void DetachCharController()
void DoReset3D(bool a_updateWeight)
bool IsOverEncumbered() const
double GetMoveDirectionRelativeToFacing()
void Unk_68(void) override
void Unk_78(void) override
SKYRIM_REL_VR_VIRTUAL void CreateActorMover()
bool IsOnMount() const
TESShout * GetCurrentShout()
void TrespassAlarm(TESObjectREFR *a_ref, TESForm *a_ownership, std::int32_t a_crime)
SKYRIM_REL_VR_VIRTUAL bool HasPerkEntries(EntryPoint a_entryType) const
SKYRIM_REL_VR_VIRTUAL bool IsPowerAttackCoolingDown() const
void DoTrap2(TrapEntry *a_trap, TargetEntry *a_target) override
void Predestroy() override
SKYRIM_REL_VR_VIRTUAL float CalcArmorRating()
bool AddWornItem(TESBoundObject *a_item, std::int32_t a_count, bool a_forceEquip, std::uint32_t a_arg4, std::uint32_t a_arg5) override
SKYRIM_REL_VR_VIRTUAL void SetCombatGroup(CombatGroup *a_group)
void Unk_75(void) override
void UpdateArmorAbility(TESForm *a_armor, ExtraDataList *a_extraData)
bool IsGuard() const
SKYRIM_REL_VR_VIRTUAL void Unk_C9(void)
static constexpr auto FORMTYPE
Definition: Actor.h:141
void Update3DPosition(bool a_warp) override
bool AddSpell(SpellItem *a_spell)
void RemoveOutfitItems(BGSOutfit *a_outfit)
bool IsDead(bool a_notEssential=true) const override
SKYRIM_REL_VR_VIRTUAL void UpdateNonRenderSafe(float a_delta)
void ProcessVATSAttack(MagicCaster *a_caster, bool a_hasTargetAnim, TESObjectREFR *a_target, bool a_leftHand)
TESPackage * GetCurrentPackage()
void SetParentCell(TESObjectCELL *a_cell) override
SKYRIM_REL_VR_VIRTUAL CombatGroup * GetCombatGroup() const
void SetActionComplete(bool a_set) override
NiPointer< Actor > GetCommandingActor() const
SKYRIM_REL_VR_VIRTUAL ObjectRefHandle DropObject(const TESBoundObject *a_object, ExtraDataList *a_extraList, std::int32_t a_count, const NiPoint3 *a_dropLoc=0, const NiPoint3 *a_rotate=0)
SKYRIM_REL_VR_VIRTUAL bool CheckCast(MagicItem *a_spell, bool a_dualCast, MagicSystem::CannotCastReason *a_reason)
SKYRIM_REL_VR_VIRTUAL bool MovetoMiddleLow()
SKYRIM_REL_VR_VIRTUAL float GetAcrobatics() const
SKYRIM_REL_VR_VIRTUAL bool InitiateTresPassPackage(TrespassPackage *a_trespassPackage)
SKYRIM_REL_VR_VIRTUAL std::int32_t GetCurrentShoutLevel()
bool IsAMount() const
void UpdateAnimation(float a_delta) override
const ActorState * AsActorState() const noexcept
Definition: Actor.h:740
SKYRIM_REL_VR_VIRTUAL bool GetVampireFeed()
bool IsBlocking() const
void StopMoving(float a_delta)
std::uint32_t GetCollisionFilterInfo(std::uint32_t &a_outCollisionFilterInfo)
bool IsInCastPowerList(SpellItem *a_power)
void EnableAI(bool a_enable)
void DeselectSpell(SpellItem *a_spell)
const MagicTarget * AsMagicTarget() const noexcept
Definition: Actor.h:724
SKYRIM_REL_VR_VIRTUAL void RemovePerk(BGSPerk *a_perk)
SKYRIM_REL_VR_VIRTUAL void SetLastRiddenMount(ActorHandle a_mount)
bool CanTalkToPlayer() const
void AllowBleedoutDialogue(bool a_canTalk)
void ClearArrested()
void ForceEditorLocation(BGSLocation *a_location) override
SKYRIM_REL_VR_VIRTUAL void EndDialogue()
SKYRIM_REL_VR_VIRTUAL void Unk_105(void)
~Actor() override
SKYRIM_REL_VR_VIRTUAL void InitiateSpectator(Actor *a_target)
const ActorValueOwner * AsActorValueOwner() const noexcept
Definition: Actor.h:732
bool HasOutfitItems(BGSOutfit *a_outfit)
HighProcessData * GetHighProcess() const
TESForm * GetEquippedObjectInSlot(const BGSEquipSlot *slot) const
void DoTrap1(TrapData &a_data) override
SKYRIM_REL_VR_VIRTUAL void SetBeenAttacked(bool a_set)
SKYRIM_REL_VR_VIRTUAL float GetAlpha()
SKYRIM_REL_VR_VIRTUAL void UpdateFadeSettings(bhkCharacterController *a_controller)
BSTEventSink< BSTransformDeltaEvent > * AsBSTransformDeltaEventSink() noexcept
Definition: Actor.h:744
bool HasSpell(SpellItem *a_spell) const
const TESFaction * GetVendorFaction() const
constexpr bool IsInKillMove() const noexcept
Definition: Actor.h:595
SKYRIM_REL_VR_VIRTUAL void Unk_EA(void)
SKYRIM_REL_VR_VIRTUAL void CreateMovementController()
SKYRIM_REL_VR_VIRTUAL const BSFixedString & GetResponseString() const
BSFaceGenAnimationData * GetFaceGenAnimationData() override
SKYRIM_REL_VR_VIRTUAL void GetEyeVector(NiPoint3 &a_origin, NiPoint3 &a_direction, bool a_includeCameraOffset)
SKYRIM_REL_VR_VIRTUAL void ProcessTracking(float a_delta, NiAVObject *a_obj3D)
SKYRIM_REL_VR_VIRTUAL void RemoveTemporaryPerk(BGSPerk *a_perk)
bool IsSneaking() const
ActorHandle GetHandle()
BSSimpleList< ActiveEffect * > * GetActiveEffectList() override
SKYRIM_REL_VR_VIRTUAL ActorHandle QLastRiddenMount() const
void Unk_96(void) override
void StealAlarm(TESObjectREFR *a_ref, TESForm *a_object, std::int32_t a_num, std::int32_t a_total, TESForm *a_owner, bool a_allowWarning)
SKYRIM_REL_VR_VIRTUAL void UpdateAlpha()
bool CanPickpocket() const
std::int32_t GetFactionRank(TESFaction *a_faction, bool a_isPlayer)
SKYRIM_REL_VR_VIRTUAL void SetAlpha(float a_alpha=1.0)
SKYRIM_REL_VR_VIRTUAL void SetPosition(const NiPoint3 &a_pos, bool a_updateCharController)
ACTOR_RUNTIME_DATA & GetActorRuntimeData() noexcept
Definition: Actor.h:710
bool IsAnimationDriven() const
void ClearExtraArrows()
Definition: Actor.h:514
void RemoveCastScroll(SpellItem *a_spell, MagicSystem::CastingSource a_source)
SKYRIM_REL_VR_VIRTUAL void InitiateGetUpPackage()
InventoryEntryData * GetEquippedEntryData(bool a_leftHand) const
bool IsInRagdollState() const
bool IsSummoned() const noexcept
SKYRIM_REL_VR_VIRTUAL float CalcUnarmedDamage()
float GetTotalCarryWeight()
void SetLifeState(ACTOR_LIFE_STATE a_lifeState)
void RemoveFromFaction(TESFaction *a_faction)
SKYRIM_REL_VR_VIRTUAL void Update(float a_delta)
void SetRotationZ(float a_angle)
SKYRIM_REL_VR_VIRTUAL bool DrinkPotion(AlchemyItem *a_potion, ExtraDataList *a_extralist)
void LoadGame(BGSLoadFormBuffer *a_buf) override
bool HasKeywordHelper(const BGSKeyword *a_keyword) const override
Actor * GetKiller() const
SKYRIM_REL_VR_VIRTUAL void PutCreatedPackage(TESPackage *a_package, bool a_tempPackage, bool a_createdPackage, bool a_allowFromFurniture)
void TryMoveToMiddleLow() override
float GetVoiceRecoveryTime()
SKYRIM_REL_VR_VIRTUAL void DestroyActorMover()
BGSLocation * GetEditorLocation1() const override
const TESShout * GetCurrentShout() const
void VisitSpells(ForEachSpellVisitor &a_visitor)
SKYRIM_REL_VR_VIRTUAL void SetSpeakingDone(bool a_set)
void UpdateAwakeSound(NiAVObject *a_obj3D)
BGSScene * GetCurrentScene() const override
bool IsLeveled() const
void CastPermanentMagic(bool a_wornItemEnchantments, bool a_baseSpells, bool a_raceSpells, bool a_everyActorAbility)
bool IsLimbGone(std::uint32_t a_limb)
BSTEventSink< bhkCharacterMoveFinishEvent > * AsCharacterMoveFinishEventSink() noexcept
Definition: Actor.h:752
bool PopulateGraphProjectsToLoad(void) const override
bool DetachHavok(NiAVObject *a_obj3D) override
SKYRIM_REL_VR_VIRTUAL float GetHeading(bool a_ignoreRaceSettings) const
SKYRIM_REL_VR_VIRTUAL void Unk_E9(void)
SKYRIM_REL_VR_VIRTUAL bool ComputeMotionFeedbackSpeedAndDirection(const ActorMotionFeedbackData &a_data, float a_delta, ActorMotionFeedbackOutput &a_output)
void FinishLoadGame(BGSLoadFormBuffer *a_buf) override
ActorValueOwner * AsActorValueOwner() noexcept
Definition: Actor.h:728
void ResetInventory(bool a_leveledOnly) override
SKYRIM_REL_VR_VIRTUAL void SetActorStartingPosition()
NiPoint3 GetStartingLocation() const override
float GetEquippedWeight()
void PlayASound(BSSoundHandle &a_result, FormID a_formID, bool a_unk03, std::uint32_t a_flags)
SKYRIM_REL_VR_VIRTUAL void RemoveCharController()
void GetLinearVelocity(NiPoint3 &a_velocity) const override
IPostAnimationChannelUpdateFunctor * AsIPostAnimationChannelUpdateFunctor() noexcept
Definition: Actor.h:760
ActorState * AsActorState() noexcept
Definition: Actor.h:736
float GetHeight()
bool IsCasting(MagicItem *a_spell) const
void InitLoadGame(BGSLoadFormBuffer *a_buf) override
SKYRIM_REL_VR_VIRTUAL void KillDying()
SKYRIM_REL_VR_VIRTUAL std::uint32_t GetCrimeGoldValue(const TESFaction *a_faction) const
SKYRIM_REL_VR_VIRTUAL bool HasBeenAttacked() const
void AddWornOutfit(BGSOutfit *a_outfit, bool a_forceUpdate)
SKYRIM_REL_VR_VIRTUAL bool CalculateCachedOwnerIsUndead() const
SKYRIM_REL_VR_VIRTUAL void UpdateCombat()
SKYRIM_REL_VR_VIRTUAL Actor * SetUpTalkingActivatorActor(Actor *a_target, Actor *&a_activator)
void InterruptCast(bool a_restoreMagicka) const
SKYRIM_REL_VR_VIRTUAL void OnArmorActorValueChanged()
SKYRIM_REL_VR_VIRTUAL void WeaponSwingCallBack()
TESPackage * CheckForCurrentAliasPackage() override
SKYRIM_REL_VR_VIRTUAL bool UpdateFeedbackGraphSpeedAndDirection(const ActorMotionFeedbackOutput &a_output)
bool SetDefaultOutfit(BGSOutfit *a_outfit, bool a_update3D)
void RemoveAnimationGraphEventSink(BSTEventSink< BSAnimationGraphEvent > *a_sink) const
void InitItemImpl() override
void VisitArmorAddon(TESObjectARMO *a_armor, TESObjectARMA *a_arma, std::function< void(bool a_firstPerson, NiAVObject &a_obj)> a_visitor)
SKYRIM_REL_VR_VIRTUAL void InitiateDialogue(Actor *a_target, PackageLocation *a_loc1, PackageLocation *a_loc2)
TESRace * GetRace() const
SKYRIM_REL_VR_VIRTUAL bool GetCannibal()
SKYRIM_REL_VR_VIRTUAL bool MovetoLow()
SKYRIM_REL_VR_VIRTUAL void Unk_B3(void)
bool IsFactionInCrimeGroup(const TESFaction *a_faction) const
void SetRotationX(float a_angle)
MiddleHighProcessData * GetMiddleHighProcess() const
bool GetEditorLocation2(NiPoint3 &a_outPos, NiPoint3 &a_outRot, TESForm *&a_outWorldOrCell, TESObjectCELL *a_fallback) override
void ModifyAnimationUpdateData(BSAnimationUpdateData &a_data) override
bool WouldBeStealing(const TESObjectREFR *a_target) const
void SetObjectReference(TESBoundObject *a_object) override
bool IsPlayerTeammate() const
SKYRIM_REL_VR_VIRTUAL void ForEachPerk(PerkEntryVisitor &a_visitor) const
static bool LookupByHandle(RefHandle a_refHandle, NiPointer< Actor > &a_refrOut)
void StopAlarmOnActor()
float GetAimAngle() const
SKYRIM_REL_VR_VIRTUAL float GetJogSpeed()
SKYRIM_REL_VR_VIRTUAL void Unk_A2(void)
void PauseCurrentDialogue(void) override
const TESNPC * GetActorBase() const
MagicTarget * AsMagicTarget() noexcept
Definition: Actor.h:720
void Update3DModel()
bool ShouldSaveAnimationOnUnloading() const override
SKYRIM_REL_VR_VIRTUAL std::uint32_t UseAmmo(std::uint32_t a_shotCount)
void EvaluatePackage(bool a_immediate=false, bool a_resetAI=false)
SKYRIM_REL_VR_VIRTUAL void UpdateActor3DPosition()
SKYRIM_REL_VR_VIRTUAL bool CalculateCachedOwnerIsInCombatantFaction() const
bool CanOfferServices() const
SKYRIM_REL_VR_VIRTUAL void StartPowerAttackCoolDown()
TESNPC * GetActorBase()
bool TryChangeSkyCellActorsProcessLevel() override
void AddCastPower(SpellItem *a_power)
std::uint16_t GetLevel() const
SKYRIM_REL_VR_VIRTUAL void Unk_D1(void)
SKYRIM_REL_VR_VIRTUAL void InitiateCannibalPackage(Actor *a_target)
void DispelWornItemEnchantments()
bool ApplyCurrent(float a_velocityTime, const hkVector4 &a_velocity) override
bool VisitFactions(std::function< bool(TESFaction *a_faction, std::int8_t a_rank)> a_visitor)
bool SetDialogueWithPlayer(bool a_flag, bool a_forceGreet, TESTopicInfo *a_topic) override
bool HasKeywordString(std::string_view a_formEditorID)
SKYRIM_REL_VR_VIRTUAL bool MoveToHigh()
const TESPackage * GetCurrentPackage() const
InventoryEntryData * GetAttackingWeapon()
bool CanAttackActor(Actor *a_actor)
bool IsGhost() const
SKYRIM_REL_VR_VIRTUAL void InitValues()
bool HasPerk(BGSPerk *a_perk) const
bool IsInMidair() const
bool IsAlarmed() const
SKYRIM_REL_VR_VIRTUAL void KillImpl(Actor *a_attacker, float a_damage, bool a_sendEvent, bool a_ragdollInstant)
void EndInterruptPackage(bool a_skipDialogue)
Definition: AlchemyItem.h:24
Definition: BGSAnimationSequencer.h:11
Definition: BGSDialogueBranch.h:10
Definition: BGSEquipSlot.h:10
HeadPartType
Definition: BGSHeadPart.h:34
Definition: BGSKeyword.h:10
Definition: BGSLoadFormBuffer.h:11
Definition: BGSLocation.h:68
Definition: BGSOutfit.h:11
BGSEntryPoint::ENTRY_POINT EntryPoint
Definition: BGSPerkEntry.h:24
Definition: BGSPerk.h:31
Definition: BGSSaveFormBuffer.h:8
Definition: BGSScene.h:32
Definition: BSFaceGenAnimationData.h:11
Definition: BSPointerHandleSmartPointer.h:10
Definition: BSTList.h:10
Definition: BSTEvent.h:143
Definition: BSTSmartPointer.h:36
Definition: CombatGroup.h:70
Definition: DialogueItem.h:22
Definition: ExtraDataList.h:53
Definition: IPostAnimationChannelUpdateFunctor.h:6
Definition: InventoryEntryData.h:15
Definition: MagicCaster.h:25
Definition: MagicItem.h:30
Definition: MagicTarget.h:26
Definition: NiAVObject.h:50
Definition: NiNode.h:12
Definition: NiPoint3.h:6
Definition: NiSmartPointer.h:9
Definition: PackageLocation.h:11
Definition: PerkEntryVisitor.h:10
Definition: SpellItem.h:16
Definition: TESAmmo.h:60
Definition: TESBoundObject.h:24
Definition: TESFaction.h:120
Definition: TESForm.h:36
Definition: TESIdleForm.h:37
Definition: TESNPC.h:36
Definition: TESObjectARMA.h:28
Definition: TESObjectARMO.h:37
Definition: TESObjectCELL.h:116
Definition: TESObjectREFR.h:113
Definition: TESPackage.h:255
Definition: TESRace.h:146
Definition: TESShout.h:18
Definition: TESTopicInfo.h:42
Definition: TESWordOfPower.h:13
Definition: bhkCharacterController.h:66
const_pointer data() const noexcept
Definition: BSFixedString.h:116
Definition: hkVector4.h:9
Definition: hkpCollidable.h:13
ForEachResult
Definition: BSContainer.h:6
CannotCastReason
Definition: MagicSystem.h:10
CastingSource
Definition: MagicSystem.h:24
Definition: AbsorbEffect.h:6
NiSmartPointer(Actor)
SOUL_LEVEL
Definition: SoulLevels.h:6
EmotionType
Definition: EmotionTypes.h:6
ActorValue
Definition: ActorValues.h:6
DETECTION_PRIORITY
Definition: DetectionPriorities.h:6
ACTOR_LIFE_STATE
Definition: ActorState.h:8
std::uint32_t FormID
Definition: BSCoreTypes.h:5
constexpr REL::VariantID RTTI_Actor__ForEachSpellVisitor(686850, 394698, 0x1f06a10)
ITEM_REMOVE_REASON
Definition: TESObjectREFR.h:64
constexpr REL::VariantID RTTI_Actor(513915, 392538, 0x1edaa58)
ACTOR_CRITICAL_STAGE
Definition: Actor.h:54
std::uint32_t RefHandle
Definition: BSCoreTypes.h:6
constexpr REL::Version RUNTIME_SSE_1_6_629(1, 6, 629, 0)
Definition: ActorValueList.h:28
ACTOR_VALUE_MODIFIER
Definition: ActorValues.h:179
@ kTotal
Definition: ActorValues.h:184
Definition: Actor.h:77
const T * operator[](ActorValue a_actorValue) const
Definition: Actor.h:84
T * operator[](ActorValue a_actorValue)
Definition: Actor.h:79
BSFixedString actorValues
Definition: Actor.h:90
T * entries
Definition: Actor.h:91
Definition: Actor.h:73
LocalMap< float > baseValues
Definition: Actor.h:113
LocalMap< Modifiers > modifiers
Definition: Actor.h:117
Definition: Actor.h:645
Definition: Actor.h:231
ChangeFlag
Definition: Actor.h:233
@ kLifeState
Definition: Actor.h:234
@ kMerchantContainer
Definition: Actor.h:236
@ kDismemberedLimbs
Definition: Actor.h:237
@ kOverrideModifiers
Definition: Actor.h:242
@ kPackageExtraData
Definition: Actor.h:235
@ kDispModifiers
Definition: Actor.h:239
@ kPermanentModifiers
Definition: Actor.h:243
@ kLeveledActor
Definition: Actor.h:238
@ kTempModifiers
Definition: Actor.h:240
@ kDamageModifiers
Definition: Actor.h:241
Definition: Actor.h:248
RecordFlag
Definition: Actor.h:250
@ kInitiallyDisabled
Definition: Actor.h:254
@ kPersistent
Definition: Actor.h:253
@ kNoAIAcquire
Definition: Actor.h:256
@ kIgnored
Definition: Actor.h:255
@ kDontHavokSettle
Definition: Actor.h:257
@ kStartsDead
Definition: Actor.h:252
@ kDeleted
Definition: Actor.h:251
Definition: Actor.h:144
@ kLeftHand
Definition: Actor.h:147
@ kPowerOrShout
Definition: Actor.h:150
@ kUnknown
Definition: Actor.h:149
@ kTotal
Definition: Actor.h:152
@ kRightHand
Definition: Actor.h:148
ENTRY_POINT
Definition: BGSEntryPoint.h:12
BipedObjectSlot
Definition: BGSBipedObjectForm.h:11
BIPED_OBJECT
Definition: BipedObjects.h:8
Definition: BSAnimationGraphEvent.h:10
Definition: BSAnimationUpdateData.h:10
Definition: BSSoundHandle.h:10
ArchetypeID
Definition: EffectArchetypes.h:8
Definition: HighProcessData.h:60
Definition: MiddleHighProcessData.h:132
Definition: Actor.h:65
float modifiers[ACTOR_VALUE_MODIFIERS::kTotal]
Definition: Actor.h:68