Index: game/SpellAuras.cpp =================================================================== --- game/SpellAuras.cpp (revision 5205) +++ game/SpellAuras.cpp (working copy) @@ -1315,6 +1315,24 @@ caster->CastSpell(m_target,finalSpelId,true,NULL,this); } } + + // lifebloom + if ( !apply && + GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID && + (GetSpellProto()->SpellFamilyFlags & 0x1000000000LL) ) + { + int32 healBasePoints0 = m_modifier.m_amount; + + // have a look if there is still some other lifebloom dummy aura + Unit::AuraList auras = m_target->GetAurasByType(SPELL_AURA_DUMMY); + for(Unit::AuraList::iterator itr = auras.begin(); itr!=auras.end(); itr++) + if((*itr)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID && + (*itr)->GetSpellProto()->SpellFamilyFlags & 0x1000000000LL) + return; + + m_target->CastCustomSpell(m_target,33778,&healBasePoints0,NULL,NULL,true); + } + } void Aura::HandleAuraMounted(bool apply, bool Real) Index: game/Unit.cpp =================================================================== --- game/Unit.cpp (revision 5205) +++ game/Unit.cpp (working copy) @@ -6339,6 +6525,11 @@ if (spellProto->SpellFamilyFlags & 0x000000002000LL) // Healing stream from totem (add 6% per tick from hill bonus owner) CastingTime = 210; // break; + case SPELLFAMILY_DRUID: + // Lifebloom final heal + if (spellProto->SpellFamilyFlags & 0x1000000000LL && damagetype != DOT) + CastingTime = 1500; + break; } // Level Factor float LvlPenalty = 0.0f; @@ -7580,6 +7771,13 @@ modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_DOT, value); } + // Lifebloom dummy needs to be saved with precalculated ammount already + if ( target && spellProto->SpellFamilyName == SPELLFAMILY_DRUID && + (spellProto->SpellFamilyFlags & 0x1000000000LL) && + spellProto->EffectApplyAuraName[effect_index] == SPELL_AURA_DUMMY ) + pdamage = SpellHealingBonus(spellProto, value, SPELL_DIRECT_DAMAGE, target); + + return value; }