Тема: Баги 4.15
Показать сообщение отдельно
Старый 16.08.2023, 11:14   #54
Vasya
Звичайна людина на Землі
 
Аватар для Vasya
 
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 8,293
Восклицание Коллизии мотора в Д-520 из патча 4.15

В планере Д-520 коллизии мотора скорее всего расположены не на месте мотора.
Код:
[Engine1_D0]
Mesh Engine1_D0
Parent CF_D0
Separable
Attaching 1 1.19209e-007 0 -1.19209e-007 1 0 0 0 1 2.85204 3.8147e-007 -0.22491
CollisionObject xengine1
CollisionObject .xxeng1case1
CollisionObject .xxeng1case2
CollisionObject .xxeng1cyls1
CollisionObject .xxeng1cyls2
CollisionObject .xxeng1eqpt1
CollisionObject .xxmgun01
Или один из касе, или цилиндр засунут в радиатор снизу планера.
Перенастраивал раздел хит-бон для более "точных" повреждений.
Код:
            if(s.startsWith("xxeng1"))
            {
                if(s.endsWith("case1") || s.endsWith("case2") || s.endsWith("eqpt1") && getEnergyPastArmor(0.1F, shot) > 0.0F)
                {
                    if(World.Rnd().nextFloat() < shot.power / 125000F)
                    {
                        ((FlightModelMain) (super.FM)).AS.setEngineStuck(shot.initiator, 0);
                        Aircraft.debugprintln(this, "*** Engine Crank Case Hit - Engine Stucks..");
                    }
                    if(World.Rnd().nextFloat() < shot.power / 125000F)
                    {
                        ((FlightModelMain) (super.FM)).AS.hitEngine(shot.initiator, 0, 2);
                        Aircraft.debugprintln(this, "*** Engine Crank Case Hit - Engine Damaged..");
                    }                    
                    if(World.Rnd().nextFloat() < shot.power / 28000F)                    
                    {
                        ((FlightModelMain) (super.FM)).EI.engines[0].setMagnetoKnockOut(shot.initiator, World.Rnd().nextInt(0, 1));
                        Aircraft.debugprintln(this, "*** Engine Magneto Out..");
                    }
                    if(World.Rnd().nextFloat() < shot.power / 28000F)   
                    {
                        ((FlightModelMain) (super.FM)).EI.engines[0].setKillCompressor(shot.initiator);
                        Aircraft.debugprintln(this, "*** Engine Compressor Feed Out..");
                    }
                    if(World.Rnd().nextFloat() < shot.power / 28000F)
                    {
                        debuggunnery("Engine Module: Crank Case Hit - Engine Stalled..");
                        FM.EI.engines[0].setEngineStops(shot.initiator);
                    }
                    if(World.Rnd().nextFloat() < shot.power / 48000F)
                    {
                        ((FlightModelMain) (super.FM)).EI.engines[0].setCyliderKnockOut(shot.initiator, 1);
                        Aircraft.debugprintln(this, "*** Engine Crank Case Hit - Cylinder Feed Out, " + ((FlightModelMain) (super.FM)).EI.engines[0].getCylindersOperable() + "/" + ((FlightModelMain) (super.FM)).EI.engines[0].getCylinders() + " Left..");
                    }                                       
                    ((FlightModelMain) (super.FM)).EI.engines[0].setReadyness(shot.initiator, ((FlightModelMain) (super.FM)).EI.engines[0].getReadyness() - World.Rnd().nextFloat(0.0F, shot.power / 48000F));                    
                    Aircraft.debugprintln(this, "*** Engine Crank Case Hit - Readyness Reduced to " + ((FlightModelMain) (super.FM)).EI.engines[0].getReadyness() + "..");                                        
                    if(World.Rnd().nextFloat() < shot.power / 48000F)
                    {
                        debuggunnery("Engine Module: Crank Case Hit - Fuel Feed Hit - Engine Flamed..");
                        FM.AS.hitEngine(shot.initiator, 0, 10);
                    } 
                }
                if((s.endsWith("cyl1") || s.endsWith("cyl2")) && getEnergyPastArmor(World.Rnd().nextFloat(0.5F, 2.542F), shot) > 0.0F && World.Rnd().nextFloat() < FM.EI.engines[0].getCylindersRatio() * 1.75F)
                {
                    FM.EI.engines[0].setCyliderKnockOut(shot.initiator, World.Rnd().nextInt(1, (int)(shot.power / 48000F)));
                    Aircraft.debugprintln(this, "*** Engine Cylinders Hit, " + FM.EI.engines[0].getCylindersOperable() + "/" + FM.EI.engines[0].getCylinders() + " Left..");		    
                    if(((FlightModelMain) (super.FM)).AS.astateEngineStates[0] < 1)
                        ((FlightModelMain) (super.FM)).AS.hitEngine(shot.initiator, 0, 1);
		    if(World.Rnd().nextFloat() < shot.power / 34000F)
                    {
                        FM.EI.engines[0].setEngineStuck(shot.initiator);
                        Aircraft.debugprintln(this, "*** Engine Cylinder Case Broken - Engine Stuck..");			
		    }
                    if(World.Rnd().nextFloat() < shot.power / 34000F)
                    {
                        FM.AS.hitEngine(shot.initiator, 0, 3);
                        Aircraft.debugprintln(this, "*** Engine Cylinders Hit - Engine Fires..");			
		    }       
                    getEnergyPastArmor(World.Rnd().nextFloat(3F, 49.8F), shot);
                }
                if(s.endsWith("radtr"))
                {
                    if(((FlightModelMain) (super.FM)).AS.astateEngineStates[0] == 0)
                    {
                        debuggunnery("Engine Module: Water Radiator Pierced..");
                        ((FlightModelMain) (super.FM)).AS.hitEngine(shot.initiator, 0, 1);
                        ((FlightModelMain) (super.FM)).AS.doSetEngineState(shot.initiator, 0, 1);
                    } else
                    if(((FlightModelMain) (super.FM)).AS.astateEngineStates[0] == 1)
                    {
                        debuggunnery("Engine Module: Water Radiator Pierced..");
                        ((FlightModelMain) (super.FM)).AS.hitEngine(shot.initiator, 0, 1);
                        ((FlightModelMain) (super.FM)).AS.doSetEngineState(shot.initiator, 0, 2);
                    }
                    return;
               }
               if(s.startsWith("xxeng1oil"))
               {
                    if(getEnergyPastArmor(0.25F, shot) > 0.0F && World.Rnd().nextFloat() < 0.125F)
                    {
                        ((FlightModelMain) (super.FM)).AS.hitOil(shot.initiator, 0);
                        ((FlightModelMain) (super.FM)).AS.setCockpitState(shot.initiator, ((FlightModelMain) (super.FM)).AS.astateCockpitState | 0x80);
                        getEnergyPastArmor(0.22F, shot);
                        debuggunnery("Engine Module: Oil Radiator Pierced..");
                    }
                    return;
            }            
            if(s.startsWith("xxtank1"))
            {
                int i = s.charAt(6) - 49;
                if(getEnergyPastArmor(1.25F, shot) > 0.0F && World.Rnd().nextFloat() < 0.5F)
                {
                    if(FM.AS.astateTankStates[i] == 0)
                    {
                        debuggunnery("Fuel Tank (" + i + "): Pierced..");
                        FM.AS.hitTank(shot.initiator, i, 1);
                        FM.AS.doSetTankState(shot.initiator, i, 1);
                    }else
                    if(FM.AS.astateTankStates[i] == 1)
                    {
                        debuggunnery("Fuel Tank (" + i + "): Pierced..");
                        FM.AS.hitTank(shot.initiator, i, 3);
                        FM.AS.doSetTankState(shot.initiator, i, 3);  
                    }
                    if(World.Rnd().nextFloat() < 0.08F || shot.powerType == 3 && World.Rnd().nextFloat() < 0.7F)
                    {
                        debuggunnery("Fuel Tank (" + i + "): Hit..");
                        FM.AS.hitTank(shot.initiator, i, 4);                        
                        FM.AS.doSetTankState(shot.initiator, i, 5);
                    }
                }
                return;
            }
Я уже писал ранее, что замечал эту проблему в дефолте в 4.15.
Использую планер, который вытянули из сфс-ки патча 4.15.
Пролетал над Б-17, который обстрелял самолёт снизу.
После обстрела загорелся водо-радиатор внизу фюзеляжа и выскочила
надпись - двигатель горит.
Прошу обратить внимание !!! на расположение коллизий в планере Д-520.
И по возможности правильно их расположить в планере, соттветствующе
их назначению.
Миниатюры
Нажмите на изображение для увеличения
Название: 2023.08.16 08-37-35.jpg
Просмотров: 650
Размер:	1.42 Мб
ID:	74056   Нажмите на изображение для увеличения
Название: 2023.08.16 08-37-40.jpg
Просмотров: 627
Размер:	1.34 Мб
ID:	74057  

Последний раз редактировалось Vasya; 17.08.2023 в 12:34. Причина: Исправление код повреждений для Хит-бон
Vasya вне форума   Ответить с цитированием