Implemented SPA 515,516,518,496

Implemented
SE_AC_Avoidance_Max_Percent 515
SE_AC_Mitigation_Max_Percent	516
SE_Attack_Accuracy_Max_Percent	518
Above are stackable defense and offensive mods

SE_Critical_Melee_Damage_Mod_Max	496 - This is a non stackable melee critical modifier
This commit is contained in:
KayenEQ
2021-07-10 19:02:58 -04:00
parent 37758b2afa
commit 0a949c7835
6 changed files with 112 additions and 16 deletions
+76
View File
@@ -1102,6 +1102,19 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon)
break;
}
case SE_Critical_Melee_Damage_Mod_Max:
{
// Bad data or unsupported new skill
if (base2 > EQ::skills::HIGHEST_SKILL)
break;
int skill = base2 == ALL_SKILLS ? EQ::skills::HIGHEST_SKILL + 1 : base2;
if (base1 < 0 && newbon->CritDmgModNoStack[skill] > base1)
newbon->CritDmgModNoStack[skill] = base1;
else if (base1 > 0 && newbon->CritDmgModNoStack[skill] < base1)
newbon->CritDmgModNoStack[skill] = base1;
break;
}
case SE_CriticalSpellChance: {
newbon->CriticalSpellChance += base1;
@@ -1491,6 +1504,14 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon)
newbon->Attack_Accuracy_Max_Percent += base1;
break;
case SE_AC_Mitigation_Max_Percent:
newbon->AC_Mitigation_Max_Percent += base1;
break;
case SE_AC_Avoidance_Max_Percent:
newbon->AC_Avoidance_Max_Percent += base1;
break;
// to do
case SE_PetDiscipline:
break;
@@ -2489,6 +2510,20 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
break;
}
case SE_Critical_Melee_Damage_Mod_Max:
{
// Bad data or unsupported new skill
if (base2 > EQ::skills::HIGHEST_SKILL)
break;
int skill = base2 == ALL_SKILLS ? EQ::skills::HIGHEST_SKILL + 1 : base2;
if (effect_value < 0 && new_bonus->CritDmgModNoStack[skill] > effect_value)
new_bonus->CritDmgModNoStack[skill] = effect_value;
else if (effect_value > 0 && new_bonus->CritDmgModNoStack[skill] < effect_value) {
new_bonus->CritDmgModNoStack[skill] = effect_value;
}
break;
}
case SE_ReduceSkillTimer:
{
if(new_bonus->SkillReuseTime[base2] < effect_value)
@@ -3266,6 +3301,17 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
case SE_Attack_Accuracy_Max_Percent:
new_bonus->Attack_Accuracy_Max_Percent += effect_value;
break;
case SE_AC_Mitigation_Max_Percent:
new_bonus->AC_Mitigation_Max_Percent += effect_value;
break;
case SE_AC_Avoidance_Max_Percent:
new_bonus->AC_Avoidance_Max_Percent += effect_value;
break;
//Special custom cases for loading effects on to NPC from 'npc_spels_effects' table
if (IsAISpellEffect) {
@@ -4274,6 +4320,17 @@ void Mob::NegateSpellsBonuses(uint16 spell_id)
break;
}
case SE_Critical_Melee_Damage_Mod_Max:
{
for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++)
{
spellbonuses.CritDmgModNoStack[e] = effect_value;
aabonuses.CritDmgModNoStack[e] = effect_value;
itembonuses.CritDmgModNoStack[e] = effect_value;
}
break;
}
case SE_SkillDamageAmount:
{
for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++)
@@ -4790,6 +4847,25 @@ void Mob::NegateSpellsBonuses(uint16 spell_id)
aabonuses.IllusionPersistence = false;
break;
case SE_Attack_Accuracy_Max_Percent:
spellbonuses.Attack_Accuracy_Max_Percent = effect_value;
itembonuses.Attack_Accuracy_Max_Percent = effect_value;
aabonuses.Attack_Accuracy_Max_Percent = effect_value;
break;
case SE_AC_Mitigation_Max_Percent:
spellbonuses.AC_Mitigation_Max_Percent = effect_value;
itembonuses.AC_Mitigation_Max_Percent = effect_value;
aabonuses.AC_Mitigation_Max_Percent = effect_value;
break;
case SE_AC_Avoidance_Max_Percent:
spellbonuses.AC_Avoidance_Max_Percent = effect_value;
itembonuses.AC_Avoidance_Max_Percent = effect_value;
aabonuses.AC_Avoidance_Max_Percent = effect_value;
break;
case SE_SkillProcSuccess:{
for(int e = 0; e < MAX_SKILL_PROCS; e++)
{