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" ?
Interdiction de tuer des civils
- Camille Caz
- 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
On n'a pas toujours ce qu'on mérite mais on ne mérite pas forcément ce qu'on a.
- =[TTK]= Yourry
- Grand Scriptou
- Âge : 36
- Messages : 1634
- Enregistré le : mer. 17 mars 2010, 16:39
- Localisation : Dans le reblochon !
Re: Interdiction de tuer des civils
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:
Dans l'init du module de vie civil:
Pour finir le script, que tu nommes: "compteur_civ_tue.sqf" et que tu place dans ta mission:
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:
Suractivation:
A toi d'adapter le déclencheur en fonction de la punissions souhaitée.
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";
};
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;
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é";
};
};
};
};
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)
Code : Tout sélectionner
endMission "LOSER"
"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
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz
- Camille Caz
- 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
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.
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.
- =[TTK]= Yourry
- Grand Scriptou
- Âge : 36
- Messages : 1634
- Enregistré le : mer. 17 mars 2010, 16:39
- Localisation : Dans le reblochon !
Re: Interdiction de tuer des civils
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.
(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.
"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
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz
Re: Interdiction de tuer des civils
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
execVM "addRating.sqf";
code addRating.sqf
Code : Tout sélectionner
while {true} do {
waitUntil {rating player < 0};
player addRating -(rating player);
};