Français Différiencer les garages selon leur position pour ranger et sortir les véhicules au même endroit

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

Mathis

The-Programmer
Membre du personnel
29/12/19
503
16
48
1 100
Bienvenue sur ce tutoriel qui vous permettra de différencier les garages entre eux selon leur position. Ainsi les véhicules rangés à un garage précis ne pourront être sortis qu'à ce garage.
Ce tutoriel fait suite à la demande d'aide de L Lilbape.

C'est parti !

Sur votre mapping, vous devriez avoir une ligne comme ceci dans l'init de l'objet pour ranger votre véhicule dans le garage :
Code:
this addAction[localize "STR_MAR_Store_vehicle_in_Garage",life_fnc_storeVehicle,"",0,false,false,"",'!life_garage_store'];

Remplacez :
Code:
life_fnc_storeVehicle
Par :
Code:
{[cursorObject,player,"kavala"] call life_fnc_storeVehicle;}

Ce qui va donner :
Code:
this addAction[localize "STR_MAR_Store_vehicle_in_Garage",{[player,false,"kavala"] call life_fnc_storeVehicle;},"",0,false,false,"",'!life_garage_store'];

Dans l'init du garage pour sortir les véhicules, remplace cette ligne :
Code:
[getPlayerUID player,playerSide,"Car",player] remoteExecCall ["TON_fnc_getVehicles",2];
Par :
Code:
[getPlayerUID player,playerSide,"Car",player,"kavala"] remoteExecCall ["TON_fnc_getVehicles",2];
Vous pouvez remplacer "kavala" par le nom de votre garage, il doit correspondre au storeVehicle de l'emplacement où vous êtes (le nom n'a pas d'importance tant que c'est les mêmes).

Dans votre core/actions/fn_storeVehicle.sqf, trouvez cette ligne :
Code:
[_vehicle,false,(_this select 1),_storetext] remoteExec ["TON_fnc_vehicleStore",RSERV];
Et remplacez-la par :
Code:
[_vehicle,false,(_this select 1),_storetext,(param [2,"",["",0]])] remoteExec ["TON_fnc_vehicleStore",RSERV];

Ajoutez à la fin de votre life_server/Functions/Systems/fn_vehicleStore.sqf :
Code:
_garageName = param [4,"",["",0]];
if (_garageName isEqualType "") then {
    if !(_garageName isEqualTo "") then {
        _query = format ["UPDATE vehicles SET garage_name='""%1""' WHERE pid='%2' AND plate='%3'",_garageName,_uid,_plate];
        [_query,1] call DB_fnc_asyncCall;
    };
};

Dans votre life_server/Functions/Systems/fn_getVehicles.sqf, remplacez :
Code:
_query = format ["SELECT id, side, classname, type, pid, alive, active, plate, color FROM vehicles WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3'",_pid,_side,_type];
Par ces lignes :
Code:
_garageName = param [4,"",[""]];
_query = format ["SELECT id, side, classname, type, pid, alive, active, plate, color FROM vehicles WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3'",_pid,_side,_type];
if !(_garageName isEqualTo "") then {
    _query = format ["SELECT id, side, classname, type, pid, alive, active, plate, color FROM vehicles WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3' AND garage_name='""%4""'",_pid,_side,_type,_garageName];
};
ATTENTION, si la ligne que vous avez dans votre fichier n'est pas exactement la même, ce qui est fort probable, ne copiez pas directement la ligne mais ajoutez les modifications sur celle que vous avez dans votre fichier.

Dans votre base de données, exécutez la requête suivante :
Code:
ALTER TABLE `vehicles` ADD COLUMN  `garage_name` TEXT NOT NULL;

-----

Si tous vos garages dépendent d'une position, il faudra définir un garage par défaut pour les nouveaux véhicules achetés qui ne sont pas rangés dans le garage avant le reboot du serveur, sinon il ne seront plus visibles nul part dans les garages.

Pour ce faire, dans votre life_server/Functions/MySQL/fn_insertVehicle.sqf, remplacez cette ligne :
Code:
_query = format ["INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate, gear, damage) VALUES ('%1', '%2', '%3', '%4', '1','1','""[[],0]""', '%5', '%6','""[]""','""[]""')",_side,_className,_type,_uid,_color,_plate];
par celle-ci :
Code:
_query = format ["INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate, gear, damage, garage_name) VALUES ('%1', '%2', '%3', '%4', '1','1','""[[],0]""', '%5', '%6','""[]""','""[]""','""kavala""')",_side,_className,_type,_uid,_color,_plate];
ATTENTION, si la ligne que vous avez dans votre fichier n'est pas exactement la même, ce qui est fort probable, ne copiez pas directement la ligne mais ajoutez les modifications sur celle que vous avez dans votre fichier.

-----

Et voilà !

Cordialement,
Forum Manager - Mathis
 
Dernière édition par un modérateur:
  • Love
Les réactions: Joe Dalton
Bonjour, super tuto en revanche est-il possible de voir les véhicules dans les autres garages pour savoir ou il ce situe ?
 
Bonjour, super tuto en revanche est-il possible de voir les véhicules dans les autres garages pour savoir ou il ce situe ?
Tout est possible en soit, il faut "juste" faire quelques modifications, dans les grandes lignes :
  • fn_getVehicles.sqf : Récupérer tous les véhicules peut importe le garage et récupérer le nom du garage
  • fn_impoundMenu.sqf : Passer le résultat dans la variable _tmp
  • fn_garageLbChange.sqf : Afficher l'information du nom du garage dans la liste, et cacher le bouton pour sortir le véhicule si ce n'est pas le bon garage
 
Tout est possible en soit, il faut "juste" faire quelques modifications, dans les grandes lignes :
  • fn_getVehicles.sqf : Récupérer tous les véhicules peut importe le garage et récupérer le nom du garage
  • fn_impoundMenu.sqf : Passer le résultat dans la variable _tmp
  • fn_garageLbChange.sqf : Afficher l'information du nom du garage dans la liste, et cacher le bouton pour sortir le véhicule si ce n'est pas le bon garage
Hey, serait-il possible d'update le tuto avec cela ?
 
Bonjour, super tuto en revanche est-il possible de voir les véhicules dans les autres garages pour savoir ou il ce situe ?
Dans le fn_getVehicles.sqf, au lieu de ce qui est dit dans le tutoriel, il faut mettre cette ligne :
Code:
_query = format ["SELECT id, side, classname, type, pid, alive, active, plate, color, garage_name, (garage_name='""%4""' OR garage_name='') FROM vehicles WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3'",_pid,_side,_type,_garageName];

Dans ton fn_impoundMenu.sqf, il faut remplacer cette ligne :
Code:
_tmp = [(_x select 2),(_x select 8)];
par :
Code:
_tmp = [(_x select 2),(_x select 8),(_x select 9),(_x select 10)];
Ou faire les adaptations nécessaire si elle a déjà été modifiée.

Dans ton fn_garageLbChange.sqf, en dessous de cette ligne :
Code:
" +(localize "STR_Shop_Veh_UI_SellP")+ " <t color='#8cff9b'>€%2</t><br/>
tu peux ajouter :
Code:
Dans le garage : " +  (_dataArr select 2) + "<br/>

Et toujours dans le même fichier, à la fin, tu peux ajouter ça pour cacher le bouton de spawn :
Code:
if ((_dataArr select 3) isEqualTo 1) then {
    ctrlShow [2804,true];
} else {
    ctrlShow [2804,false];
};

Dans le impound.hpp, il faut mettre un IDC sur le bouton de sortie :
Code:
idc = 2804;
comme ceci :
1615903237139.png
 
Dernière édition:
  • Love
Les réactions: Joe Dalton
:geek: Ah ! Je cherchais, j'avais un doute sur ces guillemets mais j'étais pas sûr du tout du tout. Merci beaucoup Maxence !! (y)
 
RE ! Désolé Mathis Mathis , je pourris ton tuto, hésitez pas à dégager mes messages ensuite :sneaky:

Maxence Maxence, suite à ta correction, plus de souci pour la BDD à afficher le contenu du garage mais j'avais cette erreur dans le "LBChange" :
garage.JPG
que j'ai tenté de corriger tout seul comme un grand 💪 comme ceci :
LBchange.JPG
Mais malgré tout, j'ai toujours un souci :
Diviseur nul.JPG
Et là, mon peu de compétences de dev' est en pls :oops:
Comme indiqué, j'ai modifié cette ligne :
Code:
_tmp = [(_x select 2),(_x select 8)];
en adaptant aux modifications déjà présentes comme ceci :
Code:
_tmp = [(_x select 2),(_x select 8),(_x select 9),(_x select 10),(_x select 11),(_x select 12)];

J'ai cherché mais comme dit plus haut, mon clavier se met à bégayer quand il voit des "_x select" ou des query :cry: Par exemple ici :
select3.JPG
Est ce que que çà ne devrait pas être "(_dataArr select 3)" sur cette ligne,
Code:
" +(localize "STR_Shop_Veh_UI_Garage") + (_dataArr select 2) "<br/>
sachant que "chez moi", le "(_dataArr select 2)" est déjà utilisé pour call le "max_controlTech_fnc_inspectionStatus" ?
 
Oups, j'ai oublié de dire que tout fonctionner désormais à merveille !! Merci à tous les 2 pour ces tutos (y)
 
Bonsoir je réouvre le sujet car quand je range le véhicule dans mon garage celui ci n'apparait pas dedans et pas dans la BDD
 
Bonjour à tous,

J'aurais besoin d'un coup de main afin de résoudre un soucis

J'ai suivi ce tuto à la lettre et depuis plus aucun véhicule ne s'affiche dans mon garage

Les anciens non plus, de plus en achetant un véhicule et en le rangeant dans un garage rien ne s'enregistre, cependant, le véhicule s'affiche dans la BDD

Merci de votre aide
 

Fichiers joints

  • 20220805114826_1.jpg
    20220805114826_1.jpg
    938 KB · Affichages: 26
Hello TartiFlette TartiFlette, tu peux faire un post dans la bonne catégorie : https://forum.the-programmer.com/category/arma-support/
Avec tous les fichiers que tu as modifié pour ce tutoriel
🙂