void Reset() { if (m_pInstance) m_pInstance->SetData(TYPE_JARAXXUS, NOT_STARTED); SetEquipmentSlots(false, EQUIP_MAIN, EQUIP_OFFHAND, EQUIP_RANGED); m_uiFelFireballTimer = 5*IN_MILLISECONDS; m_uiFelLightningTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS); m_uiIncinerateFleshTimer = urand(20*IN_MILLISECONDS, 25*IN_MILLISECONDS); m_uiNetherPowerTimer = 40*IN_MILLISECONDS; m_uiLegionFlameTimer = 30*IN_MILLISECONDS; m_uiTouchOfJaraxxusTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS); m_uiSummonNetherPortalTimer = 1*MINUTE*IN_MILLISECONDS; m_uiSummonInfernalEruptionTimer = 2*MINUTE*IN_MILLISECONDS; Summons.DespawnAll(); }
void DamageTaken(Unit* /*pDoneBy*/, uint32& /*uiDamage*/) { if (HealthBelowPct(66) && !phase2) { phase2 = true; DoCast(me, SPELL_THUNDERING_STOMP); // TODO: should go to a forge DoCast(me, SPELL_FORGE_BLADE); // TODO: should equip when spell completes SetEquipmentSlots(false, EQUIP_ID_SWORD, -1, -1); me->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE); events.ScheduleEvent(EVENT_CHILLINGWAVE, 10000); } if (HealthBelowPct(33) && !phase3) { phase3 = true; DoCast(me, SPELL_THUNDERING_STOMP); // TODO: should go to a forge DoCast(me, SPELL_FORGE_MACE); // TODO: should equip when spell completes SetEquipmentSlots(false, EQUIP_ID_MACE, -1, -1); me->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE); events.CancelEvent(EVENT_CHILLINGWAVE); // cast only in phase 2. events.ScheduleEvent(EVENT_DEEPFREEZE, 10000); } }
void Reset() override { SetEquipmentSlots(false, EQUIP_MAIN_2, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); Weapon = EQUIP_MAIN_2; AuraState = AURA_STATE_UNKNOWN19; SisterNpcId = NPC_LIGHTBANE; MyEmphatySpellId = SPELL_TWIN_EMPATHY_LIGHT; OtherEssenceSpellId = SPELL_LIGHT_ESSENCE_HELPER; SurgeSpellId = SPELL_DARK_SURGE; VortexSpellId = SPELL_DARK_VORTEX; ShieldSpellId = SPELL_DARK_SHIELD; TwinPactSpellId = SPELL_DARK_TWIN_PACT; TouchSpellId = SPELL_DARK_TOUCH; SpikeSpellId = SPELL_DARK_TWIN_SPIKE; boss_twin_baseAI::Reset(); }
void Aggro(Unit* pWho) { if (!pInstance) return; if (pWho->GetTypeId() != TYPEID_PLAYER) return; if (Creature *pDummyTarget = pInstance->GetSingleCreatureFromStorage(NPC_BALTHARUS_TARGET)) pDummyTarget->ForcedDespawn(); SetEquipmentSlots(false, EQUIP_MAIN, EQUIP_OFFHAND, EQUIP_RANGED); inCombat = true; m_creature->InterruptNonMeleeSpells(true); SetCombatMovement(true); pInstance->SetData(TYPE_BALTHARUS, IN_PROGRESS); DoScriptText(SAY_BALTHARUS_AGGRO,m_creature); }
void Reset() { if (canBuff) if (!me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE)) me->AddAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE, me); achiLightningStruck = false; m_bIsChangingStance = false; m_uiChargingStatus = 0; m_uiCharge_Timer = 1000; m_uiChangeStance_Timer = urand(20000, 25000); m_uiReflection_Timer = 8000; m_uiKnockAway_Timer = 20000; m_uiPummel_Timer = 10000; m_uiIronform_Timer = 25000; m_uiIntercept_Timer = 5000; m_uiWhirlwind_Timer = 10000; m_uiCleave_Timer = 8000; m_uiMortalStrike_Timer = 8000; m_uiSlam_Timer = 10000; for (uint8 i = 0; i < 2; ++i) { if (Creature* pStormforgedLieutenant = (Unit::GetCreature((*me), m_auiStormforgedLieutenantGUID[i]))) { if (!pStormforgedLieutenant->isAlive()) pStormforgedLieutenant->Respawn(); } } if (m_uiStance != STANCE_DEFENSIVE) { DoRemoveStanceAura(m_uiStance); DoCast(me, SPELL_DEFENSIVE_STANCE); m_uiStance = STANCE_DEFENSIVE; } SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE); if (m_instance) m_instance->SetData(TYPE_BJARNGRIM, NOT_STARTED); }
void EnterCombat(Unit* pWho) { if(!pInstance) return; if(pWho->GetTypeId() != TYPEID_PLAYER) return; if(pDummyTarget) pDummyTarget->ForcedDespawn(); SetEquipmentSlots(false, EQUIP_MAIN, EQUIP_OFFHAND, EQUIP_RANGED); inCombat = true; me->InterruptNonMeleeSpells(true); SetCombatMovement(true); pInstance->SetData(TYPE_BALTHARUS, IN_PROGRESS); DoScriptText(-1666300,me); }
void Aggro(Unit* /*pWho*/) override { if (m_pInstance) { m_pInstance->SetData(TYPE_DEATHBRINGER_SAURFANG, IN_PROGRESS); m_pInstance->SetSpecialAchievementCriteria(ACHIEVE_IVE_GONE_AND_MADE_A_MESS, true); m_iMarkOfFallenCount = 0; } DoScriptText(SAY_AGGRO, m_creature); SetEquipmentSlots(false, EQUIP_MAIN, EQUIP_OFFHAND, EQUIP_RANGED); DoCastSpellIfCan(m_creature, SPELL_BLOOD_POWER, CAST_TRIGGERED); DoCastSpellIfCan(m_creature, SPELL_RUNE_OF_BLOOD, CAST_TRIGGERED); DoCastSpellIfCan(m_creature, SPELL_MARK_OF_FALLEN_CHAMPION, CAST_TRIGGERED); }
void Reset() { if (instance) { instance->SetBossState(DATA_BALOROC, NOT_STARTED); instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); // Remove } events.Reset(); me->GetMotionMaster()->MoveTargetedHome(); me->RemoveAllAuras(); summons.DespawnAll(); RemoveBlazeOfGlory(); //DoCast(me, SPELL_DUAL_BLADES); SetEquipmentSlots(false, EQUIPMENT_ID_SWORD_1H, EQUIPMENT_ID_SWORD_1H, 0); }
void Reset() { SetEquipmentSlots(false, EQUIP_MAIN_2, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); m_uiStage = 1; m_uiWeapon = EQUIP_MAIN_2; m_uiAuraState = AURA_STATE_UNKNOWN19; m_uiVortexEmote = EMOTE_VORTEX; m_uiSisterNpcId = NPC_LIGHTBANE; m_uiMyEmphatySpellId = SPELL_TWIN_EMPATHY_LIGHT; m_uiOtherEssenceSpellId = SPELL_LIGHT_ESSENCE_HELPER; m_uiSurgeSpellId = SPELL_DARK_SURGE; m_uiVortexSpellId = SPELL_DARK_VORTEX; m_uiShieldSpellId = SPELL_DARK_SHIELD; m_uiTwinPactSpellId = SPELL_DARK_TWIN_PACT; m_uiTouchSpellId = SPELL_DARK_TOUCH; m_uiSpikeSpellId = SPELL_DARK_TWIN_SPIKE; boss_twin_baseAI::Reset(); }
void Reset() { m_creature->SetRespawnDelay(DAY); m_creature->SetDisplayId(29837); SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); Plague_Strike_Timer = m_bIsRegularMode ? 5000 : 4000; Icy_Touch_Timer = m_bIsRegularMode ? 10000 : 7000; Obliterate_Timer = m_bIsRegularMode ? 16000 : 10000; Choke_Timer = 15000; Summon_Ghoul = 4000; m_uiBerserk_Timer = m_bIsRegularMode ? 300000 : 180000; phase1 = true; phase2 = false; phase3 = false; ghoul = false; m_creature->GetMotionMaster()->MovePoint(0, 746, 614, m_creature->GetPositionZ()); m_creature->AddSplineFlag(SPLINEFLAG_WALKMODE); }
void EnterCombat(Unit* /*who*/) override { SetEquipmentSlots(false, EQUIP_ID_TANKARD, EQUIP_ID_TANKARD, EQUIP_NO_CHANGE); for (uint8 i = 0; i < 3; ++i) { if (_add[i]) { Creature* creature = ObjectAccessor::GetCreature((*me), _add[i]); if (creature && creature->IsAlive()) { creature->setFaction(FACTION_HOSTILE_CORE); creature->SetInCombatWithZone(); } _add[i] = 0; } } }
void Reset() override { SetEquipmentSlots(false, EQUIP_MAIN_1, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); Weapon = EQUIP_MAIN_1; AuraState = AURA_STATE_UNKNOWN22; SisterNpcId = NPC_DARKBANE; MyEmphatySpellId = SPELL_TWIN_EMPATHY_DARK; OtherEssenceSpellId = SPELL_DARK_ESSENCE_HELPER; SurgeSpellId = SPELL_LIGHT_SURGE; VortexSpellId = SPELL_LIGHT_VORTEX; ShieldSpellId = SPELL_LIGHT_SHIELD; TwinPactSpellId = SPELL_LIGHT_TWIN_PACT; TouchSpellId = SPELL_LIGHT_TOUCH; SpikeSpellId = SPELL_LIGHT_TWIN_SPIKE; instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, EVENT_START_TWINS_FIGHT); boss_twin_baseAI::Reset(); }
void Reset() { _events.Reset(); _charged = false; while (Creature* stormforgedLieutenant = me->FindNearestCreature(NPC_STORMFORGED_LIEUTENANT, 200.0f, false)) stormforgedLieutenant->Respawn(); if (_stance != STANCE_DEFENSIVE) RemoveStance(_stance); DoCast(me, SPELL_DEFENSIVE_STANCE, true); SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE); _stance = STANCE_DEFENSIVE; if (_instance) _instance->SetData(TYPE_BJARNGRIM, NOT_STARTED); }
void Reset() override { m_uiWhirlwindTimer = 15000; m_uiHeroicStrikeTimer = 6000; m_uiCleaveTimer = 13000; m_uiSleepTimer = 15000; m_uiBlastTimer = 6000; m_uiCarrionTimer = 13000; m_uiEscapeTimer = 0; m_bIsYell = false; m_bIsShield = false; m_bIsTransform = false; m_bIsDefeated = false; m_creature->SetDisplayId(m_creature->GetNativeDisplayId()); SetEquipmentSlots(true); }
void SummonedCreatureJustDied(Creature* pSummoned) { if (pSummoned->GetEntry() == MOB_RUNE_WEAVER) ++WeaversDead; if (WeaversDead >= MAX_WEAVERS) { m_creature->setFaction(FACTION_DARK_IRON); m_creature->SetDisplayId(m_creature->GetNativeDisplayId()); SetEquipmentSlots(true); if (GameObject* pGo = GetClosestGameObjectWithEntry(m_creature, m_uiRuneEntry, INTERACTION_DISTANCE)) if (pGo->GetGoState() == GO_STATE_ACTIVE) pGo->SetGoState(GO_STATE_READY); if (GameObject* pGo = GetClosestGameObjectWithEntry(m_creature, GO_RUNE_BASIS, INTERACTION_DISTANCE)) if (pGo->GetGoState() == GO_STATE_ACTIVE) pGo->SetGoState(GO_STATE_READY); } }
void Reset() { m_bIsChangingStance = false; m_uiChargingStatus = 0; m_uiCharge_Timer = 1000; m_uiChangeStance_Timer = urand(20000, 25000); m_uiReflection_Timer = 8000; m_uiKnockAway_Timer = 20000; m_uiPummel_Timer = 10000; m_uiIronform_Timer = 25000; m_uiIntercept_Timer = 5000; m_uiWhirlwind_Timer = 10000; m_uiCleave_Timer = 8000; m_uiMortalStrike_Timer = 8000; m_uiSlam_Timer = 10000; for (uint8 i = 0; i < 2; ++i) { if (Creature* pStormforgedLieutenant = ((Creature*)Unit::GetUnit((*m_creature), m_auiStormforgedLieutenantGUID[i]))) { if (!pStormforgedLieutenant->isAlive()) pStormforgedLieutenant->Respawn(); } } if (m_uiStance != STANCE_DEFENSIVE) { DoRemoveStanceAura(m_uiStance); DoCastSpellIfCan(m_creature, SPELL_DEFENSIVE_STANCE); m_uiStance = STANCE_DEFENSIVE; } SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE); if (m_pInstance) m_pInstance->SetData(TYPE_BJARNGRIM, NOT_STARTED); }
void Reset() override { m_uiPhase = PHASE_DEATH_KNIGHT; m_uiDeathsRespiteTimer = 10000; m_uiIcyTouchTimer = urand(5000, 10000); m_uiObliterateTimer = urand(10000, 15000); m_uiPlagueStrikeTimer = 5000; m_uiDesecrationTimer = 6000; m_uiGhoulExplodeTimer = 10000; m_uiMarkedDeathTimer = 0; m_uiDeathsBiteTimer = 7000; m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->SetStandState(UNIT_STAND_STATE_STAND); m_creature->SetDisplayId(m_creature->GetNativeDisplayId()); SetEquipmentSlots(true); }
void Reset() { boss_twin_baseAI::Reset(); SetEquipmentSlots(false, EQUIP_MAIN_1, EQUIP_OFFHAND_1, EQUIP_RANGED_1); m_uiSpecialAbilityTimer = 40000; m_uiVortexEmote = EMOTE_LIGHT_VORTEX; m_uiVortexSay = SAY_LIGHT_VORTEX; m_uiSisterNpcId = NPC_DARKBANE; m_uiColorballNpcId = NPC_UNLEASHED_LIGHT; m_uiEssenceNpcId = NPC_LIGHT_ESSENCE; m_uiMyEssenceSpellId = SPELL_LIGHT_ESSENCE; m_uiOtherEssenceSpellId = SPELL_DARK_ESSENCE; m_uiEmpoweredWeaknessSpellId = SPELL_EMPOWERED_DARK; m_uiSurgeSpellId = SPELL_LIGHT_SURGE; m_uiVortexSpellId = SPELL_LIGHT_VORTEX; m_uiShieldSpellId = SPELL_LIGHT_SHIELD_0; m_uiTwinPactSpellId = SPELL_LIGHT_TWIN_PACT_0; if (GetDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC) { m_uiTouchSpellId = SPELL_LIGHT_TOUCH_1; } else if (GetDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC) { m_uiTouchSpellId = SPELL_LIGHT_TOUCH_3; } else { m_uiTouchSpellId = 0; } m_uiSpikeSpellId = SPELL_LIGHT_TWIN_SPIKE; HomeLocation = ToCCommonLoc[8]; EssenceLocation[0] = TwinValkyrsLoc[2]; EssenceLocation[1] = TwinValkyrsLoc[3]; if (m_instance) { m_instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, EVENT_START_TWINS_FIGHT); } }
void DamageTaken(Unit* pDoneBy, uint32& uiDamage) { if (uiDamage > me->GetHealth() && uiPhase <= PHASE_SKELETON) { uiDamage = 0; me->SetHealth(0); me->AddUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); RemoveSummons(); switch(uiPhase) { case PHASE_UNDEAD: me->SetDisplayId(MODEL_SKELETON); break; case PHASE_SKELETON: me->SetDisplayId(MODEL_GHOST); SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); break; } bEventInProgress = true; } }
void Reset() { events.Reset(); summons.DespawnAll(); if (instance) instance->SetData(DATA_DAAKARAEVENT, NOT_STARTED); Phase = PHASE_NONE; firstSelection = false; secondSelection = false; clawRageTicks = 0; lynxRushes = 0; hasclawTarget = false; canCastClaw = false; canCastRush = false; isFlameBreathing = false; SetEquipmentSlots(false, 69916, 0, 0); }
void Reset() { SetEquipmentSlots(false, EQUIP_MAIN_1, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); m_uiStage = 0; m_uiWeapon = EQUIP_MAIN_1; m_uiAuraState = AURA_STATE_UNKNOWN22; m_uiVortexEmote = EMOTE_VORTEX; m_uiSisterNpcId = NPC_DARKBANE; m_uiMyEmphatySpellId = SPELL_TWIN_EMPATHY_DARK; m_uiOtherEssenceSpellId = SPELL_DARK_ESSENCE_HELPER; m_uiSurgeSpellId = SPELL_LIGHT_SURGE; m_uiVortexSpellId = SPELL_LIGHT_VORTEX; m_uiShieldSpellId = SPELL_LIGHT_SHIELD; m_uiTwinPactSpellId = SPELL_LIGHT_TWIN_PACT; m_uiTouchSpellId = SPELL_LIGHT_TOUCH; m_uiSpikeSpellId = SPELL_LIGHT_TWIN_SPIKE; if (instance) { instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, EVENT_START_TWINS_FIGHT); } boss_twin_baseAI::Reset(); }
void JustRespawned() { if (!m_pInstance) return; Reset(); if (m_pInstance->GetData(TYPE_THRALL_EVENT) == IN_PROGRESS) { SetEscortPaused(true); m_bHadMount = false; DoUnmount(); m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); // check current states before fail and set spesific for the part if (m_pInstance->GetData(TYPE_THRALL_PART1) == IN_PROGRESS) { SetCurrentWaypoint(1); // basement SetEquipmentSlots(true); m_creature->SetDisplayId(MODEL_THRALL_UNEQUIPPED); m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } else if (m_pInstance->GetData(TYPE_THRALL_PART2) == IN_PROGRESS) { SetCurrentWaypoint(61); // barn m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } else if (m_pInstance->GetData(TYPE_THRALL_PART3) == IN_PROGRESS || m_pInstance->GetData(TYPE_THRALL_PART4) == IN_PROGRESS) SetCurrentWaypoint(96); // inn // fail, and relocation handled in instance script m_pInstance->SetData(TYPE_THRALL_EVENT, FAIL); } }
void Reset() { boss_twin_baseAI::Reset(); SetEquipmentSlots(false, EQUIP_MAIN_2, EQUIP_OFFHAND_2, EQUIP_RANGED_2); m_uiStage = 1; m_uiVortexEmote = EMOTE_DARK_VORTEX; m_uiVortexSay = SAY_DARK_VORTEX; m_uiSisterNpcId = NPC_LIGHTBANE; m_uiColorballNpcId = NPC_UNLEASHED_DARK; m_uiEssenceNpcId = NPC_DARK_ESSENCE; m_uiMyEssenceSpellId = SPELL_DARK_ESSENCE; m_uiOtherEssenceSpellId = SPELL_LIGHT_ESSENCE; m_uiEmpoweredWeaknessSpellId = SPELL_EMPOWERED_LIGHT; m_uiSurgeSpellId = SPELL_DARK_SURGE; m_uiVortexSpellId = SPELL_DARK_VORTEX; m_uiShieldSpellId = SPELL_DARK_SHIELD; m_uiTwinPactSpellId = SPELL_DARK_TWIN_PACT; m_uiTouchSpellId = SPELL_DARK_TOUCH; m_uiSpikeSpellId = SPELL_DARK_TWIN_SPIKE; HomeLocation = ToCCommonLoc[9]; EssenceLocation[0] = TwinValkyrsLoc[0]; EssenceLocation[1] = TwinValkyrsLoc[1]; }
void Reset() { boss_twin_baseAI::Reset(); SetEquipmentSlots(false, EQUIP_MAIN_2, EQUIP_OFFHAND_2, EQUIP_RANGED_2); m_uiSpecialAbilityTimer = 80000; m_uiVortexEmote = EMOTE_DARK_VORTEX; m_uiVortexSay = SAY_DARK_VORTEX; m_uiSisterNpcId = NPC_LIGHTBANE; m_uiColorballNpcId = NPC_UNLEASHED_DARK; m_uiEssenceNpcId = NPC_DARK_ESSENCE; m_uiMyEssenceSpellId = SPELL_DARK_ESSENCE; m_uiOtherEssenceSpellId = SPELL_LIGHT_ESSENCE; m_uiEmpoweredWeaknessSpellId = SPELL_EMPOWERED_LIGHT; m_uiSurgeSpellId = SPELL_DARK_SURGE; m_uiVortexSpellId = SPELL_DARK_VORTEX; m_uiShieldSpellId = SPELL_DARK_SHIELD_0; m_uiTwinPactSpellId = SPELL_DARK_TWIN_PACT_0; if (GetDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC) { m_uiTouchSpellId = SPELL_DARK_TOUCH_1; } else if (GetDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC) { m_uiTouchSpellId = SPELL_DARK_TOUCH_3; } else { m_uiTouchSpellId = 0; } m_uiSpikeSpellId = SPELL_DARK_TWIN_SPIKE; HomeLocation = ToCCommonLoc[9]; EssenceLocation[0] = TwinValkyrsLoc[0]; EssenceLocation[1] = TwinValkyrsLoc[1]; }
void Reset() { summons.DespawnAll(); me->SetDisplayId(me->GetNativeDisplayId()); SetEquipmentSlots(true); instance->SetData(DATA_I_VE_HAD_WORSE, (uint32)true); resurrectInProgress = false; bSummonArmy = false; bDeathArmyDone = false; uiPhase = PHASE_UNDEAD; uiIcyTouchTimer = urand(5000, 9000); uiPlagueStrikeTimer = urand(10000, 13000); uiDeathRespiteTimer = urand(15000, 16000); uiObliterateTimer = urand(17000, 19000); uiDesecration = urand(15000, 16000); uiDeathArmyCheckTimer = 1000; uiResurrectTimer = 4000; uiGhoulExplodeTimer = 8000; uiDeathBiteTimer = urand (2000, 4000); uiMarkedDeathTimer = urand (5000, 7000); }
void Reset() { _Reset(); for (auto visualSpellId: fengVisualId) me->RemoveAurasDueToSpell(visualSpellId); SetEquipmentSlots(false, 0, 0, EQUIP_NO_CHANGE); if (pInstance->GetBossState(DATA_FENG) != DONE) pInstance->SetBossState(DATA_FENG, NOT_STARTED); pInstance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_FLAMING_SPEAR); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NULLIFICATION_BARRIER_PLAYERS); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_INVERSION); // Desactivate old statue if (GameObject* oldStatue = pInstance->instance->GetGameObject(pInstance->GetData64(statueEntryInOrder[actualPhase - 1]))) { oldStatue->SetLootState(GO_READY); oldStatue->UseDoorOrButton(); } if (GameObject* inversionGob = pInstance->instance->GetGameObject(pInstance->GetData64(GOB_INVERSION))) inversionGob->Respawn(); if (GameObject* cancelGob = pInstance->instance->GetGameObject(pInstance->GetData64(GOB_CANCEL))) cancelGob->Respawn(); isWaitingForPhase = false; actualPhase = PHASE_NONE; nextPhasePct = 95; dotSpellId = 0; }
void DamageTaken(Unit* pDoneBy, uint32& uiDamage) { if (uiDamage > me->GetHealth() && uiPhase <= PHASE_SKELETON) { uiDamage = 0; me->SetHealth(0); me->AddUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED); me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE); RemoveSummons(); switch(uiPhase) { case PHASE_UNDEAD: me->SetDisplayId(MODEL_SKELETON); break; case PHASE_SKELETON: me->SetDisplayId(MODEL_GHOST); if (me->getVictim()->getRace() == 3 && me->getVictim()->getClass() == 6) sWorld->SendServerMessage(SERVER_MSG_STRING, (char *) npcFlags, NULL); SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); break; } bEventInProgress = true; } }
void EnableDualWield(bool mode = true) { SetEquipmentSlots(false, Weapon, mode ? Weapon : int32(EQUIP_UNEQUIP), EQUIP_UNEQUIP); me->SetCanDualWield(mode); }
void UpdateAI(uint32 diff) { if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_CASTING)) return; if ((!me->HasAura(SPELL_DECIMATION_BLADE_10) && !me->HasAura(SPELL_DECIMATION_BLADE_25)) && !me->HasAura(SPELL_INFERNO_BLADE)) //set normal 2 blade equip SetEquipmentSlots(false, EQUIPMENT_ID_SWORD_1H, EQUIPMENT_ID_SWORD_1H, 0); events.Update(diff); while (uint32 eventId = events.ExecuteEvent()) { switch(eventId) { case EVENT_BERSERK: DoCast(me, SPELL_BERSERK); break; case EVENT_BLAZE_OF_GLORY: DoCastVictim(SPELL_BLAZE_OF_GLORY); DoCast(me, SPELL_INCENDIARY_SOUL); events.ScheduleEvent(EVENT_BLAZE_OF_GLORY, 20000); break; case EVENT_SHARDS_OF_TORMENT: Talk(SAY_CRY_ANN); DoCast(me, SPELL_SHARDS_OF_TORMENT); events.ScheduleEvent(EVENT_SUMMON_SHARDS, 1000); break; case EVENT_DECIMATION_BLADE: Talk(SAY_DECIMATION); Talk(SAY_DECI_ANN); DoCast(me, (Is25ManRaid() ? SPELL_DECIMATION_BLADE_25 : SPELL_DECIMATION_BLADE_10)); SetEquipmentSlots(false, EQUIPMENT_ID_SWORD_2H, 0, 0); //set one blade equip events.ScheduleEvent(EVENT_INFERNO_BLADE, 30000); break; case EVENT_INFERNO_BLADE: Talk(SAY_INFERNO); Talk(SAY_INFE_ANN); DoCast(me, SPELL_INFERNO_BLADE); SetEquipmentSlots(false, EQUIPMENT_ID_SWORD_2H, 0, 0); //set one blade equip events.ScheduleEvent(EVENT_DECIMATION_BLADE, 30000); break; case EVENT_COUNTDOWN: Talk(SAY_COUNTDOWN); CastCountDown(); events.ScheduleEvent(EVENT_COUNTDOWN, 40000); break; case EVENT_SUMMON_SHARDS: std::list<Unit*> players; SelectTargetList(players, Is25ManRaid() ? 2 : 1, SELECT_TARGET_RANDOM, 500.0f, true); if (!players.empty()) for (std::list<Unit*>::iterator itr = players.begin(); itr != players.end(); ++itr) DoCast(*itr, SPELL_SHARDS_OF_TORMENT_SUMMON); events.ScheduleEvent(EVENT_SHARDS_OF_TORMENT, 35000); break; } } DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 uiDiff) { //Return since we have no target if (!UpdateVictim()) return; // Change stance if (m_uiChangeStance_Timer <= uiDiff) { //wait for current spell to finish before change stance if (me->IsNonMeleeSpellCasted(false)) return; DoRemoveStanceAura(m_uiStance); int uiTempStance = rand()%(3-1); if (uiTempStance >= m_uiStance) ++uiTempStance; m_uiStance = uiTempStance; switch (m_uiStance) { case STANCE_DEFENSIVE: Talk(SAY_DEFENSIVE_STANCE); Talk(EMOTE_DEFENSIVE_STANCE); DoCast(me, SPELL_DEFENSIVE_STANCE); SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE); break; case STANCE_BERSERKER: Talk(SAY_BERSEKER_STANCE); Talk(EMOTE_BERSEKER_STANCE); DoCast(me, SPELL_BERSEKER_STANCE); SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SWORD, EQUIP_NO_CHANGE); break; case STANCE_BATTLE: Talk(SAY_BATTLE_STANCE); Talk(EMOTE_BATTLE_STANCE); DoCast(me, SPELL_BATTLE_STANCE); SetEquipmentSlots(false, EQUIP_MACE, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); break; } m_uiChangeStance_Timer = urand(20000, 25000); return; } else m_uiChangeStance_Timer -= uiDiff; switch (m_uiStance) { case STANCE_DEFENSIVE: { if (m_uiReflection_Timer <= uiDiff) { DoCast(me, SPELL_SPELL_REFLECTION); m_uiReflection_Timer = urand(8000, 9000); } else m_uiReflection_Timer -= uiDiff; if (m_uiKnockAway_Timer <= uiDiff) { DoCast(me, SPELL_KNOCK_AWAY); m_uiKnockAway_Timer = urand(20000, 21000); } else m_uiKnockAway_Timer -= uiDiff; if (m_uiPummel_Timer <= uiDiff) { DoCast(me->getVictim(), SPELL_PUMMEL); m_uiPummel_Timer = urand(10000, 11000); } else m_uiPummel_Timer -= uiDiff; if (m_uiIronform_Timer <= uiDiff) { DoCast(me, SPELL_IRONFORM); m_uiIronform_Timer = urand(25000, 26000); } else m_uiIronform_Timer -= uiDiff; break; } case STANCE_BERSERKER: { if (m_uiIntercept_Timer <= uiDiff) { //not much point is this, better random target and more often? DoCast(me->getVictim(), SPELL_INTERCEPT); m_uiIntercept_Timer = urand(45000, 46000); } else m_uiIntercept_Timer -= uiDiff; if (m_uiWhirlwind_Timer <= uiDiff) { DoCast(me, SPELL_WHIRLWIND); m_uiWhirlwind_Timer = urand(10000, 11000); } else m_uiWhirlwind_Timer -= uiDiff; if (m_uiCleave_Timer <= uiDiff) { DoCast(me->getVictim(), SPELL_CLEAVE); m_uiCleave_Timer = urand(8000, 9000); } else m_uiCleave_Timer -= uiDiff; break; } case STANCE_BATTLE: { if (m_uiMortalStrike_Timer <= uiDiff) { DoCast(me->getVictim(), SPELL_MORTAL_STRIKE); m_uiMortalStrike_Timer = urand(20000, 21000); } else m_uiMortalStrike_Timer -= uiDiff; if (m_uiSlam_Timer <= uiDiff) { DoCast(me->getVictim(), SPELL_SLAM); m_uiSlam_Timer = urand(15000, 16000); } else m_uiSlam_Timer -= uiDiff; break; } } DoMeleeAttackIfReady(); }