diff --git a/SQF/dayz_code/actions/object_build.sqf b/SQF/dayz_code/actions/object_build.sqf index a098f81f0..cb0556066 100644 --- a/SQF/dayz_code/actions/object_build.sqf +++ b/SQF/dayz_code/actions/object_build.sqf @@ -15,6 +15,8 @@ _uid = getPlayerUID player; _keepOnSlope = 0 == (getNumber (configFile >> "CfgVehicles" >> _classname >> "canbevertical")); +//_damageArray = (getArray (configFile >> "CfgVehicles" >> _classname >> "damageValues")); + Dayz_constructionContext set [ 4, false ]; // Stop the construction mode, cf. player_build.sqf //if (count Dayz_constructionContext < 5) then { Dayz_constructionContext set [ 5, false ]; // }; @@ -61,8 +63,8 @@ if (_build) then { _variables set [ count _variables, ["ownerArray", [getPlayerUID player]]]; _variables set [ count _variables, ["padlockCombination", _passcode]]; - _object removeAllEventHandlers "HandleDamage"; - _object addeventhandler ["HandleDamage",{ diag_log (_this); if ((_this select 4) == 'PipeBomb') then { _this call fnc_Obj_FenceHandleDam; } else { false }; } ]; + //_object removeAllEventHandlers "HandleDamage"; + //_object addeventhandler ["HandleDamage",{ [_this,_damageArray] call fnc_Obj_FenceHandleDam; } ]; }; _object setVariable ["characterID",dayz_characterID, true]; diff --git a/SQF/dayz_code/actions/userActionConditions.sqf b/SQF/dayz_code/actions/userActionConditions.sqf index 06a7ac15c..6554e80b6 100644 --- a/SQF/dayz_code/actions/userActionConditions.sqf +++ b/SQF/dayz_code/actions/userActionConditions.sqf @@ -26,7 +26,7 @@ _show = switch _action do { //Built Items (Fence,Gates) //case "ObjectUpgrade": {CAN_DO && !IN_VEHICLE && !(_object getVariable["BuildLock",false])}; //case "ObjectMaintenance": {CAN_DO && !IN_VEHICLE && (_object getVariable["Maintenance",false] or IS_DAMAGED)}; - //case "ObjectDisassembly": {CAN_DO && !IN_VEHICLE && HAS_TOOLBOX && !(_object getVariable["BuildLock",false]) && ((getPlayerUID player in _object getVariable["ownerArray",[]]) or (count (_object getVariable["ownerArray",[]]) == 0) or (typeOf _object in ["WoodenFence_1_foundation","WoodenGate_foundation"]))}; + //case "ObjectDisassembly": {CAN_DO && !IN_VEHICLE && HAS_TOOLBOX && !(_object getVariable["BuildLock",false]) && (((getPlayerUID player) in (_object getVariable["ownerArray",[]])) or (count (_object getVariable["ownerArray",[]]) == 0) or (typeOf _object in ["WoodenFence_1_foundation","WoodenGate_foundation"]))}; default {false}; }; diff --git a/SQF/dayz_code/compile/fence_handleDam.sqf b/SQF/dayz_code/compile/fence_handleDam.sqf index 846ebfcc4..b4791d7b2 100644 --- a/SQF/dayz_code/compile/fence_handleDam.sqf +++ b/SQF/dayz_code/compile/fence_handleDam.sqf @@ -9,49 +9,97 @@ Metal Defaults - [Object,[High Explosive(0.5),Medium Explosive(0.25),Melee damag --Note, Melee damage runs this script 12 times per hit. ************************************************************/ -private["_obj","_total","_damage"]; -//Object the EH is assigned too -_obj = _this select 0; -//array holding dam sent to the eventhandler -//_damageArray _this select 1; +/* + private["_obj","_total","_damage"]; -if !((_this select 4) in ["PipeBomb","explosive_bolt","Hatchet_Swing_Ammo","Crowbar_Swing_Ammo","Machete_Swing_Ammo"]) exitwith { false }; + //Object the EH is assigned too + _obj = ((_this select 0) select 0); + //array holding dam sent to the eventhandler + //_damageArray _this select 1; + + if !(((_this select 0) select 4) in ["PipeBomb","explosive_bolt","Hatchet_Swing_Ammo","Crowbar_Swing_Ammo","Machete_Swing_Ammo"]) exitwith { false }; + + _damage = switch (1==1) do { + case (((_this select 0) select 4) in ["PipeBomb"]): { (((_this select 0) select 1) select 0) }; //0.5 High explosive + case (((_this select 0) select 4) in ["explosive_bolt"]): { (((_this select 0) select 1) select 1) }; //0.25 Medium explosive, maybe grenades and other such items. + case (((_this select 0) select 4) in ["Hatchet_Swing_Ammo","Crowbar_Swing_Ammo","Machete_Swing_Ammo"]): { (((_this select 0) select 2) + random(0.05) }; //0.00001 Melee damage, + //default { 0 }; + }; + + + //Server running or client + if (isServer) then { + if !(_obj in needUpdate_FenceObjects) then { + needUpdate_FenceObjects set [count needUpdate_FenceObjects, _obj]; + }; + + //TotalDamage Set by the server + _obj setDamage (damage _obj) + _damage; + + //diag_log format["Server Reporting - %1",needUpdate_FenceObjects]; + } else { + //If its a client send to server for saving and damage setting. + PVDZ_fence_Update = [_obj,(damage _obj) + _damage]; + publicVariableServer "PVDZ_fence_Update"; + + //diag_log ("Client Reporting"); + }; + + //} else { + // //We really coulde just send to server and have the server setDamage + // //send to server then back to owning client/server + // PVDZ_send = [_obj,"objWallDamage",_this]; + // publicVariableServer "PVDZ_send"; + //}; + + + diag_log format["Object: %1, Damage:%2(%4), Projectile:%3",typeof ((_this select 0) select 0),((damage _obj) + _damage),((_this select 0) select 4),(damage _obj)]; +*/ + +private["_obj","_damage"]; + +//[_this,[0.5,0.25,0.00001]] + +if !(((_this select 0) select 4) in ["PipeBomb","explosive_bolt","Hatchet_Swing_Ammo","Crowbar_Swing_Ammo","Machete_Swing_Ammo"]) exitwith { false }; + + +_obj = ((_this select 0) select 0); +//_selectionName = ((_this select 0) select 1); +//_damage = ((_this select 0) select 2); +//_source = ((_this select 0) select 3); +//_projectile = ((_this select 0) select 4); + +//_damageArray = (_this select 1); _damage = switch (1==1) do { - case ((_this select 4) in ["PipeBomb"]): { ((_this select 1) select 0) }; //0.5 High explosive - case ((_this select 4) in ["explosive_bolt"]): { ((_this select 1) select 1) }; //0.25 Medium explosive, maybe grenades and other such items. - case ((_this select 4) in ["Hatchet_Swing_Ammo","Crowbar_Swing_Ammo","Machete_Swing_Ammo"]): { ((_this select 1) select 2) + random(0.05) }; //0.00001 Melee damage, - default { 0 }; + case (((_this select 0) select 4) in ["PipeBomb"]): { ((_this select 1) select 0) }; //0.5 High explosive + case (((_this select 0) select 4) in ["explosive_bolt"]): { ((_this select 1) select 1) }; //0.25 Medium explosive, maybe grenades and other such items. + case (((_this select 0) select 4) in ["Hatchet_Swing_Ammo","Crowbar_Swing_Ammo","Machete_Swing_Ammo"]): { ((_this select 1) select 2) + random(0.0005) }; //0.00001 Melee damage, + //default { 0 }; }; -//Server running or client -if (isServer) then { - if !(_obj in needUpdate_FenceObjects) then { - needUpdate_FenceObjects set [count needUpdate_FenceObjects, _obj]; +/* + //Server running or client + if (isServer) then { + if !(_obj in needUpdate_FenceObjects) then { + needUpdate_FenceObjects set [count needUpdate_FenceObjects, _obj]; + }; + + //TotalDamage Set by the server + _obj setDamage (damage _obj) + _damage; + + //diag_log format["Server Reporting - %1",needUpdate_FenceObjects]; + } else { + //If its a client send to server for saving and damage setting. + PVDZ_fence_Update = [_obj,(damage _obj) + _damage]; + publicVariableServer "PVDZ_fence_Update"; + + //diag_log ("Client Reporting"); }; - - //TotalDamage Set by the server - _obj setDamage (damage _obj) + _damage; - - //diag_log format["Server Reporting - %1",needUpdate_FenceObjects]; -} else { - //If its a client send to server for saving and damage setting. - PVDZ_fence_Update = [_obj,(damage _obj) + _damage]; - publicVariableServer "PVDZ_fence_Update"; - - //diag_log ("Client Reporting"); -}; +*/ -//} else { -// //We really coulde just send to server and have the server setDamage -// //send to server then back to owning client/server -// PVDZ_send = [_obj,"objWallDamage",_this]; -// publicVariableServer "PVDZ_send"; -//}; - - -diag_log format["Object: %1, Damage:%2(%4), Projectile:%3",typeof (_this select 0),((damage _obj) + _damage),(_this select 4),(damage _obj)]; +diag_log format["Object: %1, Damage:%4 + %5(%2), Projectile:%3",(typeof _obj),((damage _obj) + _damage),((_this select 0) select 4),(damage _obj),_damage]; // all "HandleDamage event" functions should return the effective damage that the engine will record for that part -false \ No newline at end of file +(damage _obj) + _damage \ No newline at end of file diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml index a7ffb8b9c..7eda73c3f 100644 --- a/SQF/dayz_code/stringtable.xml +++ b/SQF/dayz_code/stringtable.xml @@ -1724,11 +1724,11 @@ Wartung - %1 Disassembly - %1 Разборка - Démonter la %1 - Demontáž %1 - %1 abbauen + Disassembly + Разборка + Démonter la + Demontáž + abbauen Build %1