diff options
-rwxr-xr-x | src/server/game/Entities/Creature/TemporarySummon.cpp | 16 | ||||
-rwxr-xr-x | src/server/game/Entities/Creature/TemporarySummon.h | 11 | ||||
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 2 |
3 files changed, 26 insertions, 3 deletions
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 1204a104d9c..62174fe8c9c 100755 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -224,8 +224,16 @@ void TempSummon::SetTempSummonType(TempSummonType type) m_type = type; } -void TempSummon::UnSummon() +void TempSummon::UnSummon(uint32 msTime) { + if (msTime) + { + ForcedUnsummonDelayEvent *pEvent = new ForcedUnsummonDelayEvent(*this); + + m_Events.AddEvent(pEvent, m_Events.CalculateTime(msTime)); + return; + } + //ASSERT(!isPet()); if (isPet()) { @@ -241,6 +249,12 @@ void TempSummon::UnSummon() AddObjectToRemoveList(); } +bool ForcedUnsummonDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) +{ + m_owner.UnSummon(); + return true; +} + void TempSummon::RemoveFromWorld() { if (!IsInWorld()) diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h index c4fe70a0983..82f63d887ab 100755 --- a/src/server/game/Entities/Creature/TemporarySummon.h +++ b/src/server/game/Entities/Creature/TemporarySummon.h @@ -29,7 +29,7 @@ class TempSummon : public Creature void Update(uint32 time); virtual void InitStats(uint32 lifetime); virtual void InitSummon(); - void UnSummon(); + void UnSummon(uint32 msTime = 0); void RemoveFromWorld(); void SetTempSummonType(TempSummonType type); void SaveToDB(uint32 /*mapid*/, uint8 /*spawnMask*/, uint32 /*phaseMask*/) {} @@ -97,5 +97,14 @@ class Puppet : public Minion Player *m_owner; }; +class ForcedUnsummonDelayEvent : public BasicEvent +{ +public: + ForcedUnsummonDelayEvent(TempSummon& owner) : BasicEvent(), m_owner(owner) { } + bool Execute(uint64 e_time, uint32 p_time); + +private: + TempSummon& m_owner; +}; #endif diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 4b480199792..437778a957c 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -16711,7 +16711,7 @@ void Unit::_ExitVehicle(Position const* exitPosition) setDeathState(JUST_DIED); // If for other reason we as minion are exiting the vehicle (ejected, master unmounted) - unsummon else - ToTempSummon()->UnSummon(); + ToTempSummon()->UnSummon(2000); // Approximation } } |