Files
KPLibSumava/kp_liberation.brf_sumava/scripts/client/commander/open_logistic.sqf
Samuele Lorefice 9e023649ac initial files
2025-05-24 16:17:33 +02:00

231 lines
9.5 KiB
Plaintext

private ["_dialog", "_logi_count", "_listselect", "_selectedGroup", "_detailControls", "_nearfob", "_logi_destinations", "_mapdisplay", "_tempvariable"];
_dialog = createDialog "liberation_logistic";
_logi_count = 0;
_listselect = -1;
_selectedGroup = [];
_detailControls = [
75805,75806,75807,75808,75809,758010,758011,758012,758013,758014,758015,758016,758017,758018,
758019,758020,758021,758022,758023,758024,758025,758026,758027,758028,758029,758030,758031,
758032,758080,758081
];
_nearfob = [] call KPLIB_fnc_getNearestFob;
_logi_destinations = [];
{
_logi_destinations pushBack [(format ["FOB %1", military_alphabet select _forEachIndex]), (_x select 0), (_x select 1), (_x select 2), (_x select 3)];
} forEach KP_liberation_fob_resources;
{
_logi_destinations pushBack [(_x select 0), (markerPos (_x select 1)), (_x select 9), (_x select 10), (_x select 11)];
} forEach KP_liberation_production;
_logi_destinations sort true;
addLogiGroup = 0;
deleteLogiGroup = 0;
buyLogiTruck = 0;
sellLogiTruck = 0;
saveConvoySettings = 0;
convoyStandby = 0;
logiError = 0;
_tempvariable = nil;
disableSerialization;
waitUntil {dialog};
_mapdisplay = ((findDisplay 75802) displayCtrl 758098);
ctrlMapAnimClear _mapdisplay;
while {dialog && (alive player)} do {
"spawn_marker" setMarkerPosLocal markers_reset;
ctrlEnable [75803, false];
ctrlEnable [75804, false];
ctrlEnable [758021, false];
ctrlEnable [758022, false];
ctrlEnable [758024, false];
ctrlEnable [758025, false];
ctrlEnable [758026, false];
ctrlEnable [758027, false];
ctrlEnable [758029, false];
ctrlEnable [758030, false];
ctrlEnable [758031, false];
ctrlEnable [758032, false];
ctrlEnable [758080, false];
ctrlEnable [758081, false];
if (addLogiGroup == 1) then {
addLogiGroup = 0;
[_selectedGroup] remoteExec ["add_logiGroup_remote_call",2];
waitUntil {sleep 0.5; _logi_count != (count KP_liberation_logistics)};
};
if (deleteLogiGroup == 1) then {
deleteLogiGroup = 0;
[_selectedGroup] remoteExec ["del_logiGroup_remote_call",2];
lbSetCurSel [75802,-1];
waitUntil {sleep 0.5; _logi_count != (count KP_liberation_logistics)};
};
if (buyLogiTruck == 1) then {
buyLogiTruck = 0;
_tempvariable = _selectedGroup select 1;
[_listselect, _nearfob, clientOwner, KP_liberation_supplies, KP_liberation_ammo, KP_liberation_fuel] remoteExec ["add_logiTruck_remote_call",2];
waitUntil {sleep 0.5; (_tempvariable != ((KP_liberation_logistics select _listselect) select 1)) || (logiError == 1)};
};
if (sellLogiTruck == 1) then {
sellLogiTruck = 0;
_tempvariable = _selectedGroup select 1;
[_listselect, _nearfob, clientOwner] remoteExec ["del_logiTruck_remote_call",2];
waitUntil {sleep 0.5; (_tempvariable != ((KP_liberation_logistics select _listselect) select 1)) || (logiError == 1)};
};
if (saveConvoySettings == 1) then {
saveConvoySettings = 0;
if (((lbCurSel 758024) != -1) && ((lbCurSel 758029) != -1)) then {
[_listselect, ((_logi_destinations select lbCurSel 758024) select 1), [parseNumber ctrlText 758025,parseNumber ctrlText 758026,parseNumber ctrlText 758027], ((_logi_destinations select lbCurSel 758029) select 1), [parseNumber ctrlText 758030,parseNumber ctrlText 758031,parseNumber ctrlText 758032], clientOwner] remoteExec ["save_logi_remote_call",2];
waitUntil {sleep 0.5; (!(_selectedGroup isEqualTo (KP_liberation_logistics select _listselect))) || (logiError == 1)};
} else {
hint localize "STR_LOGISTIC_SAVE_ERROR";
};
};
if (convoyStandby == 1) then {
convoyStandby = 0;
[_listselect, clientOwner] remoteExec ["abort_logi_remote_call",2];
waitUntil {sleep 0.5; (!(_selectedGroup isEqualTo (KP_liberation_logistics select _listselect))) || (logiError == 1)};
};
logiError = 0;
_tempvariable = nil;
ctrlEnable [75803, true];
if (_logi_count != (count KP_liberation_logistics)) then {
_logi_count = (count KP_liberation_logistics);
lbClear 75802;
{
lbAdd [75802, (_x select 0)];
} forEach KP_liberation_logistics;
};
if ((_logi_count > 0) && (lbCurSel 75802 == -1)) then {
lbSetCurSel [75802,0];
};
_listselect = (lbCurSel 75802);
if ((_listselect != -1) && (_logi_count > 0)) then {
{ctrlShow [_x, true]} forEach _detailControls;
_selectedGroup = +(KP_liberation_logistics select _listselect);
if ((_selectedGroup select 7) == 0) then {
ctrlEnable [758021, true];
if ((_selectedGroup select 1) <= 0) then {
ctrlEnable [75804, true];
} else {
ctrlEnable [758022, true];
ctrlEnable [758024, true];
ctrlEnable [758025, true];
ctrlEnable [758026, true];
ctrlEnable [758027, true];
ctrlEnable [758029, true];
ctrlEnable [758030, true];
ctrlEnable [758031, true];
ctrlEnable [758032, true];
ctrlEnable [758080, true];
};
};
ctrlSetText [75805, (_selectedGroup select 0)];
switch ((_selectedGroup select 7)) do {
case 0: {ctrlSetText[758011, "-"]; ctrlSetText[75807, localize "STR_LOGISTIC_STANDBY"];};
case 1: {ctrlSetText[758011, "B"]; ctrlSetText[75807, localize "STR_LOGISTIC_LOADING"]; ctrlEnable [758081, true]; "spawn_marker" setMarkerPosLocal (_selectedGroup select 2); _mapdisplay ctrlMapAnimAdd [0.5, 0.2,(_selectedGroup select 2)]; ctrlMapAnimCommit _mapdisplay;};
case 2: {ctrlSetText[758011, "B"]; ctrlSetText[75807, localize "STR_LOGISTIC_TRAVEL"]; ctrlEnable [758081, true];};
case 3: {ctrlSetText[758011, "A"]; ctrlSetText[75807, localize "STR_LOGISTIC_LOADING"]; ctrlEnable [758081, true]; "spawn_marker" setMarkerPosLocal (_selectedGroup select 3); _mapdisplay ctrlMapAnimAdd [0.5, 0.2,(_selectedGroup select 3)]; ctrlMapAnimCommit _mapdisplay;};
case 4: {ctrlSetText[758011, "A"]; ctrlSetText[75807, localize "STR_LOGISTIC_TRAVEL"]; ctrlEnable [758081, true];};
case 5: {ctrlSetText[758011, "A"]; ctrlSetText[75807, localize "STR_LOGISTIC_ABORT"];};
case 6: {ctrlSetText[758011, "B"]; ctrlSetText[75807, localize "STR_LOGISTIC_ABORT"];};
};
((findDisplay 75802) displayCtrl 75809) ctrlSetTextColor [1,1,1,1];
if ((_selectedGroup select 8) != -1) then {
switch (_selectedGroup select 9) do {
case 2: {((findDisplay 75802) displayCtrl 75809) ctrlSetTextColor [0.9,0,0,1]; ctrlSetText[75809, localize "STR_LOGISTIC_NOSPACE"];};
case 3: {((findDisplay 75802) displayCtrl 75809) ctrlSetTextColor [0.9,0,0,1]; ctrlSetText[75809, localize "STR_LOGISTIC_NORESSOURCES"];};
default {ctrlSetText[75809,(format [localize "STR_PRODUCTION_MINUTES",(_selectedGroup select 8)])];};
};
} else {
ctrlSetText[75809, "-"];
};
ctrlSetText [758014, (str (_selectedGroup select 1))];
ctrlSetText [758016, (str ((_selectedGroup select 6) select 0))];
ctrlSetText [758018, (str ((_selectedGroup select 6) select 1))];
ctrlSetText [758020, (str ((_selectedGroup select 6) select 2))];
lbClear 758024;
lbClear 758029;
{
lbAdd [758024, format ["%1 (%2/%3/%4)",(_x select 0), (_x select 2), (_x select 3), (_x select 4)]];
lbAdd [758029, format ["%1 (%2/%3/%4)",(_x select 0), (_x select 2), (_x select 3), (_x select 4)]];
} forEach _logi_destinations;
if (!((_selectedGroup select 2) isEqualTo [0,0,0])) then {
ctrlShow [758024,false];
ctrlShow [758033,true];
{
// Why the hell does "if ((_selectedGroup select 2) isEqualTo (_x select 1)) ..." return false? -.-
if (((_selectedGroup select 2) distance2D (_x select 1) < 10)) exitWith {ctrlSetText [758033, _x select 0];};
} forEach _logi_destinations;
} else {
ctrlShow [758024,true];
ctrlShow [758033,false];
};
if (!((_selectedGroup select 3) isEqualTo [0,0,0])) then {
ctrlShow [758029,false];
ctrlShow [758034,true];
{
if (((_selectedGroup select 3) distance2D (_x select 1) < 10)) exitWith {ctrlSetText [758034, _x select 0];};
} forEach _logi_destinations;
} else {
ctrlShow [758029,true];
ctrlShow [758034,false];
};
ctrlSetText [758025, (str ((_selectedGroup select 4) select 0))];
ctrlSetText [758026, (str ((_selectedGroup select 4) select 1))];
ctrlSetText [758027, (str ((_selectedGroup select 4) select 2))];
ctrlSetText [758030, (str ((_selectedGroup select 5) select 0))];
ctrlSetText [758031, (str ((_selectedGroup select 5) select 1))];
ctrlSetText [758032, (str ((_selectedGroup select 5) select 2))];
} else {
{ctrlShow [_x, false]} forEach _detailControls;
_selectedGroup = [];
};
waitUntil {
!dialog
|| !(alive player)
|| (lbCurSel 75802) != _listselect
|| addLogiGroup != 0
|| deleteLogiGroup != 0
|| buyLogiTruck != 0
|| sellLogiTruck != 0
|| saveConvoySettings != 0
|| convoyStandby != 0
};
};
"spawn_marker" setMarkerPosLocal markers_reset;