fix(DB/Core): "Battle for the Undercity" buffs (#1986)

- Cast the buffs from Thrall and Wrynn on themselves instead of the player. This prevents interrupting spellcasting of the player during battle.
- Override "EnterEvadeMode" for Thrall and Wrynn AI in order to prevent removing their auras on evade.
- Remove the spell script "spell_undercity_buffs" as it is not needed anymore (the players only get the aura when near Thrall or Wrynn)
This commit is contained in:
Stoabrogga
2019-06-25 20:17:23 +02:00
committed by Poszer
parent e15a0c2189
commit 62a5e95d8c
2 changed files with 44 additions and 47 deletions

View File

@@ -1006,6 +1006,24 @@ public:
EventMap _events;
void EnterEvadeMode() override
{
me->DeleteThreatList();
me->CombatStop(true);
me->SetLootRecipient(NULL);
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
AddEscortState(STATE_ESCORT_RETURNING);
ReturnToLastPoint();
}
else
{
me->GetMotionMaster()->MoveTargetedHome();
Reset();
}
}
void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
@@ -1541,8 +1559,7 @@ public:
JumpToNextStep(10 * IN_MILLISECONDS);
break;
case 5:
if (Player* player = GetPlayerForEscort())
player->CastSpell(player, SPELL_WRYNN_BUFF);
DoCast(me, SPELL_WRYNN_BUFF);
JumpToNextStep(3 * IN_MILLISECONDS);
break;
case 6:
@@ -2040,8 +2057,7 @@ public:
_events.ScheduleEvent(EVENT_AGGRO_JAINA, 2 * IN_MILLISECONDS);
break;
case EVENT_WRYNN_BUFF:
if (Player* player = GetPlayerForEscort())
player->CastSpell(player, SPELL_WRYNN_BUFF);
DoCast(me, SPELL_WRYNN_BUFF);
_events.ScheduleEvent(EVENT_WRYNN_BUFF, 10 * IN_MILLISECONDS);
break;
default:
@@ -2238,44 +2254,6 @@ public:
}
};
class spell_undercity_buffs : public SpellScriptLoader
{
public:
spell_undercity_buffs() : SpellScriptLoader("spell_undercity_buffs") { }
class spell_undercity_buffs_AuraScript : public AuraScript
{
PrepareAuraScript(spell_undercity_buffs_AuraScript);
// Add Update for Areacheck
void CalcPeriodic(AuraEffect const* /*effect*/, bool& isPeriodic, int32& amplitude)
{
isPeriodic = true;
amplitude = 5 * IN_MILLISECONDS;
}
void Update(AuraEffect* /*effect*/)
{
if (Player* owner = GetUnitOwner()->ToPlayer())
{
if (owner->GetZoneId() != ZONE_TIRISFAL && owner->GetZoneId() != ZONE_UNDERCITY)
owner->RemoveAura(GetSpellInfo()->Id);
}
}
void Register()
{
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_undercity_buffs_AuraScript::CalcPeriodic, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_undercity_buffs_AuraScript::Update, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
}
};
AuraScript* GetAuraScript() const
{
return new spell_undercity_buffs_AuraScript();
}
};
/*######
## HORDE
#######*/
@@ -2368,6 +2346,25 @@ public:
EventMap _events;
void EnterEvadeMode() override
{
me->RemoveAura(SPELL_HEROIC_VANGUARD);
me->DeleteThreatList();
me->CombatStop(true);
me->SetLootRecipient(NULL);
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
AddEscortState(STATE_ESCORT_RETURNING);
ReturnToLastPoint();
}
else
{
me->GetMotionMaster()->MoveTargetedHome();
Reset();
}
}
void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
@@ -3004,8 +3001,7 @@ public:
JumpToNextStep(6 * IN_MILLISECONDS);
break;
case 10:
if (Player* player = GetPlayerForEscort())
player->CastSpell(player, SPELL_THRALL_BUFF);
DoCast(me, SPELL_THRALL_BUFF);
JumpToNextStep(10 * IN_MILLISECONDS);
break;
// Start Event
@@ -3953,8 +3949,7 @@ public:
_events.ScheduleEvent(EVENT_AGGRO_SYLVANAS, 2 * IN_MILLISECONDS);
break;
case EVENT_THRALL_BUFF:
if (Player* player = GetPlayerForEscort())
player->CastSpell(player, SPELL_THRALL_BUFF);
DoCast(me, SPELL_THRALL_BUFF);
_events.ScheduleEvent(EVENT_THRALL_BUFF, 10 * IN_MILLISECONDS);
break;
default:
@@ -4091,5 +4086,4 @@ void AddSC_undercity()
new npc_lady_sylvanas_windrunner_bfu();
new boss_blight_worm();
new spell_blight_worm_ingest();
new spell_undercity_buffs();
}