aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/northrend/dalaran.cpp73
1 files changed, 27 insertions, 46 deletions
diff --git a/src/bindings/scripts/scripts/northrend/dalaran.cpp b/src/bindings/scripts/scripts/northrend/dalaran.cpp
index bb66161800e..9eb8d70e499 100644
--- a/src/bindings/scripts/scripts/northrend/dalaran.cpp
+++ b/src/bindings/scripts/scripts/northrend/dalaran.cpp
@@ -36,16 +36,11 @@ enum Spells
SPELL_TRESPASSER_H = 54029
};
-inline float __round(float x, int precision)
+enum NPCs // All outdoor guards are within 35.0f of these NPCs
{
- if (precision > 0)
- {
- precision = pow(10.0f, precision);
- x *= precision;
- return int(x > 0.0 ? x + 0.5 : x - 0.5)/precision;
- }
- return int(x > 0.0 ? x + 0.5 : x - 0.5);
-}
+ NPC_APPLEBOUGH_A = 29547,
+ NPC_SWEETBERRY_H = 29715,
+};
struct TRINITY_DLL_DECL npc_mageguard_dalaranAI : public Scripted_NoMovementAI
{
@@ -54,34 +49,20 @@ struct TRINITY_DLL_DECL npc_mageguard_dalaranAI : public Scripted_NoMovementAI
pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
pCreature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_NORMAL, true);
pCreature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
-
- Reset();
}
- void Reset() {}
+ void Reset(){}
- void Aggro(Unit* pWho)
- {
- return;
- }
+ void Aggro(Unit* pWho){}
- void AttackStart(Unit* pWho)
- {
- return;
- }
+ void AttackStart(Unit* pWho){}
void MoveInLineOfSight(Unit *pWho)
{
- if (m_creature->isInCombat())
- return;
-
- if (!pWho)
- return;
-
- if (pWho->GetZoneId() != 4395) // Dalaran
+ if (!pWho || me->GetZoneId() != 4395) // Must be in Dalaran
return;
- if (!me->IsWithinDist(pWho, 100.0f, false))
+ if (!me->IsWithinDist(pWho, 65.0f, false))
return;
Player *pPlayer = pWho->GetCharmerOrOwnerPlayerOrPlayerItself();
@@ -89,29 +70,29 @@ struct TRINITY_DLL_DECL npc_mageguard_dalaranAI : public Scripted_NoMovementAI
if (!pPlayer || pPlayer->isGameMaster())
return;
- float radians = me->GetAngle(pWho);
- float xWeight = __round(cos(radians), 3);
- float yWeight = __round(sin(radians), 3);
float x = pWho->GetPositionX();
float y = pWho->GetPositionY();
- float myX = me->GetPositionX();
- float myY = me->GetPositionY();
- if (x + (2.0f * xWeight) < myX && y + (2.0f * yWeight) < myY)
- switch (m_creature->GetEntry())
- {
- case 29254:
- if (pPlayer->GetTeam() == HORDE)
- DoCast(pWho, SPELL_TRESPASSER_A);
- break;
- case 29255:
- if (pPlayer->GetTeam() == ALLIANCE)
- DoCast(pWho, SPELL_TRESPASSER_H);
- break;
- }
+ switch (m_creature->GetEntry())
+ {
+ case 29254:
+ if (pPlayer->GetTeam() == HORDE)
+ if (const Creature *pOutdoorNPC = me->FindNearestCreature(NPC_APPLEBOUGH_A, 200.0f))
+ if ((!me->HasInArc(M_PI, pWho) && me->IsWithinDist(pOutdoorNPC, 35.0f, false)) // Behind me, and "outdoors"
+ || ( me->HasInArc(M_PI, pWho) && !me->IsWithinDist(pOutdoorNPC, 35.0f, false))) // In front of me, and "indoors"
+ DoCast(pWho, SPELL_TRESPASSER_A); // Teleport the Horde unit out
+ break;
+ case 29255:
+ if (pPlayer->GetTeam() == ALLIANCE)
+ if (const Creature *pOutdoorNPC = me->FindNearestCreature(NPC_SWEETBERRY_H, 200.0f))
+ if ((!me->HasInArc(M_PI, pWho) && me->IsWithinDist(pOutdoorNPC, 35.0f, false)) // Behind me, and "outdoors"
+ || ( me->HasInArc(M_PI, pWho) && !me->IsWithinDist(pOutdoorNPC, 35.0f, false))) // In front of me, and "indoors"
+ DoCast(pWho, SPELL_TRESPASSER_H); // Teleport the Alliance unit out
+ break;
+ }
return;
}
- void UpdateAI(const uint32 diff) {}
+ void UpdateAI(const uint32 diff){}
};
CreatureAI* GetAI_npc_mageguard_dalaran(Creature* pCreature)