Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Устаревшие темы и разработки > MaNGOSZero (1.12.X)

Важная информация

MaNGOSZero (1.12.X) Любителям древности. Всё для клиента 1.12.Х

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.10.2012, 21:09   #1
Archon64
Новичок
 
Регистрация: 05.04.2010
Сообщений: 18
Сказал(а) спасибо: 9
Поблагодарили 0 раз(а) в 0 сообщениях
Archon64 На верном пути
По умолчанию 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
Это шлёт 100% рабочий сервер, при коннекте к которому у меня выпрыгивает список реалмов.
Код:
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
Это шлёт мой "сервер", при коннекте к которому клиент "зависает" на "Success! (Retviewing realmlist)".
Отличительные 4 байта - это заселение(realm population) сервера типа float. В связи с этим, могу предположить, что проблема не в REALM_LIST(0x10) пакете. Буду очень благодарен за помощь.

Последний раз редактировалось Archon64; 08.10.2012 в 07:45.
Archon64 вне форума   Ответить с цитированием
Старый 09.10.2012, 08:00   #2
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Ну надо посмотреть, что шлет клиент после получения этого опкода.
Success обычно висит, когда нет ответа от чар сервера.
Amaru вне форума   Ответить с цитированием
Старый 09.10.2012, 08:15   #3
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Клиент делает запрос на world сервер на другой порт уже, и запрашивает список персонажей. У тебя кроме реалм-сервера world тоже написан?
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
lovepsone (09.10.2012)
Старый 09.10.2012, 19:10   #4
Archon64
Новичок
 
Регистрация: 05.04.2010
Сообщений: 18
Сказал(а) спасибо: 9
Поблагодарили 0 раз(а) в 0 сообщениях
Archon64 На верном пути
По умолчанию

"world" сервер не запущен. Но не выпрыгивает даже список реалмов, который клиенту отослал сервер авторизации. Я глубоко сомневаюсь, что перед тем, как показать юзеру список реалмов клиент пытается связаться с каждым из них. Так же я пробовал дать реалму флаг OFFLINE, но это не помогло. А так же, в сниффах клиент не шлёт никакие данные реалмам, которые прислал ему сервер авторизации, да и вообще, после приёма 0x10 пакета, клиент не шлёт никакие данные никуда. Возможно я неправильно сниффы собираю, используя WPE PRO?
Archon64 вне форума   Ответить с цитированием
Старый 09.10.2012, 20:47   #5
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

клиент то прислал запрос на лист? код $10.
RomanRom2 вне форума   Ответить с цитированием
Старый 09.10.2012, 22:34   #6
Archon64
Новичок
 
Регистрация: 05.04.2010
Сообщений: 18
Сказал(а) спасибо: 9
Поблагодарили 0 раз(а) в 0 сообщениях
Archon64 На верном пути
По умолчанию

Цитата:
Сообщение от RomanRom2 Посмотреть сообщение
клиент то прислал запрос на лист? код $10.
Да, конечно. Я об этом и говорю - клиент шлёт запрос на лист, я шлю в ответ нормальный пакет, а на клиенте висит Success! На скриншоте видно, что после того, как клиент принял 0х10 пакет, он больше ничего не шлёт, вися при этом на Success!
Изображения
Тип файла: jpg Безымянный.jpg (59.1 Кб, 34 просмотров)
Archon64 вне форума   Ответить с цитированием
Старый 10.10.2012, 08:39   #7
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

ну вы шлете бездумно неправильный пакет. копипаста, так сказать.
вы говорите клиенту о том, что сейчас будет 53 реалмов в листе, а передаете один. вот он и висит, ожидая данные.
RomanRom2 вне форума   Ответить с цитированием
Старый 10.10.2012, 09:12   #8
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

если пакет не менялся то 53 - число байт нужное для сохранения данных.
В данной ситуации происходит обычное явление, клиент уже логинился на данный игровой сервер, и автоматически пытается к нему же и залогинится, но так как игровой сервер не доступен так и висит.
Evgeniy вне форума   Ответить с цитированием
Старый 10.10.2012, 10:28   #9
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Тогда бы выдал список, даже если состоит из одного реалма. Что-то с данными в пакете не так, float и строу с названием реалма правильно сериализировал? У меня самописный логин сервак на чистом Qt работает как часы.
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Старый 10.10.2012, 12:09   #10
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

а, да да да, правильно, 53 - это размер данных.
ну тогда пакет правильный. возможно в коде отправки ошибка.
значение флоата там не имеет значения. это поле вообще очень хитрое, его нельзя тупо слать тупо какое то значение, это неправильно. читайте луа-скрипты, поймете как он работает на самом деле.
RomanRom2 вне форума   Ответить с цитированием
Старый 10.10.2012, 16:41   #11
Archon64
Новичок
 
Регистрация: 05.04.2010
Сообщений: 18
Сказал(а) спасибо: 9
Поблагодарили 0 раз(а) в 0 сообщениях
Archon64 На верном пути
По умолчанию

Цитата:
Сообщение от RomanRom2 Посмотреть сообщение
а, да да да, правильно, 53 - это размер данных.
ну тогда пакет правильный. возможно в коде отправки ошибка.
значение флоата там не имеет значения. это поле вообще очень хитрое, его нельзя тупо слать тупо какое то значение, это неправильно. читайте луа-скрипты, поймете как он работает на самом деле.
Я пытался слать значение 0.02 и 0.0 - результат одинаков. Можно поподробнее про этот float и "lua-скрипты"? Впервые слышу.
Цитата:
Сообщение от Sid Посмотреть сообщение
Тогда бы выдал список, даже если состоит из одного реалма. Что-то с данными в пакете не так, float и строу с названием реалма правильно сериализировал? У меня самописный логин сервак на чистом Qt работает как часы.
Незнаю честно говоря, правильно ли его сериализовал. Использую BinaryWriter в C#. Инты, лонги нормально сериализует, не думаю, что с флоатом какие-то проблемы.

Цитата:
Сообщение от Evgeniy Посмотреть сообщение
если пакет не менялся то 53 - число байт нужное для сохранения данных.
В данной ситуации происходит обычное явление, клиент уже логинился на данный игровой сервер, и автоматически пытается к нему же и залогинится, но так как игровой сервер не доступен так и висит.
По логам видно, что клиент после принятия 0х10 пакета ничего и никуда не шлёт. При клике на cancel, Success! заменяется на Retviewing Realmlist, клиент шлёт 0х10 снова, снова принимает нормальный пакет, а список реалмов так и не появляется. Повторюсь, что я выставлял флаг OFFLINE для реалма.
Archon64 вне форума   Ответить с цитированием
Старый 10.10.2012, 16:53   #12
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Цитата:
Сообщение от Archon64 Посмотреть сообщение
По логам видно, что клиент после принятия 0х10 пакета ничего и никуда не шлёт. При клике на cancel, Success! заменяется на Retviewing Realmlist, клиент шлёт 0х10 снова, снова принимает нормальный пакет, а список реалмов так и не появляется. Повторюсь, что я выставлял флаг OFFLINE для реалма.
ясен пень что не шлет - слать некуда.
смени имя реалма и увидишь, что клиент перестанет виснуть.
Evgeniy вне форума   Ответить с цитированием
Старый 10.10.2012, 21:48   #13
MaS0n
Модератор
 
Регистрация: 09.03.2010
Адрес: dev/null
Сообщений: 126
Сказал(а) спасибо: 44
Поблагодарили 111 раз(а) в 47 сообщениях
MaS0n Скоро придёт к известностиMaS0n Скоро придёт к известности
Отправить сообщение для MaS0n с помощью ICQ
По умолчанию

Я проверял, запускал логин сервер без ворлд, список реалмов все равно показывает, да судя по коду клиента - коннект происходит только после выбора реалма

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

Типа такого
Код:
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);
Посмотрите сами, Interface/GlueXML/Realmlist.lua

Я сам в недоумении, думаю сериализация тут ни при чем, попробуйте сами собрать пакет, без сравнений с прочими работающими и отснифанными

В идеале надо дебажить клиент и смотреть почему он не принимает этот список и вообще смотреть всю процедуру принятия пакета, ясно одно, эвент, который я показал выше - не активируется
MaS0n вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Archon64 (26.10.2012)
Старый 27.10.2012, 03:35   #14
Archon64
Новичок
 
Регистрация: 05.04.2010
Сообщений: 18
Сказал(а) спасибо: 9
Поблагодарили 0 раз(а) в 0 сообщениях
Archon64 На верном пути
По умолчанию

Цитата:
Сообщение от MaS0n Посмотреть сообщение
Я проверял, запускал логин сервер без ворлд, список реалмов все равно показывает, да судя по коду клиента - коннект происходит только после выбора реалма

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

Типа такого
Код:
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);
Посмотрите сами, Interface/GlueXML/Realmlist.lua

Я сам в недоумении, думаю сериализация тут ни при чем, попробуйте сами собрать пакет, без сравнений с прочими работающими и отснифанными

В идеале надо дебажить клиент и смотреть почему он не принимает этот список и вообще смотреть всю процедуру принятия пакета, ясно одно, эвент, который я показал выше - не активируется
Спасибо. Пакет собираю сам, конечно же. После того, как не увидел реалмлиста решил сравнить с 100% правильным пакетом.

Всем спасибо за многие разъяснения, решение проблемы нашёл. Вся беда была совершенно в другом 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
Оказалось что там были лишние 6 байтов.

Последний раз редактировалось NeatElves; 27.10.2012 в 11:42.
Archon64 вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[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


Текущее время: 14:32. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot