Adapt personal player struct to disassembled pseudo.h

Similar to main's adaption in a prior commit, let's use the relative offsets.

adds total nook miles earned to editor
fixes the off-by-one indexing for achievement list
This commit is contained in:
Kurt
2020-05-06 15:32:09 -07:00
parent 39205c975e
commit 5779b65b9b
10 changed files with 249 additions and 178 deletions

View File

@@ -54,8 +54,14 @@ public EncryptedInt32 Bank
public EncryptedInt32 NookMiles
{
get => EncryptedInt32.ReadVerify(Data, Offsets.NookMiles);
set => value.Write(Data, Offsets.NookMiles);
get => EncryptedInt32.ReadVerify(Data, Offsets.NowPoint);
set => value.Write(Data, Offsets.NowPoint);
}
public EncryptedInt32 TotalNookMiles
{
get => EncryptedInt32.ReadVerify(Data, Offsets.TotalPoint);
set => value.Write(Data, Offsets.TotalPoint);
}
public IReadOnlyList<Item> Bag // Slots 21-40
@@ -94,16 +100,16 @@ public IReadOnlyList<Item> ItemChest
set => BitConverter.GetBytes(value).CopyTo(Data, Offsets.ItemChest + (Offsets.ItemChestCount * Item.SIZE));
}
public uint[] GetActivities()
public uint[] GetCountAchievement()
{
var result = new uint[Offsets.MaxActivityID];
Buffer.BlockCopy(Data, Offsets.Activity, result, 0, sizeof(uint) * result.Length);
var result = new uint[Offsets.MaxAchievementID];
Buffer.BlockCopy(Data, Offsets.CountAchievement, result, 0, sizeof(uint) * result.Length);
return result;
}
public void SetActivities(uint[] activities)
public void SetCountAchievement(uint[] achievements)
{
Buffer.BlockCopy(activities, 0, Data, Offsets.Activity, sizeof(uint) * Offsets.MaxActivityID);
Buffer.BlockCopy(achievements, 0, Data, Offsets.CountAchievement, sizeof(uint) * Offsets.MaxAchievementID);
}
public bool[] GetRecipeList() => ArrayUtil.GitBitFlagArray(Data, Offsets.Recipes, Offsets.MaxRecipeID + 1);

View File

@@ -9,24 +9,25 @@ public abstract class PersonalOffsets
{
public abstract int PersonalId { get; }
public abstract int EventFlagsPlayer { get; }
public abstract int Activity { get; }
public abstract int CountAchievement { get; }
public abstract int Wallet { get; }
public abstract int NookMiles { get; }
public abstract int NowPoint { get; }
public abstract int TotalPoint { get; }
public abstract int Photo { get; }
public abstract int Pockets1 { get; }
public abstract int Pockets2 { get; }
public abstract int ItemChest { get; }
public abstract int ReceivedItems { get; }
public abstract int ItemCollectBit { get; }
public abstract int Bank { get; }
public abstract int Recipes { get; }
public int MaxActivityID { get; } = 100; // guess
public int MaxAchievementID { get; } = 512;
public int Pockets1Count { get; } = 20;
public int Pockets2Count { get; } = 20;
public int ItemChestCount { get; } = 5000;
public virtual int MaxRecipeID { get; } = 0x2A0;
public abstract int MaxRecipeID { get; }
public static PersonalOffsets GetOffsets(FileHeaderInfo Info)
{

View File

@@ -5,19 +5,32 @@
/// </summary>
public sealed class PersonalOffsets10 : PersonalOffsets
{
public override int PersonalId => 0xB0A0;
public override int EventFlagsPlayer => PersonalId + 0x38; // +0x18 from v1.0, +0x18 after player name start
public override int Activity => 0xCF6C;
public override int NookMiles => 0x11570;
public override int Photo => 0x11598;
private const int Player = 0x108;
public override int Pockets1 => 0x35BD4;
public override int PersonalId => Player + 0xAF98;
public override int EventFlagsPlayer => Player + 0xAFD0;
private const int GSaveLifeSupport = Player + 0xBFD0;
public override int CountAchievement => GSaveLifeSupport + 0xE98; // CountAchievement
public override int NowPoint => GSaveLifeSupport + 0x5498; // Nook Miles
public override int TotalPoint => NowPoint + 8; // Total Nook Miles Earned
private const int GSaveNetPlayerProfile = Player + 0x11480;
public override int Photo => GSaveNetPlayerProfile + 0x24;
// end player
private const int PlayerOther = 0x35BD0;
public override int Pockets1 => PlayerOther + 0x4;
public override int Pockets2 => Pockets1 + (8 * Pockets1Count) + 0x18;
public override int Wallet => Pockets2 + (8 * Pockets2Count) + 0x18;
public override int ItemChest => Wallet + 0xC;
public override int ReceivedItems => 0x3FC1C;
public override int ItemChest => PlayerOther + 0x18C;
public override int ItemCollectBit => PlayerOther + 0xA04C;
public override int Bank => PlayerOther + 0x33014;
public override int Recipes => Bank + 0x10;
public override int Bank => 0x68BE4;
public override int Recipes => 0x68BF4;
public override int MaxRecipeID { get; } = 0x2A0;
}
}
}

View File

@@ -5,20 +5,31 @@
/// </summary>
public sealed class PersonalOffsets11 : PersonalOffsets
{
public override int PersonalId => 0xB0B8; // +0x18 from v1.0
public override int EventFlagsPlayer => PersonalId + 0x38; // +0x18 from v1.0, +0x18 after player name start
public override int Activity => 0xCF84; // +0x18 from v1.0
public override int NookMiles => 0x11588; // +0x18 from v1.0
public override int Photo => 0x115C4; // +0x18 from v1.0
private const int Player = 0x110;
public override int Pockets1 => 0x35C20; // +0x4C from v1.0
public override int PersonalId => Player + 0xAFA8;
public override int EventFlagsPlayer => Player + 0xAFE0;
private const int GSaveLifeSupport = Player + 0xBFE0;
public override int CountAchievement => GSaveLifeSupport + 0xE98;
public override int NowPoint => GSaveLifeSupport + 0x5498; // Nook Miles
public override int TotalPoint => NowPoint + 8; // Total Nook Miles Earned
private const int GSaveNetPlayerProfile = Player + 0x11490;
public override int Photo => GSaveNetPlayerProfile + 0x24;
// end player
private const int PlayerOther = 0x35C10;
public override int Pockets1 => PlayerOther + 0x10;
public override int Pockets2 => Pockets1 + (8 * Pockets1Count) + 0x18;
public override int Wallet => Pockets2 + (8 * Pockets2Count) + 0x18;
public override int ItemChest => Wallet + 0xC;
public override int ReceivedItems => 0x3FC68; // +0x4C from v1.0
public override int Bank => 0x68C34; // +0x50 from v1.0
public override int Recipes => 0x68C44; // + 0x50 from v1.0
public override int ItemChest => PlayerOther + 0x18C;
public override int ItemCollectBit => PlayerOther + 0xA058;
public override int Bank => PlayerOther + 0x33024;
public override int Recipes => Bank + 0x10;
public override int MaxRecipeID { get; } = 0x2C8;
}

View File

@@ -5,19 +5,30 @@
/// </summary>
public sealed class PersonalOffsets12 : PersonalOffsets
{
public override int PersonalId => 0xB0B8;
public override int EventFlagsPlayer => PersonalId + 0x38;
public override int Activity => 0xCF84;
public override int NookMiles => 0x11588;
public override int Photo => 0x117C4; // +0x3FC from v1.1
private const int Player = 0x110;
public override int Pockets1 => 0x35E50; // +0x230 from v1.1
public override int PersonalId => Player + 0xAFA8;
public override int EventFlagsPlayer => Player + 0xAFE0;
private const int GSaveLifeSupport = Player + 0xBFE0;
public override int CountAchievement => GSaveLifeSupport + 0xE98; // CountAchievement
public override int NowPoint => GSaveLifeSupport + 0x5498; // Nook Miles
public override int TotalPoint => NowPoint + 8; // Total Nook Miles Earned
private const int GSaveNetPlayerProfile = Player + 0x11690;
public override int Photo => GSaveNetPlayerProfile + 0x24;
// end player
private const int PlayerOther = 0x35E40;
public override int Pockets1 => PlayerOther + 0x10;
public override int Pockets2 => Pockets1 + (8 * Pockets1Count) + 0x18;
public override int Wallet => Pockets2 + (8 * Pockets2Count) + 0x18;
public override int ItemChest => Wallet + 0xC;
public override int ReceivedItems => 0x3FE98; // +0x230 from v1.1
public override int Bank => 0x6A424; // +0x17F0 from v1.1
public override int ItemChest => PlayerOther + 0x18C;
public override int ItemCollectBit => PlayerOther + 0xA058;
public override int Bank => PlayerOther + 0x345E4;
public override int Recipes => Bank + 0x10;
public override int MaxRecipeID { get; } = 0x2CB;

View File

@@ -22,90 +22,90 @@ public LifeSupportAchievement(short land, short player, ushort index, string nam
public static readonly IReadOnlyDictionary<int, LifeSupportAchievement> List = new Dictionary<int, LifeSupportAchievement>
{
{0x001, new LifeSupportAchievement( 3, -1, 0001, "CatchFish" )}, // サカナを釣った
{0x002, new LifeSupportAchievement( 3, -1, 0002, "CatchInsect" )}, // ムシを捕まえた
{0x003, new LifeSupportAchievement(-1, -1, 0003, "CatchFishContinuously" )}, // 連続で釣りを成功させた回数の最高記録
{0x004, new LifeSupportAchievement(-1, -1, 0004, "FillFishList" )}, // サカナ図鑑を埋めた
{0x005, new LifeSupportAchievement(-1, -1, 0005, "FillInsectList" )}, // ムシ図鑑を埋めた
{0x006, new LifeSupportAchievement(-1, -1, 0006, "ShootDownBalloon" )}, // ふうせんを撃ち落とした
{0x007, new LifeSupportAchievement( 3, -1, 0007, "PlantFlowerSeed" )}, // 花の種を植えた
{0x008, new LifeSupportAchievement(-1, -1, 0008, "PlantFruit" )}, // 6種類のフルーツを植えた
{0x009, new LifeSupportAchievement(-1, -1, 0009, "PlantTreeSeedling" )}, // 木の苗を植えた
{0x00A, new LifeSupportAchievement(-1, -1, 0010, "BuyKabu" )}, // カブを買った
{0x00B, new LifeSupportAchievement(-1, -1, 0011, "HowmuchSellKabu" )}, // カブで得た累計利益
{0x00C, new LifeSupportAchievement(-1, -1, 0012, "HowmuchBuyItem" )}, // これまでの買い物総額
{0x00D, new LifeSupportAchievement(-1, -1, 0013, "BuyItemRcm" )}, // まめきちの店で買い物した
{0x00E, new LifeSupportAchievement(-1, -1, 0014, "SellItemRcm" )}, // まめきちの店で売った
{0x00F, new LifeSupportAchievement(-1, -1, 0015, "RemakeFurniture" )}, // リメイクをした
{0x010, new LifeSupportAchievement(-1, -1, 0016, "FillCatalog" )}, // カタログの項目数
{0x011, new LifeSupportAchievement(-1, -1, 0017, "BuyItemCatalog" )}, // 通販を利用した
{0x012, new LifeSupportAchievement(-1, -1, 0018, "GotoTotakekeShow" )}, // とたけけのライブを観た
{0x013, new LifeSupportAchievement(-1, -1, 0019, "VisitAnotherIsland" )}, // よその島へのおでかけした
{0x014, new LifeSupportAchievement(-1, -1, 0020, "InviteFriend" )}, // 島にフレンドを招いた
{0x016, new LifeSupportAchievement(-1, -1, 0022, "DayPlayed" )}, // 活動日数
{0x018, new LifeSupportAchievement(-1, -1, 0024, "WaterPlant" )}, // 水やりをした
{0x019, new LifeSupportAchievement(-1, -1, 0025, "BeStungbyWasp" )}, // ハチに刺された
{0x01A, new LifeSupportAchievement(-1, -1, 0026, "CatchSeminonukegara" )}, // セミのぬけがらを取った
{0x01B, new LifeSupportAchievement(-1, -1, 0027, "CatchNomi" )}, // ノミを取ってあげた
{0x01C, new LifeSupportAchievement(-1, -1, 0028, "BeStungbyPoisonousInsect" )}, // こわいムシで気絶した
{0x020, new LifeSupportAchievement(-1, -1, 0032, "FillReactionList" )}, // リアクションを覚えた
{0x021, new LifeSupportAchievement(-1, -1, 0033, "CatchTrash" )}, // ゴミを釣った
{0x022, new LifeSupportAchievement(-1, -1, 0034, "PayImmigrationCost" )}, // 移住費用を支払った
{0x023, new LifeSupportAchievement(-1, -1, 0035, "RepayLoan" )}, // ローンを完済した
{0x024, new LifeSupportAchievement( 3, -1, 0036, "UseMydesign" )}, // マイデザインを使った
{0x025, new LifeSupportAchievement(-1, -1, 0037, "UseMydesignPRO" )}, // マイデザインPROを使った
{0x026, new LifeSupportAchievement(-1, -1, 0038, "SellWeed" )}, // 雑草を引き取ってもらった
{0x028, new LifeSupportAchievement(-1, -1, 0040, "CollectGoldTool" )}, // 6種類の金の道具を集めた
{0x029, new LifeSupportAchievement(-1, -1, 0041, "GetSRankonHHA" )}, // HHAでSを取った
{0x02A, new LifeSupportAchievement(-1, -1, 0042, "AttendFishingConvention" )}, // 釣り大会に春夏秋冬参加した
{0x02B, new LifeSupportAchievement(-1, -1, 0043, "AttendInsectConvention" )}, // ムシとり大会に69月参加した
{0x02C, new LifeSupportAchievement(-1, -1, 0044, "HelpGul" )}, // ジョニーを助けた
{0x02D, new LifeSupportAchievement(-1, -1, 0045, "HelpGst" )}, // ゆうたろうを助けた
{0x02E, new LifeSupportAchievement(-1, -1, 0046, "MakePerfectSnowball" )}, // 最高のゆきだるまを作った
{0x02F, new LifeSupportAchievement(-1, -1, 0047, "ReachMyBirthday" )}, // 誕生日を迎えた
{0x030, new LifeSupportAchievement(-1, -1, 0048, "CelebrateVillagersBithday" )}, // 村民の誕生日を祝ってあげた
{0x031, new LifeSupportAchievement(-1, -1, 0049, "AttendCountdownParty" )}, // カウントダウンに参加した
{0x032, new LifeSupportAchievement(-1, -1, 0050, "BreakTool" )}, // 道具を壊した
{0x033, new LifeSupportAchievement(-1, -1, 0051, "SendLetter" )}, // 手紙を送った
{0x034, new LifeSupportAchievement(-1, -1, 0052, "MakePitfall" )}, // 落とし穴を作った
{0x035, new LifeSupportAchievement(-1, -1, 0053, "FallintoPitfall" )}, // 落とし穴に落ちた
{0x036, new LifeSupportAchievement(-1, -1, 0054, "ImmigratetoIsland" )}, // 島に移住した
{0x037, new LifeSupportAchievement(-1, -1, 0055, "BeFriendwithVillager" )}, // どうぶつとなかよしになった
{0x038, new LifeSupportAchievement(-1, -1, 0056, "FillRecipeList" )}, // 集めたレシピの数
{0x039, new LifeSupportAchievement(-1, -1, 0057, "BootPhone" )}, // スマホを起動した(上級)
{0x03A, new LifeSupportAchievement(-1, -1, 0058, "StrikeRock8Times" )}, // コイン岩を8連打した
{0x03B, new LifeSupportAchievement(-1, 320, 0059, "AchieveAppQuest" )}, // 村活クエストを達成した
{0x03C, new LifeSupportAchievement(-1, -1, 0060, "AchieveVillagersQuest" )}, // どうぶつのお願いを聞いた
{0x03D, new LifeSupportAchievement(-1, -1, 0061, "DigBell" )}, // ベルを掘り出した
{0x03E, new LifeSupportAchievement(-1, -1, 0062, "DigFossil" )}, // 化石を掘り出した
{0x03F, new LifeSupportAchievement(-1, -1, 0063, "JudgeFossil" )}, // 化石を鑑定した
{0x040, new LifeSupportAchievement(66, -1, 0064, "DigShell" )}, // 潮干狩りをした
{0x041, new LifeSupportAchievement( 3, -1, 0065, "PutFurnitureOutside" )}, // 外に家具を置いた
{0x044, new LifeSupportAchievement(-1, -1, 0068, "StrikeWood" )}, // 木からもくざいを出した
{0x045, new LifeSupportAchievement( 3, -1, 0069, "GreetAllVillager" )}, // 村民全員とあいさつをした
{0x046, new LifeSupportAchievement( 3, -1, 0070, "SellShell" )}, // 貝殻を売った
{0x047, new LifeSupportAchievement( 3, -1, 0071, "SellFruit" )}, // フルーツを売った
{0x048, new LifeSupportAchievement(-1, -1, 0072, "CatchBeeContinuously" )}, // ハチを5連続捕まえた
{0x049, new LifeSupportAchievement(-1, -1, 0073, "DIYTool" )}, // 道具をDIYした
{0x04A, new LifeSupportAchievement(-1, -1, 0074, "DIYFurniture" )}, // 家具をDIYした
{0x04C, new LifeSupportAchievement( 3, -1, 0076, "TakePicture" )}, // カメラで写真を撮った
{0x04D, new LifeSupportAchievement(-1, -1, 0077, "BootPhoneBeginner" )}, // スマホを起動した(初級)
{0x04E, new LifeSupportAchievement(-1, -1, 0078, "HouseStorageItem" )}, // 家の倉庫に収納したアイテムの数
{0x04F, new LifeSupportAchievement(-1, -1, 0079, "PlaceFurnitureMyHouse" )}, // 家に飾っている家具の数
{0x050, new LifeSupportAchievement(-1, -1, 0080, "FallFurnitureLeaf" )}, // 木を揺すって家具(葉っぱ)を落とした回数
{0x051, new LifeSupportAchievement(-1, -1, 0081, "DropPresentinWater" )}, // 風船のプレゼントを撃ち水の中に落とした
{0x052, new LifeSupportAchievement(-1, -1, 0082, "ReformMyHome" )}, // マイホームをリフォームした
{0x053, new LifeSupportAchievement(-1, -1, 0083, "ExtendMyHome" )}, // マイホームを増築した
{0x054, new LifeSupportAchievement( 3, -1, 0084, "PostMessageBoard" )}, // 自分の島の掲示板に書き込む
{0x055, new LifeSupportAchievement(-1, -1, 0085, "UseCloset" )}, // クローゼットで着替える
{0x056, new LifeSupportAchievement(-1, -1, 0086, "PrayShootingStar" )}, // 流れ星に祈る
{0x057, new LifeSupportAchievement(59, -1, 0087, "ChangeSymbol" )}, // 島の旗、島メロを変える
{0x058, new LifeSupportAchievement( 3, -1, 0088, "UpdatePassport" )}, // パスポートを更新した
{0x059, new LifeSupportAchievement(-1, 513, 0089, "ModifyIsland" )}, // 各地形造成をやってみた
{0x05A, new LifeSupportAchievement(-1, 478, 0090, "BuildFence" )}, // 柵を置く
{0x05B, new LifeSupportAchievement(-1, -1, 0091, "DonateFake" )}, // 寄贈しようとした美術品が贋作だった
{0x05C, new LifeSupportAchievement(-1, -1, 0092, "BuyatTsunekichiShop" )}, // いなりマーケットで芸術品を買った
{0x05D, new LifeSupportAchievement(-1, -1, 0093, "PlantBushSeedling" )}, // 各種低木の苗を植えた
{0x000, new LifeSupportAchievement( 3, -1, 0000, "CatchFish" )}, // サカナを釣った
{0x001, new LifeSupportAchievement( 3, -1, 0001, "CatchInsect" )}, // ムシを捕まえた
{0x002, new LifeSupportAchievement(-1, -1, 0002, "CatchFishContinuously" )}, // 連続で釣りを成功させた回数の最高記録
{0x003, new LifeSupportAchievement(-1, -1, 0003, "FillFishList" )}, // サカナ図鑑を埋めた
{0x004, new LifeSupportAchievement(-1, -1, 0004, "FillInsectList" )}, // ムシ図鑑を埋めた
{0x005, new LifeSupportAchievement(-1, -1, 0005, "ShootDownBalloon" )}, // ふうせんを撃ち落とした
{0x006, new LifeSupportAchievement( 3, -1, 0006, "PlantFlowerSeed" )}, // 花の種を植えた
{0x007, new LifeSupportAchievement(-1, -1, 0007, "PlantFruit" )}, // 6種類のフルーツを植えた
{0x008, new LifeSupportAchievement(-1, -1, 0008, "PlantTreeSeedling" )}, // 木の苗を植えた
{0x009, new LifeSupportAchievement(-1, -1, 0009, "BuyKabu" )}, // カブを買った
{0x00A, new LifeSupportAchievement(-1, -1, 0010, "HowmuchSellKabu" )}, // カブで得た累計利益
{0x00B, new LifeSupportAchievement(-1, -1, 0011, "HowmuchBuyItem" )}, // これまでの買い物総額
{0x00C, new LifeSupportAchievement(-1, -1, 0012, "BuyItemRcm" )}, // まめきちの店で買い物した
{0x00D, new LifeSupportAchievement(-1, -1, 0013, "SellItemRcm" )}, // まめきちの店で売った
{0x00E, new LifeSupportAchievement(-1, -1, 0014, "RemakeFurniture" )}, // リメイクをした
{0x00F, new LifeSupportAchievement(-1, -1, 0015, "FillCatalog" )}, // カタログの項目数
{0x010, new LifeSupportAchievement(-1, -1, 0016, "BuyItemCatalog" )}, // 通販を利用した
{0x011, new LifeSupportAchievement(-1, -1, 0017, "GotoTotakekeShow" )}, // とたけけのライブを観た
{0x012, new LifeSupportAchievement(-1, -1, 0018, "VisitAnotherIsland" )}, // よその島へのおでかけした
{0x013, new LifeSupportAchievement(-1, -1, 0019, "InviteFriend" )}, // 島にフレンドを招いた
{0x015, new LifeSupportAchievement(-1, -1, 0021, "DayPlayed" )}, // 活動日数
{0x017, new LifeSupportAchievement(-1, -1, 0023, "WaterPlant" )}, // 水やりをした
{0x018, new LifeSupportAchievement(-1, -1, 0024, "BeStungbyWasp" )}, // ハチに刺された
{0x019, new LifeSupportAchievement(-1, -1, 0025, "CatchSeminonukegara" )}, // セミのぬけがらを取った
{0x01A, new LifeSupportAchievement(-1, -1, 0026, "CatchNomi" )}, // ノミを取ってあげた
{0x01B, new LifeSupportAchievement(-1, -1, 0027, "BeStungbyPoisonousInsect" )}, // こわいムシで気絶した
{0x01F, new LifeSupportAchievement(-1, -1, 0031, "FillReactionList" )}, // リアクションを覚えた
{0x020, new LifeSupportAchievement(-1, -1, 0032, "CatchTrash" )}, // ゴミを釣った
{0x021, new LifeSupportAchievement(-1, -1, 0033, "PayImmigrationCost" )}, // 移住費用を支払った
{0x022, new LifeSupportAchievement(-1, -1, 0034, "RepayLoan" )}, // ローンを完済した
{0x023, new LifeSupportAchievement( 3, -1, 0035, "UseMydesign" )}, // マイデザインを使った
{0x024, new LifeSupportAchievement(-1, -1, 0036, "UseMydesignPRO" )}, // マイデザインPROを使った
{0x025, new LifeSupportAchievement(-1, -1, 0037, "SellWeed" )}, // 雑草を引き取ってもらった
{0x027, new LifeSupportAchievement(-1, -1, 0039, "CollectGoldTool" )}, // 6種類の金の道具を集めた
{0x028, new LifeSupportAchievement(-1, -1, 0040, "GetSRankonHHA" )}, // HHAでSを取った
{0x029, new LifeSupportAchievement(-1, -1, 0041, "AttendFishingConvention" )}, // 釣り大会に春夏秋冬参加した
{0x02A, new LifeSupportAchievement(-1, -1, 0042, "AttendInsectConvention" )}, // ムシとり大会に69月参加した
{0x02B, new LifeSupportAchievement(-1, -1, 0043, "HelpGul" )}, // ジョニーを助けた
{0x02C, new LifeSupportAchievement(-1, -1, 0044, "HelpGst" )}, // ゆうたろうを助けた
{0x02D, new LifeSupportAchievement(-1, -1, 0045, "MakePerfectSnowball" )}, // 最高のゆきだるまを作った
{0x02E, new LifeSupportAchievement(-1, -1, 0046, "ReachMyBirthday" )}, // 誕生日を迎えた
{0x02F, new LifeSupportAchievement(-1, -1, 0047, "CelebrateVillagersBithday" )}, // 村民の誕生日を祝ってあげた
{0x030, new LifeSupportAchievement(-1, -1, 0048, "AttendCountdownParty" )}, // カウントダウンに参加した
{0x031, new LifeSupportAchievement(-1, -1, 0049, "BreakTool" )}, // 道具を壊した
{0x032, new LifeSupportAchievement(-1, -1, 0050, "SendLetter" )}, // 手紙を送った
{0x033, new LifeSupportAchievement(-1, -1, 0051, "MakePitfall" )}, // 落とし穴を作った
{0x034, new LifeSupportAchievement(-1, -1, 0052, "FallintoPitfall" )}, // 落とし穴に落ちた
{0x035, new LifeSupportAchievement(-1, -1, 0053, "ImmigratetoIsland" )}, // 島に移住した
{0x036, new LifeSupportAchievement(-1, -1, 0054, "BeFriendwithVillager" )}, // どうぶつとなかよしになった
{0x037, new LifeSupportAchievement(-1, -1, 0055, "FillRecipeList" )}, // 集めたレシピの数
{0x038, new LifeSupportAchievement(-1, -1, 0056, "BootPhone" )}, // スマホを起動した(上級)
{0x039, new LifeSupportAchievement(-1, -1, 0057, "StrikeRock8Times" )}, // コイン岩を8連打した
{0x03A, new LifeSupportAchievement(-1, 320, 0058, "AchieveAppQuest" )}, // 村活クエストを達成した
{0x03B, new LifeSupportAchievement(-1, -1, 0059, "AchieveVillagersQuest" )}, // どうぶつのお願いを聞いた
{0x03C, new LifeSupportAchievement(-1, -1, 0060, "DigBell" )}, // ベルを掘り出した
{0x03D, new LifeSupportAchievement(-1, -1, 0061, "DigFossil" )}, // 化石を掘り出した
{0x03E, new LifeSupportAchievement(-1, -1, 0062, "JudgeFossil" )}, // 化石を鑑定した
{0x03F, new LifeSupportAchievement(66, -1, 0063, "DigShell" )}, // 潮干狩りをした
{0x040, new LifeSupportAchievement( 3, -1, 0064, "PutFurnitureOutside" )}, // 外に家具を置いた
{0x043, new LifeSupportAchievement(-1, -1, 0067, "StrikeWood" )}, // 木からもくざいを出した
{0x044, new LifeSupportAchievement( 3, -1, 0068, "GreetAllVillager" )}, // 村民全員とあいさつをした
{0x045, new LifeSupportAchievement( 3, -1, 0069, "SellShell" )}, // 貝殻を売った
{0x046, new LifeSupportAchievement( 3, -1, 0070, "SellFruit" )}, // フルーツを売った
{0x047, new LifeSupportAchievement(-1, -1, 0071, "CatchBeeContinuously" )}, // ハチを5連続捕まえた
{0x048, new LifeSupportAchievement(-1, -1, 0072, "DIYTool" )}, // 道具をDIYした
{0x049, new LifeSupportAchievement(-1, -1, 0073, "DIYFurniture" )}, // 家具をDIYした
{0x04B, new LifeSupportAchievement( 3, -1, 0075, "TakePicture" )}, // カメラで写真を撮った
{0x04C, new LifeSupportAchievement(-1, -1, 0076, "BootPhoneBeginner" )}, // スマホを起動した(初級)
{0x04D, new LifeSupportAchievement(-1, -1, 0077, "HouseStorageItem" )}, // 家の倉庫に収納したアイテムの数
{0x04E, new LifeSupportAchievement(-1, -1, 0078, "PlaceFurnitureMyHouse" )}, // 家に飾っている家具の数
{0x04F, new LifeSupportAchievement(-1, -1, 0079, "FallFurnitureLeaf" )}, // 木を揺すって家具(葉っぱ)を落とした回数
{0x050, new LifeSupportAchievement(-1, -1, 0080, "DropPresentinWater" )}, // 風船のプレゼントを撃ち水の中に落とした
{0x051, new LifeSupportAchievement(-1, -1, 0081, "ReformMyHome" )}, // マイホームをリフォームした
{0x052, new LifeSupportAchievement(-1, -1, 0082, "ExtendMyHome" )}, // マイホームを増築した
{0x053, new LifeSupportAchievement( 3, -1, 0083, "PostMessageBoard" )}, // 自分の島の掲示板に書き込む
{0x054, new LifeSupportAchievement(-1, -1, 0084, "UseCloset" )}, // クローゼットで着替える
{0x055, new LifeSupportAchievement(-1, -1, 0085, "PrayShootingStar" )}, // 流れ星に祈る
{0x056, new LifeSupportAchievement(59, -1, 0086, "ChangeSymbol" )}, // 島の旗、島メロを変える
{0x057, new LifeSupportAchievement( 3, -1, 0087, "UpdatePassport" )}, // パスポートを更新した
{0x058, new LifeSupportAchievement(-1, 513, 0088, "ModifyIsland" )}, // 各地形造成をやってみた
{0x059, new LifeSupportAchievement(-1, 478, 0089, "BuildFence" )}, // 柵を置く
{0x05A, new LifeSupportAchievement(-1, -1, 0090, "DonateFake" )}, // 寄贈しようとした美術品が贋作だった
{0x05B, new LifeSupportAchievement(-1, -1, 0091, "BuyatTsunekichiShop" )}, // いなりマーケットで芸術品を買った
{0x05C, new LifeSupportAchievement(-1, -1, 0092, "PlantBushSeedling" )}, // 各種低木の苗を植えた
};
public static string GetName(int index, uint count, IReadOnlyDictionary<string, string> str)

View File

@@ -268,8 +268,6 @@ public static List<string> GetLifeSupportAchievementList(string pathBCSV, string
var iid = bcsv.ReadValue(i, findex);
var ival = ushort.Parse(iid);
ival++; // offset by 1; index 0 is used for something else
var iv1 = bcsv.ReadValue(i, fv1).Substring(2);
var iv1a = int.Parse(iv1, NumberStyles.HexNumber);

View File

@@ -51,6 +51,7 @@ private void InitializeComponent()
this.B_EditBuildings = new System.Windows.Forms.ToolStripMenuItem();
this.B_EditAcres = new System.Windows.Forms.ToolStripMenuItem();
this.B_EditFieldItems = new System.Windows.Forms.ToolStripMenuItem();
this.B_EditBulletin = new System.Windows.Forms.ToolStripMenuItem();
this.B_EditPRODesigns = new System.Windows.Forms.Button();
this.B_EditPatterns = new System.Windows.Forms.Button();
this.B_EditLandFlags = new System.Windows.Forms.Button();
@@ -58,6 +59,8 @@ private void InitializeComponent()
this.B_RecycleBin = new System.Windows.Forms.Button();
this.Tab_Villagers = new System.Windows.Forms.TabPage();
this.Tab_Players = new System.Windows.Forms.TabPage();
this.L_StorageCount = new System.Windows.Forms.Label();
this.NUD_StorageCount = new System.Windows.Forms.NumericUpDown();
this.L_PocketCount2 = new System.Windows.Forms.Label();
this.L_PocketCount1 = new System.Windows.Forms.Label();
this.NUD_PocketCount2 = new System.Windows.Forms.NumericUpDown();
@@ -68,7 +71,6 @@ private void InitializeComponent()
this.B_EditPlayerReceivedItems = new System.Windows.Forms.ToolStripMenuItem();
this.B_EditAchievements = new System.Windows.Forms.ToolStripMenuItem();
this.B_EditPlayerRecipes = new System.Windows.Forms.ToolStripMenuItem();
this.B_EditPlayerFlags = new System.Windows.Forms.Button();
this.B_EditPlayerItems = new System.Windows.Forms.Button();
this.L_Wallet = new System.Windows.Forms.Label();
this.NUD_Wallet = new System.Windows.Forms.NumericUpDown();
@@ -83,14 +85,15 @@ private void InitializeComponent()
this.CB_Players = new System.Windows.Forms.ComboBox();
this.PB_Player = new System.Windows.Forms.PictureBox();
this.TC_Editors = new System.Windows.Forms.TabControl();
this.B_EditBulletin = new System.Windows.Forms.ToolStripMenuItem();
this.L_StorageCount = new System.Windows.Forms.Label();
this.NUD_StorageCount = new System.Windows.Forms.NumericUpDown();
this.B_EditPlayerFlags = new System.Windows.Forms.ToolStripMenuItem();
this.L_EarnedMiles = new System.Windows.Forms.Label();
this.NUD_TotalNookMiles = new System.Windows.Forms.NumericUpDown();
this.Menu_Editor.SuspendLayout();
this.CM_Picture.SuspendLayout();
this.Tab_Map.SuspendLayout();
this.CM_EditMap.SuspendLayout();
this.Tab_Players.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUD_StorageCount)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_PocketCount2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_PocketCount1)).BeginInit();
this.CM_EditPlayer.SuspendLayout();
@@ -99,7 +102,7 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.NUD_BankBells)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PB_Player)).BeginInit();
this.TC_Editors.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUD_StorageCount)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_TotalNookMiles)).BeginInit();
this.SuspendLayout();
//
// Menu_Editor
@@ -300,6 +303,13 @@ private void InitializeComponent()
this.B_EditFieldItems.Text = "Edit Field Items";
this.B_EditFieldItems.Click += new System.EventHandler(this.B_EditFieldItems_Click);
//
// B_EditBulletin
//
this.B_EditBulletin.Name = "B_EditBulletin";
this.B_EditBulletin.Size = new System.Drawing.Size(171, 22);
this.B_EditBulletin.Text = "Edit Bulletin Board";
this.B_EditBulletin.Click += new System.EventHandler(this.B_EditBulletin_Click);
//
// B_EditPRODesigns
//
this.B_EditPRODesigns.Location = new System.Drawing.Point(104, 52);
@@ -362,6 +372,8 @@ private void InitializeComponent()
//
// Tab_Players
//
this.Tab_Players.Controls.Add(this.L_EarnedMiles);
this.Tab_Players.Controls.Add(this.NUD_TotalNookMiles);
this.Tab_Players.Controls.Add(this.L_StorageCount);
this.Tab_Players.Controls.Add(this.NUD_StorageCount);
this.Tab_Players.Controls.Add(this.L_PocketCount2);
@@ -369,7 +381,6 @@ private void InitializeComponent()
this.Tab_Players.Controls.Add(this.NUD_PocketCount2);
this.Tab_Players.Controls.Add(this.NUD_PocketCount1);
this.Tab_Players.Controls.Add(this.B_EditPlayer);
this.Tab_Players.Controls.Add(this.B_EditPlayerFlags);
this.Tab_Players.Controls.Add(this.B_EditPlayerItems);
this.Tab_Players.Controls.Add(this.L_Wallet);
this.Tab_Players.Controls.Add(this.NUD_Wallet);
@@ -391,6 +402,33 @@ private void InitializeComponent()
this.Tab_Players.Text = "Players";
this.Tab_Players.UseVisualStyleBackColor = true;
//
// L_StorageCount
//
this.L_StorageCount.AutoSize = true;
this.L_StorageCount.Location = new System.Drawing.Point(200, 145);
this.L_StorageCount.Name = "L_StorageCount";
this.L_StorageCount.Size = new System.Drawing.Size(75, 13);
this.L_StorageCount.TabIndex = 24;
this.L_StorageCount.Text = "Storage Count";
this.L_StorageCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// NUD_StorageCount
//
this.NUD_StorageCount.Location = new System.Drawing.Point(151, 142);
this.NUD_StorageCount.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUD_StorageCount.Name = "NUD_StorageCount";
this.NUD_StorageCount.Size = new System.Drawing.Size(46, 20);
this.NUD_StorageCount.TabIndex = 23;
this.NUD_StorageCount.Value = new decimal(new int[] {
5000,
0,
0,
0});
//
// L_PocketCount2
//
this.L_PocketCount2.AutoSize = true;
@@ -462,9 +500,10 @@ private void InitializeComponent()
this.B_EditPlayerStorage,
this.B_EditPlayerReceivedItems,
this.B_EditAchievements,
this.B_EditPlayerRecipes});
this.B_EditPlayerRecipes,
this.B_EditPlayerFlags});
this.CM_EditPlayer.Name = "CM_EditPlayer";
this.CM_EditPlayer.Size = new System.Drawing.Size(177, 92);
this.CM_EditPlayer.Size = new System.Drawing.Size(177, 114);
//
// B_EditPlayerStorage
//
@@ -494,16 +533,6 @@ private void InitializeComponent()
this.B_EditPlayerRecipes.Text = "Edit Recipes";
this.B_EditPlayerRecipes.Click += new System.EventHandler(this.B_EditPlayerRecipes_Click);
//
// B_EditPlayerFlags
//
this.B_EditPlayerFlags.Location = new System.Drawing.Point(300, 122);
this.B_EditPlayerFlags.Name = "B_EditPlayerFlags";
this.B_EditPlayerFlags.Size = new System.Drawing.Size(92, 40);
this.B_EditPlayerFlags.TabIndex = 17;
this.B_EditPlayerFlags.Text = "Edit Flags";
this.B_EditPlayerFlags.UseVisualStyleBackColor = true;
this.B_EditPlayerFlags.Click += new System.EventHandler(this.B_EditPlayerFlags_Click);
//
// B_EditPlayerItems
//
this.B_EditPlayerItems.Location = new System.Drawing.Point(6, 168);
@@ -642,39 +671,33 @@ private void InitializeComponent()
this.TC_Editors.Size = new System.Drawing.Size(404, 237);
this.TC_Editors.TabIndex = 1;
//
// B_EditBulletin
// B_EditPlayerFlags
//
this.B_EditBulletin.Name = "B_EditBulletin";
this.B_EditBulletin.Size = new System.Drawing.Size(171, 22);
this.B_EditBulletin.Text = "Edit Bulletin Board";
this.B_EditBulletin.Click += new System.EventHandler(this.B_EditBulletin_Click);
this.B_EditPlayerFlags.Name = "B_EditPlayerFlags";
this.B_EditPlayerFlags.Size = new System.Drawing.Size(176, 22);
this.B_EditPlayerFlags.Text = "Edit Flags";
this.B_EditPlayerFlags.Click += new System.EventHandler(this.B_EditPlayerFlags_Click);
//
// L_StorageCount
// L_EarnedMiles
//
this.L_StorageCount.AutoSize = true;
this.L_StorageCount.Location = new System.Drawing.Point(200, 145);
this.L_StorageCount.Name = "L_StorageCount";
this.L_StorageCount.Size = new System.Drawing.Size(75, 13);
this.L_StorageCount.TabIndex = 24;
this.L_StorageCount.Text = "Storage Count";
this.L_StorageCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.L_EarnedMiles.Location = new System.Drawing.Point(142, 117);
this.L_EarnedMiles.Name = "L_EarnedMiles";
this.L_EarnedMiles.Size = new System.Drawing.Size(84, 20);
this.L_EarnedMiles.TabIndex = 26;
this.L_EarnedMiles.Text = "Earned Miles:";
this.L_EarnedMiles.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// NUD_StorageCount
// NUD_TotalNookMiles
//
this.NUD_StorageCount.Location = new System.Drawing.Point(151, 142);
this.NUD_StorageCount.Maximum = new decimal(new int[] {
this.NUD_TotalNookMiles.Location = new System.Drawing.Point(232, 117);
this.NUD_TotalNookMiles.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUD_StorageCount.Name = "NUD_StorageCount";
this.NUD_StorageCount.Size = new System.Drawing.Size(46, 20);
this.NUD_StorageCount.TabIndex = 23;
this.NUD_StorageCount.Value = new decimal(new int[] {
5000,
0,
0,
0});
this.NUD_TotalNookMiles.Name = "NUD_TotalNookMiles";
this.NUD_TotalNookMiles.Size = new System.Drawing.Size(100, 20);
this.NUD_TotalNookMiles.TabIndex = 25;
//
// Editor
//
@@ -696,6 +719,7 @@ private void InitializeComponent()
this.CM_EditMap.ResumeLayout(false);
this.Tab_Players.ResumeLayout(false);
this.Tab_Players.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.NUD_StorageCount)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_PocketCount2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_PocketCount1)).EndInit();
this.CM_EditPlayer.ResumeLayout(false);
@@ -704,7 +728,7 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.NUD_BankBells)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PB_Player)).EndInit();
this.TC_Editors.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.NUD_StorageCount)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_TotalNookMiles)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@@ -731,7 +755,6 @@ private void InitializeComponent()
private System.Windows.Forms.Button B_RecycleBin;
private System.Windows.Forms.TabPage Tab_Villagers;
private System.Windows.Forms.TabPage Tab_Players;
private System.Windows.Forms.Button B_EditPlayerFlags;
private System.Windows.Forms.Button B_EditPlayerItems;
private System.Windows.Forms.Label L_Wallet;
private System.Windows.Forms.NumericUpDown NUD_Wallet;
@@ -768,6 +791,9 @@ private void InitializeComponent()
private System.Windows.Forms.ToolStripMenuItem B_EditBulletin;
private System.Windows.Forms.Label L_StorageCount;
private System.Windows.Forms.NumericUpDown NUD_StorageCount;
private System.Windows.Forms.ToolStripMenuItem B_EditPlayerFlags;
private System.Windows.Forms.Label L_EarnedMiles;
private System.Windows.Forms.NumericUpDown NUD_TotalNookMiles;
}
}

View File

@@ -244,6 +244,7 @@ private void LoadPlayer(int index)
TB_TownName.Text = pers.TownName;
NUD_BankBells.Value = Math.Min(int.MaxValue, pers.Bank.Value);
NUD_NookMiles.Value = Math.Min(int.MaxValue, pers.NookMiles.Value);
NUD_TotalNookMiles.Value = Math.Min(int.MaxValue, pers.TotalNookMiles.Value);
NUD_Wallet.Value = Math.Min(int.MaxValue, pers.Wallet.Value);
// swapped on purpose -- first count is the first two rows of items
@@ -297,6 +298,10 @@ private void SavePlayer(int index)
nook.Value = (uint)NUD_NookMiles.Value;
pers.NookMiles = nook;
var tnook = pers.TotalNookMiles;
tnook.Value = (uint)NUD_TotalNookMiles.Value;
pers.TotalNookMiles = tnook;
var wallet = pers.Wallet;
wallet.Value = (uint)NUD_Wallet.Value;
pers.Wallet = wallet;
@@ -311,10 +316,10 @@ private void SavePlayer(int index)
private void B_EditAchievements_Click(object sender, EventArgs e)
{
var pers = SAV.Players[PlayerIndex].Personal;
var records = pers.GetActivities();
var records = pers.GetCountAchievement();
using var editor = new AchievementEditor(records);
if (editor.ShowDialog() == DialogResult.OK)
pers.SetActivities(records);
pers.SetCountAchievement(records);
}
private void B_EditPlayerFlags_Click(object sender, EventArgs e)

View File

@@ -30,7 +30,7 @@ private void FillCheckBoxes()
{
var items = GameInfo.Strings.itemlistdisplay;
var ofs = Player.Personal.Offsets.ReceivedItems;
var ofs = Player.Personal.Offsets.ItemCollectBit;
var data = Player.Personal.Data;
for (int i = 0; i < items.Length; i++)
{
@@ -79,7 +79,7 @@ private void GiveEverything(IReadOnlyList<string> items, bool value = true)
private void B_Save_Click(object sender, EventArgs e)
{
var ofs = Player.Personal.Offsets.ReceivedItems;
var ofs = Player.Personal.Offsets.ItemCollectBit;
var data = Player.Personal.Data;
for (int i = 0; i < CLB_Items.Items.Count; i++)
FlagUtil.SetFlag(data, ofs, i, CLB_Items.GetItemChecked(i));