--HG--
branch : trunk
This commit is contained in:
megamage
2009-03-02 17:19:54 -06:00
5 changed files with 17 additions and 14 deletions
+1 -1
View File
@@ -2289,7 +2289,7 @@ void Spell::handle_immediate()
if (duration) if (duration)
{ {
//apply haste mods //apply haste mods
m_caster->ModSpellCastTime(m_spellInfo, duration); m_caster->ModSpellCastTime(m_spellInfo, duration, this);
// Apply duration mod // Apply duration mod
if(Player* modOwner = m_caster->GetSpellModOwner()) if(Player* modOwner = m_caster->GetSpellModOwner())
modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_DURATION, duration); modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_DURATION, duration);
+1 -1
View File
@@ -2256,7 +2256,7 @@ void Spell::EffectApplyAura(uint32 i)
//mod duration of channeled aura by spell haste //mod duration of channeled aura by spell haste
if (IsChanneledSpell(m_spellInfo)) if (IsChanneledSpell(m_spellInfo))
caster->ModSpellCastTime(m_spellInfo, duration); caster->ModSpellCastTime(m_spellInfo, duration, this);
// if Aura removed and deleted, do not continue. // if Aura removed and deleted, do not continue.
if(duration== 0 && !(Aur->IsPermanent())) if(duration== 0 && !(Aur->IsPermanent()))
+1 -1
View File
@@ -245,7 +245,7 @@ uint32 GetSpellCastTime(SpellEntry const* spellInfo, Spell const* spell)
int32 castTime = spellCastTimeEntry->CastTime; int32 castTime = spellCastTimeEntry->CastTime;
if (spell && spell->GetCaster()) if (spell && spell->GetCaster())
spell->GetCaster()->ModSpellCastTime(spellInfo, castTime); spell->GetCaster()->ModSpellCastTime(spellInfo, castTime, spell);
if (spellInfo->Attributes & SPELL_ATTR_RANGED && (!spell || !(spell->IsAutoRepeat()))) if (spellInfo->Attributes & SPELL_ATTR_RANGED && (!spell || !(spell->IsAutoRepeat())))
castTime += 500; castTime += 500;
+13 -10
View File
@@ -487,7 +487,7 @@ void Unit::RemoveSpellsCausingAuraWithDispel(AuraType auraType, Spell * spell)
if (*iter) if (*iter)
{ {
if (!(*iter)->GetDispelChance(spell)) if (!(*iter)->GetDispelChance( spell))
continue; continue;
RemoveAurasDueToSpell((*iter)->GetId()); RemoveAurasDueToSpell((*iter)->GetId());
if (!m_modAuras[auraType].empty()) if (!m_modAuras[auraType].empty())
@@ -4197,7 +4197,7 @@ void Unit::RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode)
&& AurSpellInfo->EffectApplyAuraName[Aur->GetEffIndex()]!= SPELL_AURA_DUMMY) && AurSpellInfo->EffectApplyAuraName[Aur->GetEffIndex()]!= SPELL_AURA_DUMMY)
//don't stop channeling of scripted spells (this is actually a hack) //don't stop channeling of scripted spells (this is actually a hack)
{ {
caster->InterruptSpell(CURRENT_CHANNELED_SPELL); caster->m_currentSpells[CURRENT_CHANNELED_SPELL]->cancel();
} }
} }
} }
@@ -6344,23 +6344,27 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
{ {
if (dummySpell->Id == 17619) if (dummySpell->Id == 17619)
{ {
if (procSpell->SpellFamilyName == SPELLFAMILY_POTION) if (procSpell->Category==4) //potion category
{ {
for (uint8 i=0;i<3;i++) for (uint8 i=0;i<3;i++)
{ {
if (procSpell->Effect[i]==SPELL_EFFECT_HEAL) if (procSpell->Effect[i]==SPELL_EFFECT_HEAL)
{ {
basepoints0 = damage * 0.4f;
triggered_spell_id = 21399; triggered_spell_id = 21399;
} }
else if (procSpell->Effect[i]==SPELL_EFFECT_ENERGIZE) else if (procSpell->Effect[i]==SPELL_EFFECT_ENERGIZE)
{ {
triggered_spell_id = 21400; basepoints0 = CalculateSpellDamage(procSpell,i,procSpell->EffectBasePoints[i],this) * 0.4f;
triggered_spell_id = 21400;
} }
else continue; else continue;
basepoints0 = CalculateSpellDamage(procSpell,i,procSpell->EffectBasePoints[i],this) * 0.4f;
CastCustomSpell(this,triggered_spell_id,&basepoints0,NULL,NULL,true,castItem,triggeredByAura); CastCustomSpell(this,triggered_spell_id,&basepoints0,NULL,NULL,true,castItem,triggeredByAura);
} }
return true; if (triggered_spell_id)
return true;
return false;
} }
} }
} }
@@ -10308,13 +10312,13 @@ int32 Unit::ModSpellDuration(SpellEntry const* spellProto, uint8 effect_index, U
return duration>0 ? duration : 0; return duration>0 ? duration : 0;
} }
void Unit::ModSpellCastTime(SpellEntry const* spellProto, int32 & castTime) void Unit::ModSpellCastTime(SpellEntry const* spellProto, int32 & castTime, Spell const * spell)
{ {
if (!spellProto || castTime<0) if (!spellProto || castTime<0)
return; return;
//called from caster //called from caster
if(Player* modOwner = GetSpellModOwner()) if(Player* modOwner = GetSpellModOwner())
modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_CASTING_TIME, castTime); modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_CASTING_TIME, castTime, spell);
if( !(spellProto->Attributes & (SPELL_ATTR_UNK4|SPELL_ATTR_UNK5)) ) if( !(spellProto->Attributes & (SPELL_ATTR_UNK4|SPELL_ATTR_UNK5)) )
castTime = int32( float(castTime) * GetFloatValue(UNIT_MOD_CAST_SPEED)); castTime = int32( float(castTime) * GetFloatValue(UNIT_MOD_CAST_SPEED));
@@ -11280,12 +11284,11 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag
continue; continue;
procTriggered.push_back( ProcTriggeredData(spellProcEvent, itr->second) ); procTriggered.push_back( ProcTriggeredData(spellProcEvent, itr->second) );
} }
// Nothing found // Nothing found
if (procTriggered.empty()) if (procTriggered.empty())
return; return;
// Handle effects proceed this time // Handle effects proceed this time
for(ProcTriggeredList::iterator i = procTriggered.begin(); i != procTriggered.end(); ++i) for(ProcTriggeredList::iterator i = procTriggered.begin(); i != procTriggered.end(); ++i)
{ {
+1 -1
View File
@@ -1477,7 +1477,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
int32 CalculateSpellDamage(SpellEntry const* spellProto, uint8 effect_index, int32 basePoints, Unit const* target); int32 CalculateSpellDamage(SpellEntry const* spellProto, uint8 effect_index, int32 basePoints, Unit const* target);
int32 CalcSpellDuration(SpellEntry const* spellProto); int32 CalcSpellDuration(SpellEntry const* spellProto);
int32 ModSpellDuration(SpellEntry const* spellProto, uint8 effect_index, Unit const* target, int32 duration); int32 ModSpellDuration(SpellEntry const* spellProto, uint8 effect_index, Unit const* target, int32 duration);
void ModSpellCastTime(SpellEntry const* spellProto, int32 & castTime); void ModSpellCastTime(SpellEntry const* spellProto, int32 & castTime, Spell const * spell=NULL);
float CalculateLevelPenalty(SpellEntry const* spellProto) const; float CalculateLevelPenalty(SpellEntry const* spellProto) const;
void addFollower(FollowerReference* pRef) { m_FollowingRefManager.insertFirst(pRef); } void addFollower(FollowerReference* pRef) { m_FollowingRefManager.insertFirst(pRef); }