Реагенты триггерных спеллов
Есть спелл 40958, который триггерит 40962.
Последний спелл требует реагенты, но при касте они не забираются. Каст 40958 осуществляется госсипом у го. Написал патч на спелл 40962: Код:
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp Потом сделал, как в коммите https://github.com/mangos/mangos/com...0122e399ea5d4a В итоге реагенты так и остались в инвентаре. Каким образом триггерный спелл 40962 может забрать реагенты у кастера? |
Надо в конце-концов что-то делать с таргетом 25. Если в 40958 оригиналкастером будет игрок, то и реагенты заберутся правильно...
Кста, что-то я в ДБЦ никакого требования реагентов на 40962 не вижу. Следовательно все равно надо хакать. |
Если в `gossip_scripts` указать каст спелла 40962, то реагенты забираются, а в случае с 40958 - нет.
Тип каста равен 1, т.к. все остальные варианты дают ошибку в логе. Какие еще варианты? |
ни в 40962 ни в его триггерных ингридиенты не забираются. так что сначала выясните кто же у вас их забирает, тогда будет ясно что делать :)
|
Спеллворк не показал требования реагентов.
Решил проверить спеллы 43723 и 43753, при касте которых в конечном итоге реагенты забираются, но в спеллворке не увидел данных по требуемым итемам. У го есть спеллфокус, у госсипа прописано требование итема в количестве 35 штук. Если не спелл 40962 забирает реагенты, то кто + в чем тогда разница между кастом спелла напрямую и через основной спелл в таком случае? |
Не пробовал
unitTarget->CastSpell(unitTarget, spell_id, false, NULL, NULL, unitTarget->GetObjectGuid(), m_spellInfo); Для триггерных спеллов вроде не берутся реагенты |
Недавно был коммит, где триггерный спелл забирал реагенты, ссылка в первом посте, но не прокатило.
Если не прокатит с true, то тогда буду пробовать с false, но не уверен, что так должно быть в случае каста триггероного спелла. |
Цитата:
|
Если не ошибаюсь, то госсип не может забирать реагенты.
Спелл 40962 требует итемы, это можно увидеть в обновленном спеллворке: Reagents: 32569x35 |
У спелла 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 каст всегда идет тартетом на себя, а не кастером на таргет? |
1. почти наверняка ничем. там где могут быть проблемы, этот аргумент не используется.
2. цели должны выбираться по дбц, так что там в общем достаточно все равно кто на что кастит. так просто меньше проблем с обходом избыточных ограничений в CheckCast |
Раз уж речь о триггерных спеллах: 47722 триггерит 47724, у которого SPELL_EFFECT_SCRIPT_EFFECT=каст 50239 на себя (создание итема).
Определенное время назад в конечном итоге у игрока в инвентаре оказывался итем после каста 50239. После какого-то коммита целью 50239 является нпц, на которого идет каст 47722. |
Проблему решил таким образом:
Код:
void Spell::EffectForceCast(SpellEffectIndex eff_idx) Только все равно интересно, почему кастует именно таргет на таргет, а не кастер на таргет.:) |
Поправлено в [11693]. Спасибо.
|
Все-таки остался открытым вопрос о том, что триггерный спелл кастует таргет, а не кастер.
Код:
unitTarget->CastSpell(unitTarget, spellInfo, true, NULL, NULL, m_originalCasterGUID, m_spellInfo); Код:
Attributes: 0x20000000 (SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY) Код:
Effect 0: Id 6 (SPELL_EFFECT_APPLY_AURA) Код:
Effect 0: Id 77 (SPELL_EFFECT_SCRIPT_EFFECT) Если бы триггерные спеллы кастовал не таргет, а кастер, то: игрок кастует 47722, он же кастует 47724 и он же кастует 50239, поэтому получает итем. Посмотрел выборочно другие спеллы с кастом триггерных спеллов на случай смены кастера, чтобы ничего не поломалось, но проблем не нашел. Чем чревата замена Код:
unitTarget->CastSpell(unitTarget, spellInfo, true, NULL, NULL, m_originalCasterGUID, m_spellInfo); Код:
кастер->CastSpell(unitTarget, spellInfo, true, NULL, NULL, m_originalCasterGUID, m_spellInfo); |
ну например в вышеприведенном 47724 игрок вместе с итемом получит еще и EFFECT_INSTAKILL :) здесь в общем не совсем о том разговор, цепочка кривостей начинается с 47722, который должен каститься явно в обратном направлении. как я уже не раз писал, таргет 25 - совсем не то что у нас сейчас имеется, а скорее нечто вроде SCRIPT_TARGET, сильно зависящий от условий каста.
|
Насчет 47724 не согласен.
Если кастует игрок, то: 1. SPELL_EFFECT_SCRIPT_EFFECT и TARGET_SELF, т.е. эффект на себя. 2. SPELL_EFFECT_INSTAKILL и TARGET_DUELVSPLAYER, т.е. убить цель, противоположную кастеру, а это нпц, который является таргетом. |
Текущее время: 13:47. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS