Scripts/BoT: initial work on Theralion and Valiona

Todo:
*Valiona's Deep Breath mechanic and phase switch
*Twilight Realm hostiles
*Heroic abilities
This commit is contained in:
Ovahlord
2018-05-12 23:13:04 +02:00
parent 33977a65b7
commit a659a8fa2d
8 changed files with 1494 additions and 50 deletions

View File

@@ -0,0 +1,122 @@
-- Template Updates
-- Theralion
UPDATE `creature_template` SET `ScriptName`= 'boss_theralion', `flags_extra`= 512 WHERE `entry`= 45993;
UPDATE `creature_template` SET `DamageModifier`= 80, `flags_extra`= 512 WHERE `entry` IN (45993);
-- Valiona
UPDATE `creature_template` SET `ScriptName`= 'boss_valiona', `flags_extra`= 512 WHERE `entry`= 45992;
UPDATE `creature_template` SET `DamageModifier`= 80, `flags_extra`= 512 WHERE `entry` IN (45992);
-- Valiona (Fire Dummy)
UPDATE `creature_template` SET `flags_extra`= 128 WHERE `entry`= 46147;
-- Theralion Flight Target Stalker
UPDATE `creature_template` SET `InhabitType`= 4, `flags_extra`= 128 WHERE `entry`= 46364;
-- Convective Flames
UPDATE `creature_template` SET `unit_flags`= 33554432, `flags_extra`= 128, `InhabitType`= 13 WHERE `entry`= 46588;
-- Dazzling Destruction Stalker
UPDATE `creature_template` SET `unit_flags`= 33554432, `flags_extra`= 128, `InhabitType`= 13 WHERE `entry`= 46374;
-- Fabolous Flames
UPDATE `creature_template` SET `unit_flags`= 33554432, `flags_extra`= 128, `InhabitType`= 13 WHERE `entry`= 46448;
-- Template Addon
DELETE FROM `creature_template_addon` WHERE `entry` IN (46374, 46448);
INSERT INTO `creature_template_addon` (`entry`, `auras`) VALUES
(46374, '86383'),
(46448, '86506');
-- Areatriggers
DELETE FROM `areatrigger_scripts` WHERE `entry`= 6442;
INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES
(6442, 'at_theralion_and_valiona_intro');
-- Correct Phasing for Theralion and Valiona
UPDATE `creature` SET `PhaseId`= 0, `PhaseGroup`= 525 WHERE `id` IN (45992, 45993);
-- Creature Texts
DELETE FROM `creature_text` WHERE `CreatureID` IN (43324, 45992, 45993);
-- Cho'Gall
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `comment`) VALUES
(43324, 0, 0, 'Valiona, Theralion, put them in their place.', 14, 0, 100, 0, 0, 22063, 47518, 'Cho''gall - Theralion and Valiona Intro'),
(43324, 1, 0, '(Come closer, closer. Let us see your faces. All will be humbled before his power.)', 14, 0, 100, 0, 0, 22064, 47538, 'Cho''gall - Theralion and Valiona Death'),
-- Valiona
(45992, 0, 0, 'Do as the master commands, Theralion! Kill them!', 14, 0, 100, 0, 0, 21894, 47523, 'Valiona - Intro 1'),
(45992, 1, 0, 'You are worthless, Theralion!', 14, 0, 100, 0, 0, 21895, 47524, 'Valiona - Intro 2'),
(45992, 2, 0, '|TInterface\\Icons\\spell_fire_twilightnova.blp:20|t%s casts |cFFFF0000|Hspell:86788|h[Blackout]|h|r!', 41, 0, 100, 0, 0, 0, 47624, 'Valiona'),
(45992, 3, 0, '|TInterface\\Icons\\spell_fire_twilightfire.blp:20|t%s takes a |cFFFF0000|Hspell:86059|h[Deep Breath]|h|r!', 41, 0, 100, 0, 0, 21898, 46712, 'Valiona to Breath Flight Target Stalker'),
(45992, 4, 0, 'Theralion, I will engulf the hallway. Cover their escape!', 14, 0, 100, 0, 0, 21898, 47961, 'Valiona to Breath Flight Target Stalker'),
(45992, 5, 0, 'At least... Theralion dies with me...', 14, 0, 100, 0, 0, 21897, 47960, 'Valiona to Player'),
-- Theralion
(45993, 0, 0, 'The master was clearly speaking to you, Valiona. I am far too busy to attack ANYONE.', 14, 0, 100, 0, 0, 20300, 47521, 'Theralion - Intro 1'),
(45993, 1, 0, 'How dare you call me worthless! You will see why I am mother''s favored child!', 14, 0, 100, 0, 0, 20301, 47522, 'Theralion - Intro 2'),
(45993, 2, 0, 'You are not the boss of me, Valiona! I will engulf as I please!', 14, 0, 100, 0, 0, 20304, 47911, 'Theralion to Theralion Flight Target Stalker'),
(45993, 3, 0, '|TInterface\\Icons\\spell_fire_twilightpyroblast.blp:20|t%s begins to cast |cFF00EEFF|Hspell:86408|h[Dazzling Destruction]|h|r!', 41, 0, 100, 0, 0, 0, 46714, 'Theralion to Theralion Flight Target Stalker'),
(45993, 4, 0, '|TInterface\\Icons\\spell_holy_consumemagic.blp:20|t%s begins to cast |cFF00EEFF|Hspell:86622|h[Engulfing Magic]|h|r!', 41, 0, 100, 0, 0, 0, 46713, 'Theralion'),
(45993, 5, 0, 'WRITHE IN AGONY!', 14, 0, 100, 0, 0, 20306, 47913, 'Theralion to Valiona');
-- Spells
DELETE FROM `spell_script_names` WHERE `ScriptName` IN
('spell_valiona_blackout_dummy',
'spell_valiona_blackout',
'spell_valiona_devouring_flames_targeting',
'spell_valiona_devouring_flames',
'spell_valiona_twilight_meteorite_targeting',
'spell_theralion_dazzling_destruction_targeting',
'spell_theralion_dazzling_destruction_dummy',
'spell_theralion_dazzling_destruction',
'spell_theralion_dazzling_destruction_twilight_realm',
'spell_theralion_twilight_shift',
'spell_theralion_fabulous_flames_targeting',
'spell_theralion_engulfing_magic_targeting',
'spell_theralion_engulfing_magic');
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(86673, 'spell_valiona_blackout_dummy'),
(86788, 'spell_valiona_blackout'),
(92876, 'spell_valiona_blackout'),
(92877, 'spell_valiona_blackout'),
(92878, 'spell_valiona_blackout'),
(86832, 'spell_valiona_devouring_flames_targeting'),
(86844, 'spell_valiona_devouring_flames'),
(92872, 'spell_valiona_devouring_flames'),
(92873, 'spell_valiona_devouring_flames'),
(92874, 'spell_valiona_devouring_flames'),
(88518, 'spell_valiona_twilight_meteorite_targeting'),
(86380, 'spell_theralion_dazzling_destruction_targeting'),
(92923, 'spell_theralion_dazzling_destruction_targeting'),
(92924, 'spell_theralion_dazzling_destruction_targeting'),
(92925, 'spell_theralion_dazzling_destruction_targeting'),
(86408, 'spell_theralion_dazzling_destruction_dummy'),
(86406, 'spell_theralion_dazzling_destruction'),
(92926, 'spell_theralion_dazzling_destruction'),
(92927, 'spell_theralion_dazzling_destruction'),
(92928, 'spell_theralion_dazzling_destruction'),
(93063, 'spell_theralion_dazzling_destruction_twilight_realm'),
(88436, 'spell_theralion_twilight_shift'),
(92892, 'spell_theralion_twilight_shift'),
(92893, 'spell_theralion_twilight_shift'),
(92894, 'spell_theralion_twilight_shift'),
(86495, 'spell_theralion_fabulous_flames_targeting'),
(86607, 'spell_theralion_engulfing_magic_targeting'),
(92912, 'spell_theralion_engulfing_magic_targeting'),
(92913, 'spell_theralion_engulfing_magic_targeting'),
(92914, 'spell_theralion_engulfing_magic_targeting'),
(86622, 'spell_theralion_engulfing_magic'),
(95639, 'spell_theralion_engulfing_magic'),
(95640, 'spell_theralion_engulfing_magic'),
(95641, 'spell_theralion_engulfing_magic');
-- Conditions
DELETE FROM `conditions` WHERE `SourceEntry` IN (90346, 90345, 86840, 86379, 86408, 86406, 92926, 92927, 92928) AND `SourceTypeOrReferenceId`= 13;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ScriptName`, `Comment`) VALUES
(13, 1, 90346, 0, 0, 31, 0, 3, 45992, 0, 0, 0, '', 'Share Health - Target Valiona'),
(13, 1, 90345, 0, 0, 31, 0, 3, 45993, 0, 0, 0, '', 'Share Health - Target Theralion'),
(13, 1, 86840, 0, 0, 31, 0, 3, 46588, 0, 0, 0, '', 'Devouring Flames - Target Convective Flames'),
(13, 1, 86379, 0, 0, 31, 0, 3, 46364, 0, 0, 0, '', 'Dazzling Destruction - Target Theralion Flight Target Stalker'),
(13, 1, 86408, 0, 0, 31, 0, 3, 46374, 0, 0, 0, '', 'Dazzling Destruction - Target Dazzling Destruction Stalker'),
(13, 2, 86406, 0, 0, 31, 0, 3, 46374, 0, 0, 0, '', 'Dazzling Destruction - Target Dazzling Destruction Stalker'),
(13, 2, 92926, 0, 0, 31, 0, 3, 46374, 0, 0, 0, '', 'Dazzling Destruction - Target Dazzling Destruction Stalker'),
(13, 2, 92927, 0, 0, 31, 0, 3, 46374, 0, 0, 0, '', 'Dazzling Destruction - Target Dazzling Destruction Stalker'),
(13, 2, 92928, 0, 0, 31, 0, 3, 46374, 0, 0, 0, '', 'Dazzling Destruction - Target Dazzling Destruction Stalker');
-- Spell Procs
DELETE FROM `spell_proc` WHERE `SpellId`= -86622;
INSERT INTO `spell_proc` (`SpellId`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `AttributesMask`) VALUES
(-86622, 0x00055554, 1 | 2, 2, 0, 32);

View File

@@ -1671,10 +1671,6 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float &z) const
if (z < ground_z)
z = ground_z;
}
// Creatures that are simulating flight effects or actual flight should use HoverHeight
if ((ToUnit() && (ToUnit()->IsFlying() || ToUnit()->IsHovering() || ToUnit()->IsLevitating())) && !ToUnit()->IsUnderWater())
z += GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
break;
}
case TYPEID_PLAYER:

View File

@@ -4185,6 +4185,34 @@ void SpellMgr::LoadSpellInfoCorrections()
// ENDOF THE VORTEX PINNACLE SPELLS
//
// BASTION OF TWILIGHT SPELLS
//
// Theralion and Valiona
// Blackout
ApplySpellFix({
86825,
92879,
92880,
92881
}, [](SpellInfo* spellInfo)
{
spellInfo->AttributesCu |= SPELL_ATTR0_CU_SHARE_DAMAGE;
});
// Twilight Meteorite
ApplySpellFix({
86013,
92859,
92860,
92861
}, [](SpellInfo* spellInfo)
{
spellInfo->AttributesCu |= SPELL_ATTR0_CU_SHARE_DAMAGE;
});
// ENDOF BASTION OF TWILIGHT
//
// DEADMINES SPELLS
//

View File

@@ -0,0 +1,44 @@
/*
* Copyright (C) 2008-2018 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 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 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 "ObjectMgr.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "Player.h"
#include "bastion_of_twilight.h"
class at_theralion_and_valiona_intro : public AreaTriggerScript
{
public:
at_theralion_and_valiona_intro() : AreaTriggerScript("at_theralion_and_valiona_intro") { }
bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/)
{
if (InstanceScript* instance = player->GetInstanceScript())
instance->SetData(DATA_AT_THERALION_AND_VALIONA_INTRO, IN_PROGRESS);
return true;
}
};
void AddSC_bastion_of_twilight()
{
new at_theralion_and_valiona_intro();
}

View File

@@ -27,31 +27,37 @@ uint32 const EncounterCountHeroic = 5;
enum BoTDataTypes
{
// Encounter Types
DATA_HALFUS_WYRMBREAKER = 0,
DATA_THERALION_AND_VALIONA = 1,
DATA_ASCENDANT_COUNCIL = 2,
DATA_CHOGALL = 3,
DATA_SINESTRA = 4,
DATA_HALFUS_WYRMBREAKER = 0,
DATA_THERALION_AND_VALIONA = 1,
DATA_ASCENDANT_COUNCIL = 2,
DATA_CHOGALL = 3,
DATA_SINESTRA = 4,
// Creature Types
DATA_PROTO_BEHEMOTH = 5,
DATA_THERALION = 6,
DATA_VALIONA = 7,
DATA_IGNACIOUS = 8,
DATA_FELUDIUS = 9,
DATA_TERRASTRA = 10,
DATA_ARION = 11,
DATA_ELEMENTIUM_MONSTROSITY = 12,
DATA_PROTO_BEHEMOTH = 5,
DATA_THERALION = 6,
DATA_VALIONA = 7,
DATA_IGNACIOUS = 8,
DATA_FELUDIUS = 9,
DATA_TERRASTRA = 10,
DATA_ARION = 11,
DATA_ELEMENTIUM_MONSTROSITY = 12,
// GameObject Types
DATA_WHELP_CAGE = 13,
DATA_WHELP_CAGE = 13,
// Areatriggers
DATA_AT_HALFUS_INTRO = 14,
DATA_AT_THERALION_AND_VALIONA_INTRO = 15,
// Encounter Related
/*Halfus Wyrmbreaker*/
DATA_UNRESPONSIVE_DRAGON_FIRST,
DATA_UNRESPONSIVE_DRAGON_SECOND,
DATA_CAST_DRAGON_BUFFS,
DATA_OPEN_ORPHANED_EMERALD_WHELP_CAGE
DATA_OPEN_ORPHANED_EMERALD_WHELP_CAGE,
/*Theralion and Valiona*/
};
enum BoTDataStates
@@ -60,36 +66,48 @@ enum BoTDataStates
DRAGON_BUFFS_PROTO_BEHEMOTH,
};
enum BoTAreatriggerIndex
{
AT_INDEX_HALFUS_WYRMBREAKER_INTRO = 1,
AT_INDEX_THERALION_AND_VALIONA_INTRO = 2
};
enum BoTCreatures
{
// Bosses
BOSS_HALFUS_WYRMBREAKER = 44600,
BOSS_THERALION = 45993,
BOSS_VALIONA = 45992,
BOSS_IGNACIOUS = 43686,
BOSS_FELUDIUS = 43687,
BOSS_TERRASTRA = 43689,
BOSS_ARION = 43688,
BOSS_ELEMENTIUM_MONSTROSITY = 43735,
BOSS_CHOGALL = 43324,
BOSS_SINESTRA = 45213,
BOSS_HALFUS_WYRMBREAKER = 44600,
BOSS_THERALION = 45993,
BOSS_VALIONA = 45992,
BOSS_IGNACIOUS = 43686,
BOSS_FELUDIUS = 43687,
BOSS_TERRASTRA = 43689,
BOSS_ARION = 43688,
BOSS_ELEMENTIUM_MONSTROSITY = 43735,
BOSS_CHOGALL = 43324,
BOSS_SINESTRA = 45213,
// Encounter related
/*Halfus Wyrmbreaker*/
NPC_PROTO_BEHEMOTH = 44687,
NPC_NETHER_SCION = 44645,
NPC_NETHER_SCION_ENCOUNTER = 44828,
NPC_SLATE_DRAGON = 44652,
NPC_SLATE_DRAGON_ENCOUNTER = 44829,
NPC_STORM_RIDER = 44650,
NPC_STORM_RIDER_ENCOUNTER = 44826,
NPC_TIME_WARDEN = 44797,
NPC_TIME_WARDEN_ENCOUNTER = 44653,
NPC_ORPHANED_EMERALD_WELP = 44641,
NPC_SPIKE = 44765,
NPC_PROTO_BEHEMOTH = 44687,
NPC_NETHER_SCION = 44645,
NPC_NETHER_SCION_ENCOUNTER = 44828,
NPC_SLATE_DRAGON = 44652,
NPC_SLATE_DRAGON_ENCOUNTER = 44829,
NPC_STORM_RIDER = 44650,
NPC_STORM_RIDER_ENCOUNTER = 44826,
NPC_TIME_WARDEN = 44797,
NPC_TIME_WARDEN_ENCOUNTER = 44653,
NPC_ORPHANED_EMERALD_WELP = 44641,
NPC_SPIKE = 44765,
/*Theralion and Valiona*/
NPC_THERALION_FLIGHT_TARGET_STALKER = 46364,
NPC_CONVECTIVE_FLAMES = 46588,
NPC_DAZZLING_DESTRUCTION_STALKER = 46374,
NPC_FABULOUS_FLAMES = 46448,
// Generic Creatures
NPC_INVISIBLE_STALKER = 42098
NPC_INVISIBLE_STALKER = 42098
};
enum BoTGameObjects
@@ -106,13 +124,23 @@ enum BoTGameObjects
enum BoTActions
{
ACTION_ENABLE_MALEVOLENT_STRIKES = 1,
ACTION_ENABLE_FRENZIED_ASSAULT = 2,
ACTION_ENABLE_SHADOW_NOVA = 3,
ACTION_ENABLE_FIREBALL_BARRAGE = 1,
ACTION_ENABLE_SCORCHING_BREATH = 2,
ACTION_CAST_DRAGONS_VENGEANCE = 3,
ACTION_MOVE_OUT_OF_CAGE = 4
// Halfus Wyrmbreaker
ACTION_ENABLE_MALEVOLENT_STRIKES = 1,
ACTION_ENABLE_FRENZIED_ASSAULT = 2,
ACTION_ENABLE_SHADOW_NOVA = 3,
ACTION_ENABLE_FIREBALL_BARRAGE = 1,
ACTION_ENABLE_SCORCHING_BREATH = 2,
ACTION_CAST_DRAGONS_VENGEANCE = 3,
ACTION_MOVE_OUT_OF_CAGE = 4,
// Theralion and Valiona
ACTION_START_ARGUMENT_INTRO = 1,
// Cho'Gall (Non-Boss version)
ACTION_TALK_INTRO_HALFUS_WYRMBREAKER = 1,
// Cho'Gall (Boss)
ACTION_TALK_INTRO_THERALION_AND_VALIONA = 1
};
enum BoTEvents

View File

@@ -69,6 +69,8 @@ uint32 HalfusDragonEntries[] =
NPC_ORPHANED_EMERALD_WELP
};
Position const BreathFlightTargetStalkerSortPos = { -740.677f, -592.328f, 859.455f };
class instance_bastion_of_twilight : public InstanceMapScript
{
public:
@@ -126,6 +128,15 @@ class instance_bastion_of_twilight : public InstanceMapScript
if (creature->GetPositionZ() < 850.0f)
_dancingFlamesInvisibleStalkerGUIDs.insert(creature->GetGUID());
break;
case NPC_CONVECTIVE_FLAMES:
if (Creature* valiona = GetCreature(DATA_VALIONA))
valiona->AI()->JustSummoned(creature);
break;
case NPC_DAZZLING_DESTRUCTION_STALKER:
case NPC_FABULOUS_FLAMES:
if (Creature* theralion = GetCreature(DATA_THERALION))
theralion->AI()->JustSummoned(creature);
break;
default:
break;
}
@@ -286,6 +297,29 @@ class instance_bastion_of_twilight : public InstanceMapScript
if (orphanedEmeraldWhelp->GetEntry() == NPC_ORPHANED_EMERALD_WELP)
orphanedEmeraldWhelp->AI()->DoAction(ACTION_MOVE_OUT_OF_CAGE);
break;
case DATA_AT_HALFUS_INTRO:
if (_lastAreatriggerIndex < AT_INDEX_HALFUS_WYRMBREAKER_INTRO)
{
_lastAreatriggerIndex = AT_INDEX_HALFUS_WYRMBREAKER_INTRO;
SaveToDB();
}
break;
case DATA_AT_THERALION_AND_VALIONA_INTRO:
if (_lastAreatriggerIndex < AT_INDEX_THERALION_AND_VALIONA_INTRO)
{
if (Creature* chogall = GetCreature(DATA_CHOGALL))
chogall->AI()->DoAction(ACTION_TALK_INTRO_THERALION_AND_VALIONA);
if (Creature* theralion = GetCreature(DATA_THERALION))
theralion->AI()->DoAction(ACTION_START_ARGUMENT_INTRO);
if (Creature* valiona = GetCreature(DATA_VALIONA))
valiona->AI()->DoAction(ACTION_START_ARGUMENT_INTRO);
_lastAreatriggerIndex = AT_INDEX_THERALION_AND_VALIONA_INTRO;
SaveToDB();
}
break;
default:
break;
}

View File

@@ -25,7 +25,9 @@ void AddSC_boss_alizabal(); //Baradin Hold
void AddSC_boss_occuthar();
void AddSC_boss_pit_lord_argaloth();
void AddSC_instance_baradin_hold();
void AddSC_boss_halfus_wyrmbreaker(); //Bastion of Twilight
void AddSC_bastion_of_twilight(); //Bastion of Twilight
void AddSC_boss_halfus_wyrmbreaker();
void AddSC_boss_theralion_and_valiona();
void AddSC_instance_bastion_of_twilight();
void AddSC_boss_romogg_bonecrusher(); //Blackrock Caverns
void AddSC_boss_corla();
@@ -235,7 +237,9 @@ void AddEasternKingdomsScripts()
AddSC_boss_occuthar();
AddSC_boss_pit_lord_argaloth();
AddSC_instance_baradin_hold();
AddSC_boss_halfus_wyrmbreaker(); //Bastion of Twilight
AddSC_bastion_of_twilight(); //Bastion of Twilight
AddSC_boss_halfus_wyrmbreaker();
AddSC_boss_theralion_and_valiona();
AddSC_instance_bastion_of_twilight();
AddSC_boss_romogg_bonecrusher(); //Blackrock Caverns
AddSC_boss_corla();