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

Хранение данных в памяти сервера

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

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

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

Хранение данных в памяти сервера

Сообщение unrealfart » 05 апр 2018, 21:10

Здравствуйте, где-то, когда-то слышал о хранении данных в памяти сервера, не уверен, что правильно выразился, но суть такая:
Записывать данные игрока и значение переменной, и хранить их до смены карты, чтобы при реконекте значения сохранялись, например значение булевой.
В поиске по форуму ничего не нашел(возможно плохо искал), так вот, если такое возможно подтолкните, если есть уже ответ, ткните носом C:
Аватара пользователя
unrealfart
 
Сообщения: 264
Зарегистрирован: 23 фев 2016, 19:45
Благодарил (а): 53 раз.
Поблагодарили: 18 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Re: Хранение данных в памяти сервера

Сообщение Vaqtincha » 05 апр 2018, 21:57

Trie массив
админгандонсоси
Аватара пользователя
Vaqtincha
 
Сообщения: 277
Зарегистрирован: 28 мар 2018, 15:05
Забанен
Благодарил (а): 8 раз.
Поблагодарили: 53 раз.

Re: Хранение данных в памяти сервера

Сообщение unrealfart » 06 апр 2018, 00:52

Vaqtincha, Можно не большой пример с ником игрока и значением, тему на форуме с Trie нашел, но так и не понял как правильно записать в нее данные

Добавлено спустя 1 час 27 минут 38 секунд:
Вроде бы разобрался чуть, может кто глянуть и указать на ошибки?

Код: Выделить всё
#include <amxmodx>
#include <amxmisc>

#pragma semicolon 1

new const Title[] = "Test Trie";
new const 
Version[] = "0.1";
new const 
Author[] = "unreafart";

const 
TASK_INFORMER 4865465;

enum _:COLORS
{
    
cRED,
    
cGREEN,
    
cBLUE
};
new 
g_iHudColor[MAX_PLAYERS 1][COLORS];

new 
Trie:g_tHudColors;

public 
plugin_init()
{
    
register_plugin(TitleVersionAuthor);

    
register_clcmd("trie""ClCmd_SettingsMenu");

    
register_menu("Show_SettingsMenu", (1<<0|1<<1|1<<2|1<<9), "Handler_SettingsMenu");

    
g_tHudColors TrieCreate();
}
public 
ClCmd_SettingsMenu(iPlayer)
{
    
Show_SettingsMenu(iPlayer);
}
public 
client_putinserver(iPlayer)
{
    
set_task(1.0"Show_Informer"iPlayer TASK_INFORMER, .flags "b");
}
public 
Show_Informer(iPlayer)
{
    
iPlayer -= TASK_INFORMER;

    new 
szName[MAX_NAME_LENGTH];
    new 
szBuffer[MAX_PLAYERS];

    
get_user_name(iPlayerszNamecharsmax(szName));

    if(
TrieKeyExists(g_tHudColors"key_name"))
    {
        
TrieGetString(g_tHudColors"key_name"szBuffercharsmax(szBuffer));
    }

    if(
equal(szNameszBuffer))
    {
        
TrieGetCell(g_tHudColors"key_red"g_iHudColor[iPlayer][cRED]);
        
TrieGetCell(g_tHudColors"key_green"g_iHudColor[iPlayer][cGREEN]);
        
TrieGetCell(g_tHudColors"key_blue"g_iHudColor[iPlayer][cBLUE]);
    }

    
set_hudmessage(g_iHudColor[iPlayer][cRED], g_iHudColor[iPlayer][cGREEN], g_iHudColor[iPlayer][cBLUE], 0.130.400.00.80.20.2, -1);
    
show_hudmessage(iPlayer"Test hud color");
}
public 
Show_SettingsMenu(iPlayer)
{
    new 
szMenu[512];
    new 
iLen;
    new 
iKeys = (1<<0|1<<1|1<<2|1<<8|1<<9);

    
iLen formatex(szMenucharsmax(szMenu), "\rМеню настроек^n^n");

    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y[1] \wКрасный цвет^n");
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y[2] \wЗеленый цвет^n");
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y[2] \wСиний цвет^n");

    
formatex(szMenu[iLen], charsmax(szMenu) - iLen"^n\y[0] \wВыход");

    return 
show_menu(iPlayeriKeysszMenu, -1"Show_SettingsMenu");
}
public 
Handler_SettingsMenu(iPlayeriKey)
{
    switch(
iKey)
    {
        case 
0:
        {
            
g_iHudColor[iPlayer][cRED] = 255;
            
g_iHudColor[iPlayer][cGREEN] = 0;
            
g_iHudColor[iPlayer][cBLUE] = 0;

            
TrieSetCell(g_tHudColors"key_red"g_iHudColor[iPlayer][cRED]);
            
TrieSetCell(g_tHudColors"key_green"g_iHudColor[iPlayer][cGREEN]);
            
TrieSetCell(g_tHudColors"key_blue"g_iHudColor[iPlayer][cBLUE]);
        }
        case 
1:
        {
            
g_iHudColor[iPlayer][cRED] = 0;
            
g_iHudColor[iPlayer][cGREEN] = 255;
            
g_iHudColor[iPlayer][cBLUE] = 0;

            
TrieSetCell(g_tHudColors"key_red"g_iHudColor[iPlayer][cRED]);
            
TrieSetCell(g_tHudColors"key_green"g_iHudColor[iPlayer][cGREEN]);
            
TrieSetCell(g_tHudColors"key_blue"g_iHudColor[iPlayer][cBLUE]);
        }
        case 
2:
        {
            
g_iHudColor[iPlayer][cRED] = 0;
            
g_iHudColor[iPlayer][cGREEN] = 0;
            
g_iHudColor[iPlayer][cBLUE] = 255;

            
TrieSetCell(g_tHudColors"key_red"g_iHudColor[iPlayer][cRED]);
            
TrieSetCell(g_tHudColors"key_green"g_iHudColor[iPlayer][cGREEN]);
            
TrieSetCell(g_tHudColors"key_blue"g_iHudColor[iPlayer][cBLUE]);
        }
        case 
9: return PLUGIN_HANDLED;
    }
    
Show_SettingsMenu(iPlayer);

    return 
PLUGIN_HANDLED;
}
 
Аватара пользователя
unrealfart
 
Сообщения: 264
Зарегистрирован: 23 фев 2016, 19:45
Благодарил (а): 53 раз.
Поблагодарили: 18 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Re: Хранение данных в памяти сервера

Сообщение RevCrew » 06 апр 2018, 01:44

unrealfart, key = name, a value = enum Colors, т.к каждому ключу может соответствовать только одно значения, то вам понадобиться enum.

Код: Выделить всё

new data
[Colors];
static ip[IP_SIZE]; get_user_ip(id, ip, sizeof(ip) - 1, .without_port=1)
TrieGetArray(g_trie, ip, data, charsmax(data))
g_iHudColors[id] = _:data // ну либо почленно приравнивать цвета.
//СОхранять
new data[Colors]; data[cRed] = 255;
TrieSetCell(g_trie, ip, data, charsmax(data));

// Если перезаписать надо
TrieDeleteKey(g_trie, ip);
TrieSetCell(g_trie, ip, data, charsmax(data));
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Хранение данных в памяти сервера

Сообщение unrealfart » 06 апр 2018, 16:50

RevCrew, аааа сложнааа

Добавлено спустя 50 минут 55 секунд:
При таком коде ошибка связанная с неверным передаваемым аргументом, в строке с TrieSetCell
Код: Выделить всё

tData
[cRED] = 255;
tData[cGREEN] = 0;
tData[cBLUE] = 0;
TrieSetCell(g_tHudColors, szName, tData, charsmax(tData));
 


А если так сделать, то нормально
Код: Выделить всё

tData
[cRED] = 255;
tData[cGREEN] = 0;
tData[cBLUE] = 0;
TrieSetCell(g_tHudColors, szName, tData[cRED]);
 


Как можно массив запихнуть в Trie?

Добавлено спустя 8 минут 5 секунд:
Я понял, там должно быть sizeof
Аватара пользователя
unrealfart
 
Сообщения: 264
Зарегистрирован: 23 фев 2016, 19:45
Благодарил (а): 53 раз.
Поблагодарили: 18 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Re: Хранение данных в памяти сервера

Сообщение RevCrew » 06 апр 2018, 17:16

unrealfart, TrieSetArray, это я перепутал:D
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Хранение данных в памяти сервера

Сообщение unrealfart » 06 апр 2018, 17:25

RevCrew, Воооо, теперь все работает, а то я все никак понять не мог, получаем данные из массива, а значения устанавливаем числом

Добавлено спустя 2 минуты 7 секунд:
Обязательно ли проверять на существование ключа?

Добавлено спустя 1 минуту 24 секунды:
И я так понял, лучше удалять ключ перед сменой значений, так как цвета накладываются друг на друга
Аватара пользователя
unrealfart
 
Сообщения: 264
Зарегистрирован: 23 фев 2016, 19:45
Благодарил (а): 53 раз.
Поблагодарили: 18 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Re: Хранение данных в памяти сервера

Сообщение RevCrew » 06 апр 2018, 17:26

unrealfart, как хочешь, в зависимости от того что тебе нужно
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Хранение данных в памяти сервера

Сообщение unrealfart » 06 апр 2018, 17:30

Цвет худ сообщения менять, например

Добавлено спустя 58 секунд:
Задумка такая: сделать различные настройки сервера под игроков, с возможностью их менять и чтобы они сохранялись до смены карты, например, цвет информера, цвета хука, эффекты хука и т.д.
Аватара пользователя
unrealfart
 
Сообщения: 264
Зарегистрирован: 23 фев 2016, 19:45
Благодарил (а): 53 раз.
Поблагодарили: 18 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn


Вернуться в Вопросы по AMXX и его плагинам

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

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