Core/Scenarios: Group criteria storage by scenario id

Port From (https://github.com/TrinityCore/TrinityCore/commit/6e2ef357180b296369c725c3af113653c988840e)
This commit is contained in:
hondacrx
2022-08-10 09:33:51 -04:00
parent fd7a31108a
commit b472e1b3b0
2 changed files with 16 additions and 8 deletions
+15 -7
View File
@@ -3553,7 +3553,7 @@ namespace Game.Achievements
MultiMap<CriteriaType, Criteria> _criteriasByType = new();
MultiMap<uint, Criteria>[] _criteriasByAsset = new MultiMap<uint, Criteria>[(int)CriteriaType.Count];
MultiMap<CriteriaType, Criteria> _guildCriteriasByType = new();
MultiMap<CriteriaType, Criteria> _scenarioCriteriasByType = new();
MultiMap<uint, Criteria>[] _scenarioCriteriasByTypeAndScenarioId = new MultiMap<uint, Criteria>[(int)CriteriaType.Count];
MultiMap<CriteriaType, Criteria> _questObjectiveCriteriasByType = new();
MultiMap<CriteriaStartEvent, Criteria> _criteriasByTimedType = new();
@@ -3562,7 +3562,10 @@ namespace Game.Achievements
CriteriaManager()
{
for (var i = 0; i < (int)CriteriaType.Count; ++i)
{
_criteriasByAsset[i] = new MultiMap<uint, Criteria>();
_scenarioCriteriasByTypeAndScenarioId[i] = new MultiMap<uint, Criteria>();
}
}
public void LoadCriteriaModifiersTree()
@@ -3702,6 +3705,7 @@ namespace Game.Achievements
_criteria[criteria.Id] = criteria;
List<uint> scenarioIds = new();
foreach (CriteriaTree tree in treeList)
{
tree.Criteria = criteria;
@@ -3717,7 +3721,10 @@ namespace Game.Achievements
criteria.FlagsCu |= CriteriaFlagsCu.Player;
}
else if (tree.ScenarioStep != null)
{
criteria.FlagsCu |= CriteriaFlagsCu.Scenario;
scenarioIds.Add(tree.ScenarioStep.ScenarioID);
}
else if (tree.QuestObjective != null)
criteria.FlagsCu |= CriteriaFlagsCu.QuestObjective;
}
@@ -3761,7 +3768,8 @@ namespace Game.Achievements
if (criteria.FlagsCu.HasAnyFlag(CriteriaFlagsCu.Scenario))
{
++scenarioCriterias;
_scenarioCriteriasByType.Add(criteriaEntry.Type, criteria);
foreach (uint scenarioId in scenarioIds)
_scenarioCriteriasByTypeAndScenarioId[(int)criteriaEntry.Type].Add(scenarioId, criteria);
}
if (criteria.FlagsCu.HasAnyFlag(CriteriaFlagsCu.QuestObjective))
@@ -3907,16 +3915,16 @@ namespace Game.Achievements
return _criteriasByType.LookupByKey(type);
}
public List<Criteria> GetScenarioCriteriaByTypeAndScenario(CriteriaType type, uint scenarioId)
{
return _scenarioCriteriasByTypeAndScenarioId[(int)type].LookupByKey(scenarioId);
}
public List<Criteria> GetGuildCriteriaByType(CriteriaType type)
{
return _guildCriteriasByType.LookupByKey(type);
}
public List<Criteria> GetScenarioCriteriaByType(CriteriaType type)
{
return _scenarioCriteriasByType.LookupByKey(type);
}
public List<Criteria> GetQuestObjectiveCriteriaByType(CriteriaType type)
{
return _questObjectiveCriteriasByType[type];
+1 -1
View File
@@ -346,7 +346,7 @@ namespace Game.Scenarios
public override List<Criteria> GetCriteriaByType(CriteriaType type, uint asset)
{
return Global.CriteriaMgr.GetScenarioCriteriaByType(type);
return Global.CriteriaMgr.GetScenarioCriteriaByTypeAndScenario(type, _data.Entry.Id);
}
void SendBootPlayer(Player player)