*Fix dk's rune/runic power issues.

--HG--
branch : trunk
This commit is contained in:
QAston
2009-03-21 13:15:56 +01:00
parent 79d27da9ec
commit 8035f4d246
2 changed files with 29 additions and 45 deletions
+1 -2
View File
@@ -140,12 +140,11 @@ enum Powers
POWER_HAPPINESS = 4, POWER_HAPPINESS = 4,
POWER_RUNE = 5, POWER_RUNE = 5,
POWER_RUNIC_POWER = 6, POWER_RUNIC_POWER = 6,
MAX_POWERS = 7,
POWER_ALL = 127, // default for class? POWER_ALL = 127, // default for class?
POWER_HEALTH = 0xFFFFFFFE // (-2 as signed value) POWER_HEALTH = 0xFFFFFFFE // (-2 as signed value)
}; };
#define MAX_POWERS 7
enum SpellSchools enum SpellSchools
{ {
SPELL_SCHOOL_NORMAL = 0, SPELL_SCHOOL_NORMAL = 0,
+27 -42
View File
@@ -2223,20 +2223,9 @@ void Spell::cast(bool skipCheck)
if(m_caster->GetTypeId() != TYPEID_PLAYER && m_targets.getUnitTarget() && m_targets.getUnitTarget() != m_caster) if(m_caster->GetTypeId() != TYPEID_PLAYER && m_targets.getUnitTarget() && m_targets.getUnitTarget() != m_caster)
m_caster->SetInFront(m_targets.getUnitTarget()); m_caster->SetInFront(m_targets.getUnitTarget());
if(!m_IsTriggeredSpell)
{
SpellCastResult castResult = CheckPower();
if(castResult != SPELL_CAST_OK)
{
SendCastResult(castResult);
finish(false);
SetExecutedCurrently(false);
return;
}
}
// triggered cast called from Spell::prepare where it was already checked // triggered cast called from Spell::prepare where it was already checked
if(!skipCheck) if(!m_IsTriggeredSpell || !skipCheck)
{ {
SpellCastResult castResult = CheckCast(false); SpellCastResult castResult = CheckCast(false);
if(castResult != SPELL_CAST_OK) if(castResult != SPELL_CAST_OK)
@@ -2280,20 +2269,6 @@ void Spell::cast(bool skipCheck)
((Player*)m_caster)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, m_spellInfo->Id); ((Player*)m_caster)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, m_spellInfo->Id);
} }
if(!m_IsTriggeredSpell)
{
//TakePower();
TakeReagents(); // we must remove reagents before HandleEffects to allow place crafted item in same slot
}
// CAST SPELL
SendSpellCooldown();
//SendCastResult(castResult);
SendSpellGo(); // we must send smsg_spell_go packet before m_castItem delete in TakeCastItem()...
if(m_customAttr & SPELL_ATTR_CU_DIRECT_DAMAGE)
CalculateDamageDoneForAllTargets();
//are there any spells need to be triggered after hit? //are there any spells need to be triggered after hit?
// handle SPELL_AURA_ADD_TARGET_TRIGGER auras // handle SPELL_AURA_ADD_TARGET_TRIGGER auras
Unit::AuraList const& targetTriggers = m_caster->GetAurasByType(SPELL_AURA_ADD_TARGET_TRIGGER); Unit::AuraList const& targetTriggers = m_caster->GetAurasByType(SPELL_AURA_ADD_TARGET_TRIGGER);
@@ -2311,6 +2286,20 @@ void Spell::cast(bool skipCheck)
} }
} }
if(!m_IsTriggeredSpell)
{
TakePower();
TakeReagents(); // we must remove reagents before HandleEffects to allow place crafted item in same slot
}
// CAST SPELL
SendSpellCooldown();
//SendCastResult(castResult);
SendSpellGo(); // we must send smsg_spell_go packet before m_castItem delete in TakeCastItem()...
if(m_customAttr & SPELL_ATTR_CU_DIRECT_DAMAGE)
CalculateDamageDoneForAllTargets();
if(m_customAttr & SPELL_ATTR_CU_CHARGE) if(m_customAttr & SPELL_ATTR_CU_CHARGE)
EffectCharge(0); EffectCharge(0);
@@ -2332,12 +2321,6 @@ void Spell::cast(bool skipCheck)
handle_immediate(); handle_immediate();
} }
// combo points should not be taken before SPELL_AURA_ADD_TARGET_TRIGGER auras are handled
if(!m_IsTriggeredSpell)
{
TakePower();
}
if(m_customAttr & SPELL_ATTR_CU_LINK_CAST) if(m_customAttr & SPELL_ATTR_CU_LINK_CAST)
{ {
if(const std::vector<int32> *spell_triggered = spellmgr.GetSpellLinked(m_spellInfo->Id)) if(const std::vector<int32> *spell_triggered = spellmgr.GetSpellLinked(m_spellInfo->Id))
@@ -3245,7 +3228,7 @@ void Spell::TakeCastItem()
void Spell::TakePower() void Spell::TakePower()
{ {
if(m_CastItem || m_triggeredByAuraSpell || !m_powerCost) if(m_CastItem || m_triggeredByAuraSpell)
return; return;
bool hit = true; bool hit = true;
@@ -3270,6 +3253,17 @@ void Spell::TakePower()
((Player*)m_caster)->ClearComboPoints(); ((Player*)m_caster)->ClearComboPoints();
} }
Powers powerType = Powers(m_spellInfo->powerType);
if(powerType == POWER_RUNE)
{
TakeRunePower();
return;
}
if (!m_powerCost)
return;
// health as power used // health as power used
if(m_spellInfo->powerType == POWER_HEALTH) if(m_spellInfo->powerType == POWER_HEALTH)
{ {
@@ -3283,14 +3277,6 @@ void Spell::TakePower()
return; return;
} }
Powers powerType = Powers(m_spellInfo->powerType);
if(powerType == POWER_RUNE)
{
TakeRunePower();
return;
}
if(hit) if(hit)
m_caster->ModifyPower(powerType, -m_powerCost); m_caster->ModifyPower(powerType, -m_powerCost);
else else
@@ -3386,7 +3372,6 @@ void Spell::TakeRunePower()
if(!src || (src->NoRuneCost() && src->NoRunicPowerGain())) if(!src || (src->NoRuneCost() && src->NoRunicPowerGain()))
return; return;
m_runesState = plr->GetRunesState(); // store previous state m_runesState = plr->GetRunesState(); // store previous state
int32 runeCost[NUM_RUNE_TYPES]; // blood, frost, unholy, death int32 runeCost[NUM_RUNE_TYPES]; // blood, frost, unholy, death