void TryHealBrother(uint32 diff) { if (IAmVeklor()) // this spell heals caster and the other brother so let VN cast it return; if (Heal_Timer <= diff) { Unit* pOtherBoss = GetOtherBoss(); if (pOtherBoss && pOtherBoss->IsWithinDist(me, 60)) { DoCast(pOtherBoss, SPELL_HEAL_BROTHER); Heal_Timer = 1000; } } else Heal_Timer -= diff; }
void TryHealBrother(uint32 diff) { if (IAmVeklor()) // this spell heals caster and the other brother so let VN cast it return; if (Heal_Timer <= diff) { Unit *pOtherBoss = GetOtherBoss(); if (pOtherBoss && (pOtherBoss->GetDistance((const Creature *)me) <= 60)) { DoCast(pOtherBoss, SPELL_HEAL_BROTHER); Heal_Timer = 1000; } } else Heal_Timer -= diff; }
void DamageTaken(Unit* /*done_by*/, uint32 &damage) { Unit* pOtherBoss = GetOtherBoss(); if (pOtherBoss) { float dPercent = ((float)damage) / ((float)me->GetMaxHealth()); int odmg = (int)(dPercent * ((float)pOtherBoss->GetMaxHealth())); int ohealth = pOtherBoss->GetHealth()-odmg; pOtherBoss->SetHealth(ohealth > 0 ? ohealth : 0); if (ohealth <= 0) { pOtherBoss->setDeathState(JUST_DIED); pOtherBoss->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } } }
void Aggro(Unit* pWho) { m_creature->SetInCombatWithZone(); Creature *pOtherBoss = GetOtherBoss(); if (pOtherBoss) { // TODO: we should activate the other boss location so he can start attackning even if nobody // is near I dont know how to do that if (!pOtherBoss->isInCombat()) { DoPlaySoundToSet(m_creature, IAmVeklor() ? SOUND_VL_AGGRO : SOUND_VN_AGGRO); pOtherBoss->AI()->AttackStart(pWho); } } }
void EnterCombat(Unit* who) { DoZoneInCombat(); Creature* pOtherBoss = GetOtherBoss(); if (pOtherBoss) { // TODO: we should activate the other boss location so he can start attackning even if nobody // is near I dont know how to do that ScriptedAI* otherAI = CAST_AI(ScriptedAI, pOtherBoss->AI()); if (!pOtherBoss->isInCombat()) { DoPlaySoundToSet(me, IAmVeklor() ? SOUND_VL_AGGRO : SOUND_VN_AGGRO); otherAI->AttackStart(who); otherAI->DoZoneInCombat(); } } }
void Aggro(Unit* pWho) { Creature *pOtherBoss = GetOtherBoss(); if (pOtherBoss) { // TODO: we should activate the other boss location so he can start attackning even if nobody // is near I dont know how to do that if (!pOtherBoss->isInCombat()) { DoPlaySoundToSet(m_creature, IAmVeklor() ? SOUND_VL_AGGRO : SOUND_VN_AGGRO); pOtherBoss->AI()->AttackStart(pWho); } } if (m_pInstance) m_pInstance->SetData(TYPE_TWINS, IN_PROGRESS); }
void JustDied(Unit* Killer) { if (Creature* pOtherBoss = GetOtherBoss()) { pOtherBoss->SetHealth(0); pOtherBoss->SetDeathState(JUST_DIED); pOtherBoss->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); if (boss_twinemperorsAI* pOtherAI = dynamic_cast<boss_twinemperorsAI*>(pOtherBoss->AI())) pOtherAI->DontYellWhenDead = true; } if (!DontYellWhenDead) // I hope AI is not threaded DoPlaySoundToSet(m_creature, IAmVeklor() ? SOUND_VL_DEATH : SOUND_VN_DEATH); if (m_pInstance) m_pInstance->SetData(TYPE_TWINS, DONE); }
void TeleportToMyBrother() { Teleport_Timer = TELEPORTTIME; if (IAmVeklor()) return; // mechanics handled by veknilash so they teleport exactly at the same time and to correct coordinates Creature* pOtherBoss = GetOtherBoss(); if (pOtherBoss) { //me->MonsterYell("Teleporting ...", LANG_UNIVERSAL, 0); Position thisPos; thisPos.Relocate(me); Position otherPos; otherPos.Relocate(pOtherBoss); pOtherBoss->SetPosition(thisPos); me->SetPosition(otherPos); SetAfterTeleport(); CAST_AI(boss_twinemperorsAI, pOtherBoss->AI())->SetAfterTeleport(); } }