aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorVincent_Michael <Vincent_Michael@gmx.de>2013-12-11 20:34:44 +0100
committerVincent_Michael <Vincent_Michael@gmx.de>2013-12-11 20:34:44 +0100
commit07024d3ea84db832e5bdd221c293e5daf297181a (patch)
tree663c0412bd112c0bef4f9b106c597e2bc0d05eb5 /src/server/game/Entities
parent70445f34a6b66b603662716371c6f6a873a95855 (diff)
parentfb26e1852394a1aa6e7695030eabcf8e85b1c5c8 (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts: src/server/game/DataStores/DBCEnums.h src/server/scripts/Commands/cs_wp.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp11
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
3 files changed, 8 insertions, 7 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 7d89b90c5dc..70c932da272 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1344,7 +1344,7 @@ bool Creature::IsInvisibleDueToDespawn() const
if (Unit::IsInvisibleDueToDespawn())
return true;
- if (IsAlive() || m_corpseRemoveTime > time(NULL))
+ if (IsAlive() || isDying() || m_corpseRemoveTime > time(NULL))
return false;
return true;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index cd4fa2139f9..18732984559 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -10640,6 +10640,9 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
void Unit::setDeathState(DeathState s)
{
+ // Death state needs to be updated before RemoveAllAurasOnDeath() is called, to prevent entering combat
+ m_deathState = s;
+
if (s != ALIVE && s != JUST_RESPAWNED)
{
CombatStop();
@@ -10688,8 +10691,6 @@ void Unit::setDeathState(DeathState s)
}
else if (s == JUST_RESPAWNED)
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); // clear skinnable for creature and player (at battleground)
-
- m_deathState = s;
}
/*########################################
@@ -10697,14 +10698,14 @@ void Unit::setDeathState(DeathState s)
######## AGGRO SYSTEM ########
######## ########
########################################*/
-bool Unit::CanHaveThreatList() const
+bool Unit::CanHaveThreatList(bool skipAliveCheck) const
{
// only creatures can have threat list
if (GetTypeId() != TYPEID_UNIT)
return false;
// only alive units can have threat list
- if (!IsAlive() || isDying())
+ if (!skipAliveCheck && !IsAlive())
return false;
// totems can not have threat list
@@ -10747,7 +10748,7 @@ void Unit::AddThreat(Unit* victim, float fThreat, SpellSchoolMask schoolMask, Sp
void Unit::DeleteThreatList()
{
- if (CanHaveThreatList() && !m_ThreatManager.isThreatListEmpty())
+ if (CanHaveThreatList(true) && !m_ThreatManager.isThreatListEmpty())
SendClearThreatListOpcode();
m_ThreatManager.clearReferences();
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index cb228bd135d..416a2257b92 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1906,7 +1906,7 @@ class Unit : public WorldObject
uint32 m_lastSanctuaryTime;
// Threat related methods
- bool CanHaveThreatList() const;
+ bool CanHaveThreatList(bool skipAliveCheck = false) const;
void AddThreat(Unit* victim, float fThreat, SpellSchoolMask schoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* threatSpell = NULL);
float ApplyTotalThreatModifier(float fThreat, SpellSchoolMask schoolMask = SPELL_SCHOOL_MASK_NORMAL);
void DeleteThreatList();