fix(paperdoll): port quest-gated Aetheria slots
Add the three authored blue, yellow, and red sigil backgrounds and drive their visibility from player PropertyInt.AetheriaBitfield bits 1/2/4 at login and on live updates, matching gmPaperDollUI::UpdateAetheria. Include the sigil equip masks in the shared slot table and narrow AP-108. Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
parent
1be18cc4db
commit
edc9be3008
11 changed files with 208 additions and 16 deletions
33
src/AcDream.Core/Items/AetheriaUnlockState.cs
Normal file
33
src/AcDream.Core/Items/AetheriaUnlockState.cs
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
using System;
|
||||
|
||||
namespace AcDream.Core.Items;
|
||||
|
||||
/// <summary>
|
||||
/// Player <c>PropertyInt.AetheriaBitfield (322 / 0x142)</c>. Each bit independently
|
||||
/// unlocks one paperdoll sigil location after its corresponding retail quest.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Retail: <c>gmPaperDollUI::UpdateAetheria @ 0x004A3E50</c>.
|
||||
/// ACE: <c>PropertyInt.AetheriaBitfield</c> + <c>AetheriaBitfield</c>.
|
||||
/// </remarks>
|
||||
[Flags]
|
||||
public enum AetheriaUnlockState : uint
|
||||
{
|
||||
None = 0x0,
|
||||
Blue = 0x1,
|
||||
Yellow = 0x2,
|
||||
Red = 0x4,
|
||||
All = Blue | Yellow | Red,
|
||||
}
|
||||
|
||||
public static class AetheriaUnlocks
|
||||
{
|
||||
public const uint PropertyId = 0x142u;
|
||||
|
||||
public static AetheriaUnlockState Read(ClientObject? player)
|
||||
{
|
||||
if (player?.Properties.Ints.TryGetValue(PropertyId, out int value) != true)
|
||||
return AetheriaUnlockState.None;
|
||||
return (AetheriaUnlockState)(uint)value;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue