diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 43b83a120..5457be6c6 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -6035,12 +6035,7 @@ bool Player::RewardHonor(Unit *uVictim, uint32 groupsize, float honor) victim_guid = 0; // Don't show HK: message, only log. } - if(k_level <= 5) - k_grey = 0; - else if( k_level <= 39 ) - k_grey = k_level - 5 - k_level/10; - else - k_grey = k_level - 1 - k_level/5; + k_grey = MaNGOS::XP::GetGrayLevel(k_level); if(v_level<=k_grey) return false; @@ -18463,6 +18458,26 @@ uint32 Player::GetResurrectionSpellId() return spell_id; } +// Used in triggers for check "Only to targets that grant experience or honor" req +bool Player::isHonorOrXPTarget(Unit* pVictim) +{ + uint32 v_level = pVictim->getLevel(); + uint32 k_grey = MaNGOS::XP::GetGrayLevel(getLevel()); + + // Victim level less gray level + if(v_level<=k_grey) + return false; + + if(pVictim->GetTypeId() == TYPEID_UNIT) + { + if (((Creature*)pVictim)->isTotem() || + ((Creature*)pVictim)->isPet() || + ((Creature*)pVictim)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL) + return false; + } + return true; +} + bool Player::RewardPlayerAndGroupAtKill(Unit* pVictim) { bool PvP = pVictim->isCharmedOwnedByPlayerOrPlayer(); diff --git a/src/game/Player.h b/src/game/Player.h index 089a80093..60200d892 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1760,6 +1760,7 @@ class MANGOS_DLL_SPEC Player : public Unit bool IsAtGroupRewardDistance(WorldObject const* pRewardSource) const; bool RewardPlayerAndGroupAtKill(Unit* pVictim); + bool isHonorOrXPTarget(Unit* pVictim); FactionStateList m_factions; ForcedReactions m_forcedReactions; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 81f40ef4d..a339e1baa 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -5874,7 +5874,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB { if (GetTypeId() != TYPEID_PLAYER) return false; - if (!((Player*)this)->RewardPlayerAndGroupAtKill(pVictim)) + if (!((Player*)this)->isHonorOrXPTarget(pVictim)) return false; trigger_spell_id = 50475; basepoints0 = damage * triggerAmount / 100; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8c5ec5062..6e508402b 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "6965" + #define REVISION_NR "6966" #endif // __REVISION_NR_H__