Advertisement
Guest User

server

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