diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index 66e5b0636..b336840c6 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -2425,6 +2425,13 @@ Rate.InstanceResetTime = 1 # Rate.Pet.LevelXP = 0.05 +# +# WaterBreath.Timer +# Description: The timer for player's breath underwater in minutes +# Default: 3 +# +WaterBreath.Timer = 3 + # # SkillGain.Crafting # SkillGain.Defense diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 835fca061..ac9a13502 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -813,7 +813,7 @@ int32 Player::getMaxTimer(MirrorTimerType timer) { if (!IsAlive() || HasAuraType(SPELL_AURA_WATER_BREATHING) || GetSession()->GetSecurity() >= AccountTypes(sWorld->getIntConfig(CONFIG_DISABLE_BREATHING))) return DISABLED_MIRROR_TIMER; - int32 UnderWaterTime = 3 * MINUTE * IN_MILLISECONDS; + int32 UnderWaterTime = static_cast(sWorld->getFloatConfig(CONFIG_WATER_BREATH_TIMER) * MINUTE * IN_MILLISECONDS); AuraEffectList const& mModWaterBreathing = GetAuraEffectsByType(SPELL_AURA_MOD_WATER_BREATHING); for (AuraEffectList::const_iterator i = mModWaterBreathing.begin(); i != mModWaterBreathing.end(); ++i) AddPct(UnderWaterTime, (*i)->GetAmount()); diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index 6c87e64f0..48ee83aa9 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -194,6 +194,7 @@ enum WorldFloatConfigs CONFIG_ARENA_WIN_RATING_MODIFIER_2, CONFIG_ARENA_LOSE_RATING_MODIFIER, CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER, + CONFIG_WATER_BREATH_TIMER, FLOAT_CONFIG_VALUE_COUNT }; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 4a1087a4b..df402815f 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1185,6 +1185,13 @@ void World::LoadConfigSettings(bool reload) m_bool_configs[CONFIG_OFFHAND_CHECK_AT_SPELL_UNLEARN] = sConfigMgr->GetOption("OffhandCheckAtSpellUnlearn", true); m_int_configs[CONFIG_CREATURE_STOP_FOR_PLAYER] = sConfigMgr->GetOption("Creature.MovingStopTimeForPlayer", 3 * MINUTE * IN_MILLISECONDS); + m_float_configs[CONFIG_WATER_BREATH_TIMER] = sConfigMgr->GetOption("WaterBreath.Timer", 3.0f); + if (m_float_configs[CONFIG_WATER_BREATH_TIMER] <= 0) + { + LOG_ERROR("server.loading", "WaterBreath.Timer ({}) must be > 0. Using 3 instead.", m_float_configs[CONFIG_WATER_BREATH_TIMER]); + m_float_configs[CONFIG_WATER_BREATH_TIMER] = 3; + } + if (int32 clientCacheId = sConfigMgr->GetOption("ClientCacheVersion", 0)) { // overwrite DB/old value