
SharedRecipeFinderReborn
On container open, shows which unknown materials and foods a shared chest contains. Successor of SharedRecipeFinder. Author: SoulEmper0rSharedRecipeFinderReborn
Замена легаси-мода SharedRecipeFinder (SoulEmper0r, 28.03.2024) под актуальную Valheim.
Что делает
При открытии сундука/контейнера показывает через MessageHud материалы и еду,
которых игрок ещё ни разу не получал (Player.IsKnownMaterial == false):
- на каждый неизвестный предмет — unlock-уведомление с иконкой и названием (
$msg_newitem); - одно итоговое сообщение
TopLeft, если неизвестные кандидаты нашлись; - при
Debug.Logging=true— строка в BepInEx-лог: имя контейнера и число неизвестных.
Работает на клиенте, ничего не разблокирует, серверу ничего не шлёт. Повторяющиеся стаки схлопываются в одно уведомление (иконка берётся у первого стака).
Почему замена, а не «починить DLL»
Старой DLL 6 КБ, исходников нет; декомпилят показал вызов старой сигнатуры
Character.Message(MessageType, string, int, Sprite) — в установленной игре она всё ещё
существует (проверено декомпиляцией Player), но бинарник собран против другого API-среза,
поэтому продолжать с него нельзя. Логика крошечная — переписана начисто.
Отличия от оригинала: работает на открытии контейнера (а не инвентаря), добавлены
названия предметов, дедупликация, конфиг General.Enabled и Debug.Logging,
BepInIncompatibility против старого GUID vnoisy.sharedrecipefinder.plugin.
Сборка
dotnet build E:\Storage\Personal\Pet-Projects\SharedRecipeFinderReborn\SharedRecipeFinderReborn.csproj -c Release
# DLL: bin\Release\SharedRecipeFinderReborn.dll
Тесты (вне игры; Harmony-тест вне игры помечается [skip] — десктопный рантайм не может
читать тела Unity-методов, то же ограничение у TerraHoe.WireTest):
dotnet build E:\Storage\Personal\Pet-Projects\SharedRecipeFinderReborn\tests\SharedRecipeFinderReborn.Tests\SharedRecipeFinderReborn.Tests.csproj -c Release
E:\Storage\Personal\Pet-Projects\SharedRecipeFinderReborn\tests\SharedRecipeFinderReborn.Tests\bin\Release\net462\SharedRecipeFinderReborn.Tests.exe
Установка
Скопировать DLL в профиль r2modman:
profiles\2.0\BepInEx\plugins\SoulEmper0r-SharedRecipeFinderReborn\
(или импортировать как локальный мод в r2modman).
Известные ограничения
- Внутриигровое поведение (появление уведомлений при открытии сундука) автоматическими тестами не проверяется — вне игры Unity-типы не загружаются. Проверять в игре.
- Дедупликация в пределах одного открытия сундука; между открытиями напоминание повторяется, пока предмет не получен — так задумано.
- Патчится
InventoryGui.Show(Container, int); если IronGate сменит сигнатуру, тестpatch target resolves on installed gameэто поймает.
Дисклеймер
На серверах с усиленным анти-читом/кастомными правилами использование клиентских модов — на свой страх и риск; мод только читает инвентарь контейнера и пишет в HUD.