Jump to content

redcloud78

Member
  • Posts

    122
  • Joined

  • Last visited

Reputation Activity

  1. Like
    redcloud78 reacted to cen in Instant Build with Build snapping?   
    Add this to init.sqf:
     
    DZE_StaticConstructionCount = 1;
  2. Like
    redcloud78 reacted to Shizweak in Instant Build with Build snapping?   
    Just install snap building into a fresh copy of player_build.sqf from the dayz_code pbo (easy enough), then change the following:
    _isOk = true; _proceed = true; _counter = 0; /* while {_isOk} do { [10,10] call dayz_HungerThirst; player playActionNow "Medic"; _dis=20; _sfx = "repair"; [player,_sfx,0,false,_dis] call dayz_zombieSpeak; [player,_dis,true,(getPosATL player)] spawn player_alertZombies; r_interrupt = false; _animState = animationState player; r_doLoop = true; _started = false; _finished = false; while {r_doLoop} do { _animState = animationState player; _isMedic = ["medic",_animState] call fnc_inString; if (_isMedic) then { _started = true; }; if (_started and !_isMedic) then { r_doLoop = false; _finished = true; }; if (r_interrupt or (player getVariable["combattimeout", 0] >= time)) then { r_doLoop = false; }; if (DZE_cancelBuilding) exitWith { r_doLoop = false; }; sleep 0.1; }; r_doLoop = false; if(!_finished) exitWith { _isOk = false; _proceed = false; }; if(_finished) then { _counter = _counter + 1; }; cutText [format[(localize "str_epoch_player_139"),_text, _counter,_limit], "PLAIN DOWN"]; if(_counter == _limit) exitWith { _isOk = false; _proceed = true; }; }; */  All that does is set _proceed to true, and comments out the code that does the animation loop while constructing. I haven't tested this, but it should work fine.
  3. Like
    redcloud78 reacted to NorthyPark in Instant Build with Build snapping?   
    Hello, as the title says, i want the instant build script to work with build snapping. since they both uses a custom "Player_Build.sqf i cant get them to work. i have tried merging them, but no luck :( i am using a playerbuild i found somewhere, and i think it made by Dami. anyway i will post both of my original player_builds from the build snapping and the instabuild thing.
     
     
    Instabuild:
    private ["_location","_dir","_classname","_item","_hasrequireditem","_missing","_hastoolweapon","_cancel","_reason","_started","_finished","_animState","_isMedic","_dis","_sfx","_hasbuilditem","_tmpbuilt","_onLadder","_isWater","_require","_text","_offset","_IsNearPlot","_isOk","_location1","_location2","_counter","_limit","_proceed","_num_removed","_position","_object","_canBuildOnPlot","_friendlies","_nearestPole","_ownerID","_findNearestPoles","_findNearestPole","_distance","_classnametmp","_ghost","_isPole","_needText","_lockable","_combination_1","_combination_2","_combination_3","_combination_4","_combination","_combination_1_Display","_combinationDisplay","_abort","_isNear","_need","_objHupDiff","_objHdwnDiff","_needNear"]; if (DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_40") , "PLAIN DOWN"]; }; if((count ((position player) nearObjects ["All",30])) >= DZE_BuildingLimit) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_41"), "PLAIN DOWN"];}; DZE_ActionInProgress = true; _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1; _isWater = dayz_isSwimming; _cancel = false; _reason = ""; _vehicle = vehicle player; _inVehicle = (_vehicle != player); _canBuildOnPlot = false; DZE_Q = false; DZE_Z = false; DZE_Q_alt = false; DZE_Z_alt = false; DZE_Q_ctrl = false; DZE_Z_ctrl = false; DZE_5 = false; DZE_4 = false; DZE_6 = false; DZE_togglesnap = false; DZE_cancelBuilding = false; call gear_ui_init; closeDialog 1; if ((_isWater)&&(isNil "AM_Epoch_ADMIN_norestrict")) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_26", "PLAIN DOWN"];}; if ((_inVehicle)&&(isNil "AM_Epoch_ADMIN_norestrict")) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_42"), "PLAIN DOWN"];}; if ((_onLadder)&&(isNil "AM_Epoch_ADMIN_norestrict")) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_21", "PLAIN DOWN"];}; if ((player getVariable["combattimeout", 0] >= time)&&(isNil "AM_Epoch_ADMIN_norestrict")) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_43"), "PLAIN DOWN"];}; _item = _this; _abort = false; _distance = 3; _reason = ""; _needNear = getArray (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "neednearby"); { _need = _x select 0; _distance = _x select 1; switch(_need) do{ case "fire": { _isNear = {inflamed _x} count (position player nearObjects _distance); if(_isNear == 0) then { _abort = true; _reason = "fire"; }; }; case "workshop": { _isNear = count (nearestObjects [player, ["Wooden_shed_DZ","WoodShack_DZ","WorkBench_DZ"], _distance]); if(_isNear == 0) then { _abort = true; _reason = "workshop"; }; }; case "fueltank": { _isNear = count (nearestObjects [player, dayz_fuelsources, _distance]); if(_isNear == 0) then { _abort = true; _reason = "fuel tank"; }; }; }; } forEach _needNear; if ((_abort)&&(isNil "AM_Epoch_ADMIN_norestrict")) exitWith {cutText [format[(localize "str_epoch_player_135"),_reason,_distance], "PLAIN DOWN"];DZE_ActionInProgress = false;}; _classname = getText (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "create"); _classnametmp = _classname; _require = getArray (configFile >> "cfgMagazines" >> _this >> "ItemActions" >> "Build" >> "require"); _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); _ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview"); _lockable = 0; _requireplot = DZE_requireplot; _isAllowedUnderGround = 1; if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then {_lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable");}; if(isNumber (configFile >> "CfgVehicles" >> _classname >> "requireplot")) then {_requireplot = getNumber(configFile >> "CfgVehicles" >> _classname >> "requireplot");}; if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then {_isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground");}; _offset = getArray (configFile >> "CfgVehicles" >> _classname >> "offset"); if((count _offset) <= 0) then {_offset = [0,1.5,0];}; _isPole = (_classname == "Plastic_Pole_EP1_DZ"); _isLandFireDZ = (_classname == "Land_Fire_DZ"); _distance = 60; _needText = localize "str_epoch_player_246"; if(_isPole) then {_distance = 60;}; _findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance]; _findNearestPole = []; { if (alive _x) then { _findNearestPole set [(count _findNearestPole),_x]; }; } foreach _findNearestPoles; _IsNearPlot = count (_findNearestPole); if ((_isPole and _IsNearPlot > 0)&&(isNil "AM_Epoch_ADMIN_norestrict")) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_44") , "PLAIN DOWN"];}; if ((_IsNearPlot == 0)||(!isNil "AM_Epoch_ADMIN_norestrict")) then { if(_requireplot == 0 or _isLandFireDZ) then { _canBuildOnPlot = true; }; } else { _nearestPole = _findNearestPole select 0; _ownerID = _nearestPole getVariable["CharacterID","0"]; if(dayz_characterID == _ownerID) then { if(!_isPole) then { _canBuildOnPlot = true; }; } else { if(!_isPole) then { _friendlies = player getVariable ["friendlyTo",[]]; if(_ownerID in _friendlies) then { _canBuildOnPlot = true; }; }; }; }; if ((!_canBuildOnPlot)&&(isNil "AM_Epoch_ADMIN_norestrict")) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "STR_EPOCH_PLAYER_135"),_needText,_distance] , "PLAIN DOWN"];}; _missing = ""; _hasrequireditem = true; { _hastoolweapon = _x in weapons player; if(!_hastoolweapon) exitWith { _hasrequireditem = false; _missing = getText (configFile >> "cfgWeapons" >> _x >> "displayName"); } } forEach _require; _hasbuilditem = _this in magazines player; if ((!_hasbuilditem)&&(isNil "AM_Epoch_ADMIN_norestrict")) exitWith { DZE_ActionInProgress = false; cutText [format[(localize "str_player_31"),_text,"build"] , "PLAIN DOWN"]; systemChat format["%1 must be in your main inventory to %2 it.",_text,"build"]; }; if ((!_hasrequireditem)&&(isNil "AM_Epoch_ADMIN_norestrict")) exitWith { DZE_ActionInProgress = false; cutText [format[(localize "str_epoch_player_137"),_missing] , "PLAIN DOWN"]; systemChat format["Missing tool %1",_missing]; }; if ((_hasrequireditem)||(!isNil "AM_Epoch_ADMIN_norestrict")) then { _location = [0,0,0]; _timestartbuilding = time; _isOk = true; _location1 = getPosATL player; _dir = 0; _original_classname = _classname; if (_ghost != "") then { _classname = _ghost; }; _object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; _object attachTo [player,_offset]; _position = getPosATL _object; cutText ["Planning construction: PgUp = raise, PgDn = lower, Q or E = flip 180, and Space-Bar to build.", "PLAIN DOWN"]; _previewCounter = 150; SnappingOffset = _offset; SnappingDir = _dir; SnappingSpotMarkers = []; SnappingEnabled = true; SnappedOffsetZ = 0; SnappingResetPos = false; _snapper = [_object, _original_classname] spawn snap_object; _keyThrd = [] spawn snap_object2; first_build = nil; private ["_zheightchanged", "_zheightdirection", "_rotate"]; while {_isOk} do { if (isNil 'first_build') then {first_build=true;systemChat ("P"+"l"+"a"+"n"+"n"+"i"+"n"+"g"+" "+"c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"i"+"o"+"n"+":"+" "+"P"+"g"+"U"+"p"+" "+"="+" "+"r"+"a"+"i"+"s"+"e"+","+" "+"P"+"g"+"D"+"n"+" "+"="+" "+"l"+"o"+"w"+"e"+"r"+","+" "+"Q"+" "+"o"+"r"+" "+"E"+" "+"="+" "+"f"+"l"+"i"+"p"+" "+"1"+"80"+","+" "+"S"+"p"+"a"+"c"+"e"+"-"+"B"+"a"+"r"+" "+"t"+"o"+" "+"s"+"t"+"a"+"r"+"t"+" "+"b"+"u"+"i"+"l"+"d"+"i"+"n"+"g"+","+" "+"E"+"N"+"D"+" "+"t"+"o"+" "+"s"+"t"+"o"+"p"+" "+"b"+"u"+"i"+"l"+"d"+"i"+"n"+"g"+"."+" "+"-"+" "+"W"+"r"+"i"+"t"+"t"+"e"+"n"+" "+"b"+"y"+" "+"D"+"a"+"m"+"i");}; if (isNil "CAKE") then { [] spawn { CAKE = true; cutText ["Planning construction: PgUp = raise, PgDn = lower, Q or E = flip 180, Space-Bar to start building, HOME to toggle snapping, END to stop building.", "PLAIN DOWN"]; sleep 2; CAKE = nil; }; }; _timeBuilding = time - _timestartbuilding; if (_timeBuilding > 150) exitWith { _isOk = false; _cancel = true; _reason = "Ran out of time to find position."; systemChat ("Building terminated..." + str _reason); detach _object; }; _lastLoop = time; waitUntil {((DZE_Q)||(DZE_Z)||(DZE_Q_alt)||(DZE_Z_alt)||(DZE_Q_ctrl)||(DZE_Z_ctrl)||(DZE_4)||(DZE_5)||(DZE_6)||(DZE_cancelBuilding)||((time - _lastLoop) > 5))}; _zheightchanged = false; _zheightdirection = ""; _rotate = false; if (DZE_Q) then { DZE_Q = false; _zheightdirection = "up"; _zheightchanged = true; }; if (DZE_Z) then { DZE_Z = false; _zheightdirection = "down"; _zheightchanged = true; }; if (DZE_Q_alt) then { DZE_Q_alt = false; _zheightdirection = "up_alt"; _zheightchanged = true; }; if (DZE_Z_alt) then { DZE_Z_alt = false; _zheightdirection = "down_alt"; _zheightchanged = true; }; if (DZE_Q_ctrl) then { DZE_Q_ctrl = false; _zheightdirection = "up_ctrl"; _zheightchanged = true; }; if (DZE_Z_ctrl) then { DZE_Z_ctrl = false; _zheightdirection = "down_ctrl"; _zheightchanged = true; }; if (DZE_4) then { DZE_4 = false; SnappingDir = 0; _rotate = true; }; if (DZE_6) then { DZE_6 = false; SnappingDir = 180; _rotate = true; }; if (_zheightchanged) then { if (_zheightdirection == "up") then { SnappingOffset set [2, ((SnappingOffset select 2) + 0.1)]; }; if (_zheightdirection == "down") then { SnappingOffset set [2, ((SnappingOffset select 2) - 0.1)]; }; if (_zheightdirection == "up_alt") then { SnappingOffset set [2, ((SnappingOffset select 2) + 1)]; }; if (_zheightdirection == "down_alt") then { SnappingOffset set [2, ((SnappingOffset select 2) - 1)]; }; if (_zheightdirection == "up_ctrl") then { SnappingOffset set [2, ((SnappingOffset select 2) + 0.01)]; }; if (_zheightdirection == "down_ctrl") then { SnappingOffset set [2, ((SnappingOffset select 2) - 0.01)]; }; }; if (_zheightchanged or _rotate) then { SnappingAttachedToPlayer = false; }; _location2 = getPosATL player; if (DZE_5) exitWith { _isOk = false; detach _object; _dir = getDir _object; _position = getPosATL _object; diag_log format["DEBUG BUILDING POS: %1", _position]; systemChat ("Preparing to build..."); }; if (DZE_togglesnap) then { DZE_togglesnap = false; if (SnappingEnabled) then { SnappingEnabled = false; SnappingAttachedToPlayer = false; _TXT = "Building snapping disabled."; systemChat ("Anti-Hack: "+STR _TXT+""); } else { SnappingEnabled = true; _TXT = "Building snapping enabled."; systemChat ("Anti-Hack: "+STR _TXT+""); }; }; if (DZE_cancelBuilding) exitWith { _isOk = false; _cancel = true; _reason = "Cancelled building."; systemChat ("Building terminated... REASON:" + str _reason); detach _object; }; if(_location1 distance _location2 > 5) exitWith { _isOk = false; _cancel = true; _reason = "Moving too fast."; systemChat ("Building terminated... REASON:" + str _reason); detach _object; }; if(_previewCounter <= 0) exitWith { _isOk = false; _cancel = true; _reason = "Ran out of time to find position."; systemChat ("Building terminated... REASON:" + str _reason); detach _object; }; _previewCounter = _previewCounter - 1; if (((SnappingOffset select 2) > 10) or ((SnappingOffset select 2) < -5)) exitWith { _isOk = false; _cancel = true; _reason = "Cannot move up more than 10 meters, or down less than -5 meters"; systemChat ("Building terminated... REASON:" + str _reason); detach _object; }; if (player getVariable["combattimeout", 0] >= time) exitWith { _isOk = false; _cancel = true; _reason = "Cannot build while in combat."; systemChat ("Building terminated... REASON:" + str _reason); detach _object; }; }; terminate _snapper; terminate _keyThrd; {deleteVehicle _x;} forEach SnappingSpotMarkers; SnappingSpotMarkers = []; if ((isOnRoad _position)&&(isNil "AM_Epoch_ADMIN_norestrict")&&(!DZE_BuildOnRoads)) then { _cancel = true; _reason = "Cannot build on a road."; }; if ((!canbuild)&&(isNil "AM_Epoch_ADMIN_norestrict")) then { _cancel = true; _reason = "Cannot build in a city."; }; if ((!placevault)&&(isNil "AM_Epoch_ADMIN_norestrict")) then { _cancel = true; _reason = "Cannot build in a city."; }; _position = getPosATL _object; _dir = getDir _object; deleteVehicle _object; if (!_cancel) then { _classname = _classnametmp; _tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; _tmpbuilt addEventHandler ["HandleDamage", {false}]; _tmpbuilt enableSimulation false; _tmpbuilt setdir _dir; if ((_classname in dami_indestructables)&&(getPlayerUID player in dami_indarra)) then { _tmpbuilt addEventHandler ["HandleDamage", {false}]; _tmpbuilt enableSimulation false; }; _location = _position; if((_isAllowedUnderGround == 0) and ((_location select 2) < 0)) then { _location set [2,0]; }; _tmpbuilt setPosATL _location; cutText [format[(localize "str_epoch_player_138"),_text], "PLAIN DOWN"]; systemChat format["Placing %1, move to cancel.",_text]; _limit = 3; if(isNumber (configFile >> "CfgVehicles" >> _classname >> "constructioncount")) then { _limit = getNumber(configFile >> "CfgVehicles" >> _classname >> "constructioncount"); }; _isOk = true; _proceed = false; _counter = 0; while {_isOk} do { if ((!isNil "AM_Epoch_ADMIN")||(getPlayerUID player in dami_instntbarra)) exitWith { _isOk = false; _proceed = true; systemChat ("Instant build!"); }; [10,10] call dayz_HungerThirst; player playActionNow "Medic"; _dis=20; _sfx = "repair"; [player,_sfx,0,false,_dis] call dayz_zombieSpeak; [player,_dis,true,(getPosATL player)] spawn player_alertZombies; r_interrupt = false; _animState = animationState player; r_doLoop = true; _started = false; _finished = false; while {r_doLoop} do { _animState = animationState player; _isMedic = ["medic",_animState] call fnc_inString; if (_isMedic) then { _started = true; }; if (_started and !_isMedic) then { r_doLoop = false; _finished = true; }; if (r_interrupt or (player getVariable["combattimeout", 0] >= time)) then { r_doLoop = false; }; if (DZE_cancelBuilding) exitWith { r_doLoop = false; }; sleep 0.1; }; r_doLoop = false; if(!_finished) exitWith { _isOk = false; _proceed = false; }; if(_finished) then { _counter = _counter + 1; }; cutText [format[(localize "str_epoch_player_139"),_text, _counter,_limit], "PLAIN DOWN"]; systemChat format["Constructing %1 stage %2 of %3, move to cancel.",_text, _counter,_limit]; if(_counter == _limit) exitWith { _isOk = false; _proceed = true; }; }; if (_proceed) then { _num_removed = ([player,_item] call BIS_fnc_invRemove); if(_num_removed == 1) then { cutText [format[localize "str_build_01",_text], "PLAIN DOWN"]; systemChat format["You have constructed a %1",_text]; if (_isPole) then { [] spawn player_plotPreview; }; _tmpbuilt setVariable ["OEMPos",_location,true]; if(_lockable > 1) then { _combinationDisplay = ""; switch (_lockable) do { case 2: { // 2 lockbox _combination_1 = (floor(random 3)) + 100; // 100=red,101=green,102=blue _combination_2 = floor(random 10); _combination_3 = floor(random 10); _combination = format["%1%2%3",_combination_1,_combination_2,_combination_3]; if (_combination_1 == 100) then { _combination_1_Display = "Red"; }; if (_combination_1 == 101) then { _combination_1_Display = "Green"; }; if (_combination_1 == 102) then { _combination_1_Display = "Blue"; }; _combinationDisplay = format["%1%2%3",_combination_1_Display,_combination_2,_combination_3]; }; case 3: { _combination_1 = floor(random 10); _combination_2 = floor(random 10); _combination_3 = floor(random 10); _combination = format["%1%2%3",_combination_1,_combination_2,_combination_3]; _combinationDisplay = _combination; }; case 4: { _combination_1 = floor(random 10); _combination_2 = floor(random 10); _combination_3 = floor(random 10); _combination_4 = floor(random 10); _combination = format["%1%2%3%4",_combination_1,_combination_2,_combination_3,_combination_4]; _combinationDisplay = _combination; }; }; _tmpbuilt setVariable ["CharacterID",_combination,true]; PVDZE_obj_Publish = [_combination,_tmpbuilt,[_dir,_location],_classname]; publicVariableServer "PVDZE_obj_Publish"; cutText [format[(localize "str_epoch_player_140"),_combinationDisplay,_text], "PLAIN DOWN", 5]; systemChat format["You have setup your %2. Combination is %1",_combinationDisplay,_text]; } else { _tmpbuilt setVariable ["CharacterID",dayz_characterID,true]; if(_tmpbuilt isKindOf "Land_Fire") then { _tmpbuilt spawn player_fireMonitor; } else { PVDZE_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location],_classname]; publicVariableServer "PVDZE_obj_Publish"; }; }; } else { deleteVehicle _tmpbuilt; cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"]; systemChat ("Canceled building."); }; } else { r_interrupt = false; if (vehicle player == player) then { [objNull, player, rSwitchMove,""] call RE; player playActionNow "stop"; }; deleteVehicle _tmpbuilt; cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"]; systemChat ("Canceled building."); }; } else { deleteVehicle _tmpbuilt; cutText [format[(localize "str_epoch_player_47"),_text,_reason], "PLAIN DOWN"]; systemChat format["Canceled construction of %1 %2.",_text,_reason]; }; }; DZE_ActionInProgress = false; Snappbuild :
    /* DayZ Base Building Made for DayZ Epoch please ask permission to use/edit/distrubute email [email protected]. */ /* Build Snapping - Extended v1.6 Idea and first code: Maca Reworked by: OtterNas3 01/11/2014 Last update 02/20/2014 */ private ["_location","_dir","_classname","_item","_hasrequireditem","_missing","_hastoolweapon","_cancel","_reason","_started","_finished","_animState","_isMedic","_dis","_sfx","_hasbuilditem","_tmpbuilt","_onLadder","_isWater","_require","_text","_offset","_IsNearPlot","_isOk","_location1","_location2","_counter","_limit","_proceed","_num_removed","_position","_object","_canBuildOnPlot","_friendlies","_nearestPole","_ownerID","_findNearestPoles","_findNearestPole","_distance","_classnametmp","_ghost","_isPole","_needText","_lockable","_zheightchanged","_rotate","_combination_1","_combination_2","_combination_3","_combination_4","_combination","_combination_1_Display","_combinationDisplay","_zheightdirection","_abort","_isNear","_need","_objHupDiff","_needNear","_vehicle","_inVehicle","_requireplot","_objHDiff","_isLandFireDZ","_isTankTrap"]; if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_40") , "PLAIN DOWN"]; }; DZE_ActionInProgress = true; // disallow building if too many objects are found within 30m if((count ((getPosATL player) nearObjects ["All",30])) >= DZE_BuildingLimit) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_41"), "PLAIN DOWN"];}; _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1; _isWater = dayz_isSwimming; _cancel = false; _reason = ""; _canBuildOnPlot = false; _vehicle = vehicle player; _inVehicle = (_vehicle != player); DZE_Q = false; DZE_Z = false; DZE_Q_alt = false; DZE_Z_alt = false; DZE_Q_ctrl = false; DZE_Z_ctrl = false; DZE_5 = false; DZE_4 = false; DZE_6 = false; DZE_cancelBuilding = false; call gear_ui_init; closeDialog 1; if (_isWater) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_26", "PLAIN DOWN"];}; if (_inVehicle) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_42"), "PLAIN DOWN"];}; if (_onLadder) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_21", "PLAIN DOWN"];}; if (player getVariable["combattimeout", 0] >= time) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_43"), "PLAIN DOWN"];}; _item = _this; // Need Near Requirements _abort = false; _distance = 3; _reason = ""; _needNear = getArray (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "neednearby"); { switch(_x) do{ case "fire": { _isNear = {inflamed _x} count (getPosATL player nearObjects _distance); if(_isNear == 0) then { _abort = true; _reason = "fire"; }; }; case "workshop": { _isNear = count (nearestObjects [player, ["Wooden_shed_DZ","WoodShack_DZ","WorkBench_DZ"], _distance]); if(_isNear == 0) then { _abort = true; _reason = "workshop"; }; }; case "fueltank": { _isNear = count (nearestObjects [player, dayz_fuelsources, _distance]); if(_isNear == 0) then { _abort = true; _reason = "fuel tank"; _distance = 30; }; }; }; } forEach _needNear; if(_abort) exitWith { cutText [format[(localize "str_epoch_player_135"),_reason,_distance], "PLAIN DOWN"]; DZE_ActionInProgress = false; }; _classname = getText (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "create"); _classnametmp = _classname; _require = getArray (configFile >> "cfgMagazines" >> _this >> "ItemActions" >> "Build" >> "require"); _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); _ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview"); _lockable = 0; if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then { _lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable"); }; _requireplot = DZE_requireplot; if(isNumber (configFile >> "CfgVehicles" >> _classname >> "requireplot")) then { _requireplot = getNumber(configFile >> "CfgVehicles" >> _classname >> "requireplot"); }; _isAllowedUnderGround = 1; if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then { _isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground"); }; _offset = getArray (configFile >> "CfgVehicles" >> _classname >> "offset"); if((count _offset) <= 0) then { _offset = [0,1.5,0]; }; _isPole = (_classname == "Plastic_Pole_EP1_DZ"); _isLandFireDZ = (_classname == "Land_Fire_DZ"); _distance = DZE_PlotPole select 0; _needText = localize "str_epoch_player_246"; if(_isPole) then { _distance = DZE_PlotPole select 1; }; // check for near plot _findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance]; _findNearestPole = []; { if (alive _x) then { _findNearestPole set [(count _findNearestPole),_x]; }; } foreach _findNearestPoles; _IsNearPlot = count (_findNearestPole); // If item is plot pole and another one exists within 45m if(_isPole and _IsNearPlot > 0) exitWith { DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_44") , "PLAIN DOWN"]; }; if(_IsNearPlot == 0) then { // Allow building of plot if(_requireplot == 0 or _isLandFireDZ) then { _canBuildOnPlot = true; }; } else { // Since there are plots nearby we check for ownership and then for friend status // check nearby plots ownership and then for friend status _nearestPole = _findNearestPole select 0; // Find owner _ownerID = _nearestPole getVariable["CharacterID","0"]; // diag_log format["DEBUG BUILDING: %1 = %2", dayz_characterID, _ownerID]; // check if friendly to owner if(dayz_characterID == _ownerID) then { //Keep ownership // owner can build anything within his plot except other plots if(!_isPole) then { _canBuildOnPlot = true; }; } else { // disallow building plot if(!_isPole) then { _friendlies = player getVariable ["friendlyTo",[]]; // check if friendly to owner if(_ownerID in _friendlies) then { _canBuildOnPlot = true; }; }; }; }; // _message if(!_canBuildOnPlot) exitWith { DZE_ActionInProgress = false; cutText [format[(localize "STR_EPOCH_PLAYER_135"),_needText,_distance] , "PLAIN DOWN"]; }; _missing = ""; _hasrequireditem = true; { _hastoolweapon = _x in weapons player; if(!_hastoolweapon) exitWith { _hasrequireditem = false; _missing = getText (configFile >> "cfgWeapons" >> _x >> "displayName"); } } forEach _require; _hasbuilditem = _this in magazines player; if (!_hasbuilditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_player_31"),_text,"build"] , "PLAIN DOWN"]; }; if (!_hasrequireditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_epoch_player_137"),_missing] , "PLAIN DOWN"]; }; if (_hasrequireditem) then { _location = [0,0,0]; _isOk = true; // get inital players position _location1 = getPosATL player; _dir = getDir player; /* Commented out cause GHOST preview does not work with snapping! // if ghost preview available use that instead if (_ghost != "") then { _classname = _ghost; }; */ _object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; _object setDir _dir; _object attachTo [player,_offset]; _position = getPosATL _object; cutText [(localize "str_epoch_player_45"), "PLAIN DOWN"]; player allowDamage false; SnappingOffset = _offset; SnappingDir = 0; SnappingSpotMarkers = []; SnappingEnabled = false; SnappedOffsetZ = 0; SnappingResetPos = false; if (isClass (missionConfigFile >> "SnapPoints" >> _classname)) then { s_building_snapping = player addAction ["<t color="#0000ff"">Toggle Snapping</t>", "custom\snap_build\player_toggleSnapping.sqf",_classname, 3, true, false, "","]; }; _snapper = [_object, _classname] spawn snap_object; _key_monitor = [] spawn player_buildControls ; while {_isOk} do { sleep 1; _location2 = getPosATL player; if(DZE_5) exitWith { _isOk = false; detach _object; _dir = getDir _object; _position = getPosATL _object; }; if(_location1 distance _location2 > 5) exitWith { _isOk = false; _cancel = true; _reason = "You've moved to far away from where you started building (within 5 meters)"; detach _object; }; if(((SnappingOffset select 2) > 5) or ((SnappingOffset select 2) < -5)) exitWith { _isOk = false; _cancel = true; _reason = "Cannot move up or down more than 5 meters"; detach _object; }; if (player getVariable["combattimeout", 0] >= time) exitWith { _isOk = false; _cancel = true; _reason = (localize "str_epoch_player_43"); detach _object; }; if (DZE_cancelBuilding) exitWith { _isOk = false; _cancel = true; _reason = "Cancelled building."; detach _object; }; }; terminate _snapper; terminate _key_monitor; player removeAction s_building_snapping; player allowDamage true; //No building on roads unless toggled if (!DZE_BuildOnRoads) then { if (isOnRoad _position) then { _cancel = true; _reason = "Cannot build on a road."; }; }; // No building in trader zones if(!canbuild) then { _cancel = true; _reason = "Cannot build in a city."; }; if(!_cancel) then { _classname = _classnametmp; _location = _position; if((_isAllowedUnderGround == 0) and ((_location select 2) < 0)) then { _location set [2,0]; }; _object setPosATL _location; cutText [format[(localize "str_epoch_player_138"),_text], "PLAIN DOWN"]; _limit = 3; if (DZE_StaticConstructionCount > 0) then { _limit = DZE_StaticConstructionCount; } else { if (isNumber (configFile >> "CfgVehicles" >> _classname >> "constructioncount")) then { _limit = getNumber(configFile >> "CfgVehicles" >> _classname >> "constructioncount"); }; }; _isOk = true; _proceed = false; _counter = 0; while {_isOk} do { [10,10] call dayz_HungerThirst; player playActionNow "Medic"; _dis=20; _sfx = "repair"; [player,_sfx,0,false,_dis] call dayz_zombieSpeak; [player,_dis,true,(getPosATL player)] spawn player_alertZombies; r_interrupt = false; _animState = animationState player; r_doLoop = true; _started = false; _finished = false; while {r_doLoop} do { _animState = animationState player; _isMedic = ["medic",_animState] call fnc_inString; if (_isMedic) then { _started = true; }; if (_started and !_isMedic) then { r_doLoop = false; _finished = true; }; if (r_interrupt or (player getVariable["combattimeout", 0] >= time)) then { r_doLoop = false; }; if (DZE_cancelBuilding) exitWith { r_doLoop = false; }; sleep 0.1; }; r_doLoop = false; if(!_finished) exitWith { _isOk = false; _proceed = false; }; if(_finished) then { _counter = _counter + 1; }; cutText [format[(localize "str_epoch_player_139"),_text, _counter,_limit], "PLAIN DOWN"]; if(_counter == _limit) exitWith { _isOk = false; _proceed = true; }; }; if (_proceed) then { _num_removed = ([player,_item] call BIS_fnc_invRemove); if(_num_removed == 1) then { cutText [format[localize "str_build_01",_text], "PLAIN DOWN"]; if (_isPole) then { [] spawn player_plotPreview; }; _object setVariable ["OEMPos",_location,true]; if(_lockable > 1) then { _combinationDisplay = ""; switch (_lockable) do { case 2: { // 2 lockbox _combination_1 = (floor(random 3)) + 100; // 100=red,101=green,102=blue _combination_2 = floor(random 10); _combination_3 = floor(random 10); _combination = format["%1%2%3",_combination_1,_combination_2,_combination_3]; dayz_combination = _combination; if (_combination_1 == 100) then { _combination_1_Display = "Red"; }; if (_combination_1 == 101) then { _combination_1_Display = "Green"; }; if (_combination_1 == 102) then { _combination_1_Display = "Blue"; }; _combinationDisplay = format["%1%2%3",_combination_1_Display,_combination_2,_combination_3]; }; case 3: { // 3 combolock _combination_1 = floor(random 10); _combination_2 = floor(random 10); _combination_3 = floor(random 10); _combination = format["%1%2%3",_combination_1,_combination_2,_combination_3]; dayz_combination = _combination; _combinationDisplay = _combination; }; case 4: { // 4 safe _combination_1 = floor(random 10); _combination_2 = floor(random 10); _combination_3 = floor(random 10); _combination_4 = floor(random 10); _combination = format["%1%2%3%4",_combination_1,_combination_2,_combination_3,_combination_4]; dayz_combination = _combination; _combinationDisplay = _combination; }; }; _object setVariable ["CharacterID",_combination,true]; PVDZE_obj_Publish = [_combination,_object,[_dir,_location],_classname]; publicVariableServer "PVDZE_obj_Publish"; cutText [format[(localize "str_epoch_player_140"),_combinationDisplay,_text], "PLAIN DOWN", 5]; } else { _object setVariable ["CharacterID",dayz_characterID,true]; // fire? if(_object isKindOf "Land_Fire_DZ") then { _object spawn player_fireMonitor; } else { PVDZE_obj_Publish = [dayz_characterID,_object,[_dir,_location],_classname]; publicVariableServer "PVDZE_obj_Publish"; }; }; } else { deleteVehicle _object; cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"]; }; } else { r_interrupt = false; if (vehicle player == player) then { [objNull, player, rSwitchMove,""] call RE; player playActionNow "stop"; }; deleteVehicle _object; cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"]; }; } else { deleteVehicle _object; cutText [format[(localize "str_epoch_player_47"),_text,_reason], "PLAIN DOWN"]; }; }; DZE_ActionInProgress = false;  if someone could help me, i would greatly appreciate it ;)
     
    Thx,
    NorthyPark
×
×
  • Create New...