Français Solved Problème avec l'ouverture d'un portail en utilisant un badge

  • Auteur de la discussion Auteur de la discussion leov670
  • Date de début Date de début

leov670

User
11/4/22
11
2
250
Bonjour,

J'ai suivi le tutoriel Ouvrir les barriere avec une touche en changeant l'emplacement cop en civilian. J'ai rajouté une condition d'un item virtuel (Badge du poral DIR nommé "portaildir") puis dans les objets auxquels cela s'applique, j'ai mis le portail dont la variable dans l'éditeur est "portail_dir_1" pour que le badge ne fonctionne que sur celui-ci et pas sur les autres portails du même type. Le seul problème est que le script ne fonctionne pas du tout car il ne veut pas prendre la variable. Si je l'enlève, le script fonctionne mais sur tous les portails, alors y-a-t-il un moyen de faire en sorte que le badge ne fonctionne que sur un portail donné ?

Voici le code dans mon core/civilian/fn_civOpenener.sqf :

Code:
 // portail DIR

if (life_inv_portaildir >= 1) then {

    if (_x animationPhase "Door_1_move" isEqualTo 1) then {
    _x animate ["Door_1_move", 0];
    } else {
    _x animate ["Door_1_move", 1];
    };
} forEach (nearestObjects [player, ["portail_dir_1"], 10]);

Merci pour votre aide
Léo
 
Solution
Il faudrait voir où est-ce que le script bloque. Pour ça tu peux ajouter des systemChat, et au moment de tester regarde ce qui s'affiche dans le chat :
Code:
systemChat "Lancement script";
if (life_inv_portaildir isEqualTo 0) exitWith {};
systemChat "Item ok";

{
    systemChat str _x;
    if (_x in [portail_dir_1]) then { // Variables des portails à ouvrir/fermer
        systemChat "Portail ok";
        if ((_x animationPhase "Door_1_move") isEqualTo 1) then {
            _x animate ["Door_1_move", 0];
        } else {
            _x animate ["Door_1_move", 1];
        };
    };
} forEach (nearestObjects [player, ["Land_ConcreteWall_01_m_gate_F","Land_ConcreteWall_01_l_gate_F"], 10]); // Classname des portails

Pour avoir plusieurs...
Hello! Est-ce que tu peux essayer comme ceci plutôt ?

Code:
if (life_inv_portaildir isEqualTo 0) exitWith {};

{
    if (_x in ["portail_dir_1"]) then { // Variables des portails à ouvrir/fermer
        if ((_x animationPhase "Door_1_move") isEqualTo 1) then {
            _x animate ["Door_1_move", 0];
        } else {
            _x animate ["Door_1_move", 1];
        };
    };
} forEach (nearestObjects [player, ["Land_BarGate_F"], 10]); // Classname des portails
 
Hello! Est-ce que tu peux essayer comme ceci plutôt ?

Code:
if (life_inv_portaildir isEqualTo 0) exitWith {};

{
    if (_x in ["portail_dir_1"]) then { // Variables des portails à ouvrir/fermer
        if ((_x animationPhase "Door_1_move") isEqualTo 1) then {
            _x animate ["Door_1_move", 0];
        } else {
            _x animate ["Door_1_move", 1];
        };
    };
} forEach (nearestObjects [player, ["Land_BarGate_F"], 10]); // Classname des portails
J'ai essayé, mais ca ne fonctionne toujours pas. Le portail ne bouge pas d'un poil. Mon fichier ressemble à ça pour l'instant :

Code:
// portail DIR

if (life_inv_portaildir isEqualTo 0) exitWith {};

{
    if (_x in ["portail_dir_1"]) then { // Variables des portails à ouvrir/fermer
        if ((_x animationPhase "Door_1_move") isEqualTo 1) then {
            _x animate ["Door_1_move", 0];
        } else {
            _x animate ["Door_1_move", 1];
        };
    };
} forEach (nearestObjects [player, ["Land_ConcreteWall_01_m_gate_F","Land_ConcreteWall_01_l_gate_F"], 10]); // Classname des portails

Et mon fn_KeyHandler.sqf pour être sur :

Code:
//O Ouverture à distance
    case 24: {
        if (!_shift && !_alt && !_ctrlKey) then {
            [] call life_fnc_civOpener;
        };
    };

De plus, la première condition me semble génânte car je voudrais ensuite rajouter à la suite le même bloc de code mais avec un badge et un portail gendarmerie par exemple. Le première condition n'empêcherait-elle pas le bon focntionnement d'un deuxième portail ?
 
Il faudrait voir où est-ce que le script bloque. Pour ça tu peux ajouter des systemChat, et au moment de tester regarde ce qui s'affiche dans le chat :
Code:
systemChat "Lancement script";
if (life_inv_portaildir isEqualTo 0) exitWith {};
systemChat "Item ok";

{
    systemChat str _x;
    if (_x in [portail_dir_1]) then { // Variables des portails à ouvrir/fermer
        systemChat "Portail ok";
        if ((_x animationPhase "Door_1_move") isEqualTo 1) then {
            _x animate ["Door_1_move", 0];
        } else {
            _x animate ["Door_1_move", 1];
        };
    };
} forEach (nearestObjects [player, ["Land_ConcreteWall_01_m_gate_F","Land_ConcreteWall_01_l_gate_F"], 10]); // Classname des portails

Pour avoir plusieurs conditions tu peux faire comme ça :
Code:
{
    if ( // Variables des portails à ouvrir/fermer
        ((_x in [portail_dir_1]) AND (life_inv_portaildir >= 1)) OR
        ((_x in [portail_police_1]) AND (life_inv_portailpolice >= 1))
    ) then {
        if ((_x animationPhase "Door_1_move") isEqualTo 1) then {
            _x animate ["Door_1_move", 0];
        } else {
            _x animate ["Door_1_move", 1];
        };
    };
} forEach (nearestObjects [player, ["Land_ConcreteWall_01_m_gate_F","Land_ConcreteWall_01_l_gate_F"], 10]); // Classname des portails
 
Dernière édition:
Solution
Il faudrait voir où est-ce que le script bloque. Pour ça tu peux ajouter des systemChat, et au moment de tester regarde ce qui s'affiche dans le chat :
Code:
systemChat "Lancement script";
if (life_inv_portaildir isEqualTo 0) exitWith {};
systemChat "Item ok";

{
    systemChat str _x;
    if (_x in ["portail_dir_1"]) then { // Variables des portails à ouvrir/fermer
        systemChat "Portail ok";
        if ((_x animationPhase "Door_1_move") isEqualTo 1) then {
            _x animate ["Door_1_move", 0];
        } else {
            _x animate ["Door_1_move", 1];
        };
    };
} forEach (nearestObjects [player, ["Land_ConcreteWall_01_m_gate_F","Land_ConcreteWall_01_l_gate_F"], 10]); // Classname des portails

Pour avoir plusieurs conditions tu peux faire comme ça :
Code:
{
    if ( // Variables des portails à ouvrir/fermer
        ((_x in ["portail_dir_1"]) AND (life_inv_portaildir >= 1)) OR
        ((_x in ["portail_police_1"]) AND (life_inv_portailpolice >= 1))
    ) then {
        if ((_x animationPhase "Door_1_move") isEqualTo 1) then {
            _x animate ["Door_1_move", 0];
        } else {
            _x animate ["Door_1_move", 1];
        };
    };
} forEach (nearestObjects [player, ["Land_ConcreteWall_01_m_gate_F","Land_ConcreteWall_01_l_gate_F"], 10]); // Classname des portails
Voila ce que je récupère dans le chat. Pas de "Portail Ok" qui s'affiche.... et merci pour le code à plusieurs conditions, ca me permettra de créer un item pour chaque portail
 

Fichiers joints

  • Capture d’écran 2022-06-08 213928.png
    Capture d’écran 2022-06-08 213928.png
    61 KB · Affichages: 6