OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
creaturestats.hpp
Go to the documentation of this file.
1 #ifndef GAME_MWMECHANICS_CREATURESTATS_H
2 #define GAME_MWMECHANICS_CREATURESTATS_H
3 
4 #include <set>
5 #include <string>
6 #include <stdexcept>
7 
8 #include "stat.hpp"
9 #include "magiceffects.hpp"
10 #include "spells.hpp"
11 #include "activespells.hpp"
12 #include "aisequence.hpp"
13 #include "drawstate.hpp"
14 
15 namespace ESM
16 {
17  struct CreatureStats;
18 }
19 
20 namespace MWMechanics
21 {
26  {
27  static int sActorId;
30  DynamicStat<float> mDynamic[3]; // health, magicka, fatigue
36  bool mDead;
38  bool mDied; // flag for OnDeath script function
39  bool mMurdered;
41  bool mTalkedTo;
42  bool mAlarmed;
43  bool mAttacked;
44  bool mKnockdown;
48  bool mBlock;
49  unsigned int mMovementFlags;
50 
51  float mFallHeight;
52 
53  std::string mLastHitObject; // The last object to hit this actor
54  std::string mLastHitAttemptObject; // The last object to attempt to hit this actor
55 
57 
58  // For merchants: the last time items were restocked and gold pool refilled.
60 
61  // The pool of merchant gold (not in inventory)
62  int mGoldPool;
63 
64  int mActorId;
65  int mHitAttemptActorId; // Stores an actor that attacked this actor. Only one is stored at a time,
66  // and it is not changed if a different actor attacks. It is cleared when combat ends.
67 
68  // The index of the death animation that was played, or -1 if none played
69  signed char mDeathAnimation;
70 
72 
73  public:
74  typedef std::pair<int, std::string> SummonKey; // <ESM::MagicEffect index, spell ID>
75  private:
76  std::map<SummonKey, int> mSummonedCreatures; // <SummonKey, ActorId>
77 
78  // Contains ActorIds of summoned creatures with an expired lifetime that have not been deleted yet.
79  // This may be necessary when the creature is in an inactive cell.
80  std::vector<int> mSummonGraveyard;
81 
82  protected:
83  int mLevel;
84 
85  public:
86  CreatureStats();
87 
88  DrawState_ getDrawState() const;
89  void setDrawState(DrawState_ state);
90 
92  void setNeedRecalcDynamicStats(bool val);
93 
94  void addToFallHeight(float height);
95 
98  float land(bool isPlayer=false);
99 
100  const AttributeValue & getAttribute(int index) const;
101 
102  const DynamicStat<float> & getHealth() const;
103 
104  const DynamicStat<float> & getMagicka() const;
105 
106  const DynamicStat<float> & getFatigue() const;
107 
108  const DynamicStat<float> & getDynamic (int index) const;
109 
110  const Spells & getSpells() const;
111 
112  const ActiveSpells & getActiveSpells() const;
113 
114  const MagicEffects & getMagicEffects() const;
115 
116  bool getAttackingOrSpell() const;
117 
118  int getLevel() const;
119 
120  Spells & getSpells();
121 
123 
125 
126  void setAttribute(int index, const AttributeValue &value);
127  // Shortcut to set only the base
128  void setAttribute(int index, int base);
129 
130  void setHealth(const DynamicStat<float> &value);
131 
132  void setMagicka(const DynamicStat<float> &value);
133 
134  void setFatigue(const DynamicStat<float> &value);
135 
136  void setDynamic (int index, const DynamicStat<float> &value);
137 
139  void modifyMagicEffects(const MagicEffects &effects);
140 
141  void setAttackingOrSpell(bool attackingOrSpell);
142 
143  void setLevel(int level);
144 
146  {
147  AI_Hello = 0,
148  AI_Fight = 1,
149  AI_Flee = 2,
151  };
152  void setAiSetting (AiSetting index, Stat<int> value);
153  void setAiSetting (AiSetting index, int base);
154  Stat<int> getAiSetting (AiSetting index) const;
155 
156  const AiSequence& getAiSequence() const;
157 
159 
160  float getFatigueTerm() const;
162 
163  bool isParalyzed() const;
164 
165  bool isDead() const;
166 
167  bool isDeathAnimationFinished() const;
168  void setDeathAnimationFinished(bool finished);
169 
170  void notifyDied();
171 
172  bool hasDied() const;
173 
174  void clearHasDied();
175 
176  bool hasBeenMurdered() const;
177 
178  void clearHasBeenMurdered();
179 
180  void notifyMurder();
181 
182  void resurrect();
183 
184  bool hasCommonDisease() const;
185 
186  bool hasBlightDisease() const;
187 
188  int getFriendlyHits() const;
190 
191  void friendlyHit();
193 
194  bool hasTalkedToPlayer() const;
196 
197  void talkedToPlayer();
198 
199  bool isAlarmed() const;
200  void setAlarmed (bool alarmed);
201 
202  bool getAttacked() const;
203  void setAttacked (bool attacked);
204 
205  float getEvasion() const;
206 
207  void setKnockedDown(bool value);
210  bool getKnockedDown() const;
211  void setKnockedDownOneFrame(bool value);
213  bool getKnockedDownOneFrame() const;
214  void setKnockedDownOverOneFrame(bool value);
216  bool getKnockedDownOverOneFrame() const;
217  void setHitRecovery(bool value);
218  bool getHitRecovery() const;
219  void setBlock(bool value);
220  bool getBlock() const;
221 
222  std::map<SummonKey, int>& getSummonedCreatureMap(); // <SummonKey, ActorId of summoned creature>
223  std::vector<int>& getSummonedCreatureGraveyard(); // ActorIds
224 
225  enum Flag
226  {
229  Flag_Run = 4,
233  };
234  enum Stance
235  {
238  };
239 
240  bool getMovementFlag (Flag flag) const;
241  void setMovementFlag (Flag flag, bool state);
243  bool getStance (Stance flag) const;
244 
245  void setLastHitObject(const std::string &objectid);
246  const std::string &getLastHitObject() const;
247  void setLastHitAttemptObject(const std::string &objectid);
248  const std::string &getLastHitAttemptObject() const;
249  void setHitAttemptActorId(const int actorId);
250  int getHitAttemptActorId() const;
251 
252  // Note, this is just a cache to avoid checking the whole container store every frame. We don't need to store it in saves.
253  // TODO: Put it somewhere else?
254  std::set<int> mBoundItems;
255 
256  void writeState (ESM::CreatureStats& state) const;
257 
258  void readState (const ESM::CreatureStats& state);
259 
260  static void writeActorIdCounter (ESM::ESMWriter& esm);
261  static void readActorIdCounter (ESM::ESMReader& esm);
262 
263  void setLastRestockTime(MWWorld::TimeStamp tradeTime);
265 
266  void setGoldPool(int pool);
267  int getGoldPool() const;
268 
269  signed char getDeathAnimation() const; // -1 means not decided
270  void setDeathAnimation(signed char index);
271 
273 
274  int getActorId();
276 
277  bool matchesActorId (int id) const;
280 
281  static void cleanup();
282  };
283 }
284 
285 #endif
bool hasBeenMurdered() const
Definition: creaturestats.cpp:268
bool getAttacked() const
Definition: creaturestats.cpp:336
static void cleanup()
Definition: creaturestats.cpp:635
MagicEffects mMagicEffects
Definition: creaturestats.hpp:33
bool getHitRecovery() const
Definition: creaturestats.cpp:450
void notifyMurder()
Definition: creaturestats.cpp:273
Definition: stat.hpp:123
void modifyMagicEffects(const MagicEffects &effects)
Set Modifier for each magic effect according to effects. Does not touch Base values.
Definition: creaturestats.cpp:212
AiSetting
Definition: creaturestats.hpp:145
std::string mLastHitObject
Definition: creaturestats.hpp:53
bool mKnockdownOverOneFrame
Definition: creaturestats.hpp:46
bool mAttacked
Definition: creaturestats.hpp:43
bool mRecalcMagicka
Definition: creaturestats.hpp:56
float getFatigueTerm() const
Return effective fatigue.
Definition: creaturestats.cpp:42
bool isAlarmed() const
Definition: creaturestats.cpp:326
Effects currently affecting a NPC or creature.
Definition: magiceffects.hpp:83
bool isParalyzed() const
Definition: creaturestats.cpp:233
const std::string & getLastHitAttemptObject() const
Definition: creaturestats.cpp:371
bool isDeathAnimationFinished() const
Definition: creaturestats.cpp:243
bool hasBlightDisease() const
Definition: creaturestats.cpp:301
std::string mLastHitAttemptObject
Definition: creaturestats.hpp:54
Definition: esmreader.hpp:21
bool needToRecalcDynamicStats()
Definition: creaturestats.cpp:401
Stat< int > mAiSettings[4]
Definition: creaturestats.hpp:34
MWWorld::TimeStamp mLastRestock
Definition: creaturestats.hpp:59
Common creature stats.
Definition: creaturestats.hpp:25
DrawState_ mDrawState
Definition: creaturestats.hpp:28
const MagicEffects & getMagicEffects() const
Definition: creaturestats.cpp:91
bool getKnockedDownOverOneFrame() const
Returns true for all but the first frame of being knocked out; used to know to not reset mKnockedDown...
Definition: creaturestats.cpp:441
bool mBlock
Definition: creaturestats.hpp:48
bool mAlarmed
Definition: creaturestats.hpp:42
void setFatigue(const DynamicStat< float > &value)
Definition: creaturestats.cpp:179
void setDeathAnimationFinished(bool finished)
Definition: creaturestats.cpp:248
bool mMurdered
Definition: creaturestats.hpp:39
ActiveSpells mActiveSpells
Definition: creaturestats.hpp:32
bool getMovementFlag(Flag flag) const
Definition: creaturestats.cpp:465
static int sActorId
Definition: creaturestats.hpp:27
const DynamicStat< float > & getDynamic(int index) const
Definition: creaturestats.cpp:106
Definition: creaturestats.hpp:231
const DynamicStat< float > & getFatigue() const
Definition: creaturestats.cpp:76
bool mDied
Definition: creaturestats.hpp:38
int getActorId()
Will generate an actor ID, if the actor does not have one yet.
Definition: creaturestats.cpp:622
void setAttribute(int index, const AttributeValue &value)
Definition: creaturestats.cpp:136
void setBlock(bool value)
Definition: creaturestats.cpp:455
void setMovementFlag(Flag flag, bool state)
Definition: creaturestats.cpp:470
Definition: creaturestats.hpp:147
float getEvasion() const
Definition: creaturestats.cpp:346
CreatureStats()
Definition: creaturestats.cpp:20
void clearHasBeenMurdered()
Definition: creaturestats.cpp:278
void setHitAttemptActorId(const int actorId)
Definition: creaturestats.cpp:376
Sequence of AI-packages for a single actor.
Definition: aisequence.hpp:36
void setLastRestockTime(MWWorld::TimeStamp tradeTime)
Definition: creaturestats.cpp:603
Definition: creaturestats.hpp:232
Definition: creaturestats.hpp:236
void setGoldPool(int pool)
Definition: creaturestats.cpp:613
MWWorld::TimeStamp getTimeOfDeath() const
Definition: creaturestats.cpp:662
unsigned int mMovementFlags
Definition: creaturestats.hpp:49
Definition: creaturestats.hpp:148
int mActorId
Definition: creaturestats.hpp:64
void setLastHitObject(const std::string &objectid)
Definition: creaturestats.cpp:356
float land(bool isPlayer=false)
Definition: creaturestats.cpp:391
int getGoldPool() const
Definition: creaturestats.cpp:617
Definition: esmwriter.hpp:17
const AttributeValue & getAttribute(int index) const
Definition: creaturestats.cpp:58
Definition: creaturestats.hpp:228
bool isDead() const
Definition: creaturestats.cpp:238
void setNeedRecalcDynamicStats(bool val)
Definition: creaturestats.cpp:411
Flag
Definition: creaturestats.hpp:225
DrawState_ getDrawState() const
Definition: creaturestats.cpp:491
const DynamicStat< float > & getHealth() const
Definition: creaturestats.cpp:66
Definition: creaturestats.hpp:227
Definition: creaturestats.hpp:23
std::map< SummonKey, int > mSummonedCreatures
Definition: creaturestats.hpp:76
static void writeActorIdCounter(ESM::ESMWriter &esm)
Definition: creaturestats.cpp:640
int getLevel() const
Definition: creaturestats.cpp:96
void setLastHitAttemptObject(const std::string &objectid)
Definition: creaturestats.cpp:366
AiSequence mAiSequence
Definition: creaturestats.hpp:35
int getFriendlyHits() const
Number of friendly hits received.
Definition: creaturestats.cpp:306
const AiSequence & getAiSequence() const
Definition: creaturestats.cpp:32
const Spells & getSpells() const
Definition: creaturestats.cpp:81
bool mKnockdownOneFrame
Definition: creaturestats.hpp:45
DrawState_
Definition: drawstate.hpp:7
bool mDeathAnimationFinished
Definition: creaturestats.hpp:37
AttributeValue mAttributes[8]
Definition: creaturestats.hpp:29
void setLevel(int level)
Definition: creaturestats.cpp:207
void talkedToPlayer()
Definition: creaturestats.cpp:321
void setDynamic(int index, const DynamicStat< float > &value)
Definition: creaturestats.cpp:184
bool getKnockedDownOneFrame() const
Returns true only for the first frame of the actor being knocked out; used for "onKnockedOut" command...
Definition: creaturestats.cpp:433
const DynamicStat< float > & getMagicka() const
Definition: creaturestats.cpp:71
void addToFallHeight(float height)
Definition: creaturestats.cpp:386
bool mTalkedTo
Definition: creaturestats.hpp:41
int mLevel
Definition: creaturestats.hpp:83
std::pair< int, std::string > SummonKey
Definition: creaturestats.hpp:74
bool getAttackingOrSpell() const
void setKnockedDownOneFrame(bool value)
Definition: creaturestats.cpp:428
bool hasDied() const
Definition: creaturestats.cpp:258
void setAlarmed(bool alarmed)
Definition: creaturestats.cpp:331
void resurrect()
Definition: creaturestats.cpp:283
Definition: creaturestats.hpp:150
float mFallHeight
Definition: creaturestats.hpp:51
void setDrawState(DrawState_ state)
Definition: creaturestats.cpp:496
void friendlyHit()
Increase number of friendly hits by one.
Definition: creaturestats.cpp:311
Definition: creaturestats.hpp:229
const std::string & getLastHitObject() const
Definition: creaturestats.cpp:361
void setHealth(const DynamicStat< float > &value)
Definition: creaturestats.cpp:169
bool mDead
Definition: creaturestats.hpp:36
std::vector< int > & getSummonedCreatureGraveyard()
Definition: creaturestats.cpp:672
void clearHasDied()
Definition: creaturestats.cpp:263
Definition: creaturestats.hpp:230
In-game time stamp.
Definition: timestamp.hpp:14
std::map< SummonKey, int > & getSummonedCreatureMap()
Definition: creaturestats.cpp:667
signed char mDeathAnimation
Definition: creaturestats.hpp:69
void setAttacked(bool attacked)
Definition: creaturestats.cpp:341
MWWorld::TimeStamp mTimeOfDeath
Definition: creaturestats.hpp:71
std::set< int > mBoundItems
Definition: creaturestats.hpp:254
bool mKnockdown
Definition: creaturestats.hpp:44
static void readActorIdCounter(ESM::ESMReader &esm)
Definition: creaturestats.cpp:647
const ActiveSpells & getActiveSpells() const
Definition: creaturestats.cpp:86
MWWorld::TimeStamp getLastRestockTime() const
Definition: creaturestats.cpp:608
void setKnockedDown(bool value)
Definition: creaturestats.cpp:416
Definition: creaturestats.hpp:237
void setDeathAnimation(signed char index)
Definition: creaturestats.cpp:657
Stance
Definition: creaturestats.hpp:234
void setHitRecovery(bool value)
Definition: creaturestats.cpp:445
bool hasTalkedToPlayer() const
Has this creature talked with the player before?
Definition: creaturestats.cpp:316
bool getKnockedDown() const
Definition: creaturestats.cpp:423
Spell list.
Definition: spells.hpp:31
int getHitAttemptActorId() const
Definition: creaturestats.cpp:381
std::vector< int > mSummonGraveyard
Definition: creaturestats.hpp:80
void setMagicka(const DynamicStat< float > &value)
Definition: creaturestats.cpp:174
bool getBlock() const
Definition: creaturestats.cpp:460
Definition: creaturestats.hpp:149
Stat< int > getAiSetting(AiSetting index) const
Definition: creaturestats.cpp:101
int mGoldPool
Definition: creaturestats.hpp:62
void setAttackingOrSpell(bool attackingOrSpell)
signed char getDeathAnimation() const
Definition: creaturestats.cpp:652
int mHitAttemptActorId
Definition: creaturestats.hpp:65
void readState(const ESM::CreatureStats &state)
Definition: creaturestats.cpp:554
void setKnockedDownOverOneFrame(bool value)
Definition: creaturestats.cpp:438
void writeState(ESM::CreatureStats &state) const
Definition: creaturestats.cpp:501
bool hasCommonDisease() const
Definition: creaturestats.cpp:296
void notifyDied()
Definition: creaturestats.cpp:253
void setAiSetting(AiSetting index, Stat< int > value)
Definition: creaturestats.cpp:221
bool mHitRecovery
Definition: creaturestats.hpp:47
DynamicStat< float > mDynamic[3]
Definition: creaturestats.hpp:30
bool matchesActorId(int id) const
Definition: creaturestats.cpp:630
Lasting spell effects.
Definition: activespells.hpp:21
int mFriendlyHits
Definition: creaturestats.hpp:40
Spells mSpells
Definition: creaturestats.hpp:31
bool getStance(Stance flag) const
Like getMovementFlag, but also takes into account if the flag is Forced.
Definition: creaturestats.cpp:478