/** * ExileClient_construction_beginExistingObject * * Edited for Exile by _sinworks * * Exile Mod * www.exilemod.com * © 2015 Exile Mod Team * * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. */ private["_stopPropagation","_caller","_keyCode","_shiftState","_controlState","_altState","_posObject","_step"]; _stopPropagation = false; _caller = _this select 0; _keyCode = _this select 1; _shiftState = _this select 2; _controlState = _this select 3; _altState = _this select 4; if (_keyCode in (actionKeys "TacticalView")) exitWith {true}; if (_keyCode in (actionKeys "User1") && !(_keyCode isEqualTo 0x02)) exitWith { if !(ExileClientIsHandcuffed) then { call ExileClient_object_vehicle_interaction_keyLock; }; true }; if (_keyCode in (actionKeys "User2")) exitWith { if (ExileClientAllowPartyMarkers) then { if !(ExileClientPartyID isEqualTo -1) then { if !(ExileClientIsHandcuffed) then { call ExileClient_system_party_updateMyMarker; }; }; }; true }; switch (_keyCode) do { case 0x29: { call ExileClient_gui_hud_toggleStatsBar; _stopPropagation = true; }; case 0x11, case 0x1E, case 0x1F, case 0x20: { if (ExileClientIsAutoRunning) then { call ExileClient_system_autoRun_stop; _stopPropagation = true; }; }; case 0x0B: { if !(ExileClientIsHandcuffed) then { call ExileClient_system_autoRun_toggle; }; _stopPropagation = true; }; case 0x09: { _stopPropagation = true; }; case 0x0A: { _stopPropagation = true; }; case 0x3B: { _stopPropagation = true; }; case 0x3C: { _stopPropagation = true; }; case 0x3D: { _stopPropagation = true; }; case 0x3E: { _stopPropagation = true; }; case 0x41: { _stopPropagation = true; }; case 0x42: { _stopPropagation = true; }; case 0x43: { _stopPropagation = true; }; case 0x44: { _stopPropagation = true; }; case 0x57: { _stopPropagation = true; }; case 0x58: { _stopPropagation = true; }; case 0x0E: { _stopPropagation = true; }; case 0x02: { if !(ExileClientIsHandcuffed || ExileIsPlayingRussianRoulette) then { if (ExileClientIsInConstructionMode) then { ExileClientConstructionObject setObjectTextureGlobal [0, "#(argb,2,2,1)color(0.7,0.93,0,0.6,ca)"]; ExileClientConstructionCurrentSnapToObject = objNull; ExileClientConstructionIsInSelectSnapObjectMode = false; ExileClientConstructionPossibleSnapPositions = []; ExileClientConstructionMode = 1; [] call ExileClient_gui_constructionMode_update; } else { if (primaryWeapon player != "") then { if (primaryWeapon player != currentWeapon player) then { player selectWeapon (primaryWeapon player); }; }; }; }; _stopPropagation = true; }; case 0x03: { if !(ExileClientIsHandcuffed || ExileIsPlayingRussianRoulette) then { if (ExileClientIsInConstructionMode) then { ExileClientConstructionObject setObjectTextureGlobal [0, "#(argb,2,2,1)color(0.7,0.93,0,0.6,ca)"]; ExileClientConstructionCurrentSnapToObject = objNull; ExileClientConstructionIsInSelectSnapObjectMode = false; ExileClientConstructionPossibleSnapPositions = []; ExileClientConstructionMode = 2; [] call ExileClient_gui_constructionMode_update; } else { if (handgunWeapon player != "") then { if (handgunWeapon player != currentWeapon player) then { player selectWeapon (handgunWeapon player); }; }; }; }; _stopPropagation = true; }; case 0x04: { if !(ExileClientIsHandcuffed || ExileIsPlayingRussianRoulette) then { if (ExileClientIsInConstructionMode) then { if (ExileClientConstructionSupportSnapMode) then { if (ExileClientConstructionMode != 3) then { ExileClientConstructionCurrentSnapToObject = objNull; ExileClientConstructionPossibleSnapPositions = []; ["InfoTitleAndText", ["Snap Mode", "Look at the object you want to snap to, press SPACE to lock on it and then move your object next to a snap point. Press SPACE again to place the object."]] call ExileClient_gui_toaster_addTemplateToast; }; ExileClientConstructionMode = 3; ExileClientConstructionIsInSelectSnapObjectMode = true; [] call ExileClient_gui_constructionMode_update; }; } else { if (secondaryWeapon player != "") then { if (secondaryWeapon player != currentWeapon player) then { player selectWeapon (secondaryWeapon player); }; }; }; }; _stopPropagation = true; }; case 0x05: { if !(ExileClientIsHandcuffed || ExileIsPlayingRussianRoulette) then { if (ExileClientIsInConstructionMode) then { if !(ExileClientConstructionKitClassName isEqualTo "Exile_Item_Flag") then { ExileClientConstructionModePhysx = !ExileClientConstructionModePhysx; [] call ExileClient_gui_constructionMode_update; }; } else { if (currentWeapon player != "") then { ExileClientPlayerHolsteredWeapon = currentWeapon player; player action["switchWeapon", player, player, 100]; } else { if (ExileClientPlayerHolsteredWeapon != "") then { player selectWeapon ExileClientPlayerHolsteredWeapon; }; }; }; }; _stopPropagation = true; }; case 0x06: { if (ExileClientIsInConstructionMode) then { ExileClientConstructionShowHint = !ExileClientConstructionShowHint; [] call ExileClient_gui_constructionMode_update; } else { call ExileClient_system_music_earplugs_toggle; }; _stopPropagation = true; }; case 0x07: { if (ExileClientIsInConstructionMode) then { if(ExileClientConstructionLock)then { ExileClientConstructionLock = false; _posObject = position ExileClientConstructionObject; ExileClientConstructionOffset = player worldToModel _posObject; ExileClientConstructionRotation = (getDir ExileClientConstructionObject) - (getDir player); } else { ExileClientConstructionLock = true; }; } else { if (!ExileClientXM8IsVisible) then { if ("Exile_Item_XM8" in (assignedItems player)) then { if (alive player) then { [] call ExileClient_gui_xm8_show; }; }; }; }; _stopPropagation = true; }; case 0x39: { if (ExileIsPlayingRussianRoulette) then { if (ExileRussianRouletteCanFire) then { [] spawn ExileClient_system_russianRoulette_fire; }; } else { if (ExileClientIsInConstructionMode) then { if (ExileClientConstructionMode == 3) then { if (ExileClientConstructionIsInSelectSnapObjectMode) then { if !(isNull ExileClientConstructionCurrentSnapToObject) then { ExileClientConstructionIsInSelectSnapObjectMode = false; [] call ExileClient_gui_constructionMode_update; }; } else { if (ExileClientConstructionCanPlaceObject) then { ExileClientConstructionResult = 1; }; }; } else { if (ExileClientConstructionCanPlaceObject) then { ExileClientConstructionResult = 1; }; }; _stopPropagation = true; }; }; }; case 0x01: { if (ExileIsPlayingRussianRoulette) then { _stopPropagation = true; } else { if (ExileClientIsInConstructionMode) then { _stopPropagation = true; }; }; }; case 0x08: { if !(ExileClientIsHandcuffed) then { if (ExileClientIsInConstructionMode) then { if(ExileClientConstructionVectorMode) then { ExileClientConstructionVectorMode = false; } else { ExileClientConstructionVectorMode = true; }; [] call ExileClient_gui_constructionMode_update; }; }; _stopPropagation = true; }; case 0x10: { if (ExileClientIsInConstructionMode) then { _step = 45; if (_shiftState) then { _step = 90; } else { if (_controlState) then { _step = 22.5; }; }; if(ExileClientConstructionVectorMode) then { _step = 22.5; if (_shiftState) then { _step = 45; } else { if (_controlState) then { _step = 1; }; }; ExileClientConstructionBank = ExileClientConstructionBank - _step; } else { ExileClientConstructionRotation = (ExileClientConstructionRotation - _step + 360) % 360; }; [] call ExileClient_gui_constructionMode_update; _stopPropagation = true; }; }; case 0x12: { if (ExileClientIsInConstructionMode) then { _step = 45; if (_shiftState) then { _step = 90; } else { if (_controlState) then { _step = 22.5; }; }; if(ExileClientConstructionVectorMode) then { _step = 22.5; if (_shiftState) then { _step = 45; } else { if (_controlState) then { _step = 1; }; }; //Tilt right ExileClientConstructionBank = ExileClientConstructionBank + _step; } else { ExileClientConstructionRotation = (ExileClientConstructionRotation + _step + 360) % 360; }; [] call ExileClient_gui_constructionMode_update; _stopPropagation = true; }; }; case 0x19: { if (ExileClientIsInBush) then { call ExileClient_object_bush_detach; _stopPropagation = true; }; }; case 0x31: { if!(isNull ExileClientCameraParentObject)then { if(ExileClientCameraNVG)then { camUseNVG false; } else { camUseNVG true; }; ExileClientCameraNVG = !ExileClientCameraNVG; _stopPropagation = true; }; }; case 0xC9: { if (ExileClientIsInConstructionMode) then { _step = 0.25; if (_shiftState) then { _step = 1; } else { if (_controlState) then { _step = 0.025; }; }; if(ExileClientConstructionVectorMode) then { _step = 22.5; if (_shiftState) then { _step = 45; } else { if (_controlState) then { _step = 1; }; }; //Tilt forward ExileClientConstructionPitch = ExileClientConstructionPitch + _step; } else { ExileClientConstructionOffset set [2, ((((ExileClientConstructionOffset select 2) + _step) min 6) max -3) ]; }; [] call ExileClient_gui_constructionMode_update; _stopPropagation = true; }; }; case 0xD1: { if (ExileClientIsInConstructionMode) then { _step = 0.25; if (_shiftState) then { _step = 1; } else { if (_controlState) then { _step = 0.025; }; }; if(ExileClientConstructionVectorMode) then { _step = 22.5; if (_shiftState) then { _step = 45; } else { if (_controlState) then { _step = 1; }; }; //Tilt backward ExileClientConstructionPitch = ExileClientConstructionPitch - _step; } else { ExileClientConstructionOffset set [2, ((((ExileClientConstructionOffset select 2) - _step) min 6) max -3) ]; [] call ExileClient_gui_constructionMode_update; }; [] call ExileClient_gui_constructionMode_update; _stopPropagation = true; }; }; case 0xC7: { if (ExileClientIsInConstructionMode) then { _step = 0.25; if (_shiftState) then { _step = 1; } else { if (_controlState) then { _step = 0.025; }; }; ExileClientConstructionOffset set [1, (((ExileClientConstructionOffset select 1) + _step) min 6) max ExileClientConstructionBoundingRadius ]; [] call ExileClient_gui_constructionMode_update; _stopPropagation = true; }; }; case 0xCF: { if (ExileClientIsInConstructionMode) then { _step = 0.25; if (_shiftState) then { _step = 1; } else { if (_controlState) then { _step = 0.025; }; }; ExileClientConstructionOffset set [1, (((ExileClientConstructionOffset select 1) - _step) min 6) max ExileClientConstructionBoundingRadius ]; [] call ExileClient_gui_constructionMode_update; _stopPropagation = true; }; }; case 0xDB: { switch (ExilePartyEspMode) do { case 0: { ExilePartyEspMode = 1; }; case 1: { ExilePartyEspMode = 2; }; case 2: { ExilePartyEspMode = 0; }; }; _stopPropagation = true; }; }; _stopPropagation