Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Патчи (http://mangos.ytdb.ru/forumdisplay.php?f=6)
-   -   [patch/dev] Heart of the Phoenix (Сердце Феникса) (http://mangos.ytdb.ru/showthread.php?t=1277)

Insider42 28.05.2010 13:59

[patch/dev] Heart of the Phoenix (Сердце Феникса)
 
Суть проблемы:
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;
            }

Может есть какой-то флаг скрывающий отображение полоски каста и предотвращающий замену кастуемого заклинания другим?

wk23 31.05.2010 02:47




Den 26.04.2013 13:50

Полоски каста для спела 54114 не должно быть, в дбц неверное значение. Вспоминая оф сервер, ее там не было и нету.


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

ru-mangos.ru - Русское сообщество MaNGOS