02.03.2011, 12:35 | #42 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
ну нее, это не решение проблемы...
давайте разбираться дальше. значит, с форматом пакетов мы разобрались, где какой байт мы точно знаем. у нас есть дамп этого пакета с оффа. можете ли вы смоделировать следующее: 1. поставить в мире такого же НПЦ с таким же гуидом как в дампе. 2. отправить дамп пакета, который с оффа. прямо хаком каким нибудь, что бы прямо дамп. по логике, клиент должен схавать пакет и отобразить лут лист. если же нет, значит формат пакета тут не причем. значит действительно пакет ожидается в другое соединение и патченье клиента не помогает или оно криво сделано. согласитесь, чудес не бывает ведь. если полностью смоделировать условия оффа, должен же он заработать. |
02.03.2011, 14:09 | #43 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
99% вероятность что это и есть причина проблемы, можно дебагером проверить вызывается ли обработчик пакета в клиенте или нет...
|
02.03.2011, 22:06 | #44 | ||
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
Цитата:
Код:
byte[] unpatchedBytes; byte[] patchedBytes; int patchOffset; byte[] wowExe = null; FileStream fs = new FileStream(WoWExePatch, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); long numBytes = new FileInfo(WoWExePatch).Length; wowExe = br.ReadBytes((int)numBytes); br.Close(); fs.Close(); if (wowExe == null) return 0; switch (GetWoWBuild()) { case 13329: // 4.0.3a unpatchedBytes = new byte[] { 0xE8, 0xC2, 0xE5, 0xFF, 0xFF }; patchedBytes = new byte[] { 0xB8, 0x00, 0x00, 0x00, 0x00 }; patchOffset = 0x08FAA9; break; case 13623: // 4.0.6a unpatchedBytes = new byte[] { 0xE8, 0x42, 0xE4, 0xFF, 0xFF }; patchedBytes = new byte[] { 0xB8, 0x00, 0x00, 0x00, 0x00 }; patchOffset = 0x091229; break; default: return 1; } byte[] testPatched = new byte[unpatchedBytes.Length]; if(testPatched.SequenceEqual(patchedBytes)) return 1; System.Buffer.BlockCopy(patchedBytes, 0, wowExe, patchOffset, patchedBytes.Length); FileStream fss = new FileStream(WoWExePatch, FileMode.Create, FileAccess.ReadWrite); BinaryWriter bw = new BinaryWriter(fss); bw.Write(wowExe); bw.Close(); Цитата:
|
||
02.03.2011, 23:42 | #45 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
эммм... и это всё? клиент так просто дает себя модифицировать??? там же куча проверок на контрольные суммы и т.п.
вы только не молчите, рассказывайте что делаете. любые действия интересны. |
03.03.2011, 00:29 | #46 | ||
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
Цитата:
Цитата:
|
||
03.03.2011, 01:45 | #47 | |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
Цитата:
попробуйте отправить дамп с оффа. если не поможет, придется вам реализовывать механику второго соединения , ибо остальное - грязь. |
|
03.03.2011, 07:43 | #48 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
SMSG_LIST_INVENTORY ходит по основному "World" соединению
|
03.03.2011, 07:45 | #49 | |
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
Вобщем отправил вот таким образом:
Код:
WorldPacket data(SMSG_LOOT_RESPONSE, 37); ByteBuffer block(37); block << uint8(0xF5); block << uint8(0x39); block << uint8(0x4C); block << uint8(0x00); block << uint8(0xCF); block << uint8(0xC2); block << uint8(0x30); block << uint8(0xF1); block << uint8(0x01); block << uint8(0x00); block << uint8(0x00); block << uint8(0x00); block << uint8(0x00); block << uint8(0x01); block << uint8(0x00); block << uint8(0x00); block << uint8(0x78); block << uint8(0xF3); block << uint8(0x00); block << uint8(0x00); block << uint8(0x01); block << uint8(0x00); block << uint8(0x00); block << uint8(0x00); block << uint8(0xAD); block << uint8(0x46); block << uint8(0x00); block << uint8(0x00); block << uint8(0x80); block << uint8(0xDD); block << uint8(0x9E); block << uint8(0x39); block << uint8(0x00); block << uint8(0x00); block << uint8(0x00); block << uint8(0x00); block << uint8(0x00); data.append(block); handler->GetSession()->SendPacket(&data); Цитата:
|
|
04.03.2011, 15:56 | #50 | |
Новичок
Регистрация: 21.10.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
Пока пофиксил с MULTIPLE_PACKETS (просто чтобы вы не подумали, что стырил отсюда - патч с хаком я давал SkyFire'у еще неделю назад, что отмечено у них в логе. ). Лично у меня сей хак работает всегда. А вообще, лично я не считаю это грязным хаком. Ну вот представьте, находим мы источник проблемы, и он действительно заключается в том, что отсутствует поддержка второго сокета (в принципе, я в этом уверен). Что мы будем делать? Патчить клиент опять. (текущий патчинг клиента хакает только Send в клиенте, а Recv не трогает - в этом и проблема) А дальнейшее углубление в модификацию клиента - еще худший хак, чем этот. Разве нет? @Huntsman: в памяти клиента клиенте, насколько я знаю, массив из 4-х соединений. Последний раз редактировалось Dvlpr; 04.03.2011 в 16:07. |
|
04.03.2011, 16:26 | #51 | |
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
Цитата:
|
|
04.03.2011, 17:40 | #52 | ||
Новичок
Регистрация: 21.10.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
Цитата:
На данный момент чтобы реализовать механику второго соединения нужно также модифицировать клиент. Последний раз редактировалось Dvlpr; 04.03.2011 в 17:44. |
||
04.03.2011, 20:19 | #54 |
Новичок
Регистрация: 21.10.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
хмм, в общем-то, если это проблема сокетов, то можно патчить память так, чтобы все ServerConnection* указатели указывали на одно и то же соединение, но тогда вов будет крашиться при их удалении (оверкилл 8))
|
04.03.2011, 20:37 | #55 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
а нельзя патчить клиент так, что бы опкоду назначать другой обработчик? там же насколько я понимаю таблица функций для каждого обработчика.
|
04.03.2011, 22:38 | #57 |
Новичок
Регистрация: 21.10.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
|
16.03.2011, 00:29 | #59 |
Новичок
Регистрация: 21.10.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
С чего ты взял? О.о
|
16.03.2011, 13:47 | #61 | |
Новичок
Регистрация: 21.10.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
Кстати, два коннекта это действительно Home и World - нашел блупост про это на евро форумах вов. А значит один коннект получает менее приоритетные опкоды, а второй - более. Таким образом, близзард не станет перекидывать наш опкодик на другой коннект, просто потому что он сейчас на основном коннекте не спроста. |
|
16.03.2011, 22:09 | #63 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
|
16.03.2011, 23:15 | #64 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
|
17.03.2011, 09:43 | #65 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
спасибо. теперь я понял организацию соединений. системы, которые требуют межмаповой работы, такие чат, телепорты, группы, гильдии, френды/игноры и т.п. ходят по Home соединению. все что относится непосредственно к миру - в World соединении. все правильно.
в моем случае мне немного проще, у меня уже есть разделение сервера на миры. весь Home трафик остается на CharServer, World трафик соответственно идет прямиком на WorldServer. и у близзов вполне возможно сразу прямиком, через портмаппинг операционной системы, т.е. не через CharServer. да, скорее всего так. вот зачем второе соединение, оказывается. типа снизили нагрузку нетворка на проксе CS. забавно. *As of July 2010, the 'official' definition of Broadband Internet (per the FCC) is '4Mbps downstream and 1Mbps upstream'. Anything lower than this is not 'officially' broadband. как аппетиты выросли, однако. на классике, да что там, и на БК тоже, помню, играли на 128к интернете. |
17.03.2011, 23:41 | #67 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
Ну и конечно теперешние цифры сильно завышены, возможно это пиковые значения для пропускной способности канала ... раньше помню 4 полных рейда зашедших в столицу врага клали эту зону напрочь, что ложилось непонятно сервер или канал |
|
18.03.2011, 17:34 | #68 |
Новичок
Регистрация: 21.10.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
|
26.03.2011, 09:45 | #70 | |
Новичок
Регистрация: 04.03.2011
Сообщений: 29
Сказал(а) спасибо: 12
Поблагодарили 9 раз(а) в 7 сообщениях
|
|
|
Пользователь сказал cпасибо: | HuntsMan (26.03.2011) |