aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Northrend
diff options
context:
space:
mode:
authorVincent_Michael <Vincent_Michael@gmx.de>2013-03-09 00:32:33 +0100
committerVincent_Michael <Vincent_Michael@gmx.de>2013-03-09 00:32:33 +0100
commit83a5043741c0ef3d96ff59571305eae30d360ed5 (patch)
tree923a3e255c0f3801192ce21250c41a64c46e72f8 /src/server/scripts/Northrend
parenta196ab60c3c38ed4f986b2a563880e43f1014f99 (diff)
parent2dbe3d6cfe2d174b5edf9fdb6720fee21c7009d2 (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts: src/server/game/Handlers/ChatHandler.cpp
Diffstat (limited to 'src/server/scripts/Northrend')
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp17
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp14
-rw-r--r--src/server/scripts/Northrend/zone_icecrown.cpp89
3 files changed, 110 insertions, 10 deletions
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index 27331acca2b..6f50dbc427a 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -19,13 +19,10 @@
SDName: Boss Malygos
Script Data End */
-/* Main problems needing most attention:
- 1) Add support for using Exit Portal while on drake which means to
- find seat flag that allows casting on passenger or something that
- will prevent valid target filtering.
- 2) Find what cause client not sending release now availability
- if player dies after far falling. For now player needs to logout to get body after
- if release button remain unavailable after box popping.*/
+/* Main problem needing most attention:
+ Add support for using Exit Portal while on drake which means to
+ find seat flag that allows casting on passenger or something that
+ will prevent valid target filtering. */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
@@ -359,8 +356,8 @@ public:
_summonDeaths = 0;
_preparingPulsesChecker = 0;
- _arcaneOverloadGUID = NULL;
- _lastHitByArcaneBarrageGUID = NULL;
+ _arcaneOverloadGUID = 0;
+ _lastHitByArcaneBarrageGUID = 0;
memset(_surgeTargetGUID, 0, sizeof(_surgeTargetGUID));
_killSpamFilter = false;
@@ -2054,7 +2051,7 @@ class spell_scion_of_eternity_arcane_barrage : public SpellScriptLoader
// in longer terms this means if spell picks target X then 2nd cast of this spell will pick smth else
// and if 3rd picks X again 4th will pick smth else (by not limiting the cast to certain caster).
if (targets.size() > 1)
- if (malygos && malygos->AI()->GetGUID(DATA_LAST_TARGET_BARRAGE_GUID) != NULL)
+ if (malygos && malygos->AI()->GetGUID(DATA_LAST_TARGET_BARRAGE_GUID))
targets.remove_if(Trinity::ObjectGUIDCheck(malygos->AI()->GetGUID(DATA_LAST_TARGET_BARRAGE_GUID)));
// Remove players not on Hover Disk from second list
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
index 52ce259117f..9099f03c6f0 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
@@ -152,6 +152,20 @@ public:
}
}
+ void OnUnitDeath(Unit* unit)
+ {
+ if (unit->GetTypeId() != TYPEID_PLAYER)
+ return;
+
+ // For some reason player continues sometimes to be moving after death on this map,
+ // perhaps only client side issue am not entirtly sure.
+ // This fix not being able to press release button.
+ // Variation of this with some check needs to be implemented somewhere within core code.
+ // It'll stay here until someone find where and why the leak happens.
+ if (Player* dyingPlayer = unit->ToPlayer())
+ dyingPlayer->StopMoving();
+ }
+
void ProcessEvent(WorldObject* /*obj*/, uint32 eventId)
{
if (eventId == EVENT_FOCUSING_IRIS)
diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp
index d5641b0fcc7..70b500166c9 100644
--- a/src/server/scripts/Northrend/zone_icecrown.cpp
+++ b/src/server/scripts/Northrend/zone_icecrown.cpp
@@ -32,6 +32,8 @@ EndContentData */
#include "ScriptedGossip.h"
#include "SpellAuras.h"
#include "Player.h"
+#include "TemporarySummon.h"
+#include "CombatAI.h"
/*######
## npc_arete
@@ -874,6 +876,92 @@ public:
}
};
+/*######
+## Borrowed Technology - Id: 13291, The Solution Solution (daily) - Id: 13292, Volatility - Id: 13239, Volatiliy - Id: 13261 (daily)
+######*/
+
+enum BorrowedTechnologyAndVolatility
+{
+ // Spells
+ SPELL_GRAB = 59318,
+ SPELL_PING_BUNNY = 59375,
+ SPELL_IMMOLATION = 54690,
+ SPELL_EXPLOSION = 59335,
+ SPELL_RIDE = 56687,
+
+ // Points
+ POINT_GRAB_DECOY = 1,
+ POINT_FLY_AWAY = 2,
+
+ // Events
+ EVENT_FLY_AWAY = 1
+};
+
+class npc_frostbrood_skytalon : public CreatureScript
+{
+ public:
+ npc_frostbrood_skytalon() : CreatureScript("npc_frostbrood_skytalon") { }
+
+ struct npc_frostbrood_skytalonAI : public VehicleAI
+ {
+ npc_frostbrood_skytalonAI(Creature* creature) : VehicleAI(creature) { }
+
+ EventMap events;
+
+ void IsSummonedBy(Unit* summoner)
+ {
+ me->GetMotionMaster()->MovePoint(POINT_GRAB_DECOY, summoner->GetPositionX(), summoner->GetPositionY(), summoner->GetPositionZ());
+ }
+
+ void MovementInform(uint32 type, uint32 id)
+ {
+ if (type != POINT_MOTION_TYPE)
+ return;
+
+ if (id == POINT_GRAB_DECOY)
+ if (TempSummon* summon = me->ToTempSummon())
+ if (Unit* summoner = summon->GetSummoner())
+ DoCast(summoner, SPELL_GRAB);
+ }
+
+ void UpdateAI(uint32 diff)
+ {
+ VehicleAI::UpdateAI(diff);
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ if (eventId == EVENT_FLY_AWAY)
+ {
+ Position randomPosOnRadius;
+ randomPosOnRadius.m_positionZ = (me->GetPositionZ() + 40.0f);
+ me->GetNearPoint2D(randomPosOnRadius.m_positionX, randomPosOnRadius.m_positionY, 40.0f, me->GetAngle(me));
+ me->GetMotionMaster()->MovePoint(POINT_FLY_AWAY, randomPosOnRadius);
+ }
+ }
+ }
+
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell)
+ {
+ switch (spell->Id)
+ {
+ case SPELL_EXPLOSION:
+ DoCast(me, SPELL_IMMOLATION);
+ break;
+ case SPELL_RIDE:
+ DoCastAOE(SPELL_PING_BUNNY);
+ events.ScheduleEvent(EVENT_FLY_AWAY, 100);
+ break;
+ }
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_frostbrood_skytalonAI(creature);
+ }
+};
+
void AddSC_icecrown()
{
new npc_arete;
@@ -883,4 +971,5 @@ void AddSC_icecrown()
new npc_vereth_the_cunning;
new npc_tournament_training_dummy;
new npc_blessed_banner();
+ new npc_frostbrood_skytalon();
}