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

Распределение транспорта через KRCoreOS

Добавьте транспорт в зоны PZ с помощью групп KRCoreOS, весов, пользовательских зон и общей таблицы VehicleZoneDistribution.

Пример регистрирует пользовательский транспорт в VehicleZoneDistribution через группу зон. Примеры групп ориентированы на B42; для B41 используйте поддерживаемые сырые имена зон.

Один вызов

Distribution-файл размещается в media/lua/server/; серверная папка обязательна.

-- YourMod_Distribution.lua (.../media/lua/server/ — server folder is mandatory) if not KRCore then print("[YourMod] ERROR: KRCore not available. Vehicle NOT registered.") return end KRCore.dist.addVehicle("Base.MySupplyVan", { RESIDENTIAL = 1, -- house driveways + parking (parkingstall/good/medium/bad) TRAFFIC = 1, -- highway pile-ups, all 4 directions })

Библиотека ставит запись в очередь и записывает её в OnInitWorld, когда карта зон готова. Не нужно напрямую менять VehicleZoneDistribution или прописывать каждое направление дорожной пробки.

Вес spawnChance

Значение — вес внутри зоны, а не процент. У стандартных машин вес около 2–30, общая сумма зоны — примерно 100. Вес 1 означает очень редкую, но возможную машину; 5 — примерно обычный фургон; 20 и выше — доминирующий тип.

KRCore.dist.addVehicle("Base.MyRareProto", { RESIDENTIAL = 1 }) -- needle in a haystack KRCore.dist.addVehicle("Base.MyCommonVan", { COMMERCIAL = 6 }) -- shows up like a work van

Имена групп, комбинаций и зон

Ключ сначала разрешается как группа KRCore.VZONE (RESIDENTIAL, POOR, RICH, TRAFFIC, JUNKYARD, COMMERCIAL, FARM, AIRPORT, POLICE, FIRE, AMBULANCE, RANGER, SERVICES и другие), затем как комбинация KRCore.VCOMBO (CIVILIAN, WRECKS, EMERGENCY, WORK, URBAN, ANYWHERE — рекурсивное объединение групп без дублей), затем как сырая зона PZ. Старые и точечные названия продолжают работать.

KRCore.dist.addVehicle("Base.MyCityCar", { URBAN = 1, -- combo: RESIDENTIAL + COMMERCIAL + TRAFFIC }) KRCore.dist.addVehicle("Base.MyPatrolCar", { EMERGENCY = 1, -- combo: POLICE + FIRE + AMBULANCE + RANGER }) KRCore.dist.addVehicle("Base.MyLegacyVan", { good = 1, trafficjams = 1, -- raw zone names, unchanged from older CoreOS })

Неизвестное имя вызывает WARN и пропускается; отсутствующая в текущей сборке зона пропускается молча.

Привязка к конкретной зоне через custom

custom задаёт сырую зону, вес и необязательный индекс оформления. Сначала применяется custom, затем группы; поэтому конкретная настройка выигрывает при совпадении зоны.

KRCore.dist.addVehicle("Base.MyWreck", { TRAFFIC = 1, custom = { { name = "junkyard", chance = 5, index = -1 }, -- extra-common in scrapyards }, })

chance по умолчанию равен 1, index — −1 (случайное оформление из списка машины).

Дедупликация

Некоторые зоны являются псевдонимами одной таблицы: четыре направления trafficjam* и business2…business12/business. Дедупликация выполняется по таблице конкретной машины. TRAFFIC добавляет машину один раз для всех направлений. Группа и сырой псевдоним не создают дубль; приоритет у первой записи (сначала custom, затем группа).

Полный пример

-- YourMod_Distribution.lua (.../media/lua/server/) local TAG = "[YourMod] " -- Per-vehicle rarity in one place -> retuning is a one-line change. local V = { VAN = { RESIDENTIAL = 1, TRAFFIC = 1 }, TRUCK = { WORK = 2, FARM = 3 }, } if not KRCore then print(TAG .. "ERROR: KRCore not loaded. Vehicles NOT registered.") return end KRCore.dist.addVehicle("Base.MySupplyVan", V.VAN) KRCore.dist.addVehicle("Base.MyFarmTruck", V.TRUCK) print(TAG .. "Vehicle registration queued.")

Порядок выполнения и разные сборки

  • При загрузке файла addVehicle только ставит регистрацию в очередь.
  • В OnInitWorld CoreOS разрешает названия и записывает их в VehicleZoneDistribution, когда таблица полностью инициализирована; это позже item-распределений, которые выполняются в OnPostDistributionMerge.
  • Таксономия групп рассчитана на зоны B42. На B41 используйте сырые имена зон или custom; отсутствующие зоны молча пропускаются.

README рекомендует указывать require=KRCoreOS в mod.info зависимого мода и размещать файлы распределения в серверной папке: для B42 — 42/media/lua/server/YourMod/distribution.lua, для B41 — media/lua/server/YourMod/distribution.lua. API запускается на стороне сервера и работает в одиночной и сетевой игре.

README описывает KRCore.dist.addVehicle(vehicleID, zones) как регистрацию машины в VehicleZoneDistribution. Один и тот же вызов поддерживается на B41 и B42. Пример транспорта указывает, что таксономия групп ориентирована на зоны B42; для B41 используйте сырые имена зон B41 или custom. Распределение машин обрабатывается позднее, в OnInitWorld.

Проверка из README: в Build 42 (42.20.0) и Build 41 заявлена поддержка. Работа в игре независимо не проверялась.