Advertisement
Guest User

Untitled

a guest
Sep 17th, 2014
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.91 KB | None | 0 0
  1. private ["_empty","_name","_playerwasNearby","_character","_magazines","_force","_characterID","_charPos","_isInVehicle","_timeSince","_humanity","_debug","_distance","_isNewMed","_isNewPos","_isNewGear","_playerPos","_playerGear","_playerBackp","_medical","_distanceFoot","_lastPos","_backpack","_kills","_killsB","_killsH","_headShots","_lastTime","_timeGross","_timeLeft","_currentWpn","_currentAnim","_config","_onLadder","_isTerminal","_currentModel","_modelChk","_muzzles","_temp","_currentState","_array","_key","_pos","_forceGear","_friendlies"];
  2.  
  3. _character = _this select 0;
  4. _magazines = _this select 1;
  5.  
  6. //_force = _this select 2;
  7. _forceGear = _this select 3;
  8. _force = true;
  9. _playerwasNearby = false;
  10.  
  11. if ((count _this) > 4) then {
  12. _playerwasNearby = _this select 4;
  13. };
  14.  
  15. if (isNull _character) exitWith {
  16. diag_log ("Player is Null FAILED: Exiting, player sync: " + str(_character));
  17. };
  18.  
  19. _characterID = _character getVariable ["CharacterID","0"];
  20. _charPos = getPosATL _character;
  21. _isInVehicle = vehicle _character != _character;
  22. _timeSince = 0;
  23. _humanity = 0;
  24.  
  25. //diag_log ("DW_DEBUG: (isnil _characterID): " + str(isnil "_characterID"));
  26. _name = if (alive _character) then { name _character; } else { "Dead Player"; };
  27. if (_character isKindOf "Animal") exitWith {
  28. diag_log ("ERROR: Cannot Sync Character " + (_name) + " is an Animal class");
  29. };
  30.  
  31. if (isnil "_characterID") exitWith {
  32. diag_log ("ERROR: Cannot Sync Character " + (_name) + " has nil characterID");
  33. };
  34.  
  35. if (_characterID == "0") exitWith {
  36. diag_log ("ERROR: Cannot Sync Character " + (_name) + " as no characterID");
  37. };
  38.  
  39. private["_debug","_distance"];
  40. _debug = getMarkerpos "respawn_west";
  41. _distance = _debug distance _charPos;
  42. if (_distance < 2000) exitWith {
  43. diag_log format["ERROR: server_playerSync: Cannot Sync Player %1 [%2]. Position in debug! %3",_name,_characterID,_charPos];
  44. };
  45.  
  46. //Check for server initiated updates
  47. _isNewMed = _character getVariable["medForceUpdate",false]; //Med Update is forced when a player receives some kind of med incident
  48. _isNewPos = _character getVariable["posForceUpdate",false]; //Med Update is forced when a player receives some kind of med incident
  49. _isNewGear = (count _magazines) > 0;
  50.  
  51. //Check for player initiated updates
  52. if (_characterID != "0") then {
  53. _playerPos = [];
  54. _playerGear = [];
  55. _playerBackp = [];
  56. _medical = [];
  57. _distanceFoot = 0;
  58.  
  59. //diag_log ("Found Character...");
  60.  
  61. //Check if update is requested
  62. if (_isNewPos || _force) then {
  63. //diag_log ("position..." + str(_isNewPos) + " / " + str(_force)); sleep 0.05;
  64. if (((_charPos select 0) == 0) && ((_charPos select 1) == 0)) then {
  65. //Zero Position
  66. } else {
  67. //diag_log ("getting position..."); sleep 0.05;
  68. _playerPos = [round(direction _character),_charPos];
  69. _lastPos = _character getVariable["lastPos",_charPos];
  70. if (count _lastPos > 2 && count _charPos > 2) then {
  71. if (!_isInVehicle) then {
  72. _distanceFoot = round(_charPos distance _lastPos);
  73. };
  74. _character setVariable["lastPos",_charPos];
  75. };
  76. if (count _charPos < 3) then {
  77. _playerPos = [];
  78. };
  79. //diag_log ("position = " + str(_playerPos)); sleep 0.05;
  80. };
  81. _character setVariable ["posForceUpdate",false,true];
  82. };
  83. if (_isNewGear || _forceGear) then {
  84. //diag_log ("gear..."); sleep 0.05;
  85. _playerGear = [weapons _character,_magazines];
  86. //diag_log ("playerGear: " +str(_playerGear));
  87. _backpack = unitBackpack _character;
  88. if(_playerwasNearby) then {
  89. _empty = [[],[]];
  90. _playerBackp = [typeOf _backpack,_empty,_empty];
  91. } else {
  92. _playerBackp = [typeOf _backpack,getWeaponCargo _backpack,getMagazineCargo _backpack];
  93. };
  94. };
  95. if (_isNewMed || _force) then {
  96. //diag_log ("medical..."); sleep 0.05;
  97. if (!(_character getVariable["USEC_isDead",false])) then {
  98. //diag_log ("medical check..."); sleep 0.05;
  99. _medical = _character call player_sumMedical;
  100. //diag_log ("medical result..." + str(_medical)); sleep 0.05;
  101. };
  102. _character setVariable ["medForceUpdate",false,true];
  103. };
  104.  
  105. //Process update
  106. if (_characterID != "0") then {
  107. //Record stats while we're here
  108. /*
  109. Check previous stats against what client had when they logged in
  110. this helps prevent JIP issues, where a new player wouldn't have received
  111. the old players updates. Only valid for stats where clients could have
  112. be recording results from their local objects (such as agent zombies)
  113. */
  114. _kills = ["zombieKills",_character] call server_getDiff;
  115. _killsB = ["banditKills",_character] call server_getDiff;
  116. _killsH = ["humanKills",_character] call server_getDiff;
  117. _headShots = ["headShots",_character] call server_getDiff;
  118. _humanity = ["humanity",_character] call server_getDiff2;
  119. //_humanity = _character getVariable ["humanity",0];
  120. //Soul start: SC Edit >>> collecting players cashmoney
  121. _cashMoney = ["cashMoney",_character] call server_getDiff2;
  122. //Soul end: SC Edit
  123. _character addScore _kills;
  124. /*
  125. Assess how much time has passed, for recording total time on server
  126. */
  127. _lastTime = _character getVariable["lastTime",time];
  128. _timeGross = (time - _lastTime);
  129. _timeSince = floor(_timeGross / 60);
  130. _timeLeft = (_timeGross - (_timeSince * 60));
  131. /*
  132. Get character state details
  133. */
  134. _currentWpn = currentMuzzle _character;
  135. _currentAnim = animationState _character;
  136. _config = configFile >> "CfgMovesMaleSdr" >> "States" >> _currentAnim;
  137. _onLadder = (getNumber (_config >> "onLadder")) == 1;
  138. _isTerminal = (getNumber (_config >> "terminal")) == 1;
  139. //_wpnDisabled = (getNumber (_config >> "disableWeapons")) == 1;
  140. _currentModel = typeOf _character;
  141. _modelChk = _character getVariable ["model_CHK",""];
  142. if (_currentModel == _modelChk) then {
  143. _currentModel = "";
  144. } else {
  145. _currentModel = _currentModel;
  146. _character setVariable ["model_CHK",typeOf _character];
  147. };
  148.  
  149. if (_onLadder || _isInVehicle || _isTerminal) then {
  150. _currentAnim = "";
  151. //If position to be updated, make sure it is at ground level!
  152. if ((count _playerPos > 0) && !_isTerminal) then {
  153. _charPos set [2,0];
  154. _playerPos set[1,_charPos];
  155. };
  156. };
  157. if (_isInVehicle) then {
  158. _currentWpn = "";
  159. } else {
  160. if ( typeName(_currentWpn) == "STRING" ) then {
  161. _muzzles = getArray(configFile >> "cfgWeapons" >> _currentWpn >> "muzzles");
  162. if (count _muzzles > 1) then {
  163. _currentWpn = currentMuzzle _character;
  164. };
  165. } else {
  166. //diag_log ("DW_DEBUG: _currentWpn: " + str(_currentWpn));
  167. _currentWpn = "";
  168. };
  169. };
  170. _temp = round(_character getVariable ["temperature",100]);
  171. _currentState = [_currentWpn,_currentAnim,_temp];
  172. if(DZE_FriendlySaving) then {
  173. // save only last/most recent 5 entrys as we only have 200 chars in db field && weapon + animation names are sometimes really long 60-70 chars.
  174. _friendlies = [];//[(_character getVariable ["friendlies",[]]),5] call array_reduceSizeReverse;
  175. _currentState set [(count _currentState),_friendlies];
  176. };
  177. /*
  178. Everything is ready, now publish to HIVE
  179. */
  180. if (count _playerPos > 0) then {
  181. _array = [];
  182. {
  183. if (_x > dayz_minpos && _x < dayz_maxpos) then {
  184. _array set [count _array,_x];
  185. };
  186. } count (_playerPos select 1);
  187. _playerPos set [1,_array];
  188. };
  189. if (!isNull _character) then {
  190. if (alive _character) then {
  191. //Wait for HIVE to be free
  192. //Send request
  193. _key = format["CHILD:201:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:",_characterID,_playerPos,_playerGear,_playerBackp,_medical,false,false,_kills,_headShots,_distanceFoot,_timeSince,_currentState,_killsH,_killsB,_currentModel,_humanity];
  194. //diag_log ("HIVE: WRITE: "+ str(_key) + " / " + _characterID);
  195. _key call server_hiveWrite;
  196.  
  197. // ------------ ZUPA - Single Currency - Sync Money & Bank ----------------
  198. _headShotsZupa =_character getVariable ["headShots",0];
  199. _isChanged = _character getVariable ["moneychanged",0];
  200. if( isNil "_headShotsZupa") then{
  201. _headShotsZupa = 0;
  202. };
  203.  
  204. if(isNil "_isChanged")then{
  205. _character setVariable ["moneychanged",0,true];
  206. };
  207.  
  208.  
  209. if(_isChanged > 0)then{
  210.  
  211. _key = format["CHILD:999:UPDATE `character_data` SET `HeadshotsZ` = %1 WHERE `CharacterID` = %2:[0]:",_headShotsZupa,_characterID];
  212. _result = _key call server_hiveReadWrite;
  213. _character setVariable ["moneychanged",0,true];
  214. };
  215.  
  216. // Update Bank if changed ( reduces db calls )
  217. _bankingchanged =_character getVariable ["bankchanged",0];
  218.  
  219. if( isNil "_bankingchanged") then{
  220. _character setVariable ["bankchanged",0,true];
  221. _bankingchanged = 0;
  222. };
  223.  
  224. if( _bankingchanged > 0)then{
  225. _banking =_character getVariable ["bank",0];
  226.  
  227. if( isNil "_banking") then{
  228.  
  229. _banking = 0;
  230. }else{
  231. _character setVariable ["bankchanged",0,true];
  232. _playerid = getPlayerUID _character;
  233. _key = format["CHILD:999:UPDATE `player_data` SET `PlayerMorality`= %1 WHERE `PlayerUID`= '%2':[0]:",_banking,_playerid];
  234. _result = _key call server_hiveReadWrite;
  235. };
  236. };
  237. // ------------ ZUPA - END ----------------
  238. };
  239. };
  240.  
  241. // If player is in a vehicle, keep its position updated
  242. if (vehicle _character != _character) then {
  243. //[vehicle _character, "position"] call server_updateObject;
  244. if (!(vehicle _character in needUpdate_objects)) then {
  245. //diag_log format["DEBUG: Added to NeedUpdate=%1",vehicle _character];
  246. needUpdate_objects set [count needUpdate_objects, vehicle _character];
  247. };
  248. };
  249.  
  250. // Force gear updates for nearby vehicles/tents
  251. _pos = _this select 0;
  252. {
  253. [_x, "gear"] call server_updateObject;
  254. } count nearestObjects [_pos, dayz_updateObjects, 10];
  255. //[_charPos] call server_updateNearbyObjects;
  256.  
  257. //Reset timer
  258. if (_timeSince > 0) then {
  259. _character setVariable ["lastTime",(time - _timeLeft)];
  260. };
  261. };
  262. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement