Français Solved Problème avec la création d'une action de double-clic sur l'inventaire

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

Nhexen

Technical Support - Forum Mod.
Membre du personnel
4/12/21
98
9
15
450
Bureaux de la DGSI
Bonjour ou bonsoir,

Nous avons entrepris de supprimer les items virtuels sur notre serveur et de les remplacer par des items physiques.
Afin de pouvoir utiliser les fonctions du framework, j'ai donc créé un script pour "double-cliquer" sur un item dans l'inventaire pour l'utiliser.

Cependant, cela ne marche pas et je n'arrive pas vraiment à trouver pourquoi ^^'
Si quelqu'un aurait une idée, ce serait avec plaisir

Lien du script : https://paste-me.net/juyux
 
Solution
Il est assez bizarrement fait ce code, je vais te donner une autre manière en partant de 0.

Dans ton Functions.hpp ajoute sous file = "core\actions"; :
Code:
class physicalUseItem{};

Créé un fichier fn_physicalUseItem.sqf dans core/actions :
Code:
/*
    Maxence
*/
_idc = ctrlIDC (_this select 0);
_selectedIndex = (_this select 1);
_data = format ["%1",lbData [_idc, _selectedIndex]];

switch (_data) do {
    case "item_bouteille_F": {
        ["item_bouteille_F",false] spawn life_fnc_handleItem;
        life_thirst = (life_thirst + 50) min 100;
    };

    case "item_coca_F": {
        ["item_coca_F",false] spawn life_fnc_handleItem;
        life_thirst = (life_thirst + 25) min 100;
    };

    case "item_poire_F": {...
Hello, il est pas possible de faire ceci :
Code:
["item_bouteille_F", -1] spawn life_thirst + 50;
true;
Il faudrait plutôt faire comme ça :
Code:
["item_bouteille_F",false] spawn life_fnc_handleItem;
life_thirst = (life_thirst + 50) min 100;

Je te laisse faire les adaptations pour tous les items. S'il y a un autre problème essaye de le décrire + précisément
 
  • Like
Les réactions: Nhexen
Il est assez bizarrement fait ce code, je vais te donner une autre manière en partant de 0.

Dans ton Functions.hpp ajoute sous file = "core\actions"; :
Code:
class physicalUseItem{};

Créé un fichier fn_physicalUseItem.sqf dans core/actions :
Code:
/*
    Maxence
*/
_idc = ctrlIDC (_this select 0);
_selectedIndex = (_this select 1);
_data = format ["%1",lbData [_idc, _selectedIndex]];

switch (_data) do {
    case "item_bouteille_F": {
        ["item_bouteille_F",false] spawn life_fnc_handleItem;
        life_thirst = (life_thirst + 50) min 100;
    };

    case "item_coca_F": {
        ["item_coca_F",false] spawn life_fnc_handleItem;
        life_thirst = (life_thirst + 25) min 100;
    };

    case "item_poire_F": {
        ["item_poire_F",false] spawn life_fnc_handleItem;
        life_hunger = (life_hunger + 15) min 100;
    };

    case "item_pomme_F": {
        ["item_pomme_F",false] spawn life_fnc_handleItem;
        life_hunger = (life_hunger + 15) min 100;
    };

    case "item_banane_F": {
        ["item_banane_F",false] spawn life_fnc_handleItem;
        life_hunger = (life_hunger + 50) min 100;
    };

    case "item_orange_F": {
        ["item_orange_F",false] spawn life_fnc_handleItem;
        life_hunger = (life_hunger + 25) min 100;
    };

    case "item_beef_F": {
        ["item_beef_F",false] spawn life_fnc_handleItem;
        life_hunger = (life_hunger + 75) min 100;
    };

    case "item_kebab_F": {
        ["item_kebab_F",false] spawn life_fnc_handleItem;
        life_hunger = (life_hunger + 75) min 100;
    };

    case "item_raisin_F": {
        ["item_raisin_F",false] spawn life_fnc_handleItem;
        life_hunger = (life_hunger + 10) min 100;
    };

    case "item_redbull_F": {
        ["item_redbull_F",false] spawn life_fnc_handleItem;
        life_hunger = (life_hunger + 25) min 100;

        [] spawn {
            life_redgull_effect = time;
            ["Vous n'êtes plus fatigué pendant 3 minutes", "success"] call Aquaman_fnc_notification_system;
            player enableFatigue false;
            waitUntil {!alive player || ((time - life_redgull_effect) > (3 * 60))};
            player enableFatigue true;
        };
    };

    default {};
};

true;

Ajoute à la fin de ton core/init.sqf :
Code:
[] spawn {
    while {true} do {
        waitUntil {sleep 0.1; !isNull (findDisplay 602)}; 
        {
            ((findDisplay 602) displayCtrl _x) ctrlSetEventHandler ["LBDblClick", "_this call life_fnc_physicalUseItem"]; 
        } forEach [619,633,638]; // Tenue - Veste - Sac
        waitUntil {sleep 0.1; isNull (findDisplay 602)};
    };
};
 
Solution
Bonsoir !

Après avoir essayé avec le code envoyé ça ne semble pas marcher, lorsque nous faisons un double-clic sur un item ce dernier n'est pas utilisé et ne disparaît pas.

Après recherches aucune mention dans les logs ni serveur ni client malheureusement
 
Dans le fn_physicalUseItem.sqf, sous cette ligne :
Code:
_data = format ["%1",lbData [_idc, _selectedIndex]];
tu peux ajouter pour debug :
Code:
systemChat "fn_physicalUseItem.sqf";
systemChat format ["DEBUG _selectedIndex %1",_selectedIndex];
systemChat format ["DEBUG _data %1",_data];

Et dis-moi ce qui est écrit dans le chat au moment de double-cliquer :)
 
Pour le Functions.hpp oui la modifications a bien été faite :

[CODE highlight="37"] class Actions {
file = "core\actions";
class arrestAction {};
class buyLicense {};
class captureHideout {};
class catchFish {};
class dpFinish {};
class dropFishingNet {};
class escortAction {};
class gather {};
class getDPMission {};
class gutAnimal {};
class healHospital {};
class impoundAction {};
class mine {};
class newsBroadcast {};
class packupSpikes {};
class pickupItem {};
class pickupMoney {};
class postBail {};
class processAction {};
class pulloutAction {};
class putInCar {};
class removeContainer {};
class repairTruck {};
class restrainAction {};
class robAction {};
class searchAction {};
class searchVehAction {};
class seizePlayerAction {};
class serviceChopper {};
class stopEscorting {};
class storeVehicle {};
class surrender {};
class ticketAction {};
class unrestrain {};
class physicalUseItem{};
};[/CODE]

Et voici le fichier init.sqf : https://paste-me.net/ubuxo
 
En fait il n'est pas appelé. Dans tes logs client il n'y a pas le message "End of Altis Life Client Init" qui est envoyé par le core/init.sqf à la ligne 199.
Donc il y a un truc qui bloque la suite de l'exécution dans le core/init.sqf, dnc logiquement le syncData automatique ne doit pas fonctionner non plus.

Est-ce que tu peux essayer de supprimer/commenter ces lignes :
Code:
call life_fnc_initAddAction;
[] spawn life_fnc_spawnFire;
//DISPARITION DES QUADS SUR LA MAP (pour les tuyaux)
{
    if ((typeOf _x) isEqualTo "B_Quadbike_01_F" ) then {
        _x hideObject true;
    };
} forEach vehicles;

Et de voir en jeu si ça fonctionne
Si c'est bon, tu peux essayer de mettre une partie des lignes jusqu'à ce que ça ne fonctionne plus pour trouver celle qui pose problème
Si ça fonctionne toujours pas, tu peux me renvoyer tes nouveaux logs client et ton core/init.sqf

---

UPDATE :

Je pense que c'est lié à la ligne call life_fnc_initAddAction; puisque tu as cette erreur dans le fichier :
Code:
22:52:43 Error in expression <nd = objNull;
haveldtinhand = objNull;

[
player, 
"Ranger le tuyau le plus proc>
22:52:43   Error position: <[
player, 
"Ranger le tuyau le plus proc>
22:52:43   Error Erreur générique dans une expression
22:52:43 File mpmissions\__CUR_MP.126map\incendie\tuyau\fn_initAddAction.sqf..., line 5
 
Ah oui en effet, il s’agit d’un script incendie venant d’un développeur de chez AkaMods, je vais le contacter pour voir si ce problème est connu.

En attendant je vais le désactiver et voir ce que ça donne ;)
 
Hello, alors le script est de nouveau bien appelé en retirant la partie du init.sqf qui posait problème, voici les informations qui apparaissent lors du double-clic

20220505013405_1.jpg
 
Avec le toolkit d'arma sa classname n'est pas affichée, peut-être dû à Ace, par contre avec des chargeurs ça semble fonctionner :
20220506235010_1.jpg

Avec le message :
20220507001928_1.jpg
 
Sinon une autre solution serait de se baser sur le nom de l'objet dans l'inventaire.
Est-ce que tu peux essayer d'ajouter ça :
Code:
systemChat format ["DEBUG lbText : %1",lbText [_idc, _selectedIndex]];
Dis-moi si ça te donne un résultat pour tous les objets, si oui on peut baser le switch sur ça pour qu'il fonctionne avec le toolkit
 
  • Like
Les réactions: SUTORU
Bonjour,

Nous n'avons plus de nouvelles de ton problème depuis plusieurs jours, as-tu trouvé une solution de ton côté ?
As-tu pu tester ce que t'as proposé Maxence ?