Destruction de certains bâtiments / véhicules (maudites éoliennes...)

Démarré par paresman, 24 Janvier 2016 à 15:27:50

« précédent - suivant »

0 Membres et 2 Invités sur ce sujet

paresman

Voici un script pour détruire un certains type de batiment sur une carte :

Il est nécessaire de connaître le nom de la classe du bâtiment à détruire :
Soit en connaissant son ID sur la carte : On récupère son nom grâce à la commande typeOf :
   *-> hint str ( (typeOf ([0,0,0] nearestObject _id) );
   *-> Affichera le nom de la classe de l'objet dont le numéro d'identification est enregistré dans la variable _id (on peut simplement la remplacer par 1264217, par exemple)
Soit grace à internet :
   http://www.sirlondon.net/arma3/library.php?startpage=1&startpage=2
   http://madbull.arma.free.fr/A3_1.32_CfgVehicles_tree.html
   http://pastebin.com/pS7wRm7e
   https://community.bistudio.com/wiki/Arma_3_CfgVehicles_EMPTY

Ensuite ce petit script va gentiment faire le tour de tous les objets aux alentours du déclencheur qui l'appelle pour joyeusement détruire tous les bâtiments dont on ne veut pas.

Version script appelée par un déclencheur avec comme code, par exemple : _null = [thistrigger,500] execVM "detBat.sqf";
{
if (typeOf _x == "Land_HighVoltageColumn_F" || // Ici vérifie si l'objet est une ligne à haute-tension
typeOf _x == "Land_wpp_Turbine_V1_F")  // Ici vérifie si l'objet est une éolienne
then {_x setdamage 1;};
}
forEach nearestObjects [_this select 0, [], _this select 1];


Ce script, avec ces paramètre, détruira toutes les éoliennes et les lignes hautes-tensions dans un rayon de 500 mètres.
Pourquoi ne pas mettre un rayon plus grand ?
Parce que plus l'aire est grand, plus la fonction doit traiter d'objet.
Ce qu'elle fait c'est que pour CHACUN des objets dans un rayon de 500 mètres, y compris ceux présents sur la carte et ceux rajoutés (joueurs, voitures, etc) elle regarde sa classe et si elle correspond à une classe préenregistrée (ici il y en a deux, on aurait pu en mettre plus) alors elle détruit l'objet.
Avec un petit rayon elle n'a que quelques objets à traiter, mais si on double son rayon, alors elle aura quatres fois plus d'objets à traiter (c'est mathématiquement calculé : Aire = Pi * Rayon * Rayon)

C'est pourquoi pour un script plus otpimisé, il vaut mieux créer plusieurs déclencheurs avec des rayons limités, plutot qu'un seul qui couvre toute la carte.

Problème connu : Les éoliennes se détruisent dans un vacarme tonitruant. C'est graphiquement plaisant à l'oeil, mais ça cause grand dommage aux unités à proximité.


vincent

Ca detruit les batiments dans le déclencheur en:

Juxtaposissant un batiment detruit sur le bâtiment d origine ?
Ou en effaçant le batiment d origine pour laisser un vide à la place ?

Comme ca doit etre laborieux de récupérer tous les id à  l interieur du déclencheur, peut on endommager ou detruire (sans effacement de l objet) tout ce qui est dans le déclencheur ?


paresman

Citation de: vincent le 24 Janvier 2016 à 17:57:12
Ca detruit les batiments dans le déclencheur en:

Juxtaposissant un batiment detruit sur le bâtiment d origine ?
Ou en effaçant le batiment d origine pour laisser un vide à la place ?

Ca détruit tous les bâtiments correspondant à la classe précisée dans le rayon définie, en causant un dégât égal à 100 % de la santé de l'objet.
S'il est destructible l'objet est alors soit supprimé (c'est le cas d'une éolienne)
Soit remplacé par un modèle détruit (c'est le cas par exemple d'un avion ou d'une maison)
Si le modèle est indestructible (comme certains rochers) alors rien ne se passe.


Citation de: vincent le 24 Janvier 2016 à 17:57:12
Comme ca doit etre laborieux de récupérer tous les id à  l interieur du déclencheur, peut on endommager ou detruire (sans effacement de l objet) tout ce qui est dans le déclencheur ?
Mais c'est ce que fait mon programme.
Dans mon exemple, toutes les éoliennes et les lignes hautes-tensions dans un rayon de 500 mètres à partir du déclencheur qui appelle la fonction sont détruites.

Connaître l'ID d'un objet à détruire est absolument optionnel, c'est juste pour connaître le nom de la classe de l'objet à détruire.
L'ID n'intervient absolument  pas dans ma fonction.

vincent

Merci pour ces précisions
ca peut aider à fabriquer des villes entières detruites sans se prendre la tête ni alourdir la map.
on avait un script qui faisait ça avant mais il superposait les batiments detruits avec leur modèle d origine donc risque de lag si on abusait du script

a tester


paresman

Citation de: vincent le 24 Janvier 2016 à 18:18:05
on avait un script qui faisait ça avant mais il superposait les batiments detruits avec leur modèle d origine donc risque de lag si on abusait du script

Je pense que le problème sera aussi présent sur mon script, je m'y pencherais plus quand je serais motivé.