aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/DataStores/DBCEnums.h2
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.cpp9
2 files changed, 9 insertions, 2 deletions
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index fe3a6dd6ead..802b7bd16e3 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -2110,7 +2110,7 @@ enum class SummonPropertiesFlags : uint32
DespawnOnSummonerDeath = 0x00000008, // NYI
OnlyVisibleToSummoner = 0x00000010,
CannotDismissPet = 0x00000020, // NYI
- UseDemonTimeout = 0x00000040, // NYI
+ UseDemonTimeout = 0x00000040,
UnlimitedSummons = 0x00000080, // NYI
UseCreatureLevel = 0x00000100,
JoinSummonerSpawnGroup = 0x00000200, // NYI
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp
index f3a6f35770d..95a7f9c19ff 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.cpp
+++ b/src/server/game/Entities/Creature/TemporarySummon.cpp
@@ -193,7 +193,14 @@ void TempSummon::InitStats(WorldObject* summoner, Milliseconds duration)
m_lifetime = duration;
if (m_type == TEMPSUMMON_MANUAL_DESPAWN)
- m_type = (duration <= 0ms) ? TEMPSUMMON_DEAD_DESPAWN : TEMPSUMMON_TIMED_DESPAWN;
+ {
+ if (duration <= 0s)
+ m_type = TEMPSUMMON_DEAD_DESPAWN;
+ else if (m_Properties && m_Properties->GetFlags().HasFlag(SummonPropertiesFlags::UseDemonTimeout))
+ m_type = TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT;
+ else
+ m_type = TEMPSUMMON_TIMED_DESPAWN;
+ }
if (summoner && summoner->IsPlayer())
{