*Fix Focused Magic.

*Make Presence of Mind no longer trigger Arcane Power.
*Apply correct calculation for SPELLMOD_PROC_PER_MINUTE.
*Fix divine shield positivity.

--HG--
branch : trunk
This commit is contained in:
QAston
2009-03-20 19:53:26 +01:00
parent 4317751930
commit ad06f05ddb
6 changed files with 21 additions and 9 deletions
+1 -1
View File
@@ -7289,7 +7289,7 @@ void Player::CastItemCombatSpell(Item *item,Unit* Target, WeaponAttackType attTy
if(spellData.SpellPPMRate)
{
uint32 WeaponSpeed = GetAttackTime(attType);
chance = GetPPMProcChance(WeaponSpeed, spellData.SpellPPMRate);
chance = GetPPMProcChance(WeaponSpeed, spellData.SpellPPMRate, spellInfo);
}
else if(chance > 100.0f)
{
+2 -2
View File
@@ -2252,9 +2252,9 @@ void Spell::cast(bool skipCheck)
if(m_spellInfo->SpellFamilyName)
{
if (m_spellInfo->excludeCasterAuraSpell)
if (m_spellInfo->excludeCasterAuraSpell && !IsPositiveSpell(m_spellInfo->excludeCasterAuraSpell))
m_preCastSpell = m_spellInfo->excludeCasterAuraSpell;
else if (m_spellInfo->excludeTargetAuraSpell)
else if (m_spellInfo->excludeTargetAuraSpell && !IsPositiveSpell(m_spellInfo->excludeTargetAuraSpell))
m_preCastSpell = m_spellInfo->excludeTargetAuraSpell;
}
switch (m_spellInfo->SpellFamilyName)
+8
View File
@@ -2078,6 +2078,14 @@ void Aura::HandleAuraDummy(bool apply, bool Real)
caster->CastSpell(m_target, GetModifier()->m_amount, true);
return;
}
// Focused Magic
if(m_spellProto->Id == 54646)
{
// only on remove by crit
if(caster && m_removeMode == AURA_REMOVE_BY_DEFAULT && GetAuraDuration()>0)
caster->CastSpell(caster,54648, true);
return;
}
break;
}
}
+1 -1
View File
@@ -534,7 +534,7 @@ bool IsPositiveEffect(uint32 spellId, uint32 effIndex, bool deep)
switch(spellproto->Mechanic)
{
case MECHANIC_SHIELD:
case MECHANIC_IMMUNE_SHIELD:
return true;
default:
break;
+8 -4
View File
@@ -5620,7 +5620,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
return true;
}
// Seed of Corruption (Mobs cast) - no die req
if (dummySpell->SpellFamilyFlags == 0x00LL && dummySpell->SpellIconID == 1932)
if (dummySpell->SpellFamilyFlags.IsEqual(0,0,0) && dummySpell->SpellIconID == 1932)
{
Modifier* mod = triggeredByAura->GetModifier();
// if damage is more than need deal finish spell
@@ -9820,10 +9820,15 @@ float Unit::GetWeaponProcChance() const
return 0;
}
float Unit::GetPPMProcChance(uint32 WeaponSpeed, float PPM) const
float Unit::GetPPMProcChance(uint32 WeaponSpeed, float PPM, const SpellEntry * spellProto) const
{
// proc per minute chance calculation
if (PPM <= 0) return 0.0f;
// Apply chance modifer aura
if (spellProto)
if(Player* modOwner = GetSpellModOwner())
modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_PROC_PER_MINUTE,PPM);
uint32 result = uint32((WeaponSpeed * PPM) / 600.0f); // result is chance in percents (probability = Speed_in_sec * (PPM / 60))
return result;
}
@@ -12694,13 +12699,12 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit *pVictim, Aura* aura, SpellEntry con
if(!isVictim && spellProcEvent && spellProcEvent->ppmRate != 0)
{
uint32 WeaponSpeed = GetAttackTime(attType);
chance = GetPPMProcChance(WeaponSpeed, spellProcEvent->ppmRate);
chance = GetPPMProcChance(WeaponSpeed, spellProcEvent->ppmRate, spellProto);
}
// Apply chance modifer aura
if(Player* modOwner = GetSpellModOwner())
{
modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_CHANCE_OF_SUCCESS,chance);
modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_PROC_PER_MINUTE,chance);
}
return roll_chance_f(chance);
+1 -1
View File
@@ -1057,7 +1057,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
uint32 GetDefenseSkillValue(Unit const* target = NULL) const;
uint32 GetWeaponSkillValue(WeaponAttackType attType, Unit const* target = NULL) const;
float GetWeaponProcChance() const;
float GetPPMProcChance(uint32 WeaponSpeed, float PPM) const;
float GetPPMProcChance(uint32 WeaponSpeed, float PPM, const SpellEntry * spellProto) const;
MeleeHitOutcome RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType) const;
MeleeHitOutcome RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance) const;