private ["_vector", "_idactcancel", "_idactplace", "_idactvector", "_ghost_spot", "_truedir", "_dist", "_truepos", "_sectorpos", "_building"]; if (((_this select 3) select 0) == KP_liberation_small_storage_building) then { _truepos = []; build_confirmed = 1; build_invalid = 0; KP_vector = true; _sectorpos = markerPos ([100] call KPLIB_fnc_getNearestSector); _idactcancel = player addAction ["" + localize "STR_CANCEL" + " ",{build_confirmed = 3;},"",-725,false,true,"","build_confirmed == 1"]; _idactplace = player addAction ["" + localize "STR_PLACEMENT" + " ",{build_confirmed = 2;},"",-775,false,true,"","build_invalid == 0 && build_confirmed == 1"]; _idactvector = player addAction ["" + localize "STR_VECACTION" + "",{KP_vector = !KP_vector;},"",-800,false,false,"","build_confirmed == 1"]; _ghost_spot = (markerPos "ghost_spot") findEmptyPosition [0,100]; _building = ((_this select 3) select 0) createVehicleLocal _ghost_spot; _building allowdamage false; _building setVehicleLock "LOCKED"; _building enableSimulationGlobal false; _dist = 0.6 * (sizeOf ((_this select 3) select 0)); if (_dist < 3.5) then { _dist = 3.5 }; _dist = _dist + 0.5; for [{_i=0}, {_i<5}, {_i=_i+1}] do { _building setObjectTextureGlobal [_i, '#(rgb,8,8,3)color(0,1,0,0.8)']; }; while {build_confirmed == 1 && alive player} do { _truedir = 90 - (getdir player); _truepos = [((getpos player) select 0) + (_dist * (cos _truedir)), ((getpos player) select 1) + (_dist * (sin _truedir)),0]; if ((surfaceIsWater _truepos) || (surfaceIsWater getpos player) || ((_truepos distance _sectorpos) > 100)) then { _building setpos _ghost_spot; build_invalid = 1; if(((surfaceIsWater _truepos) || (surfaceIsWater getpos player))) then { GRLIB_ui_notif = localize "STR_BUILD_ERROR_WATER"; }; if((_truepos distance _sectorpos) > 100) then { GRLIB_ui_notif = format [localize "STR_BUILD_ERROR_DISTANCE",100]; }; } else { _building setdir (getDir player); _building setpos _truepos; if (KP_vector) then { _building setVectorUp [0,0,1]; } else { _building setVectorUp surfaceNormal position _building; }; if (build_invalid == 1) then { GRLIB_ui_notif = ""; }; build_invalid = 0; }; sleep 0.05; }; GRLIB_ui_notif = ""; if (!alive player || build_confirmed == 3) then { deleteVehicle _building; }; if (build_confirmed == 2) then { _vehpos = getpos _building; _vehdir = getdir _building; deleteVehicle _building; sleep 0.1; _building = ((_this select 3) select 0) createVehicle _truepos; _building allowDamage false; _building setdir _vehdir; _building setpos _truepos; if (KP_vector) then { _building setVectorUp [0,0,1]; } else { _building setVectorUp surfaceNormal position _building; }; _building setVariable ["KP_liberation_storage_type", 1, true]; sleep 0.3; _building allowDamage true; _building setDamage 0; }; player removeAction _idactcancel; player removeAction _idactplace; player removeAction _idactvector; recalculate_sectors = true; publicVariable "recalculate_sectors"; build_confirmed = 0; } else { [player getVariable ["KPLIB_nearProd", []], ((_this select 3) select 0), clientOwner] remoteExec ["build_fac_remote_call",2]; };