diff --git a/changelog.txt b/changelog.txt index 4cf1c32d6..df350629c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,8 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50) ------------------------------------------------------- +== 01/23/2014 == +Kayen: Implemented SE_FfLimitUseType (focus limit to numhits type) + == 01/20/2014 == cavedude: Live-Like weather system (Thanks to robregen for figuring it out!) demonstar55: Implemented not_extendable spell flag diff --git a/common/spdat.h b/common/spdat.h index 578fc569f..5f4d419af 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -435,7 +435,7 @@ typedef enum { #define SE_SpellDamage 286 // implemented - adds direct spell damage #define SE_SpellDurationIncByTic 287 // implemented #define SE_SpecialAttackKBProc 288 // implemented[AA] - Chance to to do a knockback from special attacks [AA Dragon Punch]. -#define SE_ImprovedSpellEffect 289 // implemented +#define SE_ImprovedSpellEffect 289 // implemented - Triggers only if fades after natural duration. #define SE_IncreaseRunSpeedCap 290 // implemented[AA] - increases run speed over the hard cap #define SE_Purify 291 // implemented - Removes determental effects #define SE_StrikeThrough2 292 // implemented[AA] - increasing chance of bypassing an opponent's special defenses, such as dodge, block, parry, and riposte. @@ -519,11 +519,11 @@ typedef enum { #define SE_ResistCorruption 370 // implemented #define SE_AttackSpeed4 371 // implemented - stackable slow effect 'Inhibit Melee' #define SE_ForageSkill 372 // *not implemented[AA] Will increase the skill cap for those that have the Forage skill and grant the skill and raise the cap to those that do not. -#define SE_CastOnWearoff 373 // implemented +#define SE_CastOnWearoff 373 // implemented - Triggers only if fades after natural duration. #define SE_ApplyEffect 374 // implemented #define SE_DotCritDmgIncrease 375 // implemented - Increase damage of DoT critical amount //#define SE_Fling 376 // *not implemented - used in 2 test spells (12945 | Movement Test Spell 1) -#define SE_BossSpellTrigger 377 // implemented - spell is cast on fade +#define SE_BossSpellTrigger 377 // implemented - Triggers only if fades after natural duration. #define SE_SpellEffectResistChance 378 // implemented - Increase chance to resist specific spell effect (base1=value, base2=spell effect id) #define SE_ShadowStepDirectional 379 // implemented - handled by client #define SE_Knockdown 380 // implemented - small knock back(handled by client) @@ -569,7 +569,7 @@ typedef enum { #define SE_FcLimitUse 420 // implemented - increases numhits count by percent (Note: not used in any known live spells) #define SE_IncreaseNumHits 421 // implemented[AA] - increases number of hits a buff has till fade. (focus) #define SE_FfLimitUseMin 422 // implemented - limit a focus to require a min amount of numhits value (used with above) -//#define SE_FfLimitUseType 423 // not used - limit a focus to require a certain numhits type (Field in spells table 175) +#define SE_FfLimitUseType 423 // implemented - limit a focus to require a certain numhits type #define SE_GravityEffect 424 // implemented - Pulls/pushes you toward/away the mob at a set pace #define SE_Display 425 // *not implemented - Illusion: Flying Dragon(21626) #define SE_IncreaseExtTargetWindow 426 // *not implmented[AA] - increases the capacity of your extended target window diff --git a/zone/attack.cpp b/zone/attack.cpp index f2c97153a..b11bcb60d 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -199,6 +199,14 @@ bool Mob::CheckHitChance(Mob* other, SkillUseTypes skillinuse, int Hand, int16 c if(IsClient() && other->IsClient()) pvpmode = true; + CheckNumHitsRemaining(1); + + if (attacker) + attacker->CheckNumHitsRemaining(2); + + if (chance_mod >= 10000) + return true; + float bonus; //////////////////////////////////////////////////////// @@ -324,12 +332,7 @@ bool Mob::CheckHitChance(Mob* other, SkillUseTypes skillinuse, int Hand, int16 c else if(chancetohit < 5) { chancetohit = 5; } - - CheckNumHitsRemaining(1); - if (attacker) - attacker->CheckNumHitsRemaining(2); - //I dont know the best way to handle a garunteed hit discipline being used //agains a garunteed riposte (for example) discipline... for now, garunteed hit wins diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 5f38356dd..da81c23de 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -2933,6 +2933,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial) case SE_LimitRace: case SE_FcLimitUse: case SE_FcMute: + case SE_FfLimitUseType: { break; } @@ -4167,6 +4168,11 @@ int16 Client::CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id) LimitFound = true; break; + case SE_FfLimitUseType: + if (base1 != spell.numhitstype) + LimitFound = true; + break; + //Handle Focus Effects case SE_ImprovedDamage: if (type == focusImprovedDamage && base1 > value) @@ -4633,6 +4639,11 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo return 0; break; + case SE_FfLimitUseType: + if (focus_spell.base[i] != spell.numhitstype) + return 0; + break; + case SE_CastonFocusEffect: if (focus_spell.base[i] > 0) Caston_spell_id = focus_spell.base[i];