Core/Ulduar:

- Implemented kill credit for hodir and assembly of iron
- Some cleanup
This commit is contained in:
Vincent-Michael
2012-12-01 17:34:00 +01:00
parent 4a66290fb9
commit 7afbacd6e1
5 changed files with 89 additions and 111 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}
};

View File

@@ -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();
}
}

View File

@@ -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()