diff --git a/data/sql/updates/pending_db_world/rev_1638753088438372219.sql b/data/sql/updates/pending_db_world/rev_1638753088438372219.sql new file mode 100644 index 000000000..031d3562e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1638753088438372219.sql @@ -0,0 +1,21 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1638753088438372219'); + +-- Fix Sangrias Stillblade for quest 9678 "The First Trial" +UPDATE `creature_template` SET `npcflag`=2, `unit_flags`=32768, `BaseAttackTime`=4000, `RangeAttackTime`=4000 WHERE `entry`=17716; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=17716 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_param4`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(17716,0,0,1,60,0,100,1,2000,2000,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Sangrias Stillblade - On Update - Say text 0 (No Repeat)'), +(17716,0,1,0,61,0,100,0,0,0,0,0,0,53,1,17716,0,9678,0,2,1,0,0,0,0,0,0,0,0,'Sangrias Stillblade - On Update - Load path (No Repeat)'), +(17716,0,2,0,9,0,100,1,8,25,0,0,0,11,22120,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Sangrias Stillblade - Within 8-25 Range - Cast ''Charge'' (No Repeat)'), +(17716,0,3,0,6,0,100,1,0,0,0,0,0,15,9678,0,0,0,0,0,16,0,0,0,0,0,0,0,0,'Sangrias Stillblade - On Death - Complete quest for player party'), +(17716,0,4,0,7,0,100,1,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Sangrias Stillblade - On Evade - despawn (No Repeat)'); + +DELETE FROM `waypoints` WHERE `entry`=17716; +INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`point_comment`) VALUES +(17716,1,8051.857,-7543.9897,149.69759,0,0, 'Sangrias Stillblade'), +(17716,2,8094.734,-7541.6343,151.74496,0,0, 'Sangrias Stillblade'); + +DELETE FROM `creature_text` WHERE `CreatureID`=17716; +INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(17716,0,0, 'Defend yourself, youngling! We''ll see if there''s a Blood Knight in you, yet.',14,0,100,0,0,0,14365,0, 'Sangrias Stillblade say on attack'); diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index 4bd9faa84..0dab11cf1 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -796,12 +796,15 @@ public: }; /*###### -## go_gilded_brazier (Paladin First Trail quest (9678)) +## go_gilded_brazier (Paladin quest 9678 "The First Trial") ######*/ enum GildedBrazier { - NPC_STILLBLADE = 17716, + EVENT_STILLBLADE_SPAWN = 1, + EVENT_RESET_BRAZIER = 2, + NPC_STILLBLADE = 17716, + QUEST_THE_FIRST_TRIAL = 9678 }; class go_gilded_brazier : public GameObjectScript @@ -809,17 +812,73 @@ class go_gilded_brazier : public GameObjectScript public: go_gilded_brazier() : GameObjectScript("go_gilded_brazier") { } - bool OnGossipHello(Player* player, GameObject* go) override + struct go_gilded_brazierAI : public GameObjectAI { - if (go->GetGoType() == GAMEOBJECT_TYPE_GOOBER) + go_gilded_brazierAI(GameObject* go) : GameObjectAI(go) { - if (player->GetQuestStatus(9678) == QUEST_STATUS_INCOMPLETE) + Initialize(); + } + + void Initialize() + { + _playerGUID.Clear(); + } + + bool GossipHello(Player* player, bool reportUse) override + { + if (reportUse) + return false; + + if (me->GetGoType() == GAMEOBJECT_TYPE_GOOBER) { - if (Creature* Stillblade = player->SummonCreature(NPC_STILLBLADE, 8106.11f, -7542.06f, 151.775f, 3.02598f, TEMPSUMMON_DEAD_DESPAWN, 60000)) - Stillblade->AI()->AttackStart(player); + if (player->GetQuestStatus(QUEST_THE_FIRST_TRIAL) == QUEST_STATUS_INCOMPLETE) + { + _playerGUID = player->GetGUID(); + me->SetFlag(GAMEOBJECT_FLAGS, 1); + me->RemoveByteFlag(GAMEOBJECT_BYTES_1, 0, 1); + _events.ScheduleEvent(EVENT_STILLBLADE_SPAWN, 1000); + } + } + return true; + } + + void UpdateAI(uint32 const diff) override + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_STILLBLADE_SPAWN: + { + if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) + { + player->SummonCreature(NPC_STILLBLADE, 8032.587f, -7524.518f, 149.68073f, 6.161012172698974609f, TEMPSUMMON_DEAD_DESPAWN, 60000); + _events.ScheduleEvent(EVENT_RESET_BRAZIER, 4000); + } + break; + } + case EVENT_RESET_BRAZIER: + { + me->RemoveFlag(GAMEOBJECT_FLAGS, 1); + me->SetByteFlag(GAMEOBJECT_BYTES_1, 0, 1); + break; + } + default: + break; + } } } - return true; + + private: + EventMap _events; + ObjectGuid _playerGUID; + }; + + GameObjectAI* GetAI(GameObject* go) const override + { + return new go_gilded_brazierAI(go); } };