aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorclick <click@gonnamakeyou.com>2011-06-24 17:07:31 +0200
committerclick <click@gonnamakeyou.com>2011-06-24 17:07:31 +0200
commit4ec9ecd3e0404b6e9c5de7055c8e0f474aeadf20 (patch)
tree6bc4a20b7724690865c26d4a04fb0ef766e91cd4
parent0bdbd771cea06d2def29f83d999e5ecf0fdd83ef (diff)
Scripts/EmeraldDragons: Fix a few small snaggs:
- Teleport highest aggro player to front of dragon if exceeding 50 yards - Clean up target selection/handling slightly - Remove UpdateAI-segments from the dragons, it's already handled in the base AI
-rw-r--r--src/server/scripts/World/boss_emerald_dragons.cpp76
1 files changed, 9 insertions, 67 deletions
diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp
index 223dbb43f11..ac101d239b5 100644
--- a/src/server/scripts/World/boss_emerald_dragons.cpp
+++ b/src/server/scripts/World/boss_emerald_dragons.cpp
@@ -85,9 +85,6 @@ enum Events
* ---
* --- Emerald Dragons : Base AI-structure used for all the Emerald dragons
* ---
- *
- * TODO
- * - Fix player teleportation when running off too far from the dragon (emerald_dragonAI)
*/
struct emerald_dragonAI : public WorldBossAI
@@ -153,10 +150,8 @@ struct emerald_dragonAI : public WorldBossAI
while (uint32 eventId = events.ExecuteEvent())
ExecuteEvent(eventId);
- std::list<HostileReference*> threats = me->getThreatManager().getThreatList();
- if (Unit* target = threats.front()->getTarget())
- if ((target->GetTypeId() == TYPEID_PLAYER) && (me->GetDistance(target) > 20.0f))
- DoCast(target, SPELL_SUMMON_PLAYER);
+ if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0, -50.0f, true))
+ DoCast(target, SPELL_SUMMON_PLAYER);
DoMeleeAttackIfReady();
}
@@ -190,8 +185,7 @@ class npc_dream_fog : public CreatureScript
if (!_roamTimer)
{
// Chase target, but don't attack - otherwise just roam around
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true);
- if (target)
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
{
_roamTimer = urand(15000, 30000);
me->GetMotionMaster()->Clear(false);
@@ -397,22 +391,6 @@ class boss_ysondre : public CreatureScript
}
}
- void UpdateAI(uint32 const diff)
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STAT_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- ExecuteEvent(eventId);
-
- DoMeleeAttackIfReady();
- }
-
private:
uint8 _stage;
};
@@ -496,22 +474,6 @@ class boss_lethon : public CreatureScript
}
}
- void UpdateAI(uint32 const diff)
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STAT_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- ExecuteEvent(eventId);
-
- DoMeleeAttackIfReady();
- }
-
private:
uint8 _stage;
};
@@ -597,22 +559,6 @@ class boss_emeriss : public CreatureScript
}
}
- void UpdateAI(uint32 const diff)
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STAT_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- ExecuteEvent(eventId);
-
- DoMeleeAttackIfReady();
- }
-
private:
uint8 _stage;
};
@@ -738,12 +684,7 @@ class boss_taerar : public CreatureScript
void UpdateAI(uint32 const diff)
{
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STAT_CASTING))
+ if (!me->isInCombat())
return;
if (_banished)
@@ -760,13 +701,14 @@ class boss_taerar : public CreatureScript
// _banishtimer has not expired, and we still have active shades:
else
_banishedTimer -= diff;
+
+ // Update the events before we return (handled under emerald_dragonAI::UpdateAI(diff); if we're not inside this check)
+ events.Update(diff);
+
return;
}
- while (uint32 eventId = events.ExecuteEvent())
- ExecuteEvent(eventId);
-
- DoMeleeAttackIfReady();
+ emerald_dragonAI::UpdateAI(diff);
}
private: