![]() |
Destroy all aircaft
Edit: Even better code to destroy all aircraft
Code:
if (GamePlay.gpArmies() != null && GamePlay.gpArmies().Length > 0) |
The problem is likely not in aircrafts, but in the side actors such as smoke, debris and craters from bombs, which creates the game itself, and does not remove properly.
My variant of function: Code:
private void DestroyAircrafts(IGamePlay game) |
Also, small remark:
Generally, it is better to use explicit conversion, because in case Foo foo = something as Foo; if something is not Foo, operator "as" return null reference, and in the file log.txt you can get uninformative message "Object reference not set to an instance of an object." If you use explicit cast Foo foo = (Foo)something; if something is not Foo, cast operator throw an exception immediately, and in the log.txt you get more informative "Unable to cast object of type 'Bar' to 'Foo'". I also want to say thank you for the source of DCE. Nice work. |
Quote:
NOT Destroyed actor: e40nRumWubHfA3gPCiI.h7LahLmVcZuiZk94t4i it has nothing to do with the airplanes, it's a bug since one of the latest patches. The number of 'not destroyed actors' varies on the map in use, channel has 9 not destroyed actors others have 6 or 13. It is cumulative, after each mission the number grows (until restart the game), so hope for the next patch. |
Quote:
Quote:
As a note to your example: Code:
private void DestroyAircrafts(IGamePlay game) Code:
if (GamePlay.gpAirGroups(army) != null && GamePlay.gpAirGroups(army).Length > 0) About the initial problem: Looks like I have to look a bit closer to see what causes this. |
Oh wait I had an idea:
If I destroyed the Aircraft this should change the content of the getItems() array. This will confuse the foreach loop and it will skip some aircraft. Obviously the aircrafts are destroyed with a small delay, that's why it is working for some aircraft and some not. Solution: Store the aircraft to destroy in a seperate list first. Then loop over this list and destroy the aircrafts in it. This way even if the content of getItems() is changed, the content of the list stays the same :) I'll check this and report back. |
Quote:
|
I am absolutely sure that group.GetItems() does not return a direct reference to an internal list of aircraft, but makes a copy. So the trick with the list is not needed.
|
Yes it returns a copy. However as I used a "for" loop I got the updated copy of the list for every iteration of the loop. Hence the list has changed for every iteration and the indices didn't match anymore to the updated list.
I changed the code to use a "foreach" loop. It's now the same code as yours, only added checks against null references. |
Ok
Whilst its nice of you to be putting these scripts up for general use........... Quote:
you can in future put an explanation of the scripts use and reason of its need. I understand clearing old aircraft frees up the missions resources and clears old planes from airfields etc etc. Not everyone will know that though. Thxz |
All times are GMT. The time now is 01:48 PM. |
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © 2007 Fulqrum Publishing. All rights reserved.