diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Pet/Pet.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Entities/Pet/Pet.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 19 |
4 files changed, 14 insertions, 26 deletions
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 0e32be435b4..36ae708e962 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1033,22 +1033,6 @@ bool Pet::HaveInDiet(ItemTemplate const* item) const return (diet & FoodMask) != 0; } -uint32 Pet::GetCurrentFoodBenefitLevel(uint32 itemlevel) const -{ - // -5 or greater food level - if (getLevel() <= itemlevel + 5) //possible to feed level 60 pet with level 55 level food for full effect - return 35000; - // -10..-6 - else if (getLevel() <= itemlevel + 10) //pure guess, but sounds good - return 17000; - // -14..-11 - else if (getLevel() <= itemlevel + 14) //level 55 food gets green on 70, makes sense to me - return 8000; - // -15 or less - else - return 0; //food too low level -} - void Pet::_LoadSpellCooldowns() { CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SPELL_COOLDOWN); diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index 09a6e0a8afe..05c937a2b21 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -88,7 +88,6 @@ class TC_GAME_API Pet : public Guardian void SetPetNextLevelExperience(uint32 xp) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetNextLevelExperience), xp); } void SynchronizeLevelWithOwner(); bool HaveInDiet(ItemTemplate const* item) const; - uint32 GetCurrentFoodBenefitLevel(uint32 itemlevel) const; void SetDuration(int32 dur) { m_duration = dur; } int32 GetDuration() const { return m_duration; } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index e4981010331..83720573430 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5429,8 +5429,8 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint if (!pet->HaveInDiet(foodItem->GetTemplate())) return SPELL_FAILED_WRONG_PET_FOOD; - if (!pet->GetCurrentFoodBenefitLevel(foodItem->GetTemplate()->GetBaseItemLevel())) - return SPELL_FAILED_FOOD_LOWLEVEL; + if (foodItem->GetTemplate()->GetBaseItemLevel() + 30 <= pet->getLevel()) + return SPELL_FAILED_FOOD_LOWLEVEL; if (m_caster->IsInCombat() || pet->IsInCombat()) return SPELL_FAILED_AFFECTING_COMBAT; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 06ee5111fd6..0e1d4149a06 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3790,19 +3790,24 @@ void Spell::EffectFeedPet(SpellEffIndex effIndex) if (!pet->IsAlive()) return; - int32 benefit = pet->GetCurrentFoodBenefitLevel(foodItem->GetTemplate()->GetBaseItemLevel()); - if (benefit <= 0) - return; - ExecuteLogEffectDestroyItem(effIndex, foodItem->GetEntry()); + int32 pct; + int32 levelDiff = int32(pet->getLevel()) - int32(foodItem->GetTemplate()->GetBaseItemLevel()); + if (levelDiff >= 30) + return; + else if (levelDiff >= 20) + pct = int32(12.5); // we can't pass double so keeping the cast here for future references + else if (levelDiff >= 10) + pct = 25; + else + pct = 50; + uint32 count = 1; player->DestroyItemCount(foodItem, count, true); /// @todo fix crash when a spell has two effects, both pointed at the same item target - CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, benefit); - m_caster->CastSpell(pet, effectInfo->TriggerSpell, args); + m_caster->CastSpell(pet, effectInfo->TriggerSpell, CastSpellExtraArgs(TRIGGERED_FULL_MASK)); } void Spell::EffectDismissPet(SpellEffIndex effIndex) |