Тема: Back to the future
Показать сообщение отдельно
Старый 21.08.2024, 19:46   #452
yt2
Местный
 
Регистрация: 18.01.2012
Сообщений: 814
По умолчанию

Цитата:
Обновление до версии 2.3.0.1Alpha10 20.03.2025
ТЕСТОВАЯ версия. Описание даю для опытных моддеров.
Если вы прочитав описание ничего не поняли - ставить эту версию не нужно.
--------------------------------------------------------------------------
Версия 2.3.0.1 ТЕСТОВАЯ

1) ГЕНЕРАЦИЯ КЛАСС ФАЙЛОВ по данным из конфигов

Классы техники и объектов
Автомобили(Car.class),
Танки(Tank.class),
Артиллерия(Artillery.class),
Стационарные(Stationary.class)
Корабли(Ship.class),
Стационарные самолёты(Planes.class),
Сирены(Siren.class),
Сигнальные костры(Campfire.class),
Дымы и Огни(Smoke.class),
Воздушные шары(Aeronautics.class),
Радиомаяки и радиостанций(Beacon.class),
Прожекторы(Searchlight.class)
не являются "зашитыми" в игру, а генерируются на лету при запуске игры
по данным из конфигурационных файлов.
Для генерации класс-файлов используется classfile API из появившегося в Java 22 JEP 457 (Включён в состав Java 24)

Конфигурационные файлы этих классов для обычной безмодовой игры расположены в папке "ini":

Цитата:
ini\class_aeronautics.ini
ini\class_artillery.ini
ini\class_beacon.ini
ini\class_campfire.ini
ini\class_car.ini
ini\class_plane.ini
ini\class_searchlight.ini
ini\class_ship.ini
ini\class_siren.ini
ini\class_smoke.ini
ini\class_stationary.ini
ini\class_tank.ini
Для игры с модами (игра запущена с ключом -mods) активными станут файлы в папке mods\ini:
Цитата:
mods\ini\class_aeronautics.ini
mods\ini\class_artillery.ini
mods\ini\class_beacon.ini
mods\ini\class_campfire.ini
mods\ini\class_car.ini
mods\ini\class_plane.ini
mods\ini\class_searchlight.ini
mods\ini\class_ship.ini
mods\ini\class_siren.ini
mods\ini\class_smoke.ini
mods\ini\class_stationary.ini
mods\ini\class_tank.ini

При запуске игры эти ini-файлы будут обработаны и сгенерированы игровые классы для объектов.
Классы сохранятся по пути com\maddox\il2\objects в папке игры
При генерации в консоль пишется подробный лог процесса генерации (и ошибки если они возникают)

Главный плюс такого подхода, проще добавлять наземную технику
не требуется правка соответствующих классов.

Для примера рассмотрим файл vehicles_tank.ini
Основной является секция [ALL] в которой перечислены суб-классы объектов

Цитата:
[ALL]
HoRo_MG
Tatra_OA30
PzIB
PzBfWg
PzIIF
...
Чуть ниже для каждого прописанного объекта есть отдельная секция

Цитата:
[HoRo_MG]
Extends com.maddox.il2.objects.vehicles.tanks.TankGeneric
Implements0 com.maddox.il2.ai.ground.TgtVehicle
Score_Enemy 40
Score_Friend 400

[Tatra_OA30]
Extends com.maddox.il2.objects.vehicles.tanks.TankGeneric
Implements0 com.maddox.il2.ai.ground.TgtVehicle
Score_Enemy 40
Score_Friend 400
...
В ключе Extends указывается родительский класс объекта

В ключах Implements0, Implements1, Implements2, Implements3
указывается классы интерфейсов объекта
Если у объекта нет интерфейсов то ключ не используется
Если интерфейсов несколько, то ключи заполняются по порядку 0,1,2,3
Не допускается заполнять ключи 0 и 2, не заполняя ключ 1

Два ключа Score_Enemy и Score_Friend это очки наград/штрафов начисляемые
за уничтожение техники. Если ключ не указан - используется дефолтное значение
Siren, Campfire и Smoke параметров для очков не имеют


Например

Цитата:
[Zenit61K]
Extends com.maddox.il2.objects.vehicles.artillery.Artiller yGeneric
Implements0 com.maddox.il2.ai.ground.TgtFlak
Implements1 com.maddox.il2.objects.vehicles.artillery.AAA
Score_Enemy 60
Score_Friend 150

[SdKfz251]
Extends com.maddox.il2.objects.vehicles.artillery.Artiller yGeneric
Implements0 com.maddox.il2.ai.ground.TgtVehicle
Implements1 com.maddox.il2.ai.ground.TgtFlak
Implements2 com.maddox.il2.objects.vehicles.artillery.STank
Score_Enemy 40
Score_Friend 400

[DemagD7]
Extends com.maddox.il2.objects.vehicles.stationary.Station aryGeneric
Implements0 com.maddox.il2.ai.ground.TgtVehicle

[Voroshilovets]
Extends com.maddox.il2.objects.vehicles.cars.CarGeneric
Implements0 com.maddox.il2.ai.ground.TgtVehicle

[ML20]
Extends com.maddox.il2.objects.vehicles.artillery.Artiller yGeneric
Score_Enemy 30
Score_Friend 100

2) ЗАГРУЗКА ФАЙЛОВ FM из папки "MODS/FlightModels"

При включении режима с поддержкой модов проверяется папка "MODS/FlightModels"
на наличие файлов fmd или emd. При их наличии производится загрузка обнаруженных
файлов. Если в этой папке не будет файлов FM, то будет выполнена стандартная
загрузка файлов FM из buttons

Для примера я положил в указанную папку файл FM самолёта И-15бис и его мотора.

3) ДОРАБОТАННЫЙ ФОРМАТ cod-файлов
Файлы самолётных загрузок доработаны:
в них добавлены две новые строки с данными о триггерах вооружения weaponTriggers
и хуках вооружения weaponHooks. Разделителями данных в этих новых строках является символ ";"
Остальные строки остались в старом формате разделителей (т.е. обратно совместимы)
Это позволило полностью убрать из классов все данные по вооружениям и загрузкам
Также для варианта игры с модами (опция -mods) сделана возможность подгрузки
незашифрованных cod-файлов из папки mods/weapons
(для примера в ней сейчас содержатся cod-файлы для всех самолётов)
Если в этой папке будет найден cod-файл - то он подгрузится вместо стандарного
В текстовых cod-файлах разрешено использовать комментарии. Для этого строка должна начинаться
с символов ";", "#" или "/"

Пример файл mods\weapons\YAK_9U.cod:
Цитата:
#Yak-9U weapons
weaponTriggers;0;0;1
weaponHooks;_MGUN01;_MGUN02;_CANNON01
default,0 MGunUBsi 170,0 MGunUBsi 157,1 MGunShVAKki 120
none, , ,
4) Переведена на Java 23

5) ЗАГРУЗКА ПРОПЕРТИСОВ КЛАССОВ САМОЛЁТОВ ИЗ КОНФИГУРАЦИОННОГО ФАЙЛА
Пропертисы подгружаются из файла ini\PlanesProperty.ini для обычной игры
и mods\ini\PlanesProperty.ini для игры с опцией модов
Все пропертисы располагаются в соответствующей секции с именем класса самолёта

Например:
Цитата:
[A_20G]
[P_40M_NEW]
[BF_109G6MOLNAR]
Далее идут параметры и их значения в формате:
Цитата:
<Имя параметра><Разделитель><Значение параметра>
В качестве имени параметра могут использоваться:
Цитата:
iconFar_shortClassName
originCountry
meshNameDemo
meshName
meshName_de
meshName_fi
meshName_fr
meshName_gb
meshName_hu
meshName_it
meshName_ja
meshName_du
meshName_nn
meshName_pl
meshName_ro
meshName_ru
meshName_rz
meshName_sk
meshName_us
meshName_vi
FlightModel
yearService
yearExpired
LOSElevation
Handicap
gliderBoosters
gliderBoostThrust
gliderCart
gliderFireOut
gliderString
gliderStringLength
gliderStringKx
gliderStringFactor
noseart
PaintScheme
PaintScheme_de
PaintScheme_fi
PaintScheme_fr
PaintScheme_gb
PaintScheme_hu
PaintScheme_it
PaintScheme_ja
PaintScheme_du
PaintScheme_nn
PaintScheme_pl
PaintScheme_ro
PaintScheme_ru
PaintScheme_rz
PaintScheme_sk
PaintScheme_us
PaintScheme_vi
ZBReceiver
cockpitClass
В качестве разделителя используют пробел

В качестве значениё параметра указывают строку или число

Строки могут быть закомментированы стандартным для ini-файлов образом (# ; и т.п.)

Например:
Цитата:
[A_20G]
iconFar_shortClassName A-20
originCountry us
meshName 3DO/Plane/A-20G(Multi1)/hier.him
meshName_gb 3DO/Plane/A-20G(AU)/hier.him
meshName_us 3DO/Plane/A-20G(USA)/hier.him
FlightModel FlightModels/A-20G.fmd
yearService 1943.0
yearExpired 1965.5
LOSElevation 0.92575
noseart 1
PaintScheme PaintSchemeBMPar05
PaintScheme_gb PaintSchemeBMPar05
PaintScheme_us PaintSchemeBMPar03
cockpitClass CockpitA_20G,CockpitA_20G_TGunner,CockpitA_20G_BGu nner
ZBReceiver 1
Цитата:
[ME_321]
iconFar_shortClassName Me-321
originCountry de
meshName 3do/plane/Me-321/hier.him
FlightModel FlightModels/Me-321.fmd
yearService 1941.0
yearExpired 1945.5
gliderBoosters 1
gliderBoostThrust 1960.0
gliderCart 1
gliderFireOut 30.0
gliderString 3DO/Arms/TowCable/mono.sim
gliderStringLength 140.0
gliderStringKx 100.0
gliderStringFactor 1.89
PaintScheme PaintSchemeBMPar02
Параметр ZBReceiver влияет на
ранее зашитый в класс Aircraft.class список самолётов planesWithZBReceiver

Также есть параметр cockpitClass дающий возможность
перечислять классы кокпитов используемых в самолёте
Сначала указывают класс самолёта. Затем через пробел указывают класс кокпита.
Если кокпитов несколько их перечисляют через запятую (без пробелов)

Пример:
Цитата:
cockpitClass CockpitA6M7_63
cockpitClass CockpitAR_234B2,CockpitAR_234B2_Bombardier
cockpitClass CockpitB25J,CockpitB25J_Copilot,CockpitB25J_Bombar dier,CockpitB25J_FGunner,CockpitB25J_TGunner,Cockp itB25J_AGunner,CockpitB25J_RGunner,CockpitB25J_LGu nner
Побочным результатом стало простое "ококпичивание" нелетабов

6) ЗАГРУЗКА ПРОПЕРТИСОВ КЛАССОВ КОКПИТОВ ИЗ КОНФИГУРАЦИОННОГО ФАЙЛА
Пропертисы подгружаются из файла ini\CockpitsProperty.ini для обычной игры
и mods\ini\CockpitsProperty.ini для игры с опцией модов
Все пропертисы располагаются в соответствующей секции с именем класса кокпита.
Возможные имена ключей
aiTuretNum,
weaponControlNum,
astatePilotIndx,
normZN,
gsZN,
normZNs_Back, normZNs_Left, normZNs_Front, normZNs_Right
(используются одновременно)


Пример:
Прежний вариант в классе CockpitA_20C
Цитата:
static {
Property.set(CLASS.THIS(), "aiTuretNum", 0);
Property.set(CLASS.THIS(),"normZNs", new float[]{0.70f, 0.66f, 1.24f, 0.66f});
}
Новый вариант в файле CockpitsProperty.ini
Цитата:
[CockpitA_20C]
aiTuretNum 0
weaponControlNum 0
astatePilotIndx 0
normZN -1.0
gsZN -1.0
normZNs_Back 0.7
normZNs_Left 0.66
normZNs_Front 1.24
normZNs_Right 0.66
Все перечисленные изменения направлены на уменьшение зависимостей от файлов классов

Последний раз редактировалось yt2; 20.03.2025 в 18:36.
yt2 вне форума   Ответить с цитированием