![]() |
Null exception
@ kodiak or others who could ponder an issue.
We have been noticing after a mission is running for a while(it isnt consistant) we see a null exception error System.NullReferenceException: Object reference not set to an instance of an object. at(blah blah CLOD code references) I've been pondering if the reference is actually objects or lists of objects as Ai aircraft that are destroyed through despawner type methods. However the list reference is not completely cleared or purged from the system operating memory. Or if you have dual conditions to call a despawner, say at the completion of a path and time period, whre the object completes the path, the timer reference carries on and looks for the object when times up, and when the object does not exsist anymore and thus the exception. The question is, is what I discribe a possibility, then if so, how do we purge the references. I was wondering if despawners should despawn the mission number they spawn in on. |
if you have a list for example:
List<AiAircraft> PlaneList = new List<AiAircraft>(); PlaneList.Add(aircraft1); // only examples PlaneList.Add(aircraft2); aircraft2.Destroy(); So now we have the aircraft2 already in List. Maybe more of destroyed Aircrafts. To remove them from List: PlaneList.RemoveAll(item => item == null); // removes all null valued Aircrafts from list. |
Ok I can confirm after testing it is a double up on one object, being an Aiaircraft
The problem is because I have applied two options for despawning aiaircraft, one is via Ontaskcompleted or final path point, then I run Timeout(despawntime2, () => { damageAiControlledPlane(actor); }); However I also run OnActorcreated upon the same object Timeout(despawntime, () => { damageAiControlledPlane(actor); }); So hence I am trying to run the despawner upon the same object twice, in early testing the nullpointer exception did not show up, which is kinda random reaction. The theory for why I use time periods is to allow aiplane use for players, but also I want to despawn for short flight path aiaircraft, since the timer period is 45~60 minutes. So choice is, rely on one timer or somehow purge the remaining object timer Usually the problem is overall timer as this is longer, but either can also overlap. Kodiak I see how to reference a list object by null, but how to reference this aiaircraft as it is the timer acting upon the ai aircraft. Code:
|
For me it seems the error is in
Code:
private void damageAiControlledPlane(AiActor actorMain) |
hmmm that bit is straight from collection, despawner, unmodified.
Thought it was trying to handle group of planes, works without me applying several attemps to run this, as single routine ok, with double up it seems cause error. |
IIRC group must be used in case a player creates e.g. 6 bombers, then leaves his aircraft to create another group of 5 bombers, etc., etc. If each aircraft in a group is not removed this would lead to AI spamming. Groups and foreach cycle is the solution to this IIRC.
|
cheers Ataros, Yep thats how I understood it
For the moment I decided to run just one Triggered despawn timer from the On created. Actually I wonder if the despawning routine justs needs a catch for null, timers completing looking for aircraft to despawn that have been destroyed already, or despawned already. Im sure in the case of aircraft destroyed we see the same nullpoint exception looking for the aircraftat a later time. Also be nice to purge references of aircraft from the oncreated that dont exist anymore(this happens with despawner, but maybe not by ingame shot down destroyed) |
No the group is not nessesary, every Actor you created calls OnActorCreated(..) so every Actor is destroyed after the amount of time.
It's doppelt gemoppelt as we germans says ;). And there is no test if the group exists. if(actorMain.Group() != null) |
So I presume this trimmed version is all that is needed
NOTE this edit cause another error...sigh Code:
private void damageAiControlledPlane(AiActor actorMain) |
Why so complicated ;)
Code:
private void damageAiControlledPlane(AiActor actorMain) |
All times are GMT. The time now is 10:50 PM. |
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © 2007 Fulqrum Publishing. All rights reserved.