using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Runtime.InteropServices; using Questionable.Model; using Questionable.Model.Common; using Questionable.Model.Questing; namespace Questionable.Data; internal sealed class AlliedSocietyData { public ReadOnlyDictionary Mounts { get; } = new Dictionary { { 66, new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList(1016093u), EAetheryteLocation.SeaOfCloudsOkZundu) }, { 79, new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList(1017031u), EAetheryteLocation.DravanianForelandsAnyxTrine) }, { 88, new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlyArray(new uint[2] { 1017470u, 1017432u }), EAetheryteLocation.ChurningMistsZenith) }, { 89, new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList(1017322u), EAetheryteLocation.ChurningMistsZenith) }, { 147, new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlyArray(new uint[2] { 1024777u, 1024912u }), EAetheryteLocation.FringesPeeringStones) }, { 369, new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList(1051798u), EAetheryteLocation.KozamaukaDockPoga) }, { 391, new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList(1052562u), EAetheryteLocation.YakTelMamook) }, { 24, new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList(1052562u), EAetheryteLocation.EastShroudHawthorneHut) } }.AsReadOnly(); public EAlliedSociety GetCommonAlliedSocietyTurnIn(ElementId elementId) { if (elementId is QuestId { Value: var value }) { switch (value) { case 2171: case 2172: case 2173: case 2174: case 2175: case 2176: case 2177: case 2178: case 2179: case 2180: case 2181: case 2182: case 2183: case 2184: case 2185: case 2186: case 2187: case 2188: case 2189: case 2190: case 2191: case 2192: case 2193: case 2194: case 2195: case 2196: case 2197: case 2198: case 2199: case 2200: return EAlliedSociety.VanuVanu; case 2261: case 2262: case 2263: case 2264: case 2265: case 2266: case 2267: case 2268: case 2269: case 2270: case 2271: case 2272: case 2273: case 2274: case 2275: case 2276: case 2277: case 2278: case 2279: case 2280: return EAlliedSociety.Vath; case 2290: case 2291: case 2292: case 2293: case 2294: case 2295: case 2296: case 2297: case 2298: case 2299: case 2300: case 2301: case 2302: case 2303: case 2304: case 2305: case 2306: case 2307: case 2308: case 2309: case 2310: case 2311: case 2312: case 2313: case 2314: case 2315: case 2316: case 2317: case 2318: case 2319: return EAlliedSociety.Moogles; case 5199: case 5200: case 5201: case 5202: case 5203: case 5204: case 5205: case 5206: case 5207: case 5208: case 5209: case 5210: case 5211: case 5212: case 5213: case 5214: case 5215: case 5216: case 5217: case 5218: case 5219: case 5220: case 5221: case 5222: case 5223: case 5224: case 5225: case 5226: return EAlliedSociety.Pelupelu; case 5261: case 5262: case 5263: case 5264: case 5265: case 5266: case 5267: case 5268: case 5269: case 5270: case 5271: case 5272: case 5273: case 5274: case 5275: case 5276: case 5277: case 5278: case 5279: case 5280: case 5281: case 5282: case 5283: case 5284: case 5285: case 5286: case 5287: case 5288: return EAlliedSociety.MamoolJa; case 5330: case 5331: case 5332: case 5333: case 5334: case 5335: case 5336: case 5337: case 5338: case 5339: case 5340: case 5341: case 5342: case 5343: case 5344: case 5345: case 5346: case 5347: case 5348: case 5349: case 5350: case 5351: case 5352: case 5353: case 5354: case 5355: case 5356: case 5357: case 5358: case 5359: case 5360: case 5361: case 5362: case 5363: return EAlliedSociety.YokHuy; default: return EAlliedSociety.None; } } return EAlliedSociety.None; } public void GetCommonAlliedSocietyNpcs(EAlliedSociety alliedSociety, out uint[] normalNpcs, out uint[] mountNpcs) { switch (alliedSociety) { case EAlliedSociety.VanuVanu: normalNpcs = new uint[3] { 1016088u, 1016091u, 1016092u }; mountNpcs = new uint[1] { 1016093u }; break; case EAlliedSociety.Vath: normalNpcs = Array.Empty(); mountNpcs = new uint[1] { 1017031u }; break; case EAlliedSociety.Moogles: normalNpcs = Array.Empty(); mountNpcs = new uint[3] { 1017322u, 1017470u, 1017471u }; break; case EAlliedSociety.YokHuy: normalNpcs = new uint[1] { 1054635u }; mountNpcs = Array.Empty(); break; default: normalNpcs = Array.Empty(); mountNpcs = Array.Empty(); break; } } public bool TryGetTurnInIssuers(ElementId elementId, out uint[] issuerDataIds) { EAlliedSociety commonAlliedSocietyTurnIn = GetCommonAlliedSocietyTurnIn(elementId); if (commonAlliedSocietyTurnIn == EAlliedSociety.None) { issuerDataIds = Array.Empty(); return false; } GetCommonAlliedSocietyNpcs(commonAlliedSocietyTurnIn, out uint[] normalNpcs, out uint[] mountNpcs); if (normalNpcs.Length != 0) { issuerDataIds = normalNpcs; } else if (mountNpcs.Length != 0) { issuerDataIds = mountNpcs; } else { issuerDataIds = Array.Empty(); } return issuerDataIds.Length != 0; } public Dictionary> GroupQuestsByTurnInIssuer(IEnumerable quests) { Dictionary> dictionary = new Dictionary>(); foreach (QuestId quest in quests) { if (TryGetTurnInIssuers(quest, out uint[] issuerDataIds) && issuerDataIds.Length != 0) { uint key = issuerDataIds[0]; if (dictionary.TryGetValue(key, out var value)) { value.Add(quest); continue; } int num = 1; List list = new List(num); CollectionsMarshal.SetCount(list, num); Span span = CollectionsMarshal.AsSpan(list); int index = 0; span[index] = quest; dictionary[key] = list; } } return dictionary; } }