diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index f3754ca07..0041bf486 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -2045,11 +2045,18 @@ WaterBreath.Timer = 180000 EnableLowLevelRegenBoost = 1 # -# Rate.MoveSpeed -# Description: Movement speed rate. +# Rate.MoveSpeed.Player +# Description: Movement speed rate for players. # Default: 1 -Rate.MoveSpeed = 1 +Rate.MoveSpeed.Player = 1 + +# +# Rate.MoveSpeed.NPC +# Description: Movement speed rate for NPCs. +# Default: 1 + +Rate.MoveSpeed.NPC = 1 # # Rate.Damage.Fall diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index 6bae57661..ef64ee73e 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -517,7 +517,8 @@ enum Rates RATE_DURABILITY_LOSS_PARRY, RATE_DURABILITY_LOSS_ABSORB, RATE_DURABILITY_LOSS_BLOCK, - RATE_MOVESPEED, + RATE_MOVESPEED_PLAYER, + RATE_MOVESPEED_NPC, RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE, RATE_MISS_CHANCE_MULTIPLIER_TARGET_PLAYER, MAX_RATES diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 01aebe618..e04627c0a 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -575,13 +575,24 @@ void World::LoadConfigSettings(bool reload) LOG_ERROR("server.loading", "Rate.Talent.Pet ({}) must be > 0. Using 1 instead.", _rate_values[RATE_TALENT_PET]); _rate_values[RATE_TALENT_PET] = 1.0f; } - _rate_values[RATE_MOVESPEED] = sConfigMgr->GetOption("Rate.MoveSpeed", 1.0f); - if (_rate_values[RATE_MOVESPEED] < 0) + // Controls Player movespeed rate. + _rate_values[RATE_MOVESPEED_PLAYER] = sConfigMgr->GetOption("Rate.MoveSpeed.Player", 1.0f); + if (_rate_values[RATE_MOVESPEED_PLAYER] < 0) { - LOG_ERROR("server.loading", "Rate.MoveSpeed ({}) must be > 0. Using 1 instead.", _rate_values[RATE_MOVESPEED]); - _rate_values[RATE_MOVESPEED] = 1.0f; + LOG_ERROR("server.loading", "Rate.MoveSpeed.Player ({}) must be > 0. Using 1 instead.", _rate_values[RATE_MOVESPEED_PLAYER]); + _rate_values[RATE_MOVESPEED_PLAYER] = 1.0f; } - for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) playerBaseMoveSpeed[i] = baseMoveSpeed[i] * _rate_values[RATE_MOVESPEED]; + for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) playerBaseMoveSpeed[i] = baseMoveSpeed[i] * _rate_values[RATE_MOVESPEED_PLAYER]; + + // Controls all npc movespeed rate. + _rate_values[RATE_MOVESPEED_NPC] = sConfigMgr->GetOption("Rate.MoveSpeed.NPC", 1.0f); + if (_rate_values[RATE_MOVESPEED_NPC] < 0) + { + LOG_ERROR("server.loading", "Rate.MoveSpeed.NPC ({}) must be > 0. Using 1 instead.", _rate_values[RATE_MOVESPEED_NPC]); + _rate_values[RATE_MOVESPEED_NPC] = 1.0f; + } + for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) baseMoveSpeed[i] *= _rate_values[RATE_MOVESPEED_NPC]; + _rate_values[RATE_CORPSE_DECAY_LOOTED] = sConfigMgr->GetOption("Rate.Corpse.Decay.Looted", 0.5f); _rate_values[RATE_DURABILITY_LOSS_ON_DEATH] = sConfigMgr->GetOption("DurabilityLoss.OnDeath", 10.0f);