acdream/src/AcDream.Content/RetailDataIdResolver.cs

28 lines
978 B
C#

using DatReaderWriter;
using DatReaderWriter.DBObjs;
namespace AcDream.Content;
/// <summary>
/// Ports <c>DBCache::GetDIDFromEnumStatic @ 0x00413940</c>: the portal master map
/// selects an enum category, then that category map resolves the client enum value.
/// </summary>
public static class RetailDataIdResolver
{
public static uint Resolve(IDatReaderWriter dats, uint enumValue, uint enumCategory)
{
ArgumentNullException.ThrowIfNull(dats);
uint masterDid = (uint)dats.Portal.Db.Header.MasterMapId;
if (masterDid == 0
|| !dats.Portal.TryGet<EnumIDMap>(masterDid, out var master)
|| master is null
|| !master.ClientEnumToID.TryGetValue(enumCategory, out uint subMapDid)
|| !dats.Portal.TryGet<EnumIDMap>(subMapDid, out var subMap)
|| subMap is null
|| !subMap.ClientEnumToID.TryGetValue(enumValue, out uint did))
return 0u;
return did;
}
}