aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/zone_hinterlands.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
index e58c2eb6e04..e53077b7b83 100644
--- a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
@@ -133,7 +133,103 @@ public:
}
};
+enum Sharpbeak
+{
+ SPELL_TAXI_CAMP_TO_JINTHAALOR = 80657,
+ SPELL_TAXI_JINTHAALOR_TO_CAMP = 94120,
+ SPELL_EJECT_ALL_PASSENGERS = 50630
+};
+
+G3D::Vector3 const firstPath[13] =
+{
+ { -79.13181f, -4038.275f, 114.5022f },
+ { -70.66745f, -4034.817f, 123.6146f },
+ { -62.2031f, -4031.36f, 132.727f },
+ { -48.5851f, -4008.04f, 156.977f },
+ { -26.2691f, -3987.88f, 176.755f },
+ { 11.5087f, -3960.86f, 203.561f },
+ { 45.0087f, -3922.58f, 236.672f },
+ { 75.4427f, -3856.91f, 255.672f },
+ { 74.8351f, -3768.84f, 279.839f },
+ { -53.0104f, -3582.62f, 287.755f },
+ { -169.123f, -3582.08f, 282.866f },
+ { -241.8403f, -3625.01f, 247.4203f },
+ { -241.8403f, -3625.01f, 247.4203f }
+};
+
+G3D::Vector3 const secondPath[21] =
+{
+ { -241.606f, -3627.713f, 236.61870f },
+ { -241.606f, -3627.713f, 236.61870f },
+ { -235.6163f, -3624.076f, 239.6081f },
+ { -226.8698f, -3623.929f, 244.8882f },
+ { -193.6406f, -3618.776f, 244.8882f },
+ { -149.7292f, -3613.349f, 244.8882f },
+ { -103.8976f, -3623.828f, 238.0368f },
+ { -41.33681f, -3710.568f, 232.4109f },
+ { 6.201389f, -3739.243f, 214.2869f },
+ { 37.44097f, -3773.431f, 189.4650f },
+ { 44.21875f, -3884.991f, 177.7446f },
+ { 39.81424f, -3934.679f, 168.1627f },
+ { 32.17535f, -3983.781f, 166.1228f },
+ { 21.34896f, -4005.293f, 162.9598f },
+ { -5.734375f, -4028.695f, 149.0161f },
+ { -23.23611f, -4040.689f, 140.1189f },
+ { -35.45139f, -4047.543f, 133.2071f },
+ { -59.21181f, -4051.257f, 128.0297f },
+ { -76.90625f, -4040.207f, 126.0433f },
+ { -77.51563f, -4022.026f, 123.2135f },
+ { -77.51563f, -4022.026f, 123.2135f }
+};
+
+class npc_sharpbeak : public CreatureScript
+{
+public:
+ npc_sharpbeak() : CreatureScript("npc_sharpbeak") { }
+
+ struct npc_sharpbeak_AI : public VehicleAI
+ {
+ npc_sharpbeak_AI(Creature* creature) : VehicleAI(creature) { }
+
+ void IsSummonedBy(Unit* summoner) override
+ {
+ uint32 summonedBySpell = me->GetUInt32Value(UNIT_CREATED_BY_SPELL);
+
+ // means we were not created by spell
+ if (!summonedBySpell)
+ return;
+
+ me->SetCanFly(true);
+
+ switch (summonedBySpell)
+ {
+ case SPELL_TAXI_CAMP_TO_JINTHAALOR: // spellid one
+ me->GetMotionMaster()->MoveSmoothPath(1, firstPath, 13, false);
+ break;
+ case SPELL_TAXI_JINTHAALOR_TO_CAMP: // spellid two
+ me->GetMotionMaster()->MoveSmoothPath(1, secondPath, 21, false);
+ break;
+ }
+ }
+
+ void MovementInform(uint32 type, uint32 pointId) override
+ {
+ if (type == EFFECT_MOTION_TYPE && pointId == 1)
+ {
+ DoCast(SPELL_EJECT_ALL_PASSENGERS);
+ me->DespawnOrUnsummon(Seconds(2).count());
+ }
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_sharpbeak_AI(creature);
+ }
+};
+
void AddSC_hinterlands()
{
new npc_oox09hl();
+ new npc_sharpbeak();
}