aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp50
1 files changed, 42 insertions, 8 deletions
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
index 45274a71208..101ecf10adb 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -279,17 +279,22 @@ class boss_blood_council_controller : public CreatureScript
valanar->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- void JustDied(Unit* /*killer*/)
+ void JustDied(Unit* killer)
{
_JustDied();
// kill the other 2 princes too
- for (uint8 i = 0; i < 2; ++i)
+ for (uint8 i = 0; i < 3; ++i)
{
if (++invocationStage == 3)
invocationStage = 0;
if (Creature* prince = ObjectAccessor::GetCreature(*me, invocationOrder[invocationStage].guid))
- prince->Kill(prince);
+ {
+ // make sure looting is allowed
+ if (me->IsDamageEnoughForLootingAndReward())
+ prince->LowerPlayerDamageReq(prince->GetMaxHealth());
+ killer->Kill(prince);
+ }
}
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_SHADOW_PRISON_DUMMY);
}
@@ -1110,7 +1115,7 @@ class npc_ball_of_flame : public CreatureScript
if (type == TARGETED_MOTION_TYPE && id == GUID_LOPART(chaseGUID) && chaseGUID)
{
me->RemoveAurasDueToSpell(SPELL_BALL_OF_FLAMES_PERIODIC);
- DoCastAOE(SPELL_FLAMES);
+ DoCast(me, SPELL_FLAMES);
despawnTimer = 1000;
chaseGUID = 0;
}
@@ -1135,7 +1140,7 @@ class npc_ball_of_flame : public CreatureScript
void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType)
{
- if (!instance || damageType != SPELL_DIRECT_DAMAGE)
+ if (damageType != SPELL_DIRECT_DAMAGE)
return;
if (damage > RAID_MODE<uint32>(23000, 25000, 23000, 25000))
@@ -1182,7 +1187,7 @@ class npc_kinetic_bomb : public CreatureScript
events.Reset();
me->SetDisplayId(DISPLAY_KINETIC_BOMB);
me->CastSpell(me, SPELL_UNSTABLE, true);
- me->CastCustomSpell(SPELL_KINETIC_BOMB_VISUAL, SPELLVALUE_BASE_POINT0, 0x7FFFFFFF, me, true);
+ me->CastSpell(me, SPELL_KINETIC_BOMB_VISUAL, true);
me->SetReactState(REACT_PASSIVE);
me->SetSpeed(MOVE_FLIGHT, IsHeroic() ? 0.3f : 0.15f, true);
me->GetPosition(x, y, groundZ);
@@ -1196,7 +1201,7 @@ class npc_kinetic_bomb : public CreatureScript
else if (action == ACTION_KINETIC_BOMB_JUMP)
{
me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MoveJump(x, y, me->GetPositionZ()+7.0f, 1.0f, 7.0f);
+ me->GetMotionMaster()->MoveJump(x, y, me->GetPositionZ() + 7.0f, 1.0f, 7.0f);
events.ScheduleEvent(EVENT_CONTINUE_FALLING, 700);
}
}
@@ -1543,6 +1548,34 @@ class spell_valanar_kinetic_bomb_knockback : public SpellScriptLoader
}
};
+class spell_valanar_kinetic_bomb_absorb : public SpellScriptLoader
+{
+ public:
+ spell_valanar_kinetic_bomb_absorb() : SpellScriptLoader("spell_valanar_kinetic_bomb_absorb") { }
+
+ class spell_valanar_kinetic_bomb_absorb_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_valanar_kinetic_bomb_absorb_AuraScript);
+
+ void OnAbsorb(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount)
+ {
+ absorbAmount = CalculatePctN(dmgInfo.GetDamage(), aurEff->GetAmount());
+ RoundToInterval<uint32>(absorbAmount, 0, dmgInfo.GetDamage());
+ dmgInfo.AbsorbDamage(absorbAmount);
+ }
+
+ void Register()
+ {
+ OnEffectAbsorb += AuraEffectAbsorbFn(spell_valanar_kinetic_bomb_absorb_AuraScript::OnAbsorb, EFFECT_0);
+ }
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_valanar_kinetic_bomb_absorb_AuraScript();
+ }
+};
+
class spell_blood_council_shadow_prison : public SpellScriptLoader
{
public:
@@ -1583,7 +1616,7 @@ class spell_blood_council_shadow_prison_damage : public SpellScriptLoader
{
if (Aura* aur = GetHitUnit()->GetAura(GetSpellInfo()->Id))
if (AuraEffect const* eff = aur->GetEffect(1))
- SetHitDamage(GetHitDamage()+eff->GetAmount());
+ SetHitDamage(GetHitDamage() + eff->GetAmount());
}
void Register()
@@ -1614,6 +1647,7 @@ void AddSC_boss_blood_prince_council()
new spell_taldaram_ball_of_inferno_flame();
new spell_valanar_kinetic_bomb();
new spell_valanar_kinetic_bomb_knockback();
+ new spell_valanar_kinetic_bomb_absorb();
new spell_blood_council_shadow_prison();
new spell_blood_council_shadow_prison_damage();
}