Official Fulqrum Publishing forum

Official Fulqrum Publishing forum (http://forum.fulqrumpublishing.com/index.php)
-   FMB, Mission & Campaign builder Discussions (http://forum.fulqrumpublishing.com/forumdisplay.php?f=203)
-   -   Execute code from string? (http://forum.fulqrumpublishing.com/showthread.php?t=30870)

salmo 04-02-2012 11:45 AM

Execute code from string?
 
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?

Code:

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

Quote:

Originally Posted by FG28_Kodiak (Post 405138)
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?:
Code:

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.ControlsElevatorDisabled);
            aircraft.hitNamed(part.NamedDamageTypes.ControlsAileronsDisabled);
            aircraft.hitNamed(part.NamedDamageTypes.ControlsRudderDisabled);
            aircraft.hitNamed(part.NamedDamageTypes.FuelPumpFailure);

            int iNumOfEngines = (aircraft.Group() as AiAirGroup).aircraftEnginesNum();
            for (int i = 0; i < iNumOfEngines; i++)
            {
                aircraft.hitNamed((part.NamedDamageTypes)Enum.Parse(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 :))


Code:


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);
});



All times are GMT. The time now is 11:06 AM.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © 2007 Fulqrum Publishing. All rights reserved.