diff --git a/data/sql/updates/db_world/0000_00_00_00.sql b/data/sql/updates/db_world/0000_00_00_00.sql index 68096c2858..8b96edd0a7 100644 --- a/data/sql/updates/db_world/0000_00_00_00.sql +++ b/data/sql/updates/db_world/0000_00_00_00.sql @@ -7,3 +7,73 @@ DELETE FROM `smart_scripts` WHERE `entryorguid` = @BWL_MAGE; INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES (@BWL_MAGE, 0, 0, 0, 0, 0, 100, 0, 0, 0, 3400, 4700, 0, 11, 17290, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Cast Fireball'), (@BWL_MAGE, 0, 1, 0, 9, 0, 100, 0, 0, 10, 15000, 25000, 0, 11, 22271, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Cast Arcane Explosion on Close'); + + +-- Blackwing Technician event +DELETE FROM `creature` WHERE `guid`=85786 AND `id`=9098; +DELETE FROM `linked_respawn` WHERE `guid` IN (85786); + +UPDATE `creature_template` SET `RegenHealth`=0 WHERE `entry` IN (13020); + +UPDATE `creature` SET `unit_flags`=768 WHERE `guid` IN (84605, 84616, 84606, 84603, 84615, 84614); +DELETE FROM `areatrigger_scripts` WHERE `entry`= 3626; +INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES (3626, "SmartTrigger"); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-84605, -84616, -84606, -84603, -84615, -84614) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (3626) AND `source_type`=2; +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 +(3626,2,0,0,46,0,100,0,3626,0,0,0,45,1,1,0,0,0,0,10,84605,13996,0,0,0,0,0,"Area trigger 3626 - On area trigger - Set data"), +(3626,2,1,0,46,0,100,0,3626,0,0,0,45,1,1,0,0,0,0,10,84616,13996,0,0,0,0,0,"Area trigger 3626 - On area trigger - Set data"), +(3626,2,2,0,46,0,100,0,3626,0,0,0,45,1,1,0,0,0,0,10,84606,13996,0,0,0,0,0,"Area trigger 3626 - On area trigger - Set data"), +(3626,2,3,0,46,0,100,0,3626,0,0,0,45,1,1,0,0,0,0,10,84603,13996,0,0,0,0,0,"Area trigger 3626 - On area trigger - Set data"), +(3626,2,4,0,46,0,100,0,3626,0,0,0,45,1,1,0,0,0,0,10,84615,13996,0,0,0,0,0,"Area trigger 3626 - On area trigger - Set data"), +(3626,2,5,0,46,0,100,0,3626,0,0,0,45,1,1,0,0,0,0,10,84614,13996,0,0,0,0,0,"Area trigger 3626 - On area trigger - Set data"), +(-84605,0,0,0,38,0,100,1,1,1,0,0,53,1,1399600,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - Data set - Start waypoint"), +(-84605,0,1,0,58,0,100,1,0,1399600,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - On waypoint ended - Despawn"), +(-84616,0,0,0,38,0,100,1,1,1,0,0,53,1,1399600,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - Data set - Start waypoint"), +(-84616,0,1,0,58,0,100,1,0,1399600,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - On waypoint ended - Despawn"), +(-84606,0,0,0,38,0,100,1,1,1,0,0,53,1,1399600,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - Data set - Start waypoint"), +(-84606,0,1,0,58,0,100,1,0,1399600,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - On waypoint ended - Despawn"), +(-84603,0,0,0,38,0,100,1,1,1,0,0,53,1,1399601,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - Data set - Start waypoint"), +(-84603,0,1,0,58,0,100,1,0,1399601,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - On waypoint ended - Despawn"), +(-84615,0,0,1,38,0,100,1,1,1,0,0,53,1,1399601,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - Data set - Start waypoint"), +(-84615,0,1,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - Data set - Say text"), +(-84615,0,2,0,58,0,100,1,0,1399601,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - On waypoint ended - Despawn"), +(-84614,0,0,0,38,0,100,1,1,1,0,0,53,1,1399601,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - Data set - Start waypoint"), +(-84614,0,1,0,58,0,100,1,0,1399601,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackwing Technician - On waypoint ended - Despawn"); + +DELETE FROM `waypoints` WHERE `entry` IN (1399600,1399601); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(1399600, 1, -7466.55, -1015.38, 408.566,"Blackwing Technician"), +(1399600, 2, -7453.62, -1019.73, 408.57,"Blackwing Technician"), +(1399600, 3, -7443.76, -1031.75, 408.613,"Blackwing Technician"), +(1399600, 4, -7436.59, -1037.8, 408.646,"Blackwing Technician"), +(1399600, 5, -7433.49, -1032.99, 408.641,"Blackwing Technician"), +(1399600, 6, -7436.15, -1025.96, 414.025,"Blackwing Technician"), +(1399600, 7, -7441.49, -1017.68, 423.096,"Blackwing Technician"), +(1399600, 8, -7443.33, -1015.06, 423.666,"Blackwing Technician"), +(1399600, 9, -7456.49, -996.301, 423.666,"Blackwing Technician"), +(1399600, 10, -7483.34, -962.278, 423.809,"Blackwing Technician"), +(1399600, 11, -7488.85, -962.927, 423.693,"Blackwing Technician"), +(1399600, 12, -7506.71, -972.992, 423.607,"Blackwing Technician"), +(1399600, 13, -7514.11, -974.566, 423.477,"Blackwing Technician"), +(1399600, 14, -7519.98, -969.585, 423.429,"Blackwing Technician"), +(1399601, 6, -7496.75, -1054.78, 423.665,"Blackwing Technician"), +(1399601, 7, -7512.88, -1032.64, 423.665,"Blackwing Technician"), +(1399601, 8, -7531.46, -1007.4, 423.665,"Blackwing Technician"), +(1399601, 9, -7534.84, -997.096, 423.764,"Blackwing Technician"), +(1399601, 10, -7520.4, -979.642, 423.502,"Blackwing Technician"), +(1399601, 11, -7519.79, -976.306, 423.43,"Blackwing Technician"), +(1399601, 12, -7526.15, -964.647, 426.48,"Blackwing Technician"), +(1399601, 13, -7529.9, -959.013, 427.93,"Blackwing Technician"); + +DELETE FROM `creature_text` WHERE `CreatureID` IN (13996); +INSERT INTO `creature_text` (`creatureid`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `comment`) VALUES +(13996, 0, 0, 'Run! They are coming!', 14, 0, 100, 0, 0, 0, 9031, 'Blackwing Technician'); + + +-- Adds a reference to the spell_vael_burning_adrenaline script for Burning Adrenaline (Vael Fight) +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_vael_burning_adrenaline'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +('18173', 'spell_vael_burning_adrenaline'); + diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp index 858d179309..c0c100fa92 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp @@ -8,45 +8,49 @@ #include "ScriptedCreature.h" #include "blackwing_lair.h" #include "ScriptedGossip.h" +#include "ObjectAccessor.h" #include "Player.h" +#include "SpellAuraEffects.h" +#include "SpellScript.h" enum Says { - SAY_LINE1 = 0, - SAY_LINE2 = 1, - SAY_LINE3 = 2, - SAY_HALFLIFE = 3, - SAY_KILLTARGET = 4 + SAY_LINE1 = 0, + SAY_LINE2 = 1, + SAY_LINE3 = 2, + SAY_HALFLIFE = 3, + SAY_KILLTARGET = 4 }; enum Gossip { - GOSSIP_ID = 21334, + GOSSIP_ID = 21334, }; enum Spells { - SPELL_ESSENCEOFTHERED = 23513, - SPELL_FLAMEBREATH = 23461, - SPELL_FIRENOVA = 23462, - SPELL_TAILSWIPE = 15847, - SPELL_BURNINGADRENALINE = 23620, - SPELL_CLEAVE = 20684 //Chain cleave is most likely named something different and contains a dummy effect + SPELL_ESSENCEOFTHERED = 23513, + SPELL_FLAMEBREATH = 23461, + SPELL_FIRENOVA = 23462, + SPELL_TAILSWIPE = 15847, + SPELL_BURNINGADRENALINE = 18173, //Cast this one. It's what 3.3.5 DBM expects. + SPELL_BURNINGADRENALINE_EXPLOSION = 23478, + SPELL_CLEAVE = 19983 //Chain cleave is most likely named something different and contains a dummy effect }; enum Events { - EVENT_SPEECH_1 = 1, - EVENT_SPEECH_2 = 2, - EVENT_SPEECH_3 = 3, - EVENT_SPEECH_4 = 4, - EVENT_ESSENCEOFTHERED = 5, - EVENT_FLAMEBREATH = 6, - EVENT_FIRENOVA = 7, - EVENT_TAILSWIPE = 8, - EVENT_CLEAVE = 9, - EVENT_BURNINGADRENALINE_CASTER = 10, - EVENT_BURNINGADRENALINE_TANK = 11 + EVENT_SPEECH_1 = 1, + EVENT_SPEECH_2 = 2, + EVENT_SPEECH_3 = 3, + EVENT_SPEECH_4 = 4, + EVENT_ESSENCEOFTHERED = 5, + EVENT_FLAMEBREATH = 6, + EVENT_FIRENOVA = 7, + EVENT_TAILSWIPE = 8, + EVENT_CLEAVE = 9, + EVENT_BURNINGADRENALINE_CASTER = 10, + EVENT_BURNINGADRENALINE_TANK = 11 }; class boss_vaelastrasz : public CreatureScript @@ -116,27 +120,27 @@ public: { switch (eventId) { - case EVENT_SPEECH_1: - Talk(SAY_LINE1); - me->SetStandState(UNIT_STAND_STATE_STAND); - me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); - events.ScheduleEvent(EVENT_SPEECH_2, 12000); - break; - case EVENT_SPEECH_2: - Talk(SAY_LINE2); - me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); - events.ScheduleEvent(EVENT_SPEECH_3, 12000); - break; - case EVENT_SPEECH_3: - Talk(SAY_LINE3); - me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); - events.ScheduleEvent(EVENT_SPEECH_4, 16000); - break; - case EVENT_SPEECH_4: - me->setFaction(103); + case EVENT_SPEECH_1: + Talk(SAY_LINE1); + me->SetStandState(UNIT_STAND_STATE_STAND); + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + events.ScheduleEvent(EVENT_SPEECH_2, 12000); + break; + case EVENT_SPEECH_2: + Talk(SAY_LINE2); + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + events.ScheduleEvent(EVENT_SPEECH_3, 12000); + break; + case EVENT_SPEECH_3: + Talk(SAY_LINE3); + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + events.ScheduleEvent(EVENT_SPEECH_4, 16000); + break; + case EVENT_SPEECH_4: + me->setFaction(103); if (PlayerGUID && ObjectAccessor::GetUnit(*me, PlayerGUID)) AttackStart(ObjectAccessor::GetUnit(*me, PlayerGUID));; - break; + break; } } return; @@ -149,49 +153,47 @@ public: { switch (eventId) { - case EVENT_CLEAVE: - events.ScheduleEvent(EVENT_CLEAVE, 15000); - DoCastVictim(SPELL_CLEAVE); - break; - case EVENT_FLAMEBREATH: - DoCastVictim(SPELL_FLAMEBREATH); - events.ScheduleEvent(EVENT_FLAMEBREATH, urand(8000, 14000)); - break; - case EVENT_FIRENOVA: - DoCastVictim(SPELL_FIRENOVA); - events.ScheduleEvent(EVENT_FIRENOVA, 15000); - break; - case EVENT_TAILSWIPE: - //Only cast if we are behind - /*if (!me->HasInArc(M_PI, me->GetVictim())) - { - DoCast(me->GetVictim(), SPELL_TAILSWIPE); - }*/ - events.ScheduleEvent(EVENT_TAILSWIPE, 15000); - break; - case EVENT_BURNINGADRENALINE_CASTER: - { - Unit* target = nullptr; - - uint8 i = 0; - while (i < 3) // max 3 tries to get a random target with power_mana - { - ++i; - target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true); // not aggro leader - if (target && target->getPowerType() == POWER_MANA) - i = 3; - } - if (target) // cast on self (see below) - target->CastSpell(target, SPELL_BURNINGADRENALINE, true); - } - events.ScheduleEvent(EVENT_BURNINGADRENALINE_CASTER, 15000); - break; - case EVENT_BURNINGADRENALINE_TANK: - // have the victim cast the spell on himself otherwise the third effect aura will be applied to Vael instead of the player - me->GetVictim()->CastSpell(me->GetVictim(), SPELL_BURNINGADRENALINE, true); - events.ScheduleEvent(EVENT_BURNINGADRENALINE_TANK, 45000); - break; + case EVENT_CLEAVE: + events.ScheduleEvent(EVENT_CLEAVE, 15000); + DoCastVictim(SPELL_CLEAVE); + break; + case EVENT_FLAMEBREATH: + DoCastVictim(SPELL_FLAMEBREATH); + events.ScheduleEvent(EVENT_FLAMEBREATH, urand(8000, 14000)); + break; + case EVENT_FIRENOVA: + DoCastVictim(SPELL_FIRENOVA); + events.ScheduleEvent(EVENT_FIRENOVA, 15000); + break; + case EVENT_TAILSWIPE: + //Only cast if we are behind + /*if (!me->HasInArc(M_PI, me->GetVictim())) + { + DoCast(me->GetVictim(), SPELL_TAILSWIPE); + }*/ + events.ScheduleEvent(EVENT_TAILSWIPE, 15000); + break; + case EVENT_BURNINGADRENALINE_CASTER: + { + //selects a random target that isn't the current victim and is a mana user (selects mana users) but not pets + //it also ignores targets who have the aura. We don't want to place the debuff on the same target twice. + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, [&](Unit* u) { return u && !u->IsPet() && u->getPowerType() == POWER_MANA && !u->HasAura(SPELL_BURNINGADRENALINE); })) + { + me->CastSpell(target, SPELL_BURNINGADRENALINE, true); + } } + //reschedule the event + events.ScheduleEvent(EVENT_BURNINGADRENALINE_CASTER, 15000); + break; + case EVENT_BURNINGADRENALINE_TANK: + //Vael has to cast it himself; contrary to the previous commit's comment. Nothing happens otherwise. + me->CastSpell(me->GetVictim(), SPELL_BURNINGADRENALINE, true); + events.ScheduleEvent(EVENT_BURNINGADRENALINE_TANK, 45000); + break; + } + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; } // Yell if hp lower than 15% @@ -224,7 +226,40 @@ public: } }; + +//Need to define an aurascript for EVENT_BURNINGADRENALINE's death effect. +// 18173 - Burning Adrenaline +class spell_vael_burning_adrenaline : public SpellScriptLoader +{ +public: + spell_vael_burning_adrenaline() : SpellScriptLoader("spell_vael_burning_adrenaline") { } + + class spell_vael_burning_adrenaline_AuraScript : public AuraScript + { + PrepareAuraScript(spell_vael_burning_adrenaline_AuraScript); + + void OnAuraRemoveHandler(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + //The tooltip says the on death the AoE occurs. According to information: http://qaliaresponse.stage.lithium.com/t5/WoW-Mayhem/Surviving-Burning-Adrenaline-For-tanks/td-p/48609 + //Burning Adrenaline can be survived therefore Blizzard's implementation was an AoE bomb that went off if you were still alive and dealt + //damage to the target. You don't have to die for it to go off. It can go off whether you live or die. + GetTarget()->CastSpell(GetTarget(), SPELL_BURNINGADRENALINE_EXPLOSION, true); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_vael_burning_adrenaline_AuraScript::OnAuraRemoveHandler, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_vael_burning_adrenaline_AuraScript(); + } +}; + void AddSC_boss_vaelastrasz() { new boss_vaelastrasz(); + new spell_vael_burning_adrenaline(); }