PDA

View Full Version : OnActorDestroyed after a landed aircraft



_1SMV_Poppy_64
Oct-15-2014, 08:29
Hi all,

infinite variables during a parsing of a eventlog...

Now events and the question:

- Pilot A is hit by Pilot B
- Pilot A land safe on base (just some damages)
- Pilot A leave the aircraft
- Pilot A take a new aircraft (create)
- Using a script the game remove after 300 second the damaged aircraft from the game (OnActorDestroyed), so the event is wrote now

When parsing the eventlog, the pilot B earns a KILL. WORNG, is just a aircraft damage.

See the code for OnActorDestroyed (Hi Salmo, see the 5th line, do you remember? :D)



//DISTRUTTO Oggetto (aereo o oggetto dinamico - nave, veicolo, tank, treno) accade quando un oggetto di questo tipo viene distrutto
public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages)
{
base.OnActorDead(missionNumber, shortName, actor, damages);
string damageinitiators = GetDamageInitiators(damages); // richiama classe di Salmo
double posizionex = actor.Pos().x;
double posizioney = actor.Pos().y;
var fronte = GamePlay.gpFrontArmy(actor.Pos().x, actor.Pos().y);
string settore = GamePlay.gpSectorName(actor.Pos().x, actor.Pos().y);
string pilotaucciso = "AI";
string volo = actor.Name(); // testing 22/09/2014
string attoredistrutto = attoredistrutto = (actor as AiCart).InternalTypeName();
int postazione;

try // proviamo a vedere se è un aereo pilotato da umani
{
int a = 0;
for (postazione = 0; postazione < 7; postazione++) // ciclo per vedere la postazione del pilota
{
if ((actor as AiAircraft).Player(postazione) != null && a < 1) // se almeno una postazione è occupata, allora l'aereo è pilotato da un umano
{
pilotaucciso = (actor as AiAircraft).Player(postazione).Name();
attoredistrutto = attoredistrutto.Substring(13); //tolgo 0:aircraft dal nome del poverino
sl.scriviLog("OnActorDead_AIR " + pilotaucciso + " aereo " + attoredistrutto + " army " + actor.Army() + " volo " + volo + " abbattuto da: " + damageinitiators + "* sul fronte " + fronte + " x " + posizionex.ToString("0") + " y " + posizioney.ToString("0") + " settore " + settore);
GamePlay.gpLogServer(null, "OnActorDead_AIR " + pilotaucciso + " aereo " + attoredistrutto + " army " + actor.Army() + " volo " + volo + " abbattuto da: " + damageinitiators + "* sul fronte " + fronte + " x " + posizionex.ToString("0") + " y " + posizioney.ToString("0") + " settore " + settore, null);
a++;
}
}
}
catch // se fallisce la ricerca
{
if (pilotaucciso == "AI") // se non è umano, vediamo se l'oggetto colpito è un aereo, se si è un AI
{
attoredistrutto = attoredistrutto.Substring(4); //tolgo bob: dal nome del poverino
if (attoredistrutto.Substring(0, 8) == "Aircraft") // se si tratta di un aereo AI ovviamente
{
attoredistrutto = attoredistrutto.Substring(9); //tolgo Aircraft. dal nome del poverino
sl.scriviLog("OnActorDead_AIR " + pilotaucciso + " aereo " + attoredistrutto + " army " + actor.Army() + " volo " + volo + " abbattuto da: " + damageinitiators + "* sul fronte " + fronte + " x " + posizionex.ToString("0") + " y " + posizioney.ToString("0") + " settore " + settore);
GamePlay.gpLogServer(null, "OnActorDead_AIR " + pilotaucciso + " aereo " + attoredistrutto + " army " + actor.Army() + " volo " + volo + " abbattuto da: " + damageinitiators + "* sul fronte " + fronte + " x " + posizionex.ToString("0") + " y " + posizioney.ToString("0") + " settore " + settore, null);
}
else // altrimenti è un oggetto CHIEF
{
pilotaucciso = "oggetto";
sl.scriviLog("OnActorDead_CH " + pilotaucciso + " mezzo " + attoredistrutto + " army " + actor.Army() + " distrutto da: " + damageinitiators + "* sul fronte " + fronte + " x " + posizionex.ToString("0") + " y " + posizioney.ToString("0") + " settore " + settore);
GamePlay.gpLogServer(null, "OnActorDead_CH " + pilotaucciso + " mezzo " + attoredistrutto + " army " + actor.Army() + " distrutto da: " + damageinitiators + "* sul fronte " + fronte + " x " + posizionex.ToString("0") + " y " + posizioney.ToString("0") + " settore " + settore, null);
}
}
}
}

//DISTRUTTO Oggetto (accade quando l'oggetto viene rimosso dalla mappa) è quindi meglio utilizzare solo OnActorDead
public override void OnActorDestroyed(int missionNumber, string shortName, AiActor actor)
{
base.OnActorDestroyed(missionNumber, shortName, actor);
double posizionex = actor.Pos().x;
double posizioney = actor.Pos().y;
var fronte = GamePlay.gpFrontArmy(actor.Pos().x, actor.Pos().y);
string settore = GamePlay.gpSectorName(actor.Pos().x, actor.Pos().y);
string attoredistrutto = attoredistrutto = (actor as AiCart).InternalTypeName();
attoredistrutto = attoredistrutto.Substring(4); //tolgo bob: dal nome del poverino
sl.scriviLog("OnActorDestroyed " + attoredistrutto + " army " + actor.Army() + " distrutto sul fronte " + fronte + " x " + posizionex.ToString("0") + " y " + posizioney.ToString("0") + " settore " + settore);
GamePlay.gpLogServer(null, "OnActorDestroyed " + attoredistrutto + " army " + actor.Army() + " distrutto sul fronte " + fronte + " x " + posizionex.ToString("0") + " y " + posizioney.ToString("0") + " settore " + settore, null);
}

//FINE ACTOR////////////////////////////////////////////////////////////////////////////////////


I have tried to insert in an array all the shortname (so every flight is unique) to compare with the landed aircraft, BUT THERE IS NOT A SIMILAR SHORTNAME, the problem is again the same:
part of variables are different for any event and so it is difficult to compare them.

Any idea?
Thank you again!!!