aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp166
1 files changed, 86 insertions, 80 deletions
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
index f1f001c1661..3b57558e930 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
@@ -141,20 +141,15 @@ struct boss_ick : public BossAI
{
boss_ick(Creature* creature) : BossAI(creature, DATA_ICK)
{
- _tempThreat = 0.0f;
+ _oldTargetThreat = 0.0f;
}
void Reset() override
{
- events.Reset();
- instance->SetBossState(DATA_ICK, NOT_STARTED);
- _oldTargetGUID.Clear();
- _tempThreat = 0.0f;
- }
+ _Reset();
- Creature* GetKrick()
- {
- return ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_KRICK));
+ _oldTargetGUID.Clear();
+ _oldTargetThreat = 0.0f;
}
void JustEngagedWith(Unit* /*who*/) override
@@ -170,47 +165,47 @@ struct boss_ick : public BossAI
events.ScheduleEvent(EVENT_SPECIAL, 30s, 35s);
}
- void EnterEvadeMode(EvadeReason why) override
- {
- me->GetMotionMaster()->Clear();
- ScriptedAI::EnterEvadeMode(why);
- }
-
void JustDied(Unit* /*killer*/) override
{
+ _JustDied();
+
+ if (Vehicle* _vehicle = me->GetVehicleKit())
+ _vehicle->RemoveAllPassengers();
+
if (Creature* krick = GetKrick())
{
- if (Vehicle* _vehicle = me->GetVehicleKit())
- _vehicle->RemoveAllPassengers();
+ ForceCombatStop(krick, false);
if (krick->AI())
krick->AI()->DoAction(ACTION_OUTRO);
}
-
- instance->SetBossState(DATA_ICK, DONE);
}
void DoAction(int32 actionId) override
{
- if (actionId == ACTION_STORE_OLD_TARGET)
- {
- if (Unit* victim = me->GetVictim())
- {
- _oldTargetGUID = victim->GetGUID();
- _tempThreat = GetThreat(victim);
- }
- }
- else if (actionId == ACTION_RESET_THREAT)
+ switch (actionId)
{
- if (Unit* oldTarget = ObjectAccessor::GetUnit(*me, _oldTargetGUID))
- {
+ case ACTION_STORE_OLD_TARGET:
+ if (Unit* victim = me->GetVictim())
+ {
+ _oldTargetGUID = victim->GetGUID();
+ _oldTargetThreat = GetThreat(victim);
+ }
+ break;
+ case ACTION_RESET_THREAT:
+ me->GetThreatManager().ClearFixate();
+
if (Unit* current = me->GetVictim())
- ModifyThreatByPercent(current, -100);
+ ResetThreat(current);
- AddThreat(oldTarget, _tempThreat);
- AttackStart(oldTarget);
- _oldTargetGUID.Clear();
- _tempThreat = 0.0f;
- }
+ if (Unit* oldTarget = ObjectAccessor::GetUnit(*me, _oldTargetGUID))
+ {
+ AddThreat(oldTarget, _oldTargetThreat);
+ _oldTargetGUID.Clear();
+ _oldTargetThreat = 0.0f;
+ }
+ break;
+ default:
+ break;
}
}
@@ -230,14 +225,18 @@ struct boss_ick : public BossAI
{
case EVENT_TOXIC_WASTE:
if (Creature* krick = GetKrick())
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.f, true))
krick->CastSpell(target, SPELL_TOXIC_WASTE);
+ }
events.ScheduleEvent(EVENT_TOXIC_WASTE, 7s, 10s);
break;
case EVENT_SHADOW_BOLT:
if (Creature* krick = GetKrick())
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.f, true))
krick->CastSpell(target, SPELL_SHADOW_BOLT);
+ }
events.ScheduleEvent(EVENT_SHADOW_BOLT, 15s);
return;
case EVENT_MIGHTY_KICK:
@@ -245,8 +244,8 @@ struct boss_ick : public BossAI
events.ScheduleEvent(EVENT_MIGHTY_KICK, 25s);
return;
case EVENT_SPECIAL:
- //select one of these three special events
- events.ScheduleEvent(RAND(EVENT_EXPLOSIVE_BARRAGE, EVENT_POISON_NOVA, EVENT_PURSUIT), 1000);
+ // Select one of these three special events
+ events.ScheduleEvent(RAND(EVENT_EXPLOSIVE_BARRAGE, EVENT_POISON_NOVA, EVENT_PURSUIT), 1s);
events.ScheduleEvent(EVENT_SPECIAL, 23s, 28s);
break;
case EVENT_EXPLOSIVE_BARRAGE:
@@ -257,7 +256,7 @@ struct boss_ick : public BossAI
krick->CastSpell(krick, SPELL_EXPLOSIVE_BARRAGE_KRICK, true);
DoCastAOE(SPELL_EXPLOSIVE_BARRAGE_ICK);
}
- events.DelayEvents(20000);
+ events.DelayEvents(20s);
break;
case EVENT_POISON_NOVA:
if (Creature* krick = GetKrick())
@@ -283,7 +282,12 @@ struct boss_ick : public BossAI
}
private:
- float _tempThreat;
+ Creature* GetKrick()
+ {
+ return ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_KRICK));
+ }
+
+ float _oldTargetThreat;
ObjectGuid _oldTargetGUID;
};
@@ -310,11 +314,6 @@ struct boss_krick : public ScriptedAI
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- Creature* GetIck()
- {
- return ObjectAccessor::GetCreature(*me, _instanceScript->GetGuidData(DATA_ICK));
- }
-
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
@@ -340,12 +339,13 @@ struct boss_krick : public ScriptedAI
Creature* tyrannusPtr = ObjectAccessor::GetCreature(*me, _instanceScript->GetGuidData(DATA_TYRANNUS_EVENT));
if (tyrannusPtr)
tyrannusPtr->NearTeleportTo(outroPos[1].GetPositionX(), outroPos[1].GetPositionY(), outroPos[1].GetPositionZ(), outroPos[1].GetOrientation());
- else
- tyrannusPtr = me->SummonCreature(NPC_TYRANNUS_EVENTS, outroPos[1], TEMPSUMMON_MANUAL_DESPAWN);
+ else if (tyrannusPtr = me->SummonCreature(NPC_TYRANNUS_EVENTS, outroPos[1], TEMPSUMMON_MANUAL_DESPAWN))
+ {
+ tyrannusPtr->SetCanFly(true);
+ tyrannusPtr->SetFacingToObject(me);
+ }
- tyrannusPtr->SetCanFly(true);
me->GetMotionMaster()->MovePoint(POINT_KRICK_INTRO, outroPos[0].GetPositionX(), outroPos[0].GetPositionY(), outroPos[0].GetPositionZ());
- tyrannusPtr->SetFacingToObject(me);
}
}
@@ -357,10 +357,7 @@ struct boss_krick : public ScriptedAI
Talk(SAY_KRICK_OUTRO_1);
_phase = PHASE_OUTRO;
_events.Reset();
- _events.ScheduleEvent(EVENT_OUTRO_1, 1000);
-
- // Clear combat
- me->CombatStop();
+ _events.ScheduleEvent(EVENT_OUTRO_1, 1s);
}
void UpdateAI(uint32 diff) override
@@ -496,6 +493,11 @@ struct boss_krick : public ScriptedAI
}
private:
+ Creature* GetIck()
+ {
+ return ObjectAccessor::GetCreature(*me, _instanceScript->GetGuidData(DATA_ICK));
+ }
+
InstanceScript* _instanceScript;
SummonList _summons;
EventMap _events;
@@ -512,15 +514,17 @@ class spell_krick_explosive_barrage : public AuraScript
void HandlePeriodicTick(AuraEffect const* /*aurEff*/)
{
PreventDefaultAction();
- if (Unit* caster = GetCaster())
- if (caster->GetTypeId() == TYPEID_UNIT)
- {
- Map::PlayerList const& players = caster->GetMap()->GetPlayers();
- for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
- if (Player* player = itr->GetSource())
- if (player->IsWithinDist(caster, 60.0f)) // don't know correct range
- caster->CastSpell(player, SPELL_EXPLOSIVE_BARRAGE_SUMMON, true);
- }
+ Unit* caster = GetCaster();
+ if (!caster || caster->GetTypeId() != TYPEID_UNIT)
+ return;
+
+ Map::PlayerList const& players = caster->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ {
+ if (Player* player = itr->GetSource())
+ if (player->IsWithinDist(caster, 60.0f)) // don't know correct range
+ caster->CastSpell(player, SPELL_EXPLOSIVE_BARRAGE_SUMMON, true);
+ }
}
void Register() override
@@ -535,22 +539,22 @@ class spell_ick_explosive_barrage : public AuraScript
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- if (Unit* caster = GetCaster())
- if (caster->GetTypeId() == TYPEID_UNIT)
- {
- caster->GetMotionMaster()->Clear();
- caster->GetMotionMaster()->MoveIdle();
- }
+ Unit* caster = GetCaster();
+ if (!caster || caster->GetTypeId() != TYPEID_UNIT)
+ return;
+
+ caster->GetMotionMaster()->MoveIdle();
+ caster->GetMotionMaster()->Clear(MOTION_PRIORITY_NORMAL);
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- if (Unit* caster = GetCaster())
- if (caster->GetTypeId() == TYPEID_UNIT)
- {
- caster->GetMotionMaster()->Clear();
- caster->GetMotionMaster()->MoveChase(caster->GetVictim());
- }
+ Unit* caster = GetCaster();
+ if (!caster || caster->GetTypeId() != TYPEID_UNIT)
+ return;
+
+ if (Unit* victim = caster->GetVictim())
+ caster->GetMotionMaster()->MoveChase(victim);
}
void Register() override
@@ -597,7 +601,7 @@ class spell_krick_pursuit : public SpellScript
ick->AddAura(GetSpellInfo()->Id, target);
ick->AI()->DoAction(ACTION_STORE_OLD_TARGET);
ick->GetThreatManager().AddThreat(target, float(GetEffectValue()), GetSpellInfo(), true, true);
- ick->AI()->AttackStart(target);
+ ick->GetThreatManager().FixateTarget(target);
}
}
@@ -613,9 +617,11 @@ class spell_krick_pursuit_AuraScript : public AuraScript
void HandleExtraEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- if (Unit* caster = GetCaster())
- if (Creature* creCaster = caster->ToCreature())
- creCaster->AI()->DoAction(ACTION_RESET_THREAT);
+ Unit* caster = GetCaster();
+ if (!caster || caster->GetTypeId() != TYPEID_UNIT)
+ return;
+
+ caster->GetAI()->DoAction(ACTION_RESET_THREAT);
}
void Register() override