PDA

Просмотр полной версии : Пушка Скверны Дверей Смерти[39219]


virusav
11.05.2010, 15:07
При использовании итема с данным спеллом получаем сообщение об ошибке, не проходим условие:
Spell.cpp
case SPELL_AURA_MOD_CHARM:
...
if(m_targets.getUnitTarget() == m_caster)
return SPELL_FAILED_BAD_TARGETS;

Для данного спелла можно добавить запись в `spell_script_target`, цель находится и добавляется:
Spell.cpp
AddUnitTarget(creatureScriptTarget, SpellEffectIndex(j));

Как я понимаю, изначально игрок добавляется в список целей:
SpellHandler.cpp
SpellCastTargets targets;

recvPacket >> targets.ReadForCaster(pUser);

targets.Update(pUser);

Если исключить добавление игрока в список целей для таких спеллов, то получаем сообщение об ошибке:
Spell.cpp
case SPELL_AURA_MOD_CHARM:
...
if(!m_targets.getUnitTarget())
return SPELL_FAILED_BAD_IMPLICIT_TARGETS;

Не встречал спеллов, которые были бы с привязкой, и чтобы их можно было кастовать на игрока.

Может, для спеллов, для которых цели можно занести в `spell_script_target`, исключать игрока в качестве цели?

KiriX
11.05.2010, 15:34
Не понял логики... Если спелл имеет цель spell_script_target и он кастуется (при наличии записи) нормально, зачем кого-то исключать из целей?

virusav
11.05.2010, 15:37
Потому что на первой же проверке if(m_targets.getUnitTarget() == m_caster) получаем ошибку, т.к. в m_targets указан игрок.

virusav
04.11.2010, 18:34
Где лучше в данном случае делать проверку, чтобы каст прошел успешно?

evilstar
04.11.2010, 21:09
Там пушка становится питомцем Игрока, то есть не дает пушку под контроль?

virusav
04.11.2010, 21:59
Не дает кастануть на пушку.

Если войти в режим ГМ, выделить пушку и кастануть командой .cast, то все отработает, как надо.
В обычном режиме каст не проходит.

В `spell_script_target` записи есть.

virusav
06.11.2010, 19:11
Всего 3 спелла с SPELL_AURA_MOD_CHARM и TARGET_SCRIPT.
Проверил 2 из них - один и тот же косяк.
В третьем есть SPELL_AURA_CONTROL_VEHICLE, патча на транспорт нет, поэтому не проверял.

Исключил спеллы из if(m_targets.getUnitTarget() == m_caster) для теста - нпц берутся под контроль.

Только они не выполняют команд игрока: не атакуют, их спеллы не оказывают эффектов.
Если игрок отпустит нпц, то тот начнет атаковать игрока. И в этот момент начинает работать атака и т.д.

Возможно, это уже другая проблема.

Что скажут знатоки по поводу указанных проблем?