Распределение транспорта через KRCoreOS
Пример регистрирует пользовательский транспорт в 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 заявлена поддержка. Работа в игре независимо не проверялась.