From f12c87a04aa6492687a92cc56c58019094b99853 Mon Sep 17 00:00:00 2001 From: Fryguy Date: Mon, 8 Jan 2024 23:31:04 -0500 Subject: [PATCH] [Feat] Alt Sinister Strike Formula (#3921) I have been informed that this was proven to be false, but the AA is pretty useless without some adjustment. Adding this as a rule to allow server owners to adjust as needed. Update Sinister Strikes tapatalk.com/groups/monklybusiness43508/leksikon-s-half-assed-guide-to-monkly-aas-oow-incl-t510-s20.html?sid=a9c7745f287f3e89301c960c20f33248 Sinister Strikes: 19 Delay weapon -- Gives a 5 damage bonus to all hits 20 Delay weapon -- Gives a 6 damage bonus to all hits 24 Delay weapon -- Gives a 7 damage bonus to all hits Given Quarm hammer with maxed non-GoD AAs: 0.7 HPS offhand = 4.9 DPS increase. --- common/ruletypes.h | 1 + zone/attack.cpp | 52 ++++++++++++++++++++++++++++++---------------- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index 17a7919ac..bf5b87d47 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -256,6 +256,7 @@ RULE_INT(Skills, SenseHeadingStartValue, 200, "Start value of sense heading skil RULE_BOOL(Skills, SelfLanguageLearning, true, "Enabling self-learning of languages") RULE_BOOL(Skills, RequireTomeHandin, false, "Disable click-to-learn and force hand in to Guild Master") RULE_INT(Skills, TradeSkillClamp, 0, "Legacy tradeskills would clamp at 252 regardless of item modifiers and skill combination. DEFAULT: 0 will bypass clamp. Legacy value 252") +RULE_BOOL(Skills, UseAltSinisterStrikeFormula, false, "Enabling will utilize a formula derived from 2004 monkey business post which makes the AA actually worth something.") RULE_CATEGORY_END() RULE_CATEGORY(Pets) diff --git a/zone/attack.cpp b/zone/attack.cpp index 911fdcafb..e12f449e9 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -3217,57 +3217,73 @@ uint8 Mob::GetWeaponDamageBonus(const EQ::ItemData *weapon, bool offhand) // We assume that the level check is done before calling this function and sinister strikes is checked before // calling for offhand DB auto level = GetLevel(); - if (!weapon) + + if (!weapon) { return 1 + ((level - 28) / 3); // how does weaponless scale? + } auto delay = weapon->Delay; if (weapon->IsType1HWeapon() || weapon->ItemType == EQ::item::ItemTypeMartial) { // we assume sinister strikes is checked before calling here if (!offhand) { - if (delay <= 39) + if (delay <= 39) { return 1 + ((level - 28) / 3); - else if (delay < 43) + } else if (delay < 43) { return 2 + ((level - 28) / 3) + ((delay - 40) / 3); - else if (delay < 45) + } else if (delay < 45) { return 3 + ((level - 28) / 3) + ((delay - 40) / 3); - else if (delay >= 45) + } else if (delay >= 45) { return 4 + ((level - 28) / 3) + ((delay - 40) / 3); + } + } else { + if (RuleB(Skills, UseAltSinisterStrikeFormula)) { + if (delay <= 19) { + return 5 + ((level - 40) / 3) * (delay / 30); + } else if (delay <= 23) { + return 6 + ((level - 40) / 3) * (delay / 30); + } else if (delay >= 24) { + return 7 + ((level - 40) / 3) * (delay / 30); + } + } else { + return 1 + ((level - 40) / 3) * (delay / 30); // YOOO shit's useless waste of AAs + } } - else { - return 1 + ((level - 40) / 3) * (delay / 30); // YOOO shit's useless waste of AAs - } - } - else { + } else { // 2h damage bonus int64 damage_bonus = 1 + (level - 28) / 3; - if (delay <= 27) + + if (delay <= 27) { return damage_bonus + 1; + } + // Client isn't reflecting what the dev quoted, this matches better if (level > 29) { int level_bonus = (level - 30) / 5 + 1; if (level > 50) { level_bonus++; int level_bonus2 = level - 50; - if (level > 67) + if (level > 67) { level_bonus2 += 5; - else if (level > 59) + } else if (level > 59) { level_bonus2 += 4; - else if (level > 58) + } else if (level > 58) { level_bonus2 += 3; - else if (level > 56) + } else if (level > 56) { level_bonus2 += 2; - else if (level > 54) + } else if (level > 54) { level_bonus2++; + } level_bonus += level_bonus2 * delay / 40; } damage_bonus += level_bonus; } if (delay >= 40) { int delay_bonus = (delay - 40) / 3 + 1; - if (delay >= 45) + if (delay >= 45) { delay_bonus += 2; - else if (delay >= 43) + } else if (delay >= 43) { delay_bonus++; + } damage_bonus += delay_bonus; } return damage_bonus;