aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-05-19 00:55:24 +0200
committerOvahlord <dreadkiller@gmx.de>2024-05-28 17:03:51 +0200
commitae687002d1680e5d1bfe6a0eb74ffe5b279b0199 (patch)
tree608d51016d526e8e0e5ea7693c84cca65515f6f7
parentbfd8e907d9c95623760051b8bacc1f720c3fc0fc (diff)
Core/Spells: Implemented SummonPropertiesFlags::UseDemonTimeout
Closes #29930 (cherry picked from commit c15c8609f0b950804ce798369bd7c3f54b5ab221)
-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 61140dd8173..cd7d178d1e3 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -2099,7 +2099,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())
{