PDA

View Full Version : Actor keys help


salmo
03-20-2012, 06:35 AM
I'm trying to cycle through the battle actors to see if a particular actor type exists, however, the actors don't seem to be registering their keys correctly. The code below constantly return zero in chat irrespective of how many actors are in the battle. Any ideas?

code removed by author

FG28_Kodiak
03-20-2012, 06:44 AM
Aha you add the keys of a empty dictonary to a list and wondering why no members is in there?


private Dictionary<String, AiActor> allActors = new Dictionary<String, AiActor>();

public override void OnActorCreated(int missionNumber, string shortName, AiActor actor)
{
base.OnActorCreated(missionNumber, shortName, actor);

allActors.Add(shortName, actor); //<=== Added to feed the dictionary

#region actor keys testing
List<string> keys = new List<string>(allActors.Keys);
sendChatMessageTo(-1, "Keys count=" + keys.Count.ToString(), null);
#endregion
}

salmo
03-20-2012, 08:30 AM
Thankyou again Kodiak. Sometimes you can look & look & can't see the wood for the trees. :oops:

Smokeynz
03-20-2012, 11:51 PM
@salmo, If you inspecting the actors to try and test for if they exist in the mission, using this I think we may bypass the null points I keep striking in other thread about testing actors for null.

In the add to list, you may need missionnumber aswell for repeats of the same mission where you will get the same actor shortname repeated. Then look for all 3 parameters.

btw I've just been working on list handling and found a simple way to find the index number of a line listing, with that you can ask for the item contents or delete the line etc.

int indexnm; // declare an int for the index number

Then search for bob as actor name in the example following, I havent done it yet, but im sure you could also look for mission,shortname and actor in one line since that is specific in one case only where as you might find several "bob" references.

indexnm = list.FindIndex(r => r.shortName.Equals("bob"));

Once you have the indexnumber you can report/manupulate the info and any other entry on that line by refering to the indexnumber

sendChatMessageTo(-1, "shortName: " + list[indexnm].shortName);

FG28_Kodiak
03-21-2012, 04:35 AM
indexnm = list.FindIndex(r => r.shortName.Equals("bob"));

You will get nothing:
Equals compares the complete string, you should use Contains(..).

Smokeynz
03-21-2012, 09:28 AM
Oddly, it works:grin:

this is an example, but I am pulling and passing a number of things now

some declarations


bool timeIO;// = true; //time indicator switch on/off
double timevalue;
double timeindicator;



after I grab data from external text file configlists
i then find the data, and parse to game

idxIO = ConfigList.FindIndex(r => r.ConfigName.Equals("timeIO"));
idxTV = ConfigList.FindIndex(s => s.ConfigName.Equals("timevalue"));
double.TryParse(ConfigList[idxTV].ConfigValue, out timevalue);



timeIO is set as "ON" or "OFF" in config.
Im trying to set as realtime update, the only bit not working. at the moment it loads on start and stop of mission.



timeIO = (ConfigList[idxIO].ConfigValue == "ON" ? true : false);
if (timeIO == true)
{
if (Time.current() >= timeindicator)
{
ScreenMsg(-1, "Elapsed Time:Min:" + timeindicator / 60 + " Secs:" + timeindicator + " Ticks:" + timeindicator * 30);
}
}
if (Time.current() >= timeindicator)
{
timeindicator = timeindicator + timevalue;
}