[Rules] Classic Spell Data SPA Calc variability (#3931)

* [Rules] Classic Spell Data SPA Calc variability

When  using lucy imports of older more classic data, they lack the limit values which provides Focus Random Effectiveness.

Example:

Bazu Plauge (6472) went from a 40 limit to 0 limit on the 2006 lucy import.

Lucy does have limit value data, but it appears the affected SPAs sony handled in source vs in spell data.

* Requested Changes
This commit is contained in:
Fryguy
2024-01-09 05:49:10 -05:00
committed by GitHub
parent d0e069f4f8
commit 62b5f8a488
2 changed files with 44 additions and 18 deletions
+43 -18
View File
@@ -5892,16 +5892,19 @@ int64 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo
// handle effects
case SE_ImprovedDamage:
if (type == focusImprovedDamage) {
value = GetFocusRandomEffectivenessValue(focus_spell.base_value[i], focus_spell.limit_value[i], best_focus);
}
break;
case SE_ImprovedDamage2:
if (type == focusImprovedDamage2) {
value = GetFocusRandomEffectivenessValue(focus_spell.base_value[i], focus_spell.limit_value[i], best_focus);
if (!RuleB(Spells, UseClassicSpellFocus)) {
if (type == focusImprovedDamage || type == focusImprovedDamage2) {
value = GetFocusRandomEffectivenessValue(focus_spell.base_value[i], focus_spell.limit_value[i], best_focus);
}
break;
} else {
if (best_focus) {
value = focus_spell.base_value[i];
} else {
value = zone->random.Int(1, focus_spell.base_value[i]);
}
}
break;
case SE_Fc_Amplify_Mod:
if (type == focusFcAmplifyMod && focus_spell.base_value[i] > value) {
@@ -5910,14 +5913,18 @@ int64 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo
break;
case SE_ImprovedHeal:
if (type == focusImprovedHeal) {
value = GetFocusRandomEffectivenessValue(focus_spell.base_value[i], focus_spell.limit_value[i], best_focus);
}
break;
case SE_ReduceManaCost:
if (type == focusManaCost) {
value = GetFocusRandomEffectivenessValue(focus_spell.base_value[i], focus_spell.limit_value[i], best_focus);
if (!RuleB(Spells, UseClassicSpellFocus)) {
if (type == focusImprovedHeal || type == focusManaCost) {
value = GetFocusRandomEffectivenessValue(focus_spell.base_value[i], focus_spell.limit_value[i], best_focus);
}
break;
}
if (best_focus) {
value = focus_spell.base_value[i];
} else {
value = zone->random.Int(1, focus_spell.base_value[i]);
}
break;
@@ -5967,8 +5974,15 @@ int64 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo
break;
case SE_ReduceReagentCost:
if (type == focusReagentCost) {
value = GetFocusRandomEffectivenessValue(focus_spell.base_value[i], focus_spell.limit_value[i], best_focus);
if (!RuleB(Spells, UseClassicSpellFocus)) {
if (type == focusReagentCost) {
value = GetFocusRandomEffectivenessValue(focus_spell.base_value[i], focus_spell.limit_value[i], best_focus);
}
break;
}
if (type == focusReagentCost && focus_spell.base_value[i] > value) {
value = focus_spell.base_value[i];
}
break;
@@ -5991,8 +6005,19 @@ int64 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo
break;
case SE_SpellHateMod:
if (!RuleB(Spells, UseClassicSpellFocus)) {
if (type == focusSpellHateMod) {
value = GetFocusRandomEffectivenessValue(focus_spell.base_value[i], focus_spell.limit_value[i], best_focus);
}
break;
}
if (type == focusSpellHateMod) {
value = GetFocusRandomEffectivenessValue(focus_spell.base_value[i], focus_spell.limit_value[i], best_focus);
if (best_focus) {
value = focus_spell.base_value[i];
} else {
value = zone->random.Int(1, focus_spell.base_value[i]);
}
}
break;