mirror of
https://github.com/kwsch/NHSE.git
synced 2026-05-27 20:52:32 -05:00
Allows for expansion in properties available for editing via updating Personal30's get/set list Seems like a better compromise to only update 1 class for new additions, rather than backporting a stubbed invalid offset. Behaves similar to WhereAreN being a nullable (optional) property. In an ideal world, we'd have interfaces and concrete implementations for every structure revision, but that's far too much work to cleanly implement compared to the picky offset slicing.
85 lines
3.1 KiB
C#
85 lines
3.1 KiB
C#
using System;
|
|
|
|
namespace NHSE.Core;
|
|
|
|
/// <summary>
|
|
/// Offset info and object retrieval logic for <see cref="Personal"/>
|
|
/// </summary>
|
|
public abstract class PersonalOffsets
|
|
{
|
|
public abstract int PersonalId { get; }
|
|
public abstract int EventFlagsPlayer { get; }
|
|
public abstract int CountAchievement { get; }
|
|
public abstract int Wallet { get; }
|
|
public abstract int NowPoint { get; }
|
|
public abstract int TotalPoint { get; }
|
|
public abstract int Birthday { get; }
|
|
|
|
public abstract int ProfileMain { get; }
|
|
public abstract int ProfilePhoto { get; }
|
|
public abstract int ProfileBirthday { get; }
|
|
public abstract int ProfileFruit { get; }
|
|
public abstract int ProfileTimestamp { get; }
|
|
public abstract int ProfileIsMakeVillage { get; }
|
|
|
|
public abstract int Pockets1 { get; }
|
|
public abstract int Pockets2 { get; }
|
|
public abstract int ItemChest { get; }
|
|
public abstract int ItemCollectBit { get; }
|
|
public abstract int ItemRemakeCollectBit { get; }
|
|
public abstract int Manpu { get; } // reactions
|
|
|
|
public abstract int Bank { get; }
|
|
public abstract int Recipes { get; }
|
|
|
|
public int MaxAchievementID => 512;
|
|
public int Pockets1Count => 20;
|
|
public int Pockets2Count => 20;
|
|
public virtual int ItemChestCount => 5000;
|
|
public abstract int MaxRecipeID { get; }
|
|
public abstract int MaxRemakeBitFlag { get; }
|
|
|
|
public static PersonalOffsets GetOffsets(FileHeaderInfo Info)
|
|
{
|
|
var rev = Info.GetKnownRevisionIndex();
|
|
return rev switch
|
|
{
|
|
0 => new PersonalOffsets10(),
|
|
1 => new PersonalOffsets11(),
|
|
2 => new PersonalOffsets11(),
|
|
3 => new PersonalOffsets11(),
|
|
4 => new PersonalOffsets11(),
|
|
5 => new PersonalOffsets11(),
|
|
6 => new PersonalOffsets12(),
|
|
7 => new PersonalOffsets12(),
|
|
8 => new PersonalOffsets13(),
|
|
9 => new PersonalOffsets13(),
|
|
10 => new PersonalOffsets14(),
|
|
11 => new PersonalOffsets14(),
|
|
12 => new PersonalOffsets14(),
|
|
13 => new PersonalOffsets15(),
|
|
14 => new PersonalOffsets15(),
|
|
15 => new PersonalOffsets16(),
|
|
16 => new PersonalOffsets17(),
|
|
17 => new PersonalOffsets18(),
|
|
18 => new PersonalOffsets19(),
|
|
19 => new PersonalOffsets110(),
|
|
20 => new PersonalOffsets111(),
|
|
21 => new PersonalOffsets111(),
|
|
22 => new PersonalOffsets20(),
|
|
23 => new PersonalOffsets20(),
|
|
24 => new PersonalOffsets20(),
|
|
25 => new PersonalOffsets20(),
|
|
26 => new PersonalOffsets20(),
|
|
27 => new PersonalOffsets20(),
|
|
28 => new PersonalOffsets20(),
|
|
29 => new PersonalOffsets20(),
|
|
30 => new PersonalOffsets20(),
|
|
31 => new PersonalOffsets30(),
|
|
_ => throw new IndexOutOfRangeException("Unknown revision!" + Environment.NewLine + Info),
|
|
};
|
|
}
|
|
|
|
public abstract IReactionStore ReadReactions(ReadOnlySpan<byte> data);
|
|
public abstract void SetReactions(Span<byte> data, IReactionStore value);
|
|
} |