hondacrx
2024-02-02 21:49:02 -05:00
parent 75201f56ce
commit 4b669cfb5d
45 changed files with 1742 additions and 1273 deletions
+29 -11
View File
@@ -153,6 +153,7 @@ namespace Game.Achievements
case CriteriaType.DamageDealt:
case CriteriaType.HealingDone:
case CriteriaType.EarnArtifactXPForAzeriteItem:
case CriteriaType.GainLevels:
SetCriteriaProgress(criteria, miscValue1, referencePlayer, ProgressType.Accumulate);
break;
case CriteriaType.KillCreature:
@@ -458,7 +459,7 @@ namespace Game.Achievements
}
else
_startedCriteria[key] -= timeDiff;
}
}
}
public void StartCriteria(CriteriaStartEvent startEvent, uint entry, TimeSpan timeLost = default)
@@ -799,6 +800,7 @@ namespace Game.Achievements
case CriteriaType.CompleteAnyReplayQuest:
case CriteriaType.BuyItemsFromVendors:
case CriteriaType.SellItemsToVendors:
case CriteriaType.GainLevels:
return progress.Counter >= requiredAmount;
case CriteriaType.EarnAchievement:
case CriteriaType.CompleteQuest:
@@ -932,6 +934,7 @@ namespace Game.Achievements
case CriteriaType.CompleteAnyReplayQuest:
case CriteriaType.BuyItemsFromVendors:
case CriteriaType.SellItemsToVendors:
case CriteriaType.GainLevels:
if (miscValue1 == 0)
return false;
break;
@@ -3291,6 +3294,15 @@ namespace Game.Achievements
case 149: // Shadowlands Season 2 End
// timestamp = unknown
break;
case 349: // Dragonflight Season 3 Start (pre-season)
eventTimestamp = 1699340400L; // November 7, 2023 8:00
break;
case 350: // Dragonflight Season 3 Start
eventTimestamp = 1699945200L; // November 14, 2023 8:00
break;
case 352: // Dragonflight Season 3 End
// eventTimestamp = time_t(); unknown
break;
default:
break;
}
@@ -3668,6 +3680,13 @@ namespace Game.Achievements
if (referencePlayer.GetPositionZ() >= reqValue)
return false;
break;
case ModifierTreeType.PlayerIsOnMapWithExpansion: // 380
{
var mapEntry = referencePlayer.GetMap().GetEntry();
if (mapEntry.ExpansionID != reqValue)
return false;
break;
}
default:
return false;
}
@@ -3706,8 +3725,8 @@ namespace Game.Achievements
MultiMap<uint, Criteria>[] _scenarioCriteriasByTypeAndScenarioId = new MultiMap<uint, Criteria>[(int)CriteriaType.Count];
MultiMap<CriteriaType, Criteria> _questObjectiveCriteriasByType = new();
MultiMap<int, Criteria>[] _criteriasByStartEvent = new MultiMap<int, Criteria>[(int)CriteriaStartEvent.Max];
MultiMap<int, Criteria>[] _criteriasByFailEvent = new MultiMap<int, Criteria>[(int)CriteriaFailEvent.Max];
MultiMap<int, Criteria>[] _criteriasByStartEvent = new MultiMap<int, Criteria>[(int)CriteriaStartEvent.Count];
MultiMap<int, Criteria>[] _criteriasByFailEvent = new MultiMap<int, Criteria>[(int)CriteriaFailEvent.Count];
CriteriaManager()
{
@@ -3717,10 +3736,10 @@ namespace Game.Achievements
_scenarioCriteriasByTypeAndScenarioId[i] = new MultiMap<uint, Criteria>();
}
for (var i = 0; i < (int)CriteriaStartEvent.Max; ++i)
for (var i = 0; i < (int)CriteriaStartEvent.Count; ++i)
_criteriasByStartEvent[i] = new();
for (var i = 0; i < (int)CriteriaFailEvent.Max; ++i)
for (var i = 0; i < (int)CriteriaFailEvent.Count; ++i)
_criteriasByFailEvent[i] = new();
}
@@ -3836,7 +3855,7 @@ namespace Game.Achievements
_criteriaTreeByCriteria.Add(pair.Value.Entry.CriteriaID, pair.Value);
}
for (var i = 0; i < (int)CriteriaFailEvent.Max; ++i)
for (var i = 0; i < (int)CriteriaFailEvent.Count; ++i)
_criteriasByFailEvent[i] = new MultiMap<int, Criteria>();
// Load criteria
@@ -3846,10 +3865,9 @@ namespace Game.Achievements
uint questObjectiveCriterias = 0;
foreach (CriteriaRecord criteriaEntry in CliDB.CriteriaStorage.Values)
{
Cypher.Assert(criteriaEntry.Type < CriteriaType.Count,
$"CRITERIA_TYPE_TOTAL must be greater than or equal to {criteriaEntry.Type + 1} but is currently equal to {CriteriaType.Count}");
Cypher.Assert(criteriaEntry.StartEvent < (byte)CriteriaStartEvent.Max, $"CRITERIA_TYPE_TOTAL must be greater than or equal to {criteriaEntry.StartEvent + 1} but is currently equal to {CriteriaStartEvent.Max}");
Cypher.Assert(criteriaEntry.FailEvent < (byte)CriteriaFailEvent.Max, $"CRITERIA_CONDITION_MAX must be greater than or equal to {criteriaEntry.FailEvent + 1} but is currently equal to {CriteriaFailEvent.Max}");
Cypher.Assert(criteriaEntry.Type < CriteriaType.Count, $"CriteriaType.Count must be greater than or equal to {criteriaEntry.Type + 1} but is currently equal to {CriteriaType.Count}");
Cypher.Assert(criteriaEntry.StartEvent < (byte)CriteriaStartEvent.Count, $"CriteriaStartEvent.Count must be greater than or equal to {criteriaEntry.StartEvent + 1} but is currently equal to {CriteriaStartEvent.Count}");
Cypher.Assert(criteriaEntry.FailEvent < (byte)CriteriaFailEvent.Count, $"CriteriaFailEvent.Count must be greater than or equal to {criteriaEntry.FailEvent + 1} but is currently equal to {CriteriaFailEvent.Count}");
var treeList = _criteriaTreeByCriteria.LookupByKey(criteriaEntry.Id);
if (treeList.Empty())
@@ -4086,7 +4104,7 @@ namespace Game.Achievements
{
return _criteriasByFailEvent[(int)failEvent].LookupByKey(asset);
}
public List<Criteria> GetGuildCriteriaByType(CriteriaType type)
{
return _guildCriteriasByType.LookupByKey(type);