void DamageTaken(Unit* /*done_by*/, uint32 &damage) { if (damage < me->GetHealth()) return; //anything below only used if incoming damage will kill if (Phase == PHASE_ROMULO) { DoScriptText(SAY_ROMULO_DEATH, me); PretendToDie(me); IsFakingDeath = true; Phase = PHASE_BOTH; if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID))) { CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->RomuloDead = true; CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->ResurrectSelfTimer = 10000; } damage = 0; return; } if (Phase == PHASE_BOTH) { if (JulianneDead) { if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID))) { Julianne->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); Julianne->GetMotionMaster()->Clear(); Julianne->setDeathState(JUST_DIED); Julianne->CombatStop(true); Julianne->DeleteThreatList(); Julianne->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } return; } if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID))) { PretendToDie(me); IsFakingDeath = true; CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->ResurrectTimer = 10000; CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->RomuloDead = true; damage = 0; return; } } sLog.outError("TSCR: boss_romuloAI: DamageTaken reach end of code, that should not happen."); }
void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (damage < me->GetHealth()) return; //anything below only used if incoming damage will kill if (Phase == PHASE_ROMULO) { Talk(SAY_ROMULO_DEATH); PretendToDie(me); IsFakingDeath = true; Phase = PHASE_BOTH; if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID))) { ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->RomuloDead = true; ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->ResurrectSelfTimer = 10000; } damage = 0; return; } if (Phase == PHASE_BOTH) { if (JulianneDead) { if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID))) { Julianne->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); Julianne->GetMotionMaster()->Clear(); Julianne->setDeathState(JUST_DIED); Julianne->CombatStop(true); Julianne->GetThreatManager().ClearAllThreat(); Julianne->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } return; } if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID))) { PretendToDie(me); IsFakingDeath = true; ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->ResurrectTimer = 10000; ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->RomuloDead = true; damage = 0; return; } } TC_LOG_ERROR("scripts", "boss_romuloAI: DamageTaken reach end of code, that should not happen."); }
void DamageTaken(Unit *done_by, uint32 &damage) { if (done_by->GetGUID() == me->GetGUID()) return; if (damage >= me->GetHealth()) { PretendToDie(); damage = 0; } }
void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &damage) { if (damage < me->GetHealth()) return; //anything below only used if incoming damage will kill if (Phase == PHASE_JULIANNE) { damage = 0; //this means already drinking, so return if (IsFakingDeath) return; me->InterruptNonMeleeSpells(true); DoCast(me, SPELL_DRINK_POISON); IsFakingDeath = true; //IS THIS USEFULL? Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID)); return; } if (Phase == PHASE_ROMULO) { sLog.outError("TSCR: boss_julianneAI: cannot take damage in PHASE_ROMULO, why was i here?"); damage = 0; return; } if (Phase == PHASE_BOTH) { //if this is true then we have to kill romulo too if (RomuloDead) { if (Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID))) { Romulo->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); Romulo->GetMotionMaster()->Clear(); Romulo->setDeathState(JUST_DIED); Romulo->CombatStop(true); Romulo->DeleteThreatList(); Romulo->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } return; } //if not already returned, then romulo is alive and we can pretend die if (Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID))) { PretendToDie(me); IsFakingDeath = true; CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->ResurrectTimer = 10000; CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->JulianneDead = true; damage = 0; return; } } sLog.outError("TSCR: boss_julianneAI: DamageTaken reach end of code, that should not happen."); }
void boss_julianne::boss_julianneAI::UpdateAI(const uint32 diff) { if (EntryYellTimer) { if (EntryYellTimer <= diff) { DoScriptText(SAY_JULIANNE_ENTER, me); EntryYellTimer = 0; } else EntryYellTimer -= diff; } if (AggroYellTimer) { if (AggroYellTimer <= diff) { DoScriptText(SAY_JULIANNE_AGGRO, me); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->setFaction(16); AggroYellTimer = 0; } else AggroYellTimer -= diff; } if (DrinkPoisonTimer) { //will do this 2secs after spell hit. this is time to display visual as expected if (DrinkPoisonTimer <= diff) { PretendToDie(me); Phase = PHASE_ROMULO; SummonRomuloTimer = 10000; DrinkPoisonTimer = 0; } else DrinkPoisonTimer -= diff; } if (Phase == PHASE_ROMULO && !SummonedRomulo) { if (SummonRomuloTimer <= diff) { if (Creature* pRomulo = me->SummonCreature(CREATURE_ROMULO, ROMULO_X, ROMULO_Y, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, HOUR*2*IN_MILLISECONDS)) { RomuloGUID = pRomulo->GetGUID(); CAST_AI(boss_romulo::boss_romuloAI, pRomulo->AI())->JulianneGUID = me->GetGUID(); CAST_AI(boss_romulo::boss_romuloAI, pRomulo->AI())->Phase = PHASE_ROMULO; DoZoneInCombat(pRomulo); pRomulo->setFaction(16); } SummonedRomulo = true; } else SummonRomuloTimer -= diff; } if (ResurrectSelfTimer) { if (ResurrectSelfTimer <= diff) { Resurrect(me); Phase = PHASE_BOTH; IsFakingDeath = false; if (me->getVictim()) AttackStart(me->getVictim()); ResurrectSelfTimer = 0; ResurrectTimer = 1000; } else ResurrectSelfTimer -= diff; } if (!UpdateVictim() || IsFakingDeath) return; if (RomuloDead) { if (ResurrectTimer <= diff) { Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID)); if (Romulo && CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath) { DoScriptText(SAY_JULIANNE_RESURRECT, me); Resurrect(Romulo); CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath = false; RomuloDead = false; ResurrectTimer = 10000; } } else ResurrectTimer -= diff; } if (BlindingPassionTimer <= diff) { if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(pTarget, SPELL_BLINDING_PASSION); BlindingPassionTimer = urand(30000,45000); } else BlindingPassionTimer -= diff; if (DevotionTimer <= diff) { DoCast(me, SPELL_DEVOTION); DevotionTimer = urand(15000,45000); } else DevotionTimer -= diff; if (PowerfulAttractionTimer <= diff) { DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_POWERFUL_ATTRACTION); PowerfulAttractionTimer = urand(5000,30000); } else PowerfulAttractionTimer -= diff; if (EternalAffectionTimer <= diff) { if (urand(0,1) && SummonedRomulo) { Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID)); if (Romulo && Romulo->isAlive() && !RomuloDead) DoCast(Romulo, SPELL_ETERNAL_AFFECTION); } else DoCast(me, SPELL_ETERNAL_AFFECTION); EternalAffectionTimer = urand(45000,60000); } else EternalAffectionTimer -= diff; DoMeleeAttackIfReady(); }