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