где хранятся данные в vip_test

IIuToH

Только чтение
Заблокированные
Регистрация
5 Авг 2018
Сообщения
143
Симпатии
0
Предупреждения
260
Здравствуйте! есть плагин vip_test но вот не пойму где хранятся данные игроков которые взяли тестовый вип (нужно что бы я мог удалять игроков не дожидаясь концовки срока) И что бы они все заного писали в чат /testvip
Код:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <colorchat>

#define PLUGIN "Test vip"
#define VERSION "1.0"
#define AUTHOR "speedkill edit apTmusic"

#define Flaga ADMIN_LEVEL_H

new use[33] = 0
new czas_gracza[33]
new prefix[33]
new g_vault
new czas
new zapis

//By R3X
getFormatedTime(iTime, szTime[], size)
{
    new hours = iTime/3600
    formatex(szTime, size, "%d часов и %d минут", hours, iTime%3600/60)
}
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    g_vault = nvault_open("24h_vip")
    register_clcmd("say /testvip","vip_test")
   
    register_cvars()
}
public register_cvars()
{
    czas = register_cvar("amx_viptest_czas","24")
    zapis = register_cvar("amx_viptest_save","1")
    register_cvar("amx_viptest_prefix","[Test-VIP]")
}
public plugin_cfg()
{
    get_cvar_string("amx_viptest_prefix", prefix, 32)
}
public vip_test(id)
{
    if(is_user_connected(id))
    {
        if(get_user_flags(id) & Flaga || use[id] == 1)
        {
            ColorChat(id, RED, "%s^x01 Вы уже вип, или вы уже брали пробный период !",prefix)
        }
        else
        {
            use[id] = 1
            czas_gracza[id] = get_pcvar_num(czas)*3600
            set_task(1.0,"sprawdz",id,_,_,"b")
            set_task(30.0,"timer",id,_,_,"b")
            set_user_flags(id, get_user_flags(id) | Flaga)
            save(id)
        }
    }
}
public sprawdz(id)
{
    czas_gracza[id]--
    if(czas_gracza[id] <= 0)
    {
        if(task_exists(id))
        {
            remove_task(id)
        }
        remove_user_flags(id, Flaga)
    }
}
public client_disconnect(id)
{
    if(task_exists(id))
    {
        remove_task(id)
    }
    if(use[id] == 1)
    {
        save(id)
    }
}
public client_connect(id)
{
    use[id] = 0
    czas_gracza[id] = 0
    set_task(2.0,"load",id)
}
public save(id)
{
    new name[64]
    switch(get_pcvar_num(zapis))
    {
        case 1:
        {
            get_user_name(id,name,63)
        }
        case 2:
        {
            if(is_user_steam(id))
            {
                get_user_authid(id, name, 63)
            }
            else
            {
                get_user_name(id,name,63)
            }
        }
    }
   
    new vaultkey[64],vaultdata[256]
    format(vaultkey,63,"%s-vip",name)
    format(vaultdata,255,"%d#%d",czas_gracza[id],use[id])
    nvault_set(g_vault,vaultkey,vaultdata)
}
public load(id)
{
    new name[64]
    switch(get_pcvar_num(zapis))
    {
        case 1:
        {
            get_user_name(id,name,63)
        }
        case 2:
        {
            if(is_user_steam(id))
            {
                get_user_authid(id, name, 63)
            }
            else
            {
                get_user_name(id,name,63)
            }
        }
    }
   
    new vaultkey[64],vaultdata[256]
    get_user_name(id,name,63)
    format(vaultkey,63,"%s-vip",name)
    format(vaultdata,255,"%d#%d",czas_gracza[id], use[id])
    nvault_get(g_vault,vaultkey,vaultdata,255)
    replace_all(vaultdata, 255, "#", " ")
   
    new zmienna[33], zmienna1[33]
    parse(vaultdata, zmienna, 32, zmienna1, 32)  
   
    czas_gracza[id] = str_to_num(zmienna)
    use[id] = str_to_num(zmienna1)
   
    if(czas_gracza[id] > 0)
    {
        set_task(120.0,"timer",id,_,_,"b")
        set_task(1.0,"sprawdz",id,_,_,"b")
        set_user_flags(id, get_user_flags(id) | Flaga)
    }
    else
    {
        set_task(200.0,"reklama",id,_,_,"b")
    }
}
public timer(id)
{
    new szTime[32]
    getFormatedTime(czas_gracza[id], szTime, 31)
    ColorChat(id, RED, "%s^x01 До конца тестового випа осталось : ^x04%s ^x01!",prefix,szTime)
}
public reklama(id)
{
    ColorChat(id, RED, "%s^x01 Вы хостите получить тестовую випку на ^x04%d ^x01 часа ?",prefix, get_pcvar_num(czas))
    ColorChat(id, RED, "%s^x01 Напишите ^x04/testvip^x01, и вы сможете проверить возможности випки :)",prefix)
}

stock bool:is_user_steam(id) {
    new authid[32]; get_user_authid(id, authid, 31);
    return bool:(contain(authid, "STEAM_0:0:") != -1 || contain(authid, "STEAM_0:1:") != -1);
}
 

ifx

Пользователь
Регистрация
11 Фев 2018
Сообщения
361
Симпатии
148
cstrike/addons/amxmodx/data/vault/

ps больше set_task в плагинах, больше! >_>
 

skitls

Пользователь
Регистрация
21 Июн 2017
Сообщения
216
Симпатии
62
Пол
Мужской
Какой именно у вас вариант? sqlite, mysql?[DOUBLEPOST=1538255902][/DOUBLEPOST]Если первый вариант, то вам уже дали ответ выше.
Это путь к файлу сохранения через фтп
Если же второй, то в бд которую создали
 

ifx

Пользователь
Регистрация
11 Фев 2018
Сообщения
361
Симпатии
148
skitls, у него в плагине посмотри идет инклуд nvault, сразу понятно что это sqllite
 

skitls

Пользователь
Регистрация
21 Июн 2017
Сообщения
216
Симпатии
62
Пол
Мужской
skitls, у него в плагине посмотри идет инклуд nvault, сразу понятно что это sqllite
исходник не сразу увидел)
У меня просто поновее.

C++:
#include <amxmodx>
#include <sqlx>
#include <csstats>
#pragma tabsize 0 /* Впадлу.... */
/* константы */
#define VIP_TEST_HOUR 5
#define S_MINUTE 3600
#define S_HOUR 3600
#define DB_SAVEBY_STEAMID            0
#define DB_SAVEBY_IP                1
#define DB_SAVEBY_NAME                2
#define SAVE_TYPE                     0    //0 - по стимид  1 -по айпи  2 - по нику
#define DB_SAVE                    2    //1-sqlite 2- mysql
#define MAX_PLAYER                    32
#define MIN_RANK                    1500 /* Чтобы новые аккаунты не брали */

new const szTableName[] = "vip_test"     //Название таблицы
new const szDBHost[] = ""                // Адрес хоста
new const szDBUser[] = ""                //Пользователь
new const szDBPass[] = ""                //Пароль от бд
new const szBDName[] = ""             //название бд
#define VIP_FLAG "ts"                    //Какие флаги выдавать?
/* Переменные */
new szKeyName[16];
new bool:PlayerAlreadyUseVip[MAX_PLAYER+1];
new EndTime[MAX_PLAYER+1];
new Handle:g_SqlTuple;
new g_Error[512];
public plugin_init()
{
    register_plugin("Vip Test", "1.0", "daywer")
    /* команда вызова */
    register_clcmd("say /viptest","CmdVipTest")
    register_clcmd("say viptest","CmdVipTest")
    /* Меню */
    register_menucmd(register_menuid("\yV.I.P тест"), 1023, "hnd_viptest_menu")
  
    /* Для сохранения*/
    DB_GetKeyName( szKeyName, 15 );
    switch(DB_SAVE)
    {
        case 1:SQL_SetAffinity( "sqlite" );
        case 2:SQL_SetAffinity( "mysql" );
    }
}
/* Вызов главного меню*/
public CmdVipTest(idPlayer)
{
    if(!is_user_connected(idPlayer))
        return;
      
    static pos, cache[512]
    pos = 0
    new keys;
    if(PlayerAlreadyUseVip[idPlayer])
    {
        keys = (1<<1)|(1<<9)
        new szEndTime[44],EndPlayerTime;
        EndPlayerTime = EndTime[idPlayer] - get_systime();
        get_human_time(EndPlayerTime,szEndTime,sizeof(szEndTime)-1)
        if(EndTime[idPlayer] > get_systime())
            pos += formatex(cache[pos], 511-pos, "\yV.I.P тест^nДо конца теста %s",szEndTime)
        else
            pos += formatex(cache[pos], 511-pos, "\yV.I.P тест^n\rТест окончен!")
      
        pos += formatex(cache[pos], 511-pos, "^n\y|\r1\y|.\dПолучить V.I.P на %d часов",VIP_TEST_HOUR)
        pos += formatex(cache[pos], 511-pos, "^n\y|\r2\y|.\yИнформация")
      
    }
    else
    {
        keys = (1<<0)|(1<<1)|(1<<9)
        pos += formatex(cache[pos], 511-pos, "\yV.I.P тест^n")
        pos += formatex(cache[pos], 511-pos, "^n\y|\r1\y|.\yПолучить V.I.P на \r%d \y часов",VIP_TEST_HOUR)
        pos += formatex(cache[pos], 511-pos, "^n\y|\r2\y|.\yИнформация")
    }

    pos += formatex(cache[pos], 511-pos, "^n^n^n0. \wВыход^n")
    show_menu( idPlayer, keys, cache, -1) 
    return;
}
/* обработчик меню*/
public hnd_viptest_menu(idPlayer,key)
{
    if(!is_user_connected(idPlayer))
        return;
      
    switch (key)
    {
        case 0:
        {
            new stats[8],bodyhits[8], rank;
            rank = get_user_stats(idPlayer, stats,bodyhits)
            if(rank > MIN_RANK)
            {
                client_print(idPlayer,print_chat,"Прости,но твой rank должен быть ниже %d!",MIN_RANK)
                CmdVipTest(idPlayer)
                return;
            }
            client_print(idPlayer,print_chat,"Бесплатный период активирован! В бой!!!")
            new szTemp[512],ENDTime;
            ENDTime = (get_systime() +(VIP_TEST_HOUR*S_HOUR))
            new szKey[66];
            DB_GetKey( idPlayer, szKey, 65 );
            format(szTemp,charsmax(szTemp),"INSERT INTO `%s` ( `%s` , `timeend`)VALUES ('%s','%i');",szTableName,szKeyName,szKey,ENDTime)
            SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
            EndTime[idPlayer] = ENDTime;
            PlayerAlreadyUseVip[idPlayer] = true;
            set_user_flags(idPlayer, read_flags( VIP_FLAG))
        } 
        case 1:
        {
            show_motd(idPlayer,"addons/amxmodx/configs/vip_test.txt", "VIP Тест")
        }
        default:return;
    }
    return;
}

/* Загрузка бд*/
public plugin_cfg()
    Sql_Init()
  
/* Коннект к базе*/
public Sql_Init()
{
    g_SqlTuple = SQL_MakeDbTuple( szDBHost, szDBUser, szDBPass, szBDName );
    new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
    if(SqlConnection == Empty_Handle)
        set_fail_state(g_Error)
    new Handle:Queries
    new szSendQuery[100];
    format(szSendQuery,99,"CREATE TABLE IF NOT EXISTS %s (%s varchar(64),timeend INT(16))",szTableName,szKeyName)
    Queries = SQL_PrepareQuery(SqlConnection,szSendQuery)
    if(!SQL_Execute(Queries))
    {
        SQL_QueryError(Queries,g_Error,charsmax(g_Error))
        set_fail_state(g_Error) 
    }
    SQL_FreeHandle(Queries) 
    SQL_FreeHandle(SqlConnection)
} 
/* Игрок подкл к серверу*/
public client_putinserver(idPlayer)
{
    PlayerAlreadyUseVip[idPlayer]     = false;
    EndTime[idPlayer]                = 0;
    Load_Sql(idPlayer)
}
/* загрузка данных о игроке*/
public Load_Sql(idPlayer)
{
    new szTemp[512]
    new Data[1]
    new szKey[66];
    DB_GetKey( idPlayer, szKey, 65 );
    Data[0] = idPlayer
    format(szTemp,charsmax(szTemp),"SELECT * FROM `%s` WHERE (`%s`.`%s` = '%s')",szTableName,szTableName,szKeyName,szKey)
    SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp,Data,1)
}
/* загрузка 2 данных о игроке*/
public register_client(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    if(FailState == TQUERY_CONNECT_FAILED)
    {
        log_amx("Load - Could not connect to SQL database.  [%d] %s", Errcode, Error)
    }
    else if(FailState == TQUERY_QUERY_FAILED)
    {
        log_amx("Load Query failed. [%d] %s", Errcode, Error)
    }

    new idPlayer
    idPlayer = Data[0]
  
    if(SQL_NumResults(Query) < 1)
    {
       //Игрока нет в базе его ждет халявная випка
    }
    else
    {
        PlayerAlreadyUseVip[idPlayer]     = true;
        EndTime[idPlayer]                = SQL_ReadResult(Query, 1);
        if(EndTime[idPlayer] > get_systime())
            set_user_flags(idPlayer, read_flags( VIP_FLAG))
    }
    return PLUGIN_HANDLED
}
public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    SQL_FreeHandle(Query) 
    return PLUGIN_HANDLED
}
/* Секунды в минуты,часы*/
get_human_time(time,output[],len)
{
    new m,h
    if(time)formatex(output,len,"%d сек",time)
    if(time/S_MINUTE)
    {
        m=time/S_MINUTE
        formatex(output,len,"%d мин.",m)
    }
    if(time/S_HOUR)
    {
        h=time/S_HOUR
        m=(time-(h*S_HOUR))/S_MINUTE
        new szHour[16];
        switch(h)
        {
            case 1,21:format(szHour,charsmax(szHour),"час")
            case 2..4,22..24:format(szHour,charsmax(szHour),"часа")
            case 5..20:format(szHour,charsmax(szHour),"часов")
        }
        formatex(output,len,"%d %s и %d мин",h,szHour,m)
    }
}
/* Закрывает сессию,но не твою*/
public plugin_end()
    SQLITE_Close()
  
SQLITE_Close()
{
    if ( g_SqlTuple )
    {
        SQL_FreeHandle(g_SqlTuple);
    }
}
/* Получает данные о игроке(зависит от настройки)*/
DB_GetKey( id, szKey[], len )
{
    switch(SAVE_TYPE)
    {
        case DB_SAVEBY_NAME:
        {
            get_user_name( id, szKey, len );
            replace_all( szKey, len, "'", "''" );
        }
        case DB_SAVEBY_IP:        get_user_ip( id, szKey, len, 1 );
        case DB_SAVEBY_STEAMID:    get_user_authid( id, szKey, len );
    }
}
/* Главный ключ сохранения игрока*/
DB_GetKeyName( szKeyName[], len )
{
    switch( SAVE_TYPE )
    {
        case DB_SAVEBY_NAME:    copy( szKeyName, len, "player_name" );
        case DB_SAVEBY_IP:        copy( szKeyName, len, "player_ip" );
        case DB_SAVEBY_STEAMID:    copy( szKeyName, len, "player_steamid" );
    }
}
Если кому то нужно. Забирайте. Источник уже не помню.
 

women's server

Пользователь
Регистрация
29 Сен 2018
Сообщения
23
Симпатии
2
Пол
Женский
Здравствуйте! есть плагин vip_test но вот не пойму где хранятся данные игроков которые взяли тестовый вип (нужно что бы я мог удалять игроков не дожидаясь концовки срока) И что бы они все заного писали в чат /testvip
Код:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <colorchat>

#define PLUGIN "Test vip"
#define VERSION "1.0"
#define AUTHOR "speedkill edit apTmusic"

#define Flaga ADMIN_LEVEL_H

new use[33] = 0
new czas_gracza[33]
new prefix[33]
new g_vault
new czas
new zapis

//By R3X
getFormatedTime(iTime, szTime[], size)
{
    new hours = iTime/3600
    formatex(szTime, size, "%d часов и %d минут", hours, iTime%3600/60)
}
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    g_vault = nvault_open("24h_vip")
    register_clcmd("say /testvip","vip_test")

    register_cvars()
}
public register_cvars()
{
    czas = register_cvar("amx_viptest_czas","24")
    zapis = register_cvar("amx_viptest_save","1")
    register_cvar("amx_viptest_prefix","[Test-VIP]")
}
public plugin_cfg()
{
    get_cvar_string("amx_viptest_prefix", prefix, 32)
}
public vip_test(id)
{
    if(is_user_connected(id))
    {
        if(get_user_flags(id) & Flaga || use[id] == 1)
        {
            ColorChat(id, RED, "%s^x01 Вы уже вип, или вы уже брали пробный период !",prefix)
        }
        else
        {
            use[id] = 1
            czas_gracza[id] = get_pcvar_num(czas)*3600
            set_task(1.0,"sprawdz",id,_,_,"b")
            set_task(30.0,"timer",id,_,_,"b")
            set_user_flags(id, get_user_flags(id) | Flaga)
            save(id)
        }
    }
}
public sprawdz(id)
{
    czas_gracza[id]--
    if(czas_gracza[id] <= 0)
    {
        if(task_exists(id))
        {
            remove_task(id)
        }
        remove_user_flags(id, Flaga)
    }
}
public client_disconnect(id)
{
    if(task_exists(id))
    {
        remove_task(id)
    }
    if(use[id] == 1)
    {
        save(id)
    }
}
public client_connect(id)
{
    use[id] = 0
    czas_gracza[id] = 0
    set_task(2.0,"load",id)
}
public save(id)
{
    new name[64]
    switch(get_pcvar_num(zapis))
    {
        case 1:
        {
            get_user_name(id,name,63)
        }
        case 2:
        {
            if(is_user_steam(id))
            {
                get_user_authid(id, name, 63)
            }
            else
            {
                get_user_name(id,name,63)
            }
        }
    }

    new vaultkey[64],vaultdata[256]
    format(vaultkey,63,"%s-vip",name)
    format(vaultdata,255,"%d#%d",czas_gracza[id],use[id])
    nvault_set(g_vault,vaultkey,vaultdata)
}
public load(id)
{
    new name[64]
    switch(get_pcvar_num(zapis))
    {
        case 1:
        {
            get_user_name(id,name,63)
        }
        case 2:
        {
            if(is_user_steam(id))
            {
                get_user_authid(id, name, 63)
            }
            else
            {
                get_user_name(id,name,63)
            }
        }
    }

    new vaultkey[64],vaultdata[256]
    get_user_name(id,name,63)
    format(vaultkey,63,"%s-vip",name)
    format(vaultdata,255,"%d#%d",czas_gracza[id], use[id])
    nvault_get(g_vault,vaultkey,vaultdata,255)
    replace_all(vaultdata, 255, "#", " ")

    new zmienna[33], zmienna1[33]
    parse(vaultdata, zmienna, 32, zmienna1, 32)

    czas_gracza[id] = str_to_num(zmienna)
    use[id] = str_to_num(zmienna1)

    if(czas_gracza[id] > 0)
    {
        set_task(120.0,"timer",id,_,_,"b")
        set_task(1.0,"sprawdz",id,_,_,"b")
        set_user_flags(id, get_user_flags(id) | Flaga)
    }
    else
    {
        set_task(200.0,"reklama",id,_,_,"b")
    }
}
public timer(id)
{
    new szTime[32]
    getFormatedTime(czas_gracza[id], szTime, 31)
    ColorChat(id, RED, "%s^x01 До конца тестового випа осталось : ^x04%s ^x01!",prefix,szTime)
}
public reklama(id)
{
    ColorChat(id, RED, "%s^x01 Вы хостите получить тестовую випку на ^x04%d ^x01 часа ?",prefix, get_pcvar_num(czas))
    ColorChat(id, RED, "%s^x01 Напишите ^x04/testvip^x01, и вы сможете проверить возможности випки :)",prefix)
}

stock bool:is_user_steam(id) {
    new authid[32]; get_user_authid(id, authid, 31);
    return bool:(contain(authid, "STEAM_0:0:") != -1 || contain(authid, "STEAM_0:1:") != -1);
}
Код:
Она лежит В базе данных от"СТАТИСТИКИ или БАНЛИСТА смотря какие БД ты водил в плагине"
Ищи там таблицу она точно там!
Код:
"vip_test"     //Название таблицы
 

skitls

Пользователь
Регистрация
21 Июн 2017
Сообщения
216
Симпатии
62
Пол
Мужской
Код:
Она лежит В базе данных от"СТАТИСТИКИ или БАНЛИСТА смотря какие БД ты водил в плагине"
Ищи там таблицу она точно там!
Код:
"vip_test"     //Название таблицы
Вы как и я не посмотрели изначально сам исходник. у него локальное сохранение, так что бд у него нет)
 

women's server

Пользователь
Регистрация
29 Сен 2018
Сообщения
23
Симпатии
2
Пол
Женский
Вы как и не посмотрели изначально сам исходник. у него его локальное сохранение, так что бд у него нет)
В таком случае?он просто скинул рандомный код))
Как вип тест без базы будет работать?каждый игрок будет брать каждый раз!
 

skitls

Пользователь
Регистрация
21 Июн 2017
Сообщения
216
Симпатии
62
Пол
Мужской
В таком случае?он просто скинул рандомный код))
Как вип тест без базы будет работать?каждый игрок будет брать каждый раз!
нет, статистика же работать может и с локальной базой данны) nVault
 

ifx

Пользователь
Регистрация
11 Фев 2018
Сообщения
361
Симпатии
148
women's server, погуглите как работает sqllite
вообще в плане вип-тест как раз лучше nvault и использовать, нет смысла грузить mysql, если у вас особенно больше 1 сервера и делать лишние проверки через бд
 
Сверху Снизу