[FIX] SMSG_ATTACKSTOP
Стало интересно, что же это за неизвестные 4 байта. Копая снифф я заметил, что значение колеблется в зависимости от типа таргета(victim - а) Если victim == player - 1, а если unit или pet - 0
Код:
--- /src/game/Unit.cpp Thu Feb 24 12:31:30 2011 |
Почему 4 байта, а не 1? В некоторых других пакетах bool передается в 1 байте.
|
Также в некоторых пакетах почему-то булл идет в 4 байта. В коде мангоса и тринити отправляются 4 байта, в парсере своем тоже читаю 4 байта и все нормально - не крашит.
|
Предположение не верно.
Код:
S->C: SMSG_ATTACKSTOP (0x144), Size: 20, Timestamp: 2010-09-17 07:29:06 |
Код:
Attacker: GUID (High: Unit Entry: 48029, Counter: 986876) Код:
Attacker: GUID (High: Player Entry: 0, Counter: 47358415) Код:
Attacker: GUID (High: Unit Entry: 48029, Counter: 987159) Код:
Attacker: GUID (High: Unit Entry: 48267, Counter: 983783) |
Судя по коду в клиенте, этот параметр как-то влияет на позицию/ориентацию юнитов относительно друг друга, если ида все правильно декомпилировала, то значения могут быть только 0 или 1.
|
Если установить 1 то моб будет стараться "смотреть" в сторону цели, даже если цель убита.
На оффе используется довольно часто, но смысл и как это можно использовать (особенно когда цель игрок) понять не могу. |
Может, установка параметра в 1 решит проблему https://github.com/cmangos/issues/issues/590 ?
Там как раз нпц не хватает ориентации на игрока при наложении на него ауры. |
раз уж мы некропостим, то у меня вот так:
Код:
function msgBuild(var Buf: TBuffer; var m: T_SMSG_ATTACKSTOP): longint; overload; вообще булеан у близзов мнооооого где передается в виде инта, а мнооооого где в виде байта. это нормально. просто одну фичу делала одна команда программистов (которая не экономит трафик), другую - другая (которая экономит). |
Цитата:
Цитата:
|
Цитата:
|
это скорее всего какие то нетипичные сценарии. в основном конечно посылается ноль. просто был вопрос про "неизвестное" поле following, я рассказал. это действительно и было открыто/выяснено мной лично в свое время: сначала я анализировал сниффы на предмет, какие значения бывают. затем экспериментировал на сандбоксе, подставляя эти значения и смотрел как ведет себя клиент. по другому не умею.
|
Это не нетипичные сценарии, этот параметр называется NowDead. 1 шлется в том случае, если атака была остановлена по причине смерти цели. И да, это отвечает за facing нападавшего относительно виктима. Почему uint32 в классике и до каты? Возможно дело не только в команде программистов, на альфе была другая боевая система, возможно здесь предполагалась причина (reason) остановки атаки и делать какие-то действия нападающим в зависимости от переданного значения. Систему переделали, отказались от фичи, а пакет остался.
|
Цитата:
Все равно дурацкая система выходит, сначала посылается true, а потом еще надо послать false, чтобы клиент перестал смотреть на цель... |
во, точно, по причине смерти цели. я стал забывать всё... печально...
спасибо за подробный ответ. да, назавания полей у меня порой самовыдуманные, как и у всех остальных наверное. каким образом узнали название NowDead? были какие то билды с дебаг инфой? |
https://www.ownedcore.com/forums/wor...ml#post3159112
TOM_RUS же упоминал, дебаг клиент MacOS x64. Есть и 4.1.0 тоже где-то же в этой теме Этот пакет не менялся, поэтому название параметра в нем с тех далеких времен. PS: Ну и из альфа-дебаг клиента Цитата:
|
ок, спасибо.
у себя я еще не дошел, что бы эти нюансы реализовывать. помню что разбирал, а сделать не сделал еще. |
Текущее время: 20:31. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS