Просмотр полной версии : [Вопрос] Как сделать команду, которая бы показывала всех игроков с розыском
Здравствуйте. Можно ли как-то сделать такой алгоритм, что мне будет НАПРИМЕР показывать всех игроков(онлайн) с розыском в чате, но сначало будут идти игроки с уровнем розыска 1, потом 2 и тд. ? И чтобы этот алгоритм можна было еще использовать в других случаях.
Возможно, данные будут браться из базы данных ?
Возможно, данные будут браться из базы данных ?
Нет, нужно чтоб именно у игроков которые онлайн... С базы данных я и сам минимально знаю как, но если не сложно будет опиши еще как с БД, мб для себя что-то новое увижу.
Daniel_Cortez
15.05.2018, 15:25
ИМХО, самый простой в исполнении вариант - с помощью foreach несколько раз перебрать всех игроков в онлайне, сначала добавляя в список игроков с 1-м уровнем розыска, затем с 2-м, 3-м и т.д. Либо можно сделать отдельный итератор для всех разыскиваемых игроков, или даже несколько итераторов, по одному на каждый уровень розыска, если вам не жалко памяти под несколько массивов размером в MAX_PLAYERS.
И да, разве не логичнее выводить сначала тех, у кого уровень розыска больше?
И да, разве не логичнее выводить сначала тех, у кого уровень розыска больше?
Я это как пример написал, но спасибо за ответ.
Нет, нужно чтоб именно у игроков которые онлайн... С базы данных я и сам минимально знаю как, но если не сложно будет опиши еще как с БД, мб для себя что-то новое увижу.
Можно в БД создать поле is_online и ставить туда true при логине и false при отключении игрока и старте сервера (на случай краша).
Daniel_Cortez
15.05.2018, 18:31
Можно в БД создать поле is_online и ставить туда true при логине и false при отключении игрока и старте сервера (на случай краша).
Знаю, что это просто ТС попросил привести пример с БД, но думаю, всё же стоит заметить, что перебор игроков едва ли настолько сложен, чтобы выгружать эту задачу на сервер MySQL. К тому же, доступ к результатам запроса к БД осуществляется с помощью нативных функций, выполнение которых занимает на порядок больше времени, чем у пары-тройки инструкций для доступа к массиву в случае с foreach.
ИМХО, самый простой в исполнении вариант - с помощью foreach несколько раз перебрать всех игроков в онлайне, сначала добавляя в список игроков с 1-м уровнем розыска, затем с 2-м, 3-м и т.д. Либо можно сделать отдельный итератор для всех разыскиваемых игроков, или даже несколько итераторов, по одному на каждый уровень розыска, если вам не жалко памяти под несколько массивов размером в MAX_PLAYERS.
Или можно 1 раз пройтись по игрокам с помощью форич, а потом отсортировать используя любой тип сортировки. Но не знаю какой метод будет оптимальнее, может для сортировки потребуется больше процессорного времени, чем в Вашем случае (надо проверить).
Ну по части скорости вариант массивами под каждый уровень звучит правдоподобнее, ибо в момент вызова все данные уже будут отсортированы и их нужно будет лишь показать. Другое дело, что памяти будет выделено больше + придётся составлять алгоритм по сортировке массивов (в случае с foreach: просто вовремя удалять и добавлять данные в нужный массив).
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot