View difference between Paste ID: x3WRKMD7 and SwpJjcV7
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];