Interdiction de tuer des civils

Pour les Masochistes Éditeurs de missions
Répondre
Avatar du membre
Camille Caz
Grand Gourou
Grand Gourou
Âge : 84
Messages : 1814
Enregistré le : lun. 25 janv. 2010, 22:45
Humeur : paléolithique mais presque
Localisation : près de La Rochelle

Interdiction de tuer des civils

Message 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" ?
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: Interdiction de tuer des civils

Message 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.
"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 : 84
Messages : 1814
Enregistré le : lun. 25 janv. 2010, 22:45
Humeur : paléolithique mais presque
Localisation : près de La Rochelle

Re: Interdiction de tuer des civils

Message 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.
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: Interdiction de tuer des civils

Message 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é 354 fois
"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

Titi
Tout fou
Tout fou
Messages : 32
Enregistré le : dim. 19 déc. 2010, 21:22

Re: Interdiction de tuer des civils

Message 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); 
};

Répondre