|
MaNGOSZero (1.12.X) Любителям древности. Всё для клиента 1.12.Х |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
07.10.2012, 21:09 | #1 |
Новичок
Регистрация: 05.04.2010
Сообщений: 18
Сказал(а) спасибо: 9
Поблагодарили 0 раз(а) в 0 сообщениях
|
1.12.1 realmlist
Доброго времени суток. Скажите пожалуйста, по какой причине клиент может зависать на табличке Success! (Retviewing realmlist).
Шлю вроде правильный пакет. Для полной уверенности, решил произвести проверку. 1) Просниффил что мне шлёт 100% рабочий сервер. 2) Поменял у себя в конфиге имя и адрес, на имя и адрес того рабочего сервера. 3) Проснифил что шлю я и сравнил. Результат таков: Код:
10 35 00 00 00 00 00 01 01 00 00 00 00 45 6D 65 72 61 6C 64 20 44 72 65 61 6D 00 39 35 2E 32 31 31 2E 31 32 33 2E 31 38 31 3A 38 39 39 37 00 A4 70 FD 3E 01 01 00 02 00 Код:
10 35 00 00 00 00 00 01 01 00 00 00 00 45 6D 65 72 61 6C 64 20 44 72 65 61 6D 00 39 35 2E 32 31 31 2E 31 32 33 2E 31 38 31 3A 38 39 39 37 00 0A D7 A3 3C 01 01 00 02 00 Отличительные 4 байта - это заселение(realm population) сервера типа float. В связи с этим, могу предположить, что проблема не в REALM_LIST(0x10) пакете. Буду очень благодарен за помощь. Последний раз редактировалось Archon64; 08.10.2012 в 07:45. |
09.10.2012, 08:00 | #2 |
MaNGOS Dev
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
|
Ну надо посмотреть, что шлет клиент после получения этого опкода.
Success обычно висит, когда нет ответа от чар сервера. |
09.10.2012, 08:15 | #3 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Клиент делает запрос на world сервер на другой порт уже, и запрашивает список персонажей. У тебя кроме реалм-сервера world тоже написан?
__________________
SpellWork Qt4 |
Пользователь сказал cпасибо: | lovepsone (09.10.2012) |
09.10.2012, 19:10 | #4 |
Новичок
Регистрация: 05.04.2010
Сообщений: 18
Сказал(а) спасибо: 9
Поблагодарили 0 раз(а) в 0 сообщениях
|
"world" сервер не запущен. Но не выпрыгивает даже список реалмов, который клиенту отослал сервер авторизации. Я глубоко сомневаюсь, что перед тем, как показать юзеру список реалмов клиент пытается связаться с каждым из них. Так же я пробовал дать реалму флаг OFFLINE, но это не помогло. А так же, в сниффах клиент не шлёт никакие данные реалмам, которые прислал ему сервер авторизации, да и вообще, после приёма 0x10 пакета, клиент не шлёт никакие данные никуда. Возможно я неправильно сниффы собираю, используя WPE PRO?
|
09.10.2012, 20:47 | #5 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
клиент то прислал запрос на лист? код $10.
|
09.10.2012, 22:34 | #6 |
Новичок
Регистрация: 05.04.2010
Сообщений: 18
Сказал(а) спасибо: 9
Поблагодарили 0 раз(а) в 0 сообщениях
|
Да, конечно. Я об этом и говорю - клиент шлёт запрос на лист, я шлю в ответ нормальный пакет, а на клиенте висит Success! На скриншоте видно, что после того, как клиент принял 0х10 пакет, он больше ничего не шлёт, вися при этом на Success!
|
10.10.2012, 08:39 | #7 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
ну вы шлете бездумно неправильный пакет. копипаста, так сказать.
вы говорите клиенту о том, что сейчас будет 53 реалмов в листе, а передаете один. вот он и висит, ожидая данные. |
10.10.2012, 09:12 | #8 |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
если пакет не менялся то 53 - число байт нужное для сохранения данных.
В данной ситуации происходит обычное явление, клиент уже логинился на данный игровой сервер, и автоматически пытается к нему же и залогинится, но так как игровой сервер не доступен так и висит. |
10.10.2012, 10:28 | #9 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Тогда бы выдал список, даже если состоит из одного реалма. Что-то с данными в пакете не так, float и строу с названием реалма правильно сериализировал? У меня самописный логин сервак на чистом Qt работает как часы.
__________________
SpellWork Qt4 |
10.10.2012, 12:09 | #10 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
а, да да да, правильно, 53 - это размер данных.
ну тогда пакет правильный. возможно в коде отправки ошибка. значение флоата там не имеет значения. это поле вообще очень хитрое, его нельзя тупо слать тупо какое то значение, это неправильно. читайте луа-скрипты, поймете как он работает на самом деле. |
10.10.2012, 16:41 | #11 | ||
Новичок
Регистрация: 05.04.2010
Сообщений: 18
Сказал(а) спасибо: 9
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
Цитата:
По логам видно, что клиент после принятия 0х10 пакета ничего и никуда не шлёт. При клике на cancel, Success! заменяется на Retviewing Realmlist, клиент шлёт 0х10 снова, снова принимает нормальный пакет, а список реалмов так и не появляется. Повторюсь, что я выставлял флаг OFFLINE для реалма. |
||
10.10.2012, 16:53 | #12 | |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
Цитата:
смени имя реалма и увидишь, что клиент перестанет виснуть. |
|
10.10.2012, 21:48 | #13 |
Модератор
|
Я проверял, запускал логин сервер без ворлд, список реалмов все равно показывает, да судя по коду клиента - коннект происходит только после выбора реалма
луа-функции, имеется в виду базовая связь клиента с его же интерфейсом, а именно мы шлем пакет например, активизируем луа эвент этим, луа эвент заранее зарегистрован в интерфейсе, и интерфейс уже нам создает и список реалмов каким мы его видим и всю отрисовку текста, кнопочки и т.д Типа такого Код:
int __cdecl Lua_RequestRealmList(int a1) { int v2; // eax@1 v2 = FrameScript__GetParamValue(a1, 1, 0); CGlueMgr__GetRealmList(v2); return 0; } Код:
function RealmList_OnLoad() this:RegisterEvent("OPEN_REALM_LIST"); this.currentRealm = 0; this.offset = 0; end function RealmList_OnEvent() if ( event == "OPEN_REALM_LIST" ) then if ( this:IsVisible() ) then RealmListUpdate(); else this:Show(); end end end Код:
name, numCharacters, invalidRealm, realmDown, currentRealm, pvp, rp, load = GetRealmInfo(RealmList.selectedCategory, realmIndex); Я сам в недоумении, думаю сериализация тут ни при чем, попробуйте сами собрать пакет, без сравнений с прочими работающими и отснифанными В идеале надо дебажить клиент и смотреть почему он не принимает этот список и вообще смотреть всю процедуру принятия пакета, ясно одно, эвент, который я показал выше - не активируется |
Пользователь сказал cпасибо: | Archon64 (26.10.2012) |
27.10.2012, 03:35 | #14 | |
Новичок
Регистрация: 05.04.2010
Сообщений: 18
Сказал(а) спасибо: 9
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
Всем спасибо за многие разъяснения, решение проблемы нашёл. Вся беда была совершенно в другом 0х01 пакете приходящем от сервера, вторая стадия авторизации (что странно, т.к. после принятия неправильного 0х01 пакета, клиент шлёт сервера запрос реалм-листа 0х10). Я считал что его структура такова: Код:
0x0 uint8 Command 0x1 uint8 Error 0x2 uint8[20] M2 0x16 uint32 unk1 0x1A uint32 unk2 0x1E uint16 unk3 Последний раз редактировалось NeatElves; 27.10.2012 в 11:42. |
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[12226] Few Typos in Default realmlist sql. | newsbot | CMaNGOS-4.3.4 Commits | 0 | 14.09.2012 21:20 |
запуск wow.exe и игнор realmlist | Dragon | Прочая документация | 14 | 08.07.2011 23:47 |
realmlist.allowedSecurityLevel | PSZ | Корзина | 1 | 18.12.2010 23:35 |
Близзард и realmlist | timmit | Флудильня | 11 | 12.05.2010 11:35 |