diff options
author | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-08-28 21:00:53 +0200 |
---|---|---|
committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-08-28 21:00:53 +0200 |
commit | 3a248fbfec34fe80170dfb8c50b971858fb1e488 (patch) | |
tree | 4bf46d335d77b77a7abfb5f84f00b2073c6b636b /src/server/scripts | |
parent | c0c708cf02631118eaab093c43ab8c0b88dcbae2 (diff) | |
parent | d6dbe52e64b1e6421b34877acd14b6008de97fa5 (diff) |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts:
src/server/game/Battlegrounds/BattlegroundScore.h
Diffstat (limited to 'src/server/scripts')
-rw-r--r-- | src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp | 113 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_quest.cpp | 33 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_shaman.cpp | 2 |
3 files changed, 146 insertions, 2 deletions
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 0189b6040f7..1f0a58c4cf2 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -26,6 +26,7 @@ #include "Player.h" #include "SpellInfo.h" #include "CreatureTextMgr.h" +#include "MoveSplineInit.h" /*###### ##Quest 12848 @@ -322,6 +323,117 @@ public: }; + /*###### +## npc_eye_of_acherus +######*/ + +enum EyeOfAcherus +{ + SPELL_EYE_VISUAL = 51892, + SPELL_EYE_FLIGHT_BOOST = 51923, + SPELL_EYE_FLIGHT = 51890, + + EVENT_MOVE_START = 1, + + TALK_MOVE_START = 0, + TALK_CONTROL = 1, + + POINT_EYE_FALL = 1, + POINT_EYE_MOVE_END = 3 +}; + +Position const EyeOFAcherusFallPoint = { 2361.21f, -5660.45f, 496.7444f, 0.0f }; + +class npc_eye_of_acherus : public CreatureScript +{ + public: + npc_eye_of_acherus() : CreatureScript("npc_eye_of_acherus") { } + + struct npc_eye_of_acherusAI : public ScriptedAI + { + npc_eye_of_acherusAI(Creature* creature) : ScriptedAI(creature) + { + me->SetDisplayId(me->GetCreatureTemplate()->Modelid1); + if (Player* owner = me->GetCharmerOrOwner()->ToPlayer()) + owner->SendAutoRepeatCancel(me); + + me->SetReactState(REACT_PASSIVE); + + me->GetMotionMaster()->MovePoint(POINT_EYE_FALL, EyeOFAcherusFallPoint, false); + + Movement::MoveSplineInit init(me); + init.MoveTo(EyeOFAcherusFallPoint.GetPositionX(), EyeOFAcherusFallPoint.GetPositionY(), EyeOFAcherusFallPoint.GetPositionZ(), false); + init.SetFall(); + init.Launch(); + } + + void OnCharmed(bool /*apply*/) override { } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_MOVE_START: + { + DoCast(me, SPELL_EYE_FLIGHT_BOOST); + + me->SetControlled(false, UNIT_STATE_ROOT); + if (Player* owner = me->GetCharmerOrOwner()->ToPlayer()) + { + for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) + me->SetSpeed(UnitMoveType(i), owner->GetSpeedRate(UnitMoveType(i)), true); + Talk(TALK_MOVE_START, owner); + } + me->GetMotionMaster()->MovePath(me->GetEntry() * 100, false); + break; + } + default: + break; + } + } + } + + void MovementInform(uint32 movementType, uint32 pointId) override + { + if (movementType == WAYPOINT_MOTION_TYPE && pointId == POINT_EYE_MOVE_END - 1) + { + me->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE); + me->RemoveAllAuras(); + + if (Player* owner = me->GetCharmerOrOwner()->ToPlayer()) + { + owner->RemoveAura(SPELL_EYE_FLIGHT_BOOST); + for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) + me->SetSpeed(UnitMoveType(i), owner->GetSpeedRate(UnitMoveType(i)), true); + + TalkToMap(TALK_CONTROL, owner); + } + me->SetDisableGravity(false); + DoCast(me, SPELL_EYE_FLIGHT); + } + + if (movementType == POINT_MOTION_TYPE && pointId == POINT_EYE_FALL) + { + me->SetDisableGravity(true); + me->SetControlled(true, UNIT_STATE_ROOT); + _events.ScheduleEvent(EVENT_MOVE_START, 5000); + } + } + + private: + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_eye_of_acherusAI(creature); + } +}; + /*###### ## npc_death_knight_initiate ######*/ @@ -1081,6 +1193,7 @@ void AddSC_the_scarlet_enclave_c1() new npc_unworthy_initiate(); new npc_unworthy_initiate_anchor(); new go_acherus_soul_prison(); + new npc_eye_of_acherus(); new npc_death_knight_initiate(); new npc_salanar_the_horseman(); new npc_dark_rider_of_acherus(); diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 173e03fef7c..f17aac51519 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -2026,7 +2026,6 @@ class spell_q12308_escape_from_silverbrook_summon_worgen : public SpellScriptLoa } }; - enum DeathComesFromOnHigh { SPELL_FORGE_CREDIT = 51974, @@ -2097,6 +2096,37 @@ class spell_q12641_death_comes_from_on_high : public SpellScriptLoader } }; +// 52694 - Recall Eye of Acherus +class spell_q12641_recall_eye_of_acherus : public SpellScriptLoader +{ + public: + spell_q12641_recall_eye_of_acherus() : SpellScriptLoader("spell_q12641_recall_eye_of_acherus") { } + + class spell_q12641_recall_eye_of_acherus_SpellScript : public SpellScript + { + PrepareSpellScript(spell_q12641_recall_eye_of_acherus_SpellScript); + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->GetCharmerOrOwner()->ToPlayer()) + { + player->StopCastingCharm(); + player->StopCastingBindSight(); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_q12641_recall_eye_of_acherus_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_q12641_recall_eye_of_acherus_SpellScript(); + } +}; + // 51769 - Emblazon Runeblade class spell_q12619_emblazon_runeblade : public SpellScriptLoader { @@ -2364,6 +2394,7 @@ void AddSC_quest_spell_scripts() new spell_q12308_escape_from_silverbrook_summon_worgen(); new spell_q12308_escape_from_silverbrook(); new spell_q12641_death_comes_from_on_high(); + new spell_q12641_recall_eye_of_acherus(); new spell_q12619_emblazon_runeblade(); new spell_q12619_emblazon_runeblade_effect(); new spell_q12919_gymers_grab(); diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index a8b9e5f8e8e..b9f34bafedf 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -291,7 +291,7 @@ class spell_sha_earth_shield : public SpellScriptLoader amount = GetUnitOwner()->SpellHealingBonusTaken(caster, GetSpellInfo(), amount, HEAL); //! WORKAROUND - // If target is affected by healing reduction, modifier is guaranteed to be negative + // If target is affected by healing reduction, modifier is guaranteed to be negative // value (e.g. -50). To revert the effect, multiply amount with reciprocal of relative value: // (100 / ((-1) * modifier)) * 100 = (-1) * 100 * 100 / modifier = -10000 / modifier if (int32 modifier = GetUnitOwner()->GetMaxNegativeAuraModifier(SPELL_AURA_MOD_HEALING_PCT)) |