aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp15
-rw-r--r--src/server/game/World/World.cpp7
-rw-r--r--src/server/game/World/World.h5
-rw-r--r--src/server/worldserver/worldserver.conf.dist23
4 files changed, 50 insertions, 0 deletions
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index c30fa910f76..2dfe77287d4 100644
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -575,6 +575,10 @@ void Player::UpdateBlockPercentage()
value += GetTotalAuraModifier(SPELL_AURA_MOD_BLOCK_PERCENT);
// Increase from rating
value += GetRatingBonusValue(CR_BLOCK);
+
+ if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
+ value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_BLOCK) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_BLOCK) : value;
+
value = value < 0.0f ? 0.0f : value;
}
SetStatFloatValue(PLAYER_BLOCK_PERCENTAGE, value);
@@ -609,6 +613,10 @@ void Player::UpdateCritPercentage(WeaponAttackType attType)
float value = GetTotalPercentageModValue(modGroup) + GetRatingBonusValue(cr);
// Modify crit from weapon skill and maximized defense skill of same level victim difference
value += (int32(GetWeaponSkillValue(attType)) - int32(GetMaxSkillValueForLevel())) * 0.04f;
+
+ if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
+ value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) : value;
+
value = value < 0.0f ? 0.0f : value;
SetStatFloatValue(index, value);
}
@@ -700,6 +708,10 @@ void Player::UpdateParryPercentage()
nondiminishing += GetTotalAuraModifier(SPELL_AURA_MOD_PARRY_PERCENT);
// apply diminishing formula to diminishing parry chance
value = nondiminishing + diminishing * parry_cap[pclass] / (diminishing + parry_cap[pclass] * m_diminishing_k[pclass]);
+
+ if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
+ value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_PARRY) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_PARRY) : value;
+
value = value < 0.0f ? 0.0f : value;
}
SetStatFloatValue(PLAYER_PARRY_PERCENTAGE, value);
@@ -735,6 +747,9 @@ void Player::UpdateDodgePercentage()
uint32 pclass = getClass()-1;
float value = nondiminishing + (diminishing * dodge_cap[pclass] / (diminishing + dodge_cap[pclass] * m_diminishing_k[pclass]));
+ if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
+ value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_DODGE) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_DODGE) : value;
+
value = value < 0.0f ? 0.0f : value;
SetStatFloatValue(PLAYER_DODGE_PERCENTAGE, value);
}
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 9d2ee2eb2ba..645c14b8758 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1222,6 +1222,13 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_WINTERGRASP_NOBATTLETIME] = ConfigMgr::GetIntDefault("Wintergrasp.NoBattleTimer", 150);
m_int_configs[CONFIG_WINTERGRASP_RESTART_AFTER_CRASH] = ConfigMgr::GetIntDefault("Wintergrasp.CrashRestartTimer", 10);
+ // Stats limits
+ m_bool_configs[CONFIG_STATS_LIMITS_ENABLE] = ConfigMgr::GetBoolDefault("Stats.Limits.Enable", false);
+ m_float_configs[CONFIG_STATS_LIMITS_DODGE] = ConfigMgr::GetFloatDefault("Stats.Limits.Dodge", 95.0f);
+ m_float_configs[CONFIG_STATS_LIMITS_PARRY] = ConfigMgr::GetFloatDefault("Stats.Limits.Parry", 95.0f);
+ m_float_configs[CONFIG_STATS_LIMITS_BLOCK] = ConfigMgr::GetFloatDefault("Stats.Limits.Block", 95.0f);
+ m_float_configs[CONFIG_STATS_LIMITS_CRIT] = ConfigMgr::GetFloatDefault("Stats.Limits.Crit", 95.0f);
+
// call ScriptMgr if we're reloading the configuration
if (reload)
sScriptMgr->OnConfigLoad(reload);
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 984a1709ac8..12586ed4969 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -159,6 +159,7 @@ enum WorldBoolConfigs
CONFIG_WINTERGRASP_ENABLE,
CONFIG_UI_QUESTLEVELS_IN_DIALOGS, // Should we add quest levels to the title in the NPC dialogs?
CONFIG_EVENT_ANNOUNCE,
+ CONFIG_STATS_LIMITS_ENABLE,
BOOL_CONFIG_VALUE_COUNT
};
@@ -175,6 +176,10 @@ enum WorldFloatConfigs
CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS,
CONFIG_THREAT_RADIUS,
CONFIG_CHANCE_OF_GM_SURVEY,
+ CONFIG_STATS_LIMITS_DODGE,
+ CONFIG_STATS_LIMITS_PARRY,
+ CONFIG_STATS_LIMITS_BLOCK,
+ CONFIG_STATS_LIMITS_CRIT,
FLOAT_CONFIG_VALUE_COUNT
};
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index a9b09e5d94f..9577b3d841f 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -18,6 +18,7 @@
# GAME MASTER SETTINGS
# VISIBILITY AND DISTANCES
# SERVER RATES
+# STATS LIMITS
# AUTO BROADCAST
# BATTLEGROUND CONFIG
# BATTLEFIELD CONFIG
@@ -2004,6 +2005,28 @@ Die.Command.Mode = 1
###################################################################################################
###################################################################################################
+# STATS LIMITS
+#
+# Stats.Limits.Enable
+# Description: Enable or disable stats system
+# Default: 0 - Disabled
+
+Stats.Limits.Enable = 0
+
+#
+# Stats.Limit.[STAT]
+# Description: Set percentage limit for dodge, parry, block and crit rating
+# Default: 95.0 (95%)
+
+Stats.Limits.Dodge = 95.0
+Stats.Limits.Parry = 95.0
+Stats.Limits.Block = 95.0
+Stats.Limits.Crit = 95.0
+
+#
+###################################################################################################
+
+###################################################################################################
# AUTO BROADCAST
#
# AutoBroadcast.On