Суть проблемы:
1) спел кастуется даже если пет живой, такого быть не должно
2) спел не кастуется когда пет мертв
3) спел не вызывает второй эффект, который как раз и должен воскрешать
4) эффект SPELL_EFFECT_SUMMON_DEAD_PET с режимом TARGET_DUELVSPLAYER_COORDINATES имеет проблему с неверной выборкой цели. Возможно её нужно задавать принудительно, где именно пока я не разобрался. Эта проблема не актуальна если всё таки окажеться что верный вариант патча Часть 2 вариант Б.
5) панель мертвого пета полностью заблокирована что препятствует использованию спонобности, я пока не отследил откуда это :/ может быть SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); так влияет
Часть 1. Реализация необходимого нам флага
Код:
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 5b105ee..a8c8a7a 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -5317,9 +5317,12 @@ SpellCastResult Spell::CheckCast(bool strict)
SpellCastResult Spell::CheckPetCast(Unit* target)
{
- if(!m_caster->isAlive())
+ if(!m_caster->isAlive() && !(m_spellInfo->Attributes & SPELL_ATTR_CASTABLE_WHILE_DEAD))
return SPELL_FAILED_CASTER_DEAD;
+ if (m_caster->isAlive() && (m_spellInfo->Attributes & SPELL_ATTR_CASTABLE_WHILE_DEAD))
+ return SPELL_FAILED_TARGET_NOT_DEAD;
+
if(m_caster->IsNonMeleeSpellCasted(false)) //prevent spellcast interruption by another spellcast
return SPELL_FAILED_SPELL_IN_PROGRESS;
if(m_caster->isInCombat() && IsNonCombatSpell(m_spellInfo))
Часть 2. Реализация эффекта
Код:
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 4ef16e1..d7ddd91 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -6362,6 +6364,14 @@ void Spell::EffectScriptEffect(SpellEffectIndex eff_idx)
unitTarget->CastSpell(unitTarget, 62305, true);
return;
}
+ case 55709: // Heart of the Phoenix
+ {
+ if (!unitTarget && unitTarget->isAlive())
+ return;
+
+ unitTarget->CastSpell(unitTarget, 54114, true);
+ return;
+ }
default:
break;
}
Как я уже говорил - проблема патча в П4 (пункт 4). Кто поможет?
Возможно это неверная реализация, например я незнаю кто же всё таки должен кастовать способность - хозяин или пет сам на себя? Получается какой-то бред если хозяин, т.к. появляется полоска каста, которую может заменить любой другой кастуемый спел. Зато в этом случае надобность вправлять П4 (пункт 4) отпадает
Часть 2 вариант Б. Колдуем от лица самого охотника
Код:
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 9c8373f..955f8de 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -6395,6 +6395,18 @@ void Spell::EffectScriptEffect(SpellEffectIndex eff_idx)
unitTarget->CastSpell(unitTarget, 62305, true);
return;
}
+ case 55709: // Heart of the Phoenix
+ {
+ if (!unitTarget)
+ return;
+
+ Unit *owner = unitTarget->GetOwner();
+ if (!owner)
+ return;
+
+ owner->CastSpell(owner, 54114, true);
+ return;
+ }
default:
break;
}
Может есть какой-то флаг скрывающий отображение полоски каста и предотвращающий замену кастуемого заклинания другим?