aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorKirkhammett <boev.filip@gmail.com>2013-08-06 23:16:03 +0100
committerNay <dnpd.dd@gmail.com>2013-08-06 23:16:03 +0100
commitc8bfb9cf4df450497263d94869880db6eb7f3c73 (patch)
treebe2871e169ac952bfd3a505aa3b87bb71ae37eb6 /src/server
parent3197d82f2145b9d6d3fe3dee7b1fef53a18c7011 (diff)
DB&Scripts/Icecrown: Fix quest The Last Line Of Defense and script Argent Cannons
Closes #998 Closes #10460
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp2
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp8
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp122
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp16
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp35
5 files changed, 109 insertions, 74 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 0c80945e357..04940858062 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -922,7 +922,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
(*itr)->ToPlayer()->KilledMonsterCredit(e.action.killedMonster.creature);
TC_LOG_DEBUG(LOG_FILTER_DATABASE_AI, "SmartScript::ProcessAction: SMART_ACTION_CALL_KILLEDMONSTER: Player %u, Killcredit: %u",
(*itr)->GetGUIDLow(), e.action.killedMonster.creature);
- }
+ }
else if (IsUnit(*itr)) // Special handling for vehicles
if (Vehicle* vehicle = (*itr)->ToUnit()->GetVehicleKit())
for (SeatMap::iterator itr = vehicle->Seats.begin(); itr != vehicle->Seats.end(); ++itr)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
index cf63b0505d7..7b0bd9858b0 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
@@ -335,15 +335,15 @@ void BattlegroundIC::HandleAreaTrigger(Player* player, uint32 trigger)
/// @hack: this spell should be cast by npc 22515 (World Trigger) and not by the player
if (trigger == 5555 && player->GetTeamId() == TEAM_HORDE)
{
- if (GateStatus[BG_IC_A_FRONT] != BG_IC_GATE_DESTROYED
- && GateStatus[BG_IC_A_WEST] != BG_IC_GATE_DESTROYED
+ if (GateStatus[BG_IC_A_FRONT] != BG_IC_GATE_DESTROYED
+ && GateStatus[BG_IC_A_WEST] != BG_IC_GATE_DESTROYED
&& GateStatus[BG_IC_A_EAST] != BG_IC_GATE_DESTROYED)
player->CastSpell(player, SPELL_BACK_DOOR_JOB_ACHIEVEMENT, true);
}
else if (trigger == 5535 && player->GetTeamId() == TEAM_ALLIANCE)
{
- if (GateStatus[BG_IC_H_FRONT] != BG_IC_GATE_DESTROYED
- && GateStatus[BG_IC_H_WEST] != BG_IC_GATE_DESTROYED
+ if (GateStatus[BG_IC_H_FRONT] != BG_IC_GATE_DESTROYED
+ && GateStatus[BG_IC_H_WEST] != BG_IC_GATE_DESTROYED
&& GateStatus[BG_IC_H_EAST] != BG_IC_GATE_DESTROYED)
player->CastSpell(player, SPELL_BACK_DOOR_JOB_ACHIEVEMENT, true);
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index efd56093f21..6408417e902 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -744,7 +744,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
void JustDied(Unit* /*Killer*/) OVERRIDE
{
- if (_instance)
+ if (_instance)
_instance->SetData(DATA_ESCAPE_EVENT, FAIL);
}
@@ -893,7 +893,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
case EVENT_ESCAPE_13:
if (Creature* lichking = me->GetCreature(*me, _lichkingGUID))
{
- lichking->AI()->DoCast(lichking, SPELL_REMORSELESS_WINTER, true);
+ lichking->AI()->DoCast(lichking, SPELL_REMORSELESS_WINTER, true);
lichking->AI()->DoCast(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR);
lichking->GetMotionMaster()->MoveIdle();
lichking->GetMotionMaster()->MoveChase(me);
@@ -901,9 +901,9 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
if (Creature* walltarget = me->SummonCreature(NPC_ICE_WALL,IceWalls[0].GetPositionX(), IceWalls[0].GetPositionY(), IceWalls[0].GetPositionZ(), IceWalls[0].GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN, 720000))
{
_walltargetGUID = walltarget->GetGUID();
- walltarget->AI()->DoCast(walltarget, SPELL_SUMMON_ICE_WALL);
+ walltarget->AI()->DoCast(walltarget, SPELL_SUMMON_ICE_WALL);
walltarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->Attack(walltarget,false);
+ me->Attack(walltarget,false);
}
me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[3]);
_events.ScheduleEvent(EVENT_ESCAPE_14, 8000);
@@ -921,7 +921,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
else
me->AI()->Talk(SAY_SYLVANAS_ESCAPE_2);
}
- }
+ }
_events.ScheduleEvent(EVENT_ESCAPE_15, 1000);
break;
case EVENT_ESCAPE_15:
@@ -966,7 +966,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
else
me->RemoveAurasDueToSpell(SPELL_SYLVANAS_DESTROY_ICE_WALL);
}
- if (_icewall && _icewall < 4)
+ if (_icewall && _icewall < 4)
me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[_icewall + 3]);
_events.ScheduleEvent(EVENT_ESCAPE_18, 2000);
break;
@@ -991,7 +991,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
if (Creature* walltarget = me->SummonCreature(NPC_ICE_WALL, IceWalls[_icewall].GetPositionX(), IceWalls[_icewall].GetPositionY(), IceWalls[_icewall].GetPositionZ(), IceWalls[_icewall].GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN, 720000))
{
_walltargetGUID = walltarget->GetGUID();
- walltarget->AI()->DoCast(walltarget, SPELL_SUMMON_ICE_WALL);
+ walltarget->AI()->DoCast(walltarget, SPELL_SUMMON_ICE_WALL);
walltarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->Attack(walltarget,false);
}
@@ -1028,9 +1028,9 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
if (Creature* lichking = me->GetCreature(*me, _lichkingGUID))
{
if (_icewall && _icewall < 3)
- lichking->AI()->DoCast(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR);
+ lichking->AI()->DoCast(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR);
else
- lichking->AI()->DoCast(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION);
+ lichking->AI()->DoCast(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION);
}
if (_icewall == 3)
_events.ScheduleEvent(EVENT_ESCAPE_21, 16000); // last wall, really far
@@ -1826,20 +1826,20 @@ class npc_raging_ghoul : public CreatureScript
{
public:
npc_raging_ghoul() : CreatureScript("npc_raging_ghoul") { }
-
+
struct npc_raging_ghoulAI : public ScriptedAI
{
npc_raging_ghoulAI(Creature* creature) : ScriptedAI(creature)
{
- _instance = me->GetInstanceScript();
+ _instance = me->GetInstanceScript();
}
-
+
InstanceScript* _instance;
uint32 _emergeTimer;
bool _doEmerge;
bool _doJump;
uint64 _leaderGUID;
-
+
void Reset() OVERRIDE
{
_emergeTimer = 4000;
@@ -1847,47 +1847,47 @@ public:
_doJump = false;
if (_instance && _instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
_instance->SetData(DATA_SUMMONS, 1);
-
+
}
-
+
void IsSummonedBy(Unit*) OVERRIDE
{
DoCast(me, SPELL_EMERGE_VISUAL);
DoZoneInCombat(me, 100.00f);
}
-
+
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (_instance)
_instance->SetData(DATA_SUMMONS, 0);
}
-
+
void AttackStart(Unit* who) OVERRIDE
{
if (!who)
return;
-
+
if (!_doEmerge)
return;
-
+
ScriptedAI::AttackStart(who);
}
-
+
void UpdateAI(uint32 diff) OVERRIDE
{
if (!_instance)
return;
-
+
if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
{
_leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER);
Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER));
-
+
if (_doEmerge != true)
{
if (_emergeTimer < diff)
{
- _doEmerge = true;
+ _doEmerge = true;
if (leader)
{
DoResetThreat();
@@ -1898,7 +1898,7 @@ public:
else
_emergeTimer -= diff;
}
-
+
if (me->Attack(leader,true))/*(Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150.0f))*/
{
if (!_doJump && me->IsWithinDistInMap(leader, 30.0f) && !me->IsWithinDistInMap(leader, 5.0f))
@@ -1913,7 +1913,7 @@ public:
DoMeleeAttackIfReady();
}
};
-
+
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new npc_raging_ghoulAI(creature);
@@ -1924,14 +1924,14 @@ class npc_risen_witch_doctor : public CreatureScript
{
public:
npc_risen_witch_doctor() : CreatureScript("npc_risen_witch_doctor") { }
-
+
struct npc_risen_witch_doctorAI : public ScriptedAI
{
npc_risen_witch_doctorAI(Creature* creature) : ScriptedAI(creature)
{
- _instance = me->GetInstanceScript();
+ _instance = me->GetInstanceScript();
}
-
+
InstanceScript* _instance;
uint32 _emergeTimer;
bool _doEmerge;
@@ -1939,7 +1939,7 @@ public:
uint32 _boltTimer;
uint32 _boltVolleyTimer;
uint32 _curseTimer;
-
+
void Reset() OVERRIDE
{
_emergeTimer = 5000;
@@ -1951,36 +1951,36 @@ public:
if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
_instance->SetData(DATA_SUMMONS, 1);
}
-
+
void IsSummonedBy(Unit*) OVERRIDE
{
DoCast(me, SPELL_EMERGE_VISUAL);
DoZoneInCombat(me, 100.00f);
}
-
+
void JustDied(Unit* /*killer*/) OVERRIDE
{
- if (_instance)
+ if (_instance)
_instance->SetData(DATA_SUMMONS, 0);
-
+
}
-
+
void AttackStart(Unit* who) OVERRIDE
{
if (!who)
return;
-
+
if (_doEmerge == false)
return;
-
+
ScriptedAI::AttackStart(who);
}
-
+
void UpdateAI(uint32 diff) OVERRIDE
{
if (!_instance)
return;
-
+
if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
{
if (_doEmerge != true)
@@ -1989,7 +1989,7 @@ public:
{
_doEmerge = true;
_leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER);
-
+
if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
{
DoResetThreat();
@@ -2000,25 +2000,25 @@ public:
else
_emergeTimer -= diff;
}
-
+
if (_curseTimer < diff)
{
if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM))
DoCast(target, SPELL_COURSE_OF_DOOM);
_curseTimer = urand(10000, 15000);
- }
- else
+ }
+ else
_curseTimer -= diff;
-
+
if (_boltTimer < diff)
{
if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO))
DoCast(target, SPELL_SHADOW_BOLT);
_boltTimer = urand(2000, 3000);
- }
- else
+ }
+ else
_boltTimer -= diff;
-
+
if (_boltVolleyTimer < diff)
{
if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO))
@@ -2033,7 +2033,7 @@ public:
DoMeleeAttackIfReady();
}
};
-
+
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new npc_risen_witch_doctorAI(creature);
@@ -2045,20 +2045,20 @@ class npc_lumbering_abomination : public CreatureScript
{
public:
npc_lumbering_abomination() : CreatureScript("npc_lumbering_abomination") { }
-
+
struct npc_lumbering_abominationAI : public ScriptedAI
{
npc_lumbering_abominationAI(Creature* creature) : ScriptedAI(creature)
{
- _instance = me->GetInstanceScript();
+ _instance = me->GetInstanceScript();
}
-
+
InstanceScript* _instance;
uint64 _leaderGUID;
bool _doWalk;
uint32 _strikeTimer;
uint32 _vomitTimer;
-
+
void Reset() OVERRIDE
{
_doWalk = false;
@@ -2066,20 +2066,20 @@ public:
_strikeTimer = 6000;
if (_instance)
if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
- _instance->SetData(DATA_SUMMONS, 1);
+ _instance->SetData(DATA_SUMMONS, 1);
}
-
+
void IsSummonedBy(Unit*) OVERRIDE
{
DoCast(me, SPELL_EMERGE_VISUAL);
DoZoneInCombat(me, 100.00f);
}
-
+
void UpdateAI(uint32 diff) OVERRIDE
{
if (!_instance)
return;
-
+
if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
{
if (_doWalk != true)
@@ -2101,7 +2101,7 @@ public:
}
else
_strikeTimer -= diff;
-
+
if (_vomitTimer < diff)
{
if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO))
@@ -2115,15 +2115,15 @@ public:
me->DespawnOrUnsummon();
DoMeleeAttackIfReady();
}
-
+
void JustDied(Unit* /*killer*/) OVERRIDE
{
- if (_instance)
+ if (_instance)
_instance->SetData(DATA_SUMMONS, 0);
}
-
+
};
-
+
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new npc_lumbering_abominationAI(creature);
@@ -2145,7 +2145,7 @@ void AddSC_halls_of_reflection()
new npc_tortured_rifleman();
new npc_raging_ghoul();
new npc_risen_witch_doctor();
- new npc_lumbering_abomination();
+ new npc_lumbering_abomination();
new npc_frostworn_general();
new npc_spiritual_reflection();
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
index c5c1811d30e..a026a6636d4 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
@@ -181,7 +181,7 @@ public:
HandleGameObject(0, true, go);
else
HandleGameObject(0, false, go);
- break;
+ break;
case GO_CAVE:
_caveGUID = go->GetGUID();
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
@@ -255,17 +255,17 @@ public:
if (_teamInInstance == ALLIANCE)
instance->SummonCreature(NPC_JAINA_PART2, JainaSpawnPos2);
else
- instance->SummonCreature(NPC_SYLVANAS_PART2, SylvanasSpawnPos2);
+ instance->SummonCreature(NPC_SYLVANAS_PART2, SylvanasSpawnPos2);
}
- _frostwornGeneral = data;
- break;
+ _frostwornGeneral = data;
+ break;
case DATA_ESCAPE_EVENT:
if (data == IN_PROGRESS)
{
if (!_escapeevent)
if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID))
jaina_or_sylvanas->AI()->DoAction(ACTION_START_ESCAPING);
- }
+ }
else if (data == NOT_STARTED)
{
if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID))
@@ -287,7 +287,7 @@ public:
if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID))
jaina_or_sylvanas->AI()->DoAction(ACTION_WALL_BROKEN);
}
- }
+ }
else if (data == 1)
_mobsaticewall++;
break;
@@ -489,9 +489,9 @@ public:
case DATA_FROSTMOURNE:
return _frostmourneGUID;
case DATA_ESCAPE_LEADER:
- return _jainaOrSylvanasPart2GUID;
+ return _jainaOrSylvanasPart2GUID;
case DATA_CAVE_IN:
- return _caveGUID;
+ return _caveGUID;
default:
break;
}
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index d87278cefc0..10cc62a8a91 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -1785,6 +1785,40 @@ class spell_q12847_summon_soul_moveto_bunny : public SpellScriptLoader
}
};
+class spell_q13086_cannons_target : public SpellScriptLoader
+{
+ public:
+ spell_q13086_cannons_target() : SpellScriptLoader("spell_q13086_cannons_target") { }
+
+ class spell_q13086_cannons_target_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_q13086_cannons_target_SpellScript);
+
+ bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].CalcValue()))
+ return false;
+ return true;
+ }
+
+ void HandleEffectDummy(SpellEffIndex /*effIndex*/)
+ {
+ if (WorldLocation const* pos = GetExplTargetDest())
+ GetCaster()->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), GetEffectValue(), true);
+ }
+
+ void Register() OVERRIDE
+ {
+ OnEffectHit += SpellEffectFn(spell_q13086_cannons_target_SpellScript::HandleEffectDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const OVERRIDE
+ {
+ return new spell_q13086_cannons_target_SpellScript();
+ }
+};
+
void AddSC_quest_spell_scripts()
{
new spell_q55_sacred_cleansing();
@@ -1829,4 +1863,5 @@ void AddSC_quest_spell_scripts()
new spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy();
new spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon();
new spell_q12847_summon_soul_moveto_bunny();
+ new spell_q13086_cannons_target();
}