Я сделал себе так:
фильтр записал в основной класс, так же дописал в класс Ех команду фильтра из Ультимат-пака-4.
Фильтр не появляется только в моделях с компрессором от ДБ-603.
Потому как в хиер-хим он не прописан.
Классы, которые предлагаю гарантировано работают в патче 4.12.2.
В основном классе изменил дамаж рулевых поверхностей и добавил
состояние для топливного бака.
Ориентировался на Лагг и прописал Мессерам дамаж похлипче.
Код:
if(s.startsWith("xxcontrols"))
{
int i = s.charAt(10) - 48;
switch(i)
{
default:
break;
case 1: // '\001'
case 2: // '\002'
case 3: // '\003'
if(getEnergyPastArmor(0.4F, shot) > 0.0F && World.Rnd().nextFloat() < 0.25F)
{
((FlightModelMain) (super.FM)).AS.setControlsDamage(shot.initiator, 0);
Aircraft.debugprintln(this, "*** Aileron Controls: Disabled..");
}
break;
case 4: // '\004'
if(getEnergyPastArmor(0.4F, shot) > 0.0F && World.Rnd().nextFloat() < 0.25F)
{
((FlightModelMain) (super.FM)).AS.setControlsDamage(shot.initiator, 0);
Aircraft.debugprintln(this, "*** Aileron Controls: Control Crank Destroyed..");
}
break;
case 5: // '\005'
case 6: // '\006'
if(getEnergyPastArmor(0.4F, shot) > 0.0F && World.Rnd().nextFloat() < 0.25F)
{
((FlightModelMain) (super.FM)).AS.setControlsDamage(shot.initiator, 1);
Aircraft.debugprintln(this, "*** Elevator Controls: Disabled / Strings Broken..");
}
break;
case 7: // '\007'
if(getEnergyPastArmor(0.4F, shot) > 0.0F && World.Rnd().nextFloat() < 0.25F)
{
((FlightModelMain) (super.FM)).AS.setControlsDamage(shot.initiator, 2);
Aircraft.debugprintln(this, "*** Rudder Controls: Disabled..");
}
break;
case 8: // '\b'
if(getEnergyPastArmor(3.2F, shot) > 0.0F)
{
Aircraft.debugprintln(this, "*** Control Column: Hit, Controls Destroyed..");
((FlightModelMain) (super.FM)).AS.setControlsDamage(shot.initiator, 2);
((FlightModelMain) (super.FM)).AS.setControlsDamage(shot.initiator, 1);
((FlightModelMain) (super.FM)).AS.setControlsDamage(shot.initiator, 0);
}
break;
case 9: // '\t'
if(getEnergyPastArmor(2.25F, shot) > 0.0F && World.Rnd().nextFloat() < 0.25F)
{
((FlightModelMain) (super.FM)).AS.setCockpitState(shot.initiator, ((FlightModelMain) (super.FM)).AS.astateCockpitState | 8);
((FlightModelMain) (super.FM)).AS.setEngineSpecificDamage(shot.initiator, 0, 1);
((FlightModelMain) (super.FM)).AS.setEngineSpecificDamage(shot.initiator, 0, 6);
Aircraft.debugprintln(this, "*** Throttle Quadrant: Hit, Engine Controls Disabled..");
}
break;
}
}
----------------
Код фильтра:
Код:
public void onAircraftLoaded()
{
super.onAircraftLoaded();
if(Config.isUSE_RENDER())
if(World.cur().camouflage == 2 || World.cur().camouflage == 5)
{
if(hierMesh().chunkFindCheck("Filter_d0") != -1 && ! ((this instanceof BF_109G6HARTMANN)))
{
hierMesh().chunkVisible("Filter_d0", true);
hierMesh().chunkVisible("FilterFlap1_D0", true);
hierMesh().chunkVisible("FilterFlap2_D0", true);
bHasFilter = true;
} else
if(hierMesh().chunkFindCheck("FilterE_D0") != -1)
{
hierMesh().chunkVisible("FilterE_d0", true);
hierMesh().chunkVisible("FilterEFlap_D0", true);
bHasFilterE = true;
}
} else
if(World.cur().camouflage == 0 && NetAircraft.loadingCountry != null && NetAircraft.loadingCountry.equals(PaintScheme.countryFinland) && hierMesh().chunkFindCheck("Filter_d0") != -1 && ((this instanceof BF_109F2) || (this instanceof BF_109F3) || (this instanceof BF_109F4) || (this instanceof BF_109F4Z) || (this instanceof BF_109F413ATA) || (this instanceof BF_109G2) || (this instanceof BF_109G4)))
{
int i = Mission.getMissionDate(true);
if(World.Rnd().nextFloat() > 0.5F && i > 0x128a1e5)
{
hierMesh().chunkVisible("Filter_d0", true);
hierMesh().chunkVisible("FilterFlap1_D0", true);
hierMesh().chunkVisible("FilterFlap2_D0", true);
bHasFilter = true;
}
}
}
Фильтр не появляется только у Хартмана, на Средиземном море и в Африке его не было.
Фильтр окрывается после высоты 150 метров.