|
Баг-репорты Описываем проблемы и ошибки работы ядра |
|
Опции темы | Поиск в этой теме | Опции просмотра |
30.03.2011, 23:21 | #1 |
Администратор
|
Реагенты триггерных спеллов
Есть спелл 40958, который триггерит 40962.
Последний спелл требует реагенты, но при касте они не забираются. Каст 40958 осуществляется госсипом у го. Написал патч на спелл 40962: Код:
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index c566fd1..caca0e6 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1288,6 +1288,22 @@ void Spell::EffectDummy(SpellEffectIndex eff_idx) DoCreateItem(eff_idx, newitemid); return; } + case 40962: // Blade's Edge Terrace Demon Boss Summon Branch + { + if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) + return; + + uint32 spell_id = 0; + switch (urand(1,4)) + { + case 1: spell_id = 40957; break; // Blade's Edge Terrace Demon Boss Summon 1 + case 2: spell_id = 40959; break; // Blade's Edge Terrace Demon Boss Summon 2 + case 3: spell_id = 40960; break; // Blade's Edge Terrace Demon Boss Summon 3 + case 4: spell_id = 40961; break; // Blade's Edge Terrace Demon Boss Summon 4 + } + unitTarget->CastSpell(unitTarget, spell_id, true, NULL, NULL, unitTarget->GetObjectGuid(), m_spellInfo); + return; + } case 42287: // Salvage Wreckage { if (m_caster->GetTypeId() != TYPEID_PLAYER) Потом сделал, как в коммите https://github.com/mangos/mangos/com...0122e399ea5d4a В итоге реагенты так и остались в инвентаре. Каким образом триггерный спелл 40962 может забрать реагенты у кастера? |
01.04.2011, 07:45 | #2 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Надо в конце-концов что-то делать с таргетом 25. Если в 40958 оригиналкастером будет игрок, то и реагенты заберутся правильно...
Кста, что-то я в ДБЦ никакого требования реагентов на 40962 не вижу. Следовательно все равно надо хакать. |
01.04.2011, 10:05 | #3 |
Администратор
|
Если в `gossip_scripts` указать каст спелла 40962, то реагенты забираются, а в случае с 40958 - нет.
Тип каста равен 1, т.к. все остальные варианты дают ошибку в логе. Какие еще варианты? |
01.04.2011, 12:36 | #4 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
ни в 40962 ни в его триггерных ингридиенты не забираются. так что сначала выясните кто же у вас их забирает, тогда будет ясно что делать
|
01.04.2011, 13:09 | #5 |
Администратор
|
Спеллворк не показал требования реагентов.
Решил проверить спеллы 43723 и 43753, при касте которых в конечном итоге реагенты забираются, но в спеллворке не увидел данных по требуемым итемам. У го есть спеллфокус, у госсипа прописано требование итема в количестве 35 штук. Если не спелл 40962 забирает реагенты, то кто + в чем тогда разница между кастом спелла напрямую и через основной спелл в таком случае? |
01.04.2011, 20:57 | #6 |
Модератор
|
Не пробовал
unitTarget->CastSpell(unitTarget, spell_id, false, NULL, NULL, unitTarget->GetObjectGuid(), m_spellInfo); Для триггерных спеллов вроде не берутся реагенты |
02.04.2011, 00:07 | #7 |
Администратор
|
Недавно был коммит, где триггерный спелл забирал реагенты, ссылка в первом посте, но не прокатило.
Если не прокатит с true, то тогда буду пробовать с false, но не уверен, что так должно быть в случае каста триггероного спелла. |
02.04.2011, 13:31 | #8 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
вывод - реагенты забирает госсип при успешном касте спелла. осталось только выяснить, почему каст 40962 считается успешным, а предыдущего по цепочке - нет. все остальное трогать не надо, уже работает.
|
06.04.2011, 17:29 | #9 |
Администратор
|
Если не ошибаюсь, то госсип не может забирать реагенты.
Спелл 40962 требует итемы, это можно увидеть в обновленном спеллворке: Reagents: 32569x35 |
26.05.2011, 10:51 | #10 |
Администратор
|
У спелла 40958 эффект SPELL_EFFECT_FORCE_CAST.
В Spell::EffectForceCast каст происходит таким образом: Код:
unitTarget->CastSpell(unitTarget, spellInfo, true, NULL, NULL, m_originalCasterGUID); Код:
unitTarget->CastSpell(unitTarget, spell_id, true, NULL, NULL, unitTarget->GetObjectGuid(), m_spellInfo) Код:
unitTarget->CastSpell(unitTarget, spellInfo->Id, true, NULL, NULL, m_originalCasterGUID, spellInfo); Возможно, косяк будет, если кастер итем, хз. 2. Почему в Spell::EffectForceCast каст всегда идет тартетом на себя, а не кастером на таргет? |
26.05.2011, 12:01 | #11 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
1. почти наверняка ничем. там где могут быть проблемы, этот аргумент не используется.
2. цели должны выбираться по дбц, так что там в общем достаточно все равно кто на что кастит. так просто меньше проблем с обходом избыточных ограничений в CheckCast |
26.05.2011, 12:34 | #12 |
Администратор
|
Раз уж речь о триггерных спеллах: 47722 триггерит 47724, у которого SPELL_EFFECT_SCRIPT_EFFECT=каст 50239 на себя (создание итема).
Определенное время назад в конечном итоге у игрока в инвентаре оказывался итем после каста 50239. После какого-то коммита целью 50239 является нпц, на которого идет каст 47722. |
27.06.2011, 23:28 | #13 |
Администратор
|
Проблему решил таким образом:
Код:
void Spell::EffectForceCast(SpellEffectIndex eff_idx) ... - unitTarget->CastSpell(unitTarget, spellInfo, true, NULL, NULL, m_originalCasterGUID); + unitTarget->CastSpell(unitTarget, spellInfo, true, NULL, NULL, m_originalCasterGUID, m_spellInfo); Только все равно интересно, почему кастует именно таргет на таргет, а не кастер на таргет. |
28.06.2011, 14:55 | #14 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Поправлено в [11693]. Спасибо.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
28.06.2011, 20:54 | #15 |
Администратор
|
Все-таки остался открытым вопрос о том, что триггерный спелл кастует таргет, а не кастер.
Код:
unitTarget->CastSpell(unitTarget, spellInfo, true, NULL, NULL, m_originalCasterGUID, m_spellInfo); Код:
Attributes: 0x20000000 (SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY) TargetAuraState = 13 (AURA_STATE_HEALTHLESS_35_PERCENT) 47679 Blood Draw 47702 Unholy Union 47722 Frost Draw 50251 Blood Draw Код:
Effect 0: Id 6 (SPELL_EFFECT_APPLY_AURA) BasePoints = 1 Targets (25, 0) (TARGET_DUELVSPLAYER, NO_TARGET) Aura Id 23 (SPELL_AURA_PERIODIC_TRIGGER_SPELL), value = 1, misc = 0 (0), miscB = 0, periodic = 8000 Trigger spell (47724) Frost Draw. Chance = 101 Код:
Effect 0: Id 77 (SPELL_EFFECT_SCRIPT_EFFECT) BasePoints = 50239 Targets (1, 0) (TARGET_SELF, NO_TARGET) Effect 1: Id 1 (SPELL_EFFECT_INSTAKILL) BasePoints = 1 Targets (25, 0) (TARGET_DUELVSPLAYER, NO_TARGET) Если бы триггерные спеллы кастовал не таргет, а кастер, то: игрок кастует 47722, он же кастует 47724 и он же кастует 50239, поэтому получает итем. Посмотрел выборочно другие спеллы с кастом триггерных спеллов на случай смены кастера, чтобы ничего не поломалось, но проблем не нашел. Чем чревата замена Код:
unitTarget->CastSpell(unitTarget, spellInfo, true, NULL, NULL, m_originalCasterGUID, m_spellInfo); Код:
кастер->CastSpell(unitTarget, spellInfo, true, NULL, NULL, m_originalCasterGUID, m_spellInfo); |
28.06.2011, 21:28 | #16 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
ну например в вышеприведенном 47724 игрок вместе с итемом получит еще и EFFECT_INSTAKILL здесь в общем не совсем о том разговор, цепочка кривостей начинается с 47722, который должен каститься явно в обратном направлении. как я уже не раз писал, таргет 25 - совсем не то что у нас сейчас имеется, а скорее нечто вроде SCRIPT_TARGET, сильно зависящий от условий каста.
|
28.06.2011, 22:32 | #17 |
Администратор
|
Насчет 47724 не согласен.
Если кастует игрок, то: 1. SPELL_EFFECT_SCRIPT_EFFECT и TARGET_SELF, т.е. эффект на себя. 2. SPELL_EFFECT_INSTAKILL и TARGET_DUELVSPLAYER, т.е. убить цель, противоположную кастеру, а это нпц, который является таргетом. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Каст триггерных спеллов | virusav | Баг-репорты | 1 | 08.12.2010 16:54 |
Маски спеллов | fedr | Новичкам | 2 | 13.09.2010 22:42 |
Обработка эффектов спеллов | virusav | Баг-репорты | 6 | 27.08.2010 10:50 |
Каст спеллов объектами | virusav | Запросы | 9 | 30.05.2010 10:01 |
Реализация спеллов бомб и т.д | frenk | Баг-репорты | 0 | 20.03.2010 00:32 |