OFPEC Forum

Editors Depot - Mission Editing and Scripting => Arma2 - Editing/Scripting General => Topic started by: punisher on 12 Jul 2011, 17:43:42

Title: Destroying all buildings in an area
Post by: punisher on 12 Jul 2011, 17:43:42
Hi , im looking for a way to have all the buildings in a city start off in their destroyed state. I have encountered this in a mission before i think. The obvious way is to use a large bomb like a nuke but i want it to start of destroyed not in the process of being..
Thanks
Title: Re: Destroying all buildings in an area
Post by: aLlamaWithARifle on 12 Jul 2011, 18:34:38
Yeah using a large bomb would work but if you turn on IDs, the button just above or below Show Textures then all the buildings, trees and objects on the island will show an ID then in a trigger or your init.sqf file you can use

Code: [Select]
(object ID) setdamage 1
Just replace "ID" with the number of the building you want destroyed. I'm not entirely sure if there is an easier way destroy multiple buildings other than just typing the above code out and adding all of the IDs in it.

Edit - Just checked and apparantly this doesn't work in ArmA any more, so instead create a gamelogic and place it next to/on the building you want destroyed, give it a name. And then in a trigger or script use

Code: [Select]
((position gamelogic) nearestObject objectID) setDamage 1
Then just replace gamelogic with the name of your game logic and objectID with the ID of what you want destroyed.
Title: Re: Destroying all buildings in an area
Post by: Wolfrug on 13 Jul 2011, 15:19:31
Actually, BIS also has a function for this. I haven't tried it myself, but here's the BIKI page for it:

http://community.bistudio.com/wiki/BIS_fnc_destroyCity

You need to place down the Functions module (via F7), and then you need to make sure it's loaded before you run it, by using waituntil {!isnil "bis_fnc_init"}; So, something like this in your init.sqf might work:

Code: [Select]
waituntil {!isnil "bis_fnc_init"};
["destroyCity",500,42,[]] call bis_fnc_destroyCity;

Some notes: "destroyCity" is the name of a marker, which is at the center of the town to be destroyed. 500 is the area in meters around the marker that will be affected. 42 is seed number - this means that the same buildings will be destroyed in the same way as long as you use the same number; you can try different numbers for different effects. The empty array [] can be used to add exceptions, if you for instance don't want a certain building to be destroyed, you'd put its class name in there.

Right! Hopefully this works for you. Remember to place down the Functions module first though, or nothing will happen ;)

Wolfrug out.

Title: Re: Destroying all buildings in an area
Post by: punisher on 13 Jul 2011, 22:38:22
maybe im not doing it right, or some buildings in arma cannot be reduced to rubble? But it only seems to affect around about 1/4 buildings
Title: Re: Destroying all buildings in an area
Post by: h- on 14 Jul 2011, 10:22:06
That module is a bit sucky, I was about to suggest it myself but it wouldn't destroy all buildings, just some random ones regardless of what seed number used.
Tried using a random seed number and running it several times in a row but then it would actually "fix" some buildings it destroyed earlier.. So it's a bit "BIS'd" as usual ::)

It doesn't destroy all buildings into a pile of rubble because if the building has different destruction states it may "activate" one those instead so the large buildings that can have pieces blown off of them may only get one of those blown off.

Oh, and
Quote
["destroyCity",500,42,[]]
There is no need for the empty array there, it's optional so the function will only run through some extra hoops in vain if you add it there. Same with the seed value, it's also optional so you can add a value if you wish. Dunno what exactly it does, I guess it's some randomness thingy..
Title: Re: Destroying all buildings in an area
Post by: mr_book.PXS.Pvt on 15 Jul 2011, 00:28:14
Hiya,
how about this approach?
Code: [Select]
_buildings = [getmarkerpos "destroyCity"] nearObjects ["house", 500];
{_x setdamage 1} foreach _buildings;
Modules? Mules! Don't trust BIS!