Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.73 KB | None | 0 0
  1. #include "\life_server\script_macros.hpp"
  2. /*
  3. File: fn_queryRequest.sqf
  4. Author: Bryan "Tonic" Boardwine
  5.  
  6. Description:
  7. Handles the incoming request and sends an asynchronous query
  8. request to the database.
  9.  
  10. Return:
  11. ARRAY - If array has 0 elements it should be handled as an error in client-side files.
  12. STRING - The request had invalid handles or an unknown error and is logged to the RPT.
  13. */
  14. private ["_uid","_side","_query","_queryResult","_tickTime","_tmp"];
  15. _uid = [_this,0,"",[""]] call BIS_fnc_param;
  16. _side = [_this,1,sideUnknown,[civilian]] call BIS_fnc_param;
  17. _ownerID = [_this,2,objNull,[objNull]] call BIS_fnc_param;
  18.  
  19. if (isNull _ownerID) exitWith {};
  20.  
  21. if (LIFE_SETTINGS(getNumber,"player_deathLog") isEqualTo 1) then {
  22. _ownerID addMPEventHandler ["MPKilled", {_this call fn_whoDoneIt}];
  23. };
  24.  
  25. _ownerID = owner _ownerID;
  26.  
  27. _query = switch (_side) do {
  28. // West - 11 entries returned
  29. case west: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, cop_gear, blacklist, cop_stats, playtime FROM players WHERE pid='%1'",_uid];};
  30. // Civilian - 12 entries returned
  31. case civilian: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, civ_licenses, arrested, civ_gear, civ_stats, civ_alive, civ_position, playtime FROM players WHERE pid='%1'",_uid];};
  32. // Independent - 10 entries returned
  33. case independent: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, med_licenses, mediclevel, med_gear, med_stats, playtime FROM players WHERE pid='%1'",_uid];};
  34. //East
  35. case east: {format["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, adac_licenses, adaclevel, adac_gear, adac_stats, playtime FROM players WHERE pid='%1'",_uid];};
  36. };
  37.  
  38. _tickTime = diag_tickTime;
  39. _queryResult = [_query,2] call DB_fnc_asyncCall;
  40.  
  41. if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then {
  42. diag_log "------------- Client Query Request -------------";
  43. diag_log format ["QUERY: %1",_query];
  44. diag_log format ["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)];
  45. diag_log format ["Result: %1",_queryResult];
  46. diag_log "------------------------------------------------";
  47. };
  48.  
  49. if (_queryResult isEqualType "") exitWith {
  50. [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID];
  51. };
  52.  
  53. if (count _queryResult isEqualTo 0) exitWith {
  54. [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID];
  55. };
  56.  
  57. //Blah conversion thing from a2net->extdb
  58. _tmp = _queryResult select 2;
  59. _queryResult set[2,[_tmp] call DB_fnc_numberSafe];
  60. _tmp = _queryResult select 3;
  61. _queryResult set[3,[_tmp] call DB_fnc_numberSafe];
  62.  
  63. //Parse licenses (Always index 6)
  64. _new = [(_queryResult select 6)] call DB_fnc_mresToArray;
  65. if (_new isEqualType "") then {_new = call compile format ["%1", _new];};
  66. _queryResult set[6,_new];
  67.  
  68. //Convert tinyint to boolean
  69. _old = _queryResult select 6;
  70. for "_i" from 0 to (count _old)-1 do {
  71. _data = _old select _i;
  72. _old set[_i,[_data select 0, ([_data select 1,1] call DB_fnc_bool)]];
  73. };
  74.  
  75. _queryResult set[6,_old];
  76.  
  77. _new = [(_queryResult select 8)] call DB_fnc_mresToArray;
  78. if (_new isEqualType "") then {_new = call compile format ["%1", _new];};
  79. _queryResult set[8,_new];
  80. //Parse data for specific side.
  81. switch (_side) do {
  82. case west: {
  83. _queryResult set[9,([_queryResult select 9,1] call DB_fnc_bool)];
  84.  
  85. //Parse Stats
  86. _new = [(_queryResult select 10)] call DB_fnc_mresToArray;
  87. if (_new isEqualType "") then {_new = call compile format ["%1", _new];};
  88. _queryResult set[10,_new];
  89.  
  90. //Playtime
  91. _new = [(_queryResult select 11)] call DB_fnc_mresToArray;
  92. if (_new isEqualType "") then {_new = call compile format ["%1", _new];};
  93. _index = TON_fnc_playtime_values_request find [_uid, _new];
  94. if (_index != -1) then {
  95. TON_fnc_playtime_values_request set[_index,-1];
  96. TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1];
  97. TON_fnc_playtime_values_request pushBack [_uid, _new];
  98. } else {
  99. TON_fnc_playtime_values_request pushBack [_uid, _new];
  100. };
  101. [_uid,_new select 0] call TON_fnc_setPlayTime;
  102. };
  103.  
  104. case east: {
  105. //Pa* * e Stats
  106. _new = [(_queryResult select 9)] call DB_fnc_mresToArray;
  107. if (_new isEqualType "") then {_new = call compile format["%1", _new];};
  108. _queryResult set[9,_new];
  109.  
  110. //Playtime
  111. _new = [(_queryResult select 10)] call DB_fnc_mresToArray;
  112. if (_new isEqualType "") then {_new = call compile format["%1", _new];};
  113. _index = TON_fnc_playtime_values_request find [_uid, _new];
  114. if (_index != -1) then {
  115. TON_fnc_playtime_values_request set[_index,-1];
  116. TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1];
  117. TON_fnc_playtime_values_request pushBack [_uid, _new];
  118. } else {
  119. TON_fnc_playtime_values_request pushBack [_uid, _new];
  120. };
  121. [_uid,_new select 3] call TON_fnc_setPlayTime;
  122. };
  123.  
  124. case civilian: {
  125. _queryResult set[7,([_queryResult select 7,1] call DB_fnc_bool)];
  126.  
  127. //Parse Stats
  128. _new = [(_queryResult select 9)] call DB_fnc_mresToArray;
  129. if (_new isEqualType "") then {_new = call compile format ["%1", _new];};
  130. _queryResult set[9,_new];
  131.  
  132. //Position
  133. _queryResult set[10,([_queryResult select 10,1] call DB_fnc_bool)];
  134. _new = [(_queryResult select 11)] call DB_fnc_mresToArray;
  135. if (_new isEqualType "") then {_new = call compile format ["%1", _new];};
  136. _queryResult set[11,_new];
  137.  
  138. //Playtime
  139. _new = [(_queryResult select 12)] call DB_fnc_mresToArray;
  140. if (_new isEqualType "") then {_new = call compile format ["%1", _new];};
  141. _index = TON_fnc_playtime_values_request find [_uid, _new];
  142. if (_index != -1) then {
  143. TON_fnc_playtime_values_request set[_index,-1];
  144. TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1];
  145. TON_fnc_playtime_values_request pushBack [_uid, _new];
  146. } else {
  147. TON_fnc_playtime_values_request pushBack [_uid, _new];
  148. };
  149. [_uid,_new select 2] call TON_fnc_setPlayTime;
  150.  
  151. /* Make sure nothing else is added under here */
  152. _houseData = _uid spawn TON_fnc_fetchPlayerHouses;
  153. waitUntil {scriptDone _houseData};
  154. _queryResult pushBack (missionNamespace getVariable [format ["houses_%1",_uid],[]]);
  155. _gangData = _uid spawn TON_fnc_queryPlayerGang;
  156. waitUntil{scriptDone _gangData};
  157. _queryResult pushBack (missionNamespace getVariable [format ["gang_%1",_uid],[]]);
  158.  
  159. };
  160.  
  161. case independent: {
  162. //Parse Stats
  163. _new = [(_queryResult select 9)] call DB_fnc_mresToArray;
  164. if (_new isEqualType "") then {_new = call compile format ["%1", _new];};
  165. _queryResult set[9,_new];
  166.  
  167. //Playtime
  168. _new = [(_queryResult select 10)] call DB_fnc_mresToArray;
  169. if (_new isEqualType "") then {_new = call compile format ["%1", _new];};
  170. _index = TON_fnc_playtime_values_request find [_uid, _new];
  171. if !(_index isEqualTo -1) then {
  172. TON_fnc_playtime_values_request set[_index,-1];
  173. TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1];
  174. TON_fnc_playtime_values_request pushBack [_uid, _new];
  175. } else {
  176. TON_fnc_playtime_values_request pushBack [_uid, _new];
  177. };
  178. [_uid,_new select 1] call TON_fnc_setPlayTime;
  179. };
  180. };
  181.  
  182. publicVariable "TON_fnc_playtime_values_request";
  183.  
  184. _keyArr = missionNamespace getVariable [format ["%1_KEYS_%2",_uid,_side],[]];
  185. _queryResult pushBack _keyArr;
  186.  
  187. _queryResult remoteExec ["SOCK_fnc_requestReceived",_ownerID];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement