aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-08-16 21:39:25 +0200
committerGitHub <noreply@github.com>2020-08-16 21:39:25 +0200
commit5c1fc5e3876549f5ed2b9051fffb6f3d94a67d7a (patch)
tree7f432455e2be060cb25ba8d3b971fe866a5efc6b /src/server/game/Entities/Unit
parent7edad0d601a7ae925cba850c5a23019f99be2a1e (diff)
Core/Pets: Pet management refactoring (#25191)
* Core/Pets: Pet management refactoring * Preload basic pet data on character login with async query * Load additional pet data (declined names/auras/spells/cooldowns) using async query after we are sure pet loading will succeed * Remove all select queries related to pet stable/unstable * Remove all silent pet deletions except explicit UI-triggered abandons * Fixed displaying stable master content when current pet is not summoned * Allow to stable/swap unsummoned current pet Closes #3610 Closes #21266
Diffstat (limited to 'src/server/game/Entities/Unit')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp13
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h3
2 files changed, 14 insertions, 2 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 5d71cd12499..81c169be596 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -10770,7 +10770,11 @@ Pet* Unit::CreateTamedPetFrom(Creature* creatureTarget, uint32 spell_id)
uint8 level = creatureTarget->GetLevel() + 5 < GetLevel() ? (GetLevel() - 5) : creatureTarget->GetLevel();
- InitTamedPet(pet, level, spell_id);
+ if (!InitTamedPet(pet, level, spell_id))
+ {
+ delete pet;
+ return nullptr;
+ }
return pet;
}
@@ -10797,6 +10801,11 @@ Pet* Unit::CreateTamedPetFrom(uint32 creatureEntry, uint32 spell_id)
bool Unit::InitTamedPet(Pet* pet, uint8 level, uint32 spell_id)
{
+ Player* player = ToPlayer();
+ PetStable& petStable = player->GetOrInitPetStable();
+ if (petStable.CurrentPet || petStable.GetUnslottedHunterPet())
+ return false;
+
pet->SetCreatorGUID(GetGUID());
pet->SetFaction(GetFaction());
pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, spell_id);
@@ -10815,6 +10824,8 @@ bool Unit::InitTamedPet(Pet* pet, uint8 level, uint32 spell_id)
pet->InitPetCreateSpells();
//pet->InitLevelupSpellsForLevel();
pet->SetFullHealth();
+
+ pet->FillPetInfo(&petStable.CurrentPet.emplace());
return true;
}
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index 0c420304f77..c6115217f1d 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -334,12 +334,13 @@ enum ActiveStates
ACT_DECIDE = 0x00 // custom
};
-enum ReactStates
+enum ReactStates : uint8
{
REACT_PASSIVE = 0,
REACT_DEFENSIVE = 1,
REACT_AGGRESSIVE = 2
};
+
inline char const* DescribeReactState(ReactStates state)
{
switch (state)