Показать сообщение отдельно
Старый 16.08.2010, 17:33   #1
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию [10910] [fix] Spell::EffectQuestComplete

Сейчас разбирался с квестом и наткнулся на один спелл:
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); 
KiriX вне форума  
7 пользователя(ей) сказали cпасибо:
Den (20.08.2010), Fear (16.08.2010), LordJZ (16.08.2010), Vinolentus (16.08.2010), Vladimir (23.12.2010), xex (17.08.2010), zergtmn (23.12.2010)