Page 1 sur 1

Blindage d'un véhicule

Posté : jeu. 17 févr. 2011, 19:58
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;
           };
    }];
	
	/*




	


Re: Blindage d'un véhicule

Posté : jeu. 17 févr. 2011, 20:04
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.

Re: Blindage d'un véhicule

Posté : jeu. 17 févr. 2011, 20:38
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....

Re: Blindage d'un véhicule

Posté : jeu. 17 févr. 2011, 22:18
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.

Re: Blindage d'un véhicule

Posté : ven. 18 févr. 2011, 08:33
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.

Re: Blindage d'un véhicule

Posté : ven. 18 févr. 2011, 13:13
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" :?:

:(

Re: Blindage d'un véhicule

Posté : ven. 18 févr. 2011, 14:39
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
}
];

Re: Blindage d'un véhicule

Posté : dim. 20 févr. 2011, 21:17
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.... :(

Re: Blindage d'un véhicule

Posté : lun. 21 févr. 2011, 10:34
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 !

Re: Blindage d'un véhicule

Posté : lun. 21 févr. 2011, 18:06
par =[TTK]= Yourry
Ma caisse ne m'a pas privé d'une minute de sommeil !
Je te rassure, pour moi aussi.

;)