diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 88d627dcd..ab7d8bfee 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -1201,6 +1201,10 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) // Physically raises skill cap ie if 55/55 it will raise to 55/60 case SE_RaiseSkillCap: { + + if (base2 > HIGHEST_SKILL) + break; + if (newbon->RaiseSkillCap[base2] < base1) newbon->RaiseSkillCap[base2] = base1; break; @@ -1434,9 +1438,14 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) newbon->ReduceFallDamage += base1; break; - case SE_ReduceTradeskillFail: + case SE_ReduceTradeskillFail:{ + + if (base2 > HIGHEST_SKILL) + break; + newbon->ReduceTradeskillFail[base2] += base1; break; + } case SE_TradeSkillMastery: if (newbon->TradeSkillMastery < base1) @@ -3157,19 +3166,28 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne new_bonus->ReduceFallDamage += effect_value; break; - case SE_ReduceTradeskillFail: + case SE_ReduceTradeskillFail:{ + + if (base2 > HIGHEST_SKILL) + break; + new_bonus->ReduceTradeskillFail[base2] += effect_value; break; + } case SE_TradeSkillMastery: if (new_bonus->TradeSkillMastery < effect_value) new_bonus->TradeSkillMastery = effect_value; break; - case SE_RaiseSkillCap: + case SE_RaiseSkillCap: { + if (base2 > HIGHEST_SKILL) + break; + if (new_bonus->RaiseSkillCap[base2] < effect_value) new_bonus->RaiseSkillCap[base2] = effect_value; break; + } //Special custom cases for loading effects on to NPC from 'npc_spels_effects' table if (IsAISpellEffect) { diff --git a/zone/spells.cpp b/zone/spells.cpp index ce45b6d83..999ab684d 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -750,14 +750,6 @@ bool Client::CheckFizzle(uint16 spell_id) // always at least 1% chance to fail or 5% to succeed fizzlechance = fizzlechance < 1 ? 1 : (fizzlechance > 95 ? 95 : fizzlechance); - /* - if(IsBardSong(spell_id)) - { - //This was a channel chance modifier - no evidence for fizzle reduction - fizzlechance -= GetAA(aaInternalMetronome) * 1.5f; - } - */ - float fizzle_roll = zone->random.Real(0, 100); Log.Out(Logs::Detail, Logs::Spells, "Check Fizzle %s spell %d fizzlechance: %0.2f%% diff: %0.2f roll: %0.2f", GetName(), spell_id, fizzlechance, diff, fizzle_roll);