aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
-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/Outland/zone_shattrath_city.cpp196
6 files changed, 34 insertions, 213 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 4717832a727..9807e7a016d 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -2392,8 +2392,6 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
case SUMMON_CATEGORY_VEHICLE:
// Summoning spells (usually triggered by npc_spellclick) that spawn a vehicle and that cause the clicker
// to cast a ride vehicle spell on the summoned unit.
- float x, y, z;
- m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
summon = m_originalCaster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_caster, m_spellInfo->Id);
if (!summon || !summon->IsVehicle())
return;
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 f4df90c49e8..938b2e94d02 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/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp
index 4af11191708..1fb0210bb73 100644
--- a/src/server/scripts/Outland/zone_shattrath_city.cpp
+++ b/src/server/scripts/Outland/zone_shattrath_city.cpp
@@ -19,7 +19,7 @@
/* ScriptData
SDName: Shattrath_City
SD%Complete: 100
-SDComment: Quest support: 10004, 10009, 10211, 10231. Flask vendors, Teleport to Caverns of Time
+SDComment: Quest support: 10004, 10009, 10211. Flask vendors, Teleport to Caverns of Time
SDCategory: Shattrath City
EndScriptData */
@@ -29,7 +29,6 @@ npc_salsalabim
npc_shattrathflaskvendors
npc_zephyr
npc_kservant
-npc_dirty_larry
npc_ishanah
npc_khadgar
EndContentData */
@@ -425,198 +424,6 @@ public:
};
/*######
-# npc_dirty_larry
-######*/
-
-#define GOSSIP_BOOK "Ezekiel said that you might have a certain book..."
-
-enum DirtyLarry
-{
- SAY_1 = 0,
- SAY_2 = 1,
- SAY_3 = 2,
- SAY_4 = 3,
- SAY_5 = 4,
- SAY_GIVEUP = 5,
-
- QUEST_WBI = 10231,
- NPC_CREEPJACK = 19726,
- NPC_MALONE = 19725
-};
-
-class npc_dirty_larry : public CreatureScript
-{
-public:
- npc_dirty_larry() : CreatureScript("npc_dirty_larry") { }
-
- struct npc_dirty_larryAI : public ScriptedAI
- {
- npc_dirty_larryAI(Creature* creature) : ScriptedAI(creature) {}
-
- bool Event;
- bool Attack;
- bool Done;
-
- uint64 PlayerGUID;
-
- uint32 SayTimer;
- uint32 Step;
-
- void Reset()
- {
- Event = false;
- Attack = false;
- Done = false;
-
- PlayerGUID = 0;
- SayTimer = 0;
- Step = 0;
-
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->setFaction(1194);
- if (Creature* Creepjack = me->FindNearestCreature(NPC_CREEPJACK, 20))
- {
- Creepjack->AI()->EnterEvadeMode();
- Creepjack->setFaction(1194);
- Creepjack->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- }
-
- if (Creature* Malone = me->FindNearestCreature(NPC_MALONE, 20))
- {
- Malone->AI()->EnterEvadeMode();
- Malone->setFaction(1194);
- Malone->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- }
- }
-
- uint32 NextStep(uint32 Step)
- {
- Player* player = Unit::GetPlayer(*me, PlayerGUID);
-
- switch (Step)
- {
- case 0:{ me->SetInFront(player);
- Unit* Creepjack = me->FindNearestCreature(NPC_CREEPJACK, 20);
- if (Creepjack)
- Creepjack->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- Unit* Malone = me->FindNearestCreature(NPC_MALONE, 20);
- if (Malone)
- Malone->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); }return 2000;
- case 1: Talk(SAY_1, player->GetGUID()); return 3000;
- case 2: Talk(SAY_2, player->GetGUID()); return 5000;
- case 3: Talk(SAY_3, player->GetGUID()); return 2000;
- case 4: Talk(SAY_4, player->GetGUID()); return 2000;
- case 5: Talk(SAY_5, player->GetGUID()); return 2000;
- case 6: Attack = true; return 2000;
- default: return 0;
- }
- }
-
- void EnterCombat(Unit* /*who*/){}
-
- void UpdateAI(uint32 diff)
- {
- if (SayTimer <= diff)
- {
- if (Event)
- SayTimer = NextStep(++Step);
- }
- else
- SayTimer -= diff;
-
- if (Attack)
- {
- me->setFaction(14);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- if (Player* player = Unit::GetPlayer(*me, PlayerGUID))
- {
- if (Creature* Creepjack = me->FindNearestCreature(NPC_CREEPJACK, 20))
- {
- Creepjack->Attack(player, true);
- Creepjack->setFaction(14);
- Creepjack->GetMotionMaster()->MoveChase(player);
- Creepjack->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- }
-
- if (Creature* Malone = me->FindNearestCreature(NPC_MALONE, 20))
- {
- Malone->Attack(player, true);
- Malone->setFaction(14);
- Malone->GetMotionMaster()->MoveChase(player);
- Malone->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- }
- DoStartMovement(player);
- AttackStart(player);
- }
- Attack = false;
- }
-
- if (HealthBelowPct(5) && !Done)
- {
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->RemoveAllAuras();
-
- if (Creature* Creepjack = me->FindNearestCreature(NPC_CREEPJACK, 20))
- {
- Creepjack->AI()->EnterEvadeMode();
- Creepjack->setFaction(1194);
- Creepjack->GetMotionMaster()->MoveTargetedHome();
- Creepjack->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- }
-
- if (Creature* Malone = me->FindNearestCreature(NPC_MALONE, 20))
- {
- Malone->AI()->EnterEvadeMode();
- Malone->setFaction(1194);
- Malone->GetMotionMaster()->MoveTargetedHome();
- Malone->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- }
- me->setFaction(1194);
- Done = true;
- Talk(SAY_GIVEUP);
- me->DeleteThreatList();
- me->CombatStop();
- me->GetMotionMaster()->MoveTargetedHome();
- if (Player* player = Unit::GetPlayer(*me, PlayerGUID))
- player->GroupEventHappens(QUEST_WBI, me);
- }
- DoMeleeAttackIfReady();
- }
- };
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action)
- {
- player->PlayerTalkClass->ClearMenus();
- if (action == GOSSIP_ACTION_INFO_DEF+1)
- {
- CAST_AI(npc_dirty_larry::npc_dirty_larryAI, creature->AI())->Event = true;
- CAST_AI(npc_dirty_larry::npc_dirty_larryAI, creature->AI())->PlayerGUID = player->GetGUID();
- player->CLOSE_GOSSIP_MENU();
- }
-
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature)
- {
- if (creature->isQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
-
- if (player->GetQuestStatus(QUEST_WBI) == QUEST_STATUS_INCOMPLETE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BOOK, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
-
- player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_dirty_larryAI (creature);
- }
-};
-
-/*######
# npc_ishanah
######*/
@@ -727,7 +534,6 @@ void AddSC_shattrath_city()
new npc_shattrathflaskvendors();
new npc_zephyr();
new npc_kservant();
- new npc_dirty_larry();
new npc_ishanah();
new npc_khadgar();
}