diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index fe90f210f..d707cc147 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -679,6 +679,7 @@ Player::Player(WorldSession* session): Unit(true), m_mover(this) #pragma warning(default:4355) #endif + m_drwGUID = 0; m_speakTime = 0; m_speakCount = 0; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index d03bc4bee..e285e374e 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2573,6 +2573,11 @@ class Player : public Unit, public GridObject uint32 m_pendingSpectatorInviteInstanceId; std::set m_receivedSpectatorResetFor; + // Dancing Rune weapon + void setRuneWeaponGUID(uint64 guid) { m_drwGUID = guid; }; + uint64 getRuneWeaponGUID() { return m_drwGUID; }; + uint64 m_drwGUID; + bool CanSeeDKPet() const { return m_ExtraFlags & PLAYER_EXTRA_SHOW_DK_PET; } void SetShowDKPet(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_SHOW_DK_PET; else m_ExtraFlags &= ~PLAYER_EXTRA_SHOW_DK_PET; }; void PrepareCharmAISpells(); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index fb7b070b4..01f150d38 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -5047,6 +5047,11 @@ uint32 Unit::GetDiseasesByCaster(uint64 casterGUID, uint8 mode) SPELL_AURA_NONE }; + uint64 drwGUID = 0; + + if (Player* playerCaster = ObjectAccessor::GetPlayer(*this, casterGUID)) + drwGUID = playerCaster->getRuneWeaponGUID(); + uint32 diseases = 0; for (uint8 index = 0; diseaseAuraTypes[index] != SPELL_AURA_NONE; ++index) { @@ -5054,7 +5059,7 @@ uint32 Unit::GetDiseasesByCaster(uint64 casterGUID, uint8 mode) { // Get auras with disease dispel type by caster if ((*i)->GetSpellInfo()->Dispel == DISPEL_DISEASE - && (*i)->GetCasterGUID() == casterGUID) + && ((*i)->GetCasterGUID() == casterGUID || (*i)->GetCasterGUID() == drwGUID)) // if its caster or his dancing rune weapon { ++diseases; diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index e1e7c9abb..00005daba 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -332,7 +332,12 @@ class npc_pet_dk_dancing_rune_weapon : public CreatureScript // Xinef: Hit / Expertise scaling me->AddAura(61017, me); if (Unit* owner = me->GetOwner()) + { me->GetMotionMaster()->MoveFollow(owner, 0.01f, me->GetFollowAngle(), MOTION_SLOT_CONTROLLED); + if (Player* player = owner->ToPlayer()) + player->setRuneWeaponGUID(me->GetGUID()); + } + NullCreatureAI::InitializeAI(); } };