aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Northrend
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2013-05-21 09:41:13 +0200
committerSpp <spp@jorge.gr>2013-05-21 09:41:13 +0200
commit1b6fb2b6959f504d9e33d2326691cf43a04690d2 (patch)
tree31671ddd62612c27e1e821408956b9a8ff52a0ab /src/server/scripts/Northrend
parent82dc639882d2d51a8bde9bcd47b773be435a5a12 (diff)
parent243c325ca4323feb4f7f80c0ecd3873c78cbf887 (diff)
Merge branch 'master' into 4.3.4 [NOTE: There are parts of code marked as "REVIEW - MERGE" That needs some review)
Conflicts: src/server/game/DataStores/DBCStores.cpp src/server/game/DataStores/DBCStores.h src/server/game/DataStores/DBCfmt.h src/server/game/Entities/Unit/Unit.cpp src/server/game/Entities/Unit/Unit.h src/server/game/Handlers/AuctionHouseHandler.cpp src/server/game/Handlers/GroupHandler.cpp src/server/game/Movement/Spline/MovementTypedefs.h src/server/game/Spells/Auras/SpellAuraEffects.cpp src/server/game/Spells/SpellInfo.cpp src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp src/server/scripts/Spells/spell_generic.cpp
Diffstat (limited to 'src/server/scripts/Northrend')
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp32
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h13
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp1
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp3
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp36
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp9
-rw-r--r--src/server/scripts/Northrend/zone_wintergrasp.cpp2
7 files changed, 60 insertions, 36 deletions
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
index 3d22bac4376..c335c90cc30 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
@@ -136,9 +136,7 @@ class boss_tyrannus : public CreatureScript
void InitializeAI()
{
- if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(PoSScriptName))
- me->IsAIEnabled = false;
- else if (instance->GetBossState(DATA_TYRANNUS) != DONE)
+ if (instance->GetBossState(DATA_TYRANNUS) != DONE)
Reset();
else
me->DespawnOrUnsummon();
@@ -281,7 +279,7 @@ class boss_tyrannus : public CreatureScript
CreatureAI* GetAI(Creature* creature) const
{
- return new boss_tyrannusAI(creature);
+ return GetPitOfSaronAI<boss_tyrannusAI>(creature);
}
};
@@ -387,32 +385,32 @@ class boss_rimefang : public CreatureScript
class player_overlord_brandAI : public PlayerAI
{
public:
- player_overlord_brandAI(Player* player) : PlayerAI(player)
+ player_overlord_brandAI(Player* player) : PlayerAI(player), _tyrannus(0)
{
- tyrannus = NULL;
}
void SetGUID(uint64 guid, int32 /*type*/)
{
- tyrannus = ObjectAccessor::GetCreature(*me, guid);
- me->IsAIEnabled = tyrannus != NULL;
+ _tyrannus = guid;
}
void DamageDealt(Unit* /*victim*/, uint32& damage, DamageEffectType /*damageType*/)
{
- if (tyrannus->getVictim())
- me->CastCustomSpell(SPELL_OVERLORD_BRAND_DAMAGE, SPELLVALUE_BASE_POINT0, damage, tyrannus->getVictim(), true, NULL, NULL, tyrannus->GetGUID());
+ if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _tyrannus))
+ if (tyrannus->getVictim())
+ me->CastCustomSpell(SPELL_OVERLORD_BRAND_DAMAGE, SPELLVALUE_BASE_POINT0, damage, tyrannus->getVictim(), true, NULL, NULL, tyrannus->GetGUID());
}
void HealDone(Unit* /*target*/, uint32& addHealth)
{
- me->CastCustomSpell(SPELL_OVERLORD_BRAND_HEAL, SPELLVALUE_BASE_POINT0, int32(addHealth*5.5f), tyrannus, true, NULL, NULL, tyrannus->GetGUID());
+ if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _tyrannus))
+ me->CastCustomSpell(SPELL_OVERLORD_BRAND_HEAL, SPELLVALUE_BASE_POINT0, int32(addHealth*5.5f), tyrannus, true, NULL, NULL, tyrannus->GetGUID());
}
void UpdateAI(uint32 /*diff*/) { }
private:
- Creature* tyrannus;
+ uint64 _tyrannus;
};
class spell_tyrannus_overlord_brand : public SpellScriptLoader
@@ -424,6 +422,11 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader
{
PrepareAuraScript(spell_tyrannus_overlord_brand_AuraScript);
+ bool Load()
+ {
+ return GetCaster() && GetCaster()->GetEntry() == NPC_TYRANNUS;
+ }
+
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (GetTarget()->GetTypeId() != TYPEID_PLAYER)
@@ -440,9 +443,10 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader
if (GetTarget()->GetTypeId() != TYPEID_PLAYER)
return;
- delete GetTarget()->GetAI();
- GetTarget()->SetAI(oldAI);
GetTarget()->IsAIEnabled = oldAIState;
+ UnitAI* thisAI = GetTarget()->GetAI();
+ GetTarget()->SetAI(oldAI);
+ delete thisAI;
}
void Register()
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h
index 94bca5ffaf7..a9b88ca3066 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h
@@ -18,6 +18,9 @@
#ifndef DEF_PIT_OF_SARON_H
#define DEF_PIT_OF_SARON_H
+#include "Map.h"
+#include "Creature.h"
+
#define PoSScriptName "instance_pit_of_saron"
#define MAX_ENCOUNTER 3
@@ -94,4 +97,14 @@ enum GameObjectIds
GO_HALLS_OF_REFLECTION_PORTCULLIS = 201848,
};
+template<class AI>
+AI* GetPitOfSaronAI(Creature* creature)
+{
+ if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
+ if (instance->GetInstanceScript())
+ if (instance->GetScriptId() == sObjectMgr->GetScriptId(PoSScriptName))
+ return new AI(creature);
+ return NULL;
+}
+
#endif
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
index 8e8fb9ba9ac..4fbfe4219d4 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
@@ -73,7 +73,6 @@ enum Spells
enum Shadowmourne
{
QUEST_BLOOD_INFUSION = 24756,
- ITEM_SHADOW_S_EDGE = 49888,
SPELL_GUSHING_WOUND = 72132,
SPELL_THIRST_QUENCHED = 72154,
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index ea74d8ec61c..7294e4a5571 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -1131,7 +1131,8 @@ class spell_sindragosa_frost_breath : public SpellScriptLoader
if (!target)
return;
- if (target->GetQuestStatus(QUEST_FROST_INFUSION) != QUEST_STATUS_INCOMPLETE)
+ // Check difficulty and quest status
+ if (!(target->GetRaidDifficulty() & RAID_DIFFICULTY_MASK_25MAN) || target->GetQuestStatus(QUEST_FROST_INFUSION) != QUEST_STATUS_INCOMPLETE)
return;
// Check if player has Shadow's Edge equipped and not ready for infusion
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
index 47fe7c8f80a..b558508f78a 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
@@ -166,7 +166,7 @@ class boss_kologarn : public CreatureScript
left = apply;
if (!apply && isEncounterInProgress)
{
- who->ToCreature()->DisappearAndDie();
+ who->ToCreature()->DespawnOrUnsummon();
Talk(SAY_LEFT_ARM_GONE);
events.ScheduleEvent(EVENT_RESPAWN_LEFT_ARM, 40000);
}
@@ -177,7 +177,7 @@ class boss_kologarn : public CreatureScript
right = apply;
if (!apply && isEncounterInProgress)
{
- who->ToCreature()->DisappearAndDie();
+ who->ToCreature()->DespawnOrUnsummon();
Talk(SAY_RIGHT_ARM_GONE);
events.ScheduleEvent(EVENT_RESPAWN_RIGHT_ARM, 40000);
}
@@ -529,7 +529,7 @@ class spell_ulduar_stone_grip_absorb : public SpellScriptLoader
//! What we do here is remove all harmful aura's related and teleport to safe spot.
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL)
+ if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL)
return;
if (!GetOwner()->ToCreature())
@@ -568,22 +568,30 @@ class spell_ulduar_stone_grip : public SpellScriptLoader
owner->RemoveAurasDueToSpell(aurEff->GetAmount());
}
- void OnRemoveVehicle(AuraEffect const* /*aurEff*/, AuraEffectHandleModes mode)
+ void OnRemoveVehicle(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- if (!(mode & AURA_EFFECT_HANDLE_REAL))
- return;
-
- if (GetOwner()->GetTypeId() != TYPEID_UNIT)
+ PreventDefaultAction();
+ Unit* caster = GetCaster();
+ if (!caster)
return;
- Player* caster = GetCaster() ? GetCaster()->ToPlayer() : NULL;
- if (!caster || !caster->IsOnVehicle(GetOwner()->ToUnit()))
- return;
+ Position exitPosition;
+ exitPosition.m_positionX = 1750.0f;
+ exitPosition.m_positionY = -7.5f + frand(-3.0f, 3.0f);
+ exitPosition.m_positionZ = 457.9322f;
+ // Remove pending passengers before exiting vehicle - might cause an Uninstall
+ GetTarget()->GetVehicleKit()->RemovePendingEventsForPassenger(caster);
+ caster->_ExitVehicle(&exitPosition);
caster->RemoveAurasDueToSpell(GetId());
- caster->ExitVehicle();
- caster->GetMotionMaster()->MoveJump(1756.25f + irand(-3, 3), -8.3f + irand(-3, 3), 448.8f, 5.0f, 5.0f);
- PreventDefaultAction();
+
+ // Temporarily relocate player to vehicle exit dest serverside to send proper fall movement
+ // beats me why blizzard sends these 2 spline packets one after another instantly
+ Position oldPos;
+ caster->GetPosition(&oldPos);
+ caster->Relocate(exitPosition);
+ caster->GetMotionMaster()->MoveFall();
+ caster->Relocate(oldPos);
}
void Register()
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
index 215630ac5fa..dfb12a03c33 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
@@ -30,13 +30,12 @@ enum Yells
{
//Yells Ingvar
YELL_AGGRO_1 = 0,
- YELL_AGGRO_2 = 1,
-
+ YELL_KILL_1 = 1,
YELL_DEAD_1 = 2,
- YELL_DEAD_2 = 3,
- YELL_KILL_1 = 4,
- YELL_KILL_2 = 5,
+ YELL_AGGRO_2 = 0,
+ YELL_KILL_2 = 1,
+ YELL_DEAD_2 = 2
};
enum Creatures
diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp
index ce0eaefac90..1b944f9babb 100644
--- a/src/server/scripts/Northrend/zone_wintergrasp.cpp
+++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp
@@ -40,7 +40,7 @@ enum WGqueuenpctext
WG_NPCQUEUE_TEXT_A_NOWAR = 14782,
WG_NPCQUEUE_TEXT_A_QUEUE = 14791,
WG_NPCQUEUE_TEXT_A_WAR = 14781,
- WG_NPCQUEUE_TEXTOPTION_JOIN = -1850507,
+ WG_NPCQUEUE_TEXTOPTION_JOIN = 20077,
};
enum Spells