[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.
This commit is contained in:
Fryguy 2024-01-08 23:31:04 -05:00 committed by GitHub
parent 97dbf85a4c
commit f12c87a04a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 18 deletions

View File

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

View File

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