aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatan Shukry <matanshukry@gmail.com>2021-04-22 23:02:19 +0300
committerGitHub <noreply@github.com>2021-04-22 22:02:19 +0200
commit60df74933f0bf75865ba963b33c2c1bdd9cdefbd (patch)
tree2fa43546a87d6ab4e8526fb03953d470468b5280
parent8a452c3d105a50a81086dbb850514f63330efbe0 (diff)
Core/Spells: Removed extra health from feed pet (#26305)
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp16
-rw-r--r--src/server/game/Entities/Pet/Pet.h1
-rw-r--r--src/server/game/Spells/Spell.cpp4
-rw-r--r--src/server/game/Spells/SpellEffects.cpp19
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)