|
Отвергнутые патчи Патчи, отвергнутые от приёма в GIT |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
27.02.2011, 16:40 | #1 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
[FIX] SMSG_ATTACKSTOP
Стало интересно, что же это за неизвестные 4 байта. Копая снифф я заметил, что значение колеблется в зависимости от типа таргета(victim - а) Если victim == player - 1, а если unit или pet - 0
Код:
--- /src/game/Unit.cpp Thu Feb 24 12:31:30 2011 +++ /src/game/Unit.cpp Sun Feb 27 16:36:36 2011 @@ -2855,7 +2855,7 @@ WorldPacket data( SMSG_ATTACKSTOP, (4+16) ); // we guess size data << GetPackGUID(); data << victim->GetPackGUID(); // can be 0x00... - data << uint32(0); // can be 0x1 + data << uint32(victim->GetTypeId()==TYPEID_PLAYER ? 1 : 0); // victim is player SendMessageToSet(&data, true); DETAIL_FILTER_LOG(LOG_FILTER_COMBAT, "%s %u stopped attacking %s %u", (GetTypeId()==TYPEID_PLAYER ? "player" : "creature"), GetGUIDLow(), (victim->GetTypeId()==TYPEID_PLAYER ? "player" : "creature"),victim->GetGUIDLow()); Последний раз редактировалось Lordronn; 27.02.2011 в 16:45. |
27.02.2011, 17:59 | #2 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Почему 4 байта, а не 1? В некоторых других пакетах bool передается в 1 байте.
|
27.02.2011, 18:11 | #3 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Также в некоторых пакетах почему-то булл идет в 4 байта. В коде мангоса и тринити отправляются 4 байта, в парсере своем тоже читаю 4 байта и все нормально - не крашит.
|
27.02.2011, 18:14 | #4 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Предположение не верно.
Код:
S->C: SMSG_ATTACKSTOP (0x144), Size: 20, Timestamp: 2010-09-17 07:29:06 ----------------------------------------------------------------------------- GUID: { 0xF13000747010EBCE, Type: Creature, Entry: 29808, Counter: 1108942 } Victim GUID: { 0xF13000746110E54D, Type: Creature, Entry: 29793, Counter: 1107277 } Unknown (dword): 1 |
27.02.2011, 18:27 | #5 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Код:
Attacker: GUID (High: Unit Entry: 48029, Counter: 986876) Target: GUID (High: Player Entry: 0, Counter: 47358415) Target is player: true Код:
Attacker: GUID (High: Player Entry: 0, Counter: 47358415) Target: GUID (High: Unit Entry: 48029, Counter: 986876) Target is player: false Код:
Attacker: GUID (High: Unit Entry: 48029, Counter: 987159) Target: GUID (High: Player Entry: 0, Counter: 47358415) Target is player: true Код:
Attacker: GUID (High: Unit Entry: 48267, Counter: 983783) Target: GUID (High: Player Entry: 0, Counter: 51678088) Target is player: true |
27.02.2011, 18:58 | #6 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Судя по коду в клиенте, этот параметр как-то влияет на позицию/ориентацию юнитов относительно друг друга, если ида все правильно декомпилировала, то значения могут быть только 0 или 1.
|
01.04.2015, 03:28 | #7 |
Ученый
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
|
Если установить 1 то моб будет стараться "смотреть" в сторону цели, даже если цель убита.
На оффе используется довольно часто, но смысл и как это можно использовать (особенно когда цель игрок) понять не могу. |
01.04.2015, 09:45 | #8 |
Администратор
|
Может, установка параметра в 1 решит проблему https://github.com/cmangos/issues/issues/590 ?
Там как раз нпц не хватает ориентации на игрока при наложении на него ауры. |
01.04.2015, 15:13 | #9 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
раз уж мы некропостим, то у меня вот так:
Код:
function msgBuild(var Buf: TBuffer; var m: T_SMSG_ATTACKSTOP): longint; overload; begin pkt.InitCmd (Buf, SMSG_ATTACKSTOP); pkt.AddGUID (Buf, m.AttackerGUID); pkt.AddGUID (Buf, m.TargetGUID); pkt.AddLong (Buf, m.Following); result:= pkt.pktLen; end; вообще булеан у близзов мнооооого где передается в виде инта, а мнооооого где в виде байта. это нормально. просто одну фичу делала одна команда программистов (которая не экономит трафик), другую - другая (которая экономит). |
01.04.2015, 17:15 | #10 | ||
Ученый
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
|
Цитата:
Цитата:
Последний раз редактировалось SeT; 01.04.2015 в 17:18. |
||
01.04.2015, 23:33 | #11 | |
MaNGOS Dev
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
|
Цитата:
|
|
03.04.2015, 20:51 | #12 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
это скорее всего какие то нетипичные сценарии. в основном конечно посылается ноль. просто был вопрос про "неизвестное" поле following, я рассказал. это действительно и было открыто/выяснено мной лично в свое время: сначала я анализировал сниффы на предмет, какие значения бывают. затем экспериментировал на сандбоксе, подставляя эти значения и смотрел как ведет себя клиент. по другому не умею.
|
04.04.2015, 02:12 | #13 |
Модератор
|
Это не нетипичные сценарии, этот параметр называется NowDead. 1 шлется в том случае, если атака была остановлена по причине смерти цели. И да, это отвечает за facing нападавшего относительно виктима. Почему uint32 в классике и до каты? Возможно дело не только в команде программистов, на альфе была другая боевая система, возможно здесь предполагалась причина (reason) остановки атаки и делать какие-то действия нападающим в зависимости от переданного значения. Систему переделали, отказались от фичи, а пакет остался.
Последний раз редактировалось MaS0n; 04.04.2015 в 02:17. |
04.04.2015, 02:42 | #14 | |
Ученый
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
|
Цитата:
Все равно дурацкая система выходит, сначала посылается true, а потом еще надо послать false, чтобы клиент перестал смотреть на цель... |
|
04.04.2015, 11:19 | #15 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
во, точно, по причине смерти цели. я стал забывать всё... печально...
спасибо за подробный ответ. да, назавания полей у меня порой самовыдуманные, как и у всех остальных наверное. каким образом узнали название NowDead? были какие то билды с дебаг инфой? |
04.04.2015, 12:16 | #16 | |
Модератор
|
https://www.ownedcore.com/forums/wor...ml#post3159112
TOM_RUS же упоминал, дебаг клиент MacOS x64. Есть и 4.1.0 тоже где-то же в этой теме Этот пакет не менялся, поэтому название параметра в нем с тех далеких времен. PS: Ну и из альфа-дебаг клиента Цитата:
Последний раз редактировалось MaS0n; 04.04.2015 в 12:33. |
|
Пользователь сказал cпасибо: | SeT (21.11.2015) |
04.04.2015, 20:20 | #17 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
ок, спасибо.
у себя я еще не дошел, что бы эти нюансы реализовывать. помню что разбирал, а сделать не сделал еще. |