16.05.2016, 05:14
Надо полагать, что как-то так
Это надо добавить в самый верх. Команда /openedfiles выводит в лог список открытых файлов.
И да, следует заметить, что это не сработает, если файлы открываются еще где-либо кроме основного мода.
PHP Code:
#define MAX_OPENED_FILES (508) //на виндовс получилось открыть 507
#define MAX_PATH_LEN (64) //это от балды: я не знаю, что тут должно быть
enum of_enum
{
filepath[MAX_PATH_LEN],
File: filehandle
}
new opened_files[MAX_OPENED_FILES][of_enum];
new opened_files_count;
stock File: temp_fopen(path[], filemode:mode = io_readwrite)
{
new File: handle = fopen(path, mode);
if(handle)
{
if(opened_files_count < MAX_OPENED_FILES)
{
strmid(opened_files[opened_files_count][filepath], path, 0, MAX_PATH_LEN - 2, MAX_PATH_LEN);
opened_files[opened_files_count][filehandle] = handle;
opened_files_count ++;
}
else
{
printf("temp_fopen: слишком много открытых файлов (%s)", path);
}
}
return handle;
}
#define fopen temp_fopen
stock temp_fclose(File: handle)
{
new ret = fclose(handle);
if(ret == 1)
{
for(new i; i < opened_files_count; i++)
{
if(opened_files[i][filehandle] == handle)
{
opened_files_count--;
if(i != opened_files_count)
{
strmid(opened_files[i][filepath], opened_files[opened_files_count][filepath], 0, MAX_PATH_LEN - 2, MAX_PATH_LEN);
opened_files[i][filehandle] = opened_files[opened_files_count][filehandle];
}
break;
}
}
}
return ret;
}
#define fclose temp_fclose
COMMAND:openedfiles(playerid)
{
printf("На данный момент открыто файлов: %d", opened_files_count);
for(new i; i < opened_files_count; i++)
{
printf("%d) %s", i, opened_files[i][filepath]);
}
return 1;
}
И да, следует заметить, что это не сработает, если файлы открываются еще где-либо кроме основного мода.