private ["_tooFar","_nearLog","_startpos","_camera","_logicGrp","_logicASL","_nvgstate","_loaded","_localtime", "_player","_preview","_get","_border","_itemcash","_itemcost","_a","_b","_funds","_itemclass_preview","_mhq", "_structuresCosts","_supply","_distance","_direction","_npos","_helper","_array","_hqDeployed","_index","_gdir", "_new","_color","_fundsRemaining","_isFlat","_colorGUI","_tooltip","_tooltipType","_pos","_dir","_colorGreen","_colorRed", "_colorGray","_itemclass","_itemcategory","_itemFunds","_itemname","_fileIcon","_filePicture","_textHeader", "_textPicture","_type","_text1","_status","_text2","_text3","_textHint","_textControls","_cashValues","_cashValuesOld", "_cashValue","_cashDescription","_cashText","_cashLines","_categories","_categoriesMenu","_limit","_buildLimit","_buildings", "_checks","_canAfford","_canAffordCount","_text","_arrayNames","_arrayNamesLong","_arrayEnable","_arrayParams", "_find","_category","_cashValuesCount","_cashSize","_cashPos","_upgrades","_items","_canAffordCountOld", "_params","_selected","_oldTooltip","_fundsDescription","_restart","_logic", "_mode","_areasize","_limitH","_limitV","_limitHOld","_limitVOld","_oldMenu","_source", "_bns","_greenList","_buildingsNames","_buildingsType","_createBorder","_createBorderScope","_maxGrad","_minDist"]; _logic = _this select 3; _startPos = _this select 4; _source = _this select 5; if !(alive _source) exitWith {}; //--- Area limits. _root = "REPAIR"; _hq = (sideJoined) Call GetSideHQ; if (_source == _hq) then {_root = "HQ"}; _tooFar = false; if (paramBaseArea) then { if (_source == _hq) then { if (count(WF_Logic getVariable Format ['%1Area',SideJoinedText]) >= ('WFBE_BASEAREAMAX' Call GetNamespace)) then { _nearLog = [_startPos,WF_Logic getVariable Format ['%1Area',SideJoinedText]] Call SortByDistance; _startpos = position (_nearLog select 0); if (_source distance _startpos > ('WFBE_MHQBUILDINGRANGE' Call GetNamespace)) exitWith { _tooFar = true; }; }; }; }; if (isNil 'WFBE_COIN_Root') then {WFBE_COIN_Root = ""}; if (WFBE_COIN_Root != _root) then {lastBuilt = []}; WFBE_COIN_Root = _root; if (_tooFar) exitWith {hint (localize 'STR_WF_INFO_BaseArea_Reached')};//--- Base area reached. //--- Call in the construction interface. 112200 cutrsc ["WFBE_ConstructionInterface","plain"]; //---added-MrNiceGuy uiNamespace setVariable ["COIN_displayMain",finddisplay 46]; //--- Terminate of system is already running if !(isNil {player getVariable "bis_coin_logic"}) exitWith {}; player setVariable ["bis_coin_logic",_logic]; bis_coin_player = player; _camera = BIS_CONTROL_CAM; if (isNil "BIS_CONTROL_CAM") then { _camera = "camconstruct" camCreate [position player select 0,position player select 1,15]; _camera cameraEffect ["internal","back"]; _camera camPrepareFov 0.900; _camera camPrepareFocus [-1,-1]; _camera camCommitPrepared 0; cameraEffectEnableHUD true; _camera setdir direction player; [_camera,-30,0] call BIS_fnc_setPitchBank; _camera camConstuctionSetParams ([_startPos] + (_logic getVariable "BIS_COIN_areasize")); }; BIS_CONTROL_CAM = _camera; BIS_CONTROL_CAM_LMB = false; BIS_CONTROL_CAM_RMB = false; showCinemaBorder false; 1122 cutrsc ["constructioninterface","plain"]; //--- Prevent uikey override for other mods. WF_COIN_DEH1 = (uiNamespace getVariable "COIN_displayMain") displayAddEventHandler ["KeyDown", "if !(isNil 'BIS_CONTROL_CAM_Handler') then {BIS_temp = ['keydown',_this,commandingMenu] spawn BIS_CONTROL_CAM_Handler; BIS_temp = nil;}"]; WF_COIN_DEH2 = (uiNamespace getVariable "COIN_displayMain") displayAddEventHandler ["KeyUp", "if !(isNil 'BIS_CONTROL_CAM_Handler') then {BIS_temp = ['keyup',_this] spawn BIS_CONTROL_CAM_Handler; BIS_temp = nil;}"]; WF_COIN_DEH3 = (uiNamespace getVariable "COIN_displayMain") displayAddEventHandler ["MouseButtonDown", "if !(isNil 'BIS_CONTROL_CAM_Handler') then {BIS_temp = ['mousedown',_this,commandingMenu] spawn BIS_CONTROL_CAM_Handler; BIS_temp = nil; BIS_CONTROL_CAM_onMouseButtonDown = _this; if (_this select 1 == 1) then {BIS_CONTROL_CAM_RMB = true}; if (_this select 1 == 0) then {BIS_CONTROL_CAM_LMB = true};}"]; WF_COIN_DEH4 = (uiNamespace getVariable "COIN_displayMain") displayAddEventHandler ["MouseButtonUp", "if !(isNil 'BIS_CONTROL_CAM_Handler') then {BIS_CONTROL_CAM_RMB = false; BIS_CONTROL_CAM_LMB = false;}"]; BIS_CONTROL_CAM_keys = []; if (isNil "BIS_CONTROL_CAM_ASL") then { createCenter sideLogic; _logicGrp = createGroup sidelogic; _logicASL = _logicGrp createUnit ["Logic",position player,[],0,"none"]; BIS_CONTROL_CAM_ASL = _logicASL; }; _logic setVariable ["BIS_COIN_selected",objNull]; _logic setVariable ["BIS_COIN_params",[]]; _logic setVariable ["BIS_COIN_tooltip",""]; _logic setVariable ["BIS_COIN_menu","#USER:BIS_Coin_categories_0"]; _logic setVariable ["BIS_COIN_restart",true]; _logic setVariable ["WF_RequestUpdate",false]; _get = _logic getVariable 'WF_NVGPersistent'; _nvgstate = true; if (isNil '_get') then { _nvgstate = if (daytime > 18.5 || daytime < 5.5) then {true} else {false}; _logic setVariable ['WF_NVGPersistent',_nvgstate]; } else { _nvgstate = _logic getVariable 'WF_NVGPersistent'; }; camUseNVG _nvgstate; _logic setVariable ["BIS_COIN_nvg",_nvgstate]; _bns = Format["WFBE_%1STRUCTURENAMES",sideJoinedText] Call GetNamespace; _greenList = [WESTBAR,WESTLVF,WESTHEAVY,WESTAIR,EASTBAR,EASTLVF,EASTHEAVY,EASTAIR]; //--- Building Limit Init. _buildingsNames = _bns; _buildingsNames = _buildingsNames - [_buildingsNames select 0]; _buildingsType = Format["WFBE_%1STRUCTURES",sideJoinedText] Call GetNamespace; _buildingsType = _buildingsType - [_buildingsType select 0]; //--- Open menu _logic spawn { private ["_params","_logic"]; _logic = _this; waitUntil {!isNil {_this getVariable "BIS_COIN_fundsOld"}}; while {!isNil "BIS_CONTROL_CAM"} do { waitUntil { _params = _logic getVariable "BIS_COIN_params"; if (isNil "_params") then {_params = []}; (commandingMenu == "" && count _params == 0 && !BIS_CONTROL_CAM_RMB) || isNil "BIS_CONTROL_CAM" }; if (isNil "BIS_CONTROL_CAM") exitWith {}; showCommandingMenu "#USER:BIS_Coin_categories_0"; sleep 0.01; }; }; //--- Border - temporary solution //TODO: move border if position of logic changes (eg. by placing hq) _createBorder = { private ["_dir","_xpos","_ypos","_zpos","_a","_border","_logic","_startpos","_oldBorder","_center","_size","_width","_pi","_perimeter","_wallcount","_total"]; _logic = _this select 0; _startpos = _this select 1; _oldBorder = missionNamespace getVariable "BIS_COIN_border"; if (!isNil "_oldBorder") then { {deleteVehicle _x} forEach _oldBorder; }; missionNamespace setVariable ["BIS_COIN_border",nil]; _border = []; _center = _startpos; _size = (_logic getVariable "BIS_COIN_areasize") select 0; _width = 9.998; //200/126 _width = 9.996; //150/96 _width = 9.992; //100/64 _width = 9.967; //50/32 _width = 9.917; //30/20 _width = 9.83; //20/14 _width = 9.48; //10/8 _width = 10 - (0.1/(_size * 0.2)); _width = 10; _pi = 3.14159265358979323846; _perimeter = (_size * _pi); _perimeter = _perimeter + _width - (_perimeter % _width); _size = (_perimeter / _pi); _wallcount = _perimeter / _width * 2; _total = _wallcount; for "_i" from 1 to _total do { _dir = (360 / _total) * _i; _xpos = (_center select 0) + (sin _dir) * _size; _ypos = (_center select 1) + (cos _dir) * _size; _zpos = (_center select 2); _a = "transparentwall" createVehicleLocal [_xpos,_ypos,_zpos]; _a setposasl [_xpos,_ypos,0]; _a setdir (_dir + 90); _border = _border + [_a]; }; missionNamespace setVariable ["BIS_COIN_border",_border]; }; _createBorderScope = [_logic,_startpos] spawn _createBorder; //--- This block is pretty important if !(isNil "BIS_CONTROL_CAM_Handler") exitWith {endLoadingScreen}; BIS_CONTROL_CAM_Handler = { private ["_terminate","_key","_NVGstate","_currentCash","_price","_closest","_closestType","_get","_targeting","_near","_preview", "_ctrl","_menu","_player","_border","_mode","_input", "_logic","_keysCancel","_keysBanned","_keyNightVision"]; _mode = _this select 0; _input = _this select 1; _logic = bis_coin_player getVariable "bis_coin_logic"; _terminate = false; if (isNil "_logic") exitWith {}; _keysCancel = actionKeys "MenuBack"; _keysBanned = [1]; _keyNightVision = actionKeys "NightVision"; //--- Mouse DOWN if (_mode == "mousedown") then { _key = _input select 1; if (_key == 1 && 65665 in (actionkeys "MenuBack")) then {_terminate = true}; }; //--- Key DOWN if (_mode == "keydown") then { _key = _input select 1; _ctrl = _input select 3; if !(_key in (BIS_CONTROL_CAM_keys + _keysBanned)) then {BIS_CONTROL_CAM_keys = BIS_CONTROL_CAM_keys + [_key]}; //--- Terminate CoIn if (_key in _keysCancel && isNil "BIS_Coin_noExit") then {_terminate = true}; //--- Start NVG if (_key in _keyNightVision) then { _NVGstate = !(_logic getVariable "BIS_COIN_nvg"); _logic setVariable ["BIS_COIN_nvg",_NVGstate]; _logic setVariable ['WF_NVGPersistent',_NVGstate]; camUseNVG _NVGstate; }; //--- Last Built Defense (Custom Action #1). if ((_key in (actionKeys "User15")) && count lastBuilt > 0) then { _deployed = true; if (WFBE_COIN_Root == "HQ") then {_deployed = (sideJoinedText) Call GetSideHQDeployed}; _currentCash = Call GetPlayerFunds; if (_currentCash > (lastBuilt select 2) select 1 && _deployed) then { showCommandingMenu ''; _logic setVariable ["BIS_COIN_params",lastBuilt]; }; }; //--- Manning Defense (Custom Action #2). if ((_key in (actionKeys "User16")) && (('WFBE_AIDEFENSE' Call GetNamespace) > 0)) then { if (manningDefense) then {manningDefense = false} else {manningDefense = true}; _status = if (manningDefense) then {localize "STR_WF_On"} else {localize "STR_WF_Off"}; _logic setVariable ["WF_RequestUpdate",true]; }; //--- Sell Defense. (Commander only) (Custom Action #3). if ((_key in (actionKeys "User17")) && !isNull(commanderTeam)) then { if(commanderTeam == clientTeam) then { _preview = _logic getVariable "BIS_COIN_preview"; if (isNil "_preview") then {//--- Proceed when there is no preview. _targeting = screenToWorld [0.5,0.5]; _near = nearestObjects [_targeting,Format["WFBE_%1DEFENSENAMES",sideJoinedText] Call GetNamespace,25]; if (count _near > 0) then { _closest = _near select 0; _sold = _closest getVariable 'sold'; _closestType = typeOf (_closest); _get = _closestType Call GetNamespace; if (!isNil '_get' && isNil '_sold') then { _closest setVariable ['sold',true]; _price = _get select QUERYUNITPRICE; round(_price/2) Call ChangePlayerFunds; deleteVehicle _closest; }; }; }; }; }; }; //--- Key UP if (_mode == "keyup") then { _key = _input select 1; if (_key in BIS_CONTROL_CAM_keys) then {BIS_CONTROL_CAM_keys = BIS_CONTROL_CAM_keys - [_key]}; }; //--- Deselect or Close if (_terminate) then { _menu = _this select 2; //--- Close if (isNil "BIS_Coin_noExit") then { if (_menu == "#USER:BIS_Coin_categories_0") then { BIS_CONTROL_CAM cameraEffect ["terminate","back"]; camDestroy BIS_CONTROL_CAM; BIS_CONTROL_CAM = nil; } else { _preview = _logic getVariable "BIS_COIN_preview"; if !(isNil "_preview") then {deleteVehicle _preview}; _logic setVariable ["BIS_COIN_preview",nil]; _logic setVariable ["BIS_COIN_params",[]]; _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; }; }; }; //--- Camera no longer exists - terminate and start cleanup if (isNil "BIS_CONTROL_CAM" || player != bis_coin_player || !isNil "BIS_COIN_QUIT") exitWith { if !(isNil "BIS_CONTROL_CAM") then {BIS_CONTROL_CAM cameraEffect ["terminate","back"];camDestroy BIS_CONTROL_CAM;}; BIS_CONTROL_CAM = nil; BIS_CONTROL_CAM_Handler = nil; 1122 cuttext ["","plain"]; _player = bis_coin_player; _player setVariable ["bis_coin_logic",nil]; bis_coin_player = objNull; _preview = _logic getVariable "BIS_COIN_preview"; if !(isNil "_preview") then {deleteVehicle _preview}; _logic setVariable ["BIS_COIN_preview",nil]; _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; _logic setVariable ["BIS_COIN_selected",nil]; _logic setVariable ["BIS_COIN_params",nil]; _logic setVariable ["BIS_COIN_lastdir",nil]; _logic setVariable ["BIS_COIN_tooltip",nil]; _logic setVariable ["BIS_COIN_fundsOld",nil]; _logic setVariable ["BIS_COIN_restart",nil]; _logic setVariable ["BIS_COIN_nvg",nil]; _logic setVariable ["WF_RequestUpdate",nil]; showCommandingMenu ""; //_display = finddisplay 46; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyDown",WF_COIN_DEH1]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyUp",WF_COIN_DEH2]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonDown",WF_COIN_DEH3]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonUp",WF_COIN_DEH4]; //--- Behold the placeholders BIS_COIN_QUIT = nil; _border = missionNamespace getVariable "BIS_COIN_border"; {deleteVehicle _x} forEach _border; missionNamespace setVariable ["BIS_COIN_border",nil]; }; }; waitUntil {scriptDone _createBorderScope}; endLoadingScreen; ///*** LOOOP **** _canAffordCount = 0; _canAffordCountOld = 0; _oldMenu = commandingMenu; _limitHOld = -1; _limitVOld = -1; _loaded = false; _localtime = time; _maxGrad = 'WFBE_COINMAXGRADIENT' Call GetNamespace; _minDist = 'WFBE_COINMINDISTANCE' Call GetNamespace; while {!isNil "BIS_CONTROL_CAM"} do { //if (isnull (uiNamespace getVariable 'BIS_CONTROL_CAM_DISPLAY') && !_loaded) then { if (isnull (uiNamespace getVariable 'wfbe_title_coin') && !_loaded) then { //---TEST MrNiceGuy cameraEffectEnableHUD true; 1122 cutrsc ["constructioninterface","plain"]; _loaded = true; _logic setVariable ["BIS_COIN_restart",true]; _localtime = time; }; if ((time - _localtime) >= 1 && _loaded) then {_loaded = false}; _logic = bis_coin_player getVariable "bis_coin_logic"; _mode = "mousemoving"; _camera = BIS_CONTROL_CAM; if (isNil "_logic") exitWith {}; //--- Player dies on construction mode or the source die. if (!alive player || !alive _source) exitWith { startLoadingScreen [localize "str_coin_exit" + " " + localize "str_coin_name","RscDisplayLoadMission"]; if !(isNil "BIS_CONTROL_CAM") then {BIS_CONTROL_CAM cameraEffect ["terminate","back"];camDestroy BIS_CONTROL_CAM;}; BIS_CONTROL_CAM = nil; BIS_CONTROL_CAM_Handler = nil; 1122 cuttext ["","plain"]; _player = bis_coin_player; _player setVariable ["bis_coin_logic",nil]; bis_coin_player = objNull; _preview = _logic getVariable "BIS_COIN_preview"; if !(isNil "_preview") then {deleteVehicle _preview}; _logic setVariable ["BIS_COIN_preview",nil]; _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; _logic setVariable ["BIS_COIN_selected",nil]; _logic setVariable ["BIS_COIN_params",nil]; _logic setVariable ["BIS_COIN_lastdir",nil]; _logic setVariable ["BIS_COIN_tooltip",nil]; _logic setVariable ["BIS_COIN_fundsOld",nil]; _logic setVariable ["BIS_COIN_restart",nil]; _logic setVariable ["BIS_COIN_nvg",nil]; _logic setVariable ["WF_RequestUpdate",nil]; showCommandingMenu ""; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyDown",WF_COIN_DEH1]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyUp",WF_COIN_DEH2]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonDown",WF_COIN_DEH3]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonUp",WF_COIN_DEH4]; //--- Behold the placeholders BIS_COIN_QUIT = nil; WF_COIN_DEH1 = nil; WF_COIN_DEH2 = nil; WF_COIN_DEH3 = nil; WF_COIN_DEH4 = nil; _border = missionNamespace getVariable "BIS_COIN_border"; {deleteVehicle _x} forEach _border; missionNamespace setVariable ["BIS_COIN_border",nil]; endLoadingScreen; }; _areasize = (_logic getVariable "BIS_COIN_areasize"); _limitH = _areasize select 0; _limitV = _areasize select 1; if (_limitH != _limitHOld || _limitV != _limitVOld) then { [_logic,_startpos] spawn _createBorder; BIS_CONTROL_CAM camConstuctionSetParams ([_startPos] + (_logic getVariable "BIS_COIN_areasize")); }; _limitHOld = _limitH; _limitVOld = _limitV; //--- Mouse moving or holding if (_mode in ["mousemoving","mouseholding"]) then { //--- Check pressed keys _keys = BIS_CONTROL_CAM_keys; _ctrl = (29 in _keys) || (157 in _keys); _shift = (42 in _keys) || (54 in _keys); _alt = (56 in _keys); //--- Construction or Selection _params = _logic getVariable "BIS_COIN_params"; _tooltip = "empty"; _tooltipType = "empty"; _selected = objNull; if (count _params > 0) then { //--- Basic colors _colorGreen = "#(argb,8,8,3)color(0,1,0,0.3,ca)"; _colorRed = "#(argb,8,8,3)color(1,0,0,0.3,ca)"; _colorGray = "#(argb,8,8,3)color(1,1,1,0.1,ca)"; _colorGray = "#(argb,8,8,3)color(0,0,0,0.25,ca)"; _color = _colorGreen; //--- Class, Category, Cost, (preview class), (display name) _itemclass = _params select 0; _itemcategory = _params select 1; _itemcost = _params select 2; _itemcash = 0; if (typename _itemcost == "ARRAY") then {_itemcash = _itemcost select 0; _itemcost = _itemcost select 1}; _funds = _logic getVariable "BIS_COIN_funds"; if (typename _funds == "ARRAY") then { _a = (sideJoined) Call GetSideSupply; _b = Call GetPlayerFunds; _funds = [_a]+[_b]; } else { _funds = [Call GetPlayerFunds]; }; _itemFunds = _funds select _itemcash; _itemname = if (count _params > 3) then {_params select 3} else {getText (configFile >> "CfgVehicles" >> _itemclass >> "displayName")}; _itemclass_preview = getText (configFile >> "CfgVehicles" >> _itemclass >> "ghostpreview"); if (_itemclass_preview == "") then {_itemclass_preview = _itemclass}; //--- Preview building _preview = camtarget BIS_CONTROL_CAM; _new = false; if (typeof _preview != _itemclass_preview) then { //--- No preview deleteVehicle _preview; if !(isNil {_logic getVariable "BIS_COIN_preview"}) then {deleteVehicle (_logic getVariable "BIS_COIN_preview")}; //--- Serialization hack _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; _hqDeployed = (sideJoinedText) Call GetSideHQDeployed; _index = _bns find _itemclass; if (_index == 0 && _hqDeployed) exitWith { _mhq = (sideJoinedText) Call GetSideHQ; (_mhq) Spawn HandleHQAction; WFBE_RequestStructure = ['SRVFNCREQUESTSTRUCTURE',[sideJoined,_itemclass,[0,0,0],0]]; publicVariable 'WFBE_RequestStructure'; if (isHostedServer) then {['SRVFNCREQUESTSTRUCTURE',[sideJoined,_itemclass,[0,0,0],0]] Spawn HandleSPVF}; ['WFBE_AREAHQUNDEPLOYED' Call GetNamespace,false,MCoin] Call Compile preprocessFile "Client\Init\Init_Coin.sqf"; _structuresCosts = Format["WFBE_%1STRUCTURECOSTS",sideJoinedText] Call GetNamespace; if !(paramMoneyOnly) then { [sideJoined,-(_structuresCosts select _index)] Call ChangeSideSupply; } else { -(_structuresCosts select _index) Call ChangePlayerFunds; }; ////////////////////////////////////////////////// startLoadingScreen [localize "str_coin_exit" + " " + localize "str_coin_name","RscDisplayLoadMission"]; ////////////////////////////////////////////////// if !(isNil "BIS_CONTROL_CAM") then {BIS_CONTROL_CAM cameraEffect ["terminate","back"];camDestroy BIS_CONTROL_CAM;}; BIS_CONTROL_CAM = nil; BIS_CONTROL_CAM_Handler = nil; 1122 cuttext ["","plain"]; _player = bis_coin_player; _player setVariable ["bis_coin_logic",nil]; bis_coin_player = objNull; _preview = _logic getVariable "BIS_COIN_preview"; if !(isNil "_preview") then {deleteVehicle _preview}; _logic setVariable ["BIS_COIN_preview",nil]; _logic setVariable ["BIS_COIN_selected",nil]; _logic setVariable ["BIS_COIN_params",nil]; _logic setVariable ["BIS_COIN_lastdir",nil]; _logic setVariable ["BIS_COIN_tooltip",nil]; _logic setVariable ["BIS_COIN_fundsOld",nil]; _logic setVariable ["BIS_COIN_restart",nil]; _logic setVariable ["BIS_COIN_nvg",nil]; _logic setVariable ["WF_RequestUpdate",nil]; showCommandingMenu ""; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyDown",WF_COIN_DEH1]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyUp",WF_COIN_DEH2]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonDown",WF_COIN_DEH2]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonUp",WF_COIN_DEH3]; //--- Behold the placeholders BIS_COIN_QUIT = nil; WF_COIN_DEH1 = nil; WF_COIN_DEH2 = nil; WF_COIN_DEH3 = nil; WF_COIN_DEH4 = nil; _border = missionNamespace getVariable "BIS_COIN_border"; {deleteVehicle _x} forEach _border; missionNamespace setVariable ["BIS_COIN_border",nil]; [] Spawn { private ["_mhq","_start"]; _start = time; waitUntil {!((sideJoinedText) Call GetSideHQDeployed) || time - _start > 15}; if (time - _start < 15) then { sleep 2; _mhq = (sideJoinedText) Call GetSideHQ; if (alive _mhq) then { _mhq addAction [localize "STR_WF_Unlock_MHQ","Client\Action\Action_ToggleLock.sqf", [], 95, false, true, '', 'alive _target && locked _target']; _mhq addAction [localize "STR_WF_Lock_MHQ","Client\Action\Action_ToggleLock.sqf", [], 94, false, true, '', 'alive _target && !(locked _target)']; }; }; }; endLoadingScreen; }; _preview = _itemclass_preview createVehicleLocal (screenToWorld [0.5,0.5]); _gdir = _logic getVariable 'BIS_COIN_lastdir'; if !(isNil '_gdir') then {_preview setDir _gdir}; BIS_CONTROL_CAM camSetTarget _preview; BIS_CONTROL_CAM camCommit 0; _logic setVariable ["BIS_COIN_preview",_preview]; _new = true; //--- Preview Helper. if (_itemclass in _greenList && _index != -1) then { _distance = (Format ["WFBE_%1STRUCTUREDISTANCES",sideJoinedText] Call GetNamespace) select _index; _direction = (Format ["WFBE_%1STRUCTUREDIRECTIONS",sideJoinedText] Call GetNamespace) select _index; _npos = [getPos _preview,_distance,getDir _preview + _direction] Call GetPositionFrom; _helper = "Sign_Danger" createVehicleLocal _npos; _helper setPos _npos; _helper setDir (_direction+65); _array = _preview worldToModel (getPos _helper); _array set [2,0]; _helper attachTo [_preview,_array]; _logic setVariable ['WFBE_Helper',_helper]; }; _preview setObjectTexture [0,_colorGray]; _preview setVariable ["BIS_COIN_color",_colorGray]; //--- Exception - preview not created if (isnull _preview) then { deleteVehicle _preview; _logic setVariable ["BIS_COIN_preview",nil]; _logic setVariable ["BIS_COIN_params",[]]; _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; }; } else { //--- Check zone if ( ([position _preview,_startPos] call BIS_fnc_distance2D) > _limitH ) then { _color = _colorGray } else { //--- No money _funds = 0; call compile format ["_funds = %1;",_itemFunds]; _fundsRemaining = _funds - _itemcost; if (_fundsRemaining < 0) then {_color = _colorRed}; _skipFlat = false; if !(paramDefenseCollide) then { if !(_itemcategory == 0) then {_skipFlat = true}; if (surfaceIsWater(position _preview)) then {_color = _colorRed}; if (_color != _colorRed) then { //--- Prevent Wall'in. if (count((position _preview) nearEntities [['Man','Car','Motorcycle','Tank','Air','Ship'],10]) > 0) then {_color = _colorRed}; }; }; if (typeOf _preview == "Concrete_Wall_EP1") then {_skipFlat = true}; //--- Do not control the flatness with strategic & fortifications. if (!_skipFlat) then { _isFlat = (position _preview) isFlatEmpty [ (sizeof typeof _preview) / _minDist, //--- Minimal distance from another object 0, //--- If 0, just check position. If >0, select new one _maxGrad, //--- Max gradient (sizeof typeof _preview), //--- Gradient area 0, //--- 0 for restricted water, 2 for required water, false, //--- True if some water can be in 25m radius _preview //--- Ignored object ]; //--- Unable to Place due to the land. if (count _isFlat == 0 || count (((position _preview) nearEntities 10) - [_preview]) > 0) then {_color = _colorRed}; }; }; _preview setObjectTexture [0,_color]; _preview setVariable ["BIS_COIN_color",_color]; _tooltip = _itemclass; _tooltipType = "preview"; //--- Temporary solution _colorGUI = [1,1,1,0.1]; if (_color == _colorGreen) then {_colorGUI = [0.3,1,0.3,0.3]}; if (_color == _colorRed) then {_colorGUI = [1,0.2,0.2,0.4]}; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlSetTextColor _colorGUI; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlCommit 0; }; //--- Place if (!_new && !isnull _preview && ((BIS_CONTROL_CAM_LMB && 65536 in (actionKeys "DefaultAction")) || {_x in (actionKeys "DefaultAction")} count BIS_CONTROL_CAM_keys > 0) && _color == _colorGreen) then { _pos = position _preview; _dir = direction _preview; deleteVehicle _preview; _logic setVariable ["BIS_COIN_preview",nil]; _logic setVariable ["BIS_COIN_params",[]]; _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; //--- Remove funds //call compile format ["%1 = %1 - _itemcost;",_itemFunds]; //--- Execute designer defined code [_logic,_itemclass,_pos,_dir,_params] spawn { private ["_hqDeployed","_structures","_get","_logic","_itemclass","_pos","_dir","_par"]; _logic = _this select 0; _itemclass = _this select 1; _pos = _this select 2; _dir = _this select 3; _par = _this select 4; //--- Define the last direction used. _logic setVariable ["BIS_COIN_lastdir",_dir]; //--- On Purchase. [_logic,_itemclass] call { Private["_cash","_class","_costs","_index","_logic","_price"]; _logic = _this select 0; _class = _this select 1; _structures = Format["WFBE_%1STRUCTURENAMES",sideJoinedText] Call GetNamespace; _costs = Format["WFBE_%1STRUCTURECOSTS",sideJoinedText] Call GetNamespace; //--- Structures. _index = _structures find _class; if (_index != -1) then { _price = _costs select _index; if !(paramMoneyOnly) then { [sideJoined, -_price] Call ChangeSideSupply; } else { -(_price) Call ChangePlayerFunds; }; if (_index == 0) then { _hqDeployed = (sideJoinedText) Call GetSideHQDeployed; if (_hqDeployed) then { ['WFBE_AREAHQUNDEPLOYED' Call GetNamespace,false,MCoin] Call Compile preprocessFile "Client\Init\Init_Coin.sqf"; } else { ['WFBE_AREAHQDEPLOYED' Call GetNamespace,true,MCoin] Call Compile preprocessFile "Client\Init\Init_Coin.sqf"; }; _logic setVariable ["BIS_COIN_restart",true]; } else { WFBE_RequestChangeScore = ['SRVFNCREQUESTCHANGESCORE',[player,score player + ('WFBE_COMMANDERBUILDSCORE' Call GetNamespace)]]; publicVariable 'WFBE_RequestChangeScore'; if (isHostedServer) then {['SRVFNCREQUESTCHANGESCORE',[player,score player + ('WFBE_COMMANDERBUILDSCORE' Call GetNamespace)]] Spawn HandleSPVF}; }; }; //--- Defense. _get = _class Call GetNamespace; if !(isNil '_get') then { _price = _get select QUERYUNITPRICE; -(_price) Call ChangePlayerFunds; }; }; //--- Execute designer defined code On Construct [_logic,_itemclass,_pos,_dir,_par] call { private ["_class","_defenses","_deployed","_dir",'_find',"_logic","_par","_pos","_structures"]; _logic = _this select 0; _class = _this select 1; _pos = _this select 2; _dir = _this select 3; _par = _this select 4; _structures = Format["WFBE_%1STRUCTURENAMES",sideJoinedText] Call GetNamespace; _defenses = Format["WFBE_%1DEFENSENAMES",sideJoinedText] Call GetNamespace; _find = _structures find _class; if (_find != -1) then { //--- Increment the buildings. if ((_find - 1) > -1) then { _current = Call Compile Format ['%1BuildingsCurrent',sideJoinedText]; _current set [_find - 1, (_current select (_find-1)) + 1]; Call Compile Format ['%1BuildingsCurrent = _current',sideJoinedText]; publicVariable Format ['%1BuildingsCurrent',sideJoinedText]; }; WFBE_RequestStructure = ['SRVFNCREQUESTSTRUCTURE',[sideJoined,_class,_pos,_dir]]; publicVariable 'WFBE_RequestStructure'; if (isHostedServer) then {['SRVFNCREQUESTSTRUCTURE',[sideJoined,_class,_pos,_dir]] Spawn HandleSPVF}; }; if (_class in _defenses) then { WFBE_RequestDefense = ['SRVFNCREQUESTDEFENSE',[sideJoined,_class,_pos,_dir,manningDefense]]; publicVariable 'WFBE_RequestDefense'; if (isHostedServer) then {['SRVFNCREQUESTDEFENSE',[sideJoined,_class,_pos,_dir,manningDefense]] Spawn HandleSPVF}; lastBuilt = _par; }; }; }; //--- Temporary solution _colorGUI = [1,1,1,0.1]; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlSetTextColor _colorGUI; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlCommit 0; }; } else { _colorGUI = [1,1,1,0.1]; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlSetTextColor _colorGUI; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlCommit 0; }; _oldTooltip = _logic getVariable "BIS_COIN_tooltip"; if ((_tooltipType + _tooltip) != _oldTooltip || commandingMenu != _oldMenu || _logic getVariable "WF_RequestUpdate") then { _logic setVariable ["WF_RequestUpdate",false]; //--- Description _type = _tooltip; //--- Header & preview picture _textHeader = "
"; _textPicture = "


"; _fileIcon = getText (configFile >> "cfgvehicles" >> _type >> "icon"); if (str(configFile >> "CfgVehicleIcons" >> _fileIcon) != "") then {_fileIcon = getText (configFile >> "CfgVehicleIcons" >> _fileIcon)}; _filePicture = getText (configFile >> "cfgvehicles" >> _type >> "picture"); if (str(configFile >> "CfgVehicleIcons" >> _filePicture) != "") then {_filePicture = getText (configFile >> "CfgVehicleIcons" >> _filePicture)}; if (_tooltipType != "empty") then { _textHeader = format [" %1
", getText (configFile >> "cfgvehicles" >> _type >> "displayname"), if (isnull _selected) then {""} else {str round ((1 - damage _selected) * 100) + "%"} ]; _textPicture = format [" ",_filePicture]; }; _text1 = if (count _params > 0) then {"" + localize "str_coin_rotate" + "" + call compile (keyname 29) + "
"} else {"
"}; _status = if (manningDefense) then {localize "STR_WF_On"} else {localize "STR_WF_Off"}; _text2 = if (count _params > 0) then {"" + localize "str_coin_build" + "" + call compile (actionKeysNames ["DefaultAction",1]) + "
"} else {"" + localize "STR_WF_AutoDefense" + ":" + _status + "
"}; _text3 = if (commandingMenu != "#USER:BIS_Coin_categories_0") then { //--- Back hint if (isNil "BIS_Coin_noExit") then { "" + localize "str_coin_back" + "" + call compile (actionKeysNames ["MenuBack",1]) + ""; } else {""}; } else { //--- Exit hint if (isNil "BIS_Coin_noExit") then { "" + localize "str_coin_exit" + "" + call compile (actionKeysNames ["MenuBack",1]) + ""; } else {""}; }; //--- Compose text _textHint = ( _textPicture + _textHeader + "" ); _textControls = ( _text1 + _text2 + _text3 + "" ); //--- Set box ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112211) ctrlShow true; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112211) ctrlCommit 0; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112214) ctrlSetStructuredText (parseText _textHint); ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112214) ctrlShow true; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112214) ctrlCommit 0; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112215) ctrlSetStructuredText (parseText _textControls); ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112215) ctrlShow true; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112215) ctrlCommit 0; }; //--- Amount of funds changed _funds = _logic getVariable "BIS_COIN_funds"; if (typename _funds == "ARRAY") then { _a = (sideJoined) Call GetSideSupply; _b = Call GetPlayerFunds; _funds = [_a]+[_b]; } else { _funds = [Call GetPlayerFunds]; }; _fundsDescription = _logic getVariable "BIS_COIN_fundsDescription"; _cashValues = []; {_cashValues = _cashValues + [_x]} forEach _funds; _cashValuesOld = _logic getVariable "BIS_COIN_fundsOld"; if (isNil "_cashValuesOld") then {_cashValuesOld = []; _cashValuesOld set [count _cashValues - 1,-1]}; _restart = _logic getVariable "BIS_COIN_restart"; if (!([_cashValues,_cashValuesOld] call bis_fnc_arraycompare) || _restart) then { _cashValuesCount = count _cashValues; _cashSize = if (_cashValuesCount <= 1) then {2} else {2.8 / _cashValuesCount}; _cashText = format ["",_cashSize]; _cashLines = 0; for "_i" from 0 to (count _funds - 1) do { _cashValue = _cashValues select _i; _cashDescription = if (count _fundsDescription > _i) then {_fundsDescription select _i} else {"?"}; _cashText = _cashText + format ["%1 %2
",_cashDescription,round _cashValue]; _cashLines = _cashLines + 0.05; }; _cashText = _cashText + "
"; _cashPos = ctrlPosition ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112224); ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112224) ctrlSetStructuredText (parseText _cashText); ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112224) ctrlSetPosition [_cashPos select 0,_cashPos select 1,_cashPos select 2,(_cashPos select 3)/*0.1*/ + _cashLines]; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112224) ctrlShow true; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112224) ctrlCommit 0; //--- Categories menu _categories = +(_logic getVariable "BIS_COIN_categories"); _categoriesMenu = []; //--- Ammo Upgrade. _upgrades = (sideJoinedText) Call GetSideUpgrades; if (_upgrades select 14 < 1) then {_categories = _categories - [localize 'STR_WF_Ammo']}; for "_i" from 0 to (count _categories - 1) do { _categoriesMenu = _categoriesMenu + [_i]; }; [["Categories",true],"BIS_Coin_categories",[_categoriesMenu,_categories],"#USER:BIS_Coin_%1_items_0","",""] call BIS_fnc_createmenu; //--- Items menu _items = _logic getVariable "BIS_COIN_items"; _canAffordCountOld = _canAffordCount; _canAffordCount = 0; for "_i" from 0 to (count _categories - 1) do { _category = _categories select _i; _arrayNames = []; _arrayNamesLong = []; _arrayEnable = []; _arrayParams = []; { _itemclass = _x select 0; _itemcategory = _x select 1; if (typename _itemcategory == typename "") then {//--- Backward compatibility _itemcategory = _categories find _itemcategory; } else {100}; if (_itemcategory < count _categories) then { _itemcost = _x select 2; _itemcash = 0; if (typename _itemcost == "ARRAY") then {_itemcash = _itemcost select 0; _itemcost = _itemcost select 1}; _cashValue = _cashValues select _itemcash; _cashDescription = if (count _fundsDescription > _itemcash) then {_fundsDescription select _itemcash} else {"?"}; _itemname = if (count _x > 3) then {_x select 3} else {getText (configFile >> "CfgVehicles" >> _itemclass >> "displayName")}; //--- Build Limit reached? _buildLimit = false; _find = _buildingsNames find _itemclass; if (_find != -1) then { _current = Call Compile Format ['%1BuildingsCurrent',sideJoinedText]; _limit = (Format['WFBE_BUILDINGMAX%1',(_buildingsType select _find)]) Call GetNamespace; if (isNil '_limit') then {_limit = 4}; //--- Default. if ((_current select _find) >= _limit) then {_buildLimit = true}; }; if (_itemcategory == _i/*_category*/) then { _canAfford = if (_cashValue - _itemcost >= 0 && !_buildLimit) then {1} else {0}; _canAffordCount = _canAffordCount + _canAfford; // _text = _itemname + " - " + _cashDescription + str _itemcost; // _arrayNamesLong = _arrayNamesLong + [_text + " "]; _text = parseText(Format ['%1 %2 %3',_itemname,_cashDescription,_itemcost] + " "); _arrayNames = _arrayNames + [_text]; _arrayNamesLong = _arrayNamesLong + [_text]; _arrayEnable = _arrayEnable + [_canAfford]; _arrayParams = _arrayParams + [[_logic getVariable "BIS_COIN_ID"] + [_x,_i]]; }; }; } forEach _items; [[_category,true],format ["BIS_Coin_%1_items",_i],[_arrayNames,_arrayNamesLong,_arrayEnable],""," BIS_CONTROL_CAM_LMB = false; scopename 'main'; _item = '%1'; _id = %2; _array = (call compile '%3') select _id; _logic = call compile ('BIS_COIN_'+ str (_array select 0)); _params = _array select 1; _logic setVariable ['BIS_COIN_params',_params]; _logic setVariable ['BIS_COIN_menu',commandingMenu]; showCommandingMenu ''; ",_arrayParams] call BIS_fnc_createmenu; }; if (_canAffordCount != _canAffordCountOld) then {showCommandingMenu (commandingMenu)}; //<-- Open menu again to show disabled items }; _logic setVariable ["BIS_COIN_fundsOld",_cashValues]; _logic setVariable ["BIS_COIN_tooltip",_tooltipType + _tooltip]; if (_restart) then { _logic setVariable ["BIS_COIN_restart",false]; }; }; _oldMenu = commandingMenu; sleep 0.01; }; 112200 cuttext ["","plain"]; //---added-MrNiceGuy showCommandingMenu '';