fix(Core/Events): Apothecary Hummel (#10615)

* Fix(Core/Events): Apothecary Hummel

Co-authored-by: sirikfoll <sirikfoll@hotmail.com>
Co-authored-by: Killyana <Killyana@users.noreply.github.com>

* missed return

* Missing include

* Fixed delete

Co-authored-by: sirikfoll <sirikfoll@hotmail.com>
Co-authored-by: Killyana <Killyana@users.noreply.github.com>
This commit is contained in:
Nefertumm
2022-02-11 06:00:10 -03:00
committed by GitHub
parent 5d8b472ed7
commit c9ac48e824
7 changed files with 862 additions and 316 deletions

View File

@@ -0,0 +1,256 @@
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1644485285021223700');
-- Love is in the Air Hummel Script
SET @CGUID := 146562;
SET @OGUID := 9743;
UPDATE `creature_template` SET `unit_flags`=33280, `ScriptName`='boss_apothecary_hummel', `mechanic_immune_mask`=617297791 WHERE `entry`=36296;
UPDATE `creature_template` SET `unit_flags`=33280, `ScriptName`='npc_apothecary_baxter', `mechanic_immune_mask`=617297791 WHERE `entry`=36565;
UPDATE `creature_template` SET `unit_flags`=33280, `ScriptName`='npc_apothecary_frye', `mechanic_immune_mask`=617297791 WHERE `entry`=36272;
UPDATE `creature_template` SET `unit_flags`=33555200 WHERE `entry` IN(36710,36530);
UPDATE `gameobject_loot_template` SET `QuestRequired` = 0 WHERE `Entry` IN (28677,28678) AND `Item` IN (49351, 49352);
UPDATE `gameobject_template` SET `size`=2 WHERE `entry` IN(202947,202948);
UPDATE `creature_model_info` SET `BoundingRadius`=0.4596, `CombatReach`=1.8 WHERE `DisplayID`=31167;
UPDATE `creature_model_info` SET `BoundingRadius`=0.4596, `CombatReach`=1.8 WHERE `DisplayID`=31166;
DELETE FROM `reference_loot_template` WHERE `Entry` = 50011;
DELETE FROM `item_loot_template` WHERE `Entry` = 54537;
INSERT INTO `item_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(54537, 1, 50010, 20, 0, 1, 0, 1, 1, 'Necklaces'),
(54537, 49927, 0, 100, 0, 1, 0, 5, 10, 'Love Token'),
(54537, 49715, 0, 6, 0, 1, 0, 1, 1, 'Forever-Lovely Rose'),
(54537, 50446, 0, 6, 0, 1, 0, 1, 1, 'Toxic Wasteling'),
(54537, 50741, 0, 6, 0, 1, 0, 1, 1, 'Vile Fumigator\'s Mask'),
(54537, 50471, 0, 1.1, 0, 1, 0, 1, 1, 'The Heartbreaker'),
(54537, 50250, 0, 0.03, 0, 1, 0, 1, 1, 'Big Love Rocket');
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN(68644,68614,68798);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
(13,1,68644,0,0,31,0,3,36530,0,0,0,0,'','Spell [DND] Valentine Boss Validate Area targets [DND] Valentine Boss - Vial Bunny'),
(13,1,68614 ,0,0,31,0,3,36530,0,0,0,0,'','Spell Concentrated Irresistible Cologne Spill targets [DND] Valentine Boss - Vial Bunny'),
(13,1,68798,0,0,31,0,3,36530,0,0,0,0,'','Spell Concentrated Alluring Perfume Spill targets [DND] Valentine Boss - Vial Bunny');
DELETE FROM `creature_template_addon` WHERE `entry` IN (36565,36272,36296,36710);
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
(36565, 0, 0, 0, 1, 0, 3, '68946 71869'), -- 36565 (Apothecary Baxter) - Irresistible Cologne
(36272, 0, 0, 0, 1, 0, 3, '68704'), -- 36272 (Apothecary Frye) - Lingering Fumes
(36296, 0, 0, 0, 1, 0, 3, '68589 71856'), -- 36296 (Apothecary Hummel) - Alluring Perfume
(36710, 0, 0, 0, 1, 0, 3, '69216');
DELETE FROM `creature_summon_groups` WHERE `summonerId`=36296;
INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES
(36296, 0, 1, 36565, -210.3594, 2214.606, 79.84758, 1.047198, 8, 0),
(36296, 0, 1, 36272, -205.1962, 2214.549, 79.84695, 2.408554, 8, 0);
-- Delete old spell_script_names
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_love_in_air_periodic_perfumes';
DELETE FROM `spell_script_names` WHERE `ScriptName` IN
('spell_apothecary_validate_area',
'spell_apothecary_throw_perfume',
'spell_apothecary_throw_cologne',
'spell_apothecary_perfume_spill',
'spell_apothecary_cologne_spill',
'spell_apothecary_lingering_fumes');
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
(68644,'spell_apothecary_validate_area'),
(68966,'spell_apothecary_throw_perfume'),
(69038,'spell_apothecary_throw_cologne'),
(68798,'spell_apothecary_perfume_spill'),
(68614,'spell_apothecary_cologne_spill'),
(68965,'spell_apothecary_lingering_fumes');
SET @CGUID := 146562;
SET @OGUID := 9743;
DELETE FROM `creature` WHERE `guid` = 244573;
DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+62;
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES
(@CGUID+1, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -217.8004, 2183.503, 79.8493, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+2, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -215.434, 2198.861, 79.84796, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep) (Auras: )
(@CGUID+3, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -195.1233, 2163.059, 79.83028, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+4, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -211.0278, 2163.484, 79.84879, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+5, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -221.6858, 2179.219, 79.84988, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+6, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -219.0313, 2161.661, 79.84821, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+7, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -225.2396, 2164.177, 79.84788, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+8, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -222.7795, 2172.851, 79.8497, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+9, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -222.434, 2209.076, 79.84451, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+10, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -202.6493, 2180.49, 79.84853, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+11, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -207.9149, 2195.281, 79.84778, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep) (Auras: )
(@CGUID+12, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -205.6806, 2189.316, 79.84862, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+13, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -227.2309, 2177.594, 79.85047, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+14, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -202.9149, 2198.993, 79.84741, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+15, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -202.809, 2168.38, 79.82594, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+16, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -220.2379, 2166.99, 79.8491, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+17, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -210.7292, 2184.273, 79.84919, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+18, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -229.8142, 2170.894, 79.84966, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+19, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -212.1701, 2203.293, 79.84724, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+20, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -220.1649, 2190.29, 79.84927, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+21, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -233.4618, 2165.745, 79.84706, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+22, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -213.8142, 2168.231, 79.85005, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+23, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -204.2274, 2162.326, 79.84865, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+24, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -220.4219, 2203.752, 79.84645, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+25, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -213.8663, 2158.241, 79.84741, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+26, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -222.0538, 2196.368, 79.84769, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+27, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -224.3004, 2186.681, 79.85001, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+28, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -216.4531, 2175.7, 79.84973, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+29, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -210.349, 2178.34, 79.85, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+30, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -196.5052, 2155.45, 79.84718, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+31, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -203.6528, 2155.238, 79.84705, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+32, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -205.2465, 2204.854, 79.84711, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep) (Auras: )
(@CGUID+33, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -199.9063, 2211.925, 79.84727, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+34, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -207.3108, 2212.943, 79.84712, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep) (Auras: )
(@CGUID+35, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -227.6285, 2191.568, 79.84564, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+36, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -230.8125, 2185.498, 79.84583, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+37, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -225.7795, 2202.889, 79.84396, 4.520403, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+38, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -197.2604, 2196.29, 79.84711, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+39, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -220.6354, 2222.007, 79.84279, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+40, 36885, 0, 0, 33, 0, 0, 1, 1, 0, -226.0851, 2192.799, 79.84625, 3.193953, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- Crown Apothecary (Area: Shadowfang Keep)
(@CGUID+41, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -213.9931, 2209.849, 79.84778, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+42, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -212.4826, 2216.82, 79.84779, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep) (Auras: )
(@CGUID+43, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -218.3698, 2217.609, 79.84506, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+44, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -197.842, 2203.837, 79.84732, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+45, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -209.6354, 2172.125, 79.84968, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+46, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -210.8316, 2223.722, 79.84461, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+47, 36885, 0, 0, 33, 0, 0, 1, 1, 0, -199.8646, 2191.736, 79.84777, 1.117011, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- Crown Apothecary (Area: Shadowfang Keep)
(@CGUID+48, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -216.9497, 2225.153, 79.8432, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+49, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -198.4549, 2224.262, 79.84032, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+50, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -205.0052, 2219.215, 79.84557, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep) (Auras: )
(@CGUID+51, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -182.7292, 2214.054, 79.81828, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+52, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -197.1701, 2217.747, 79.84375, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep) (Auras: )
(@CGUID+53, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -191.8281, 2222.58, 79.84315, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+54, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -192.2569, 2210.776, 79.84515, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+55, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -189.0816, 2216.911, 79.84314, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+56, 23033, 0, 0, 33, 0, 0, 1, 1, 0, -224.4688, 2209.684, 80.92682, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- Invisible Stalker (Floating) (Area: Shadowfang Keep) (Auras: 57718 - Harpoon Loot Sparkles)
(@CGUID+57, 23033, 0, 0, 33, 0, 0, 1, 1, 0, -224.3663, 2212.083, 80.92657, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- Invisible Stalker (Floating) (Area: Shadowfang Keep) (Auras: 57718 - Harpoon Loot Sparkles)
(@CGUID+58, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -204.5729, 2226.901, 79.84293, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+59, 36885, 0, 0, 33, 0, 0, 1, 1, 0, -218.0156, 2216.691, 79.84538, 1.989675, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- Crown Apothecary (Area: Shadowfang Keep)
(@CGUID+60, 36530, 0, 0, 33, 0, 0, 1, 1, 0, -182.5885, 2219.731, 79.83677, 0, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- [DND] Valentine Boss - Vial Bunny (Area: Shadowfang Keep)
(@CGUID+61, 36296, 0, 0, 33, 0, 0, 1, 1, 0, -208.0903, 2217.389, 79.84693, 4.817109, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420), -- Apothecary Hummel (Area: Shadowfang Keep) (Auras: 68589 - Alluring Perfume)
(@CGUID+62, 36885, 0, 0, 33, 0, 0, 1, 1, 0, -225.9896, 2235.528, 79.8619, 5.183628, 7200, 0, 0, 0, 0, 0, 0, 0, 0, '', 23420); -- Crown Apothecary (Area: Shadowfang Keep)
DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+94;
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`) VALUES
(@OGUID+0, 201906, 33, 0, 0, 1, 1, -201.7951, 2162.818, 79.76379, 2.042035, 0, 0, 0.8526402, 0.5224986, 7200, 255, 1, '', 23420), -- Rocket Delivery System (Area: Shadowfang Keep)
(@OGUID+1, 201289, 33, 0, 0, 1, 1, -203.3629, 2178.462, 79.76537, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Duskwood Table (Area: Shadowfang Keep)
(@OGUID+2, 202105, 33, 0, 0, 1, 1, -227.7379, 2168.457, 79.76581, 4.049168, 0, 0, -0.8987932, 0.4383728, 7200, 255, 1, '', 23420), -- Plague Wagon Empty (Area: Shadowfang Keep)
(@OGUID+3, 200300, 33, 0, 0, 1, 1, -228.7326, 2192.905, 79.76138, 4.468043, 0, 0, -0.7880106, 0.6156617, 7200, 255, 1, '', 23420), -- Generic Cage Top (Area: Shadowfang Keep)
(@OGUID+4, 200300, 33, 0, 0, 1, 1, -228.1163, 2194.755, 82.49375, 4.81711, 0, 0, -0.6691303, 0.743145, 7200, 255, 1, '', 23420), -- Generic Cage Top (Area: Shadowfang Keep)
(@OGUID+6, 200332, 33, 0, 0, 1, 1, -228.2222, 2194.695, 82.49368, 4.834563, 0, 0, -0.6626196, 0.7489561, 7200, 255, 1, '', 23420), -- Generic Cage Bottom (Area: Shadowfang Keep)
(@OGUID+5, 200332, 33, 0, 0, 1, 1, -228.8524, 2192.884, 79.76133, 4.468043, 0, 0, -0.7880106, 0.6156617, 7200, 255, 1, '', 23420), -- Generic Cage Bottom (Area: Shadowfang Keep)
(@OGUID+7, 200337, 33, 0, 0, 1, 1, -218.9306, 2221.089, 80.72054, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel (Area: Shadowfang Keep)
(@OGUID+8, 200338, 33, 0, 0, 1, 1, -195.7413, 2204.79, 81.76898, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel Empty (Area: Shadowfang Keep)
(@OGUID+9, 202948, 33, 0, 0, 1, 1, -224.0781, 2211.082, 81.02744, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+10, 200337, 33, 0, 0, 1, 1, -215.6319, 2219.208, 79.76243, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel (Area: Shadowfang Keep)
(@OGUID+11, 200338, 33, 0, 0, 1, 1, -195.2205, 2204.566, 80.72088, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel Empty (Area: Shadowfang Keep)
(@OGUID+12, 181018, 33, 0, 0, 1, 1, -159.2257, 2167.594, 132.2321, 0.4014249, 0, 0, 0.1993675, 0.9799248, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+13, 200332, 33, 0, 0, 1, 1, -227.8316, 2197.056, 79.7609, 4.485497, 0, 0, -0.782608, 0.6225148, 7200, 255, 1, '', 23420), -- Generic Cage Bottom (Area: Shadowfang Keep)
(@OGUID+14, 202948, 33, 0, 0, 1, 1, -224.0781, 2211.082, 81.02744, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+15, 202948, 33, 0, 0, 1, 1, -224.3629, 2211.849, 81.03157, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+16, 202947, 33, 0, 0, 1, 1, -224.7431, 2209.16, 81.01423, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Cologne Neutralizer (Area: Shadowfang Keep)
(@OGUID+17, 202948, 33, 0, 0, 1, 1, -224.0781, 2211.082, 81.02744, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+18, 202947, 33, 0, 0, 1, 1, -224.6076, 2210.144, 81.01418, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Cologne Neutralizer (Area: Shadowfang Keep)
(@OGUID+19, 202948, 33, 0, 0, 1, 1, -224.0781, 2211.082, 81.02744, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+20, 200334, 33, 0, 0, 1, 1, -203.4306, 2178.222, 81.05308, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Holiday - Valentine - Shadowfang Keep - Chemistry Set 03 (Area: Shadowfang Keep)
(@OGUID+21, 181018, 33, 0, 0, 1, 1, -140.8611, 2160.24, 131.9547, 1.867502, 0, 0, 0.8038568, 0.5948228, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+22, 201906, 33, 0, 0, 1, 1, -201.8177, 2165.144, 80.67925, 1.378809, 0, 0, 0.6360779, 0.7716249, 7200, 255, 1, '', 23420), -- Rocket Delivery System (Area: Shadowfang Keep)
(@OGUID+23, 200300, 33, 0, 0, 1, 1, -227.7118, 2197.076, 79.76096, 4.468043, 0, 0, -0.7880106, 0.6156617, 7200, 255, 1, '', 23420), -- Generic Cage Top (Area: Shadowfang Keep)
(@OGUID+24, 201906, 33, 0, 0, 1, 1, -201.0556, 2165.413, 80.67633, 0.6806767, 0, 0, 0.333806, 0.9426418, 7200, 255, 1, '', 23420), -- Rocket Delivery System (Area: Shadowfang Keep)
(@OGUID+25, 202947, 33, 0, 0, 1, 1, -224.7431, 2209.16, 81.01423, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Cologne Neutralizer (Area: Shadowfang Keep)
(@OGUID+26, 202948, 33, 0, 0, 1, 1, -224.3629, 2211.849, 81.03157, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+27, 202947, 33, 0, 0, 1, 1, -224.1024, 2209.566, 81.01447, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Cologne Neutralizer (Area: Shadowfang Keep)
(@OGUID+28, 201906, 33, 0, 0, 1, 1, -199.1372, 2165.321, 80.66892, 2.042035, 0, 0, 0.8526402, 0.5224986, 7200, 255, 1, '', 23420), -- Rocket Delivery System (Area: Shadowfang Keep)
(@OGUID+29, 200337, 33, 0, 0, 1, 1, -223.2101, 2215.07, 80.9929, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel (Area: Shadowfang Keep)
(@OGUID+30, 202948, 33, 0, 0, 1, 1, -224.8333, 2210.943, 81.057, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+31, 200338, 33, 0, 0, 1, 1, -196.9358, 2191.941, 79.75, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel Empty (Area: Shadowfang Keep)
(@OGUID+32, 181060, 33, 0, 0, 1, 1, -266.908, 2297.325, 77.52528, 5.916668, 0, 0, -0.1822348, 0.983255, 7200, 255, 1, '', 23420), -- Standing, Interior, Small - Val (Area: Shadowfang Keep)
(@OGUID+33, 181018, 33, 0, 0, 1, 1, -260.8195, 2304.193, 82.19453, 4.380776, 0, 0, -0.8141155, 0.580703, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+34, 201906, 33, 0, 0, 1, 1, -199.8524, 2164.865, 80.67292, 3.089183, 0, 0, 0.9996567, 0.02620165, 7200, 255, 1, '', 23420), -- Rocket Delivery System (Area: Shadowfang Keep)
(@OGUID+35, 202948, 33, 0, 0, 1, 1, -224.0781, 2211.082, 81.02744, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+36, 202947, 33, 0, 0, 1, 1, -224.6076, 2210.144, 81.01418, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Cologne Neutralizer (Area: Shadowfang Keep)
(@OGUID+37, 200336, 33, 0, 0, 1, 1, -196.0365, 2203.82, 79.76387, 1.239183, 0, 0, 0.5807028, 0.8141156, 7200, 255, 1, '', 23420), -- Forsaken Wagon (Area: Shadowfang Keep)
(@OGUID+38, 200337, 33, 0, 0, 1, 1, -218.1319, 2218.642, 80.7216, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel (Area: Shadowfang Keep)
(@OGUID+39, 200338, 33, 0, 0, 1, 1, -196.0087, 2204.844, 80.7224, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel Empty (Area: Shadowfang Keep)
(@OGUID+40, 200338, 33, 0, 0, 1, 1, -196.8646, 2192.993, 79.75895, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel Empty (Area: Shadowfang Keep)
(@OGUID+41, 201906, 33, 0, 0, 1, 1, -199.467, 2166.151, 80.66539, 0.1745321, 0, 0, 0.08715534, 0.9961947, 7200, 255, 1, '', 23420), -- Rocket Delivery System (Area: Shadowfang Keep)
(@OGUID+42, 200337, 33, 0, 0, 1, 1, -217.4688, 2219.5, 80.72163, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel (Area: Shadowfang Keep)
(@OGUID+43, 201906, 33, 0, 0, 1, 1, -200.3385, 2165.795, 80.67102, 5.637414, 0, 0, -0.3173046, 0.9483237, 7200, 255, 1, '', 23420), -- Rocket Delivery System (Area: Shadowfang Keep)
(@OGUID+44, 200338, 33, 0, 0, 1, 1, -196.7326, 2202.128, 80.57761, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel Empty (Area: Shadowfang Keep)
(@OGUID+45, 181060, 33, 0, 0, 1, 1, -251.6024, 2289.042, 76.31879, 4.24115, 0, 0, -0.8526402, 0.5224986, 7200, 255, 1, '', 23420), -- Standing, Interior, Small - Val (Area: Shadowfang Keep)
(@OGUID+46, 201906, 33, 0, 0, 1, 1, -200.5243, 2164.542, 80.67728, 0.1745321, 0, 0, 0.08715534, 0.9961947, 7200, 255, 1, '', 23420), -- Rocket Delivery System (Area: Shadowfang Keep)
(@OGUID+47, 200338, 33, 0, 0, 1, 1, -198.3958, 2201.861, 79.76396, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel Empty (Area: Shadowfang Keep)
(@OGUID+48, 202947, 33, 0, 0, 1, 1, -224.6076, 2210.144, 81.01418, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Cologne Neutralizer (Area: Shadowfang Keep)
(@OGUID+49, 202948, 33, 0, 0, 1, 1, -224.0781, 2211.082, 81.02744, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+50, 201289, 33, 0, 0, 1, 1, -224.6476, 2210.903, 79.75954, 6.108654, 0, 0, -0.08715534, 0.9961947, 7200, 255, 1, '', 23420), -- Duskwood Table (Area: Shadowfang Keep)
(@OGUID+51, 201289, 33, 0, 0, 1, 1, -223.4531, 2215.885, 79.75977, 6.056293, 0, 0, -0.113203, 0.9935719, 7200, 255, 1, '', 23420), -- Duskwood Table (Area: Shadowfang Keep)
(@OGUID+52, 200337, 33, 0, 0, 1, 1, -218.7031, 2219.253, 80.72117, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel (Area: Shadowfang Keep)
(@OGUID+53, 201906, 33, 0, 0, 1, 1, -200.9115, 2162.441, 79.7639, 2.042035, 0, 0, 0.8526402, 0.5224986, 7200, 255, 1, '', 23420), -- Rocket Delivery System (Area: Shadowfang Keep)
(@OGUID+54, 200336, 33, 0, 0, 1, 1, -218.6736, 2220.03, 79.76088, 2.321287, 0, 0, 0.9170599, 0.3987495, 7200, 255, 1, '', 23420), -- Forsaken Wagon (Area: Shadowfang Keep)
(@OGUID+55, 202947, 33, 0, 0, 1, 1, -225.3524, 2209.576, 81.01386, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Cologne Neutralizer (Area: Shadowfang Keep)
(@OGUID+56, 200335, 33, 0, 0, 1, 1, -196.5556, 2195.776, 79.76373, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Holiday - Valentine - Shadowfang Keep - Chemistry Set 04 (Area: Shadowfang Keep)
(@OGUID+57, 202948, 33, 0, 0, 1, 1, -225.1597, 2211.516, 81.02943, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+58, 190678, 33, 0, 0, 1, 1, -222.5504, 2206.359, 81.06857, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Apothecary Vials and Bottles (Area: Shadowfang Keep)
(@OGUID+59, 201289, 33, 0, 0, 1, 1, -222.8229, 2206.047, 79.7614, 0.383971, 0, 0, 0.1908083, 0.9816273, 7200, 255, 1, '', 23420), -- Duskwood Table (Area: Shadowfang Keep)
(@OGUID+60, 200336, 33, 0, 0, 1, 1, -200.2153, 2165.316, 79.74786, 0.4537851, 0, 0, 0.2249508, 0.9743701, 7200, 255, 1, '', 23420), -- Forsaken Wagon (Area: Shadowfang Keep)
(@OGUID+61, 202947, 33, 0, 0, 1, 1, -225.2222, 2210.189, 81.01381, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Cologne Neutralizer (Area: Shadowfang Keep)
(@OGUID+62, 200337, 33, 0, 0, 1, 1, -219.0417, 2219.865, 80.72085, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel (Area: Shadowfang Keep)
(@OGUID+64, 200337, 33, 0, 0, 1, 1, -219.5017, 2219.882, 81.85169, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel (Area: Shadowfang Keep)
(@OGUID+65, 202948, 33, 0, 0, 1, 1, -223.7014, 2212.127, 81.05749, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+66, 200338, 33, 0, 0, 1, 1, -197.9375, 2192.507, 79.76409, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel Empty (Area: Shadowfang Keep)
(@OGUID+67, 200333, 33, 0, 0, 1, 1, -194.8038, 2199.302, 79.76308, 3.281239, 0, 0, -0.9975634, 0.06976615, 7200, 255, 1, '', 23420), -- Holiday - Valentine - Shadowfang Keep - Chemistry Set 02 (Area: Shadowfang Keep)
(@OGUID+68, 200337, 33, 0, 0, 1, 1, -218.3299, 2220.42, 80.72099, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel (Area: Shadowfang Keep)
(@OGUID+70, 200337, 33, 0, 0, 1, 1, -219.6823, 2220.344, 80.72044, 0, 0, 0, 0, 1, 7200, 255, 1, '', 23420), -- Forsaken Plague Barrel (Area: Shadowfang Keep)
(@OGUID+71, 181018, 33, 0, 0, 1, 1, -233.5365, 2268.826, 82.17297, 1.117009, 0, 0, 0.5299187, 0.8480484, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+72, 181018, 33, 0, 0, 1, 1, -151.8785, 2185.76, 132.1955, 5.044002, 0, 0, -0.5807028, 0.8141156, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+73, 181018, 33, 0, 0, 1, 1, -245.5087, 2273.543, 82.16793, 1.134463, 0, 0, 0.5372992, 0.8433917, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+74, 181018, 33, 0, 0, 1, 1, -275.0781, 2302.974, 82.48224, 5.829401, 0, 0, -0.2249508, 0.9743701, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+75, 181018, 33, 0, 0, 1, 1, -257.375, 2278.217, 82.14223, 1.291542, 0, 0, 0.6018143, 0.7986361, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+76, 181018, 33, 0, 0, 1, 1, -133.6927, 2178.62, 132.1656, 3.403396, 0, 0, -0.9914446, 0.1305283, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+77, 181060, 33, 0, 0, 1, 1, -245.2118, 2284.845, 76.36433, 4.24115, 0, 0, -0.8526402, 0.5224986, 7200, 255, 1, '', 23420), -- Standing, Interior, Small - Val (Area: Shadowfang Keep)
(@OGUID+78, 181019, 33, 0, 0, 1, 1, -244.9879, 2285.457, 76.32001, 5.916668, 0, 0, -0.1822348, 0.983255, 7200, 255, 1, '', 23420), -- Standing, Interior, Medium - Val (Area: Shadowfang Keep)
(@OGUID+79, 181060, 33, 0, 0, 1, 1, -237.1285, 2281.804, 76.31394, 4.24115, 0, 0, -0.8526402, 0.5224986, 7200, 255, 1, '', 23420), -- Standing, Interior, Small - Val (Area: Shadowfang Keep)
(@OGUID+80, 181019, 33, 0, 0, 1, 1, -236.8455, 2282.424, 76.27265, 0.6283169, 0, 0, 0.3090162, 0.9510568, 7200, 255, 1, '', 23420), -- Standing, Interior, Medium - Val (Area: Shadowfang Keep)
(@OGUID+81, 181060, 33, 0, 0, 1, 1, -244.6962, 2286.151, 76.26979, 4.24115, 0, 0, -0.8526402, 0.5224986, 7200, 255, 1, '', 23420), -- Standing, Interior, Small - Val (Area: Shadowfang Keep)
(@OGUID+82, 181060, 33, 0, 0, 1, 1, -236.6094, 2283.007, 76.26243, 4.24115, 0, 0, -0.8526402, 0.5224986, 7200, 255, 1, '', 23420), -- Standing, Interior, Small - Val (Area: Shadowfang Keep)
(@OGUID+83, 181060, 33, 0, 0, 1, 1, -252.1007, 2287.615, 76.33432, 4.433136, 0, 0, -0.7986355, 0.601815, 7200, 255, 1, '', 23420), -- Standing, Interior, Small - Val (Area: Shadowfang Keep)
(@OGUID+84, 181018, 33, 0, 0, 1, 1, -269.25, 2282.983, 82.28855, 1.239183, 0, 0, 0.5807028, 0.8141156, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+85, 202948, 33, 0, 0, 1, 1, -224.3629, 2211.849, 81.03157, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+86, 181060, 33, 0, 0, 1, 1, -268.9601, 2291.799, 77.44312, 5.899214, 0, 0, -0.1908083, 0.9816273, 7200, 255, 1, '', 23420), -- Standing, Interior, Small - Val (Area: Shadowfang Keep)
(@OGUID+87, 202948, 33, 0, 0, 1, 1, -224.3629, 2211.849, 81.03157, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Perfume Neutralizer (Area: Shadowfang Keep)
(@OGUID+88, 181018, 33, 0, 0, 1, 1, -237.1163, 2294.856, 82.21571, 4.380776, 0, 0, -0.8141155, 0.580703, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+89, 181018, 33, 0, 0, 1, 1, -278.7431, 2293.672, 82.41619, 5.899214, 0, 0, -0.1908083, 0.9816273, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+90, 202947, 33, 0, 0, 1, 1, -224.7431, 2209.16, 81.01423, 0, 0, 0, 0, 1, 5, 255, 1, '', 23420), -- Cologne Neutralizer (Area: Shadowfang Keep)
(@OGUID+91, 181019, 33, 0, 0, 1, 1, -251.8576, 2288.427, 76.32627, 0.6283169, 0, 0, 0.3090162, 0.9510568, 7200, 255, 1, '', 23420), -- Standing, Interior, Medium - Val (Area: Shadowfang Keep)
(@OGUID+92, 181018, 33, 0, 0, 1, 1, -225.1146, 2290.128, 82.15984, 4.380776, 0, 0, -0.8141155, 0.580703, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+93, 181018, 33, 0, 0, 1, 1, -248.9913, 2299.535, 82.2632, 4.380776, 0, 0, -0.8141155, 0.580703, 7200, 255, 1, '', 23420), -- Hanging, Tall/Thin, Medium - Val (Area: Shadowfang Keep)
(@OGUID+94, 181019, 33, 0, 0, 1, 1, -268.6615, 2295.618, 77.50943, 0.6283169, 0, 0, 0.3090162, 0.9510568, 7200, 255, 1, '', 23420); -- Standing, Interior, Medium - Val (Area: Shadowfang Keep)
DELETE FROM `game_event_creature` WHERE `guid` = 244573;
DELETE FROM `game_event_creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+62 AND `eventEntry`=8;
INSERT INTO `game_event_creature` SELECT 8, creature.guid FROM `creature` WHERE creature.guid BETWEEN @CGUID+0 AND @CGUID+14;
DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+94 AND `eventEntry`=8;
INSERT INTO `game_event_gameobject` SELECT 8, gameobject.guid FROM `gameobject` WHERE gameobject.guid BETWEEN @OGUID+0 AND @OGUID+14;
DELETE FROM `creature_addon` WHERE `guid` IN (@CGUID+56,@CGUID+57);
INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
(@CGUID+56, 0, 0, 0, 1, 0, 57718), -- 23033 (Invisible Stalker (Floating))
(@CGUID+57, 0, 0, 0, 1, 0, 57718); -- 23033 (INVISIBLE Stalker (Floating))
UPDATE `creature_template` SET `flags_extra`=`flags_extra`|128 WHERE `entry`=36212;
DELETE FROM `creature` WHERE `guid` IN (127478, 127479, 127480, 127481);
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES
(127478, 36212, 0, 0, 33, 0, 0, 1, 1, 0, -240.156, 2160.68, 90.5662, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, '', 0),
(127479, 36212, 0, 0, 33, 0, 0, 1, 1, 0, -166.3907, 2219.9748, 81.1539, 3.514658, 180, 0, 0, 0, 0, 0, 0, 0, 0, '', 0),
(127480, 36212, 0, 0, 33, 0, 0, 1, 1, 0, -215.5313, 2240.8679, 79.7662, 1.881030, 180, 0, 0, 0, 0, 0, 0, 0, 0, '', 0),
(127481, 36212, 0, 0, 33, 0, 0, 1, 1, 0, -177.6394, 2224.131, 79.3472, 4.857682, 180, 0, 0, 0, 0, 0, 0, 0, 0, '', 0);
DELETE FROM `game_event_creature` WHERE `guid` IN (127478, 127479, 127480, 127481);
INSERT INTO `game_event_creature` (`eventEntry`, `guid`) VALUES
(8,127478),(8,127479),
(8,127480),(8,127481);
UPDATE `creature_template` SET `exp`=2, `AIName`='SmartAI', `flags_extra` = `flags_extra`|64 WHERE `entry`=36568;
DELETE FROM `smart_scripts` WHERE `entryorguid`=36568 AND `source_type`=0;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(36568, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 18, 100, 0, 0, 0, 0, 0, 0, 'Crazed Apothecary - On Just Summoned - Attack player'),
(36568, 0, 1, 0, 26, 0, 100, 0, 0, 3, 0, 0, 0, 11, 68957, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Crazed Apothecary - IC LOS - Cast Unstable Reaction'),
(36568, 0, 2, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Crazed Apothecary - On evade - Despawn');

View File

@@ -13193,7 +13193,7 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo
|| (!target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC))
|| (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
// check if this is a world trigger cast - GOs are using world triggers to cast their spells, so we need to ignore their immunity flag here, this is a temp workaround, needs removal when go cast is implemented properly
|| (GetEntry() != WORLD_TRIGGER && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)))
|| ((GetEntry() != WORLD_TRIGGER && (!obj || !obj->isType(TYPEMASK_GAMEOBJECT | TYPEMASK_DYNAMICOBJECT))) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)))
return false;
// CvC case - can attack each other only when one of them is hostile

View File

@@ -0,0 +1,539 @@
/*
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by the
* Free Software Foundation; either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "LFGMgr.h"
#include "Player.h"
#include "Group.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "shadowfang_keep.h"
#include "GridNotifiersImpl.h"
#include "TaskScheduler.h"
enum ApothecarySpells
{
SPELL_ALLURING_PERFUME = 68589,
SPELL_PERFUME_SPRAY = 68607,
SPELL_CHAIN_REACTION = 68821,
SPELL_SUMMON_TABLE = 69218,
SPELL_PERMANENT_FEIGN_DEATH = 29266,
SPELL_QUIET_SUICIDE = 3617,
SPELL_COLOGNE_SPRAY = 68948,
SPELL_VALIDATE_AREA = 68644,
SPELL_THROW_COLOGNE = 68841,
SPELL_BUNNY_LOCKDOWN = 69039,
SPELL_THROW_PERFUME = 68799,
SPELL_PERFUME_SPILL = 68798,
SPELL_COLOGNE_SPILL = 68614,
SPELL_PERFUME_SPILL_DAMAGE = 68927,
SPELL_COLOGNE_SPILL_DAMAGE = 68934
};
enum ApothecarySays
{
SAY_INTRO_0 = 0,
SAY_INTRO_1 = 1,
SAY_INTRO_2 = 2,
SAY_CALL_BAXTER = 3,
SAY_CALL_FRYE = 4,
SAY_HUMMEL_DEATH = 5,
SAY_SUMMON_ADDS = 6,
SAY_BAXTER_DEATH = 0,
SAY_FRYE_DEATH = 0
};
enum ApothecaryMisc
{
ACTION_START_EVENT = 1,
ACTION_START_FIGHT = 2,
GOSSIP_OPTION_START = 0,
GOSSIP_MENU_HUMMEL = 10847,
QUEST_YOUVE_BEEN_SERVED = 14488,
NPC_APOTHECARY_FRYE = 36272,
NPC_APOTHECARY_BAXTER = 36565,
NPC_VIAL_BUNNY = 36530,
NPC_CROWN_APOTHECARY = 36885,
PHASE_ALL = 0,
PHASE_INTRO = 1
};
Position const BaxterMovePos = { -221.4115f, 2206.825f, 79.93151f, 0.0f };
Position const FryeMovePos = { -196.2483f, 2197.224f, 79.9315f, 0.0f };
class boss_apothecary_hummel : public CreatureScript
{
public:
boss_apothecary_hummel() : CreatureScript("boss_apothecary_hummel") { }
struct boss_apothecary_hummelAI : public BossAI
{
boss_apothecary_hummelAI(Creature* creature) : BossAI(creature, DATA_APOTHECARY_HUMMEL), _deadCount(0), _isDead(false)
{
_scheduler.SetValidator([this]
{
return !me->HasUnitState(UNIT_STATE_CASTING);
});
}
void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
if (menuId == GOSSIP_MENU_HUMMEL && gossipListId == GOSSIP_OPTION_START)
{
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
CloseGossipMenuFor(player);
DoAction(ACTION_START_EVENT);
}
}
void Reset() override
{
_Reset();
_deadCount = 0;
_isDead = false;
_phase = PHASE_ALL;
me->SetFaction(FACTION_FRIENDLY);
me->SummonCreatureGroup(1);
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
}
void EnterEvadeMode() override
{
summons.DespawnAll();
_EnterEvadeMode();
}
void DoAction(int32 action) override
{
if (action == ACTION_START_EVENT && events.IsInPhase(PHASE_ALL))
{
events.SetPhase(PHASE_INTRO);
_phase = PHASE_INTRO;
_scheduler.Schedule(1ms, [this](TaskContext /*context*/)
{
Talk(SAY_INTRO_0);
})
.Schedule(4s, [this](TaskContext /*context*/)
{
Talk(SAY_INTRO_1);
})
.Schedule(8s, [this](TaskContext /*context*/)
{
Talk(SAY_INTRO_2);
})
.Schedule(12s, [this](TaskContext context)
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
DoZoneInCombat();
context.Schedule(6s, [this](TaskContext /*context*/) // Call Baxter
{
Talk(SAY_CALL_BAXTER);
EntryCheckPredicate pred(NPC_APOTHECARY_BAXTER);
summons.DoAction(ACTION_START_FIGHT, pred);
summons.DoZoneInCombat(NPC_APOTHECARY_BAXTER);
})
.Schedule(14s, [this](TaskContext /*context*/) // Call Frye
{
Talk(SAY_CALL_FRYE);
EntryCheckPredicate pred(NPC_APOTHECARY_FRYE);
summons.DoAction(ACTION_START_FIGHT, pred);
})
.Schedule(3640ms, [this](TaskContext context) // Perfume spray
{
DoCastVictim(SPELL_PERFUME_SPRAY);
context.Repeat(3640ms);
})
.Schedule(15s, [this](TaskContext context) // Chain Reaction
{
DoCastVictim(SPELL_SUMMON_TABLE, true);
DoCastAOE(SPELL_CHAIN_REACTION);
context.Repeat(25s);
})
.Schedule(15s, [this](TaskContext /*context*/) // Call Crazed Apothecary (text)
{
Talk(SAY_SUMMON_ADDS);
})
.Schedule(15s, [this](TaskContext context) // Call Crazed Apothecary
{
instance->SetData(DATA_SPAWN_VALENTINE_ADDS, 0);
context.Repeat(4s, 6s);
});
std::list<Creature*> trashs;
me->GetCreatureListWithEntryInGrid(trashs, NPC_CROWN_APOTHECARY, 100.f);
for (Creature* crea : trashs)
{
crea->DespawnOrUnsummon();
}
});
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
me->SetFaction(FACTION_MONSTER);
summons.DoAction(ACTION_START_EVENT);
}
}
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType, SpellSchoolMask) override
{
if (damage >= me->GetHealth())
{
if (_deadCount < 2)
{
damage = me->GetHealth() - 1;
if (!_isDead)
{
_isDead = true;
me->RemoveAurasDueToSpell(SPELL_ALLURING_PERFUME);
DoCastSelf(SPELL_PERMANENT_FEIGN_DEATH, true);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Talk(SAY_HUMMEL_DEATH);
}
}
}
}
void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override
{
if (summon->GetEntry() == NPC_APOTHECARY_FRYE || summon->GetEntry() == NPC_APOTHECARY_BAXTER)
{
_deadCount++;
}
if (me->HasAura(SPELL_PERMANENT_FEIGN_DEATH) && _deadCount == 2)
{
DoCastSelf(SPELL_QUIET_SUICIDE, true);
}
}
void JustDied(Unit* /*killer*/) override
{
if (!_isDead)
{
Talk(SAY_HUMMEL_DEATH);
}
_scheduler.CancelAll();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
instance->SetBossState(DATA_APOTHECARY_HUMMEL, DONE);
Map::PlayerList const& players = me->GetMap()->GetPlayers();
if (!players.IsEmpty())
{
if (Group* group = players.begin()->GetSource()->GetGroup())
{
if (group->isLFGGroup())
{
sLFGMgr->FinishDungeon(group->GetGUID(), 288, me->GetMap());
}
}
}
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && _phase != PHASE_INTRO)
{
return;
}
_scheduler.Update(diff, [this]
{
DoMeleeAttackIfReady();
});
}
private:
uint8 _deadCount;
bool _isDead;
TaskScheduler _scheduler;
uint8 _phase;
};
bool OnQuestReward(Player* /*player*/, Creature* creature, const Quest* quest, uint32 /*slot*/) override
{
if (quest->GetQuestId() == QUEST_YOUVE_BEEN_SERVED)
{
if (creature && creature->AI())
{
creature->AI()->DoAction(ACTION_START_EVENT);
}
}
return true;
}
CreatureAI* GetAI(Creature* creature) const override
{
return new boss_apothecary_hummelAI(creature);
}
};
struct npc_apothecary_genericAI : public ScriptedAI
{
npc_apothecary_genericAI(Creature* creature, Position pos) : ScriptedAI(creature), _movePos(pos) { }
void DoAction(int32 action) override
{
if (action == ACTION_START_EVENT)
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
me->SetFaction(FACTION_MONSTER);
me->GetMotionMaster()->MovePoint(1, _movePos);
}
else if (action == ACTION_START_FIGHT)
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
DoZoneInCombat();
}
}
void MovementInform(uint32 type, uint32 pointId) override
{
if (type == POINT_MOTION_TYPE && pointId == 1)
{
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING);
}
}
protected:
Position _movePos;
};
struct npc_apothecary_frye : public npc_apothecary_genericAI
{
npc_apothecary_frye(Creature* creature) : npc_apothecary_genericAI(creature, FryeMovePos) { }
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_FRYE_DEATH);
}
};
struct npc_apothecary_baxter : public npc_apothecary_genericAI
{
npc_apothecary_baxter(Creature* creature) : npc_apothecary_genericAI(creature, BaxterMovePos)
{
_scheduler.SetValidator([this]
{
return !me->HasUnitState(UNIT_STATE_CASTING);
});
}
void Reset() override
{
_scheduler.CancelAll();
_scheduler.Schedule(7s, [this](TaskContext context)
{
DoCastVictim(SPELL_COLOGNE_SPRAY);
context.Repeat(4s);
})
.Schedule(12s, [this](TaskContext context)
{
DoCastVictim(SPELL_SUMMON_TABLE);
DoCastVictim(SPELL_CHAIN_REACTION);
context.Repeat(25s);
});
}
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_BAXTER_DEATH);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
return;
}
_scheduler.Update(diff, [this]
{
DoMeleeAttackIfReady();
});
}
private:
TaskScheduler _scheduler;
};
// 68965 - [DND] Lingering Fumes Targetting (starter)
class spell_apothecary_lingering_fumes : public SpellScript
{
PrepareSpellScript(spell_apothecary_lingering_fumes);
void HandleAfterCast()
{
Unit* caster = GetCaster();
if (!caster->IsInCombat() || roll_chance_i(50))
return;
std::list<Creature*> triggers;
caster->GetCreatureListWithEntryInGrid(triggers, NPC_VIAL_BUNNY, 100.0f);
if (triggers.empty())
return;
Creature* trigger = Acore::Containers::SelectRandomContainerElement(triggers);
caster->GetMotionMaster()->MovePoint(0, trigger->GetPosition());
}
void HandleScript(SpellEffIndex /*effindex*/)
{
Unit* caster = GetCaster();
caster->CastSpell(GetHitUnit(), SPELL_VALIDATE_AREA, true);
}
void Register() override
{
AfterCast += SpellCastFn(spell_apothecary_lingering_fumes::HandleAfterCast);
OnEffectHitTarget += SpellEffectFn(spell_apothecary_lingering_fumes::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
// 68644 - [DND] Valentine Boss Validate Area
class spell_apothecary_validate_area : public SpellScript
{
PrepareSpellScript(spell_apothecary_validate_area);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_BUNNY_LOCKDOWN, SPELL_THROW_COLOGNE, SPELL_THROW_PERFUME });
}
void FilterTargets(std::list<WorldObject*>& targets)
{
targets.remove_if(Acore::UnitAuraCheck(true, SPELL_BUNNY_LOCKDOWN));
if (targets.empty())
return;
WorldObject* target = Acore::Containers::SelectRandomContainerElement(targets);
targets.clear();
targets.push_back(target);
}
void HandleScript(SpellEffIndex /*effindex*/)
{
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_BUNNY_LOCKDOWN, true);
GetCaster()->CastSpell(GetHitUnit(), RAND(SPELL_THROW_COLOGNE, SPELL_THROW_PERFUME), true);
}
void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_apothecary_validate_area::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENTRY);
OnEffectHitTarget += SpellEffectFn(spell_apothecary_validate_area::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
// 69038 - Throw Cologne
class spell_apothecary_throw_cologne : public SpellScript
{
PrepareSpellScript(spell_apothecary_throw_cologne);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_COLOGNE_SPILL });
}
void HandleScript(SpellEffIndex /*effindex*/)
{
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_COLOGNE_SPILL, true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_apothecary_throw_cologne::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
// 68966 - Throw Perfume
class spell_apothecary_throw_perfume : public SpellScript
{
PrepareSpellScript(spell_apothecary_throw_perfume);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_PERFUME_SPILL });
}
void HandleScript(SpellEffIndex /*effindex*/)
{
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_PERFUME_SPILL, true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_apothecary_throw_perfume::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
// 68798 - Concentrated Alluring Perfume Spill
class spell_apothecary_perfume_spill : public AuraScript
{
PrepareAuraScript(spell_apothecary_perfume_spill);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_PERFUME_SPILL_DAMAGE });
}
void OnPeriodic(AuraEffect const* /*aurEff*/)
{
GetTarget()->CastSpell(GetTarget(), SPELL_PERFUME_SPILL_DAMAGE, true);
}
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_apothecary_perfume_spill::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
// 68614 - Concentrated Irresistible Cologne Spill
class spell_apothecary_cologne_spill : public AuraScript
{
PrepareAuraScript(spell_apothecary_cologne_spill);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_COLOGNE_SPILL_DAMAGE });
}
void OnPeriodic(AuraEffect const* /*aurEff*/)
{
GetTarget()->CastSpell(GetTarget(), SPELL_COLOGNE_SPILL_DAMAGE, true);
}
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_apothecary_cologne_spill::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
void AddSC_boss_apothecary_hummel()
{
new boss_apothecary_hummel();
RegisterShadowfangKeepCreatureAI(npc_apothecary_baxter);
RegisterShadowfangKeepCreatureAI(npc_apothecary_frye);
RegisterSpellScript(spell_apothecary_lingering_fumes);
RegisterSpellScript(spell_apothecary_validate_area);
RegisterSpellScript(spell_apothecary_throw_cologne);
RegisterSpellScript(spell_apothecary_throw_perfume);
RegisterSpellScript(spell_apothecary_perfume_spill);
RegisterSpellScript(spell_apothecary_cologne_spill);
}

View File

@@ -20,13 +20,10 @@
#include "TemporarySummon.h"
#include "shadowfang_keep.h"
//enum Creatures
//{
// NPC_ASH = 3850,
// NPC_ADA = 3849,
// NPC_ARCHMAGE_ARUGAL = 4275,
// NPC_ARUGAL_VOIDWALKER = 4627
//};
enum Spells
{
SPELL_SUMMON_VALENTINE_ADD = 68610
};
class instance_shadowfang_keep : public InstanceMapScript
{
@@ -47,6 +44,18 @@ public:
memset(&_encounters, 0, sizeof(_encounters));
}
void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
case NPC_DND_CRAZED_APOTHECARY_GENERATOR:
_crazedApothecaryGeneratorGUIDs.push_back(creature->GetGUID());
break;
default:
break;
}
}
void OnGameObjectCreate(GameObject* gameobject) override
{
switch (gameobject->GetEntry())
@@ -63,6 +72,8 @@ public:
if (_encounters[TYPE_WOLF_MASTER_NANDOS] == DONE)
HandleGameObject(ObjectGuid::Empty, true, gameobject);
break;
default:
break;
}
}
@@ -75,6 +86,17 @@ public:
case TYPE_WOLF_MASTER_NANDOS:
_encounters[type] = data;
break;
case DATA_SPAWN_VALENTINE_ADDS:
for (ObjectGuid guid : _crazedApothecaryGeneratorGUIDs)
{
if (Creature* generator = instance->GetCreature(guid))
{
generator->CastSpell(nullptr, SPELL_SUMMON_VALENTINE_ADD);
}
}
break;
default:
break;
}
if (data == DONE)
@@ -109,6 +131,7 @@ public:
private:
uint32 _encounters[MAX_ENCOUNTERS];
GuidVector _crazedApothecaryGeneratorGUIDs;
};
};

View File

@@ -20,13 +20,23 @@
#include "SpellAuraEffects.h"
#include "SpellScript.h"
#include "CreatureAIImpl.h"
#define ShadowfangKeepScriptName "instance_shadowfang_keep"
enum DataTypes
{
TYPE_COURTYARD = 0,
TYPE_FENRUS_THE_DEVOURER = 1,
TYPE_WOLF_MASTER_NANDOS = 2,
MAX_ENCOUNTERS = 3
MAX_ENCOUNTERS = 3,
DATA_APOTHECARY_HUMMEL = 4,
DATA_SPAWN_VALENTINE_ADDS = 5
};
enum SKCreatures
{
NPC_DND_CRAZED_APOTHECARY_GENERATOR = 36212
};
enum GameObjects
@@ -36,4 +46,12 @@ enum GameObjects
GO_ARUGAL_DOOR = 18971
};
template <class AI, class T>
inline AI* GetShadowfangKeepAI(T* obj)
{
return GetInstanceAI<AI>(obj, ShadowfangKeepScriptName);
}
#define RegisterShadowfangKeepCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetShadowfangKeepAI)
#endif

View File

@@ -103,6 +103,7 @@ void AddSC_boss_kirtonos_the_herald();
void AddSC_boss_darkmaster_gandling();
void AddSC_boss_kormok();
void AddSC_instance_scholomance(); //Scholomance
void AddSC_boss_apothecary_hummel();
void AddSC_instance_shadowfang_keep(); //Shadowfang keep
void AddSC_boss_baroness_anastari();
void AddSC_boss_jarien_and_sothos();
@@ -252,6 +253,7 @@ void AddEasternKingdomsScripts()
AddSC_boss_darkmaster_gandling();
AddSC_boss_kormok();
AddSC_instance_scholomance(); //Scholomance
AddSC_boss_apothecary_hummel();
AddSC_instance_shadowfang_keep(); //Shadowfang keep
AddSC_boss_baroness_anastari();
AddSC_boss_jarien_and_sothos();

View File

@@ -255,289 +255,25 @@ struct npc_love_in_air_snivel_real : public ScriptedAI
}
};
///////////////////////////////////////
////// BOSS
///////////////////////////////////////
enum hummel
{
QUEST_YOUVE_BEEN_SERVED = 14488,
NPC_APOTHECARY_HUMMEL = 36296,
NPC_APOTHECARY_FRYE = 36272,
NPC_APOTHECARY_BAXTER = 36565,
SPELL_COLOGNE_IMMUNE = 68530,
SPELL_COLOGNE_PASSIVE_DAMAGE = 68947,
SPELL_PERFUME_PASSIVE_DAMAGE = 68641,
SPELL_THROW_COLOGNE = 68614,
SPELL_THROW_PERFUME = 68798,
// Real fight
SPELL_COLOGNE_SPRAY = 68948,
SPELL_ALLURING_PERFUME_SPRAY = 68607,
SPELL_CHAIN_REACTION = 68821,
ACTION_START_EVENT = 1,
ACTION_RELEASE_HELPER = 2,
EVENT_CALL_BAXTER = 1,
EVENT_CALL_FRYE = 2,
EVENT_SPELL_PERFUME_SPRAY = 3,
EVENT_SPELL_CHAIN_REACTION = 4,
EVENT_SPELL_THROW = 5,
};
enum HummelSay
{
SAY_HUMMEL_0 = 0,
SAY_HUMMEL_1 = 1,
SAY_HUMMEL_2 = 2,
SAY_HUMMEL_5 = 5
};
class npc_love_in_air_hummel : public CreatureScript
{
public:
npc_love_in_air_hummel() : CreatureScript("npc_love_in_air_hummel") { }
struct npc_love_in_air_hummelAI : public ScriptedAI
{
npc_love_in_air_hummelAI(Creature* creature) : ScriptedAI(creature), summons(me) { speachTimer = 0; }
SummonList summons;
EventMap events;
uint32 speachTimer;
bool CanBeSeen(Player const* player) override
{
if (player->IsGameMaster())
{
return true;
}
Group const* group = player->GetGroup();
return group && sLFGMgr->GetDungeon(group->GetGUID()) == lfg::LFG_DUNGEON_CROWN_CHEMICAL_CO;
}
void Reset() override
{
speachTimer = 0;
me->SetFaction(FACTION_FRIENDLY);
summons.DespawnAll();
events.Reset();
me->SummonCreature(NPC_APOTHECARY_FRYE, -205.449f, 2219.56f, 79.7633f, 0.7f);
me->SummonCreature(NPC_APOTHECARY_BAXTER, -209.602f, 2215.42f, 79.7633f, 0.723503f);
}
void DoAction(int32 param) override
{
if (param == ACTION_START_EVENT)
speachTimer = 1;
}
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_HUMMEL_5);
Map::PlayerList const& players = me->GetMap()->GetPlayers();
if (!players.IsEmpty() && players.begin()->GetSource() && players.begin()->GetSource()->GetGroup())
sLFGMgr->FinishDungeon(players.begin()->GetSource()->GetGroup()->GetGUID(), lfg::LFG_DUNGEON_CROWN_CHEMICAL_CO, me->FindMap());
}
void JustSummoned(Creature* cr) override
{
summons.Summon(cr);
cr->SetFaction(FACTION_FRIENDLY);
cr->SetControlled(true, UNIT_STATE_STUNNED);
cr->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
void UpdateAI(uint32 diff) override
{
if (speachTimer)
{
speachTimer += diff;
if (speachTimer < 10000)
{
Talk(SAY_HUMMEL_0);
speachTimer = 10000;
}
else if (speachTimer >= 16000 && speachTimer < 20000)
{
Talk(SAY_HUMMEL_1);
speachTimer = 20000;
}
else if (speachTimer >= 26000 && speachTimer < 30000)
{
Talk(SAY_HUMMEL_2);
speachTimer = 0;
me->SetFaction(FACTION_MONSTER_2);
me->SetInCombatWithZone();
if (Unit* target = SelectTargetFromPlayerList(40.0f))
{
AttackStart(target);
events.ScheduleEvent(EVENT_CALL_BAXTER, 10000);
events.ScheduleEvent(EVENT_CALL_FRYE, 20000);
events.ScheduleEvent(EVENT_SPELL_PERFUME_SPRAY, 7000);
events.ScheduleEvent(EVENT_SPELL_CHAIN_REACTION, 12000);
}
else
EnterEvadeMode();
}
return;
}
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_CALL_BAXTER:
{
EntryCheckPredicate pred(NPC_APOTHECARY_BAXTER);
summons.DoAction(ACTION_RELEASE_HELPER, pred);
break;
}
case EVENT_CALL_FRYE:
{
EntryCheckPredicate pred(NPC_APOTHECARY_FRYE);
summons.DoAction(ACTION_RELEASE_HELPER, pred);
break;
}
case EVENT_SPELL_PERFUME_SPRAY:
DoCastVictim(SPELL_ALLURING_PERFUME_SPRAY);
events.RepeatEvent(6000);
break;
case EVENT_SPELL_CHAIN_REACTION:
DoCastVictim(SPELL_CHAIN_REACTION);
events.RepeatEvent(12000);
break;
}
DoMeleeAttackIfReady();
}
};
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) override
{
creature->AI()->DoAction(ACTION_START_EVENT);
CloseGossipMenuFor(player);
return true;
}
bool OnQuestReward(Player* /*player*/, Creature* creature, const Quest* _Quest, uint32 /*slot*/) override
{
if (_Quest->GetQuestId() == QUEST_YOUVE_BEEN_SERVED)
{
creature->AI()->DoAction(ACTION_START_EVENT);
}
return true;
}
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_love_in_air_hummelAI(creature);
};
};
enum HummelHelperSay
{
SAY_HUMMEL_HELPER_SAY_5 = 5,
};
struct npc_love_in_air_hummel_helper : public ScriptedAI
{
npc_love_in_air_hummel_helper(Creature* creature) : ScriptedAI(creature) { }
EventMap events;
bool CanBeSeen(Player const* player) override
{
if (player->IsGameMaster())
{
return true;
}
Group const* group = player->GetGroup();
return group && sLFGMgr->GetDungeon(group->GetGUID()) == lfg::LFG_DUNGEON_CROWN_CHEMICAL_CO;
}
void Reset() override
{
}
void DoAction(int32 param) override
{
if (param == ACTION_RELEASE_HELPER)
{
me->SetControlled(false, UNIT_STATE_STUNNED);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetFaction(FACTION_MONSTER_2);
me->SetInCombatWithZone();
if (Unit* target = SelectTargetFromPlayerList(40.0f))
AttackStart(target);
if (me->GetEntry() == NPC_APOTHECARY_BAXTER)
{
events.ScheduleEvent(EVENT_SPELL_PERFUME_SPRAY, 7000);
events.ScheduleEvent(EVENT_SPELL_CHAIN_REACTION, 12000);
}
else
events.ScheduleEvent(EVENT_SPELL_THROW, 5000);
}
}
void JustDied(Unit* /*killer*/) override
{
me->AI()->Talk(SAY_HUMMEL_HELPER_SAY_5);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_SPELL_PERFUME_SPRAY:
DoCastVictim(SPELL_COLOGNE_SPRAY);
events.RepeatEvent(6000);
break;
case EVENT_SPELL_CHAIN_REACTION:
DoCastVictim(SPELL_CHAIN_REACTION);
events.RepeatEvent(12000);
break;
case EVENT_SPELL_THROW:
if (Unit* target = SelectTarget(SelectTargetMethod::Random))
{
Position pos(*me);
me->Relocate(target);
me->CastSpell(me, RAND(SPELL_THROW_COLOGNE, SPELL_THROW_PERFUME), true, nullptr, nullptr, me->GetGUID());
me->Relocate(pos);
}
events.RepeatEvent(10000);
break;
}
DoMeleeAttackIfReady();
}
};
///////////////////////////////////////
////// SPELLS
///////////////////////////////////////
enum SpellsCologneImmune
{
SPELL_COLOGNE_IMMUNE = 68530,
SPELL_COLOGNE_PASSIVE_DAMAGE = 68947,
SPELL_PERFUME_PASSIVE_DAMAGE = 68641,
SPELL_THROW_COLOGNE = 68614,
SPELL_THROW_PERFUME = 68798,
// Real fight
SPELL_COLOGNE_SPRAY = 68948,
SPELL_ALLURING_PERFUME_SPRAY = 68607,
SPELL_CHAIN_REACTION = 68821
};
class spell_love_in_air_perfume_immune : public AuraScript
{
PrepareAuraScript(spell_love_in_air_perfume_immune);
@@ -583,29 +319,6 @@ class spell_love_in_air_perfume_immune : public AuraScript
}
};
class spell_love_in_air_periodic_perfumes : public AuraScript
{
PrepareAuraScript(spell_love_in_air_periodic_perfumes);
void PeriodicTick(AuraEffect const* /*aurEff*/)
{
ObjectGuid guid = GetCaster() ? GetCaster()->GetGUID() : ObjectGuid::Empty;
if (Unit* target = GetTarget())
{
uint32 spellId = (GetId() == SPELL_THROW_COLOGNE ? 68934 : 68927);
if (target->IsImmunedToSpell(sSpellMgr->GetSpellInfo(spellId)))
return;
target->CastSpell(target, spellId, true, nullptr, nullptr, guid);
}
}
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_love_in_air_periodic_perfumes::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
enum CreateHeartCandy
{
SPELL_CREATE_HEART_CANDY_1 = 26668,
@@ -773,13 +486,8 @@ void AddSC_event_love_in_the_air()
RegisterCreatureAI(npc_love_in_air_snivel);
RegisterCreatureAI(npc_love_in_air_snivel_real);
// Boss
new npc_love_in_air_hummel();
RegisterCreatureAI(npc_love_in_air_hummel_helper);
// Spells
RegisterSpellScript(spell_love_in_air_perfume_immune);
RegisterSpellScript(spell_love_in_air_periodic_perfumes);
RegisterSpellScript(spell_item_create_heart_candy);
RegisterSpellScript(spell_love_is_in_the_air_romantic_picnic);
RegisterSpellScript(spell_gen_aura_service_uniform);