mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[7009] Fixed spell 6991 work.
Also fix max power limits in some miscvalue checks.
This commit is contained in:
parent
dc8649a86a
commit
c88dfbccb3
4 changed files with 18 additions and 13 deletions
|
|
@ -577,6 +577,7 @@ void Spell::FillTargetMap()
|
|||
case SPELL_EFFECT_ADD_FARSIGHT:
|
||||
case SPELL_EFFECT_APPLY_GLYPH:
|
||||
case SPELL_EFFECT_STUCK:
|
||||
case SPELL_EFFECT_FEED_PET:
|
||||
case SPELL_EFFECT_DESTROY_ALL_TOTEMS:
|
||||
case SPELL_EFFECT_SUMMON_DEMON:
|
||||
case SPELL_EFFECT_SKILL:
|
||||
|
|
@ -589,7 +590,6 @@ void Spell::FillTargetMap()
|
|||
case SPELL_EFFECT_ENCHANT_ITEM:
|
||||
case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY:
|
||||
case SPELL_EFFECT_DISENCHANT:
|
||||
case SPELL_EFFECT_FEED_PET:
|
||||
case SPELL_EFFECT_PROSPECTING:
|
||||
case SPELL_EFFECT_MILLING:
|
||||
if(m_targets.getItemTarget())
|
||||
|
|
@ -3916,7 +3916,11 @@ uint8 Spell::CanCast(bool strict)
|
|||
}
|
||||
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;
|
||||
|
||||
Pet* pet = m_caster->GetPet();
|
||||
|
|
@ -3924,10 +3928,10 @@ uint8 Spell::CanCast(bool strict)
|
|||
if(!pet)
|
||||
return SPELL_FAILED_NO_PET;
|
||||
|
||||
if(!pet->HaveInDiet(m_targets.getItemTarget()->GetProto()))
|
||||
if(!pet->HaveInDiet(foodItem->GetProto()))
|
||||
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;
|
||||
|
||||
if(m_caster->isInCombat() || pet->isInCombat())
|
||||
|
|
|
|||
|
|
@ -6029,7 +6029,7 @@ void Aura::PeriodicTick()
|
|||
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());
|
||||
|
||||
if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue > 4)
|
||||
if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue >= MAX_POWERS)
|
||||
break;
|
||||
|
||||
Powers power = Powers(m_modifier.m_miscvalue);
|
||||
|
|
@ -6084,7 +6084,7 @@ void Aura::PeriodicTick()
|
|||
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());
|
||||
|
||||
if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue > 4)
|
||||
if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue >= MAX_POWERS)
|
||||
break;
|
||||
|
||||
Powers power = Powers(m_modifier.m_miscvalue);
|
||||
|
|
|
|||
|
|
@ -2688,6 +2688,8 @@ void Spell::EffectEnergize(uint32 i)
|
|||
if(m_spellInfo->EffectMiscValue[i] < 0 || m_spellInfo->EffectMiscValue[i] >= MAX_POWERS)
|
||||
return;
|
||||
|
||||
Powers power = Powers(m_spellInfo->EffectMiscValue[i]);
|
||||
|
||||
// Some level depends spells
|
||||
int multiplier = 0;
|
||||
int level_diff = 0;
|
||||
|
|
@ -2718,8 +2720,6 @@ void Spell::EffectEnergize(uint32 i)
|
|||
if(damage < 0)
|
||||
return;
|
||||
|
||||
Powers power = Powers(m_spellInfo->EffectMiscValue[i]);
|
||||
|
||||
if(unitTarget->GetMaxPower(power) == 0)
|
||||
return;
|
||||
|
||||
|
|
@ -5402,7 +5402,8 @@ void Spell::EffectFeedPet(uint32 i)
|
|||
|
||||
Player *_player = (Player*)m_caster;
|
||||
|
||||
if(!itemTarget)
|
||||
Item* foodItem = m_targets.getItemTarget();
|
||||
if(!foodItem)
|
||||
return;
|
||||
|
||||
Pet *pet = _player->GetPet();
|
||||
|
|
@ -5412,15 +5413,15 @@ void Spell::EffectFeedPet(uint32 i)
|
|||
if(!pet->isAlive())
|
||||
return;
|
||||
|
||||
int32 benefit = pet->GetCurrentFoodBenefitLevel(itemTarget->GetProto()->ItemLevel);
|
||||
int32 benefit = pet->GetCurrentFoodBenefitLevel(foodItem->GetProto()->ItemLevel);
|
||||
if(benefit <= 0)
|
||||
return;
|
||||
|
||||
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
|
||||
|
||||
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*/)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "7008"
|
||||
#define REVISION_NR "7009"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue