diff options
author | joschiwald <joschiwald.trinity@gmail.com> | 2016-03-20 19:50:11 +0100 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2016-03-20 22:44:54 +0100 |
commit | 60e1b50b3bc69809cccc6b94fb53c59913512be4 (patch) | |
tree | 4c97e252b61aa6b80d861fb705e953ffdeba9843 /src | |
parent | 77e32e3af5506aa50c81debcd2263e6a4e34c30b (diff) |
Core/Spells: cherry picked relevant changes from commit c498966d23933e323685c3a767d3fe334a60af22 to minimize differences between branches
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 39 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 10 |
2 files changed, 14 insertions, 35 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4257147600e..59078cb8ef6 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -167,8 +167,6 @@ Player::Player(WorldSession* session) : Unit(true) m_nextSave = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE); - _resurrectionData = nullptr; - memset(m_items, 0, sizeof(Item*)*PLAYER_SLOTS_COUNT); m_social = nullptr; @@ -403,8 +401,6 @@ Player::~Player() for (uint8 i = 0; i < VOID_STORAGE_MAX_SLOT; ++i) delete _voidStorageItems[i]; - ClearResurrectRequestData(); - sWorld->DecreasePlayerCount(); } @@ -1706,28 +1702,7 @@ void Player::ProcessDelayedOperations() return; if (m_DelayedOperations & DELAYED_RESURRECT_PLAYER) - { - ResurrectPlayer(0.0f, false); - - if (GetMaxHealth() > _resurrectionData->Health) - SetHealth(_resurrectionData->Health); - else - SetFullHealth(); - - if (uint32(GetMaxPower(POWER_MANA)) > _resurrectionData->Mana) - SetPower(POWER_MANA, _resurrectionData->Mana); - else - SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); - - SetPower(POWER_RAGE, 0); - SetPower(POWER_ENERGY, GetMaxPower(POWER_ENERGY)); - SetPower(POWER_ECLIPSE, 0); - - if (uint32 aura = _resurrectionData->Aura) - CastSpell(this, aura, true, nullptr, nullptr, _resurrectionData->GUID); - - SpawnCorpseBones(); - } + ResurrectUsingRequestDataImpl(); if (m_DelayedOperations & DELAYED_SAVE_PLAYER) SaveToDB(); @@ -21512,13 +21487,14 @@ void Player::UpdatePotionCooldown(Spell* spell) void Player::SetResurrectRequestData(Unit* caster, uint32 health, uint32 mana, uint32 appliedAura) { ASSERT(!IsResurrectRequested()); - _resurrectionData = new ResurrectionData(); + _resurrectionData.reset(new ResurrectionData()); _resurrectionData->GUID = caster->GetGUID(); _resurrectionData->Location.WorldRelocate(*caster); _resurrectionData->Health = health; _resurrectionData->Mana = mana; _resurrectionData->Aura = appliedAura; } + //slot to be excluded while counting bool Player::EnchantmentFitsRequirements(uint32 enchantmentcondition, int8 slot) const { @@ -23430,9 +23406,7 @@ bool Player::IsAtRecruitAFriendDistance(WorldObject const* pOther) const void Player::ResurrectUsingRequestData() { /// Teleport before resurrecting by player, otherwise the player might get attacked from creatures near his corpse - float x, y, z, o; - _resurrectionData->Location.GetPosition(x, y, z, o); - TeleportTo(_resurrectionData->Location.GetMapId(), x, y, z, o); + TeleportTo(_resurrectionData->Location); if (IsBeingTeleported()) { @@ -23440,6 +23414,11 @@ void Player::ResurrectUsingRequestData() return; } + ResurrectUsingRequestDataImpl(); +} + +void Player::ResurrectUsingRequestDataImpl() +{ ResurrectPlayer(0.0f, false); if (GetMaxHealth() > _resurrectionData->Health) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 07d7c80a5e2..6dccc24290d 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1813,11 +1813,10 @@ class Player : public Unit, public GridObject<Player> void SetResurrectRequestData(Unit* caster, uint32 health, uint32 mana, uint32 appliedAura); void ClearResurrectRequestData() { - delete _resurrectionData; - _resurrectionData = nullptr; + _resurrectionData.reset(); } - bool IsResurrectRequestedBy(ObjectGuid guid) const + bool IsResurrectRequestedBy(ObjectGuid const& guid) const { if (!IsResurrectRequested()) return false; @@ -1825,8 +1824,9 @@ class Player : public Unit, public GridObject<Player> return !_resurrectionData->GUID.IsEmpty() && _resurrectionData->GUID == guid; } - bool IsResurrectRequested() const { return _resurrectionData != nullptr; } + bool IsResurrectRequested() const { return _resurrectionData.get() != nullptr; } void ResurrectUsingRequestData(); + void ResurrectUsingRequestDataImpl(); uint8 getCinematic() const { return m_cinematic; } void setCinematic(uint8 cine) { m_cinematic = cine; } @@ -2685,7 +2685,7 @@ class Player : public Unit, public GridObject<Player> void ResetTimeSync(); void SendTimeSync(); - ResurrectionData* _resurrectionData; + std::unique_ptr<ResurrectionData> _resurrectionData; WorldSession* m_session; |