Иконка ресурса

[Shop] Info Stats 1.1

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #1
Faya™ добавил(а) новый ресурс:

[Shop] Info Stats - Информационная статистика по балансу шопа

Данный модуль добавляет в пункт "Функции" подпункт "Статистика", показывающий:
Кол-во кредитов у всех игроков
Кол-во потраченных кредитов (то бишь купленные предметы (из таблицы boughts))
Кол-во заработанных кредитов игроками за день
Кол-во потраченных кредитов игроками за день

Посмотреть вложение 45283

Узнать больше об этом ресурсе...
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #2
shop_info_stats.sp:
public Action Shop_OnCreditsSet(int iClient, int &iCredits, int iBy_who)
{
    int iDifference, iPCredits = Shop_GetClientCredits(iClient);

    if iCredits > iPCredits *then
    {
        iDifference = iCredits - iPCredits;
        g_iMoney[1] += iDifference;
        g_iDynamic[1] += iDifference;
    }
    else
    {
        iDifference = iPCredits - iCredits;
        g_iMoney[0] += iDifference;
        g_iDynamic[0] += iDifference;
    }
}
Это можно проще записать:
shop_info_stats.sp:
public Action Shop_OnCreditsSet(int iClient, int &iCredits, int iBy_who)
{
    int iPCredits = Shop_GetClientCredits(iClient);
    int iId = view_as<int>(iCredits > iPCredits);
    int iDifference = iId ? (iCredits - iPCredits) : (iPCredits - iCredits);

    g_iMoney[iId] += iDifference;
    g_iDynamic[iId] += iDifference;
}
Ну и лично мне непонятно: почему 323? И почему вообще панель? И зачем \n в самом конце?
shop_info_stats.sp:
bool FunctionSelect(int iClient)
{
    Panel hPanel = new Panel();

    char szBuffer[323];
    FormatEx(szBuffer, sizeof szBuffer, "Статистика сервера \n \nКредитов у игроков: %i \nПотрачено кредитов игроками: %i \n \nЗаработано кредитов игроками сегодня: %i \nПотрачено кредитов игроками сегодня: %i \n \n", g_iMoney[1], g_iMoney[0], g_iDynamic[1], g_iDynamic[0]);
    SetPanelTitle(hPanel, szBuffer);

    SetPanelCurrentKey(hPanel, 7);
    DrawPanelItem(hPanel, "Назад");
    SetPanelCurrentKey(hPanel, 9);
    DrawPanelItem(hPanel, "Выход");
    SendPanelToClient(hPanel, iClient, CallBack_Panel, MENU_TIME_FOREVER);
    delete hPanel;

    return true;
}

Тут переименование колонок (as) в результате вообще лишено смысла (ты же всё равно с индексами работаешь):
shop_info_stats.sp:
public void Shop_Started()
{
    g_hDatabase = Shop_GetDatabase();

    char szQuery[256], szPrefix[64];
    Shop_GetDatabasePrefix(szPrefix, sizeof szPrefix);
    FormatEx(szQuery, sizeof szQuery, "SELECT SUM(buy_price) as sum_price, (SELECT SUM(money) FROM %splayers) as sum_money  FROM %sboughts", szPrefix, szPrefix);
    g_hDatabase.Query(SQL_Callback_Sum, szQuery);

    Shop_AddToFunctionsMenu(FunctionDisplay, FunctionSelect);
}
И буфер большой. Тут и 164 хватит с головой, ИМХО.
 

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #3
Это можно проще записать:
shop_info_stats.sp:
public Action Shop_OnCreditsSet(int iClient, int &iCredits, int iBy_who)
{
    int iPCredits = Shop_GetClientCredits(iClient);
    int iId = view_as<int>(iCredits > iPCredits);
    int iDifference = iId ? (iCredits - iPCredits) : (iPCredits - iCredits);

    g_iMoney[iId] += iDifference;
    g_iDynamic[iId] += iDifference;
}
Не люблю использовать оператор вопросительный знак + у меня проходит одна проверка, а у тебя 2 :ab:

Ну и лично мне непонятно: почему 323? И почему вообще панель? И зачем \n в самом конце?
shop_info_stats.sp:
bool FunctionSelect(int iClient)
{
    Panel hPanel = new Panel();

    char szBuffer[323];
    FormatEx(szBuffer, sizeof szBuffer, "Статистика сервера \n \nКредитов у игроков: %i \nПотрачено кредитов игроками: %i \n \nЗаработано кредитов игроками сегодня: %i \nПотрачено кредитов игроками сегодня: %i \n \n", g_iMoney[1], g_iMoney[0], g_iDynamic[1], g_iDynamic[0]);
    SetPanelTitle(hPanel, szBuffer);

    SetPanelCurrentKey(hPanel, 7);
    DrawPanelItem(hPanel, "Назад");
    SetPanelCurrentKey(hPanel, 9);
    DrawPanelItem(hPanel, "Выход");
    SendPanelToClient(hPanel, iClient, CallBack_Panel, MENU_TIME_FOREVER);
    delete hPanel;

    return true;
}
Не зачем 323, число такое подобрала, кол-во денег я же не знаю (опа надо увеличить если допустим первые два будут 8-и значные числа, а вторым двум остается 10 знаков (по 5 на каждое число)), пробел забыл добавить что бы был перенос на другую строку еще, панель выбрал что бы не было лишних отступов

Тут переименование колонок (as) в результате вообще лишено смысла (ты же всё равно с индексами работаешь):
shop_info_stats.sp:
public void Shop_Started()
{
    g_hDatabase = Shop_GetDatabase();

    char szQuery[256], szPrefix[64];
    Shop_GetDatabasePrefix(szPrefix, sizeof szPrefix);
    FormatEx(szQuery, sizeof szQuery, "SELECT SUM(buy_price) as sum_price, (SELECT SUM(money) FROM %splayers) as sum_money  FROM %sboughts", szPrefix, szPrefix);
    g_hDatabase.Query(SQL_Callback_Sum, szQuery);

    Shop_AddToFunctionsMenu(FunctionDisplay, FunctionSelect);
}
И буфер большой. Тут и 164 хватит с головой, ИМХО.
Первое не имеет значения, 164 хм, а если кому то в голову придет назвать префикс таблицы как нибудь более 30 символов :lol:
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #4
Не люблю использовать оператор вопросительный знак + у меня проходит одна проверка, а у тебя 2 :ab:
Это можно легко переписать на один оператор и обычный if. Не вижу никакой проблемы.
Проблема кода, размещенного в исходнике, в том, что он повторяется с отличием в индексе.

Кайло как-то писал, что размер строк приводится компилятором к числу, кратному 2-ум, вроде. Я вот к чему.

кол-во денег я же не знаю
Максимальная длина одного числа - 13 символов. Вот и считай с расчетом, что таких чисел - 4.

а если кому то в голову придет назвать префикс таблицы как нибудь более 30 символов
Давай на чистоту. Ты видел таких людей, которые дают префикс таблицам длиннее 30 символов?
Плюс у Шопа есть неявный лимит на допустимую длину префикса: 11. Пруфы - в исходнике

 

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #5
Это можно легко переписать на один оператор и обычный if. Не вижу никакой проблемы.
Проблема кода, размещенного в исходнике, в том, что он повторяется с отличием в индексе.
Я не считаю это как проблему, т.к не вижу смысла делать доп проверку на индекс...
Если бы я видел в этом смысл то я бы придумал как это сделать

Давай на чистоту. Ты видел таких людей, которые дают префикс таблицам длиннее 30 символов?
Плюс у Шопа есть неявный лимит на допустимую длину префикса: 11. Пруфы - в исходнике
Ну люди всякие бывают. А то что ограничение в 11 символов, то да, ладно
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #6
Какую дополнительную проверку? Я уже предлагаю такой вариант:
shop_info_stats.sp:
public Action Shop_OnCreditsSet(int iClient, int &iCredits, int iBy_who)
{
    int iPCredits = Shop_GetClientCredits(iClient), iDifference = 0, iId = 0;

    if (iCredits > iPCredits)
    {
        iId = 1;
        iDifference = iCredits - iPCredits;
    }
    else
    {
        iDifference = iPCredits - iCredits;
    }

    g_iMoney[iId] += iDifference;
    g_iDynamic[iId] += iDifference;
}

Кстати,
Не люблю использовать оператор вопросительный знак
  • Почему?
  • Это называется "тернарное выражение".
 

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #7
Какую дополнительную проверку? Я уже предлагаю такой вариант:
shop_info_stats.sp:
public Action Shop_OnCreditsSet(int iClient, int &iCredits, int iBy_who)
{
    int iPCredits = Shop_GetClientCredits(iClient), iDifference = 0, iId = 0;

    if (iCredits > iPCredits)
    {
        iId = 1;
        iDifference = iCredits - iPCredits;
    }
    else
    {
        iDifference = iPCredits - iCredits;
    }

    g_iMoney[iId] += iDifference;
    g_iDynamic[iId] += iDifference;
}
Ну так еще можно

Кстати,

  • Почему?
  • Это называется "тернарное выражение".
Не красиво выглядит :derisive:
 

SV3N

Участник
Сообщения
17
Реакции
3
Как я понял, происходит это при рестарте сервера
C-подобный:
L 08/27/2019 - 18:52:04: SourceMod error session started
L 08/27/2019 - 18:52:04: Info (map "deathrun_akai_sup3r_f1n") (file "errors_20190827.log")
L 08/27/2019 - 18:52:04: [SM] Exception reported: Current result set has no fetched rows
L 08/27/2019 - 18:52:04: [SM] Blaming: shop_info_stats.smx
L 08/27/2019 - 18:52:04: [SM] Call stack trace:
L 08/27/2019 - 18:52:04: [SM]   [0] DBResultSet.FetchInt
L 08/27/2019 - 18:52:04: [SM]   [1] Line 63, shop_info_stats.sp::SQL_Callback_Sum
 

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #10
Как я понял, происходит это при рестарте сервера
C-подобный:
L 08/27/2019 - 18:52:04: SourceMod error session started
L 08/27/2019 - 18:52:04: Info (map "deathrun_akai_sup3r_f1n") (file "errors_20190827.log")
L 08/27/2019 - 18:52:04: [SM] Exception reported: Current result set has no fetched rows
L 08/27/2019 - 18:52:04: [SM] Blaming: shop_info_stats.smx
L 08/27/2019 - 18:52:04: [SM] Call stack trace:
L 08/27/2019 - 18:52:04: [SM]   [0] DBResultSet.FetchInt
L 08/27/2019 - 18:52:04: [SM]   [1] Line 63, shop_info_stats.sp::SQL_Callback_Sum
Скинь базу шопа, под спойлер или в лс
Оффтоп
 

SV3N

Участник
Сообщения
17
Реакции
3
Скинь базу шопа, под спойлер или в лс
Оффтоп
45512
(Выделил кол-во строк)
Эта ошибка после рестарта, а дальше статистика получает данные и обновляется все :с
Оффтоп
 

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #12
(Выделил кол-во строк)
Эта ошибка после рестарта, а дальше статистика получает данные и обновляется все :с
Оффтоп
При каждом рестарте ошибка?
 

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #14
2 раза рестартил сервера и ошибки появлялись. До и после рестарта таких ошибок не наблюдалось
Попробуй новую версию проверить
Сообщения автоматически склеены:

2 раза рестартил сервера и ошибки появлялись. До и после рестарта таких ошибок не наблюдалось
И да, логи скинь
 

Вложения

  • shop_info_stats.smx
    6.2 КБ · Просмотры: 3
Последнее редактирование:

SV3N

Участник
Сообщения
17
Реакции
3
Попробуй новую версию проверить
Сообщения автоматически склеены:


И да, логи скинь
L 08/28/2019 - 21:09:07: SourceMod error session started
L 08/28/2019 - 21:09:07: Info (map "deathrun_akai_sup3r_f1n") (file "errors_20190828.log")
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] Shop BD Prefix Name: shop_
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] Shop BD Prefix Name: shop_
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] Shop BD Prefix Name: shop_
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] Shop BD Prefix Name: shop_
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] Shop BD Prefix Name: shop_
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] =======================
L 08/28/2019 - 21:09:09: [SM] Exception reported: Current result set has no fetched rows
L 08/28/2019 - 21:09:09: [SM] Blaming: shop_info_stats.smx
L 08/28/2019 - 21:09:09: [SM] Call stack trace:
L 08/28/2019 - 21:09:09: [SM] [0] DBResultSet.FetchInt
L 08/28/2019 - 21:09:09: [SM] [1] Line 73, shop_info_stats.sp::SQL_Callback_Sum
L 08/28/2019 - 21:09:10: Error log file session closed.
Статистика работает, но точно так же ошибку выдает после рестарта
 

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #16
L 08/28/2019 - 21:09:07: SourceMod error session started
L 08/28/2019 - 21:09:07: Info (map "deathrun_akai_sup3r_f1n") (file "errors_20190828.log")
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] Shop BD Prefix Name: shop_
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] Shop BD Prefix Name: shop_
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] Shop BD Prefix Name: shop_
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] Shop BD Prefix Name: shop_
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] Shop BD Prefix Name: shop_
L 08/28/2019 - 21:09:07: [shop_info_stats.smx] =======================
L 08/28/2019 - 21:09:09: [SM] Exception reported: Current result set has no fetched rows
L 08/28/2019 - 21:09:09: [SM] Blaming: shop_info_stats.smx
L 08/28/2019 - 21:09:09: [SM] Call stack trace:
L 08/28/2019 - 21:09:09: [SM] [0] DBResultSet.FetchInt
L 08/28/2019 - 21:09:09: [SM] [1] Line 73, shop_info_stats.sp::SQL_Callback_Sum
L 08/28/2019 - 21:09:10: Error log file session closed.
Статистика работает, но точно так же ошибку выдает после рестарта
Так?
 

Вложения

  • shop_info_stats.smx
    6.1 КБ · Просмотры: 3

September

Участник
Сообщения
5,238
Реакции
2,742
  • Команда форума
  • #19
Последнее редактирование:

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #20
добавь поддержку shop gold

и еще, может быть добавить стату именно по игроку? сколько он за сегодня заработал и потратил
Хм, хорошо подумаю. А стату по игроку как за сессию или за день?
 
Сверху Снизу