Advertisement
Guest User

fn_queryRequest.sqf

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