PDA

Просмотр полной версии : [Вопрос] Как сделать команду, которая бы показывала всех игроков с розыском



geneff
15.05.2018, 08:57
Здравствуйте. Можно ли как-то сделать такой алгоритм, что мне будет НАПРИМЕР показывать всех игроков(онлайн) с розыском в чате, но сначало будут идти игроки с уровнем розыска 1, потом 2 и тд. ? И чтобы этот алгоритм можна было еще использовать в других случаях.

Long-
15.05.2018, 14:17
Возможно, данные будут браться из базы данных ?

geneff
15.05.2018, 14:43
Возможно, данные будут браться из базы данных ?

Нет, нужно чтоб именно у игроков которые онлайн... С базы данных я и сам минимально знаю как, но если не сложно будет опиши еще как с БД, мб для себя что-то новое увижу.

Daniel_Cortez
15.05.2018, 15:25
ИМХО, самый простой в исполнении вариант - с помощью foreach несколько раз перебрать всех игроков в онлайне, сначала добавляя в список игроков с 1-м уровнем розыска, затем с 2-м, 3-м и т.д. Либо можно сделать отдельный итератор для всех разыскиваемых игроков, или даже несколько итераторов, по одному на каждый уровень розыска, если вам не жалко памяти под несколько массивов размером в MAX_PLAYERS.

И да, разве не логичнее выводить сначала тех, у кого уровень розыска больше?

geneff
15.05.2018, 15:39
И да, разве не логичнее выводить сначала тех, у кого уровень розыска больше?
Я это как пример написал, но спасибо за ответ.

ziggi
15.05.2018, 17:51
Нет, нужно чтоб именно у игроков которые онлайн... С базы данных я и сам минимально знаю как, но если не сложно будет опиши еще как с БД, мб для себя что-то новое увижу.

Можно в БД создать поле is_online и ставить туда true при логине и false при отключении игрока и старте сервера (на случай краша).

Daniel_Cortez
15.05.2018, 18:31
Можно в БД создать поле is_online и ставить туда true при логине и false при отключении игрока и старте сервера (на случай краша).
Знаю, что это просто ТС попросил привести пример с БД, но думаю, всё же стоит заметить, что перебор игроков едва ли настолько сложен, чтобы выгружать эту задачу на сервер MySQL. К тому же, доступ к результатам запроса к БД осуществляется с помощью нативных функций, выполнение которых занимает на порядок больше времени, чем у пары-тройки инструкций для доступа к массиву в случае с foreach.

Geebrox
18.05.2018, 00:18
ИМХО, самый простой в исполнении вариант - с помощью foreach несколько раз перебрать всех игроков в онлайне, сначала добавляя в список игроков с 1-м уровнем розыска, затем с 2-м, 3-м и т.д. Либо можно сделать отдельный итератор для всех разыскиваемых игроков, или даже несколько итераторов, по одному на каждый уровень розыска, если вам не жалко памяти под несколько массивов размером в MAX_PLAYERS.

Или можно 1 раз пройтись по игрокам с помощью форич, а потом отсортировать используя любой тип сортировки. Но не знаю какой метод будет оптимальнее, может для сортировки потребуется больше процессорного времени, чем в Вашем случае (надо проверить).

DeimoS
18.05.2018, 11:20
Ну по части скорости вариант массивами под каждый уровень звучит правдоподобнее, ибо в момент вызова все данные уже будут отсортированы и их нужно будет лишь показать. Другое дело, что памяти будет выделено больше + придётся составлять алгоритм по сортировке массивов (в случае с foreach: просто вовремя удалять и добавлять данные в нужный массив).