Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Опкоды, Формулы, Клиент (http://mangos.ytdb.ru/forumdisplay.php?f=9)
-   -   SMSG_DISMOUNT (http://mangos.ytdb.ru/showthread.php?t=8030)

SeT 07.05.2014 18:18

SMSG_DISMOUNT
 
Кто-нибудь имеет информацию о нем?
Смущает, что сейчас (3.3.5) в мангосе или тринити посылают его всем вокруг, каждый раз при дисмаунте, что провоцирует баги с моделью персонажа - ее "диаметр" (если выделить) для других игроков остаётся такой же как и с маунтом. Если просто менять mountdisplay на 0, без отправки опкода, то все в порядке.

Обработчик в иде (с 5.0.5, но думаю разница с 3.3.5 не большая).

Может его следует посылать только в определённых случаях?

Lordronn 07.05.2014 20:13

А SMSG_MOVE_SET_COLLISION_HEIGHT отправляется? помоему в нем дело, а то лишь для анимации dismount-а всем вокруг

Amaru 07.05.2014 21:28

Цитата:

Сообщение от Lordronn (Сообщение 32817)
А SMSG_MOVE_SET_COLLISION_HEIGHT отправляется? помоему в нем дело, а то лишь для анимации dismount-а всем вокруг

+
оно отвечает за коллизии, в мангосе это не реализовано

SeT 07.05.2014 21:48

Цитата:

Сообщение от Amaru (Сообщение 32819)
+
оно отвечает за коллизии, в мангосе это не реализовано

В тринити такое реализовано и отправляется до SMSG_DISMOUNT:
Код:

        WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4);
        data.appendPackGUID(GetGUID());
        data << uint32(sWorld->GetGameTime());  // Packet counter
        data << thisPlayer->GetCollisionHeight(false);
        thisPlayer->GetSession()->SendPacket(&data);

Высота без маунта берётся из modelData->CollisionHeight, но насколько я заметил, другие числа эффекта тоже не дают.

Даже если реализовать ответ сервера, на CMSG_MOVE_SET_COLLISION_HGT_ACK, который приходит следом, то это тоже ничего не меняет =(

Ещё, если после дисмаунта поменять размер игрока хоть на 0.1, то его "диаметр" восстанавливается.

MaS0n 08.05.2014 00:20

Попробуйте дизмаунтнутся через lua-команду, будет ли баг?

Вызывается функция CGUnit:: Dismount, обработчик 3.3.5.12340

http://paste2.org/hp3AF2yJ

Почти же самый код (за исключением отправки пакета 0x375 (CMSG_CANCEL_MOUNT_AURA)) в хандлере пакета SMSG_DISMOUNT
Обработчик 3.3.5.12340

http://paste2.org/08gjk6ed

SeT 08.05.2014 00:53

Цитата:

Сообщение от MaS0n (Сообщение 32825)
Попробуйте дизмаунтнутся через lua-команду, будет ли баг?

Вызывается функция CGUnit:: Dismount, обработчик 3.3.5.12340

http://paste2.org/hp3AF2yJ

Почти же самый код (за исключением отправки пакета 0x375 (CMSG_CANCEL_MOUNT_AURA)) в хандлере пакета SMSG_DISMOUNT
Обработчик 3.3.5.12340

http://paste2.org/08gjk6ed

Баг остаётся, после /dismount клиент у себя снимает маунта (для остальных игроков игрок ещё будет на маунте) и отправляет опкод на сервер, где уже сервер снимает ауру маунта с игрока и дальше все происходит стандартно, с отправкой всех пакетов (SMSG_MOVE_SET_COLLISION_HGT, SMSG_DISMOUNT, ...) , изменением mountdisplay и т.д.

RomanRom2 11.05.2014 23:42

чото вы поперепутали божий дар с яичницей и намешали все в кучу как всегда...

дисмаунт транспортного средства (лошадь) - через поле UNIT_FIELD_MOUNTDISPLAYID.
SMSG_DISMOUNT - для вехиклов. нужно показывать дестрой объекта.
CMSG_CANCEL_MOUNT_AURA - вообще из другой оперы. используется, к примеру, для отмены зафейленного спелла, в котором есть несколько эффектов, один из которых маунт, а другой собственно зафейлился. ну и в ряде других случаев конечно же.

SeT 12.05.2014 14:53

Цитата:

Сообщение от RomanRom2 (Сообщение 32833)
чото вы поперепутали божий дар с яичницей и намешали все в кучу как всегда...

дисмаунт транспортного средства (лошадь) - через поле UNIT_FIELD_MOUNTDISPLAYID.
SMSG_DISMOUNT - для вехиклов. нужно показывать дестрой объекта.
CMSG_CANCEL_MOUNT_AURA - вообще из другой оперы. используется, к примеру, для отмены зафейленного спелла, в котором есть несколько эффектов, один из которых маунт, а другой собственно зафейлился. ну и в ряде других случаев конечно же.

Спасибо RomanRom2 за разъяснения. Мы лишь пытаемся разобраться с последствиями того, что уже сделано до нас =)

hint: Ответ на клиентский CMSG_MOVE_SET_COLLISION_HGT_ACK можно не реализовать, практической пользы от него не замечено, а анимация игроков (от кого пришел опкод), после его получения, становится "дёрганой".

RomanRom2 12.05.2014 22:51

да не за что :yes3:
Цитата:

Сообщение от SeT (Сообщение 32835)
становится "дёрганой".

это лишь потому, что неправильно реализована синхронизация объектов. точнее, вообще никак не реализована =)))


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

ru-mangos.ru - Русское сообщество MaNGOS