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 | ||
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 |
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];}; |
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: { |
104 | + | case east: { |
105 | - | //Pa* * e Stats |
105 | + | diag_log "[test] case esat started"; |
106 | - | _new = [(_queryResult select 9)] call DB_fnc_mresToArray; |
106 | + | //Pa* * e Stats |
107 | - | if (_new isEqualType "") then {_new = call compile format["%1", _new];}; |
107 | + | |
108 | - | _queryResult set[9,_new]; |
108 | + | if (_new isEqualType "") then {_new = call compile format["%1", _new];}; |
109 | - | |
109 | + | |
110 | - | //Playtime |
110 | + | diag_log "[test] after Pa* * e Stats"; |
111 | - | _new = [(_queryResult select 10)] call DB_fnc_mresToArray; |
111 | + | diag_log format["[test] entering playtime with %1 value", _queryResult select 10]; |
112 | - | if (_new isEqualType "") then {_new = call compile format["%1", _new];}; |
112 | + | |
113 | - | _index = TON_fnc_playtime_values_request find [_uid, _new]; |
113 | + | |
114 | - | if (_index != -1) then { |
114 | + | if (_new isEqualType "") then {_new = call compile format["%1", _new];}; |
115 | - | TON_fnc_playtime_values_request set[_index,-1]; |
115 | + | |
116 | - | TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; |
116 | + | |
117 | - | TON_fnc_playtime_values_request pushBack [_uid, _new]; |
117 | + | |
118 | - | } else { |
118 | + | |
119 | - | TON_fnc_playtime_values_request pushBack [_uid, _new]; |
119 | + | |
120 | - | }; |
120 | + | |
121 | - | [_uid,_new select 3] call TON_fnc_setPlayTime; |
121 | + | |
122 | - | }; |
122 | + | |
123 | [_uid,_new select 3] call TON_fnc_setPlayTime; | |
124 | diag_log "[test] finished case east" | |
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 | diag_log "[test] after publicVariable" | |
188 | ||
189 | _keyArr = missionNamespace getVariable [format ["%1_KEYS_%2",_uid,_side],[]]; | |
190 | _queryResult pushBack _keyArr; | |
191 | ||
192 | _queryResult remoteExec ["SOCK_fnc_requestReceived",_ownerID]; |