94 lines
4.3 KiB
Plaintext
94 lines
4.3 KiB
Plaintext
waitUntil {!isNil "save_is_loaded"};
|
|
waitUntil {!isNil "KP_liberation_production"};
|
|
waitUntil {save_is_loaded};
|
|
|
|
sectors_recalculating = false;
|
|
sectors_timer = false;
|
|
|
|
["Production management started", "PRODUCTION"] call KPLIB_fnc_log;
|
|
private _start = 0;
|
|
while {GRLIB_endgame == 0} do {
|
|
|
|
recalculate_sectors = false;
|
|
|
|
if (((count (allPlayers - entities "HeadlessClient_F")) > 0) && ((count KP_liberation_production) > 0)) then {
|
|
waitUntil {sleep 0.5; !sectors_recalculating};
|
|
sectors_recalculating = true;
|
|
|
|
private _time_update = false;
|
|
if (sectors_timer) then {_time_update = true; sectors_timer = false;};
|
|
|
|
_start = diag_tickTime;
|
|
if (KP_liberation_production_debug > 0) then {[format ["Production interval started: %1 - _time_update: %2", diag_tickTime, _time_update], "PRODUCTION"] call KPLIB_fnc_log;};
|
|
|
|
private _tempProduction = [];
|
|
{
|
|
private _storageArray = [];
|
|
private _supplyValue = 0;
|
|
private _ammoValue = 0;
|
|
private _fuelValue = 0;
|
|
private _time = _x select 8;
|
|
|
|
private _storage = nearestObjects [(markerPos (_x select 1)), [KP_liberation_small_storage_building], 100];
|
|
_storage = _storage select {(_x getVariable ["KP_liberation_storage_type",-1]) == 1};
|
|
if ((count _storage) > 0) then {
|
|
_storage = (_storage select 0);
|
|
_storageArray = [(getPosATL _storage),(getDir _storage),(vectorUpVisual _storage)];
|
|
|
|
if (_time_update) then {
|
|
|
|
if ((_time - 1) < 1) then {
|
|
_time = KP_liberation_production_interval;
|
|
|
|
if (((count (attachedObjects _storage)) < 12) && !((_x select 7) == 3)) then {
|
|
private _crateType = KP_liberation_supply_crate;
|
|
switch (_x select 7) do {
|
|
case 1: {_crateType = KP_liberation_ammo_crate; stats_ammo_produced = stats_ammo_produced + 100;};
|
|
case 2: {_crateType = KP_liberation_fuel_crate; stats_fuel_produced = stats_fuel_produced + 100;};
|
|
default {_crateType = KP_liberation_supply_crate; stats_supplies_produced = stats_supplies_produced + 100;};
|
|
};
|
|
|
|
private _crate = [_crateType, 100, getPosATL _storage] call KPLIB_fnc_createCrate;
|
|
[_crate, _storage] call KPLIB_fnc_crateToStorage;
|
|
};
|
|
} else {
|
|
_time = _time - 1;
|
|
};
|
|
};
|
|
|
|
{
|
|
switch ((typeOf _x)) do {
|
|
case KP_liberation_supply_crate: {_supplyValue = _supplyValue + (_x getVariable ["KP_liberation_crate_value",0]);};
|
|
case KP_liberation_ammo_crate: {_ammoValue = _ammoValue + (_x getVariable ["KP_liberation_crate_value",0]);};
|
|
case KP_liberation_fuel_crate: {_fuelValue = _fuelValue + (_x getVariable ["KP_liberation_crate_value",0]);};
|
|
default {[format ["Invalid object (%1) at storage area", (typeOf _x)], "ERROR"] call KPLIB_fnc_log;};
|
|
};
|
|
} forEach (attachedObjects _storage);
|
|
};
|
|
|
|
_tempProduction pushBack [
|
|
(markerText (_x select 1)),
|
|
(_x select 1),
|
|
(_x select 2),
|
|
_storageArray,
|
|
(_x select 4),
|
|
(_x select 5),
|
|
(_x select 6),
|
|
(_x select 7),
|
|
_time,
|
|
_supplyValue,
|
|
_ammoValue,
|
|
_fuelValue
|
|
];
|
|
if (KP_liberation_production_debug > 0) then {[format ["Production Update: %1", _tempProduction select _forEachIndex], "PRODUCTION"] call KPLIB_fnc_log;};
|
|
} forEach KP_liberation_production;
|
|
|
|
_tempProduction sort true;
|
|
|
|
KP_liberation_production = +_tempProduction;
|
|
sectors_recalculating = false;
|
|
};
|
|
if (KP_liberation_production_debug > 0) then {[format ["Production interval finished - Time needed: %1 seconds", diag_tickTime - _start], "PRODUCTION"] call KPLIB_fnc_log;};
|
|
waitUntil {sleep 1; recalculate_sectors};
|
|
};
|