//
// 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;
}