Compare commits

...

10 Commits

Author SHA1 Message Date
github-actions
218ffa4fbb v1.0.0 Build 16 2025-05-04 00:34:59 +00:00
Jacob Schmidt
dc72f88327 feat(db): Force save on mission end
All checks were successful
Build / Build (push) Successful in 29s
This commit introduces a mission event handler that forces a database save with backup when the mission ends.

Key changes:

*   **`XEH_preInit_server.sqf`:** Added an "Ended" mission event handler that calls the `ArmaDragonflyClient` extension with the "savedb" command and logs an info message. This ensures that the database is saved when the mission ends, providing a backup in case of unexpected server shutdowns.
2025-05-03 19:34:43 -05:00
github-actions
6857e12d26 v1.0.0 Build 15 2025-04-05 14:07:36 +00:00
Jacob Schmidt
665561e29e feat(db): Implement hash deletion functions
All checks were successful
Build / Build (push) Successful in 1m21s
This commit introduces functionality to delete hash values from the Dragonfly database. It includes two new functions: `hashDelete` for deleting a hash value by key, and `hashDeleteId` for deleting a hash value by both key and ID.

Key changes:

*   **`fnc_processQueue.sqf`:** Added cases for "hdel" and "hdelid" task types to process hash deletion requests, calling the corresponding `FUNC(hashDelete)` and `FUNC(hashDeleteId)` functions.
*   **`XEH_PREP.hpp`:** Added `PREP` definitions for `hashDelete` and `hashDeleteId` to enable event handlers for these functions.
2025-04-05 09:06:46 -05:00
github-actions
ddb7e9ccc3 v1.0.0 Build 14 2025-03-30 22:15:53 +00:00
Jacob Schmidt
c8d81ba3bb docs: Update README.md with detailed documentation
All checks were successful
Build / Build (push) Successful in 39s
This commit significantly enhances the `README.md` file, providing comprehensive documentation for the ArmaDragonflyClient.

Key changes:

*   **Detailed Function Categories:** Categorized functions for better organization (Core, Basic Data Operations, Hash Operations, List Operations).
*   **Usage Examples:** Added clear and concise usage examples for basic operations, hash operations (context and ID-specific), and list operations.
*   **Function Documentation Structure:** Outlined the structure for individual function documentation.
*   **License Information:** Updated the license information.
2025-03-30 17:15:35 -05:00
github-actions
ff9922ae05 v1.0.0 Build 13 2025-03-29 20:35:39 +00:00
Jacob Schmidt
236dec1d35 feat(client): Trim quotes from hashset value
All checks were successful
Build / Build (push) Successful in 30s
This commit enhances the handling of string values in the `DragonflyHashSetAsync` function. Specifically, it adds `.Trim('"')` to the second argument (the value being set) to remove any surrounding quotes. This ensures that the value is correctly stored and retrieved, preventing potential issues with data integrity.

Key changes:

*   **String Value Trimming:** Added `.Trim('"')` to the value argument in `DragonflyHashSetAsync` within `Main.cs`.
*   **Binary Updates:** Updated the compiled DLL and SO files.
2025-03-29 15:35:20 -05:00
github-actions
fb4695a0ee v1.0.0 Build 12 2025-03-28 14:45:33 +00:00
Jacob Schmidt
8c64bfe4a9 feat(db): Enhance debugging and fix NetId handling
All checks were successful
Build / Build (push) Successful in 30s
This commit enhances debugging capabilities and addresses issues related to NetId handling within the DragonflyDB system.

Key changes:

*   **Improved Debugging:** Added more detailed logging in `Utils.cs` to track data chunks and strings, improving the ability to diagnose issues.
*   **NetId Handling Fix:** Modified `fnc_handler.sqf` to correctly handle NetIds, including a fallback mechanism if the target object is null. This ensures that remote execution attempts don't fail silently.
*   **Function Examples:** Updated examples in `fnc_hashSetIdBulk.sqf` and `fnc_hashSetBulk.sqf` to correctly use array syntax for function calls.
*   **Simplified fetch.sqf:** Removed unecessary conversion of the _call variable.
*   **Binary Updates:** Updated the compiled DLL and SO files.
2025-03-28 09:45:16 -05:00
294 changed files with 26019 additions and 2108 deletions

24
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,24 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Start Arma 3 Server",
"type": "process",
"command": "wscript.exe",
"args": [
"D:\\SteamLibrary\\steamapps\\common\\Arma 3\\start_serverhub_hidden.vbs"
],
"presentation": {
"reveal": "silent",
"panel": "shared",
"showReuseMessage": false,
"clear": true
},
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}

Binary file not shown.

Binary file not shown.

View File

@ -3,6 +3,8 @@ PREP(delete);
PREP(fetch);
PREP(get);
PREP(handler);
PREP(hashDelete);
PREP(hashDeleteId);
PREP(hashGet);
PREP(hashGetAll);
PREP(hashGetAllId);

View File

@ -1 +1,6 @@
#include "script_component.hpp"
addMissionEventHandler ["Ended", {
"ArmaDragonflyClient" callExtension ["savedb", []];
INFO("Mission ended - forced save with backup");
}];

View File

@ -52,9 +52,7 @@ if (_count_total == _total) then {
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_fetch' Data String: %1", _dataString];
#endif
private _callValue = (_call == "true");
[_uniqueID, _function, _callValue, (parseSimpleArray _dataString), _netId] call FUNC(handler);
[_uniqueID, _function, _call, (parseSimpleArray _dataString), _netId] call FUNC(handler);
dragonfly_db_fetch_array = dragonfly_db_fetch_array select {!((_x select 0) in [_uniqueID])};
};

View File

@ -32,7 +32,7 @@
* Public: Yes
*/
params [["_uniqueID", "", [""]], ["_function", "", [""]], ["_call", false, [false]], ["_data", [], [[]]], ["_netId", nil, [""]]];
params [["_uniqueID", "", [""]], ["_function", "", [""]], ["_call", false, [false]], ["_data", [], [[]]], ["_netId", "", [""]]];
#ifdef __A3__DEBUG__
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_handler' UniqueID: '%1', Function: '%2', Call: '%3', Data: '%4', NetId: '%5'", _uniqueID, _function, _call, _data, _netId];
@ -44,10 +44,34 @@ if (_function == "" || count _data == 0) exitWith {
private _func = call compile format ["%1", _function];
if ((!isNil "_netId") and (_netId isNotEqualTo "")) then {
if (_netId != "") then {
private _target = objectFromNetId _netId;
if (_call) then { _data remoteExecCall [_function, _target, false]; } else { _data remoteExec [_function, _target, false]; };
if (!isNull _target) then {
#ifdef __A3__DEBUG__
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_handler' Using NetId: '%1'", _netId];
#endif
if (_call) then {
_data remoteExecCall [_function, _target, false];
} else {
_data remoteExec [_function, _target, false];
};
} else {
#ifdef __A3__DEBUG__
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_handler' NetId '%1' resolved to null object, using local execution", _netId];
#endif
if (_call) then {
_data call _func;
} else {
_data spawn _func;
};
};
} else {
if (_call) then { _data call _func; } else { _data spawn _func; };
if (_call) then {
_data call _func;
} else {
_data spawn _func;
};
};

View File

@ -0,0 +1,41 @@
#include "..\script_component.hpp"
/*
* Function: dragonfly_db_fnc_hashDelete
* Author: Creedcoder, J.Schmidt
* Edit: 07.15.2024
* Copyright © 2024 Creedcoder, J.Schmidt, All rights reserved
*
* Do not edit without permission!
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
* To view a copy of this license, vist https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons,
* PO Box 1866, Mountain View, CA 94042
*
* [Description]
* Delete field in hash stored at key from DB.
*
* Arguments:
* 0: Name of stored field in hash <STRING> (default: "")
*
* Return Value:
* N/A
*
* Examples:
* ["loadout"] call dragonfly_db_fnc_hashDelete (Server or Singleplayer Only)
* ["loadout"] remoteExecCall ["dragonfly_db_fnc_hashDelete", 2, false] (Multiplayer Only)
*
* Public: Yes
*/
params [["_keyField", "", [""]]];
#ifdef __A3__DEBUG__
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_hashDelete' KeyField: '%1'", _keyField];
#endif
if (_keyField == "") exitWith {
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_hashDelete' Invalid Input for KeyField '%1'", _keyField];
};
"ArmaDragonflyClient" callExtension ["hdel", [_keyField]];

View File

@ -0,0 +1,42 @@
#include "..\script_component.hpp"
/*
* Function: dragonfly_db_fnc_hashDeleteId
* Author: Creedcoder, J.Schmidt
* Edit: 07.15.2024
* Copyright © 2024 Creedcoder, J.Schmidt, All rights reserved
*
* Do not edit without permission!
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
* To view a copy of this license, vist https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons,
* PO Box 1866, Mountain View, CA 94042
*
* [Description]
* Delete field in hash stored at key from DB.
*
* Arguments:
* 0: Key <STRING> (default: "")
* 1: Key Field <STRING> (default: "")
*
* Return Value:
* N/A
*
* Examples:
* [getPlayerUID player, "loadout"] call dragonfly_db_fnc_hashDeleteId (Server or Singleplayer Only)
* [getPlayerUID player, "loadout"] remoteExecCall ["dragonfly_db_fnc_hashDeleteId", 2, false] (Multiplayer Only)
*
* Public: Yes
*/
params [["_key", "", [""]], ["_keyField", "", [""]]];
#ifdef __A3__DEBUG__
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_hashDeleteId' Key: '%1', KeyField: '%2'", _key, _keyField];
#endif
if (_key == "" || _keyField == "") exitWith {
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_hashDeleteId' Invalid Input for Key '%1' or KeyField '%2'", _key, _keyField];
};
"ArmaDragonflyClient" callExtension ["hdelid", [_key, _keyField]];

View File

@ -22,8 +22,8 @@
* N/A
*
* Examples:
* ["loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] call dragonfly_db_fnc_hashSetBulk (Server or Singleplayer Only)
* ["loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] remoteExecCall ["dragonfly_db_fnc_hashSetBulk", 2, false] (Multiplayer Only)
* [["loadout", [getUnitLoadout player], "position", [getPosASLVisual player]]] call dragonfly_db_fnc_hashSetBulk (Server or Singleplayer Only)
* [["loadout", [getUnitLoadout player], "position", [getPosASLVisual player]]] remoteExecCall ["dragonfly_db_fnc_hashSetBulk", 2, false] (Multiplayer Only)
*
* Public: Yes
*/

View File

@ -22,8 +22,8 @@
* N/A
*
* Examples:
* [getPlayerUID player, "loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] call dragonfly_db_fnc_hashSetIdBulk (Server or Singleplayer Only)
* [getPlayerUID player, "loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] remoteExecCall ["dragonfly_db_fnc_hashSetIdBulk", 2, false] (Multiplayer Only)
* [[getPlayerUID player, "loadout", [getUnitLoadout player], "position", [getPosASLVisual player]]] call dragonfly_db_fnc_hashSetIdBulk (Server or Singleplayer Only)
* [[getPlayerUID player, "loadout", [getUnitLoadout player], "position", [getPosASLVisual player]]] remoteExecCall ["dragonfly_db_fnc_hashSetIdBulk", 2, false] (Multiplayer Only)
*
* Public: Yes
*/

View File

@ -123,6 +123,20 @@ while { count GVAR(taskQueue) > 0} do {
[_value] call FUNC(hashSetIdBulk);
};
case "hdel": {
#ifdef __ARMA_DEBUG__
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_processQueue' Processing Task '%1'", _taskType];
#endif
[_keyField] call FUNC(hashDelete);
};
case "hdelid": {
#ifdef __ARMA_DEBUG__
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_processQueue' Processing Task '%1'", _taskType];
#endif
[_key, _keyField] call FUNC(hashDeleteId);
};
case "listadd": {
#ifdef __ARMA_DEBUG__
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_processQueue' Processing Task '%1'", _taskType];

View File

@ -1,4 +1,4 @@
#define MAJOR 1
#define MINOR 0
#define PATCH 0
#define BUILD 11
#define BUILD 16

BIN
api.7z Normal file

Binary file not shown.

View File

@ -0,0 +1,84 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue" xml:lang="en-US">
<title>processQueue</title>
<indexterm><primary>processQueue</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md119">
<title>autotoc_md119</title>
<para>title: ArmaDragonflyClient - Process Queue icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md120">
<title>excerpt: Processes a queue of tasks to be executed.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md121">
<title>dragonfly_db_fnc_processQueue</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md122">
<title>Description</title>
<para>Processes the queue of pending database tasks sequentially. This function executes each task in the queue one by one, handling various database operations based on the task type. It continues processing until the queue is empty.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md123">
<title>Syntax</title>
<para><literallayout><computeroutput>[]&#32;spawn&#32;dragonfly_db_fnc_processQueue
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md124">
<title>Parameters</title>
<para>None. This function does not require any parameters.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md125">
<title>Return Value</title>
<para>None. The function processes tasks in the queue and updates the processing state.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md126">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md127">
<title>Start processing the queue manually:</title>
<para><literallayout><computeroutput>[]&#32;spawn&#32;dragonfly_db_fnc_processQueue;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md128">
<title>Trigger queue processing from a client:</title>
<para><literallayout><computeroutput>[]&#32;remoteExec&#32;[&quot;dragonfly_db_fnc_processQueue&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md129">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Sets <computeroutput>GVAR(isProcessing)</computeroutput> to true while running and false when complete</para>
</listitem><listitem>
<para>Processes one task per second to prevent overloading</para>
</listitem><listitem>
<para>Handles a wide range of database operations including:<itemizedlist>
<listitem>
<para>Key-value operations (get, set, delete)</para>
</listitem><listitem>
<para>Hash table operations (hget, hset, hgetall, etc.)</para>
</listitem><listitem>
<para>List operations (listadd, listrng, listset, etc.)</para>
</listitem></itemizedlist>
</para>
</listitem><listitem>
<para>Automatically started by <computeroutput>dragonfly_db_fnc_addTask</computeroutput> when new tasks are added</para>
</listitem><listitem>
<para>Each task execution is logged for debugging purposes</para>
</listitem><listitem>
<para>Should typically be spawned rather than called to avoid blocking</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md130">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_addTask</computeroutput>: Adds tasks to the queue for processing</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_handler</computeroutput>: Handles data returned from database operations</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Manages callback responses from the database</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_1autotoc_md131">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task">Add Task</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2handler">Handler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2init">Init</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name">Print Addon Name</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue">Process Queue</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler">Scheduler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2test">Test</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,130 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set" xml:lang="en-US">
<title>hashSet</title>
<indexterm><primary>hashSet</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md219">
<title>autotoc_md219</title>
<para>title: ArmaDragonflyClient - Hash Set icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md220">
<title>excerpt: Set a field value in the current client&apos;s hash table in DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md221">
<title>dragonfly_db_fnc_hashSet</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md222">
<title>Description</title>
<para>Sets the value of a specified field in the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller&apos;s identity, making it more convenient than <computeroutput>hashSetId</computeroutput> which requires manually specifying an ID. It allows storing various data types (arrays, strings, numbers, or booleans) in a field of the client-specific hash structure.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md223">
<title>Syntax</title>
<para><literallayout><computeroutput>[_keyField,&#32;_data]&#32;call&#32;dragonfly_db_fnc_hashSet
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md224">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_keyField</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the field in the hash to set </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_data</computeroutput> </para>
</entry><entry>
<para>Array, String, Number, or Boolean </para>
</entry><entry>
<para>The value to store in the hash field </para>
</entry><entry>
<para>[] </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md225">
<title>Return Value</title>
<para>None. The operation runs synchronously to store the data.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md226">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md227">
<title>Store a player&apos;s loadout:</title>
<para><literallayout><computeroutput>[&quot;loadout&quot;,&#32;[getUnitLoadout&#32;player]]&#32;call&#32;dragonfly_db_fnc_hashSet;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md228">
<title>Store player preferences:</title>
<para><literallayout><computeroutput>[&quot;settings&quot;,&#32;[true,&#32;30,&#32;&quot;normal&quot;]]&#32;call&#32;dragonfly_db_fnc_hashSet;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md229">
<title>Store data from a client:</title>
<para><literallayout><computeroutput>[&quot;clientInfo&quot;,&#32;[name&#32;player,&#32;getPlayerUID&#32;player]]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_hashSet&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md230">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Stores a single field-value pair in the current client&apos;s hash table</para>
</listitem><listitem>
<para>Both the field name and data parameters are required and validated</para>
</listitem><listitem>
<para>If the field already exists, its value will be overwritten</para>
</listitem><listitem>
<para>Supports various data types: arrays, strings, numbers, and booleans</para>
</listitem><listitem>
<para>This function automatically determines which hash table to use based on the caller&apos;s identity</para>
</listitem><listitem>
<para>Use <computeroutput>hashSetId</computeroutput> when you need to specify a particular hash table by ID</para>
</listitem><listitem>
<para>Complex data structures should be serialized into arrays</para>
</listitem><listitem>
<para>The operation is executed immediately and synchronously</para>
</listitem><listitem>
<para>All operations are logged for debugging purposes</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md231">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_hashSetId</computeroutput>: Sets a field value in a specific hash table (when you need to specify the ID)</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGet</computeroutput>: Retrieves a field value from the current client&apos;s hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetAll</computeroutput>: Retrieves all fields from the current client&apos;s hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashSetBulk</computeroutput>: Sets multiple fields in the current client&apos;s hash table</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_1autotoc_md232">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get">Hash Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all">Hash Get All</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id">Hash Get All ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id">Hash Get ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set">Hash Set</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk">Hash Set Bulk</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id">Hash Set ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk">Hash Set ID Bulk</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,109 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler" xml:lang="en-US">
<title>scheduler</title>
<indexterm><primary>scheduler</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md136">
<title>autotoc_md136</title>
<para>title: ArmaDragonflyClient - Scheduler icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md137">
<title>excerpt: Scheduled Environment for extension.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md138">
<title>dragonfly_db_fnc_scheduler</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md139">
<title>Description</title>
<para>Manages the callback system for the ArmaDragonflyClient extension. This function receives task IDs from the extension&apos;s asynchronous callbacks, parses them, and registers them in a hashmap for later processing. It acts as the bridge between the extension&apos;s asynchronous operations and the game&apos;s execution environment.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md140">
<title>Syntax</title>
<para><literallayout><computeroutput>[_taskID]&#32;call&#32;dragonfly_db_fnc_scheduler
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md141">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_taskID</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Task identifier returned from extension callback </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md142">
<title>Return Value</title>
<para>None. The function registers the task ID in a hashmap for later processing.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md143">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md144">
<title>Process a callback from the extension:</title>
<para><literallayout><computeroutput>[&quot;1689524160123_get&quot;]&#32;call&#32;dragonfly_db_fnc_scheduler;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md145">
<title>Forward a callback to the server:</title>
<para><literallayout><computeroutput>[&quot;1689524160123_hgetall&quot;]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_scheduler&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md146">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Parses the task ID to extract the timestamp and operation type</para>
</listitem><listitem>
<para>Registers the task in a type-specific hashmap using the mission namespace</para>
</listitem><listitem>
<para>Each operation type (get, hgetall, etc.) has its own hashmap for tracking</para>
</listitem><listitem>
<para>The format of task IDs is typically: <computeroutput>[timestamp]_[operation]</computeroutput></para>
</listitem><listitem>
<para>This function is automatically called by the extension callback mechanism</para>
</listitem><listitem>
<para>Creates hashmaps on demand if they don&apos;t already exist</para>
</listitem><listitem>
<para>Critical for handling asynchronous database operations</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md147">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_fetch</computeroutput>: Assembles data chunks for large datasets</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_handler</computeroutput>: Processes the data retrieved from database operations</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_processQueue</computeroutput>: Executes queued database operations</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_1autotoc_md148">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task">Add Task</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2handler">Handler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2init">Init</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name">Print Addon Name</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue">Process Queue</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler">Scheduler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2test">Test</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,122 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove" xml:lang="en-US">
<title>listRemove</title>
<indexterm><primary>listRemove</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_1autotoc_md318">
<title>autotoc_md318</title>
<para>title: ArmaDragonflyClient - List Remove icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_1autotoc_md319">
<title>excerpt: Remove an element from a list stored at a key in DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_1autotoc_md320">
<title>dragonfly_db_fnc_listRemove</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_1autotoc_md321">
<title>Description</title>
<para>Removes a specific element from a list stored at a specified key in the DragonflyClient database. This function allows for precise control over list content by targeting individual elements by their index, without affecting other elements in the list. This is particularly useful for removing outdated or no longer needed entries.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_1autotoc_md322">
<title>Syntax</title>
<para><literallayout><computeroutput>[_key,&#32;_index]&#32;call&#32;dragonfly_db_fnc_listRemove
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_1autotoc_md323">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para>_key </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>The key identifying the list from which to remove an element </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para>_index </para>
</entry><entry>
<para>Number </para>
</entry><entry>
<para>The zero-based index of the element to remove from the list </para>
</entry><entry>
<para>-1 </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_1autotoc_md324">
<title>Return Value</title>
<para>None. The operation runs synchronously to remove the element immediately.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_1autotoc_md325">
<title>Examples</title>
<para><emphasis role="bold">Remove the first element from an event log:</emphasis> <literallayout><computeroutput>[&quot;eventLog&quot;,&#32;0]&#32;call&#32;dragonfly_db_fnc_listRemove;
</computeroutput></literallayout></para>
<para><emphasis role="bold">Remove a specific player record:</emphasis> <literallayout><computeroutput>[&quot;playerRecords&quot;,&#32;5]&#32;call&#32;dragonfly_db_fnc_listRemove;
</computeroutput></literallayout></para>
<para><emphasis role="bold">Remove an element from a multiplayer environment:</emphasis> <literallayout><computeroutput>[&quot;sharedData&quot;,&#32;2]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_listRemove&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_1autotoc_md326">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>This function removes only the element at the specified index. All other elements remain unchanged, though their indices may shift.</para>
</listitem><listitem>
<para>The index is zero-based, meaning the first element is at index 0, the second at index 1, and so on.</para>
</listitem><listitem>
<para>If an invalid index is provided (negative or exceeding the list length), the operation will not remove any elements.</para>
</listitem><listitem>
<para>The <computeroutput>_key</computeroutput> parameter must be a non-empty string, otherwise the function will exit without performing any action.</para>
</listitem><listitem>
<para>After removing an element, all subsequent elements shift down by one index to maintain a contiguous list.</para>
</listitem><listitem>
<para>The removal operation is permanent and cannot be undone except by re-adding the element.</para>
</listitem><listitem>
<para>All list operations are logged for debugging purposes.</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_1autotoc_md327">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_listAdd</computeroutput>: Adds an element to a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listGet</computeroutput>: Retrieves a specific element from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listLoad</computeroutput>: Retrieves a range of elements from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listSet</computeroutput>: Replaces a specific element in a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback from the database extension</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_1autotoc_md328">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add">List Add</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get">List Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load">List Load</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove">List Remove</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set">List Set</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,152 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id" xml:lang="en-US">
<title>hashGetAllId</title>
<indexterm><primary>hashGetAllId</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md191">
<title>autotoc_md191</title>
<para>title: ArmaDragonflyClient - Hash Get All ID icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md192">
<title>excerpt: Get all fields and values from the hash stored at key from DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md193">
<title>dragonfly_db_fnc_hashGetAllId</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md194">
<title>Description</title>
<para>Retrieves all fields and values from a specific hash table identified by its key. This function returns the complete hash table data for a specific ID through a callback function, allowing access to all stored key-value pairs associated with that ID. It&apos;s particularly useful for retrieving player-specific or entity-specific hash data.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md195">
<title>Syntax</title>
<para><literallayout><computeroutput>[_key,&#32;_function,&#32;_call,&#32;_netId]&#32;call&#32;dragonfly_db_fnc_hashGetAllId
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md196">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_key</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Identifier of the hash table to retrieve </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_function</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the function to receive the retrieved data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_call</computeroutput> </para>
</entry><entry>
<para>Boolean </para>
</entry><entry>
<para>Whether to call the function directly (true) or spawn (false) </para>
</entry><entry>
<para>false </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_netId</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>(Optional) NetID of the player to receive the data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md197">
<title>Return Value</title>
<para>None. The retrieved data is passed to the specified callback function asynchronously.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md198">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md199">
<title>Retrieve a player&apos;s complete hash data:</title>
<para><literallayout><computeroutput>[getPlayerUID&#32;player,&#32;&quot;dragonfly_db_fnc_test&quot;]&#32;call&#32;dragonfly_db_fnc_hashGetAllId;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md200">
<title>Retrieve vehicle data with synchronous callback:</title>
<para><literallayout><computeroutput>[&quot;vehicle_123&quot;,&#32;&quot;dragonfly_db_fnc_processVehicleData&quot;,&#32;true]&#32;call&#32;dragonfly_db_fnc_hashGetAllId;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md201">
<title>Retrieve data and send it to a specific client:</title>
<para><literallayout><computeroutput>[getPlayerUID&#32;player,&#32;&quot;dragonfly_db_fnc_test&quot;,&#32;false,&#32;netId&#32;player]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_hashGetAllId&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md202">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Returns the complete hash table with all fields and values as a nested array</para>
</listitem><listitem>
<para>Both the key and callback function parameters are required and validated</para>
</listitem><listitem>
<para>The data is retrieved asynchronously through the extension&apos;s callback system</para>
</listitem><listitem>
<para>When a netId is provided, the data is sent to that specific client</para>
</listitem><listitem>
<para>The <computeroutput>_call</computeroutput> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</para>
</listitem><listitem>
<para>This function retrieves from a specific hash table identified by <computeroutput>_key</computeroutput> - use <computeroutput>hashGetAll</computeroutput> for the global hash table</para>
</listitem><listitem>
<para>Player UIDs are commonly used as keys to store player-specific data</para>
</listitem><listitem>
<para>For large hash tables, retrieving all data may impact performance</para>
</listitem><listitem>
<para>All operations are logged for debugging purposes</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md203">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetAll</computeroutput>: Retrieves all fields from the global hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetId</computeroutput>: Retrieves a specific field value from a specific hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGet</computeroutput>: Retrieves a specific field value from the global hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashSetId</computeroutput>: Sets a field value in a specific hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback from the database extension</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_1autotoc_md204">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get">Hash Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all">Hash Get All</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id">Hash Get All ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id">Hash Get ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set">Hash Set</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk">Hash Set Bulk</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id">Hash Set ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk">Hash Set ID Bulk</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,162 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id" xml:lang="en-US">
<title>hashGetId</title>
<indexterm><primary>hashGetId</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md205">
<title>autotoc_md205</title>
<para>title: ArmaDragonflyClient - Hash Get ID icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md206">
<title>excerpt: Get the value associated with field in hash stored at key from DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md207">
<title>dragonfly_db_fnc_hashGetId</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md208">
<title>Description</title>
<para>Retrieves the value of a specific field from a hash table identified by its key. This function allows targeted access to individual fields within a specific hash table, making it ideal for accessing particular attributes of player or entity data. The retrieved data is returned through a callback function.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md209">
<title>Syntax</title>
<para><literallayout><computeroutput>[_key,&#32;_keyField,&#32;_function,&#32;_call,&#32;_netId]&#32;call&#32;dragonfly_db_fnc_hashGetId
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md210">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_key</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Identifier of the hash table </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_keyField</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the field in the hash to retrieve </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_function</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the function to receive the retrieved data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_call</computeroutput> </para>
</entry><entry>
<para>Boolean </para>
</entry><entry>
<para>Whether to call the function directly (true) or spawn (false) </para>
</entry><entry>
<para>false </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_netId</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>(Optional) NetID of the player to receive the data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md211">
<title>Return Value</title>
<para>None. The retrieved data is passed to the specified callback function asynchronously.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md212">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md213">
<title>Retrieve a player&apos;s loadout field:</title>
<para><literallayout><computeroutput>[getPlayerUID&#32;player,&#32;&quot;loadout&quot;,&#32;&quot;dragonfly_db_fnc_test&quot;]&#32;call&#32;dragonfly_db_fnc_hashGetId;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md214">
<title>Retrieve a specific vehicle property with synchronous callback:</title>
<para><literallayout><computeroutput>[&quot;vehicle_123&quot;,&#32;&quot;fuel&quot;,&#32;&quot;dragonfly_db_fnc_processFuelData&quot;,&#32;true]&#32;call&#32;dragonfly_db_fnc_hashGetId;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md215">
<title>Retrieve data and send it to a specific client:</title>
<para><literallayout><computeroutput>[getPlayerUID&#32;player,&#32;&quot;stats&quot;,&#32;&quot;dragonfly_db_fnc_test&quot;,&#32;false,&#32;netId&#32;player]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_hashGetId&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md216">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Retrieves a single field value from a specific hash table</para>
</listitem><listitem>
<para>All three primary parameters (key, keyField, and function) are required and validated</para>
</listitem><listitem>
<para>The data is retrieved asynchronously through the extension&apos;s callback system</para>
</listitem><listitem>
<para>When a netId is provided, the data is sent to that specific client</para>
</listitem><listitem>
<para>The <computeroutput>_call</computeroutput> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</para>
</listitem><listitem>
<para>This function targets both a specific hash table (<computeroutput>_key</computeroutput>) and a specific field (<computeroutput>_keyField</computeroutput>)</para>
</listitem><listitem>
<para>More efficient than retrieving all hash fields when only one is needed</para>
</listitem><listitem>
<para>Player UIDs are commonly used as keys to store player-specific data</para>
</listitem><listitem>
<para>All operations are logged for debugging purposes</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md217">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_hashGet</computeroutput>: Retrieves a field value from the global hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetAllId</computeroutput>: Retrieves all fields from a specific hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetAll</computeroutput>: Retrieves all fields from the global hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashSetId</computeroutput>: Sets a field value in a specific hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback from the database extension</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_1autotoc_md218">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get">Hash Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all">Hash Get All</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id">Hash Get All ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id">Hash Get ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set">Hash Set</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk">Hash Set Bulk</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id">Hash Set ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk">Hash Set ID Bulk</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,132 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set" xml:lang="en-US">
<title>listSet</title>
<indexterm><primary>listSet</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set_1autotoc_md329">
<title>autotoc_md329</title>
<para>title: ArmaDragonflyClient - List Set icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set_1autotoc_md330">
<title>excerpt: Set an element in a list stored at a key in DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set_1autotoc_md331">
<title>dragonfly_db_fnc_listSet</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set_1autotoc_md332">
<title>Description</title>
<para>Updates or sets the value of a specific element at a given index in a list stored at a specified key in the DragonflyClient database. This function allows for precise modification of list contents by targeting individual elements without affecting other elements in the list. It is particularly useful for updating record information, modifying configuration data, or correcting entries.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set_1autotoc_md333">
<title>Syntax</title>
<para><literallayout><computeroutput>[_key,&#32;_index,&#32;_data]&#32;call&#32;dragonfly_db_fnc_listSet
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set_1autotoc_md334">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para>_key </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>The key identifying the list in which to set an element </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para>_index </para>
</entry><entry>
<para>Number </para>
</entry><entry>
<para>The zero-based index of the element to set in the list </para>
</entry><entry>
<para>-1 </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para>_data </para>
</entry><entry>
<para>Array/String/Number/Boolean </para>
</entry><entry>
<para>The value to set at the specified index </para>
</entry><entry>
<para>[] </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set_1autotoc_md335">
<title>Return Value</title>
<para>None. The operation runs synchronously to update the element immediately.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set_1autotoc_md336">
<title>Examples</title>
<para><emphasis role="bold">Update an event log entry:</emphasis> <literallayout><computeroutput>[&quot;eventLog&quot;,&#32;0,&#32;[&quot;Updated&#32;event&#32;information&quot;]]&#32;call&#32;dragonfly_db_fnc_listSet;
</computeroutput></literallayout></para>
<para><emphasis role="bold">Modify player statistics:</emphasis> <literallayout><computeroutput>[&quot;playerStats&quot;,&#32;3,&#32;[name&#32;player,&#32;score&#32;player,&#32;alive&#32;player]]&#32;call&#32;dragonfly_db_fnc_listSet;
</computeroutput></literallayout></para>
<para><emphasis role="bold">Update configuration in multiplayer:</emphasis> <literallayout><computeroutput>[&quot;missionConfig&quot;,&#32;1,&#32;[&quot;difficulty&quot;,&#32;&quot;veteran&quot;]]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_listSet&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set_1autotoc_md337">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>This function updates only the element at the specified index. All other elements remain unchanged.</para>
</listitem><listitem>
<para>The index is zero-based, meaning the first element is at index 0, the second at index 1, and so on.</para>
</listitem><listitem>
<para>If the specified index does not exist in the list, the operation may fail or have no effect.</para>
</listitem><listitem>
<para>Both the <computeroutput>_key</computeroutput> parameter and <computeroutput>_data</computeroutput> parameter must be valid (non-empty string for key, non-nil for data), otherwise the function will exit without performing any action.</para>
</listitem><listitem>
<para>The function supports various data types, including arrays, strings, numbers, and booleans.</para>
</listitem><listitem>
<para>The update operation is permanent and will overwrite any previous value at the specified index.</para>
</listitem><listitem>
<para>All list operations are logged for debugging purposes.</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set_1autotoc_md338">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_listAdd</computeroutput>: Adds an element to a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listGet</computeroutput>: Retrieves a specific element from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listLoad</computeroutput>: Retrieves a range of elements from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listRemove</computeroutput>: Removes a specific element from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback from the database extension</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set_1autotoc_md339">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add">List Add</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get">List Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load">List Load</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove">List Remove</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set">List Set</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,62 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save" xml:lang="en-US">
<title>save</title>
<indexterm><primary>save</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md40">
<title>autotoc_md40</title>
<para>title: ArmaDragonflyClient - Save DB icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md41">
<title>excerpt: Save DB to disc.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md42">
<title>dragonfly_db_fnc_save</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md43">
<title>Description</title>
<para>Saves the entire database to disk storage. This function persists all data (key-value pairs, hash tables, and lists) to a file, allowing it to be retrieved later even after server restart.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md44">
<title>Syntax</title>
<para><literallayout><computeroutput>[]&#32;call&#32;dragonfly_db_fnc_save
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md45">
<title>Parameters</title>
<para>None. The function saves the database without any parameters.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md46">
<title>Return Value</title>
<para>None. The operation runs synchronously and saves the database immediately.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md47">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md48">
<title>Save the database without creating a backup:</title>
<para><literallayout><computeroutput>[]&#32;call&#32;dragonfly_db_fnc_save;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md49">
<title>Call the save function remotely from a client:</title>
<para><literallayout><computeroutput>[]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_save&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md50">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>This function should be called periodically to ensure data persistence</para>
</listitem><listitem>
<para>Saving is a resource-intensive operation, so it shouldn&apos;t be called too frequently</para>
</listitem><listitem>
<para>Consider saving before mission end or during low-activity periods</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md51">
<title>Related Functions</title>
<para>None.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2save_1autotoc_md52">
<title>Links</title>
<para>None. </para>
</section>
</section>
</section>

View File

@ -0,0 +1,124 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get" xml:lang="en-US">
<title>get</title>
<indexterm><primary>get</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md23">
<title>autotoc_md23</title>
<para>title: ArmaDragonflyClient - Get Key icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md24">
<title>excerpt: Get the value of stored key from DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md25">
<title>dragonfly_db_fnc_get</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md26">
<title>Description</title>
<para>Retrieves the value of a stored key from the database. This function performs an asynchronous request to the database and passes the retrieved data to the specified callback function.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md27">
<title>Syntax</title>
<para><literallayout><computeroutput>[_key,&#32;_function,&#32;_call,&#32;_netId]&#32;call&#32;dragonfly_db_fnc_get
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md28">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="3" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_key</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the stored key to retrieve from the database </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_function</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the function to call when data is retrieved </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_call</computeroutput> </para>
</entry><entry>
<para>Boolean </para>
</entry><entry>
<para>Whether to call the function directly (true) or spawn (false) </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_netId</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>(Optional) NetID of the player to whom the data should be returned </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md29">
<title>Return Value</title>
<para>None. When data is retrieved, it will be passed to the specified function. The operation runs asynchronously.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md30">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md31">
<title>Retrieve data in singleplayer or on the server:</title>
<para><literallayout><computeroutput>[getPlayerUID&#32;player,&#32;&quot;dragonfly_db_fnc_test&quot;]&#32;call&#32;dragonfly_db_fnc_get;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md32">
<title>Retrieve data on the server and send to a specific client:</title>
<para><literallayout><computeroutput>[getPlayerUID&#32;player,&#32;&quot;dragonfly_db_fnc_test&quot;,&#32;false,&#32;netId&#32;player]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_get&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md33">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>The function exit with an error if the key or function parameters are empty</para>
</listitem><listitem>
<para>Data is processed through the scheduler system, which manages callback responses</para>
</listitem><listitem>
<para>For large data that exceeds buffer limits, it will be automatically chunked and reassembled</para>
</listitem><listitem>
<para>The callback function must be defined to accept the retrieved data</para>
</listitem><listitem>
<para>The <computeroutput>_call</computeroutput> parameter determines whether the callback is executed directly or spawned in a separate thread</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md34">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_set</computeroutput>: Stores a value by key</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_delete</computeroutput>: Removes a value by key</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback response</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2get_1autotoc_md35">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete">Delete Key</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2get">Get Key</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2set">Set Key</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,162 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get" xml:lang="en-US">
<title>listGet</title>
<indexterm><primary>listGet</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md293">
<title>autotoc_md293</title>
<para>title: ArmaDragonflyClient - List Get icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md294">
<title>excerpt: Get element of list stored at key from DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md295">
<title>dragonfly_db_fnc_listGet</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md296">
<title>Description</title>
<para>Retrieves a specific element from a list stored in the database by its index. This function accesses a single item from a list using its position number and returns the data through a callback function. It&apos;s useful for accessing individual pieces of data from a sequence without retrieving the entire list.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md297">
<title>Syntax</title>
<para><literallayout><computeroutput>[_key,&#32;_index,&#32;_function,&#32;_call,&#32;_netId]&#32;call&#32;dragonfly_db_fnc_listGet
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md298">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_key</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the list </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_index</computeroutput> </para>
</entry><entry>
<para>Number </para>
</entry><entry>
<para>Index position of the element to retrieve (0-based) </para>
</entry><entry>
<para>-1 </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_function</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the function to receive the retrieved data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_call</computeroutput> </para>
</entry><entry>
<para>Boolean </para>
</entry><entry>
<para>Whether to call the function directly (true) or spawn (false) </para>
</entry><entry>
<para>false </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_netId</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>(Optional) NetID of the player to receive the data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md299">
<title>Return Value</title>
<para>None. The retrieved data is passed to the specified callback function asynchronously.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md300">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md301">
<title>Retrieve a specific event log entry:</title>
<para><literallayout><computeroutput>[&quot;events&quot;,&#32;0,&#32;&quot;dragonfly_db_fnc_test&quot;]&#32;call&#32;dragonfly_db_fnc_listGet;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md302">
<title>Retrieve data with synchronous callback:</title>
<para><literallayout><computeroutput>[&quot;messages&quot;,&#32;5,&#32;&quot;dragonfly_db_fnc_processMessage&quot;,&#32;true]&#32;call&#32;dragonfly_db_fnc_listGet;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md303">
<title>Retrieve data and send it to a specific client:</title>
<para><literallayout><computeroutput>[&quot;notifications&quot;,&#32;0,&#32;&quot;dragonfly_db_fnc_displayNotification&quot;,&#32;false,&#32;netId&#32;player]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_listGet&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md304">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Retrieves a single element from a list by its index position</para>
</listitem><listitem>
<para>The key, index, and function parameters are required and validated</para>
</listitem><listitem>
<para>Index is zero-based (the first element is at index 0)</para>
</listitem><listitem>
<para>If the index is out of bounds or the list doesn&apos;t exist, no data will be returned</para>
</listitem><listitem>
<para>The data is retrieved asynchronously through the extension&apos;s callback system</para>
</listitem><listitem>
<para>When a netId is provided, the data is sent to that specific client</para>
</listitem><listitem>
<para>The <computeroutput>_call</computeroutput> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</para>
</listitem><listitem>
<para>For retrieving multiple elements, use <computeroutput>listLoad</computeroutput> instead</para>
</listitem><listitem>
<para>All operations are logged for debugging purposes</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md305">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_listAdd</computeroutput>: Adds an element to a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listLoad</computeroutput>: Retrieves a range of elements from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listSet</computeroutput>: Replaces a specific element in a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listRemove</computeroutput>: Removes a specific element from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback from the database extension</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get_1autotoc_md306">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add">List Add</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get">List Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load">List Load</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove">List Remove</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set">List Set</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,150 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler" xml:lang="en-US">
<title>handler</title>
<indexterm><primary>handler</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md81">
<title>autotoc_md81</title>
<para>title: ArmaDragonflyClient - Handler icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md82">
<title>excerpt: Handle data from DB.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md83">
<title>dragonfly_db_fnc_handler</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md84">
<title>Description</title>
<para>Handles data received from the database and routes it to the appropriate function. This function is a critical component of the callback system, receiving data from database operations and directing it to the specified function, either locally or to a remote client.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md85">
<title>Syntax</title>
<para><literallayout><computeroutput>[_uniqueID,&#32;_function,&#32;_call,&#32;_data,&#32;_netId]&#32;call&#32;dragonfly_db_fnc_handler
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md86">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_uniqueID</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Unique identifier for the data chunk </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_function</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of function to receive the data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_call</computeroutput> </para>
</entry><entry>
<para>Boolean </para>
</entry><entry>
<para>Whether to call the function directly (true) or spawn (false) </para>
</entry><entry>
<para>false </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_data</computeroutput> </para>
</entry><entry>
<para>Array, String, Number, or Boolean </para>
</entry><entry>
<para>The data retrieved from the database </para>
</entry><entry>
<para>[] </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_netId</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>(Optional) NetID of the player to receive the data </para>
</entry><entry>
<para>nil </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md87">
<title>Return Value</title>
<para>None. The data is passed to the specified function for processing.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md88">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md89">
<title>Process data locally:</title>
<para><literallayout><computeroutput>[&quot;0123456789&quot;,&#32;&quot;dragonfly_db_fnc_test&quot;,&#32;false,&#32;[&quot;Hello&#32;World!&quot;]]&#32;call&#32;dragonfly_db_fnc_handler;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md90">
<title>Send data to a specific client:</title>
<para><literallayout><computeroutput>[&quot;0123456789&quot;,&#32;&quot;dragonfly_db_fnc_test&quot;,&#32;false,&#32;[&quot;Hello&#32;World!&quot;],&#32;netId&#32;player]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_handler&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md91">
<title>Process data with direct call (synchronous):</title>
<para><literallayout><computeroutput>[&quot;0123456789&quot;,&#32;&quot;dragonfly_db_fnc_processInventory&quot;,&#32;true,&#32;[[&quot;weapon1&quot;,&#32;30],&#32;[&quot;item2&quot;,&#32;5]]]&#32;call&#32;dragonfly_db_fnc_handler;
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md92">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>The function validates that both the function name and data are valid before proceeding</para>
</listitem><listitem>
<para>When a netId is provided, the data is sent to that specific client using remoteExec</para>
</listitem><listitem>
<para>The <computeroutput>_call</computeroutput> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</para>
</listitem><listitem>
<para>This function is typically called by the scheduler or other core components rather than directly by user code</para>
</listitem><listitem>
<para>Each handler call is logged, which is useful for debugging data flow</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md93">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes callbacks from the database extension</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_fetch</computeroutput>: Assembles data chunks for large datasets</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_addTask</computeroutput>: Adds tasks to the database operation queue</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2handler_1autotoc_md94">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task">Add Task</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2handler">Handler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2init">Init</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name">Print Addon Name</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue">Process Queue</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler">Scheduler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2test">Test</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,70 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name" xml:lang="en-US">
<title>printAddonName</title>
<indexterm><primary>printAddonName</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md106">
<title>autotoc_md106</title>
<para>title: ArmaDragonflyClient - Print Addon Name icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md107">
<title>excerpt: Displays the addon name in system chat.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md108">
<title>dragonfly_db_fnc_printAddonName</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md109">
<title>Description</title>
<para>Displays a thank you message with the addon name in the system chat. This is a simple utility function that can be used to acknowledge the use of the framework or to verify that the addon is properly loaded.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md110">
<title>Syntax</title>
<para><literallayout><computeroutput>[]&#32;call&#32;dragonfly_db_fnc_printAddonName
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md111">
<title>Parameters</title>
<para>None. This function does not require any parameters.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md112">
<title>Return Value</title>
<para>None. The function outputs a message to the system chat.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md113">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md114">
<title>Display the addon name message:</title>
<para><literallayout><computeroutput>[]&#32;call&#32;dragonfly_db_fnc_printAddonName;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md115">
<title>Use in a welcome script:</title>
<para><literallayout><computeroutput>if&#32;(isServer)&#32;then&#32;{
&#32;&#32;&#32;&#32;[]&#32;remoteExec&#32;[&quot;dragonfly_db_fnc_printAddonName&quot;,&#32;0,&#32;true];
};
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md116">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>The function uses the ADDON macro defined in script_component.hpp</para>
</listitem><listitem>
<para>This displays a message directly in the player&apos;s system chat</para>
</listitem><listitem>
<para>Can be useful as a quick verification that the addon is loaded correctly</para>
</listitem><listitem>
<para>Often used during development or for first-time users</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md117">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_init</computeroutput>: Initializes the database system</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_1autotoc_md118">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task">Add Task</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2handler">Handler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2init">Init</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name">Print Addon Name</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue">Process Queue</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler">Scheduler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2test">Test</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,140 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch" xml:lang="en-US">
<title>fetch</title>
<indexterm><primary>fetch</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_1autotoc_md13">
<title>autotoc_md13</title>
<para>title: ArmaDragonflyClient - Fetch icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_1autotoc_md14">
<title>excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_1autotoc_md15">
<title>dragonfly_db_fnc_fetch</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_1autotoc_md16">
<title>Description</title>
<para>Handles data chunks received from the database extension when data is too large to be returned in a single callback. This function collects all chunks of data, reassembles them in the correct order, and then passes the complete data to the handler function.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_1autotoc_md17">
<title>Syntax</title>
<para><literallayout><computeroutput>[_uniqueID,&#32;_function,&#32;_index,&#32;_total,&#32;_datachunk,&#32;_call,&#32;_netId]&#32;call&#32;dragonfly_db_fnc_fetch
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_1autotoc_md18">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="3" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_uniqueID</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Unique identifier for this data fetch operation </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_function</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the function to call after data is assembled </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_index</computeroutput> </para>
</entry><entry>
<para>Number </para>
</entry><entry>
<para>Current chunk index (0-based) </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_total</computeroutput> </para>
</entry><entry>
<para>Number </para>
</entry><entry>
<para>Total number of chunks expected </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_datachunk</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>The chunk of data being received </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_call</computeroutput> </para>
</entry><entry>
<para>Boolean </para>
</entry><entry>
<para>Whether to call the function directly (true) or spawn (false) </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_netId</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>(Optional) NetID of the player to whom the data belongs </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_1autotoc_md19">
<title>Return Value</title>
<para>None. When all chunks are received, the function will:<orderedlist>
<listitem>
<para>Assemble the complete data string</para>
</listitem><listitem>
<para>Parse it as a simple array</para>
</listitem><listitem>
<para>Call the specified handler function with the parsed data</para>
</listitem></orderedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_1autotoc_md20">
<title>Examples</title>
<para>This function is typically not called directly but is triggered by the extension&apos;s callback mechanism when large datasets are retrieved.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_1autotoc_md21">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>The function stores received chunks in the global array <computeroutput>dragonfly_db_fetch_array</computeroutput></para>
</listitem><listitem>
<para>Chunks are sorted by their index to ensure correct assembly regardless of arrival order</para>
</listitem><listitem>
<para>After successful processing, the chunks for this uniqueID are removed from the array</para>
</listitem><listitem>
<para>This function is essential for handling large datasets that exceed the callback buffer limit</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_1autotoc_md22">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_handler</computeroutput>: Receives the assembled data and routes it to the appropriate function</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Manages the callback queue and triggers data fetching </para>
</listitem></itemizedlist>
</para>
</section>
</section>
</section>

View File

@ -0,0 +1,140 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id" xml:lang="en-US">
<title>hashSetId</title>
<indexterm><primary>hashSetId</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md247">
<title>autotoc_md247</title>
<para>title: ArmaDragonflyClient - Hash Set ID icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md248">
<title>excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md249">
<title>dragonfly_db_fnc_hashSetId</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md250">
<title>Description</title>
<para>Sets the value of a specified field in a specific hash table identified by its key. This function allows storing various data types (arrays, strings, numbers, or booleans) in a targeted hash table, making it ideal for player-specific or entity-specific data storage. It provides a way to organize related data under a common identifier.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md251">
<title>Syntax</title>
<para><literallayout><computeroutput>[_key,&#32;_keyField,&#32;_data]&#32;call&#32;dragonfly_db_fnc_hashSetId
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md252">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_key</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Identifier of the hash table </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_keyField</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the field in the hash to set </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_data</computeroutput> </para>
</entry><entry>
<para>Array, String, Number, or Boolean </para>
</entry><entry>
<para>The value to store in the hash field </para>
</entry><entry>
<para>[] </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md253">
<title>Return Value</title>
<para>None. The operation runs synchronously to store the data.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md254">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md255">
<title>Store a player&apos;s loadout under their UID:</title>
<para><literallayout><computeroutput>[getPlayerUID&#32;player,&#32;&quot;loadout&quot;,&#32;[getUnitLoadout&#32;player]]&#32;call&#32;dragonfly_db_fnc_hashSetId;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md256">
<title>Store vehicle data:</title>
<para><literallayout><computeroutput>[&quot;vehicle_123&quot;,&#32;&quot;status&quot;,&#32;[true,&#32;100,&#32;75,&#32;&quot;active&quot;]]&#32;call&#32;dragonfly_db_fnc_hashSetId;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md257">
<title>Store player data from a client:</title>
<para><literallayout><computeroutput>[getPlayerUID&#32;player,&#32;&quot;stats&quot;,&#32;[rank&#32;player,&#32;score&#32;player,&#32;name&#32;player]]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_hashSetId&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md258">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Stores a single field-value pair in a specific hash table identified by <computeroutput>_key</computeroutput></para>
</listitem><listitem>
<para>All three parameters (key, keyField, and data) are required and validated</para>
</listitem><listitem>
<para>If the hash table doesn&apos;t exist, it will be created automatically</para>
</listitem><listitem>
<para>If the field already exists in the hash table, its value will be overwritten</para>
</listitem><listitem>
<para>Supports various data types: arrays, strings, numbers, and booleans</para>
</listitem><listitem>
<para>Player UIDs are commonly used as keys to store player-specific data</para>
</listitem><listitem>
<para>Complex data structures should be serialized into arrays</para>
</listitem><listitem>
<para>The operation is executed immediately and synchronously</para>
</listitem><listitem>
<para>All operations are logged for debugging purposes</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md259">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_hashSet</computeroutput>: Sets a field value in the global hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetId</computeroutput>: Retrieves a field value from a specific hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetAllId</computeroutput>: Retrieves all fields from a specific hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashSetIdBulk</computeroutput>: Sets multiple field-value pairs in multiple hash tables</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_1autotoc_md260">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get">Hash Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all">Hash Get All</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id">Hash Get All ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id">Hash Get ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set">Hash Set</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk">Hash Set Bulk</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id">Hash Set ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk">Hash Set ID Bulk</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,112 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test" xml:lang="en-US">
<title>test</title>
<indexterm><primary>test</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md149">
<title>autotoc_md149</title>
<para>title: ArmaDragonflyClient - Test icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md150">
<title>excerpt: Test Function.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md151">
<title>dragonfly_db_fnc_test</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md152">
<title>Description</title>
<para>A simple test function for verifying database operations. This function displays the received data in a hint message and logs it to the RPT file. It&apos;s primarily used for testing database retrieval operations and callback functionality.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md153">
<title>Syntax</title>
<para><literallayout><computeroutput>[_value]&#32;spawn&#32;dragonfly_db_fnc_test
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md154">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_value</computeroutput> </para>
</entry><entry>
<para>Array, String, Number, or Boolean </para>
</entry><entry>
<para>The value to display and log </para>
</entry><entry>
<para>[] </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md155">
<title>Return Value</title>
<para>The same value that was passed to the function. Also sets the global variable <computeroutput>dragonfly_db_test</computeroutput> to this value.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md156">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md157">
<title>Test with a simple string:</title>
<para><literallayout><computeroutput>[&quot;Hello&#32;World!&quot;]&#32;spawn&#32;dragonfly_db_fnc_test;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md158">
<title>Test database retrieval by specifying this as callback function:</title>
<para><literallayout><computeroutput>[&quot;playerStats&quot;,&#32;&quot;dragonfly_db_fnc_test&quot;]&#32;call&#32;dragonfly_db_fnc_get;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md159">
<title>Test from client to server:</title>
<para><literallayout><computeroutput>[&quot;Database&#32;is&#32;working!&quot;]&#32;remoteExec&#32;[&quot;dragonfly_db_fnc_test&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md160">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Displays the received value using <computeroutput>hint</computeroutput></para>
</listitem><listitem>
<para>Logs the same value to the RPT file</para>
</listitem><listitem>
<para>Stores the value in the global variable <computeroutput>dragonfly_db_test</computeroutput> for later inspection</para>
</listitem><listitem>
<para>Commonly used as a callback function for database operations</para>
</listitem><listitem>
<para>Useful for debugging and verifying data flow</para>
</listitem><listitem>
<para>Can be called directly or specified as a callback in other functions</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md161">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_get</computeroutput>: Retrieves values from the database</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_handler</computeroutput>: Routes data to callback functions</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Manages the callback system</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2test_1autotoc_md162">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task">Add Task</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2handler">Handler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2init">Init</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name">Print Addon Name</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue">Process Queue</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler">Scheduler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2test">Test</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,120 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set" xml:lang="en-US">
<title>set</title>
<indexterm><primary>set</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md53">
<title>autotoc_md53</title>
<para>title: ArmaDragonflyClient - Set Key icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md54">
<title>excerpt: Set the value of stored key from DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md55">
<title>dragonfly_db_fnc_set</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md56">
<title>Description</title>
<para>Stores a value in the database with the specified key. This function allows saving various data types (arrays, strings, numbers, or booleans) that can be retrieved later using the key.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md57">
<title>Syntax</title>
<para><literallayout><computeroutput>[_key,&#32;_data]&#32;call&#32;dragonfly_db_fnc_set
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md58">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_key</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the key to store the data under </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_data</computeroutput> </para>
</entry><entry>
<para>Array, String, Number, or Boolean </para>
</entry><entry>
<para>The value to store in the database </para>
</entry><entry>
<para>[] </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md59">
<title>Return Value</title>
<para>None. The operation runs asynchronously.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md60">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md61">
<title>Store a simple array:</title>
<para><literallayout><computeroutput>[&quot;playerInventory&quot;,&#32;[&quot;item1&quot;,&#32;&quot;item2&quot;,&#32;&quot;item3&quot;]]&#32;call&#32;dragonfly_db_fnc_set;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md62">
<title>Store player data under their UID:</title>
<para><literallayout><computeroutput>[getPlayerUID&#32;player,&#32;[name&#32;player,&#32;getPos&#32;player,&#32;getAllGear&#32;player]]&#32;call&#32;dragonfly_db_fnc_set;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md63">
<title>Call the set function remotely from a client:</title>
<para><literallayout><computeroutput>[&quot;serverSetting&quot;,&#32;[true,&#32;30,&#32;&quot;normal&quot;]]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_set&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md64">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>The function validates both the key and data before attempting to store</para>
</listitem><listitem>
<para>If the key already exists, its value will be overwritten</para>
</listitem><listitem>
<para>Complex data structures should be serialized into arrays</para>
</listitem><listitem>
<para>There are no size limits for data, but extremely large values might impact performance</para>
</listitem><listitem>
<para>For structured data, consider using hash tables instead of key-value pairs</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md65">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_get</computeroutput>: Retrieves a value by key</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_delete</computeroutput>: Removes a value by key</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback response</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2set_1autotoc_md66">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete">Delete Key</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2get">Get Key</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2set">Set Key</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,142 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load" xml:lang="en-US">
<title>listLoad</title>
<indexterm><primary>listLoad</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load_1autotoc_md307">
<title>autotoc_md307</title>
<para>title: ArmaDragonflyClient - List Load icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load_1autotoc_md308">
<title>excerpt: Get all elements of a list stored at a key from DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load_1autotoc_md309">
<title>dragonfly_db_fnc_listLoad</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load_1autotoc_md310">
<title>Description</title>
<para>Retrieves all elements of a list stored at a specified key from the DragonflyClient database. This function is useful when you need to access the complete list data rather than individual elements, allowing operations on the entire dataset. The retrieved data is passed to a callback function for processing.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load_1autotoc_md311">
<title>Syntax</title>
<para><literallayout><computeroutput>[_key,&#32;_function,&#32;_call,&#32;_netId]&#32;call&#32;dragonfly_db_fnc_listLoad
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load_1autotoc_md312">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para>_key </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>The key identifying the list to be retrieved </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para>_function </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>The name of the function that will receive the retrieved data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para>_call </para>
</entry><entry>
<para>Boolean </para>
</entry><entry>
<para>Whether to call the function in an unscheduled environment </para>
</entry><entry>
<para>false </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para>_netId </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>The NetID of the target to return data from the function (multiplayer only) </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load_1autotoc_md313">
<title>Return Value</title>
<para>No value is returned directly. The retrieved list data is passed to the specified callback function asynchronously.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load_1autotoc_md314">
<title>Examples</title>
<para><emphasis role="bold">Retrieve all event logs:</emphasis> <literallayout><computeroutput>[&quot;events&quot;,&#32;&quot;myProject_fnc_processEventLogs&quot;]&#32;call&#32;dragonfly_db_fnc_listLoad;
</computeroutput></literallayout></para>
<para><emphasis role="bold">Retrieve a player list with synchronous callback:</emphasis> <literallayout><computeroutput>[&quot;playerList&quot;,&#32;&quot;myProject_fnc_processPlayerList&quot;,&#32;true]&#32;call&#32;dragonfly_db_fnc_listLoad;
</computeroutput></literallayout></para>
<para><emphasis role="bold">Send mission data to a specific client:</emphasis> <literallayout><computeroutput>[&quot;missionData&quot;,&#32;&quot;myProject_fnc_processMissionData&quot;,&#32;false,&#32;netId&#32;player]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_listLoad&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load_1autotoc_md315">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>This function retrieves the entire list stored at the specified key, making it useful when you need to process multiple elements together.</para>
</listitem><listitem>
<para>Both the <computeroutput>_key</computeroutput> and <computeroutput>_function</computeroutput> parameters are required. The function will exit without action if either is empty.</para>
</listitem><listitem>
<para>The retrieved data is processed asynchronously through the scheduler system and passed to the specified callback function.</para>
</listitem><listitem>
<para>For multiplayer scenarios, you can specify a target client using the <computeroutput>_netId</computeroutput> parameter to send the retrieved data to that specific client.</para>
</listitem><listitem>
<para>The <computeroutput>_call</computeroutput> parameter determines whether the callback function is executed in an unscheduled environment (true) or scheduled environment (false).</para>
</listitem><listitem>
<para>This function uses the underlying &quot;listrng&quot; extension with a range from 0 to -1, which retrieves all elements in the list.</para>
</listitem><listitem>
<para>All list operations are logged for debugging purposes.</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load_1autotoc_md316">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_listAdd</computeroutput>: Adds an element to a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listGet</computeroutput>: Retrieves a specific element from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listSet</computeroutput>: Replaces a specific element in a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listRemove</computeroutput>: Removes a specific element from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback from the database extension</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load_1autotoc_md317">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add">List Add</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get">List Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load">List Load</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove">List Remove</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set">List Set</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,152 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get" xml:lang="en-US">
<title>hashGet</title>
<indexterm><primary>hashGet</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md163">
<title>autotoc_md163</title>
<para>title: ArmaDragonflyClient - Hash Get icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md164">
<title>excerpt: Get a field value from the current client&apos;s hash table in DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md165">
<title>dragonfly_db_fnc_hashGet</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md166">
<title>Description</title>
<para>Retrieves the value associated with a specific field in the hash table of the current client/player. This function automatically determines the appropriate hash ID based on the caller&apos;s identity, making it more convenient than <computeroutput>hashGetId</computeroutput> which requires manually specifying an ID. It accesses hash data asynchronously and returns the result through a callback function.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md167">
<title>Syntax</title>
<para><literallayout><computeroutput>[_keyField,&#32;_function,&#32;_call,&#32;_netId]&#32;call&#32;dragonfly_db_fnc_hashGet
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md168">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_keyField</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the field in the hash to retrieve </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_function</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the function to receive the retrieved data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_call</computeroutput> </para>
</entry><entry>
<para>Boolean </para>
</entry><entry>
<para>Whether to call the function directly (true) or spawn (false) </para>
</entry><entry>
<para>false </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_netId</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>(Optional) NetID of the player to receive the data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md169">
<title>Return Value</title>
<para>None. The retrieved data is passed to the specified callback function asynchronously.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md170">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md171">
<title>Retrieve a player&apos;s loadout:</title>
<para><literallayout><computeroutput>[&quot;loadout&quot;,&#32;&quot;dragonfly_db_fnc_test&quot;]&#32;call&#32;dragonfly_db_fnc_hashGet;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md172">
<title>Retrieve data with synchronous callback:</title>
<para><literallayout><computeroutput>[&quot;playerScore&quot;,&#32;&quot;dragonfly_db_fnc_processScore&quot;,&#32;true]&#32;call&#32;dragonfly_db_fnc_hashGet;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md173">
<title>Retrieve data and send it to a specific client:</title>
<para><literallayout><computeroutput>[&quot;loadout&quot;,&#32;&quot;dragonfly_db_fnc_test&quot;,&#32;false,&#32;netId&#32;player]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_hashGet&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md174">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Retrieves a value from the current client&apos;s hash table</para>
</listitem><listitem>
<para>The data is retrieved asynchronously through the extension&apos;s callback system</para>
</listitem><listitem>
<para>Both the field name and callback function name must be provided</para>
</listitem><listitem>
<para>Input validation ensures both required parameters are non-empty</para>
</listitem><listitem>
<para>When a netId is provided, the data is sent to that specific client</para>
</listitem><listitem>
<para>The <computeroutput>_call</computeroutput> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</para>
</listitem><listitem>
<para>This function automatically determines which hash table to use based on the caller&apos;s identity</para>
</listitem><listitem>
<para>Use <computeroutput>hashGetId</computeroutput> when you need to specify a particular hash table by ID</para>
</listitem><listitem>
<para>All operations are logged for debugging purposes</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md175">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetId</computeroutput>: Retrieves a field value from a specific hash table (when you need to specify the ID)</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetAll</computeroutput>: Retrieves all fields from the current client&apos;s hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetAllId</computeroutput>: Retrieves all fields from a specific hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashSet</computeroutput>: Sets a field value in the current client&apos;s hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback from the database extension</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_1autotoc_md176">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get">Hash Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all">Hash Get All</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id">Hash Get All ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id">Hash Get ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set">Hash Set</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk">Hash Set Bulk</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id">Hash Set ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk">Hash Set ID Bulk</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,142 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all" xml:lang="en-US">
<title>hashGetAll</title>
<indexterm><primary>hashGetAll</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md177">
<title>autotoc_md177</title>
<para>title: ArmaDragonflyClient - Hash Get All icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md178">
<title>excerpt: Get all fields from the current client&apos;s hash table in DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md179">
<title>dragonfly_db_fnc_hashGetAll</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md180">
<title>Description</title>
<para>Retrieves all fields and values from the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller&apos;s identity, making it more convenient than <computeroutput>hashGetAllId</computeroutput> which requires manually specifying an ID. It returns the entire hash table data through a callback function, allowing access to all stored key-value pairs at once.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md181">
<title>Syntax</title>
<para><literallayout><computeroutput>[_function,&#32;_call,&#32;_netId]&#32;call&#32;dragonfly_db_fnc_hashGetAll
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md182">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_function</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the function to receive the retrieved data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_call</computeroutput> </para>
</entry><entry>
<para>Boolean </para>
</entry><entry>
<para>Whether to call the function directly (true) or spawn (false) </para>
</entry><entry>
<para>false </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_netId</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>(Optional) NetID of the player to receive the data </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md183">
<title>Return Value</title>
<para>None. The retrieved data is passed to the specified callback function asynchronously.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md184">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md185">
<title>Retrieve all client hash data:</title>
<para><literallayout><computeroutput>[&quot;dragonfly_db_fnc_test&quot;]&#32;call&#32;dragonfly_db_fnc_hashGetAll;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md186">
<title>Retrieve data with synchronous callback:</title>
<para><literallayout><computeroutput>[&quot;dragonfly_db_fnc_processAllData&quot;,&#32;true]&#32;call&#32;dragonfly_db_fnc_hashGetAll;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md187">
<title>Retrieve data and send it to a specific client:</title>
<para><literallayout><computeroutput>[&quot;dragonfly_db_fnc_test&quot;,&#32;false,&#32;netId&#32;player]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_hashGetAll&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md188">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Returns the complete hash table for the current client with all fields and values as a nested array</para>
</listitem><listitem>
<para>The data is retrieved asynchronously through the extension&apos;s callback system</para>
</listitem><listitem>
<para>The callback function name must be provided and is validated</para>
</listitem><listitem>
<para>When a netId is provided, the data is sent to that specific client</para>
</listitem><listitem>
<para>The <computeroutput>_call</computeroutput> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</para>
</listitem><listitem>
<para>This function automatically determines which hash table to use based on the caller&apos;s identity</para>
</listitem><listitem>
<para>Use <computeroutput>hashGetAllId</computeroutput> when you need to specify a particular hash table by ID</para>
</listitem><listitem>
<para>For large hash tables, retrieving all data may impact performance</para>
</listitem><listitem>
<para>All operations are logged for debugging purposes</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md189">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_hashGet</computeroutput>: Retrieves a specific field value from the current client&apos;s hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetId</computeroutput>: Retrieves a specific field value from a specific hash table (when you need to specify the ID)</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetAllId</computeroutput>: Retrieves all fields from a specific hash table (when you need to specify the ID)</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashSet</computeroutput>: Sets a field value in the current client&apos;s hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback from the database extension</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_1autotoc_md190">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get">Hash Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all">Hash Get All</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id">Hash Get All ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id">Hash Get ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set">Hash Set</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk">Hash Set Bulk</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id">Hash Set ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk">Hash Set ID Bulk</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,130 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add" xml:lang="en-US">
<title>listAdd</title>
<indexterm><primary>listAdd</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md279">
<title>autotoc_md279</title>
<para>title: ArmaDragonflyClient - List Add icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md280">
<title>excerpt: Add element to list stored at key from DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md281">
<title>dragonfly_db_fnc_listAdd</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md282">
<title>Description</title>
<para>Adds an element to a list stored in the database under the specified key. This function appends values to an existing list or creates a new list if it doesn&apos;t exist. It&apos;s particularly useful for logging, event tracking, or maintaining collections of data that grow over time.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md283">
<title>Syntax</title>
<para><literallayout><computeroutput>[_key,&#32;_data]&#32;call&#32;dragonfly_db_fnc_listAdd
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md284">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_key</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the list to add the element to </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_data</computeroutput> </para>
</entry><entry>
<para>Array, String, Number, or Boolean </para>
</entry><entry>
<para>The value to insert into the list </para>
</entry><entry>
<para>[] </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md285">
<title>Return Value</title>
<para>None. The operation runs synchronously to add the element to the list.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md286">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md287">
<title>Add an event log entry:</title>
<para><literallayout><computeroutput>[&quot;events&quot;,&#32;[&quot;Server&#32;state&#32;saved&#32;to&#32;DB&#32;&quot;&#32;+&#32;systemTimeUTC]]&#32;call&#32;dragonfly_db_fnc_listAdd;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md288">
<title>Add a player message:</title>
<para><literallayout><computeroutput>[&quot;messages&quot;,&#32;[name&#32;player&#32;+&#32;&quot;:&#32;&quot;&#32;+&#32;_messageText]]&#32;call&#32;dragonfly_db_fnc_listAdd;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md289">
<title>Add data from a client:</title>
<para><literallayout><computeroutput>[&quot;playerActions&quot;,&#32;[getPlayerUID&#32;player,&#32;name&#32;player,&#32;&quot;logged&#32;in&quot;]]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_listAdd&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md290">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Elements are added to the end of the list in the order they are inserted</para>
</listitem><listitem>
<para>If the list doesn&apos;t exist, it will be created automatically</para>
</listitem><listitem>
<para>Both the key and data parameters are required and validated</para>
</listitem><listitem>
<para>Lists can store various data types (arrays, strings, numbers, or booleans)</para>
</listitem><listitem>
<para>Useful for maintaining a history of events, logs, or sequential data</para>
</listitem><listitem>
<para>The operation is executed immediately and synchronously</para>
</listitem><listitem>
<para>New elements are always added to the end of the list</para>
</listitem><listitem>
<para>All operations are logged for debugging purposes</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md291">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_listGet</computeroutput>: Retrieves a specific element from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listLoad</computeroutput>: Retrieves a range of elements from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listSet</computeroutput>: Replaces a specific element in a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_listRemove</computeroutput>: Removes a specific element from a list</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback from the database extension</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add_1autotoc_md292">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add">List Add</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get">List Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load">List Load</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove">List Remove</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set">List Set</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,122 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk" xml:lang="en-US">
<title>hashSetBulk</title>
<indexterm><primary>hashSetBulk</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md233">
<title>autotoc_md233</title>
<para>title: ArmaDragonflyClient - Hash Set Bulk icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md234">
<title>excerpt: Set multiple fields in the current client&apos;s hash table in DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md235">
<title>dragonfly_db_fnc_hashSetBulk</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md236">
<title>Description</title>
<para>Sets multiple field-value pairs in the hash table associated with the current client/player in a single operation. This function automatically determines the appropriate hash ID based on the caller&apos;s identity, making it more convenient than <computeroutput>hashSetIdBulk</computeroutput> which requires manually specifying an ID. It allows efficiently storing multiple related fields at once, reducing the number of separate database calls required.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md237">
<title>Syntax</title>
<para><literallayout><computeroutput>[_data]&#32;call&#32;dragonfly_db_fnc_hashSetBulk
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md238">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_data</computeroutput> </para>
</entry><entry>
<para>Array </para>
</entry><entry>
<para>Array of alternating field names and values to store </para>
</entry><entry>
<para>[] </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md239">
<title>Return Value</title>
<para>None. The operation runs synchronously to store all the data.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md240">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md241">
<title>Store player loadout and position:</title>
<para><literallayout><computeroutput>[[&quot;loadout&quot;,&#32;[getUnitLoadout&#32;player],&#32;&quot;position&quot;,&#32;[getPosASLVisual&#32;player]]]&#32;call&#32;dragonfly_db_fnc_hashSetBulk;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md242">
<title>Store multiple player settings:</title>
<para><literallayout><computeroutput>[[&quot;difficulty&quot;,&#32;[&quot;regular&quot;],&#32;&quot;respawn&quot;,&#32;[true],&#32;&quot;tickets&quot;,&#32;[500]]]&#32;call&#32;dragonfly_db_fnc_hashSetBulk;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md243">
<title>Store player data from a client:</title>
<para><literallayout><computeroutput>[[&quot;name&quot;,&#32;[name&#32;player],&#32;&quot;uid&quot;,&#32;[getPlayerUID&#32;player],&#32;&quot;score&quot;,&#32;[score&#32;player]]]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_hashSetBulk&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md244">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>The data array must be structured as alternating field names and values: <computeroutput>[field1, value1, field2, value2, ...]</computeroutput></para>
</listitem><listitem>
<para>Each field name must be a string</para>
</listitem><listitem>
<para>Values can be arrays, strings, numbers, or booleans</para>
</listitem><listitem>
<para>All field-value pairs are stored in a single database operation</para>
</listitem><listitem>
<para>If any of the fields already exist, their values will be overwritten</para>
</listitem><listitem>
<para>This function automatically determines which hash table to use based on the caller&apos;s identity</para>
</listitem><listitem>
<para>Use <computeroutput>hashSetIdBulk</computeroutput> when you need to specify a particular hash table by ID</para>
</listitem><listitem>
<para>More efficient than multiple individual <computeroutput>hashSet</computeroutput> calls when setting several fields</para>
</listitem><listitem>
<para>The operation is executed immediately and synchronously</para>
</listitem><listitem>
<para>All operations are logged for debugging purposes</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md245">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_hashSet</computeroutput>: Sets a single field value in the current client&apos;s hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashSetIdBulk</computeroutput>: Sets multiple field-value pairs in a specific hash table (when you need to specify the ID)</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetAll</computeroutput>: Retrieves all fields from the current client&apos;s hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGet</computeroutput>: Retrieves a specific field value from the current client&apos;s hash table </para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_1autotoc_md246">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get">Hash Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all">Hash Get All</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id">Hash Get All ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id">Hash Get ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set">Hash Set</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk">Hash Set Bulk</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id">Hash Set ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk">Hash Set ID Bulk</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,62 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init" xml:lang="en-US">
<title>init</title>
<indexterm><primary>init</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init_1autotoc_md95">
<title>autotoc_md95</title>
<para>title: ArmaDragonflyClient - Initialization icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init_1autotoc_md96">
<title>excerpt: Initial Extension settings.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init_1autotoc_md97">
<title>dragonfly_db_fnc_init</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init_1autotoc_md98">
<title>Description</title>
<para>Initializes the ArmaDragonflyClient extension and sets up the initial settings. This function loads the extension, checks its version, sets the buffer size, and logs the initialization status. It is automatically called during mission startup.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init_1autotoc_md99">
<title>Syntax</title>
<para><literallayout><computeroutput>//&#32;This&#32;function&#32;is&#32;automatically&#32;called&#32;during&#32;initialization&#32;and&#32;doesn&apos;t&#32;need&#32;to&#32;be&#32;called&#32;directly
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init_1autotoc_md100">
<title>Parameters</title>
<para>None. This function does not require any parameters.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init_1autotoc_md101">
<title>Return Value</title>
<para>None. The function sets up internal variables and logs initialization information.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init_1autotoc_md102">
<title>Examples</title>
<para>This function is automatically executed during framework initialization and doesn&apos;t need to be called manually.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init_1autotoc_md103">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Sets the global buffer size to 10240 bytes (10KB)</para>
</listitem><listitem>
<para>Logs the DLL version number for reference</para>
</listitem><listitem>
<para>Confirms successful loading of all functions</para>
</listitem><listitem>
<para>Outputs initialization status to the RPT logs</para>
</listitem><listitem>
<para>This is one of the first functions called when the framework loads</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init_1autotoc_md104">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_save</computeroutput>: Saves database data to disk</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2init_1autotoc_md105">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task">Add Task</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2handler">Handler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2init">Init</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name">Print Addon Name</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue">Process Queue</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler">Scheduler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2test">Test</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,180 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task" xml:lang="en-US">
<title>addTask</title>
<indexterm><primary>addTask</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md67">
<title>autotoc_md67</title>
<para>title: ArmaDragonflyClient - Add Task icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md68">
<title>excerpt: Add task to queue.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md69">
<title>dragonfly_db_fnc_addTask</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md70">
<title>Description</title>
<para>Adds a task to the database operation queue. This function is used to schedule database operations that can be processed sequentially, providing a way to manage multiple database requests in an organized manner.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md71">
<title>Syntax</title>
<para><literallayout><computeroutput>[_taskType,&#32;_key,&#32;_keyField,&#32;_index,&#32;_value,&#32;_function,&#32;_call,&#32;_netId]&#32;call&#32;dragonfly_db_fnc_addTask
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md72">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_taskType</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Type of operation to perform (e.g., &quot;hgetall&quot;) </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_key</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the stored key </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_keyField</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Field name for hash operations </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_index</computeroutput> </para>
</entry><entry>
<para>Number </para>
</entry><entry>
<para>Index for list operations </para>
</entry><entry>
<para>-1 </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_value</computeroutput> </para>
</entry><entry>
<para>Array, String, Number, or Boolean </para>
</entry><entry>
<para>Value to store (for set operations) </para>
</entry><entry>
<para>[] </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_function</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of function to call with the result </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_call</computeroutput> </para>
</entry><entry>
<para>Boolean </para>
</entry><entry>
<para>Whether to call the function directly (true) or spawn (false) </para>
</entry><entry>
<para>false </para>
</entry></row>
<row class='markdownTableRowEven'>
<entry>
<para><computeroutput>_netId</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>NetID of the target to receive the result </para>
</entry><entry>
<para>&quot;&quot; </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md73">
<title>Return Value</title>
<para>None. The task is added to the queue and processed asynchronously.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md74">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md75">
<title>Add a hash table retrieval task:</title>
<para><literallayout><computeroutput>[&quot;hgetall&quot;,&#32;&quot;&quot;,&#32;&quot;&quot;,&#32;-1,&#32;[],&#32;&quot;dragonfly_db_fnc_test&quot;]&#32;call&#32;dragonfly_db_fnc_addTask;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md76">
<title>Add a player-specific task that returns data to a specific client:</title>
<para><literallayout><computeroutput>[&quot;hgetallid&quot;,&#32;getPlayerUID&#32;player,&#32;&quot;&quot;,&#32;-1,&#32;[],&#32;&quot;dragonfly_db_fnc_test&quot;,&#32;false,&#32;netId&#32;player]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_addTask&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md77">
<title>Add a list operation task:</title>
<para><literallayout><computeroutput>[&quot;listadd&quot;,&#32;&quot;playerMessages&quot;,&#32;&quot;&quot;,&#32;-1,&#32;[&quot;New&#32;message&#32;content&quot;],&#32;&quot;&quot;]&#32;call&#32;dragonfly_db_fnc_addTask;
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md78">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>Tasks are processed in the order they are added to the queue</para>
</listitem><listitem>
<para>If the queue is not currently being processed, this function will start the processing</para>
</listitem><listitem>
<para>The task type determines which database operation will be performed</para>
</listitem><listitem>
<para>This function is particularly useful for scheduling multiple related operations</para>
</listitem><listitem>
<para>All operations performed through the task queue are logged for debugging</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md79">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_processQueue</computeroutput>: Processes the pending tasks in the queue</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_handler</computeroutput>: Handles the results of completed database operations</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Manages callback responses from the database</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task_1autotoc_md80">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task">Add Task</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2handler">Handler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2init">Init</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name">Print Addon Name</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue">Process Queue</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler">Scheduler</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2test">Test</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,124 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk" xml:lang="en-US">
<title>hashSetIdBulk</title>
<indexterm><primary>hashSetIdBulk</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md261">
<title>autotoc_md261</title>
<para>title: ArmaDragonflyClient - Hash Set ID Bulk icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md262">
<title>excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md263">
<title>dragonfly_db_fnc_hashSetIdBulk</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md264">
<title>Description</title>
<para>Sets multiple field-value pairs in a specific hash table identified by its key in a single operation. This function allows efficiently storing multiple related fields at once for a specific identifier, reducing the number of separate database calls required. It&apos;s ideal for saving a collection of player-specific or entity-specific data.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md265">
<title>Syntax</title>
<para><literallayout><computeroutput>[_data]&#32;call&#32;dragonfly_db_fnc_hashSetIdBulk
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md266">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="4" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<colspec colname='c4'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry><entry>
<para>Default </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_data</computeroutput> </para>
</entry><entry>
<para>Array </para>
</entry><entry>
<para>Array with key followed by alternating field names and values </para>
</entry><entry>
<para>[] </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md267">
<title>Return Value</title>
<para>None. The operation runs synchronously to store all the data.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md268">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md269">
<title>Store player loadout and position:</title>
<para><literallayout><computeroutput>[[getPlayerUID&#32;player,&#32;&quot;loadout&quot;,&#32;[getUnitLoadout&#32;player],&#32;&quot;position&quot;,&#32;[getPosASLVisual&#32;player]]]&#32;call&#32;dragonfly_db_fnc_hashSetIdBulk;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md270">
<title>Store multiple vehicle properties:</title>
<para><literallayout><computeroutput>[[&quot;vehicle_123&quot;,&#32;&quot;fuel&quot;,&#32;[0.75],&#32;&quot;damage&quot;,&#32;[0.2],&#32;&quot;crew&quot;,&#32;[[&quot;player1&quot;,&#32;&quot;player2&quot;]]]]&#32;call&#32;dragonfly_db_fnc_hashSetIdBulk;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md271">
<title>Store player data from a client:</title>
<para><literallayout><computeroutput>[[getPlayerUID&#32;player,&#32;&quot;stats&quot;,&#32;[score&#32;player],&#32;&quot;inventory&quot;,&#32;[getAllGear&#32;player]]]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_hashSetIdBulk&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md272">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>The data array must be structured with the key first, followed by alternating field names and values: <computeroutput>[key, field1, value1, field2, value2, ...]</computeroutput></para>
</listitem><listitem>
<para>The key must be a string that identifies the specific hash table</para>
</listitem><listitem>
<para>Each field name must be a string</para>
</listitem><listitem>
<para>Values can be arrays, strings, numbers, or booleans</para>
</listitem><listitem>
<para>All field-value pairs are stored in a single database operation</para>
</listitem><listitem>
<para>If the hash table doesn&apos;t exist, it will be created automatically</para>
</listitem><listitem>
<para>If any of the fields already exist in the hash table, their values will be overwritten</para>
</listitem><listitem>
<para>More efficient than multiple individual <computeroutput>hashSetId</computeroutput> calls when setting several fields</para>
</listitem><listitem>
<para>Player UIDs are commonly used as keys to store player-specific data</para>
</listitem><listitem>
<para>The operation is executed immediately and synchronously</para>
</listitem><listitem>
<para>All operations are logged for debugging purposes</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md273">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_hashSetId</computeroutput>: Sets a single field value in a specific hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashSetBulk</computeroutput>: Sets multiple field-value pairs in the global hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetAllId</computeroutput>: Retrieves all fields from a specific hash table</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_hashGetId</computeroutput>: Retrieves a specific field value from a specific hash table</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_1autotoc_md274">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get">Hash Get</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all">Hash Get All</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id">Hash Get All ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id">Hash Get ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set">Hash Set</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk">Hash Set Bulk</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id">Hash Set ID</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk">Hash Set ID Bulk</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,96 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete" xml:lang="en-US">
<title>delete</title>
<indexterm><primary>delete</primary></indexterm>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md0">
<title>autotoc_md0</title>
<para>title: ArmaDragonflyClient - Delete Key icon: mdi:file-text-outline </para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md1">
<title>excerpt: Remove the specified key from DragonflyClient.</title></section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md2">
<title>dragonfly_db_fnc_delete</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md3">
<title>Description</title>
<para>Removes the specified key from the database. This function deletes the key-value pair completely from storage.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md4">
<title>Syntax</title>
<para><literallayout><computeroutput>[_key]&#32;call&#32;dragonfly_db_fnc_delete
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md5">
<title>Parameters</title>
<para><informaltable frame="all">
<tgroup cols="3" align="left" colsep="1" rowsep="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
<colspec colname='c3'/>
<thead>
<row class='markdownTableHead'>
<entry>
<para>Parameter </para>
</entry><entry>
<para>Type </para>
</entry><entry>
<para>Description </para>
</entry></row>
</thead><tbody>
<row class='markdownTableRowOdd'>
<entry>
<para><computeroutput>_key</computeroutput> </para>
</entry><entry>
<para>String </para>
</entry><entry>
<para>Name of the key to delete from the database </para>
</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md6">
<title>Return Value</title>
<para>None. The operation runs asynchronously.</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md7">
<title>Examples</title><section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md8">
<title>Delete a key in singleplayer or on the server:</title>
<para><literallayout><computeroutput>[&quot;playerData&quot;]&#32;call&#32;dragonfly_db_fnc_delete;
</computeroutput></literallayout></para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md9">
<title>Delete a key on the server from a client:</title>
<para><literallayout><computeroutput>[&quot;playerData&quot;]&#32;remoteExecCall&#32;[&quot;dragonfly_db_fnc_delete&quot;,&#32;2,&#32;false];
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md10">
<title>Notes</title>
<para><itemizedlist>
<listitem>
<para>This operation is permanent and cannot be undone</para>
</listitem><listitem>
<para>If the key doesn&apos;t exist, the operation will have no effect</para>
</listitem><listitem>
<para>This function only affects specific keys, not hash tables or lists</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md11">
<title>Related Functions</title>
<para><itemizedlist>
<listitem>
<para><computeroutput>dragonfly_db_fnc_get</computeroutput>: Retrieves a value by key</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_set</computeroutput>: Stores a value by key</para>
</listitem><listitem>
<para><computeroutput>dragonfly_db_fnc_scheduler</computeroutput>: Processes the callback response</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete_1autotoc_md12">
<title>Links</title>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete">Delete Key</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2get">Get Key</link> | <link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2set">Set Key</link> </para>
</section>
</section>
</section>

View File

@ -0,0 +1,51 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_dir_10eb6422e80bd721a9a7af022f58c68b" xml:lang="en-US">
<title>G:/ids/dragonfly/docs/core Directory Reference</title>
<indexterm><primary>G:/ids/dragonfly/docs/core Directory Reference</primary></indexterm>
<section>
<title>Detailed Description</title>
<para>This section contains documentation for the core functions of ArmaDragonflyClient that handle initialization, process management, and scheduling.</para>
<section xml:id="_README.md_1autotoc_md133">
<title>Available Functions</title>
<para><itemizedlist>
<listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task">addTask</link> - Add a task to the scheduler</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2handler">handler</link> - Handle callbacks from the extension</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2init">init</link> - Initialize the database system</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name">printAddonName</link> - Print the addon name</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue">processQueue</link> - Process queued database operations</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler">scheduler</link> - Schedule database operations</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2test">test</link> - Test the database connection</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_README.md_1autotoc_md134">
<title>Example Usage</title>
<para><literallayout><computeroutput>//&#32;Initialize&#32;the&#32;database
[]&#32;call&#32;dragonfly_db_fnc_init;
//&#32;Test&#32;the&#32;database&#32;connection
[]&#32;call&#32;dragonfly_db_fnc_test;
</computeroutput></literallayout></para>
</section>
<section xml:id="_README.md_1autotoc_md135">
<title>Related Categories</title>
<para><itemizedlist>
<listitem>
<para>Basic Data Operations</para>
</listitem><listitem>
<para>Hash Operations</para>
</listitem><listitem>
<para>List Operations </para>
</listitem></itemizedlist>
</para>
</section>
</section>
</section>

View File

@ -0,0 +1,64 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_dir_1d1eabba2c636e67297dc8cee9bc9944" xml:lang="en-US">
<title>G:/ids/dragonfly/docs/hash Directory Reference</title>
<indexterm><primary>G:/ids/dragonfly/docs/hash Directory Reference</primary></indexterm>
<section>
<title>Detailed Description</title>
<para>This section contains documentation for the hash operations of ArmaDragonflyClient that allow for working with hash tables (key-value pairs within a namespace).</para>
<section xml:id="_README.md_1autotoc_md276">
<title>Available Functions</title>
<para><itemizedlist>
<listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get">hashGet</link> - Get a field from a hash</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all">hashGetAll</link> - Get all fields from a hash</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id">hashGetAllId</link> - Get all fields from a hash for a specific ID</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id">hashGetId</link> - Get a field from a hash for a specific ID</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set">hashSet</link> - Set a field in a hash</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk">hashSetBulk</link> - Set multiple fields in a hash in one operation</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id">hashSetId</link> - Set a field in a hash for a specific ID</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk">hashSetIdBulk</link> - Set multiple fields in a hash for a specific ID in one operation</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_README.md_1autotoc_md277">
<title>Example Usage</title>
<para><literallayout><computeroutput>//&#32;Context&#32;mode&#32;examples
[&quot;myField&quot;,&#32;[myValue]]&#32;call&#32;dragonfly_db_fnc_hashSet;
[&quot;myField&quot;,&#32;&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_hashGet;
[&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_hashGetAll;
//&#32;Set&#32;multiple&#32;hash&#32;fields&#32;in&#32;one&#32;operation
[[
&#32;&#32;&#32;&#32;&quot;loadout&quot;,&#32;[getUnitLoadout&#32;player],
&#32;&#32;&#32;&#32;&quot;position&quot;,&#32;[getPosASL&#32;player],
&#32;&#32;&#32;&#32;&quot;direction&quot;,&#32;[getDir&#32;player]
]]&#32;call&#32;dragonfly_db_fnc_hashSetBulk;
//&#32;ID-specific&#32;examples
[&quot;myHash&quot;,&#32;&quot;myField&quot;,&#32;[myValue]]&#32;call&#32;dragonfly_db_fnc_hashSetId;
[&quot;myHash&quot;,&#32;&quot;myField&quot;,&#32;&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_hashGetId;
[&quot;myHash&quot;]&#32;call&#32;dragonfly_db_fnc_hashGetAllId;
</computeroutput></literallayout></para>
</section>
<section xml:id="_README.md_1autotoc_md278">
<title>Related Categories</title>
<para><itemizedlist>
<listitem>
<para>Core Functions</para>
</listitem><listitem>
<para>Basic Data Operations</para>
</listitem><listitem>
<para>List Operations </para>
</listitem></itemizedlist>
</para>
</section>
</section>
</section>

View File

@ -0,0 +1,208 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_dir_6b1f4820e2481aa5a1ea9b2275f196d9" xml:lang="en-US">
<title>G:/ids/dragonfly/docs Directory Reference</title>
<indexterm><primary>G:/ids/dragonfly/docs Directory Reference</primary></indexterm>
<simplesect>
<title>Directories </title>
<itemizedlist>
<listitem><para>directory <link linkend="_dir_71f12be5768ca2af9c9f300d019944af">basic</link></para>
</listitem>
<listitem><para>directory <link linkend="_dir_10eb6422e80bd721a9a7af022f58c68b">core</link></para>
</listitem>
<listitem><para>directory <link linkend="_dir_1d1eabba2c636e67297dc8cee9bc9944">hash</link></para>
</listitem>
<listitem><para>directory <link linkend="_dir_72c6efb7383bf0530aa073c1e7428252">list</link></para>
</listitem>
</itemizedlist>
</simplesect>
<section>
<title>Detailed Description</title>
<para>This documentation provides details on all functions available in <computeroutput>ArmaDragonflyClient</computeroutput>. These functions allow you to interact with the in-memory database system for Arma 3.</para>
<section xml:id="_README.md_1autotoc_md345">
<title>Function Categories</title>
<para>The functions are categorized by their purpose:</para>
<section xml:id="_README.md_1autotoc_md346">
<title>Core Functions</title>
<para><itemizedlist>
<listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2init">init</link> - Initialize the database system</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2handler">handler</link> - Handle callbacks from the extension</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2process_queue">processQueue</link> - Process queued database operations</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2scheduler">scheduler</link> - Schedule database operations</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2add_task">addTask</link> - Add a task to the scheduler</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name">printAddonName</link> - Print the addon name</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2core_2test">test</link> - Test the database connection</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_README.md_1autotoc_md347">
<title>Basic Data Operations</title>
<para><itemizedlist>
<listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2get">get</link> - Get a value from the database</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2set">set</link> - Set a value in the database</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete">delete</link> - Delete a value from the database</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2save">save</link> - Save the database to disk</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch">fetch</link> - Fetch a value from the database</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_README.md_1autotoc_md348">
<title>Hash Operations</title>
<para><itemizedlist>
<listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get">hashGet</link> - Get a field from a hash</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all">hashGetAll</link> - Get all fields from a hash</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id">hashGetAllId</link> - Get all fields from a hash for a specific ID</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id">hashGetId</link> - Get a field from a hash for a specific ID</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set">hashSet</link> - Set a field in a hash</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk">hashSetBulk</link> - Set multiple fields in a hash in one operation</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id">hashSetId</link> - Set a field in a hash for a specific ID</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk">hashSetIdBulk</link> - Set multiple fields in a hash for a specific ID in one operation</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_README.md_1autotoc_md349">
<title>List Operations</title>
<para><itemizedlist>
<listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add">listAdd</link> - Add an item to a list</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get">listGet</link> - Get items from a list</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load">listLoad</link> - Load a list from the database</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove">listRemove</link> - Remove an item from a list</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set">listSet</link> - Set an item in a list</para>
</listitem></itemizedlist>
</para>
</section>
</section>
<section xml:id="_README.md_1autotoc_md350">
<title>Usage Examples</title><section xml:id="_README.md_1autotoc_md351">
<title>Basic Usage</title>
<para><literallayout><computeroutput>//&#32;Initialize&#32;the&#32;database
[]&#32;call&#32;dragonfly_db_fnc_init;
//&#32;Set&#32;a&#32;value
[&quot;myKey&quot;,&#32;[myValue]]&#32;call&#32;dragonfly_db_fnc_set;
//&#32;Get&#32;a&#32;value
[&quot;myKey&quot;,&#32;&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_get;
//&#32;Delete&#32;a&#32;key
[&quot;myKey&quot;]&#32;call&#32;dragonfly_db_fnc_delete;
</computeroutput></literallayout></para>
</section>
<section xml:id="_README.md_1autotoc_md352">
<title>Hash Operations</title>
<para><literallayout><computeroutput>//&#32;Set&#32;a&#32;hash&#32;field&#32;(context&#32;mode)
[&quot;myField&quot;,&#32;[myValue]]&#32;call&#32;dragonfly_db_fnc_hashSet;
//&#32;Get&#32;a&#32;hash&#32;field&#32;(context&#32;mode)
[&quot;myField&quot;,&#32;&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_hashGet;
//&#32;Get&#32;all&#32;hash&#32;fields&#32;(context&#32;mode)
[&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_hashGetAll;
//&#32;Set&#32;multiple&#32;hash&#32;fields&#32;(context&#32;mode)
[[
&#32;&#32;&#32;&#32;&quot;loadout&quot;,&#32;[getUnitLoadout&#32;player],
&#32;&#32;&#32;&#32;&quot;position&quot;,&#32;[getPosASL&#32;player],
&#32;&#32;&#32;&#32;&quot;direction&quot;,&#32;[getDir&#32;player],
&#32;&#32;&#32;&#32;&quot;stance&quot;,&#32;[stance&#32;player]
]]&#32;call&#32;dragonfly_db_fnc_hashSetBulk;
//&#32;Remove&#32;a&#32;hash&#32;field&#32;(context&#32;mode)
[&quot;myField&quot;]&#32;call&#32;dragonfly_db_fnc_hashRemove;
//&#32;Delete&#32;a&#32;hash&#32;table&#32;(context&#32;mode)
[]&#32;call&#32;dragonfly_db_fnc_hashDelete;
</computeroutput></literallayout> <literallayout><computeroutput>//&#32;Set&#32;a&#32;hash&#32;field&#32;for&#32;specific&#32;ID
[&quot;myHash&quot;,&#32;&quot;myField&quot;,&#32;[myValue]]&#32;call&#32;dragonfly_db_fnc_hashSetId;
//&#32;Get&#32;a&#32;hash&#32;field&#32;for&#32;specific&#32;ID
[&quot;myHash&quot;,&#32;&quot;myField&quot;,&#32;&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_hashGetId;
//&#32;Get&#32;all&#32;hash&#32;fields&#32;for&#32;specific&#32;ID
[&quot;myHash&quot;]&#32;call&#32;dragonfly_db_fnc_hashGetAllId;
//&#32;Set&#32;multiple&#32;hash&#32;fields&#32;for&#32;specific&#32;ID
[[
&#32;&#32;&#32;&#32;getPlayerUID&#32;player,
&#32;&#32;&#32;&#32;&quot;loadout&quot;,&#32;[getUnitLoadout&#32;player],
&#32;&#32;&#32;&#32;&quot;position&quot;,&#32;[getPosASL&#32;player],
&#32;&#32;&#32;&#32;&quot;direction&quot;,&#32;[getDir&#32;player],
&#32;&#32;&#32;&#32;&quot;stance&quot;,&#32;[stance&#32;player]
]]&#32;call&#32;dragonfly_db_fnc_hashSetIdBulk;
//&#32;Remove&#32;a&#32;hash&#32;field&#32;for&#32;specific&#32;ID
[&quot;myHash&quot;,&#32;&quot;myField&quot;]&#32;call&#32;dragonfly_db_fnc_hashRemoveId;
//&#32;Delete&#32;a&#32;hash&#32;table&#32;for&#32;specific&#32;ID
[&quot;myHash&quot;]&#32;call&#32;dragonfly_db_fnc_hashDeleteId;
</computeroutput></literallayout></para>
</section>
<section xml:id="_README.md_1autotoc_md353">
<title>List Operations</title>
<para><literallayout><computeroutput>//&#32;Add&#32;an&#32;item&#32;to&#32;a&#32;list
[&quot;myList&quot;,&#32;[&quot;myItem&quot;]]&#32;call&#32;dragonfly_db_fnc_listAdd;
//&#32;Set&#32;an&#32;item&#32;from&#32;a&#32;list
[&quot;myList&quot;,&#32;0,&#32;[myNewValue]]&#32;call&#32;dragonfly_db_fnc_listSet;
//&#32;Get&#32;an&#32;item&#32;from&#32;a&#32;list
[&quot;myList&quot;,&#32;0,&#32;&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_listGet;
//&#32;Get&#32;items&#32;from&#32;a&#32;list
[&quot;myList&quot;,&#32;&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_listLoad;
//&#32;Remove&#32;an&#32;item&#32;from&#32;a&#32;list
[&quot;myList&quot;,&#32;0]&#32;call&#32;dragonfly_db_fnc_listRemove;
//&#32;Delete&#32;a&#32;list
[&quot;myList&quot;]&#32;call&#32;dragonfly_db_fnc_listDelete;
</computeroutput></literallayout></para>
</section>
</section>
<section xml:id="_README.md_1autotoc_md354">
<title>Function Documentation Structure</title>
<para>Each function documentation includes:<itemizedlist>
<listitem>
<para>Function name and purpose</para>
</listitem><listitem>
<para>Parameters</para>
</listitem><listitem>
<para>Return value</para>
</listitem><listitem>
<para>Examples</para>
</listitem><listitem>
<para>Notes and warnings</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_README.md_1autotoc_md355">
<title>License</title>
<para>This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit <link xlink:href="https://creativecommons.org/licenses/by-nc-sa/4.0/">https://creativecommons.org/licenses/by-nc-sa/4.0/</link> or send a letter to Creative Commons, <?linebreak?>PO Box 1866, Mountain View, CA 94042 </para>
</section>
</section>
</section>

View File

@ -0,0 +1,53 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_dir_71f12be5768ca2af9c9f300d019944af" xml:lang="en-US">
<title>G:/ids/dragonfly/docs/basic Directory Reference</title>
<indexterm><primary>G:/ids/dragonfly/docs/basic Directory Reference</primary></indexterm>
<section>
<title>Detailed Description</title>
<para>This section contains documentation for the basic data operations of ArmaDragonflyClient that allow for simple key-value storage and retrieval.</para>
<section xml:id="_README.md_1autotoc_md37">
<title>Available Functions</title>
<para><itemizedlist>
<listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2delete">delete</link> - Delete a value from the database</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2fetch">fetch</link> - Fetch a value from the database</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2get">get</link> - Get a value from the database</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2save">save</link> - Save the database to disk</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2basic_2set">set</link> - Set a value in the database</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_README.md_1autotoc_md38">
<title>Example Usage</title>
<para><literallayout><computeroutput>//&#32;Set&#32;a&#32;value
[&quot;myKey&quot;,&#32;[myValue]]&#32;call&#32;dragonfly_db_fnc_set;
//&#32;Get&#32;a&#32;value
[&quot;myKey&quot;,&#32;&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_get;
//&#32;Delete&#32;a&#32;key
[&quot;myKey&quot;]&#32;call&#32;dragonfly_db_fnc_delete;
//&#32;Save&#32;database&#32;to&#32;disk
[]&#32;call&#32;dragonfly_db_fnc_save;
</computeroutput></literallayout></para>
</section>
<section xml:id="_README.md_1autotoc_md39">
<title>Related Categories</title>
<para><itemizedlist>
<listitem>
<para>Core Functions</para>
</listitem><listitem>
<para>Hash Operations</para>
</listitem><listitem>
<para>List Operations </para>
</listitem></itemizedlist>
</para>
</section>
</section>
</section>

View File

@ -0,0 +1,56 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_dir_72c6efb7383bf0530aa073c1e7428252" xml:lang="en-US">
<title>G:/ids/dragonfly/docs/list Directory Reference</title>
<indexterm><primary>G:/ids/dragonfly/docs/list Directory Reference</primary></indexterm>
<section>
<title>Detailed Description</title>
<para>This section contains documentation for the list operations of ArmaDragonflyClient that allow for working with ordered collections of items.</para>
<section xml:id="_README.md_1autotoc_md341">
<title>Available Functions</title>
<para><itemizedlist>
<listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_add">listAdd</link> - Add an item to a list</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_get">listGet</link> - Get items from a list</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_load">listLoad</link> - Load a list from the database</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_remove">listRemove</link> - Remove an item from a list</para>
</listitem><listitem>
<para><link linkend="_md__g_1_2ids_2dragonfly_2docs_2list_2list_set">listSet</link> - Set an item in a list</para>
</listitem></itemizedlist>
</para>
</section>
<section xml:id="_README.md_1autotoc_md342">
<title>Example Usage</title>
<para><literallayout><computeroutput>//&#32;Add&#32;an&#32;item&#32;to&#32;a&#32;list
[&quot;myList&quot;,&#32;[&quot;myItem&quot;]]&#32;call&#32;dragonfly_db_fnc_listAdd;
//&#32;Set&#32;an&#32;item&#32;at&#32;a&#32;specific&#32;index
[&quot;myList&quot;,&#32;0,&#32;[myNewValue]]&#32;call&#32;dragonfly_db_fnc_listSet;
//&#32;Get&#32;an&#32;item&#32;at&#32;a&#32;specific&#32;index
[&quot;myList&quot;,&#32;0,&#32;&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_listGet;
//&#32;Load&#32;all&#32;items&#32;from&#32;a&#32;list
[&quot;myList&quot;,&#32;&quot;myFunction&quot;]&#32;call&#32;dragonfly_db_fnc_listLoad;
//&#32;Remove&#32;an&#32;item&#32;at&#32;a&#32;specific&#32;index
[&quot;myList&quot;,&#32;0]&#32;call&#32;dragonfly_db_fnc_listRemove;
</computeroutput></literallayout></para>
</section>
<section xml:id="_README.md_1autotoc_md343">
<title>Related Categories</title>
<para><itemizedlist>
<listitem>
<para>Core Functions</para>
</listitem><listitem>
<para>Basic Data Operations</para>
</listitem><listitem>
<para>Hash Operations </para>
</listitem></itemizedlist>
</para>
</section>
</section>
</section>

32
api/docbook/index.xml Normal file
View File

@ -0,0 +1,32 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<book xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_index" xml:lang="en-US">
<info>
<title>ArmaDragonflyClient</title>
</info>
<xi:include href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<index/>
</book>

BIN
api/html/bc_s.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

BIN
api/html/bc_sd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

61
api/html/clipboard.js Normal file
View File

@ -0,0 +1,61 @@
/**
The code below is based on the Doxygen Awesome project, see
https://github.com/jothepro/doxygen-awesome-css
MIT License
Copyright (c) 2021 - 2022 jothepro
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
let clipboard_title = "Copy to clipboard"
let clipboard_icon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="#888" d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>`
let clipboard_successIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/></svg>`
let clipboard_successDuration = 1000
$(function() {
if(navigator.clipboard) {
const fragments = document.getElementsByClassName("fragment")
for(const fragment of fragments) {
const clipboard_div = document.createElement("div")
clipboard_div.classList.add("clipboard")
clipboard_div.innerHTML = clipboard_icon
clipboard_div.title = clipboard_title
$(clipboard_div).click(function() {
const content = this.parentNode.cloneNode(true)
// filter out line number and folded fragments from file listings
content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() })
let text = content.textContent
// remove trailing newlines and trailing spaces from empty lines
text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'')
navigator.clipboard.writeText(text);
this.classList.add("success")
this.innerHTML = clipboard_successIcon
window.setTimeout(() => { // switch back to normal icon after timeout
this.classList.remove("success")
this.innerHTML = clipboard_icon
}, clipboard_successDuration);
})
fragment.insertBefore(clipboard_div, fragment.firstChild)
}
}
})

BIN
api/html/closed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

58
api/html/cookie.js Normal file
View File

@ -0,0 +1,58 @@
/*!
Cookie helper functions
Copyright (c) 2023 Dimitri van Heesch
Released under MIT license.
*/
let Cookie = {
cookie_namespace: 'doxygen_',
readSetting(cookie,defVal) {
if (window.chrome) {
const val = localStorage.getItem(this.cookie_namespace+cookie) ||
sessionStorage.getItem(this.cookie_namespace+cookie);
if (val) return val;
} else {
let myCookie = this.cookie_namespace+cookie+"=";
if (document.cookie) {
const index = document.cookie.indexOf(myCookie);
if (index != -1) {
const valStart = index + myCookie.length;
let valEnd = document.cookie.indexOf(";", valStart);
if (valEnd == -1) {
valEnd = document.cookie.length;
}
return document.cookie.substring(valStart, valEnd);
}
}
}
return defVal;
},
writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete
if (window.chrome) {
if (days==0) {
sessionStorage.setItem(this.cookie_namespace+cookie,val);
} else {
localStorage.setItem(this.cookie_namespace+cookie,val);
}
} else {
let date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
const expiration = days!=0 ? "expires="+date.toGMTString()+";" : "";
document.cookie = this.cookie_namespace + cookie + "=" +
val + "; SameSite=Lax;" + expiration + "path=/";
}
},
eraseSetting(cookie) {
if (window.chrome) {
if (localStorage.getItem(this.cookie_namespace+cookie)) {
localStorage.removeItem(this.cookie_namespace+cookie);
} else if (sessionStorage.getItem(this.cookie_namespace+cookie)) {
sessionStorage.removeItem(this.cookie_namespace+cookie);
}
} else {
this.writeSetting(cookie,'',-1);
}
},
}

View File

@ -0,0 +1,170 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: processQueue</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">processQueue</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md119"></a>
autotoc_md119</h2>
<p>title: ArmaDragonflyClient - Process Queue icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md120"></a>
excerpt: Processes a queue of tasks to be executed.</h2>
<h1><a class="anchor" id="autotoc_md121"></a>
dragonfly_db_fnc_processQueue</h1>
<h2><a class="anchor" id="autotoc_md122"></a>
Description</h2>
<p>Processes the queue of pending database tasks sequentially. This function executes each task in the queue one by one, handling various database operations based on the task type. It continues processing until the queue is empty.</p>
<h2><a class="anchor" id="autotoc_md123"></a>
Syntax</h2>
<div class="fragment"><div class="line">[] spawn dragonfly_db_fnc_processQueue</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md124"></a>
Parameters</h2>
<p>None. This function does not require any parameters.</p>
<h2><a class="anchor" id="autotoc_md125"></a>
Return Value</h2>
<p>None. The function processes tasks in the queue and updates the processing state.</p>
<h2><a class="anchor" id="autotoc_md126"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md127"></a>
Start processing the queue manually:</h3>
<div class="fragment"><div class="line">[] spawn dragonfly_db_fnc_processQueue;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md128"></a>
Trigger queue processing from a client:</h3>
<div class="fragment"><div class="line">[] remoteExec [&quot;dragonfly_db_fnc_processQueue&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md129"></a>
Notes</h2>
<ul>
<li>Sets <code>GVAR(isProcessing)</code> to true while running and false when complete</li>
<li>Processes one task per second to prevent overloading</li>
<li>Handles a wide range of database operations including:<ul>
<li>Key-value operations (get, set, delete)</li>
<li>Hash table operations (hget, hset, hgetall, etc.)</li>
<li>List operations (listadd, listrng, listset, etc.)</li>
</ul>
</li>
<li>Automatically started by <code>dragonfly_db_fnc_addTask</code> when new tasks are added</li>
<li>Each task execution is logged for debugging purposes</li>
<li>Should typically be spawned rather than called to avoid blocking</li>
</ul>
<h2><a class="anchor" id="autotoc_md130"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_addTask</code>: Adds tasks to the queue for processing</li>
<li><code>dragonfly_db_fnc_handler</code>: Handles data returned from database operations</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Manages callback responses from the database</li>
</ul>
<h2><a class="anchor" id="autotoc_md131"></a>
Links</h2>
<p><a class="el" href="../../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html">Add Task</a> | <a class="el" href="../../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html">Handler</a> | <a class="el" href="../../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html">Init</a> | <a class="el" href="../../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html">Print Addon Name</a> | <a class="el" href="../../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html">Process Queue</a> | <a class="el" href="../../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html">Scheduler</a> | <a class="el" href="../../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html">Test</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,179 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: hashSet</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">hashSet</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md219"></a>
autotoc_md219</h2>
<p>title: ArmaDragonflyClient - Hash Set icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md220"></a>
excerpt: Set a field value in the current client's hash table in DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md221"></a>
dragonfly_db_fnc_hashSet</h1>
<h2><a class="anchor" id="autotoc_md222"></a>
Description</h2>
<p>Sets the value of a specified field in the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than <code>hashSetId</code> which requires manually specifying an ID. It allows storing various data types (arrays, strings, numbers, or booleans) in a field of the client-specific hash structure.</p>
<h2><a class="anchor" id="autotoc_md223"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_keyField, _data] call dragonfly_db_fnc_hashSet</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md224"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_keyField</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the field in the hash to set </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_data</code> </td><td class="markdownTableBodyNone">Array, String, Number, or Boolean </td><td class="markdownTableBodyNone">The value to store in the hash field </td><td class="markdownTableBodyNone">[] </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md225"></a>
Return Value</h2>
<p>None. The operation runs synchronously to store the data.</p>
<h2><a class="anchor" id="autotoc_md226"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md227"></a>
Store a player's loadout:</h3>
<div class="fragment"><div class="line">[&quot;loadout&quot;, [getUnitLoadout player]] call dragonfly_db_fnc_hashSet;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md228"></a>
Store player preferences:</h3>
<div class="fragment"><div class="line">[&quot;settings&quot;, [true, 30, &quot;normal&quot;]] call dragonfly_db_fnc_hashSet;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md229"></a>
Store data from a client:</h3>
<div class="fragment"><div class="line">[&quot;clientInfo&quot;, [name player, getPlayerUID player]] remoteExecCall [&quot;dragonfly_db_fnc_hashSet&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md230"></a>
Notes</h2>
<ul>
<li>Stores a single field-value pair in the current client's hash table</li>
<li>Both the field name and data parameters are required and validated</li>
<li>If the field already exists, its value will be overwritten</li>
<li>Supports various data types: arrays, strings, numbers, and booleans</li>
<li>This function automatically determines which hash table to use based on the caller's identity</li>
<li>Use <code>hashSetId</code> when you need to specify a particular hash table by ID</li>
<li>Complex data structures should be serialized into arrays</li>
<li>The operation is executed immediately and synchronously</li>
<li>All operations are logged for debugging purposes</li>
</ul>
<h2><a class="anchor" id="autotoc_md231"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_hashSetId</code>: Sets a field value in a specific hash table (when you need to specify the ID)</li>
<li><code>dragonfly_db_fnc_hashGet</code>: Retrieves a field value from the current client's hash table</li>
<li><code>dragonfly_db_fnc_hashGetAll</code>: Retrieves all fields from the current client's hash table</li>
<li><code>dragonfly_db_fnc_hashSetBulk</code>: Sets multiple fields in the current client's hash table</li>
</ul>
<h2><a class="anchor" id="autotoc_md232"></a>
Links</h2>
<p><a class="el" href="../../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html">Hash Get</a> | <a class="el" href="../../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html">Hash Get All</a> | <a class="el" href="../../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html">Hash Get All ID</a> | <a class="el" href="../../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html">Hash Get ID</a> | <a class="el" href="../../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html">Hash Set</a> | <a class="el" href="../../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html">Hash Set Bulk</a> | <a class="el" href="../../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html">Hash Set ID</a> | <a class="el" href="../../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html">Hash Set ID Bulk</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,171 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: scheduler</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">scheduler</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md136"></a>
autotoc_md136</h2>
<p>title: ArmaDragonflyClient - Scheduler icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md137"></a>
excerpt: Scheduled Environment for extension.</h2>
<h1><a class="anchor" id="autotoc_md138"></a>
dragonfly_db_fnc_scheduler</h1>
<h2><a class="anchor" id="autotoc_md139"></a>
Description</h2>
<p>Manages the callback system for the ArmaDragonflyClient extension. This function receives task IDs from the extension's asynchronous callbacks, parses them, and registers them in a hashmap for later processing. It acts as the bridge between the extension's asynchronous operations and the game's execution environment.</p>
<h2><a class="anchor" id="autotoc_md140"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_taskID] call dragonfly_db_fnc_scheduler</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md141"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_taskID</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Task identifier returned from extension callback </td><td class="markdownTableBodyNone">"" </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md142"></a>
Return Value</h2>
<p>None. The function registers the task ID in a hashmap for later processing.</p>
<h2><a class="anchor" id="autotoc_md143"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md144"></a>
Process a callback from the extension:</h3>
<div class="fragment"><div class="line">[&quot;1689524160123_get&quot;] call dragonfly_db_fnc_scheduler;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md145"></a>
Forward a callback to the server:</h3>
<div class="fragment"><div class="line">[&quot;1689524160123_hgetall&quot;] remoteExecCall [&quot;dragonfly_db_fnc_scheduler&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md146"></a>
Notes</h2>
<ul>
<li>Parses the task ID to extract the timestamp and operation type</li>
<li>Registers the task in a type-specific hashmap using the mission namespace</li>
<li>Each operation type (get, hgetall, etc.) has its own hashmap for tracking</li>
<li>The format of task IDs is typically: <code>[timestamp]_[operation]</code></li>
<li>This function is automatically called by the extension callback mechanism</li>
<li>Creates hashmaps on demand if they don't already exist</li>
<li>Critical for handling asynchronous database operations</li>
</ul>
<h2><a class="anchor" id="autotoc_md147"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_fetch</code>: Assembles data chunks for large datasets</li>
<li><code>dragonfly_db_fnc_handler</code>: Processes the data retrieved from database operations</li>
<li><code>dragonfly_db_fnc_processQueue</code>: Executes queued database operations</li>
</ul>
<h2><a class="anchor" id="autotoc_md148"></a>
Links</h2>
<p><a class="el" href="../../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html">Add Task</a> | <a class="el" href="../../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html">Handler</a> | <a class="el" href="../../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html">Init</a> | <a class="el" href="../../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html">Print Addon Name</a> | <a class="el" href="../../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html">Process Queue</a> | <a class="el" href="../../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html">Scheduler</a> | <a class="el" href="../../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html">Test</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,172 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: listRemove</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">listRemove</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md318"></a>
autotoc_md318</h2>
<p>title: ArmaDragonflyClient - List Remove icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md319"></a>
excerpt: Remove an element from a list stored at a key in DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md320"></a>
dragonfly_db_fnc_listRemove</h1>
<h2><a class="anchor" id="autotoc_md321"></a>
Description</h2>
<p>Removes a specific element from a list stored at a specified key in the DragonflyClient database. This function allows for precise control over list content by targeting individual elements by their index, without affecting other elements in the list. This is particularly useful for removing outdated or no longer needed entries.</p>
<h2><a class="anchor" id="autotoc_md322"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_key, _index] call dragonfly_db_fnc_listRemove</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md323"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">_key </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">The key identifying the list from which to remove an element </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">_index </td><td class="markdownTableBodyNone">Number </td><td class="markdownTableBodyNone">The zero-based index of the element to remove from the list </td><td class="markdownTableBodyNone">-1 </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md324"></a>
Return Value</h2>
<p>None. The operation runs synchronously to remove the element immediately.</p>
<h2><a class="anchor" id="autotoc_md325"></a>
Examples</h2>
<p><b>Remove the first element from an event log:</b> </p><div class="fragment"><div class="line">[&quot;eventLog&quot;, 0] call dragonfly_db_fnc_listRemove;</div>
</div><!-- fragment --><p><b>Remove a specific player record:</b> </p><div class="fragment"><div class="line">[&quot;playerRecords&quot;, 5] call dragonfly_db_fnc_listRemove;</div>
</div><!-- fragment --><p><b>Remove an element from a multiplayer environment:</b> </p><div class="fragment"><div class="line">[&quot;sharedData&quot;, 2] remoteExecCall [&quot;dragonfly_db_fnc_listRemove&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md326"></a>
Notes</h2>
<ul>
<li>This function removes only the element at the specified index. All other elements remain unchanged, though their indices may shift.</li>
<li>The index is zero-based, meaning the first element is at index 0, the second at index 1, and so on.</li>
<li>If an invalid index is provided (negative or exceeding the list length), the operation will not remove any elements.</li>
<li>The <code>_key</code> parameter must be a non-empty string, otherwise the function will exit without performing any action.</li>
<li>After removing an element, all subsequent elements shift down by one index to maintain a contiguous list.</li>
<li>The removal operation is permanent and cannot be undone except by re-adding the element.</li>
<li>All list operations are logged for debugging purposes.</li>
</ul>
<h2><a class="anchor" id="autotoc_md327"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_listAdd</code>: Adds an element to a list</li>
<li><code>dragonfly_db_fnc_listGet</code>: Retrieves a specific element from a list</li>
<li><code>dragonfly_db_fnc_listLoad</code>: Retrieves a range of elements from a list</li>
<li><code>dragonfly_db_fnc_listSet</code>: Replaces a specific element in a list</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback from the database extension</li>
</ul>
<h2><a class="anchor" id="autotoc_md328"></a>
Links</h2>
<p><a class="el" href="../../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html">List Add</a> | <a class="el" href="../../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html">List Get</a> | <a class="el" href="../../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html">List Load</a> | <a class="el" href="../../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html">List Remove</a> | <a class="el" href="../../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html">List Set</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,184 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: hashGetAllId</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">hashGetAllId</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md191"></a>
autotoc_md191</h2>
<p>title: ArmaDragonflyClient - Hash Get All ID icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md192"></a>
excerpt: Get all fields and values from the hash stored at key from DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md193"></a>
dragonfly_db_fnc_hashGetAllId</h1>
<h2><a class="anchor" id="autotoc_md194"></a>
Description</h2>
<p>Retrieves all fields and values from a specific hash table identified by its key. This function returns the complete hash table data for a specific ID through a callback function, allowing access to all stored key-value pairs associated with that ID. It's particularly useful for retrieving player-specific or entity-specific hash data.</p>
<h2><a class="anchor" id="autotoc_md195"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_key, _function, _call, _netId] call dragonfly_db_fnc_hashGetAllId</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md196"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_key</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Identifier of the hash table to retrieve </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_function</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the function to receive the retrieved data </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_call</code> </td><td class="markdownTableBodyNone">Boolean </td><td class="markdownTableBodyNone">Whether to call the function directly (true) or spawn (false) </td><td class="markdownTableBodyNone">false </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_netId</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">(Optional) NetID of the player to receive the data </td><td class="markdownTableBodyNone">"" </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md197"></a>
Return Value</h2>
<p>None. The retrieved data is passed to the specified callback function asynchronously.</p>
<h2><a class="anchor" id="autotoc_md198"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md199"></a>
Retrieve a player's complete hash data:</h3>
<div class="fragment"><div class="line">[getPlayerUID player, &quot;dragonfly_db_fnc_test&quot;] call dragonfly_db_fnc_hashGetAllId;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md200"></a>
Retrieve vehicle data with synchronous callback:</h3>
<div class="fragment"><div class="line">[&quot;vehicle_123&quot;, &quot;dragonfly_db_fnc_processVehicleData&quot;, true] call dragonfly_db_fnc_hashGetAllId;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md201"></a>
Retrieve data and send it to a specific client:</h3>
<div class="fragment"><div class="line">[getPlayerUID player, &quot;dragonfly_db_fnc_test&quot;, false, netId player] remoteExecCall [&quot;dragonfly_db_fnc_hashGetAllId&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md202"></a>
Notes</h2>
<ul>
<li>Returns the complete hash table with all fields and values as a nested array</li>
<li>Both the key and callback function parameters are required and validated</li>
<li>The data is retrieved asynchronously through the extension's callback system</li>
<li>When a netId is provided, the data is sent to that specific client</li>
<li>The <code>_call</code> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</li>
<li>This function retrieves from a specific hash table identified by <code>_key</code> - use <code>hashGetAll</code> for the global hash table</li>
<li>Player UIDs are commonly used as keys to store player-specific data</li>
<li>For large hash tables, retrieving all data may impact performance</li>
<li>All operations are logged for debugging purposes</li>
</ul>
<h2><a class="anchor" id="autotoc_md203"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_hashGetAll</code>: Retrieves all fields from the global hash table</li>
<li><code>dragonfly_db_fnc_hashGetId</code>: Retrieves a specific field value from a specific hash table</li>
<li><code>dragonfly_db_fnc_hashGet</code>: Retrieves a specific field value from the global hash table</li>
<li><code>dragonfly_db_fnc_hashSetId</code>: Sets a field value in a specific hash table</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback from the database extension</li>
</ul>
<h2><a class="anchor" id="autotoc_md204"></a>
Links</h2>
<p><a class="el" href="../../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html">Hash Get</a> | <a class="el" href="../../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html">Hash Get All</a> | <a class="el" href="../../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html">Hash Get All ID</a> | <a class="el" href="../../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html">Hash Get ID</a> | <a class="el" href="../../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html">Hash Set</a> | <a class="el" href="../../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html">Hash Set Bulk</a> | <a class="el" href="../../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html">Hash Set ID</a> | <a class="el" href="../../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html">Hash Set ID Bulk</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,186 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: hashGetId</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">hashGetId</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md205"></a>
autotoc_md205</h2>
<p>title: ArmaDragonflyClient - Hash Get ID icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md206"></a>
excerpt: Get the value associated with field in hash stored at key from DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md207"></a>
dragonfly_db_fnc_hashGetId</h1>
<h2><a class="anchor" id="autotoc_md208"></a>
Description</h2>
<p>Retrieves the value of a specific field from a hash table identified by its key. This function allows targeted access to individual fields within a specific hash table, making it ideal for accessing particular attributes of player or entity data. The retrieved data is returned through a callback function.</p>
<h2><a class="anchor" id="autotoc_md209"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_key, _keyField, _function, _call, _netId] call dragonfly_db_fnc_hashGetId</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md210"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_key</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Identifier of the hash table </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_keyField</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the field in the hash to retrieve </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_function</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the function to receive the retrieved data </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_call</code> </td><td class="markdownTableBodyNone">Boolean </td><td class="markdownTableBodyNone">Whether to call the function directly (true) or spawn (false) </td><td class="markdownTableBodyNone">false </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_netId</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">(Optional) NetID of the player to receive the data </td><td class="markdownTableBodyNone">"" </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md211"></a>
Return Value</h2>
<p>None. The retrieved data is passed to the specified callback function asynchronously.</p>
<h2><a class="anchor" id="autotoc_md212"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md213"></a>
Retrieve a player's loadout field:</h3>
<div class="fragment"><div class="line">[getPlayerUID player, &quot;loadout&quot;, &quot;dragonfly_db_fnc_test&quot;] call dragonfly_db_fnc_hashGetId;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md214"></a>
Retrieve a specific vehicle property with synchronous callback:</h3>
<div class="fragment"><div class="line">[&quot;vehicle_123&quot;, &quot;fuel&quot;, &quot;dragonfly_db_fnc_processFuelData&quot;, true] call dragonfly_db_fnc_hashGetId;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md215"></a>
Retrieve data and send it to a specific client:</h3>
<div class="fragment"><div class="line">[getPlayerUID player, &quot;stats&quot;, &quot;dragonfly_db_fnc_test&quot;, false, netId player] remoteExecCall [&quot;dragonfly_db_fnc_hashGetId&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md216"></a>
Notes</h2>
<ul>
<li>Retrieves a single field value from a specific hash table</li>
<li>All three primary parameters (key, keyField, and function) are required and validated</li>
<li>The data is retrieved asynchronously through the extension's callback system</li>
<li>When a netId is provided, the data is sent to that specific client</li>
<li>The <code>_call</code> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</li>
<li>This function targets both a specific hash table (<code>_key</code>) and a specific field (<code>_keyField</code>)</li>
<li>More efficient than retrieving all hash fields when only one is needed</li>
<li>Player UIDs are commonly used as keys to store player-specific data</li>
<li>All operations are logged for debugging purposes</li>
</ul>
<h2><a class="anchor" id="autotoc_md217"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_hashGet</code>: Retrieves a field value from the global hash table</li>
<li><code>dragonfly_db_fnc_hashGetAllId</code>: Retrieves all fields from a specific hash table</li>
<li><code>dragonfly_db_fnc_hashGetAll</code>: Retrieves all fields from the global hash table</li>
<li><code>dragonfly_db_fnc_hashSetId</code>: Sets a field value in a specific hash table</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback from the database extension</li>
</ul>
<h2><a class="anchor" id="autotoc_md218"></a>
Links</h2>
<p><a class="el" href="../../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html">Hash Get</a> | <a class="el" href="../../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html">Hash Get All</a> | <a class="el" href="../../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html">Hash Get All ID</a> | <a class="el" href="../../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html">Hash Get ID</a> | <a class="el" href="../../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html">Hash Set</a> | <a class="el" href="../../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html">Hash Set Bulk</a> | <a class="el" href="../../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html">Hash Set ID</a> | <a class="el" href="../../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html">Hash Set ID Bulk</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,174 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: listSet</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">listSet</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md329"></a>
autotoc_md329</h2>
<p>title: ArmaDragonflyClient - List Set icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md330"></a>
excerpt: Set an element in a list stored at a key in DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md331"></a>
dragonfly_db_fnc_listSet</h1>
<h2><a class="anchor" id="autotoc_md332"></a>
Description</h2>
<p>Updates or sets the value of a specific element at a given index in a list stored at a specified key in the DragonflyClient database. This function allows for precise modification of list contents by targeting individual elements without affecting other elements in the list. It is particularly useful for updating record information, modifying configuration data, or correcting entries.</p>
<h2><a class="anchor" id="autotoc_md333"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_key, _index, _data] call dragonfly_db_fnc_listSet</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md334"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">_key </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">The key identifying the list in which to set an element </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">_index </td><td class="markdownTableBodyNone">Number </td><td class="markdownTableBodyNone">The zero-based index of the element to set in the list </td><td class="markdownTableBodyNone">-1 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">_data </td><td class="markdownTableBodyNone">Array/String/Number/Boolean </td><td class="markdownTableBodyNone">The value to set at the specified index </td><td class="markdownTableBodyNone">[] </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md335"></a>
Return Value</h2>
<p>None. The operation runs synchronously to update the element immediately.</p>
<h2><a class="anchor" id="autotoc_md336"></a>
Examples</h2>
<p><b>Update an event log entry:</b> </p><div class="fragment"><div class="line">[&quot;eventLog&quot;, 0, [&quot;Updated event information&quot;]] call dragonfly_db_fnc_listSet;</div>
</div><!-- fragment --><p><b>Modify player statistics:</b> </p><div class="fragment"><div class="line">[&quot;playerStats&quot;, 3, [name player, score player, alive player]] call dragonfly_db_fnc_listSet;</div>
</div><!-- fragment --><p><b>Update configuration in multiplayer:</b> </p><div class="fragment"><div class="line">[&quot;missionConfig&quot;, 1, [&quot;difficulty&quot;, &quot;veteran&quot;]] remoteExecCall [&quot;dragonfly_db_fnc_listSet&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md337"></a>
Notes</h2>
<ul>
<li>This function updates only the element at the specified index. All other elements remain unchanged.</li>
<li>The index is zero-based, meaning the first element is at index 0, the second at index 1, and so on.</li>
<li>If the specified index does not exist in the list, the operation may fail or have no effect.</li>
<li>Both the <code>_key</code> parameter and <code>_data</code> parameter must be valid (non-empty string for key, non-nil for data), otherwise the function will exit without performing any action.</li>
<li>The function supports various data types, including arrays, strings, numbers, and booleans.</li>
<li>The update operation is permanent and will overwrite any previous value at the specified index.</li>
<li>All list operations are logged for debugging purposes.</li>
</ul>
<h2><a class="anchor" id="autotoc_md338"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_listAdd</code>: Adds an element to a list</li>
<li><code>dragonfly_db_fnc_listGet</code>: Retrieves a specific element from a list</li>
<li><code>dragonfly_db_fnc_listLoad</code>: Retrieves a range of elements from a list</li>
<li><code>dragonfly_db_fnc_listRemove</code>: Removes a specific element from a list</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback from the database extension</li>
</ul>
<h2><a class="anchor" id="autotoc_md339"></a>
Links</h2>
<p><a class="el" href="../../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html">List Add</a> | <a class="el" href="../../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html">List Get</a> | <a class="el" href="../../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html">List Load</a> | <a class="el" href="../../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html">List Remove</a> | <a class="el" href="../../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html">List Set</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,158 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: save</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">save</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md40"></a>
autotoc_md40</h2>
<p>title: ArmaDragonflyClient - Save DB icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md41"></a>
excerpt: Save DB to disc.</h2>
<h1><a class="anchor" id="autotoc_md42"></a>
dragonfly_db_fnc_save</h1>
<h2><a class="anchor" id="autotoc_md43"></a>
Description</h2>
<p>Saves the entire database to disk storage. This function persists all data (key-value pairs, hash tables, and lists) to a file, allowing it to be retrieved later even after server restart.</p>
<h2><a class="anchor" id="autotoc_md44"></a>
Syntax</h2>
<div class="fragment"><div class="line">[] call dragonfly_db_fnc_save</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md45"></a>
Parameters</h2>
<p>None. The function saves the database without any parameters.</p>
<h2><a class="anchor" id="autotoc_md46"></a>
Return Value</h2>
<p>None. The operation runs synchronously and saves the database immediately.</p>
<h2><a class="anchor" id="autotoc_md47"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md48"></a>
Save the database without creating a backup:</h3>
<div class="fragment"><div class="line">[] call dragonfly_db_fnc_save;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md49"></a>
Call the save function remotely from a client:</h3>
<div class="fragment"><div class="line">[] remoteExecCall [&quot;dragonfly_db_fnc_save&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md50"></a>
Notes</h2>
<ul>
<li>This function should be called periodically to ensure data persistence</li>
<li>Saving is a resource-intensive operation, so it shouldn't be called too frequently</li>
<li>Consider saving before mission end or during low-activity periods</li>
</ul>
<h2><a class="anchor" id="autotoc_md51"></a>
Related Functions</h2>
<p>None.</p>
<h2><a class="anchor" id="autotoc_md52"></a>
Links</h2>
<p>None. </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,175 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: get</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">get</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md23"></a>
autotoc_md23</h2>
<p>title: ArmaDragonflyClient - Get Key icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md24"></a>
excerpt: Get the value of stored key from DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md25"></a>
dragonfly_db_fnc_get</h1>
<h2><a class="anchor" id="autotoc_md26"></a>
Description</h2>
<p>Retrieves the value of a stored key from the database. This function performs an asynchronous request to the database and passes the retrieved data to the specified callback function.</p>
<h2><a class="anchor" id="autotoc_md27"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_key, _function, _call, _netId] call dragonfly_db_fnc_get</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md28"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_key</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the stored key to retrieve from the database </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_function</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the function to call when data is retrieved </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_call</code> </td><td class="markdownTableBodyNone">Boolean </td><td class="markdownTableBodyNone">Whether to call the function directly (true) or spawn (false) </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_netId</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">(Optional) NetID of the player to whom the data should be returned </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md29"></a>
Return Value</h2>
<p>None. When data is retrieved, it will be passed to the specified function. The operation runs asynchronously.</p>
<h2><a class="anchor" id="autotoc_md30"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md31"></a>
Retrieve data in singleplayer or on the server:</h3>
<div class="fragment"><div class="line">[getPlayerUID player, &quot;dragonfly_db_fnc_test&quot;] call dragonfly_db_fnc_get;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md32"></a>
Retrieve data on the server and send to a specific client:</h3>
<div class="fragment"><div class="line">[getPlayerUID player, &quot;dragonfly_db_fnc_test&quot;, false, netId player] remoteExecCall [&quot;dragonfly_db_fnc_get&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md33"></a>
Notes</h2>
<ul>
<li>The function exit with an error if the key or function parameters are empty</li>
<li>Data is processed through the scheduler system, which manages callback responses</li>
<li>For large data that exceeds buffer limits, it will be automatically chunked and reassembled</li>
<li>The callback function must be defined to accept the retrieved data</li>
<li>The <code>_call</code> parameter determines whether the callback is executed directly or spawned in a separate thread</li>
</ul>
<h2><a class="anchor" id="autotoc_md34"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_set</code>: Stores a value by key</li>
<li><code>dragonfly_db_fnc_delete</code>: Removes a value by key</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback response</li>
</ul>
<h2><a class="anchor" id="autotoc_md35"></a>
Links</h2>
<p><a class="el" href="../../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html">Delete Key</a> | <a class="el" href="../../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html">Get Key</a> | <a class="el" href="../../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html">Set Key</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,186 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: listGet</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">listGet</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md293"></a>
autotoc_md293</h2>
<p>title: ArmaDragonflyClient - List Get icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md294"></a>
excerpt: Get element of list stored at key from DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md295"></a>
dragonfly_db_fnc_listGet</h1>
<h2><a class="anchor" id="autotoc_md296"></a>
Description</h2>
<p>Retrieves a specific element from a list stored in the database by its index. This function accesses a single item from a list using its position number and returns the data through a callback function. It's useful for accessing individual pieces of data from a sequence without retrieving the entire list.</p>
<h2><a class="anchor" id="autotoc_md297"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_key, _index, _function, _call, _netId] call dragonfly_db_fnc_listGet</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md298"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_key</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the list </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_index</code> </td><td class="markdownTableBodyNone">Number </td><td class="markdownTableBodyNone">Index position of the element to retrieve (0-based) </td><td class="markdownTableBodyNone">-1 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_function</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the function to receive the retrieved data </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_call</code> </td><td class="markdownTableBodyNone">Boolean </td><td class="markdownTableBodyNone">Whether to call the function directly (true) or spawn (false) </td><td class="markdownTableBodyNone">false </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_netId</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">(Optional) NetID of the player to receive the data </td><td class="markdownTableBodyNone">"" </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md299"></a>
Return Value</h2>
<p>None. The retrieved data is passed to the specified callback function asynchronously.</p>
<h2><a class="anchor" id="autotoc_md300"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md301"></a>
Retrieve a specific event log entry:</h3>
<div class="fragment"><div class="line">[&quot;events&quot;, 0, &quot;dragonfly_db_fnc_test&quot;] call dragonfly_db_fnc_listGet;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md302"></a>
Retrieve data with synchronous callback:</h3>
<div class="fragment"><div class="line">[&quot;messages&quot;, 5, &quot;dragonfly_db_fnc_processMessage&quot;, true] call dragonfly_db_fnc_listGet;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md303"></a>
Retrieve data and send it to a specific client:</h3>
<div class="fragment"><div class="line">[&quot;notifications&quot;, 0, &quot;dragonfly_db_fnc_displayNotification&quot;, false, netId player] remoteExecCall [&quot;dragonfly_db_fnc_listGet&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md304"></a>
Notes</h2>
<ul>
<li>Retrieves a single element from a list by its index position</li>
<li>The key, index, and function parameters are required and validated</li>
<li>Index is zero-based (the first element is at index 0)</li>
<li>If the index is out of bounds or the list doesn't exist, no data will be returned</li>
<li>The data is retrieved asynchronously through the extension's callback system</li>
<li>When a netId is provided, the data is sent to that specific client</li>
<li>The <code>_call</code> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</li>
<li>For retrieving multiple elements, use <code>listLoad</code> instead</li>
<li>All operations are logged for debugging purposes</li>
</ul>
<h2><a class="anchor" id="autotoc_md305"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_listAdd</code>: Adds an element to a list</li>
<li><code>dragonfly_db_fnc_listLoad</code>: Retrieves a range of elements from a list</li>
<li><code>dragonfly_db_fnc_listSet</code>: Replaces a specific element in a list</li>
<li><code>dragonfly_db_fnc_listRemove</code>: Removes a specific element from a list</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback from the database extension</li>
</ul>
<h2><a class="anchor" id="autotoc_md306"></a>
Links</h2>
<p><a class="el" href="../../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html">List Add</a> | <a class="el" href="../../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html">List Get</a> | <a class="el" href="../../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html">List Load</a> | <a class="el" href="../../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html">List Remove</a> | <a class="el" href="../../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html">List Set</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,180 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: handler</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">handler</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md81"></a>
autotoc_md81</h2>
<p>title: ArmaDragonflyClient - Handler icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md82"></a>
excerpt: Handle data from DB.</h2>
<h1><a class="anchor" id="autotoc_md83"></a>
dragonfly_db_fnc_handler</h1>
<h2><a class="anchor" id="autotoc_md84"></a>
Description</h2>
<p>Handles data received from the database and routes it to the appropriate function. This function is a critical component of the callback system, receiving data from database operations and directing it to the specified function, either locally or to a remote client.</p>
<h2><a class="anchor" id="autotoc_md85"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_uniqueID, _function, _call, _data, _netId] call dragonfly_db_fnc_handler</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md86"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_uniqueID</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Unique identifier for the data chunk </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_function</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of function to receive the data </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_call</code> </td><td class="markdownTableBodyNone">Boolean </td><td class="markdownTableBodyNone">Whether to call the function directly (true) or spawn (false) </td><td class="markdownTableBodyNone">false </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_data</code> </td><td class="markdownTableBodyNone">Array, String, Number, or Boolean </td><td class="markdownTableBodyNone">The data retrieved from the database </td><td class="markdownTableBodyNone">[] </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_netId</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">(Optional) NetID of the player to receive the data </td><td class="markdownTableBodyNone">nil </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md87"></a>
Return Value</h2>
<p>None. The data is passed to the specified function for processing.</p>
<h2><a class="anchor" id="autotoc_md88"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md89"></a>
Process data locally:</h3>
<div class="fragment"><div class="line">[&quot;0123456789&quot;, &quot;dragonfly_db_fnc_test&quot;, false, [&quot;Hello World!&quot;]] call dragonfly_db_fnc_handler;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md90"></a>
Send data to a specific client:</h3>
<div class="fragment"><div class="line">[&quot;0123456789&quot;, &quot;dragonfly_db_fnc_test&quot;, false, [&quot;Hello World!&quot;], netId player] remoteExecCall [&quot;dragonfly_db_fnc_handler&quot;, 2, false];</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md91"></a>
Process data with direct call (synchronous):</h3>
<div class="fragment"><div class="line">[&quot;0123456789&quot;, &quot;dragonfly_db_fnc_processInventory&quot;, true, [[&quot;weapon1&quot;, 30], [&quot;item2&quot;, 5]]] call dragonfly_db_fnc_handler;</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md92"></a>
Notes</h2>
<ul>
<li>The function validates that both the function name and data are valid before proceeding</li>
<li>When a netId is provided, the data is sent to that specific client using remoteExec</li>
<li>The <code>_call</code> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</li>
<li>This function is typically called by the scheduler or other core components rather than directly by user code</li>
<li>Each handler call is logged, which is useful for debugging data flow</li>
</ul>
<h2><a class="anchor" id="autotoc_md93"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes callbacks from the database extension</li>
<li><code>dragonfly_db_fnc_fetch</code>: Assembles data chunks for large datasets</li>
<li><code>dragonfly_db_fnc_addTask</code>: Adds tasks to the database operation queue</li>
</ul>
<h2><a class="anchor" id="autotoc_md94"></a>
Links</h2>
<p><a class="el" href="../../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html">Add Task</a> | <a class="el" href="../../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html">Handler</a> | <a class="el" href="../../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html">Init</a> | <a class="el" href="../../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html">Print Addon Name</a> | <a class="el" href="../../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html">Process Queue</a> | <a class="el" href="../../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html">Scheduler</a> | <a class="el" href="../../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html">Test</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,163 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: printAddonName</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">printAddonName</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md106"></a>
autotoc_md106</h2>
<p>title: ArmaDragonflyClient - Print Addon Name icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md107"></a>
excerpt: Displays the addon name in system chat.</h2>
<h1><a class="anchor" id="autotoc_md108"></a>
dragonfly_db_fnc_printAddonName</h1>
<h2><a class="anchor" id="autotoc_md109"></a>
Description</h2>
<p>Displays a thank you message with the addon name in the system chat. This is a simple utility function that can be used to acknowledge the use of the framework or to verify that the addon is properly loaded.</p>
<h2><a class="anchor" id="autotoc_md110"></a>
Syntax</h2>
<div class="fragment"><div class="line">[] call dragonfly_db_fnc_printAddonName</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md111"></a>
Parameters</h2>
<p>None. This function does not require any parameters.</p>
<h2><a class="anchor" id="autotoc_md112"></a>
Return Value</h2>
<p>None. The function outputs a message to the system chat.</p>
<h2><a class="anchor" id="autotoc_md113"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md114"></a>
Display the addon name message:</h3>
<div class="fragment"><div class="line">[] call dragonfly_db_fnc_printAddonName;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md115"></a>
Use in a welcome script:</h3>
<div class="fragment"><div class="line">if (isServer) then {</div>
<div class="line"> [] remoteExec [&quot;dragonfly_db_fnc_printAddonName&quot;, 0, true];</div>
<div class="line">};</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md116"></a>
Notes</h2>
<ul>
<li>The function uses the ADDON macro defined in script_component.hpp</li>
<li>This displays a message directly in the player's system chat</li>
<li>Can be useful as a quick verification that the addon is loaded correctly</li>
<li>Often used during development or for first-time users</li>
</ul>
<h2><a class="anchor" id="autotoc_md117"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_init</code>: Initializes the database system</li>
</ul>
<h2><a class="anchor" id="autotoc_md118"></a>
Links</h2>
<p><a class="el" href="../../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html">Add Task</a> | <a class="el" href="../../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html">Handler</a> | <a class="el" href="../../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html">Init</a> | <a class="el" href="../../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html">Print Addon Name</a> | <a class="el" href="../../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html">Process Queue</a> | <a class="el" href="../../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html">Scheduler</a> | <a class="el" href="../../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html">Test</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,175 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: fetch</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">fetch</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md13"></a>
autotoc_md13</h2>
<p>title: ArmaDragonflyClient - Fetch icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md14"></a>
excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.</h2>
<h1><a class="anchor" id="autotoc_md15"></a>
dragonfly_db_fnc_fetch</h1>
<h2><a class="anchor" id="autotoc_md16"></a>
Description</h2>
<p>Handles data chunks received from the database extension when data is too large to be returned in a single callback. This function collects all chunks of data, reassembles them in the correct order, and then passes the complete data to the handler function.</p>
<h2><a class="anchor" id="autotoc_md17"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_uniqueID, _function, _index, _total, _datachunk, _call, _netId] call dragonfly_db_fnc_fetch</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md18"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_uniqueID</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Unique identifier for this data fetch operation </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_function</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the function to call after data is assembled </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_index</code> </td><td class="markdownTableBodyNone">Number </td><td class="markdownTableBodyNone">Current chunk index (0-based) </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_total</code> </td><td class="markdownTableBodyNone">Number </td><td class="markdownTableBodyNone">Total number of chunks expected </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_datachunk</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">The chunk of data being received </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_call</code> </td><td class="markdownTableBodyNone">Boolean </td><td class="markdownTableBodyNone">Whether to call the function directly (true) or spawn (false) </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_netId</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">(Optional) NetID of the player to whom the data belongs </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md19"></a>
Return Value</h2>
<p>None. When all chunks are received, the function will:</p><ol type="1">
<li>Assemble the complete data string</li>
<li>Parse it as a simple array</li>
<li>Call the specified handler function with the parsed data</li>
</ol>
<h2><a class="anchor" id="autotoc_md20"></a>
Examples</h2>
<p>This function is typically not called directly but is triggered by the extension's callback mechanism when large datasets are retrieved.</p>
<h2><a class="anchor" id="autotoc_md21"></a>
Notes</h2>
<ul>
<li>The function stores received chunks in the global array <code>dragonfly_db_fetch_array</code></li>
<li>Chunks are sorted by their index to ensure correct assembly regardless of arrival order</li>
<li>After successful processing, the chunks for this uniqueID are removed from the array</li>
<li>This function is essential for handling large datasets that exceed the callback buffer limit</li>
</ul>
<h2><a class="anchor" id="autotoc_md22"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_handler</code>: Receives the assembled data and routes it to the appropriate function</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Manages the callback queue and triggers data fetching </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,181 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: hashSetId</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">hashSetId</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md247"></a>
autotoc_md247</h2>
<p>title: ArmaDragonflyClient - Hash Set ID icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md248"></a>
excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md249"></a>
dragonfly_db_fnc_hashSetId</h1>
<h2><a class="anchor" id="autotoc_md250"></a>
Description</h2>
<p>Sets the value of a specified field in a specific hash table identified by its key. This function allows storing various data types (arrays, strings, numbers, or booleans) in a targeted hash table, making it ideal for player-specific or entity-specific data storage. It provides a way to organize related data under a common identifier.</p>
<h2><a class="anchor" id="autotoc_md251"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_key, _keyField, _data] call dragonfly_db_fnc_hashSetId</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md252"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_key</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Identifier of the hash table </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_keyField</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the field in the hash to set </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_data</code> </td><td class="markdownTableBodyNone">Array, String, Number, or Boolean </td><td class="markdownTableBodyNone">The value to store in the hash field </td><td class="markdownTableBodyNone">[] </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md253"></a>
Return Value</h2>
<p>None. The operation runs synchronously to store the data.</p>
<h2><a class="anchor" id="autotoc_md254"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md255"></a>
Store a player's loadout under their UID:</h3>
<div class="fragment"><div class="line">[getPlayerUID player, &quot;loadout&quot;, [getUnitLoadout player]] call dragonfly_db_fnc_hashSetId;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md256"></a>
Store vehicle data:</h3>
<div class="fragment"><div class="line">[&quot;vehicle_123&quot;, &quot;status&quot;, [true, 100, 75, &quot;active&quot;]] call dragonfly_db_fnc_hashSetId;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md257"></a>
Store player data from a client:</h3>
<div class="fragment"><div class="line">[getPlayerUID player, &quot;stats&quot;, [rank player, score player, name player]] remoteExecCall [&quot;dragonfly_db_fnc_hashSetId&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md258"></a>
Notes</h2>
<ul>
<li>Stores a single field-value pair in a specific hash table identified by <code>_key</code></li>
<li>All three parameters (key, keyField, and data) are required and validated</li>
<li>If the hash table doesn't exist, it will be created automatically</li>
<li>If the field already exists in the hash table, its value will be overwritten</li>
<li>Supports various data types: arrays, strings, numbers, and booleans</li>
<li>Player UIDs are commonly used as keys to store player-specific data</li>
<li>Complex data structures should be serialized into arrays</li>
<li>The operation is executed immediately and synchronously</li>
<li>All operations are logged for debugging purposes</li>
</ul>
<h2><a class="anchor" id="autotoc_md259"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_hashSet</code>: Sets a field value in the global hash table</li>
<li><code>dragonfly_db_fnc_hashGetId</code>: Retrieves a field value from a specific hash table</li>
<li><code>dragonfly_db_fnc_hashGetAllId</code>: Retrieves all fields from a specific hash table</li>
<li><code>dragonfly_db_fnc_hashSetIdBulk</code>: Sets multiple field-value pairs in multiple hash tables</li>
</ul>
<h2><a class="anchor" id="autotoc_md260"></a>
Links</h2>
<p><a class="el" href="../../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html">Hash Get</a> | <a class="el" href="../../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html">Hash Get All</a> | <a class="el" href="../../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html">Hash Get All ID</a> | <a class="el" href="../../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html">Hash Get ID</a> | <a class="el" href="../../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html">Hash Set</a> | <a class="el" href="../../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html">Hash Set Bulk</a> | <a class="el" href="../../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html">Hash Set ID</a> | <a class="el" href="../../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html">Hash Set ID Bulk</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,173 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: test</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">test</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md149"></a>
autotoc_md149</h2>
<p>title: ArmaDragonflyClient - Test icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md150"></a>
excerpt: Test Function.</h2>
<h1><a class="anchor" id="autotoc_md151"></a>
dragonfly_db_fnc_test</h1>
<h2><a class="anchor" id="autotoc_md152"></a>
Description</h2>
<p>A simple test function for verifying database operations. This function displays the received data in a hint message and logs it to the RPT file. It's primarily used for testing database retrieval operations and callback functionality.</p>
<h2><a class="anchor" id="autotoc_md153"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_value] spawn dragonfly_db_fnc_test</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md154"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_value</code> </td><td class="markdownTableBodyNone">Array, String, Number, or Boolean </td><td class="markdownTableBodyNone">The value to display and log </td><td class="markdownTableBodyNone">[] </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md155"></a>
Return Value</h2>
<p>The same value that was passed to the function. Also sets the global variable <code>dragonfly_db_test</code> to this value.</p>
<h2><a class="anchor" id="autotoc_md156"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md157"></a>
Test with a simple string:</h3>
<div class="fragment"><div class="line">[&quot;Hello World!&quot;] spawn dragonfly_db_fnc_test;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md158"></a>
Test database retrieval by specifying this as callback function:</h3>
<div class="fragment"><div class="line">[&quot;playerStats&quot;, &quot;dragonfly_db_fnc_test&quot;] call dragonfly_db_fnc_get;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md159"></a>
Test from client to server:</h3>
<div class="fragment"><div class="line">[&quot;Database is working!&quot;] remoteExec [&quot;dragonfly_db_fnc_test&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md160"></a>
Notes</h2>
<ul>
<li>Displays the received value using <code>hint</code></li>
<li>Logs the same value to the RPT file</li>
<li>Stores the value in the global variable <code>dragonfly_db_test</code> for later inspection</li>
<li>Commonly used as a callback function for database operations</li>
<li>Useful for debugging and verifying data flow</li>
<li>Can be called directly or specified as a callback in other functions</li>
</ul>
<h2><a class="anchor" id="autotoc_md161"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_get</code>: Retrieves values from the database</li>
<li><code>dragonfly_db_fnc_handler</code>: Routes data to callback functions</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Manages the callback system</li>
</ul>
<h2><a class="anchor" id="autotoc_md162"></a>
Links</h2>
<p><a class="el" href="../../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html">Add Task</a> | <a class="el" href="../../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html">Handler</a> | <a class="el" href="../../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html">Init</a> | <a class="el" href="../../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html">Print Addon Name</a> | <a class="el" href="../../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html">Process Queue</a> | <a class="el" href="../../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html">Scheduler</a> | <a class="el" href="../../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html">Test</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,174 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: set</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">set</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md53"></a>
autotoc_md53</h2>
<p>title: ArmaDragonflyClient - Set Key icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md54"></a>
excerpt: Set the value of stored key from DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md55"></a>
dragonfly_db_fnc_set</h1>
<h2><a class="anchor" id="autotoc_md56"></a>
Description</h2>
<p>Stores a value in the database with the specified key. This function allows saving various data types (arrays, strings, numbers, or booleans) that can be retrieved later using the key.</p>
<h2><a class="anchor" id="autotoc_md57"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_key, _data] call dragonfly_db_fnc_set</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md58"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_key</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the key to store the data under </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_data</code> </td><td class="markdownTableBodyNone">Array, String, Number, or Boolean </td><td class="markdownTableBodyNone">The value to store in the database </td><td class="markdownTableBodyNone">[] </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md59"></a>
Return Value</h2>
<p>None. The operation runs asynchronously.</p>
<h2><a class="anchor" id="autotoc_md60"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md61"></a>
Store a simple array:</h3>
<div class="fragment"><div class="line">[&quot;playerInventory&quot;, [&quot;item1&quot;, &quot;item2&quot;, &quot;item3&quot;]] call dragonfly_db_fnc_set;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md62"></a>
Store player data under their UID:</h3>
<div class="fragment"><div class="line">[getPlayerUID player, [name player, getPos player, getAllGear player]] call dragonfly_db_fnc_set;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md63"></a>
Call the set function remotely from a client:</h3>
<div class="fragment"><div class="line">[&quot;serverSetting&quot;, [true, 30, &quot;normal&quot;]] remoteExecCall [&quot;dragonfly_db_fnc_set&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md64"></a>
Notes</h2>
<ul>
<li>The function validates both the key and data before attempting to store</li>
<li>If the key already exists, its value will be overwritten</li>
<li>Complex data structures should be serialized into arrays</li>
<li>There are no size limits for data, but extremely large values might impact performance</li>
<li>For structured data, consider using hash tables instead of key-value pairs</li>
</ul>
<h2><a class="anchor" id="autotoc_md65"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_get</code>: Retrieves a value by key</li>
<li><code>dragonfly_db_fnc_delete</code>: Removes a value by key</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback response</li>
</ul>
<h2><a class="anchor" id="autotoc_md66"></a>
Links</h2>
<p><a class="el" href="../../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html">Delete Key</a> | <a class="el" href="../../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html">Get Key</a> | <a class="el" href="../../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html">Set Key</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,176 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: listLoad</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">listLoad</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md307"></a>
autotoc_md307</h2>
<p>title: ArmaDragonflyClient - List Load icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md308"></a>
excerpt: Get all elements of a list stored at a key from DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md309"></a>
dragonfly_db_fnc_listLoad</h1>
<h2><a class="anchor" id="autotoc_md310"></a>
Description</h2>
<p>Retrieves all elements of a list stored at a specified key from the DragonflyClient database. This function is useful when you need to access the complete list data rather than individual elements, allowing operations on the entire dataset. The retrieved data is passed to a callback function for processing.</p>
<h2><a class="anchor" id="autotoc_md311"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_key, _function, _call, _netId] call dragonfly_db_fnc_listLoad</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md312"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">_key </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">The key identifying the list to be retrieved </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">_function </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">The name of the function that will receive the retrieved data </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">_call </td><td class="markdownTableBodyNone">Boolean </td><td class="markdownTableBodyNone">Whether to call the function in an unscheduled environment </td><td class="markdownTableBodyNone">false </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">_netId </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">The NetID of the target to return data from the function (multiplayer only) </td><td class="markdownTableBodyNone">"" </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md313"></a>
Return Value</h2>
<p>No value is returned directly. The retrieved list data is passed to the specified callback function asynchronously.</p>
<h2><a class="anchor" id="autotoc_md314"></a>
Examples</h2>
<p><b>Retrieve all event logs:</b> </p><div class="fragment"><div class="line">[&quot;events&quot;, &quot;myProject_fnc_processEventLogs&quot;] call dragonfly_db_fnc_listLoad;</div>
</div><!-- fragment --><p><b>Retrieve a player list with synchronous callback:</b> </p><div class="fragment"><div class="line">[&quot;playerList&quot;, &quot;myProject_fnc_processPlayerList&quot;, true] call dragonfly_db_fnc_listLoad;</div>
</div><!-- fragment --><p><b>Send mission data to a specific client:</b> </p><div class="fragment"><div class="line">[&quot;missionData&quot;, &quot;myProject_fnc_processMissionData&quot;, false, netId player] remoteExecCall [&quot;dragonfly_db_fnc_listLoad&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md315"></a>
Notes</h2>
<ul>
<li>This function retrieves the entire list stored at the specified key, making it useful when you need to process multiple elements together.</li>
<li>Both the <code>_key</code> and <code>_function</code> parameters are required. The function will exit without action if either is empty.</li>
<li>The retrieved data is processed asynchronously through the scheduler system and passed to the specified callback function.</li>
<li>For multiplayer scenarios, you can specify a target client using the <code>_netId</code> parameter to send the retrieved data to that specific client.</li>
<li>The <code>_call</code> parameter determines whether the callback function is executed in an unscheduled environment (true) or scheduled environment (false).</li>
<li>This function uses the underlying "listrng" extension with a range from 0 to -1, which retrieves all elements in the list.</li>
<li>All list operations are logged for debugging purposes.</li>
</ul>
<h2><a class="anchor" id="autotoc_md316"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_listAdd</code>: Adds an element to a list</li>
<li><code>dragonfly_db_fnc_listGet</code>: Retrieves a specific element from a list</li>
<li><code>dragonfly_db_fnc_listSet</code>: Replaces a specific element in a list</li>
<li><code>dragonfly_db_fnc_listRemove</code>: Removes a specific element from a list</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback from the database extension</li>
</ul>
<h2><a class="anchor" id="autotoc_md317"></a>
Links</h2>
<p><a class="el" href="../../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html">List Add</a> | <a class="el" href="../../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html">List Get</a> | <a class="el" href="../../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html">List Load</a> | <a class="el" href="../../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html">List Remove</a> | <a class="el" href="../../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html">List Set</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,184 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: hashGet</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">hashGet</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md163"></a>
autotoc_md163</h2>
<p>title: ArmaDragonflyClient - Hash Get icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md164"></a>
excerpt: Get a field value from the current client's hash table in DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md165"></a>
dragonfly_db_fnc_hashGet</h1>
<h2><a class="anchor" id="autotoc_md166"></a>
Description</h2>
<p>Retrieves the value associated with a specific field in the hash table of the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than <code>hashGetId</code> which requires manually specifying an ID. It accesses hash data asynchronously and returns the result through a callback function.</p>
<h2><a class="anchor" id="autotoc_md167"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_keyField, _function, _call, _netId] call dragonfly_db_fnc_hashGet</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md168"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_keyField</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the field in the hash to retrieve </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_function</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the function to receive the retrieved data </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_call</code> </td><td class="markdownTableBodyNone">Boolean </td><td class="markdownTableBodyNone">Whether to call the function directly (true) or spawn (false) </td><td class="markdownTableBodyNone">false </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_netId</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">(Optional) NetID of the player to receive the data </td><td class="markdownTableBodyNone">"" </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md169"></a>
Return Value</h2>
<p>None. The retrieved data is passed to the specified callback function asynchronously.</p>
<h2><a class="anchor" id="autotoc_md170"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md171"></a>
Retrieve a player's loadout:</h3>
<div class="fragment"><div class="line">[&quot;loadout&quot;, &quot;dragonfly_db_fnc_test&quot;] call dragonfly_db_fnc_hashGet;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md172"></a>
Retrieve data with synchronous callback:</h3>
<div class="fragment"><div class="line">[&quot;playerScore&quot;, &quot;dragonfly_db_fnc_processScore&quot;, true] call dragonfly_db_fnc_hashGet;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md173"></a>
Retrieve data and send it to a specific client:</h3>
<div class="fragment"><div class="line">[&quot;loadout&quot;, &quot;dragonfly_db_fnc_test&quot;, false, netId player] remoteExecCall [&quot;dragonfly_db_fnc_hashGet&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md174"></a>
Notes</h2>
<ul>
<li>Retrieves a value from the current client's hash table</li>
<li>The data is retrieved asynchronously through the extension's callback system</li>
<li>Both the field name and callback function name must be provided</li>
<li>Input validation ensures both required parameters are non-empty</li>
<li>When a netId is provided, the data is sent to that specific client</li>
<li>The <code>_call</code> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</li>
<li>This function automatically determines which hash table to use based on the caller's identity</li>
<li>Use <code>hashGetId</code> when you need to specify a particular hash table by ID</li>
<li>All operations are logged for debugging purposes</li>
</ul>
<h2><a class="anchor" id="autotoc_md175"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_hashGetId</code>: Retrieves a field value from a specific hash table (when you need to specify the ID)</li>
<li><code>dragonfly_db_fnc_hashGetAll</code>: Retrieves all fields from the current client's hash table</li>
<li><code>dragonfly_db_fnc_hashGetAllId</code>: Retrieves all fields from a specific hash table</li>
<li><code>dragonfly_db_fnc_hashSet</code>: Sets a field value in the current client's hash table</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback from the database extension</li>
</ul>
<h2><a class="anchor" id="autotoc_md176"></a>
Links</h2>
<p><a class="el" href="../../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html">Hash Get</a> | <a class="el" href="../../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html">Hash Get All</a> | <a class="el" href="../../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html">Hash Get All ID</a> | <a class="el" href="../../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html">Hash Get ID</a> | <a class="el" href="../../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html">Hash Set</a> | <a class="el" href="../../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html">Hash Set Bulk</a> | <a class="el" href="../../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html">Hash Set ID</a> | <a class="el" href="../../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html">Hash Set ID Bulk</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,182 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: hashGetAll</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">hashGetAll</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md177"></a>
autotoc_md177</h2>
<p>title: ArmaDragonflyClient - Hash Get All icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md178"></a>
excerpt: Get all fields from the current client's hash table in DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md179"></a>
dragonfly_db_fnc_hashGetAll</h1>
<h2><a class="anchor" id="autotoc_md180"></a>
Description</h2>
<p>Retrieves all fields and values from the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than <code>hashGetAllId</code> which requires manually specifying an ID. It returns the entire hash table data through a callback function, allowing access to all stored key-value pairs at once.</p>
<h2><a class="anchor" id="autotoc_md181"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_function, _call, _netId] call dragonfly_db_fnc_hashGetAll</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md182"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_function</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the function to receive the retrieved data </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_call</code> </td><td class="markdownTableBodyNone">Boolean </td><td class="markdownTableBodyNone">Whether to call the function directly (true) or spawn (false) </td><td class="markdownTableBodyNone">false </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_netId</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">(Optional) NetID of the player to receive the data </td><td class="markdownTableBodyNone">"" </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md183"></a>
Return Value</h2>
<p>None. The retrieved data is passed to the specified callback function asynchronously.</p>
<h2><a class="anchor" id="autotoc_md184"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md185"></a>
Retrieve all client hash data:</h3>
<div class="fragment"><div class="line">[&quot;dragonfly_db_fnc_test&quot;] call dragonfly_db_fnc_hashGetAll;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md186"></a>
Retrieve data with synchronous callback:</h3>
<div class="fragment"><div class="line">[&quot;dragonfly_db_fnc_processAllData&quot;, true] call dragonfly_db_fnc_hashGetAll;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md187"></a>
Retrieve data and send it to a specific client:</h3>
<div class="fragment"><div class="line">[&quot;dragonfly_db_fnc_test&quot;, false, netId player] remoteExecCall [&quot;dragonfly_db_fnc_hashGetAll&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md188"></a>
Notes</h2>
<ul>
<li>Returns the complete hash table for the current client with all fields and values as a nested array</li>
<li>The data is retrieved asynchronously through the extension's callback system</li>
<li>The callback function name must be provided and is validated</li>
<li>When a netId is provided, the data is sent to that specific client</li>
<li>The <code>_call</code> parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)</li>
<li>This function automatically determines which hash table to use based on the caller's identity</li>
<li>Use <code>hashGetAllId</code> when you need to specify a particular hash table by ID</li>
<li>For large hash tables, retrieving all data may impact performance</li>
<li>All operations are logged for debugging purposes</li>
</ul>
<h2><a class="anchor" id="autotoc_md189"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_hashGet</code>: Retrieves a specific field value from the current client's hash table</li>
<li><code>dragonfly_db_fnc_hashGetId</code>: Retrieves a specific field value from a specific hash table (when you need to specify the ID)</li>
<li><code>dragonfly_db_fnc_hashGetAllId</code>: Retrieves all fields from a specific hash table (when you need to specify the ID)</li>
<li><code>dragonfly_db_fnc_hashSet</code>: Sets a field value in the current client's hash table</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback from the database extension</li>
</ul>
<h2><a class="anchor" id="autotoc_md190"></a>
Links</h2>
<p><a class="el" href="../../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html">Hash Get</a> | <a class="el" href="../../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html">Hash Get All</a> | <a class="el" href="../../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html">Hash Get All ID</a> | <a class="el" href="../../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html">Hash Get ID</a> | <a class="el" href="../../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html">Hash Set</a> | <a class="el" href="../../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html">Hash Set Bulk</a> | <a class="el" href="../../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html">Hash Set ID</a> | <a class="el" href="../../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html">Hash Set ID Bulk</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,179 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: listAdd</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">listAdd</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md279"></a>
autotoc_md279</h2>
<p>title: ArmaDragonflyClient - List Add icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md280"></a>
excerpt: Add element to list stored at key from DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md281"></a>
dragonfly_db_fnc_listAdd</h1>
<h2><a class="anchor" id="autotoc_md282"></a>
Description</h2>
<p>Adds an element to a list stored in the database under the specified key. This function appends values to an existing list or creates a new list if it doesn't exist. It's particularly useful for logging, event tracking, or maintaining collections of data that grow over time.</p>
<h2><a class="anchor" id="autotoc_md283"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_key, _data] call dragonfly_db_fnc_listAdd</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md284"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_key</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the list to add the element to </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_data</code> </td><td class="markdownTableBodyNone">Array, String, Number, or Boolean </td><td class="markdownTableBodyNone">The value to insert into the list </td><td class="markdownTableBodyNone">[] </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md285"></a>
Return Value</h2>
<p>None. The operation runs synchronously to add the element to the list.</p>
<h2><a class="anchor" id="autotoc_md286"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md287"></a>
Add an event log entry:</h3>
<div class="fragment"><div class="line">[&quot;events&quot;, [&quot;Server state saved to DB &quot; + systemTimeUTC]] call dragonfly_db_fnc_listAdd;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md288"></a>
Add a player message:</h3>
<div class="fragment"><div class="line">[&quot;messages&quot;, [name player + &quot;: &quot; + _messageText]] call dragonfly_db_fnc_listAdd;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md289"></a>
Add data from a client:</h3>
<div class="fragment"><div class="line">[&quot;playerActions&quot;, [getPlayerUID player, name player, &quot;logged in&quot;]] remoteExecCall [&quot;dragonfly_db_fnc_listAdd&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md290"></a>
Notes</h2>
<ul>
<li>Elements are added to the end of the list in the order they are inserted</li>
<li>If the list doesn't exist, it will be created automatically</li>
<li>Both the key and data parameters are required and validated</li>
<li>Lists can store various data types (arrays, strings, numbers, or booleans)</li>
<li>Useful for maintaining a history of events, logs, or sequential data</li>
<li>The operation is executed immediately and synchronously</li>
<li>New elements are always added to the end of the list</li>
<li>All operations are logged for debugging purposes</li>
</ul>
<h2><a class="anchor" id="autotoc_md291"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_listGet</code>: Retrieves a specific element from a list</li>
<li><code>dragonfly_db_fnc_listLoad</code>: Retrieves a range of elements from a list</li>
<li><code>dragonfly_db_fnc_listSet</code>: Replaces a specific element in a list</li>
<li><code>dragonfly_db_fnc_listRemove</code>: Removes a specific element from a list</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback from the database extension</li>
</ul>
<h2><a class="anchor" id="autotoc_md292"></a>
Links</h2>
<p><a class="el" href="../../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html">List Add</a> | <a class="el" href="../../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html">List Get</a> | <a class="el" href="../../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html">List Load</a> | <a class="el" href="../../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html">List Remove</a> | <a class="el" href="../../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html">List Set</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,178 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: hashSetBulk</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">hashSetBulk</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md233"></a>
autotoc_md233</h2>
<p>title: ArmaDragonflyClient - Hash Set Bulk icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md234"></a>
excerpt: Set multiple fields in the current client's hash table in DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md235"></a>
dragonfly_db_fnc_hashSetBulk</h1>
<h2><a class="anchor" id="autotoc_md236"></a>
Description</h2>
<p>Sets multiple field-value pairs in the hash table associated with the current client/player in a single operation. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than <code>hashSetIdBulk</code> which requires manually specifying an ID. It allows efficiently storing multiple related fields at once, reducing the number of separate database calls required.</p>
<h2><a class="anchor" id="autotoc_md237"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_data] call dragonfly_db_fnc_hashSetBulk</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md238"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_data</code> </td><td class="markdownTableBodyNone">Array </td><td class="markdownTableBodyNone">Array of alternating field names and values to store </td><td class="markdownTableBodyNone">[] </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md239"></a>
Return Value</h2>
<p>None. The operation runs synchronously to store all the data.</p>
<h2><a class="anchor" id="autotoc_md240"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md241"></a>
Store player loadout and position:</h3>
<div class="fragment"><div class="line">[[&quot;loadout&quot;, [getUnitLoadout player], &quot;position&quot;, [getPosASLVisual player]]] call dragonfly_db_fnc_hashSetBulk;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md242"></a>
Store multiple player settings:</h3>
<div class="fragment"><div class="line">[[&quot;difficulty&quot;, [&quot;regular&quot;], &quot;respawn&quot;, [true], &quot;tickets&quot;, [500]]] call dragonfly_db_fnc_hashSetBulk;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md243"></a>
Store player data from a client:</h3>
<div class="fragment"><div class="line">[[&quot;name&quot;, [name player], &quot;uid&quot;, [getPlayerUID player], &quot;score&quot;, [score player]]] remoteExecCall [&quot;dragonfly_db_fnc_hashSetBulk&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md244"></a>
Notes</h2>
<ul>
<li>The data array must be structured as alternating field names and values: <code>[field1, value1, field2, value2, ...]</code></li>
<li>Each field name must be a string</li>
<li>Values can be arrays, strings, numbers, or booleans</li>
<li>All field-value pairs are stored in a single database operation</li>
<li>If any of the fields already exist, their values will be overwritten</li>
<li>This function automatically determines which hash table to use based on the caller's identity</li>
<li>Use <code>hashSetIdBulk</code> when you need to specify a particular hash table by ID</li>
<li>More efficient than multiple individual <code>hashSet</code> calls when setting several fields</li>
<li>The operation is executed immediately and synchronously</li>
<li>All operations are logged for debugging purposes</li>
</ul>
<h2><a class="anchor" id="autotoc_md245"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_hashSet</code>: Sets a single field value in the current client's hash table</li>
<li><code>dragonfly_db_fnc_hashSetIdBulk</code>: Sets multiple field-value pairs in a specific hash table (when you need to specify the ID)</li>
<li><code>dragonfly_db_fnc_hashGetAll</code>: Retrieves all fields from the current client's hash table</li>
<li><code>dragonfly_db_fnc_hashGet</code>: Retrieves a specific field value from the current client's hash table </li>
</ul>
<h2><a class="anchor" id="autotoc_md246"></a>
Links</h2>
<p><a class="el" href="../../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html">Hash Get</a> | <a class="el" href="../../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html">Hash Get All</a> | <a class="el" href="../../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html">Hash Get All ID</a> | <a class="el" href="../../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html">Hash Get ID</a> | <a class="el" href="../../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html">Hash Set</a> | <a class="el" href="../../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html">Hash Set Bulk</a> | <a class="el" href="../../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html">Hash Set ID</a> | <a class="el" href="../../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html">Hash Set ID Bulk</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,157 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: init</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">init</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md95"></a>
autotoc_md95</h2>
<p>title: ArmaDragonflyClient - Initialization icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md96"></a>
excerpt: Initial Extension settings.</h2>
<h1><a class="anchor" id="autotoc_md97"></a>
dragonfly_db_fnc_init</h1>
<h2><a class="anchor" id="autotoc_md98"></a>
Description</h2>
<p>Initializes the ArmaDragonflyClient extension and sets up the initial settings. This function loads the extension, checks its version, sets the buffer size, and logs the initialization status. It is automatically called during mission startup.</p>
<h2><a class="anchor" id="autotoc_md99"></a>
Syntax</h2>
<div class="fragment"><div class="line">// This function is automatically called during initialization and doesn&#39;t need to be called directly</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md100"></a>
Parameters</h2>
<p>None. This function does not require any parameters.</p>
<h2><a class="anchor" id="autotoc_md101"></a>
Return Value</h2>
<p>None. The function sets up internal variables and logs initialization information.</p>
<h2><a class="anchor" id="autotoc_md102"></a>
Examples</h2>
<p>This function is automatically executed during framework initialization and doesn't need to be called manually.</p>
<h2><a class="anchor" id="autotoc_md103"></a>
Notes</h2>
<ul>
<li>Sets the global buffer size to 10240 bytes (10KB)</li>
<li>Logs the DLL version number for reference</li>
<li>Confirms successful loading of all functions</li>
<li>Outputs initialization status to the RPT logs</li>
<li>This is one of the first functions called when the framework loads</li>
</ul>
<h2><a class="anchor" id="autotoc_md104"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_save</code>: Saves database data to disk</li>
</ul>
<h2><a class="anchor" id="autotoc_md105"></a>
Links</h2>
<p><a class="el" href="../../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html">Add Task</a> | <a class="el" href="../../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html">Handler</a> | <a class="el" href="../../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html">Init</a> | <a class="el" href="../../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html">Print Addon Name</a> | <a class="el" href="../../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html">Process Queue</a> | <a class="el" href="../../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html">Scheduler</a> | <a class="el" href="../../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html">Test</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,186 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: addTask</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">addTask</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md67"></a>
autotoc_md67</h2>
<p>title: ArmaDragonflyClient - Add Task icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md68"></a>
excerpt: Add task to queue.</h2>
<h1><a class="anchor" id="autotoc_md69"></a>
dragonfly_db_fnc_addTask</h1>
<h2><a class="anchor" id="autotoc_md70"></a>
Description</h2>
<p>Adds a task to the database operation queue. This function is used to schedule database operations that can be processed sequentially, providing a way to manage multiple database requests in an organized manner.</p>
<h2><a class="anchor" id="autotoc_md71"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_taskType, _key, _keyField, _index, _value, _function, _call, _netId] call dragonfly_db_fnc_addTask</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md72"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_taskType</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Type of operation to perform (e.g., "hgetall") </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_key</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the stored key </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_keyField</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Field name for hash operations </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_index</code> </td><td class="markdownTableBodyNone">Number </td><td class="markdownTableBodyNone">Index for list operations </td><td class="markdownTableBodyNone">-1 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_value</code> </td><td class="markdownTableBodyNone">Array, String, Number, or Boolean </td><td class="markdownTableBodyNone">Value to store (for set operations) </td><td class="markdownTableBodyNone">[] </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_function</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of function to call with the result </td><td class="markdownTableBodyNone">"" </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_call</code> </td><td class="markdownTableBodyNone">Boolean </td><td class="markdownTableBodyNone">Whether to call the function directly (true) or spawn (false) </td><td class="markdownTableBodyNone">false </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>_netId</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">NetID of the target to receive the result </td><td class="markdownTableBodyNone">"" </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md73"></a>
Return Value</h2>
<p>None. The task is added to the queue and processed asynchronously.</p>
<h2><a class="anchor" id="autotoc_md74"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md75"></a>
Add a hash table retrieval task:</h3>
<div class="fragment"><div class="line">[&quot;hgetall&quot;, &quot;&quot;, &quot;&quot;, -1, [], &quot;dragonfly_db_fnc_test&quot;] call dragonfly_db_fnc_addTask;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md76"></a>
Add a player-specific task that returns data to a specific client:</h3>
<div class="fragment"><div class="line">[&quot;hgetallid&quot;, getPlayerUID player, &quot;&quot;, -1, [], &quot;dragonfly_db_fnc_test&quot;, false, netId player] remoteExecCall [&quot;dragonfly_db_fnc_addTask&quot;, 2, false];</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md77"></a>
Add a list operation task:</h3>
<div class="fragment"><div class="line">[&quot;listadd&quot;, &quot;playerMessages&quot;, &quot;&quot;, -1, [&quot;New message content&quot;], &quot;&quot;] call dragonfly_db_fnc_addTask;</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md78"></a>
Notes</h2>
<ul>
<li>Tasks are processed in the order they are added to the queue</li>
<li>If the queue is not currently being processed, this function will start the processing</li>
<li>The task type determines which database operation will be performed</li>
<li>This function is particularly useful for scheduling multiple related operations</li>
<li>All operations performed through the task queue are logged for debugging</li>
</ul>
<h2><a class="anchor" id="autotoc_md79"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_processQueue</code>: Processes the pending tasks in the queue</li>
<li><code>dragonfly_db_fnc_handler</code>: Handles the results of completed database operations</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Manages callback responses from the database</li>
</ul>
<h2><a class="anchor" id="autotoc_md80"></a>
Links</h2>
<p><a class="el" href="../../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html">Add Task</a> | <a class="el" href="../../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html">Handler</a> | <a class="el" href="../../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html">Init</a> | <a class="el" href="../../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html">Print Addon Name</a> | <a class="el" href="../../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html">Process Queue</a> | <a class="el" href="../../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html">Scheduler</a> | <a class="el" href="../../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html">Test</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,179 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: hashSetIdBulk</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">hashSetIdBulk</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md261"></a>
autotoc_md261</h2>
<p>title: ArmaDragonflyClient - Hash Set ID Bulk icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md262"></a>
excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md263"></a>
dragonfly_db_fnc_hashSetIdBulk</h1>
<h2><a class="anchor" id="autotoc_md264"></a>
Description</h2>
<p>Sets multiple field-value pairs in a specific hash table identified by its key in a single operation. This function allows efficiently storing multiple related fields at once for a specific identifier, reducing the number of separate database calls required. It's ideal for saving a collection of player-specific or entity-specific data.</p>
<h2><a class="anchor" id="autotoc_md265"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_data] call dragonfly_db_fnc_hashSetIdBulk</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md266"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_data</code> </td><td class="markdownTableBodyNone">Array </td><td class="markdownTableBodyNone">Array with key followed by alternating field names and values </td><td class="markdownTableBodyNone">[] </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md267"></a>
Return Value</h2>
<p>None. The operation runs synchronously to store all the data.</p>
<h2><a class="anchor" id="autotoc_md268"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md269"></a>
Store player loadout and position:</h3>
<div class="fragment"><div class="line">[[getPlayerUID player, &quot;loadout&quot;, [getUnitLoadout player], &quot;position&quot;, [getPosASLVisual player]]] call dragonfly_db_fnc_hashSetIdBulk;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md270"></a>
Store multiple vehicle properties:</h3>
<div class="fragment"><div class="line">[[&quot;vehicle_123&quot;, &quot;fuel&quot;, [0.75], &quot;damage&quot;, [0.2], &quot;crew&quot;, [[&quot;player1&quot;, &quot;player2&quot;]]]] call dragonfly_db_fnc_hashSetIdBulk;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md271"></a>
Store player data from a client:</h3>
<div class="fragment"><div class="line">[[getPlayerUID player, &quot;stats&quot;, [score player], &quot;inventory&quot;, [getAllGear player]]] remoteExecCall [&quot;dragonfly_db_fnc_hashSetIdBulk&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md272"></a>
Notes</h2>
<ul>
<li>The data array must be structured with the key first, followed by alternating field names and values: <code>[key, field1, value1, field2, value2, ...]</code></li>
<li>The key must be a string that identifies the specific hash table</li>
<li>Each field name must be a string</li>
<li>Values can be arrays, strings, numbers, or booleans</li>
<li>All field-value pairs are stored in a single database operation</li>
<li>If the hash table doesn't exist, it will be created automatically</li>
<li>If any of the fields already exist in the hash table, their values will be overwritten</li>
<li>More efficient than multiple individual <code>hashSetId</code> calls when setting several fields</li>
<li>Player UIDs are commonly used as keys to store player-specific data</li>
<li>The operation is executed immediately and synchronously</li>
<li>All operations are logged for debugging purposes</li>
</ul>
<h2><a class="anchor" id="autotoc_md273"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_hashSetId</code>: Sets a single field value in a specific hash table</li>
<li><code>dragonfly_db_fnc_hashSetBulk</code>: Sets multiple field-value pairs in the global hash table</li>
<li><code>dragonfly_db_fnc_hashGetAllId</code>: Retrieves all fields from a specific hash table</li>
<li><code>dragonfly_db_fnc_hashGetId</code>: Retrieves a specific field value from a specific hash table</li>
</ul>
<h2><a class="anchor" id="autotoc_md274"></a>
Links</h2>
<p><a class="el" href="../../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html">Hash Get</a> | <a class="el" href="../../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html">Hash Get All</a> | <a class="el" href="../../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html">Hash Get All ID</a> | <a class="el" href="../../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html">Hash Get ID</a> | <a class="el" href="../../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html">Hash Set</a> | <a class="el" href="../../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html">Hash Set Bulk</a> | <a class="el" href="../../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html">Hash Set ID</a> | <a class="el" href="../../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html">Hash Set ID Bulk</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,167 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: delete</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">delete</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="autotoc_md0"></a>
autotoc_md0</h2>
<p>title: ArmaDragonflyClient - Delete Key icon: mdi:file-text-outline </p>
<h2><a class="anchor" id="autotoc_md1"></a>
excerpt: Remove the specified key from DragonflyClient.</h2>
<h1><a class="anchor" id="autotoc_md2"></a>
dragonfly_db_fnc_delete</h1>
<h2><a class="anchor" id="autotoc_md3"></a>
Description</h2>
<p>Removes the specified key from the database. This function deletes the key-value pair completely from storage.</p>
<h2><a class="anchor" id="autotoc_md4"></a>
Syntax</h2>
<div class="fragment"><div class="line">[_key] call dragonfly_db_fnc_delete</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md5"></a>
Parameters</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Type </th><th class="markdownTableHeadNone">Description </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>_key</code> </td><td class="markdownTableBodyNone">String </td><td class="markdownTableBodyNone">Name of the key to delete from the database </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md6"></a>
Return Value</h2>
<p>None. The operation runs asynchronously.</p>
<h2><a class="anchor" id="autotoc_md7"></a>
Examples</h2>
<h3><a class="anchor" id="autotoc_md8"></a>
Delete a key in singleplayer or on the server:</h3>
<div class="fragment"><div class="line">[&quot;playerData&quot;] call dragonfly_db_fnc_delete;</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md9"></a>
Delete a key on the server from a client:</h3>
<div class="fragment"><div class="line">[&quot;playerData&quot;] remoteExecCall [&quot;dragonfly_db_fnc_delete&quot;, 2, false];</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md10"></a>
Notes</h2>
<ul>
<li>This operation is permanent and cannot be undone</li>
<li>If the key doesn't exist, the operation will have no effect</li>
<li>This function only affects specific keys, not hash tables or lists</li>
</ul>
<h2><a class="anchor" id="autotoc_md11"></a>
Related Functions</h2>
<ul>
<li><code>dragonfly_db_fnc_get</code>: Retrieves a value by key</li>
<li><code>dragonfly_db_fnc_set</code>: Stores a value by key</li>
<li><code>dragonfly_db_fnc_scheduler</code>: Processes the callback response</li>
</ul>
<h2><a class="anchor" id="autotoc_md12"></a>
Links</h2>
<p><a class="el" href="../../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html">Delete Key</a> | <a class="el" href="../../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html">Get Key</a> | <a class="el" href="../../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html">Set Key</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,145 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: G:/ids/dragonfly/docs/core Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('dir_10eb6422e80bd721a9a7af022f58c68b.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">core Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>This section contains documentation for the core functions of ArmaDragonflyClient that handle initialization, process management, and scheduling.</p>
<h1><a class="anchor" id="autotoc_md133"></a>
Available Functions</h1>
<ul>
<li><a class="el" href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html">addTask</a> - Add a task to the scheduler</li>
<li><a class="el" href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html">handler</a> - Handle callbacks from the extension</li>
<li><a class="el" href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html">init</a> - Initialize the database system</li>
<li><a class="el" href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html">printAddonName</a> - Print the addon name</li>
<li><a class="el" href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html">processQueue</a> - Process queued database operations</li>
<li><a class="el" href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html">scheduler</a> - Schedule database operations</li>
<li><a class="el" href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html">test</a> - Test the database connection</li>
</ul>
<h1><a class="anchor" id="autotoc_md134"></a>
Example Usage</h1>
<div class="fragment"><div class="line">// Initialize the database</div>
<div class="line">[] call dragonfly_db_fnc_init;</div>
<div class="line"> </div>
<div class="line">// Test the database connection</div>
<div class="line">[] call dragonfly_db_fnc_test;</div>
</div><!-- fragment --><h1><a class="anchor" id="autotoc_md135"></a>
Related Categories</h1>
<ul>
<li>Basic Data Operations</li>
<li>Hash Operations</li>
<li>List Operations </li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_4373328136309bbaba010b91e95ca4c6.html">dragonfly</a></li><li class="navelem"><a class="el" href="dir_6b1f4820e2481aa5a1ea9b2275f196d9.html">docs</a></li><li class="navelem"><a class="el" href="dir_10eb6422e80bd721a9a7af022f58c68b.html">core</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,157 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: G:/ids/dragonfly/docs/hash Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('dir_1d1eabba2c636e67297dc8cee9bc9944.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">hash Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>This section contains documentation for the hash operations of ArmaDragonflyClient that allow for working with hash tables (key-value pairs within a namespace).</p>
<h1><a class="anchor" id="autotoc_md276"></a>
Available Functions</h1>
<ul>
<li><a class="el" href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html">hashGet</a> - Get a field from a hash</li>
<li><a class="el" href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html">hashGetAll</a> - Get all fields from a hash</li>
<li><a class="el" href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html">hashGetAllId</a> - Get all fields from a hash for a specific ID</li>
<li><a class="el" href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html">hashGetId</a> - Get a field from a hash for a specific ID</li>
<li><a class="el" href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html">hashSet</a> - Set a field in a hash</li>
<li><a class="el" href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html">hashSetBulk</a> - Set multiple fields in a hash in one operation</li>
<li><a class="el" href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html">hashSetId</a> - Set a field in a hash for a specific ID</li>
<li><a class="el" href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html">hashSetIdBulk</a> - Set multiple fields in a hash for a specific ID in one operation</li>
</ul>
<h1><a class="anchor" id="autotoc_md277"></a>
Example Usage</h1>
<div class="fragment"><div class="line">// Context mode examples</div>
<div class="line">[&quot;myField&quot;, [myValue]] call dragonfly_db_fnc_hashSet;</div>
<div class="line">[&quot;myField&quot;, &quot;myFunction&quot;] call dragonfly_db_fnc_hashGet;</div>
<div class="line">[&quot;myFunction&quot;] call dragonfly_db_fnc_hashGetAll;</div>
<div class="line"> </div>
<div class="line">// Set multiple hash fields in one operation</div>
<div class="line">[[</div>
<div class="line"> &quot;loadout&quot;, [getUnitLoadout player],</div>
<div class="line"> &quot;position&quot;, [getPosASL player],</div>
<div class="line"> &quot;direction&quot;, [getDir player]</div>
<div class="line">]] call dragonfly_db_fnc_hashSetBulk;</div>
<div class="line"> </div>
<div class="line">// ID-specific examples</div>
<div class="line">[&quot;myHash&quot;, &quot;myField&quot;, [myValue]] call dragonfly_db_fnc_hashSetId;</div>
<div class="line">[&quot;myHash&quot;, &quot;myField&quot;, &quot;myFunction&quot;] call dragonfly_db_fnc_hashGetId;</div>
<div class="line">[&quot;myHash&quot;] call dragonfly_db_fnc_hashGetAllId;</div>
</div><!-- fragment --><h1><a class="anchor" id="autotoc_md278"></a>
Related Categories</h1>
<ul>
<li>Core Functions</li>
<li>Basic Data Operations</li>
<li>List Operations </li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_4373328136309bbaba010b91e95ca4c6.html">dragonfly</a></li><li class="navelem"><a class="el" href="dir_6b1f4820e2481aa5a1ea9b2275f196d9.html">docs</a></li><li class="navelem"><a class="el" href="dir_1d1eabba2c636e67297dc8cee9bc9944.html">hash</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,124 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: G:/ids/dragonfly Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('dir_4373328136309bbaba010b91e95ca4c6.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">dragonfly Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a>
Directories</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_6b1f4820e2481aa5a1ea9b2275f196d9.html">docs</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_4373328136309bbaba010b91e95ca4c6.html">dragonfly</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,270 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: G:/ids/dragonfly/docs Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('dir_6b1f4820e2481aa5a1ea9b2275f196d9.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">docs Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a>
Directories</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_71f12be5768ca2af9c9f300d019944af.html">basic</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_10eb6422e80bd721a9a7af022f58c68b.html">core</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_1d1eabba2c636e67297dc8cee9bc9944.html">hash</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_72c6efb7383bf0530aa073c1e7428252.html">list</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>This documentation provides details on all functions available in <code>ArmaDragonflyClient</code>. These functions allow you to interact with the in-memory database system for Arma 3.</p>
<h1><a class="anchor" id="autotoc_md345"></a>
Function Categories</h1>
<p>The functions are categorized by their purpose:</p>
<h2><a class="anchor" id="autotoc_md346"></a>
Core Functions</h2>
<ul>
<li><a class="el" href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html">init</a> - Initialize the database system</li>
<li><a class="el" href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html">handler</a> - Handle callbacks from the extension</li>
<li><a class="el" href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html">processQueue</a> - Process queued database operations</li>
<li><a class="el" href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html">scheduler</a> - Schedule database operations</li>
<li><a class="el" href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html">addTask</a> - Add a task to the scheduler</li>
<li><a class="el" href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html">printAddonName</a> - Print the addon name</li>
<li><a class="el" href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html">test</a> - Test the database connection</li>
</ul>
<h2><a class="anchor" id="autotoc_md347"></a>
Basic Data Operations</h2>
<ul>
<li><a class="el" href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html">get</a> - Get a value from the database</li>
<li><a class="el" href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html">set</a> - Set a value in the database</li>
<li><a class="el" href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html">delete</a> - Delete a value from the database</li>
<li><a class="el" href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html">save</a> - Save the database to disk</li>
<li><a class="el" href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html">fetch</a> - Fetch a value from the database</li>
</ul>
<h2><a class="anchor" id="autotoc_md348"></a>
Hash Operations</h2>
<ul>
<li><a class="el" href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html">hashGet</a> - Get a field from a hash</li>
<li><a class="el" href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html">hashGetAll</a> - Get all fields from a hash</li>
<li><a class="el" href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html">hashGetAllId</a> - Get all fields from a hash for a specific ID</li>
<li><a class="el" href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html">hashGetId</a> - Get a field from a hash for a specific ID</li>
<li><a class="el" href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html">hashSet</a> - Set a field in a hash</li>
<li><a class="el" href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html">hashSetBulk</a> - Set multiple fields in a hash in one operation</li>
<li><a class="el" href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html">hashSetId</a> - Set a field in a hash for a specific ID</li>
<li><a class="el" href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html">hashSetIdBulk</a> - Set multiple fields in a hash for a specific ID in one operation</li>
</ul>
<h2><a class="anchor" id="autotoc_md349"></a>
List Operations</h2>
<ul>
<li><a class="el" href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html">listAdd</a> - Add an item to a list</li>
<li><a class="el" href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html">listGet</a> - Get items from a list</li>
<li><a class="el" href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html">listLoad</a> - Load a list from the database</li>
<li><a class="el" href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html">listRemove</a> - Remove an item from a list</li>
<li><a class="el" href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html">listSet</a> - Set an item in a list</li>
</ul>
<h1><a class="anchor" id="autotoc_md350"></a>
Usage Examples</h1>
<h2><a class="anchor" id="autotoc_md351"></a>
Basic Usage</h2>
<div class="fragment"><div class="line">// Initialize the database</div>
<div class="line">[] call dragonfly_db_fnc_init;</div>
<div class="line"> </div>
<div class="line">// Set a value</div>
<div class="line">[&quot;myKey&quot;, [myValue]] call dragonfly_db_fnc_set;</div>
<div class="line"> </div>
<div class="line">// Get a value</div>
<div class="line">[&quot;myKey&quot;, &quot;myFunction&quot;] call dragonfly_db_fnc_get;</div>
<div class="line"> </div>
<div class="line">// Delete a key</div>
<div class="line">[&quot;myKey&quot;] call dragonfly_db_fnc_delete;</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md352"></a>
Hash Operations</h2>
<div class="fragment"><div class="line">// Set a hash field (context mode)</div>
<div class="line">[&quot;myField&quot;, [myValue]] call dragonfly_db_fnc_hashSet;</div>
<div class="line"> </div>
<div class="line">// Get a hash field (context mode)</div>
<div class="line">[&quot;myField&quot;, &quot;myFunction&quot;] call dragonfly_db_fnc_hashGet;</div>
<div class="line"> </div>
<div class="line">// Get all hash fields (context mode)</div>
<div class="line">[&quot;myFunction&quot;] call dragonfly_db_fnc_hashGetAll;</div>
<div class="line"> </div>
<div class="line">// Set multiple hash fields (context mode)</div>
<div class="line">[[</div>
<div class="line"> &quot;loadout&quot;, [getUnitLoadout player],</div>
<div class="line"> &quot;position&quot;, [getPosASL player],</div>
<div class="line"> &quot;direction&quot;, [getDir player],</div>
<div class="line"> &quot;stance&quot;, [stance player]</div>
<div class="line">]] call dragonfly_db_fnc_hashSetBulk;</div>
<div class="line"> </div>
<div class="line">// Remove a hash field (context mode)</div>
<div class="line">[&quot;myField&quot;] call dragonfly_db_fnc_hashRemove;</div>
<div class="line"> </div>
<div class="line">// Delete a hash table (context mode)</div>
<div class="line">[] call dragonfly_db_fnc_hashDelete;</div>
</div><!-- fragment --> <div class="fragment"><div class="line">// Set a hash field for specific ID</div>
<div class="line">[&quot;myHash&quot;, &quot;myField&quot;, [myValue]] call dragonfly_db_fnc_hashSetId;</div>
<div class="line"> </div>
<div class="line">// Get a hash field for specific ID</div>
<div class="line">[&quot;myHash&quot;, &quot;myField&quot;, &quot;myFunction&quot;] call dragonfly_db_fnc_hashGetId;</div>
<div class="line"> </div>
<div class="line">// Get all hash fields for specific ID</div>
<div class="line">[&quot;myHash&quot;] call dragonfly_db_fnc_hashGetAllId;</div>
<div class="line"> </div>
<div class="line">// Set multiple hash fields for specific ID</div>
<div class="line">[[</div>
<div class="line"> getPlayerUID player,</div>
<div class="line"> &quot;loadout&quot;, [getUnitLoadout player],</div>
<div class="line"> &quot;position&quot;, [getPosASL player],</div>
<div class="line"> &quot;direction&quot;, [getDir player],</div>
<div class="line"> &quot;stance&quot;, [stance player]</div>
<div class="line">]] call dragonfly_db_fnc_hashSetIdBulk;</div>
<div class="line"> </div>
<div class="line">// Remove a hash field for specific ID</div>
<div class="line">[&quot;myHash&quot;, &quot;myField&quot;] call dragonfly_db_fnc_hashRemoveId;</div>
<div class="line"> </div>
<div class="line">// Delete a hash table for specific ID</div>
<div class="line">[&quot;myHash&quot;] call dragonfly_db_fnc_hashDeleteId;</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md353"></a>
List Operations</h2>
<div class="fragment"><div class="line">// Add an item to a list</div>
<div class="line">[&quot;myList&quot;, [&quot;myItem&quot;]] call dragonfly_db_fnc_listAdd;</div>
<div class="line"> </div>
<div class="line">// Set an item from a list</div>
<div class="line">[&quot;myList&quot;, 0, [myNewValue]] call dragonfly_db_fnc_listSet;</div>
<div class="line"> </div>
<div class="line">// Get an item from a list</div>
<div class="line">[&quot;myList&quot;, 0, &quot;myFunction&quot;] call dragonfly_db_fnc_listGet;</div>
<div class="line"> </div>
<div class="line">// Get items from a list</div>
<div class="line">[&quot;myList&quot;, &quot;myFunction&quot;] call dragonfly_db_fnc_listLoad;</div>
<div class="line"> </div>
<div class="line">// Remove an item from a list</div>
<div class="line">[&quot;myList&quot;, 0] call dragonfly_db_fnc_listRemove;</div>
<div class="line"> </div>
<div class="line">// Delete a list</div>
<div class="line">[&quot;myList&quot;] call dragonfly_db_fnc_listDelete;</div>
</div><!-- fragment --><h1><a class="anchor" id="autotoc_md354"></a>
Function Documentation Structure</h1>
<p>Each function documentation includes:</p><ul>
<li>Function name and purpose</li>
<li>Parameters</li>
<li>Return value</li>
<li>Examples</li>
<li>Notes and warnings</li>
</ul>
<h1><a class="anchor" id="autotoc_md355"></a>
License</h1>
<p>This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">https://creativecommons.org/licenses/by-nc-sa/4.0/</a> or send a letter to Creative Commons, <br />
PO Box 1866, Mountain View, CA 94042 </p>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_4373328136309bbaba010b91e95ca4c6.html">dragonfly</a></li><li class="navelem"><a class="el" href="dir_6b1f4820e2481aa5a1ea9b2275f196d9.html">docs</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,149 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: G:/ids/dragonfly/docs/basic Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('dir_71f12be5768ca2af9c9f300d019944af.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">basic Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>This section contains documentation for the basic data operations of ArmaDragonflyClient that allow for simple key-value storage and retrieval.</p>
<h1><a class="anchor" id="autotoc_md37"></a>
Available Functions</h1>
<ul>
<li><a class="el" href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html">delete</a> - Delete a value from the database</li>
<li><a class="el" href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html">fetch</a> - Fetch a value from the database</li>
<li><a class="el" href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html">get</a> - Get a value from the database</li>
<li><a class="el" href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html">save</a> - Save the database to disk</li>
<li><a class="el" href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html">set</a> - Set a value in the database</li>
</ul>
<h1><a class="anchor" id="autotoc_md38"></a>
Example Usage</h1>
<div class="fragment"><div class="line">// Set a value</div>
<div class="line">[&quot;myKey&quot;, [myValue]] call dragonfly_db_fnc_set;</div>
<div class="line"> </div>
<div class="line">// Get a value</div>
<div class="line">[&quot;myKey&quot;, &quot;myFunction&quot;] call dragonfly_db_fnc_get;</div>
<div class="line"> </div>
<div class="line">// Delete a key</div>
<div class="line">[&quot;myKey&quot;] call dragonfly_db_fnc_delete;</div>
<div class="line"> </div>
<div class="line">// Save database to disk</div>
<div class="line">[] call dragonfly_db_fnc_save;</div>
</div><!-- fragment --><h1><a class="anchor" id="autotoc_md39"></a>
Related Categories</h1>
<ul>
<li>Core Functions</li>
<li>Hash Operations</li>
<li>List Operations </li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_4373328136309bbaba010b91e95ca4c6.html">dragonfly</a></li><li class="navelem"><a class="el" href="dir_6b1f4820e2481aa5a1ea9b2275f196d9.html">docs</a></li><li class="navelem"><a class="el" href="dir_71f12be5768ca2af9c9f300d019944af.html">basic</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,152 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: G:/ids/dragonfly/docs/list Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('dir_72c6efb7383bf0530aa073c1e7428252.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">list Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>This section contains documentation for the list operations of ArmaDragonflyClient that allow for working with ordered collections of items.</p>
<h1><a class="anchor" id="autotoc_md341"></a>
Available Functions</h1>
<ul>
<li><a class="el" href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html">listAdd</a> - Add an item to a list</li>
<li><a class="el" href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html">listGet</a> - Get items from a list</li>
<li><a class="el" href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html">listLoad</a> - Load a list from the database</li>
<li><a class="el" href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html">listRemove</a> - Remove an item from a list</li>
<li><a class="el" href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html">listSet</a> - Set an item in a list</li>
</ul>
<h1><a class="anchor" id="autotoc_md342"></a>
Example Usage</h1>
<div class="fragment"><div class="line">// Add an item to a list</div>
<div class="line">[&quot;myList&quot;, [&quot;myItem&quot;]] call dragonfly_db_fnc_listAdd;</div>
<div class="line"> </div>
<div class="line">// Set an item at a specific index</div>
<div class="line">[&quot;myList&quot;, 0, [myNewValue]] call dragonfly_db_fnc_listSet;</div>
<div class="line"> </div>
<div class="line">// Get an item at a specific index</div>
<div class="line">[&quot;myList&quot;, 0, &quot;myFunction&quot;] call dragonfly_db_fnc_listGet;</div>
<div class="line"> </div>
<div class="line">// Load all items from a list</div>
<div class="line">[&quot;myList&quot;, &quot;myFunction&quot;] call dragonfly_db_fnc_listLoad;</div>
<div class="line"> </div>
<div class="line">// Remove an item at a specific index</div>
<div class="line">[&quot;myList&quot;, 0] call dragonfly_db_fnc_listRemove;</div>
</div><!-- fragment --><h1><a class="anchor" id="autotoc_md343"></a>
Related Categories</h1>
<ul>
<li>Core Functions</li>
<li>Basic Data Operations</li>
<li>Hash Operations </li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_4373328136309bbaba010b91e95ca4c6.html">dragonfly</a></li><li class="navelem"><a class="el" href="dir_6b1f4820e2481aa5a1ea9b2275f196d9.html">docs</a></li><li class="navelem"><a class="el" href="dir_72c6efb7383bf0530aa073c1e7428252.html">list</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

12
api/html/doc.svg Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#4665A2">
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
</g>
<g style="fill:#D8DFEE;stroke-width:0">
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

12
api/html/docd.svg Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#C4CFE5">
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
</g>
<g style="fill:#4665A2;stroke-width:0">
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

2255
api/html/doxygen.css Normal file

File diff suppressed because it is too large Load Diff

28
api/html/doxygen.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

374
api/html/doxygen_crawl.html Normal file
View File

@ -0,0 +1,374 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<title>Validator / crawler helper</title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
</head>
<body>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md119"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md120"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md121"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md122"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md123"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md124"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md125"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md126"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md127"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md128"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md129"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md130"/>
<a href="d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md131"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md219"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md221"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md222"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md223"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md224"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md225"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md226"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md227"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md228"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md229"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md230"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md231"/>
<a href="d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md232"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md136"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md137"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md138"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md139"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md140"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md141"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md142"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md143"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md144"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md145"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md146"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md147"/>
<a href="d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md148"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md318"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md320"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md321"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md322"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md323"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md324"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md325"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md326"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md327"/>
<a href="d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md328"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md191"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md193"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md194"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md195"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md196"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md197"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md198"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md199"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md200"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md201"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md202"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md203"/>
<a href="d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md204"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md205"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md207"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md208"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md209"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md210"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md211"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md212"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md213"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md214"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md215"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md216"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md217"/>
<a href="d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md218"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md329"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md331"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md332"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md333"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md334"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md335"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md336"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md337"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md338"/>
<a href="d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md339"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md40"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md41"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md42"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md43"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md44"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md45"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md46"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md47"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md48"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md49"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md50"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md51"/>
<a href="d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md52"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md23"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md24"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md25"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md26"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md27"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md28"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md29"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md30"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md31"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md33"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md34"/>
<a href="d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md35"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md293"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md294"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md295"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md296"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md297"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md298"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md299"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md300"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md301"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md302"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md303"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md304"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md305"/>
<a href="d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md306"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md81"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md82"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md83"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md84"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md85"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md86"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md87"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md88"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md89"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md90"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md91"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md92"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md93"/>
<a href="d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md94"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md106"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md107"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md108"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md109"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md110"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md111"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md112"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md113"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md114"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md115"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md116"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md117"/>
<a href="d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md118"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md13"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md15"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md16"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md17"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md18"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md19"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md20"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md21"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md22"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md247"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md249"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md250"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md251"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md252"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md253"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md254"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md255"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md256"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md257"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md258"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md259"/>
<a href="d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md260"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md149"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md150"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md151"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md152"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md153"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md154"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md155"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md156"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md157"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md158"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md159"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md160"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md161"/>
<a href="d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md162"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md53"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md54"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md55"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md56"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md57"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md58"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md59"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md60"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md61"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md62"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md63"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md64"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md65"/>
<a href="d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md66"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md307"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md309"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md310"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md311"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md312"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md313"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md314"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md315"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md316"/>
<a href="d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md317"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md163"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md165"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md166"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md167"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md168"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md169"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md170"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md171"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md172"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md173"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md174"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md175"/>
<a href="d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md176"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md177"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md179"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md180"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md181"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md182"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md183"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md184"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md185"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md186"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md187"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md188"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md189"/>
<a href="da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md190"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md279"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md280"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md281"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md282"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md283"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md284"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md285"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md286"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md287"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md288"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md289"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md290"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md291"/>
<a href="da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md292"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md233"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md235"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md236"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md237"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md238"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md239"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md240"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md241"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md242"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md243"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md244"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md245"/>
<a href="da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md246"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md100"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md101"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md102"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md103"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md104"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md105"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md95"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md96"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md97"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md98"/>
<a href="dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md99"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md67"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md68"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md69"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md70"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md71"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md72"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md73"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md74"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md75"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md77"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md78"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md79"/>
<a href="dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md80"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md261"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md263"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md264"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md265"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md266"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md267"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md268"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md269"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md270"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md271"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md272"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md273"/>
<a href="de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md274"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md0"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md1"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md10"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md11"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md12"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md2"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md3"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md4"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md5"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md6"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md7"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md8"/>
<a href="df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md9"/>
<a href="dir_10eb6422e80bd721a9a7af022f58c68b.html"/>
<a href="dir_1d1eabba2c636e67297dc8cee9bc9944.html"/>
<a href="dir_4373328136309bbaba010b91e95ca4c6.html"/>
<a href="dir_6b1f4820e2481aa5a1ea9b2275f196d9.html"/>
<a href="dir_71f12be5768ca2af9c9f300d019944af.html"/>
<a href="dir_72c6efb7383bf0530aa073c1e7428252.html"/>
<a href="doxygen_crawl.html"/>
<a href="index.html"/>
<a href="pages.html"/>
</body>
</html>

198
api/html/dynsections.js Normal file
View File

@ -0,0 +1,198 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function toggleVisibility(linkObj) {
return dynsection.toggleVisibility(linkObj);
}
let dynsection = {
// helper function
updateStripes : function() {
$('table.directory tr').
removeClass('even').filter(':visible:even').addClass('even');
$('table.directory tr').
removeClass('odd').filter(':visible:odd').addClass('odd');
},
toggleVisibility : function(linkObj) {
const base = $(linkObj).attr('id');
const summary = $('#'+base+'-summary');
const content = $('#'+base+'-content');
const trigger = $('#'+base+'-trigger');
const src=$(trigger).attr('src');
if (content.is(':visible')===true) {
content.hide();
summary.show();
$(linkObj).addClass('closed').removeClass('opened');
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
content.show();
summary.hide();
$(linkObj).removeClass('closed').addClass('opened');
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
}
return false;
},
toggleLevel : function(level) {
$('table.directory tr').each(function() {
const l = this.id.split('_').length-1;
const i = $('#img'+this.id.substring(3));
const a = $('#arr'+this.id.substring(3));
if (l<level+1) {
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
a.html('&#9660;');
$(this).show();
} else if (l==level+1) {
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
a.html('&#9658;');
$(this).show();
} else {
$(this).hide();
}
});
this.updateStripes();
},
toggleFolder : function(id) {
// the clicked row
const currentRow = $('#row_'+id);
// all rows after the clicked row
const rows = currentRow.nextAll("tr");
const re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
// only match elements AFTER this one (can't hide elements before)
const childRows = rows.filter(function() { return this.id.match(re); });
// first row is visible we are HIDING
if (childRows.filter(':first').is(':visible')===true) {
// replace down arrow by right arrow for current row
const currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
currentRowSpans.filter(".arrow").html('&#9658;');
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
} else { // we are SHOWING
// replace right arrow by down arrow for current row
const currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
currentRowSpans.filter(".arrow").html('&#9660;');
// replace down arrows by right arrows for child rows
const childRowsSpans = childRows.find("span");
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
childRowsSpans.filter(".arrow").html('&#9658;');
childRows.show(); //show all children
}
this.updateStripes();
},
toggleInherit : function(id) {
const rows = $('tr.inherit.'+id);
const img = $('tr.inherit_header.'+id+' img');
const src = $(img).attr('src');
if (rows.filter(':first').is(':visible')===true) {
rows.css('display','none');
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
rows.css('display','table-row'); // using show() causes jump in firefox
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
}
},
};
let codefold = {
opened : true,
// in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes
plusImg: [ "var(--fold-plus-image)", "var(--fold-plus-image-relpath)" ],
minusImg: [ "var(--fold-minus-image)", "var(--fold-minus-image-relpath)" ],
// toggle all folding blocks
toggle_all : function(relPath) {
if (this.opened) {
$('#fold_all').css('background-image',this.plusImg[relPath]);
$('div[id^=foldopen]').hide();
$('div[id^=foldclosed]').show();
} else {
$('#fold_all').css('background-image',this.minusImg[relPath]);
$('div[id^=foldopen]').show();
$('div[id^=foldclosed]').hide();
}
this.opened=!this.opened;
},
// toggle single folding block
toggle : function(id) {
$('#foldopen'+id).toggle();
$('#foldclosed'+id).toggle();
},
init : function(relPath) {
$('span[class=lineno]').css({
'padding-right':'4px',
'margin-right':'2px',
'display':'inline-block',
'width':'54px',
'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%'
});
// add global toggle to first line
$('span[class=lineno]:first').append('<span class="fold" id="fold_all" '+
'onclick="javascript:codefold.toggle_all('+relPath+');" '+
'style="background-image:'+this.minusImg[relPath]+';"></span>');
// add vertical lines to other rows
$('span[class=lineno]').not(':eq(0)').append('<span class="fold"></span>');
// add toggle controls to lines with fold divs
$('div[class=foldopen]').each(function() {
// extract specific id to use
const id = $(this).attr('id').replace('foldopen','');
// extract start and end foldable fragment attributes
const start = $(this).attr('data-start');
const end = $(this).attr('data-end');
// replace normal fold span with controls for the first line of a foldable fragment
$(this).find('span[class=fold]:first').replaceWith('<span class="fold" '+
'onclick="javascript:codefold.toggle(\''+id+'\');" '+
'style="background-image:'+codefold.minusImg[relPath]+';"></span>');
// append div for folded (closed) representation
$(this).after('<div id="foldclosed'+id+'" class="foldclosed" style="display:none;"></div>');
// extract the first line from the "open" section to represent closed content
const line = $(this).children().first().clone();
// remove any glow that might still be active on the original line
$(line).removeClass('glow');
if (start) {
// if line already ends with a start marker (e.g. trailing {), remove it
$(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),''));
}
// replace minus with plus symbol
$(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]);
// append ellipsis
$(line).append(' '+start+'<a href="javascript:codefold.toggle(\''+id+'\')">&#8230;</a>'+end);
// insert constructed line into closed div
$('#foldclosed'+id).html(line);
});
},
};
/* @license-end */

11
api/html/folderclosed.svg Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#4665A2;">
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
</g>
<g style="fill:#D8DFEE;stroke-width:0;">
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#C4CFE5;">
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
</g>
<g style="fill:#4665A2;stroke-width:0;">
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

17
api/html/folderopen.svg Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#4665A2;">
<path
d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"
id="path2" />
</g>
<g style="fill:#D8DFEE;stroke-width:0;">
<path
d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z"
id="path199" /><path
d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z"
id="path201" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

12
api/html/folderopend.svg Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#C4CFE5;">
<path d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"/>
</g>
<g style="fill:#4665A2;stroke-width:0;">
<path d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z" />
<path d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

118
api/html/index.html Normal file
View File

@ -0,0 +1,118 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmaDragonflyClient: Main Page</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ArmaDragonflyClient
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('index.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">ArmaDragonflyClient Documentation</div></div>
</div><!--header-->
<div class="contents">
<a href="doxygen_crawl.html"></a>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>

204
api/html/jquery.js vendored Normal file
View File

@ -0,0 +1,204 @@
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}
var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},
push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(
e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,
O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp(
"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"<22>":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType
}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c
)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){
return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(
":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id")
)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push(
"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(
a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,
null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(
"string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne
).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType
)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(
function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){
return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);
for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n
){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(
e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);
break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(
function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){
for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(
this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(
var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){
return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(
){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),
S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,
r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,
o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(
"object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){
var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),
1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){
Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t
){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c
].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;
return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),
"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n
)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,
f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(
arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i
]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(
e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;
this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t
}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,
r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),
r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){
1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(
"string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t
,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(
l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[
0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(
!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(
e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(
e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(
this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},
S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),
originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}
S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(
le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),
null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"
],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},
S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{
set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o
)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(
" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;
t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode
,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),
e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(
new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};
var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();
return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",
isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(
t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global
)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(
v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();
while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))
}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),
t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){
return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(
e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r]
,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(
function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,
"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}
),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each(
"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){
return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
/*! jQuery UI - v1.13.2 - 2022-08-01
* http://jqueryui.com
* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(y){"use strict";y.ui=y.ui||{};y.ui.version="1.13.2";var n,i=0,h=Array.prototype.hasOwnProperty,a=Array.prototype.slice;y.cleanData=(n=y.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=y._data(i,"events"))&&e.remove&&y(i).triggerHandler("remove");n(t)}),y.widget=function(t,i,e){var s,n,o,h={},a=t.split(".")[0],r=a+"-"+(t=t.split(".")[1]);return e||(e=i,i=y.Widget),Array.isArray(e)&&(e=y.extend.apply(null,[{}].concat(e))),y.expr.pseudos[r.toLowerCase()]=function(t){return!!y.data(t,r)},y[a]=y[a]||{},s=y[a][t],n=y[a][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},y.extend(n,s,{version:e.version,_proto:y.extend({},e),_childConstructors:[]}),(o=new i).options=y.widget.extend({},o.options),y.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}
function o(t){return i.prototype[e].apply(this,t)}h[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=y.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},h,{constructor:n,namespace:a,widgetName:t,widgetFullName:r}),s?(y.each(s._childConstructors,function(t,e){var i=e.prototype;y.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),y.widget.bridge(t,n),n},y.widget.extend=function(t){for(var e,i,s=a.call(arguments,1),n=0,o=s.length;n<o;n++)for(e in s[n])i=s[n][e],h.call(s[n],e)&&void 0!==i&&(y.isPlainObject(i)?t[e]=y.isPlainObject(t[e])?y.widget.extend({},t[e],i):y.widget.extend({},i):t[e]=i);return t},y.widget.bridge=function(o,e){var h=e.prototype.widgetFullName||o;y.fn[o]=function(i){var t="string"==typeof i,s=a.call(arguments,1),n=this;return t?this.length||"instance"!==i?this.each(function(){var t,
e=y.data(this,h);return"instance"===i?(n=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?y.error("no such method '"+i+"' for "+o+" widget instance"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:y.error("cannot call methods on "+o+" prior to initialization; attempted to call method '"+i+"'")}):n=void 0:(s.length&&(i=y.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=y.data(this,h);t?(t.option(i||{}),t._init&&t._init()):y.data(this,h,new e(i,this))})),n}},y.Widget=function(){},y.Widget._childConstructors=[],y.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t
){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t
]=y.widget.extend({},this.options[t]),n=0;n<i.length-1;n++)s[i[n]]=s[i[n]]||{},s=s[i[n]];if(t=i.pop(),1===arguments.length)return void 0===s[t]?null:s[t];s[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,s;for(e in t)s=this.classesElementLookup[e],t[e]!==this.options.classes[e]&&s&&s.length&&(i=y(s.get()),this._removeClass(s,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},
disable:function(){return this._setOptions({disabled:!0})},_classes:function(n){var o=[],h=this;function t(t,e){for(var i,s=0;s<t.length;s++)i=h.classesElementLookup[t[s]]||y(),i=n.add?(function(){var i=[];n.element.each(function(t,e){y.map(h.classesElementLookup,function(t){return t}).some(function(t){return t.is(e)})||i.push(e)}),h._on(y(i),{remove:"_untrackClassesElement"})}(),y(y.uniqueSort(i.get().concat(n.element.get())))):y(i.not(n.element).get()),h.classesElementLookup[t[s]]=i,o.push(t[s]),e&&n.classes[t[s]]&&o.push(n.classes[t[s]])}return(n=y.extend({element:this.element,classes:this.options.classes||{}},n)).keys&&t(n.keys.match(/\S+/g)||[],!0),n.extra&&t(n.extra.match(/\S+/g)||[]),o.join(" ")},_untrackClassesElement:function(i){var s=this;y.each(s.classesElementLookup,function(t,e){-1!==y.inArray(i.target,e)&&(s.classesElementLookup[t]=y(e.not(i.target).get()))}),this._off(y(i.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){
return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){var n="string"==typeof t||null===t,i={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s="boolean"==typeof s?s:i};return i.element.toggleClass(this._classes(i),s),this},_on:function(n,o,t){var h,a=this;"boolean"!=typeof n&&(t=o,o=n,n=!1),t?(o=h=y(o),this.bindings=this.bindings.add(o)):(t=o,o=this.element,h=this.widget()),y.each(t,function(t,e){function i(){if(n||!0!==a.options.disabled&&!y(this).hasClass("ui-state-disabled"))return("string"==typeof e?a[e]:e).apply(a,arguments)}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||y.guid++);var s=t.match(/^([\w:-]*)\s*(.*)$/),t=s[1]+a.eventNamespace,s=s[2];s?h.on(t,s,i):o.on(t,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.off(e),this.bindings=y(this.bindings.not(t).get()),this.focusable=y(this.focusable.not(t).get()),this.hoverable=y(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return(
"string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(y(t.currentTarget),null,"ui-state-hover")},mouseleave:function(t){this._removeClass(y(t.currentTarget),null,"ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(y(t.currentTarget),null,"ui-state-focus")},focusout:function(t){this._removeClass(y(t.currentTarget),null,"ui-state-focus")}})},_trigger:function(t,e,i){var s,n,o=this.options[t];if(i=i||{},(e=y.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],n=e.originalEvent)for(s in n)s in e||(e[s]=n[s]);return this.element.trigger(e,i),!("function"==typeof o&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},y.each({show:"fadeIn",hide:"fadeOut"},function(o,h){y.Widget.prototype["_"+o]=function(e,t,i){var s,n=(t="string"==typeof t?{effect:t}:t
)?!0!==t&&"number"!=typeof t&&t.effect||h:o;"number"==typeof(t=t||{})?t={duration:t}:!0===t&&(t={}),s=!y.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),s&&y.effects&&y.effects.effect[n]?e[o](t):n!==o&&e[n]?e[n](t.duration,t.easing,i):e.queue(function(t){y(this)[o](),i&&i.call(e[0]),t()})}});var s,x,D,o,r,l,u,p,W;y.widget;function E(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function H(t,e){return parseInt(y.css(t,e),10)||0}function S(t){return null!=t&&t===t.window}x=Math.max,D=Math.abs,o=/left|center|right/,r=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,u=/^\w+/,p=/%$/,W=y.fn.position,y.position={scrollbarWidth:function(){if(void 0!==s)return s;var t,e=y("<div style='display:block;position:absolute;width:200px;height:200px;overflow:hidden;'><div style='height:300px;width:auto;'></div></div>"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},
getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.width<t.element[0].scrollWidth;return{width:"scroll"===i||"auto"===i&&t.height<t.element[0].scrollHeight?y.position.scrollbarWidth():0,height:e?y.position.scrollbarWidth():0}},getWithinInfo:function(t){var e=y(t||window),i=S(e[0]),s=!!e[0]&&9===e[0].nodeType;return{element:e,isWindow:i,isDocument:s,offset:!i&&!s?y(t).offset():{left:0,top:0},scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop(),width:e.outerWidth(),height:e.outerHeight()}}},y.fn.position=function(p){if(!p||!p.of)return W.apply(this,arguments);var d,c,f,g,m,t,_="string"==typeof(p=y.extend({},p)).of?y(document).find(p.of):y(p.of),w=y.position.getWithinInfo(p.within),v=y.position.getScrollInfo(w),b=(p.collision||"flip").split(" "),z={},e=9===(t=(e=_)[0]).nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:S(t)?{width:e.width(),height:e.height(),offset:{
top:e.scrollTop(),left:e.scrollLeft()}}:t.preventDefault?{width:0,height:0,offset:{top:t.pageY,left:t.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()};return _[0].preventDefault&&(p.at="left top"),c=e.width,f=e.height,m=y.extend({},g=e.offset),y.each(["my","at"],function(){var t,e,i=(p[this]||"").split(" ");(i=1===i.length?o.test(i[0])?i.concat(["center"]):r.test(i[0])?["center"].concat(i):["center","center"]:i)[0]=o.test(i[0])?i[0]:"center",i[1]=r.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),z[this]=[t?t[0]:0,e?e[0]:0],p[this]=[u.exec(i[0])[0],u.exec(i[1])[0]]}),1===b.length&&(b[1]=b[0]),"right"===p.at[0]?m.left+=c:"center"===p.at[0]&&(m.left+=c/2),"bottom"===p.at[1]?m.top+=f:"center"===p.at[1]&&(m.top+=f/2),d=E(z.at,c,f),m.left+=d[0],m.top+=d[1],this.each(function(){var i,t,h=y(this),a=h.outerWidth(),r=h.outerHeight(),e=H(this,"marginLeft"),s=H(this,"marginTop"),n=a+e+H(this,"marginRight")+v.width,o=r+s+H(this,"marginBottom")+v.height,l=y.extend({},m),u=E(z.my,h.outerWidth()
,h.outerHeight());"right"===p.my[0]?l.left-=a:"center"===p.my[0]&&(l.left-=a/2),"bottom"===p.my[1]?l.top-=r:"center"===p.my[1]&&(l.top-=r/2),l.left+=u[0],l.top+=u[1],i={marginLeft:e,marginTop:s},y.each(["left","top"],function(t,e){y.ui.position[b[t]]&&y.ui.position[b[t]][e](l,{targetWidth:c,targetHeight:f,elemWidth:a,elemHeight:r,collisionPosition:i,collisionWidth:n,collisionHeight:o,offset:[d[0]+u[0],d[1]+u[1]],my:p.my,at:p.at,within:w,elem:h})}),p.using&&(t=function(t){var e=g.left-l.left,i=e+c-a,s=g.top-l.top,n=s+f-r,o={target:{element:_,left:g.left,top:g.top,width:c,height:f},element:{element:h,left:l.left,top:l.top,width:a,height:r},horizontal:i<0?"left":0<e?"right":"center",vertical:n<0?"top":0<s?"bottom":"middle"};c<a&&D(e+i)<c&&(o.horizontal="center"),f<r&&D(s+n)<f&&(o.vertical="middle"),x(D(e),D(i))>x(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,
s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0<h&&a<=0?(i=t.left+h+e.collisionWidth-n-s,t.left+=h-i):t.left=!(0<a&&h<=0)&&a<h?s+n-e.collisionWidth:s:0<h?t.left+=h:0<a?t.left-=a:t.left=x(t.left-o,t.left)},top:function(t,e){var i=e.within,s=i.isWindow?i.scrollTop:i.offset.top,n=e.within.height,o=t.top-e.collisionPosition.marginTop,h=s-o,a=o+e.collisionHeight-n-s;e.collisionHeight>n?0<h&&a<=0?(i=t.top+h+e.collisionHeight-n-s,t.top+=h-i):t.top=!(0<a&&h<=0)&&a<h?s+n-e.collisionHeight:s:0<h?t.top+=h:0<a?t.top-=a:t.top=x(t.top-o,t.top)}},flip:{left:function(t,e){var i=e.within,s=i.offset.left+i.scrollLeft,n=i.width,o=i.isWindow?i.scrollLeft:i.offset.left,h=t.left-e.collisionPosition.marginLeft,a=h-o,r=h+e.collisionWidth-n-o,l="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,i="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,h=-2*e.offset[0];a<0?((s=t.left+l+i+h+e.collisionWidth-n-s)<0||s<D(a)
)&&(t.left+=l+i+h):0<r&&(0<(o=t.left-e.collisionPosition.marginLeft+l+i+h-o)||D(o)<r)&&(t.left+=l+i+h)},top:function(t,e){var i=e.within,s=i.offset.top+i.scrollTop,n=i.height,o=i.isWindow?i.scrollTop:i.offset.top,h=t.top-e.collisionPosition.marginTop,a=h-o,r=h+e.collisionHeight-n-o,l="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,i="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,h=-2*e.offset[1];a<0?((s=t.top+l+i+h+e.collisionHeight-n-s)<0||s<D(a))&&(t.top+=l+i+h):0<r&&(0<(o=t.top-e.collisionPosition.marginTop+l+i+h-o)||D(o)<r)&&(t.top+=l+i+h)}},flipfit:{left:function(){y.ui.position.flip.left.apply(this,arguments),y.ui.position.fit.left.apply(this,arguments)},top:function(){y.ui.position.flip.top.apply(this,arguments),y.ui.position.fit.top.apply(this,arguments)}}};var t;y.ui.position,y.extend(y.expr.pseudos,{data:y.expr.createPseudo?y.expr.createPseudo(function(e){return function(t){return!!y.data(t,e)}}):function(t,e,i){return!!y.data(t,i[3])}}),y.fn.extend({
disableSelection:(t="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}),enableSelection:function(){return this.off(".ui-disableSelection")}});y.ui.focusable=function(t,e){var i,s,n,o,h=t.nodeName.toLowerCase();return"area"===h?(s=(i=t.parentNode).name,!(!t.href||!s||"map"!==i.nodeName.toLowerCase())&&(0<(s=y("img[usemap='#"+s+"']")).length&&s.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(h)?(n=!t.disabled)&&(o=y(t).closest("fieldset")[0])&&(n=!o.disabled):n="a"===h&&t.href||e,n&&y(t).is(":visible")&&function(t){var e=t.css("visibility");for(;"inherit"===e;)t=t.parent(),e=t.css("visibility");return"visible"===e}(y(t)))},y.extend(y.expr.pseudos,{focusable:function(t){return y.ui.focusable(t,null!=y.attr(t,"tabindex"))}});var e,d;y.ui.focusable,y.fn._form=function(){return"string"==typeof this[0].form?this.closest("form"):y(this[0].form)},y.ui.formResetMixin={_formResetHandler:function(
){var e=y(this);setTimeout(function(){var t=e.data("ui-form-reset-instances");y.each(t,function(){this.refresh()})})},_bindFormResetHandler:function(){var t;this.form=this.element._form(),this.form.length&&((t=this.form.data("ui-form-reset-instances")||[]).length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t))},_unbindFormResetHandler:function(){var t;this.form.length&&((t=this.form.data("ui-form-reset-instances")).splice(y.inArray(this,t),1),t.length?this.form.data("ui-form-reset-instances",t):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset"))}};y.expr.pseudos||(y.expr.pseudos=y.expr[":"]),y.uniqueSort||(y.uniqueSort=y.unique),y.escapeSelector||(e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,d=function(t,e){return e?"\0"===t?"<22>":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},y.escapeSelector=function(t){return(t+"").replace(e,d)}),y.fn.even&&y.fn.odd||y.fn.extend({even:function(){
return this.filter(function(t){return t%2==0})},odd:function(){return this.filter(function(t){return t%2==1})}});y.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},y.fn.labels=function(){var t,e,i;return this.length?this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(e=this.eq(0).parents("label"),(t=this.attr("id"))&&(i=(i=this.eq(0).parents().last()).add((i.length?i:this).siblings()),t="label[for='"+y.escapeSelector(t)+"']",e=e.add(i.find(t).addBack(t))),this.pushStack(e)):this.pushStack([])},y.fn.scrollParent=function(t){var e=this.css("position"),i="absolute"===e,s=t?/(auto|scroll|hidden)/:/(auto|scroll)/,t=this.parents().filter(function(){var t=y(this);return(!i||"static"!==t.css("position"))&&s.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==e&&t.length?t:y(this[0].ownerDocument||document)},y.extend(y.expr.pseudos,{tabbable:function(t){
var e=y.attr(t,"tabindex"),i=null!=e;return(!i||0<=e)&&y.ui.focusable(t,i)}}),y.fn.extend({uniqueId:(c=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++c)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&y(this).removeAttr("id")})}}),y.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var c,f=!1;y(document).on("mouseup",function(){f=!1});y.widget("ui.mouse",{version:"1.13.2",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(t){if(!0===y.data(t.target,e.widgetName+".preventClickEvent"))return y.removeData(t.target,e.widgetName+".preventClickEvent"),t.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off(
"mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!f){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var e=this,i=1===t.which,s=!("string"!=typeof this.options.cancel||!t.target.nodeName)&&y(t.target).closest(this.options.cancel).length;return i&&!s&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(t),!this._mouseStarted)?(t.preventDefault(),!0):(!0===y.data(t.target,this.widgetName+".preventClickEvent")&&y.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return e._mouseMove(t)},this._mouseUpDelegate=function(t){return e._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),f=!0)):!0}},
_mouseMove:function(t){if(this._mouseMoved){if(y.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button)return this._mouseUp(t);if(!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&y.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),
delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,f=!1,t.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n<o.length;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}};y.widget("ui.resizable",y.ui.mouse,{version:"1.13.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,
handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(t,e){if("hidden"===y(t).css("overflow"))return!1;var i=e&&"left"===e?"scrollLeft":"scrollTop",e=!1;if(0<t[i])return!0;try{t[i]=1,e=0<t[i],t[i]=0}catch(t){}return e},_create:function(){var t,e=this.options,i=this;this._addClass("ui-resizable"),y.extend(this,{_aspectRatio:!!e.aspectRatio,aspectRatio:e.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:e.helper||e.ghost||e.animate?e.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(y("<div class='ui-wrapper'></div>").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),
this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t
).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(
","),this.handles={},e=0;e<i.length;e++)s="ui-resizable-"+(t=String.prototype.trim.call(i[e])),n=y("<div>"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(
this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{
width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),
!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){
this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),s<n.maxWidth&&(n.maxWidth=s),t<n.maxHeight&&(n.maxHeight=t)
),this._vBoundaries=n},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height
,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({
height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,e=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||y("<div></div>").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,
i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left
)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e
){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),
i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth(
)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,
function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0
]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidth<d,g=i.maxHeight&&i.maxHeight<c,m=i.minWidth&&i.minWidth>d,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0<c-l?(e.size.height=c,e.position.top=o.top-p):(c=l-t.height,e.size.height=c,e.position.top=o.top+n.height-c),0<d-r?(e.size.width=d,e.position.left=o.left-u):(d=r-t.width,e.size.width=d,e.position.left=o.left+n.width-d))}});y.ui.resizable});
/**
* Copyright (c) 2007 Ariel Flesler - aflesler gmail com | https://github.com/flesler
* Licensed under MIT
* @author Ariel Flesler
* @version 2.1.2
*/(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"===typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9e9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case"number":case"string":if(
/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e=h(e);break}e=l?$(e):$(e,q);case"object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&&"%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};
$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()},set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
/*!
PowerTip v1.3.1 (2018-04-15)
https://stevenbenner.github.io/jquery-powertip/
Copyright (c) 2018 Steven Benner (http://stevenbenner.com/).
Released under MIT license.
https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
*/
(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$("body");var DATA_DISPLAYCONTROLLER="displayController",DATA_HASACTIVEHOVER="hasActiveHover",DATA_FORCEDOPEN="forcedOpen",DATA_HASMOUSEMOVE="hasMouseMove",DATA_MOUSEONTOTIP="mouseOnToPopup",DATA_ORIGINALTITLE="originalTitle",DATA_POWERTIP="powertip",DATA_POWERTIPJQ="powertipjq",DATA_POWERTIPTARGET="powertiptarget",EVENT_NAMESPACE=".powertip",RAD2DEG=180/Math.PI,MOUSE_EVENTS=["click","dblclick","mousedown","mouseup","mousemove","mouseover","mouseout","mouseenter","mouseleave","contextmenu"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false,
delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)==="string"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr("title");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr("title")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-1){
targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se",
"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(
session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}
closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY;
openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split("-")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case"n":coords.set("left",position.left-tipWidth/2
);coords.set("bottom",session.windowHeight-position.top+offset);break;case"e":coords.set("left",position.left+offset);coords.set("top",position.top-tipHeight/2);break;case"s":coords.set("left",position.left-tipWidth/2);coords.set("top",position.top+offset);break;case"w":coords.set("top",position.top-tipHeight/2);coords.set("right",session.windowWidth-position.left+offset);break;case"nw":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"nw-alt":coords.set("left",position.left);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne":coords.set("left",position.left-20);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne-alt":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left);break;case"sw":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"sw-alt":coords.set("left",
position.left);coords.set("top",position.top+offset);break;case"se":coords.set("left",position.left-20);coords.set("top",position.top+offset);break;case"se-alt":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case"n":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case"e":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case"s":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case"w":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case"nw":left=objectOffset.left;top=objectOffset.top;break;case"ne":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case"sw":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case"se":left=objectOffset.left+objectWidth;
top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest("svg")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=["nw","n","ne","e","se","s","sw","w"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push(
placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$("#"+options.popupId);if(tipElement.length===0){tipElement=$("<div/>",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(
session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,
function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);
tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,
finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));
return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}
function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),
elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,
viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip});
/*!
* jQuery UI Touch Punch 0.2.3
*
* Copyright 20112014, Dave Furfero
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Depends:
* jquery.ui.widget.js
* jquery.ui.mouse.js
*/!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,
"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);
/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017
* http://www.smartmenus.org/
* Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),
mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend(
$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(
this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("<span/>").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData(
"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id"
).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(
this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(
var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){
return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((
!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(
this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0
]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass(
"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){
t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]"
)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],$('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){
t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),
a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=(
e.wheelDelta||-e.detail)>0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,
downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2)
)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t
)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),
canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},
rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}
return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,
bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});

8
api/html/minus.svg Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
<rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 582 B

8
api/html/minusd.svg Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
<rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 582 B

BIN
api/html/nav_f.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

BIN
api/html/nav_fd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 B

BIN
api/html/nav_g.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

BIN
api/html/nav_h.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

BIN
api/html/nav_hd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

Some files were not shown because too many files have changed in this diff Show More