Advertisement
Guest User

Untitled

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