313 lines
6.6 KiB
C#
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;
|
|
}
|
|
}
|