Hello,
j'aurais besoin de votre aide pour mettre en place ce petit script, j'avoue ne pas totalement saisir le fonctionnement du trunk invetory du coup je bloque un peut.
Que je vous mette dans le contexte : Les joueurs ne peuvent pas porter sur eux le pétrole et les carburants (Gasoil, SP95, Kerozene) donc pour le frame je me suis basé sur l'automining du tempest matériel pour cette partie c'est tout bon
J'ai aussi bloqué le fait que le joueur puisse prendre / déposer dans la citerne donc ça c'est bon aussi
Bon ça sers a rien la pour le coup mais je vous le met a titre d'info si il y'en à qui veulent faire pareil :
Dans mon fn_vehTakeItem je fait ça :
et dans mon fn_vehStoreItem :
Pour la zone de pompage et de traitement en réalité je l'autorise via la position d'un marker : je fait comme ceci (cette partie fonctionne nickel) :
fn_vInteractionMenu :
Vous vous douterez que j'ai ré adapter le script deviceMine à mes besoin, mais la toujours aucun problème tout va bien
C'est à partir de maintenant que ça deviens galère pour moi ^^
Donc pour le process j'appel un nouveau script qui est life_fnc_deviceProcess
Globalement ce script est basé sur device mining
Alors en l'état actuel qu'est ce qu'il se passe :
Le véhicule ne supprime pas le pétrole mais ajoute bien du diesel
En sois la ou j'aimerais bien de l'aide c'est :
Je compte aussi virer tout ce qui se trouve après la ligne 32 pour faire comme un vrai process avec un truc comme :
Et je ferais plus tard le verif si le véhicule est éteint etc etc plus tard pour le moment j'aimerais déjà réussir à faire la conversion des items ^^
Merci pour votre aide
j'aurais besoin de votre aide pour mettre en place ce petit script, j'avoue ne pas totalement saisir le fonctionnement du trunk invetory du coup je bloque un peut.
Que je vous mette dans le contexte : Les joueurs ne peuvent pas porter sur eux le pétrole et les carburants (Gasoil, SP95, Kerozene) donc pour le frame je me suis basé sur l'automining du tempest matériel pour cette partie c'est tout bon
J'ai aussi bloqué le fait que le joueur puisse prendre / déposer dans la citerne donc ça c'est bon aussi
Bon ça sers a rien la pour le coup mais je vous le met a titre d'info si il y'en à qui veulent faire pareil :
Dans mon fn_vehTakeItem je fait ça :
Code:
if (_ctrl isEqualTo "oil" || _ctrl isEqualTo "gazole" || _ctrl isEqualTo "sp95" || _ctrl isEqualTo "kerosene") exitWith {["Vous ne pouvez pas porter du liquide !",true,"fast"] call life_fnc_notification_system;};
Code:
if ((typeOf life_trunk_vehicle) == "I_Truck_02_fuel_F" || (typeOf life_trunk_vehicle) == "C_Van_01_fuel_F" || (typeOf life_trunk_vehicle) == "B_Truck_01_fuel_F") exitWith {["Vous ne pouvez par stocker cet article dans ce véhicule.",true,"fast"] call life_fnc_notification_system;};
Pour la zone de pompage et de traitement en réalité je l'autorise via la position d'un marker : je fait comme ceci (cette partie fonctionne nickel) :
fn_vInteractionMenu :
Code:
_playerPos = getPos player;
_marqueurPos1 = getMarkerPos "RES_oil_field_1";
_marqueurPos2 = getMarkerPos "marker_50";
_dist1 = _playerPos distance _marqueurPos1;
_dist2 = _playerPos distance _marqueurPos2;
if (_dist1 < 30) then {
if (typeOf (_curTarget) in ["C_Van_01_fuel_F","I_Truck_02_fuel_F","B_Truck_01_fuel_F"] && _curTarget in life_vehicles) then {
_Btn3 ctrlSetText "Commencer le pompage";
_Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_deviceMine";
if (!license_civ_refinnerie) then {
_Btn3 ctrlEnable false;
_Btn3 ctrlSetText "Licence raffineur requise";
} else {
_Btn3 ctrlEnable true;
};
} else {
_Btn3 ctrlShow false;
};
} else {
if (typeOf (_curTarget) in ["C_Van_01_fuel_F","I_Truck_02_fuel_F","B_Truck_01_fuel_F"] && _curTarget in life_vehicles) then {
_Btn3 ctrlSetText "Trop loin du gisement";
_Btn3 ctrlEnable false;
} else {
_Btn3 ctrlShow false;
};
};
_dist2 = _playerPos distance _marqueurPos2;
if (_dist2 < 30) then {
if (typeOf (_curTarget) in ["C_Van_01_fuel_F","I_Truck_02_fuel_F","B_Truck_01_fuel_F"] && _curTarget in life_vehicles) then {
_Btn4 ctrlSetText "Transformer en gasoil";
_Btn4 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_deviceProcess";
if (!license_civ_refinnerie) then {
_Btn4 ctrlEnable false;
_Btn4 ctrlSetText "Licence raffineur requise";
} else {
_Btn4 ctrlEnable true;
};
} else {
_Btn4 ctrlShow false;
};
} else {
if (typeOf (_curTarget) in ["C_Van_01_fuel_F","I_Truck_02_fuel_F","B_Truck_01_fuel_F"] && _curTarget in life_vehicles) then {
_Btn4 ctrlSetText "Trop loin du traitement";
_Btn4 ctrlEnable false;
} else {
_Btn4 ctrlShow false;
};
};
C'est à partir de maintenant que ça deviens galère pour moi ^^
Donc pour le process j'appel un nouveau script qui est life_fnc_deviceProcess
Globalement ce script est basé sur device mining
Code:
#include "..\..\script_macros.hpp"
private ["_vehicle","_weight","_resource","_resourceTrt","_itemIndex","_itemIndexTrt","_sum","_itemWeight"];
_vehicle = param [0,objNull,[objNull]];
if (isNull _vehicle) exitWith {};
if (!isNil {_vehicle getVariable "mining"}) exitWith {
hint "Le véhicule travaille déjà !";
};
if (fuel _vehicle isEqualTo 0) exitWith {
titleText[localize "STR_NOTF_OutOfFuel","PLAIN"];
};
closeDialog 0; //Close the interaction menu.
life_action_inUse = true; //Lock out the interaction menu for a bit..
_weight = [_vehicle] call life_fnc_vehicleWeight;
if ((_weight select 1) >= (_weight select 0)) exitWith {
hint "Le veh est plein !";
life_action_inUse = false;
};
_resource = "oil";
_resourceTrt = "gazole";
_vehicle setVariable ["mining",true,true]; //Lock the device
_vehicle remoteExec ["life_fnc_soundDevice",RCLIENT]; //Broadcast the 'mining' sound of the device for nearby units.
life_action_inUse = false; //Unlock it since it's going to do it's own thing...
for "_i" from 0 to 1 step 0 do {
if (!alive _vehicle || isNull _vehicle) exitWith {};
if ((isEngineOn _vehicle) || ((speed _vehicle) > 5)) exitWith {
titleText[localize "STR_NOTF_MiningStopped","PLAIN"];
};
if (fuel _vehicle isEqualTo 0) exitWith {
titleText[localize "STR_NOTF_OutOfFuel","PLAIN"];
};
titleText[localize "STR_NOTF_DeviceMining","PLAIN"];
_time = time + 2;
//Wait for 27 seconds with a 'delta-time' wait.
waitUntil {
if ((isEngineOn _vehicle) || ((speed _vehicle) > 5)) exitWith {
_vehicle setVariable ["mining",nil,true];
titleText[localize "STR_NOTF_MiningStopped","PLAIN"];
true
};
if (round(_time - time) < 1) exitWith {
true
};
if (fuel _vehicle < 0.1) exitWith {
_vehicle setVariable ["mining",nil,true];
titleText[localize "STR_NOTF_OutOfFuel","PLAIN"];
true
};
sleep 0.2;
false
};
if ((isEngineOn _vehicle) || ((speed _vehicle) > 5)) exitWith {
_vehicle setVariable ["mining",nil,true];
titleText[localize "STR_NOTF_MiningStopped","PLAIN"];
};
_vehicle_data = _vehicle getVariable ["Trunk",[[],0]];
_inv = +(_vehicle_data select 0);
_invTrt = +(_vehicle_data select 0);
_space = (_vehicle_data select 1);
_spaceTrt = (_vehicle_data select 1);
_itemIndex = [_resource,_inv] call TON_fnc_index;
_itemIndexTrt = [_resourceTrt,_invTrt] call TON_fnc_index;
_weight = [_vehicle] call life_fnc_vehicleWeight;
_random = 10 + round((random(10)));
_sum = [_resource,_random,(_weight select 1),(_weight select 0)] call life_fnc_calWeightDiff; // Get a sum base of the remaining weight..
if (_sum < 1) exitWith {
titleText[localize "STR_NOTF_DeviceFull","PLAIN"];
_vehicle setVariable ["mining",nil,true];
};
if (_itemIndex isEqualTo -1) then {
_inv pushBack [_resource,_sum];
} else {
_val = (_inv select _itemIndex) select 1;
_inv set[_itemIndex,[_resource,_val + _sum]];
};
if (_itemIndexTrt isEqualTo -1) then {
_invTrt pushBack [_resourceTrt,_sum];
} else {
_valTrt = (_invTrt select _itemIndexTrt) select 1;
_invTrt set[_itemIndexTrt,[_resourceTrt,_valTrt + _sum]];
};
if (fuel _vehicle < 0.1) exitWith {
_vehicle setVariable ["mining",nil,true];
titleText[localize "STR_NOTF_OutOfFuel","PLAIN"];
};
//Locality checks...
if (local _vehicle) then {
_vehicle setFuel (fuel _vehicle)-0.01;
} else {
[_vehicle,(fuel _vehicle)-0.01] remoteExec ["life_fnc_setFuel",_vehicle];
};
if (fuel _vehicle < 0.1) exitWith {
titleText[localize "STR_NOTF_OutOfFuel","PLAIN"];
_vehicle setVariable ["mining",nil,true];
};
_itemName = M_CONFIG(getText,"VirtualItems",_resource,"displayName");
_itemNameTrt = M_CONFIG(getText,"VirtualItems",_resourceTrt,"displayName");
titleText[format [localize "STR_NOTF_DeviceMined",_sum,(localize _itemName)],"PLAIN"];
[format ["t'as recup %1 %2",_sum,(localize _itemName)],false,""] call life_fnc_notification_system;
[format ["t'as recup %1 %2",_sum,(localize _itemNameTrt)],false,""] call life_fnc_notification_system;
_itemWeight = ([_resource] call life_fnc_itemWeight) * _sum;
_itemWeightTrt = ([_resourceTrt] call life_fnc_itemWeight) * _sum;
_vehicle setVariable ["Trunk",[_inv,_space + _itemWeight],true];
_vehicle setVariable ["Trunk",[_invTrt,_spaceTrt + _itemWeightTrt],true];
[format ["t'as recup %1 %2",_sum,(localize _itemName)],false,""] call life_fnc_notification_system;
[format ["t'as recup %1 %2",_sum,(localize _itemNameTrt)],false,""] call life_fnc_notification_system;
_weight = [_vehicle] call life_fnc_vehicleWeight;
_sum = [_resource,_random,(_weight select 1),(_weight select 0)] call life_fnc_calWeightDiff; //Get a sum base of the remaining weight..
if (_sum < 1) exitWith {
_vehicle setVariable ["mining",nil,true];
titleText[localize "STR_NOTF_DeviceFull","PLAIN"];
};
sleep 2;
};
_vehicle setVariable ["mining",nil,true];
Alors en l'état actuel qu'est ce qu'il se passe :
Le véhicule ne supprime pas le pétrole mais ajoute bien du diesel
En sois la ou j'aimerais bien de l'aide c'est :
- La partie verif de si j'ai du pétrole dans la citerne
- Si j'ai 10 pétrole alors je vais pouvoir supprimé 10 pétrole et ajouté 10 gasoil
Je compte aussi virer tout ce qui se trouve après la ligne 32 pour faire comme un vrai process avec un truc comme :
Code:
disableSerialization;
"progressBar" cutRsc ["life_progress","PLAIN"];
_ui = uiNamespace getVariable "life_progress";
_progress = _ui displayCtrl 38201;
_pgText = _ui displayCtrl 38202;
_upp = "Raffinage du pétrole";
_pgText ctrlSetText format ["%2 (1%1)...","%",_upp];
_progress progressSetPosition 0.01;
_cP = 0.01;
life_is_processing = true;
for "_i" from 0 to 1 step 0 do {
uiSleep 0.28;
_cP = _cP + 0.01;
_progress progressSetPosition _cP;
_pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp];
if (dialog) exitWith {};
if (_cP >= 1) exitWith {};
if (player distance _vendor > 10) exitWith {};
if (!alive _vehicle || isNull _vehicle) exitWith {};
};
if (player distance _vendor > 10) exitWith {hint localize "STR_Process_Stay"; "progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;_vehicle setVariable ["mining",nil,true];};
if (dialog) exitWith {closeDialog 0; "progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;_vehicle setVariable ["mining",nil,true];};
if (!alive _vehicle || isNull _vehicle) exitWith {"progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;_vehicle setVariable ["mining",nil,true];};
//ICI JE SUPPRIME LE PÉTROLE
//ICI J'AJOUTE LE GASOIL
"progressBar" cutText ["","PLAIN"];
if (_minimumConversions isEqualTo (_totalConversions call BIS_fnc_lowestNum)) then {hint localize "STR_NOTF_ItemProcess";} else {hint localize "STR_Process_Partial";};
life_is_processing = false; life_action_inUse = false;
_vehicle setVariable ["mining",nil,true];
Et je ferais plus tard le verif si le véhicule est éteint etc etc plus tard pour le moment j'aimerais déjà réussir à faire la conversion des items ^^
Merci pour votre aide