1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
#ifndef TIBIA_CREATURE_HH_
#define TIBIA_CREATURE_HH_ 1
#include "main.hh"
struct TCreature;
struct TSkill{
// REGULAR FUNCTIONS
// =========================================================================
TSkill(int SkNr, TCreature *Master);
int Get(void);
int GetProgress(void);
void Check(void);
void Change(int Amount);
void SetMDAct(int MDAct);
void Load(int Act, int Max, int Min, int DAct, int MDAct,
int Cycle, int MaxCycle, int Count, int MaxCount, int AddLevel,
int Exp, int FactorPercent, int NextLevel, int Delta);
void Save(int *Act, int *Max, int *Min, int *DAct, int *MDAct,
int *Cycle, int *MaxCycle, int *Count, int *MaxCount, int *AddLevel,
int *Exp, int *FactorPercent, int *NextLevel, int *Delta);
// VIRTUAL FUNCTIONS
// =========================================================================
virtual ~TSkill(void); // VTABLE[ 0]
//virtual ~TSkill(void); // Duplicate destructor that also calls operator delete. // VTABLE[ 1]
virtual void Set(int Value); // VTABLE[ 2]
virtual void Increase(int Amount); // VTABLE[ 3]
virtual void Decrease(int Amount); // VTABLE[ 4]
virtual int GetExpForLevel(int Level); // VTABLE[ 5]
virtual void Advance(int Range); // VTABLE[ 6]
virtual void ChangeSkill(int FactorPercent, int Delta); // VTABLE[ 7]
virtual int ProbeValue(int Max, bool Increase); // VTABLE[ 8]
virtual bool Probe(int Diff, int Prob, bool Increase); // VTABLE[ 9]
virtual bool Process(void); // VTABLE[10]
virtual bool SetTimer(int Cycle, int Count, int MaxCount, int AdditionalValue); // VTABLE[11]
virtual bool DelTimer(void); // VTABLE[12]
virtual int TimerValue(void); // VTABLE[13]
virtual bool Jump(int Range); // VTABLE[14]
virtual void Event(int Range); // VTABLE[15]
virtual void Reset(void); // VTABLE[16]
// DATA
// =========================================================================
//void *VTABLE; // IMPLICIT
int DAct; // Delta Value - Probably from equipment.
int MDAct; // Delta Magic Value - Probably from spells.
uint16 SkNr;
TCreature *Master;
int Act; // Actual Value (?)
int Max;
int Min;
int FactorPercent;
int LastLevel;
int NextLevel;
int Delta;
int Exp;
int Cycle;
int MaxCycle;
int Count;
int MaxCount;
int AddLevel;
};
struct TSkillLevel: TSkill {
~TSkillLevel(void) override;
void Increase(int Amount) override;
void Decrease(int Amount) override;
int GetExpForLevel(int Level) override;
bool Jump(int Range) override;
};
struct TSkillProbe: TSkill {
~TSkillProbe(void) override;
void Increase(int Amount) override;
void Decrease(int Amount) override;
int GetExpForLevel(int Level) override;
void ChangeSkill(int FactorPercent, int Delta) override;
int ProbeValue(int Max, bool Increase) override;
bool Probe(int Diff, int Prob, bool Increase) override;
bool SetTimer(int Cycle, int Count, int MaxCount, int AdditionalValue) override;
bool Jump(int Range) override;
void Event(int Range) override;
};
struct TSkillBase{
// REGULAR FUNCTIONS
// =========================================================================
// TODO
// DATA
// =========================================================================
TSkill *Skills[25];
TSkill *TimerList[25];
uint16 FirstFreeTimer;
};
// TODO(fusion): Maybe split this file?
//==============================================================================
struct TCombatEntry{
uint32 ID;
uint32 Damage;
int TimeStamp;
};
struct TCombat{
TCreature *Master;
uint32 EarliestAttackTime;
uint32 EarliestDefendTime;
uint32 LastDefendTime;
uint32 LatestAttackTime;
uint32 AttackMode;
uint32 ChaseMode;
uint32 SecureMode;
uint32 AttackDest;
bool Following;
Object Shield;
Object Close;
Object Missile;
Object Throw;
Object Wand;
Object Ammo;
bool Fist;
uint32 CombatDamage;
int ActCombatEntry;
TCombatEntry CombatList[20];
int LearningPoints;
};
struct TOutfit{
int OutfitID;
union{
uint16 ObjectType;
uint8 Colors[4];
};
};
struct TCreature: TSkillBase {
// REGULAR FUNCTIONS
// =========================================================================
// TODO
// VIRTUAL FUNCTIONS
// =========================================================================
// TODO
// DATA
// =========================================================================
//void *VTABLE; // IMPLICIT
//TSkillBase super_TSkillBase; // IMPLICIT
TCombat Combat;
uint32 ID;
TCreature *NextHashEntry;
uint32 NextChainCreature;
char Name[31];
char Murderer[31];
TOutfit OrgOutfit;
TOutfit Outfit;
int startx;
int starty;
int startz;
int posx;
int posy;
int posz;
int Sex;
int Race;
int Direction;
int Radius;
CreatureType Type;
bool IsDead;
int LoseInventory;
bool LoggingOut;
bool LogoutAllowed;
uint32 EarliestLogoutRound;
uint32 EarliestProtectionZoneRound;
uint32 EarliestYellRound;
uint32 EarliestTradeChannelRound;
uint32 EarliestSpellTime;
uint32 EarliestMultiuseTime;
uint32 EarliestWalkTime;
uint32 LifeEndRound;
TKnownCreature *FirstKnowingConnection;
int SummonedCreatures;
uint32 FireDamageOrigin;
uint32 PoisonDamageOrigin;
uint32 EnergyDamageOrigin;
Object CrObject;
vector<TToDoEntry> ToDoList;
int ActToDo;
int NrToDo;
uint32 NextWakeup;
bool Stop;
bool LockToDo;
uint8 Profession;
TConnection *Connection;
};
#endif //TIBIA_CREATURE_HH_
|