Bonjour à tous.
Actuellement en train de travailler sur un système de traitement un peu différent de celui de base. J'ai utilisé le fn_processAction.sqf comme référence, puis fait quelques modifs pour mes besoins.
Le but est que le système traite par rapport au stock dans un objet plutôt que sur moi. Tout le système fonctionne, stockage, récupération, limite par rapport à l'item.
Même au niveau du process ça tourne, l'array se vide et se reremplis.
Si j'ai un seul objet en 1 pour 1 alors dans ce cas pas de soucis, tout fonctionne.
Si par exemple je met 10 fer brut, alors le système ne m'en rend que 1 en mettant le poids des 10.
Voici mon script complet :
Je sais que c'est un peu particulier comme code.
Si quelqu'un préfère aider via discord c'est avec plaisir aussi.
Merci d'avance à ceux qui prendrons le temps de lire.
Actuellement en train de travailler sur un système de traitement un peu différent de celui de base. J'ai utilisé le fn_processAction.sqf comme référence, puis fait quelques modifs pour mes besoins.
Le but est que le système traite par rapport au stock dans un objet plutôt que sur moi. Tout le système fonctionne, stockage, récupération, limite par rapport à l'item.
Même au niveau du process ça tourne, l'array se vide et se reremplis.
Si j'ai un seul objet en 1 pour 1 alors dans ce cas pas de soucis, tout fonctionne.
Si par exemple je met 10 fer brut, alors le système ne m'en rend que 1 en mettant le poids des 10.
Voici mon script complet :
Code:
#include "..\..\script_macros.hpp"
private ["_materialsRequired","_materialsGiven","_noLicenseCost","_text","_upp","_trunkMaxSpace"];
_ProcessAction = life_action_process;
_ProcessObject = life_trunk_process;
if (isClass (missionConfigFile >> "ProcessAction" >> life_action_process)) then {
_filter = false;
_materialsRequired = getArray (missionConfigFile >> "ProcessAction" >> life_action_process >> "MaterialsReq");
_materialsGiven = getArray (missionConfigFile >> "ProcessAction" >> life_action_process >> "MaterialsGive");
_noLicenseCost = getNumber(missionConfigFile >> "ProcessAction" >> life_action_process >> "NoLicenseCost");
_text = getText(missionConfigFile >> "ProcessAction" >> life_action_process >> "Text");
_trunkMaxSpace = getNumber(missionConfigFile >> "ProcessAction" >> life_action_process >> "TrunkSpace");
} else { hint "ERROR CONFIG";};
_itemInfo = [_materialsRequired,_materialsGiven,_noLicenseCost,(localize format ["%1",_text])];
if (count _itemInfo isEqualTo 0) exitWith {hint "BIZARRE";};
_oldItem = _itemInfo select 0;
_newItem = _itemInfo select 1;
_cost = _itemInfo select 2;
_upp = _itemInfo select 3;
_exit = false;
if (count _oldItem isEqualTo 0) exitWith {};
_trunkSpace = _ProcessObject getVariable "Trunk" select 1;
_totalConversions = [];
{
_data = _ProcessObject getVariable "Trunk" select 0;
_index = [_x select 0,_data] call TON_fnc_index;
if (_index isEqualTo -1) exitWith {_exit = true;};
_value = _data select _index select 1;
if (_value isEqualTo 0) exitWith {_exit = true;};
if (_value < (_x select 1)) exitWith {_exit = true;};
_totalConversions pushBack (floor (_value/(_x select 1)));
} forEach _oldItem;
//hint format ["%1",_oldItem];
if (_exit) exitWith {life_is_processing = false; hint localize "STR_NOTF_NotEnoughItemProcess"; life_action_inUse = false;};
_minimumConversions = _totalConversions call BIS_fnc_lowestNum;
//hint format ["%1",_totalConversions];
_oldItemWeight = 0;
{
_weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1);
_oldItemWeight = _oldItemWeight + _weight;
} count _oldItem;
_newItemWeight = 0;
{
_weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1);
_newItemWeight = _newItemWeight + _weight;
} count _newItem;
_exit = false;
if (_newItemWeight > _oldItemWeight) then {
_netChange = _newItemWeight - _oldItemWeight;
_freeSpace = _trunkMaxSpace - _trunkSpace;
if (_freeSpace < _netChange) exitWith {_exit = true;};
private _estConversions = floor(_freeSpace / _netChange);
if (_estConversions < _minimumConversions) then {
_minimumConversions = _estConversions;
};
};
if (_exit) exitWith {hint "Il n'y a pas assez d'espace dans le traitement"; life_is_processing = false;};
_multiCount = 0;
{
_multiCount = ((_x select 1)*(_minimumConversions));
} count _newItem;
_time = getNumber (missionConfigFile >> "ProcessAction" >> life_action_process >> "time");
life_trunk_process setVariable ["processEnCours",true,true];
hint format ["Vous avez lancé une fabrication, patientez %1 secondes",_time * _multiCount]; closeDialog 0;
_anim = false;
if (typeOf life_trunk_process isEqualto "Land_OLF_Sawmill_V1") then {
playSound3D ["\OLF_meubles\industrial\Sawmill_1\sounds\saw.ogg", life_trunk_process];life_trunk_process animateSource ["log_on", 1];
_anim = true;
};
life_trunk_process setVariable ["processEnCours",true,true];
disableSerialization;
"progressBar" cutRsc ["life_progress","PLAIN"];
_ui = uiNamespace getVariable "life_progress";
_progress = _ui displayCtrl 38201;
_pgText = _ui displayCtrl 38202;
_pgText ctrlSetText format ["%2 (1%1)...","%",_upp];
_progress progressSetPosition 0.01;
_cP = 0.01;
for "_i" from 0 to 1 step 0 do {
uiSleep (_time * _multiCount / 100);
_cP = _cP + 0.01;
_progress progressSetPosition _cP;
_pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp];
if (_cP >= 1) exitWith {};
};
{
_data = _ProcessObject getVariable "Trunk" select 0;
_index = [_x select 0,_data] call TON_fnc_index;
_old = _ProcessObject getVariable "Trunk" select 1;
_value = (_data select _index) select 1;
_num = ((_x select 1)*(_minimumConversions));
_weight = ([(_x select 0)] call life_fnc_itemWeight) * _num;
if (_num == _value) then {
_data deleteAt _index;
} else {
_data set[_index,[(_x select 0),(_value - _num)]];
};
life_trunk_process setVariable ["Trunk",[_data,_old - _weight],true];
} count _oldItem;
{
_data = _ProcessObject getVariable "Trunk" select 0;
_index = [_x select 0,_data] call TON_fnc_index;
_old = _ProcessObject getVariable "Trunk" select 1;
_value = (_data select _index) select 1;
_num = ((_x select 1)*(_minimumConversions));
_weight = ([(_x select 0)] call life_fnc_itemWeight) * _num;
if (_index isEqualTo -1) then {
_data pushBack [(_x select 0),(_x select 1)];
} else {
_value = _data select _index select 1;
_data set[_index,[(_x select 0),_value + _num]];
};
life_trunk_process setVariable ["Trunk",[_data,_old + _weight],true];
} count _newItem;
if (_minimumConversions isEqualTo (_totalConversions call BIS_fnc_lowestNum)) then {hint "Votre traitement a été effectué";} else {hint "Le traitement a été partiellement effectué pour cause de place.";};
if (dialog) then {
[life_trunk_process,life_action_process] call life_fnc_processInventory;
};
life_trunk_process setVariable ["processEnCours",false,true];
if (_anim) then {
life_trunk_process animateSource ["log_on", 0];
_anim = false;
};
"progressBar" cutText ["","PLAIN"];
life_trunk_process setVariable ["processEnCours",false,true];
Je sais que c'est un peu particulier comme code.
Si quelqu'un préfère aider via discord c'est avec plaisir aussi.
Merci d'avance à ceux qui prendrons le temps de lire.