Core/Spells: fixed Mage Flame Orb and Frostfire Orb behaivior

This commit is contained in:
Ovahlord
2018-05-06 23:30:36 +02:00
parent dac4772341
commit ffc11501fe
3 changed files with 36 additions and 31 deletions

View File

@@ -2880,8 +2880,10 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->Effects[EFFECT_0].BonusMultiplier = spellInfo->Effects[EFFECT_1].BonusMultiplier;
});
// Flame Orb / Frostfire Orb
ApplySpellFix({ 82690, 84717 }, [](SpellInfo* spellInfo)
ApplySpellFix({
82690, // Flame Orb
84717 // Frostfire Orb
}, [](SpellInfo* spellInfo)
{
spellInfo->Effects[EFFECT_0].Amplitude = 1000;
});

View File

@@ -68,10 +68,10 @@ enum MageSpells
SPELL_MAGE_FROSTFIRE_ORB_SUMMON = 84714,
SPELL_MAGE_FROSTFIRE_ORB_AOE = 84718,
SPELL_MAGE_FROSTFIRE_ORB_DAMAGE = 95969,
SPELL_MAGE_FROSTFIRE_ORB_DAMAGE_SLOW = 84721,
SPELL_MAGE_FROSTFIRE_BOLT_CHILL_EFFECT = 44614,
SPELL_MAGE_FROSTFIRE_ORB_DAMAGE_R1 = 95969,
SPELL_MAGE_FROSTFIRE_ORB_DAMAGE_R2 = 84721,
SPELL_MAGE_FROSTFIRE_ORB_RANK_R2 = 84727,
SPELL_MAGE_FROSTFIRE_BOLT_CHILL_EFFECT = 44614,
SPELL_MAGE_HOT_STREAK = 44445,
SPELL_MAGE_HOT_STREAK_TRIGGERED = 48108,
@@ -1740,10 +1740,11 @@ class spell_mage_flame_orb_aoe_dummy: public SpellScriptLoader
SPELL_MAGE_FLAME_ORB_AOE,
SPELL_MAGE_FROSTFIRE_ORB_AOE,
SPELL_MAGE_FLAME_ORB_BEAM_DUMMY,
SPELL_MAGE_FROSTFIRE_ORB_DAMAGE,
SPELL_MAGE_FROSTFIRE_ORB_DAMAGE_SLOW,
SPELL_MAGE_FROSTFIRE_ORB_DAMAGE_R1,
SPELL_MAGE_FROSTFIRE_ORB_DAMAGE_R2,
SPELL_MAGE_FLAME_ORB_DAMAGE,
SPELL_MAGE_FLAME_ORB_SELF_SNARE
SPELL_MAGE_FLAME_ORB_SELF_SNARE,
SPELL_MAGE_FROSTFIRE_ORB_RANK_R2,
});
}
@@ -1777,8 +1778,12 @@ class spell_mage_flame_orb_aoe_dummy: public SpellScriptLoader
break;
case SPELL_MAGE_FROSTFIRE_ORB_AOE:
caster->CastSpell(caster, SPELL_MAGE_FLAME_ORB_SELF_SNARE, true);
caster->CastSpell(caster, SPELL_MAGE_FLAME_ORB_BEAM_DUMMY, true);
// summoner->CastSpell(target, target->HasAura(SPELL_MAGE_FROSTFIRE_BOLT_CHILL_EFFECT) ? SPELL_MAGE_FROSTFIRE_ORB_DAMAGE_SLOW : SPELL_MAGE_FROSTFIRE_ORB_DAMAGE, true);
caster->CastSpell(target, SPELL_MAGE_FLAME_ORB_BEAM_DUMMY, true);
if (summoner->HasAura(SPELL_MAGE_FROSTFIRE_ORB_RANK_R2))
summoner->CastSpell(target, SPELL_MAGE_FROSTFIRE_ORB_DAMAGE_R2, true);
else
summoner->CastSpell(target, SPELL_MAGE_FROSTFIRE_ORB_DAMAGE_R1, true);
break;
default:
break;

View File

@@ -29,6 +29,7 @@
#include "ObjectMgr.h"
#include "PassiveAI.h"
#include "Pet.h"
#include "PetAI.h"
#include "ScriptedEscortAI.h"
#include "ScriptedGossip.h"
#include "ScriptMgr.h"
@@ -3012,7 +3013,7 @@ public:
enum MageOrb
{
EVENT_START_MOVING = 1,
EVENT_MOVE_FORWARD = 1,
EVENT_APPLY_PERIODIC_EFFECT = 2,
EVENT_EXPLODE = 3,
@@ -3020,7 +3021,7 @@ enum MageOrb
SPELL_FROSTFIRE_ORB_AURA = 84717,
NPC_FLAME_ORB = 44214,
NPC_FROSTFIRE_ORB = 45322,
NPC_FROSTFIRE_ORB = 45322
};
@@ -3030,15 +3031,23 @@ class npc_mage_orb : public CreatureScript
public:
npc_mage_orb() : CreatureScript("npc_mage_orb") { }
struct npc_mage_orbAI : public ScriptedAI
struct npc_mage_orbAI : public PetAI
{
npc_mage_orbAI(Creature* creature) : ScriptedAI(creature) { }
npc_mage_orbAI(Creature* creature) : PetAI(creature) { }
void IsSummonedBy(Unit* /*summoner*/) override
void AttackStart(Unit* /*target*/) override
{
events.ScheduleEvent(EVENT_START_MOVING, Milliseconds(1));
// Calling MovePoint again to apply movement speed changes
if (me->isMoving())
me->GetMotionMaster()->MovePoint(0, pos);
}
void IsSummonedBy(Unit* summoner) override
{
pos = summoner->GetPosition();
summoner->MovePositionToFirstCollision(pos, 100.0f, 0.0f);
events.ScheduleEvent(EVENT_MOVE_FORWARD, Milliseconds(1));
events.ScheduleEvent(EVENT_APPLY_PERIODIC_EFFECT, Milliseconds(400));
me->m_ControlledByPlayer = false;
}
void UpdateAI(uint32 diff) override
@@ -3049,21 +3058,10 @@ class npc_mage_orb : public CreatureScript
{
switch (eventId)
{
case EVENT_START_MOVING:
{
case EVENT_MOVE_FORWARD:
me->GetMotionMaster()->Clear();
pos.SetOrientation(me->GetOrientation());
pos.m_positionX = me->GetPositionX() + cos(pos.GetOrientation()) * 100.0f;
pos.m_positionY = me->GetPositionY() + sin(pos.GetOrientation()) * 100.0f;
float ground;
me->GetMap()->GetWaterOrGroundLevel(me->GetPhaseShift(), pos.GetPositionX(), pos.GetPositionY(), me->GetPositionZ(), &ground);
pos.m_positionZ = ground;
Movement::MoveSplineInit init(me);
init.SetSmooth();
init.MoveTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), false);
init.Launch();
me->GetMotionMaster()->MovePoint(0, pos);
break;
}
case EVENT_APPLY_PERIODIC_EFFECT:
DoCastSelf(me->GetEntry() == NPC_FLAME_ORB ? SPELL_FLAME_ORB_AURA : SPELL_FROSTFIRE_ORB_AURA, true);
break;