[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:
KayenEQ 2021-12-03 15:39:06 -05:00 committed by GitHub
parent 4a154686e1
commit 82000949e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 9 additions and 69 deletions

View File

@ -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);

View File

@ -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)

View File

@ -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();

View File

@ -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);

View File

@ -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;
}