diff options
author | offl <offl@users.noreply.github.com> | 2020-06-29 01:11:10 +0200 |
---|---|---|
committer | Killyana <morphone1@gmail.com> | 2020-06-29 01:11:10 +0200 |
commit | fb58ca0bf5a8dc0c6e0ffbbf1e3462bb731fc097 (patch) | |
tree | 05c6268d1c680d09c0f44c85f6fbacb6a6722cb4 | |
parent | c5a72b7aec558b75a3d44901594d417b0e5aa835 (diff) |
DB/Quest: Convert & update support for 'Pyrewood Ambush' to SAI
Closes #24833
-rw-r--r-- | sql/updates/world/3.3.5/2020_06_29_02_world.sql | 53 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp | 200 |
2 files changed, 54 insertions, 199 deletions
diff --git a/sql/updates/world/3.3.5/2020_06_29_02_world.sql b/sql/updates/world/3.3.5/2020_06_29_02_world.sql new file mode 100644 index 00000000000..68dd7bf05a2 --- /dev/null +++ b/sql/updates/world/3.3.5/2020_06_29_02_world.sql @@ -0,0 +1,53 @@ +-- Source: CMaNGOS & http://youtube.com/watch?v=1eREORqoCr4 no longer available but some parts are based on it +-- Classic https://www.youtube.com/watch?v=4Mj5tH2goIc +-- Deathstalker Faerleia SAI +SET @ID := 2058; +UPDATE `creature_template` SET `AIName` = "SmartAI", `ScriptName` = "" WHERE `entry` = @ID; +DELETE FROM `smart_scripts` WHERE `entryorguid` = @ID AND `source_type` = 0; +DELETE FROM `smart_scripts` WHERE `entryorguid` BETWEEN @ID*100+0 AND @ID*100+4 AND `source_type` = 9; +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 +(@ID,0,0,0,19,0,100,0,452,0,0,0,0,80,@ID*100+0,2,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Quest 'Pyrewood Ambush' Taken - Run Script"), + +(@ID*100+0,9,0,0,0,0,100,0,0,0,0,0,0,64,1,0,0,0,0,0,16,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Store Targetlist"), +(@ID*100+0,9,1,0,0,0,100,0,0,0,0,0,0,1,0,0,0,0,0,0,12,1,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Say Line 0"), +(@ID*100+0,9,2,0,0,0,100,0,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Remove Npc Flag Questgiver"), +(@ID*100+0,9,3,0,0,0,100,0,0,0,0,0,0,2,232,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Set Faction 232"), +(@ID*100+0,9,4,0,0,0,100,0,10000,10000,0,0,0,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Summon Group 0"), + +(@ID,0,1,0,82,0,100,0,0,0,0,0,0,63,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Summoned Unit Dies - Set Counter 1 1"), +(@ID,0,2,0,77,0,100,0,1,1,0,0,0,80,@ID*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Counter Set 1 1 - Run Script"), +(@ID,0,3,0,77,0,100,0,1,3,0,0,0,80,@ID*100+2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Counter Set 1 3 - Run Script"), +(@ID,0,4,0,77,0,100,0,1,6,0,0,0,80,@ID*100+3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Counter Set 1 6 - Run Script"), +(@ID,0,5,0,77,0,100,0,1,9,0,0,0,80,@ID*100+4,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Counter Set 1 9 - Run Script"), + +(@ID*100+1,9,1,0,0,0,100,0,10000,10000,0,0,0,107,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Summon Group 1"), +(@ID*100+2,9,1,0,0,0,100,0,10000,10000,0,0,0,107,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Summon Group 2"), +(@ID*100+3,9,1,0,0,0,100,0,8000,8000,0,0,0,107,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Summon Group 3"), + +(@ID*100+4,9,0,0,0,0,100,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Say Line 1"), +(@ID*100+4,9,1,0,0,0,100,0,0,0,0,0,0,15,452,0,0,0,0,0,12,1,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Quest Credit 'Pyrewood Ambush'"), +(@ID*100+4,9,2,0,0,0,100,0,0,0,0,0,0,2,68,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Set Faction 68"), +(@ID*100+4,9,3,0,0,0,100,0,0,0,0,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Add Npc Flag Questgiver"), +(@ID*100+4,9,5,0,0,0,100,0,0,0,0,0,0,63,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Reset Counter"), +(@ID*100+4,9,6,0,0,0,100,0,0,0,0,0,0,78,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Script - Reset All Scripts"), + +(@ID,0,6,0,2,0,100,0,0,20,10000,15000,0,11,3359,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Health pct - Cast 'Drink Potion'"), +(@ID,0,7,0,6,0,100,0,0,0,0,0,0,6,452,0,0,0,0,0,12,1,0,0,0,0,0,0,0,"Deathstalker Faerleia - On Death - Fail Quest 'Pyrewood Ambush'"); + +UPDATE `creature_text` SET `comment` = "Deathstalker Faerleia" WHERE `CreatureID` = @ID; +-- 548 "All is lost!" - probably used on death + +DELETE FROM `creature_summon_groups` WHERE `summonerId` = 2058 AND `summonerType` = 0; +INSERT INTO `creature_summon_groups` (`summonerId`,`summonerType`,`groupId`,`entry`,`position_x`,`position_y`,`position_z`,`orientation`,`summonType`,`summonTime`,`Comment`) VALUES +(2058,0,0,2060,-398.35,1510.75,18.87,4.76,4,60000,"Deathstalker Faerleia - Group 0 - Councilman Smithers"), + +(2058,0,1,2061,-396.41,1511.06,18.87,4.74,4,60000,"Deathstalker Faerleia - Group 1 - Councilman Thatcher"), +(2058,0,1,2062,-398.35,1510.75,18.87,4.76,4,60000,"Deathstalker Faerleia - Group 1 - Councilman Hendricks"), +-- Not ordered by entry +(2058,0,2,2063,-398.35,1510.75,18.87,4.76,4,60000,"Deathstalker Faerleia - Group 2 - Councilman Wilhelm"), +(2058,0,2,2064,-397.45,1509.56,18.87,4.73,4,60000,"Deathstalker Faerleia - Group 2 - Councilman Hartin"), +(2058,0,2,2066,-396.41,1511.06,18.87,4.74,4,60000,"Deathstalker Faerleia - Group 2 - Councilman Higarth"), + +(2058,0,3,2065,-398.35,1510.75,18.87,4.76,4,60000,"Deathstalker Faerleia - Group 3 - Councilman Cooper"), +(2058,0,3,2067,-396.41,1511.06,18.87,4.74,4,60000,"Deathstalker Faerleia - Group 3 - Councilman Brunswick"), +(2058,0,3,2068,-397.45,1509.56,18.87,4.73,4,60000,"Deathstalker Faerleia - Group 3 - Councilman Morrison"); diff --git a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp index cae58f4bef3..f506318b11a 100644 --- a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp +++ b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp @@ -18,13 +18,12 @@ /* ScriptData SDName: Silverpine_Forest SD%Complete: 100 -SDComment: Quest support: 435, 452 +SDComment: Quest support: 435 SDCategory: Silverpine Forest EndScriptData */ /* ContentData npc_deathstalker_erland -pyrewood_ambush EndContentData */ #include "ScriptMgr.h" @@ -133,207 +132,10 @@ public: }; /*###### -## pyrewood_ambush -#######*/ - -enum PyrewoodAmbush -{ - SAY_PREPARE_TO_AMBUSH = 0, - SAY_A_BLOW_TO_ARUGAL = 1, - QUEST_PYREWOOD_AMBUSH = 452, - COUNCILMAN_SMITHERS = 2060, - COUNCILMAN_THATCHER = 2061, - COUNCILMAN_HENDRICKS = 2062, - COUNCILMAN_WILHELM = 2063, - COUNCILMAN_HARTIN = 2064, - COUNCILMAN_COOPER = 2065, - COUNCILMAN_HIGARTH = 2066, - COUNCILMAN_BRUNSWICK = 2067, - LORD_MAYOR_MORRISON = 2068 -}; - -static float PyrewoodSpawnPoints[3][4] = -{ - //pos_x pos_y pos_z orien - //outside - /* - {-400.85f, 1513.64f, 18.67f, 0}, - {-397.32f, 1514.12f, 18.67f, 0}, - {-397.44f, 1511.09f, 18.67f, 0}, - */ - //door - {-396.17f, 1505.86f, 19.77f, 0}, - {-396.91f, 1505.77f, 19.77f, 0}, - {-397.94f, 1504.74f, 19.77f, 0}, -}; - -class pyrewood_ambush : public CreatureScript -{ -public: - pyrewood_ambush() : CreatureScript("pyrewood_ambush") { } - - struct pyrewood_ambushAI : public ScriptedAI - { - pyrewood_ambushAI(Creature* creature) : ScriptedAI(creature), Summons(me) - { - Initialize(); - WaitTimer = 6 * IN_MILLISECONDS; - QuestInProgress = false; - } - - void Initialize() - { - Phase = 0; - KillCount = 0; - PlayerGUID.Clear(); - } - - uint32 Phase; - int8 KillCount; - uint32 WaitTimer; - ObjectGuid PlayerGUID; - SummonList Summons; - - bool QuestInProgress; - - void Reset() override - { - WaitTimer = 6 * IN_MILLISECONDS; - - if (!QuestInProgress) //fix reset values (see UpdateVictim) - { - Initialize(); - Summons.DespawnAll(); - } - } - - void JustEngagedWith(Unit* /*who*/) override { } - - void JustSummoned(Creature* summoned) override - { - Summons.Summon(summoned); - ++KillCount; - } - - void SummonedCreatureDespawn(Creature* summoned) override - { - Summons.Despawn(summoned); - --KillCount; - } - - void SummonCreatureWithRandomTarget(uint32 creatureId, int position) - { - if (Creature* summoned = me->SummonCreature(creatureId, PyrewoodSpawnPoints[position][0], PyrewoodSpawnPoints[position][1], PyrewoodSpawnPoints[position][2], PyrewoodSpawnPoints[position][3], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000)) - { - Unit* target = nullptr; - if (PlayerGUID) - if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) - if (player->IsAlive() && RAND(0, 1)) - target = player; - - if (!target) - target = me; - - summoned->SetFaction(FACTION_ENEMY); - AddThreat(target, 32.0f, summoned); - summoned->AI()->AttackStart(target); - } - } - - void JustDied(Unit* /*killer*/) override - { - if (PlayerGUID) - if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) - if (player->GetQuestStatus(QUEST_PYREWOOD_AMBUSH) == QUEST_STATUS_INCOMPLETE) - player->FailQuest(QUEST_PYREWOOD_AMBUSH); - } - - void UpdateAI(uint32 diff) override - { - //TC_LOG_INFO("scripts", "DEBUG: p(%i) k(%i) d(%u) W(%i)", Phase, KillCount, diff, WaitTimer); - - if (!QuestInProgress) - return; - - if (KillCount && Phase < 6) - { - if (!UpdateVictim()) //reset() on target Despawn... - return; - - DoMeleeAttackIfReady(); - return; - } - - switch (Phase) - { - case 0: - if (WaitTimer == 6 * IN_MILLISECONDS) - if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) - Talk(SAY_PREPARE_TO_AMBUSH, player); - - if (WaitTimer <= diff) - { - WaitTimer -= diff; - return; - } - break; - case 1: - SummonCreatureWithRandomTarget(COUNCILMAN_SMITHERS, 1); - break; - case 2: - SummonCreatureWithRandomTarget(COUNCILMAN_THATCHER, 2); - SummonCreatureWithRandomTarget(COUNCILMAN_HENDRICKS, 0); - break; - case 3: - SummonCreatureWithRandomTarget(COUNCILMAN_WILHELM, 1); - SummonCreatureWithRandomTarget(COUNCILMAN_HARTIN, 2); - SummonCreatureWithRandomTarget(COUNCILMAN_COOPER, 0); - break; - case 4: - SummonCreatureWithRandomTarget(COUNCILMAN_HIGARTH, 1); - SummonCreatureWithRandomTarget(COUNCILMAN_BRUNSWICK, 0); - SummonCreatureWithRandomTarget(LORD_MAYOR_MORRISON, 2); - break; - case 5: //end - if (PlayerGUID) - { - if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) - { - Talk(SAY_A_BLOW_TO_ARUGAL); - player->GroupEventHappens(QUEST_PYREWOOD_AMBUSH, me); - } - } - QuestInProgress = false; - Reset(); - break; - } - ++Phase; //prepare next phase - } - - void QuestAccept(Player* player, Quest const* quest) override - { - if (quest->GetQuestId() == QUEST_PYREWOOD_AMBUSH && !QuestInProgress) - { - QuestInProgress = true; - Phase = 0; - KillCount = 0; - PlayerGUID = player->GetGUID(); - } - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new pyrewood_ambushAI(creature); - } -}; - -/*###### ## AddSC ######*/ void AddSC_silverpine_forest() { new npc_deathstalker_erland(); - new pyrewood_ambush(); } |