|
Флудильня Разговоры на любые темы. Мы устаем постоянно работать. Иногда надо где-то немного отдохнуть. Пожалуйста, не надо здесь устраивать бардак. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
17.12.2010, 14:40 | #1 |
Пользователь
|
Миникарта
Заметил проблему с миникартой:
Карта не обновляет местоположение членов группы. Но когда кто-то летит с помощью флай мастера, то его путь на карте показывает членам пати. Я не совсем понимаю: миникарта завязана на сервер или релиазована исключительно в клиенте? |
17.12.2010, 15:14 | #2 |
Пользователь
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
|
Миникарта реализована в клиенте. Местоположение членов группы "завязано на сервер".
Посмотри, когда ставится GROUP_UPDATE_FLAG_POSITION. |
17.12.2010, 15:30 | #3 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
На чистом ядре проверял?
|
17.12.2010, 15:34 | #4 | |
Пользователь
|
Насколько я понял - ставиться норм.
Если член группы рядом - все норм, но дальше какого-то расстояния - по миникарте он замирает на месте. Как я понял отсылка (или формирование) пакета происходит в этом участке Код:
709 if (mask & GROUP_UPDATE_FLAG_POSITION) 710 *data << uint16(player->GetPositionX()) << uint16(player->GetPositionY()); Код:
848 data << uint16(player->GetPositionX()); // GROUP_UPDATE_FLAG_POSITION 849 data << uint16(player->GetPositionY()); // GROUP_UPDATE_FLAG_POSITION Цитата:
ADD: Данные куски беру из репозитория Rsa |
|
17.12.2010, 15:46 | #5 | |
Пользователь
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
|
Сказал же, посмотри,
Цитата:
Вот оно от rsa: Код:
bool Player::SetPosition(float x, float y, float z, float orientation, bool teleport) { if(!Unit::SetPosition(x, y, z, orientation, teleport)) return false; ... const float old_x = GetPositionX(); const float old_y = GetPositionY(); ... // group update if (GetGroup() && (old_x != x || old_y != y)) SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION); Последний раз редактировалось Vinolentus; 17.12.2010 в 15:58. |
|
17.12.2010, 15:59 | #6 |
Новичок
Регистрация: 07.04.2010
Сообщений: 25
Сказал(а) спасибо: 1
Поблагодарили 2 раз(а) в 2 сообщениях
|
копипастить внимательно нужно.. Unit::SetPosition возвращает false если юнит не был перемещен, во всех остальных случаях -- true
другими словами, сравнение координат вообще смысла не имеет Последний раз редактировалось Forgotten; 17.12.2010 в 16:04. |
17.12.2010, 16:02 | #7 |
Пользователь
|
Vinolentus, т.е. ты имеешь ввиду что скачала вызывается Unit::SetPosition изменяя координаты юнита, а потом координаты считываются здесь
Код:
const float old_x = GetPositionX(); const float old_y = GetPositionY(); |
17.12.2010, 16:08 | #8 | |
Пользователь
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
|
Цитата:
Код:
bool Unit::SetPosition(float x, float y, float z, float orientation, bool teleport) { ... if (GetTypeId() == TYPEID_PLAYER) GetMap()->PlayerRelocation((Player*)this, x, y, z, orientation); ... } void Map::PlayerRelocation(Player *player, float x, float y, float z, float orientation) { ... player->Relocate(x, y, z, orientation); ... } void WorldObject::Relocate(float x, float y, float z, float orientation) { m_positionX = x; m_positionY = y; m_positionZ = z; m_orientation = orientation; ... } |
|
17.12.2010, 16:25 | #9 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
rsa криво сделал мердж.
Должно быть Код:
bool Player::SetPosition(float x, float y, float z, float orientation, bool teleport) { if (!Unit::SetPosition(x, y, z, orientation, teleport)) return false; // group update if (GetGroup()) SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION); if (GetTrader() && !IsWithinDistInMap(GetTrader(), INTERACTION_DISTANCE)) GetSession()->SendCancelTrade(); // will close both side trade windows // code block for underwater state update UpdateUnderwaterState(GetMap(), x, y, z); CheckAreaExploreAndOutdoor(); return true; } Последний раз редактировалось zergtmn; 17.12.2010 в 16:27. |
17.12.2010, 16:31 | #10 |
Новичок
Регистрация: 07.04.2010
Сообщений: 25
Сказал(а) спасибо: 1
Поблагодарили 2 раз(а) в 2 сообщениях
|
|
17.12.2010, 16:31 | #11 | |
Пользователь
|
zergtmn, это откуда такой кусок? Или ты просто пропустил часть функции?
В чистом ядре написано почти то-же самое что и у Rsa, за исключением Unit::SetPosition... Цитата:
|
|
17.12.2010, 17:04 | #12 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
|
17.12.2010, 17:11 | #13 |
Пользователь
|
Понял, спасибо, буду ковырять
|
17.12.2010, 20:00 | #14 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Всем спасибо за отыскание проблемы. Подцепленной при тестировании патча на улучшение обработки видимости объектов от Silverice
|