Не срабатывает сохранение nvault

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
3
Реакции
0
Ошибка
Не срабатывает сохранение nvault
ОС
Linux
Amx Mod X
1.9.0.5294
Билд
ReHLDS version: 3.13.0.783-dev-mpatch
ReGamedll
5.22.0.593
Версия Metamod
1.3.0.131
Список метамодулей
[ 1] AMX Mod X        RUN   -    amxmodx_mm_i386.so        v1.9.0.5294  ini  Start ANY  
[ 2] Reunion RUN - reunion_mm_i386.so v0.1.92d ini Start Never
[ 3] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 4] Revoice RUN - revoice_mm_i386.so v0.1.0.34 ini Start Never
[ 5] SafeNameAndChat RUN - SafeNameAndChat.so v1.2 Beta 3 ini ANY ANY
[ 6] WHBlocker RUN - whblocker_mm_i386.so v1.5.697 ini Chlvl ANY
[ 7] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[ 8] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[ 9] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[10] Engine RUN - engine_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
10 plugins, 10 running
Список плагинов
Не имеет значения, так как отключали все лишнее и проверяли, проблема оставалась
Автор плагина
Идея взята из интернета и написана с нуля нами
Версия плагина
Идея взята из интернета и написана с нуля нами
Исходный код
#include <amxmodx>
#include <zombieplague>
#include <hamsandwich>
#include <nvault>

#define VAULT_NAME "zp_zombie_class"

new g_Vault, zombie_id[MAX_PLAYERS+1];

public plugin_init()
{
g_Vault = nvault_open(VAULT_NAME);
RegisterHamPlayer(Ham_Spawn, "player_respawn", 0);
if (g_Vault == INVALID_HANDLE)
set_fail_state("Error opening '%s' nVault.", VAULT_NAME);
}

public plugin_end()
{
nvault_close(g_Vault);
}

public player_respawn(client)
{
if(zp_get_user_zombie_class(client) != zombie_id[client])
zp_set_user_zombie_class(client, zombie_id[client]);
}

public client_putinserver(client)
{
if(!is_user_bot(client) && !is_user_hltv(client))
{
new szKey[40], buffer[4];
get_user_authid(client, szKey, sizeof(szKey));

format(szKey, charsmax(szKey), "%sZOMBIEID", szKey);
nvault_get(g_Vault, szKey, buffer, sizeof(buffer));
zombie_id[client] = str_to_num(buffer);
}
}

public client_disconnected(client)
{
if(!is_user_bot(client) && !is_user_hltv(client))
{
new szZombie[7], szKey[40]
get_user_authid(client, szKey, sizeof(szKey));

format(szKey, charsmax(szKey), "%sZOMBIEID", szKey);
formatex(szZombie, charsmax(szZombie), "%d", zp_get_user_next_class(client) == -1 ? zombie_id[client] : zp_get_user_next_class(client));

nvault_set(g_Vault, szKey, szZombie);
}
}

public zp_user_infected_post(client, infector, nemesis)
{
zombie_id[client] = zp_get_user_zombie_class(client);
}
Здравствуйте уважаемые, подскажите в чем может быть дело, уже готовы fvault подключать, перешли с Source Engine на AMXX, бывает сталкиваемся с проблемами, где решение лежит сверху, а мы копаем глубже)
7 Авг 2023
Пожалуйста не пишите бессмысленные сообщения о MySQL, такие легкие плагины не нужно ставить на SQL базу, это глупо. Мы ищем решения конкретной проблемы, а не способа обхода проблемы. Спасибо!
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
459
Реакции
272
Помог
9 раз(а)
такие легкие плагины не нужно ставить на SQL базу, это глупо
У вас нет SQLite/MySQL базы для банов, мутов, возможно, сайта?
Нагрузки от такого решения призванного упростить жизнь в разработке подобных плагинов вы не заметите, удобства прибавится, а проблем - убавится. К тому же когда появится необходимость добавлять подобные сохранения в другие плагины - не нужно будет снова открывать еще один nvault файл. Про nvault также есть несколько тем на форуме, где рекомендуется отказаться от его использования из-за (пока еще никем) необъяснимых падений сервера вызванных этим модулем.
 
Сообщения
3
Реакции
0
ufame, веб хостинг есть, я планировал в MySql вывести основные плагины, в nvault маленькие. Про падания, думаю что причины крашей не лежат в самом модуле, столько лет игре. Скорее его не совместимость с чем-то другим, лишь предположение. В общем я все так же жду ответа, скорее всего перейду на MySql, но быть может кому-то эта информация будет полезна.
 
Сообщения
75
Реакции
36
Помог
4 раз(а)
Во первых в ZP43 есть натив zp_set_user_zombie_class , для чего такие танцы с респой игрока - не понятно.
Во вторых, client_disconnected может вызываться ещё до client_putinserver, собственно тут две развилки событий, либо же создание бульной которой сетим тру в client_putinserver понимая что он реально дошёл и после чего проверяем перед записью ключа в client_disconnected равна ли тру наша бульная. Либо же проверка через get_member(pPlayer, m_bJustConnected) (хотя я не уверен что оно правдивое в дисконнекте, так что утверждать не стану, стоит тестировать). Вероятнее всего именно из-за этого и случается эта проблема, потому-что в дисконнекте игрока перезаписывается собственно последнее значение (например 0) в ваулт.
 
Сообщения
397
Реакции
221
Помог
13 раз(а)
terrorist221,

Код:
#include <amxmodx>
#include <zombieplague>
#include <hamsandwich>
#include <nvault>
#define VAULT_NAME "zp_zombie_class"
new g_Vault, zombie_id[MAX_PLAYERS+1];
public plugin_init()
{
    g_Vault = nvault_open(VAULT_NAME);
    RegisterHamPlayer(Ham_Spawn, "player_respawn", 0);
    if (g_Vault == INVALID_HANDLE)
        set_fail_state("Error opening '%s' nVault.", VAULT_NAME);
}
public plugin_end()
{
    nvault_close(g_Vault);
}
public player_respawn(client)
{
    if(zp_get_user_zombie_class(client) != zombie_id[client]) {
        zp_set_user_zombie_class(client, zombie_id[client]);
        new szAuthId[64];
        get_user_authid(client,szAuthId,charsmax(szAuthId));
        new szClass[10];
        num_to_str(zp_get_user_next_class(client) == -1 ? zombie_id[client] : zp_get_user_next_class(client),szClass,charsmax(szClass));
        nvault_set(g_Vault,szAuthId,szClass);
    }
}
public client_putinserver(client)
{
    if(!is_user_bot(client) && !is_user_hltv(client))
    {
        new szAuthId[64];
        get_user_authid(client,szAuthId,charsmax(szAuthId));
        zombie_id[client] = nvault_get(g_Vault,szAuthId);
        /* new szKey[40], buffer[4];
        get_user_authid(client, szKey, sizeof(szKey));
        format(szKey, charsmax(szKey), "%sZOMBIEID", szKey);
        nvault_get(g_Vault, szKey, buffer, sizeof(buffer));
        zombie_id[client] = str_to_num(buffer); */
    }
}
/* public client_disconnected(client)
{
    if(!is_user_bot(client) && !is_user_hltv(client))
    {
        new szZombie[7], szKey[40]
        get_user_authid(client, szKey, sizeof(szKey));
        format(szKey, charsmax(szKey), "%sZOMBIEID", szKey);
        formatex(szZombie, charsmax(szZombie), "%d", zp_get_user_next_class(client) == -1 ? zombie_id[client] : zp_get_user_next_class(client));
        nvault_set(g_Vault, szKey, szZombie);
    }
} */
public zp_user_infected_post(client, infector, nemesis)
{
    zombie_id[client] = zp_get_user_zombie_class(client);
}
1691371324335.png
 

Download all Attachments

  • 1.9 KB Просмотры: 54
Сообщения
3
Реакции
0
Ребята спасибо что подсказали, на сколько знаю для set user class нужно будет апи подключать. Тему закрываю.
7 Авг 2023
b0t., пока не проверял, попробую.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу