From beed4997706147beb0d3a7f5a6d5957072bf8165 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sat, 15 Jun 2013 19:03:09 -0230 Subject: Script: Update Boss_Grandmaster_Vorpil script to use events. --- sql/updates/world/2013_06_15_06_world_creature.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2013_06_15_06_world_creature.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_15_06_world_creature.sql b/sql/updates/world/2013_06_15_06_world_creature.sql new file mode 100644 index 00000000000..a9db8f93583 --- /dev/null +++ b/sql/updates/world/2013_06_15_06_world_creature.sql @@ -0,0 +1,2 @@ +-- Update Void Traveler Scriptname +UPDATE `creature_template` SET `ScriptName`= 'npc_voidtraveler' WHERE `ScriptName`= 'mob_voidtraveler'; -- cgit v1.2.3 From 40062cb2270e937c23968fa5b7dc2b6a884a1752 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sat, 15 Jun 2013 19:28:45 -0230 Subject: DB?Gossip: Add missing gossip for Arathandris Silversky & Maybess Riverbreeze. TODO: Add SAI and remove cpp script. --- sql/updates/world/2013_06_15_07_world_gossip.sql | 47 ++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 sql/updates/world/2013_06_15_07_world_gossip.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_15_07_world_gossip.sql b/sql/updates/world/2013_06_15_07_world_gossip.sql new file mode 100644 index 00000000000..14da6211f93 --- /dev/null +++ b/sql/updates/world/2013_06_15_07_world_gossip.sql @@ -0,0 +1,47 @@ +-- Arathandris Silversky +UPDATE `creature_template` SET `gossip_menu_id`=2208 WHERE `entry` IN (9528); +-- Add Any Missing Gossip Menu item +DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2844; -- Before Quest 4101 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2844); +DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2845; -- After Quest 4101 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2845); +DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2848; -- If Horde +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2848); +-- Add Any Missing Gossip Option +DELETE FROM `gossip_menu_option` WHERE menu_id=2208; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`)VALUES +(2208,0,0,"I need a Cenarion beacon.",1,1,0,0,0,0,''), +(2208,1,0,"What plants are in Felwood that might be corrupted?",1,1,0,0,0,0,''); +-- Add option conditions for gossip +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup` IN (2208); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(14,2208,2844,0,8,3781,0,0,1,0,'','Arathandris Silversky - Show gossip text if player has not been rewarded quest 4101'), +(14,2208,2845,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip text if player has been rewarded quest 4101'), +(14,2208,2848,0,6,67,0,0,0,0,'','Arathandris Silversky - Show gossip text if player is horde'); +-- Add option conditions for gossip +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (2208); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,2208,0,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip option if player has been rewarded quest 4101'), +(15,2208,0,1,2,11511,1,1,1,0,'','Arathandris Silversky - Show gossip option if player does not have Cenarion Beacon'), +(15,2208,1,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip option if player has been rewarded quest 4101'); + +-- Maybess Riverbreeze +UPDATE `creature_template` SET `gossip_menu_id`=21400 WHERE `entry` IN (9529); +-- Add Any Missing Gossip Menu item +DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2842; -- Before Quest 4102 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2842); +DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2843; -- After Quest 4102 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2843); +DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2849; -- If Alliance +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2849); +-- Add Any Missing Gossip Option +DELETE FROM `gossip_menu_option` WHERE menu_id=21400; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`)VALUES +(21400,0,0,"I need a Cenarion beacon.",1,1,0,0,0,0,''), +(21400,1,0,"What plants are in Felwood that might be corrupted?",1,1,0,0,0,0,''); +-- Add option conditions for gossip +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (21400); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,21400,0,0,8,3781,0,0,0,0,'','Maybess Riverbreeze - Show gossip option if player has been rewarded quest 4102'), +(15,21400,0,1,2,11511,1,1,1,0,'','Maybess Riverbreeze - Show gossip option if player does not have Cenarion Beacon'), +(15,21400,1,0,8,3781,0,0,0,0,'','Maybess Riverbreeze - Show gossip option if player has been rewarded quest 4102'); -- cgit v1.2.3 From b3237630ecd6637f358d862ede00f92efba33f7a Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sat, 15 Jun 2013 21:22:37 -0230 Subject: Script: Updated Murmur to use events. --- .../2013_06_15_08_world_spelldifficulty_dbc.sql | 5 + .../ShadowLabyrinth/boss_grandmaster_vorpil.cpp | 1 + .../Auchindoun/ShadowLabyrinth/boss_murmur.cpp | 173 ++++++++++----------- 3 files changed, 86 insertions(+), 93 deletions(-) create mode 100644 sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql b/sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql new file mode 100644 index 00000000000..3c68f4e5b33 --- /dev/null +++ b/sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql @@ -0,0 +1,5 @@ +DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (33923,33666,33711); +INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES +(33923,33923,38796), +(33666,33666,38795), +(33711,33711,38794); diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp index 1fa895824e3..115c75c2f17 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp @@ -301,6 +301,7 @@ public: //enrage at 20% if (HealthBelowPct(20)) events.ScheduleEvent(EVENT_SUMMON_TRAVELER, 5000); + break; } } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp index 786eb662a57..b96418097f3 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp @@ -30,53 +30,51 @@ EndScriptData */ enum Murmur { + // Spell SPELL_RESONANCE = 33657, SPELL_MAGNETIC_PULL = 33689, SPELL_SONIC_SHOCK = 38797, SPELL_THUNDERING_STORM = 39365, + SPELL_SONIC_BOOM_CAST = 33923, + SPELL_SONIC_BOOM_EFFECT = 33666, + SPELL_MURMURS_TOUCH = 33711, + // Text EMOTE_SONIC_BOOM = 0 }; -#define SPELL_SONIC_BOOM_CAST DUNGEON_MODE(33923, 38796) -#define SPELL_SONIC_BOOM_EFFECT DUNGEON_MODE(33666, 38795) - -#define SPELL_MURMURS_TOUCH DUNGEON_MODE(33711, 38794) - +enum Events +{ + EVENT_SONIC_BOOM = 1, + EVENT_MURMURS_TOUCH = 2, + EVENT_RESONANCE = 3, + EVENT_MAGNETIC_PULL = 4, + EVENT_THUNDERING_STORM = 5, + EVENT_SONIC_SHOCK = 6 +}; class boss_murmur : public CreatureScript { public: boss_murmur() : CreatureScript("boss_murmur") { } - CreatureAI* GetAI(Creature* creature) const + struct boss_murmurAI : public BossAI { - return new boss_murmurAI (creature); - } - - struct boss_murmurAI : public ScriptedAI - { - boss_murmurAI(Creature* creature) : ScriptedAI(creature) + boss_murmurAI(Creature* creature) : BossAI(creature, DATA_MURMUREVENT) { SetCombatMovement(false); } - uint32 SonicBoom_Timer; - uint32 MurmursTouch_Timer; - uint32 Resonance_Timer; - uint32 MagneticPull_Timer; - uint32 SonicShock_Timer; - uint32 ThunderingStorm_Timer; - bool SonicBoom; - void Reset() { - SonicBoom_Timer = 30000; - MurmursTouch_Timer = urand(8000, 20000); - Resonance_Timer = 5000; - MagneticPull_Timer = urand(15000, 30000); - ThunderingStorm_Timer = 15000; - SonicShock_Timer = 10000; - SonicBoom = false; + events.ScheduleEvent(EVENT_SONIC_BOOM, 30000); + events.ScheduleEvent(EVENT_MURMURS_TOUCH, urand(8000, 20000)); + events.ScheduleEvent(EVENT_RESONANCE, 5000); + events.ScheduleEvent(EVENT_MAGNETIC_PULL, urand(15000, 30000)); + if (IsHeroic()) + { + events.ScheduleEvent(EVENT_THUNDERING_STORM, 15000); + events.ScheduleEvent(EVENT_SONIC_SHOCK, 10000); + } //database should have `RegenHealth`=0 to prevent regen uint32 hp = me->CountPctFromMaxHealth(40); @@ -117,81 +115,65 @@ public: if (!UpdateVictim() || me->IsNonMeleeSpellCasted(false)) return; - // Sonic Boom - if (SonicBoom) - { - DoCast(me, SPELL_SONIC_BOOM_EFFECT, true); - SonicBoomEffect(); - - SonicBoom = false; - Resonance_Timer = 1500; - } - if (SonicBoom_Timer <= diff) - { - Talk(EMOTE_SONIC_BOOM); - DoCast(me, SPELL_SONIC_BOOM_CAST); - SonicBoom_Timer = 30000; - SonicBoom = true; - return; - } else SonicBoom_Timer -= diff; - - // Murmur's Touch - if (MurmursTouch_Timer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 80, true)) - DoCast(target, SPELL_MURMURS_TOUCH); - MurmursTouch_Timer = urand(25000, 35000); - } else MurmursTouch_Timer -= diff; + events.Update(diff); - // Resonance - if (!SonicBoom && !(me->IsWithinMeleeRange(me->GetVictim()))) + while (uint32 eventId = events.ExecuteEvent()) { - if (Resonance_Timer <= diff) + switch (eventId) { - DoCast(me, SPELL_RESONANCE); - Resonance_Timer = 5000; - } else Resonance_Timer -= diff; - } - - // Magnetic Pull - if (MagneticPull_Timer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - if (target->GetTypeId() == TYPEID_PLAYER && target->IsAlive()) + case EVENT_SONIC_BOOM: + Talk(EMOTE_SONIC_BOOM); + DoCast(me, SPELL_SONIC_BOOM_CAST); + DoCast(me, SPELL_SONIC_BOOM_EFFECT, true); + SonicBoomEffect(); + events.ScheduleEvent(EVENT_SONIC_BOOM, 30000); + events.ScheduleEvent(EVENT_RESONANCE, 1500); + break; + case EVENT_MURMURS_TOUCH: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 80, true)) + DoCast(target, SPELL_MURMURS_TOUCH); + events.ScheduleEvent(EVENT_MURMURS_TOUCH, urand(25000, 35000)); + break; + case EVENT_RESONANCE: + if (!(me->IsWithinMeleeRange(me->GetVictim()))) + { + DoCast(me, SPELL_RESONANCE); + events.ScheduleEvent(EVENT_RESONANCE, 5000); + } + break; + case EVENT_MAGNETIC_PULL: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + if (target->GetTypeId() == TYPEID_PLAYER && target->IsAlive()) + { + DoCast(target, SPELL_MAGNETIC_PULL); + events.ScheduleEvent(EVENT_MAGNETIC_PULL, 15000+rand()%15000); + break; + } + events.ScheduleEvent(EVENT_MAGNETIC_PULL, 500); + break; + case EVENT_THUNDERING_STORM: { - DoCast(target, SPELL_MAGNETIC_PULL); - MagneticPull_Timer = 15000+rand()%15000; - return; - } - MagneticPull_Timer = 500; - } else MagneticPull_Timer -= diff; - - if (IsHeroic()) - { - // Thundering Storm - if (ThunderingStorm_Timer <= diff) - { - ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList(); - for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i) - if (Unit* target = Unit::GetUnit(*me, (*i)->getUnitGuid())) - if (target->IsAlive() && !me->IsWithinDist(target, 35, false)) - DoCast(target, SPELL_THUNDERING_STORM, true); - ThunderingStorm_Timer = 15000; - } else ThunderingStorm_Timer -= diff; - - // Sonic Shock - if (SonicShock_Timer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20, false)) - if (target->IsAlive()) - DoCast(target, SPELL_SONIC_SHOCK); - SonicShock_Timer = 10000+rand()%10000; - } else SonicShock_Timer -= diff; + ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList(); + for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i) + if (Unit* target = Unit::GetUnit(*me, (*i)->getUnitGuid())) + if (target->IsAlive() && !me->IsWithinDist(target, 35, false)) + DoCast(target, SPELL_THUNDERING_STORM, true); + events.ScheduleEvent(EVENT_THUNDERING_STORM, 15000); + break; + } + case EVENT_SONIC_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20, false)) + if (target->IsAlive()) + DoCast(target, SPELL_SONIC_SHOCK); + events.ScheduleEvent(EVENT_SONIC_SHOCK, 10000+rand()%10000); + break; + } } // Select nearest most aggro target if top aggro too far if (!me->isAttackReady()) return; + if (!me->IsWithinMeleeRange(me->GetVictim())) { ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList(); @@ -206,6 +188,11 @@ public: DoMeleeAttackIfReady(); } + + CreatureAI* GetAI(Creature* creature) const + { + return new boss_murmurAI (creature); + } }; }; -- cgit v1.2.3 From e5dbf68897a2e923b544e1df27182ceb810e141a Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sat, 15 Jun 2013 23:30:41 -0230 Subject: DB/Creature template: Prevent cosmetic-drakkari-bat-ph from attacking players. --- sql/updates/world/2013_06_15_09_world_creature_template.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2013_06_15_09_world_creature_template.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_15_09_world_creature_template.sql b/sql/updates/world/2013_06_15_09_world_creature_template.sql new file mode 100644 index 00000000000..d4673e08a15 --- /dev/null +++ b/sql/updates/world/2013_06_15_09_world_creature_template.sql @@ -0,0 +1,2 @@ +-- Fix cosmetic-drakkari-bat-ph +UPDATE `creature_template` SET `flags_extra`=`flags_extra`|2 WHERE `entry`=27490; -- cgit v1.2.3 From f0cc3b13909f0f717449a235146b9a774abdd18c Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Sun, 16 Jun 2013 12:26:44 +0300 Subject: Fix sql naming on previous files. Correct faction template for Nexus Drake Hatchling and initialize a variable in script. --- sql/updates/world/2013_06_15_00_world_creature.sql | 2 + sql/updates/world/2013_06_15_01_world_gossip.sql | 47 ++++++++++++++++++++++ .../2013_06_15_02_world_spelldifficulty_dbc.sql | 5 +++ .../2013_06_15_03_world_creature_template.sql | 2 + sql/updates/world/2013_06_15_06_world_creature.sql | 2 - sql/updates/world/2013_06_15_07_world_gossip.sql | 47 ---------------------- .../2013_06_15_08_world_spelldifficulty_dbc.sql | 5 --- .../2013_06_15_09_world_creature_template.sql | 2 - sql/updates/world/2013_06_16_00_world_misc.sql | 1 + .../scripts/Northrend/zone_borean_tundra.cpp | 5 ++- 10 files changed, 61 insertions(+), 57 deletions(-) create mode 100644 sql/updates/world/2013_06_15_00_world_creature.sql create mode 100644 sql/updates/world/2013_06_15_01_world_gossip.sql create mode 100644 sql/updates/world/2013_06_15_02_world_spelldifficulty_dbc.sql create mode 100644 sql/updates/world/2013_06_15_03_world_creature_template.sql delete mode 100644 sql/updates/world/2013_06_15_06_world_creature.sql delete mode 100644 sql/updates/world/2013_06_15_07_world_gossip.sql delete mode 100644 sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql delete mode 100644 sql/updates/world/2013_06_15_09_world_creature_template.sql create mode 100644 sql/updates/world/2013_06_16_00_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_15_00_world_creature.sql b/sql/updates/world/2013_06_15_00_world_creature.sql new file mode 100644 index 00000000000..a9db8f93583 --- /dev/null +++ b/sql/updates/world/2013_06_15_00_world_creature.sql @@ -0,0 +1,2 @@ +-- Update Void Traveler Scriptname +UPDATE `creature_template` SET `ScriptName`= 'npc_voidtraveler' WHERE `ScriptName`= 'mob_voidtraveler'; diff --git a/sql/updates/world/2013_06_15_01_world_gossip.sql b/sql/updates/world/2013_06_15_01_world_gossip.sql new file mode 100644 index 00000000000..14da6211f93 --- /dev/null +++ b/sql/updates/world/2013_06_15_01_world_gossip.sql @@ -0,0 +1,47 @@ +-- Arathandris Silversky +UPDATE `creature_template` SET `gossip_menu_id`=2208 WHERE `entry` IN (9528); +-- Add Any Missing Gossip Menu item +DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2844; -- Before Quest 4101 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2844); +DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2845; -- After Quest 4101 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2845); +DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2848; -- If Horde +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2848); +-- Add Any Missing Gossip Option +DELETE FROM `gossip_menu_option` WHERE menu_id=2208; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`)VALUES +(2208,0,0,"I need a Cenarion beacon.",1,1,0,0,0,0,''), +(2208,1,0,"What plants are in Felwood that might be corrupted?",1,1,0,0,0,0,''); +-- Add option conditions for gossip +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup` IN (2208); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(14,2208,2844,0,8,3781,0,0,1,0,'','Arathandris Silversky - Show gossip text if player has not been rewarded quest 4101'), +(14,2208,2845,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip text if player has been rewarded quest 4101'), +(14,2208,2848,0,6,67,0,0,0,0,'','Arathandris Silversky - Show gossip text if player is horde'); +-- Add option conditions for gossip +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (2208); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,2208,0,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip option if player has been rewarded quest 4101'), +(15,2208,0,1,2,11511,1,1,1,0,'','Arathandris Silversky - Show gossip option if player does not have Cenarion Beacon'), +(15,2208,1,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip option if player has been rewarded quest 4101'); + +-- Maybess Riverbreeze +UPDATE `creature_template` SET `gossip_menu_id`=21400 WHERE `entry` IN (9529); +-- Add Any Missing Gossip Menu item +DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2842; -- Before Quest 4102 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2842); +DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2843; -- After Quest 4102 +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2843); +DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2849; -- If Alliance +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2849); +-- Add Any Missing Gossip Option +DELETE FROM `gossip_menu_option` WHERE menu_id=21400; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`)VALUES +(21400,0,0,"I need a Cenarion beacon.",1,1,0,0,0,0,''), +(21400,1,0,"What plants are in Felwood that might be corrupted?",1,1,0,0,0,0,''); +-- Add option conditions for gossip +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (21400); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,21400,0,0,8,3781,0,0,0,0,'','Maybess Riverbreeze - Show gossip option if player has been rewarded quest 4102'), +(15,21400,0,1,2,11511,1,1,1,0,'','Maybess Riverbreeze - Show gossip option if player does not have Cenarion Beacon'), +(15,21400,1,0,8,3781,0,0,0,0,'','Maybess Riverbreeze - Show gossip option if player has been rewarded quest 4102'); diff --git a/sql/updates/world/2013_06_15_02_world_spelldifficulty_dbc.sql b/sql/updates/world/2013_06_15_02_world_spelldifficulty_dbc.sql new file mode 100644 index 00000000000..3c68f4e5b33 --- /dev/null +++ b/sql/updates/world/2013_06_15_02_world_spelldifficulty_dbc.sql @@ -0,0 +1,5 @@ +DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (33923,33666,33711); +INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES +(33923,33923,38796), +(33666,33666,38795), +(33711,33711,38794); diff --git a/sql/updates/world/2013_06_15_03_world_creature_template.sql b/sql/updates/world/2013_06_15_03_world_creature_template.sql new file mode 100644 index 00000000000..d4673e08a15 --- /dev/null +++ b/sql/updates/world/2013_06_15_03_world_creature_template.sql @@ -0,0 +1,2 @@ +-- Fix cosmetic-drakkari-bat-ph +UPDATE `creature_template` SET `flags_extra`=`flags_extra`|2 WHERE `entry`=27490; diff --git a/sql/updates/world/2013_06_15_06_world_creature.sql b/sql/updates/world/2013_06_15_06_world_creature.sql deleted file mode 100644 index a9db8f93583..00000000000 --- a/sql/updates/world/2013_06_15_06_world_creature.sql +++ /dev/null @@ -1,2 +0,0 @@ --- Update Void Traveler Scriptname -UPDATE `creature_template` SET `ScriptName`= 'npc_voidtraveler' WHERE `ScriptName`= 'mob_voidtraveler'; diff --git a/sql/updates/world/2013_06_15_07_world_gossip.sql b/sql/updates/world/2013_06_15_07_world_gossip.sql deleted file mode 100644 index 14da6211f93..00000000000 --- a/sql/updates/world/2013_06_15_07_world_gossip.sql +++ /dev/null @@ -1,47 +0,0 @@ --- Arathandris Silversky -UPDATE `creature_template` SET `gossip_menu_id`=2208 WHERE `entry` IN (9528); --- Add Any Missing Gossip Menu item -DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2844; -- Before Quest 4101 -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2844); -DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2845; -- After Quest 4101 -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2845); -DELETE FROM `gossip_menu` WHERE `entry`=2208 AND `text_id`=2848; -- If Horde -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (2208,2848); --- Add Any Missing Gossip Option -DELETE FROM `gossip_menu_option` WHERE menu_id=2208; -INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`)VALUES -(2208,0,0,"I need a Cenarion beacon.",1,1,0,0,0,0,''), -(2208,1,0,"What plants are in Felwood that might be corrupted?",1,1,0,0,0,0,''); --- Add option conditions for gossip -DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup` IN (2208); -INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES -(14,2208,2844,0,8,3781,0,0,1,0,'','Arathandris Silversky - Show gossip text if player has not been rewarded quest 4101'), -(14,2208,2845,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip text if player has been rewarded quest 4101'), -(14,2208,2848,0,6,67,0,0,0,0,'','Arathandris Silversky - Show gossip text if player is horde'); --- Add option conditions for gossip -DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (2208); -INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES -(15,2208,0,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip option if player has been rewarded quest 4101'), -(15,2208,0,1,2,11511,1,1,1,0,'','Arathandris Silversky - Show gossip option if player does not have Cenarion Beacon'), -(15,2208,1,0,8,3781,0,0,0,0,'','Arathandris Silversky - Show gossip option if player has been rewarded quest 4101'); - --- Maybess Riverbreeze -UPDATE `creature_template` SET `gossip_menu_id`=21400 WHERE `entry` IN (9529); --- Add Any Missing Gossip Menu item -DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2842; -- Before Quest 4102 -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2842); -DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2843; -- After Quest 4102 -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2843); -DELETE FROM `gossip_menu` WHERE `entry`=21400 AND `text_id`=2849; -- If Alliance -INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (21400,2849); --- Add Any Missing Gossip Option -DELETE FROM `gossip_menu_option` WHERE menu_id=21400; -INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`)VALUES -(21400,0,0,"I need a Cenarion beacon.",1,1,0,0,0,0,''), -(21400,1,0,"What plants are in Felwood that might be corrupted?",1,1,0,0,0,0,''); --- Add option conditions for gossip -DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (21400); -INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES -(15,21400,0,0,8,3781,0,0,0,0,'','Maybess Riverbreeze - Show gossip option if player has been rewarded quest 4102'), -(15,21400,0,1,2,11511,1,1,1,0,'','Maybess Riverbreeze - Show gossip option if player does not have Cenarion Beacon'), -(15,21400,1,0,8,3781,0,0,0,0,'','Maybess Riverbreeze - Show gossip option if player has been rewarded quest 4102'); diff --git a/sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql b/sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql deleted file mode 100644 index 3c68f4e5b33..00000000000 --- a/sql/updates/world/2013_06_15_08_world_spelldifficulty_dbc.sql +++ /dev/null @@ -1,5 +0,0 @@ -DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (33923,33666,33711); -INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES -(33923,33923,38796), -(33666,33666,38795), -(33711,33711,38794); diff --git a/sql/updates/world/2013_06_15_09_world_creature_template.sql b/sql/updates/world/2013_06_15_09_world_creature_template.sql deleted file mode 100644 index d4673e08a15..00000000000 --- a/sql/updates/world/2013_06_15_09_world_creature_template.sql +++ /dev/null @@ -1,2 +0,0 @@ --- Fix cosmetic-drakkari-bat-ph -UPDATE `creature_template` SET `flags_extra`=`flags_extra`|2 WHERE `entry`=27490; diff --git a/sql/updates/world/2013_06_16_00_world_misc.sql b/sql/updates/world/2013_06_16_00_world_misc.sql new file mode 100644 index 00000000000..49f8d4cab6e --- /dev/null +++ b/sql/updates/world/2013_06_16_00_world_misc.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `faction_A`=103,`faction_H`=103 WHERE `entry`=26127; diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 0e59f1d517a..a4572f43563 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -812,7 +812,10 @@ public: struct npc_nexus_drake_hatchlingAI : public FollowerAI //The spell who makes the npc follow the player is missing, also we can use FollowerAI! { - npc_nexus_drake_hatchlingAI(Creature* creature) : FollowerAI(creature) {} + npc_nexus_drake_hatchlingAI(Creature* creature) : FollowerAI(creature) + { + HarpoonerGUID = 0; + } uint64 HarpoonerGUID; bool WithRedDragonBlood; -- cgit v1.2.3 From 6a119f067190a61d31533c510b7c702ab35868f7 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 16 Jun 2013 12:43:24 -0230 Subject: DB/Misc: Some misc db fixes --- sql/updates/world/2013_06_16_01_world_misc.sql | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 sql/updates/world/2013_06_16_01_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_16_01_world_misc.sql b/sql/updates/world/2013_06_16_01_world_misc.sql new file mode 100644 index 00000000000..8f9068a85d8 --- /dev/null +++ b/sql/updates/world/2013_06_16_01_world_misc.sql @@ -0,0 +1,23 @@ +-- Fix some path errors +UPDATE `creature` SET `MovementType`=0 WHERE `guid`=66949; + +DELETE FROM `creature_addon` WHERE `guid`=114330; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`) VALUES +(114330,1143300,1); + +UPDATE `creature_addon` SET `path_id`=2034560 WHERE `guid`=203456; +UPDATE `waypoint_data` SET `id`=2034560 WHERE `id`=203591; + +-- Windrock hunter removed in rev 2.2.0 +DELETE FROM `creature` WHERE `id`=18996; + +-- Delete existing unblizzlike spawns +DELETE FROM `creature` WHERE `id` IN (29064,29063,29062,29098,29096,29097,@AttackingNecromancer,@AttackingChampion,@AttackingFiend,@NoSpellNecromancer); +-- Delete addon data from previous mentioned wrong spanws +DELETE FROM `creature_addon` WHERE `guid` BETWEEN 127316 AND 127337; +DELETE FROM `creature_addon` WHERE `guid` BETWEEN 127340 AND 127375; +DELETE FROM `creature_addon` WHERE `guid` BETWEEN 127293 AND 127315; +DELETE FROM `creature_addon` WHERE `guid` BETWEEN 127272 AND 127292; +DELETE FROM `creature_addon` WHERE `guid`=12246; + +DELETE FROM `gameobject` WHERE `guid` IN (17454,17455); -- cgit v1.2.3 From 183358afd55e4f1bde3977d2e7eb236d19322609 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 16 Jun 2013 12:50:48 -0230 Subject: DB/Misc: Fix up previous push. --- sql/updates/world/2013_06_16_01_world_misc.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sql') diff --git a/sql/updates/world/2013_06_16_01_world_misc.sql b/sql/updates/world/2013_06_16_01_world_misc.sql index 8f9068a85d8..8a31fa8118e 100644 --- a/sql/updates/world/2013_06_16_01_world_misc.sql +++ b/sql/updates/world/2013_06_16_01_world_misc.sql @@ -12,7 +12,7 @@ UPDATE `waypoint_data` SET `id`=2034560 WHERE `id`=203591; DELETE FROM `creature` WHERE `id`=18996; -- Delete existing unblizzlike spawns -DELETE FROM `creature` WHERE `id` IN (29064,29063,29062,29098,29096,29097,@AttackingNecromancer,@AttackingChampion,@AttackingFiend,@NoSpellNecromancer); +DELETE FROM `creature` WHERE `id` IN (29064,29063,29062,29098,29096,29097); -- Delete addon data from previous mentioned wrong spanws DELETE FROM `creature_addon` WHERE `guid` BETWEEN 127316 AND 127337; DELETE FROM `creature_addon` WHERE `guid` BETWEEN 127340 AND 127375; -- cgit v1.2.3 From ef1dca7dd861b59a8b9e22745a7d1566bfe72f9b Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 16 Jun 2013 13:25:50 -0230 Subject: DB/misc: Misc deletes as per Aokromes. --- sql/updates/world/2013_06_16_02_world_misc.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2013_06_16_02_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_16_02_world_misc.sql b/sql/updates/world/2013_06_16_02_world_misc.sql new file mode 100644 index 00000000000..b02062bc163 --- /dev/null +++ b/sql/updates/world/2013_06_16_02_world_misc.sql @@ -0,0 +1,5 @@ +DELETE FROM `creature` WHERE `id` IN (29119,28925,28924,29051); + +DELETE FROM `linked_respawn` WHERE `guid` IN (127272,127273,127275,127293,127296,127318,127340,127341,127350,127351,127352,127355,127357,127359,127360,127364,127365,127375); + +DELETE FROM `spell_ranks` WHERE `first_spell_id` IN (24440,24475); -- cgit v1.2.3 From bb4efd78d54a6030850db87d33b017d0b628056c Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 16 Jun 2013 16:13:04 -0230 Subject: DB/Misc: Some quest fixes for Zul'Drak. --- sql/updates/world/2013_06_16_03_world_misc.sql | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 sql/updates/world/2013_06_16_03_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_16_03_world_misc.sql b/sql/updates/world/2013_06_16_03_world_misc.sql new file mode 100644 index 00000000000..86418513a08 --- /dev/null +++ b/sql/updates/world/2013_06_16_03_world_misc.sql @@ -0,0 +1,13 @@ +UPDATE `quest_template` SET `PrevQuestId`=12596 WHERE `id`=12541; +UPDATE `quest_template` SET `PrevQuestId`=12565, `SpecialFlags`=1 WHERE `id`=12567; + +-- Gooey Ghoul Drool SAI +SET @ENTRY := 29856; +UPDATE `creature_template` SET `AIName`= 'SmartAI',`ScriptName`= '' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY; +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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,8,0,100,0,55364,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Gooey Ghoul Drool - On Spell Hit Create Gooey Ghoul Drool - despawn'); +-- Add missing spell click +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=29856 AND `spell_id`=55364; +INSERT INTO `npc_spellclick_spells` (`npc_entry`,`spell_id`,`cast_flags`) VALUES +(29856,55364,1); -- cgit v1.2.3 From 9b4f14ca6771930d376498b7e57968fceca887df Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 16 Jun 2013 19:43:29 -0230 Subject: DB/Creature_text: Add texts for Alchemist Finklestein --- .../world/2013_06_16_04_world_creature_text.sql | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 sql/updates/world/2013_06_16_04_world_creature_text.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_16_04_world_creature_text.sql b/sql/updates/world/2013_06_16_04_world_creature_text.sql new file mode 100644 index 00000000000..d6333628a0e --- /dev/null +++ b/sql/updates/world/2013_06_16_04_world_creature_text.sql @@ -0,0 +1,47 @@ +-- Add texts for Alchemist Finklestein +DELETE FROM `creature_text` WHERE `entry`=28205; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +-- Events 1,2,3 +(28205,0,0,'Quickly, get me some...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,0,1,'I think it needs...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,0,2,'Find me some...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,0,3,'It simply must have some...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,0,4,'We need some...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,0,5,'It simply must have some...',42,0,100,1,0,0,'Alchemist Finklestein'), +-- Event 4 +(28205,1,0,'I think it''s time for...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,1,1,'Next, we''ll need...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,1,2,'Tastes like it needs more....',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,1,3,'Alright, now find me some...',42,0,100,1,0,0,'Alchemist Finklestein'), +-- Event 5 +(28205,2,0,'Coming along nicely, but still needs...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,2,1,'Before it thickens, we must add...',42,0,100,1,0,0,'Alchemist Finklestein'), +-- Event 6 +(28205,3,0,'Before it boils over, I need...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,3,1,'It''s thickening! Quickly, get some...',42,0,100,1,0,0,'Alchemist Finklestein'), +-- Fail +(28205,4,0,'You''re too late. I must start again from the beginning....',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,4,1,'No! The serum is ruined!',42,0,100,0,0,0,'Alchemist Finklestein'), +-- Item request +(28205,5,0,'Knotroot!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,6,0,'Pickled Eagle Egg!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,7,0,'Speckled Guano!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,8,0,'Withered Batwing!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,9,0,'Seasoned Slider Cider!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,10,0,'Pulverized Gargoyle Teeth!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,11,0,'Muddy Mire Maggot!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,12,0,'Spiky Spider Egg!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,13,0,'Hairy Herring Head!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,14,0,'Putrid Pirate Perspiration!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,15,0,'Icecrown Bottled Water!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,16,0,'Wasp''s Wings!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,17,0,'Prismatic Mojo!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,18,0,'Raptor Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,19,0,'Amberseed!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,20,0,'Burning Ice!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,21,0,'Shrunken Dragon''s Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,22,0,'Chilled Serpent Mucus!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,23,0,'Crystallized Hogsnot!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,24,0,'Crushed Basilisk Crystals!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,25,0,'Trollbane!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,26,0,'Frozen Spider Ichor!',42,0,100,0,0,0,'Alchemist Finklestein'); -- cgit v1.2.3 From 5d6d8e1c3fdcf1af86ad16db4b0bd12f62e788c0 Mon Sep 17 00:00:00 2001 From: kaelima Date: Mon, 17 Jun 2013 05:20:20 +0200 Subject: DB/Warden: Fix address check for multi-jump hacks It was not long enough to detect eg. Hitchhikers Hack --- sql/updates/world/2013_06_17_00_world_warden_checks.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2013_06_17_00_world_warden_checks.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_17_00_world_warden_checks.sql b/sql/updates/world/2013_06_17_00_world_warden_checks.sql new file mode 100644 index 00000000000..030fee68d37 --- /dev/null +++ b/sql/updates/world/2013_06_17_00_world_warden_checks.sql @@ -0,0 +1,2 @@ +-- Fix address check for multi-jump hack +UPDATE `warden_checks` SET `result`='75440FB75E', `length`=5 WHERE `id`=785; -- cgit v1.2.3 From d163c58258160b65a2d785ef552653fc2c8f5eb1 Mon Sep 17 00:00:00 2001 From: Pitcrawler Date: Mon, 17 Jun 2013 16:44:04 +0200 Subject: DB/Quests: Fix Reunited, Dark Horizon, closes #6246 closes #8979 --- sql/updates/world/2013_06_17_01_world_misc.sql | 255 +++++++++++++++++++++++++ src/server/scripts/Spells/spell_quest.cpp | 32 ++++ 2 files changed, 287 insertions(+) create mode 100644 sql/updates/world/2013_06_17_01_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_17_01_world_misc.sql b/sql/updates/world/2013_06_17_01_world_misc.sql new file mode 100644 index 00000000000..d5c6ea6d29d --- /dev/null +++ b/sql/updates/world/2013_06_17_01_world_misc.sql @@ -0,0 +1,255 @@ +SET @GUID := 21707; + +SET @QUEST_INFILTRATING_VOLTARUS := 12661; +SET @QUEST_REUNITED := 12663; +SET @QUEST_DARK_HORIZON := 12664; +SET @NPC_DRAKURU := 28503; +SET @NPC_STEFAN := 28518; +SET @NPC_GOREBAG := 28666; +SET @NPC_FLYING_FIEND := 28669; +SET @NPC_OVERLORD_DRAKURU := 28717; +SET @NPC_PERSISTENCE := 29863; + +UPDATE `creature_template` SET `speed_walk`=2.4, `speed_run`=0.992063, `AIName`='SmartAI' WHERE `entry`=@NPC_GOREBAG; +UPDATE `creature_template` SET `speed_walk`=4.4, `speed_run`=1.375, `InhabitType`=4, `AIName`='SmartAI', `vehicleId`=127 WHERE `entry`=@NPC_FLYING_FIEND; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@NPC_OVERLORD_DRAKURU; +UPDATE `creature_template` SET `unit_flags`=0, `InhabitType`=4 WHERE `entry`=28759; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@NPC_DRAKURU; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=@NPC_PERSISTENCE; + +DELETE FROM `creature_template_addon` WHERE `entry`=@NPC_PERSISTENCE; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`) VALUES +(@NPC_PERSISTENCE,50331648,1); + +UPDATE `creature` SET `spawndist`=0, `MovementType`=0, `unit_flags`=768 WHERE `guid` IN (103732,103734,103744,103751,103753,103755,103765,103766); + +DELETE FROM `creature` WHERE `guid` IN (@GUID,111712); +INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`) VALUES +(@GUID,28717,571,1,1,0,0,5954.766,-3273.196,406.9324,5.445427,300,0,0,0,0,0,0,0,0); + +DELETE FROM `areatrigger_scripts` WHERE `entry` IN (5056,5057,5058,5059,5060,5095,5096,5097,5098); +INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES +(5056,'SmartTrigger'), +(5057,'SmartTrigger'), +(5058,'SmartTrigger'), +(5059,'SmartTrigger'), +(5060,'SmartTrigger'), +(5095,'SmartTrigger'), +(5096,'SmartTrigger'), +(5097,'SmartTrigger'), +(5098,'SmartTrigger'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-@GUID,-100088,-100089,-100090,-100091,-100092,-100093,-100094,-100095,@NPC_DRAKURU,@NPC_GOREBAG,@NPC_FLYING_FIEND,@NPC_PERSISTENCE) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@NPC_STEFAN AND `source_type`=0 AND `id`=4; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (5056,5057,5058,5059,5060,5095,5096,5097,5098) AND `source_type`=2; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@NPC_FLYING_FIEND*100,@NPC_OVERLORD_DRAKURU*100,@NPC_PERSISTENCE*100) 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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(-100095,0,0,0,11,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On spawn - Set event phase 1'), +(-100095,0,1,2,38,1,100,0,0,1,0,0,1,0,0,0,0,0,0,12,1,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100095,0,2,0,61,1,100,0,0,0,0,0,80,@NPC_OVERLORD_DRAKURU*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100092,0,0,0,11,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On spawn - Set event phase 1'), +(-100092,0,1,2,38,1,100,0,0,1,0,0,1,1,0,0,0,0,0,12,1,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100092,0,2,0,61,1,100,0,0,0,0,0,80,@NPC_OVERLORD_DRAKURU*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100088,0,0,0,11,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On spawn - Set event phase 1'), +(-100088,0,1,2,38,1,100,0,0,1,0,0,1,2,0,0,0,0,0,12,1,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100088,0,2,0,61,1,100,0,0,0,0,0,80,@NPC_OVERLORD_DRAKURU*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-@GUID,0,0,0,11,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On spawn - Set event phase 1'), +(-@GUID,0,1,2,38,1,100,0,0,1,0,0,1,3,0,0,0,0,0,12,1,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-@GUID,0,2,0,61,1,100,0,0,0,0,0,80,@NPC_OVERLORD_DRAKURU*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100090,0,0,0,11,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On spawn - Set event phase 1'), +(-100090,0,1,2,38,1,100,0,0,1,0,0,1,4,0,0,0,0,0,12,1,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100090,0,2,0,61,1,100,0,0,0,0,0,80,@NPC_OVERLORD_DRAKURU*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100094,0,0,0,11,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On spawn - Set event phase 1'), +(-100094,0,1,2,38,1,100,0,0,1,0,0,1,5,0,0,0,0,0,12,1,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100094,0,2,0,61,1,100,0,0,0,0,0,80,@NPC_OVERLORD_DRAKURU*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100089,0,0,0,11,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On spawn - Set event phase 1'), +(-100089,0,1,2,38,1,100,0,0,1,0,0,1,6,0,0,0,0,0,12,1,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100089,0,2,0,61,1,100,0,0,0,0,0,80,@NPC_OVERLORD_DRAKURU*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100091,0,0,0,11,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On spawn - Set event phase 1'), +(-100091,0,1,2,38,1,100,0,0,1,0,0,1,7,0,0,0,0,0,12,1,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100091,0,2,0,61,1,100,0,0,0,0,0,80,@NPC_OVERLORD_DRAKURU*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100093,0,0,0,11,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On spawn - Set event phase 1'), +(-100093,0,1,2,38,1,100,0,0,1,0,0,1,8,0,0,0,0,0,12,1,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), +(-100093,0,2,0,61,1,100,0,0,0,0,0,80,@NPC_OVERLORD_DRAKURU*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru - On data 0 1 set - Say line'), + +(@NPC_DRAKURU,0,0,0,62,0,100,0,9731,1,0,0,11,52224,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Drakuru - On gossip select - Spellcast Kill Credit'), +(@NPC_DRAKURU,0,1,0,62,0,100,0,9731,2,0,0,11,52253,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Drakuru - On gossip select - Spellcast Kill Credit'), +(@NPC_DRAKURU,0,2,0,62,0,100,0,9731,3,0,0,11,52355,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Drakuru - On gossip select - Spellcast Quest Complete Credit Credit'), +(@NPC_DRAKURU,0,3,0,62,0,100,0,9731,4,0,0,11,52680,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Drakuru - On gossip select - Spellcast Kill Credit'), +(@NPC_DRAKURU,0,4,0,62,0,100,0,9731,5,0,0,11,52675,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Drakuru - On gossip select - Spellcast Kill Credit'), + +(@NPC_STEFAN,0,4,0,62,0,100,0,9709,1,0,0,11,53810,0,0,0,0,0,7,0,0,0,0,0,0,0,'Stefan Vadu - On gossip select - Spellcast Push Ensorceled Choker'), + +(@NPC_GOREBAG,0,0,1,62,0,100,0,9732,0,0,0,11,52194,0,0,0,0,0,7,0,0,0,0,0,0,0,'Gorebag - On gossip select - Spellcast Force Cast Summon Gargoyle'), +(@NPC_GOREBAG,0,1,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Gorebag - On gossip select - Close gossip'), + +(@NPC_FLYING_FIEND,0,0,1,54,0,100,0,0,0,0,0,11,52191,0,0,0,0,0,1,0,0,0,0,0,0,0,'Flying Fiend - Just summoned - Spellcast Scourge Disguise'), +(@NPC_FLYING_FIEND,0,1,0,61,0,100,0,0,0,0,0,80,@NPC_FLYING_FIEND*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Flying Fiend - Just summoned - Run script'), +(@NPC_FLYING_FIEND,0,2,0,40,0,100,0,62,@NPC_FLYING_FIEND,0,0,33,28663,0,0,0,0,0,23,0,0,0,0,0,0,0,'Flying Fiend - On WP 62 reached - Quest Credit'), +(@NPC_FLYING_FIEND,0,3,0,40,0,100,0,63,@NPC_FLYING_FIEND,0,0,11,50630,0,0,0,0,0,1,0,0,0,0,0,0,0,'Flying Fiend - On WP 63 reached - Spellcast Eject All Passengers'), + +(@NPC_PERSISTENCE,0,0,0,54,0,100,0,0,0,0,0,80,@NPC_PERSISTENCE*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Persistence - Just summoned - Run script'), + +(5056,2,0,1,46,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'On trigger - Store targetlist'), +(5056,2,1,2,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,10,100095,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Send targetlist'), +(5056,2,2,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,10,100095,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Set data 0 1 Overlord Drakuru'), +(5057,2,0,1,46,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'On trigger - Store targetlist'), +(5057,2,1,2,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,10,100092,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Send targetlist'), +(5057,2,2,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,10,100092,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Set data 0 1 Overlord Drakuru'), +(5058,2,0,1,46,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'On trigger - Store targetlist'), +(5058,2,1,2,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,10,100088,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Send targetlist'), +(5058,2,2,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,10,100088,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Set data 0 1 Overlord Drakuru'), +(5059,2,0,1,46,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'On trigger - Store targetlist'), +(5059,2,1,2,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,10,@GUID,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Send targetlist'), +(5059,2,2,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,10,@GUID,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Set data 0 1 Overlord Drakuru'), +(5060,2,0,1,46,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'On trigger - Store targetlist'), +(5060,2,1,2,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,10,100090,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Send targetlist'), +(5060,2,2,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,10,100090,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Set data 0 1 Overlord Drakuru'), +(5095,2,0,1,46,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'On trigger - Store targetlist'), +(5095,2,1,2,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,10,100094,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Send targetlist'), +(5095,2,2,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,10,100094,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Set data 0 1 Overlord Drakuru'), +(5096,2,0,1,46,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'On trigger - Store targetlist'), +(5096,2,1,2,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,10,100089,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Send targetlist'), +(5096,2,2,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,10,100089,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Set data 0 1 Overlord Drakuru'), +(5097,2,0,1,46,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'On trigger - Store targetlist'), +(5097,2,1,2,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,10,100091,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Send targetlist'), +(5097,2,2,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,10,100091,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Set data 0 1 Overlord Drakuru'), +(5098,2,0,1,46,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'On trigger - Store targetlist'), +(5098,2,1,2,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,10,100093,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Send targetlist'), +(5098,2,2,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,10,100093,@NPC_OVERLORD_DRAKURU,0,0,0,0,0,'On trigger - Set data 0 1 Overlord Drakuru'), + +(@NPC_FLYING_FIEND*100,9,0,0,0,0,100,0,1700,1700,0,0,53,1,@NPC_FLYING_FIEND,0,0,0,0,1,0,0,0,0,0,0,0,'Flying Fiend script - Start WP movement'), + +(@NPC_OVERLORD_DRAKURU*100,9,0,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru script - Set event phase 0'), +(@NPC_OVERLORD_DRAKURU*100,9,1,0,0,0,100,0,5000,5000,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Drakuru script - Set event phase 1'), + +(@NPC_PERSISTENCE*100,9,0,0,0,0,100,0,1000,1000,0,0,69,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Persistence script - Move to position'); + +DELETE FROM `creature_text` WHERE `entry`=@NPC_OVERLORD_DRAKURU; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@NPC_OVERLORD_DRAKURU,0,0,'A portion of this land already be mine, mon, but it only be da beginning!',15,0,100,0,0,0,''), +(@NPC_OVERLORD_DRAKURU,1,0,'Here, da self-righteous crusaders be standin'' in da way of our goal. Dey will fall!',15,0,100,0,0,0,''), +(@NPC_OVERLORD_DRAKURU,2,0,'Dis all soon gonna belong to da Lich King.',15,0,100,0,0,0,''), +(@NPC_OVERLORD_DRAKURU,3,0,'Da Drakkari be destroyin'' their lands! Dey gunna be losin'' dem... soon, mon.',15,0,100,0,0,0,''), +(@NPC_OVERLORD_DRAKURU,4,0,'Ahh, dere be our destiny... Gundrak!',15,0,100,0,0,0,''), +(@NPC_OVERLORD_DRAKURU,5,0,'Study dis place well, mon. Ya gonna be helpin'' me conquer it!',15,0,100,0,0,0,''), +(@NPC_OVERLORD_DRAKURU,6,0,'Ahh yeah, mon! Dere be great glory ta be had here!',15,0,100,0,0,0,''), +(@NPC_OVERLORD_DRAKURU,7,0,'Da Lich King be sharin'' his power wit dem who serve him well, mon.',15,0,100,0,0,0,''), +(@NPC_OVERLORD_DRAKURU,8,0,'Come to me now, $n. I must be speakin'' wit ya.',15,0,100,0,0,0,''); + +DELETE FROM `spell_scripts` WHERE `id`=50630; +INSERT INTO `spell_scripts` (`id`,`effIndex`,`delay`,`command`,`datalong`,`datalong2`,`dataint`,`x`,`y`,`z`,`o`) VALUES +(50630,0,0,14,46598,0,0,0,0,0,0); + +DELETE FROM `spell_script_names` WHERE `spell_id`=55368; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(55368,'spell_q12661_q12669_q12676_q12677_q12713_summon_stefan'); + +DELETE FROM `waypoints` WHERE `entry`=@NPC_FLYING_FIEND; +INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES +(@NPC_FLYING_FIEND,1,6063.744,-2094.859,431.5205,''), +(@NPC_FLYING_FIEND,2,5967.444,-2165.715,422.854,''), +(@NPC_FLYING_FIEND,3,5865.666,-2174.974,393.3817,''), +(@NPC_FLYING_FIEND,4,5713.336,-2151.653,373.4649,''), +(@NPC_FLYING_FIEND,5,5558.722,-2128.131,366.1319,''), +(@NPC_FLYING_FIEND,6,5451.114,-2151.127,354.4373,''), +(@NPC_FLYING_FIEND,7,5377.812,-2219.117,359.1318,''), +(@NPC_FLYING_FIEND,8,5366.704,-2360.862,377.715,''), +(@NPC_FLYING_FIEND,9,5435.392,-2533.554,373.9926,''), +(@NPC_FLYING_FIEND,10,5620.228,-2725.159,344.5209,''), +(@NPC_FLYING_FIEND,11,5710.932,-2849.435,341.9651,''), +(@NPC_FLYING_FIEND,12,5793.25,-3015.15,364.3539,''), +(@NPC_FLYING_FIEND,13,5879.358,-3182.915,393.3817,''), +(@NPC_FLYING_FIEND,14,5964.949,-3300.001,393.3817,''), +(@NPC_FLYING_FIEND,15,6115.404,-3420.539,450.5761,''), +(@NPC_FLYING_FIEND,16,6211.264,-3582.169,481.242,''), +(@NPC_FLYING_FIEND,17,6279.312,-3777.027,504.3809,''), +(@NPC_FLYING_FIEND,18,6463.991,-3861.046,546.2137,''), +(@NPC_FLYING_FIEND,19,6575.966,-4030.918,546.2137,''), +(@NPC_FLYING_FIEND,20,6743.058,-4188.865,546.2137,''), +(@NPC_FLYING_FIEND,21,6896.725,-4247.418,577.3526,''), +(@NPC_FLYING_FIEND,22,6999.448,-4298.92,582.9353,''), +(@NPC_FLYING_FIEND,23,7100.701,-4416.983,611.0741,''), +(@NPC_FLYING_FIEND,24,7116.469,-4555.864,660.6572,''), +(@NPC_FLYING_FIEND,25,7057.505,-4669.796,675.6574,''), +(@NPC_FLYING_FIEND,26,6947.491,-4771.33,660.6572,''), +(@NPC_FLYING_FIEND,27,6758.396,-4783.884,626.5463,''), +(@NPC_FLYING_FIEND,28,6650.223,-4701.149,597.2407,''), +(@NPC_FLYING_FIEND,29,6627.306,-4597.556,586.0188,''), +(@NPC_FLYING_FIEND,30,6613.611,-4439.712,592.6573,''), +(@NPC_FLYING_FIEND,31,6526.06,-4289.037,568.1019,''), +(@NPC_FLYING_FIEND,32,6401.896,-4215.937,538.5742,''), +(@NPC_FLYING_FIEND,33,6286.808,-4191.781,518.3241,''), +(@NPC_FLYING_FIEND,34,6204.36,-4223.743,465.0742,''), +(@NPC_FLYING_FIEND,35,6134.582,-4239.067,386.1299,''), +(@NPC_FLYING_FIEND,36,5995.454,-4246.94,428.5185,''), +(@NPC_FLYING_FIEND,37,5909.651,-4251.924,428.5185,''), +(@NPC_FLYING_FIEND,38,5792.211,-4212.291,428.5185,''), +(@NPC_FLYING_FIEND,39,5656.491,-4115.374,428.5185,''), +(@NPC_FLYING_FIEND,40,5549.697,-3983.661,428.5185,''), +(@NPC_FLYING_FIEND,41,5495.661,-3853.954,428.5185,''), +(@NPC_FLYING_FIEND,42,5463.381,-3751.72,428.5185,''), +(@NPC_FLYING_FIEND,43,5430.445,-3669.375,428.5185,''), +(@NPC_FLYING_FIEND,44,5348.065,-3559.13,406.3796,''), +(@NPC_FLYING_FIEND,45,5240.038,-3418.709,381.4073,''), +(@NPC_FLYING_FIEND,46,5160.26,-3335.475,381.4073,''), +(@NPC_FLYING_FIEND,47,5044.02,-3214.565,381.4073,''), +(@NPC_FLYING_FIEND,48,4994.617,-3163.257,381.4073,''), +(@NPC_FLYING_FIEND,49,4929.424,-3062.172,381.4073,''), +(@NPC_FLYING_FIEND,50,4874.155,-2945.799,381.4073,''), +(@NPC_FLYING_FIEND,51,4892.917,-2768.813,381.4073,''), +(@NPC_FLYING_FIEND,52,5019.182,-2627.008,381.4073,''), +(@NPC_FLYING_FIEND,53,5067.444,-2519.115,381.4073,''), +(@NPC_FLYING_FIEND,54,5081.711,-2367.998,381.4073,''), +(@NPC_FLYING_FIEND,55,5152.338,-2120.359,419.4349,''), +(@NPC_FLYING_FIEND,56,5368.514,-1851.122,422.8514,''), +(@NPC_FLYING_FIEND,57,5660.992,-1784.473,360.5462,''), +(@NPC_FLYING_FIEND,58,5851.7,-1800.855,350.1305,''), +(@NPC_FLYING_FIEND,59,6030.714,-1863.997,348.1571,''), +(@NPC_FLYING_FIEND,60,6103.75,-1910.458,354.3242,''), +(@NPC_FLYING_FIEND,61,6163.79,-1944.525,374.379,''), +(@NPC_FLYING_FIEND,62,6183.492,-1976.164,410.129,''), +(@NPC_FLYING_FIEND,63,6184.051,-1991.26,417.3231,''); + +DELETE FROM `vehicle_template_accessory` WHERE `entry` IN (@NPC_FLYING_FIEND,@NPC_PERSISTENCE); +INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`,`summontype`,`summontimer`) VALUES +(@NPC_FLYING_FIEND,@NPC_OVERLORD_DRAKURU,1,1,'Flying Fiend',8,0), +(@NPC_PERSISTENCE,@NPC_STEFAN,0,1,'Persistence',8,0); + +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (@NPC_FLYING_FIEND,@NPC_PERSISTENCE); +INSERT INTO `npc_spellclick_spells` (`npc_entry`,`spell_id`,`cast_flags`,`user_type`) VALUES +(@NPC_FLYING_FIEND,46598,0,1), +(@NPC_PERSISTENCE,46598,0,1); + +UPDATE `quest_template` SET `PrevQuestId`=12649 WHERE `Id`=@QUEST_REUNITED; +UPDATE `quest_template` SET `PrevQuestId`=12648 WHERE `Id`=@QUEST_DARK_HORIZON; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=9731 AND `SourceEntry`=13348; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=19 AND `SourceEntry` IN (@QUEST_REUNITED,@QUEST_DARK_HORIZON); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=20 AND `SourceEntry` IN (@QUEST_REUNITED,@QUEST_DARK_HORIZON); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` IN (5056,5057,5058,5059,5060,5095,5096,5097,5098); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(14,9731,13348,0,0,8,12238,0,0,1,0,'','Overlord Drakuru - Show different gossip if player has not rewarded quest Cleansing Drak''Tharon'), +(14,9731,13348,0,0,8,12661,0,0,1,0,'','Overlord Drakuru - Show different gossip if player has not rewarded quest Infiltrating Voltarus'), +(19,0,@QUEST_REUNITED,0,0,9,@QUEST_INFILTRATING_VOLTARUS,0,0,0,0,'','Quest acceptable only if player has taken quest Infiltrating Voltarus'), +(19,0,@QUEST_DARK_HORIZON,0,0,9,@QUEST_INFILTRATING_VOLTARUS,0,0,0,0,'','Quest acceptable only if player has taken quest Infiltrating Voltarus'), +(20,0,@QUEST_REUNITED,0,0,9,@QUEST_INFILTRATING_VOLTARUS,0,0,0,0,'','Show quest mark only if player has taken quest Infiltrating Voltarus'), +(20,0,@QUEST_DARK_HORIZON,0,0,9,@QUEST_INFILTRATING_VOLTARUS,0,0,0,0,'','Show quest mark only if player has taken quest Infiltrating Voltarus'), +(22,1,5056,2,0,9,@QUEST_REUNITED,0,0,0,0,'','SAI triggers only if player has taken quest Reunited'), +(22,1,5056,2,1,9,@QUEST_DARK_HORIZON,0,0,0,0,'','SAI triggers only if player has taken quest Dark Horizon'), +(22,1,5057,2,0,9,@QUEST_REUNITED,0,0,0,0,'','SAI triggers only if player has taken quest Reunited'), +(22,1,5057,2,1,9,@QUEST_DARK_HORIZON,0,0,0,0,'','SAI triggers only if player has taken quest Dark Horizon'), +(22,1,5058,2,0,9,@QUEST_REUNITED,0,0,0,0,'','SAI triggers only if player has taken quest Reunited'), +(22,1,5058,2,1,9,@QUEST_DARK_HORIZON,0,0,0,0,'','SAI triggers only if player has taken quest Dark Horizon'), +(22,1,5059,2,0,9,@QUEST_REUNITED,0,0,0,0,'','SAI triggers only if player has taken quest Reunited'), +(22,1,5059,2,1,9,@QUEST_DARK_HORIZON,0,0,0,0,'','SAI triggers only if player has taken quest Dark Horizon'), +(22,1,5060,2,0,9,@QUEST_REUNITED,0,0,0,0,'','SAI triggers only if player has taken quest Reunited'), +(22,1,5060,2,1,9,@QUEST_DARK_HORIZON,0,0,0,0,'','SAI triggers only if player has taken quest Dark Horizon'), +(22,1,5095,2,0,9,@QUEST_REUNITED,0,0,0,0,'','SAI triggers only if player has taken quest Reunited'), +(22,1,5095,2,1,9,@QUEST_DARK_HORIZON,0,0,0,0,'','SAI triggers only if player has taken quest Dark Horizon'), +(22,1,5096,2,0,9,@QUEST_REUNITED,0,0,0,0,'','SAI triggers only if player has taken quest Reunited'), +(22,1,5096,2,1,9,@QUEST_DARK_HORIZON,0,0,0,0,'','SAI triggers only if player has taken quest Dark Horizon'), +(22,1,5097,2,0,9,@QUEST_REUNITED,0,0,0,0,'','SAI triggers only if player has taken quest Reunited'), +(22,1,5097,2,1,9,@QUEST_DARK_HORIZON,0,0,0,0,'','SAI triggers only if player has taken quest Dark Horizon'), +(22,1,5098,2,0,9,@QUEST_REUNITED,0,0,0,0,'','SAI triggers only if player has taken quest Reunited'), +(22,1,5098,2,1,9,@QUEST_DARK_HORIZON,0,0,0,0,'','SAI triggers only if player has taken quest Dark Horizon'); diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 013dfda809d..5b55b532566 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -1602,6 +1602,37 @@ class spell_q12527_zuldrak_rat : public SpellScriptLoader } }; +class spell_q12661_q12669_q12676_q12677_q12713_summon_stefan : public SpellScriptLoader +{ + public: + spell_q12661_q12669_q12676_q12677_q12713_summon_stefan() : SpellScriptLoader("spell_q12661_q12669_q12676_q12677_q12713_summon_stefan") { } + + class spell_q12661_q12669_q12676_q12677_q12713_summon_stefan_SpellScript : public SpellScript + { + PrepareSpellScript(spell_q12661_q12669_q12676_q12677_q12713_summon_stefan_SpellScript); + + void ChangeSummonPos(SpellEffIndex /*effIndex*/) + { + // Adjust effect summon position + WorldLocation summonPos = *GetExplTargetDest(); + Position offset = { 0.0f, 0.0f, 20.0f, 0.0f }; + summonPos.RelocateOffset(offset); + SetExplTargetDest(summonPos); + GetHitDest()->RelocateOffset(offset); + } + + void Register() + { + OnEffectHit += SpellEffectFn(spell_q12661_q12669_q12676_q12677_q12713_summon_stefan_SpellScript::ChangeSummonPos, EFFECT_0, SPELL_EFFECT_SUMMON); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_q12661_q12669_q12676_q12677_q12713_summon_stefan_SpellScript(); + } +}; + enum QuenchingMist { SPELL_FLICKERING_FLAMES = 53504 @@ -1789,6 +1820,7 @@ void AddSC_quest_spell_scripts() new spell_q11010_q11102_q11023_q11008_check_fly_mount(); new spell_q12372_azure_on_death_force_whisper(); new spell_q12527_zuldrak_rat(); + new spell_q12661_q12669_q12676_q12677_q12713_summon_stefan(); new spell_q12730_quenching_mist(); new spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy(); new spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon(); -- cgit v1.2.3 From 14695b056acfa89edb0f4acf198b4fdf3228aaa1 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Mon, 17 Jun 2013 20:52:41 -0230 Subject: Scripting: Quest: Troll Patrol: The Alchemist's Apprentice --- .../world/2013_06_16_04_world_creature_text.sql | 41 +- sql/updates/world/2013_06_17_02_world_misc.sql | 86 +++ src/server/scripts/Northrend/zone_zuldrak.cpp | 699 ++++++++++++++++++++- 3 files changed, 801 insertions(+), 25 deletions(-) create mode 100644 sql/updates/world/2013_06_17_02_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_16_04_world_creature_text.sql b/sql/updates/world/2013_06_16_04_world_creature_text.sql index d6333628a0e..3f08495f884 100644 --- a/sql/updates/world/2013_06_16_04_world_creature_text.sql +++ b/sql/updates/world/2013_06_16_04_world_creature_text.sql @@ -2,23 +2,23 @@ DELETE FROM `creature_text` WHERE `entry`=28205; INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES -- Events 1,2,3 -(28205,0,0,'Quickly, get me some...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,0,1,'I think it needs...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,0,2,'Find me some...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,0,3,'It simply must have some...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,0,4,'We need some...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,0,5,'It simply must have some...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,0,0,'Quickly, get me some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,1,'I think it needs...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,2,'Find me some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,3,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,4,'We need some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,5,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'), -- Event 4 -(28205,1,0,'I think it''s time for...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,1,1,'Next, we''ll need...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,1,2,'Tastes like it needs more....',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,1,3,'Alright, now find me some...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,1,0,'I think it''s time for...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,1,'Next, we''ll need...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,2,'Tastes like it needs more....',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,3,'Alright, now find me some...',42,0,100,0,0,0,'Alchemist Finklestein'), -- Event 5 -(28205,2,0,'Coming along nicely, but still needs...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,2,1,'Before it thickens, we must add...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,2,0,'Coming along nicely, but still needs...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,2,1,'Before it thickens, we must add...',42,0,100,0,0,0,'Alchemist Finklestein'), -- Event 6 -(28205,3,0,'Before it boils over, I need...',42,0,100,1,0,0,'Alchemist Finklestein'), -(28205,3,1,'It''s thickening! Quickly, get some...',42,0,100,1,0,0,'Alchemist Finklestein'), +(28205,3,0,'Before it boils over, I need...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,3,1,'It''s thickening! Quickly, get some...',42,0,100,0,0,0,'Alchemist Finklestein'), -- Fail (28205,4,0,'You''re too late. I must start again from the beginning....',42,0,100,0,0,0,'Alchemist Finklestein'), (28205,4,1,'No! The serum is ruined!',42,0,100,0,0,0,'Alchemist Finklestein'), @@ -38,10 +38,9 @@ INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`pr (28205,17,0,'Prismatic Mojo!',42,0,100,0,0,0,'Alchemist Finklestein'), (28205,18,0,'Raptor Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), (28205,19,0,'Amberseed!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,20,0,'Burning Ice!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,21,0,'Shrunken Dragon''s Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,22,0,'Chilled Serpent Mucus!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,23,0,'Crystallized Hogsnot!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,24,0,'Crushed Basilisk Crystals!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,25,0,'Trollbane!',42,0,100,0,0,0,'Alchemist Finklestein'), -(28205,26,0,'Frozen Spider Ichor!',42,0,100,0,0,0,'Alchemist Finklestein'); +(28205,20,0,'Shrunken Dragon''s Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,21,0,'Chilled Serpent Mucus!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,22,0,'Crystallized Hogsnot!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,23,0,'Crushed Basilisk Crystals!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,24,0,'Trollbane!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,25,0,'Frozen Spider Ichor!',42,0,100,0,0,0,'Alchemist Finklestein'); diff --git a/sql/updates/world/2013_06_17_02_world_misc.sql b/sql/updates/world/2013_06_17_02_world_misc.sql new file mode 100644 index 00000000000..b938ea45e95 --- /dev/null +++ b/sql/updates/world/2013_06_17_02_world_misc.sql @@ -0,0 +1,86 @@ +-- Add option conditions for Alchemist Finklestein +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (9668) AND `SourceEntry` IN (0) AND `ConditionValue1` IN (51216); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,9668,0,1,1,51216,0,0,1,0,'','Alchemist Finklestein - Show gossip option only if player does not have aura 51216'); + +UPDATE `creature_template` SET `AIName`= '',`ScriptName`= 'npc_alchemist_finklestein' WHERE `entry`=28205; +UPDATE `gameobject_template` SET `ScriptName`= 'go_finklesteins_cauldron' WHERE `entry`=190498; + +DELETE FROM `spell_script_names` WHERE `spell_id` IN (51134,51105,51107,51015,51154,51157,51046,51018,51055,51057, +51059,51062,51064,51067,51069,51072,51077,51079,51081,51083,51085,51087,51091,51093,51095,51097,51100,51102); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(51134,'spell_random_ingredient_easy'), +(51105,'spell_random_ingredient_medium'), +(51107,'spell_random_ingredient_hard'), +(51015,'spell_random_ingredient_aura'), +(51154,'spell_random_ingredient_aura'), +(51157,'spell_random_ingredient_aura'), +(51046,'spell_pot_check'), +(51018,'spell_fetch_ingredient_aura'), +(51055,'spell_fetch_ingredient_aura'), +(51057,'spell_fetch_ingredient_aura'), +(51059,'spell_fetch_ingredient_aura'), +(51062,'spell_fetch_ingredient_aura'), +(51064,'spell_fetch_ingredient_aura'), +(51067,'spell_fetch_ingredient_aura'), +(51069,'spell_fetch_ingredient_aura'), +(51072,'spell_fetch_ingredient_aura'), +(51077,'spell_fetch_ingredient_aura'), +(51079,'spell_fetch_ingredient_aura'), +(51081,'spell_fetch_ingredient_aura'), +(51083,'spell_fetch_ingredient_aura'), +(51085,'spell_fetch_ingredient_aura'), +(51087,'spell_fetch_ingredient_aura'), +(51091,'spell_fetch_ingredient_aura'), +(51093,'spell_fetch_ingredient_aura'), +(51095,'spell_fetch_ingredient_aura'), +(51097,'spell_fetch_ingredient_aura'), +(51100,'spell_fetch_ingredient_aura'), +(51102,'spell_fetch_ingredient_aura'); + +-- Add texts for Alchemist Finklestein +DELETE FROM `creature_text` WHERE `entry`=28205; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +-- Events 1,2,3 +(28205,0,0,'Quickly, get me some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,1,'I think it needs...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,2,'Find me some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,3,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,4,'We need some...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,0,5,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'), +-- Event 4 +(28205,1,0,'I think it''s time for...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,1,'Next, we''ll need...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,2,'Tastes like it needs more....',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,1,3,'Alright, now find me some...',42,0,100,0,0,0,'Alchemist Finklestein'), +-- Event 5 +(28205,2,0,'Coming along nicely, but still needs...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,2,1,'Before it thickens, we must add...',42,0,100,0,0,0,'Alchemist Finklestein'), +-- Event 6 +(28205,3,0,'Before it boils over, I need...',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,3,1,'It''s thickening! Quickly, get some...',42,0,100,0,0,0,'Alchemist Finklestein'), +-- Fail +(28205,4,0,'You''re too late. I must start again from the beginning....',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,4,1,'No! The serum is ruined!',42,0,100,0,0,0,'Alchemist Finklestein'), +-- Item request +(28205,5,0,'Knotroot!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,6,0,'Pickled Eagle Egg!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,7,0,'Speckled Guano!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,8,0,'Withered Batwing!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,9,0,'Seasoned Slider Cider!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,10,0,'Pulverized Gargoyle Teeth!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,11,0,'Muddy Mire Maggot!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,12,0,'Spiky Spider Egg!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,13,0,'Hairy Herring Head!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,14,0,'Putrid Pirate Perspiration!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,15,0,'Icecrown Bottled Water!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,16,0,'Wasp''s Wings!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,17,0,'Prismatic Mojo!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,18,0,'Raptor Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,19,0,'Amberseed!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,20,0,'Shrunken Dragon''s Claw!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,21,0,'Chilled Serpent Mucus!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,22,0,'Crystallized Hogsnot!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,23,0,'Crushed Basilisk Crystals!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,24,0,'Trollbane!',42,0,100,0,0,0,'Alchemist Finklestein'), +(28205,25,0,'Frozen Spider Ichor!',42,0,100,0,0,0,'Alchemist Finklestein'); diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index e8b4127f24c..4f7c865f3ac 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -21,12 +21,15 @@ #include "ScriptedEscortAI.h" #include "Player.h" #include "SpellInfo.h" +#include "SpellScript.h" +#include "SpellAuras.h" +#include "SpellAuraEffects.h" /*#### ## npc_drakuru_shackles ####*/ -enum eDrakuruShackles +enum DrakuruShackles { SPELL_LEFT_CHAIN = 59951, SPELL_RIGHT_CHAIN = 59952, @@ -34,7 +37,7 @@ enum eDrakuruShackles SPELL_FREE_RAGECLAW = 55223, NPC_RAGECLAW = 29686, - QUEST_TROLLS_IS_GONE_CRAZY = 12861, + QUEST_TROLLS_IS_GONE_CRAZY = 12861 }; class npc_drakuru_shackles : public CreatureScript @@ -115,7 +118,7 @@ public: ## npc_captured_rageclaw ####*/ -enum eRageclaw +enum Rageclaw { SPELL_UNSHACKLED = 55085, SPELL_KNEEL = 39656 @@ -1385,7 +1388,7 @@ public: ## go_scourge_enclosure ######*/ -enum eScourgeEnclosure +enum ScourgeEnclosure { QUEST_OUR_ONLY_HOPE = 12916, NPC_GYMER_DUMMY = 29928 //from quest template @@ -1413,6 +1416,686 @@ public: } }; +/*###### +## Quest: Troll Patrol: The Alchemist's Apprentice +######*/ + +enum Finklestein +{ + // Creatre + NPC_FINKLESTEIN = 28205, + // Quest + QUEST_THE_ALCHEMIST_APPRENTICE_DAILY = 12541, + // Spells + SPELL_ALCHEMIST_APPRENTICE_INVISBUFF = 51216, + SPELL_RANDOM_INGREDIENT_EASY_AURA = 51015, + SPELL_RANDOM_INGREDIENT_MEDIUM_AURA = 51154, + SPELL_RANDOM_INGREDIENT_HARD_AURA = 51157, + SPELL_RANDOM_INGREDIENT_EASY = 51134, + SPELL_RANDOM_INGREDIENT_MEDIUM = 51105, + SPELL_RANDOM_INGREDIENT_HARD = 51107, + SPELL_NEXT_INGREDIENT = 51049, + SPELL_POT_CHECK = 51046, + SPELL_THROW_INGREDIENT = 51025, + SPELL_KILL_CREDIT = 51111, + // Spell Fetch Easy + SPELL_FETCH_KNOTROOT = 51018, + SPELL_FETCH_PICKLED_EAGLE_EGG = 51055, + SPELL_FETCH_SPECKLED_GUANO = 51057, + SPELL_FETCH_WITHERED_BATWING = 51059, + SPELL_FETCH_SEASONED_SLIDER_CIDER = 51062, + SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH = 51064, + SPELL_FETCH_MUDDY_MIRE_MAGGOT = 51067, + SPELL_FETCH_SPIKY_SPIDER_EGG = 51069, + SPELL_FETCH_HAIRY_HERRING_HEAD = 51072, + SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION = 51077, + SPELL_FETCH_ICECROWN_BOTTLED_WATER = 51079, + // Spell Have Easy + SPELL_HAVE_KNOTROOT = 51047, + SPELL_HAVE_PICKLED_EAGLE_EGG = 51056, + SPELL_HAVE_SPECKLED_GUANO = 51058, + SPELL_HAVE_WITHERED_BATWING = 51060, + SPELL_HAVE_SEASONED_SLIDER_CIDER = 51063, + SPELL_HAVE_PULVERIZED_GARGOYLE_TEETH = 51065, + SPELL_HAVE_MUDDY_MIRE_MAGGOT = 51068, + SPELL_HAVE_SPIKY_SPIDER_EGG = 51070, + SPELL_HAVE_HAIRY_HERRING_HEAD = 51075, + SPELL_HAVE_PUTRID_PIRATE_PERSPIRATION = 51078, + SPELL_HAVE_ICECROWN_BOTTLED_WATER = 51080, + // Spell Fetch Medium + SPELL_FETCH_WASPS_WINGS = 51081, + SPELL_FETCH_PRISMATIC_MOJO = 51083, + SPELL_FETCH_RAPTOR_CLAW = 51085, + SPELL_FETCH_AMBERSEED = 51087, + SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW = 51091, + // Spell Have Medium + SPELL_HAVE_WASPS_WINGS = 51082, + SPELL_HAVE_PRISMATIC_MOJO = 51084, + SPELL_HAVE_RAPTOR_CLAW = 51086, + SPELL_HAVE_AMBERSEED = 51088, + SPELL_HAVE_SHRUNKEN_DRAGONS_CLAW = 51092, + // Spell Fetch Hard + SPELL_FETCH_CHILLED_SERPENT_MUCUS = 51093, + SPELL_FETCH_CRYSTALLIZED_HOGSNOT = 51095, + SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS = 51097, + SPELL_FETCH_TROLLBANE = 51100, + SPELL_FETCH_FROZEN_SPIDER_ICHOR = 51102, + // Spell Have Hard + SPELL_HAVE_CHILLED_SERPENT_MUCUS = 51094, + SPELL_HAVE_CRYSTALLIZED_HOGSNOT = 51096, + SPELL_HAVE_CRUSHED_BASILISK_CRYSTALS = 51098, + SPELL_HAVE_TROLLBANE = 51101, + SPELL_HAVE_FROZEN_SPIDER_ICHOR = 51104, + // Text + SAY_EASY_123 = 0, + SAY_MEDIUM_4 = 1, + SAY_MEDIUM_5 = 2, + SAY_HARD_6 = 3, + SAY_RUINED = 4, + // Text Easy + SAY_KNOTROOT = 5, + SAY_PICKLED_EAGLE_EGG = 6, + SAY_SPECKLED_GUANO = 7, + SAY_WITHERED_BATWING = 8, + SAY_SEASONED_SLIDER_CIDER = 9, + SAY_PULVERIZED_GARGOYLE_TEETH = 10, + SAY_MUDDY_MIRE_MAGGOT = 11, + SAY_SPIKY_SPIDER_EGG = 12, + SAY_HAIRY_HERRING_HEAD = 13, + SAY_PUTRID_PIRATE_PERSPIRATION = 14, + SAY_ICECROWN_BOTTLED_WATER = 15, + // Text Medium + SAY_WASPS_WINGS = 16, + SAY_PRISMATIC_MOJO = 17, + SAY_RAPTOR_CLAW = 18, + SAY_AMBERSEED = 19, + SAY_SHRUNKEN_DRAGONS_CLAW = 20, + // Text Hard + SAY_CHILLED_SERPENT_MUCUS = 21, + SAY_CRYSTALLIZED_HOGSNOT = 22, + SAY_CRUSHED_BASILISK_CRYSTALS = 23, + SAY_TROLLBANE = 24, + SAY_FROZEN_SPIDER_ICHOR = 25 +}; + +enum FinklesteinEvents +{ + EVENT_TURN_TO_POT = 1, + EVENT_TURN_BACK = 2, + EVENT_EASY_123 = 3, + EVENT_MEDIUM_4 = 4, + EVENT_MEDIUM_5 = 5, + EVENT_HARD_6 = 6 +}; + +class npc_alchemist_finklestein : public CreatureScript +{ +public: + npc_alchemist_finklestein() : CreatureScript("npc_alchemist_finklestein") { } + + struct npc_alchemist_finklesteinAI : public ScriptedAI + { + npc_alchemist_finklesteinAI(Creature* creature) : ScriptedAI(creature) { } + + void Reset() + { + _events.ScheduleEvent(EVENT_TURN_TO_POT, urand(15000, 26000)); + } + + void SetData(uint32 Type, uint32 Data) + { + if (Type == 1 && Data == 1) + switch (_getingredienttry) + { + case 2: + case 3: + _events.ScheduleEvent(EVENT_EASY_123, 100); + break; + case 4: + _events.ScheduleEvent(EVENT_MEDIUM_4, 100); + break; + case 5: + _events.ScheduleEvent(EVENT_MEDIUM_5, 100); + break; + case 6: + _events.ScheduleEvent(EVENT_HARD_6, 100); + break; + default: + break; + } + } + + void UpdateAI(uint32 diff) + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_TURN_TO_POT: + me->SetFacingTo(6.230825f); + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING_NO_SHEATHE); + _events.ScheduleEvent(EVENT_TURN_BACK, 11000); + break; + case EVENT_TURN_BACK: + me->SetFacingTo(4.886922f); + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); + _events.ScheduleEvent(EVENT_TURN_TO_POT, urand(25000, 41000)); + break; + case EVENT_EASY_123: + if (Player* player = Unit::GetPlayer(*me, _playerGUID)) + { + Talk(SAY_EASY_123, _playerGUID); + DoCast(player, SPELL_RANDOM_INGREDIENT_EASY_AURA); + ++_getingredienttry; + } + break; + case EVENT_MEDIUM_4: + if (Player* player = Unit::GetPlayer(*me, _playerGUID)) + { + Talk(SAY_MEDIUM_4, _playerGUID); + DoCast(player, SPELL_RANDOM_INGREDIENT_MEDIUM_AURA); + ++_getingredienttry; + } + break; + case EVENT_MEDIUM_5: + if (Player* player = Unit::GetPlayer(*me, _playerGUID)) + { + Talk(SAY_MEDIUM_5, _playerGUID); + DoCast(player, SPELL_RANDOM_INGREDIENT_MEDIUM_AURA); + ++_getingredienttry; + } + break; + case EVENT_HARD_6: + if (Player* player = Unit::GetPlayer(*me, _playerGUID)) + { + Talk(SAY_HARD_6, _playerGUID); + DoCast(player, SPELL_RANDOM_INGREDIENT_HARD_AURA); + ++_getingredienttry; + } + break; + default: + break; + } + } + } + + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) + { + player->CLOSE_GOSSIP_MENU(); + DoCast(player, SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); + _playerGUID = player->GetGUID(); + _getingredienttry = 1; + _events.ScheduleEvent(EVENT_EASY_123, 100); + } + + private: + EventMap _events; + uint64 _playerGUID; + uint8 _getingredienttry; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_alchemist_finklesteinAI(creature); + } +}; + +class go_finklesteins_cauldron : public GameObjectScript +{ +public: + go_finklesteins_cauldron() : GameObjectScript("go_finklesteins_cauldron") { } + + bool OnGossipHello(Player* player, GameObject* go) + { + player->CastSpell(player, SPELL_POT_CHECK); + return true; + } +}; + +/*##### +# spell_random_ingredient_aura +#####*/ + +class spell_random_ingredient_aura : public SpellScriptLoader +{ + public: spell_random_ingredient_aura() : SpellScriptLoader("spell_random_ingredient_aura") { } + + class spell_random_ingredient_aura_AuraScript : public AuraScript + { + PrepareAuraScript(spell_random_ingredient_aura_AuraScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_EASY) || !sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_MEDIUM) || !sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_HARD)) + return false; + return true; + } + + void PeriodicTick(AuraEffect const* aurEff) + { + switch (GetSpellInfo()->Id) + { + case SPELL_RANDOM_INGREDIENT_EASY_AURA: + GetTarget()->CastSpell(GetTarget(), SPELL_RANDOM_INGREDIENT_EASY); + break; + case SPELL_RANDOM_INGREDIENT_MEDIUM_AURA: + GetTarget()->CastSpell(GetTarget(), SPELL_RANDOM_INGREDIENT_MEDIUM); + break; + case SPELL_RANDOM_INGREDIENT_HARD_AURA: + GetTarget()->CastSpell(GetTarget(), SPELL_RANDOM_INGREDIENT_HARD); + break; + } + } + + void Register() + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_random_ingredient_aura_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_random_ingredient_aura_AuraScript(); + } +}; + +/*##### +# spell_random_ingredient_easy +#####*/ + +class spell_random_ingredient_easy : public SpellScriptLoader +{ + public: spell_random_ingredient_easy() : SpellScriptLoader("spell_random_ingredient_easy") { } + + class spell_random_ingredient_easy_SpellScript : public SpellScript + { + PrepareSpellScript(spell_random_ingredient_easy_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_MUDDY_MIRE_MAGGOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPIKY_SPIDER_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_HAIRY_HERRING_HEAD) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_ICECROWN_BOTTLED_WATER)) + return false; + return true; + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Player* player = GetHitPlayer()) + { + uint8 spelltocast = urand(1, 11); + + Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); + + if (!finklestein) + return; + + switch (spelltocast) + { + case 1: + finklestein->CastSpell(player, SPELL_FETCH_KNOTROOT, true, NULL); + finklestein->AI()->Talk(SAY_KNOTROOT, player->GetGUID()); + break; + case 2: + finklestein->CastSpell(player, SPELL_FETCH_PICKLED_EAGLE_EGG, true, NULL); + finklestein->AI()->Talk(SAY_PICKLED_EAGLE_EGG, player->GetGUID()); + break; + case 3: + finklestein->CastSpell(player, SPELL_FETCH_SPECKLED_GUANO, true, NULL); + finklestein->AI()->Talk(SAY_SPECKLED_GUANO, player->GetGUID()); + break; + case 4: + finklestein->CastSpell(player, SPELL_FETCH_WITHERED_BATWING, true, NULL); + finklestein->AI()->Talk(SAY_WITHERED_BATWING, player->GetGUID()); + break; + case 5: + finklestein->CastSpell(player, SPELL_FETCH_SEASONED_SLIDER_CIDER, true, NULL); + finklestein->AI()->Talk(SAY_SEASONED_SLIDER_CIDER, player->GetGUID()); + break; + case 6: + finklestein->CastSpell(player, SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH, true, NULL); + finklestein->AI()->Talk(SAY_PULVERIZED_GARGOYLE_TEETH, player->GetGUID()); + break; + case 7: + finklestein->CastSpell(player, SPELL_FETCH_MUDDY_MIRE_MAGGOT, true, NULL); + finklestein->AI()->Talk(SAY_MUDDY_MIRE_MAGGOT, player->GetGUID()); + break; + case 8: + finklestein->CastSpell(player, SPELL_FETCH_SPIKY_SPIDER_EGG, true, NULL); + finklestein->AI()->Talk(SAY_SPIKY_SPIDER_EGG, player->GetGUID()); + break; + case 9: + finklestein->CastSpell(player, SPELL_FETCH_HAIRY_HERRING_HEAD, true, NULL); + finklestein->AI()->Talk(SAY_HAIRY_HERRING_HEAD, player->GetGUID()); + break; + case 10: + finklestein->CastSpell(player, SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION, true, NULL); + finklestein->AI()->Talk(SAY_PUTRID_PIRATE_PERSPIRATION, player->GetGUID()); + break; + case 11: + finklestein->CastSpell(player, SPELL_FETCH_ICECROWN_BOTTLED_WATER, true, NULL); + finklestein->AI()->Talk(SAY_ICECROWN_BOTTLED_WATER, player->GetGUID()); + break; + default: + break; + } + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_easy_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_random_ingredient_easy_SpellScript(); + } +}; + +/*##### +# spell_random_ingredient_medium +#####*/ + +class spell_random_ingredient_medium : public SpellScriptLoader +{ + public: spell_random_ingredient_medium() : SpellScriptLoader("spell_random_ingredient_medium") { } + + class spell_random_ingredient_medium_SpellScript : public SpellScript + { + PrepareSpellScript(spell_random_ingredient_medium_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_WASPS_WINGS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_RAPTOR_CLAW) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_AMBERSEED) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW)) + return false; + return true; + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Player* player = GetHitPlayer()) + { + uint8 spelltocast = urand(1, 5); + + Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); + + if (!finklestein) + return; + + switch (spelltocast) + { + case 1: + finklestein->CastSpell(player, SPELL_FETCH_WASPS_WINGS, true, NULL); + finklestein->AI()->Talk(SAY_WASPS_WINGS, player->GetGUID()); + break; + case 2: + finklestein->CastSpell(player, SPELL_FETCH_PRISMATIC_MOJO, true, NULL); + finklestein->AI()->Talk(SAY_PRISMATIC_MOJO, player->GetGUID()); + break; + case 3: + finklestein->CastSpell(player, SPELL_FETCH_RAPTOR_CLAW, true, NULL); + finklestein->AI()->Talk(SAY_RAPTOR_CLAW, player->GetGUID()); + break; + case 4: + finklestein->CastSpell(player, SPELL_FETCH_AMBERSEED, true, NULL); + finklestein->AI()->Talk(SAY_AMBERSEED, player->GetGUID()); + break; + case 5: + finklestein->CastSpell(player, SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW, true, NULL); + finklestein->AI()->Talk(SAY_SHRUNKEN_DRAGONS_CLAW, player->GetGUID()); + break; + default: + break; + } + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_medium_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_random_ingredient_medium_SpellScript(); + } +}; + +/*##### +# spell_random_ingredient_hard +#####*/ + +class spell_random_ingredient_hard : public SpellScriptLoader +{ + public: spell_random_ingredient_hard() : SpellScriptLoader("spell_random_ingredient_hard") { } + + class spell_random_ingredient_hard_SpellScript : public SpellScript + { + PrepareSpellScript(spell_random_ingredient_hard_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRYSTALLIZED_HOGSNOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_FROZEN_SPIDER_ICHOR)) + return false; + return true; + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Player* player = GetHitPlayer()) + { + uint8 spelltocast = urand(1, 5); + + Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); + + if (!finklestein) + return; + + switch (spelltocast) + { + case 1: + finklestein->CastSpell(player, SPELL_FETCH_CHILLED_SERPENT_MUCUS, true, NULL); + finklestein->AI()->Talk(SAY_CHILLED_SERPENT_MUCUS, player->GetGUID()); + break; + case 2: + finklestein->CastSpell(player, SPELL_FETCH_CRYSTALLIZED_HOGSNOT, true, NULL); + finklestein->AI()->Talk(SAY_CRYSTALLIZED_HOGSNOT, player->GetGUID()); + break; + case 3: + finklestein->CastSpell(player, SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS, true, NULL); + finklestein->AI()->Talk(SAY_CRUSHED_BASILISK_CRYSTALS, player->GetGUID()); + break; + case 4: + finklestein->CastSpell(player, SPELL_FETCH_TROLLBANE, true, NULL); + finklestein->AI()->Talk(SAY_TROLLBANE, player->GetGUID()); + break; + case 5: + finklestein->CastSpell(player, SPELL_FETCH_FROZEN_SPIDER_ICHOR, true, NULL); + finklestein->AI()->Talk(SAY_FROZEN_SPIDER_ICHOR, player->GetGUID()); + break; + default: + break; + } + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_hard_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_random_ingredient_hard_SpellScript(); + } +}; + +/*##### +# spell_pot_check +#####*/ + +uint32 const FetchSpells[21] [4] = +{ + // { Fetch spell, Have spell, Item, Text } + { 51018, 51047, 38338, 6 }, // Knotroot + { 51055, 51056, 38341, 7 }, // Pickled Eagle Egg + { 51057, 51058, 38337, 8 }, // Speckled Guano + { 51059, 51060, 38339, 9 }, // Withered Batwing + { 51062, 51063, 38381, 10 }, // Seasoned Slider Cider + { 51064, 51065, 38384, 11 }, // Pulverized Gargoyle Teeth + { 51067, 51068, 38386, 12 }, // Muddy Mire Maggot + { 51069, 51070, 38393, 13 }, // Spiky Spider Egg + { 51072, 51075, 38396, 14 }, // Hairy Herring Head + { 51077, 51078, 38397, 15 }, // Putrid Pirate Perspiration + { 51079, 51080, 38398, 16 }, // Icecrown Bottled Water + { 51081, 51082, 38369, 17 }, // Wasp's Wings + { 51083, 51084, 38343, 18 }, // Prismatic Mojo + { 51085, 51086, 38370, 19 }, // Raptor Claw + { 51087, 51088, 38340, 20 }, // Amberseed + { 51091, 51092, 38344, 21 }, // Shrunken Dragon's Claw + { 51093, 51094, 38346, 22 }, // Chilled Serpent Mucus + { 51095, 51096, 38336, 23 }, // Crystallized Hogsnot + { 51097, 51098, 38379, 24 }, // Crushed Basilisk Crystals + { 51100, 51101, 38342, 25 }, // Trollbane + { 51102, 51104, 38345, 26 } // Frozen Spider Ichor +}; + +class spell_pot_check : public SpellScriptLoader +{ + public: spell_pot_check() : SpellScriptLoader("spell_pot_check") { } + + class spell_pot_check_SpellScript : public SpellScript + { + PrepareSpellScript(spell_pot_check_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_MUDDY_MIRE_MAGGOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPIKY_SPIDER_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_HAIRY_HERRING_HEAD) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_ICECROWN_BOTTLED_WATER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_WASPS_WINGS) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_RAPTOR_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_AMBERSEED) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRYSTALLIZED_HOGSNOT) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_FROZEN_SPIDER_ICHOR) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_SPECKLED_GUANO) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_PULVERIZED_GARGOYLE_TEETH) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_MUDDY_MIRE_MAGGOT) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_SPIKY_SPIDER_EGG) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_HAIRY_HERRING_HEAD) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_ICECROWN_BOTTLED_WATER) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_WASPS_WINGS) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_RAPTOR_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_AMBERSEED) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_SHRUNKEN_DRAGONS_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_CRYSTALLIZED_HOGSNOT) || + !sSpellMgr->GetSpellInfo(SPELL_HAVE_CRUSHED_BASILISK_CRYSTALS) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_FROZEN_SPIDER_ICHOR)) + return false; + return true; + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Player* player = GetHitPlayer()) + { + for (uint8 i = 0; i < 21; ++i) + { + if(player->HasAura(FetchSpells[i] [0])) + { + player->CastSpell(player, SPELL_THROW_INGREDIENT); + player->RemoveAura(FetchSpells[i] [0]); + if(player->HasAura(FetchSpells[i] [1])) + { + player->RemoveAura(FetchSpells[i] [1]); + player->DestroyItemCount(FetchSpells[i] [2], 1, true); + if (i < 15) + { + if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f)) + finklestein->AI()->SetData(1, 1); + return; + } + else + { + if (player->GetQuestStatus(QUEST_THE_ALCHEMIST_APPRENTICE_DAILY) == QUEST_STATUS_INCOMPLETE) + { + player->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); + player->CastSpell(player, SPELL_KILL_CREDIT); + } + } + } + else + { + RemoveItems(player); + player->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); + if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f)) + finklestein->AI()->Talk(SAY_RUINED, player->GetGUID()); + return; + } + } + } + } + } + + void RemoveItems(Player* player) + { + for (uint8 i = 0; i < 21; ++i) + if (player->HasItemCount(FetchSpells[i] [2], 1, true)) + player->DestroyItemCount(FetchSpells[i] [2], 1, true); + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_pot_check_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_pot_check_SpellScript(); + } +}; + +/*##### +# spell_fetch_ingredient_aura +#####*/ + +class spell_fetch_ingredient_aura : public SpellScriptLoader +{ + public: spell_fetch_ingredient_aura() : SpellScriptLoader("spell_fetch_ingredient_aura") { } + + class spell_fetch_ingredient_aura_AuraScript : public AuraScript + { + PrepareAuraScript(spell_fetch_ingredient_aura_AuraScript); + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE) + if (Unit* target = GetTarget()) + if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE) + if (target->HasAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF)) + if (Creature* finklestein = GetClosestCreatureWithEntry(target, NPC_FINKLESTEIN, 100.0f)) + { + target->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); + finklestein->AI()->Talk(SAY_RUINED, target->GetGUID()); + } + } + + void Register() + { + OnEffectRemove += AuraEffectRemoveFn(spell_fetch_ingredient_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_fetch_ingredient_aura_AuraScript(); + } +}; + void AddSC_zuldrak() { new npc_drakuru_shackles; @@ -1428,4 +2111,12 @@ void AddSC_zuldrak() new npc_elemental_lord; new npc_fiend_elemental; new go_scourge_enclosure; + new npc_alchemist_finklestein; + new go_finklesteins_cauldron; + new spell_random_ingredient_aura; + new spell_random_ingredient_easy; + new spell_random_ingredient_medium; + new spell_random_ingredient_hard; + new spell_pot_check; + new spell_fetch_ingredient_aura; } -- cgit v1.2.3 From 7f54297271a8bcd9b26d22cf8dd3dab817b4e779 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 18 Jun 2013 04:19:34 +0300 Subject: DB/Misc: Cleaning db of unused/obsolete stuff --- sql/updates/world/2013_06_18_00_world_misc.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2013_06_18_00_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_18_00_world_misc.sql b/sql/updates/world/2013_06_18_00_world_misc.sql new file mode 100644 index 00000000000..9403c8ee0f4 --- /dev/null +++ b/sql/updates/world/2013_06_18_00_world_misc.sql @@ -0,0 +1,6 @@ +-- Cleaning the database of unused/obsolete data +DELETE FROM `game_event_creature` WHERE `guid` NOT IN (SELECT `guid` FROM `creature`); +DELETE FROM `game_event_gameobject` WHERE `guid` NOT IN (SELECT `guid` FROM `gameobject`); +DELETE FROM `pool_pool` WHERE `mother_pool` NOT IN (SELECT `entry` FROM `pool_template`); +DELETE FROM `game_event_creature` WHERE `guid` IN (40267,40470,40471); +DELETE FROM `creature` WHERE `id` = 18963; -- Removed from game arround wow 2.2.x -- cgit v1.2.3 From 07b2c89d7527b12125b20f9cecd26d6b3a4c6227 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 18 Jun 2013 05:22:49 +0300 Subject: DB/Misc: Cleaning db of unused/obsolete stuff --- sql/updates/world/2013_06_18_01_world_misc.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2013_06_18_01_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_18_01_world_misc.sql b/sql/updates/world/2013_06_18_01_world_misc.sql new file mode 100644 index 00000000000..2046eb81609 --- /dev/null +++ b/sql/updates/world/2013_06_18_01_world_misc.sql @@ -0,0 +1,4 @@ +-- Cleaning the database of unused/obsolete data +DELETE FROM `creature` WHERE `map` IN (449,450); +DELETE FROM `creature_loot_template` WHERE `entry` IN (16156,16157,16158,16368,16446,16448,16449,16451,16452); +UPDATE `creature_template` SET `lootid`=0 WHERE `entry` IN (16156,16157,16158,16368,16446,16448,16449,16451,16452); -- cgit v1.2.3 From 6f9d3b54e3a4a2cdbd5655ba1c443d5a576a3170 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Tue, 18 Jun 2013 00:01:03 -0230 Subject: DB?Creature: Part fix for NPC Hut Fire for Quest: This Just In: Fire Still Hot! --- sql/updates/world/2013_06_18_02_world_creature.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2013_06_18_02_world_creature.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_18_02_world_creature.sql b/sql/updates/world/2013_06_18_02_world_creature.sql new file mode 100644 index 00000000000..26067837dfe --- /dev/null +++ b/sql/updates/world/2013_06_18_02_world_creature.sql @@ -0,0 +1,3 @@ +-- Part fix for NPC Hut Fire for Quest: This Just In: Fire Still Hot! +UPDATE `creature` SET `modelid`=0,`spawndist`=0,`MovementType`=0 WHERE `id`=29692; +UPDATE `creature_template` SET `InhabitType`=4, `flags_extra`=128 WHERE `entry`=29692; -- cgit v1.2.3 From 8e4508128921ed79b287bf6646edb245829c77fc Mon Sep 17 00:00:00 2001 From: Malcrom Date: Tue, 18 Jun 2013 00:15:33 -0230 Subject: DB/SAI: Hut Fire SAI Quest: This Just In: Fire Still Hot! "Now looks more like Offi" --- sql/updates/world/2013_06_18_03_world_sai.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/updates/world/2013_06_18_03_world_sai.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_18_03_world_sai.sql b/sql/updates/world/2013_06_18_03_world_sai.sql new file mode 100644 index 00000000000..914299ba57f --- /dev/null +++ b/sql/updates/world/2013_06_18_03_world_sai.sql @@ -0,0 +1,7 @@ +-- Hut Fire SAI Quest: This Just In: Fire Still Hot! "Now looks more like Offi" +SET @ENTRY := 29692; +UPDATE `creature_template` SET `AIName`= 'SmartAI',`ScriptName`= '' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY; +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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,1000,1000,59000,59000,11,55049,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Hut Fire - OOC - Cast Torch on Self'), +(@ENTRY,0,1,0,8,0,100,0,55037,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Hut Fire - On Spell Hit - Despawn'); -- cgit v1.2.3 From 779f3c2f08a2bb46a86659ead6502672590386ed Mon Sep 17 00:00:00 2001 From: Malcrom Date: Tue, 18 Jun 2013 11:47:24 -0230 Subject: Core/Scripting: Updated Quest: Troll Patrol: The Alchemist's Apprentice scripting --- .../2013_06_18_04_world_spell_script_names.sql | 5 + src/server/scripts/Northrend/zone_zuldrak.cpp | 313 ++++++--------------- 2 files changed, 84 insertions(+), 234 deletions(-) create mode 100644 sql/updates/world/2013_06_18_04_world_spell_script_names.sql (limited to 'sql') diff --git a/sql/updates/world/2013_06_18_04_world_spell_script_names.sql b/sql/updates/world/2013_06_18_04_world_spell_script_names.sql new file mode 100644 index 00000000000..8c749c485cf --- /dev/null +++ b/sql/updates/world/2013_06_18_04_world_spell_script_names.sql @@ -0,0 +1,5 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN (51134,51105,51107); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(51134,'spell_random_ingredient'), +(51105,'spell_random_ingredient'), +(51107,'spell_random_ingredient'); diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 842805416ee..f506570888b 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -1422,8 +1422,30 @@ public: enum Finklestein { - // Creatre + // Creature NPC_FINKLESTEIN = 28205, + // Item + ITEM_KNOTROOT = 38338, + ITEM_PICKLED_EAGLE_EGG = 38341, + ITEM_SPECKLED_GUANO = 38337, + ITEM_WITHERED_BATWING = 38339, + ITEM_SEASONED_SLIDER_CIDER = 38381, + ITEM_PULVERIZED_GARGOYLE_TEETH = 38384, + ITEM_MUDDY_MIRE_MAGGOT = 38386, + ITEM_SPIKY_SPIDER_EGG = 38393, + ITEM_HAIRY_HERRING_HEAD = 38396, + ITEM_PUTRID_PIRATE_PERSPIRATION = 38397, + ITEM_ICECROWN_BOTTLED_WATER = 38398, + ITEM_WASPS_WINGS = 38369, + ITEM_PRISMATIC_MOJO = 38343, + ITEM_RAPTOR_CLAW = 38370, + ITEM_AMBERSEED = 38340, + ITEM_SHRUNKEN_DRAGONS_CLAW = 38344, + ITEM_CHILLED_SERPENT_MUCUS = 38346, + ITEM_CRYSTALLIZED_HOGSNOT = 38336, + ITEM_CRUSHED_BASILISK_CRYSTALS = 38379, + ITEM_TROLLBANE = 38342, + ITEM_FROZEN_SPIDER_ICHOR = 38345, // Quest QUEST_THE_ALCHEMIST_APPRENTICE_DAILY = 12541, // Spells @@ -1654,6 +1676,31 @@ public: } }; +uint32 const FetchIngredients[21] [4] = +{ + { SPELL_FETCH_KNOTROOT, SPELL_HAVE_KNOTROOT, ITEM_KNOTROOT, SAY_KNOTROOT }, + { SPELL_FETCH_PICKLED_EAGLE_EGG, SPELL_HAVE_PICKLED_EAGLE_EGG, ITEM_PICKLED_EAGLE_EGG, SAY_PICKLED_EAGLE_EGG }, + { SPELL_FETCH_SPECKLED_GUANO, SPELL_HAVE_SPECKLED_GUANO, ITEM_SPECKLED_GUANO, SAY_SPECKLED_GUANO }, + { SPELL_FETCH_WITHERED_BATWING, SPELL_HAVE_WITHERED_BATWING, ITEM_WITHERED_BATWING, SAY_WITHERED_BATWING }, + { SPELL_FETCH_SEASONED_SLIDER_CIDER, SPELL_HAVE_SEASONED_SLIDER_CIDER, ITEM_SEASONED_SLIDER_CIDER, SAY_SEASONED_SLIDER_CIDER }, + { SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH, SPELL_HAVE_PULVERIZED_GARGOYLE_TEETH, ITEM_PULVERIZED_GARGOYLE_TEETH, SAY_PULVERIZED_GARGOYLE_TEETH }, + { SPELL_FETCH_MUDDY_MIRE_MAGGOT, SPELL_HAVE_MUDDY_MIRE_MAGGOT, ITEM_MUDDY_MIRE_MAGGOT, SAY_MUDDY_MIRE_MAGGOT }, + { SPELL_FETCH_SPIKY_SPIDER_EGG, SPELL_HAVE_SPIKY_SPIDER_EGG, ITEM_SPIKY_SPIDER_EGG, SAY_SPIKY_SPIDER_EGG }, + { SPELL_FETCH_HAIRY_HERRING_HEAD, SPELL_HAVE_HAIRY_HERRING_HEAD, ITEM_HAIRY_HERRING_HEAD, SAY_HAIRY_HERRING_HEAD }, + { SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION, SPELL_HAVE_PUTRID_PIRATE_PERSPIRATION, ITEM_PUTRID_PIRATE_PERSPIRATION, SAY_PUTRID_PIRATE_PERSPIRATION }, + { SPELL_FETCH_ICECROWN_BOTTLED_WATER, SPELL_HAVE_ICECROWN_BOTTLED_WATER, ITEM_ICECROWN_BOTTLED_WATER, SAY_ICECROWN_BOTTLED_WATER }, + { SPELL_FETCH_WASPS_WINGS, SPELL_HAVE_WASPS_WINGS, ITEM_WASPS_WINGS, SAY_WASPS_WINGS }, + { SPELL_FETCH_PRISMATIC_MOJO, SPELL_HAVE_PRISMATIC_MOJO, ITEM_PRISMATIC_MOJO, SAY_PRISMATIC_MOJO }, + { SPELL_FETCH_RAPTOR_CLAW, SPELL_HAVE_RAPTOR_CLAW, ITEM_RAPTOR_CLAW, SAY_RAPTOR_CLAW }, + { SPELL_FETCH_AMBERSEED, SPELL_HAVE_AMBERSEED, ITEM_AMBERSEED, SAY_AMBERSEED }, + { SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW, SPELL_HAVE_SHRUNKEN_DRAGONS_CLAW, ITEM_SHRUNKEN_DRAGONS_CLAW, SAY_SHRUNKEN_DRAGONS_CLAW }, + { SPELL_FETCH_CHILLED_SERPENT_MUCUS, SPELL_HAVE_CHILLED_SERPENT_MUCUS, ITEM_CHILLED_SERPENT_MUCUS, SAY_CHILLED_SERPENT_MUCUS }, + { SPELL_FETCH_CRYSTALLIZED_HOGSNOT, SPELL_HAVE_CRYSTALLIZED_HOGSNOT, ITEM_CRYSTALLIZED_HOGSNOT, SAY_CRYSTALLIZED_HOGSNOT }, + { SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS, SPELL_HAVE_CRUSHED_BASILISK_CRYSTALS, ITEM_CRUSHED_BASILISK_CRYSTALS, SAY_CRUSHED_BASILISK_CRYSTALS }, + { SPELL_FETCH_TROLLBANE, SPELL_HAVE_TROLLBANE, ITEM_TROLLBANE, SAY_TROLLBANE }, + { SPELL_FETCH_FROZEN_SPIDER_ICHOR, SPELL_HAVE_FROZEN_SPIDER_ICHOR, ITEM_FROZEN_SPIDER_ICHOR, SAY_FROZEN_SPIDER_ICHOR } +}; + /*##### # spell_random_ingredient_aura #####*/ @@ -1702,118 +1749,26 @@ class spell_random_ingredient_aura : public SpellScriptLoader }; /*##### -# spell_random_ingredient_easy +# spell_random_ingredient #####*/ -class spell_random_ingredient_easy : public SpellScriptLoader +class spell_random_ingredient : public SpellScriptLoader { - public: spell_random_ingredient_easy() : SpellScriptLoader("spell_random_ingredient_easy") { } + public: spell_random_ingredient() : SpellScriptLoader("spell_random_ingredient") { } - class spell_random_ingredient_easy_SpellScript : public SpellScript + class spell_random_ingredient_SpellScript : public SpellScript { - PrepareSpellScript(spell_random_ingredient_easy_SpellScript); + PrepareSpellScript(spell_random_ingredient_SpellScript); bool Validate(SpellInfo const* /*spellEntry*/) { if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_MUDDY_MIRE_MAGGOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPIKY_SPIDER_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_HAIRY_HERRING_HEAD) || - !sSpellMgr->GetSpellInfo(SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_ICECROWN_BOTTLED_WATER)) - return false; - return true; - } - - void HandleScriptEffect(SpellEffIndex /* effIndex */) - { - if (Player* player = GetHitPlayer()) - { - uint8 spelltocast = urand(1, 11); - - Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); - - if (!finklestein) - return; - - switch (spelltocast) - { - case 1: - finklestein->CastSpell(player, SPELL_FETCH_KNOTROOT, true, NULL); - finklestein->AI()->Talk(SAY_KNOTROOT, player->GetGUID()); - break; - case 2: - finklestein->CastSpell(player, SPELL_FETCH_PICKLED_EAGLE_EGG, true, NULL); - finklestein->AI()->Talk(SAY_PICKLED_EAGLE_EGG, player->GetGUID()); - break; - case 3: - finklestein->CastSpell(player, SPELL_FETCH_SPECKLED_GUANO, true, NULL); - finklestein->AI()->Talk(SAY_SPECKLED_GUANO, player->GetGUID()); - break; - case 4: - finklestein->CastSpell(player, SPELL_FETCH_WITHERED_BATWING, true, NULL); - finklestein->AI()->Talk(SAY_WITHERED_BATWING, player->GetGUID()); - break; - case 5: - finklestein->CastSpell(player, SPELL_FETCH_SEASONED_SLIDER_CIDER, true, NULL); - finklestein->AI()->Talk(SAY_SEASONED_SLIDER_CIDER, player->GetGUID()); - break; - case 6: - finklestein->CastSpell(player, SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH, true, NULL); - finklestein->AI()->Talk(SAY_PULVERIZED_GARGOYLE_TEETH, player->GetGUID()); - break; - case 7: - finklestein->CastSpell(player, SPELL_FETCH_MUDDY_MIRE_MAGGOT, true, NULL); - finklestein->AI()->Talk(SAY_MUDDY_MIRE_MAGGOT, player->GetGUID()); - break; - case 8: - finklestein->CastSpell(player, SPELL_FETCH_SPIKY_SPIDER_EGG, true, NULL); - finklestein->AI()->Talk(SAY_SPIKY_SPIDER_EGG, player->GetGUID()); - break; - case 9: - finklestein->CastSpell(player, SPELL_FETCH_HAIRY_HERRING_HEAD, true, NULL); - finklestein->AI()->Talk(SAY_HAIRY_HERRING_HEAD, player->GetGUID()); - break; - case 10: - finklestein->CastSpell(player, SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION, true, NULL); - finklestein->AI()->Talk(SAY_PUTRID_PIRATE_PERSPIRATION, player->GetGUID()); - break; - case 11: - finklestein->CastSpell(player, SPELL_FETCH_ICECROWN_BOTTLED_WATER, true, NULL); - finklestein->AI()->Talk(SAY_ICECROWN_BOTTLED_WATER, player->GetGUID()); - break; - default: - break; - } - } - } - - void Register() - { - OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_easy_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const - { - return new spell_random_ingredient_easy_SpellScript(); - } -}; - -/*##### -# spell_random_ingredient_medium -#####*/ - -class spell_random_ingredient_medium : public SpellScriptLoader -{ - public: spell_random_ingredient_medium() : SpellScriptLoader("spell_random_ingredient_medium") { } - - class spell_random_ingredient_medium_SpellScript : public SpellScript - { - PrepareSpellScript(spell_random_ingredient_medium_SpellScript); - - bool Validate(SpellInfo const* /*spellEntry*/) - { - if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_WASPS_WINGS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_RAPTOR_CLAW) || - !sSpellMgr->GetSpellInfo(SPELL_FETCH_AMBERSEED) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW)) + !sSpellMgr->GetSpellInfo(SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_ICECROWN_BOTTLED_WATER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_WASPS_WINGS) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_RAPTOR_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_AMBERSEED) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRYSTALLIZED_HOGSNOT) || + !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_FROZEN_SPIDER_ICHOR)) return false; return true; } @@ -1822,121 +1777,39 @@ class spell_random_ingredient_medium : public SpellScriptLoader { if (Player* player = GetHitPlayer()) { - uint8 spelltocast = urand(1, 5); - - Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); - if (!finklestein) - return; + uint8 ingredient = 0; - switch (spelltocast) + switch (GetSpellInfo()->Id) { - case 1: - finklestein->CastSpell(player, SPELL_FETCH_WASPS_WINGS, true, NULL); - finklestein->AI()->Talk(SAY_WASPS_WINGS, player->GetGUID()); - break; - case 2: - finklestein->CastSpell(player, SPELL_FETCH_PRISMATIC_MOJO, true, NULL); - finklestein->AI()->Talk(SAY_PRISMATIC_MOJO, player->GetGUID()); - break; - case 3: - finklestein->CastSpell(player, SPELL_FETCH_RAPTOR_CLAW, true, NULL); - finklestein->AI()->Talk(SAY_RAPTOR_CLAW, player->GetGUID()); - break; - case 4: - finklestein->CastSpell(player, SPELL_FETCH_AMBERSEED, true, NULL); - finklestein->AI()->Talk(SAY_AMBERSEED, player->GetGUID()); + case SPELL_RANDOM_INGREDIENT_EASY: + ingredient = urand(0, 10); break; - case 5: - finklestein->CastSpell(player, SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW, true, NULL); - finklestein->AI()->Talk(SAY_SHRUNKEN_DRAGONS_CLAW, player->GetGUID()); + case SPELL_RANDOM_INGREDIENT_MEDIUM: + ingredient = urand(11, 15); break; - default: + case SPELL_RANDOM_INGREDIENT_HARD: + ingredient = urand(16, 20); break; } - } - } - - void Register() - { - OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_medium_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const - { - return new spell_random_ingredient_medium_SpellScript(); - } -}; - -/*##### -# spell_random_ingredient_hard -#####*/ - -class spell_random_ingredient_hard : public SpellScriptLoader -{ - public: spell_random_ingredient_hard() : SpellScriptLoader("spell_random_ingredient_hard") { } - - class spell_random_ingredient_hard_SpellScript : public SpellScript - { - PrepareSpellScript(spell_random_ingredient_hard_SpellScript); - - bool Validate(SpellInfo const* /*spellEntry*/) - { - if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRYSTALLIZED_HOGSNOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS) || - !sSpellMgr->GetSpellInfo(SPELL_FETCH_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_FROZEN_SPIDER_ICHOR)) - return false; - return true; - } - - void HandleScriptEffect(SpellEffIndex /* effIndex */) - { - if (Player* player = GetHitPlayer()) - { - uint8 spelltocast = urand(1, 5); - Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f); - - if (!finklestein) - return; - - switch (spelltocast) + if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f)) { - case 1: - finklestein->CastSpell(player, SPELL_FETCH_CHILLED_SERPENT_MUCUS, true, NULL); - finklestein->AI()->Talk(SAY_CHILLED_SERPENT_MUCUS, player->GetGUID()); - break; - case 2: - finklestein->CastSpell(player, SPELL_FETCH_CRYSTALLIZED_HOGSNOT, true, NULL); - finklestein->AI()->Talk(SAY_CRYSTALLIZED_HOGSNOT, player->GetGUID()); - break; - case 3: - finklestein->CastSpell(player, SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS, true, NULL); - finklestein->AI()->Talk(SAY_CRUSHED_BASILISK_CRYSTALS, player->GetGUID()); - break; - case 4: - finklestein->CastSpell(player, SPELL_FETCH_TROLLBANE, true, NULL); - finklestein->AI()->Talk(SAY_TROLLBANE, player->GetGUID()); - break; - case 5: - finklestein->CastSpell(player, SPELL_FETCH_FROZEN_SPIDER_ICHOR, true, NULL); - finklestein->AI()->Talk(SAY_FROZEN_SPIDER_ICHOR, player->GetGUID()); - break; - default: - break; + finklestein->CastSpell(player, FetchIngredients[ingredient] [0], true, NULL); + finklestein->AI()->Talk(FetchIngredients[ingredient] [3], player->GetGUID()); } } } void Register() { - OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_hard_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } - }; + }; SpellScript* GetSpellScript() const { - return new spell_random_ingredient_hard_SpellScript(); + return new spell_random_ingredient_SpellScript(); } }; @@ -1944,32 +1817,6 @@ class spell_random_ingredient_hard : public SpellScriptLoader # spell_pot_check #####*/ -uint32 const FetchSpells[21] [4] = -{ - // { Fetch spell, Have spell, Item, Text } - { 51018, 51047, 38338, 6 }, // Knotroot - { 51055, 51056, 38341, 7 }, // Pickled Eagle Egg - { 51057, 51058, 38337, 8 }, // Speckled Guano - { 51059, 51060, 38339, 9 }, // Withered Batwing - { 51062, 51063, 38381, 10 }, // Seasoned Slider Cider - { 51064, 51065, 38384, 11 }, // Pulverized Gargoyle Teeth - { 51067, 51068, 38386, 12 }, // Muddy Mire Maggot - { 51069, 51070, 38393, 13 }, // Spiky Spider Egg - { 51072, 51075, 38396, 14 }, // Hairy Herring Head - { 51077, 51078, 38397, 15 }, // Putrid Pirate Perspiration - { 51079, 51080, 38398, 16 }, // Icecrown Bottled Water - { 51081, 51082, 38369, 17 }, // Wasp's Wings - { 51083, 51084, 38343, 18 }, // Prismatic Mojo - { 51085, 51086, 38370, 19 }, // Raptor Claw - { 51087, 51088, 38340, 20 }, // Amberseed - { 51091, 51092, 38344, 21 }, // Shrunken Dragon's Claw - { 51093, 51094, 38346, 22 }, // Chilled Serpent Mucus - { 51095, 51096, 38336, 23 }, // Crystallized Hogsnot - { 51097, 51098, 38379, 24 }, // Crushed Basilisk Crystals - { 51100, 51101, 38342, 25 }, // Trollbane - { 51102, 51104, 38345, 26 } // Frozen Spider Ichor -}; - class spell_pot_check : public SpellScriptLoader { public: spell_pot_check() : SpellScriptLoader("spell_pot_check") { } @@ -2004,14 +1851,14 @@ class spell_pot_check : public SpellScriptLoader { for (uint8 i = 0; i < 21; ++i) { - if(player->HasAura(FetchSpells[i] [0])) + if(player->HasAura(FetchIngredients[i] [0])) { player->CastSpell(player, SPELL_THROW_INGREDIENT); - player->RemoveAura(FetchSpells[i] [0]); - if(player->HasAura(FetchSpells[i] [1])) + player->RemoveAura(FetchIngredients[i] [0]); + if(player->HasAura(FetchIngredients[i] [1])) { - player->RemoveAura(FetchSpells[i] [1]); - player->DestroyItemCount(FetchSpells[i] [2], 1, true); + player->RemoveAura(FetchIngredients[i] [1]); + player->DestroyItemCount(FetchIngredients[i] [2], 1, true); if (i < 15) { if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f)) @@ -2043,8 +1890,8 @@ class spell_pot_check : public SpellScriptLoader void RemoveItems(Player* player) { for (uint8 i = 0; i < 21; ++i) - if (player->HasItemCount(FetchSpells[i] [2], 1, true)) - player->DestroyItemCount(FetchSpells[i] [2], 1, true); + if (player->HasItemCount(FetchIngredients[i] [2], 1, true)) + player->DestroyItemCount(FetchIngredients[i] [2], 1, true); } void Register() @@ -2113,9 +1960,7 @@ void AddSC_zuldrak() new npc_alchemist_finklestein; new go_finklesteins_cauldron; new spell_random_ingredient_aura; - new spell_random_ingredient_easy; - new spell_random_ingredient_medium; - new spell_random_ingredient_hard; + new spell_random_ingredient; new spell_pot_check; new spell_fetch_ingredient_aura; } -- cgit v1.2.3