Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQF 6.59 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 playerid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, cop_gear, blacklist, cop_stats, playtime FROM players WHERE playerid='%1'",_uid];};
  25.     // Civilian - 12 entries returned
  26.     case civilian: {format["SELECT playerid, name, cash, bankacc, adminlevel, donorlevel, civ_licenses, arrested, civ_gear, civ_stats, civ_alive, civ_position, playtime FROM players WHERE playerid='%1'",_uid];};
  27.     // Independent - 10 entries returned
  28.     case independent: {format["SELECT playerid, name, cash, bankacc, adminlevel, donorlevel, med_licenses, mediclevel, med_gear, med_stats, playtime FROM players WHERE playerid='%1'",_uid];};
  29. };
  30.  
  31. _tickTime = diag_tickTime;
  32. _queryResult = [_query,2] call DB_fnc_asyncCall;
  33.  
  34. if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then {
  35.     diag_log "------------- Client Query Request -------------";
  36.     diag_log format["QUERY: %1",_query];
  37.     diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)];
  38.     diag_log format["Result: %1",_queryResult];
  39.     diag_log "------------------------------------------------";
  40. };
  41.  
  42. if (_queryResult isEqualType "") exitWith {
  43.     [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID];
  44. };
  45.  
  46. if (count _queryResult isEqualTo 0) exitWith {
  47.     [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID];
  48. };
  49.  
  50. //Blah conversion thing from a2net->extdb
  51. _tmp = _queryResult select 2;
  52. _queryResult set[2,[_tmp] call DB_fnc_numberSafe];
  53. _tmp = _queryResult select 3;
  54. _queryResult set[3,[_tmp] call DB_fnc_numberSafe];
  55.  
  56. //Parse licenses (Always index 6)
  57. _new = [(_queryResult select 6)] call DB_fnc_mresToArray;
  58. if (_new isEqualType "") then {_new = call compile format["%1", _new];};
  59. _queryResult set[6,_new];
  60.  
  61. //Convert tinyint to boolean
  62. _old = _queryResult select 6;
  63. for "_i" from 0 to (count _old)-1 do {
  64.     _data = _old select _i;
  65.     _old set[_i,[_data select 0, ([_data select 1,1] call DB_fnc_bool)]];
  66. };
  67.  
  68. _queryResult set[6,_old];
  69.  
  70. _new = [(_queryResult select 8)] call DB_fnc_mresToArray;
  71. if (_new isEqualType "") then {_new = call compile format["%1", _new];};
  72. _queryResult set[8,_new];
  73. //Parse data for specific side.
  74. switch (_side) do {
  75.     case west: {
  76.         _queryResult set[9,([_queryResult select 9,1] call DB_fnc_bool)];
  77.  
  78.         //Parse Stats
  79.         _new = [(_queryResult select 10)] call DB_fnc_mresToArray;
  80.         if (_new isEqualType "") then {_new = call compile format["%1", _new];};
  81.         _queryResult set[10,_new];
  82.  
  83.         //Playtime
  84.         _new = [(_queryResult select 11)] call DB_fnc_mresToArray;
  85.         if (_new isEqualType "") then {_new = call compile format["%1", _new];};
  86.         _index = TON_fnc_playtime_values_request find [_uid, _new];
  87.         if (_index != -1) then {
  88.             TON_fnc_playtime_values_request set[_index,-1];
  89.             TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1];
  90.             TON_fnc_playtime_values_request pushBack [_uid, _new];
  91.         } else {
  92.             TON_fnc_playtime_values_request pushBack [_uid, _new];
  93.         };
  94.         [_uid,_new select 0] call TON_fnc_setPlayTime;
  95.     };
  96.  
  97.     case civilian: {
  98.         _queryResult set[7,([_queryResult select 7,1] call DB_fnc_bool)];
  99.  
  100.         //Parse Stats
  101.         _new = [(_queryResult select 9)] call DB_fnc_mresToArray;
  102.         if (_new isEqualType "") then {_new = call compile format["%1", _new];};
  103.         _queryResult set[9,_new];
  104.  
  105.         //Position
  106.         _queryResult set[10,([_queryResult select 10,1] call DB_fnc_bool)];
  107.         _new = [(_queryResult select 11)] call DB_fnc_mresToArray;
  108.         if (_new isEqualType "") then {_new = call compile format["%1", _new];};
  109.         _queryResult set[11,_new];
  110.  
  111.         //Playtime
  112.         _new = [(_queryResult select 12)] call DB_fnc_mresToArray;
  113.         if (_new isEqualType "") then {_new = call compile format["%1", _new];};
  114.         _index = TON_fnc_playtime_values_request find [_uid, _new];
  115.         if (_index != -1) then {
  116.             TON_fnc_playtime_values_request set[_index,-1];
  117.             TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1];
  118.             TON_fnc_playtime_values_request pushBack [_uid, _new];
  119.         } else {
  120.             TON_fnc_playtime_values_request pushBack [_uid, _new];
  121.         };
  122.         [_uid,_new select 2] call TON_fnc_setPlayTime;
  123.  
  124.         _houseData = _uid spawn TON_fnc_fetchPlayerHouses;
  125.         waitUntil {scriptDone _houseData};
  126.         _queryResult pushBack (missionNamespace getVariable[format["houses_%1",_uid],[]]);
  127.         _gangData = _uid spawn TON_fnc_queryPlayerGang;
  128.         waitUntil{scriptDone _gangData};
  129.         _queryResult pushBack (missionNamespace getVariable[format["gang_%1",_uid],[]]);
  130.     };
  131.  
  132.     case independent: {
  133.         //Parse Stats
  134.         _new = [(_queryResult select 9)] call DB_fnc_mresToArray;
  135.         if (_new isEqualType "") then {_new = call compile format["%1", _new];};
  136.         _queryResult set[9,_new];
  137.  
  138.         //Playtime
  139.         _new = [(_queryResult select 10)] 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 1] call TON_fnc_setPlayTime;
  150.     };
  151. };
  152.  
  153. publicVariable "TON_fnc_playtime_values_request";
  154.  
  155. _keyArr = missionNamespace getVariable [format["%1_KEYS_%2",_uid,_side],[]];
  156. _queryResult set[15,_keyArr];
  157.  
  158. _queryResult remoteExec ["SOCK_fnc_requestReceived",_ownerID];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement