Compare commits

...

3 commits

Author SHA1 Message Date
erik
cac8e96656 chore: include Release DLL with appraisal and settings fixes
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-02 21:06:09 +00:00
erik
7610ad9029 fix: ignore unmatched YAML properties in PluginSettings
Prevents deserialization crash when config file contains keys from newer plugin versions.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-02 21:06:03 +00:00
erik
ac691d3140 feat: add item appraisal requests to LiveInventoryTracker
RequestId() is called for armor, weapons, jewelry, and other items that need full ID data when picked up via OnCreateObject or OnChangeObject. Adds ObjectClassNeedsIdent helper matching MossyInventory's logic.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-02 21:05:46 +00:00
3 changed files with 26 additions and 1 deletions

View file

@ -51,6 +51,12 @@ namespace MosswartMassacre
_trackedItemIds.Add(item.Id);
var mwo = MyWorldObjectCreator.Create(item);
_ = WebSocket.SendInventoryDeltaAsync("add", mwo);
// Request appraisal if item needs full ID data (spells, combat stats, etc.)
if (!item.HasIdData && ObjectClassNeedsIdent(item.ObjectClass, item.Name))
{
CoreManager.Current.Actions.RequestId(item.Id);
}
}
catch (Exception ex)
{
@ -96,6 +102,12 @@ namespace MosswartMassacre
_trackedItemIds.Add(item.Id);
var mwo = MyWorldObjectCreator.Create(item);
_ = WebSocket.SendInventoryDeltaAsync("add", mwo);
// Request appraisal if item needs full ID data
if (!item.HasIdData && ObjectClassNeedsIdent(item.ObjectClass, item.Name))
{
CoreManager.Current.Actions.RequestId(item.Id);
}
}
else
{
@ -115,6 +127,18 @@ namespace MosswartMassacre
_trackedItemIds.Clear();
}
private static bool ObjectClassNeedsIdent(ObjectClass oc, string name)
{
return oc == ObjectClass.Armor
|| oc == ObjectClass.Clothing
|| oc == ObjectClass.MeleeWeapon
|| oc == ObjectClass.MissileWeapon
|| oc == ObjectClass.WandStaffOrb
|| oc == ObjectClass.Jewelry
|| (oc == ObjectClass.Gem && !string.IsNullOrEmpty(name) && name.Contains("Aetheria"))
|| (oc == ObjectClass.Misc && !string.IsNullOrEmpty(name) && name.Contains("Essence"));
}
private static bool IsPlayerInventory(WorldObject item)
{
try

View file

@ -65,7 +65,8 @@ namespace MosswartMassacre
// build serializer/deserializer once
var builder = new DeserializerBuilder()
.WithNamingConvention(UnderscoredNamingConvention.Instance);
.WithNamingConvention(UnderscoredNamingConvention.Instance)
.IgnoreUnmatchedProperties();
var deserializer = builder.Build();
PluginSettings loaded = null;