PDA

Просмотр полной версии : SMSG_DISMOUNT


SeT
07.05.2014, 18:18
Кто-нибудь имеет информацию о нем?
Смущает, что сейчас (3.3.5) в мангосе (http://ru-mangos.ru/showthread.php?t=3381) или тринити посылают его всем вокруг, каждый раз при дисмаунте, что провоцирует баги с моделью персонажа - ее "диаметр" (если выделить) для других игроков остаётся такой же как и с маунтом. Если просто менять mountdisplay на 0, без отправки опкода, то все в порядке.

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

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

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

Amaru
07.05.2014, 21:28
А SMSG_MOVE_SET_COLLISION_HEIGHT отправляется? помоему в нем дело, а то лишь для анимации dismount-а всем вокруг
+
оно отвечает за коллизии, в мангосе это не реализовано

SeT
07.05.2014, 21:48
+
оно отвечает за коллизии, в мангосе это не реализовано

В тринити такое реализовано и отправляется до 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, но насколько я заметил, другие числа эффекта тоже не дают.

Даже если реализовать ответ (http://paste2.org/29EXMend) сервера, на 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
Попробуйте дизмаунтнутся через 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
чото вы поперепутали божий дар с яичницей и намешали все в кучу как всегда...

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

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

RomanRom2
12.05.2014, 22:51
да не за что :yes3:
становится "дёрганой".
это лишь потому, что неправильно реализована синхронизация объектов. точнее, вообще никак не реализована =)))