🇷🇺
Zone Randomizer — это удобный инструмент для DCS-миссий, который автоматически изменяет оборонительные системы в зонах. С помощью этого скрипта вы можете добавить реиграбельности вашим миссиям, меняя состав противовоздушной обороны (ПВО), пехоты и других статических объектов без ручного редактирования каждого файла.
Программа анализирует файл init.lua вашей миссии, ищет в нём блоки описания зон, а затем производит следующие действия:
- Определение режима миссии: Скрипт проверяет, является ли миссия "Cold War" (
Config.isColdWar = true) или "Modern" (Config.isColdWar = false). От этого зависит, какие именно юниты будут использоваться для рандомизации. - Анализ зон: Программа просматривает каждую зону, определённую в
init.lua, и считывает её имя. - Определение класса юнита: На основе имени зоны (например,
palmyra-sam-red) скрипт определяет класс юнита (sam). Это правило имеет наивысший приоритет. Если в имени зоны нет явной метки класса, скрипт использует информацию о классе из внутреннего конфига. - Рандомизация: Программа выбирает случайный юнит из заранее определённого пула, который соответствует классу (
sam), стороне (red) и режиму миссии. - Замена: Исходный юнит заменяется на выбранный случайным образом.
- Настройка Offmap Supply: В конце работы скрипт также рандомизирует номера для
offmap-supplyдля обеих сторон, придерживаясь определённого алгоритма для обеспечения баланса.
- Подготовьте файл: Убедитесь, что ваш файл
init.luaнаходится в папке миссии. - Запустите скрипт: Запустите файл
randomizer.py(или скомпилированный исполняемый файл). - Выберите файл: В появившемся окне выберите файл
init.luaвашей миссии. - Ожидайте: Программа автоматически обработает файл и перезапишет его.
- Готово!: Появится сообщение, подтверждающее успешное завершение работы.
Чтобы скрипт работал правильно, критически важно использовать унифицированный формат именования зон в вашем файле init.lua.
Формат именования: [ИмяЗоны]-[КлассЮнита]-[Сторона]
[ИмяЗоны]– любое уникальное имя, например,airfield,city,palmyra.[КлассЮнита]– метка, по которой скрипт определяет класс юнита. Используйте одну из следующих:sam(зенитно-ракетные комплексы, например SA-2, SA-10, Patriot)airdef(системы ПВО малой и средней дальности, например SA-6, SA-9, Roland)shorad(комплексы ближнего действия)aaa(зенитная артиллерия)infantryилиgarrison(пехота)ewr(радиолокационная станция раннего предупреждения)
[Сторона]–redилиblue.
Примеры корректного именования:
presets.defenses.blue.patriot:extend({ name = 'palmyra-airdef-blue' }),(Скрипт увидит-airdef-и заменитpatriotнаrolandилиrapier).presets.defenses.red.sa10:extend({ name = 'airfield-airdef-red' }),(Скрипт увидит-airdef-и заменитsa10наsa6,sa9или другую доступную систему).presets.defenses.blue.hawk:extend({ name = 'coast-sam-blue' }),(Скрипт увидит-sam-и заменитhawkна другой доступный SAM-комплекс).
Программа имеет встроенный словарь DEFAULT_CONFIG, в котором определены классы, стороны и режимы Cold War для каждого юнита. Если вы хотите добавить новый юнит или изменить его классификацию, вам нужно отредактировать этот словарь.
Пример добавления нового юнита:
Если вы хотите добавить новый зенитный комплекс, найдите соответствующий класс в DEFAULT_CONFIG и добавьте его в список variants:
{
"prefix": "sa",
"side": "red",
"class": "sam",
"coldwar": "both",
"variants": {
"red": [
{"id": "sa2", "coldwar": "true"},
{"id": "sa3", "coldwar": "true"},
// ...
{"id": "new_sa", "coldwar": "false"} // <-- Добавлен новый юнит
]
}
}🇺🇸
Zone Randomizer is a convenient tool for DCS missions that automatically changes defensive systems within mission zones. This script adds replayability to your missions by randomizing the composition of air defenses (SAM, AAA), infantry, and other static objects without the need for manual file editing.
The program analyzes your mission's init.lua file, searches for zone definition blocks, and then performs the following steps:
- Mission Mode Detection: The script checks if the mission is in "Cold War" mode (
Config.isColdWar = true) or "Modern" mode (Config.isColdWar = false). This setting determines which specific units will be used for randomization. - Zone Analysis: The program scans each zone defined in
init.luaand reads its name. - Unit Class Determination: Based on the zone's name (e.g.,
palmyra-sam-red), the script determines the unit's class (sam). This rule has the highest priority. If the zone name does not have a class tag, the script uses the class information from its internal configuration. - Randomization: The program selects a random unit from a pre-defined pool that matches the correct class (
sam), side (red), and mission mode. - Replacement: The original unit is replaced with the randomly selected one.
- Offmap Supply Configuration: The script also randomizes the
offmap-supplynumbers for both sides, following a specific algorithm to maintain balance.
- Prepare Your File: Make sure your
init.luafile is located in the mission folder. - Run the Script: Launch the
randomizer.pyfile (or the compiled executable). - Select Your File: In the window that appears, select the
init.luafile for your mission. - Wait: The program will automatically process and overwrite the file.
- Done!: A message will pop up confirming successful completion.
For the script to work correctly, it is crucial to use a consistent naming format for zones in your init.lua file.
Naming Format: [ZoneName]-[UnitClass]-[Side]
[ZoneName]– Any unique name, for example,airfield,city,palmyra.[UnitClass]– The tag that the script uses to determine the unit's class. Use one of the following:sam(Surface-to-air missile systems, e.g., SA-2, SA-10, Patriot)airdef(Short- and medium-range air defense systems, e.g., SA-6, SA-9, Roland)shorad(Short-range air defense)aaa(Anti-aircraft artillery)infantryorgarrison(Infantry)ewr(Early warning radar)
[Side]–redorblue.
Correct Naming Examples:
presets.defenses.blue.patriot:extend({ name = 'palmyra-airdef-blue' }),(The script will see-airdef-and replacepatriotwithrolandorrapier).presets.defenses.red.sa10:extend({ name = 'airfield-airdef-red' }),(The script will see-airdef-and replacesa10withsa6,sa9, or another available system).presets.defenses.blue.hawk:extend({ name = 'coast-sam-blue' }),(The script will see-sam-and replacehawkwith another available SAM system).
The program has an internal DEFAULT_CONFIG dictionary that defines the classes, sides, and Cold War compatibility for each unit. If you want to add a new unit or change its classification, you will need to edit this dictionary.
Example of adding a new unit:
If you want to add a new SAM system, find the corresponding class in DEFAULT_CONFIG and add it to the variants list:
{
"prefix": "sa",
"side": "red",
"class": "sam",
"coldwar": "both",
"variants": {
"red": [
{"id": "sa2", "coldwar": "true"},
{"id": "sa3", "coldwar": "true"},
// ...
{"id": "new_sa", "coldwar": "false"} // <-- New unit added
]
}
}