Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи > Принятые патчи

Важная информация

Принятые патчи Иногда выкладывают патчи, которые потом в итоге все-таки принимают в ядро.

Повод для гордости.

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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)
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[10939] Check non-unit target case for avoid crash in EffectQuestComplete. newsbot CMaNGOS Commits 0 30.12.2010 02:21
[10910] Use provided target instead of caster for SPELL_EFFECT_QUEST_COMPLETE newsbot CMaNGOS Commits 0 23.12.2010 18:10


Текущее время: 10:25. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot