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)
Старый 16.08.2010, 18:38   #2
Vinolentus
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
Vinolentus На верном пути
По умолчанию

Здорово.
А случаев, когда кастер - игрок, чей квест должен завершиться, но цель - не игрок, быть не может?
Vinolentus вне форума  
Старый 16.08.2010, 19:02   #3
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от Vinolentus Посмотреть сообщение
Здорово.
А случаев, когда кастер - игрок, чей квест должен завершиться, но цель - не игрок, быть не может?
Не могу себе такого представить - это раз.
Два: неоднократно видел спеллы, завершающие квест, которые должны кастоваться НПС, но базе и скриптам приходится выёживаться вызывая каст спелла именно игроком именно из-за текущей реализации.
Три: цель не игроком быть не может, т.к. не игрок не может иметь квеста.
KiriX вне форума  
Старый 16.08.2010, 19:53   #4
Vinolentus
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
Vinolentus На верном пути
По умолчанию

Ну почему же. Такое бы даже корректно работало раньше. Впрочем, подобных заклинаний нет, и, видимо, так быть не должно.
Vinolentus вне форума  
Старый 16.08.2010, 22:06   #5
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Было бы неплохо узнать, как поведет себя ядро с данным патчем в случае таких целей с данным эффектом:
http://ru.wowhead.com/spell=19719 - TARGET_SELF
http://ru.wowhead.com/spell=23658 - TARGET_SINGLE_FRIEND
http://ru.wowhead.com/spell=24875 - TARGET_DUELVSPLAYER
http://ru.wowhead.com/spell=25201 - TARGET_CASTER_COORDINATES, TARGET_AREAEFFECT_INSTANT
http://ru.wowhead.com/spell=30790 - TARGET_CASTER_COORDINATES, TARGET_ALL_ENEMY_IN_AREA
http://ru.wowhead.com/spell=31377 - TARGET_CASTER_COORDINATES, TARGET_ALL_FRIENDLY_UNITS_AROUND_CASTER
http://ru.wowhead.com/spell=44124 - TARGET_MASTER, TARGET_AREAEFFECT_PARTY

Для квеста на поимку Матиса есть спеллы:
http://ru.wowhead.com/spell=31336
http://ru.wowhead.com/spell=31337
http://ru.wowhead.com/spell=31339
http://ru.wowhead.com/spell=31377

Может, просто не тот спелл кастуется?
Нужен снифф.
virusav вне форума  
Старый 16.08.2010, 22:14   #6
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цели для комплита квеста будут определяться точно также как и при касте любого другого спелла с подобными целями.
Да и в любом случае - целью спелла должны быть именно те цели, которые указаны в спелле в дбц. Что-то я не часто вижу, чтобы в спеллах подменялись цели, которые указаны у них в дбц, почему же для этого эффекта делается исключение?

Спеллы для поимки Матиса:
В текущем варианте работы ядра все эти спеллы должны быть обязательно скастованы от игрока, что даже скриптом SD2 реализовать не так просто будет + ни один из приведённых спеллов не имеет для эффекта комплита цели self, что было бы логично если бы спелл должен был быть скастован игроком.
KiriX вне форума  
Старый 16.08.2010, 22:18   #7
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

31339 - TARGET_DUELVSPLAYER
Может, госсип? Тут уже нужна точная инфа по данному квесту.
virusav вне форума  
Старый 16.08.2010, 22:26   #8
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
31339 - TARGET_DUELVSPLAYER
Может, госсип? Тут уже нужна точная инфа по данному квесту.
Это всё равно сути не меняет. Почему для данного эффекта игнорируется цель и сущестует лишь одна цель: если кастер игрок - цель - кастер. Если кастре не игрок - эффект просто не обрабатывается, хотя срабатывал бы совершенно нормально, без костылей в ЭвентАИ типа "каст этого спелла целью".
KiriX вне форума  
Старый 20.08.2010, 11:00   #9
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Что разработчики скажут по поводу данного фикса?
KiriX вне форума  
Старый 22.08.2010, 16:01   #10
tmuc
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от Vinolentus Посмотреть сообщение
Здорово.
А случаев, когда кастер - игрок, чей квест должен завершиться, но цель - не игрок, быть не может?
Есть такой случай.... http://www.wowhead.com/quest=12842
Вот пример квеста, когда игрок должен скастовать (использовать спелл - http://www.wowhead.com/spell=53428), но не на NPC или GO.... а на итем.....
не знаю как в мангосе, а в тринити последней ревизии данный квест невыполним (без ремонта ядра).
Вот сейчас чистое ядро мангоса откомпилю, посмотрим как там.
__________________________________________________ ______________

На мангосе данный квест выполняется нормально...

Подскажите где копать в ядре? Где обработка таких квестов находится?

Последний раз редактировалось tmuc; 22.08.2010 в 16:45.
 
Старый 22.08.2010, 20:00   #11
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от tmuc Посмотреть сообщение
Есть такой случай.... http://www.wowhead.com/quest=12842
Вот пример квеста, когда игрок должен скастовать (использовать спелл - http://www.wowhead.com/spell=53428), но не на NPC или GO.... а на итем.....
не знаю как в мангосе, а в тринити последней ревизии данный квест невыполним (без ремонта ядра).
Вот сейчас чистое ядро мангоса откомпилю, посмотрим как там.
__________________________________________________ ______________

На мангосе данный квест выполняется нормально...

Подскажите где копать в ядре? Где обработка таких квестов находится?
Тут совершенно другое дело. Не путайте тёплое с мягким Патч давно внесён в ядро (и в мангос и в триньку) - кв прекрасно выполняется...
KiriX вне форума  
Старый 22.08.2010, 21:31   #12
tmuc
Гость
 
Сообщений: n/a
По умолчанию

С офф репо триньки, после компила квест не выполняется... значит в офф не исправили данный косяк..
 
Старый 22.08.2010, 21:39   #13
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от tmuc Посмотреть сообщение
С офф репо триньки, после компила квест не выполняется... значит в офф не исправили данный косяк..
Хм... Странно... Я точно знаю, что на триньке все кв ДК 100% проходимы - сам тестировал. Но в коде у них действительно нет того, что есть в мангосе.
SpellEffects.cpp:
PHP код:
                case 53343:                                 // Rune of Razorice
                
{
                    
// Runeforging Credit
                    
m_caster->CastSpell(m_caster54586true);
                    return;
                } 
54586 - этот спелл комплитит квест. Эффект комплита имеет цель - target_self. Вызов данного спелла идёт таким образом, что данный спелл кастует именно игрок. К данной теме ваш комментарий всё же не имеет никакого отношения
Кв этот и на тринити 100% работал, а значит был реализован скорее всего скриптом, советую вам копать в этом направлении.
KiriX вне форума  
Старый 22.08.2010, 21:52   #14
tmuc
Гость
 
Сообщений: n/a
По умолчанию

Спс.... буду копать.... Что интересно.. включил логи - 3 и на мангосе и на тринити....
абсолютно идентичны все вызовы...((( и 53343 есть...
 
Старый 22.08.2010, 22:15   #15
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

KiriX вне форума  
Старый 21.12.2010, 13:43   #16
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Тема висит давно без единого коммента. Ап!
KiriX вне форума  
Старый 23.12.2010, 18:04   #17
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

В 10910. Спасибо
zergtmn вне форума  
8 пользователя(ей) сказали cпасибо:
Ambal (23.12.2010), Den (24.12.2010), KiriX (23.12.2010), Lightunit (23.12.2010), Limpnau (24.12.2010), rsa (23.12.2010), Vladimir (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


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


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