diff --git a/common/spdat.h b/common/spdat.h index e7ac5730d..03fed1d1f 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -843,8 +843,8 @@ typedef enum { //#define SE_Ff_FocusCastProcNoBypass 497 // //#define SE_AddExtraAttackPct_1h_Primary 498 // //#define SE_AddExtraAttackPct_1h_Secondary 499 // -#define SE_Fc_CastTimeMod2 500 // implemented, @Fc, On Caster, cast time mod pct, base: pct -#define SE_Fc_CastTimeAmt 501 // implemented, @Fc, On Caster, cast time mod flat amt, base: milliseconds +#define SE_Fc_CastTimeMod2 500 // implemented, @Fc, On Caster, cast time mod pct, base: pct, Note: Can reduce to instant cast +#define SE_Fc_CastTimeAmt 501 // implemented, @Fc, On Caster, cast time mod flat amt, base: milliseconds, Note: Can reduce to instant cast #define SE_Fearstun 502 // implemented - Stun with a max level limit. Normal stun restrictions don't apply. #define SE_Melee_Damage_Position_Mod 503 // implemented - modify melee damage by pct if done from Front or Behind //#define SE_Melee_Damage_Position_Amt 504 // diff --git a/zone/mob.cpp b/zone/mob.cpp index 229e19f48..f3926a197 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -3120,8 +3120,8 @@ uint32 Mob::GetLevelHP(uint8 tlevel) int32 Mob::GetActSpellCasttime(uint16 spell_id, int32 casttime) { int32 cast_reducer = GetFocusEffect(focusSpellHaste, spell_id); - cast_reducer += GetFocusEffect(focusFcCastTimeMod2, spell_id); - auto min_cap = casttime / 2; + int32 cast_reducer_amt = GetFocusEffect(focusFcCastTimeAmt, spell_id); + int32 cast_reducer_no_limit = GetFocusEffect(focusFcCastTimeMod2, spell_id); if (level > 50 && casttime >= 3000 && !spells[spell_id].goodEffect && (GetClass() == RANGER || GetClass() == SHADOWKNIGHT || GetClass() == PALADIN || GetClass() == BEASTLORD)) { @@ -3129,13 +3129,13 @@ int32 Mob::GetActSpellCasttime(uint16 spell_id, int32 casttime) cast_reducer += level_mod * 3; } + cast_reducer = std::min(cast_reducer, 50); //Max cast time with focusSpellHaste and level reducer is 50% of cast time. + cast_reducer += cast_reducer_no_limit; casttime = casttime * (100 - cast_reducer) / 100; - - int32 cast_reducer_amt = GetFocusEffect(focusFcCastTimeAmt, spell_id); - - casttime = std::max(casttime, min_cap) - cast_reducer_amt; - + casttime -= cast_reducer_amt; + return std::max(casttime, 0); + } void Mob::ExecWeaponProc(const EQ::ItemInstance *inst, uint16 spell_id, Mob *on, int level_override) {