further expansion of metrics collection
This commit is contained in:
@@ -10,6 +10,18 @@ class CfgPatches {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class CfgFunctions {
|
class CfgFunctions {
|
||||||
|
class RangerMetrics_event {
|
||||||
|
class functions {
|
||||||
|
file = "\RangerMetrics\functions\capture\EHOnly";
|
||||||
|
class ace_unconscious {};
|
||||||
|
class EntityKilled {};
|
||||||
|
class FiredMan {};
|
||||||
|
class HandleChatMessage {};
|
||||||
|
class MarkerCreated {};
|
||||||
|
class MarkerDeleted {};
|
||||||
|
class MarkerUpdated {};
|
||||||
|
};
|
||||||
|
}
|
||||||
class RangerMetrics_cDefinitions {
|
class RangerMetrics_cDefinitions {
|
||||||
class functions {
|
class functions {
|
||||||
file = "\RangerMetrics\functions\captureDefinitions";
|
file = "\RangerMetrics\functions\captureDefinitions";
|
||||||
@@ -17,24 +29,25 @@ class CfgFunctions {
|
|||||||
class server_missionEH {};
|
class server_missionEH {};
|
||||||
class client_poll {};
|
class client_poll {};
|
||||||
// class clientEvent {};
|
// class clientEvent {};
|
||||||
|
class server_CBA {};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
class RangerMetrics_capture {
|
class RangerMetrics_capture {
|
||||||
// these names represent measurement names send to InfluxDB - snake case
|
// these names represent measurement names send to InfluxDB - snake case
|
||||||
class functions {
|
class functions {
|
||||||
file = "\RangerMetrics\functions\capture";
|
file = "\RangerMetrics\functions\capture";
|
||||||
class chat_message {};
|
class entity_count {};
|
||||||
class entities_global {};
|
|
||||||
class entities_local {};
|
|
||||||
class mission_config_file {};
|
class mission_config_file {};
|
||||||
class player_identity {};
|
class player_identity {};
|
||||||
class player_loadout {};
|
|
||||||
class player_performance {};
|
class player_performance {};
|
||||||
class player_status {};
|
class player_status {};
|
||||||
class running_mission {};
|
class running_mission {};
|
||||||
class running_scripts {};
|
class running_scripts {};
|
||||||
class server_performance {};
|
class server_performance {};
|
||||||
class server_time {};
|
class server_time {};
|
||||||
|
class unit_inventory {};
|
||||||
|
class unit_state {};
|
||||||
|
class view_distance {};
|
||||||
class weather {};
|
class weather {};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -49,11 +62,8 @@ class CfgFunctions {
|
|||||||
class callbackHandler {};
|
class callbackHandler {};
|
||||||
class sendClientPoll {};
|
class sendClientPoll {};
|
||||||
class startServerPoll {};
|
class startServerPoll {};
|
||||||
};
|
class classHandlers {};
|
||||||
|
class initUnit {};
|
||||||
class eventHandlers {
|
|
||||||
file = "\RangerMetrics\functions\eventHandlers";
|
|
||||||
class addHandlers {};
|
|
||||||
};
|
};
|
||||||
class helpers {
|
class helpers {
|
||||||
file = "\RangerMetrics\functions\helpers";
|
file = "\RangerMetrics\functions\helpers";
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
params ["_killed", "_killer", "_instigator"];
|
||||||
|
|
||||||
|
// check in case ACE is active and lastDamageSource has been broadcast via addLocalSoldierEH
|
||||||
|
_instigator = _unit getVariable [
|
||||||
|
"ace_medical_lastDamageSource",
|
||||||
|
_instigator
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
if (isNull _instigator) then { _instigator = UAVControl vehicle _killer select 0 }; // UAV/UGV player operated road kill
|
||||||
|
if (isNull _instigator) then { _instigator = _killer }; // player driven vehicle road kill
|
||||||
|
if (isNull _instigator) then { _instigator = _killed };
|
||||||
|
// hint format ["Killed By %1", name _instigator];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private _tags = [];
|
||||||
|
private _fields = [];
|
||||||
|
|
||||||
|
if (getPlayerUID _instigator != "") then {
|
||||||
|
_tags pushBack ["string", "killerPlayerUID", getPlayerUID _instigator];
|
||||||
|
};
|
||||||
|
if (name _instigator != "") then {
|
||||||
|
_fields pushBack ["string", "killerName", name _instigator];
|
||||||
|
};
|
||||||
|
|
||||||
|
if (getPlayerUID _killed != "") then {
|
||||||
|
_tags pushBack ["string", "killedPlayerUID", getPlayerUID _killed];
|
||||||
|
};
|
||||||
|
if (name _killed != "") then {
|
||||||
|
_fields pushBack ["string", "killedName", name _killed];
|
||||||
|
};
|
||||||
|
|
||||||
|
[
|
||||||
|
"server_events",
|
||||||
|
"EntityKilled",
|
||||||
|
_tags,
|
||||||
|
_fields,
|
||||||
|
nil
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
params ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle"];
|
||||||
|
private _unitPlayerId = getPlayerId _unit;
|
||||||
|
private _userInfo = getUserInfo _unitPlayerId;
|
||||||
|
|
||||||
|
[
|
||||||
|
"player_events",
|
||||||
|
"FiredMan",
|
||||||
|
[
|
||||||
|
["string", "playerUID", _userInfo select 2]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["string", "weapon", _weapon],
|
||||||
|
["string", "muzzle", _muzzle],
|
||||||
|
["string", "mode", _mode],
|
||||||
|
["string", "ammo", _ammo],
|
||||||
|
["string", "magazine", _magazine],
|
||||||
|
// ["object", "projectile", _projectile],
|
||||||
|
["string", "vehicle", [configOf _vehicle] call displayName],
|
||||||
|
["string", "vehicleClass", typeOf _vehicle]
|
||||||
|
]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
|
params ["_channel", "_owner", "_from", "_text", "_person", "_name", "_strID", "_forcedDisplay", "_isPlayerMessage", "_sentenceType", "_chatMessageType"];
|
||||||
|
|
||||||
|
private _fields = [
|
||||||
|
["int", "channel", _channel],
|
||||||
|
["int", "owner", _owner],
|
||||||
|
["string", "from", _from],
|
||||||
|
["string", "text", _text],
|
||||||
|
// ["object", "person", _person],
|
||||||
|
["string", "name", _name],
|
||||||
|
["string", "strID", _strID],
|
||||||
|
["bool", "forcedDisplay", _forcedDisplay],
|
||||||
|
["bool", "isPlayerMessage", _isPlayerMessage],
|
||||||
|
["int", "sentenceType", _sentenceType],
|
||||||
|
["int", "chatMessageType", _chatMessageType]
|
||||||
|
];
|
||||||
|
|
||||||
|
// we need special processing to ensure the object is valid and we have a playerUid. Line protocol doesn't support empty string
|
||||||
|
private "_playerUid";
|
||||||
|
if (isNil "_person") then {
|
||||||
|
_playerUid = "";
|
||||||
|
} else {
|
||||||
|
if !(objNull isEqualType _person) then {
|
||||||
|
_playerUid = getPlayerUID _person;
|
||||||
|
} else {
|
||||||
|
_playerUid = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_playerUid isNotEqualTo "") then {
|
||||||
|
_fields pushBack ["string", "playerUid", _playerUid];
|
||||||
|
};
|
||||||
|
|
||||||
|
[
|
||||||
|
"server_events",
|
||||||
|
"HandleChatMessage",
|
||||||
|
nil,
|
||||||
|
_fields
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
|
params ["_marker", "_channelNumber", "_owner", "_local"];
|
||||||
|
|
||||||
|
// Log marker
|
||||||
|
if (_marker isEqualTo "") exitWith {};
|
||||||
|
if (_channelNumber isEqualTo "") exitWith {};
|
||||||
|
if (_owner isEqualTo "") exitWith {};
|
||||||
|
|
||||||
|
// Get marker
|
||||||
|
private _markerData = _marker call BIS_fnc_markerToString;
|
||||||
|
|
||||||
|
// Get owner playerUID
|
||||||
|
private _ownerUID = getPlayerUID _owner;
|
||||||
|
if (_ownerUID isEqualTo "") then {
|
||||||
|
_ownerUID = "-1";
|
||||||
|
};
|
||||||
|
|
||||||
|
[
|
||||||
|
"server_events",
|
||||||
|
"MarkerCreated",
|
||||||
|
[
|
||||||
|
["string", "actorPlayerUID", _ownerUID]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["string", "marker", _markerData],
|
||||||
|
["number", "channelNumber", _channelNumber],
|
||||||
|
["string", "owner", _ownerUID]
|
||||||
|
]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
|
params ["_marker", "_channelNumber", "_owner", "_local"];
|
||||||
|
|
||||||
|
// Log marker
|
||||||
|
if (_marker isEqualTo "") exitWith {};
|
||||||
|
if (_channelNumber isEqualTo "") exitWith {};
|
||||||
|
if (_owner isEqualTo "") exitWith {};
|
||||||
|
|
||||||
|
// Get marker
|
||||||
|
private _markerData = _marker call BIS_fnc_markerToString;
|
||||||
|
|
||||||
|
// Get owner playerUID
|
||||||
|
private _ownerUID = getPlayerUID _owner;
|
||||||
|
if (_ownerUID isEqualTo "") then {
|
||||||
|
_ownerUID = "-1";
|
||||||
|
};
|
||||||
|
|
||||||
|
[
|
||||||
|
"server_events",
|
||||||
|
"MarkerDeleted",
|
||||||
|
[
|
||||||
|
["string", "actorPlayerUID", _ownerUID]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["string", "marker", _markerData],
|
||||||
|
["number", "channelNumber", _channelNumber],
|
||||||
|
["string", "owner", _ownerUID]
|
||||||
|
]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
|
params ["_marker", "_channelNumber", "_owner", "_local"];
|
||||||
|
|
||||||
|
// Log marker
|
||||||
|
if (_marker isEqualTo "") exitWith {};
|
||||||
|
if (_channelNumber isEqualTo "") exitWith {};
|
||||||
|
if (_owner isEqualTo "") exitWith {};
|
||||||
|
|
||||||
|
// Get marker
|
||||||
|
private _markerData = _marker call BIS_fnc_markerToString;
|
||||||
|
|
||||||
|
// Get owner playerUID
|
||||||
|
private _ownerUID = getPlayerUID _owner;
|
||||||
|
if (_ownerUID isEqualTo "") then {
|
||||||
|
_ownerUID = "-1";
|
||||||
|
};
|
||||||
|
|
||||||
|
[
|
||||||
|
"server_events",
|
||||||
|
"MarkerUpdated",
|
||||||
|
[
|
||||||
|
["string", "actorPlayerUID", _ownerUID]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["string", "marker", _markerData],
|
||||||
|
["number", "channelNumber", _channelNumber],
|
||||||
|
["string", "owner", _ownerUID]
|
||||||
|
]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
|
params [["_unit", objNull], "_unconscious"];
|
||||||
|
if (isNull _unit) exitWith {};
|
||||||
|
|
||||||
|
// Get owner playerUID
|
||||||
|
private _unitUID = getPlayerUID _unitUID;
|
||||||
|
if (_unitUID isEqualTo "") exitWith {};
|
||||||
|
|
||||||
|
[
|
||||||
|
"player_state",
|
||||||
|
"player_health",
|
||||||
|
[
|
||||||
|
["string", "playerUID", _unitUID]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["int", "health", damage _unit],
|
||||||
|
["bool", "state", _unconscious]
|
||||||
|
]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
|
// Number of remote units
|
||||||
|
["server_state", "entities_remote", nil, [
|
||||||
|
["int", "units_alive", { not (local _x)} count allUnits ],
|
||||||
|
["int", "units_dead", { not (local _x) } count allDeadMen],
|
||||||
|
["int", "groups_total", { not (local _x) } count allGroups],
|
||||||
|
["int", "vehicles_total", { not (local _x) } count vehicles]
|
||||||
|
]] call RangerMetrics_fnc_queue;
|
||||||
|
|
||||||
|
// Number of local units
|
||||||
|
["server_state", "entities_local", nil, [
|
||||||
|
["int", "units_alive", { local _x} count allUnits ],
|
||||||
|
["int", "units_dead", { local _x } count allDeadMen],
|
||||||
|
["int", "groups_total", { local _x } count allGroups],
|
||||||
|
["int", "vehicles_total", { local _x } count vehicles]
|
||||||
|
]] call RangerMetrics_fnc_queue;
|
||||||
|
|
||||||
|
// Number of global units
|
||||||
|
["server_state", "entities_global", nil, [
|
||||||
|
["int", "units_alive", count allUnits ],
|
||||||
|
["int", "units_dead", count allDeadMen],
|
||||||
|
["int", "groups_total", count allGroups],
|
||||||
|
["int", "vehicles_total", count vehicles]
|
||||||
|
]] call RangerMetrics_fnc_queue;
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
// get basic config properties
|
// get basic config properties
|
||||||
private _properties = [
|
private _properties = [
|
||||||
["mission_info", [
|
["mission_info", [
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
params ["_playerID", "_ownerId", "_playerUID", "_profileName", "_displayName", "_steamName", "_clientState", "_isHC", "_adminState", "_networkInfo", "_unit", ["_jip", false]];
|
params ["_playerID", "_ownerId", "_playerUID", "_profileName", "_displayName", "_steamName", "_clientState", "_isHC", "_adminState", "_networkInfo", "_unit", ["_jip", false]];
|
||||||
// _networkInfo params ["_avgPing", "_avgBandwidth", "_desync"];
|
// _networkInfo params ["_avgPing", "_avgBandwidth", "_desync"];
|
||||||
|
|
||||||
@@ -12,13 +14,6 @@ private _fields = [
|
|||||||
["bool", "isJip", _jip]
|
["bool", "isJip", _jip]
|
||||||
];
|
];
|
||||||
|
|
||||||
if (!isNil "_unit") then {
|
|
||||||
private _roleDescription = roleDescription _unit;
|
|
||||||
if (_roleDescription isNotEqualTo "") then {
|
|
||||||
_fields pushBack ["string", "roleDescription", _roleDescription];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
[
|
[
|
||||||
"player_state",
|
"player_state",
|
||||||
"player_identity",
|
"player_identity",
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
{
|
{
|
||||||
_x params ["_playerID", "_ownerId", "_playerUID", "_profileName", "_displayName", "_steamName", "_clientState", "_isHC", "_adminState", "_networkInfo", "_unit"];
|
_x params ["_playerID", "_ownerId", "_playerUID", "_profileName", "_displayName", "_steamName", "_clientState", "_isHC", "_adminState", "_networkInfo", "_unit"];
|
||||||
_networkInfo params ["_avgPing", "_avgBandwidth", "_desync"];
|
_networkInfo params ["_avgPing", "_avgBandwidth", "_desync"];
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
params ["_playerID", "_ownerId", "_playerUID", "_profileName", "_displayName", "_steamName", "_clientState", "_isHC", "_adminState", "_networkInfo", "_unit"];
|
params ["_playerID", "_ownerId", "_playerUID", "_profileName", "_displayName", "_steamName", "_clientState", "_isHC", "_adminState", "_networkInfo", "_unit"];
|
||||||
// _networkInfo params ["_avgPing", "_avgBandwidth", "_desync"];
|
// _networkInfo params ["_avgPing", "_avgBandwidth", "_desync"];
|
||||||
|
|
||||||
["player_state", "player_status",
|
["player_state", "player_status",
|
||||||
[["string", "playerUID", _playerUID]],
|
[["string", "playerUID", _playerUID]],
|
||||||
[
|
[
|
||||||
|
|
||||||
["int", "clientStateNumber", _clientState],
|
["int", "clientStateNumber", _clientState],
|
||||||
["int", "adminState", _adminState]
|
["int", "adminState", _adminState]
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
// Mission name
|
// Mission name
|
||||||
[
|
[
|
||||||
"server_state", // bucket to store the data
|
"server_state", // bucket to store the data
|
||||||
@@ -12,5 +14,6 @@
|
|||||||
["string","briefingName", briefingName],
|
["string","briefingName", briefingName],
|
||||||
["string","missionName", missionName],
|
["string","missionName", missionName],
|
||||||
["string","missionNameSource", missionNameSource]
|
["string","missionNameSource", missionNameSource]
|
||||||
]
|
],
|
||||||
|
["profile", "server", "world"] // context
|
||||||
] call RangerMetrics_fnc_queue;
|
] call RangerMetrics_fnc_queue;
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
["server_state", "running_scripts", nil, [
|
["server_state", "running_scripts", nil, [
|
||||||
["int", "spawn", diag_activeScripts select 0],
|
["int", "spawn", diag_activeScripts select 0],
|
||||||
["int", "execVM", diag_activeScripts select 1],
|
["int", "execVM", diag_activeScripts select 1],
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
["server_state", "server_performance", nil, [
|
["server_state", "server_performance", nil, [
|
||||||
["float", "avg", diag_fps toFixed 2],
|
["float", "avg", diag_fps toFixed 2],
|
||||||
["float", "min", diag_fpsMin toFixed 2]
|
["float", "min", diag_fpsMin toFixed 2]
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
["server_state", "server_time", nil, [
|
["server_state", "server_time", nil, [
|
||||||
["float", "diag_tickTime", diag_tickTime toFixed 2],
|
["float", "diag_tickTime", diag_tickTime toFixed 2],
|
||||||
["float", "serverTime", time toFixed 2],
|
["float", "serverTime", time toFixed 2],
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
params [
|
||||||
|
["_unit", objNull, [objNull]]
|
||||||
|
];
|
||||||
|
|
||||||
|
if (isNull _unit) exitWith {};
|
||||||
|
|
||||||
|
private _lastLoadout = _unit getVariable "RangerMetrics_myLoadout";
|
||||||
|
if (isNil "_lastLoadout") then {
|
||||||
|
_lastLoadout = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
private _currentLoadout = [
|
||||||
|
["string", "currentWeapon", currentWeapon _unit],
|
||||||
|
["string", "uniform", uniform _unit],
|
||||||
|
["string", "vest", vest _unit],
|
||||||
|
["string", "backpack", backpack _unit],
|
||||||
|
["string", "headgear", headgear _unit],
|
||||||
|
["string", "goggles", goggles _unit],
|
||||||
|
["string", "hmd", hmd _unit],
|
||||||
|
["string", "primaryWeapon", primaryWeapon _unit],
|
||||||
|
["string", "primaryWeaponMagazine", primaryWeaponMagazine _unit],
|
||||||
|
["string", "secondaryWeapon", secondaryWeapon _unit],
|
||||||
|
["string", "secondaryWeaponMagazine", secondaryWeaponMagazine _unit],
|
||||||
|
["string", "handgunWeapon", handgunWeapon _unit],
|
||||||
|
["string", "handgunMagazine", handgunMagazine _unit]
|
||||||
|
];
|
||||||
|
|
||||||
|
// exit if loadout hasn't changed
|
||||||
|
if (_lastLoadout isEqualTo _currentLoadout) exitWith {};
|
||||||
|
|
||||||
|
// continue if loadout has changed
|
||||||
|
|
||||||
|
// store loadout data locally
|
||||||
|
_unit setVariable ["RangerMetrics_myLoadout", _currentLoadout];
|
||||||
|
|
||||||
|
_playerUID = getPlayerUID _unit;
|
||||||
|
|
||||||
|
|
||||||
|
// send loadout data
|
||||||
|
[
|
||||||
|
"player_state",
|
||||||
|
"unit_loadout",
|
||||||
|
[
|
||||||
|
["string", "playerUID", _playerUID]
|
||||||
|
],
|
||||||
|
_currentLoadout,
|
||||||
|
["server"]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
if (isNull _unit || !(isPlayer _unit)) exitWith {};
|
||||||
|
|
||||||
|
// Get owner playerUID
|
||||||
|
private _unitUID = getPlayerUID _unitUID;
|
||||||
|
if (_unitUID isEqualTo "") exitWith {};
|
||||||
|
|
||||||
|
// Medical info
|
||||||
|
private _isUnconscious = false;
|
||||||
|
private _isInCardiacArrest = false;
|
||||||
|
if (RangerMetrics_aceMedicalPresent) then {
|
||||||
|
_isUnconscious = _unit getVariable ["ace_medical_isUnconscious", false];
|
||||||
|
_isInCardiacArrest = _unit getVariable ["ace_medical_isInCardiacArrest", false];
|
||||||
|
} else {
|
||||||
|
_isUnconscious = (lifeState _unit) isEqualTo "INCAPACITATED";
|
||||||
|
};
|
||||||
|
|
||||||
|
// Vehicle info
|
||||||
|
if (!isNull (objectParent _unit)) then {
|
||||||
|
_crew = fullCrew (objectParent _unit);
|
||||||
|
_pos = _crew find {(_x select 0) isEqualTo _unit};
|
||||||
|
_vehicleRole = toLower _crew select _pos select 1;
|
||||||
|
} else {
|
||||||
|
_vehicleRole = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
// Declare fields
|
||||||
|
private _fields = [
|
||||||
|
["float", "health", 1 - (damage _unit)],
|
||||||
|
["bool", "is_unconscious", _isUnconscious],
|
||||||
|
["bool", "is_cardiac_arrest", _isInCardiacArrest],
|
||||||
|
["bool", "is_captive", captive _unit],
|
||||||
|
["bool", "in_vehicle", !isNull (objectParent _unit)],
|
||||||
|
["string", "vehicle_role", _vehicleRole],
|
||||||
|
["float", "speed_kmh", speed _unit]
|
||||||
|
];
|
||||||
|
|
||||||
|
// Role description
|
||||||
|
private _roleDescription = roleDescription _unit;
|
||||||
|
if (_roleDescription isNotEqualTo "") then {
|
||||||
|
_fields pushBack ["string", "roleDescription", _roleDescription];
|
||||||
|
};
|
||||||
|
|
||||||
|
// Traits
|
||||||
|
private _playerTraits = getAllUnitTraits player;
|
||||||
|
{
|
||||||
|
private _valueType = typeNAME (_x select 1);
|
||||||
|
switch (_valueType) do {
|
||||||
|
case "BOOL": {
|
||||||
|
_fields pushBack ["bool", (_x select 0), (_x select 1)];
|
||||||
|
};
|
||||||
|
case "SCALAR": {
|
||||||
|
_fields pushBack ["float", (_x select 0), (_x select 1)];
|
||||||
|
};
|
||||||
|
case "STRING": {
|
||||||
|
_fields pushBack ["string", (_x select 0), (_x select 1)];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} forEach _playerTraits;
|
||||||
|
|
||||||
|
|
||||||
|
[
|
||||||
|
"player_state",
|
||||||
|
"unit_status",
|
||||||
|
[
|
||||||
|
["string", "playerUID", _unitUID]
|
||||||
|
],
|
||||||
|
_fields,
|
||||||
|
["server"]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
[
|
||||||
|
"server_state",
|
||||||
|
"view_distance",
|
||||||
|
nil,
|
||||||
|
[
|
||||||
|
["float", "objectViewDistance", getObjectViewDistance # 0],
|
||||||
|
["float", "viewDistance", viewDistance]
|
||||||
|
]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
if (!RangerMetrics_run) exitWith {};
|
||||||
|
|
||||||
[
|
[
|
||||||
"server_state", // bucket to store the data
|
"server_state", // bucket to store the data
|
||||||
"weather", // measurement classifier inside of bucket
|
"weather", // measurement classifier inside of bucket
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
[
|
[
|
||||||
[
|
// [
|
||||||
5, // Poll interval in seconds
|
// 5, // Poll interval in seconds
|
||||||
[ // Array of things to poll on clients
|
// [ // Array of things to poll on clients
|
||||||
[
|
// [
|
||||||
"RangerMetrics_poll_loadout", // Name of localNamespace variable to save the handler as on clients
|
// "RangerMetrics_poll_loadout", // Name of localNamespace variable to save the handler as on clients
|
||||||
RangerMetrics_capture_fnc_player_loadout // Function to call
|
// RangerMetrics_capture_fnc_player_loadout // Function to call
|
||||||
]
|
// ]
|
||||||
]
|
// ]
|
||||||
]
|
// ]
|
||||||
]
|
]
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
[
|
||||||
|
["ace_unconscious", {
|
||||||
|
call RangerMetrics_event_fnc_aceUnconscious
|
||||||
|
}]
|
||||||
|
]
|
||||||
@@ -1,19 +1,12 @@
|
|||||||
[
|
[
|
||||||
["MPEnded", {
|
|
||||||
private ["_winner", "_reason"];
|
|
||||||
_winner = "Unknown";
|
|
||||||
_reason = "Mission Complete";
|
|
||||||
["server_events", "MPEnded", nil, [
|
|
||||||
["string", "winner", _winner],
|
|
||||||
["string", "reason", _reason]
|
|
||||||
]] call RangerMetrics_fnc_queue;
|
|
||||||
call RangerMetrics_capture_fnc_running_mission;
|
|
||||||
}],
|
|
||||||
["OnUserConnected", {
|
["OnUserConnected", {
|
||||||
params ["_networkId", "_clientStateNumber", "_clientState"];
|
params ["_networkId", "_clientStateNumber", "_clientState"];
|
||||||
(getUserInfo _networkId) call RangerMetrics_capture_fnc_player_identity;
|
private _userInfo = (getUserInfo _networkId);
|
||||||
(getUserInfo _networkId) call RangerMetrics_capture_fnc_player_status;
|
_userInfo call RangerMetrics_capture_fnc_player_identity;
|
||||||
["server_events", "UserConnected", nil, [
|
_userInfo call RangerMetrics_capture_fnc_player_status;
|
||||||
|
["server_events", "UserConnected", [
|
||||||
|
["string", "playerUID", _userInfo#2]
|
||||||
|
], [
|
||||||
["string", "networkId", _networkId],
|
["string", "networkId", _networkId],
|
||||||
["int", "clientStateNumber", _clientStateNumber],
|
["int", "clientStateNumber", _clientStateNumber],
|
||||||
["string", "clientState", _clientState]
|
["string", "clientState", _clientState]
|
||||||
@@ -21,9 +14,12 @@
|
|||||||
}],
|
}],
|
||||||
["OnUserDisconnected", {
|
["OnUserDisconnected", {
|
||||||
params ["_networkId", "_clientStateNumber", "_clientState"];
|
params ["_networkId", "_clientStateNumber", "_clientState"];
|
||||||
(getUserInfo _networkId) call RangerMetrics_capture_fnc_player_identity;
|
private _userInfo = (getUserInfo _networkId);
|
||||||
(getUserInfo _networkId) call RangerMetrics_capture_fnc_player_status;
|
_userInfo call RangerMetrics_capture_fnc_player_identity;
|
||||||
["server_events", "OnUserDisconnected", nil, [
|
_userInfo call RangerMetrics_capture_fnc_player_status;
|
||||||
|
["server_events", "OnUserDisconnected", [
|
||||||
|
["string", "playerUID", _userInfo#2]
|
||||||
|
], [
|
||||||
["string", "networkId", _networkId],
|
["string", "networkId", _networkId],
|
||||||
["int", "clientStateNumber", _clientStateNumber],
|
["int", "clientStateNumber", _clientStateNumber],
|
||||||
["string", "clientState", _clientState]
|
["string", "clientState", _clientState]
|
||||||
@@ -31,9 +27,12 @@
|
|||||||
}],
|
}],
|
||||||
["PlayerConnected", {
|
["PlayerConnected", {
|
||||||
params ["_id", "_uid", "_name", "_jip", "_owner", "_idstr"];
|
params ["_id", "_uid", "_name", "_jip", "_owner", "_idstr"];
|
||||||
(getUserInfo _idstr) call RangerMetrics_capture_fnc_player_identity;
|
private _userInfo = (getUserInfo _networkId);
|
||||||
(getUserInfo _idstr) call RangerMetrics_capture_fnc_player_status;
|
_userInfo call RangerMetrics_capture_fnc_player_identity;
|
||||||
["server_events", "PlayerConnected", nil, [
|
_userInfo call RangerMetrics_capture_fnc_player_status;
|
||||||
|
["server_events", "PlayerConnected", [
|
||||||
|
["string", "playerUID", _userInfo#2]
|
||||||
|
], [
|
||||||
["int", "id", _id],
|
["int", "id", _id],
|
||||||
["string", "uid", _uid],
|
["string", "uid", _uid],
|
||||||
["string", "name", _name],
|
["string", "name", _name],
|
||||||
@@ -44,9 +43,12 @@
|
|||||||
}],
|
}],
|
||||||
["PlayerDisconnected", {
|
["PlayerDisconnected", {
|
||||||
params ["_id", "_uid", "_name", "_jip", "_owner", "_idstr"];
|
params ["_id", "_uid", "_name", "_jip", "_owner", "_idstr"];
|
||||||
(getUserInfo _idstr) call RangerMetrics_capture_fnc_player_identity;
|
private _userInfo = (getUserInfo _networkId);
|
||||||
(getUserInfo _idstr) call RangerMetrics_capture_fnc_player_status;
|
_userInfo call RangerMetrics_capture_fnc_player_identity;
|
||||||
["server_events", "PlayerDisconnected", nil, [
|
_userInfo call RangerMetrics_capture_fnc_player_status;
|
||||||
|
["server_events", "PlayerDisconnected", [
|
||||||
|
["string", "playerUID", _userInfo#2]
|
||||||
|
], [
|
||||||
["int", "id", _id],
|
["int", "id", _id],
|
||||||
["string", "uid", _uid],
|
["string", "uid", _uid],
|
||||||
["string", "name", _name],
|
["string", "name", _name],
|
||||||
@@ -57,8 +59,11 @@
|
|||||||
}],
|
}],
|
||||||
["OnUserClientStateChanged", {
|
["OnUserClientStateChanged", {
|
||||||
params ["_networkId", "_clientStateNumber", "_clientState"];
|
params ["_networkId", "_clientStateNumber", "_clientState"];
|
||||||
(getUserInfo _networkId) call RangerMetrics_capture_fnc_player_status;
|
private _userInfo = (getUserInfo _networkId);
|
||||||
["server_events", "OnUserClientStateChanged", nil, [
|
_userInfo call RangerMetrics_capture_fnc_player_status;
|
||||||
|
["server_events", "OnUserClientStateChanged", [
|
||||||
|
["string", "playerUID", _userInfo#2]
|
||||||
|
], [
|
||||||
["string", "networkId", _networkId],
|
["string", "networkId", _networkId],
|
||||||
["int", "clientStateNumber", _clientStateNumber],
|
["int", "clientStateNumber", _clientStateNumber],
|
||||||
["string", "clientState", _clientState]
|
["string", "clientState", _clientState]
|
||||||
@@ -66,16 +71,86 @@
|
|||||||
}],
|
}],
|
||||||
["OnUserAdminStateChanged", {
|
["OnUserAdminStateChanged", {
|
||||||
params ["_networkId", "_loggedIn", "_votedIn"];
|
params ["_networkId", "_loggedIn", "_votedIn"];
|
||||||
(getUserInfo _networkId) call RangerMetrics_capture_fnc_player_status;
|
private _userInfo = (getUserInfo _networkId);
|
||||||
["server_events", "OnUserAdminStateChanged", nil, [
|
_userInfo call RangerMetrics_capture_fnc_player_status;
|
||||||
|
["server_events", "OnUserAdminStateChanged", [
|
||||||
|
["string", "playerUID", _userInfo#2]
|
||||||
|
], [
|
||||||
["string", "networkId", _networkId],
|
["string", "networkId", _networkId],
|
||||||
["bool", "loggedIn", _loggedIn],
|
["bool", "loggedIn", _loggedIn],
|
||||||
["bool", "votedIn", _votedIn]
|
["bool", "votedIn", _votedIn]
|
||||||
]] call RangerMetrics_fnc_queue;
|
]] call RangerMetrics_fnc_queue;
|
||||||
}],
|
}],
|
||||||
|
["OnUserKicked", {
|
||||||
|
params ["_networkId", "_kickTypeNumber", "_kickType", "_kickReason", "_kickMessageIncReason"];
|
||||||
|
private _userInfo = (getUserInfo _networkId);
|
||||||
|
_userInfo call RangerMetrics_capture_fnc_player_identity;
|
||||||
|
_userInfo call RangerMetrics_capture_fnc_player_status;
|
||||||
|
["server_events", "OnUserKicked", [
|
||||||
|
["string", "playerUID", _userInfo#2]
|
||||||
|
], [
|
||||||
|
["string", "networkId", _networkId],
|
||||||
|
["int", "kickTypeNumber", _kickTypeNumber],
|
||||||
|
["string", "kickType", _kickType],
|
||||||
|
["string", "kickReason", _kickReason],
|
||||||
|
["string", "kickMessageIncReason", _kickMessageIncReason]
|
||||||
|
]] call RangerMetrics_fnc_queue;
|
||||||
|
}],
|
||||||
["HandleChatMessage", {
|
["HandleChatMessage", {
|
||||||
_this call RangerMetrics_capture_fnc_chat_message;
|
_this call RangerMetrics_event_fnc_HandleChatMessage;
|
||||||
// don't interfaere with the chat message
|
// don't interfaere with the chat message
|
||||||
false;
|
false;
|
||||||
|
}],
|
||||||
|
["MPEnded", {
|
||||||
|
private ["_winner", "_reason"];
|
||||||
|
_winner = "Unknown";
|
||||||
|
_reason = "Mission Complete";
|
||||||
|
["server_events", "MPEnded", nil, [
|
||||||
|
["string", "winner", _winner],
|
||||||
|
["string", "reason", _reason]
|
||||||
|
]] call RangerMetrics_fnc_queue;
|
||||||
|
call RangerMetrics_capture_fnc_running_mission;
|
||||||
|
}],
|
||||||
|
["EntityCreated", {
|
||||||
|
params ["_entity"];
|
||||||
|
call RangerMetrics_capture_fnc_entity_count;
|
||||||
|
}],
|
||||||
|
["EntityKilled", {
|
||||||
|
_this call RangerMetrics_event_fnc_EntityKilled;
|
||||||
|
}],
|
||||||
|
["GroupCreated", {
|
||||||
|
params ["_group"];
|
||||||
|
call RangerMetrics_capture_fnc_entity_count;
|
||||||
|
}],
|
||||||
|
["GroupDeleted", {
|
||||||
|
params ["_group"];
|
||||||
|
call RangerMetrics_capture_fnc_entity_count;
|
||||||
|
}],
|
||||||
|
["MarkerCreated", {
|
||||||
|
params ["_marker", "_channelNumber", "_owner", "_local"];
|
||||||
|
_this call RangerMetrics_event_fnc_MarkerCreated;
|
||||||
|
}],
|
||||||
|
["MarkerDeleted", {
|
||||||
|
params ["_marker", "_channelNumber", "_owner", "_local"];
|
||||||
|
_this call RangerMetrics_event_fnc_MarkerDeleted;
|
||||||
|
}],
|
||||||
|
["MarkerUpdated", {
|
||||||
|
params ["_marker", "_channelNumber", "_owner", "_local"];
|
||||||
|
_this call RangerMetrics_event_fnc_MarkerUpdated;
|
||||||
|
}],
|
||||||
|
["Service", {
|
||||||
|
params ["_serviceVehicle", "_servicedVehicle", "_serviceType", "_needsService", "_autoSupply"];
|
||||||
|
[
|
||||||
|
"server_events",
|
||||||
|
"Service",
|
||||||
|
[
|
||||||
|
["string", "serviceVehicle", typeOf _serviceVehicle],
|
||||||
|
["string", "servicedVehicle", typeOf _servicedVehicle],
|
||||||
|
["int", "serviceType", _serviceType],
|
||||||
|
["bool", "needsService", _needsService],
|
||||||
|
["bool", "autoSupply", _autoSupply]
|
||||||
|
],
|
||||||
|
nil
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
}]
|
}]
|
||||||
]
|
]
|
||||||
@@ -5,15 +5,16 @@
|
|||||||
RangerMetrics_capture_fnc_server_performance,
|
RangerMetrics_capture_fnc_server_performance,
|
||||||
RangerMetrics_capture_fnc_running_scripts,
|
RangerMetrics_capture_fnc_running_scripts,
|
||||||
RangerMetrics_capture_fnc_server_time,
|
RangerMetrics_capture_fnc_server_time,
|
||||||
RangerMetrics_capture_fnc_entities_local,
|
RangerMetrics_capture_fnc_entity_count,
|
||||||
RangerMetrics_capture_fnc_entities_global,
|
|
||||||
RangerMetrics_capture_fnc_player_performance
|
RangerMetrics_capture_fnc_player_performance
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
60,
|
60,
|
||||||
[
|
[
|
||||||
RangerMetrics_capture_fnc_weather
|
RangerMetrics_capture_fnc_weather,
|
||||||
|
RangerMetrics_capture_fnc_view_distance,
|
||||||
|
RangerMetrics_capture_fnc_running_mission
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
if (!RangerMetrics_cbaPresent) exitWith {
|
||||||
|
[
|
||||||
|
format["RangerMetrics: CBA not present, aborting class EHs."],
|
||||||
|
"WARN"
|
||||||
|
] call RangerMetrics_fnc_log;
|
||||||
|
};
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
// Initialize all units
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
["All", "InitPost", {
|
||||||
|
private _unit = _this # 0;
|
||||||
|
|
||||||
|
|
||||||
|
if (_unit isKindOf "CAManBase" && isPlayer _unit) then {
|
||||||
|
[_unit] call RangerMetrics_fnc_initUnit;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
_unit setVariable ["RangerMetrics_id", RangerMetrics_nextID, true];
|
||||||
|
|
||||||
|
if (RangerMetrics_debug) then {
|
||||||
|
[
|
||||||
|
format["ID %1, Object %2 (%3)", RangerMetrics_nextID, _unit, [configOf _unit] call BIS_fnc_displayName],
|
||||||
|
"DEBUG"
|
||||||
|
] call RangerMetrics_fnc_log;
|
||||||
|
};
|
||||||
|
RangerMetrics_nextID = RangerMetrics_nextID + 1;
|
||||||
|
}, nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
params [
|
||||||
|
["_unit", objNull, [objNull]]
|
||||||
|
];
|
||||||
|
|
||||||
|
if (isNull _unit) exitWith {};
|
||||||
|
if (!isPlayer _unit) exitWith {};
|
||||||
|
|
||||||
|
|
||||||
|
[RangerMetrics_aceMedicalPresent, {
|
||||||
|
if (not _this) exitWith {};
|
||||||
|
player addEventHandler ["Dammaged", {
|
||||||
|
params ["_unit", "_killer", "_instigator", "_useEffects"];
|
||||||
|
private _aceLastDamage = _unit getVariable "ace_medical_lastDamageSource";
|
||||||
|
if (!isNil "_aceLastDamage") then {
|
||||||
|
_unit setVariable ["ace_medical_lastDamageSource", _aceLastDamage, 2];
|
||||||
|
};
|
||||||
|
}];
|
||||||
|
}] remoteExec ["call", owner _unit, _unit];
|
||||||
|
|
||||||
|
_unit addEventHandler ["Dammaged", {
|
||||||
|
params ["_unit", "_selection", "_damage", "_hitIndex", "_hitPoint", "_shooter", "_projectile"];
|
||||||
|
private _unitPlayerId = getPlayerId _unit;
|
||||||
|
private _userInfo = getUserInfo _unitPlayerId;
|
||||||
|
private _shooterPlayerId = (getPlayerId (getShotParents _projectile select 1));
|
||||||
|
private _shooterInfo = getUserInfo _shooterPlayerId;
|
||||||
|
[_unit] call RangerMetrics_capture_fnc_unit_state;
|
||||||
|
|
||||||
|
[
|
||||||
|
"player_events",
|
||||||
|
"Dammaged",
|
||||||
|
[
|
||||||
|
["string", "playerUID", _userInfo select 2]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["string", "selection", _selection],
|
||||||
|
["number", "damage", _damage],
|
||||||
|
["number", "hitIndex", _hitIndex],
|
||||||
|
["string", "hitPoint", _hitPoint],
|
||||||
|
["string", "shooter", _shooterInfo select 2],
|
||||||
|
["string", "projectile", _projectile]
|
||||||
|
],
|
||||||
|
["server"]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
|
}];
|
||||||
|
|
||||||
|
_unit addEventHandler ["FiredMan", {
|
||||||
|
_this call RangerMetrics_event_fnc_FiredMan;
|
||||||
|
}];
|
||||||
|
|
||||||
|
_unit addEventHandler ["GetInMan", {
|
||||||
|
params ["_unit", "_role", "_vehicle", "_turret"];
|
||||||
|
private _unitPlayerId = getPlayerId _unit;
|
||||||
|
private _userInfo = getUserInfo _unitPlayerId;
|
||||||
|
|
||||||
|
[
|
||||||
|
"player_events",
|
||||||
|
"GetInMan",
|
||||||
|
[
|
||||||
|
["string", "playerUID", _userInfo select 2]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["string", "role", _role],
|
||||||
|
["string", "vehicle", _vehicle],
|
||||||
|
["string", "turret", _turret]
|
||||||
|
],
|
||||||
|
["server"]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
|
}];
|
||||||
|
|
||||||
|
_unit addEventHandler ["GetOutMan", {
|
||||||
|
params ["_unit", "_role", "_vehicle", "_turret"];
|
||||||
|
private _unitPlayerId = getPlayerId _unit;
|
||||||
|
private _userInfo = getUserInfo _unitPlayerId;
|
||||||
|
|
||||||
|
[
|
||||||
|
"player_events",
|
||||||
|
"GetOutMan",
|
||||||
|
[
|
||||||
|
["string", "playerUID", _userInfo select 2]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["string", "role", _role],
|
||||||
|
["string", "vehicle", _vehicle],
|
||||||
|
["string", "turret", _turret]
|
||||||
|
],
|
||||||
|
["server"]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
|
}];
|
||||||
|
|
||||||
|
_unit addEventHandler ["HandleScore", {
|
||||||
|
params ["_unit", "_object", "_score"];
|
||||||
|
private _unitPlayerId = getPlayerId _unit;
|
||||||
|
private _userInfo = getUserInfo _unitPlayerId;
|
||||||
|
|
||||||
|
[
|
||||||
|
"player_events",
|
||||||
|
"HandleScore",
|
||||||
|
[
|
||||||
|
["string", "playerUID", _userInfo select 2]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["int", "score", _score],
|
||||||
|
["string", "objectClass", typeOf _object],
|
||||||
|
["string", "object", [configOf _object] call BIS_fnc_displayName]
|
||||||
|
],
|
||||||
|
["server"]
|
||||||
|
] call RangerMetrics_fnc_queue;
|
||||||
|
|
||||||
|
nil;
|
||||||
|
}];
|
||||||
|
|
||||||
|
|
||||||
|
// _unit addEventHandler ["InventoryClosed", {
|
||||||
|
// params ["_unit", "_container"];
|
||||||
|
// private _unitPlayerId = getPlayerId _unit;
|
||||||
|
// private _userInfo = getUserInfo _unitPlayerId;
|
||||||
|
|
||||||
|
// [
|
||||||
|
// "player_events",
|
||||||
|
// "InventoryClosed",
|
||||||
|
// [
|
||||||
|
// ["string", "playerUID", _userInfo select 2]
|
||||||
|
// ],
|
||||||
|
// [
|
||||||
|
// ["string", "container", _container]
|
||||||
|
// ],
|
||||||
|
// ["server"]
|
||||||
|
// ] call RangerMetrics_fnc_queue;
|
||||||
|
// }];
|
||||||
@@ -2,12 +2,13 @@
|
|||||||
|
|
||||||
if (is3DEN || !isMultiplayer) exitWith {};
|
if (is3DEN || !isMultiplayer) exitWith {};
|
||||||
|
|
||||||
RangerMetrics_cbaPresent = (isClass(configFile >> "CfgPatches" >> "cba_main"));
|
RangerMetrics_cbaPresent = isClass(configFile >> "CfgPatches" >> "cba_main");
|
||||||
|
RangerMetrics_aceMedicalPresent = isClass(configFile >> "CfgPatches" >> "ace_medical_status");
|
||||||
RangerMetrics_logPrefix = "RangerMetrics";
|
RangerMetrics_logPrefix = "RangerMetrics";
|
||||||
RangerMetrics_debug = true;
|
RangerMetrics_debug = true;
|
||||||
RangerMetrics_initialized = false;
|
RangerMetrics_initialized = false;
|
||||||
RangerMetrics_run = false;
|
RangerMetrics_run = false;
|
||||||
RangerMetrics_activeThreads = [];
|
RangerMetrics_nextID = 0;
|
||||||
RangerMetrics_messageQueue = createHashMap;
|
RangerMetrics_messageQueue = createHashMap;
|
||||||
RangerMetrics_sendBatchHandle = scriptNull;
|
RangerMetrics_sendBatchHandle = scriptNull;
|
||||||
|
|
||||||
@@ -84,6 +85,10 @@ RangerMetrics_captureDefinitions = createHashMapFromArray [
|
|||||||
[
|
[
|
||||||
"ClientPoll",
|
"ClientPoll",
|
||||||
call RangerMetrics_cDefinitions_fnc_client_poll
|
call RangerMetrics_cDefinitions_fnc_client_poll
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"CBAEvent",
|
||||||
|
call RangerMetrics_cDefinitions_fnc_server_CBA
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -113,21 +118,32 @@ RangerMetrics_captureDefinitions = createHashMapFromArray [
|
|||||||
// begin client polling
|
// begin client polling
|
||||||
|
|
||||||
|
|
||||||
|
// set up CBA event listeners
|
||||||
|
{_x params ["_handleName", "_code"];
|
||||||
|
missionNamespace setVariable [
|
||||||
|
("RangerMetrics" + "_CBAEH_" + _handleName),
|
||||||
|
([_handleName, _code] call CBA_fnc_addEventHandlerArgs)
|
||||||
|
];
|
||||||
|
} forEach (RangerMetrics_captureDefinitions get "CBAEvent");
|
||||||
|
|
||||||
|
|
||||||
|
// set up CBA class inits if CBA loaded
|
||||||
|
call RangerMetrics_fnc_classHandlers;
|
||||||
|
|
||||||
// start sending
|
|
||||||
[{
|
|
||||||
params ["_args", "_idPFH"];
|
|
||||||
if (scriptDone RangerMetrics_sendBatchHandle) then {
|
|
||||||
RangerMetrics_sendBatchHandle = [] spawn RangerMetrics_fnc_send;
|
|
||||||
};
|
|
||||||
}, 2, []] call CBA_fnc_addPerFrameHandler;
|
|
||||||
|
|
||||||
|
|
||||||
RangerMetrics_initialized = true;
|
RangerMetrics_initialized = true;
|
||||||
RangerMetrics_run = true;
|
RangerMetrics_run = true;
|
||||||
|
["RangerMetrics_run", true] remoteExecCall ["setVariable", 0, true];
|
||||||
call RangerMetrics_capture_fnc_running_mission;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// start sending
|
||||||
|
[{
|
||||||
|
params ["_args", "_idPFH"];
|
||||||
|
// if (scriptDone RangerMetrics_sendBatchHandle) then {
|
||||||
|
// RangerMetrics_sendBatchHandle = [] spawn RangerMetrics_fnc_send;
|
||||||
|
// };
|
||||||
|
call RangerMetrics_fnc_send;
|
||||||
|
}, 3, []] call CBA_fnc_addPerFrameHandler;
|
||||||
@@ -23,8 +23,8 @@ if (
|
|||||||
// extension calls support a max of 2048 elements in the extension call
|
// extension calls support a max of 2048 elements in the extension call
|
||||||
// so we need to split the data into chunks of 2000
|
// so we need to split the data into chunks of 2000
|
||||||
private "_processing";
|
private "_processing";
|
||||||
_processing = _records select [0, (count _records -1) min 2000];
|
_processing = _records select [0, (count _records -1) min 750];
|
||||||
_records = _records select [2000, count _records - 1];
|
_records = _records select [750, count _records - 1];
|
||||||
|
|
||||||
// send the data
|
// send the data
|
||||||
if (
|
if (
|
||||||
|
|||||||
Reference in New Issue
Block a user