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
committerShauren <shauren.trinity@gmail.com>2022-01-31 00:17:21 +0100
commitca92686b44cc8c53a8991bf02d6e8534797fc115 (patch)
tree2456cf72513722d93bb444590a4606d7717261d6 /src/server/game/Entities/Unit
parentb79a91039bba12d62e43806d8a20ad76107ac5d7 (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 (cherry picked from commit 5c1fc5e3876549f5ed2b9051fffb6f3d94a67d7a)
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.h2
2 files changed, 13 insertions, 2 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 65d4f4f5165..d037047e9de 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -10283,7 +10283,11 @@ Pet* Unit::CreateTamedPetFrom(Creature* creatureTarget, uint32 spell_id)
uint8 level = creatureTarget->GetLevelForTarget(this) + 5 < GetLevel() ? (GetLevel() - 5) : creatureTarget->GetLevelForTarget(this);
- InitTamedPet(pet, level, spell_id);
+ if (!InitTamedPet(pet, level, spell_id))
+ {
+ delete pet;
+ return nullptr;
+ }
return pet;
}
@@ -10310,6 +10314,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->SetCreatedBySpell(spell_id);
@@ -10330,6 +10339,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 b852ebdc02e..60babf771db 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -380,7 +380,7 @@ enum ActiveStates
ACT_DECIDE = 0x00 // custom
};
-enum ReactStates
+enum ReactStates : uint8
{
REACT_PASSIVE = 0,
REACT_DEFENSIVE = 1,