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

В соответствии с проведенными разборками, в настоящее время алгоритм проверки
на TargetAuraStateNot и targetAuraSpell в функции CheckCast() неверен. Там еще
и ошибка в возвращаемом коде, но это к делу не относится.
Рассмотрим на примере спеллов 72176 - 72202 - 72178 (спеллы Саурфанга и его кровавых бестий).
В соответствии с имеющимся сниффом, на Саурфанге висит 72178, на бестиях 72176.
72176 при успешной атаке (требует записи в spell_proc_event, но это другой вопрос)
триггерит 72202, который имеет имеет 1й думмиэффект с целью TARGET_SCRIPT и требование TargetAura 72178
В соответствии с текущим кодом, первичной целью спелла будет this (см. код Unit::HandleProcTriggerSpellAuraProc)
Реальная цель думмиэффекта - Саурфанг и он нормально выбирается (при наличии записи в spell_script_target).
Но до момента выбора Саурфанга в качестве цели мы в функции CheckCast() не добираемся, поскольку обламываемся на
Код:
 // Target aura req check if need
 if(m_spellInfo->targetAuraSpell && !target->HasAura(m_spellInfo->targetAuraSpell))
      return SPELL_FAILED_CASTER_AURASTATE;
- требуемая по DBC аура висит не на первичной цели, а на реальной цели из spell_script_target. А проверка идет до выборки реальной цели.

Точно такая же ситуация (в теории, примеров я пока не нашел) и с целями с ограничением
TargetAuraStateNot.
Решение:
https://github.com/rsa/mangos/commit...d0ce1a87924362
Сразу говорю, решение не очень красивое, и достаточно слабо отттестировано. Если кто предложит лучше - буду рад.
rsa вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
KiriX (21.12.2010), Konctantin (24.12.2010)