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:
@@ -0,0 +1,3 @@
|
|||||||
|
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1560980987673005006');
|
||||||
|
|
||||||
|
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_undercity_buffs';
|
||||||
@@ -1006,6 +1006,24 @@ public:
|
|||||||
|
|
||||||
EventMap _events;
|
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
|
void Reset() override
|
||||||
{
|
{
|
||||||
if (!HasEscortState(STATE_ESCORT_ESCORTING))
|
if (!HasEscortState(STATE_ESCORT_ESCORTING))
|
||||||
@@ -1541,8 +1559,7 @@ public:
|
|||||||
JumpToNextStep(10 * IN_MILLISECONDS);
|
JumpToNextStep(10 * IN_MILLISECONDS);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
if (Player* player = GetPlayerForEscort())
|
DoCast(me, SPELL_WRYNN_BUFF);
|
||||||
player->CastSpell(player, SPELL_WRYNN_BUFF);
|
|
||||||
JumpToNextStep(3 * IN_MILLISECONDS);
|
JumpToNextStep(3 * IN_MILLISECONDS);
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
@@ -2040,8 +2057,7 @@ public:
|
|||||||
_events.ScheduleEvent(EVENT_AGGRO_JAINA, 2 * IN_MILLISECONDS);
|
_events.ScheduleEvent(EVENT_AGGRO_JAINA, 2 * IN_MILLISECONDS);
|
||||||
break;
|
break;
|
||||||
case EVENT_WRYNN_BUFF:
|
case EVENT_WRYNN_BUFF:
|
||||||
if (Player* player = GetPlayerForEscort())
|
DoCast(me, SPELL_WRYNN_BUFF);
|
||||||
player->CastSpell(player, SPELL_WRYNN_BUFF);
|
|
||||||
_events.ScheduleEvent(EVENT_WRYNN_BUFF, 10 * IN_MILLISECONDS);
|
_events.ScheduleEvent(EVENT_WRYNN_BUFF, 10 * IN_MILLISECONDS);
|
||||||
break;
|
break;
|
||||||
default:
|
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
|
## HORDE
|
||||||
#######*/
|
#######*/
|
||||||
@@ -2368,6 +2346,25 @@ public:
|
|||||||
|
|
||||||
EventMap _events;
|
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
|
void Reset() override
|
||||||
{
|
{
|
||||||
if (!HasEscortState(STATE_ESCORT_ESCORTING))
|
if (!HasEscortState(STATE_ESCORT_ESCORTING))
|
||||||
@@ -3004,8 +3001,7 @@ public:
|
|||||||
JumpToNextStep(6 * IN_MILLISECONDS);
|
JumpToNextStep(6 * IN_MILLISECONDS);
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
if (Player* player = GetPlayerForEscort())
|
DoCast(me, SPELL_THRALL_BUFF);
|
||||||
player->CastSpell(player, SPELL_THRALL_BUFF);
|
|
||||||
JumpToNextStep(10 * IN_MILLISECONDS);
|
JumpToNextStep(10 * IN_MILLISECONDS);
|
||||||
break;
|
break;
|
||||||
// Start Event
|
// Start Event
|
||||||
@@ -3953,8 +3949,7 @@ public:
|
|||||||
_events.ScheduleEvent(EVENT_AGGRO_SYLVANAS, 2 * IN_MILLISECONDS);
|
_events.ScheduleEvent(EVENT_AGGRO_SYLVANAS, 2 * IN_MILLISECONDS);
|
||||||
break;
|
break;
|
||||||
case EVENT_THRALL_BUFF:
|
case EVENT_THRALL_BUFF:
|
||||||
if (Player* player = GetPlayerForEscort())
|
DoCast(me, SPELL_THRALL_BUFF);
|
||||||
player->CastSpell(player, SPELL_THRALL_BUFF);
|
|
||||||
_events.ScheduleEvent(EVENT_THRALL_BUFF, 10 * IN_MILLISECONDS);
|
_events.ScheduleEvent(EVENT_THRALL_BUFF, 10 * IN_MILLISECONDS);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -4091,5 +4086,4 @@ void AddSC_undercity()
|
|||||||
new npc_lady_sylvanas_windrunner_bfu();
|
new npc_lady_sylvanas_windrunner_bfu();
|
||||||
new boss_blight_worm();
|
new boss_blight_worm();
|
||||||
new spell_blight_worm_ingest();
|
new spell_blight_worm_ingest();
|
||||||
new spell_undercity_buffs();
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user