diff options
author | megamage <none@none> | 2009-06-07 23:32:35 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-06-07 23:32:35 -0500 |
commit | a328728cb85c1166db4efa46d71d96d7c16d0ee3 (patch) | |
tree | d8e972711d3be06df13b2c611c58e2b222741654 | |
parent | 5e7d184734b24efdfc1cba6ec6b403015eeeaf37 (diff) |
*Implement spell aura 177.
--HG--
branch : trunk
-rw-r--r-- | src/game/Level3.cpp | 4 | ||||
-rw-r--r-- | src/game/Player.cpp | 6 | ||||
-rw-r--r-- | src/game/SpellAuras.cpp | 29 | ||||
-rw-r--r-- | src/game/SpellAuras.h | 1 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 2 | ||||
-rw-r--r-- | src/game/Unit.cpp | 3 | ||||
-rw-r--r-- | src/game/Unit.h | 1 |
7 files changed, 31 insertions, 15 deletions
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 06338bbe233..fe8cca2da4b 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -7472,9 +7472,7 @@ bool ChatHandler::HandleUnPossessCommand(const char* args) Unit* pUnit = getSelectedUnit(); if(!pUnit) pUnit = m_session->GetPlayer(); - pUnit->RemoveAurasByType(SPELL_AURA_MOD_CHARM); - pUnit->RemoveAurasByType(SPELL_AURA_MOD_POSSESS_PET); - pUnit->RemoveAurasByType(SPELL_AURA_MOD_POSSESS); + pUnit->RemoveCharmAuras(); return true; } diff --git a/src/game/Player.cpp b/src/game/Player.cpp index c73a9b3a623..939ca9c0c4a 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -16729,11 +16729,7 @@ void Player::StopCastingCharm() ExitVehicle(); } if(GetCharmGUID()) - { - charm->RemoveAurasByType(SPELL_AURA_MOD_CHARM); - charm->RemoveAurasByType(SPELL_AURA_MOD_POSSESS_PET); - charm->RemoveAurasByType(SPELL_AURA_MOD_POSSESS); - } + charm->RemoveCharmAuras(); if(GetCharmGUID()) { diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 7bf6463fadf..377f6a377db 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -229,7 +229,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]= &AuraEffect::HandleModSpellDamagePercentFromStat, //174 SPELL_AURA_MOD_SPELL_DAMAGE_OF_STAT_PERCENT implemented in Unit::SpellBaseDamageBonus &AuraEffect::HandleModSpellHealingPercentFromStat, //175 SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT implemented in Unit::SpellBaseHealingBonus &AuraEffect::HandleSpiritOfRedemption, //176 SPELL_AURA_SPIRIT_OF_REDEMPTION only for Spirit of Redemption spell, die at aura end - &AuraEffect::HandleNULL, //177 SPELL_AURA_AOE_CHARM + &AuraEffect::HandleCharmConvert, //177 SPELL_AURA_AOE_CHARM &AuraEffect::HandleNoImmediateEffect, //178 SPELL_AURA_MOD_DEBUFF_RESISTANCE implemented in Unit::MagicSpellHitResult &AuraEffect::HandleNoImmediateEffect, //179 SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE implemented in Unit::SpellCriticalBonus &AuraEffect::HandleNoImmediateEffect, //180 SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS implemented in Unit::SpellDamageBonus @@ -1794,19 +1794,16 @@ void AuraEffect::TriggerSpell() // case 27747: break; // Frost Blast case 27808: - caster->CastCustomSpell(29879, SPELLVALUE_BASE_POINT0, target->GetMaxHealth()*0.26f, m_target, true, NULL, this); + caster->CastCustomSpell(29879, SPELLVALUE_BASE_POINT0, (float)m_target->GetMaxHealth()*0.26f, m_target, true, NULL, this); return; // Detonate Mana case 27819: - { - int32 mana = (uint32)m_target->GetMaxPower(POWER_MANA)*0.25f; - if(mana) + if(int32 mana = (int32)(m_target->GetMaxPower(POWER_MANA) / 4)) { mana = m_target->ModifyPower(POWER_MANA, -mana); m_target->CastCustomSpell(27820, SPELLVALUE_BASE_POINT0, -mana*4, NULL, true, NULL, this, caster->GetGUID()); } return; - } // // Controller Timer // case 28095: break; // // Stalagg Chain @@ -7067,7 +7064,7 @@ void AuraEffect::HandleModCharm(bool apply, bool Real, bool /*changeAmount*/) if(apply) { - if(int32(m_target->getLevel()) > m_amount) + if(m_amount && int32(m_target->getLevel()) > m_amount) return; m_target->SetCharmedBy(caster, CHARM_TYPE_CHARM); @@ -7076,6 +7073,24 @@ void AuraEffect::HandleModCharm(bool apply, bool Real, bool /*changeAmount*/) m_target->RemoveCharmedBy(caster); } +void AuraEffect::HandleCharmConvert(bool apply, bool Real, bool /*changeAmount*/) +{ + if(!Real) + return; + + Unit* caster = GetCaster(); + + if(apply) + { + if(m_amount && int32(m_target->getLevel()) > m_amount) + return; + + m_target->SetCharmedBy(caster, CHARM_TYPE_CONVERT); + } + else + m_target->RemoveCharmedBy(caster); +} + void AuraEffect::HandlePhase(bool apply, bool Real, bool /*changeAmount*/) { if(!Real) diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h index 1a4d0590af7..9b7b024e02a 100644 --- a/src/game/SpellAuras.h +++ b/src/game/SpellAuras.h @@ -330,6 +330,7 @@ class TRINITY_DLL_SPEC AuraEffect void HandleNoReagentUseAura(bool Apply, bool Real, bool changeAmount); void HandlePhase(bool Apply, bool Real, bool changeAmount); void HandleAuraAllowOnlyAbility(bool apply, bool Real, bool changeAmount); + void HandleCharmConvert(bool apply, bool Real, bool changeAmount); // add/remove SPELL_AURA_MOD_SHAPESHIFT (36) linked auras void HandleShapeshiftBoosts(bool apply); diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 9a4c03ddbc0..bfd2e44f497 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -477,6 +477,7 @@ SpellSpecific GetSpellSpecific(uint32 spellId) case SPELL_AURA_MOD_CHARM: case SPELL_AURA_MOD_POSSESS_PET: case SPELL_AURA_MOD_POSSESS: + case SPELL_AURA_AOE_CHARM: return SPELL_CHARM; case SPELL_AURA_TRACK_CREATURES: case SPELL_AURA_TRACK_RESOURCES: @@ -3310,6 +3311,7 @@ void SpellMgr::LoadSpellCustomAttr() case SPELL_AURA_MOD_POSSESS: case SPELL_AURA_MOD_CONFUSE: case SPELL_AURA_MOD_CHARM: + case SPELL_AURA_AOE_CHARM: case SPELL_AURA_MOD_FEAR: case SPELL_AURA_MOD_STUN: mSpellCustomAttr[i] |= SPELL_ATTR_CU_AURA_CC; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 14ad660df6d..bc2f6b0b540 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -8711,6 +8711,7 @@ void Unit::RemoveCharmAuras() RemoveAurasByType(SPELL_AURA_MOD_CHARM); RemoveAurasByType(SPELL_AURA_MOD_POSSESS_PET); RemoveAurasByType(SPELL_AURA_MOD_POSSESS); + RemoveAurasByType(SPELL_AURA_AOE_CHARM); } void Unit::UnsummonAllTotems() @@ -13673,6 +13674,7 @@ void Unit::SetCharmedBy(Unit* charmer, CharmType type) ((Player*)charmer)->CharmSpellInitialize(); break; default: + case CHARM_TYPE_CONVERT: break; } } @@ -13762,6 +13764,7 @@ void Unit::RemoveCharmedBy(Unit *charmer) } break; default: + case CHARM_TYPE_CONVERT: break; } } diff --git a/src/game/Unit.h b/src/game/Unit.h index 82e4df55a96..0f75236b3c5 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -890,6 +890,7 @@ enum CharmType CHARM_TYPE_CHARM, CHARM_TYPE_POSSESS, CHARM_TYPE_VEHICLE, + CHARM_TYPE_CONVERT, }; enum ActionBarIndex |