Blindage d'un véhicule

Pour les Masochistes Éditeurs de missions
Répondre
Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Blindage d'un véhicule

Message par =[TTK]= Yourry »

Bonjour à tous,

Je sollicite de l’aide pour un script, que je n’arrive pas à faire.
Je voudrais simplement qu’un véhicule, un scud, soit lourdement blindé (le but est qu’il faut plusieurs tir de missiles pour le détruire)
Cependant, il faut aussi qu’une seule charge de sacoche puisse le détruire.

J’ai copié une bonne partie du script des évos pour la destruction via la charge en sacoche, en revanche c'est pour les tirs de missile que cela bloque.

J'ai bien vu un post qui pourrait me servir pour "limiter la puissance" des missiles, en utilisant cet event handler:
http://www.cfr-arma.net/forum/viewtopic ... w=previous

Mais je n'arrive pas à l'inclure dans mon script.


J’ai déjà une base de script (qui fonctionne mais n'est pas complète car actuellement un missile détruit le scud) mais cela peut, peut être, vous servir. J'ai mit aussi en bas l'envent handler mais il fonctionne pas.

Merci pour votre aide

Code : Tout sélectionner

//Original by Xeno
//Modifier par [TTK] Yourry

//Le script est appellé par l'init du véhicule en question
// nul=[this]execVM"nomduscript.sqf";

// Renvoi l'objet qui appel le scrit
_obj = _this select 0;


//Réistance du scud (plus cette valeur et haute, plus celui-ci est blindé)
_blind = 0.01;


while {alive _obj} do {
//retourne la valeur de la santé du scud
_degats = getdammage _obj;
hint format ["degats %1, _blind %2",_degats,_blind];//infos
//vérifie que le scud a été endommagé
	if(_degats >_blind) then 
			{				
			//on force la valeur des dégats à 0.01 à chaque fois que le scud est abîmé
			_x =(1-(1-_blind));				
			_obj setdamage _x;			
			_blind = _blind + 0.01;
			};
			
//Section qui permet de détruire le scud avec une saccoche

_bomb = (getPos _obj nearObjects ["PipeBomb",10]) select 0;	

if(not isNull _bomb) then 
	{
		//latk = (_bomb nearObjects ["Man",10]) select 0;
		latk = nearestObject [_bomb, "Man"];
		//WaitUntil {not alive latk or isNull _bomb};
		if(isNull _bomb) then 
		{			
			_obj setDamage 1;			
		};
		if((not alive latk) and (not isNull _bomb)) then {deletevehicle _bomb; latk = objNull};
	};
	sleep 0.1;		
//Sort de la boucle et donc du script si le scud est détruit			
if (!alive _obj) then  {exitWith};	
};


/*

_obj addEventHandler["HandleDamage",{
         _level = _this select 2;         
         if ((_level > 0.001) && (_level < 0.5)) then {
				//on force la valeur des dégats à 0.01 à chaque fois que le scud est abîmé
				_x =(1-(1-_blind));	
				_obj setdamage _x;			
				//Permet de conserver l'état du scud lors des précédents dégâts
				_blind = _blind + 0.01;
           };
    }];
	
	/*




	

"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Avatar du membre
=[TTK]= Memphis007
Grand TranKilou
Grand TranKilou
Âge : 43
Messages : 3351
Enregistré le : mer. 13 janv. 2010, 15:29
Humeur : Binaire
Localisation : 127.0.0.1
Contact :

Re: Blindage d'un véhicule

Message par =[TTK]= Memphis007 »

Arf là je crois que c'est plus pour Memphis (et pour rappel tu as pris mon briefing !)

En plus ton code il est moche d'abord.
Si ya pas de shell, ya pas de plaisir...
Image

Fingers in the noise. Maxime verdâtre.

Avatar du membre
=[TTK]= Freshmeat
Retraité
Retraité
Messages : 474
Enregistré le : lun. 1 mars 2010, 13:49

Re: Blindage d'un véhicule

Message par =[TTK]= Freshmeat »

Code : Tout sélectionner

_HANDLE = monscud addeventhandler ["HandleDamage",{if(_this select 4 == "pipebomb" || _this select 4 == "timebomb") then {5000} else {0.01}}];
Moi je l'aurais tentée comme ça....
Les gens n'accordent guère d'importance à la vie, la preuve : quand ils la perdent, ils ne la réclament jamais.
[Jean Deluca]
Image

Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Re: Blindage d'un véhicule

Message par =[TTK]= Yourry »

En plus ton code il est moche d'abord.
Même si tu as raison, l'importance est de faire un truc qui fonctionne (pour bientôt j'espère :mrgreen: )

Fresh, si ta commande fonctionne, je me pend :bave:

Merci, je vais essayé tout ça.
"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Avatar du membre
=[TTK]= Freshmeat
Retraité
Retraité
Messages : 474
Enregistré le : lun. 1 mars 2010, 13:49

Re: Blindage d'un véhicule

Message par =[TTK]= Freshmeat »

Fresh, si ta commande fonctionne, je me pend
J'aurais bien dis la même chose, mais chanceux comme je suis, elle aurait trouvé le moyen de fonctionner.
Les gens n'accordent guère d'importance à la vie, la preuve : quand ils la perdent, ils ne la réclament jamais.
[Jean Deluca]
Image

Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Re: Blindage d'un véhicule

Message par =[TTK]= Yourry »

Est ce que tu peux me détailler un peu ta réponse, Fresh car je ne comprends pas bien comment fonctionne cet Event.
D'après le wiki bis, l'event ici renvoi le tableau suivant:

Code : Tout sélectionner

[unit, selectionName, damage, source, projectile]
Pas de souci pour ton"_this select 4" qui nous renvoi au type de munition.
Mais là ou je ne comprend pas, à quoi servent les deux valeurs (5000 et 0,01) que tu me donnes ?
Elles correspondent aux dégâts ?

Aussi, ce que je n'arrive pas à piger, c'est quand je met:

Code : Tout sélectionner

_obj addeventhandler ["HandleDamage",{_this select 2;} ];
hint format["degat %1", _this]
Il m'affiche bien un truc mais pas la valeur seul des dégats !
J'ai en realité toutes les valeurs du tableau qui s'affiche comme ça;
[TargetSoldier,"",0.350463,B 1-1-A:1 (Matthijs),"B_556x45_Ball"]
Le but est de dire que si les dégâts sont supérieur à une valeur, de 0,3 par exemple, on plafonne ceux-ci à max 0,3 en écrivant un truc comme ça:

Code : Tout sélectionner

_obj addEventHandler["HandleDamage",{
         _level = _this select 2;         
         if ((_level > 0.001) && (_level < 0.5)) then {
    
            //Permet de conserver l'état du scud pour les dégats suivants
            _blind = _blind + 0,3;
            //on force la valeur des dégats à 0.01 à chaque fois que le scud est abîmé
            _x =(1-(1-_blind));   
            _obj setdamage _x;     
           };
    }];

Ainsi, pour arriver à peter le scud, il faudrait un peu plus de 3 pinceaux.
Non ?

Quand je fais afficher la valeur de _level avec hint sur le script ci-dessus, j'ai "any" :?:

:(
"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Avatar du membre
=[TTK]= Freshmeat
Retraité
Retraité
Messages : 474
Enregistré le : lun. 1 mars 2010, 13:49

Re: Blindage d'un véhicule

Message par =[TTK]= Freshmeat »

Avant tout, je tiens à te préciser que je n'ai jamais utilisé cet event.
Normalement, le code que tu mets doit renvoyer les dommages à appliquer à la cible.

Il est important de faire attention au fait qu'il ne faut pas mettre le ; final en retour du if pour que la valeur soit passée en retour à la fonction de gestion des dommages, et qu'elle puisse ensuite être appliquée.

Code : Tout sélectionner

_HANDLE = monscud addeventhandler [                   // ajoute l'envent handler
          "HandleDamage"                                                    // 1er paramètre : l'event concerné
          ,                                                                           // la virgule pour séparer les paramètres
          {                                                                           // une accolade pour indiquer que le second paramètre sera du code à éxécuter
                    
                    if(_this select 4 == "pipebomb" || _this select 4 == "timebomb")          // si les dommages sont causés par une charge (je suppose que se sont les 2 classes à tester
                               then {5000}                                                                            // on renvoi 5000 de dommage pour que le scud fasse le saut
                               else {if(_this select 2 > 0.01) then {0.01} else {_this select 2}}  // sinon on plafone les dommages
           }                                                                          // on ferme l'accolade pour le source
];                                                                                   // on ferme les crochets pour les paramètres
 
L'autre approche serait de faire comme suit, mais là je ne sais pas si le EH ne risque pas de boucler du fait que l'on réaffecte directement les dommages.
Le 0 tout seul en fin de traitement sert à renvoyer 0 dommage à appliquer : il ne faut pas mettre de ; après.

Code : Tout sélectionner

_obj addEventHandler["HandleDamage",
{
         if (_this select 4 == "pipebomb" || _this select 4 == "timebomb")
                     then {_this select 0 setdamage 1;}
                     else {
                                if (_this select 2 > 0.33)
                                          then {_this select 0 setdamage (damage (_this select 0) + 0.33);}
                                          else {_this select 0 setdamage (damage (_this select 0) + _this select 2);};
          };
          0
}
];
Les gens n'accordent guère d'importance à la vie, la preuve : quand ils la perdent, ils ne la réclament jamais.
[Jean Deluca]
Image

Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Re: Blindage d'un véhicule

Message par =[TTK]= Yourry »

Je crois que je vais abandonné !
J'ai déjà passé trop d'heures dessus !

D'autant que le paramètre _this select 2; augement avec les dégâts. Plus un véhicule est endommagé, plus la balle qui le touche ferra de dégâts par rapport s'il était neuf. C'est logique mais cela fosse notre paramètre de dégâts dans l'event.

:(

Deux solutions:

-pour le détruite que du C4, sachant que même si un conducteur ce trouve dedans, on peut tuer le conducteur juste avec une balle
-augmenter la résistance du scud pour qu'il faut pas mal de chargeur pour le détruire. En revanche pour tous pour les tir qui le détruisent en un coup (c4,roquette , obus, etc.) cela n'est pas vrai et il explosera !

Je ne sais pas encore quelle solution je vais mettre dans la mission, je pense à la deux qui à mon sens est plus réaliste...
Dommage.... :(
"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Avatar du membre
Camille Caz
Grand Gourou
Grand Gourou
Âge : 83
Messages : 1814
Enregistré le : lun. 25 janv. 2010, 22:45
Humeur : paléolithique mais presque
Localisation : près de La Rochelle

Re: Blindage d'un véhicule

Message par Camille Caz »

Bof ! Faut pas non plus que ça tourne à l'obsession. Ma caisse ne m'a pas privé d'une minute de sommeil !
On n'a pas toujours ce qu'on mérite mais on ne mérite pas forcément ce qu'on a.

Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Re: Blindage d'un véhicule

Message par =[TTK]= Yourry »

Ma caisse ne m'a pas privé d'une minute de sommeil !
Je te rassure, pour moi aussi.

;)
"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Répondre