// // ItemParser.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using NosSmooth.Data.Abstractions.Enums; using NosSmooth.Data.Abstractions.Infos; using NosSmooth.Data.Abstractions.Language; using NosSmooth.Data.NOSFiles.Parsers.Dat; using Remora.Results; namespace NosSmooth.Data.NOSFiles.Parsers; /// public class ItemParser : IInfoParser { /// public Result> Parse(NostaleFiles files) { var itemDatResult = files.DatFiles.FindFile("Item.dat"); if (!itemDatResult.IsSuccess) { return Result>.FromError(itemDatResult); } var reader = new DatReader(itemDatResult.Entity); var result = new Dictionary(); while (reader.ReadItem(out var itemNullable)) { var item = itemNullable.Value; var indexEntry = item.GetEntry("INDEX"); var vnum = item.GetEntry("VNUM").Read(1); var nameKey = item.GetEntry("NAME").Read(1); result.Add ( vnum, new ItemInfo ( vnum, new TranslatableString(TranslationRoot.Item, nameKey), indexEntry.Read(2), indexEntry.Read(3), (BagType)indexEntry.Read(1), item.GetEntry("DATA").GetValues() ) ); } return result; } private record ItemInfo ( int VNum, TranslatableString Name, int Type, int SubType, BagType BagType, string[] Data ) : IItemInfo; }