![]() |
|
|
|
#1
|
|||
|
|||
|
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.
|
|
#2
|
|||
|
|||
|
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) Last edited by Smokeynz; 03-13-2012 at 06:45 PM. |
|
#3
|
|||
|
|||
|
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) |
|
#4
|
|||
|
|||
|
So I presume this trimmed version is all that is needed
NOTE this edit cause another error...sigh Code:
private void damageAiControlledPlane(AiActor actorMain)
{
if (actor == null || !(actor is AiAircraft))
return;
AiAircraft aircraft = (actor as AiAircraft);
if (!isAiControlledPlane(aircraft))
return;
if (aircraft == null)
return;
(actor as AiAircraft).Destroy();
}
Last edited by Smokeynz; 03-14-2012 at 08:27 AM. |
|
#5
|
|||
|
|||
|
Why so complicated
Code:
private void damageAiControlledPlane(AiActor actorMain)
{
if (actorMain != null && actorMain is AiAircraft)
if (isAiControlledPlane(actorMain as AiAircraft))
(actorMain as AiAircraft).Destroy();
}
|
|
#6
|
|||
|
|||
|
ok tried the last alteration, but still seeing exceptions when the timer comes to run despawner.
if (actor is AiAircraft) Timeout(despawntime, () => { damageAiControlledPlane(actor); }); i added a null check after the timeout but still problem exists if (actor is AiAircraft) Timeout(despawntime, () => { if(actor != null) damageAiControlledPlane(actor); }); basically I think the problem is the existance/ state of the object is different after aperiod than from when the timeout is called, ie the plane is just created. When the destroy actually runs, the aircraft has already been detroyed by activivity or something else. despite anull check it throws an exception. So the null is not the right check, in the wrong place or other problem is causing issue. However, I have noticed that the "on actor task completed" can have 1 ai interfere with another ai if the last path length crosses another ai path. Which makes me wonder if there is some cross over in other areas. any ideas anyone? |
|
#7
|
|||
|
|||
|
Think this explains what I am seeing, 3. Don’t kill objects too soon.
http://codebetter.com/raymondlewalle...ses-in-vb-net/ But the problem for CLOD, the Onactorcreated creates an array of objects, actors which are part of play. If you test those objects later, and they have been destroyed by play or despawning routines, they don't exist, so either the reference of "null" or the actor reference will throw an exception. For null there has to be an array member to state "are you null" . So with that, incounting exceptions of objects with no reference, it may require double listing arrays. The game creates an internal onactorcreated, you might have to create a second array to test the actors condition upon. Kinda a test of "are you alive" by comparing existance of that actor in both arrays. In play that actor meets its fate, is despawned or hangs around. In 2 of these you may incounter an object reference error if trying to clear the decks of clutter. With a second array "null" is not important, because you test against the array with array, not the "object actor" which may be automatically cleared from the onactorcreated array. confused, i am. if I am on the right track in this, we need a method to avoid object exception when dealing with object/actor tracking over the mission period. Considering that the base mission has potential to be 24/7 in summary objects/actors can lose references to themselves so that even the "null" test has no reference. this thows an exception object without a reference. |
![]() |
| Thread Tools | |
| Display Modes | |
|
|