Fulqrum Publishing Home   |   Register   |   Today Posts   |   Members   |   UserCP   |   Calendar   |   Search   |   FAQ

Go Back   Official Fulqrum Publishing forum > Fulqrum Publishing > IL-2 Sturmovik: Cliffs of Dover > FMB, Mission & Campaign builder Discussions

Reply
 
Thread Tools Display Modes
  #1  
Old 03-13-2012, 10:24 AM
Smokeynz Smokeynz is offline
Approved Member
 
Join Date: Apr 2011
Posts: 106
Default

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.
Reply With Quote
  #2  
Old 03-13-2012, 06:09 PM
Ataros Ataros is offline
Approved Member
 
Join Date: Jun 2010
Location: USSR
Posts: 2,439
Default

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.
Reply With Quote
  #3  
Old 03-13-2012, 06:39 PM
Smokeynz Smokeynz is offline
Approved Member
 
Join Date: Apr 2011
Posts: 106
Default

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.
Reply With Quote
  #4  
Old 03-14-2012, 05:19 AM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

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)
Reply With Quote
  #5  
Old 03-14-2012, 07:49 AM
Smokeynz Smokeynz is offline
Approved Member
 
Join Date: Apr 2011
Posts: 106
Default

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.
Reply With Quote
  #6  
Old 03-14-2012, 08:30 AM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

Why so complicated

Code:
 private void damageAiControlledPlane(AiActor actorMain)
    {
        if (actorMain != null && actorMain is AiAircraft)
            if (isAiControlledPlane(actorMain as AiAircraft))
                    (actorMain as AiAircraft).Destroy();
    }
Reply With Quote
  #7  
Old 03-18-2012, 09:23 PM
Smokeynz Smokeynz is offline
Approved Member
 
Join Date: Apr 2011
Posts: 106
Default

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?
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 08:08 PM.


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