Jump to content

spell batching / обработка заклинаний


Recommended Posts

1. Какой у нас батчинг?

 

2. Он у нас одинаковый для контроля/интерраптов/остальных способностей? Можно конкретные значения, если разный?

 

3. Он у нас близзлайк?

 

(https://www.wowhead.com/bluetracker?topic=13087818929#131814318748)

 

Any action that one unit takes on another different unit used to be processed in batches every 400ms. Some very attentive people may have noticed that healing yourself would give you the health instantly (minus client/server latency), whereas healing another unit would incur a delay of between 0ms and 400ms (again, on top of client/server latency). Same with damaging, applying auras, interrupting, knocking back, etc.

 

Basically the server used to process commands in 400ms batches.

The system caches all spell usage at 400ms intervals meaning if you interrupt something depending on the timing of the cycle the system is on

it can between 1-400ms before the interrupt is "going off".

 

Рабочий адрес на сорс на архиве от 19 июня 2014 года - (https://web.archive.org/web/20140619092137/us.battle.net/wow/en/forum/topic/13087818929?page=6#114)

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

Что значит, что до дренора это обрабатывалось именно батчингом и есть конкретные значения.

 

Пост отсылается на изменения с дренора - (https://us.battle.net/forums/en/wow/topic/13483768319#post-1)

Пост отсылается на изменения с дренора - (https://us.battle.net/forums/en/wow/topic/13508001011#post-2)

Пост отсылается на изменение с дренора - (https://eu.battle.net/forums/ru/wow/topic/11324393566#post-15)

Пост отсылается на изменение с дренора - (https://us.battle.net/forums/en/wow/topic/14928732879#post-9)

Пост отсылается на изменения с дренора - (https://us.battle.net/forums/en/wow/topic/13204380306#post-5)

Пост отсылается на изменение на бете дренора - (https://us.battle.net/forums/en/wow/topic/13661796233#post-8)

 

+ (https://github.com/magey/classic-warrior/wiki/Spell-batching)

Edited by Ink_Forever
  • Like 1
Link to comment
Какой у нас батчинг

Личный вопрос. Я понимаю как Batching работает в рамках движка Unity но не совсем понимаю как работает это в рамках движка WoW/ Коде сервера

Можешь объяснить если не сложно?

И да,гугля мне находит только про батчинг в юнити https://www.google.com.ua/search?q=%D0%B1%D0%B0%D1%82%D1%87%D0%B8%D0%BD%D0%B3&oq=%D0%B1%D0%B0%D1%82%D1%87%D0%B8%D0%BD%D0%B3&aqs=chrome..69i57j0l4.2062j0j1&sourceid=chrome&ie=UTF-8 а на Английском такую сложную тех. информацию не просто переварить

 

Ну очевидно что я понял что этот батчинг связан с серверной частью

И я понял что это момент когда заклинание можно применить одновременно с чужим

Не раз такое было что ты отдаёшь рефлект в смерч а он не срабатывает и возможно это и есть batching

Надеюсь я правильно понял?

Edited by Saccna
Link to comment
И я понял что это момент когда заклинание можно применить одновременно с чужим

Батчинг - тактовая обработка заклинаний, направленных на другого юнита (игрока, НПС).

По умолчанию сервер отправляет пакеты данных о наложенных на другого юнита эффектах раз в 400 мс (+ задержка клиента и задержка сервера), что позволяет игрокам одновременно накладывать друг на друга эффекты, которые фактически не были применены одновременно.

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

 

Гаудж в блинк/дабл чардж/сап/чипшот/блайнд/овца/фир/скаттер и всё остальное - это результат батчинга.

Но это может происходить и без него, если игрокам просто повезло нажать кнопки с задержкой 50-100 мс,

смотря какое настроение у сервера и провайдера.

Если про интеррапты, то я не должен получать кик в 0.05, потому что кик, как направленный на другого юнита спелл, должен проходить батчинг и иметь задержку сверху от 1 до 400 мс, что должно позволять мне хотя бы отфейкать его по /роллу 1-400, что я пока что физически не всегда могу.

Edited by Ink_Forever
Link to comment
  • Developers
1. Какой у нас батчинг?

Глобально - каждые 100 мс (это минимальное значение, может увеличиваться в зависимости от серверной задержки).

2. Он у нас одинаковый для контроля/интерраптов/остальных способностей? Можно конкретные значения' date=' если разный?[/quote']

У нас есть кастомные задержки например для откидывания (+300 мс) или для контролей (+100 мс), но это не совсем то.

Вот сами пакеты от клиента вроде обрабатываются каждые 100 мс, если не ошибаюсь.

Он у нас близзлайк?

Нет.

Если про интеррапты' date=' то я не должен получать кик в 0.05, потому что кик, как направленный на другого юнита спелл, должен проходить батчинг и иметь задержку сверху от 1 до 400 мс[/quote']

Интеррапты вроде как должны обрабатываться инстантно, судя по мувикам с офа. Иначе получалось бы так, что кик в 0.4-0.5 сек (с учетом пинга) мог не прервать каст.

  • Like 2
Link to comment

За инфу спасибо)

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

Есть обсуждения после применения на вармейне (http://forum.warmane.com/showthread.php?t=352159) и видел на циркле, но не нашел сейчас.

Есть вариант спросить у коллег с циркла, как они с этим поступали и пошли ли на поводу у игроков, которым это не очень понравилось.

Повысить до 200 - это уже увеличить в 2 раза с текущим, но все ещё оставить в 2 раза ниже, чем "должно быть".

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

Link to comment
  • Developers
Повысить до 200 - это уже увеличить в 2 раза с текущим, но все ещё оставить в 2 раза ниже, чем "должно быть".

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

Глобальный батчинг менять плохая идея. Т.к. у нас с ним связано абсолютно все, обновление спеллов, игроков, нпц, петов, обработка пакетов, снятие аур, разные таймеры и т.д.

Можно просто сделать задержку всем спеллам с наложением ауры, дамагом, хилом и т.д., 200 мс например, это быстро и не потребует каких-то больших изменений в коде, т.к. нужный функционал уже есть.

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

Link to comment
Но нужно ли это делать? Близзы сами от этого избавились.

Если подумать, то близы каждый патч от чего-то избавляются.

Можно просто сделать задержку всем спеллам с наложением ауры' date=' дамагом, хилом и т.д., 200 мс например.[/quote']

Насколько это идентично батчингу?

 

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

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

 

Если добавить простую задержку в наложении, то 2 разных эффекта смогут накладываться, но 1) не одновременно (т.е. оба игрока выйдут из контроля с той же разницей, что и были наложены, а это может наоборот играть на руку одному и помешать другому) и 2) один из игроков был не в состоянии применить свой контроль на тот момент, когда его применил противник, но во время задержки получил эту возможность. Например вар дал чардж роге с 20 метров, только подлетел и получает гаудж в чардж, потому что стан наложиться ещё не успел.

Ну если все же хотите посмотреть' date=' как это будет работать примерно, то могу сделать фикс для тестов на птре.[/quote']

Посмотреть можно, только к чему это будет? Кому-то нужно моё мнение?

Глобальный батчинг менять плохая идея. Т.к. у нас с ним связано абсолютно все' date=' обновление спеллов, игроков, нпц, петов, обработка пакетов,[b'] снятие аур[/b], разные таймеры и т.д.

У нас невозможно держать в овце сразу 2 таргета :D а я хочу делать так же.

https://youtu.be/UpQ84K-ScXo?t=598

Простой задержкой наложения это не решается. Или кто-то хочет добавить ещё и задержку снятия?

 

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

Link to comment
  • Developers
Суть батчинга для пвп в том' date=' чтобы 2 разных эффекта накладывались одновременно, если фактически были применены с разницей.[/quote']

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

нас невозможно держать в овце сразу 2 таргета а я хочу делать так же.

https://youtu.be/UpQ84K-ScXo?t=598

Простой задержкой наложения это не решается. Или кто-то хочет добавить ещё и задержку снятия?

Если это близзлайк было, то почему нет.

Я конечно могу сделать репорт и попросить кастомной задержки для овцы' date=' но дело не в овце наверняка.[/quote']

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

Link to comment
Может только в ней

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

Я думаю это не проблема' date=' сделать глобальный таймер например от 0 до 200 мс[/quote']

Я думал, что речь о фиксированной задержке в 200мс. Если она плавающая, то это может сгладить некоторые вещи.

Я бы посмотрел на птре, если вы так и сделаете)

Link to comment
  • Developers

Все готово, утром после рестарта птра сможете глянуть, как оно работает. Сделал таймер 0 - 400 мс, т.к. с 0 - 200 мс думаю не очень большая разница, а так легче какие-то проблемы будет обнаружить.

Реализовано пока для спеллов с дамагом, хилом или наложением аур, которые юзаются на другие цели. Для аоешек пока не будет работать, ну и некоторых отдельных спеллов возможно тоже.

  • Like 2
Link to comment

1. Вы добавляли сверху кастомной задержки на некоторые спеллы/категории ещё 0-400 или выставили всем перечисленным 0-400?

 

Если добавлять всем 0-400, то есть смысл попросту убрать все кастомные задержки.

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

Т.е. чтобы задержка откидывания была 300мс + (0-100) мс, а не 300 + (0-400) мс, потому что если сверху наложить пинг, то может получиться совсем плохо.

 

2. Само наложение эффекта и расчет попадания/урона и прочего происходит вместе после суммарной задержки?

Или всё рассчитывается ещё до задержки и просто накладывается после суммарной задержки?

 

Если всё рассчитывается после задержки, то наконец можно будет с наибольшей вероятностью успевать реагировать на летящие спеллы противника, потому что использование игроком спеллов на себя происходит мгновенно.

Например вары смогут чаще рефлектить спеллы, которые уже были выпущены, тоже с хантами, магами, рогами и пр.

Если все рассчитывается до задержки, то это наоборот может привести к тому, что вар с рефлектом/хант с детером будет стоять в дипе.

 

Сейчас 0-400 выглядит здорово, по сути добавили флайтайм.

У особых способностей питомцев тоже добавился, фриз пета с задержкой как в старых мувиках, чувствуется офигенно)

У способностей суммонов (копии мага, мб бесы варлока и т.п.) вроде нет, но они вроде как неподконтрольные, так что неизвестно, нужен ли он им. Т.е. игрок не может накладывать на другого юнита их спеллы.

Они просто как левые нпс типо монстров, которые делают свои дела не спрашивая игрока. Теории)

Роги должны быть в восторге, можно наверняка ловить в кош и ваниш дип магов, давать блайнд и шс в чардж.

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

Ждём на лайве, если тестеры не найдут чего кривого.

+ качество ПвП + премия девелепелопроперу, который не прошел мимо)

Edited by Ink_Forever
Link to comment
  • Developers
1. Вы добавляли сверху кастомной задержки на некоторые спеллы/категории ещё 0-400 или выставили всем перечисленным 0-400?

Всем 0-400, но у отдельных спеллов возможны доп. задержки кастомные, я позже посмотрю.

Если добавлять всем 0-400, то есть смысл попросту убрать все кастомные задержки.

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

Т.е. чтобы задержка откидывания была 300мс + (0-100) мс, а не 300 + (0-400) мс, потому что если сверху наложить пинг, то может получиться совсем плохо.

Да, лишнее уберу.

2. Само наложение эффекта и расчет попадания/урона и прочего происходит вместе после суммарной задержки?

Или всё рассчитывается ещё до задержки и просто накладывается после суммарной задержки?

Все рассчитывается в момент каста спелла (проверка лоса, дистанции, расчет урона/хила и т.д.). Т.е. сама задержка реализована сейчас по принципу флайтайма.

Если все рассчитывается до задержки' date=' то это наоборот может привести к тому, что вар с рефлектом/хант с детером будет стоять в дипе.[/quote']

Это кстате близзлайк вроде. Где то видел мувик с 5.4, вар прожал в конец каста циклона рефлект. В итоге, он стоял в циклоне и рефлект остался. Может найду этот мувик.

У особых способностей питомцев тоже добавился, фриз пета с задержкой как в старых мувиках, чувствуется офигенно)

У способностей суммонов (копии мага, мб бесы варлока и т.п.) вроде нет, но они вроде как неподконтрольные, так что неизвестно, нужен ли он им. Т.е. игрок не может накладывать на другого юнита их спеллы.

Да, верно. Сейчас работает только для игроков/петов, для разных гвардов и других нпц нет.

Ждём на лайве' date=' если тестеры не найдут чего кривого.[/quote']

Обновление лайва думаю еще не скоро будет, т.к. сейчас на птре тестируются новые серверные карты, поиск пути в мире и фазирование. А там пока проблем хватает.

Link to comment
Это кстате близзлайк вроде. Где то видел мувик с 5.4' date=' вар прожал в конец каста циклона рефлект. В итоге, он стоял в циклоне и рефлект остался. Может найду этот мувик.[/quote']

Да, это близзлайк, но я хотел сказать, что это может начать происходить гораздо чаще.

Все рассчитывается в момент каста спелла (проверка лоса' date=' дистанции, расчет урона/хила и т.д.). Т.е. сама задержка реализована сейчас по принципу флайтайма.[/quote']

not great not terrible, там уж одно из двух и у каждого свои плюсы и минусы.

Обновление лайва думаю еще не скоро будет

Но мы будем ждать, сенк)

 

Вопросов больше нет.

Link to comment
  • Developers

Убрал для откидывания эти 0 - 400 мс, оставил только старые 300 мс (нужно 300 мс минимум для корректного откидывания игроков, которые находятся в полете при юзе героик липа например).

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

Link to comment
  • 1 month later...
  • Developers
Сколько до добавления в миры?

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

новые серверные карты, поиск пути в мире и фазирование

ведь уже добавлены?

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

Link to comment
  • 3 months later...
Безгрешный ап в связи с уходом с первой страницы.

Не теряю надежды застать обнову хотя бы на фреше.

 

Добавлю немного некропостинга:

 

Батчинг переделали в что-то иное еще в препатче катаклизма, убрав зависимость абсолютно всех и добавив её только к критическим эвентам: пвп эвенты (наложение и взаимодействия контроля с входящим уроном), мувмент персонажей(ливей) и т.п(все инстансы перечислить не могу ибо не знаю сам код, только его проявления в игре)

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

В патчнотах это не сразу упоминали т.к были ещё проблемы с этим узлом, которые пофиксили, по большей части, к дренору( хотя интеракт контроля и аур все ровно иногда работает кривовато, и контроль поверх рефлектов/граундингов все ещё присутсвует, но куда реже.

 

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

Хотя есть искусственные эвенты типа клиппинга шаттера пиробласт+фаербол(разогрев тут не отменяется если второй ударивший спелл не кританул).

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

 

Главное что этот "делей" всегда одинаков -200мс, так что наличие на сервере оного в 100мс образует вопросы.

Link to comment
  • 4 months later...

Да тема тут висит просто как информационный билд, потому что

Глобальный батчинг менять плохая идея. Т.к. у нас с ним связано абсолютно все' date=' обновление спеллов, игроков, нпц, петов, обработка пакетов, снятие аур, разные таймеры и т.д.[/quote']

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

в пакетной обработке данных' date=' а не радом задержке[/quote']

так что идея в стол, но я попробовал)

 

upd.

Все рассчитывается в момент каста спелла (проверка лоса' date=' дистанции, расчет урона/хила и т.д.). Т.е. сама задержка реализована сейчас по принципу флайтайма.[/quote']

Я не перечитывал тред и забыл про этот момент. Если все рассчитывается в момент каста спелла, то даже идея кастомной задержки не лишена смысла. Но все равно в стол)

Edited by Ink_Forever
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...