diff --git a/CHANGE LOG 1.0.6.1.txt b/CHANGE LOG 1.0.6.1.txt index 3ff1858b1..0d3e6ba67 100644 --- a/CHANGE LOG 1.0.6.1.txt +++ b/CHANGE LOG 1.0.6.1.txt @@ -58,6 +58,7 @@ [FIXED] Running corpses when the dead player has no primary weapon @icomrade [FIXED] "AI" text localized on wrong client in death messages. #1867 @LunaCB [FIXED] Group icons will not show for units inside the player's vehicle anymore (helis, large planes, etc.). #1865 @schwanzkopfhegel +[FIXED] Lighting fires and building fireplaces not working on platforms raised over the sea. #1866 @schwanzkopfhegel [NOTE] The fixes below are included in the 1.0.6 Build C server package released December 29th, 2016 (http://dayzepoch.com/a2dayzepoch.php) [FIXED] Hive child 309 errors that resulted in broken saving of newly built storage object inventory. @icomrade diff --git a/SQF/dayz_code/Configs/CfgMagazines/Items/Wood.hpp b/SQF/dayz_code/Configs/CfgMagazines/Items/Wood.hpp index 4f923c156..7c7080922 100644 --- a/SQF/dayz_code/Configs/CfgMagazines/Items/Wood.hpp +++ b/SQF/dayz_code/Configs/CfgMagazines/Items/Wood.hpp @@ -59,7 +59,7 @@ class PartWoodPile : CA_Magazine class ItemActions { class Build { text = $STR_ACTIONS_MAKEFIRE; - script = "spawn player_makeFire;"; + script = "spawn player_makeFire;"; //Do not use player_build because we have no ghost preview model for Land_Fire_DZ yet use[] = {"PartWoodPile"}; }; class Crafting diff --git a/SQF/dayz_code/Configs/CfgWeapons/Tools/Matchbox.hpp b/SQF/dayz_code/Configs/CfgWeapons/Tools/Matchbox.hpp index 861f2d267..eaa5e537f 100644 --- a/SQF/dayz_code/Configs/CfgWeapons/Tools/Matchbox.hpp +++ b/SQF/dayz_code/Configs/CfgWeapons/Tools/Matchbox.hpp @@ -26,7 +26,7 @@ class ItemMatchbox : ItemMatchbox_base class Use { text = $STR_ACTIONS_MAKEFIRE; - script = "spawn player_makeFire;"; + script = "spawn player_makeFire;"; //Do not use player_build because we have no ghost preview model for Land_Fire_DZ yet use[] = {"PartWoodPile"}; }; }; diff --git a/SQF/dayz_code/actions/modular_build.sqf b/SQF/dayz_code/actions/modular_build.sqf index 1ee6380be..8d83bfd15 100644 --- a/SQF/dayz_code/actions/modular_build.sqf +++ b/SQF/dayz_code/actions/modular_build.sqf @@ -544,7 +544,8 @@ if (_canBuild select 0) then { } else { //if not lockable item _tmpbuilt setVariable ["CharacterID",dayz_characterID,true]; // fire? - if(_tmpbuilt isKindOf "Land_Fire_DZ") then { //if campfire, then spawn, but do not publish to database + if (_tmpbuilt isKindOf "Land_Fire_DZ") then { //if campfire, then spawn, but do not publish to database + [_tmpbuilt,true] call dayz_inflame; _tmpbuilt spawn player_fireMonitor; } else { if (DZE_permanentPlot) then { diff --git a/SQF/dayz_code/actions/player_build.sqf b/SQF/dayz_code/actions/player_build.sqf index 4e73f58a3..d5cef6b82 100644 --- a/SQF/dayz_code/actions/player_build.sqf +++ b/SQF/dayz_code/actions/player_build.sqf @@ -450,7 +450,8 @@ if (_canBuild select 0) then { } else { _tmpbuilt setVariable ["CharacterID",dayz_characterID,true]; // fire? - if(_tmpbuilt isKindOf "Land_Fire_DZ") then { + if (_tmpbuilt isKindOf "Land_Fire_DZ") then { //if campfire, then spawn, but do not publish to database + [_tmpbuilt,true] call dayz_inflame; _tmpbuilt spawn player_fireMonitor; } else { if (DZE_permanentPlot) then { diff --git a/SQF/dayz_code/actions/player_craftItem.sqf b/SQF/dayz_code/actions/player_craftItem.sqf index 1244e62d1..b0f4af5f5 100644 --- a/SQF/dayz_code/actions/player_craftItem.sqf +++ b/SQF/dayz_code/actions/player_craftItem.sqf @@ -23,7 +23,7 @@ class ItemActions }; }; */ -private ["_tradeComplete","_onLadder","_canDo","_selectedRecipeOutput","_boiled","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_selectedRecipeInputStrict","_num_removed","_removed_total","_temp_removed_array","_abort","_waterLevel","_waterLevel_lowest","_reason","_isNear","_missingTools","_hastoolweapon","_selectedRecipeTools","_distance","_crafting","_needNear","_item","_baseClass","_num_removed_weapons","_outputWeapons","_inputWeapons","_randomOutput","_craft_doLoop","_selectedWeapon","_selectedMag","_sfx"]; +private ["_tradeComplete","_onLadder","_canDo","_selectedRecipeOutput","_boiled","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_selectedRecipeInputStrict","_num_removed","_removed_total","_temp_removed_array","_abort","_waterLevel","_waterLevel_lowest","_reason","_isNear","_selectedRecipeTools","_distance","_crafting","_needNear","_item","_baseClass","_num_removed_weapons","_outputWeapons","_inputWeapons","_randomOutput","_craft_doLoop","_selectedWeapon","_selectedMag","_sfx"]; if (dayz_actionInProgress) exitWith {localize "str_epoch_player_63" call dayz_rollingMessages;}; dayz_actionInProgress = true; @@ -94,20 +94,7 @@ if (_canDo) then { while {_craft_doLoop} do { _temp_removed_array = []; - _missing = ""; - _missingTools = false; - { - _hastoolweapon = _x in weapons player; - if (_x == "ItemKnife") then { - {if (_x in Dayz_Gutting) exitWith {_hastoolweapon = true};} forEach (items player); - }; - if (_x == "ItemMatchbox") then { - {if (_x in DayZ_Ignitors) exitWith {_hastoolweapon = true};} forEach (items player); - }; - if (!_hastoolweapon) exitWith { _craft_doLoop = false; _missingTools = true; _missing = _x; }; - } forEach _selectedRecipeTools; - - if (!_missingTools) then { + if ([_item,_selectedRecipeTools,"none"] call dze_requiredItemsCheck) then { // Dry run to see if all parts are available. _proceed = true; if (count _selectedRecipeInput > 0) then { @@ -282,8 +269,7 @@ if (_canDo) then { _craft_doLoop = false; }; } else { - _textMissing = getText(configFile >> "CfgWeapons" >> _missing >> "displayName"); - format[localize "STR_EPOCH_PLAYER_137",_textMissing] call dayz_rollingMessages; + //Missing text shown in dze_requiredItemsCheck _craft_doLoop = false; }; }; diff --git a/SQF/dayz_code/actions/player_makefire.sqf b/SQF/dayz_code/actions/player_makefire.sqf index 916b9118d..ad5547725 100644 --- a/SQF/dayz_code/actions/player_makefire.sqf +++ b/SQF/dayz_code/actions/player_makefire.sqf @@ -1,4 +1,4 @@ -private ["_item","_config","_exit","_text","_booleans","_worldspace","_dir","_location","_dis","_fire","_tool","_itemPile"]; +private ["_item","_config","_exit","_text","_booleans","_worldspace","_dir","_location","_dis","_fire","_tool","_itemPile","_posASL","_testSea"]; _tool = _this; call gear_ui_init; @@ -11,15 +11,8 @@ _text = getText (_config >> "displayName"); _exit = false; if (_tool == "PartWoodPile") then { - switch true do { - case ("Item1Matchbox" in (weapons player)): {_tool = "Item1Matchbox";}; - case ("Item2Matchbox" in (weapons player)): {_tool = "Item2Matchbox";}; - case ("Item3Matchbox" in (weapons player)): {_tool = "Item3Matchbox";}; - case ("Item4Matchbox" in (weapons player)): {_tool = "Item4Matchbox";}; - case ("Item5Matchbox" in (weapons player)): {_tool = "Item5Matchbox";}; - case ("ItemMatchbox" in (weapons player)): {_tool = "ItemMatchbox";}; - default {_exit = true;}; - }; + _exit = true; + {if (_x in DayZ_Ignitors) exitWith {_exit = false};} forEach (items player); }; if (_exit) exitWith {(localize "str_fireplace_noMatches") call dayz_rollingMessages;}; @@ -35,8 +28,16 @@ _worldspace = ["Land_Fire_DZ", player, _booleans] call fn_niceSpot; // player on ladder or in a vehicle if (_booleans select 0) exitWith { localize "str_player_21" call dayz_rollingMessages; }; +_testSea = true; +_posASL = getPosASL player; +if ((_booleans select 1) && _posASL select 2 > 2) then { + //Allow building on raised platform 2m+ ASL (like docks) + _testSea = false; + _worldspace = [0,_posASL]; +}; + // object would be in the water (pool or sea) -if ((_booleans select 1) OR (_booleans select 2)) exitWith { localize "str_player_26" call dayz_rollingMessages; }; +if ((_booleans select 1 && _testSea) OR (_booleans select 2)) exitWith { localize "str_player_26" call dayz_rollingMessages; }; if ((count _worldspace) == 2) then { if (_item in magazines player) then { @@ -61,9 +62,13 @@ if ((count _worldspace) == 2) then { uiSleep 5; - _fire = createVehicle ["Land_Fire_DZ", getMarkerpos "respawn_west", [], 0, "CAN_COLLIDE"]; + _fire = createVehicle ["Land_Fire_DZ", [0,0,0], [], 0, "CAN_COLLIDE"]; _fire setDir _dir; - _fire setPos _location; // follow terrain slope + if (_testSea) then { + _fire setPos _location; // follow terrain slope + } else { + _fire setPosASL _location; + }; player reveal _fire; [_fire,true] call dayz_inflame; _fire spawn player_fireMonitor; @@ -74,9 +79,7 @@ if ((count _worldspace) == 2) then { achievement = [14, player, dayz_characterID]; publicVariableServer "achievement"; };*/ - //localize "str_fireplace_01" call dayz_rollingMessages; - (localize "str_fireplace_01") call dayz_rollingMessages; + localize "str_fireplace_01" call dayz_rollingMessages; } else { - //localize "str_fireplace_02" call dayz_rollingMessages; - (localize "str_fireplace_0") call dayz_rollingMessages; + localize "str_fireplace_02" call dayz_rollingMessages; }; \ No newline at end of file diff --git a/SQF/dayz_code/compile/dze_requiredItemsCheck.sqf b/SQF/dayz_code/compile/dze_requiredItemsCheck.sqf index 47897d11a..28f0c894c 100644 --- a/SQF/dayz_code/compile/dze_requiredItemsCheck.sqf +++ b/SQF/dayz_code/compile/dze_requiredItemsCheck.sqf @@ -1,4 +1,4 @@ -private ["_missingText","_hasrequireditem","_hastoolweapon","_item","_require","_missing","_text","_classname","_hasbuilditem"]; +private ["_missingText","_hasrequireditem","_hastoolweapon","_item","_require","_missing","_text","_classname","_hasbuilditem","_items","_melee","_weapons","_weapon"]; _item = _this select 0; _require = _this select 1; @@ -7,16 +7,34 @@ _missing = []; _missingText = ""; _hasrequireditem = true; _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); +_items = items player; +_weapons = weapons player; + { - _hastoolweapon = _x in weapons player; + _weapon = _x; + _hastoolweapon = _x in _weapons; + + if (_x == "ItemKnife") then { + {if (_x in Dayz_Gutting) exitWith {_hastoolweapon = true};} forEach _items; + }; + if (_x == "ItemMatchbox") then { + {if (_x in DayZ_Ignitors) exitWith {_hastoolweapon = true};} forEach _items; + }; + { + _melee = format ["Melee%1",_x]; + if (_weapon == format["Item%1",_x] && {(_melee in _weapons) or (dayz_onBack == _melee)}) then { + _hastoolweapon = true; + }; + } forEach ["Crowbar","Hatchet","Sledge"]; + if (!_hastoolweapon) then { _missingText = getText (configFile >> "cfgWeapons" >> _x >> "displayName"); _missing set [count _missing, _missingText]; _hasrequireditem = false; }; } forEach _require; -_missingText = ""; +_missingText = ""; { if (_forEachIndex == 0) then { _missingText = _x; @@ -30,7 +48,7 @@ _missingText = ""; } forEach _missing; _hasbuilditem = _item in magazines player; -if (!_hasbuilditem) exitWith {dayz_actionInProgress = false; format[localize "str_player_31",_text,"build"] call dayz_rollingMessages; false;}; +if (!_hasbuilditem && _text != "") exitWith {dayz_actionInProgress = false; format[localize "str_player_31",_text,"build"] call dayz_rollingMessages; false;}; if (!_hasrequireditem) exitWith {dayz_actionInProgress = false; format[localize "str_epoch_player_137",_missingText] call dayz_rollingMessages; false;}; //When calling this function in another script use a silent exitWith, unless you have something special to say. i.e. if (!_hasrequireditem) exitWith{}; diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf index ca90c9cac..12adf9a77 100644 --- a/SQF/dayz_code/init/compiles.sqf +++ b/SQF/dayz_code/init/compiles.sqf @@ -774,9 +774,15 @@ dayz_inflame_other = { _flame = if (count _flame > 0) then { _flame select 0 } else { objNull }; if (isNull _flame) then { //_flame = if (local _fireplace) then { "flamable_DZ" createVehicleLocal getMarkerpos "respawn_west" } else { createVehicle [ "flamable_DZ", getMarkerpos "respawn_west", [], 0, "CAN_COLLIDE"] }; - _flame = createVehicle [ "flamable_DZ", getPosATL _fireplace, [], 0, "CAN_COLLIDE"]; // fireplace can be local (towngenerator, poi...) but flames will be networked - _pos = _fireplace modelToWorld (_fireplace selectionPosition "ohniste"); // ATL - _flame setPosATL _pos; + _flame = createVehicle ["flamable_DZ", [0,0,0], [], 0, "CAN_COLLIDE"]; // fireplace can be local (towngenerator, poi...) but flames will be networked + _pos = getPosASL _fireplace; + if (surfaceIsWater _pos) then { + // modelToWorld changes with wave height + _flame setPosASL [_pos select 0,_pos select 1,(_pos select 2)+0.2]; + } else { + _pos = _fireplace modelToWorld (_fireplace selectionPosition "ohniste"); // ATL + _flame setPosATL _pos; + }; }; if (["matches",0.12] call fn_dynamicTool) then { _flame inflame true; }; diff --git a/Server Files/Battleye/scripts.txt b/Server Files/Battleye/scripts.txt index a55921359..f669f91c3 100644 --- a/Server Files/Battleye/scripts.txt +++ b/Server Files/Battleye/scripts.txt @@ -42,7 +42,7 @@ 5 setMarkerSize 5 setMarkerText !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" 5 setMarkerType !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" -5 setPosASL !="_unit setPosAsl [(_position select 0), (_position select 1), (LHA_height+1)];" !="_objectHelper setPosASL _position;" !="_tmpbuilt setPosASL _location;" !="_b0x1337 setPosASL (getPosASL player);" !"_obj setPosASL [_center select 0, " !"_obj setPosASL [_a, " !"_objectSnapGizmo setPosASL " !"_para setposasl [\n" !"_thingy setPosASL (ATLToASL _pos);" +5 setPosASL !="_unit setPosAsl [(_position select 0), (_position select 1), (LHA_height+1)];" !="_flame setPosASL [_pos select 0,_pos select 1,(_pos select 2)+0.2];" !="_fire setPosASL _location;" !="_objectHelper setPosASL _position;" !="_tmpbuilt setPosASL _location;" !="_b0x1337 setPosASL (getPosASL player);" !"_obj setPosASL [_center select 0, " !"_obj setPosASL [_a, " !"_objectSnapGizmo setPosASL " !"_para setposasl [\n" !"_thingy setPosASL (ATLToASL _pos);" 5 setTerrainGrid !"if (dayz_REsec == 1) then {call compile preprocessFileLineNumbers \"" 5 setUnitRecoilCoefficient 5 setVehicle !="_this setVehicleInit \"this setVectorUp [0,0,1];\";" !"if(_status) then {\n_vehicle setVehicleLock \"LOCKED\";\n} else {\n_vehicle setVehicleLock \"UNLOCKED\";\n};"