Core/Achievements: Fixed achievement criteria StartEvent and FailEvent

* Criteria using StartEvent cannot be updated without that event triggering first (not only for timed achievements)
* Implemented most StartEvent and FailEvent types
* Fixed saving criteria removed by RemoveCriteriaProgress
Port From (https://github.com/TrinityCore/TrinityCore/commit/41a20b1e4008d450d075847ef1fe367f0e3a240f)
This commit is contained in:
hondacrx
2024-01-30 10:22:01 -05:00
parent 902b217d88
commit a1cb1d95ee
16 changed files with 148 additions and 211 deletions
+5 -6
View File
@@ -2164,17 +2164,14 @@ namespace Game.Spells
Player player = unit.ToPlayer();
if (player != null)
{
player.StartCriteriaTimer(CriteriaStartEvent.BeSpellTarget, m_spellInfo.Id);
player.FailCriteria(CriteriaFailEvent.BeSpellTarget, m_spellInfo.Id);
player.StartCriteria(CriteriaStartEvent.BeSpellTarget, m_spellInfo.Id);
player.UpdateCriteria(CriteriaType.BeSpellTarget, m_spellInfo.Id, 0, 0, m_caster);
player.UpdateCriteria(CriteriaType.GainAura, m_spellInfo.Id);
}
Player casterPlayer = m_caster.ToPlayer();
if (casterPlayer != null)
{
casterPlayer.StartCriteriaTimer(CriteriaStartEvent.CastSpell, m_spellInfo.Id);
casterPlayer.UpdateCriteria(CriteriaType.LandTargetedSpellOnTarget, m_spellInfo.Id, 0, 0, unit);
}
if (m_caster != unit)
{
@@ -2915,10 +2912,12 @@ namespace Game.Spells
{
if (!Convert.ToBoolean(_triggeredCastFlags & TriggerCastFlags.IgnoreCastItem) && m_CastItem != null)
{
player.StartCriteriaTimer(CriteriaStartEvent.UseItem, m_CastItem.GetEntry());
player.StartCriteria(CriteriaStartEvent.UseItem, m_CastItem.GetEntry());
player.UpdateCriteria(CriteriaType.UseItem, m_CastItem.GetEntry());
}
player.FailCriteria(CriteriaFailEvent.CastSpell, m_spellInfo.Id);
player.StartCriteria(CriteriaStartEvent.CastSpell, m_spellInfo.Id);
player.UpdateCriteria(CriteriaType.CastSpell, m_spellInfo.Id);
}