diff options
| author | Spp <spp@jorge.gr> | 2013-05-21 09:41:13 +0200 |
|---|---|---|
| committer | Spp <spp@jorge.gr> | 2013-05-21 09:41:13 +0200 |
| commit | 1b6fb2b6959f504d9e33d2326691cf43a04690d2 (patch) | |
| tree | 31671ddd62612c27e1e821408956b9a8ff52a0ab /src/server/scripts/Northrend | |
| parent | 82dc639882d2d51a8bde9bcd47b773be435a5a12 (diff) | |
| parent | 243c325ca4323feb4f7f80c0ecd3873c78cbf887 (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')
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 |
