Перейти к содержанию

Отображение Онлайна


Рекомендуемые сообщения

Этот кусок кода отвечает за онлайн.

Вопрос:

Как изменить отображение цифирных полных значений на текстовые?

Пример:

users = 0

Отображает в игре "Игроков нет".


int count_users(void)
{
int i, users;
users = 0;
for(i = 0; i < ARRAYLENGTH(server); i++) {
if (server[i].fd > 0) {
users += server[i].users;
}
}
return users;
}

Ссылка на комментарий
Поделиться на другие сайты

напиши

users = 1;

users += 100+server.users;

и посмотри)

значение онлайна изменится, это точно.(я проверял)

Изменено пользователем Salfer
Ссылка на комментарий
Поделиться на другие сайты

Этот кусок кода отвечает за онлайн.

Вопрос:

Как изменить отображение цифирных полных значений на текстовые?

Пример:

users = 0

Отображает в игре "Игроков нет".


int count_users(void)
{
int i, users;
users = 0;
for(i = 0; i < ARRAYLENGTH(server); i++) {
if (server[i].fd > 0) {
users += server[i].users;
}
}
return users;
}

Этот кусок кода отвечает за подсчет онлайна. Тебе нужен кусок кода, где эта функция вызывается и по её результатам уже выводится в чат надпись.

Ссылка на комментарий
Поделиться на другие сайты

Вопрос:

Как изменить отображение цифирных полных значений на текстовые?

Отображение в каком месте? При каких действиях?

Для начала выложите скрин места вывода онлайна.

Ссылка на комментарий
Поделиться на другие сайты


int count_users(void)
{
int i, users;
users = 150;
for(i = 0; i < ARRAYLENGTH(server); i++) {
if (server[i].fd > 0) {
users += 400*server[i].users;
}
}
return users;
}

4aad3b22b11f031b12a652adcc9559f8.JPG

я в users += писал букву, но тогда вместо неё в клиенте появлялось аж 5-и значное значение онлайна.

я понимаю что int отвечает на целое численное значение, а char за буквенное, но я не могу сообразить как.

Изменено пользователем Salfer
Ссылка на комментарий
Поделиться на другие сайты


int count_users(void)
{
int i, users;
users = 150;
for(i = 0; i < ARRAYLENGTH(server); i++) {
if (server[i].fd > 0) {
users += 400*server[i].users;
}
}
return users;
}

4aad3b22b11f031b12a652adcc9559f8.JPG

я в users += писал букву, но тогда вместо неё в клиенте появлялось аж 5-и значное значение онлайна.

я понимаю что int отвечает на целое численное значение, а char за буквенное, но я не могу сообразить как.


int broadcast_user_count(int tid, unsigned int tick, int id, intptr_t data)
{
uint8 buf[6];
int users = count_users();
// only send an update when needed
static int prev_users = 0;
if( prev_users == users )
return 0;
prev_users = users;
if( loginif_isconnected() )
{
// send number of user to login server
WFIFOHEAD(login_fd,6);
WFIFOW(login_fd,0) = 0x2714;
WFIFOL(login_fd,2) = users;
WFIFOSET(login_fd,6);
}
// send number of players to all map-servers
WBUFW(buf,0) = 0x2b00;
WBUFL(buf,2) = users;
mapif_sendall(buf,6);
return 0;
}

Изменено пользователем botka4aet
Ссылка на комментарий
Поделиться на другие сайты

4aad3b22b11f031b12a652adcc9559f8.JPG

Логин сервер после успешной аутентификации игрока отправляет клиенту список чар серверов с их онлайном.

На количество игроков выделено два байта. За формат отображения отвечает клиент, а не сервер.

Вместе с онлайном передается название char сервера(надпись eAthena на скрине). Под которое выделено 20 байт.

Можно динамически генерировать его в нужном формате. А стандартное отображение онлайна(550) отключить хексом.

Но делать столько телодвижений, чтобы при 0 онлайне показать надпись "Игроков нет" нецелесообразно.

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика