mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 09:44:45 +01:00
Core/Ulduar:
- Implemented kill credit for hodir and assembly of iron - Some cleanup
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (63573,63766,63716,62030,62166,63347) OR `spellid0` IN (63573,63766,63716,62030,62166,63347);
|
||||
INSERT INTO `spelldifficulty_dbc`(`id`,`spellid0`,`spellid1`) VALUES
|
||||
(63573,63573,64006), -- One-Armed Overhead Smash
|
||||
(63766,63766,63983), -- Arm Sweep
|
||||
(63716,63716,64005), -- Stone Shout
|
||||
(62030,62030,63980), -- Petrifying Breath
|
||||
(62166,62166,64005), -- Stone Grip
|
||||
(63347,63347,63977); -- Focused Eyebeam Periodic
|
||||
@@ -33,6 +33,7 @@ enum AssemblySpells
|
||||
// General
|
||||
SPELL_SUPERCHARGE = 61920,
|
||||
SPELL_BERSERK = 47008, // Hard enrage, don't know the correct ID.
|
||||
SPELL_KILL_CREDIT = 65195, // spell_dbc
|
||||
|
||||
// Steelbreaker
|
||||
SPELL_HIGH_VOLTAGE = 61890,
|
||||
@@ -136,9 +137,7 @@ class boss_steelbreaker : public CreatureScript
|
||||
|
||||
struct boss_steelbreakerAI : public BossAI
|
||||
{
|
||||
boss_steelbreakerAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON)
|
||||
{
|
||||
}
|
||||
boss_steelbreakerAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON) { }
|
||||
|
||||
uint32 phase;
|
||||
|
||||
@@ -185,7 +184,7 @@ class boss_steelbreaker : public CreatureScript
|
||||
|
||||
if (instance->GetBossState(BOSS_ASSEMBLY_OF_IRON) == DONE)
|
||||
{
|
||||
// todo: kill credit
|
||||
DoCastAOE(SPELL_KILL_CREDIT);
|
||||
Talk(SAY_STEELBREAKER_ENCOUNTER_DEFEATED);
|
||||
}
|
||||
else
|
||||
@@ -267,9 +266,7 @@ class boss_runemaster_molgeim : public CreatureScript
|
||||
|
||||
struct boss_runemaster_molgeimAI : public BossAI
|
||||
{
|
||||
boss_runemaster_molgeimAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON)
|
||||
{
|
||||
}
|
||||
boss_runemaster_molgeimAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON) { }
|
||||
|
||||
uint32 phase;
|
||||
|
||||
@@ -295,6 +292,7 @@ class boss_runemaster_molgeim : public CreatureScript
|
||||
switch (action)
|
||||
{
|
||||
case ACTION_SUPERCHARGE:
|
||||
{
|
||||
me->SetFullHealth();
|
||||
me->AddAura(SPELL_SUPERCHARGE, me);
|
||||
events.SetPhase(++phase);
|
||||
@@ -304,7 +302,8 @@ class boss_runemaster_molgeim : public CreatureScript
|
||||
events.RescheduleEvent(EVENT_RUNE_OF_DEATH, 30000);
|
||||
if (phase >= 3)
|
||||
events.RescheduleEvent(EVENT_RUNE_OF_SUMMONING, urand(20000, 30000));
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -314,7 +313,7 @@ class boss_runemaster_molgeim : public CreatureScript
|
||||
|
||||
if (instance->GetBossState(BOSS_ASSEMBLY_OF_IRON) == DONE)
|
||||
{
|
||||
// todo: kill credit
|
||||
DoCastAOE(SPELL_KILL_CREDIT);
|
||||
Talk(SAY_MOLGEIM_ENCOUNTER_DEFEATED);
|
||||
}
|
||||
else
|
||||
@@ -416,9 +415,7 @@ class boss_stormcaller_brundir : public CreatureScript
|
||||
|
||||
struct boss_stormcaller_brundirAI : public BossAI
|
||||
{
|
||||
boss_stormcaller_brundirAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON)
|
||||
{
|
||||
}
|
||||
boss_stormcaller_brundirAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON) { }
|
||||
|
||||
uint32 phase;
|
||||
|
||||
@@ -429,7 +426,7 @@ class boss_stormcaller_brundir : public CreatureScript
|
||||
me->RemoveAllAuras();
|
||||
me->SetDisableGravity(false);
|
||||
me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_INTERRUPT, false); // Should be interruptable unless overridden by spell (Overload)
|
||||
me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, false); // Reset immumity, Brundir should be stunnable by default
|
||||
me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, false); // Reset immumity, Brundir should be stunnable by default
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
@@ -448,6 +445,7 @@ class boss_stormcaller_brundir : public CreatureScript
|
||||
switch (action)
|
||||
{
|
||||
case ACTION_SUPERCHARGE:
|
||||
{
|
||||
me->SetFullHealth();
|
||||
me->AddAura(SPELL_SUPERCHARGE, me);
|
||||
events.SetPhase(++phase);
|
||||
@@ -461,8 +459,8 @@ class boss_stormcaller_brundir : public CreatureScript
|
||||
events.RescheduleEvent(EVENT_LIGHTNING_TENDRILS, urand(50000, 60000));
|
||||
me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, true); // Apply immumity to stuns
|
||||
}
|
||||
break;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -472,7 +470,7 @@ class boss_stormcaller_brundir : public CreatureScript
|
||||
|
||||
if (instance->GetBossState(BOSS_ASSEMBLY_OF_IRON) == DONE)
|
||||
{
|
||||
// todo: kill credit
|
||||
DoCastAOE(SPELL_KILL_CREDIT);
|
||||
Talk(SAY_BRUNDIR_ENCOUNTER_DEFEATED);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -148,7 +148,7 @@ enum FreyaSpells
|
||||
// Attuned To Nature spells
|
||||
SPELL_ATTUNED_TO_NATURE_2_DOSE_REDUCTION = 62524,
|
||||
SPELL_ATTUNED_TO_NATURE_10_DOSE_REDUCTION = 62525,
|
||||
SPELL_ATTUNED_TO_NATURE_25_DOSE_REDUCTION = 62521,
|
||||
SPELL_ATTUNED_TO_NATURE_25_DOSE_REDUCTION = 62521
|
||||
};
|
||||
|
||||
enum FreyaNpcs
|
||||
@@ -166,13 +166,13 @@ enum FreyaNpcs
|
||||
NPC_IRON_ROOTS = 33088,
|
||||
NPC_STRENGTHENED_IRON_ROOTS = 33168,
|
||||
|
||||
OBJECT_NATURE_BOMB = 194902,
|
||||
OBJECT_NATURE_BOMB = 194902
|
||||
};
|
||||
|
||||
enum FreyaActions
|
||||
{
|
||||
ACTION_ELDER_DEATH = 1,
|
||||
ACTION_ELDER_FREYA_KILLED = 2,
|
||||
ACTION_ELDER_FREYA_KILLED = 2
|
||||
};
|
||||
|
||||
enum FreyaEvents
|
||||
@@ -200,13 +200,16 @@ enum FreyaEvents
|
||||
// Elder Brightleaf
|
||||
EVENT_SOLAR_FLARE = 15,
|
||||
EVENT_UNSTABLE_SUN_BEAM = 16,
|
||||
EVENT_FLUX = 17,
|
||||
EVENT_FLUX = 17
|
||||
};
|
||||
|
||||
#define WAVE_TIME 60000 // Normal wave is one minute
|
||||
#define TIME_DIFFERENCE 10000 // If difference between waveTime and WAVE_TIME is bigger then TIME_DIFFERENCE, schedule EVENT_WAVE in 10 seconds
|
||||
#define DATA_GETTING_BACK_TO_NATURE 1
|
||||
#define DATA_KNOCK_ON_WOOD 2
|
||||
enum Misc
|
||||
{
|
||||
WAVE_TIME = 60000, // Normal wave is one minute
|
||||
TIME_DIFFERENCE = 10000, // If difference between waveTime and WAVE_TIME is bigger then TIME_DIFFERENCE, schedule EVENT_WAVE in 10 seconds
|
||||
DATA_GETTING_BACK_TO_NATURE = 1,
|
||||
DATA_KNOCK_ON_WOOD = 2
|
||||
};
|
||||
|
||||
class npc_iron_roots : public CreatureScript
|
||||
{
|
||||
@@ -262,9 +265,7 @@ class boss_freya : public CreatureScript
|
||||
|
||||
struct boss_freyaAI : public BossAI
|
||||
{
|
||||
boss_freyaAI(Creature* creature) : BossAI(creature, BOSS_FREYA)
|
||||
{
|
||||
}
|
||||
boss_freyaAI(Creature* creature) : BossAI(creature, BOSS_FREYA) { }
|
||||
|
||||
uint64 ElementalGUID[3][2];
|
||||
|
||||
@@ -1519,19 +1520,17 @@ class npc_unstable_sun_beam : public CreatureScript
|
||||
class spell_freya_attuned_to_nature_dose_reduction : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_freya_attuned_to_nature_dose_reduction() : SpellScriptLoader("spell_freya_attuned_to_nature_dose_reduction")
|
||||
{
|
||||
}
|
||||
spell_freya_attuned_to_nature_dose_reduction() : SpellScriptLoader("spell_freya_attuned_to_nature_dose_reduction") { }
|
||||
|
||||
class spell_freya_attuned_to_nature_dose_reduction_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_freya_attuned_to_nature_dose_reduction_SpellScript)
|
||||
PrepareSpellScript(spell_freya_attuned_to_nature_dose_reduction_SpellScript);
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
Unit* target = GetHitUnit();
|
||||
SpellInfo const* spellInfo = GetSpellInfo();
|
||||
switch (spellInfo->Id)
|
||||
|
||||
switch (GetSpellInfo()->Id)
|
||||
{
|
||||
case SPELL_ATTUNED_TO_NATURE_2_DOSE_REDUCTION:
|
||||
if (target->HasAura(GetEffectValue()))
|
||||
@@ -1568,9 +1567,7 @@ class spell_freya_attuned_to_nature_dose_reduction : public SpellScriptLoader
|
||||
class spell_freya_iron_roots : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_freya_iron_roots() : SpellScriptLoader("spell_freya_iron_roots")
|
||||
{
|
||||
}
|
||||
spell_freya_iron_roots() : SpellScriptLoader("spell_freya_iron_roots") { }
|
||||
|
||||
class spell_freya_iron_roots_SpellScript : public SpellScript
|
||||
{
|
||||
@@ -1603,80 +1600,44 @@ class spell_freya_iron_roots : public SpellScriptLoader
|
||||
class achievement_getting_back_to_nature : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_getting_back_to_nature() : AchievementCriteriaScript("achievement_getting_back_to_nature")
|
||||
{
|
||||
}
|
||||
achievement_getting_back_to_nature() : AchievementCriteriaScript("achievement_getting_back_to_nature") { }
|
||||
|
||||
bool OnCheck(Player* /*player*/, Unit* target)
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (Creature* Freya = target->ToCreature())
|
||||
if (Freya->AI()->GetData(DATA_GETTING_BACK_TO_NATURE) >= 25)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return target && target->GetAI()->GetData(DATA_GETTING_BACK_TO_NATURE) >= 25;
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_knock_on_wood : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_knock_on_wood() : AchievementCriteriaScript("achievement_knock_on_wood")
|
||||
{
|
||||
}
|
||||
achievement_knock_on_wood() : AchievementCriteriaScript("achievement_knock_on_wood") { }
|
||||
|
||||
bool OnCheck(Player* /*player*/, Unit* target)
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (Creature* Freya = target->ToCreature())
|
||||
if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) >= 1)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) >= 1;
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_knock_knock_on_wood : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_on_wood")
|
||||
{
|
||||
}
|
||||
achievement_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_on_wood") { }
|
||||
|
||||
bool OnCheck(Player* /*player*/, Unit* target)
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (Creature* Freya = target->ToCreature())
|
||||
if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) >= 2)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) >= 2;
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_knock_knock_knock_on_wood : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_knock_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_knock_on_wood")
|
||||
{
|
||||
}
|
||||
achievement_knock_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_knock_on_wood") { }
|
||||
|
||||
bool OnCheck(Player* /*player*/, Unit* target)
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (Creature* Freya = target->ToCreature())
|
||||
if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) == 3)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) == 3;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -67,6 +67,8 @@ enum HodirSpells
|
||||
SPELL_ICE_SHARD = 62457,
|
||||
SPELL_ICE_SHARD_HIT = 65370,
|
||||
|
||||
SPELL_KILL_CREDIT = 64899,
|
||||
|
||||
// Druids
|
||||
SPELL_WRATH = 62793,
|
||||
SPELL_STARLIGHT = 62807,
|
||||
@@ -373,6 +375,8 @@ class boss_hodir : public CreatureScript
|
||||
me->setFaction(35);
|
||||
me->DespawnOrUnsummon(10000);
|
||||
|
||||
DoCastAOE(SPELL_KILL_CREDIT);
|
||||
|
||||
_JustDied();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,34 +30,40 @@ SDComment: TODO: Achievements
|
||||
SDCategory: Ulduar
|
||||
EndScriptData */
|
||||
|
||||
#define SPELL_ARM_DEAD_DAMAGE RAID_MODE(63629, 63979)
|
||||
#define SPELL_TWO_ARM_SMASH RAID_MODE(63356, 64003)
|
||||
#define SPELL_ONE_ARM_SMASH RAID_MODE(63573, 64006)
|
||||
#define SPELL_ARM_SWEEP RAID_MODE(63766, 63983)
|
||||
#define SPELL_STONE_SHOUT RAID_MODE(63716, 64005)
|
||||
#define SPELL_PETRIFY_BREATH RAID_MODE(62030, 63980)
|
||||
#define SPELL_STONE_GRIP RAID_MODE(62166, 63981)
|
||||
#define SPELL_STONE_GRIP_CANCEL 65594
|
||||
#define SPELL_SUMMON_RUBBLE 63633
|
||||
#define SPELL_FALLING_RUBBLE 63821
|
||||
#define SPELL_ARM_ENTER_VEHICLE 65343
|
||||
#define SPELL_ARM_ENTER_VISUAL 64753
|
||||
enum Spells
|
||||
{
|
||||
SPELL_ARM_DEAD_DAMAGE = 63629,
|
||||
SPELL_TWO_ARM_SMASH = 63356,
|
||||
SPELL_ONE_ARM_SMASH = 63573,
|
||||
SPELL_ARM_SWEEP = 63766,
|
||||
SPELL_STONE_SHOUT = 63716,
|
||||
SPELL_PETRIFY_BREATH = 62030,
|
||||
SPELL_STONE_GRIP = 62166,
|
||||
SPELL_STONE_GRIP_CANCEL = 65594,
|
||||
SPELL_SUMMON_RUBBLE = 63633,
|
||||
SPELL_FALLING_RUBBLE = 63821,
|
||||
SPELL_ARM_ENTER_VEHICLE = 65343,
|
||||
SPELL_ARM_ENTER_VISUAL = 64753,
|
||||
|
||||
#define SPELL_SUMMON_FOCUSED_EYEBEAM 63342
|
||||
#define SPELL_FOCUSED_EYEBEAM_PERIODIC RAID_MODE(63347, 63977)
|
||||
#define SPELL_FOCUSED_EYEBEAM_VISUAL 63369
|
||||
#define SPELL_FOCUSED_EYEBEAM_VISUAL_LEFT 63676
|
||||
#define SPELL_FOCUSED_EYEBEAM_VISUAL_RIGHT 63702
|
||||
SPELL_SUMMON_FOCUSED_EYEBEAM = 63342,
|
||||
SPELL_FOCUSED_EYEBEAM_PERIODIC = 63347,
|
||||
SPELL_FOCUSED_EYEBEAM_VISUAL = 63369,
|
||||
SPELL_FOCUSED_EYEBEAM_VISUAL_LEFT = 63676,
|
||||
SPELL_FOCUSED_EYEBEAM_VISUAL_RIGHT = 63702,
|
||||
|
||||
// Passive
|
||||
#define SPELL_KOLOGARN_REDUCE_PARRY 64651
|
||||
#define SPELL_KOLOGARN_PACIFY 63726
|
||||
#define SPELL_KOLOGARN_UNK_0 65219 // Not found in DBC
|
||||
// Passive
|
||||
SPELL_KOLOGARN_REDUCE_PARRY = 64651,
|
||||
SPELL_KOLOGARN_PACIFY = 63726,
|
||||
SPELL_KOLOGARN_UNK_0 = 65219, // Not found in DBC
|
||||
|
||||
#define SPELL_BERSERK 47008 // guess
|
||||
SPELL_BERSERK = 47008 // guess
|
||||
};
|
||||
|
||||
#define NPC_RUBBLE_STALKER 33809
|
||||
#define NPC_ARM_SWEEP_STALKER 33661
|
||||
enum NPCs
|
||||
{
|
||||
NPC_RUBBLE_STALKER = 33809,
|
||||
NPC_ARM_SWEEP_STALKER = 33661
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
@@ -295,8 +301,8 @@ class boss_kologarn : public CreatureScript
|
||||
Talk(EMOTE_STONE_GRIP);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_STONE_GRIP, 25 * IN_MILLISECONDS);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EVENT_FOCUSED_EYEBEAM:
|
||||
if (Unit* eyebeamTargetUnit = SelectTarget(SELECT_TARGET_FARTHEST, 0, 0, true))
|
||||
{
|
||||
@@ -406,12 +412,12 @@ class spell_ulduar_stone_grip_cast_target : public SpellScriptLoader
|
||||
}
|
||||
|
||||
// For subsequent effects
|
||||
m_unitList = unitList;
|
||||
_unitList = unitList;
|
||||
}
|
||||
|
||||
void FillTargetsSubsequential(std::list<WorldObject*>& unitList)
|
||||
{
|
||||
unitList = m_unitList;
|
||||
unitList = _unitList;
|
||||
}
|
||||
|
||||
void Register()
|
||||
@@ -421,8 +427,9 @@ class spell_ulduar_stone_grip_cast_target : public SpellScriptLoader
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ulduar_stone_grip_cast_target_SpellScript::FillTargetsSubsequential, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
}
|
||||
|
||||
private:
|
||||
// Shared between effects
|
||||
std::list<WorldObject*> m_unitList;
|
||||
std::list<WorldObject*> _unitList;
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
@@ -627,10 +634,10 @@ class spell_kologarn_summon_focused_eyebeam : public SpellScriptLoader
|
||||
{
|
||||
PrepareSpellScript(spell_kologarn_summon_focused_eyebeam_SpellScript);
|
||||
|
||||
void HandleForceCast(SpellEffIndex eff)
|
||||
void HandleForceCast(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(eff);
|
||||
GetCaster()->CastSpell(GetCaster(), GetSpellInfo()->Effects[eff].TriggerSpell, true);
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
GetCaster()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
|
||||
Reference in New Issue
Block a user