Скорость полета на такси
Как-то сравнивал скорость полета на такси на мангосе и на офе (по видео) по квестам и пришел к выводу, что скорость разная: на мангосе квестовые маунты летают быстрее.
Наткнулся на этот косяк при попытке реализовать квесты 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 Код:
#define PLAYER_FLIGHT_SPEED 32.0f Если принять во внимание, что в названии заложена скорость полета на этом маунте для такси, то найдем коэффициент замедления: 32 / 20 = 1.6, что совпадает с расчетным значением. Внес изменения в ядро: Код:
inline float Traveller<Player>::Speed() Это продолжается примерно минуту. Эвенты запускаются, как и положено. Получается, что меняется реальный полет игрока, а визуальное отображение осталось прежним. 1. Возможно, надо послать клиенту какой-нибудь пакет об изменении скорости, например, MSG_MOVE_SET_FLIGHT_SPEED и т.д.? 2. Можно ли менять скорость полета не в Traveller<Player>::Speed(), а в описании эффекта спелла, который накладывается на игрока в начале полета? 3. Кто-нибудь встречал еще такси без маунтов или со скоростью, отличающейся от офа? 4. Есть ли возможность заставить нпц говорить фразу в личку игроку независимо от расстояния, например, по гуиду нпц? В квесте 12028 игрок улетает далеко, поэтому бОльшую часть фраз он говорит сам. |
Визуальная часть полность контролируется клинетом. Сервер только синхронизирует серверную позицию.
Цитата:
Возможно скорость должна браться из данных маунта |
То есть именно из-за этого (из-за того, что скорость полета не контролируется сервером) на одном и том же маршруте при различных условиях (например при высоких и низких настройках графики) бывает что дисмаунт происходит до подлета к таксисту и все окружение уже прорисовано, а бывает что по прилете вешает на звере возле таксиста, вокруг все мерцает и не прорисовывается сколько-то времени, а если с этой точки уйти, то по окончании времени полета перс обратно на нее прибегает?
Просто меня иногда при максимальной графике: Код:
/console groundEffectDensity 256 А на минимальных: Код:
/console groundEffectDensity 16 |
Цитата:
Вариант с добавлением поля я вчера предлагал Laise.:) Кроме итого, добавление поля случайно не приведет к тому же эффекту? Ведь скорость будет браться из: Код:
return i_traveller.GetSpeed(i_traveller.m_movementInfo.HasMovementFlag(MOVEFLAG_WALK_MODE) ? MOVE_WALK : MOVE_RUN); В итоге получим какое-то значение скорости. После изменения скорости полета для конкретного такси в коде сервер стал отрабатывать правильно, но визуально все работало, как и раньше. |
Решил снова поднять данную тему.
Нашел 4 маунта, при полете на которых на такси должна меняться скорость полета. Код:
17972 Invisible Mount Speed 30 На текущий момент появился механизм изменения скорости полета на такси для клиента? |
Там скорость от времени зависит вроде, клиент вычисляет ее насколько я помню...
|
Смотрим в Unit::SendMonsterMoveByPath и видим захардкоденную скорость
почему именно "time = uint32(path.GetTotalLength(start, end) * 32);" я не знаю считать нужно по time = length / speed * 1000 но, со скорость 32 работает и старая формула, т.к. (length / 32) * 1000 равно length * 31,25 т.е. скорее всего сервер задает как скорость, так и все точки полета не тестировал, но уверен достаточно добавить еще 1 параметр в SendMonsterMoveByPath и скорость можно будет менять |
Править будете?
Точки полета забиты в дбц. Если скорость полета для клиента и сервера будет считаться одинаково, то уже можно будет править скорость для данных маунтов. |
Я ж не против.:)
Если можно будет с помощью одного параметра регулировать скорость полета на такси, то это будет замечательно. Для одного и того же такси могут быть использованы 2 разных маунта из указанного выше списка. В первой точке указан один, а в последней - другой, правда, скорость у них одинаковая. Это будет работать с дополнительным параметром? |
не очень хотелось бы хардкодить в Traveller<Player>::Speed, хотя таблица с 2 записями это тоже смешно..
будет, ведь дополнительный параметр это есть скорость :) Цитата:
|
Скорость у этих мантов точно должна быть своя, сравнивал с офом с секундомером.:)
Выходит, что именно в Traveller и придется делать реализацию скорости. Только правильнее будет писать для указанных маунтов, т.к. они используются в разных такси, или для такси, использующих этих маунтов? |
Цитата:
Получается, что либо создавать таблицу, либо писать правку в ядре, либо добавлять поле в `creature_template`, например, `speed_taxi`. |
Текущее время: 07:17. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS