SHOW:
|
|
- or go back to the newest paste.
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];}; |
24 | + | case west: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, cop_gear, blacklist, cop_stats, playtime, municipale_licenses, municipallevel FROM players WHERE pid='%1'",_uid];}; |
25 | - | // municipale - 11 entries returned |
25 | + | |
26 | - | case west: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, municipale_licenses, municipallevel, cop_gear, blacklist, cop_stats, playtime FROM players WHERE pid='%1'",_uid];}; |
26 | + | |
27 | // Independent - 10 entries returned | |
28 | case independent: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, med_licenses, mediclevel, med_gear, med_stats, playtime FROM players WHERE pid='%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 | /* Make sure nothing else is added under here */ | |
125 | _houseData = _uid spawn TON_fnc_fetchPlayerHouses; | |
126 | waitUntil {scriptDone _houseData}; | |
127 | _queryResult pushBack (missionNamespace getVariable [format ["houses_%1",_uid],[]]); | |
128 | _gangData = _uid spawn TON_fnc_queryPlayerGang; | |
129 | waitUntil{scriptDone _gangData}; | |
130 | _queryResult pushBack (missionNamespace getVariable [format ["gang_%1",_uid],[]]); | |
131 | ||
132 | }; | |
133 | ||
134 | case independent: { | |
135 | //Parse Stats | |
136 | _new = [(_queryResult select 9)] call DB_fnc_mresToArray; | |
137 | if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; | |
138 | _queryResult set[9,_new]; | |
139 | ||
140 | //Playtime | |
141 | _new = [(_queryResult select 10)] call DB_fnc_mresToArray; | |
142 | if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; | |
143 | _index = TON_fnc_playtime_values_request find [_uid, _new]; | |
144 | if !(_index isEqualTo -1) then { | |
145 | TON_fnc_playtime_values_request set[_index,-1]; | |
146 | TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; | |
147 | TON_fnc_playtime_values_request pushBack [_uid, _new]; | |
148 | } else { | |
149 | TON_fnc_playtime_values_request pushBack [_uid, _new]; | |
150 | }; | |
151 | [_uid,_new select 1] call TON_fnc_setPlayTime; | |
152 | }; | |
153 | }; | |
154 | ||
155 | publicVariable "TON_fnc_playtime_values_request"; | |
156 | ||
157 | _keyArr = missionNamespace getVariable [format ["%1_KEYS_%2",_uid,_side],[]]; | |
158 | _queryResult pushBack _keyArr; | |
159 | ||
160 | _queryResult remoteExec ["SOCK_fnc_requestReceived",_ownerID]; |