Page 1 sur 1

Interdiction de tuer des civils

Posté : sam. 21 janv. 2012, 17:10
par Camille Caz
Salut, éditeurs chéris !
Dans ma prochaine mission, il ne faudra pas tuer de civil pour ne pas créer d'incident. En plus, c'est un crime.
Un déclencheur, pourrait-il repérer la mort d'un civil anonyme dont ceux ajoutés par le module "vie civile" ?

Re: Interdiction de tuer des civils

Posté : sam. 21 janv. 2012, 19:19
par =[TTK]= Yourry
Aller mon chère Camille, je partage mon savoir faire, tu partages ta fortune:

C'est plus complexe qu'avec un simple délencheur.
Parce que le module de vie civil fait apparaître et disparaître en permanence des civils et que certains civils (quand on est loin ne sont que des images).
Pour autant c'est pas si complexe.

Dans l'init de ta mission tu mets:

Code : Tout sélectionner

//Dans l'init de la mission:
if(isServer) then {
     compteur_civils_tues = 0;
     publicVariable"compteur_civils_tues";
}; 
Dans l'init du module de vie civil:

Code : Tout sélectionner

[
    bis_alice_mainscope,
    "ALICE_civilianinit",
    [{
        _this addEventHandler ["killed",{
            if(isServer) then {
                _civ = _this select 0;
                _killer = _this select 1;
                nul=[_civ,_killer]execVM"compteur_civ_tue.sqf";
            };
        }]
    }]
] call bis_fnc_variablespaceadd; 
Pour finir le script, que tu nommes: "compteur_civ_tue.sqf" et que tu place dans ta mission:

Code : Tout sélectionner

//Le script:
/*
L'envent handler "killed" connait un bug lorsqu'on écrase un civil avec un véhicule.
En effet lorsqu'un joueur écrase un civil, la commande renvois une information qui dit que le civil s'est tué (_killer == _civ).
Nous devrons donc faire deux parties dans le script:
-1ere partie pour le kill directe avec une arme par exemple et dans ce cas il suffit de voir si le tueur est un joueur (isPlayer _killer)
-2eme partie pour le kill indirect (écrasé par une voiture). On sait que notre commande nous renvoie (_killer == _civ). en cas de mort pas écrasement. Il suffit alors de chercher si une voiture est dans le coin et si le pilote de cette voiture est un joueur. Au quel cas on le puni.

plus d'info:
http://www.cfr-arma.net/forum/viewtopic.php?f=14&t=897&start=20
*/

//Nos variables:
_civ = _this select 0;
_killer = _this select 1;

if(isServer) then {
    //Première condition, si le tueur est un joueur ou une IA dans notre équipe, on ajoute +1 à notre variable:
     if (isPlayer _killer ||side _killer == playerSide) then {
         compteur_civils_tues = compteur_civils_tues + 1;
         publicVariable"compteur_civils_tues";
         //Invisible en multijoueur
         hint"un civil de tué";
     }else{
    //Si notre tueur n'est pas un joueur ou n'est dans notre camps: on va voir si notre civil est tué par lui même (cf note ci dessus)
        if (_killer == _civ) then {
        //On cherche le véhicule terrestre le plus proche de notre civil mort:
           _car = getPos _civ nearestObject "LandVehicle";
           //On récupère l'indentité du pilote
           _driver = driver _car;
           //Si le pilote est dans notre camp alors on pénalise en conséquence:
           if (side _driver == playerSide) then {
              //On enlève un 1point
                compteur_civils_tues = compteur_civils_tues + 1;
                publicVariable"compteur_civils_tues";
                //Invisible en multijoueur
                hint"un civil d'écrasé";
              };
           };
     };
 };
 
A chaque fois qu'un civil est tué notre variable "compteur_civils_tues" s'incrémente de 1.
Pour exploiter cette variable, on dit que le nombre max de kill est de 10 et si on atteint cette limite la partie est perdu:

Il te suffit alors dans un déclencheur de mettre dans la condition:

Code : Tout sélectionner

(compteur_civils_tues >= 10) 
Suractivation:

Code : Tout sélectionner

endMission "LOSER" 
A toi d'adapter le déclencheur en fonction de la punissions souhaitée.

Re: Interdiction de tuer des civils

Posté : dim. 22 janv. 2012, 18:23
par Camille Caz
Merci Yourry de répondre toujours et rapidement.

Mais je pense avoir suivi toute la procédure
à l’exception de la condition du déclencheur

(compteur_civils_tues = 1)
Parce que tuer 'un seul civil est déjà un crime impardonnable (quand tout le monde le sait).

Pourtant, c'est l'impunité totale. J'ai beau massacrer des civils, même des femmes, décimer des villages, j'ai pas l'ombre d'un signal. Pas de signal d'erreur non plus.

Re: Interdiction de tuer des civils

Posté : dim. 22 janv. 2012, 18:55
par =[TTK]= Yourry
Dans ton déclencheur en condition:
(compteur_civils_tues == 1)

C'est un double "==".

Normalement, sur l'éditeur tu doit avoir un hint qui t’avertir quand un civil est tué. Cela ne se verra pas en MP.

----- =[ EDIT DU Dim 22 Jan 2012, 18:55 ]= -----

Voici la mission de teste. Tu as juste à copier-coller les déclencheur, le script et le module de vie civil.
Teste là et tu verras cela fonctionne.

J'ai même fait une petite fin toute simple qui va bien.

:D
civ_compteur.Takistan.zip
(3.22 Kio) Téléchargé 260 fois

Re: Interdiction de tuer des civils

Posté : dim. 22 janv. 2012, 23:48
par Titi
Pour tuer plein de civil (ou IA alliés) parce que... c'est bon lol sans changer de side et devenir un ennemi donc dans le JIP mettre:

execVM "addRating.sqf";

code addRating.sqf

Code : Tout sélectionner

while {true} do {
   waitUntil {rating player < 0};
   player addRating -(rating player); 
};