03.07.2016, 15:23
(
Last edited by Diman777; 05/07/2016 at 01:15 AM.
)
Вообщем наблюдал за модом, и эта фигня с файлами повторялась уже раз 5, причём есть небольшая особенность - файлы перестают работать ~ через 5-6 дней работы мода (если мод не перезагружать конечно же).
Попробывал сделать следующее - отключал файлы по одному, что выявить где проблема, и теперь на 95% уверен, что проблема в моём логе. После его добавления началась эта проблема скорей всего.
Код
Использование
Записи
02.07.16 00:00:08 <пикап> Nickname (3) купил 'Гранаты' цена $3500 патроны 1
02.07.16 00:11:08 <чат/общий> Nickname (1): ок спасибо
Казалось бы - лог записывает всё на ура, 1 день = 1 файл. Но в чём может быть тут проблема? Срабатывает printf, который приведён в коде.
stabker через твой код попробывал сделать дебаг (таймер поставил в OnGameModeInit вместо команды, ибо вводить постоянно команду - это лольство). В клиентский лог постоянно выводит, что открыто 0 файлов, хотя ясен перец, что при входе в игру какие-то файлы открывались для чтения/записи. Код поключил разумеется сразу после a_samp.inc, в самый верх.
Попробывал сделать следующее - отключал файлы по одному, что выявить где проблема, и теперь на 95% уверен, что проблема в моём логе. После его добавления началась эта проблема скорей всего.
Код
PHP Code:
// Макс. длина одной строки в логе (время + группа + текст)
const MAXLEN_STR_LOG = 300;
new str_log[STRING_256];
#define Log(%1,%2,%3);\
{format(str_log, STRING_256, %2, %3);\
_Log(%1, str_log);}
_Log(group[], text[])
{
new day, month, year, hour, minute, second;
getdate(year, month, day);
gettime(hour, minute, second);
new name_log[STRING_64];
format
(
name_log, STRING_64,
"log/%d/%02d/log_%02d.%02d.%02d.txt",
year, month, day, month, year-2000
);
new File:handle;
if (!fexist(name_log))
{
handle = fopen(name_log, io_write);
if (handle)
{
fclose(handle);
}
}
handle = fopen(name_log, io_append);
if (handle)
{
new str_fmt_log[MAXLEN_STR_LOG];
format
(
str_fmt_log, MAXLEN_STR_LOG, "%02d.%02d.%02d %02d:%02d:%02d <%s> %s\r\n",
day, month, year-2000, hour, minute, second, group, text
);
for (new i = 0; i < strlen(str_fmt_log); i++)
{
fputchar(handle, str_fmt_log[i], false);
}
fclose(handle);
}
else
{
printf
(
"Не удалось создать файл лога '%s'\n\
Возможные причины:\n\
1) отсутствует папка с именем 'log';\n\
2) отсутствует папка с текущим годом;\n\
3) отсутствует папка с текущим месяцем.",
name_log
);
}
}
PHP Code:
Log("деньги", "%s (%d) передал игроку %s (%d) $%d", GetPlayerNameEx(from_id), from_id, GetPlayerNameEx(him_id), him_id, money);
Log("жалобы", "%s (%d) отправил ЖБ на %s (%d): %s", GetPlayerNameEx(senderid), senderid, GetPlayerNameEx(intruderid), intruderid, cmd_dest);
02.07.16 00:00:08 <пикап> Nickname (3) купил 'Гранаты' цена $3500 патроны 1
02.07.16 00:11:08 <чат/общий> Nickname (1): ок спасибо
Казалось бы - лог записывает всё на ура, 1 день = 1 файл. Но в чём может быть тут проблема? Срабатывает printf, который приведён в коде.
stabker через твой код попробывал сделать дебаг (таймер поставил в OnGameModeInit вместо команды, ибо вводить постоянно команду - это лольство). В клиентский лог постоянно выводит, что открыто 0 файлов, хотя ясен перец, что при входе в игру какие-то файлы открывались для чтения/записи. Код поключил разумеется сразу после a_samp.inc, в самый верх.

