aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Northrend
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2012-10-30 10:30:05 +0100
committerSpp <spp@jorge.gr>2012-10-30 10:30:05 +0100
commitc97fc99e1683edc4a5b177119ba7a775cf7a19a1 (patch)
tree16007f950c058d3c6963e2924981d7bbe5a3c898 /src/server/scripts/Northrend
parent59a828b49ed1e07bd5d705e3d3aa1a6d110be8fc (diff)
parentcd8e9dfb5213f6e299065cc1f87535a26c2f2936 (diff)
Merge branch 'master' into 4.3.4
Note: What a bad automatic merge!!! needed to fix a lot of stuff... grrr Conflicts: src/server/game/AI/EventAI/CreatureEventAI.cpp src/server/game/AI/EventAI/CreatureEventAIMgr.cpp src/server/game/Achievements/AchievementMgr.cpp src/server/game/Entities/Creature/GossipDef.cpp src/server/game/Entities/Pet/Pet.cpp src/server/game/Entities/Player/Player.cpp src/server/game/Entities/Player/Player.h src/server/game/Globals/ObjectMgr.cpp src/server/game/Guilds/Guild.cpp src/server/game/Guilds/Guild.h src/server/game/Guilds/GuildMgr.h src/server/game/Handlers/AuctionHouseHandler.cpp src/server/game/Handlers/BattleGroundHandler.cpp src/server/game/Handlers/ChannelHandler.cpp src/server/game/Handlers/CharacterHandler.cpp src/server/game/Handlers/ChatHandler.cpp src/server/game/Handlers/GroupHandler.cpp src/server/game/Handlers/LFGHandler.cpp src/server/game/Handlers/MiscHandler.cpp src/server/game/Handlers/QuestHandler.cpp src/server/game/Handlers/TradeHandler.cpp src/server/game/Quests/QuestDef.h src/server/game/Server/Protocol/Opcodes.cpp src/server/game/Server/WorldSession.cpp src/server/game/Server/WorldSession.h src/server/game/Spells/Spell.cpp src/server/scripts/Commands/cs_debug.cpp src/server/scripts/Commands/cs_titles.cpp src/server/scripts/Kalimdor/boss_azuregos.cpp src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp
Diffstat (limited to 'src/server/scripts/Northrend')
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp20
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp8
-rw-r--r--src/server/scripts/Northrend/sholazar_basin.cpp109
-rw-r--r--src/server/scripts/Northrend/wintergrasp.cpp3
5 files changed, 121 insertions, 23 deletions
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index 9aa2ccbee9d..411e55275b9 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -368,7 +368,7 @@ class boss_halion : public CreatureScript
{
events.SetPhase(PHASE_TWO);
Talk(SAY_PHASE_TWO);
-
+
me->CastStop();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_TWILIGHT_PHASING);
@@ -1740,7 +1740,7 @@ void AddSC_boss_halion()
{
new boss_halion();
new boss_twilight_halion();
-
+
new npc_halion_controller();
new npc_meteor_strike_initial();
new npc_meteor_strike();
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index 10b40b490c4..c88377da3f3 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -59,7 +59,8 @@ enum Yells
SAY_REQUEST_AID = -1533103, //start of phase 3
SAY_ANSWER_REQUEST = -1533104 //lich king answer
};
-enum Event
+
+enum Events
{
EVENT_NONE,
EVENT_BOLT,
@@ -607,13 +608,17 @@ public:
case EVENT_DETONATE:
{
std::vector<Unit*> unitList;
- std::list<HostileReference*> *threatList = &me->getThreatManager().getThreatList();
- for (std::list<HostileReference*>::const_iterator itr = threatList->begin(); itr != threatList->end(); ++itr)
+ ThreatContainer::StorageType const &threatList = me->getThreatManager().getThreatList();
+ for (ThreatContainer::StorageType::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr)
{
- if ((*itr)->getTarget()->GetTypeId() == TYPEID_PLAYER
- && (*itr)->getTarget()->getPowerType() == POWER_MANA
- && (*itr)->getTarget()->GetPower(POWER_MANA))
- unitList.push_back((*itr)->getTarget());
+ Unit * const target = (*itr)->getTarget();
+
+ if (target->GetTypeId() == TYPEID_PLAYER
+ && target->getPowerType() == POWER_MANA
+ && target->GetPower(POWER_MANA))
+ {
+ unitList.push_back(target);
+ }
}
if (!unitList.empty())
@@ -654,7 +659,6 @@ public:
{
return new boss_kelthuzadAI (creature);
}
-
};
class at_kelthuzad_center : public AreaTriggerScript
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index 9f5eb8d879a..28f73ed14b0 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -305,8 +305,8 @@ public:
summons.DespawnAll();
// players that used Hover Disk are no in the aggro list
me->SetInCombatWithZone();
- std::list<HostileReference*> &m_threatlist = me->getThreatManager().getThreatList();
- for (std::list<HostileReference*>::const_iterator itr = m_threatlist.begin(); itr!= m_threatlist.end(); ++itr)
+ ThreatContainer::StorageType const& m_threatlist = me->getThreatManager().getThreatList();
+ for (ThreatContainer::StorageType::const_iterator itr = m_threatlist.begin(); itr!= m_threatlist.end(); ++itr)
{
if (Unit* target = (*itr)->getTarget())
{
@@ -683,8 +683,8 @@ class spell_malygos_vortex_visual : public SpellScriptLoader
{
if (Unit* caster = GetCaster())
{
- std::list<HostileReference*> &m_threatlist = caster->getThreatManager().getThreatList();
- for (std::list<HostileReference*>::const_iterator itr = m_threatlist.begin(); itr!= m_threatlist.end(); ++itr)
+ ThreatContainer::StorageType const& m_threatlist = caster->getThreatManager().getThreatList();
+ for (ThreatContainer::StorageType::const_iterator itr = m_threatlist.begin(); itr!= m_threatlist.end(); ++itr)
{
if (Unit* target = (*itr)->getTarget())
{
diff --git a/src/server/scripts/Northrend/sholazar_basin.cpp b/src/server/scripts/Northrend/sholazar_basin.cpp
index 56ef25c5753..14319d26cf5 100644
--- a/src/server/scripts/Northrend/sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/sholazar_basin.cpp
@@ -470,11 +470,27 @@ public:
enum utils
{
- NPC_HEMET = 27986,
- NPC_HADRIUS = 28047,
- NPC_TAMARA = 28568,
- SPELL_OFFER = 51962,
- QUEST_ENTRY = 12645,
+ NPC_HEMET = 27986,
+ NPC_HADRIUS = 28047,
+ NPC_TAMARA = 28568,
+ SPELL_OFFER = 51962,
+ QUEST_ENTRY = 12645,
+};
+
+enum NesingwaryChildrensWeek
+{
+ SPELL_ORPHAN_OUT = 58818,
+
+ QUEST_THE_MIGHTY_HEMET_NESINGWARY = 13957,
+
+ ORPHAN_WOLVAR = 33532,
+
+ TEXT_WOLVAR_ORPHAN_6 = 6,
+ TEXT_WOLVAR_ORPHAN_7 = 7,
+ TEXT_WOLVAR_ORPHAN_8 = 8,
+ TEXT_WOLVAR_ORPHAN_9 = 9,
+
+ TEXT_NESINGWARY_1 = 1,
};
class npc_jungle_punch_target : public CreatureScript
@@ -486,17 +502,86 @@ public:
{
npc_jungle_punch_targetAI(Creature* creature) : ScriptedAI(creature) {}
- uint16 sayTimer;
- uint8 sayStep;
-
void Reset()
{
sayTimer = 3500;
sayStep = 0;
+ timer = 0;
+ phase = 0;
+ playerGUID = 0;
+ orphanGUID = 0;
+ }
+
+ void MoveInLineOfSight(Unit* who)
+ {
+ if (!phase && who && who->GetDistance2d(me) < 10.0f)
+ if (Player* player = who->ToPlayer())
+ if (player->GetQuestStatus(QUEST_THE_MIGHTY_HEMET_NESINGWARY) == QUEST_STATUS_INCOMPLETE)
+ {
+ playerGUID = player->GetGUID();
+ if (Aura* orphanOut = player->GetAura(SPELL_ORPHAN_OUT))
+ if (orphanOut->GetCaster() && orphanOut->GetCaster()->GetEntry() == ORPHAN_WOLVAR)
+ {
+ orphanGUID = orphanOut->GetCaster()->GetGUID();
+ phase = 1;
+ }
+ }
+ }
+
+ void proceedCwEvent(const uint32 diff)
+ {
+ if (timer <= diff)
+ {
+ Player* player = Player::GetPlayer(*me, playerGUID);
+ Creature* orphan = Creature::GetCreature(*me, orphanGUID);
+
+ if(!orphan || !player)
+ {
+ Reset();
+ return;
+ }
+
+ switch(phase)
+ {
+ case 1:
+ orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
+ orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_6);
+ timer = 5000;
+ break;
+ case 2:
+ orphan->SetFacingToObject(me);
+ orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_7);
+ timer = 5000;
+ break;
+ case 3:
+ Talk(TEXT_NESINGWARY_1);
+ timer = 5000;
+ break;
+ case 4:
+ orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_8);
+ timer = 5000;
+ break;
+ case 5:
+ orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_9);
+ timer = 5000;
+ break;
+ case 6:
+ orphan->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
+ player->GroupEventHappens(QUEST_THE_MIGHTY_HEMET_NESINGWARY, me);
+ Reset();
+ return;
+ }
+ ++phase;
+ }
+ else
+ timer -= diff;
}
void UpdateAI(const uint32 uiDiff)
{
+ if (phase)
+ proceedCwEvent(uiDiff);
+
if (!sayStep)
return;
@@ -588,6 +673,14 @@ public:
break;
}
}
+
+ private:
+ uint16 sayTimer;
+ uint8 sayStep;
+ uint32 timer;
+ int8 phase;
+ uint64 playerGUID;
+ uint64 orphanGUID;
};
CreatureAI* GetAI(Creature* creature) const
diff --git a/src/server/scripts/Northrend/wintergrasp.cpp b/src/server/scripts/Northrend/wintergrasp.cpp
index 2aed813550d..d4a3f83ab70 100644
--- a/src/server/scripts/Northrend/wintergrasp.cpp
+++ b/src/server/scripts/Northrend/wintergrasp.cpp
@@ -559,7 +559,8 @@ public:
{
if (Battlefield* wg = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG))
if (Player* target = GetExplTargetUnit()->ToPlayer())
- if (target->GetTeamId() != wg->GetDefenderTeam() || target->HasAura(SPELL_WINTERGRASP_TELEPORT_TRIGGER))
+ // check if we are in Wintergrasp at all, SotA uses same teleport spells
+ if ((target->GetZoneId() == 4197) && target->GetTeamId() != wg->GetDefenderTeam() || target->HasAura(SPELL_WINTERGRASP_TELEPORT_TRIGGER))
return SPELL_FAILED_BAD_TARGETS;
return SPELL_CAST_OK;
}