Core/Achievements: Fix CriteriaTypes related to GameEvents

Port From (https://github.com/TrinityCore/TrinityCore/commit/71bac3bc2dd5ceacc698f5eaf2a975e0ee95a26a)
This commit is contained in:
hondacrx
2024-02-01 11:30:27 -05:00
parent fde94074be
commit 06df14fe7e
2 changed files with 28 additions and 2 deletions
@@ -1198,6 +1198,11 @@ namespace Game.Achievements
if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset)
return false;
break;
case CriteriaType.PlayerTriggerGameEvent:
case CriteriaType.AnyoneTriggerGameEventScenario:
if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset)
return false;
break;
default:
break;
}
+23 -2
View File
@@ -5,6 +5,7 @@ using Framework.Collections;
using Framework.Constants;
using Framework.Database;
using Framework.IO;
using Game.Achievements;
using Game.Conditions;
using Game.DataStorage;
using Game.Entities;
@@ -1481,6 +1482,26 @@ namespace Game
_eventStorage.Add(node.DepartureEventID);
}
}
// Load all possible event ids from criterias
void addCriteriaEventsToStore(List<Criteria> criteriaList)
{
foreach (Criteria criteria in criteriaList)
if (criteria.Entry.Asset != 0)
_eventStorage.Add(criteria.Entry.Asset);
};
CriteriaType[] eventCriteriaTypes = { CriteriaType.PlayerTriggerGameEvent, CriteriaType.AnyoneTriggerGameEventScenario };
foreach (CriteriaType criteriaType in eventCriteriaTypes)
{
addCriteriaEventsToStore(Global.CriteriaMgr.GetPlayerCriteriaByType(criteriaType, 0));
addCriteriaEventsToStore(Global.CriteriaMgr.GetGuildCriteriaByType(criteriaType));
addCriteriaEventsToStore(Global.CriteriaMgr.GetQuestObjectiveCriteriaByType(criteriaType));
}
foreach (ScenarioRecord scenario in CliDB.ScenarioStorage.Values)
foreach (CriteriaType criteriaType in eventCriteriaTypes)
addCriteriaEventsToStore(Global.CriteriaMgr.GetScenarioCriteriaByTypeAndScenario(criteriaType, scenario.Id));
}
public void LoadEventScripts()
@@ -1495,7 +1516,7 @@ namespace Game
foreach (var script in sEventScripts)
{
if (!IsValidEvent(script.Key))
Log.outError(LogFilter.Sql, $"Table `event_scripts` has script (Id: {script.Key}) not referring to any gameobject_template (data field referencing GameEvent), any taxi path node or any spell effect {SpellEffectName.SendEvent}");
Log.outError(LogFilter.Sql, $"Table `event_scripts` has script (Id: {script.Key}) not referring to any gameobject_template (data field referencing GameEvent), any taxi path node, any criteria asset or any spell effect {SpellEffectName.SendEvent}");
}
uint oldMSTime = Time.GetMSTime();
@@ -1516,7 +1537,7 @@ namespace Game
if (!IsValidEvent(eventId))
{
Log.outError(LogFilter.Sql, $"Event (ID: {eventId}) not referring to any gameobject_template (data field referencing GameEvent), any taxi path node or any spell effect {SpellEffectName.SendEvent}");
Log.outError(LogFilter.Sql, $"Event (ID: {eventId}) not referring to any gameobject_template (data field referencing GameEvent), any taxi path node, any criteria asset or any spell effect {SpellEffectName.SendEvent}");
continue;
}
_eventScriptStorage[eventId] = GetScriptId(scriptName);