mirror of
https://github.com/EQEmu/Server.git
synced 2026-01-03 10:33:52 +00:00
[Spells] Update to SPA 297 and 484 to support focus from AA and items. (#1858)
[Spells] Update to SPA 297 and 484 to support focus from AA and items.
This commit is contained in:
parent
4a154686e1
commit
82000949e3
@ -5458,7 +5458,7 @@ void Mob::CommonOutgoingHitSuccess(Mob* defender, DamageHitInfo &hit, ExtraAttac
|
||||
|
||||
int pct_damage_reduction = defender->GetSkillDmgTaken(hit.skill, opts) + defender->GetPositionalDmgTaken(this);
|
||||
|
||||
hit.damage_done += (hit.damage_done * pct_damage_reduction / 100) + (defender->GetFcDamageAmtIncoming(this, 0, true, hit.skill)) + defender->GetPositionalDmgTakenAmt(this);
|
||||
hit.damage_done += (hit.damage_done * pct_damage_reduction / 100) + defender->GetPositionalDmgTakenAmt(this);
|
||||
|
||||
if (defender->GetShielderID()) {
|
||||
DoShieldDamageOnShielder(defender, hit.damage_done, hit.skill);
|
||||
|
||||
@ -1941,10 +1941,10 @@ int Lua_Mob::GetSkillDmgTaken(int skill) {
|
||||
return self->GetSkillDmgTaken(static_cast<EQ::skills::SkillType>(skill));
|
||||
}
|
||||
|
||||
int Lua_Mob::GetFcDamageAmtIncoming(Lua_Mob caster, uint32 spell_id, bool use_skill, uint16 skill)
|
||||
int Lua_Mob::GetFcDamageAmtIncoming(Lua_Mob caster, int32 spell_id)
|
||||
{
|
||||
Lua_Safe_Call_Int();
|
||||
return self->GetFcDamageAmtIncoming(caster, spell_id, use_skill, skill);
|
||||
return self->GetFcDamageAmtIncoming(caster, spell_id);
|
||||
}
|
||||
|
||||
int Lua_Mob::GetSkillDmgAmt(uint16 skill)
|
||||
|
||||
@ -373,7 +373,7 @@ public:
|
||||
void ModSkillDmgTaken(int skill, int value);
|
||||
int GetModSkillDmgTaken(int skill);
|
||||
int GetSkillDmgTaken(int skill);
|
||||
int GetFcDamageAmtIncoming(Lua_Mob caster, uint32 spell_id, bool use_skill, uint16 skill);
|
||||
int GetFcDamageAmtIncoming(Lua_Mob caster, int32 spell_id);
|
||||
int GetSkillDmgAmt(uint16 skill);
|
||||
void SetAllowBeneficial(bool value);
|
||||
bool GetAllowBeneficial();
|
||||
|
||||
@ -811,7 +811,7 @@ public:
|
||||
bool TryFadeEffect(int slot);
|
||||
uint16 GetSpellEffectResistChance(uint16 spell_id);
|
||||
int32 GetVulnerability(Mob* caster, uint32 spell_id, uint32 ticsremaining);
|
||||
int32 GetFcDamageAmtIncoming(Mob *caster, uint32 spell_id, bool use_skill = false, uint16 skill=0);
|
||||
int32 GetFcDamageAmtIncoming(Mob *caster, int32 spell_id);
|
||||
int32 GetFocusIncoming(focusType type, int effect, Mob *caster, uint32 spell_id); //**** This can be removed when bot healing focus code is updated ****
|
||||
int32 GetSkillDmgTaken(const EQ::skills::SkillType skill_used, ExtraAttackOptions *opts = nullptr);
|
||||
int32 GetPositionalDmgTaken(Mob *attacker);
|
||||
|
||||
@ -7102,72 +7102,12 @@ bool Mob::DoHPToManaCovert(uint16 mana_cost)
|
||||
return false;
|
||||
}
|
||||
|
||||
int32 Mob::GetFcDamageAmtIncoming(Mob *caster, uint32 spell_id, bool use_skill, uint16 skill )
|
||||
int32 Mob::GetFcDamageAmtIncoming(Mob *caster, int32 spell_id)
|
||||
{
|
||||
//Used to check focus derived from SE_FcDamageAmtIncoming which adds direct damage to Spells or Skill based attacks.
|
||||
//Used to check focus derived from SE_Fc_Spell_Damage_Amt_IncomingPC which adds direct damage to Spells.
|
||||
//THIS is target of spell cast
|
||||
int32 dmg = 0;
|
||||
bool limit_exists = false;
|
||||
bool skill_found = false;
|
||||
|
||||
if (!caster)
|
||||
return 0;
|
||||
|
||||
if (spellbonuses.FocusEffects[focusFcDamageAmtIncoming]){
|
||||
int buff_count = GetMaxTotalSlots();
|
||||
for(int i = 0; i < buff_count; i++){
|
||||
|
||||
if( (IsValidSpell(buffs[i].spellid) && (IsEffectInSpell(buffs[i].spellid, SE_FcDamageAmtIncoming))) ){
|
||||
|
||||
if (use_skill){
|
||||
int32 temp_dmg = 0;
|
||||
for (int e = 0; e < EFFECT_COUNT; e++) {
|
||||
|
||||
if (spells[buffs[i].spellid].effect_id[e] == SE_FcDamageAmtIncoming){
|
||||
temp_dmg += spells[buffs[i].spellid].base_value[e];
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!skill_found){
|
||||
if ((spells[buffs[i].spellid].effect_id[e] == SE_LimitToSkill) ||
|
||||
(spells[buffs[i].spellid].effect_id[e] == SE_LimitCastingSkill)){
|
||||
limit_exists = true;
|
||||
|
||||
if (spells[buffs[i].spellid].base_value[e] == skill)
|
||||
skill_found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((!limit_exists) || (limit_exists && skill_found)){
|
||||
dmg += temp_dmg;
|
||||
CheckNumHitsRemaining(NumHit::MatchingSpells, i);
|
||||
}
|
||||
}
|
||||
|
||||
else{
|
||||
int32 focus = caster->CalcFocusEffect(focusFcDamageAmtIncoming, buffs[i].spellid, spell_id);
|
||||
if(focus){
|
||||
dmg += focus;
|
||||
CheckNumHitsRemaining(NumHit::MatchingSpells, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (spellbonuses.FocusEffects[focusFcSpellDamageAmtIncomingPC]) {
|
||||
int buff_count = GetMaxTotalSlots();
|
||||
for (int i = 0; i < buff_count; i++) {
|
||||
|
||||
if ((IsValidSpell(buffs[i].spellid) && (IsEffectInSpell(buffs[i].spellid, SE_FcDamageAmtIncoming)))) {
|
||||
|
||||
int32 focus = caster->CalcFocusEffect(focusFcSpellDamageAmtIncomingPC, buffs[i].spellid, spell_id);
|
||||
if (focus) {
|
||||
dmg += focus;
|
||||
CheckNumHitsRemaining(NumHit::MatchingSpells, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dmg += GetFocusEffect(focusFcDamageAmtIncoming, spell_id); //SPA 297 SE_FcDamageAmtIncoming
|
||||
dmg += GetFocusEffect(focusFcSpellDamageAmtIncomingPC, spell_id); //SPA 484 SE_Fc_Spell_Damage_Amt_IncomingPC
|
||||
return dmg;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user