Код:
// Script that triggered an accidental damage to the player plane
// Autor: adonys
// version: 1.1
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using maddox.game;
using maddox.game.world;
using maddox.GP;
public class Mission : maddox.game.AMission
{
AiAircraft PlayerPlane;
int PlanePartsNr = 117;
private string[] PlanePartsList = new string[]
{ "ElecGeneratorFailure",
"ElecBatteryFailure",
"ElecPrimaryFailure",
"ElecSecondaryFailure",
"ElecMasterCompassFailure",
"ElecWeaponryFailure",
"ElecPriNavigationFailure",
"ElecSecNavigationFailure",
"ElecTransceiverFailure",
"ElecIlluminationFailure",
"HydraulicsPumpFailure",
"HydraulicsPrimaryHosePerforated",
"HydraulicsPistonOpened",
"HydraulicsEmergencyFailure",
"HydraulicsTankPerforated",
"PneumaticsCompressorFailure",
"PneumaticsPrimaryContainerPerforated",
"PneumaticsSecondaryContainerPerforated",
"PneumaticsPrimaryHosePerforated",
"PneumaticsSecondaryHosePerforated",
"ControlsGenericKickdown",
"ControlsElevatorDisabled",
"ControlsAileronsDisabled",
"ControlsRudderDisabled",
"LandingFlapsPistonFailure1",
"LandingFlapsPistonFailure2",
"LandingFlapsKinematicFailure1",
"LandingFlapsKinematicFailure2",
"LandingFlapsDriveFailure",
"LandingFlapsHosePerforated",
"AirbrakeHosePerforated",
"AirbrakeDriveFailure",
"AirbrakePistonFailure",
"WheelBrakesFailureL",
"WheelBrakesFailureR",
"WheelBrakesTotalFailure",
"WheelBrakesHosePerforated",
"UndercarriageShockFailureL",
"UndercarriageShockFailureR",
"UndercarriageShockFailureC",
"UndercarriageUpLockFailureL",
"UndercarriageUpLockFailureR",
"UndercarriageUpLockFailureC",
"UndercarriageDownLockFailureL",
"UndercarriageDownLockFailureR",
"UndercarriageDownLockFailureC",
"UndercarriageKinematicFailureL",
"UndercarriageKinematicFailureR",
"UndercarriageKinematicFailureC",
"UndercarriageHosePerforated",
"UndercarriageDriveDamaged",
"Eng0TotalFailure",
"Eng0TotalSeizure",
"Eng0IntakeBurnt",
"Eng0CompressorFailure",
"Eng0CompressorGovernorFailure",
"Eng0CompressorSeizure",
"Eng0IntercoolerBurnt",
"Eng0CarbFailure",
"Eng0CarbControlsFailure",
"Eng0FuelLinePerforated",
"Eng0FuelPumpFailure",
"Eng0FuelSecondariesFire",
"Eng0Magneto0Failure",
"Eng0Magneto1Failure",
"Eng0OilPumpFailure",
"Eng0OilRadiatorPerforated",
"Eng0OilLineBroken",
"Eng0OilGasketLeak",
"Eng0OilSecondariesFire",
"Eng0OilSecondariesExtinguished",
"Eng0OilTankPerforated",
"Eng0WaterPumpFailure",
"Eng0WaterRadiatorPerforated",
"Eng0WaterLineBroken",
"Eng0WaterTankPerforated",
"Eng0WaterJacketBroken",
"Eng0CylinderHeadFire",
"Eng0CylinderHeadExtinguished",
"Eng0ExhaustHeadFailure",
"Eng0GovernorFailure",
"Eng0GovernorSeizure",
"Eng0ThrottleControlBroken",
"Eng0PropControlBroken",
"Eng0TretiaryControlBroken",
"Eng0PropBlade0Broken",
"Eng0PropBlade1Broken",
"Eng0PropBlade2Broken",
"Eng0PropBlade3Broken",
"Eng0Plug00Failure",
"FuelTank0TinyLeak",
"FuelTank0SmallLeak",
"FuelTank0LargeLeak",
"FuelTank0Fire",
"FuelTank0Exploded",
"FuelTank0HosePerforated",
"FuelTank0PumpFailure",
"Machinegun00Failure",
"Machinegun00BeltBroken",
"Machinegun00Jammed",
"Machinegun00Charged",
"Machinegun00LineDamaged",
"CockpitDamageFlag00",
"CockpitDamageFlag01",
"CockpitDamageFlag02",
"CockpitDamageFlag03",
"CockpitDamageFlag04",
"CockpitDamageFlag05",
"CockpitDamageFlag06",
"CockpitDamageFlag07",
"CockpitDamageFlag08",
"CockpitDamageFlag09",
"CockpitDamageFlag10",
"CockpitDamageFlag11",
"CockpitDamageFlag12",
"CockpitDamageFlag13",
"CockpitDamageFlag14",
};
private string[] PlanePartsListText = new string[]
{ "ElecGeneratorFailure",
"ElecBatteryFailure",
"ElecPrimaryFailure",
"ElecSecondaryFailure",
"ElecMasterCompassFailure",
"ElecWeaponryFailure",
"ElecPriNavigationFailure",
"ElecSecNavigationFailure",
"ElecTransceiverFailure",
"ElecIlluminationFailure",
"Hydraulics Pump failure",
"HydraulicsPrimaryHosePerforated",
"HydraulicsPistonOpened",
"HydraulicsEmergencyFailure",
"HydraulicsTankPerforated",
"PneumaticsCompressorFailure",
"PneumaticsPrimaryContainerPerforated",
"PneumaticsSecondaryContainerPerforated",
"PneumaticsPrimaryHosePerforated",
"PneumaticsSecondaryHosePerforated",
"ControlsGenericKickdown",
"Elevator disabled",
"Ailerons disabled",
"Rudder disabled",
"LandingFlapsPistonFailure1",
"LandingFlapsPistonFailure2",
"LandingFlapsKinematicFailure1",
"LandingFlapsKinematicFailure2",
"LandingFlapsDriveFailure",
"LandingFlapsHosePerforated",
"AirbrakeHosePerforated",
"AirbrakeDriveFailure",
"AirbrakePistonFailure",
"WheelBrakesFailureL",
"WheelBrakesFailureR",
"WheelBrakesTotalFailure",
"WheelBrakesHosePerforated",
"UndercarriageShockFailureL",
"UndercarriageShockFailureR",
"UndercarriageShockFailureC",
"UndercarriageUpLockFailureL",
"UndercarriageUpLockFailureR",
"UndercarriageUpLockFailureC",
"Undercarriage Left down-lock mechanism failure",
"Undercarriage Right down-lock mechanism failure",
"Undercarriage Central down-lock mechanism failure",
"UndercarriageKinematicFailureL",
"UndercarriageKinematicFailureR",
"UndercarriageKinematicFailureC",
"UndercarriageHosePerforated",
"UndercarriageDriveDamaged",
"Engine Total failure",
"Eng0TotalSeizure",
"Eng0IntakeBurnt",
"Eng0CompressorFailure",
"Eng0CompressorGovernorFailure",
"Eng0CompressorSeizure",
"Eng0IntercoolerBurnt",
"Eng0CarbFailure",
"Eng0CarbControlsFailure",
"Eng0FuelLinePerforated",
"Eng0FuelPumpFailure",
"Eng0FuelSecondariesFire",
"Eng0Magneto0Failure",
"Eng0Magneto1Failure",
"Eng0OilPumpFailure",
"Eng0OilRadiatorPerforated",
"Eng0OilLineBroken",
"Eng0OilGasketLeak",
"Oil is on fire",
"Eng0OilSecondariesExtinguished",
"Eng0OilTankPerforated",
"Eng0WaterPumpFailure",
"Eng0WaterRadiatorPerforated",
"Eng0WaterLineBroken",
"Eng0WaterTankPerforated",
"Eng0WaterJacketBroken",
"Eng0CylinderHeadFire",
"Eng0CylinderHeadExtinguished",
"Eng0ExhaustHeadFailure",
"Eng0GovernorFailure",
"Eng0GovernorSeizure",
"Eng0ThrottleControlBroken",
"Eng0PropControlBroken",
"Eng0TretiaryControlBroken",
"PropBlade Broken",
"Eng0PropBlade1Broken",
"Eng0PropBlade2Broken",
"Eng0PropBlade3Broken",
"Engine Plug 0 failure",
"FuelTank0TinyLeak",
"FuelTank0SmallLeak",
"FuelTank0LargeLeak",
"FuelTank0Fire",
"FuelTank0Exploded",
"FuelTank0HosePerforated",
"FuelTank0PumpFailure",
"Machinegun00Failure",
"Machinegun00BeltBroken",
"Machinegun00Jammed",
"Machinegun00Charged",
"Machinegun00LineDamaged",
"103 CockpitDamageFlag00: gunsight",
"104 CockpitDamageFlag01: instruments",
"CockpitDamageFlag02",
"CockpitDamageFlag03",
"CockpitDamageFlag04",
"CockpitDamageFlag05",
"CockpitDamageFlag06",
"CockpitDamageFlag07",
"CockpitDamageFlag08",
"CockpitDamageFlag09",
"CockpitDamageFlag10",
"CockpitDamageFlag11",
"CockpitDamageFlag12",
"CockpitDamageFlag13",
"CockpitDamageFlag14",
};
public override void OnTrigger(int missionNumber, string shortName, bool active)
{
if (("trigger01".Equals(shortName) && active))
{
//GamePlay.gpHUDLogCenter("Trigger Activated!");
DoDamage();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
private void DoDamage()
{
PlayerPlane = (AiAircraft)GamePlay.gpPlayer().Place();
Random RandomIncident = new Random();
for (int i = 0; i < 3; i++)
{
int j = (RandomIncident.Next(1,PlanePartsNr) -1);
PlayerPlane.hitNamed ((part.NamedDamageTypes)Enum.Parse(typeof(part.NamedDamageTypes),PlanePartsList[j]));
GamePlay.gpHUDLogCenter(PlanePartsListText[j]);
serverMessage("Failure: "+PlanePartsListText[j]);
}
}
private void serverMessage(string msg)
{
Player pl = GamePlay.gpPlayer();
Player[] players = { pl };
object[] args = { msg };
GamePlay.gpLogServer(players, msg, args);
}
public override void OnAircraftLanded(int missionNumber, string shortName, AiAircraft aircraft)
{
GamePlay.gpHUDLogCenter("Excellent, you've managed to land!");
}
public override void OnAircraftCrashLanded(int missionNumber, string shortName, AiAircraft aircraft)
{
GamePlay.gpHUDLogCenter("You've crash-landed, but you're still alive!");
}
}
I've tested it, and it works, but it is still based on a list of airplane parts (and another for failure messages). Can't it be done in a simpler way, like in a MG function hit-random-airplane-part() ?