В планере Д-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.
И по возможности правильно их расположить в планере, соттветствующе
их назначению.