qstbak/Questionable/Questionable.Data/AlliedSocietyData.cs
2025-10-10 10:13:06 +10:00

313 lines
6.6 KiB
C#

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<ushort, AlliedSocietyMountConfiguration> Mounts { get; } = new Dictionary<ushort, AlliedSocietyMountConfiguration>
{
{
66,
new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList<uint>(1016093u), EAetheryteLocation.SeaOfCloudsOkZundu)
},
{
79,
new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList<uint>(1017031u), EAetheryteLocation.DravanianForelandsAnyxTrine)
},
{
88,
new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlyArray<uint>(new uint[2] { 1017470u, 1017432u }), EAetheryteLocation.ChurningMistsZenith)
},
{
89,
new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList<uint>(1017322u), EAetheryteLocation.ChurningMistsZenith)
},
{
147,
new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlyArray<uint>(new uint[2] { 1024777u, 1024912u }), EAetheryteLocation.FringesPeeringStones)
},
{
369,
new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList<uint>(1051798u), EAetheryteLocation.KozamaukaDockPoga)
},
{
391,
new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList<uint>(1052562u), EAetheryteLocation.YakTelMamook)
},
{
24,
new AlliedSocietyMountConfiguration(new global::_003C_003Ez__ReadOnlySingleElementList<uint>(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<uint>();
mountNpcs = new uint[1] { 1017031u };
break;
case EAlliedSociety.Moogles:
normalNpcs = Array.Empty<uint>();
mountNpcs = new uint[3] { 1017322u, 1017470u, 1017471u };
break;
case EAlliedSociety.YokHuy:
normalNpcs = new uint[1] { 1054635u };
mountNpcs = Array.Empty<uint>();
break;
default:
normalNpcs = Array.Empty<uint>();
mountNpcs = Array.Empty<uint>();
break;
}
}
public bool TryGetTurnInIssuers(ElementId elementId, out uint[] issuerDataIds)
{
EAlliedSociety commonAlliedSocietyTurnIn = GetCommonAlliedSocietyTurnIn(elementId);
if (commonAlliedSocietyTurnIn == EAlliedSociety.None)
{
issuerDataIds = Array.Empty<uint>();
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<uint>();
}
return issuerDataIds.Length != 0;
}
public Dictionary<uint, List<QuestId>> GroupQuestsByTurnInIssuer(IEnumerable<QuestId> quests)
{
Dictionary<uint, List<QuestId>> dictionary = new Dictionary<uint, List<QuestId>>();
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<QuestId> list = new List<QuestId>(num);
CollectionsMarshal.SetCount(list, num);
Span<QuestId> span = CollectionsMarshal.AsSpan(list);
int index = 0;
span[index] = quest;
dictionary[key] = list;
}
}
return dictionary;
}
}