[VIP] VIP Test

[VIP] VIP Test 1.0.4

g.p0rn

Участник
Сообщения
49
Реакции
2
PHP:
//------------------------------------------------------------------------------
// GPL LISENCE (short)
//------------------------------------------------------------------------------
/*
 * Copyright (c) 2014 R1KO

 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 * ChangeLog:
        1.0.0 -    Релиз
        1.0.1 -    Исправлена кодировка
                Совместимость с версией ядра 1.1.2 R
                Добавлен лог получения тестового VIP-статуса.
                Добавлен финский перевод.
        1.0.2 -    Исправлена ошибка когда невозможно взять VIP-статус повторно.
        1.0.3 -    При попытке взять VIP-статус повторно будет показано сколько времени осталось.
                Добавлена поддержка MySQL.
                Изменено сообщение в лог.
*/
#pragma semicolon 1

#include <sourcemod>
#include <vip_core>

public Plugin:myinfo =
{
    name = "[VIP] Test",
    author = "R1KO (skype: vova.andrienko1)",
    version = "1.0.3"
};

new Handle:g_hDatabase,
    bool:g_bDBMySQL,
    g_iTestTime,
    g_iTestInterval,
    String:g_sTestGroup[64];

public OnPluginStart()
{
    decl Handle:hCvar;

    hCvar = CreateConVar("sm_vip_test_group", "VIP-1 LvL", "Группа для тестового VIP-статуса / Test VIP group");
    HookConVarChange(hCvar, OnTestGroupChange);
    GetConVarString(hCvar, g_sTestGroup, sizeof(g_sTestGroup));
    
    hCvar = CreateConVar("sm_vip_test_time", "3600", "На сколько времени выдавать тестовый VIP-статус (значение зависит от sm_vip_time_mode) / VIP-Test duration (value depends on sm_vip_time_mode)", FCVAR_PLUGIN, true, 0.0);
    HookConVarChange(hCvar, OnTestTimeChange);
    g_iTestTime = GetConVarInt(hCvar);
    
    hCvar = CreateConVar("sm_vip_test_interval", "20160", "Через сколько времени можно повторно брать тестовый VIP-статус (значение зависит от sm_vip_time_mode) (0 - Запретить брать повторно) / How often player can request test VIP status (value depends on sm_vip_time_mode) (0 - deny new requests)");
    HookConVarChange(hCvar, OnTestIntervalChange);
    g_iTestInterval = GetConVarInt(hCvar);

    AutoExecConfig(true, "vip_test", "vip");
    
    RegConsoleCmd("sm_testvip", TestVIP_CMD);
    RegConsoleCmd("sm_viptest", TestVIP_CMD);
    
    RegAdminCmd("sm_clear_viptest", ClearTestVIP_CMD, ADMFLAG_ROOT);
    
    Connect_DB();
    
    LoadTranslations("vip_test.phrases");
    LoadTranslations("vip_core.phrases");
}

public OnTestTimeChange(Handle:hCvar, const String:oldValue[], const String:newValue[])            g_iTestTime = GetConVarInt(hCvar);
public OnTestIntervalChange(Handle:hCvar, const String:oldValue[], const String:newValue[])        g_iTestInterval = GetConVarInt(hCvar);
public OnTestGroupChange(Handle:hCvar, const String:oldValue[], const String:newValue[])            strcopy(g_sTestGroup, sizeof(g_sTestGroup), newValue);

Connect_DB()
{
    if (SQL_CheckConfig("vip_test"))
    {
        SQL_TConnect(DB_OnConnect, "vip_test", 1);
    }
    else
    {
        decl String:sError[256];
        sError[0] = '\0';
        g_hDatabase = SQLite_UseDatabase("vip_test", sError, sizeof(sError));
        DB_OnConnect(g_hDatabase, g_hDatabase, sError, 2);
    }
}

public DB_OnConnect(Handle:owner, Handle:hndl, const String:sError[], any:data)
{
    g_hDatabase = hndl;
    
    if (g_hDatabase == INVALID_HANDLE || sError[0])
    {
        SetFailState("DB Connect %s", sError);
        return;
    }

    decl String:sDriver[16];
    switch (data)
    {
        case 1 :
        {
            SQL_GetDriverIdent(owner, sDriver, sizeof(sDriver));
        }
        default :
        {
            SQL_ReadDriver(owner, sDriver, sizeof(sDriver));
        }
    }

    g_bDBMySQL = (strcmp(sDriver, "mysql", false) == 0);

    if (g_bDBMySQL)
    {
        SQL_TQuery(g_hDatabase, SQL_Callback_ErrorCheck, "SET NAMES 'utf8'");
        SQL_TQuery(g_hDatabase, SQL_Callback_ErrorCheck, "SET CHARSET 'utf8'");
    }
    
    CreateTables();
}

public SQL_Callback_ErrorCheck(Handle:owner, Handle:hndl, const String:sError[], any:data)
{
    if (sError[0])
    {
        LogError("SQL_Callback_ErrorCheck: %s", sError);
    }
}

CreateTables()
{
    SQL_LockDatabase(g_hDatabase);
    if (g_bDBMySQL)
    {
        SQL_TQuery(g_hDatabase, SQL_Callback_ErrorCheck,    "CREATE TABLE IF NOT EXISTS `vip_test` (\
                                                                        `auth` VARCHAR(24) NOT NULL, \
                                                                        `end` INT(10) UNSIGNED NOT NULL, \
                                                                        PRIMARY KEY(`auth`)) \
                                                                        ENGINE=InnoDB DEFAULT CHARSET=utf8;");
    }
    else
    {
        SQL_TQuery(g_hDatabase, SQL_Callback_ErrorCheck,    "CREATE TABLE IF NOT EXISTS `vip_test` (\
                                                                        `auth` VARCHAR(24) NOT NULL PRIMARY KEY, \
                                                                        `end` INTEGER UNSIGNED NOT NULL);");
    }
    SQL_UnlockDatabase(g_hDatabase);
}

public Action:ClearTestVIP_CMD(iClient, args)
{
    if (iClient)
    {
        SQL_TQuery(g_hDatabase, SQL_Callback_DropTable, "DROP TABLE `vip_test`;");
    }
    return Plugin_Handled;
}

public SQL_Callback_DropTable(Handle:hOwner, Handle:hQuery, const String:sError[], any:data)
{
    if (hQuery == INVALID_HANDLE)
    {
        LogError("SQL_Callback_DropTable: %s", sError);
        return;
    }

    CreateTables();
}

public Action:TestVIP_CMD(iClient, args)
{
    if (iClient)
    {
        if(VIP_IsClientVIP(iClient) == false)
        {
            decl String:sQuery[256], String:sAuth[32];
        //    GetClientAuthString(iClient, sAuth, sizeof(sAuth));
            GetClientAuthId(iClient, AuthId_Steam2, sAuth, sizeof(sAuth));
            FormatEx(sQuery, sizeof(sQuery), "SELECT `end` FROM `vip_test` WHERE `auth` = '%s' LIMIT 1;", sAuth);
            SQL_TQuery(g_hDatabase, SQL_Callback_SelectClient, sQuery, GetClientUserId(iClient));
        }
        else
        {
            VIP_PrintToChatClient(iClient, "%t", "VIP_ALREADY");
        }
    }
    return Plugin_Handled;
}

public SQL_Callback_SelectClient(Handle:hOwner, Handle:hQuery, const String:sError[], any:UserID)
{
    new iClient = GetClientOfUserId(UserID);
    if (iClient)
    {
        if (hQuery == INVALID_HANDLE)
        {
            LogError("SQL_Callback_SelectClient: %s", sError);
            return;
        }
        
        if(SQL_FetchRow(hQuery))
        {
            if(g_iTestInterval > 0)
            {
                new iIntervalSeconds = SQL_FetchInt(hQuery, 0)+VIP_TimeToSeconds(g_iTestInterval),
                    iTime = GetTime();
                if(iTime > iIntervalSeconds)
                {
                    GiveVIPToClient(iClient, true);
                }
                else
                {
                    decl String:sTime[64];
                    if(VIP_GetTimeFromStamp(sTime, sizeof(sTime), iIntervalSeconds-iTime, iClient))
                    {
                        VIP_PrintToChatClient(iClient, "%t", "VIP_RENEWAL_IS_NOT_AVAILABLE_YET", sTime);
                    }
                }
            }
            else
            {
                VIP_PrintToChatClient(iClient, "%t", "VIP_RENEWAL_IS_DISABLED");
            }
        }
        else
        {
            GiveVIPToClient(iClient);
        }
    }
}

public SQL_Callback_InsertClient(Handle:hOwner, Handle:hQuery, const String:sError[], any:data)
{
    if (hQuery == INVALID_HANDLE)
    {
        LogError("SQL_Callback_InsertClient: %s", sError);
        return;
    }
}

public OnClientPostAdminCheck(iClient)
{
    if(IsFakeClient(iClient) == false)
    {
        decl String:sQuery[256], String:sAuth[32];
        GetClientAuthId(iClient, AuthId_Steam2, sAuth, sizeof(sAuth));
        FormatEx(sQuery, sizeof(sQuery), "SELECT `end` FROM `vip_test` WHERE `auth` = '%s' LIMIT 1;", sAuth);
        SQL_TQuery(g_hDatabase, SQL_Callback_SelectClientAuthorized, sQuery, GetClientUserId(iClient));
    }
}

public SQL_Callback_SelectClientAuthorized(Handle:hOwner, Handle:hQuery, const String:sError[], any:UserID)
{
    new iClient = GetClientOfUserId(UserID);
    if (iClient)
    {
        if (hQuery == INVALID_HANDLE)
        {
            LogError("SQL_Callback_SelectClientAuthorized: %s", sError);
            return;
        }
        
        if(SQL_FetchRow(hQuery))
        {
            decl iEnd, iTime;
            if((iEnd = SQL_FetchInt(hQuery, 0)) > (iTime = GetTime()))
            {
                VIP_SetClientVIP(iClient, iEnd - iTime, _, g_sTestGroup, false);
            }
        }
    }
}

GiveVIPToClient(iClient, bool:bUpdate = false)
{
    decl iSeconds, String:sQuery[256], String:sAuth[32];
    iSeconds = VIP_TimeToSeconds(g_iTestTime);
    VIP_SetClientVIP(iClient, iSeconds, AUTH_STEAM, g_sTestGroup, false);
    VIP_GetTimeFromStamp(sQuery, sizeof(sQuery), iSeconds, LANG_SERVER);

    GetClientAuthId(iClient, AuthId_Steam2, sAuth, sizeof(sAuth));
    
    VIP_LogMessage("Игрок %N (%s) получил тестовый VIP-статус (Группа: %s, Длительность: %s)", iClient, sAuth, g_sTestGroup, sQuery);

    if(bUpdate)
    {
        FormatEx(sQuery, sizeof(sQuery), "UPDATE `vip_test` SET `end` = '%i' WHERE `auth` = '%s';", GetTime()+iSeconds, sAuth);
    }
    else
    {
        FormatEx(sQuery, sizeof(sQuery), "INSERT INTO `vip_test` (`auth`, `end`) VALUES ('%s', '%i');", sAuth, GetTime()+iSeconds);
    }

    SQL_TQuery(g_hDatabase, SQL_Callback_InsertClient, sQuery);
}
 

Вложения

  • SourceMod 1.6.3.PNG
    SourceMod 1.6.3.PNG
    12.5 КБ · Просмотры: 37
  • SourceMod 1.9.0.PNG
    SourceMod 1.9.0.PNG
    13.8 КБ · Просмотры: 35

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • Автор ресурса
  • #103
@g.p0rn, а как ты на см 1.6.3 собрался под 3.0 компилить?
 

g.p0rn

Участник
Сообщения
49
Реакции
2
@g.p0rn, а как ты на см 1.6.3 собрался под 3.0 компилить?
Просто я его 2 месяца назад компилировал под 1 6 3 и он компилировался
Да и в теме с VIP Testom написано компилировать под 1 6 3
--- Добавлено позже ---
Просто я его 2 месяца назад компилировал под 1 6 3 и он компилировался
Да и в теме с VIP Testom написано компилировать под 1 6 3
ИЗВИНИТЕ я ТУПОЙ вспомнил что компилировал его на старом инклуде VIP 2.x.x
--- Добавлено позже ---
Теперь такой вопрос, где можно найти инклуд старой версии VIP Core? ниже 3.0 чтобы скомпилировать модуль VIP Test
 
Последнее редактирование:

g.p0rn

Участник
Сообщения
49
Реакции
2

kamAp

Участник
Сообщения
8
Реакции
0
Не работает вип тест! В группу вип тест прописал! Плагин сам работает
 

Адвокат

Участник
Сообщения
44
Реакции
9
Перепишите пожалуйста под новое ядро. Посыпались ошибки.
L 11/02/2018 - 18:10:56: [SM] Exception reported: Invalid Handle 0 (error 4)
L 11/02/2018 - 18:10:56: [SM] Blaming: vip/VIP_Core.smx
L 11/02/2018 - 18:10:56: [SM] Call stack trace:
L 11/02/2018 - 18:10:56: [SM] [0] StringMap.SetString
L 11/02/2018 - 18:10:56: [SM] [1] Line 116, vip/Store.sp::Store_SetClientValue
L 11/02/2018 - 18:10:56: [SM] [2] Line 96, vip/Features.sp::Features_SetStatusToStore
L 11/02/2018 - 18:10:56: [SM] [3] Line 300, vip/VipMenu.sp::Handler_VIPMenu
 

Dayzz1337

Участник
Сообщения
94
Реакции
12
Проблема прописываю VIPтест выдается все работает, вип тест заканчивается у меня стоит в кфг повторный виптест взять нельзя я прописываю опять виптест и мне выдается опять випка в чем может быть проблема ?
 

LeshaEzTV

Участник
Сообщения
41
Реакции
0
Всем добрый день, проставил данный модуль, все правильно залил, создался vip_test.cfg , сам плагин не менял и не компилировал . VIP Core 3.0 , при заходе на сервер сама випка работает корректно, через админку могу выдавать по группам статус, но вот VIP Test не работает. Помогите решить проблему.

Вот, что пишет в логах:

L 12/11/2018 - 21:20:32: [SM] Exception reported: Invalid VIP-group/╨Э╨╡╨║╨╛╤А╤А╨╡╨║╤В╨╜╨░╤П VIP-╨│╤А╤Г╨┐╨┐╨░ (test_vip)
L 12/11/2018 - 21:20:32: [SM] Blaming: vip\VIP_Core.smx
L 12/11/2018 - 21:20:32: [SM] Call stack trace:
L 12/11/2018 - 21:20:32: [SM] [0] ThrowNativeError
L 12/11/2018 - 21:20:32: [SM] [1] Line 596, vip/API.sp::API_GiveClientVIP
L 12/11/2018 - 21:20:32: [SM] [2] Line 566, vip/API.sp::Native_SetClientVIP
L 12/11/2018 - 21:20:32: [SM] [4] VIP_SetClientVIP
L 12/11/2018 - 21:20:32: [SM] [5] Line 287, VIP_TEST_1.0.3.sp::GiveVIPToClient
L 12/11/2018 - 21:20:32: [SM] [6] Line 236, VIP_TEST_1.0.3.sp::SQL_Callback_SelectClient
 
Последнее редактирование:

Haruko

Участник
Сообщения
119
Реакции
6
Всем добрый день, проставил данный модуль, все правильно залил, создался vip_test.cfg , сам плагин не менял и не компилировал . VIP Core 3.0 , при заходе на сервер сама випка работает корректно, через админку могу выдавать по группам статус, но вот VIP Test не работает. Помогите решить проблему
Не работает команда?
 

Haruko

Участник
Сообщения
119
Реакции
6
Да, в логах сервера (консоле) пишет что приведено выше, и не срабатывает ни 1 команда.

Сервер не стоит на MyArena, собственная машина
Скинь файлы groups.ini и vip_test.cfg, попробую помочь, напишу где была ошибка что бы больше не допускал
 

LeshaEzTV

Участник
Сообщения
41
Реакции
0
Скинь файлы groups.ini и vip_test.cfg, попробую помочь, напишу где была ошибка что бы больше не допускал
В groups.ini нужно тоже прописывать группу вип?
у меня вообще ряд проблем которые я не могу устранить , из-за отсутствия добротных навыков:

1) Автобай, использовал плагин , пока модуль удалил с сервера
[VIP] WeaponPack 2.0
при выборе оружия на базовом модуле ничего не меняя, все пропадает из рук, а выброшенное оружие или дропнутое с трупа, падает под землю - через какое то время крашится сервер.
Так же оружие выдается с определенным интервалом раз в 3 раунда и т.д
Я был бы благодарен если настроить можно было бы следующим образом: выдача оружия с 3 рануда (1 половина режим как в ММ) , происходит после 15 общего раунда смена сторон, и выдача оружия так же с 3 раунда - каждый раунд

2) не могу найти модуль, позволяющий випак отключать френдлифаер от себя по союзнику и от союзников.

P.S. я буду очень благодарен за помощь, ну и конечно же думаю можно обсудить детали. (моих навыков очень мало для написание или четкое переписывания плагина, а сервер хочется настроить нормально)
--- Добавлено позже ---
Проблема решена, вопрос можно закрыть, спасибо
 

Вложения

  • groups.ini
    972 байт · Просмотры: 12
  • vip_test.cfg
    845 байт · Просмотры: 17
Последнее редактирование:

Dayzz1337

Участник
Сообщения
94
Реакции
12
Ядро вип 2.1.1
Выдается повторно вип тест в конфиге выбирал повторный вип тест брать нельзя , но после истечению времени виптест снова можно было брать, в конфиге ставил что повторно уже не получить , но он всеровно выдавается
 
  • Мне нравится
Реакции: R1KO

LeshaEzTV

Участник
Сообщения
41
Реакции
0
Ядро вип 2.1.1
Выдается повторно вип тест в конфиге выбирал повторный вип тест брать нельзя , но после истечению времени виптест снова можно было брать, в конфиге ставил что повторно уже не получить , но он всеровно выдавается

Вот код попробуй:
// This file was auto-generated by SourceMod (v1.9.0.6261)
// ConVars for plugin "vip\VIP_TEST_1.0.3.smx"


// Группа для тестового VIP-статуса / Test VIP group
// -
// Default: "test_vip"
sm_vip_test_group "test_vip"

// Через сколько времени можно повторно брать тестовый VIP-статус (значение зависит от sm_vip_time_mode) (0 - Запретить брать повторно) / How often player can request
// -
// Default: "3600"
sm_vip_test_interval "0"

// На сколько времени выдавать тестовый VIP-статус (значение зависит от sm_vip_time_mode) / VIP-Test duration (value depends on sm_vip_time_mode)
// -
// Default: "120"
// Minimum: "0.000000"
sm_vip_test_time "120"
 
Последнее редактирование модератором:

Dayzz1337

Участник
Сообщения
94
Реакции
12
Вот код попробуй:

// This file was auto-generated by SourceMod (v1.9.0.6261)
// ConVars for plugin "vip\VIP_TEST_1.0.3.smx"


// Группа для тестового VIP-статуса / Test VIP group
// -
// Default: "test_vip"
sm_vip_test_group "test_vip"

// Через сколько времени можно повторно брать тестовый VIP-статус (значение зависит от sm_vip_time_mode) (0 - Запретить брать повторно) / How often player can request
// -
// Default: "3600"
sm_vip_test_interval "0"

// На сколько времени выдавать тестовый VIP-статус (значение зависит от sm_vip_time_mode) / VIP-Test duration (value depends on sm_vip_time_mode)
// -
// Default: "120"
// Minimum: "0.000000"
sm_vip_test_time "120"


То же самое написано
 

iGreen

Участник
Сообщения
351
Реакции
26
Ne rabotaet, sm 1.9 (6275)
когда у меня есть VIP и пишу !viptest то показывает что у меня уже есть VIP, а когда я удаляю себя из VIPa и пишу !viptest то ничего вапше не происходит

L 02/12/2019 - 20:09:49: [SM] Call stack trace:
L 02/12/2019 - 20:09:49: [SM] [0] ThrowNativeError
L 02/12/2019 - 20:09:49: [SM] [1] Line 596, vip/API.sp::API_GiveClientVIP
L 02/12/2019 - 20:09:49: [SM] [2] Line 566, vip/API.sp::Native_SetClientVIP
L 02/12/2019 - 20:09:49: [SM] [4] VIP_SetClientVIP
L 02/12/2019 - 20:09:49: [SM] [5] Line 287, VIP_TEST_1.0.3.sp::GiveVIPToClient
L 02/12/2019 - 20:09:49: [SM] [6] Line 236, VIP_TEST_1.0.3.sp::SQL_Callback_SelectClient
L 02/12/2019 - 20:10:41: [SM] Exception reported: Invalid VIP-group/Некорректная VIP-группа (test_vip)
L 02/12/2019 - 20:10:41: [SM] Blaming: vip/VIP_Core.smx
L 02/12/2019 - 20:10:41: [SM] Call stack trace:
L 02/12/2019 - 20:10:41: [SM] [0] ThrowNativeError
L 02/12/2019 - 20:10:41: [SM] [1] Line 596, vip/API.sp::API_GiveClientVIP
L 02/12/2019 - 20:10:41: [SM] [2] Line 566, vip/API.sp::Native_SetClientVIP
L 02/12/2019 - 20:10:41: [SM] [4] VIP_SetClientVIP
L 02/12/2019 - 20:10:41: [SM] [5] Line 287, VIP_TEST_1.0.3.sp::GiveVIPToClient
L 02/12/2019 - 20:10:41: [SM] [6] Line 236, VIP_TEST_1.0.3.sp::SQL_Callback_SelectClient
L 02/12/2019 - 20:11:21: [SM] Exception reported: Invalid VIP-group/Некорректная VIP-группа (test_vip)
L 02/12/2019 - 20:11:21: [SM] Blaming: vip/VIP_Core.smx
L 02/12/2019 - 20:11:21: [SM] Call stack trace:
L 02/12/2019 - 20:11:21: [SM] [0] ThrowNativeError
L 02/12/2019 - 20:11:21: [SM] [1] Line 596, vip/API.sp::API_GiveClientVIP
L 02/12/2019 - 20:11:21: [SM] [2] Line 566, vip/API.sp::Native_SetClientVIP
L 02/12/2019 - 20:11:21: [SM] [4] VIP_SetClientVIP
L 02/12/2019 - 20:11:21: [SM] [5] Line 287, VIP_TEST_1.0.3.sp::GiveVIPToClient
L 02/12/2019 - 20:11:21: [SM] [6] Line 236, VIP_TEST_1.0.3.sp::SQL_Callback_SelectClient
L 02/12/2019 - 20:11:27: [SM] Exception reported: Invalid VIP-group/Некорректная VIP-группа (test_vip)
L 02/12/2019 - 20:11:27: [SM] Blaming: vip/VIP_Core.smx
L 02/12/2019 - 20:11:27: [SM] Call stack trace:
L 02/12/2019 - 20:11:27: [SM] [0] ThrowNativeError
L 02/12/2019 - 20:11:27: [SM] [1] Line 596, vip/API.sp::API_GiveClientVIP
L 02/12/2019 - 20:11:27: [SM] [2] Line 566, vip/API.sp::Native_SetClientVIP
L 02/12/2019 - 20:11:27: [SM] [4] VIP_SetClientVIP
L 02/12/2019 - 20:11:27: [SM] [5] Line 287, VIP_TEST_1.0.3.sp::GiveVIPToClient
L 02/12/2019 - 20:11:27: [SM] [6] Line 236, VIP_TEST_1.0.3.sp::SQL_Callback_SelectClient
L 02/12/2019 - 20:21:48: Error log file session closed.
L 02/12/2019 - 20:21:48: SourceMod error session started
L 02/12/2019 - 20:21:48: Info (map "am_dust2014") (file "errors_20190212.log")
 
Последнее редактирование:
Сверху Снизу