Français Solved Récolte d'objet physique

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

Azinox

User
29/12/19
19
1
1
100
Bonjour,


Travaillants actuellement sur un projet en développement je bosse actuellement sur la partie ressource.

Ne voulant utiliser uniquement des objets physiques et supprimer complètement les objets virtuels, je rédige ce poste pour avoir un peu d'aide.

Je possède actuellement le script mining et j'aimerai pouvoir ramasser un item physique sans avoir une pioche ou une hache juste à la main dans une vigne sur malden (avec un marqeur par exemple pour délimiter la zone) comme les ressources de base mais au lieu de recevoir un item virtuel il me faudrait un item physique, pour ce qui est du traitement, le fichier mining est assez clair je pense savoir comment faire pour paramétrer le traitement.
Mais pour ce qui est de la récolte je ne sais pas comment créer une zone qui permettrait de ramasser un objet physique.


Si vous avez des idées, ou des conseils je suis preneur.
Merci à vous :)
Azinox
 
Solution
Hello !

Pour ramasser les objets, le plus simple est d'utiliser le script de base avec le Config_Gather.hpp mais de modifier le type d'item qui est donné (il faudra donc mettre des classname d'objets physiques dans ton config).
Pour ça, dans ton fn_mine.sqf trouve ce code :
Code:
_diff = [_mined, _amount, life_carryWeight, life_maxWeight] call life_fnc_calWeightDiff;
if (_diff isEqualTo 0) exitWith {
    hint localize "STR_NOTF_InvFull";
    life_action_inUse = false;
};
et remplace-le par :
Code:
if !(player canAdd _mined) exitWith {
    hint localize "STR_NOTF_InvFull";
    life_action_inUse = false;
};

Puis trouve ce code :
Code:
if (([true, _mined, _diff] call life_fnc_handleInv)) then {
    _itemName =...
--- Ce message a été généré automatiquement par ChatGPT, le contenu peut être incorrect. Veuillez lire le message avec précaution ! ---

Bonjour Azinox,

Pour ramasser un objet physique sans outil, vous pouvez définir une zone de ramassage et utiliser la commande nearestObject pour détecter l'objet à proximité du joueur. Ensuite, vous pouvez utiliser action pour permettre au joueur d'interagir avec l'objet et de le ramasser à la main.

Voici un exemple de code pour vous aider à démarrer :
Code:
_zone = createTrigger [...]; // Créer une zone de ramassage
this addAction ["Ramasser l'objet", { [...]; }]; // Action pour ramasser l'objet

N'oubliez pas d'adapter le script à vos besoins spécifiques et de consulter la documentation SQF pour plus d'informations.

Bon courage pour votre projet !

--- 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 !

Pour ramasser les objets, le plus simple est d'utiliser le script de base avec le Config_Gather.hpp mais de modifier le type d'item qui est donné (il faudra donc mettre des classname d'objets physiques dans ton config).
Pour ça, dans ton fn_mine.sqf trouve ce code :
Code:
_diff = [_mined, _amount, life_carryWeight, life_maxWeight] call life_fnc_calWeightDiff;
if (_diff isEqualTo 0) exitWith {
    hint localize "STR_NOTF_InvFull";
    life_action_inUse = false;
};
et remplace-le par :
Code:
if !(player canAdd _mined) exitWith {
    hint localize "STR_NOTF_InvFull";
    life_action_inUse = false;
};

Puis trouve ce code :
Code:
if (([true, _mined, _diff] call life_fnc_handleInv)) then {
    _itemName = M_CONFIG(getText, "VirtualItems", _mined, "displayName");
    titleText[format [localize "STR_NOTF_Mine_Success", (localize _itemName), _diff], "PLAIN"];
};
et remplace-le par :
Code:
_diff = 0;
for "_i" from 0 to _amount do {
    if (player canAdd _mined) then {
        player addItem _mined;
        _diff = _diff + 1;
    };
};
_itemInfo = [_item] call life_fnc_fetchCfgDetails;
titleText[format [localize "STR_NOTF_Mine_Success", (_itemInfo select 1), _diff], "PLAIN"];

Pour le traitement tu peux utiliser Farming System qui est fait pour :)
 
Solution
Hello !

Pour ramasser les objets, le plus simple est d'utiliser le script de base avec le Config_Gather.hpp mais de modifier le type d'item qui est donné (il faudra donc mettre des classname d'objets physiques dans ton config).
Pour ça, dans ton fn_mine.sqf trouve ce code :
Code:
_diff = [_mined, _amount, life_carryWeight, life_maxWeight] call life_fnc_calWeightDiff;
if (_diff isEqualTo 0) exitWith {
    hint localize "STR_NOTF_InvFull";
    life_action_inUse = false;
};
et remplace-le par :
Code:
if !(player canAdd _mined) exitWith {
    hint localize "STR_NOTF_InvFull";
    life_action_inUse = false;
};

Puis trouve ce code :
Code:
if (([true, _mined, _diff] call life_fnc_handleInv)) then {
    _itemName = M_CONFIG(getText, "VirtualItems", _mined, "displayName");
    titleText[format [localize "STR_NOTF_Mine_Success", (localize _itemName), _diff], "PLAIN"];
};
et remplace-le par :
Code:
_diff = 0;
for "_i" from 0 to _amount do {
    if (player canAdd _mined) then {
        player addItem _mined;
        _diff = _diff + 1;
    };
};
_itemInfo = [_item] call life_fnc_fetchCfgDetails;
titleText[format [localize "STR_NOTF_Mine_Success", (_itemInfo select 1), _diff], "PLAIN"];

Pour le traitement tu peux utiliser Farming System qui est fait pour :)
Merci de ton retour !
 
J'ai juste un soucis sur la dernière étape.
Mon fichier mined ressemble à ça :
Code:
if (([true, _mined, _diff] call life_fnc_handleInv)) then {
    _itemName = M_CONFIG(getText, "VirtualItems", _mined, "displayName");
    titleText[format [localize "STR_NOTF_Mine_Success", (localize _itemName), _diff], "PLAIN"];
    if (TP_JobSystem_curJob isEqualTo "miner") then {
    _chance = getNumber(missionConfigFile >> "The_Programmer_JobSystem" >> "jobs" >> "miner" >> "extras" >> "chance_to_get_exp");
    if (_chance > random 100) then {
        ["miner"] call TP_JobSystem_fnc_addExp;
    };
Je ne sais donc pas vraiment quoi remplacer pour ne pas perdre le système de job...

Et quand tu dis déclarer des classe name dans le config vItems ou dans le config gather ?
 
Dernière édition par un modérateur:
Pour Job System, ajoute à la fin de ton fichier :
Code:
if (TP_JobSystem_curJob isEqualTo "miner") then {
    _chance = getNumber(missionConfigFile >> "The_Programmer_JobSystem" >> "jobs" >> "miner" >> "extras" >> "chance_to_get_exp");
    if (_chance > random 100) then {
        ["miner"] call TP_JobSystem_fnc_addExp;
    };
};

Il faudra mettre dans ton Config_Gather.hpp les classname des objets physique (qu'il faut que tu crées avec un mod si tu ne l'as pas déjà fait).
La classname est dans le config.cpp de ton mod, ou tu peux aussi la trouver dans l'Arsenal Virtuel sur Arma