aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp8
-rw-r--r--src/server/game/Entities/Creature/Creature.h2
-rw-r--r--src/server/game/Entities/Object/Object.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp6
-rw-r--r--src/server/game/Miscellaneous/Formulas.h3
5 files changed, 14 insertions, 7 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 0e5f8ac4cbb..44c850d7af8 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -2910,3 +2910,11 @@ void Creature::ClearTextRepeatGroup(uint8 textGroup)
if (groupItr != m_textRepeat.end())
groupItr->second.clear();
}
+
+bool Creature::CanGiveExperience() const
+{
+ return !IsCritter()
+ && !IsPet()
+ && !IsTotem()
+ && !(GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL);
+}
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index f44fd4932e8..32775918cb2 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -962,6 +962,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
void SetTextRepeatId(uint8 textGroup, uint8 id);
void ClearTextRepeatGroup(uint8 textGroup);
+ bool CanGiveExperience() const;
+
protected:
bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0);
bool InitEntry(uint32 entry, CreatureData const* data = nullptr);
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 75af771b6c5..a6be4165db4 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -2059,7 +2059,7 @@ bool WorldObject::CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
if (this == obj)
return true;
- if (obj->IsNeverVisible() || CanNeverSee(obj))
+ if (obj->IsNeverVisibleFor(this) || CanNeverSee(obj))
return false;
if (obj->IsAlwaysVisibleFor(this) || CanAlwaysSee(obj))
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 6b83425c65c..edf43289ea8 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -24531,10 +24531,8 @@ bool Player::isHonorOrXPTarget(Unit const* victim) const
if (Creature const* const creature = victim->ToCreature())
{
- if (creature->IsTotem() ||
- creature->IsPet() ||
- creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL)
- return false;
+ if (!creature->CanGiveExperience())
+ return false;
}
return true;
}
diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h
index 203bf201494..27fdab395bb 100644
--- a/src/server/game/Miscellaneous/Formulas.h
+++ b/src/server/game/Miscellaneous/Formulas.h
@@ -171,8 +171,7 @@ namespace Trinity
Creature* creature = u->ToCreature();
uint32 gain = 0;
- if (!creature || (!creature->IsTotem() && !creature->IsPet() && !creature->IsCritter() &&
- !(creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL)))
+ if (!creature || creature->CanGiveExperience())
{
float xpMod = 1.0f;