Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
BattlePet.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef BATTLE_PET_H
7#define BATTLE_PET_H
8
9#include "Common.h"
10#include "SharedDefines.h"
11
12#define BATTLE_PET_MAX_LEVEL 25
13#define BATTLE_PET_MAX_NAME_LENGTH 16
14
17
24
26{
27 switch (source)
28 {
30 return "wild";
32 return "pvp-duel";
34 return "pvp-matchmaking";
35 default:
36 return "unknown";
37 }
38}
39
41{
42 if (level >= 21)
43 return level - 2;
44
45 if (level >= 16)
46 return level - 1;
47
48 return level;
49}
50
52{
53 return uint32(quality) | (uint32(source) << 8) | (uint32(healthPercent) << 16);
54}
55
56inline uint32 BattlePetAchievementCriteriaPayload(uint8 quality, bool pvpBattle, uint8 healthPercent = 0)
57{
60 healthPercent);
61}
62
64{
65 return uint8(payload & 0xFF);
66}
67
69{
70 return uint8((payload >> 8) & 0xFF);
71}
72
77
82
84{
85 return uint8((payload >> 16) & 0xFF);
86}
87
103
104/*
105enum BattlePetTypeSuffix
106{
107 BATTLE_PET_TYPE_HUMANOID = 1,
108 BATTLE_PET_TYPE_DRAGON,
109 BATTLE_PET_TYPE_FLYING,
110 BATTLE_PET_TYPE_UNDEAD,
111 BATTLE_PET_TYPE_CRITTER,
112 BATTLE_PET_TYPE_MAGICAL,
113 BATTLE_PET_TYPE_ELEMENTAL,
114 BATTLE_PET_TYPE_BEAST,
115 BATTLE_PET_TYPE_AQUATIC,
116 BATTLE_PET_TYPE_MECHANICAL
117}
118
119enum BattlePetTypePassives
120{
121 BATTLE_PET_TYPE_PASSIVE_CRITTER_ELUSIVE = 236,
122 BATTLE_PET_TYPE_PASSIVE_BEAST_ENRAGE = 237,
123 BATTLE_PET_TYPE_PASSIVE_HUMANOID_RECOVERY = 238,
124 BATTLE_PET_TYPE_PASSIVE_FLYING_SWIFTNESS = 239,
125 BATTLE_PET_TYPE_PASSIVE_AQUATIC_PURITY = 240,
126 BATTLE_PET_TYPE_PASSIVE_ELEMENTAL_WEATHER_IMMUNE = 241,
127 BATTLE_PET_TYPE_PASSIVE_UNDEAD_DAMNED = 242,
128 BATTLE_PET_TYPE_PASSIVE_MAGICAL_SPELLSHIELD = 243,
129 BATTLE_PET_TYPE_PASSIVE_MECHANICAL_FAILSAFE = 244,
130 BATTLE_PET_TYPE_PASSIVE_DRAGON_EXECUTE = 245,
131}
132
133enum BattlePetEvent
134{
135 BATTLE_PET_EVENT_ON_APPLY = 0,
136 BATTLE_PET_EVENT_ON_DAMAGE_TAKEN = 1,
137 BATTLE_PET_EVENT_ON_DAMAGE_DEALT = 2,
138 BATTLE_PET_EVENT_ON_HEAL_TAKEN = 3,
139 BATTLE_PET_EVENT_ON_HEAL_DEALT = 4,
140 BATTLE_PET_EVENT_ON_AURA_REMOVED = 5,
141 BATTLE_PET_EVENT_ON_ROUND_START = 6,
142 BATTLE_PET_EVENT_ON_ROUND_END = 7,
143 BATTLE_PET_EVENT_ON_TURN = 8,
144 BATTLE_PET_EVENT_ON_ABILITY = 9,
145 BATTLE_PET_EVENT_ON_SWAP_IN = 10,
146 BATTLE_PET_EVENT_ON_SWAP_OUT = 11,
147}
148*/
149
158
165
166// flags used in 'account_battle_pet' db table
168{
171 BATTLE_PET_JOURNAL_FLAG_COLLECTED = 0x02, // name dumped from client, use unknown
174 BATTLE_PET_JOURNAL_FLAG_ABILITY_1 = 0x10, // ability flags are set if the second ability for that slot is selected
177};
178
180{
181 switch (flag)
182 {
184 return 0;
186 return 1;
188 return 2;
189 default:
191 }
192}
193
196uint16 BattlePetExperienceReward(uint8 petLevel, uint8 enemyLevel, uint8 participatingPetCount = 1);
199
201{
202public:
203 BattlePet(uint64 id, uint16 speciesId, std::string nickname, uint32 timestamp, uint8 level, uint16 xp, uint16 curHealth,
204 uint16 maxHealth, uint16 power, uint16 speed, uint8 quality, uint8 breedId, uint16 flags)
205 : m_id(id), m_species(speciesId), m_nickname(nickname), m_timestamp(timestamp), m_level(level), m_xp(xp), m_curHealth(curHealth), m_maxHealth(maxHealth),
206 m_power(power), m_speed(speed), m_quality(quality), m_breed(breedId), m_flags(flags), m_dbState(BattlePetDbState::BATTLE_PET_DB_STATE_NONE) { }
207
208 BattlePet(uint64 id, uint16 speciesId, uint8 level, uint8 quality, uint8 breedId)
209 : m_id(id), m_species(speciesId), m_nickname(""), m_timestamp(0), m_level(level), m_xp(0), m_curHealth(0), m_maxHealth(0),
211 {
212 CalculateStats(true);
213 }
214
215 uint64 GetId() const { return m_id; }
216 uint16 GetSpecies() const { return m_species; }
217 std::string GetNickname() const { return m_nickname; }
218 uint32 GetTimestamp() const { return m_timestamp; }
219 uint8 GetLevel() const { return m_level; }
220 uint16 GetXp() const { return m_xp; }
222 uint16 GetMaxHealth() const { return m_maxHealth; }
223 uint16 GetPower() const { return m_power; }
224 uint16 GetSpeed() const { return m_speed; }
225 uint8 GetQuality() const { return m_quality; }
226 uint8 GetBreed() const { return m_breed; }
227
228 void SetNickname(std::string const& nickname);
229 void SetTimestamp(uint32 timestamp);
230 void SetQuality(ItemQualities quality);
231 void SetXp(uint16 xp);
232 void SetCurrentHealth(uint16 health);
233
235 void SetDbState(BattlePetDbState state) { m_dbState = state; }
236
237 uint16 GetFlags() const { return m_flags; }
238 bool HasFlag(uint16 flag) const { return (m_flags & flag) != 0; }
239 void SetFlag(uint16 flag);
240 void UnSetFlag(uint16 flag);
241 void SetLevel(uint8 level);
243
244 void CalculateStats(bool currentHealth = false);
245
246private:
249 std::string m_nickname;
260
262};
263
265
273uint32 BattlePetDamageFromStats(uint32 abilityId, uint16 power, uint8 level);
274uint16 BattlePetPowerFromBattleState(uint16 species, uint8 level, uint8 quality, uint8 breed);
275uint32 BattlePetInputDamageForAbility(uint32 abilityId, BattlePet const* caster);
281
282#endif
uint8 BattlePetAchievementCriteriaSource(uint32 payload)
Definition BattlePet.h:68
uint32 BattlePetInputEffectForAbility(uint32 abilityId)
uint8 BattlePetAchievementCriteriaHealthPercent(uint32 payload)
Definition BattlePet.h:83
bool BattlePetSpeciesFlagsAllowWildCapture(uint32 flags)
BattlePetDbState
Definition BattlePet.h:160
BattlePetAchievementSource
Definition BattlePet.h:19
@ BATTLE_PET_ACHIEVEMENT_SOURCE_WILD
Definition BattlePet.h:20
@ BATTLE_PET_ACHIEVEMENT_SOURCE_PVP_DUEL
Definition BattlePet.h:21
@ BATTLE_PET_ACHIEVEMENT_SOURCE_PVP_MATCHMAKING
Definition BattlePet.h:22
uint8 BattlePetNormalizeWildLevel(uint8 level)
int32 BattlePetAbilityStateValue(uint32 abilityId, uint32 stateId)
uint32 BattlePetAchievementCriteriaPayload(uint8 quality, BattlePetAchievementSource source, uint8 healthPercent=0)
Definition BattlePet.h:51
uint16 BattlePetExperienceReward(uint8 petLevel, uint8 enemyLevel, uint8 participatingPetCount=1)
BattlePetAbilityEffectEntry const * BattlePetAbilityEffectForAbility(uint32 abilityId, bool damageOnly)
constexpr uint8 BATTLE_PET_ABILITY_SLOT_INVALID
Definition BattlePet.h:16
uint32 BattlePetAbilityBasePoints(uint32 abilityId)
uint16 BattlePetSpeciesIdByNpcId(uint32 npcId)
BattlePetStates
Definition BattlePet.h:151
@ BATTLE_PET_STATE_STAT_STAMINA
Definition BattlePet.h:153
@ BATTLE_PET_STATE_STAT_SPEED
Definition BattlePet.h:154
@ BATTLE_PET_STATE_STAT_GENDER
Definition BattlePet.h:156
@ BATTLE_PET_STATE_STAT_POWER
Definition BattlePet.h:152
@ BATTLE_PET_STATE_DAMAGE_TAKEN_FLAT
Definition BattlePet.h:155
uint8 BattlePetAchievementCriteriaQuality(uint32 payload)
Definition BattlePet.h:63
uint32 BattlePetDamageFromStats(uint32 abilityId, uint16 power, uint8 level)
uint8 BattlePetIncomingDamageReductionRounds(uint32 abilityId)
uint16 BattlePetHealthFromPercent(uint16 maxHealth, uint8 percent)
uint32 BattlePetInputIncomingDamageReductionForAbility(uint32 abilityId, BattlePet const *caster)
uint16 BattlePetAbilityCooldown(uint32 abilityId)
uint16 BattlePetExperienceForNextLevel(uint8 level)
bool BattlePetAchievementCriteriaIsPvp(uint32 payload)
Definition BattlePet.h:73
uint8 BattlePetCapturedLevel(uint8 level)
Definition BattlePet.h:40
char const * BattlePetAchievementSourceName(BattlePetAchievementSource source)
Definition BattlePet.h:25
uint16 BattlePetPowerFromBattleState(uint16 species, uint8 level, uint8 quality, uint8 breed)
bool BattlePetAchievementCriteriaIsMatchmaking(uint32 payload)
Definition BattlePet.h:78
uint32 BattlePetScalePointsFromStats(uint32 points, uint16 power, uint8 level)
uint32 BattlePetInputDamageForAbility(uint32 abilityId, BattlePet const *caster)
uint8 BattlePetAbilitySlotForJournalFlag(uint32 flag)
Definition BattlePet.h:179
uint32 BattlePetIncomingDamageReductionFromStats(uint32 abilityId, uint16 power, uint8 level)
uint32 BattlePetSpeciesFamilyMask(uint16 speciesId)
constexpr uint8 BATTLE_PET_ABILITY_SLOT_COUNT
Definition BattlePet.h:15
uint32 BattlePetSpeciesNpcId(uint16 speciesId)
BattlePetJournalFlags
Definition BattlePet.h:168
@ BATTLE_PET_JOURNAL_FLAG_COLLECTED
Definition BattlePet.h:171
@ BATTLE_PET_JOURNAL_FLAG_ABILITY_2
Definition BattlePet.h:175
@ BATTLE_PET_JOURNAL_FLAG_ABILITY_3
Definition BattlePet.h:176
@ BATTLE_PET_JOURNAL_FLAG_NONE
Definition BattlePet.h:169
@ BATTLE_PET_JOURNAL_FLAG_FAVORITES
Definition BattlePet.h:170
@ BATTLE_PET_JOURNAL_FLAG_UNKNOWN_1
Definition BattlePet.h:173
@ BATTLE_PET_JOURNAL_FLAG_NOT_COLLECTED
Definition BattlePet.h:172
@ BATTLE_PET_JOURNAL_FLAG_ABILITY_1
Definition BattlePet.h:174
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
std::uint16_t uint16
Definition Define.h:78
ItemQualities
BattlePetDbState m_dbState
Definition BattlePet.h:261
uint16 GetXp() const
Definition BattlePet.h:220
uint16 GetSpeed() const
Definition BattlePet.h:224
uint16 m_flags
Definition BattlePet.h:259
void SetFlag(uint16 flag)
void SetNickname(std::string const &nickname)
bool HasFlag(uint16 flag) const
Definition BattlePet.h:238
std::string m_nickname
Definition BattlePet.h:249
uint64 m_id
Definition BattlePet.h:247
void UnSetFlag(uint16 flag)
uint8 m_level
Definition BattlePet.h:251
void SetLevel(uint8 level)
uint8 GetLevel() const
Definition BattlePet.h:219
void CalculateStats(bool currentHealth=false)
uint16 m_speed
Definition BattlePet.h:256
uint8 m_breed
Definition BattlePet.h:258
void SetCurrentHealth(uint16 health)
uint8 GetQuality() const
Definition BattlePet.h:225
uint64 GetId() const
Definition BattlePet.h:215
uint16 m_curHealth
Definition BattlePet.h:253
uint16 GetCurrentHealth() const
Definition BattlePet.h:221
uint16 GetSpecies() const
Definition BattlePet.h:216
uint16 GetMaxHealth() const
Definition BattlePet.h:222
uint32 m_timestamp
Definition BattlePet.h:250
BattlePet(uint64 id, uint16 speciesId, std::string nickname, uint32 timestamp, uint8 level, uint16 xp, uint16 curHealth, uint16 maxHealth, uint16 power, uint16 speed, uint8 quality, uint8 breedId, uint16 flags)
Definition BattlePet.h:203
uint16 m_power
Definition BattlePet.h:255
uint16 m_species
Definition BattlePet.h:248
void SetXp(uint16 xp)
uint16 GetPower() const
Definition BattlePet.h:223
uint16 m_maxHealth
Definition BattlePet.h:254
BattlePet(uint64 id, uint16 speciesId, uint8 level, uint8 quality, uint8 breedId)
Definition BattlePet.h:208
std::string GetNickname() const
Definition BattlePet.h:217
void SetTimestamp(uint32 timestamp)
uint8 GetBreed() const
Definition BattlePet.h:226
uint8 m_quality
Definition BattlePet.h:257
void SetQuality(ItemQualities quality)
void SetDbState(BattlePetDbState state)
Definition BattlePet.h:235
uint16 m_xp
Definition BattlePet.h:252
uint16 AddExperience(uint16 xp)
BattlePetDbState GetDbState() const
Definition BattlePet.h:234
uint32 GetTimestamp() const
Definition BattlePet.h:218
uint16 GetFlags() const
Definition BattlePet.h:237
BattlePetAchievementSource Source
Definition BattlePet.h:93