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) if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset)
return false; return false;
break; break;
case CriteriaType.PlayerTriggerGameEvent:
case CriteriaType.AnyoneTriggerGameEventScenario:
if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset)
return false;
break;
default: default:
break; break;
} }
+23 -2
View File
@@ -5,6 +5,7 @@ using Framework.Collections;
using Framework.Constants; using Framework.Constants;
using Framework.Database; using Framework.Database;
using Framework.IO; using Framework.IO;
using Game.Achievements;
using Game.Conditions; using Game.Conditions;
using Game.DataStorage; using Game.DataStorage;
using Game.Entities; using Game.Entities;
@@ -1481,6 +1482,26 @@ namespace Game
_eventStorage.Add(node.DepartureEventID); _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() public void LoadEventScripts()
@@ -1495,7 +1516,7 @@ namespace Game
foreach (var script in sEventScripts) foreach (var script in sEventScripts)
{ {
if (!IsValidEvent(script.Key)) 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(); uint oldMSTime = Time.GetMSTime();
@@ -1516,7 +1537,7 @@ namespace Game
if (!IsValidEvent(eventId)) 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; continue;
} }
_eventScriptStorage[eventId] = GetScriptId(scriptName); _eventScriptStorage[eventId] = GetScriptId(scriptName);