[CS:S/CS:GO] dPInfo 3.1

Тема в разделе "Утверждённые плагины", создана пользователем Primo, 25 июл 2014.

  1. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    dPInfo
    Direct Player Info

    Статус:
    CSGO | CSS | v3.1 | by Primo

    Описание:
    В основном сделан для того, чтобы избавить людей (в основном новичков в скриптинге) от трудностей сохранения данных игрока. Этот плагин будет записывать статистику игрока, что позволит управлять этой статистикой из других плагинов с помощью Native's.
    Запись происходит в базу SQLite MySQL. Записываются убийства, смерти и прочее. Также есть готовая простая система уровней, вам лишь остаётся привязать к определённым уровням различные функции.


    Нативы и квары:
    Native's:
    Код:
    
    // Получает уровень игрока
    native pGetPlayerLevel(client);
    
    //Получает опыт игрока
    native pGetPlayerEXP(client);
    
    //Устанавливает уровень игрока
    native pSetPlayerLevel(client, num1);
    
    //Устанавливает опыт игрока
    native pSetPlayerEXP(client, num1);
    
    //Выводит статистику игрока в чат
    native pViewStatistic(client);
    
    //Получает кол-во кредитов игрока
    native pGetPlayerCredits(client);
    
    //Устанавливает кредиты игроку
    native pSetPlayerCredits(client, num1);
    
    //Получает кол-во убийств игрока
    native pGetPlayerKills(client);
    
    //Устанавливает кол-во убийств игрока
    native pSetPlayerKills(client, num1);
    
    //Получает кол-во смертей игрока
    native pGetPlayerDeaths(client);
    
    //Устанавливает кол-во смертей игрока
    native pSetPlayerDeaths(client, num1);
    
    //Получает кол-во серии убийств
    native pGetPlayerKillStreak(client);
    
    //Устанавливает кол-во серии убийств
    native pSetPlayerKillStreak(client, num1);
    
    //Получает значение блокировки
    native pGetPlayerBanValue(client);
    
    //Устанавливает значение блокировки
    native pSetPlayerBanValue(client, num1);
    
    //Получает значение Custom
    native pGetCustom1Value(client);
    
    //Устанавливает значение Custom
    native pSetCustom1Value(client, num1);
    
    //Получает значение Custom
    native pGetCustom2Value(client);
    
    //Устанавливает значение Custom
    native pSetCustom2Value(client, num1);
    
    //Получает значение Custom
    native pGetCustom3Value(client);
    
    //Устанавливает значение Custom
    native pSetCustom3Value(client, num1);
    
    //Получает значение Custom
    native pGetCustom4Value(client);
    
    //Устанавливает значение Custom
    native pSetCustom4Value(client, num1);
    
    //Получает значение Custom
    native pGetCustom5Value(client);
    
    //Устанавливает значение Custom
    native pSetCustom5Value(client, num1);
    
    
    Cvar's:
    Код:
    dp_level_enable 1 //1 - вкл. ; 0 - выкл. систему уровней
    dp_credit_enable 1 //1- вкл. ; 0 - выкл. кредиты
    dp_stats_enable 1 //1- вкл. ; 0 - выкл. вывод статистики
    dp_exp_toup 200 // * - значение, которое будет умножаться на уровень игрока для получения требуемого количества опыта для повышения уровня.

    Команда для вывода статистики в чат:

    Код:
    !dpinfo
    Установка:
    Извлеките содержимое архива в папку addons/sourcemod/
    Перейдите в папку addons/sourcemod/configs/, и откройте файл databases.cfg
    Добавьте туда:
    Для SQLite
    PHP:
    "dpInfo"
        
    {
            
    "driver"    "sqlite"
            "database"  "dp_users"
        
    }
    Для MySQL
    PHP:
    "dpInfo"
        
    {
            
    "driver" "mysql" 
            "host" "адрес" 
            "database" "имя базы" 
            "user" "пользователь" 
            "pass" "пароль" 
            "port" "3306" 
        
    }

    P.S. Использовал этот плагин в качестве основы для моих предыдущих плагинов, и, подумав, решил выложить людям на пользование, ибо это может облегчить работу с сохранением данных и послужить отличной основой для хороших плагинов, требующих запись данных. Создавайте новые плагины с использованием этого с помощью native's. Вы можете использовать сохраняемые строки для других нужд.

    Дополнения:
    http://hlmod.ru/forum/plaginy-dlya-sourcemod/26269-csgo-dp-hellish-santa-dopolnenie-k-dpinfo.html
    http://hlmod.ru/forum/plaginy-dlya-sourcemod/26405-csgo-css-dp-ct-ban-dopolnenie-k-dpinfo.html

    Также, предлагаю обратить внимание на мои предыдущие плагины, сделанные на основе этого:
    dPI Game
    dPI Random

    Скачать
     
    Последнее редактирование: 19 дек 2015
    pokypka20, Webman, komashchenko и ещё 1-му нравится это.
  2. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    Re: [CSGO] dPInfo 1.1

    dPInfo 1.2

    Добавлена строка BanValue. Сделана для того, чтобы была возможность сохранить значение для блокировки чего-либо. К примеру для того, чтобы блокировать игрока, чтобы тот не смог заходить за команду КТ, и при выходе значение сохранялось.

    Добавлены Natives:
    Код:
    //Получает значение блокировки
    native pGetPlayerBanValue(client);
    
    //Устанавливает значение блокировки
    native pSetPlayerBanValue(client, num1);
    
    Добавлено через 4 часа 34 минуты
    dPInfo 1.2 fix

    Исправлены ошибки в коде.
     
    Последнее редактирование: 3 авг 2014
  3. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    Re: [CSGO|CSS] dPInfo 1.1

    dPInfo 1.3

    Добавлены Custom строки.

    PHP:
    //Получает значение Custom
    native pGetCustom1Value(client);

    //Устанавливает значение Custom
    native pSetCustom1Value(clientnum1);

    //Получает значение Custom
    native pGetCustom2Value(client);

    //Устанавливает значение Custom
    native pSetCustom2Value(clientnum1);

    //Получает значение Custom
    native pGetCustom3Value(client);

    //Устанавливает значение Custom
    native pSetCustom3Value(clientnum1);

    //Получает значение Custom
    native pGetCustom4Value(client);

    //Устанавливает значение Custom
    native pSetCustom4Value(clientnum1);

    //Получает значение Custom
    native pGetCustom5Value(client);

    //Устанавливает значение Custom
    native pSetCustom5Value(clientnum1);
     
  4. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Re: [CSGO|CSS] dPInfo 1.1

    Хорошая штука, спасибо.
     
    Primo нравится это.
  5. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.989
    Re: [CSGO|CSS] dPInfo 1.1

    Оффтоп
     
  6. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Re: [CSGO|CSS] dPInfo 1.1

    Странно.
    Поставил на сервер CS:S
    У игроков пропала возможность закупки оружия. Убрал плагин - стало нормально. В чем проблема?
     
  7. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Re: [CSGO|CSS] dPInfo 1.1

    AlmazON, Только этот плагин стоял и все.
     
  8. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    Re: [CSGO|CSS] dPInfo 1.1

    dPInfo 1.3 fix

    В этой версии нет проблем с покупкой.
     

    Вложения:

    Webman нравится это.
  9. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.989
    Re: [CSGO|CSS] dPInfo 1.1

    Оффтоп
     
    Primo нравится это.
  10. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    Re: [CSGO|CSS] dPInfo 1.1

    Оффтоп
     
  11. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    Re: [CSGO|CSS] dPInfo 1.3

    dPInfo 2.0

    Использование MySQL для хранения бд.
    Поддержка SQLite не проверялась!!!
    Переписан способ сохранения данных. Нет проблем с записью данных и загрузкой данных игрока. Данные игрока больше не пропадают. Чужие данные не загружаются.
     

    Вложения:

    • dpInfo 2.0.zip
      Размер файла:
      13,6 КБ
      Просмотров:
      5
  12. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.989
    Re: [CSGO|CSS] dPInfo 2.0

    PHP:
    else if(MYSQL)
        {
            
    SQL_TQuery(dbSQL_SelectPlayerCallback"CREATE TABLE IF NOT EXISTS users (\ 
                    Steam varchar(35) NOT NULL, \
                    Nick varchar(100) NOT NULL, \
                    Kills int(20) NOT NULL default '0',\
                    Deaths int(20) NOT NULL default '0',\
                    Level int(20) NOT NULL default '0',\
                    EXP int(20) NOT NULL default '0',\
                    Credits int(20) NOT NULL default '0',\
                    BotKills int(20) NOT NULL default '0',\
                    BanValue int(20) NOT NULL default '0',\
                    Custom1 int(20) NOT NULL default '0',\
                    Custom2 int(20) NOT NULL default '0',\
                    Custom3 int(20) NOT NULL default '0',\
                    Custom4 int(20) NOT NULL default '0',\
                    Custom5 int(20) NOT NULL default '0',\
                    PlayerJoin int(20) NOT NULL, \
                    PRIMARY KEY (Steam)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
    );
        }
    И при создании таблиц, такой отбратный вызов бред:
    PHP:
    SQL_TQuery(dbSQL_SelectPlayerCallback,
    Сделай так:
    PHP:
    SQL_TQuery(dbSQL_CheckError"запрос");

    public 
    SQL_CheckError(Handle:ownerHandle:hndle, const String:error[], any:data)
    {
        if(
    error[0]) LogError("Query Failed: %s"error);
    }
    PHP:
    FormatEx(querysizeof(query), "UPDATE users SET Steam = '%s', Nick = '%s', Kills = %d, Deaths = %d, Level = %d, EXP = %d, Credits = %d, BotKills = %d, BanValue = %d, Custom1 = %d, Custom2 = %d, Custom3 = %d, Custom4 = %d, Custom5 = %d, PlayerJoin = %d WHERE Steam = '%s'"sAuthpNamePlayer[pKills][client], Player[pDeaths][client], Player[pLevel][client], Player[pEXP][client], Player[pCredit][client], Player[pBotKills][client], Player[pBanValue][client], Player[Custom1][client], Player[Custom2][client], Player[Custom3][client], Player[Custom4][client], Player[Custom5][client], Player[PlayerJoin][client], sAuth); 
    SQL_TQuery(dbSQL_SelectPlayerCallbackquery); 
    И опять тот же каллбек.
    И опять 25.
    PHP:
    public VErtoe_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        new 
    victim GetClientOfUserId(GetEventInt(event"userid"));
        new 
    bool:headshot GetEventBool(event"headshot");
        if(
    attacker && victim 0)
        {
            if(
    IsClientInGame(attacker) && IsClientInGame(victim))
            {
                if(
    IsFakeClient(victim))
                {
                    
    Player[pBotKills][attacker]++;
                }
                
    Player[pKills][attacker]++;
                
    Player[pDeaths][victim]++;
                if(
    EnCr == && attacker != victimPlayer[pCredit][attacker]++;
                
    Player[pKillStreak][attacker]++;
                
    Player[pKillStreak][victim] = 0
                
    if(EnLvl == 1)
                {
                    new 
    nLVLxp GetClientHealth(attacker)*Player[pLevel][victim]/10
                    nLVLxp 
    nLVLxp+Player[pEXP][attacker]
                    
    Player[pEXP][attacker] = nLVLxp
                    
    if(Player[pKillStreak][victim] > 0)
                    {
                        new 
    nLVLxp2 Player[pLevel][victim]*Player[pKillStreak][victim];
                        
    Player[pEXP][attacker] = Player[pEXP][attacker]+nLVLxp2
                        PrintToChat
    (attacker"Вы получили дополнительно \x01\x04%d \x01\x05опыта за убившего \x01\x04\%d \x01\x05людей"nLVLxp2Player[pKillStreak][victim]);
                    }
                    if(
    headshot)
                    {
                        
    Player[pEXP][attacker] = Player[pEXP][attacker]+50;
                        
    PrintToChat(attacker"Вы получили \x01\x04 50\x01\x05 опыта за убийство в голову");
                    }
                    
    CheckLevel(attacker);
                    
    CheckLevel(victim);
                }

            }
        }
    Создаешь переменные еще за долго до их использования и не факт что они будут использоваться, и к тому же их можно не создавать.
    PHP:
    public VErtoe_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker")),
            
    victim GetClientOfUserId(GetEventInt(event"userid"));

        if(
    attacker && victim && IsClientInGame(attacker) && IsClientInGame(victim))
        {
            if(
    IsFakeClient(victim))
            {
                
    Player[pBotKills][attacker]++;
            }
            
    Player[pKills][attacker]++;
            
    Player[pDeaths][victim]++;
            if(
    EnCr == && attacker != victimPlayer[pCredit][attacker]++;
            
    Player[pKillStreak][attacker]++;
            
    Player[pKillStreak][victim] = 0
            
    if(EnLvl == 1)
            {
                new 
    nLVLxp GetClientHealth(attacker)*Player[pLevel][victim]/10
                nLVLxp 
    nLVLxp+Player[pEXP][attacker]
                
    Player[pEXP][attacker] = nLVLxp
                
    if(Player[pKillStreak][victim] > 0)
                {
                    new 
    nLVLxp2 Player[pLevel][victim]*Player[pKillStreak][victim];
                    
    Player[pEXP][attacker] = Player[pEXP][attacker]+nLVLxp2
                    PrintToChat
    (attacker"Вы получили дополнительно \x01\x04%d \x01\x05опыта за убившего \x01\x04\%d \x01\x05людей"nLVLxp2Player[pKillStreak][victim]);
                }
                if(
    GetEventBool(event"headshot"))
                {
                    
    Player[pEXP][attacker] = Player[pEXP][attacker]+50;
                    
    PrintToChat(attacker"Вы получили \x01\x04 50\x01\x05 опыта за убийство в голову");
                }
                
    CheckLevel(attacker);
                
    CheckLevel(victim);
            }
        }
     
  13. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    Re: [CSGO|CSS] dPInfo 2.0

    Стоял Primary Key, однако с тем запросом Primary Key не меняется. Да и смысл давать изначальные значения, если они всё-равно потом добавятся.

    Добавлено через 4 минуты
    А чем он бред то? Ошибка в любом случае выводится в логи, а так я одной и той же функцией получаю данные, а так же вывожу ошибку.

    Ну а второе - косяк, это да)
     
    Последнее редактирование: 28 авг 2014
  14. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.989
    Re: [CSGO|CSS] dPInfo 2.0

    PHP:
    if(hndl == INVALID_HANDLE)
        {
            
    LogError("Ошибка подключения к базе данных (%s)"error);
        }
        else
        {
            if(
    SQL_HasResultSet(hndl) && SQL_FetchRow(hndl) && IsClientInGame(iClient))
            {
    А потом else и if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl) && IsClientInGame(iClient))
    Так 1 проверка, а так ветвление + еще несколько проверок.
     
  15. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    Re: [CSGO|CSS] dPInfo 2.0

    Однако, далее идёт получение данных. Или лучше делать 2 разные функции? Одна на получение данных, а другая на возврат ошибки?
     
  16. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.989
    Re: [CSGO|CSS] dPInfo 2.0

    Primo, обрати внимание на свою функцию и на мою. Моя проверяет есть ли ошибка, а твоя всё ли нормально с подключением.
     
  17. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    Re: [CSGO|CSS] dPInfo 2.0

    Ну если вы смотрите на выводимый текст, то да.
    Однако, тут и нужно проверять подключение к бд, если с запросами проблем нет. Если подключение осуществлено без проблем, то какие могут быть ошибки?
     
  18. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.989
    Re: [CSGO|CSS] dPInfo 2.0

    Primo, а мало ли? Опечатался в названии поля, не верный синтаксис, не верное количество передаваемых значений и т.д.
     
  19. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    Re: [CSGO|CSS] dPInfo 2.0

    Ну это уже дело того, кто как-то изменяет плагин.
    Задача плагина лишь оперировать с уже имеющимися значениями. А ошибку выводить в том случае, если не установлено соединение с бд.
    Я не несу ответственность за то, что кто-то изменяет этот плагин так, как ему нужно.
     
  20. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.989
    Re: [CSGO|CSS] dPInfo 2.0

    AlmazON, соглсен, но лень было всё исправлять.
    Но не всегда, в плагинах статы не так.