muffin v6.12

This commit is contained in:
alydev 2025-10-09 07:53:51 +10:00
parent e786325cda
commit 0950798597
64 changed files with 40100 additions and 58121 deletions

View file

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using LLib.GameData;
using Questionable.Model.Questing;
namespace Questionable.Model;
internal sealed class AetherCurrentQuestInfo : IQuestInfo
{
public ElementId QuestId { get; }
public string Name { get; }
public uint IssuerDataId { get; }
public bool IsRepeatable => false;
public ImmutableList<PreviousQuestInfo> PreviousQuests => ImmutableList.Create(default(ReadOnlySpan<PreviousQuestInfo>));
public EQuestJoin PreviousQuestJoin => EQuestJoin.All;
public ushort Level => 1;
public EAlliedSociety AlliedSociety => EAlliedSociety.None;
public uint? JournalGenre => null;
public ushort SortKey => 0;
public bool IsMainScenarioQuest => false;
public IReadOnlyList<EClassJob> ClassJobs => Array.Empty<EClassJob>();
public EExpansionVersion Expansion => EExpansionVersion.ARealmReborn;
public AetherCurrentQuestInfo(AetherCurrentId aetherCurrentId, string name, uint issuerDataId = 0u)
{
QuestId = aetherCurrentId;
Name = name;
IssuerDataId = issuerDataId;
}
}

View file

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using LLib.GameData;
using Questionable.Model.Questing;
namespace Questionable.Model;
internal sealed class AethernetQuestInfo : IQuestInfo
{
public ElementId QuestId { get; }
public string Name { get; }
public uint IssuerDataId { get; }
public bool IsRepeatable => false;
public ImmutableList<PreviousQuestInfo> PreviousQuests => ImmutableList.Create(default(ReadOnlySpan<PreviousQuestInfo>));
public EQuestJoin PreviousQuestJoin => EQuestJoin.All;
public ushort Level => 1;
public EAlliedSociety AlliedSociety => EAlliedSociety.None;
public uint? JournalGenre => null;
public ushort SortKey => 0;
public bool IsMainScenarioQuest => false;
public IReadOnlyList<EClassJob> ClassJobs => Array.Empty<EClassJob>();
public EExpansionVersion Expansion => EExpansionVersion.ARealmReborn;
public AethernetQuestInfo(AethernetId aethernetId, string name, uint issuerDataId = 0u)
{
QuestId = aethernetId;
Name = name;
IssuerDataId = issuerDataId;
}
}

View file

@ -41,51 +41,63 @@ internal sealed class AlliedSocietyDailyInfo : IQuestInfo
{
QuestId = new AlliedSocietyDailyId((byte)beastTribe.RowId, rank);
Name = beastTribe.Name.ToString();
List<EClassJob> list2;
switch ((EAlliedSociety)(byte)beastTribe.RowId)
IReadOnlyList<EClassJob> readOnlyList = null;
try
{
case EAlliedSociety.Amaljaa:
case EAlliedSociety.Sylphs:
case EAlliedSociety.Kobolds:
case EAlliedSociety.Sahagin:
case EAlliedSociety.VanuVanu:
case EAlliedSociety.Vath:
case EAlliedSociety.Kojin:
case EAlliedSociety.Ananta:
case EAlliedSociety.Pixies:
case EAlliedSociety.Arkasodara:
case EAlliedSociety.Pelupelu:
List<EClassJob> list2;
switch ((EAlliedSociety)(byte)beastTribe.RowId)
{
case EAlliedSociety.Amaljaa:
case EAlliedSociety.Sylphs:
case EAlliedSociety.Kobolds:
case EAlliedSociety.Sahagin:
case EAlliedSociety.VanuVanu:
case EAlliedSociety.Vath:
case EAlliedSociety.Kojin:
case EAlliedSociety.Ananta:
case EAlliedSociety.Pixies:
case EAlliedSociety.Arkasodara:
case EAlliedSociety.Pelupelu:
{
List<EClassJob> list3 = new List<EClassJob>();
list3.AddRange(classJobUtils.AsIndividualJobs(EExtendedClassJob.DoW, null));
list3.AddRange(classJobUtils.AsIndividualJobs(EExtendedClassJob.DoM, null));
list2 = list3;
break;
}
case EAlliedSociety.Ixal:
case EAlliedSociety.Moogles:
case EAlliedSociety.Dwarves:
case EAlliedSociety.Loporrits:
case EAlliedSociety.YokHuy:
list2 = classJobUtils.AsIndividualJobs(EExtendedClassJob.DoH, null).ToList();
break;
case EAlliedSociety.Qitari:
case EAlliedSociety.Omicrons:
case EAlliedSociety.MamoolJa:
list2 = classJobUtils.AsIndividualJobs(EExtendedClassJob.DoL, null).ToList();
break;
case EAlliedSociety.Namazu:
{
List<EClassJob> list = new List<EClassJob>();
list.AddRange(classJobUtils.AsIndividualJobs(EExtendedClassJob.DoH, null));
list.AddRange(classJobUtils.AsIndividualJobs(EExtendedClassJob.DoL, null));
list2 = list;
break;
}
default:
throw new ArgumentOutOfRangeException("beastTribe");
}
readOnlyList = list2;
}
catch (ArgumentOutOfRangeException)
{
List<EClassJob> list3 = new List<EClassJob>();
list3.AddRange(classJobUtils.AsIndividualJobs(EExtendedClassJob.DoW, null));
list3.AddRange(classJobUtils.AsIndividualJobs(EExtendedClassJob.DoM, null));
list2 = list3;
break;
List<EClassJob> list4 = new List<EClassJob>();
list4.AddRange(classJobUtils.AsIndividualJobs(EExtendedClassJob.DoW, null));
list4.AddRange(classJobUtils.AsIndividualJobs(EExtendedClassJob.DoM, null));
readOnlyList = new _003C_003Ez__ReadOnlyList<EClassJob>(list4);
}
case EAlliedSociety.Ixal:
case EAlliedSociety.Moogles:
case EAlliedSociety.Dwarves:
case EAlliedSociety.Loporrits:
case EAlliedSociety.YokHuy:
list2 = classJobUtils.AsIndividualJobs(EExtendedClassJob.DoH, null).ToList();
break;
case EAlliedSociety.Qitari:
case EAlliedSociety.Omicrons:
case EAlliedSociety.MamoolJa:
list2 = classJobUtils.AsIndividualJobs(EExtendedClassJob.DoL, null).ToList();
break;
case EAlliedSociety.Namazu:
{
List<EClassJob> list = new List<EClassJob>();
list.AddRange(classJobUtils.AsIndividualJobs(EExtendedClassJob.DoH, null));
list.AddRange(classJobUtils.AsIndividualJobs(EExtendedClassJob.DoL, null));
list2 = list;
break;
}
default:
throw new ArgumentOutOfRangeException("beastTribe");
}
ClassJobs = list2;
ClassJobs = readOnlyList;
Expansion = (EExpansionVersion)beastTribe.Expansion.RowId;
}
}

View file

@ -17,6 +17,10 @@ internal interface IQuestInfo
bool IsRepeatable { get; }
bool IsSeasonalQuest => false;
DateTime? SeasonalQuestExpiry => null;
ImmutableList<PreviousQuestInfo> PreviousQuests { get; }
EQuestJoin PreviousQuestJoin { get; }

View file

@ -66,7 +66,11 @@ internal sealed class QuestInfo : IQuestInfo
public EExpansionVersion Expansion { get; }
public QuestInfo(Lumina.Excel.Sheets.Quest quest, uint newGamePlusChapter, byte startingCity, JournalGenreOverrides journalGenreOverrides)
public DateTime? SeasonalQuestExpiry { get; internal set; }
public bool IsSeasonalQuest { get; internal set; }
public QuestInfo(Lumina.Excel.Sheets.Quest quest, uint newGamePlusChapter, byte startingCity, JournalGenreOverrides journalGenreOverrides, bool isSeasonalEventQuest = false, DateTime? seasonalQuestExpiry = null)
{
QuestId = Questionable.Model.Questing.QuestId.FromRowId(quest.RowId);
string value = QuestId.Value switch
@ -157,6 +161,9 @@ internal sealed class QuestInfo : IQuestInfo
AlliedSocietyRank = (int)quest.BeastReputationRank.RowId;
ClassJobs = QuestInfoUtils.AsList(quest.ClassJobCategory0.ValueNullable);
IsSeasonalEvent = quest.Festival.RowId != 0;
IsSeasonalQuest = isSeasonalEventQuest;
SeasonalQuestExpiry = (IsSeasonalQuest ? seasonalQuestExpiry : ((DateTime?)null));
SeasonalQuestExpiry = seasonalQuestExpiry;
NewGamePlusChapter = newGamePlusChapter;
StartingCity = startingCity;
MoogleDeliveryLevel = (byte)quest.DeliveryQuest.RowId;

View file

@ -23,8 +23,6 @@ internal sealed class QuestProgressInfo
public EClassJob ClassJob { get; }
public string Tooltip { get; }
public QuestProgressInfo(QuestWork questWork)
{
Id = new QuestId(questWork.QuestId);
@ -33,20 +31,11 @@ internal sealed class QuestProgressInfo
Variables = questWork.Variables.ToArray().ToList();
IsHidden = questWork.IsHidden;
ClassJob = (EClassJob)questWork.AcceptClassJob;
Tooltip = "";
Span<byte> variables = questWork.Variables;
string text = "";
for (int i = 0; i < variables.Length; i++)
{
byte b = variables[i];
Tooltip = Tooltip + Convert.ToString(b, 2).PadLeft(8).Replace(" ", "0") + "\n";
int num = b & 0xF;
text += b;
if (num != 0)
{
text += $"({num})";
}
text += " ";
text = text + variables[i] + " ";
if (i % 2 == 1)
{
text += " ";

View file

@ -16,6 +16,10 @@ internal sealed class UnlockLinkQuestInfo : IQuestInfo
public bool IsRepeatable => false;
public DateTime? QuestExpiry { get; }
public string? Patch { get; }
public ImmutableList<PreviousQuestInfo> PreviousQuests => ImmutableList.Create(default(ReadOnlySpan<PreviousQuestInfo>));
public EQuestJoin PreviousQuestJoin => EQuestJoin.All;
@ -34,10 +38,12 @@ internal sealed class UnlockLinkQuestInfo : IQuestInfo
public EExpansionVersion Expansion => EExpansionVersion.ARealmReborn;
public UnlockLinkQuestInfo(UnlockLinkId unlockLinkId, string name, uint issuerDataId)
public UnlockLinkQuestInfo(UnlockLinkId unlockLinkId, string name, uint issuerDataId, DateTime? expiryTime, string? patch = null)
{
QuestId = unlockLinkId;
Name = name;
IssuerDataId = issuerDataId;
QuestExpiry = expiryTime;
Patch = patch;
}
}