From 53bb1b9075e5216b36a4ecf424d5f467c9a28dec Mon Sep 17 00:00:00 2001 From: vbawol Date: Sat, 27 Apr 2013 19:11:24 -0500 Subject: [PATCH] 1.0.0.6 Developer Build + [CHANGED] lowered metal pole crafting requirements to 1 scrap 1 tank trap. + [CHANGED] Corrugated crafting now {"ItemPole",1},{"PartGeneric",2},{"ItemTankTrap",1},{"PartWoodLumber",2}. + [CHANGED] Generator can now be started and stopped. + [FIXED] Generators cannot be removed while running. + [ADDED] New larger backpack: DZ_LargeGunBag_EP1 (Weapons = 10; Magazines = 45) added to MilitarySpecial loot table. + [ADDED] New backpack: DZ_GunBag_EP1 (Weapons = 6; Magazines = 8) added to Militaryloot table.. + [ADDED] New backpack: DZ_CompactPack_EP1 (Weapons = 1; Magazines = 18) added to Supermarket loot table. + [ADDED] New backpack: DZ_TerminalPack_EP1 (Weapons = 1; Magazines = 12) added to Supermarket loot table. + [ADDED] Green domed tent ItemTentDomed2 - TentStorageDomed2 added to Residential loot table at 0.01. + [ADDED] When removing road debris you will now get one random car part in return. + [ADDED] Revamped chopping wood so that it now actually chops down a tree within 5m. Supports specific tree types for most maps. + [ADDED] Craftable stick fence requires tools {"ItemToolbox","ItemKnife"} and input {"PartWoodPile",6}. + [ADDED] Buildable stick fence StickFence_DZ requires tools {"ItemEtool","ItemToolbox"}. + [CHANGED] Middle floor of A2 in Namalsk changed to MilitarySpecial. + [ADDED] 55 Gallon Fuel Barrel as a rare spawn to Farm and Industrial loot tables at 0.005. + [CHANGED] Lowered chance for spawn of generator to 0.005 from 0.01. + [FIXED] incorrectly setting characterID server side with wrong variable. --- dayz_code/CfgMagazines.hpp | 17 ++++ dayz_code/actions/fill_startGenerator.sqf | 45 +++++++--- dayz_code/actions/player_build.sqf | 42 ++++----- dayz_code/actions/player_chopWood.sqf | 95 ++++++++++++++++++-- dayz_code/actions/remove.sqf | 34 +++++-- dayz_code/actions/stopGenerator.sqf | 65 ++++++++++++++ dayz_code/actions/trade_any_vehicle.sqf | 37 ++++++-- dayz_code/cfgVehicles.hpp | 46 ++++++++++ dayz_code/compile/fn_selfActions.sqf | 23 ++++- dayz_code/config.cpp | 33 ++++--- dayz_code/init/variables.sqf | 2 +- dayz_code/rscTitles.hpp | 2 +- dayz_equip/config.cpp | 84 +++++++++++++++-- dayz_server/compile/server_publishObject.sqf | 9 +- 14 files changed, 455 insertions(+), 79 deletions(-) create mode 100644 dayz_code/actions/stopGenerator.sqf diff --git a/dayz_code/CfgMagazines.hpp b/dayz_code/CfgMagazines.hpp index 1724349b4..d9610b858 100644 --- a/dayz_code/CfgMagazines.hpp +++ b/dayz_code/CfgMagazines.hpp @@ -18,6 +18,23 @@ class CfgMagazines { }; }; }; + class ItemTentDomed2 : CA_Magazine { + scope = public; + count = 1; + type = 256; + displayName = $STR_EQUIP_NAME_20; + model = "\dayz_equip\models\tentbag_gear.p3d"; + picture = "\dayz_equip\textures\equip_tentbag_ca.paa"; + descriptionShort = $STR_EQUIP_DESC_20; + + class ItemActions { + class Pitch { + text = $STR_PITCH_TENT; + script = "spawn player_tentPitch;"; + create = "TentStorageDomed2"; + }; + }; + }; class ItemSandbag : CA_Magazine { scope = public; diff --git a/dayz_code/actions/fill_startGenerator.sqf b/dayz_code/actions/fill_startGenerator.sqf index 941826a1f..f163616b6 100644 --- a/dayz_code/actions/fill_startGenerator.sqf +++ b/dayz_code/actions/fill_startGenerator.sqf @@ -3,6 +3,9 @@ private ["_vehicle","_started","_finished","_animState","_isMedic"]; if(TradeInprogress) exitWith { cutText ["Refuel already in progress." , "PLAIN DOWN"] }; TradeInprogress = true; +player removeAction s_player_fillgen; + + // Use target from addaction _vehicle = _this select 3; @@ -40,29 +43,49 @@ if(!_finished) then { r_interrupt = false; [objNull, player, rSwitchMove,""] call RE; player playActionNow "stop"; - cutText ["Canceled refuel." , "PLAIN DOWN"] + cutText ["Canceled." , "PLAIN DOWN"] }; if (_finished) then { - // take jerry can and replace with empty - if(([player,"ItemJerrycan"] call BIS_fnc_invRemove) == 1) then { - player addMagazine "ItemJerrycanEmpty"; + // take jerry can and replace with empty + + if(!(_vehicle getVariable ["GeneratorFilled", false]) and ("ItemJerrycan" in magazines player)) then { + + if(([player,"ItemJerrycan"] call BIS_fnc_invRemove) == 1) then { + + player addMagazine "ItemJerrycanEmpty"; + + // mark as once filled + _vehicle setVariable ["GeneratorFilled", true,true]; + + // Start generator + _vehicle setVariable ["GeneratorRunning", true,true]; + + // Sound_Generator1 + // Looks like this was the entended way of making the sound, lets test + _soundSource = createSoundSource ["Sound_Generator1", position player, [], 0]; + + _vehicle setVariable ["GeneratorSound", _soundSource,true]; + + // TODO: Add running sounds to generator + cutText ["Generator has been started.", "PLAIN DOWN"]; + }; + } else { + // Start generator _vehicle setVariable ["GeneratorRunning", true,true]; // Sound_Generator1 // Looks like this was the entended way of making the sound, lets test - //_classname = "Sound_Generator1"; + _soundSource = createSoundSource ["Sound_Generator1", position player, [], 0]; - //_location = (getPosATL _vehicle); - - //_tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; - - _soundSource = createSoundSource ["Generator1", position player, [], 0]; + _vehicle setVariable ["GeneratorSound", _soundSource,true]; // TODO: Add running sounds to generator cutText ["Generator has been started.", "PLAIN DOWN"]; + }; }; -TradeInprogress = false; \ No newline at end of file +TradeInprogress = false; +s_player_fillgen = -1; \ No newline at end of file diff --git a/dayz_code/actions/player_build.sqf b/dayz_code/actions/player_build.sqf index ae6a0b0b6..7b313c7d7 100644 --- a/dayz_code/actions/player_build.sqf +++ b/dayz_code/actions/player_build.sqf @@ -23,55 +23,53 @@ _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); _offset = getArray (configFile >> "CfgVehicles" >> _classname >> "offset"); // check for near plot -_findNearestPole = nearestObjects[player, ["Plastic_Pole_EP1_DZ"], 30]; +_findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], 30]; +_findNearestPole = []; +{if (alive _x) then {_findNearestPole set [(count _findNearestPole),_x];};} foreach _findNearestPoles; -_IsNearPlot = count (_findNearestPole); +_IsNearPlot = count (_findNearestPole); if(_IsNearPlot == 0) then { // Allow building of plot if(_classname == "Plastic_Pole_EP1_DZ") then { - if(count (nearestObjects[player, ["Plastic_Pole_EP1_DZ"], 60]) == 0) then { + if({alive _x} count (nearestObjects[(vehicle player), ["Plastic_Pole_EP1_DZ"], 45]) == 0) then { _canBuildOnPlot = true; }; }; } else { // Since there are plots nearby we check for ownership and then for friend status - - // select closest pole + _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 { - // owner can build anything within his plot - - if(_classname == "Plastic_Pole_EP1_DZ") then { - if(count ([player, ["Plastic_Pole_EP1_DZ"], 30]) == 0) then { - _canBuildOnPlot = true; - }; - } else { - _canBuildOnPlot = true; + // owner can build anything within his plot except other plots witin + if(_classname != "Plastic_Pole_EP1_DZ") then { + _canBuildOnPlot = true; }; } else { - // not the owner so check if user is friendly to owner. - - _friendlies = player getVariable ["friendlies",[]]; - // check if friendly to owner - if(_ownerID in _friendlies) then { - if(_classname != "Plastic_Pole_EP1_DZ") then { + // disallow building plot + if(_classname != "Plastic_Pole_EP1_DZ") then { + _friendlies = player getVariable ["friendlyTo",[]]; + // check if friendly to owner + if(_ownerID in _friendlies) then { _canBuildOnPlot = true; }; }; }; + }; - -if(!_canBuildOnPlot) exitWith { TradeInprogress = false; cutText ["Building requires plot within 30m" , "PLAIN DOWN"]; }; +// _message +if(!_canBuildOnPlot) exitWith { TradeInprogress = false; cutText ["Building requires plot pole within 30m" , "PLAIN DOWN"]; }; _missing = ""; _hasrequireditem = true; @@ -249,6 +247,8 @@ if (_hasrequireditem) then { if(_num_removed == 1) then { cutText [format[localize "str_build_01",_text], "PLAIN DOWN"]; + + _tmpbuilt setVariable ["characterID",dayz_characterID,true]; //["dayzPublishObj",[dayz_characterID,_tmpbuilt,[_dir,_location],_classname]] call callRpcProcedure; dayzPublishObj = [dayz_characterID,_tmpbuilt,[_dir,_location],_classname]; diff --git a/dayz_code/actions/player_chopWood.sqf b/dayz_code/actions/player_chopWood.sqf index 8ef1924a4..1fe6110ed 100644 --- a/dayz_code/actions/player_chopWood.sqf +++ b/dayz_code/actions/player_chopWood.sqf @@ -3,22 +3,101 @@ private["_item","_location","_isOk","_dir","_classname"]; if(TradeInprogress) exitWith { cutText ["Harvest wood already in progress." , "PLAIN DOWN"]; }; TradeInprogress = true; +// allowed trees list +_trees = ["t_picea3f.p3d","t_picea2s.p3d","t_picea1s.p3d","t_fagus2w.p3d","t_fagus2s.p3d","t_fagus2f.p3d","t_betula1f.p3d","t_betula2f.p3d","t_betula2s.p3d","t_betula2w.p3d","t_alnus2s.p3d","t_acer2s.p3d","t_populus3s.p3d","t_quercus2f.p3d","t_sorbus2s.p3d","t_malus1s.p3d","t_salix2s.p3d","t_picea1s_w.p3d","t_picea2s_w.p3d","t_ficusb2s_ep1.p3d","t_populusb2s_ep1.p3d","t_populusf2s_ep1.p3d","t_amygdalusc2s_ep1.p3d","t_ficusb2s_ep1.p3d","t_pistacial2s_ep1.p3d","t_pinuse2s_ep1.p3d","t_pinuss3s_ep1.p3d","t_prunuss2s_ep1.p3d","t_pinusn2s.p3d","t_pinusn1s.p3d","t_pinuss2f.p3d","t_poplar2f_dead_pmc.p3d","misc_torzotree_pmc.p3d","misc_burnspruce_pmc.p3d","brg_cocunutpalm8.p3d","brg_umbrella_acacia01b.p3d","brg_jungle_tree_canopy_1.p3d","brg_jungle_tree_canopy_2.p3d","brg_cocunutpalm4.p3d","brg_cocunutpalm3.p3d","palm_04.p3d","brg_cocunutpalm2.p3d","brg_jungle_tree_antiaris.p3d","brg_cocunutpalm1.p3d"]; + _item = _this; call gear_ui_init; -if (["forest",dayz_surfaceType] call fnc_inString) then { +player playActionNow "Medic"; +[player,20,false,(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) then { + r_doLoop = false; + }; + sleep 0.1; +}; +r_doLoop = false; + + +if (_finished) then { + + _nearByTrees = 0; + + _findNearestTree = []; + { + if("" == typeOf _x) then { + + if (alive _x) then { + + _objInfo = toArray(str(_x)); + _lenInfo = count _objInfo - 1; + _objName = []; + _i = 0; + // determine where the object name starts + { + if (ASCII_COLON == _objInfo select _i) exitWith {}; + _i = _i + 1; + } forEach _objInfo; + _i = _i + 2; // skip the ": " part + for "_k" from _i to _lenInfo do { + _objName = _objName + [_objInfo select _k]; + }; + _objName = toLower(toString(_objName)); + + // Exit since we found a tree + if (_objName in _trees) exitWith { + _findNearestTree set [(count _findNearestTree),_x]; + }; + }; + }; + + } foreach nearestObjects [getPos player, [], 5]; + + diag_log format["DEBUG TREES: %1", _findNearestTree]; + + if (count(_findNearestTree) >= 1) then { + _result = [player,"PartWoodPile"] call BIS_fnc_invAdd; [player,"chopwood",0,false] call dayz_zombieSpeak; if (_result) then { cutText [localize "str_player_25", "PLAIN DOWN"]; + _tree = _findNearestTree select 0; + + if("" == typeOf _tree) then { + _tree setDamage 1; + }; + + diag_log format["DEBUG TREE DAMAGE: %1", _tree]; } else { cutText [localize "str_player_24", "PLAIN DOWN"]; }; - [player,20,false,(getPosATL player)] spawn player_alertZombies; - player playActionNow "Medic"; - sleep 3; -} else { - cutText [localize "str_player_23", "PLAIN DOWN"]; -}; -TradeInprogress = false; + } else { + cutText [localize "str_player_23", "PLAIN DOWN"]; + }; + + +} else { + r_interrupt = false; + [objNull, player, rSwitchMove,""] call RE; + player playActionNow "stop"; + cutText ["Canceled Harvest Wood.", "PLAIN DOWN"]; +}; +TradeInprogress = false; \ No newline at end of file diff --git a/dayz_code/actions/remove.sqf b/dayz_code/actions/remove.sqf index b385df5a7..65a8f3d12 100644 --- a/dayz_code/actions/remove.sqf +++ b/dayz_code/actions/remove.sqf @@ -3,7 +3,14 @@ delete object from db with extra waiting by [VB]AWOL parameters: _obj */ private ["_obj","_objectID","_objectUID","_started","_finished","_animState","_isMedic","_isOk","_proceed","_counter","_limit","_id","_objType","_sfx","_dis","_itemOut","_countOut","_textCreate","_selectedRemoveOutput"]; + +if(TradeInprogress) exitWith { cutText ["Remove already in progress." , "PLAIN DOWN"]; }; +TradeInprogress = true; + _obj = _this select 3; + +if(_obj getVariable ["GeneratorRunning", false]) exitWith {TradeInprogress = false; cutText ["Cannot remove running generator.", "PLAIN DOWN"];}; + _objectID = _obj getVariable ["ObjectID","0"]; _objectUID = _obj getVariable ["ObjectUID","0"]; @@ -16,8 +23,11 @@ if(isNumber (configFile >> "CfgVehicles" >> _objType >> "constructioncount")) th _limit = getNumber(configFile >> "CfgVehicles" >> _objType >> "constructioncount"); }; -_findNearestPole = nearestObjects[player, ["Plastic_Pole_EP1_DZ"], 30]; -_IsNearPlot = count (_findNearestPole); +_findNearestPoles = nearestObjects[player, ["Plastic_Pole_EP1_DZ"], 30]; +_findNearestPole = []; +{if (alive _x) then {_findNearestPole set [(count _findNearestPole),_x];};} foreach _findNearestPoles; + +_IsNearPlot = count (_findNearestPole); if(_IsNearPlot >= 1) then { @@ -29,7 +39,7 @@ if(_IsNearPlot >= 1) then { // check if friendly to owner if(dayz_characterID != _ownerID) then { - _friendlies = player getVariable ["friendlies",[]]; + _friendlies = player getVariable ["friendlyTo",[]]; // check if friendly to owner if(!(_ownerID in _friendlies)) then { _limit = round(_limit*2); @@ -37,8 +47,6 @@ if(_IsNearPlot >= 1) then { }; }; - - cutText [format["Starting de-construction of %1.",_objType], "PLAIN DOWN"]; // Alert zombies once. @@ -113,17 +121,24 @@ if (_proceed) then { dayzDeleteObj = [_objectID,_objectUID]; publicVariableServer "dayzDeleteObj"; + _isWreck = typeOf _obj in ["SKODAWreck","HMMWVWreck","UralWreck","datsun01Wreck","hiluxWreck","datsun02Wreck","UAZWreck","Land_Misc_Garb_Heap_EP1","Fort_Barricade_EP1","Rubbish2"]; + deleteVehicle _obj; + if(_isWreck) then { + // Find one random part to give back + _refundpart = ["PartEngine","PartGeneric","PartFueltank","PartWheel","PartGlass","ItemJerrycan"] call BIS_fnc_selectRandom; + _selectedRemoveOutput = [_refundpart]; + } else { + _selectedRemoveOutput = getArray (configFile >> "CfgVehicles" >> _objType >> "removeoutput"); + }; + // give refund items - _selectedRemoveOutput = getArray (configFile >> "CfgVehicles" >> _objType >> "removeoutput"); if((count _selectedRemoveOutput) > 0) then { // Put items { _itemOut = _x select 0; _countOut = _x select 1; - diag_log format["Removal Output: %1 %2", _itemOut,_countOut]; - for "_x" from 1 to _countOut do { player addMagazine _itemOut; }; @@ -139,4 +154,5 @@ if (_proceed) then { r_interrupt = false; [objNull, player, rSwitchMove,""] call RE; player playActionNow "stop"; -}; \ No newline at end of file +}; +TradeInprogress = false; \ No newline at end of file diff --git a/dayz_code/actions/stopGenerator.sqf b/dayz_code/actions/stopGenerator.sqf new file mode 100644 index 000000000..2509f9695 --- /dev/null +++ b/dayz_code/actions/stopGenerator.sqf @@ -0,0 +1,65 @@ +private ["_vehicle","_started","_finished","_animState","_isMedic"]; + +if(TradeInprogress) exitWith { cutText ["Stop already in progress." , "PLAIN DOWN"] }; +TradeInprogress = true; + +player removeAction s_player_fillgen; + + +// Use target from addaction +_vehicle = _this select 3; + +// force animation +player playActionNow "Medic"; + +r_interrupt = false; +_animState = animationState player; +r_doLoop = true; +_started = false; +_finished = false; + +cutText ["Preparing stop generator, move to cancel.", "PLAIN DOWN"]; + +[player,50,true,(getPosATL player)] spawn player_alertZombies; + +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) then { + r_doLoop = false; + }; + sleep 0.1; +}; +r_doLoop = false; + +if(!_finished) then { + r_interrupt = false; + [objNull, player, rSwitchMove,""] call RE; + player playActionNow "stop"; + cutText ["Canceled." , "PLAIN DOWN"] +}; + +if (_finished) then { + + // find sound and delete + _soundObject = _vehicle getVariable "GeneratorSound"; + + deleteVehicle _soundObject; + + // Stop generator + _vehicle setVariable ["GeneratorRunning", false,true]; + + // TODO: Add running sounds to generator + cutText ["Generator has been stopped.", "PLAIN DOWN"]; + +}; + +TradeInprogress = false; +s_player_fillgen = -1; \ No newline at end of file diff --git a/dayz_code/actions/trade_any_vehicle.sqf b/dayz_code/actions/trade_any_vehicle.sqf index 6fd33abab..35454c667 100644 --- a/dayz_code/actions/trade_any_vehicle.sqf +++ b/dayz_code/actions/trade_any_vehicle.sqf @@ -116,14 +116,43 @@ if (_qty >= _qty_in) then { cutText [format[("Bought %3 %4 for %1 %2"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"]; } else { + + _obj = _obj select 0; + + + //check make sure there are no fully damaged tires fully + _hitpoints = _obj call vehicle_getHitpoints; + _okToSell = true; + + // count parts + _tires = 0; + + // total damage + _tireDmg = 0; + + _damage = 0; + { + if(["Wheel",_x,false] call fnc_inString) then { + _damage = [_obj,_x] call object_getHit; + _tireDmg = _tireDmg + _damage; + _tires = _tires + 1; + }; + } forEach _hitpoints; + + // find average tire damage + if(_tireDmg > 0 and _tires > 0) then { + if((_tireDmg / _tires) > 0.75) then { + _okToSell = false; + }; + }; + + if(_okToSell) then { - if((damage _obj) >= 0.75) then { // Sell Vehicle for "_x" from 1 to _qty_out do { player addMagazine _part_out; }; - _obj = _obj select 0; _objectID = _obj getVariable ["ObjectID","0"]; _objectUID = _obj getVariable ["ObjectUID","0"]; @@ -134,11 +163,7 @@ if (_qty >= _qty_in) then { deleteVehicle _obj; cutText [format[("Sold %1 %2 for %3 %4"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"]; - } else { - _dampercent = (damage _obj) * 100; - cutText [format[("Cannot sell %1 it is %2% damaged and cannot be sold under 75%."),_textPartIn,_dampercent], "PLAIN DOWN"]; }; - }; {player removeAction _x} forEach s_player_parts;s_player_parts = []; diff --git a/dayz_code/cfgVehicles.hpp b/dayz_code/cfgVehicles.hpp index 7b9e6d589..b5e4f72c2 100644 --- a/dayz_code/cfgVehicles.hpp +++ b/dayz_code/cfgVehicles.hpp @@ -1075,6 +1075,52 @@ class Citizen1; // External class reference transportMaxWeapons = 6; transportMaxMagazines = 30; }; + + class DZ_LargeGunBag_EP1: Bag_Base_EP1 + { + scope = 2; + displayName = "Large Gunbag"; + model = "\ca\weapons_e\AmmoBoxes\StaticX.p3d"; + picture = "\ca\weapons_e\data\icons\staticX_CA.paa"; + icon = "\ca\weapons_e\data\icons\mapIcon_backpack_CA.paa"; + mapsize = 2; + transportMaxWeapons = 10; + transportMaxMagazines = 45; + }; + class DZ_GunBag_EP1: Bag_Base_EP1 + { + scope = 2; + displayName = "Gunbag"; + model = "\ca\weapons_e\AmmoBoxes\StaticY.p3d"; + picture = "\ca\weapons_e\data\icons\staticY_CA.paa"; + icon = "\ca\weapons_e\data\icons\mapIcon_backpack_CA.paa"; + mapsize = 2; + transportMaxWeapons = 6; + transportMaxMagazines = 8; + }; + class DZ_CompactPack_EP1: Bag_Base_EP1 + { + scope = 2; + displayName = "Compact Pack"; + picture = "\ca\weapons_e\data\icons\backpack_RPG_CA.paa"; + icon = "\ca\weapons_e\data\icons\mapIcon_backpack_CA.paa"; + mapsize = 2; + model = "\ca\weapons_e\AmmoBoxes\backpack_rpg.p3d"; + transportMaxWeapons = 1; + transportMaxMagazines = 18; + }; + class DZ_TerminalPack_EP1: Bag_Base_EP1 + { + scope = 2; + displayName = "Terminal Pack"; + picture = "\ca\weapons_e\data\icons\backpack_US_ASSAULT_CA.paa"; + icon = "\ca\weapons_e\data\icons\mapIcon_backpack_CA.paa"; + mapSize = 2; + model = "\ca\weapons_e\AmmoBoxes\backpack_us_AUV"; + transportMaxWeapons = 1; + transportMaxMagazines = 12; + }; + //An2_TK_EP1 class An2_Base_EP1; class AN2_DZ: An2_Base_EP1 diff --git a/dayz_code/compile/fn_selfActions.sqf b/dayz_code/compile/fn_selfActions.sqf index 5a96cae8d..61cdddfd4 100644 --- a/dayz_code/compile/fn_selfActions.sqf +++ b/dayz_code/compile/fn_selfActions.sqf @@ -347,9 +347,22 @@ if (!isNull cursorTarget and !_inVehicle and !_isPZombie and (player distance cu }; //Start Generator - if(cursorTarget isKindOf "Generator_DZ" and _canDo and ("ItemJerrycan" in magazines player) and (cursorTarget getVariable ["GeneratorRunning", false])) then { + if(cursorTarget isKindOf "Generator_DZ" and _canDo) then { if ((s_player_fillgen < 0) and (player distance cursorTarget < 3)) then { - s_player_fillgen = player addAction ["Fill and Start Generator", "\z\addons\dayz_code\actions\fill_startGenerator.sqf",cursorTarget, 0, false, true, "",""]; + + // check if not running + if((cursorTarget getVariable ["GeneratorRunning", false])) then { + s_player_fillgen = player addAction ["Stop Generator", "\z\addons\dayz_code\actions\stopGenerator.sqf",cursorTarget, 0, false, true, "",""]; + } else { + // check if not filled and player has jerry. + if((cursorTarget getVariable ["GeneratorFilled", false])) then { + s_player_fillgen = player addAction ["Start Generator", "\z\addons\dayz_code\actions\fill_startGenerator.sqf",cursorTarget, 0, false, true, "",""]; + } else { + if("ItemJerrycan" in magazines player) then { + s_player_fillgen = player addAction ["Fill and Start Generator", "\z\addons\dayz_code\actions\fill_startGenerator.sqf",cursorTarget, 0, false, true, "",""]; + }; + }; + }; }; } else { player removeAction s_player_fillgen; @@ -357,6 +370,12 @@ if (!isNull cursorTarget and !_inVehicle and !_isPZombie and (player distance cu }; + // not the right place for this... + // Find if fuel pump is within 5 meters. + // If so then look for a generator within 30m of pump + // and if generator is running + // Allow auto fill + //Sleep if(cursorTarget isKindOf "TentStorage" and _canDo and _ownerID == dayz_characterID) then { if ((s_player_sleep < 0) and (player distance cursorTarget < 3)) then { diff --git a/dayz_code/config.cpp b/dayz_code/config.cpp index b385ef929..db833d92f 100644 --- a/dayz_code/config.cpp +++ b/dayz_code/config.cpp @@ -40,7 +40,7 @@ class CfgMods hidePicture = 0; hideName = 0; action = "http://www.dayzepoch.com"; - version = "1.0.0.5"; + version = "1.0.0.6"; hiveVersion = 0.96; //0.93 }; }; @@ -474,10 +474,11 @@ class CfgBuildingLoot { {"DZ_ALICE_Pack_EP1","object"}, // 16 {"DZ_TK_Assault_Pack_EP1","object"}, // 16 {"DZ_British_ACU","object"}, // 18 - + { "Winchester1866","weapon" }, { "WeaponHolder_ItemTent","object" }, { "WeaponHolder_ItemTentDomed","object" }, + { "WeaponHolder_ItemTentDomed2","object" }, { "","military" }, { "","trash" }, {"Crossbow_DZ","weapon"}, @@ -512,6 +513,7 @@ class CfgBuildingLoot { 0.01, 0.01, 0.01, + 0.01, 0.03, 0.5, 0.01, @@ -535,6 +537,7 @@ class CfgBuildingLoot { lootPos[] = {}; itemType[] = { { "WeaponHolder_ItemGenerator","object" }, + { "WeaponHolder_ItemFuelBarrel","object" }, { "","generic" }, { "","trash" }, { "","military" }, @@ -552,7 +555,8 @@ class CfgBuildingLoot { {"ItemTankTrap","magazine"} }; itemChance[] = { - 0.01, + 0.005, + 0.005, 0.18, 0.29, 0.04, @@ -587,7 +591,7 @@ class CfgBuildingLoot { { "PartWoodPile","magazine" }, { "WeaponHolder_ItemHatchet","object" }, { "MR43","weapon" }, - //{"TrapBear","magazine"}, + { "WeaponHolder_ItemFuelBarrel","object" }, {"WeaponHolder_ItemMachete", "object"} }; itemChance[] = { @@ -601,7 +605,7 @@ class CfgBuildingLoot { 0.11, 0.17, 0.06, - //0.01, + 0.005, 0.03 }; }; @@ -629,10 +633,13 @@ class CfgBuildingLoot { {"DZ_ALICE_Pack_EP1","object"}, // 16 {"DZ_TK_Assault_Pack_EP1","object"}, // 16 {"DZ_British_ACU","object"}, // 18 - + {"DZ_CompactPack_EP1","object"}, // 18-1 + {"DZ_TerminalPack_EP1","object"}, // 12-1 + { "Winchester1866","weapon" }, { "WeaponHolder_ItemTent","object" }, { "WeaponHolder_ItemTentDomed","object" }, + { "WeaponHolder_ItemTentDomed2","object" }, { "","food" }, { "","trash" }, @@ -658,9 +665,12 @@ class CfgBuildingLoot { 0.02, //16 0.02, //16 0.01, //18 + 0.01, // 18-1 + 0.01, // 12-1 0.01, - 0.01, - 0.01, + 0.005, + 0.005, + 0.005, 0.3, 0.15, 0.01, @@ -835,6 +845,7 @@ class HeliCrash_No50s: Default { {"DZ_British_ACU","object"}, // 18 {"DZ_CivilBackpack_EP1","object"}, // 24 {"DZ_Backpack_EP1","object"}, // 24 + {"DZ_GunBag_EP1","object"}, // 8-6 //Normal { "","medical" }, @@ -880,6 +891,7 @@ class HeliCrash_No50s: Default { 0.06, //18 0.01, //24 0.01, //DZ_Backpack_EP1 24 + 0.01, // DZ_GunBag_EP1 0.10, 1.00, 2.50, @@ -942,7 +954,8 @@ class HeliCrash_No50s: Default { {"DZ_TK_Assault_Pack_EP1","object"}, // 16 {"DZ_British_ACU","object"}, // 18 {"DZ_CivilBackpack_EP1","object"}, // 24 - {"DZ_Backpack_EP1","object"}, // 24 + {"DZ_Backpack_EP1","object"}, // 30 + {"DZ_LargeGunBag_EP1","object"}, // 45 { "","medical" }, { "","generic" }, @@ -2854,7 +2867,7 @@ class HeliCrash_No50s: Default { class land_AII_last_floor: MilitarySpecial { lootPos[] = {{-1.73975,-7.99756,11.6976},{-1.73975,-7.99756,11.6976},{-1.20801,5.45605,4.6129},{-3.82813,2.81494,5.46183}}; }; - class land_AII_middle_floor: Military { + class land_AII_middle_floor: MilitarySpecial { lootPos[] = {{-7.64941,4.97412,0.510368},{-7.7207,5.10498,0.510216},{-7.27979,-0.931152,0.518509},{8.47461,-2.3252,-4.63377},{9.20508,0.508301,-4.63377},{4.36768,3.7998,-4.63377},{-0.669434,2.74805,-4.63377},{-10.3594,5.03516,-4.63377},{-13.9766,9.10059,-4.63377},{-8.021,1.22314,-4.63377},{6.07227,-2.64551,-4.63377},{-8.75293,8.79297,-2.10379}}; }; class land_x_skladiste_low_tex: Industrial { diff --git a/dayz_code/init/variables.sqf b/dayz_code/init/variables.sqf index 19b931fad..3b8697150 100644 --- a/dayz_code/init/variables.sqf +++ b/dayz_code/init/variables.sqf @@ -384,7 +384,7 @@ if(isNil "dayz_oldrefuel") then { dayz_updateObjects = ["Car", "Helicopter", "Motorcycle", "Ship", "TentStorage", "VaultStorage","M240Nest_DZ","OutHouse_DZ","Wooden_shed_DZ","WoodShack_DZ","StorageShed_DZ"]; dayz_disallowedVault = ["TentStorage", "BuiltItems"]; dayz_reveal = ["AllVehicles","WeaponHolder","TentStorage","VaultStorage","VaultStorageLocked","BuiltItems"]; -dayz_allowedObjects = ["TentStorage","TentStorageDomed", "VaultStorageLocked", "Hedgehog_DZ", "Sandbag1_DZ","TrapBear","Fort_RazorWire","WoodGate_DZ","Land_HBarrier1_DZ","Fence_corrugated_DZ","M240Nest_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","OutHouse_DZ","Wooden_shed_DZ","WoodShack_DZ","StorageShed_DZ","Plastic_Pole_EP1_DZ","Generator_DZ"]; +dayz_allowedObjects = ["TentStorage","TentStorageDomed","TentStorageDomed2", "VaultStorageLocked", "Hedgehog_DZ", "Sandbag1_DZ","TrapBear","Fort_RazorWire","WoodGate_DZ","Land_HBarrier1_DZ","Fence_corrugated_DZ","M240Nest_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","OutHouse_DZ","Wooden_shed_DZ","WoodShack_DZ","StorageShed_DZ","Plastic_Pole_EP1_DZ","Generator_DZ"]; dayz_spawnPos = getPosATL player; diff --git a/dayz_code/rscTitles.hpp b/dayz_code/rscTitles.hpp index 1aff52d58..08dccfc1f 100644 --- a/dayz_code/rscTitles.hpp +++ b/dayz_code/rscTitles.hpp @@ -137,7 +137,7 @@ class RscDisplayMain : RscStandardDisplay class DAYZ_Version : CA_Version { idc = -1; - text = "DayZ Epoch 1.0.0.5 dev (1.7.6.1)"; + text = "DayZ Epoch 1.0.0.6 dev (1.7.6.1)"; y = "(SafeZoneH + SafeZoneY) - (1 - 0.95)"; }; delete CA_TitleMainMenu; diff --git a/dayz_equip/config.cpp b/dayz_equip/config.cpp index 2f70259aa..2af5bdeda 100644 --- a/dayz_equip/config.cpp +++ b/dayz_equip/config.cpp @@ -1366,7 +1366,7 @@ class CfgMagazines neednearby[] = {"fire"}; requiretools[] = {"ItemToolbox","ItemCrowbar"}; output[] = {{"ItemPole",1}}; - input[] = {{"PartGeneric",2},{"ItemTankTrap",1}}; + input[] = {{"PartGeneric",1},{"ItemTankTrap",1}}; }; }; }; @@ -1434,7 +1434,7 @@ class CfgMagazines neednearby[] = {"fire"}; requiretools[] = {"ItemToolbox","ItemCrowbar"}; output[] = {{"ItemCorrugated",1}}; - input[] = {{"ItemPole",2},{"PartGeneric",4},{"PartWoodLumber",2}}; + input[] = {{"ItemPole",1},{"PartGeneric",2},{"ItemTankTrap",1},{"PartWoodLumber",2}}; }; class Crafting1 { @@ -1486,6 +1486,17 @@ class CfgMagazines input[] = {{"PartWoodPile",1},{"ItemTrashRazor",1}}; }; + class Crafting2 + { + text = "Craft Stick Fence"; + script = "spawn player_craftItem2;"; + neednearby[] = {}; + requiretools[] = {"ItemToolbox","ItemKnife"}; + output[] = {{"stick_fence_kit",1}}; + input[] = {{"PartWoodPile",6}}; + + }; + }; }; class PartWoodLumber: CA_Magazine @@ -2205,7 +2216,7 @@ class CfgMagazines }; // BUILDING KITS - class 30m_plot_kit: CA_Magazine + class 30m_plot_kit: CA_Magazine { scope = 2; count = 1; @@ -2225,6 +2236,26 @@ class CfgMagazines }; }; }; + class stick_fence_kit: CA_Magazine + { + scope = 2; + count = 1; + type = 256; + displayName = "Stick Fence"; + descriptionShort = "Stick Fence"; + model = "\dayz_equip\models\supply_crate.p3d"; + picture = "\dayz_equip\textures\equip_wooden_crate_ca.paa"; + class ItemActions + { + class Build + { + text = "$STR_ACTIONS_BUILD"; + script = "spawn player_build;"; + require[] = {"ItemEtool","ItemToolbox"}; + create = "StickFence_DZ"; + }; + }; + }; class wooden_shed_kit: CA_Magazine { scope = 2; @@ -2616,8 +2647,21 @@ class CfgVehicles constructioncount = 5; removeoutput[] = {{"ItemGenerator",1}}; }; - - + class FuelPump_DZ: BuiltItems + { + scope = 2; + destrType = "DestructNo"; + cost = 100; + offset[] = {0,2,0}; + model = "\ca\Structures_E\Ind\Ind_FuelStation\Ind_FuelStation_Feed_ep1.p3d"; + icon = "\ca\data\data\Unknown_object.paa"; + mapSize = 2; + armor = 400; + displayName = "Fuel Pump"; + vehicleClass = "Fortifications"; + constructioncount = 5; + // removeoutput[] = {{"ItemFuelPump",1}}; + }; class Fort_RazorWire : BuiltItems { scope = 2; @@ -2799,6 +2843,16 @@ class CfgVehicles transportMaxWeapons = 20; transportMaxBackpacks = 10; }; + + class Wall_FenW2_6_EP1; + class StickFence_DZ: Wall_FenW2_6_EP1 + { + scope = 2; + offset[] = {0,2.5,0}; + displayName = "Stick Fence"; + vehicleClass = "Fortifications"; + }; + class WoodGate_DZ: BuiltItems { scope = 2; @@ -2976,6 +3030,16 @@ class CfgVehicles init = "[(_this select 0),'cfgMagazines','ItemTentDomed'] execVM '\z\addons\dayz_code\init\object_pickupAction.sqf';"; }; }; + class WeaponHolder_ItemTentDomed2: WeaponHolderBase + { + scope = 2; + displayName = "Domed Green Tent"; + model = "\dayz_equip\proxy\tentbag.p3d"; + class eventHandlers + { + init = "[(_this select 0),'cfgMagazines','ItemTentDomed2'] execVM '\z\addons\dayz_code\init\object_pickupAction.sqf';"; + }; + }; class WeaponHolder_ItemVault: WeaponHolderBase { scope = 2; @@ -3160,6 +3224,16 @@ class CfgVehicles transportMaxBackpacks = 7; create = "WeaponHolder_ItemTentDomed"; }; + class TentStorageDomed2: TentStorage + { + displayName = "Green Domed Tent"; + vehicleClass = "Survival"; + model = "\ca\Misc_E\Astan_ep1.p3d"; + transportMaxMagazines = 75; + transportMaxWeapons = 12; + transportMaxBackpacks = 7; + create = "WeaponHolder_ItemTentDomed2"; + }; class VaultStorage: Land_A_tent { vehicleClass = "Survival"; diff --git a/dayz_server/compile/server_publishObject.sqf b/dayz_server/compile/server_publishObject.sqf index 6b2037270..ffcd62d80 100644 --- a/dayz_server/compile/server_publishObject.sqf +++ b/dayz_server/compile/server_publishObject.sqf @@ -8,7 +8,6 @@ _class = _this select 3; _allowed = [_object, "Server"] call check_publishobject; if (!_allowed) exitWith { deleteVehicle _object; }; - //diag_log ("PUBLISH: Attempt " + str(_object)); //get UID @@ -21,11 +20,11 @@ _key call server_hiveWrite; _object setVariable ["lastUpdate",time]; _object setVariable ["ObjectUID", _uid,true]; -_object setVariable ["characterID",dayz_characterID,true]; +// _object setVariable ["characterID",_charID,true]; -if ((typeOf _object) in dayz_allowedObjects) then { - _object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}]; -}; +_object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}]; +// Test disabling simulation server side on buildables only. +_object enableSimulation false; dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];