Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Баг-репорты

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

Баг-репорты Описываем проблемы и ошибки работы ядра

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.05.2010, 10:15   #1
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию Скорость полета на такси

Как-то сравнивал скорость полета на такси на мангосе и на офе (по видео) по квестам и пришел к выводу, что скорость разная: на мангосе квестовые маунты летают быстрее.

Наткнулся на этот косяк при попытке реализовать квесты http://ru.wowhead.com/quest=9718 и http://ru.wowhead.com/quest=12028.

По квесту 12028 на игрока вешается баф 47189 продолжительностью 2:40, время полета на такси чуть меньше (на офе), а на мангосе время полета 1:40, т.е. на минуту меньше.
По окончании действия спелла квест должен комплититься, но из-за разности в минуту квест будет работать неправильно.

Спелл 47190 запускает такси 811, у которого во время полета есть 6 эвентов, в каждом из которых прописал определенную фразу, которую нпц должен говорить игроку в личку.

Засекал время в каждой точке со стартом эвента от начала полета на офе и мангосе.
Путем деления соответствующих отрезков времени пришел к выводу, что скорость на мангосе должна быть в 1.6 раза меньше.

В базе нашел нпц по двум указанным квестам, которые выступают в роли маунтов с невидимой моделью.
Код:
17972 - Invisible Mount Speed 30
21396 - Invisible Mount Speed 20
По умолчанию скорость полета такси:
Код:
#define PLAYER_FLIGHT_SPEED        32.0f
По квесту 12028 маунт 21396.
Если принять во внимание, что в названии заложена скорость полета на этом маунте для такси, то найдем коэффициент замедления: 32 / 20 = 1.6, что совпадает с расчетным значением.

Внес изменения в ядро:
Код:
inline float Traveller<Player>::Speed()
{
    if (i_traveller.isInFlight())
    {
        float PlayerFlightSpeed = PLAYER_FLIGHT_SPEED;
        if (!i_traveller.m_taxi.empty()){
            switch (i_traveller.m_taxi.GetCurrentTaxiPath()){
                case 512:                                   // Stormcrow Amulet - spell 31606
                    PlayerFlightSpeed = 30.0f;
                    break;
                case 811:                                   // Toalu'u's Spiritual Incense - spell 47190
                    PlayerFlightSpeed = 20.0f;
                    break;
            }
        }
        return PlayerFlightSpeed;
    }
    else
        return i_traveller.GetSpeed(i_traveller.m_movementInfo.HasMovementFlag(MOVEFLAG_WALK_MODE) ? MOVE_WALK : MOVE_RUN);
}
В итоге игрок по-прежнему пролетает весь маршрут за 1:40, но после приземления вокруг нет нпц, го, игрок фактически сидит на невидимом маунте.
Это продолжается примерно минуту.
Эвенты запускаются, как и положено.

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

1. Возможно, надо послать клиенту какой-нибудь пакет об изменении скорости, например, MSG_MOVE_SET_FLIGHT_SPEED и т.д.?
2. Можно ли менять скорость полета не в Traveller<Player>::Speed(), а в описании эффекта спелла, который накладывается на игрока в начале полета?
3. Кто-нибудь встречал еще такси без маунтов или со скоростью, отличающейся от офа?

4. Есть ли возможность заставить нпц говорить фразу в личку игроку независимо от расстояния, например, по гуиду нпц? В квесте 12028 игрок улетает далеко, поэтому бОльшую часть фраз он говорит сам.
virusav вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Fear (28.10.2010), Vladimir (14.05.2010)
Старый 14.05.2010, 13:24   #2
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Визуальная часть полность контролируется клинетом. Сервер только синхронизирует серверную позицию.

Цитата:
1. Возможно, надо послать клиенту какой-нибудь пакет об изменении скорости, например, MSG_MOVE_SET_FLIGHT_SPEED и т.д.?
Полеты на такси никакого отношения к полетам вообще не имеют.

Возможно скорость должна браться из данных маунта
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Старый 14.05.2010, 13:50   #3
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

То есть именно из-за этого (из-за того, что скорость полета не контролируется сервером) на одном и том же маршруте при различных условиях (например при высоких и низких настройках графики) бывает что дисмаунт происходит до подлета к таксисту и все окружение уже прорисовано, а бывает что по прилете вешает на звере возле таксиста, вокруг все мерцает и не прорисовывается сколько-то времени, а если с этой точки уйти, то по окончании времени полета перс обратно на нее прибегает?




Просто меня иногда при максимальной графике:
Код:
/console groundEffectDensity 256
/console GroundEffectDist 200
/console FarClip 3500
/console HorizonFarClip 6226
/console SmallCull 0
/console DetailDoodadAlpha 100
/console CharacterAmbient 0
/console SkyCloudLod 3
(экран 2560х1024, фуллскрин) в полете (особенно в Нортренде) так вешает, что логаутом выбивает.

А на минимальных:
Код:
/console groundEffectDensity 16
/console GroundEffectDist 1
/console FarClip 177
/console HorizonFarClip 1305
/console SmallCull 1
/console DetailDoodadAlpha 1
/console CharacterAmbient 1
/console SkyCloudLod 1
(экран 640х480, в окне) как истребитель шныряет.
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума   Ответить с цитированием
Старый 14.05.2010, 14:01   #4
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Цитата:
Сообщение от Vladimir Посмотреть сообщение
Визуальная часть полность контролируется клинетом. Сервер только синхронизирует серверную позицию.


Полеты на такси никакого отношения к полетам вообще не имеют.

Возможно скорость должна браться из данных маунта
В базе нет поля для скорости полета для нпц.
Вариант с добавлением поля я вчера предлагал Laise.

Кроме итого, добавление поля случайно не приведет к тому же эффекту?
Ведь скорость будет браться из:
Код:
        return i_traveller.GetSpeed(i_traveller.m_movementInfo.HasMovementFlag(MOVEFLAG_WALK_MODE) ? MOVE_WALK : MOVE_RUN);
только параметр будет другой.

В итоге получим какое-то значение скорости.

После изменения скорости полета для конкретного такси в коде сервер стал отрабатывать правильно, но визуально все работало, как и раньше.
virusav вне форума   Ответить с цитированием
Старый 26.10.2010, 18:09   #5
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Решил снова поднять данную тему.

Нашел 4 маунта, при полете на которых на такси должна меняться скорость полета.
Код:
17972	Invisible Mount Speed 30
18392	Invisible Man Mount 30
21396	Invisible Mount Speed 20
21355	Invisible Man Mount 20
В первом посте указан пример, как можно менять скорость для сервера.

На текущий момент появился механизм изменения скорости полета на такси для клиента?
virusav вне форума   Ответить с цитированием
Старый 26.10.2010, 18:16   #6
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Там скорость от времени зависит вроде, клиент вычисляет ее насколько я помню...
TOM_RUS вне форума   Ответить с цитированием
Старый 26.10.2010, 18:19   #7
SilverIce
MaNGOS Dev
 
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
SilverIce Скоро придёт к известности
По умолчанию

Смотрим в Unit::SendMonsterMoveByPath и видим захардкоденную скорость

почему именно "time = uint32(path.GetTotalLength(start, end) * 32);" я не знаю
считать нужно по time = length / speed * 1000
но, со скорость 32 работает и старая формула, т.к.
(length / 32) * 1000 равно length * 31,25

т.е. скорее всего сервер задает как скорость, так и все точки полета
не тестировал, но уверен

достаточно добавить еще 1 параметр в SendMonsterMoveByPath и скорость можно будет менять

Последний раз редактировалось SilverIce; 26.10.2010 в 18:29.
SilverIce вне форума   Ответить с цитированием
Старый 26.10.2010, 18:25   #8
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Править будете?

Точки полета забиты в дбц.
Если скорость полета для клиента и сервера будет считаться одинаково, то уже можно будет править скорость для данных маунтов.
virusav вне форума   Ответить с цитированием
Старый 26.10.2010, 18:41   #9
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Я ж не против.

Если можно будет с помощью одного параметра регулировать скорость полета на такси, то это будет замечательно.

Для одного и того же такси могут быть использованы 2 разных маунта из указанного выше списка.
В первой точке указан один, а в последней - другой, правда, скорость у них одинаковая.

Это будет работать с дополнительным параметром?
virusav вне форума   Ответить с цитированием
Старый 26.10.2010, 18:43   #10
SilverIce
MaNGOS Dev
 
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
SilverIce Скоро придёт к известности
По умолчанию

не очень хотелось бы хардкодить в Traveller<Player>::Speed, хотя таблица с 2 записями это тоже смешно..
будет, ведь дополнительный параметр это есть скорость

Цитата:
Сообщение от virusav Посмотреть сообщение
В базе нет поля для скорости полета для нпц.
Вариант с добавлением поля я вчера предлагал Laise.
возможно speed_template, т.к. не думаю что все существа должны иметь абсолютно разные скорости

Последний раз редактировалось SilverIce; 26.10.2010 в 18:55.
SilverIce вне форума   Ответить с цитированием
Старый 26.10.2010, 18:53   #11
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Скорость у этих мантов точно должна быть своя, сравнивал с офом с секундомером.
Выходит, что именно в Traveller и придется делать реализацию скорости.

Только правильнее будет писать для указанных маунтов, т.к. они используются в разных такси, или для такси, использующих этих маунтов?
virusav вне форума   Ответить с цитированием
Старый 26.10.2010, 19:05   #12
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Цитата:
Сообщение от SilverIce Посмотреть сообщение
возможно speed_template, т.к. не думаю что все существа должны иметь абсолютно разные скорости
Проверял квест с полетом на такси с видимым маунтом и сравнивал по видео с офом - общее время полета разное.

Получается, что либо создавать таблицу, либо писать правку в ядре, либо добавлять поле в `creature_template`, например, `speed_taxi`.
virusav вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SCRIPT_COMMAND_QUEST_EXPLORED для эвентов такси virusav Принятые патчи 0 05.05.2010 21:04


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


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