Jump to content
Xudojnik

Школа магии у мобов.

Recommended Posts

Главный вопрос: почему у игроков можно блочить школу магии, а у мобов и петов - нет?

Edited by Xudojnik

Share this post


Link to post
Share on other sites

некому прописать в скрипте юзания абилок проверку на наличие соответствующих аур

Share this post


Link to post
Share on other sites

некому прописать в скрипте юзания абилок проверку на наличие соответствующих аур

Через час курения мангоса я пришел к выводу, что таких аур нет, а игрокам просто накидывают кулдауны.Ни в одном методе каста нет явной проверки интерраптов.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

void Spell::EffectInterruptCast(SpellEffectIndex /*eff_idx*/){    if (!unitTarget)        { return; }    if (!unitTarget->IsAlive())        { return; }    // TODO: not all spells that used this effect apply cooldown at school spells    // also exist case: apply cooldown to interrupted cast only and to all spells    for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_MAX_SPELL; ++i)    {        if (Spell* spell = unitTarget->GetCurrentSpell(CurrentSpellTypes(i)))        {            SpellEntry const* curSpellInfo = spell->m_spellInfo;            // check if we can interrupt spell            if ((curSpellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_INTERRUPT) && curSpellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE)            {                unitTarget->ProhibitSpellSchool(GetSpellSchoolMask(curSpellInfo), GetSpellDuration(m_spellInfo));                unitTarget->InterruptSpell(CurrentSpellTypes(i), false);            }        }    }}

Вызывает метод

virtual void ProhibitSpellSchool(SpellSchoolMask /*idSchoolMask*/, uint32 /*unTimeMs*/) { }

С одной стороны все ок. Виртуальный метод может переопределиться в наследнике.

Однако этот метод переопределен только у игроков. Мобы используют именно этот пустой метод.

 

Так что я считаю, что на механику блока школы просто положили болт.

Edited by Xudojnik

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Там не "кулдаун" на самом деле, а время до которого нельзя юзать школу.Отличия от игроков в том, что у игроков просматриваются выученные спеллы и накидываются им кд. Но не все мобы, которые умеют кастить, "знают" то что они кастят (привет скриптовка на с++). Поэтому сделал дополнительную мапу только для школ.А проверку поместил в самый корень функции каста вместе с другими проверками кулдаунов.Возможно некоторые мобы (у которых скриптовка на с++ и прямой вызов каста без всяких проверок) все же будут класть болт на блок школы. Но тут уже половые трудности этих самых мобов.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

Насколько я помню, мобам можно выставить свойство "иммунить интеррапты". Если боссу будет выставлено такое свойство, то он просто заиммунит спелл (и эффект блока школы не наложится).

Share this post


Link to post
Share on other sites

Я както помню что говорили что это не хотят реализовывать, как и скрипт мобов - потому что сервак лагает от такого количества обработки инфы)

Share this post


Link to post
Share on other sites

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

×