Показать сообщение отдельно
Старый 31.07.2023, 01:16   #1394
Dimas1999
Местный
 
Аватар для Dimas1999
 
Регистрация: 18.11.2015
Адрес: Анапа
Сообщений: 1,662
По умолчанию

Обновил сборку ЛаГГов.
Починил компас, надеюсь, другое снова не сломал)
Добавил некоторые элементы из мода Ла-5 от gemgi.
Бонус: освежил кабину ЛаГГ-3РД элементами от поршневых ЛаГГов.

https://drive.google.com/file/d/1tw4...ew?usp=sharing

Про ДМ баков вот что я понял.
Сначала отрабатывается код xxtank, т.к. пришло попадание по колижену xxtank.
(пытаюсь читать приведённый выше код, прошу поправить меня знатоков джавы)
если энергия попадания 0.5 (больше нуля?) с вероятностью меньше 0.45
если бак k имеет состояние 0 (целый)
в отладочный лог "бак k пробит"
присвоить баку k состояние 1 (утечка)
с вероятностью меньше 0.08 или тип снаряда равен 3 (зажигательный?) с вероятностью меньше 0.5
присвоить баку k состояние 4
в отладочный лог топливный бак k повреждён
Тут бак получает урон от попадания, а затем метод RareAction добавляет случайные события.
Код:
    public void rareAction(float dt, boolean bMaster)
    {
        super.rareAction(dt, bMaster);
        if(bMaster)
        {
            for(int i = 0; i < 4; i++)
                if(((FlightModelMain) (super.FM)).AS.astateTankStates[i] > 0 && ((FlightModelMain) (super.FM)).AS.astateTankStates[i] < 5 && World.Rnd().nextFloat() < 0.1F)
                    ((FlightModelMain) (super.FM)).AS.repairTank(i);
        }
    }
Если состояние бака больше 0 и меньше 5 с вероятностью меньше 0.1
починить бак i (сработал протектор)

Про этот код дошло до меня, это не имитация нейтрального газа, попутал немного с другим модом)

Код:
        if(paramBoolean)
        {
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] > 4 && World.Rnd().nextFloat() < 0.07F)
                nextDMGLevel(((FlightModelMain) (super.FM)).AS.astateEffectChunks[0] + "0", 0, this);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] > 4 && World.Rnd().nextFloat() < 0.14F)
                ((FlightModelMain) (super.FM)).AS.hitTank(this, 1, 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] > 4 && World.Rnd().nextFloat() < 0.14F)
                ((FlightModelMain) (super.FM)).AS.hitTank(this, 2, 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] > 4 && World.Rnd().nextFloat() < 0.07F)
                nextDMGLevel(((FlightModelMain) (super.FM)).AS.astateEffectChunks[1] + "0", 0, this);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] > 4 && World.Rnd().nextFloat() < 0.14F)
                ((FlightModelMain) (super.FM)).AS.hitTank(this, 0, 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] > 4 && World.Rnd().nextFloat() < 0.07F)
                nextDMGLevel(((FlightModelMain) (super.FM)).AS.astateEffectChunks[2] + "0", 0, this);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] > 4 && World.Rnd().nextFloat() < 0.14F)
                ((FlightModelMain) (super.FM)).AS.hitTank(this, 0, 1);
        }
Если состояние бака 0 более 4, с вероятностью 0.07 присвоить какой-то там эффект (типа разнообразие)
Если состояние бака 0 более 4, с вероятностью 0.14 присвоить баку 1 состояние 1 (типа распространение огня)
...
...
...

Подобный код, но для затухания видел у WxTech в моде для Б-17.
https://www.sas1946.com/main/index.p...c,66857.0.html

Надо ещё подумать про всё это.

По И-180.
У него коллизии очень посредственные и кривые, есть дыры и несовпадения с очертаниями фюзеляжа.
Есть бак, стойки шасси, блок цилиндров, картер, маслорадиатор, "оборудование" (вероятно, магнето).
Dimas1999 вне форума   Ответить с цитированием