Мне кажется, сама методика расчета не позволит достоверно определить "среднее" значение FPS. Выборка в 10 тиков - это слишком мало, а статистический анализ выборки нужно производить полноценно, в том числе рассчитывать среднеквадратичное отклонение и использовать это значение для оценки не только самой выборки (устанавливая достоверность, например, 0.95), но и "добросовестности" игрока.
Для реализации подобной идеи, без существенной нагрузки на систему, понадобится создать "самосортирующийся" массив, с автоматическим пересчетом среднего при добавлении в него любого значения... Хотя, для этого частного случая, порядок элементов не важен, поэтому можно вести только учет MIN и MAX и отбрасывать "неподходящие" элементы из выборки, учитывая их в среднеквадратичном отклонении.
Если решать задачу "в лоб" получится довольно большой набор данных:
Код:
enum _:STATS_DATA {
RAW[100],
RAW_MIN,
RAW_MAX,
RAW_MID,
Float:RAW_STD
}
new player_stats[MAX_PLAYER + 1][STATS_DATA];
Но мне кажется, можно ввести свое "понятие" схожее со среднеквадратичным отклонением и выполнять "поточный" анализ выборки, фиксируя для принятия решения окончательные значения выборки данных, скажем, каждые 100-1000 тиков. Так получится значительно быстрее.
Код:
enum _:STATS_DATA {
RAW_MIN,
RAW_MAX,
RAW_MID,
Float:RAW_STD
}
new player_stats[MAX_PLAYER + 1][STATS_DATA];
А если подумать еще, в разрезе "ввода своего понятия", схожего со среднеквадратичным отклонением, то можно отказаться от учета RAW_STD, введя контрольный расчет по таймеру (0.1-10 секунд), просто считая количество тиков игрока / период времени => <FPS>, а понятие "среднеквадратичного отклонения" определить как RAW_STD = (RAW_MID - <FPS>)^2.
Под поточной обработкой, я понимаю учет в среднем значении RAW_MID = (RAW_MID + VALUE) / 2 всех величин в диаппазоне MIN < VALUE < MAX, при получении значения за этим пределом, просто обновлять значения MIN или MAX.
Так получится снять лишнюю нагрузку с системы и получить эквивалент "добросовестности" игрока, а замена Think_Pre на Think_Post сделает влияние плагина на игровой процесс еще более незначительным.
Извините, если внес сумбур своими мыслями