*Mangos [7009] Fixed spell 6991 work.

*Also fix max power limits in some miscvalue checks.
*By VladimirMangos.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-01-02 15:49:28 -06:00
parent b3aa49cbaa
commit 21915dcd3b
4 changed files with 18 additions and 13 deletions
+8 -4
View File
@@ -541,6 +541,7 @@ void Spell::FillTargetMap()
case SPELL_EFFECT_ADD_FARSIGHT: case SPELL_EFFECT_ADD_FARSIGHT:
case SPELL_EFFECT_APPLY_GLYPH: case SPELL_EFFECT_APPLY_GLYPH:
case SPELL_EFFECT_STUCK: case SPELL_EFFECT_STUCK:
case SPELL_EFFECT_FEED_PET:
case SPELL_EFFECT_DESTROY_ALL_TOTEMS: case SPELL_EFFECT_DESTROY_ALL_TOTEMS:
tmpUnitMap.push_back(m_caster); tmpUnitMap.push_back(m_caster);
break; break;
@@ -551,7 +552,6 @@ void Spell::FillTargetMap()
/*case SPELL_EFFECT_ENCHANT_ITEM: /*case SPELL_EFFECT_ENCHANT_ITEM:
case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY: case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY:
case SPELL_EFFECT_DISENCHANT: case SPELL_EFFECT_DISENCHANT:
case SPELL_EFFECT_FEED_PET:
case SPELL_EFFECT_PROSPECTING: case SPELL_EFFECT_PROSPECTING:
case SPELL_EFFECT_MILLING: case SPELL_EFFECT_MILLING:
if(m_targets.getItemTarget()) if(m_targets.getItemTarget())
@@ -3870,7 +3870,11 @@ uint8 Spell::CanCast(bool strict)
} }
case SPELL_EFFECT_FEED_PET: case SPELL_EFFECT_FEED_PET:
{ {
if (m_caster->GetTypeId() != TYPEID_PLAYER || !m_targets.getItemTarget() ) if (m_caster->GetTypeId() != TYPEID_PLAYER)
return SPELL_FAILED_BAD_TARGETS;
Item* foodItem = m_targets.getItemTarget();
if(!foodItem)
return SPELL_FAILED_BAD_TARGETS; return SPELL_FAILED_BAD_TARGETS;
Pet* pet = m_caster->GetPet(); Pet* pet = m_caster->GetPet();
@@ -3878,10 +3882,10 @@ uint8 Spell::CanCast(bool strict)
if(!pet) if(!pet)
return SPELL_FAILED_NO_PET; return SPELL_FAILED_NO_PET;
if(!pet->HaveInDiet(m_targets.getItemTarget()->GetProto())) if(!pet->HaveInDiet(foodItem->GetProto()))
return SPELL_FAILED_WRONG_PET_FOOD; return SPELL_FAILED_WRONG_PET_FOOD;
if(!pet->GetCurrentFoodBenefitLevel(m_targets.getItemTarget()->GetProto()->ItemLevel)) if(!pet->GetCurrentFoodBenefitLevel(foodItem->GetProto()->ItemLevel))
return SPELL_FAILED_FOOD_LOWLEVEL; return SPELL_FAILED_FOOD_LOWLEVEL;
if(m_caster->isInCombat() || pet->isInCombat()) if(m_caster->isInCombat() || pet->isInCombat())
+2 -2
View File
@@ -5894,7 +5894,7 @@ void Aura::PeriodicTick()
sLog.outDetail("PeriodicTick: %u (TypeId: %u) power leech of %u (TypeId: %u) for %u dmg inflicted by %u", sLog.outDetail("PeriodicTick: %u (TypeId: %u) power leech of %u (TypeId: %u) for %u dmg inflicted by %u",
GUID_LOPART(GetCasterGUID()), GuidHigh2TypeId(GUID_HIPART(GetCasterGUID())), m_target->GetGUIDLow(), m_target->GetTypeId(), pdamage, GetId()); GUID_LOPART(GetCasterGUID()), GuidHigh2TypeId(GUID_HIPART(GetCasterGUID())), m_target->GetGUIDLow(), m_target->GetTypeId(), pdamage, GetId());
if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue > 4) if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue >= MAX_POWERS)
break; break;
Powers power = Powers(m_modifier.m_miscvalue); Powers power = Powers(m_modifier.m_miscvalue);
@@ -5956,7 +5956,7 @@ void Aura::PeriodicTick()
sLog.outDetail("PeriodicTick: %u (TypeId: %u) energize %u (TypeId: %u) for %u dmg inflicted by %u", sLog.outDetail("PeriodicTick: %u (TypeId: %u) energize %u (TypeId: %u) for %u dmg inflicted by %u",
GUID_LOPART(GetCasterGUID()), GuidHigh2TypeId(GUID_HIPART(GetCasterGUID())), m_target->GetGUIDLow(), m_target->GetTypeId(), pdamage, GetId()); GUID_LOPART(GetCasterGUID()), GuidHigh2TypeId(GUID_HIPART(GetCasterGUID())), m_target->GetGUIDLow(), m_target->GetTypeId(), pdamage, GetId());
if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue > 4) if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue >= MAX_POWERS)
break; break;
Powers power = Powers(m_modifier.m_miscvalue); Powers power = Powers(m_modifier.m_miscvalue);
+7 -6
View File
@@ -2704,6 +2704,8 @@ void Spell::EffectEnergize(uint32 i)
if(m_spellInfo->EffectMiscValue[i] < 0 || m_spellInfo->EffectMiscValue[i] >= MAX_POWERS) if(m_spellInfo->EffectMiscValue[i] < 0 || m_spellInfo->EffectMiscValue[i] >= MAX_POWERS)
return; return;
Powers power = Powers(m_spellInfo->EffectMiscValue[i]);
// Some level depends spells // Some level depends spells
int multiplier = 0; int multiplier = 0;
int level_diff = 0; int level_diff = 0;
@@ -2734,8 +2736,6 @@ void Spell::EffectEnergize(uint32 i)
if(damage < 0) if(damage < 0)
return; return;
Powers power = Powers(m_spellInfo->EffectMiscValue[i]);
if(unitTarget->GetMaxPower(power) == 0) if(unitTarget->GetMaxPower(power) == 0)
return; return;
@@ -5569,7 +5569,8 @@ void Spell::EffectFeedPet(uint32 i)
Player *_player = (Player*)m_caster; Player *_player = (Player*)m_caster;
if(!itemTarget) Item* foodItem = m_targets.getItemTarget();
if(!foodItem)
return; return;
Pet *pet = _player->GetPet(); Pet *pet = _player->GetPet();
@@ -5579,15 +5580,15 @@ void Spell::EffectFeedPet(uint32 i)
if(!pet->isAlive()) if(!pet->isAlive())
return; return;
int32 benefit = pet->GetCurrentFoodBenefitLevel(itemTarget->GetProto()->ItemLevel); int32 benefit = pet->GetCurrentFoodBenefitLevel(foodItem->GetProto()->ItemLevel);
if(benefit <= 0) if(benefit <= 0)
return; return;
uint32 count = 1; uint32 count = 1;
_player->DestroyItemCount(itemTarget,count,true); _player->DestroyItemCount(foodItem,count,true);
// TODO: fix crash when a spell has two effects, both pointed at the same item target // TODO: fix crash when a spell has two effects, both pointed at the same item target
m_caster->CastCustomSpell(m_caster,m_spellInfo->EffectTriggerSpell[i],&benefit,NULL,NULL,true); m_caster->CastCustomSpell(pet,m_spellInfo->EffectTriggerSpell[i],&benefit,NULL,NULL,true);
} }
void Spell::EffectDismissPet(uint32 /*i*/) void Spell::EffectDismissPet(uint32 /*i*/)
+1 -1
View File
@@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "7008" #define REVISION_NR "7009"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__