void SetPhaseOne() { Talk(SAY_HEART_CLOSED); Talk(EMOTE_HEART_CLOSED); DoCast(me, SPELL_STAND); me->SetReactState(REACT_AGGRESSIVE); _phase = 1; events.RescheduleEvent(EVENT_SEARING_LIGHT, TIMER_SEARING_LIGHT / 2); events.RescheduleEvent(EVENT_GRAVITY_BOMB, TIMER_GRAVITY_BOMB); events.RescheduleEvent(EVENT_TYMPANIC_TANTRUM, urand(TIMER_TYMPANIC_TANTRUM_MIN, TIMER_TYMPANIC_TANTRUM_MAX)); Unit* heart = me->GetVehicleKit() ? me->GetVehicleKit()->GetPassenger(HEART_VEHICLE_SEAT_EXPOSED) : NULL; if (!heart) return; heart->ChangeSeat(HEART_VEHICLE_SEAT_NORMAL, false); heart->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); heart->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29); heart->RemoveAurasDueToSpell(SPELL_EXPOSED_HEART); if (!_hardMode) { if (!_transferHealth) _transferHealth = (heart->GetMaxHealth() - heart->GetHealth()); me->ModifyHealth(-((int32)_transferHealth)); } }
void ExposeHeart() { Talk(SAY_HEART_OPENED); Talk(EMOTE_HEART_OPENED); DoCast(me, SPELL_SUBMERGE); // WIll make creature untargetable me->AttackStop(); me->SetReactState(REACT_PASSIVE); Unit* heart = me->GetVehicleKit() ? me->GetVehicleKit()->GetPassenger(HEART_VEHICLE_SEAT_NORMAL) : NULL; if (heart) { heart->CastSpell(heart, SPELL_HEART_OVERLOAD, false); heart->CastSpell(me, SPELL_HEART_LIGHTNING_TETHER, false); heart->CastSpell(heart, SPELL_HEART_HEAL_TO_FULL, true); heart->CastSpell(heart, SPELL_EXPOSED_HEART, false); // Channeled heart->ChangeSeat(HEART_VEHICLE_SEAT_EXPOSED, true); heart->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); heart->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29); } events.CancelEvent(EVENT_SEARING_LIGHT); events.CancelEvent(EVENT_GRAVITY_BOMB); events.CancelEvent(EVENT_TYMPANIC_TANTRUM); // Start "end of phase 2 timer" events.ScheduleEvent(EVENT_DISPOSE_HEART, TIMER_HEART_PHASE); // Phase 2 has officially started _phase = 2; _heartExposed++; }