aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Creature
diff options
context:
space:
mode:
authorMeji <alvaromegias_46@hotmail.com>2021-10-03 21:20:45 +0200
committerGitHub <noreply@github.com>2021-10-03 21:20:45 +0200
commit0cfd14d2a0a52ceb0d8203c31c7c6c487775bcee (patch)
treec131dfb62ba3bde90a9bb05c93ae5a2813f62190 /src/server/game/Entities/Creature
parentb1c0d069e1eba2f7b43ada8032b954bff630b68d (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.cpp16
-rw-r--r--src/server/game/Entities/Creature/Creature.h3
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();