using DatReaderWriter; using DatReaderWriter.DBObjs; namespace AcDream.Content; /// /// Ports DBCache::GetDIDFromEnumStatic @ 0x00413940: the portal master map /// selects an enum category, then that category map resolves the client enum value. /// 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(masterDid, out var master) || master is null || !master.ClientEnumToID.TryGetValue(enumCategory, out uint subMapDid) || !dats.Portal.TryGet(subMapDid, out var subMap) || subMap is null || !subMap.ClientEnumToID.TryGetValue(enumValue, out uint did)) return 0u; return did; } }