PDA

View Full Version : Execute code from string?


salmo
04-02-2012, 11:45 AM
I know the code below fails, but can anyone provide a solution to concatonate the eDamage string & execute the randomly selected aircraft.hitNamed(part.NamedDamageTypes. line?


string[] eDamage =
{
"ElecBatteryFailure",
"ElecGeneratorFailure",
"ElecIlluminationFailure",
"ElecMasterCompassFailure",
"ElecPrimaryFailure",
"ElecPriNavigationFailure",
"ElecSecNavigationFailure",
"ElecSecondaryFailure",
"ElecTransceiverFailure",
"ElecWeaponryFailure"
};

// ---- Electrics failures ----=
string e = "aircraft.hitNamed(part.NamedDamageTypes." + eDamage[random.Next(eDamage.GetLowerBound(0), eDamage.GetUpperBound(0) + 1)] + ");";
//Console.WriteLine(e);
//Process.Start(e);
// string e conatins the c# code, now how to 'execute' the string as a command?
}

FG28_Kodiak
04-02-2012, 02:29 PM
Prozess.Start is for starting external programms for example:
Process.Start("http://google.com/search?q= Help me");
would start your browser with a google search for "Help me".

Its not for execute little c# snippets ;).

salmo
04-02-2012, 02:39 PM
Prozess.Start is for starting external programms for example:
Process.Start("http://google.com/search?q= Help me");
would start your browser with a google search for "Help me".

Its not for execute little c# snippets ;).

Yeah, I know Kodiak. I've seen somewhere on the forums a code snippet demonstrating what I'm looking for, but I can't find it again (damn) :)

FG28_Kodiak
04-02-2012, 03:05 PM
These?:

private void damageAiControlledPlane(AiActor actorMain)
{
foreach (AiActor actor in actorMain.Group().GetItems())
{
if (actor == null || !(actor is AiAircraft))
return;

AiAircraft aircraft = (actor as AiAircraft);

if (!isAiControlledPlane(aircraft))
return;

if (aircraft == null)
return;

aircraft.hitNamed(part.NamedDamageTypes.ControlsEl evatorDisabled);
aircraft.hitNamed(part.NamedDamageTypes.ControlsAi leronsDisabled);
aircraft.hitNamed(part.NamedDamageTypes.ControlsRu dderDisabled);
aircraft.hitNamed(part.NamedDamageTypes.FuelPumpFa ilure);

int iNumOfEngines = (aircraft.Group() as AiAirGroup).aircraftEnginesNum();
for (int i = 0; i < iNumOfEngines; i++)
{
aircraft.hitNamed((part.NamedDamageTypes)Enum.Pars e(typeof(part.NamedDamageTypes), "Eng" + i.ToString() + "TotalFailure"));
}


Timeout(300, () =>
{ destroyPlane(aircraft); }
);
}
}

Smokeynz
04-04-2012, 01:53 AM
I think you might have to list the items in a list then random select an item(line by number) to use. This may however have a parse problem where you are transfering built in code to string types(listing) and back again.(am I sick of parsing problems yes I am)

might have some syntax errors in the following, but something like, (yes this came from Kodiak :))




List<Damage> DamageList = new List<Damage>
{
new Damage ("ElecBatteryFailure"),
new Damage ("ElecGeneratorFailure")
// add each damage type(note add comma on preceeding line)

};

internal class Damage
{
public string EDamageType { get; set; }
public Damage(string eDamageType)
{
this.EDamageType = eDamageType;
}
}


//random selection
Random rand = new Random();

int i = 0;
if (DamageList.Count > 0)
i = rand.Next(0, DamageList.Count);
aircraft.hitNamed(part.NamedDamageTypes.DamageList[i].EDamageType);
});