From 3412c3e2191d6a683502c82da8f725982afeff00 Mon Sep 17 00:00:00 2001 From: Noxies Date: Tue, 28 Dec 2021 14:46:39 +0100 Subject: [PATCH] fix(Scripts/Silithus): Wind Stone summons roleplay & despawn (#9899) --- .../rev_1640694155370414400.sql | 4 +++ src/server/scripts/Kalimdor/zone_silithus.cpp | 27 ++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1640694155370414400.sql diff --git a/data/sql/updates/pending_db_world/rev_1640694155370414400.sql b/data/sql/updates/pending_db_world/rev_1640694155370414400.sql new file mode 100644 index 000000000..6ecaeb5a6 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1640694155370414400.sql @@ -0,0 +1,4 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1640694155370414400'); + +-- High Marshal Whirlaxis unit flags: UNK_6 & IMMUNE_TO_PC +UPDATE `acore_world`.`creature_template` SET `unit_flags`='320' WHERE `entry` = 15204; diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp index 690a1176d..d039c409e 100644 --- a/src/server/scripts/Kalimdor/zone_silithus.cpp +++ b/src/server/scripts/Kalimdor/zone_silithus.cpp @@ -1000,6 +1000,26 @@ enum WindStone SAY_ON_SPAWN_IN = 0 }; +class DelayedWindstoneSummonEvent : public BasicEvent +{ +public: + DelayedWindstoneSummonEvent(TempSummon* summon, ObjectGuid playerGUID) : _summon(summon), _playerGUID(playerGUID) { } + + bool Execute(uint64 /*eventTime*/, uint32 /*updateTime*/) override + { + if (Player* player = ObjectAccessor::FindPlayer(_playerGUID)) + { + _summon->AI()->AttackStart(player); + } + + return true; + } + +private: + TempSummon* _summon; + ObjectGuid _playerGUID; +}; + class go_wind_stone : public GameObjectScript { public: @@ -1165,12 +1185,13 @@ public: return; } player->CastSpell(player, spellInfoTrigger->Id, false); - if (TempSummon* summons = go->SummonCreature(npc, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), player->GetOrientation() - M_PI, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 10 * 60 * 1000)) + if (TempSummon* summons = go->SummonCreature(npc, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), player->GetOrientation() - M_PI, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 6000)) { - summons->CastSpell(summons, SPELL_SPAWN_IN, false); summons->SetTarget(player->GetGUID()); + summons->SetLootRecipient(player); + summons->CastSpell(summons, SPELL_SPAWN_IN, false); summons->AI()->Talk(SAY_ON_SPAWN_IN, player); - summons->AI()->AttackStart(player); + summons->m_Events.AddEvent(new DelayedWindstoneSummonEvent(summons, player->GetGUID()), summons->m_Events.CalculateTime(5200)); _creatureGuid = summons->GetGUID(); } }