Русское сообщество по скриптингу

[INC] nVault Array

Файлы и модули, которые пригодятся при скриптинге для AMX Mod X или SourceMod.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено выкладывать файлы или модули для AMXX/SM, которые пригодятся при программировании.

[INC] nVault Array

Сообщение Subb98 » 10 июн 2017, 19:59

Автор: Bugsy
Источник: Вы должны зарегистрироваться, чтобы видеть ссылки.

Этот расширенный модуль добавляет возможность хранения массивов в 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
{
    
pdName32 ],
    
pdSteamID35 ],
    
pdKills,
    
pdDeaths,
    
pdHeadShots,
    
pdMoney,
    
Float:pdLastOrigin]
}

//Player data array id=5 is used to store, data loaded into id=6
new pdDataMAX_PLAYERS ][ PlayerData ];

//Arrays where data is being saved from
new iRegularArray];
new 
Float:fFloatArray];

//Arrays where data is being loaded in to
new iRegularArray2];
new 
Float:fFloatArray2];

public 
plugin_init()
{
    
g_Vault nvault_open"nvault_array_demo" );
    
    
register_concmd"TestSet" "TestSetFunc" );
    
register_concmd"TestGet" "TestGetFunc" );
}

public 
plugin_end()
{
    
nvault_closeg_Vault );
}

public 
TestSetFunc()
{
    new 
id 5;

    
//Fill array index with dummy player data
    
copypdDataid ][ pdName ] , charsmaxpdData[][ pdName ] ) , "bugsy" );
    
copypdDataid ][ pdSteamID ] , charsmaxpdData[][ pdSteamID ] ) , "STEAM_0:1:12345" );
    
pdDataid ][ pdKills ] = 524;
    
pdDataid ][ pdDeaths ] = 13;
    
pdDataid ][ pdHeadShots ] = 0;
    
pdDataid ][ pdMoney ] = 16000;
    
pdDataid ][ pdLastOrigin ][ ] = _:12.34;
    
pdDataid ][ pdLastOrigin ][ ] = _:56.78;
    
pdDataid ][ pdLastOrigin ][ ] = _:90.12;
    
    
//Display what was stored
    
server_print"SET %s" pdDataid ][ pdName ] );
    
server_print"SET %s" pdDataid ][ pdSteamID ] );
    
server_print"SET %d" pdDataid ][ pdKills ] );
    
server_print"SET %d" pdDataid ][ pdDeaths ] );
    
server_print"SET %d" pdDataid ][ pdHeadShots ] );
    
server_print"SET %d" pdDataid ][ pdMoney ] );
    
server_print"SET %f %f %f" pdDataid ][ pdLastOrigin ][ ] , pdDataid ][ pdLastOrigin ][ ] , pdDataid ][ pdLastOrigin ][ ] );
    
    
//Save array to nvault
    
nvault_set_arrayg_Vault "TestSet" pdDataid ] , sizeofpdData[] ) );
    
    
//Fill number arrays with dummy data and display
    
for ( new sizeofiRegularArray ) ; i++ )
    {
        
iRegularArray] = random545545 );
        
fFloatArray] = random_float( -5000.0 20000.0 );
        
        
server_print"%d - SET Regular=%d Float=%f" iRegularArray] , fFloatArray] );
    }
    
    
//Save arrays to nvault
    
nvault_set_arrayg_Vault "RegularArray" iRegularArray sizeofiRegularArray ) );
    
nvault_set_arrayg_Vault "FloatArray" fFloatArray sizeoffFloatArray ) );
}

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_arrayg_Vault "TestSet" pdDataid ] , sizeofpdData[] ) );
    
    
//Display data that was read
    
server_print"GET %s" pdDataid ][ pdName ] );
    
server_print"GET %s" pdDataid ][ pdSteamID ] );
    
server_print"GET %d" pdDataid ][ pdKills ] );
    
server_print"GET %d" pdDataid ][ pdDeaths ] );
    
server_print"GET %d" pdDataid ][ pdHeadShots ] );
    
server_print"GET %d" pdDataid ][ pdMoney ] );
    
server_print"GET %f %f %f" pdDataid ][ pdLastOrigin ][ ] , pdDataid ][ pdLastOrigin ][ ] , pdDataid ][ pdLastOrigin ][ ] );

    
//Read number arrays
    
nvault_get_arrayg_Vault "RegularArray" iRegularArray2 sizeofiRegularArray2 ) );
    
nvault_get_arrayg_Vault "FloatArray" fFloatArray2 sizeoffFloatArray2 ) );    
    
    
//Display number arrays read from vault
    
for ( new sizeofiRegularArray ) ; i++ )
    {
        
server_print"%d - GET Regular=%d Float=%f" iRegularArray2] , fFloatArray2] );
    }
У вас нет необходимых прав для просмотра вложений в этом сообщении.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Вернуться в Файлы и модули

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2