Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент

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

Опкоды, Формулы, Клиент Разбор и изучение взаимодействия клиента с сервером

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.06.2012, 14:44   #1
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию Инициализация входа в мир

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

Я дошел до окна создания персонажа, создание и удаление и тд, но не получается войти в мир.

Жмем вход, далее приходит CMSG_PLAYER_LOGIN на что отвечаю SMSG_LOGIN_VERIFY_WORLD и SMSG_ACCOUNT_DATA_TIMES. (!) что необходимо послать еще, чтобы пошла инициализация мира? Мне приходит ответ из 522 и 523 опкодов, но в мангосе я смотрю они просто логируются и не отсылают ответов.

Все это происходит на 1.12.
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Старый 15.06.2012, 15:01   #2
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

Апдейт пакет должен быть, без него вроде не войдешь
Lordronn вне форума   Ответить с цитированием
Старый 15.06.2012, 20:19   #3
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

На сколько мне известно апдейт пакеты нужны для взаимодействия с сервером. Мне же хотябы тупой сандбокс, загрузиться в голый мир. Или первый апдейт пакет нужен обязательно?
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Старый 16.06.2012, 00:03   #4
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от Sid Посмотреть сообщение
Или первый апдейт пакет нужен обязательно?
This. Клиенту нужно отправить апдейт пакет с созданием игрока хотя бы...
TOM_RUS вне форума   Ответить с цитированием
Старый 16.06.2012, 08:39   #5
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Теперь постоянно вылетает с ошибкой в конце загрузки Уже прогресс)

http://my.jetscreenshot.com/4271/20120616-gsgq-224kb
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Старый 18.06.2012, 10:35   #6
Mayss
Ученый
 
Аватар для Mayss
 
Регистрация: 08.03.2010
Адрес: Россия, Сибирь, Новокузнецк
Сообщений: 137
Сказал(а) спасибо: 194
Поблагодарили 19 раз(а) в 13 сообщениях
Mayss На лучшее можно только надеяться...
Отправить сообщение для Mayss с помощью Skype™
По умолчанию

Вопрос не по теме, если писать на Visual Basic сервер, то какие перспективы в дальнейшем "в плане развития" могут быть? реально ли написать полноценный сервер на этом языке?, и какие могут быть проблемы "глобального" уровня? и подходит ли данный язык программирования под такую сложную задачу?.
Mayss вне форума   Ответить с цитированием
Старый 18.06.2012, 10:49   #7
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Mayss Посмотреть сообщение
Вопрос не по теме, если писать на Visual Basic сервер, то какие перспективы в дальнейшем "в плане развития" могут быть? реально ли написать полноценный сервер на этом языке?, и какие могут быть проблемы "глобального" уровня? и подходит ли данный язык программирования под такую сложную задачу?.
1. никаких. любители извращений конечно существуют, но обычно поодиночке.
2. реально. довольно сложно (ну не предназначен VB для этого. впрочем для чего он предназначен никто не знает), но можно. топором, говорят, тоже можно ноутбуки чинить.
3. отсутствие нужных билиотек низкого уровня.
4. конечно нет. его вообще не стоит называть "языком программирования", его скриптовым-то языком можно назвать с большой натяжкой. в ворде макросы писать - самое то.
rsa вне форума   Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
KiriX (18.06.2012), Mayss (18.06.2012), Sid (18.06.2012)
Старый 18.06.2012, 11:21   #8
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от Mayss Посмотреть сообщение
Вопрос не по теме, если писать на Visual Basic сервер, то какие перспективы в дальнейшем "в плане развития" могут быть? реально ли написать полноценный сервер на этом языке?, и какие могут быть проблемы "глобального" уровня? и подходит ли данный язык программирования под такую сложную задачу?.
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Старый 18.06.2012, 16:41   #9
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от rsa Посмотреть сообщение
...
4. конечно нет. его вообще не стоит называть "языком программирования", его скриптовым-то языком можно назвать с большой натяжкой. в ворде макросы писать - самое то.
Вы путаете VBA и VB. К последнему этот пункт не относится. А к VB.NET, который, скорее всего, имел ввиду автор, еще и 3 пункт не относится.

Но писать серверы на (V)B... пожалуйста, не надо.
LordJZ вне форума   Ответить с цитированием
Старый 18.06.2012, 17:30   #10
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

В общем собрал апдейт пакет аналогично тому что мангос формирует, точная копия. Однако вылетает 132. Вначале думал компрессия, но нет. Отсылаю на мангосе без компрессии - все нормально. У меня же 132.
Что еще необходимо для входа в мир? Или в таком случае 132 бы не вылетала?
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Старый 18.06.2012, 18:08   #11
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

может что-то все таки не так собирается?
Lordronn вне форума   Ответить с цитированием
Старый 18.06.2012, 18:09   #12
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Раз клиент крашится, значит пакет кривой... Судя по Вашему скрину крашится как раз при обработке апдейт пакета (ObjectMgrClient.cpp).
TOM_RUS вне форума   Ответить с цитированием
Старый 18.06.2012, 18:20   #13
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Скрин уже не актуален, вот что сейчас http://my.jetscreenshot.com/4271/20120618-y5ux-252kb

Добавлено через 7 минут
Цитата:
Сообщение от Lordronn Посмотреть сообщение
может что-то все таки не так собирается?
Разные только координаты персонажа. 2-4 строчки.
Мой


Мангос
__________________
SpellWork Qt4

Последний раз редактировалось Sid; 18.06.2012 в 18:22.
Sid вне форума   Ответить с цитированием
Старый 18.06.2012, 18:25   #14
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

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

Цитата:
Сообщение от TOM_RUS Посмотреть сообщение
Возможно как-то связано с туториалами...
Кстати да. Апдейт шлется при добавлении игркоа на карту. Перед ним еще несколько ключевых пакетов в функции SendInitialPacketsBeforeAddToMap()

Все верно) Зайти получилось Спасибо за подсказку ТОМ.

Хм, еще такая проблема, перестали читаться пакеты. Точней заголовки. Т.е если даже хандлеров нет, то заголовок я все равно читаю и смотрю что за опкод и каков размер пакета. А сейчас тупо все в молоко уходят что пакет не полный. Декриптор пакетов тот что в мангосе, далее механизм идентичен - ну если я смог добраться до игрового мира, значит оно работало. А после того как в мир зашел, все заголовки перестали читаться.

Пример как до входа в мир


А теперь после


Хм. Прикол. Иногда чтение проходит. И далее если медленно двигаюсь то тоже. Не успевает?))

Похоже у меня переполнение в глобальном евентовом цикле.
__________________
SpellWork Qt4

Последний раз редактировалось NeatElves; 19.06.2012 в 10:53.
Sid вне форума   Ответить с цитированием
Старый 18.06.2012, 19:07   #16
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Sid Посмотреть сообщение
Хм, еще такая проблема, перестали читаться пакеты. Точней заголовки. Т.е если даже хандлеров нет, то заголовок я все равно читаю и смотрю что за опкод и каков размер пакета. А сейчас тупо все в молоко уходят что пакет не полный. Декриптор пакетов тот что в мангосе, далее механизм идентичен - ну если я смог добраться до игрового мира, значит оно работало. А после того как в мир зашел, все заголовки перестали читаться.
кусок кода с организацией очереди входящих пакетов покажите. тут же не телепаты.

Добавлено через 1 минуту
Цитата:
Сообщение от LordJZ Посмотреть сообщение
Вы путаете VBA и VB. К последнему этот пункт не относится. А к VB.NET, который, скорее всего, имел ввиду автор, еще и 3 пункт не относится.
я ничего не путаю. это относится ко всем разновидностям VB, различать сорта д...ма между собой как-то не учился.
rsa вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Ranger (28.06.2012)
Старый 18.06.2012, 19:11   #17
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от rsa Посмотреть сообщение
кусок кода с организацией очереди входящих пакетов покажите. тут же не телепаты.
В Qt глобальный глобальный цикл событий, все сигналы ставятся в очередь в него. В данном случае при получении пакетов. Возможно буффер входящих данных переполняется.

Вся соль в том, что сигнал readyRead() вызывается на каждый пакет. Проблема в том что данные в нем некорректные становятся. Но если сигнал вызывается значит пакет готов к чтению...
__________________
SpellWork Qt4

Последний раз редактировалось NeatElves; 19.06.2012 в 10:51.
Sid вне форума   Ответить с цитированием
Старый 19.06.2012, 07:10   #18
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Sid Посмотреть сообщение
Вся соль в том, что сигнал readyRead() вызывается на каждый пакет. Проблема в том что данные в нем некорректные становятся. Но если сигнал вызывается значит пакет готов к чтению...
ну код вы не показываете, можно только предположить что этой читалке скармливается все время один и тот же указатель на место для данных. и данные друг друга затирают, если идут слишком быстро. qt сам по себе просто стррррашный тормоз...
rsa вне форума   Ответить с цитированием
Старый 19.06.2012, 07:43   #19
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию



Слот вызывается по получению сигнала readyRead(), вызов которого от меня толком не зависит.
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Старый 19.06.2012, 08:42   #20
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

_buffer.clear();
_buffer = readAll();

потенциальный косяк...данные из буфера не надо удалять. Только после получения всего пакета. Если пакет приходит не полностью...никогда и не получим.
Evgeniy вне форума   Ответить с цитированием
Старый 19.06.2012, 09:05   #21
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Нет, я понимаю что он может не полностью прийти. Однако как тогда определять его конец? Да и bytesAvailable() < 6, в теории заголовок то дойти должен чтобы уже определить каков реальный размер? Хотя если он не дошел полностью то и декриптор не сработает верно.

Все, я понял в чем моя ошибка. TCP/IP же посылает данные потоково, нет гарантий что пакет придет именно в таком виде в котором был отправлен.

Приду домой, попробую вариант такой
1) Чтение заголовка
2) Ожидание тела пакета по размеру из заголовка
3) Чтение и обработка тела
4) Срез данных из буффера

Ну и это все в цикле.
__________________
SpellWork Qt4

Последний раз редактировалось NeatElves; 19.06.2012 в 10:51.
Sid вне форума   Ответить с цитированием
Старый 19.06.2012, 09:41   #22
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Цитата:
Сообщение от Sid Посмотреть сообщение
Нет, я понимаю что он может не полностью прийти. Однако как тогда определять его конец? Да и bytesAvailable() < 6, в теории заголовок то дойти должен чтобы уже определить каков реальный размер? Хотя если он не дошел полностью то и декриптор не сработает верно.

пример:
message.markReaderIndex(); - оставляем метку с начала чтения
и
message.resetReaderIndex(); - возврат к метке если недостаточно данных для чтения.
frame.writeBytes(message.readBytes(size)); - если все гуд - читаем (и сразу удаляем нужное кол-во байт)
зы у меня работает...
Evgeniy вне форума   Ответить с цитированием
Старый 20.06.2012, 17:59   #23
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

В дебаге нормально все читается и обмен пакетами прозодит, а в релизе при входе в мир 132 вылетает. Есть идеи?

Капец, 2 лишних байта в packGuid. =\ Как так
__________________
SpellWork Qt4

Последний раз редактировалось Sid; 20.06.2012 в 18:25.
Sid вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение новостей в окне входа в игру monax WWW 54 03.01.2011 19:11


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


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