diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2a12b25e7..3cd4b73e4 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -3009,11 +3009,18 @@ SpellMissInfo Unit::MagicSpellHitResult(Unit* victim, SpellInfo const* spellInfo thisLevel = std::max(thisLevel, spellInfo->SpellLevel); int32 levelDiff = int32(victim->getLevelForTarget(this)) - thisLevel; - int32 MISS_CHANCE_MULTIPLIER = sWorld->getRate( + int32 MISS_CHANCE_MULTIPLIER; + if (sWorld->getBoolConfig(CONFIG_MISS_CHANCE_MULTIPLIER_ONLY_FOR_PLAYERS) && GetTypeId() != TYPEID_PLAYER) // keep it as it was originally (7 and 11) + { + MISS_CHANCE_MULTIPLIER = victim->GetTypeId() == TYPEID_PLAYER ? 7 : 11; + } + else + { + MISS_CHANCE_MULTIPLIER = sWorld->getRate( victim->GetTypeId() == TYPEID_PLAYER ? RATE_MISS_CHANCE_MULTIPLIER_TARGET_PLAYER - : RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE - ); + : RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE); + } // Base hit chance from attacker and victim levels int32 modHitChance = levelDiff < 3 diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index 27c65e51d..41d73701a 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -173,6 +173,7 @@ enum WorldBoolConfigs CONFIG_REALM_LOGIN_ENABLED, CONFIG_PLAYER_SETTINGS_ENABLED, CONFIG_ALLOW_JOIN_BG_AND_LFG, + CONFIG_MISS_CHANCE_MULTIPLIER_ONLY_FOR_PLAYERS, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 692fcad86..37ad4880e 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -572,8 +572,9 @@ void World::LoadConfigSettings(bool reload) rate_values[RATE_ARENA_POINTS] = sConfigMgr->GetOption("Rate.ArenaPoints", 1.0f); rate_values[RATE_INSTANCE_RESET_TIME] = sConfigMgr->GetOption("Rate.InstanceResetTime", 1.0f); - rate_values[RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE] = sConfigMgr->GetOption("Rate.MissChanceMultiplier.TargetCreature", 11.0f); - rate_values[RATE_MISS_CHANCE_MULTIPLIER_TARGET_PLAYER] = sConfigMgr->GetOption("Rate.MissChanceMultiplier.TargetPlayer", 7.0f); + rate_values[RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE] = sConfigMgr->GetOption("Rate.MissChanceMultiplier.TargetCreature", 11.0f); + rate_values[RATE_MISS_CHANCE_MULTIPLIER_TARGET_PLAYER] = sConfigMgr->GetOption("Rate.MissChanceMultiplier.TargetPlayer", 7.0f); + m_bool_configs[CONFIG_MISS_CHANCE_MULTIPLIER_ONLY_FOR_PLAYERS] = sConfigMgr->GetOption("Rate.MissChanceMultiplier.OnlyAffectsPlayer", false); rate_values[RATE_TALENT] = sConfigMgr->GetOption("Rate.Talent", 1.0f); if (rate_values[RATE_TALENT] < 0.0f) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index b35035d58..902bb72c5 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2550,6 +2550,7 @@ Die.Command.Mode = 1 # Rate.MissChanceMultiplier.Creature # Rate.MissChanceMultiplier.Player +# Rate.MissChanceMultiplier.OnlyAffectsPlayer # # Description: When the target is 3 or more level higher than the player, # the chance to hit is determined by the formula: 94 - (levelDiff - 2) * Rate.MissChanceMultiplier @@ -2557,15 +2558,19 @@ Die.Command.Mode = 1 # # Note: this does not affect when the player is less than 3 levels different than the target, # where this (linear) formula is used instead to calculate the hit chance: 96 - levelDiff. +# You can set Rate.MissChanceMultiplier.OnlyAffectsPlayer to 1 if you only want to affect the MissChance +# for player casters only. This way you won't be affecting creature missing chance. # # Example: if you want the chance to keep growing linearly, use 1. # # Default: Rate.MissChanceMultiplier.TargetCreature = 11 # Rate.MissChanceMultiplier.TargetPlayer = 7 +# Rate.MissChanceMultiplier.OnlyAffectsPlayer = 0 # Rate.MissChanceMultiplier.TargetCreature = 11 Rate.MissChanceMultiplier.TargetPlayer = 7 +Rate.MissChanceMultiplier.OnlyAffectsPlayer = 0 # ###################################################################################################