Advertisement
Guest User

Untitled

a guest
Sep 10th, 2015
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.85 KB | None | 0 0
  1. /*
  2. [_object,_type] spawn server_updateObject;
  3. */
  4. private ["_object","_type","_objectID","_uid","_lastUpdate","_needUpdate","_object_position","_object_inventory","_object_damage","_isNotOk","_parachuteWest","_firstTime","_object_killed","_object_repair","_isbuildable","_object_vehicleKey","_activatingPlayer","_vehicleClassname","_toKey","_toKeyName","_vehicle_ID","_vehicle_UID"];
  5.  
  6. _object = _this select 0;
  7.  
  8. if(isNull(_object)) exitWith {
  9. diag_log format["Skipping Null Object: %1", _object];
  10. };
  11.  
  12. _type = _this select 1;
  13. _parachuteWest = ((typeOf _object == "ParachuteWest") || (typeOf _object == "ParachuteC"));
  14. _isbuildable = (typeOf _object) in dayz_allowedObjects;
  15. _isNotOk = false;
  16. _firstTime = false;
  17.  
  18. _objectID = _object getVariable ["ObjectID","0"];
  19. _uid = _object getVariable ["ObjectUID","0"];
  20.  
  21. if ((typeName _objectID != "string") || (typeName _uid != "string")) then
  22. {
  23. diag_log(format["Non-string Object: ID %1 UID %2", _objectID, _uid]);
  24. //force fail
  25. _objectID = "0";
  26. _uid = "0";
  27. };
  28. if (!_parachuteWest && !(locked _object)) then {
  29. if (_objectID == "0" && _uid == "0") then
  30. {
  31. _object_position = getPosATL _object;
  32. _isNotOk = true;
  33. };
  34. };
  35.  
  36. // do not update if buildable && not ok
  37. if (_isNotOk && _isbuildable) exitWith { };
  38.  
  39. // delete if still not ok
  40. if (_isNotOk) exitWith { deleteVehicle _object; diag_log(format["Deleting object %1 with invalid ID at pos [%2,%3,%4]",typeOf _object,_object_position select 0,_object_position select 1, _object_position select 2]); };
  41.  
  42.  
  43. _lastUpdate = _object getVariable ["lastUpdate",time];
  44. _needUpdate = _object in needUpdate_objects;
  45.  
  46. // TODO ----------------------
  47. _object_position = {
  48. private["_position","_worldspace","_fuel","_key"];
  49. _position = getPosATL _object;
  50. _worldspace = [
  51. (getDir _object) call KK_fnc_floatToString,
  52. _position call KK_fnc_positionToString
  53. ];
  54. _fuel = 0;
  55. if (_object isKindOf "AllVehicles") then {
  56. _fuel = fuel _object;
  57. };
  58. _key = format["CHILD:305:%1:%2:%3:",_objectID,_worldspace,_fuel];
  59. //diag_log ("HIVE: WRITE: "+ str(_key));
  60. _key call server_hiveWrite;
  61. };
  62.  
  63. _object_inventory = {
  64. private["_inventory","_previous","_key","_updateGear"];
  65. _updateGear = false;
  66. if((typeOf _object) in DZE_Origins_Buildings) then {
  67. _state = _object getVariable ["CanBeUpdated",false];
  68. if(_state) then {
  69. _updateGear = true;
  70. _object setVariable ["WeaponCargo", getWeaponCargo _object,true];
  71. _object setVariable ["MagazineCargo", getMagazineCargo _object,true];
  72. _object setVariable ["BackpackCargo", getBackpackCargo _object,true];
  73. _inventory = [
  74. _object getVariable["WeaponCargo",[]],
  75. _object getVariable["MagazineCargo",[]],
  76. _object getVariable["BackpackCargo",[]]
  77. ];
  78. };
  79. } else {
  80. _updateGear = true;
  81. _inventory = [
  82. getWeaponCargo _object,
  83. getMagazineCargo _object,
  84. getBackpackCargo _object
  85. ];
  86. };
  87.  
  88. _isNormal = true;
  89. if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then{
  90. _isNormal = false;
  91. _inventory = _object getVariable ["plotfriends", []]; //We're replacing the inventory with UIDs for this item
  92. };
  93. if (typeOf (_object)in DZE_DoorsLocked) then{
  94. _isNormal = false;
  95. _inventory = _object getVariable ["doorfriends", []]; //We're replacing the inventory with UIDs for this item
  96. };
  97.  
  98. if(_isNormal)then {
  99. _inventory = [
  100. getWeaponCargo _object,
  101. getMagazineCargo _object,
  102. getBackpackCargo _object
  103. /*ZSC*/
  104. , _object getVariable["bankMoney",0]
  105. /*ZSC*/
  106. ];
  107. };
  108.  
  109. if(_updateGear) then {
  110. _previous = str(_object getVariable["lastInventory",[]]);
  111. if (str(_inventory) != _previous) then {
  112. _object setVariable["lastInventory",_inventory];
  113. if (_objectID == "0") then {
  114. _key = format["CHILD:309:%1:%2:",_uid,_inventory];
  115. } else {
  116. _key = format["CHILD:303:%1:%2:",_objectID,_inventory];
  117. };
  118. //diag_log ("HIVE: WRITE: "+ str(_key));
  119. _key call server_hiveWrite;
  120. };
  121. };
  122. };
  123.  
  124. _object_damage = {
  125. private["_hitpoints","_array","_hit","_selection","_key","_damage"];
  126. _hitpoints = _object call vehicle_getHitpoints;
  127. _damage = damage _object;
  128. _array = [];
  129. {
  130. _hit = [_object,_x] call object_getHit;
  131. _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
  132.  
  133. if (_selection in Ori_VehicleUpgrades) then {_dam = 0;}; //prevent double writtings
  134.  
  135. if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
  136. _object setHit ["_selection", _hit];
  137. } count _hitpoints;
  138.  
  139. if (typeOf _object in Ori_VehiclesList) then {
  140. _cfg = configFile >> "CfgVehicles" >> (typeOf _object) >> "AnimationSources";
  141. _tc = count _cfg;
  142. for "_mti" from 0 to _tc-1 do {
  143. _mt = (_cfg select _mti);
  144. _st = getText(_mt >> "source");
  145. if (_st in Ori_VehicleUpgrades) then {
  146. _hit = _object getVariable [_st,1];
  147. _object animate [_st,_hit];
  148. _array set [count _array,[_st,_hit]];
  149.  
  150. };
  151. };
  152. };
  153.  
  154. _key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
  155. //diag_log ("HIVE: WRITE: "+ str(_key));
  156. _key call server_hiveWrite;
  157. _object setVariable ["needUpdate",false,true];
  158. };
  159.  
  160. _object_killed = {
  161. private["_hitpoints","_array","_hit","_selection","_key","_damage"];
  162. _hitpoints = _object call vehicle_getHitpoints;
  163. //_damage = damage _object;
  164. _damage = 1;
  165. _array = [];
  166. {
  167. _hit = [_object,_x] call object_getHit;
  168. _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
  169. if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
  170. _hit = 1;
  171. _object setHit ["_selection", _hit];
  172. } count _hitpoints;
  173.  
  174. if (_objectID == "0") then {
  175. _key = format["CHILD:306:%1:%2:%3:",_uid,_array,_damage];
  176. } else {
  177. _key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
  178. };
  179. //diag_log ("HIVE: WRITE: "+ str(_key));
  180. _key call server_hiveWrite;
  181. _object setVariable ["needUpdate",false,true];
  182. if ((count _this) > 2) then {
  183. _killer = _this select 2;
  184. _charID = _object getVariable ['CharacterID','0'];
  185. _objID = _object getVariable['ObjectID','0'];
  186. _objUID = _object getVariable['ObjectUID','0'];
  187. _worldSpace = getPosATL _object;
  188. if (getPlayerUID _killer != "") then {
  189. _name = if (alive _killer) then { name _killer; } else { format["OBJECT %1", _killer]; };
  190. diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6, Killer: %7 (UID: %8)", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace, _name, (getPlayerUID _killer)];
  191. } else {
  192. diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace];
  193. };
  194. };
  195. };
  196.  
  197. _object_repair = {
  198. private["_hitpoints","_array","_hit","_selection","_key","_damage"];
  199. _hitpoints = _object call vehicle_getHitpoints;
  200. _damage = damage _object;
  201. _array = [];
  202. {
  203. _hit = [_object,_x] call object_getHit;
  204. _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
  205. if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
  206. _object setHit ["_selection", _hit];
  207. } count _hitpoints;
  208.  
  209. _key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
  210. //diag_log ("HIVE: WRITE: "+ str(_key));
  211. _key call server_hiveWrite;
  212. _object setVariable ["needUpdate",false,true];
  213. };
  214.  
  215. _object_vehicleKey = {
  216. private ["_hit","_selection","_fuel","_gotcha","_retry","_vehicleID","_key","_result","_outcome","_player","_class","_newKey","_newKeyName","_oldVehicleID","_oldVehicleUID","_hitpoints","_damage","_array","_inventory","_vehicleUID","_position","_dir","_worldspace"];
  217.  
  218. /* Setting up variables */
  219. _player = _this select 0;
  220. _class = _this select 1;
  221. _newKey = _this select 2;
  222. _newKeyName = _this select 3;
  223. _oldVehicleID = _this select 4;
  224. _oldVehicleUID = _this select 5;
  225.  
  226. /* Get Damage of the Vehicle */
  227.  
  228. _object_changeCharacterID = {
  229. private["_vehicleLock","_skinFiles","_animationStates","_position","_worldspace","_fuel","_key"];
  230. _charID = _this select 0;
  231. _player = _this select 1;
  232. _inventory = [];
  233. if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then{
  234. _inventory = _object getVariable ["AddedPUIDS", []]; //We're replacing the inventory with UIDs for this item
  235. } else {
  236. _inventory = [
  237. getWeaponCargo _object,
  238. getMagazineCargo _object,
  239. getBackpackCargo _object
  240. ];
  241. };
  242.  
  243. _hitpoints = _object call vehicle_getHitpoints;
  244. _damage = damage _object;
  245. _array = [];
  246. {
  247. _hit = [_object,_x] call object_getHit;
  248. _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
  249. if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
  250. _object setHit ["_selection", _hit];
  251. } forEach _hitpoints;
  252.  
  253. /* Get the Fuel of the Vehicle */
  254. _fuel = 0;
  255. if (_object isKindOf "AllVehicles") then {
  256. _fuel = fuel _object;
  257. };
  258.  
  259. /* Get the Inventory of the Vehicle */
  260. _inventory = [
  261. getWeaponCargo _object,
  262. getMagazineCargo _object,
  263. getBackpackCargo _object
  264. ];
  265.  
  266. /* Get the position of the Vehicle */
  267. _position = getPosASL _object;
  268. if !(surfaceIsWater _position) then {
  269. _position = ASLToATL _position;
  270. };
  271. _dir = getDir _object;
  272. _worldspace = [_dir,_position];
  273.  
  274. /* Delete the current Database entry */
  275. [_oldVehicleID,_oldVehicleUID,_player] call server_deleteObj;
  276. sleep 1;
  277.  
  278. /* Generate a new UID */
  279. _vehicleUID = _worldspace call dayz_objectUID3;
  280.  
  281. /* Write the new Database entry and LOG the action*/
  282. _key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, _damage , _newKey, _worldspace, _inventory, _array, _fuel,_vehicleUID];
  283. _key call server_hiveWrite;
  284. diag_log ("HIVE: WRITE: VEHICLE KEY CHANGER: "+ str(_key));
  285. diag_log format["HIVE: WRITE: VEHICLE KEY CHANGER: Vehicle:%1 NewKey:%2 BY %3(%4)", _object, _newKeyName, (name _player), (getPlayerUID _player)];
  286.  
  287. /* Get the ObjectID of the entry in the Database */
  288. _retry = 0;
  289. _gotcha = false;
  290. while {!_gotcha && _retry < 10} do {
  291. sleep 1;
  292.  
  293. /* Send the request */
  294. _key = format["CHILD:388:%1:",_vehicleUID];
  295. diag_log ("HIVE: READ: VEHICLE KEY CHANGER: "+ str(_key));
  296. _result = _key call server_hiveReadWrite;
  297. _outcome = _result select 0;
  298.  
  299. /* We got a answer */
  300. if (_outcome == "PASS") then {
  301. _vehicleID = _result select 1;
  302.  
  303. /* Compare with old ObjectID to check if it not was deleted yet */
  304. if (_oldVehicleID == _vehicleID) then {
  305. /* Not good lets give it another try */
  306. _gotcha = false;
  307. _retry = _retry + 1;
  308. } else {
  309. /* GOTCHA! */
  310. diag_log("CUSTOM: VEHICLE KEY CHANGER: Selected " + str(_vehicleID));
  311. _gotcha = true;
  312. _retry = 11;
  313.  
  314. _object setVariable ["VKC_disabled", 1,true];
  315. _object setVariable ["VKC_claiming_disabled", 1,true];
  316.  
  317. [_object] spawn {
  318. private ["_veh"];
  319. _veh = _this select 0;
  320.  
  321. sleep 30;
  322. _veh setVariable ["VKC_disabled", 0,true];
  323. _veh setVariable ["VKC_claiming_disabled", 0,true];
  324. };
  325.  
  326. PVDZE_vkc_Success = true;
  327. (owner _player) publicVariableClient "PVDZE_vkc_Success";
  328.  
  329. /* Lock the Vehicle */
  330. _object setVehicleLock "locked";
  331.  
  332. /* Save the ObjectID and ObjectUID to the vehicles variable and make it public */
  333. _object setVariable ["ObjectID", _vehicleID, true];
  334. _object setVariable ["ObjectUID", _vehicleUID, true];
  335.  
  336. /* Set the lastUpdate time to current */
  337. _object setVariable ["lastUpdate",time,true];
  338.  
  339. /* Set the CharacterID to the new Key so we can access it! */
  340. _object setVariable ["CharacterID", _newKey, true];
  341.  
  342. /* Some other variables you might need for disallow lift/tow/cargo locked Vehicles and such */
  343. /* Uncomment if you use this */
  344.  
  345. /* R3F Arty and LOG block lift/tow/cargo locked vehicles*/
  346. _object setVariable ["R3F_LOG_disabled",true,true];
  347.  
  348. /* =BTC= Logistic block lift locked vehicles*/
  349. _object setVariable ["BTC_Cannot_Lift",true,true];
  350. };
  351. } else {
  352. /* Something went wrong on the request give it another try */
  353. diag_log("CUSTOM: VEHICLE KEY CHANGER: trying again to get id for: " + str(_vehicleUID));
  354. _gotcha = false;
  355. _retry = _retry + 1;
  356. };
  357. };
  358. };
  359. // TODO ----------------------
  360.  
  361. _object setVariable ["lastUpdate",time,true];
  362. switch (_type) do {
  363. case "all": {
  364. call _object_position;
  365. call _object_inventory;
  366. call _object_damage;
  367. };
  368. case "position": {
  369. if (!(_object in needUpdate_objects)) then {
  370. //diag_log format["DEBUG Position: Added to NeedUpdate=%1",_object];
  371. needUpdate_objects set [count needUpdate_objects, _object];
  372. };
  373. };
  374. case "gear": {
  375. call _object_inventory;
  376. };
  377. case "damage": {
  378. if ( (time - _lastUpdate) > 5) then {
  379. call _object_damage;
  380. } else {
  381. if (!(_object in needUpdate_objects)) then {
  382. //diag_log format["DEBUG Damage: Added to NeedUpdate=%1",_object];
  383. needUpdate_objects set [count needUpdate_objects, _object];
  384. };
  385. };
  386. };
  387. case "killed": {
  388. call _object_killed;
  389. };
  390. case "repair": {
  391. call _object_damage;
  392. };
  393. case "vehiclekey": {
  394. _activatingPlayer = _this select 2;
  395. _vehicleClassname = _this select 3;
  396. _toKey = _this select 4;
  397. _toKeyName = _this select 5;
  398. _vehicle_ID = _this select 6;
  399. _vehicle_UID = _this select 7;
  400. [_activatingPlayer, _vehicleClassname, _toKey, _toKeyName, _vehicle_ID, _vehicle_UID] call _object_vehicleKey;;
  401. };
  402. case "changeCharacterID": {
  403. [_this select 2,_this select 3] call _object_changeCharacterID;
  404. };
  405. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement