feat(Core/Creature): Add new config option for npc speeds (#20617)

This commit is contained in:
Exitare
2024-12-22 00:45:39 -08:00
committed by GitHub
parent b4d04b1af1
commit 7be3c82505
3 changed files with 28 additions and 9 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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<float>("Rate.MoveSpeed", 1.0f);
if (_rate_values[RATE_MOVESPEED] < 0)
// Controls Player movespeed rate.
_rate_values[RATE_MOVESPEED_PLAYER] = sConfigMgr->GetOption<float>("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<float>("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<float>("Rate.Corpse.Decay.Looted", 0.5f);
_rate_values[RATE_DURABILITY_LOSS_ON_DEATH] = sConfigMgr->GetOption<float>("DurabilityLoss.OnDeath", 10.0f);