Посмотрел в класс и увидел несоответствие названия повреждений в хит-бон с мешами в хиер-химе.
На скорую руку поправил пока так:
Код:
if(s.startsWith("xengine1"))
{
Aircraft.debugprintln(this, "*** Engine Module: Hit..");
if(s.endsWith("xxeng1case"))
{
if(getEnergyPastArmor(0.2F, shot) > 0.0F)
{
if(World.Rnd().nextFloat() < shot.power / 140000F)
{
((FlightModelMain) (super.FM)).AS.setEngineStuck(shot.initiator, 0);
Aircraft.debugprintln(this, "*** Engine Crank Case Hit - Engine Stucks..");
}
if(World.Rnd().nextFloat() < shot.power / 85000F)
{
((FlightModelMain) (super.FM)).AS.hitEngine(shot.initiator, 0, 2);
Aircraft.debugprintln(this, "*** Engine Crank Case Hit - Engine Damaged..");
}
} else
if(World.Rnd().nextFloat() < 0.01F)
{
((FlightModelMain) (super.FM)).EI.engines[0].setCyliderKnockOut(shot.initiator, 1);
} else
{
((FlightModelMain) (super.FM)).EI.engines[0].setReadyness(shot.initiator, ((FlightModelMain) (super.FM)).EI.engines[0].getReadyness() - 0.002F);
Aircraft.debugprintln(this, "*** Engine Crank Case Hit - Readyness Reduced to " + ((FlightModelMain) (super.FM)).EI.engines[0].getReadyness() + "..");
}
getEnergyPastArmor(12F, shot);
}
if(s.startsWith("xxeng1cyls"))
{
if(getEnergyPastArmor(6.85F, shot) > 0.0F && World.Rnd().nextFloat() < ((FlightModelMain) (super.FM)).EI.engines[0].getCylindersRatio() * 0.75F)
{
((FlightModelMain) (super.FM)).EI.engines[0].setCyliderKnockOut(shot.initiator, World.Rnd().nextInt(1, (int)(shot.power / 19000F)));
Aircraft.debugprintln(this, "*** Engine Cylinders Hit, " + ((FlightModelMain) (super.FM)).EI.engines[0].getCylindersOperable() + "/" + ((FlightModelMain) (super.FM)).EI.engines[0].getCylinders() + " Left..");
if(World.Rnd().nextFloat() < shot.power / 48000F)
{
((FlightModelMain) (super.FM)).AS.hitEngine(shot.initiator, 0, 2);
Aircraft.debugprintln(this, "*** Engine Cylinders Hit - Engine Fires..");
}
}
getEnergyPastArmor(24.5F, shot);
}else
if(s.endsWith("xxeng1eqpt") && getEnergyPastArmor(World.Rnd().nextFloat(0.001F, 0.2F), shot) > 0.0F && World.Rnd().nextFloat() < 0.89F)
{
if(World.Rnd().nextFloat() < 0.11F)
{
((FlightModelMain) (super.FM)).EI.engines[0].setMagnetoKnockOut(shot.initiator, World.Rnd().nextInt(0, 1));
Aircraft.debugprintln(this, "*** Engine Magneto Out..");
}
if(World.Rnd().nextFloat() < 0.11F)
{
((FlightModelMain) (super.FM)).EI.engines[0].setKillCompressor(shot.initiator);
Aircraft.debugprintln(this, "*** Engine Compressor Feed Out..");
}
}
return;
}
if(s.startsWith("xxeng1oil1"))
{
((FlightModelMain) (super.FM)).AS.hitOil(shot.initiator, 0);
Aircraft.debugprintln(this, "*** Engine Module: Oil Radiator Hit..");
} else
if(s.endsWith("feed"))
{
if(getEnergyPastArmor(3.2F, shot) > 0.0F && World.Rnd().nextFloat() < 0.5F && ((FlightModelMain) (super.FM)).EI.engines[0].getPowerOutput() > 0.7F)
{
((FlightModelMain) (super.FM)).AS.hitEngine(shot.initiator, 0, 100);
Aircraft.debugprintln(this, "*** Engine Module: Pressurized Fuel Line Pierced, Fuel Flamed..");
}
} else
if(s.startsWith("xxoiltank"))
{
if(getEnergyPastArmor(0.25F, shot) > 0.0F && World.Rnd().nextFloat() < 0.125F)
{
((FlightModelMain) (super.FM)).AS.hitOil(shot.initiator, 0);
getEnergyPastArmor(0.22F, shot);
debuggunnery("Engine Module: Oil Tank Pierced..");
}
return;
}
if(s.startsWith("xxtank1"))
{
int k = s.charAt(6) - 49;
if(getEnergyPastArmor(2.2F, shot) > 0.0F && World.Rnd().nextFloat() < 0.45F)
{
if(((FlightModelMain) (super.FM)).AS.astateTankStates[k] == 0)
{
debuggunnery("Fuel Tank (" + k + "): Pierced..");
((FlightModelMain) (super.FM)).AS.hitTank(shot.initiator, k, 1);
((FlightModelMain) (super.FM)).AS.doSetTankState(shot.initiator, k, 1);
}
if(World.Rnd().nextFloat() < 0.01F || shot.powerType == 3 && World.Rnd().nextFloat() < 0.4F)
{
((FlightModelMain) (super.FM)).AS.hitTank(shot.initiator, k, 4);
debuggunnery("Fuel Tank (" + k + "): Hit..");
}
}
return;
}
if(s.startsWith("xxspart1"))
{
int j = s.charAt(7) - 49;
((FlightModelMain) (super.FM)).AS.setJamBullets(1, j);
getEnergyPastArmor(12F, shot);
return;
}
if(s.startsWith("xxpneu"))
{
((FlightModelMain) (super.FM)).Gears.setHydroOperable(false);
return;
} else
{
return;
}
}
if(s.startsWith("xcf1"))
{
if(chunkDamageVisible("CF") < 3)
hitChunk("CF", shot);
if(World.Rnd().nextFloat() < 0.07F)
((FlightModelMain) (super.FM)).AS.setCockpitState(shot.initiator, ((FlightModelMain) (super.FM)).AS.astateCockpitState | 2);
if(World.Rnd().nextFloat() < 0.07F)
((FlightModelMain) (super.FM)).AS.setCockpitState(shot.initiator, ((FlightModelMain) (super.FM)).AS.astateCockpitState | 1);
if(World.Rnd().nextFloat() < 0.07F)
((FlightModelMain) (super.FM)).AS.setCockpitState(shot.initiator, ((FlightModelMain) (super.FM)).AS.astateCockpitState | 0x40);
if(World.Rnd().nextFloat() < 0.07F)
((FlightModelMain) (super.FM)).AS.setCockpitState(shot.initiator, ((FlightModelMain) (super.FM)).AS.astateCockpitState | 4);
if(World.Rnd().nextFloat() < 0.07F)
((FlightModelMain) (super.FM)).AS.setCockpitState(shot.initiator, ((FlightModelMain) (super.FM)).AS.astateCockpitState | 0x10);
} else
if(s.startsWith("xengine1"))
{
if(chunkDamageVisible("Engine1") < 2)
hitChunk("Engine1", shot);
} else
if(s.startsWith("xtail1"))
{
if(chunkDamageVisible("Tail1") < 3)
hitChunk("Tail1", shot);
} else
if(s.startsWith("xrudder1"))
{
if(chunkDamageVisible("Rudder1") < 1)
hitChunk("Rudder1", shot);
} else
if(s.startsWith("xvatorr"))
{
if(s.startsWith("xvatorl") && chunkDamageVisible("VatorL") < 1)
hitChunk("VatorL", shot);
if(s.startsWith("xvatorr") && chunkDamageVisible("VatorR") < 1)
hitChunk("VatorR", shot);
} else
if(s.startsWith("xwing"))
{
if(s.startsWith("xwinglin") && chunkDamageVisible("WingLIn") < 3)
hitChunk("WingLIn", shot);
if(s.startsWith("xwingrin") && chunkDamageVisible("WingRIn") < 3)
hitChunk("WingRIn", shot);
} else
if(s.startsWith("xaroner"))
{
if(s.startsWith("xaronel") && chunkDamageVisible("AroneL") < 1)
hitChunk("AroneL", shot);
if(s.startsWith("xaroner") && chunkDamageVisible("AroneR") < 1)
hitChunk("AroneR", shot);
} else
if(s.startsWith("xpilot1a") || s.startsWith("xhead1"))
{
byte byte0 = 0;
int i;
if(s.endsWith("a"))
{
byte0 = 1;
i = s.charAt(6) - 49;
} else
if(s.endsWith("b"))
{
byte0 = 2;
i = s.charAt(6) - 49;
} else
{
i = s.charAt(5) - 49;
}
hitFlesh(i, shot, byte0);
}
}
Может что не совсем так - потому как в 3До разбираюсь постолько-поскольку/что вижу - то и пою.
Нужна, конечно, шлифовка названий в коде.
Не нашёл названий мешей пулемётов. Написал по догадке, но скорее всего это не пулемёты. Если не они - их нужно лепить в 3До отдельными мешиками, что бы пулемёты при попадании отключались. Можно все четыре мешика - я попробую записать повреждение всех четырёх.
И ещё нужен маслобак - код уже вставлен.
Извини, Дима, что влажу в твой труд!
Я из самых лучших побуждений.
Хочеться поставить себе "вылизанный" И-180.