PDA

Просмотр полной версии : [10706]Манакорм[30326]


virusav
07.11.2010, 15:00
Описание: "Когда вы получаете ману при помощи заклинаний "Похищение маны" или "Жизнеотвод", ваш питомец получает 100% от полученной вами маны".
Жизнеотвод восстанавливает ману пета, а Похищение маны - нет.

Патч:
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 3975e1e..42ba154 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -6879,6 +6879,10 @@ void Aura::PeriodicTick()
if(gain_amount)
{
int32 gain = pCaster->ModifyPower(power, gain_amount);
+ if (pCaster->GetTypeId() == TYPEID_PLAYER && spellProto->Id == 5138 && pCaster->HasSpell(30326))
+ if (Unit* pPet = pCaster->GetPet())
+ int32 temp = pPet->ModifyPower(power, gain_amount);
+
target->AddThreat(pCaster, float(gain) * 0.5f, pInfo.critical, GetSpellSchoolMask(spellProto), spellProto);
}
break;
Второй вариант патча (с использованием вспомогательного спелла):
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 320fef2..f6fa41c 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -6881,6 +6881,9 @@ void Aura::PeriodicTick()
if(gain_amount)
{
int32 gain = pCaster->ModifyPower(power, gain_amount);
+ if (pCaster->GetTypeId() == TYPEID_PLAYER && spellProto->Id == 5138 && pCaster->HasSpell(30326))
+ pCaster->CastCustomSpell(pCaster, 32554, &gain_amount, NULL, NULL, true, NULL);
+
target->AddThreat(pCaster, float(gain) * 0.5f, pInfo.critical, GetSpellSchoolMask(spellProto), spellProto);
}
break;

Insider42
07.11.2010, 18:01
только вот зачем там "int32 temp = "?

MaS0n
07.11.2010, 19:51
Раз от 'Жизнеотвода' работает, скорее всего - это должен быть прок, ну и модификация маны - какой-то из http://www.wowhead.com/search?q=Mana+Feed#spells

virusav
07.11.2010, 20:48
Писал по образу и подобию строки
int32 gain = pCaster->ModifyPower(power, gain_amount);
Не знаю, как себя поведет сишник, если вызвать метод, который возвращает значение, без присваивания его в переменную.

Добавлено через 55 минут
Раз от 'Жизнеотвода' работает, скорее всего - это должен быть прок, ну и модификация маны - какой-то из http://www.wowhead.com/search?q=Mana+Feed#spells
Посмотрел спеллы жизнеотвода варлока, но не нашел в них прокфлагов, сплошные думми.
В SpellEffects.cpp есть блок обработки группы спеллов жизнеотвода, там же идет каст спелла 32553 с указанием количества передаваемой маны.
Для спеллов жизнеотвода использовался CastCustomSpell.

По идее, для спелла "Похищение маны" можно было сделать также через CastCustomSpell, но раз уж для кастера сделано через ModifyPower, то и для пета сделал точно также.

Решающий ответ за ядерщиками, как правильно.

SeT
07.11.2010, 21:05
ID - 32554 Mana Feed - Drain Mana
Effect 0: Id 30 (SPELL_EFFECT_ENERGIZE)
BasePoints = 1
Targets (5, 0) (TARGET_PET, NO_TARGET)
?

virusav
07.11.2010, 21:44
Да, спелл 32554.
Об этом я и писал, что можно использовать его в CastCustomSpell, а можно, как в патче.

О правильности пусть судят разработчики.

SeT
07.11.2010, 21:52
Если есть спелл, значит его надо использовать.

virusav
07.11.2010, 23:47
Добавил в первый пост второй вариант патча, хотя мне первый больше нравится.:)

KiriX
08.11.2010, 01:21
Добавил в первый пост второй вариант патча, хотя мне первый больше нравится.:)
Чувствую, ближе к снифам как раз второй вариант со спеллом и будет, спасибо ;)

Йоха
08.11.2010, 08:23
Не знаю, как себя поведет сишник, если вызвать метод, который возвращает значение, без присваивания его в переменную.

это нормально, если результат вызываемой функции не нужен, можно не присваивать его никакой переменной.

То есть вместо
int32 temp = pPet->ModifyPower(power, gain_amount);
можно смело писать
pPet->ModifyPower(power, gain_amount);

Если результат возвращаемый ModifyPower() не нужен.