iBuseWinner / Reputation

Самая обычная репутация для серверов Minecraft :)
5 stars 3 forks source link

Добавить топ плохих игроков #25

Open mrfiveV opened 2 months ago

mrfiveV commented 2 months ago
iBuseWinner commented 2 months ago

Добрый день)

Первый пункт у меня записан, но когда возьмусь за реализацию пока не знаю.

Есть вопрос по второму пункту: какие цели вы преследуете в данном обновлении? Я вижу проблему с защитой от накрутки через мультиаккаунты. Сидит какой-то игрок, выходит с сервера, его не выписывает из кэша в течение недели (так оно должно работать?), перезагружает роутер (или другими способами меняет свой ip адрес, не важно, какими), заходит под другим ником и выдаёт репутацию себе, повторяя вход под другими никами и выдачи репутации на свой основной аккаунт. Как тогда избавляться от этого способа накрутки?

mrfiveV commented 2 months ago

Имеется ввиду в основной топ не будет загружаться информация об аккаунтах, если время последней активности (захода в игру) будет больше чем N дней. Сами записи остаются в БД Можно доп условие - не загружать в кэш игроков, у которых репутация в определенном диапазоне (настраивать в конфиге) и активность была давно. Например, диапазон репутации настроен от -5 до +5 и время последнего входа в игру 1 неделя. Игрок qwerty имеет репутацию 1 и не заходил месяц - типичный однодневка. Его вычеркиваем из списка пока он вдруг не зайдет. На проекте за день может пройти условно 300 игроков которые не задержатся и хранить их в кэше однажды может стать затратным. Может быть это будет редкий случай, но кому-то да поможет сэкономить ресурсы./ Повторюсь - сделать это условие настраиваемым (может кому-то пофиг на ресурсы)

iBuseWinner commented 2 months ago

В топ загружается только N игроков из базы данных, N настраивается в конфиге (topAmount). Источник - https://github.com/iBuseWinner/Reputation/blob/master/src/main/java/ru/fennec/free/reputation/handlers/players/PlayersContainer.java#L120

Топ обновляется каждые T тиков. T настраивается в конфиге (topUpdateFrequency). Источник - https://github.com/iBuseWinner/Reputation/blob/master/src/main/java/ru/fennec/free/reputation/handlers/players/PlayersContainer.java#L137

И список игроков для топа каждый раз пересобирается с нуля. Источник - https://github.com/iBuseWinner/Reputation/blob/master/src/main/java/ru/fennec/free/reputation/handlers/players/PlayersContainer.java#L127

В кэше топа игроки не будут храниться, если они не являются лидерами по количеству очков репутации. Так что я всё ещё не совсем понимаю, о какой утечке памяти может идти речь 🤔🤔

mrfiveV commented 2 months ago

Пардон, не сразу понял T_T Почему-то подумал что из БД извлекается список и потом отсеивается так как не увидел в SQL запросе LIMIT. Кстати, не лучше ли брать одним запросом топ-N игроков чем делать N запросов?