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

Не сохраняет nVault

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

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

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

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

Не сохраняет nVault

Сообщение NewKOD » 07 дек 2022, 15:16

Добрый день всем!

При создании Lvl системы у меня появился проблема, нету сохранения по nVault
Кому не сложно, скажите пожалуйста в чём ошибка?

Код: Выделить всё
#include < amxmodx >
#include < nvault >
#include < fun >
#include < ColorChat >
#include < hamsandwich >
#include < zombieplague >

#define MAX_LVL 50

new const NeedExp[ MAX_LVL + 1 ] = { 0, 2, 5, 8, 12, 15, 17, 20, 25, 28, 30, 33, 37, 40, 44, 46, 49, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 115, 125, 135, 145, 150, 160, 170, 180, 190, 200, //39
250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 1000
}

new MaxHealth[ MAX_LVL + 1 ] = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80,
82, 84, 86, 88, 90, 92, 94, 96, 98, 100
}

new GiveExpKillNemesis, GiveExpKillSurvivor, DoublerExpFlags, DoublerFlags[ 32 ]

new g_iLvl[ 33 ], g_iExp[ 33 ], iNvault

new bool
: iCanSave[ 33 ]

public plugin_init(){
    register_plugin( "[NK] - LvlSystem", "1.1", "NewKOD" )
    
    iNvault 
= nvault_open( "SaveLvlSystem" )
    
    RegisterHam
( Ham_Spawn, "player", "EVENT_Spawn", 1 )
    
    register_clcmd
( "test", "test" )
}

public test( iPlayer ) AddExpPlayer( iPlayer, NeedExp[ g_iLvl[ iPlayer ] ] )

public plugin_cfg(){
    bind_pcvar_num( create_cvar( "KillNemesis",         "15",     FCVAR_SERVER ), GiveExpKillNemesis )
    bind_pcvar_num( create_cvar( "KillSurvivor",         "15",     FCVAR_SERVER ), GiveExpKillSurvivor )
    bind_pcvar_num( create_cvar( "DoublerExpFlags",     "1",    FCVAR_SERVER ), DoublerExpFlags )
    
    bind_pcvar_string
( create_cvar( "FlagDblExp",         "t",     FCVAR_SERVER ), DoublerFlags, charsmax( DoublerFlags ) )
    
    AutoExecConfig
()
}

public client_connect( iPlayer ){
    LoadData( iPlayer )
}

public client_disconnected( iPlayer ){
    if( iCanSave[ iPlayer ] ) SaveData( iPlayer )
}

public EVENT_Spawn( iPlayer ){
    if( !zp_get_user_zombie( iPlayer ) ) set_user_health( iPlayer, ( 100 + MaxHealth[ g_iLvl[ iPlayer ] ] ) )
    
    set_task
( 0.1, "HudMessage", iPlayer + 777, _, _, "b" )
}

public HudMessage( taskid ){
    new iPlayer = taskid - 777
    
    set_hudmessage
( 255, 255, 0, 0.0, 0.18, 0, 6.0, 0.1 )
    show_hudmessage( iPlayer, "Уровень: [%d/%d]^nОпыт: [%d/%d]", g_iLvl[ iPlayer ], MAX_LVL, g_iExp[ iPlayer ], NeedExp[ g_iLvl[ iPlayer ] ] )
}

public LoadData( iPlayer ){
    new szSteam[ 35 ], iLvl, iExp
    
    get_user_authid
( iPlayer, szSteam, charsmax( szSteam ) )
    
    iLvl 
= nvault_get( iNvault, szSteam )
    iExp = nvault_get( iNvault, szSteam )
    
    g_iLvl
[ iPlayer ] = iLvl
    g_iExp
[ iPlayer ] = iExp
    
    if
( g_iLvl[ iPlayer ] == 0 ) g_iLvl[ iPlayer ] = 1
    
    iCanSave
[ iPlayer ] = true
}

public SaveData( iPlayer ){
    new szSteam[ 35 ], iLvl[ 32 ], iExp[ 32 ]
    
    get_user_authid
( iPlayer, szSteam, charsmax( szSteam ) )
    
    num_to_str
( g_iLvl[ iPlayer ], iLvl, charsmax( iLvl ) )
    num_to_str( g_iExp[ iPlayer ], iExp, charsmax( iExp ) )
    
    nvault_set
( iNvault, szSteam, iLvl )
    nvault_set( iNvault, szSteam, iExp )
}

public plugin_end(){
    nvault_close( iNvault )
}

stock AddExpPlayer( iPlayer, iAmmount, iMessage = 1 ){
    if( g_iLvl[ iPlayer ] != MAX_LVL ) g_iExp[ iPlayer ] += iAmmount
    
    if
( g_iExp[ iPlayer ] >= NeedExp[ g_iLvl[ iPlayer ] ] ){
        g_iLvl[ iPlayer ] += 1
        g_iExp
[ iPlayer ] = 0
        
        new iName
[ 32 ]
        
        get_user_name
( iPlayer, iName, charsmax( iName ) )
        
        if
( iMessage == 1 ){
            ColorChat( 0, BLUE, "^4[^3ZP^4] ^1Игрок ^4%s ^1Достиг ^4%d ^1Уровня.", iName, g_iLvl[ iPlayer ] )
        }
        
        ColorChat
( iPlayer, BLUE, "^4[^3ZP^4] ^1Игрок ^4%s ^1Теперь для нового уровня нужно ^4%d ^1exp", iName, NeedExp[ g_iLvl[ iPlayer ] ] )
        ColorChat( iPlayer, BLUE, "^4[^3ZP^4] ^1Так-же, теперь у вас ^4+[%d] ^1Здоровья в начале раунда.", MaxHealth[ g_iLvl[ iPlayer ] ] )
    }
}


Спасибо!

Добавлено спустя 2 часа 58 минут 29 секунд:
Понял в чём ошибка. нужно делать два nvault | new iNvaultLvl, iNvaultExp |
Аватара пользователя
NewKOD
 
Сообщения: 57
Зарегистрирован: 24 май 2022, 18:32
Благодарил (а): 18 раз.
Поблагодарили: 4 раз.
Языки программирования: Знаю amxx но слабо

Re: Не сохраняет nVault

Сообщение [N][E][M][E][C] » 08 дек 2022, 00:11

А зачем 2? Неужели надо плодить переменные? Или все таки записать разное значение ключа? Или на крайняк, в записываемую переменную через пробел записать значения, а при получении парсить строку?
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: Не сохраняет nVault

Сообщение БиЗоН » 08 дек 2022, 16:02

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

Зачем? в AMXX >= 1.9.0 есть встроенный цветной чат.
Смотри функцию client_print_color в amxmodx.inc.

Тебя не смущает, что у тебя для уровня и для опыта один ключ - стим айди игрока?
Сделай разделение ключей:
Код: Выделить всё
public LoadData( iPlayer ){
    new szSteam[ 35 ], sKeyLvl[ 40 ], sKeyExp[ 40 ]
    
    get_user_authid
( iPlayer, szSteam, charsmax( szSteam ) )
    
    format
(sKeyLvl, charsmax(sKeyLvl), "%s_lvl", szSteam);
    format(sKeyExp, charsmax(sKeyExp), "%s_exp", szSteam);

    g_iLvl[ iPlayer ] = nvault_get( iNvault, sKeyLvl )
    g_iExp[ iPlayer ] = nvault_get( iNvault, sKeyExp )
    
    if
( g_iLvl[ iPlayer ] == 0 ) g_iLvl[ iPlayer ] = 1
    
    iCanSave
[ iPlayer ] = true
}

public SaveData( iPlayer ){
    new szSteam[ 35 ], sKeyLvl[ 40 ], sKeyExp[ 40 ], iLvl[ 32 ], iExp[ 32 ]
    
    get_user_authid
( iPlayer, szSteam, charsmax( szSteam ) )
    
    format
(sKeyLvl, charsmax(sKeyLvl), "%s_lvl", szSteam);
    format(sKeyExp, charsmax(sKeyExp), "%s_exp", szSteam);
    
    num_to_str
( g_iLvl[ iPlayer ], iLvl, charsmax( iLvl ) )
    num_to_str( g_iExp[ iPlayer ], iExp, charsmax( iExp ) )
    
    nvault_set
( iNvault, sKeyLvl, iLvl )
    nvault_set( iNvault, sKeyExp, iExp )
}


Нужны разные ключи для переменных опыта и уровня, либо же хранить с одним ключом массив данных.
А две базы nvault создавать не нужно для твоей лвл системы.
Вечно занятой. Вечно в павне.
Аватара пользователя
БиЗоН
 
Сообщения: 165
Зарегистрирован: 24 мар 2014, 21:05
Благодарил (а): 10 раз.
Поблагодарили: 49 раз.
Опыт программирования: Больше трех лет

Re: Не сохраняет nVault

Сообщение [N][E][M][E][C] » 08 дек 2022, 17:24

Бизон, я тоже самое выше написал, кроме колор чата
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи


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

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

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

cron