Français Solved Condition action pour ouvrir une porte avec un item

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

cadwella

User
17/2/24
119
5
2
800
Bonjour, on a crée un bâtiment custom pour le gouvernement et dans la config des portes dans le class useractions, on a mis une condition pour n'y accèder que si le joueur à l'item de carte d'accès dans son inventaire.
Voici l'exemple d'une condition sur une porte :
class Open_door_3: Open_door_1
{
position="Da2";
condition="(('ItemGovcard' == ((assignedItems player) select 2)) && this animationPhase ""open_door_3"" < 0.5)";
statement="this animate [""open_door_3"",1]";
};
class Close_door_3: Close_door_1
{
position="Da2";
condition="(('ItemGovcard' == ((assignedItems player) select 2)) && this animationPhase ""open_door_3"" == 1)";
statement="this animate [""open_door_3"",0]";
};

Seulement une fois en jeu, avec la carte d'accès impossible d'ouvrir la porte et j'ai ce message dans mes log client :

19:23:10 Error in expression <ItemGovcard' == ((assignedItems player) select 2)) && this animationPhase "Open>
19:23:10 Error position: <select 2)) && this animationPhase "Open>
19:23:10 Error Diviseur nul

Vous savez d'où cela pourrait venir ?

Posté par @.mikelima via discord.
 
Solution
Hello, la réponse de ChatGPT est pas mal, je vais juste un peu simplifier.

La syntaxe de la fonction assignedItems n'est pas bonne :

Elle retourne un array, donc il faut faire comme ça :
Code:
condition="('ItemGovcard' in (assignedItems player)) && ((this animationPhase ""open_door_3"") < 0.5)";
Et :
Code:
condition="('ItemGovcard' in (assignedItems player)) && ((this animationPhase ""open_door_3"") == 1)";
--- Ce message a été généré automatiquement par ChatGPT, le contenu peut être incorrect. Veuillez lire le message avec précaution ! ---

Bonjour @.mikelima,

Il semble que l'erreur vienne de la façon dont vous essayez d'accéder à l'élément de l'inventaire du joueur. Au lieu de "select 2", essayez d'utiliser "select 0" pour obtenir le premier élément de l'inventaire, car les indices en SQF commencent à 0.

Modifiez donc vos conditions comme suit :
class Open_door_3: Open_door_1
{
position = "Da2";
condition = "((('ItemGovcard' in (assignedItems player)) && ((assignedItems player) select 0 == 'ItemGovcard')) && (this animationPhase ""open_door_3"" < 0.5))";
statement = "this animate [""open_door_3"",1]";
};

class Close_door_3: Close_door_1
{
position = "Da2";
condition = "((('ItemGovcard' in (assignedItems player)) && ((assignedItems player) select 0 == 'ItemGovcard')) && (this animationPhase ""open_door_3"" == 1))";
statement = "this animate [""open_door_3"",0]";
};

Cela devrait résoudre votre problème d'accès à la porte avec la carte d'accès.

Cordialement,
Bot SQF.

--- Pour continuer la discussion avec ChatGPT, cliquez sur "Répondre" en bas à droite de ce message. Sinon, attendez que quelqu'un vous réponde. ---
 
Hello, la réponse de ChatGPT est pas mal, je vais juste un peu simplifier.

La syntaxe de la fonction assignedItems n'est pas bonne :

Elle retourne un array, donc il faut faire comme ça :
Code:
condition="('ItemGovcard' in (assignedItems player)) && ((this animationPhase ""open_door_3"") < 0.5)";
Et :
Code:
condition="('ItemGovcard' in (assignedItems player)) && ((this animationPhase ""open_door_3"") == 1)";
 
Solution