Перейти к содержанию

Как добавить предметы в добычу через KR CoreOS

Настройте зависимость, серверный файл, группы добычи и custom-переопределения KR CoreOS для Build 41 и Build 42.

KR CoreOS позволяет автору мода зарегистрировать предметы в группах контейнеров, не редактируя вручную каждую таблицу добычи. Ниже — последовательность из документации проекта для Build 41 и Build 42; выполнение кода и появление предметов в игре отдельно не проверялись.

Подключите библиотеку и создайте файл

  1. Добавьте в mod.info строку require=KRCoreOS. Зависимость задаёт порядок загрузки CoreOS перед вашим модом.
  2. Создайте серверный Lua-файл: для Build 42 — 42/media/lua/server/YourMod_Distribution.lua, для Build 41 — media/lua/server/YourMod_Distribution.lua. Имя файла можно выбрать, но каталог server обязателен.
  3. Проверьте полный тип каждого предмета, например Base.MilitaryGPS, и добавьте защиту от отсутствующего KRCore.

Зарегистрируйте предметы

Ниже пример из руководства. dist.add получает полный тип предмета и таблицу групп с весами; первая проверка завершает файл без ошибки, если KRCore не загружен.

-- YourMod_Distribution.lua local TAG = "[YourMod] " -- Guard: if CoreOS isn't installed, KRCore is nil. Abort cleanly instead of -- crashing on the first dist.add call. if not KRCore then print(TAG .. "ERROR: KRCore not loaded. Items NOT registered.") return end -- A military-grade GPS — electronics stores + military/survival spots. KRCore.dist.add("Base.MilitaryGPS", { TACTICAL = 0.20, -- combo: MILITARY + SURVIVAL ELECTRONIC = 0.15, }) -- A bag of chips — general stores + break rooms. KRCore.dist.add("Base.ChipsBag", { STORES = 0.40, BREAKROOM = 0.25, }) print(TAG .. "2 items registered with KRCore.")

TACTICAL разворачивается в объединение MILITARY и SURVIVAL без дублей, ELECTRONIC и другие ключи разрешаются библиотекой как группы или комбинации. Число — вес появления в контейнере. Автор приводит 0.20 как приблизительный ориентир около 20% для контейнера, а не гарантированную вероятность каждого предмета.

Переопределите отдельный контейнер

Для custom укажите внутреннее имя из ProceduralDistributions.list и prob. Для каждого предмета custom обрабатывается раньше групп; первая запись для конкретного контейнера побеждает. Так можно задать CrateBatteries отдельный вес, даже если он входит в выбранную группу. Неизвестное имя в custom вызывает WARN; отсутствующие имена внутри групп пропускаются без предупреждения.

Для настройки нескольких весов можно собрать уровни H, M и L в таблице P и менять их в одном месте. Пример ниже сохраняет DEV_MODE = false; тестовый режим принудительно выставляет 10.0 и его нельзя оставлять включённым в поставке.

-- YourMod_Distribution.lua (.../media/lua/server/) local TAG = "[YourMod] " -- ---- config ---- local DEV_MODE = false local DEV = 10.0 local P = { GPS = { H = 0.20, M = 0.10, L = 0.05 }, VAN = { RESIDENTIAL = 1, TRAFFIC = 1 }, } if DEV_MODE then P.GPS.H, P.GPS.M, P.GPS.L = DEV, DEV, DEV print(TAG .. "DEV_MODE ON") end -- ---- guard ---- if not KRCore then print(TAG .. "ERROR: KRCore not loaded. Nothing registered.") return end -- ---- items ---- KRCore.dist.add("Base.MilitaryGPS", { TACTICAL = P.GPS.H, -- MILITARY + SURVIVAL (combo) ELECTRONIC = P.GPS.M, SPECIAL = P.GPS.H, custom = { { name = "GunStoreCounter", prob = P.GPS.M }, { name = "PawnShopTools", prob = P.GPS.L }, }, }) -- ---- vehicles ---- KRCore.dist.addVehicle("Base.SupplyVan", P.VAN) -- RESIDENTIAL + TRAFFIC groups print(TAG .. "Registration queued.")

Когда появляются записи

dist.add ставит операцию в очередь. На OnPostDistributionMerge CoreOS разворачивает группы и рекурсивные комбинации, сначала применяет custom и дедуплицирует контейнеры для каждого предмета. В Build 42 событие происходит до ItemPickerJava.Parse. Автомобили обрабатываются отдельно и позже, на OnInitWorld.

Для B41 и B42 документация описывает одинаковый вызов dist.add и определения групп для соответствующей сборки. Подробные группы вида *_POWER рассчитаны на B42; для общего кода автор рекомендует крупные группы или комбинации ELECTRONIC, POWER, MEDICAL и FOOD. Отсутствующие в сборке контейнеры пропускаются.

Проверьте интеграцию

  1. Проверьте наличие зависимости, серверную папку и точное совпадение Base.Xyz с типом предмета в его скрипте.
  2. После запуска найдите в консоли строку [KRCore] Distribution complete: N entries added, M skipped. Ненулевой skipped может означать контейнеры, отсутствующие в текущей сборке.
  3. Проверяйте появление в новых контейнерах: уже сгенерированные контейнеры не получают предмет задним числом. В debug автор предлагает создать один из контейнеров и осмотреть добычу либо создать сам предмет для проверки его типа.
Информация
DEV_MODE и вызовы регистрации приведены как примеры автора. Не объявляйте распределение проверенным по одному наличию кода; этот гайд не запускал сервер или игру.