diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 283a1d4d6..40d1269ec 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -23,8 +23,6 @@ #include "InstanceScript.h" #include "ArenaSpectator.h" -#define PET_XP_FACTOR 0.05f - Pet::Pet(Player* owner, PetType type) : Guardian(nullptr, owner ? owner->GetGUID() : 0, true), m_usedTalentCount(0), m_removed(false), m_owner(owner), m_happinessTimer(PET_LOSE_HAPPINES_INTERVAL), m_petType(type), m_duration(0), @@ -585,6 +583,8 @@ void Pet::GivePetXP(uint32 xp) if (getPetType() != HUNTER_PET) return; + xp *= sWorld->getRate(RATE_XP_PET); + if (xp < 1) return; @@ -625,7 +625,7 @@ void Pet::GivePetLevel(uint8 level) if (getPetType() == HUNTER_PET) { SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0); - SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(level)*PET_XP_FACTOR)); + SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(level)*sWorld->getRate(RATE_XP_PET_NEXT_LEVEL))); } InitStatsForLevel(level); @@ -694,7 +694,7 @@ bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phas setPowerType(POWER_FOCUS); SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, 0); SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0); - SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(getLevel() + 1)*PET_XP_FACTOR)); + SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(getLevel() + 1)* sWorld->getRate(RATE_XP_PET_NEXT_LEVEL))); SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); if (cinfo->type == CREATURE_TYPE_BEAST) @@ -834,7 +834,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) { SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4))); SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4))); - SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(petlevel)*PET_XP_FACTOR)); + SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(petlevel)* sWorld->getRate(RATE_XP_PET_NEXT_LEVEL))); break; } case SUMMON_PET: diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 46b77d102..bfbe4f08f 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -502,6 +502,8 @@ void World::LoadConfigSettings(bool reload) rate_values[RATE_XP_BG_KILL] = sConfigMgr->GetFloatDefault("Rate.XP.BattlegroundKill", 1.0f); rate_values[RATE_XP_QUEST] = sConfigMgr->GetFloatDefault("Rate.XP.Quest", 1.0f); rate_values[RATE_XP_EXPLORE] = sConfigMgr->GetFloatDefault("Rate.XP.Explore", 1.0f); + rate_values[RATE_XP_PET] = sConfigMgr->GetFloatDefault("Rate.XP.Pet", 1.0f); + rate_values[RATE_XP_PET_NEXT_LEVEL] = sConfigMgr->GetFloatDefault("Rate.Pet.LevelXP", 0.05f); rate_values[RATE_REPAIRCOST] = sConfigMgr->GetFloatDefault("Rate.RepairCost", 1.0f); rate_values[RATE_SELLVALUE_ITEM_POOR] = sConfigMgr->GetFloatDefault("Rate.SellValue.Item.Poor", 1.0f); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index db8f832ef..2b7973112 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -420,6 +420,8 @@ enum Rates RATE_XP_BG_KILL, RATE_XP_QUEST, RATE_XP_EXPLORE, + RATE_XP_PET, + RATE_XP_PET_NEXT_LEVEL, RATE_REPAIRCOST, RATE_REPUTATION_GAIN, RATE_REPUTATION_LOWLEVEL_KILL, diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index f781607e7..bad2aa941 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2392,14 +2392,17 @@ Rate.Drop.Item.ReferencedAmount = 1 # Rate.XP.Kill # Rate.XP.Quest # Rate.XP.Explore +# Rate.XP.Pet # Description: Experience rates (outside battleground) # Default: 1 - (Rate.XP.Kill) # 1 - (Rate.XP.Quest) # 1 - (Rate.XP.Explore) +# 1 - (Rate.XP.Pet) Rate.XP.Kill = 1 Rate.XP.Quest = 1 Rate.XP.Explore = 1 +Rate.XP.Pet = 1 # # Rate.XP.BattlegroundKill @@ -2516,6 +2519,14 @@ Rate.MoveSpeed = 1 Rate.InstanceResetTime = 1 +# +# Rate.Pet.LevelXP +# Description: Modifies the amount of experience required to level up a pet. +# The lower the rate the less experience is required. +# Default: 0.05 +# +Rate.Pet.LevelXP = 0.05 + # # SkillGain.Crafting # SkillGain.Defense