Навороченный мониторинг FPS |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Навороченный мониторинг FPS |
Metal Messiah |
27.11.2021, 18:11
Сообщение
|
|
Плагин мониторинга FPS, которым я пользуюсь больше года.
Каждые 20 секунд замеряется пинг игроков и FPS. Каждые 120 секунд средние по пингу и FPS и моментальное значение FPS пишутся в файл. Кто хочет изменить таймауты - меняйте параметр set_task(). Принцип в общем то тот же, что в Код плагина Код #include <amxmodx> #include <amxmisc> #include <fakemeta> new g_logfile [64] new sumping[33], nchecks[33]; new fps, sfps, sfpsn, nowfps; new Float:gametime; new Float:framesper; new pcvar_tic, pcvar_max; public plugin_init() { register_plugin("Ping FPS Logger","1.0","Metal Messiah"); get_time("pinglog_%Y%m.log", g_logfile, charsmax ( g_logfile ) ); pcvar_tic = register_cvar("sys_ticrate", "1100"); pcvar_max = register_cvar("fps_max", "1000"); sfps=0; sfpsn=0; register_forward(FM_StartFrame, "start_frame") set_task(20.0, "checkPing", 999888, _, _, "b"); set_task(120.0, "logPing", 999889, _, _, "b"); } public client_putinserver(plrid) { sumping[plrid] = 0; nchecks[plrid] = 0; return PLUGIN_CONTINUE; } public client_disconnect(plrid) { sumping[plrid] = 0; nchecks[plrid] = 0; return PLUGIN_CONTINUE; } public logPing() { new maxping=0; new minping=999; new meanping=0; new num=0; new ping; for (new i=0; i<32; i++) if (nchecks[i] > 3) { num++; ping=sumping[i]/nchecks[i]; meanping+=ping; if (ping>maxping) maxping=ping; if (ping<minping) minping=ping; } if (num>0) { meanping=meanping/num; new stdv=0; for (new i=0; i<32; i++) if (nchecks[i] > 3) { ping=sumping[i]/nchecks[i]; ping=(ping-meanping)*(ping-meanping); stdv+=ping; sumping[i]=0; nchecks[i]=0; } stdv=sqroot(stdv/num); new meanfps=0; if (sfpsn>0) meanfps=sfps/sfpsn; sfps=0; sfpsn=0; new map[33]; get_mapname(map,sizeof map - 1); log_to_file(g_logfile, "%d %d %d %d %d %d %d %s %d %d", num, minping, maxping, meanping, stdv, meanfps, nowfps, map, get_pcvar_num(pcvar_tic), get_pcvar_num(pcvar_max)); } return PLUGIN_CONTINUE; } public checkPing() { new ping, loss, iPlayers[32], pNum; get_players(iPlayers, pNum, "ch") if (pNum>0) { for(new p=0; p<pNum; ++p) { get_user_ping(iPlayers[p], ping, loss); sumping[iPlayers[p]]+=ping; nchecks[iPlayers[p]]++; } } return PLUGIN_CONTINUE; } public start_frame() { gametime = get_gametime() if(framesper >= gametime) { fps++ } else { framesper += 1.0; sfps+=fps; sfpsn++; nowfps=fps; fps = 1; } } В файл выводятся дата, количество игроков, значения пинга игроков (минимум, максимум, средний, стандартное отклонение, средний и текущий FPS, карта, значения sys_ticrate и fpx_max сервера. Изначально я искал зависимость FPS (или скорее глубины просадок FPS) от наличия пингеров или других факторов, ничего не нашел. FPS зависит от числа игроков и карты. Например, на de_aztec все плохо. Todo: дату переделать в удобоваримый формат Д.М.Г чтобы файл можно было анализировать в том же офисе без предварительной обработки. Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
|
Поблагодарили 1 раз
|
|