Add item display name -> item ID autodetect

This commit is contained in:
Kurt
2021-03-21 12:04:43 -07:00
parent 0798aa5a97
commit 6ce7f0b85f
3 changed files with 56 additions and 9 deletions

View File

@@ -71,5 +71,17 @@ public void Execute(IList<string> lines, IEnumerable<T> data)
Process(pk, set.Filters, set.Instructions);
}
}
protected abstract void Initialize(StringInstructionSet[] sets);
public void Process(StringInstructionSet[] sets, IReadOnlyList<T> items)
{
Initialize(sets);
foreach (var s in sets)
{
foreach (var i in items)
Process(i, s.Filters, s.Instructions);
}
}
}
}
}

View File

@@ -1,4 +1,7 @@
namespace NHSE.Core
using System.Collections.Generic;
using System.Linq;
namespace NHSE.Core
{
public class ItemProcessor : BatchProcessor<Item>
{
@@ -8,5 +11,42 @@ public ItemProcessor(BatchMutator<Item> mut) : base(mut)
protected override bool CanModify(Item item) => true;
protected override bool Finalize(Item item) => true;
/// <summary>
/// Initializes the <see cref="StringInstruction"/> list with a context-sensitive value. If the provided value is a string, it will attempt to convert that string to its corresponding index.
/// </summary>
/// <param name="il">Instructions to initialize.</param>
public void ScreenStrings(IEnumerable<StringInstruction> il)
{
foreach (var i in il.Where(i => !i.PropertyValue.All(char.IsDigit)))
{
string pv = i.PropertyValue;
if (pv.StartsWith("$") && pv.Contains(","))
i.SetRandRange(pv);
SetInstructionScreenedValue(i);
}
}
/// <summary>
/// Initializes the <see cref="StringInstruction"/> with a context-sensitive value. If the provided value is a string, it will attempt to convert that string to its corresponding index.
/// </summary>
/// <param name="i">Instruction to initialize.</param>
private static void SetInstructionScreenedValue(StringInstruction i)
{
switch (i.PropertyName)
{
case nameof(Item.ItemId) or nameof(Item.ExtensionItemId): i.SetScreenedValue(GameInfo.Strings.itemlistdisplay); return;
}
}
protected override void Initialize(StringInstructionSet[] sets)
{
foreach (var set in sets)
{
ScreenStrings(set.Filters);
ScreenStrings(set.Instructions);
}
}
}
}

View File

@@ -116,13 +116,8 @@ private void RunBatchEdit(StringInstructionSet[] sets)
{
if (finished)
return;
foreach (var s in sets)
{
foreach (var i in Items)
Processor.Process(i, s.Filters, s.Instructions);
}
// don't bother reporting progress...
Processor.Process(sets, Items);
finished = true;
};