Ru-MaNGOS

Вернуться   Ru-MaNGOS > Флуд > Флудильня

Важная информация

Флудильня Разговоры на любые темы.

Мы устаем постоянно работать. Иногда надо где-то немного отдохнуть. Пожалуйста, не надо здесь устраивать бардак.

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.12.2010, 14:40   #1
Softer
Пользователь
 
Аватар для Softer
 
Регистрация: 07.03.2010
Сообщений: 35
Сказал(а) спасибо: 7
Поблагодарили 0 раз(а) в 0 сообщениях
Softer На верном пути
Отправить сообщение для Softer с помощью ICQ
По умолчанию Миникарта

Заметил проблему с миникартой:
Карта не обновляет местоположение членов группы.
Но когда кто-то летит с помощью флай мастера, то его путь на карте показывает членам пати.


Я не совсем понимаю: миникарта завязана на сервер или релиазована исключительно в клиенте?
Softer вне форума   Ответить с цитированием
Старый 17.12.2010, 15:14   #2
Vinolentus
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
Vinolentus На верном пути
По умолчанию

Миникарта реализована в клиенте. Местоположение членов группы "завязано на сервер".
Посмотри, когда ставится GROUP_UPDATE_FLAG_POSITION.
Vinolentus вне форума   Ответить с цитированием
Старый 17.12.2010, 15:30   #3
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

На чистом ядре проверял?
zergtmn вне форума   Ответить с цитированием
Старый 17.12.2010, 15:34   #4
Softer
Пользователь
 
Аватар для Softer
 
Регистрация: 07.03.2010
Сообщений: 35
Сказал(а) спасибо: 7
Поблагодарили 0 раз(а) в 0 сообщениях
Softer На верном пути
Отправить сообщение для Softer с помощью ICQ
По умолчанию

Насколько я понял - ставиться норм.
Если член группы рядом - все норм, но дальше какого-то расстояния - по миникарте он замирает на месте.

Как я понял отсылка (или формирование) пакета происходит в этом участке
Код:
709     if (mask & GROUP_UPDATE_FLAG_POSITION)
710         *data << uint16(player->GetPositionX()) << uint16(player->GetPositionY());
Файла GroupHandler.cpp, а реакция на запрос в этом куске
Код:
848     data << uint16(player->GetPositionX());                 // GROUP_UPDATE_FLAG_POSITION                                                                                       
849     data << uint16(player->GetPositionY());                 // GROUP_UPDATE_FLAG_POSITION
Верно?


Цитата:
На чистом ядре проверял?
Чистое, Insider, Rsa одинаково. Клиентов тоже пробовал менять :-D


ADD: Данные куски беру из репозитория Rsa
Softer вне форума   Ответить с цитированием
Старый 17.12.2010, 15:46   #5
Vinolentus
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
Vinolentus На верном пути
По умолчанию

Сказал же, посмотри,
Цитата:
когда ставится
, а не как обрабатывается поставленный.
Вот оно от 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);
Более чем уверен, что m_position... у него выставляется в первой же строчке. И взятые потом old_x, old_y всегда будут равны x, y.

Последний раз редактировалось Vinolentus; 17.12.2010 в 15:58.
Vinolentus вне форума   Ответить с цитированием
Старый 17.12.2010, 15:59   #6
Forgotten
Новичок
 
Регистрация: 07.04.2010
Сообщений: 25
Сказал(а) спасибо: 1
Поблагодарили 2 раз(а) в 2 сообщениях
Forgotten На верном пути
По умолчанию

копипастить внимательно нужно.. Unit::SetPosition возвращает false если юнит не был перемещен, во всех остальных случаях -- true
другими словами, сравнение координат вообще смысла не имеет

Последний раз редактировалось Forgotten; 17.12.2010 в 16:04.
Forgotten вне форума   Ответить с цитированием
Старый 17.12.2010, 16:02   #7
Softer
Пользователь
 
Аватар для Softer
 
Регистрация: 07.03.2010
Сообщений: 35
Сказал(а) спасибо: 7
Поблагодарили 0 раз(а) в 0 сообщениях
Softer На верном пути
Отправить сообщение для Softer с помощью ICQ
По умолчанию

Vinolentus, т.е. ты имеешь ввиду что скачала вызывается Unit::SetPosition изменяя координаты юнита, а потом координаты считываются здесь
Код:
    const float old_x = GetPositionX();
    const float old_y = GetPositionY();
и в итоге всегда old_{x,y} равны {x,y}?
Softer вне форума   Ответить с цитированием
Старый 17.12.2010, 16:08   #8
Vinolentus
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
Vinolentus На верном пути
По умолчанию

Цитата:
копипастить внимательно нужно
Читать код внимательно нужно. Тут даже думать не требуется x_x
Код:
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;
...
}
Vinolentus вне форума   Ответить с цитированием
Старый 17.12.2010, 16:25   #9
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

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.
zergtmn вне форума   Ответить с цитированием
Старый 17.12.2010, 16:31   #10
Forgotten
Новичок
 
Регистрация: 07.04.2010
Сообщений: 25
Сказал(а) спасибо: 1
Поблагодарили 2 раз(а) в 2 сообщениях
Forgotten На верном пути
По умолчанию

Цитата:
Сообщение от Vinolentus Посмотреть сообщение
Читать код внимательно нужно. Тут даже думать не требуется x_x
товарисч Vinolentus, моя реплика относилась к коду rsa, посмотрите оригинальный код trinity
убавьте вашу агрессию
Forgotten вне форума   Ответить с цитированием
Старый 17.12.2010, 16:31   #11
Softer
Пользователь
 
Аватар для Softer
 
Регистрация: 07.03.2010
Сообщений: 35
Сказал(а) спасибо: 7
Поблагодарили 0 раз(а) в 0 сообщениях
Softer На верном пути
Отправить сообщение для Softer с помощью ICQ
По умолчанию

zergtmn, это откуда такой кусок? Или ты просто пропустил часть функции?
В чистом ядре написано почти то-же самое что и у Rsa, за исключением Unit::SetPosition...

Цитата:
товарисч Vinolentus, моя реплика относилась к коду rsa, посмотрите оригинальный код trinity
убавьте вашу агрессию
При чем тут Тринити?
Softer вне форума   Ответить с цитированием
Старый 17.12.2010, 17:04   #12
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

Цитата:
Сообщение от Softer Посмотреть сообщение
zergtmn, это откуда такой кусок? Или ты просто пропустил часть функции?
В чистом ядре написано почти то-же самое что и у Rsa, за исключением Unit::SetPosition...
Часть кода вынесена в Unit::SetPosition, в Player::SetPosition это дублировать не нужно.
zergtmn вне форума   Ответить с цитированием
Старый 17.12.2010, 17:11   #13
Softer
Пользователь
 
Аватар для Softer
 
Регистрация: 07.03.2010
Сообщений: 35
Сказал(а) спасибо: 7
Поблагодарили 0 раз(а) в 0 сообщениях
Softer На верном пути
Отправить сообщение для Softer с помощью ICQ
По умолчанию

Понял, спасибо, буду ковырять
Softer вне форума   Ответить с цитированием
Старый 17.12.2010, 20:00   #14
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Всем спасибо за отыскание проблемы. Подцепленной при тестировании патча на улучшение обработки видимости объектов от Silverice
rsa вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



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


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot