Files
CapySR/src/CapySR.Data/Excel/ChallengeRows.cs
T

198 lines
4.7 KiB
C#
Raw Normal View History

2026-09-07 21:28:11 -07:00
namespace CapySR.Data.Excel;
// MOC / PF / AS floors. id ranges: <20000 MOC, 20000-30000 PF, >30000 AS.
// dimbreath keeps them in three files with one shape; the beta dump merges them.
public sealed class ChallengeMazeExcel
{
public uint ID { get; set; }
public uint GroupID { get; set; }
public uint Floor { get; set; }
public uint MapEntranceID { get; set; }
public uint MapEntranceID2 { get; set; }
public uint MazeGroupID1 { get; set; }
public uint? MazeGroupID2 { get; set; }
public uint MazeBuffID { get; set; }
public uint ChallengeCountDown { get; set; }
public uint StageNum { get; set; }
public List<uint> ChallengeTargetID { get; set; } = [];
public List<uint> NpcMonsterIDList1 { get; set; } = [];
public List<uint> NpcMonsterIDList2 { get; set; } = [];
public List<uint> EventIDList1 { get; set; } = [];
public List<uint> EventIDList2 { get; set; } = [];
public ChallengeKind Kind => ID switch
{
> 30000 => ChallengeKind.ApocalypticShadow,
> 20000 => ChallengeKind.PureFiction,
_ => ChallengeKind.MemoryOfChaos,
};
public bool HasSecondNode => MazeGroupID2 is > 0 && NpcMonsterIDList2.Count > 0 && EventIDList2.Count > 0;
// StageNum is missing from the trimmed beta rows; fall back to what the node data says
public int NodeCount => StageNum > 0 ? (int)Math.Min(StageNum, 2) : HasSecondNode ? 2 : 1;
}
public enum ChallengeKind
{
MemoryOfChaos,
PureFiction,
ApocalypticShadow,
}
// Anomaly Arbitration. MapEntranceID/MazeGroupID/NpcMonsterIDList only exist in the beta dump.
public sealed class ChallengePeakExcel
{
public uint ID { get; set; }
public uint MapEntranceID { get; set; }
public uint MazeGroupID { get; set; }
public List<uint> NpcMonsterIDList { get; set; } = [];
public List<uint> EventIDList { get; set; } = [];
public List<uint> TagList { get; set; } = [];
public List<uint> NormalTargetList { get; set; } = [];
public List<string> DamageType { get; set; } = [];
public bool IsPlayable => MapEntranceID > 0 && NpcMonsterIDList.Count > 0 && EventIDList.Count > 0;
}
public sealed class ChallengePeakBossExcel
{
public uint ID { get; set; }
public List<uint> BuffList { get; set; } = [];
public List<uint> HardTagList { get; set; } = [];
public List<uint> HardEventIDList { get; set; } = [];
public uint HardTarget { get; set; }
}
// PF extras: the score targets the battle reports against
public sealed class ChallengeStoryExtraExcel
{
public uint ID { get; set; }
public uint TurnLimit { get; set; }
public List<uint> BattleTargetID { get; set; } = [];
public uint ClearScore { get; set; }
}
public sealed class ChallengeBossExtraExcel
{
public uint ID { get; set; }
public uint MonsterID1 { get; set; }
public uint MonsterID2 { get; set; }
}
// star conditions for MOC (ROUNDS_LEFT / DEAD_AVATAR) and PF/AS (TOTAL_SCORE)
public sealed class ChallengeTargetExcel
{
public uint ID { get; set; }
public string ChallengeTargetType { get; set; } = string.Empty;
public uint ChallengeTargetParam1 { get; set; }
}
public sealed class ChallengeGroupExcel
{
public uint GroupID { get; set; }
public string ChallengeGroupType { get; set; } = string.Empty;
public uint RewardLineGroupID { get; set; }
}
public sealed class MapEntranceExcel
{
public uint ID { get; set; }
public uint PlaneID { get; set; }
public uint FloorID { get; set; }
}
public sealed class MazePlaneExcel
{
public uint PlaneID { get; set; }
public uint WorldID { get; set; }
public uint ChallengePlaneID { get; set; }
public List<uint> FloorIDList { get; set; } = [];
}
public sealed class ChallengePeakGroupExcel
{
public uint ID { get; set; }
public uint BossLevelID { get; set; }
public List<uint> PreLevelIDList { get; set; } = [];
public IEnumerable<uint> AllStages => BossLevelID > 0 ? PreLevelIDList.Append(BossLevelID) : PreLevelIDList;
}
public sealed class MainMissionExcel
{
public uint MainMissionID { get; set; }
}
public sealed class TutorialExcel
{
public uint TutorialID { get; set; }
}
public sealed class TutorialGuideGroupExcel
{
public uint GroupID { get; set; }
}
2026-09-08 17:35:42 -07:00
public sealed class GachaCeilingExcel
{
public string GachaType { get; set; } = string.Empty;
public List<uint> CeilingItemList { get; set; } = [];
}
2026-09-07 21:28:11 -07:00
// maps an item id to its main/sub type. the client NPEs on an item it cannot type.
public sealed class ItemConfigExcel
{
public uint ID { get; set; }
}
public sealed class MultiPathAvatarExcel
{
public uint AvatarID { get; set; }
public uint BaseAvatarID { get; set; }
public string Gender { get; set; } = string.Empty;
}