From 472dd71d7f3be0d55ddf7296560f9a9e618ac8cc Mon Sep 17 00:00:00 2001 From: Fryguy Date: Mon, 8 Jan 2024 23:23:51 -0500 Subject: [PATCH] [Rules] Bash Two Hander use Shoulders (#3925) Rule: BashTwoHanderUseShoulderAC Default: False Allows server operators to choose if they want two handed bash to utilize the shoulder armor or not. Rule: BashACBonusDivisor Default: 25.0 Allows adjustment for bash AC value contributions. Lower to increase damage. --- common/ruletypes.h | 2 ++ zone/special_attacks.cpp | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index eef40aff7..459882038 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -565,6 +565,8 @@ RULE_INT(Combat, ClassicTripleAttackChanceMonk, 100, "Innate Chance for Monk to RULE_INT(Combat, ClassicTripleAttackChanceBerserker, 100, "Innate Chance for Berserker to Triple Attack after a Double Attack (200 = 20%). DEFAULT: 100") RULE_INT(Combat, ClassicTripleAttackChanceRanger, 100, "Innate Chance for Ranger to Triple Attack after a Double Attack (200 = 20%). DEFAULT: 100") RULE_INT(Combat, StunChance, 12, "Percent chance that client will be stunned when mob is behind player. DEFAULT: 12") +RULE_BOOL(Combat, BashTwoHanderUseShoulderAC, false, "Enable to use shoulder AC for bash calculations when two hander is equipped. Unproven if accurate DEFAULT: false") +RULE_REAL(Combat, BashACBonusDivisor, 25.0, "this divides the AC value contribution to bash damage, lower to increase damage") RULE_CATEGORY_END() RULE_CATEGORY(NPC) diff --git a/zone/special_attacks.cpp b/zone/special_attacks.cpp index 8de2e5d22..2d682f459 100644 --- a/zone/special_attacks.cpp +++ b/zone/special_attacks.cpp @@ -137,12 +137,16 @@ int Mob::GetBaseSkillDamage(EQ::skills::SkillType skill, Mob *target) if (HasShieldEquipped()) { inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotSecondary); } else if (HasTwoHanderEquipped()) { - inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary); + if (RuleB(Combat, BashTwoHanderUseShoulderAC)) { + inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotShoulders); + } else { + inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary); + } } } if (inst) { - ac_bonus = inst->GetItemArmorClass(true) / 25.0f; + ac_bonus = inst->GetItemArmorClass(true) / RuleR(Combat, BashACBonusDivisor); } else { return 0; } // return 0 in cases where we don't have an item