ReHLDS/HLDS VIP TEST/Тест випки на определенное время

skitls

Пользователь
Регистрация
21 Июн 2017
Сообщения
192
Симпатии
57
Пол
Мужской
#1
Вроде не видел тут этой темы или похожей. По поиску по крайне мере
Описание:
Данный плагин дает возможность любому игроку протестировать Випку на вашем сервере на определенное время в часах(см настройки)
Данные могут сохраняться по steamid, nick, ip.
Что бы протестировать вип, ранг должен быть не выше 1500, сделано для того что бы новые залетные игроки не могли взять виптест.
Я выставил значение 10000, для того что бы мог брать любой.

Что бы мотд окно не было белым когда жмем информация.
Редактируем под себя и закидываем vip_test.txt в cstrike/addons/amxmodx/configs/
vip_test.txt

Команды для вызова:
viptest
/viptest

Сами настройки в исходнике:
Код:
#define VIP_TEST_HOUR 5                ////на сколько времени выдать права(в часах)
#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"                    //Какие флаги выдавать?
viptest.png
 

Вложения

Последнее редактирование: skitls

skitls

Пользователь
Регистрация
21 Июн 2017
Сообщения
192
Симпатии
57
Пол
Мужской
#2
Забыл упомянуть. addons/amxmodx/configs/ тут нужно добавить(создать) файл vip_test.txt и заполнить как мотд окно. И если можно, добавьте в шапку
 

skitls

Пользователь
Регистрация
21 Июн 2017
Сообщения
192
Симпатии
57
Пол
Мужской
#4

Вложения

  • 58,1 KB 16

r1nk0

Пользователь
Регистрация
3 Окт 2018
Сообщения
24
Симпатии
0
#5
Было бы неплохо если бы плагин умел выдавать несколько флагов
 

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
656
Симпатии
197
#11
И с чего ты взял что виноват плагин?
Виноват ты или же плагин моделей.
Ты - в случае если не понимаешь где и какую позицию должен занимать тот или иной плагин.
Плагин - если там..., хотя и тут ты виноват, так как не понимаешь логики работы плагина.
 

r1nk0

Пользователь
Регистрация
3 Окт 2018
Сообщения
24
Симпатии
0
#12
И с чего ты взял что виноват плагин?
Виноват ты или же плагин моделей.
Ты - в случае если не понимаешь где и какую позицию должен занимать тот или иной плагин.
Плагин - если там..., хотя и тут ты виноват, так как не понимаешь логики работы плагина.
Че ты мне тыкаешь?

Теперь по сути. Менял местами плагины одни выше другои ниже и тп. Выдается только 1 флаг. Плагин моделей от неугомона работает нормально например с виптестом скальпеля. Поэтому не я тут виноват.

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

georgeml

Постоялец
Регистрация
12 Сен 2017
Сообщения
365
Симпатии
147
#13
r1nk0, Вам правильно сказали. Вы не понимаете работу плагина. Откуда утверждения, что плагин дает 1 флаг, а не 2?
Пишете в консоль сервера amx_who, смотрите свои флаги. Затем, берете свой вип-тест и после получения снова пишете amx_who и убеждаетесь, что выданы оба флага. То, что эти флаги не видят другие плагины- не проблема данного плагина вип-тест.
 

Слава

Пользователь
Регистрация
1 Фев 2019
Сообщения
10
Симпатии
0
#14
как время рекламы в чате увеличеть ,а то часто показывает
 

Слава

Пользователь
Регистрация
1 Фев 2019
Сообщения
10
Симпатии
0
#16
в исходнике смотреть надо...если есть исходник кидай сюда поменяю время тебе)
ПОМОГИ
L 02/10/2019 - 23:01:00: [AMXX] Plugin ("vip_test.amxx") is setting itself as failed.
L 02/10/2019 - 23:01:00: [AMXX] Plugin says: unable to open database file
L 02/10/2019 - 23:01:00: [AMXX] Run time error 1 (plugin "vip_test.amxx") - forced exit
 

Юран

Пользователь
Регистрация
30 Авг 2018
Сообщения
37
Симпатии
4
#17
ПОМОГИ
L 02/10/2019 - 23:01:00: [AMXX] Plugin ("vip_test.amxx") is setting itself as failed.
L 02/10/2019 - 23:01:00: [AMXX] Plugin says: unable to open database file
L 02/10/2019 - 23:01:00: [AMXX] Run time error 1 (plugin "vip_test.amxx") - forced exit
:Nono:
10 Фев 2019
ПОМОГИ
L 02/10/2019 - 23:01:00: [AMXX] Plugin ("vip_test.amxx") is setting itself as failed.
L 02/10/2019 - 23:01:00: [AMXX] Plugin says: unable to open database file
L 02/10/2019 - 23:01:00: [AMXX] Run time error 1 (plugin "vip_test.amxx") - forced exit
обьясни что тебе надо сделать?
 

Слава

Пользователь
Регистрация
1 Фев 2019
Сообщения
10
Симпатии
0
#18
:Nono:
10 Фев 2019


обьясни что тебе надо сделать?
ошибка была из за Mysql - база данных, но почему не сохраняется вип тест ,после смены карты вип тест исчезает!
Код:
#include <amxmodx>
#include <sqlx>
#include <csstats>
#pragma tabsize 0 /* Впадлу.... */
/* константы */
#define VIP_TEST_HOUR 3                ////на сколько времени выдать права(в часах)
#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                     2    //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[] = "94.198.51.162"                // db1.myarena.ru
new const szDBUser[] = "bd_4877"                //Пользователь
new const szDBPass[] = "1413696"                //Пароль от бд
new const szBDName[] = "bd_4877"             //название бд
#define VIP_FLAG "tm"                    //Какие флаги выдавать?
/* Переменные */
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" );
    }
}
 

Юран

Пользователь
Регистрация
30 Авг 2018
Сообщения
37
Симпатии
4
#19
ошибка была из за Mysql - база данных, но почему не сохраняется вип тест ,после смены карты вип тест исчезает!
можешь сделать без базы данных.попробуй поставить sqlite
 

Слава

Пользователь
Регистрация
1 Фев 2019
Сообщения
10
Симпатии
0
#20
можешь сделать без базы данных.попробуй поставить sqlite
если через sqlite вылазит ошибка в консоле
Код:
L 02/10/2019 - 23:01:00: [AMXX] Plugin ("vip_test.amxx") is setting itself as failed.
L 02/10/2019 - 23:01:00: [AMXX] Plugin says: unable to open database file
L 02/10/2019 - 23:01:00: [AMXX] Run time error 1 (plugin "vip_test.amxx") - forced exit