diff options
| author | Meji <alvaromegias_46@hotmail.com> | 2021-10-03 21:20:45 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-03 21:20:45 +0200 |
| commit | 0cfd14d2a0a52ceb0d8203c31c7c6c487775bcee (patch) | |
| tree | c131dfb62ba3bde90a9bb05c93ae5a2813f62190 /src/server/game/Entities/Creature | |
| parent | b1c0d069e1eba2f7b43ada8032b954bff630b68d (diff) | |
Core/BattlePets: Misc fixes (#26990)
* Define BattlePetBreedQuality enum class.
* Check the quality of the battle pet species in battle_pet_quality table to avoid invalid values.
* Set CurrentBattlePetBreedQuality and WildBattlePetLevel update fields with the data of the summoned battle pet.
* Added function to calculate the WildBattlePetLevel of wild battle pets according to their spawn zone.
Diffstat (limited to 'src/server/game/Entities/Creature')
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 16 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 3 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 162fd6fc1f0..ef6c5385fda 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1620,6 +1620,20 @@ void Creature::UpdateLevelDependantStats() SetStatFlatModifier(UNIT_MOD_ARMOR, BASE_VALUE, armor); } +void Creature::SelectWildBattlePetLevel() +{ + if (IsWildBattlePet()) + { + uint8 wildBattlePetLevel = WILD_BATTLE_PET_DEFAULT_LEVEL; + + if (AreaTableEntry const* areaTable = sAreaTableStore.LookupEntry(GetZoneId())) + if (areaTable->WildBattlePetLevelMin > 0) + wildBattlePetLevel = urand(areaTable->WildBattlePetLevelMin, areaTable->WildBattlePetLevelMax); + + SetWildBattlePetLevel(wildBattlePetLevel); + } +} + float Creature::_GetHealthMod(int32 Rank) { switch (Rank) // define rates for each elite rank @@ -1804,6 +1818,8 @@ bool Creature::LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap, SetSpawnHealth(); + SelectWildBattlePetLevel(); + // checked at creature_template loading m_defaultMovementType = MovementGeneratorType(data->movementType); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index cab9b45e783..2aa3fa395c3 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -54,6 +54,8 @@ typedef std::list<VendorItemCount> VendorItemCounts; #define MAX_VENDOR_ITEMS 150 // Limitation in 4.x.x item count in SMSG_LIST_INVENTORY +static constexpr uint8 WILD_BATTLE_PET_DEFAULT_LEVEL = 1; + //used for handling non-repeatable random texts typedef std::vector<uint8> CreatureTextRepeatIds; typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup; @@ -81,6 +83,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma bool LoadCreaturesAddon(); void SelectLevel(); void UpdateLevelDependantStats(); + void SelectWildBattlePetLevel(); void LoadEquipment(int8 id = 1, bool force = false); void SetSpawnHealth(); |
