Advertisement
Guest User

Untitled

a guest
Sep 10th, 2015
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.15 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"];
  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["_worldspace","_fuel","_key"];
  49. _worldspace = _object call serializeExtendedObjectData;
  50.  
  51. _fuel = 0;
  52. if (_object isKindOf "AllVehicles") then {
  53. _fuel = fuel _object;
  54. };
  55.  
  56. _key = format["CHILD:305:%1:%2:%3:",_objectID,_worldspace,_fuel];
  57. //diag_log ("HIVE: WRITE: "+ str(_key));
  58. _key call server_hiveWrite;
  59. };
  60.  
  61. _object_inventory = {
  62. private["_inventory","_previous","_key"];
  63. _inventory = [];
  64. if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then{
  65. _inventory = _object getVariable ["AddedPUIDS", []]; //We're replacing the inventory with UIDs for this item
  66. } else {
  67. _inventory = [
  68. getWeaponCargo _object,
  69. getMagazineCargo _object,
  70. getBackpackCargo _object
  71. ];
  72. };
  73. _previous = str(_object getVariable["lastInventory",[]]);
  74. if (str(_inventory) != _previous) then {
  75. _object setVariable["lastInventory",_inventory];
  76. if (_objectID == "0") then {
  77. _key = format["CHILD:309:%1:%2:",_uid,_inventory];
  78. } else {
  79. _key = format["CHILD:303:%1:%2:",_objectID,_inventory];
  80. };
  81. //diag_log ("HIVE: WRITE: "+ str(_key));
  82. _key call server_hiveWrite;
  83. };
  84. };
  85.  
  86. _object_damage = {
  87. private["_hitpoints","_array","_hit","_selection","_key","_damage"];
  88. _hitpoints = _object call vehicle_getHitpoints;
  89. _damage = damage _object;
  90. _array = [];
  91. {
  92. _hit = [_object,_x] call object_getHit;
  93. _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
  94. if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
  95. _object setHit ["_selection", _hit];
  96. } count _hitpoints;
  97.  
  98. _key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
  99. //diag_log ("HIVE: WRITE: "+ str(_key));
  100. _key call server_hiveWrite;
  101. _object setVariable ["needUpdate",false,true];
  102. };
  103.  
  104. _object_killed = {
  105. private["_hitpoints","_array","_hit","_selection","_key","_damage"];
  106. _hitpoints = _object call vehicle_getHitpoints;
  107. //_damage = damage _object;
  108. _damage = 1;
  109. _array = [];
  110. {
  111. _hit = [_object,_x] call object_getHit;
  112. _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
  113. if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
  114. _hit = 1;
  115. _object setHit ["_selection", _hit];
  116. } count _hitpoints;
  117.  
  118. if (_objectID == "0") then {
  119. _key = format["CHILD:306:%1:%2:%3:",_uid,_array,_damage];
  120. } else {
  121. _key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
  122. };
  123. //diag_log ("HIVE: WRITE: "+ str(_key));
  124. _key call server_hiveWrite;
  125. _object setVariable ["needUpdate",false,true];
  126. if ((count _this) > 2) then {
  127. _killer = _this select 2;
  128. _charID = _object getVariable ['CharacterID','0'];
  129. _objID = _object getVariable['ObjectID','0'];
  130. _objUID = _object getVariable['ObjectUID','0'];
  131. _worldSpace = getPosATL _object;
  132. if (getPlayerUID _killer != "") then {
  133. _name = if (alive _killer) then { name _killer; } else { format["OBJECT %1", _killer]; };
  134. 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)];
  135. } else {
  136. diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace];
  137. };
  138. };
  139. };
  140.  
  141. _object_repair = {
  142. private["_hitpoints","_array","_hit","_selection","_key","_damage"];
  143. _hitpoints = _object call vehicle_getHitpoints;
  144. _damage = damage _object;
  145. _array = [];
  146. {
  147. _hit = [_object,_x] call object_getHit;
  148. _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
  149. if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
  150. _object setHit ["_selection", _hit];
  151. } count _hitpoints;
  152.  
  153. _key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
  154. //diag_log ("HIVE: WRITE: "+ str(_key));
  155. _key call server_hiveWrite;
  156. _object setVariable ["needUpdate",false,true];
  157. };
  158. // TODO ----------------------
  159.  
  160. _object_changeCharacterID = {
  161. private["_vehicleLock","_skinFiles","_animationStates","_position","_worldspace","_fuel","_key"];
  162. _charID = _this select 0;
  163. _player = _this select 1;
  164. _inventory = [];
  165. if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then{
  166. _inventory = _object getVariable ["AddedPUIDS", []]; //We're replacing the inventory with UIDs for this item
  167. } else {
  168. _inventory = [
  169. getWeaponCargo _object,
  170. getMagazineCargo _object,
  171. getBackpackCargo _object
  172. ];
  173. };
  174. _hitpoints = _object call vehicle_getHitpoints;
  175. _damage = damage _object;
  176. _hitarray = [];
  177. {
  178. _hit = [_object,_x] call object_getHit;
  179. _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
  180. if (_hit > 0) then {_hitarray set [count _hitarray,[_selection,_hit]]};
  181. _object setHit ["_selection", _hit];
  182. } forEach _hitpoints;
  183. /****** BEGIN From _object_position ******/
  184. _worldspace = _object call serializeExtendedObjectData;
  185.  
  186. _fuel = 0;
  187. if (_object isKindOf "AllVehicles") then {
  188. _fuel = fuel _object;
  189. };
  190. /****** END From _object_position ******/
  191.  
  192. [_objectID,_uid,_player] call server_deleteObj;
  193. sleep 1;
  194.  
  195. _uid = _worldspace call dayz_objectUID2;
  196.  
  197. _key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, (typeOf _object), (damage _object) , _charID, _worldspace, _inventory, _hitarray, _fuel,_uid];
  198. _key call server_hiveWrite;
  199.  
  200. _object setVariable ["lastUpdate",time];
  201. _object setVariable ["ObjectUID", _uid,true];
  202. _object setVariable ["CharacterID",_charID,true];
  203.  
  204. [_object,_uid,_charID] spawn {
  205. private["_object","_uid","_fuel","_damage","_array","_characterID","_done","_retry","_key","_result","_outcome","_oid","_selection","_dam","_class"];
  206.  
  207. _object = _this select 0;
  208. _uid = _this select 1;
  209. _charID = _this select 2;
  210.  
  211. _done = false;
  212. _retry = 0;
  213. // TODO: Needs major overhaul
  214. while {_retry < 10} do {
  215. sleep 1;
  216. // GET DB ID
  217. _key = format["CHILD:388:%1:",_uid];
  218. diag_log ("HIVE: WRITE: "+ str(_key));
  219. _result = _key call server_hiveReadWrite;
  220. _outcome = _result select 0;
  221. if (_outcome == "PASS") then {
  222. _oid = _result select 1;
  223. _object setVariable ["ObjectID", _oid, true];
  224. diag_log("CUSTOM: Selected " + str(_oid));
  225. _done = true;
  226. _retry = 100;
  227.  
  228. } else {
  229. diag_log("CUSTOM: trying again to get id for: " + str(_uid));
  230. _done = false;
  231. _retry = _retry + 1;
  232. };
  233. };
  234. if(!_done) exitWith { deleteVehicle _object; diag_log("CUSTOM: failed to get id for : " + str(_uid)); };
  235.  
  236. _object setVariable ["lastUpdate",time];
  237. };
  238. };
  239.  
  240. _object setVariable ["lastUpdate",time,true];
  241. switch (_type) do {
  242. case "all": {
  243. call _object_position;
  244. call _object_inventory;
  245. call _object_damage;
  246. };
  247. case "position": {
  248. if (!(_object in needUpdate_objects)) then {
  249. //diag_log format["DEBUG Position: Added to NeedUpdate=%1",_object];
  250. needUpdate_objects set [count needUpdate_objects, _object];
  251. };
  252. };
  253. case "gear": {
  254. call _object_inventory;
  255. };
  256. case "damage": {
  257. if ( (time - _lastUpdate) > 5) then {
  258. call _object_damage;
  259. } else {
  260. if (!(_object in needUpdate_objects)) then {
  261. //diag_log format["DEBUG Damage: Added to NeedUpdate=%1",_object];
  262. needUpdate_objects set [count needUpdate_objects, _object];
  263. };
  264. };
  265. };
  266. case "killed": {
  267. call _object_killed;
  268. };
  269. case "repair": {
  270. call _object_damage;
  271. };
  272. case "changeCharacterID": {
  273. [_this select 2,_this select 3] call _object_changeCharacterID;
  274.  
  275. };
  276. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement