1.12.1 realmlist
Доброго времени суток. Скажите пожалуйста, по какой причине клиент может зависать на табличке Success! (Retviewing realmlist).
Шлю вроде правильный пакет. Для полной уверенности, решил произвести проверку. 1) Просниффил что мне шлёт 100% рабочий сервер. 2) Поменял у себя в конфиге имя и адрес, на имя и адрес того рабочего сервера. 3) Проснифил что шлю я и сравнил. Результат таков: Код:
10 35 00 00 00 00 00 01 01 00 Код:
10 35 00 00 00 00 00 01 01 00 Отличительные 4 байта - это заселение(realm population) сервера типа float. В связи с этим, могу предположить, что проблема не в REALM_LIST(0x10) пакете. Буду очень благодарен за помощь. |
Ну надо посмотреть, что шлет клиент после получения этого опкода.
Success обычно висит, когда нет ответа от чар сервера. |
Клиент делает запрос на world сервер на другой порт уже, и запрашивает список персонажей. У тебя кроме реалм-сервера world тоже написан? :)
|
"world" сервер не запущен. Но не выпрыгивает даже список реалмов, который клиенту отослал сервер авторизации. Я глубоко сомневаюсь, что перед тем, как показать юзеру список реалмов клиент пытается связаться с каждым из них. Так же я пробовал дать реалму флаг OFFLINE, но это не помогло. А так же, в сниффах клиент не шлёт никакие данные реалмам, которые прислал ему сервер авторизации, да и вообще, после приёма 0x10 пакета, клиент не шлёт никакие данные никуда. Возможно я неправильно сниффы собираю, используя WPE PRO?
|
клиент то прислал запрос на лист? код $10.
|
Вложений: 1
Цитата:
|
ну вы шлете бездумно неправильный пакет. копипаста, так сказать.
вы говорите клиенту о том, что сейчас будет 53 реалмов в листе, а передаете один. вот он и висит, ожидая данные. |
если пакет не менялся то 53 - число байт нужное для сохранения данных.
В данной ситуации происходит обычное явление, клиент уже логинился на данный игровой сервер, и автоматически пытается к нему же и залогинится, но так как игровой сервер не доступен так и висит. |
Тогда бы выдал список, даже если состоит из одного реалма. Что-то с данными в пакете не так, float и строу с названием реалма правильно сериализировал? У меня самописный логин сервак на чистом Qt работает как часы.
|
а, да да да, правильно, 53 - это размер данных.
ну тогда пакет правильный. возможно в коде отправки ошибка. значение флоата там не имеет значения. это поле вообще очень хитрое, его нельзя тупо слать тупо какое то значение, это неправильно. читайте луа-скрипты, поймете как он работает на самом деле. |
Цитата:
Цитата:
Цитата:
|
Цитата:
смени имя реалма и увидишь, что клиент перестанет виснуть. |
Я проверял, запускал логин сервер без ворлд, список реалмов все равно показывает, да судя по коду клиента - коннект происходит только после выбора реалма
луа-функции, имеется в виду базовая связь клиента с его же интерфейсом, а именно мы шлем пакет например, активизируем луа эвент этим, луа эвент заранее зарегистрован в интерфейсе, и интерфейс уже нам создает и список реалмов каким мы его видим и всю отрисовку текста, кнопочки и т.д Типа такого Код:
int __cdecl Lua_RequestRealmList(int a1) Код:
function RealmList_OnLoad() Код:
name, numCharacters, invalidRealm, realmDown, currentRealm, pvp, rp, load = GetRealmInfo(RealmList.selectedCategory, realmIndex); Я сам в недоумении, думаю сериализация тут ни при чем, попробуйте сами собрать пакет, без сравнений с прочими работающими и отснифанными В идеале надо дебажить клиент и смотреть почему он не принимает этот список и вообще смотреть всю процедуру принятия пакета, ясно одно, эвент, который я показал выше - не активируется |
Цитата:
Всем спасибо за многие разъяснения, решение проблемы нашёл. Вся беда была совершенно в другом 0х01 пакете приходящем от сервера, вторая стадия авторизации (что странно, т.к. после принятия неправильного 0х01 пакета, клиент шлёт сервера запрос реалм-листа 0х10). Я считал что его структура такова: Код:
0x0 uint8 Command |
Текущее время: 09:34. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS