Сейчас разбирался с квестом и наткнулся на один спелл:
http://ru.wowhead.com/spell=31336
По логике спелла и данным с ВХ - данный спелл должен быть скастован НПС. Попробовал реализовать через EvemtAI, однако квест не засчитался. Механика квеста и самого спелла не позволяет сделать грамотно так, чтобы этот спелл кастовался игроком (квест может выполняться группой игроков (и должен), таргетов у НПС может быть несколько и не обязательно это будет игрок). Решил покопаться и понял.
Спелла 31336 имеет второй эффект - квест комплит и целью его должны стать цели: TARGET_ALL_ENEMY_IN_AREA. Почему же не происходит комплит?
Стал копать обработки и наткнулся на то, что для мангоса спеллы с комплитом кастует или только игрок или они не обрабатываются вообще, что неверно, учитывая указание цели в самом спелле.
Доработал обработчик следующим образом - тогда получается всё верно и есть страховка от ошибки если цель - не игрок:
PHP код:
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 096dae3..70ea439 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -7182,10 +7182,10 @@ void Spell::EffectReputation(SpellEffectIndex eff_idx)
void Spell::EffectQuestComplete(SpellEffectIndex eff_idx)
{
- if(m_caster->GetTypeId() != TYPEID_PLAYER)
+ if(unitTarget->GetTypeId() != TYPEID_PLAYER)
return;
- Player *_player = (Player*)m_caster;
+ Player *_player = (Player*)unitTarget;
uint32 quest_id = m_spellInfo->EffectMiscValue***91;eff_idx***93;;
_player->AreaExploredOrEventHappens(quest_id);