aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormegamage <none@none>2009-06-07 23:32:35 -0500
committermegamage <none@none>2009-06-07 23:32:35 -0500
commita328728cb85c1166db4efa46d71d96d7c16d0ee3 (patch)
treed8e972711d3be06df13b2c611c58e2b222741654
parent5e7d184734b24efdfc1cba6ec6b403015eeeaf37 (diff)
*Implement spell aura 177.
--HG-- branch : trunk
-rw-r--r--src/game/Level3.cpp4
-rw-r--r--src/game/Player.cpp6
-rw-r--r--src/game/SpellAuras.cpp29
-rw-r--r--src/game/SpellAuras.h1
-rw-r--r--src/game/SpellMgr.cpp2
-rw-r--r--src/game/Unit.cpp3
-rw-r--r--src/game/Unit.h1
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