mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-21 17:02:27 +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);
|
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()) {
|
if (defender->GetShielderID()) {
|
||||||
DoShieldDamageOnShielder(defender, hit.damage_done, hit.skill);
|
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));
|
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();
|
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)
|
int Lua_Mob::GetSkillDmgAmt(uint16 skill)
|
||||||
|
|||||||
@ -373,7 +373,7 @@ public:
|
|||||||
void ModSkillDmgTaken(int skill, int value);
|
void ModSkillDmgTaken(int skill, int value);
|
||||||
int GetModSkillDmgTaken(int skill);
|
int GetModSkillDmgTaken(int skill);
|
||||||
int GetSkillDmgTaken(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);
|
int GetSkillDmgAmt(uint16 skill);
|
||||||
void SetAllowBeneficial(bool value);
|
void SetAllowBeneficial(bool value);
|
||||||
bool GetAllowBeneficial();
|
bool GetAllowBeneficial();
|
||||||
|
|||||||
@ -811,7 +811,7 @@ public:
|
|||||||
bool TryFadeEffect(int slot);
|
bool TryFadeEffect(int slot);
|
||||||
uint16 GetSpellEffectResistChance(uint16 spell_id);
|
uint16 GetSpellEffectResistChance(uint16 spell_id);
|
||||||
int32 GetVulnerability(Mob* caster, uint32 spell_id, uint32 ticsremaining);
|
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 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 GetSkillDmgTaken(const EQ::skills::SkillType skill_used, ExtraAttackOptions *opts = nullptr);
|
||||||
int32 GetPositionalDmgTaken(Mob *attacker);
|
int32 GetPositionalDmgTaken(Mob *attacker);
|
||||||
|
|||||||
@ -7102,72 +7102,12 @@ bool Mob::DoHPToManaCovert(uint16 mana_cost)
|
|||||||
return false;
|
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.
|
//THIS is target of spell cast
|
||||||
//Used to check focus derived from SE_Fc_Spell_Damage_Amt_IncomingPC which adds direct damage to Spells.
|
|
||||||
int32 dmg = 0;
|
int32 dmg = 0;
|
||||||
bool limit_exists = false;
|
dmg += GetFocusEffect(focusFcDamageAmtIncoming, spell_id); //SPA 297 SE_FcDamageAmtIncoming
|
||||||
bool skill_found = false;
|
dmg += GetFocusEffect(focusFcSpellDamageAmtIncomingPC, spell_id); //SPA 484 SE_Fc_Spell_Damage_Amt_IncomingPC
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return dmg;
|
return dmg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user