mirror of
https://github.com/Tereneckla/mod-profession-experience.git
synced 2026-01-13 00:58:38 +00:00
xp multiplicator with smooth exponential curve
This commit is contained in:
@@ -33,18 +33,28 @@ ProfessionExperience.MultOrange = 1.25
|
|||||||
# ProfessionExperience.MultGrandMaster 376-450
|
# ProfessionExperience.MultGrandMaster 376-450
|
||||||
# Description: Multiplicator to experience when using a skill in this skill range
|
# Description: Multiplicator to experience when using a skill in this skill range
|
||||||
# Default: 1.0 - (ProfessionExperience.MultApprentice)
|
# Default: 1.0 - (ProfessionExperience.MultApprentice)
|
||||||
# 2.0 - (ProfessionExperience.MultJourneyman)
|
# 1.0 - (ProfessionExperience.MultJourneyman)
|
||||||
# 3.0 - (ProfessionExperience.MultExpert)
|
# 1.0 - (ProfessionExperience.MultExpert)
|
||||||
# 4.0 - (ProfessionExperience.MultArtisan)
|
# 1.0 - (ProfessionExperience.MultArtisan)
|
||||||
# 5.0 - (ProfessionExperience.MultMaster)
|
# 1.0 - (ProfessionExperience.MultMaster)
|
||||||
# 6.0 - (ProfessionExperience.MultGrandMaster)
|
# 1.0 - (ProfessionExperience.MultGrandMaster)
|
||||||
|
|
||||||
ProfessionExperience.MultApprentice = 1.0
|
ProfessionExperience.MultApprentice = 1.0
|
||||||
ProfessionExperience.MultJourneyman = 2.0
|
ProfessionExperience.MultJourneyman = 1.0
|
||||||
ProfessionExperience.MultExpert = 3.0
|
ProfessionExperience.MultExpert = 1.0
|
||||||
ProfessionExperience.MultArtisan = 4.0
|
ProfessionExperience.MultArtisan = 1.0
|
||||||
ProfessionExperience.MultMaster = 5.0
|
ProfessionExperience.MultMaster = 1.0
|
||||||
ProfessionExperience.MultGrandMaster = 6.0
|
ProfessionExperience.MultGrandMaster = 1.0
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# ProfessionExperience.MultCurve
|
||||||
|
# Description: Multiplicator to Experience applied as an exponential curve. Formula is "xp x mult ^ (minSkill/450).
|
||||||
|
# Close to 1 at skill 1. Square root at skill 225. Values below 1.0 apply a penalty at higher level instead.
|
||||||
|
# Default: 5.0
|
||||||
|
# Disabled: 0.0
|
||||||
|
|
||||||
|
ProfessionExperience.MultCurve = 5.0
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ enum class PEConfig
|
|||||||
MULT_ARTISAN,
|
MULT_ARTISAN,
|
||||||
MULT_MASTER,
|
MULT_MASTER,
|
||||||
MULT_GRANDMASTER,
|
MULT_GRANDMASTER,
|
||||||
|
MULT_CURVE,
|
||||||
|
|
||||||
NUM_CONFIGS,
|
NUM_CONFIGS,
|
||||||
};
|
};
|
||||||
@@ -72,11 +73,12 @@ public:
|
|||||||
SetConfigValue<float>(PEConfig::MULT_ORANGE, "ProfessionExperience.MultOrange", 1.25f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
SetConfigValue<float>(PEConfig::MULT_ORANGE, "ProfessionExperience.MultOrange", 1.25f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
|
|
||||||
SetConfigValue<float>(PEConfig::MULT_APPRENTICE, "ProfessionExperience.MultApprentice", 1.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
SetConfigValue<float>(PEConfig::MULT_APPRENTICE, "ProfessionExperience.MultApprentice", 1.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
SetConfigValue<float>(PEConfig::MULT_JOURNEYMAN, "ProfessionExperience.MultJourneyman", 2.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
SetConfigValue<float>(PEConfig::MULT_JOURNEYMAN, "ProfessionExperience.MultJourneyman", 1.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
SetConfigValue<float>(PEConfig::MULT_EXPERT, "ProfessionExperience.MultExpert", 3.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
SetConfigValue<float>(PEConfig::MULT_EXPERT, "ProfessionExperience.MultExpert", 1.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
SetConfigValue<float>(PEConfig::MULT_ARTISAN, "ProfessionExperience.MultArtisan", 4.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
SetConfigValue<float>(PEConfig::MULT_ARTISAN, "ProfessionExperience.MultArtisan", 1.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
SetConfigValue<float>(PEConfig::MULT_MASTER, "ProfessionExperience.MultMaster", 5.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
SetConfigValue<float>(PEConfig::MULT_MASTER, "ProfessionExperience.MultMaster", 1.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
SetConfigValue<float>(PEConfig::MULT_GRANDMASTER,"ProfessionExperience.MultGrandMaster",6.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
SetConfigValue<float>(PEConfig::MULT_GRANDMASTER,"ProfessionExperience.MultGrandMaster",1.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
|
SetConfigValue<float>(PEConfig::MULT_CURVE, "ProfessionExperience.MultCurve", 5.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -94,7 +96,7 @@ RewardExperienceScript() : PlayerScript("RewardExperienceScript", {
|
|||||||
bool OnPlayerUpdateFishingSkill(Player* player, int32 skill, int32 zone_skill, int32 /*chance*/, int32 /*roll*/) override
|
bool OnPlayerUpdateFishingSkill(Player* player, int32 skill, int32 zone_skill, int32 /*chance*/, int32 /*roll*/) override
|
||||||
{
|
{
|
||||||
if (float xpFactor = peConfigData.GetConfigValue<float>(PEConfig::FISHING_EXPERIENCE))
|
if (float xpFactor = peConfigData.GetConfigValue<float>(PEConfig::FISHING_EXPERIENCE))
|
||||||
RewardXP(player, skill, zone_skill + 100, zone_skill + 50, zone_skill + 25, xpFactor);
|
RewardXP(player, skill, zone_skill + 100, zone_skill + 50, zone_skill + 25, zone_skill, xpFactor);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -121,7 +123,7 @@ RewardExperienceScript() : PlayerScript("RewardExperienceScript", {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (float xpFactor = peConfigData.GetConfigValue<float>(experienceSetting))
|
if (float xpFactor = peConfigData.GetConfigValue<float>(experienceSetting))
|
||||||
RewardXP(player, currentLevel, gray, green, yellow, xpFactor);
|
RewardXP(player, currentLevel, gray, green, yellow, yellow -25, xpFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnPlayerUpdateCraftingSkill(Player *player, SkillLineAbilityEntry const* skill, uint32 currentLevel, uint32& /*gain*/) override
|
void OnPlayerUpdateCraftingSkill(Player *player, SkillLineAbilityEntry const* skill, uint32 currentLevel, uint32& /*gain*/) override
|
||||||
@@ -173,11 +175,12 @@ RewardExperienceScript() : PlayerScript("RewardExperienceScript", {
|
|||||||
uint32 gray = skill->TrivialSkillLineRankHigh;
|
uint32 gray = skill->TrivialSkillLineRankHigh;
|
||||||
uint32 green = (skill->TrivialSkillLineRankHigh + skill->TrivialSkillLineRankLow) / 2;
|
uint32 green = (skill->TrivialSkillLineRankHigh + skill->TrivialSkillLineRankLow) / 2;
|
||||||
uint32 yellow = skill->TrivialSkillLineRankLow;
|
uint32 yellow = skill->TrivialSkillLineRankLow;
|
||||||
RewardXP(player, currentLevel, gray, green, yellow, xpFactor);
|
uint32 min = skill->MinSkillLineRank;
|
||||||
|
RewardXP(player, currentLevel, gray, green, yellow, min, xpFactor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RewardXP(Player* player, uint32 currentLevel, uint32 gray, uint32 green, uint32 yellow, float xpFraction)
|
void RewardXP(Player* player, uint32 currentLevel, uint32 gray, uint32 green, uint32 yellow, uint32 minSkill, float xpFraction)
|
||||||
{
|
{
|
||||||
uint32 xp = player->GetUInt32Value(PLAYER_NEXT_LEVEL_XP) * xpFraction;
|
uint32 xp = player->GetUInt32Value(PLAYER_NEXT_LEVEL_XP) * xpFraction;
|
||||||
if (currentLevel >= gray)
|
if (currentLevel >= gray)
|
||||||
@@ -189,19 +192,22 @@ RewardExperienceScript() : PlayerScript("RewardExperienceScript", {
|
|||||||
else
|
else
|
||||||
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_ORANGE);
|
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_ORANGE);
|
||||||
|
|
||||||
if (gray > 375)
|
if (minSkill > 375)
|
||||||
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_GRANDMASTER);
|
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_GRANDMASTER);
|
||||||
else if (gray > 300)
|
else if (minSkill > 300)
|
||||||
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_MASTER);
|
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_MASTER);
|
||||||
else if (gray > 225)
|
else if (minSkill > 225)
|
||||||
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_ARTISAN);
|
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_ARTISAN);
|
||||||
else if (gray > 150)
|
else if (minSkill > 150)
|
||||||
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_EXPERT);
|
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_EXPERT);
|
||||||
else if (gray > 75)
|
else if (minSkill > 75)
|
||||||
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_JOURNEYMAN);
|
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_JOURNEYMAN);
|
||||||
else
|
else
|
||||||
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_APPRENTICE);
|
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_APPRENTICE);
|
||||||
|
|
||||||
|
if (float curve = peConfigData.GetConfigValue<float>(PEConfig::MULT_CURVE))
|
||||||
|
xp = xp * pow(curve,(minSkill/450));
|
||||||
|
|
||||||
player->GiveXP(xp, nullptr);
|
player->GiveXP(xp, nullptr);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user