Автор: Bugsy
Источник: Вы должны зарегистрироваться, чтобы видеть ссылки.
Этот расширенный модуль добавляет возможность хранения массивов в nVault. Оригинальный nVault модуль позволяет сохранять данные только как одну строку. Это делает код объёмным, когда вам нужно хранить несколько фрагментов данных, потому что сначала вам нужно преобразовать их в одну строку перед сохранением. Кроме того, при извлечении данных вам необходимо распарсить каждое значение из строки, а затем преобразовать его обратно в целое число и / или скопировать его в переменную. Этот модуль решает данную проблему, позволяя вам сохранять и извлекать данные непосредственно в массив и из него. Данные различных типов (int, bool, string, float) могут храниться в одном массиве, который объявлен через enum (см. пример плагина).
Функции:
Источник: Вы должны зарегистрироваться, чтобы видеть ссылки.
Этот расширенный модуль добавляет возможность хранения массивов в nVault. Оригинальный nVault модуль позволяет сохранять данные только как одну строку. Это делает код объёмным, когда вам нужно хранить несколько фрагментов данных, потому что сначала вам нужно преобразовать их в одну строку перед сохранением. Кроме того, при извлечении данных вам необходимо распарсить каждое значение из строки, а затем преобразовать его обратно в целое число и / или скопировать его в переменную. Этот модуль решает данную проблему, позволяя вам сохранять и извлекать данные непосредственно в массив и из него. Данные различных типов (int, bool, string, float) могут храниться в одном массиве, который объявлен через enum (см. пример плагина).
Функции:
- nvault_set_array() - сохранение массива в .vault файл.
- nvault_get_array() - получение массива из .vault файла.
- nvault_arraysize() - возвращает размер сохранённого массива.
- nvault_isarray() - проверяет, являются ли данные массивом.
- nvault_set_array( vault , key , array[] , size )
Функция сохраняет массив в .vault файл.
Максимальный размер массива для сохранения - 500 ячеек; вы можете увеличить это значение изменением константы _NVAULT_ARRAY_MAXARRAYSIZE в nvault_array.inc. Поддерживаются только те многомерные массивы, которые объявлены через enum. Массивы хранятся в двоичном формате с кодировкой, чтобы исключить включение нулевых байтов в выходной строке. Это означает, что вы не можете редактировать / просматривать массивы, сохраненные в .vault файл, с помощью приложений типа nVault Editor.- Код: Выделить всё
vault - обработчик
key - ключ записи
array[] - массив с исходными данными
size - размер массива
- nvault_get_array( vault , key , array[] , size )
Функция считывает массив из .vault файла.
Это будет работать только для массивов, сохранённых через функцию nvault_set_array().- Код: Выделить всё
vault - обработчик
key - ключ записи
array[] - массив для входных данных
size - размер массива
- nvault_arraysize( vault , key )
Эта функция возвращает размер массива, хранящегося в .vault файле. Вернёт 0, если запись не существует или данные записи .vault файла не являются массивом. Иначе будет возвращать размер массива в ячейках.- Код: Выделить всё
vault - обработчик
key - ключ записи
- nvault_isarray( vault , key )
Функция проверяет, являются ли данные массивом.- Код: Выделить всё
vault - обработчик
key - ключ записи
- Код: Выделить всё
#include <amxmodx>
#include <nvault_array>
#define MAX_PLAYERS 32
new g_Vault;
enum _:PlayerData
{
pdName[ 32 ],
pdSteamID[ 35 ],
pdKills,
pdDeaths,
pdHeadShots,
pdMoney,
Float:pdLastOrigin[ 3 ]
}
//Player data array id=5 is used to store, data loaded into id=6
new pdData[ MAX_PLAYERS + 1 ][ PlayerData ];
//Arrays where data is being saved from
new iRegularArray[ 5 ];
new Float:fFloatArray[ 5 ];
//Arrays where data is being loaded in to
new iRegularArray2[ 5 ];
new Float:fFloatArray2[ 5 ];
public plugin_init()
{
g_Vault = nvault_open( "nvault_array_demo" );
register_concmd( "TestSet" , "TestSetFunc" );
register_concmd( "TestGet" , "TestGetFunc" );
}
public plugin_end()
{
nvault_close( g_Vault );
}
public TestSetFunc()
{
new id = 5;
//Fill array index with dummy player data
copy( pdData[ id ][ pdName ] , charsmax( pdData[][ pdName ] ) , "bugsy" );
copy( pdData[ id ][ pdSteamID ] , charsmax( pdData[][ pdSteamID ] ) , "STEAM_0:1:12345" );
pdData[ id ][ pdKills ] = 524;
pdData[ id ][ pdDeaths ] = 13;
pdData[ id ][ pdHeadShots ] = 0;
pdData[ id ][ pdMoney ] = 16000;
pdData[ id ][ pdLastOrigin ][ 0 ] = _:12.34;
pdData[ id ][ pdLastOrigin ][ 1 ] = _:56.78;
pdData[ id ][ pdLastOrigin ][ 2 ] = _:90.12;
//Display what was stored
server_print( "SET %s" , pdData[ id ][ pdName ] );
server_print( "SET %s" , pdData[ id ][ pdSteamID ] );
server_print( "SET %d" , pdData[ id ][ pdKills ] );
server_print( "SET %d" , pdData[ id ][ pdDeaths ] );
server_print( "SET %d" , pdData[ id ][ pdHeadShots ] );
server_print( "SET %d" , pdData[ id ][ pdMoney ] );
server_print( "SET %f %f %f" , pdData[ id ][ pdLastOrigin ][ 0 ] , pdData[ id ][ pdLastOrigin ][ 1 ] , pdData[ id ][ pdLastOrigin ][ 2 ] );
//Save array to nvault
nvault_set_array( g_Vault , "TestSet" , pdData[ id ] , sizeof( pdData[] ) );
//Fill number arrays with dummy data and display
for ( new i = 0 ; i < sizeof( iRegularArray ) ; i++ )
{
iRegularArray[ i ] = random( 545545 );
fFloatArray[ i ] = random_float( -5000.0 , 20000.0 );
server_print( "%d - SET Regular=%d Float=%f" , i , iRegularArray[ i ] , fFloatArray[ i ] );
}
//Save arrays to nvault
nvault_set_array( g_Vault , "RegularArray" , iRegularArray , sizeof( iRegularArray ) );
nvault_set_array( g_Vault , "FloatArray" , fFloatArray , sizeof( fFloatArray ) );
}
public TestGetFunc()
{
//id=5 is holding the data that we manually loaded into it and we do not want to that that since it
//will not tell us for sure that data successfully read into it from nvault.
//id=6 will be used since it is empty.
new id = 6;
//Read array into array
nvault_get_array( g_Vault , "TestSet" , pdData[ id ] , sizeof( pdData[] ) );
//Display data that was read
server_print( "GET %s" , pdData[ id ][ pdName ] );
server_print( "GET %s" , pdData[ id ][ pdSteamID ] );
server_print( "GET %d" , pdData[ id ][ pdKills ] );
server_print( "GET %d" , pdData[ id ][ pdDeaths ] );
server_print( "GET %d" , pdData[ id ][ pdHeadShots ] );
server_print( "GET %d" , pdData[ id ][ pdMoney ] );
server_print( "GET %f %f %f" , pdData[ id ][ pdLastOrigin ][ 0 ] , pdData[ id ][ pdLastOrigin ][ 1 ] , pdData[ id ][ pdLastOrigin ][ 2 ] );
//Read number arrays
nvault_get_array( g_Vault , "RegularArray" , iRegularArray2 , sizeof( iRegularArray2 ) );
nvault_get_array( g_Vault , "FloatArray" , fFloatArray2 , sizeof( fFloatArray2 ) );
//Display number arrays read from vault
for ( new i = 0 ; i < sizeof( iRegularArray ) ; i++ )
{
server_print( "%d - GET Regular=%d Float=%f" , i , iRegularArray2[ i ] , fFloatArray2[ i ] );
}
}