PHP код:
new taxation = 7;// Эту переменную замени на ту, где у тебя хранится значение налогообложения
#define COUNT_FINANC_STAT_DAYS 10
stock ShowFinancStatDialog(playerid, bizid)
{
static const
month_names[12][9] =
{
"января", "февраля", "марта", "апреля", "мая", "июня",
"июля", "августа", "сентября", "октября", "ноября", "декабря"
},
month_days[12] =// Для текущего года
{
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
new string[(32+2+7)+(20+11)+((6+2+sizeof(month_names[])-1+4+11)*COUNT_FINANC_STAT_DAYS)+(9+11)+1];
format(string, sizeof(string), "SELECT * FROM bizstats WHERE bizid = %d LIMIT 1", bizid);
new Cache:result = mysql_query(mysql_connection_ID, string, true);
if(!cache_num_rows())
{
cache_delete(result);
return 0;
}
string = "Статистика доходов за последние "#COUNT_FINANC_STAT_DAYS" дней:\n";//32+2+7
format(string, sizeof(string), "%sНалогообложение: %d%%\n\n", string, taxation);//20+11
new year,
month,
day,
total_buff;
getdate(year, month, day);
if(day >= COUNT_FINANC_STAT_DAYS)
{
for(new i, buff; i < COUNT_FINANC_STAT_DAYS; i++)
{
cache_get_value_index_int(0, i+2, buff);// +2 так как перед столбцами с нужными нам данными есть ещё столбец с ID строки и столбец с ID бизнеса, которые нужно пропустить
total_buff += buff;
format(string, sizeof(string), "%s%02d %s %04d\t\t%d$\n", string, day-COUNT_FINANC_STAT_DAYS+i, month_names[month-1], year, buff);//6+2+sizeof(month_names[])-1+4+11
}
}
else
{
if(month != 1)// Если месяц не январь
{
month-=1;// Просто перейдём к предыдущему месяцу
}
else// Если январь
{
month = 12;// Перейдём к декабрю
year-=1;// Отнимем один год
}
new i = 0,
d = month_days[month-1] + day-COUNT_FINANC_STAT_DAYS + 1,// Высчитаем первый день в нашем списке для предыдущего месяца по формуле "максимальное_количество_дней_в_предыдущем_месяце + (день_в_текущем_месяце-количество_дней_в_статистике)+1"
/*
То бишь, если представим, что сегодня второе июля 2017 (02.06.2017), то формула будет такой:
31+(2-10)+1
В итоге получаем: 31-8+1 (получаем 24 мая)
То бишь, вот тут "day-COUNT_FINANC_STAT_DAYS" всегда будет отрицательное число, именно поэтому перед ними стоит +, а не -
(с минусом значения наоборот прибавлялись бы, ибо минус на минус даёт плюс)
*/
last_iter = month_days[month-1]+1,// Ну а тут просто узнаём максимальное количество дней в текущем месяце (31+1 = 32)
buff;
for(; d < last_iter; i++, d++)// Условие цикла получится таким "24 < 32"
{// То бишь, выведет с 24 по 31 число
cache_get_value_index_int(0, i+2, buff);// Почему +2 - объяснял выше
total_buff += buff;// Вычисляем общую сумму
format(string, sizeof(string), "%s%02d %s %04d\t\t%d$\n", string, d, month_names[month-1], year, buff);//6+2+sizeof(month_names[])-1+4+11
}
if(month == 12)// Если в переменной хранится декабрь, значит мы брали данные для предыдущего года и
{
year++;// Возвращаем текущий год
month = 1;// Устанавливаем январь
}
else// Иначе
{
month++;// Восстанавливаем текущий месяц
}
d = 1;// Устанавливаем первый день (так как это начало месяца)
last_iter = day;// Устанавливаем текущий день (напомню, что мы в пример рассматриваем дату "02.06.2017")
for(; d <= last_iter; i++, d++)// Получается условие "1 <= 2"
{// То бишь, выведет с 1 по 2 число
cache_get_value_index_int(0, i+2, buff);
total_buff += buff;
format(string, sizeof(string), "%s%02d %s %04d\t\t%d$\n", string, d, month_names[month-1], year, buff);//6+2+sizeof(month_names[])-1+4+11
}
}
format(string, sizeof(string), "%s\nВсего: %d$", string, total_buff);// 9+11
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Доходы", string, "Ок", "");
cache_delete(result);
return 1;
}
У каждой строки для диалога указан свой размер в формуле.