mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 09:31:30 +00:00
Fixes and Updates to spell and melee mitigation runes.
-Fix for calculation error when rune was to be removed. -Updated to support these spell effect limit values which give a max amount per hit/spell that can be mitigated. -Updated to allow support for these spells effects when the max (rune value) is set to zero, which essentially gives you unlimited mitigation but typically there is a limit value set.
This commit is contained in:
parent
c20f35b3e8
commit
a4769239fa
@ -12,6 +12,7 @@ Kayen: Implemented SE_Berserk (Sets client as 'Berserk' giving chance to crippli
|
|||||||
Kayen: Implemented SE_Vampirsm (Stackable lifetap from melee effect) *Not used in any live effects
|
Kayen: Implemented SE_Vampirsm (Stackable lifetap from melee effect) *Not used in any live effects
|
||||||
Kayen: Minor fixes to how lifetap from melee effects are calced. Removed arbitrary hard cap of 100%, Negative value will now dmg client.
|
Kayen: Minor fixes to how lifetap from melee effects are calced. Removed arbitrary hard cap of 100%, Negative value will now dmg client.
|
||||||
Kayen: Fix to issue that prevented NPC's from receiving HP Regeneration derived from spell buffs.
|
Kayen: Fix to issue that prevented NPC's from receiving HP Regeneration derived from spell buffs.
|
||||||
|
Kayen: Fixes and Updates for melee and spell mitigation runes.
|
||||||
|
|
||||||
== 06/13/2014 ==
|
== 06/13/2014 ==
|
||||||
Kayen: For table 'npc_spell_effects_entries' setting se_max for damage shield effects (59) will now determine the DS Type (ie burning)
|
Kayen: For table 'npc_spell_effects_entries' setting se_max for damage shield effects (59) will now determine the DS Type (ie burning)
|
||||||
|
|||||||
@ -307,7 +307,7 @@ typedef enum {
|
|||||||
#define SE_SpellDamageShield 157 // implemented - Petrad's Protection
|
#define SE_SpellDamageShield 157 // implemented - Petrad's Protection
|
||||||
#define SE_Reflect 158 // implemented
|
#define SE_Reflect 158 // implemented
|
||||||
#define SE_AllStats 159 // implemented
|
#define SE_AllStats 159 // implemented
|
||||||
#define SE_MakeDrunk 160 // implemented - poorly though, should check against tolerance
|
//#define SE_MakeDrunk 160 // *not implemented - Effect works entirely client side (Should check against tolerance)
|
||||||
#define SE_MitigateSpellDamage 161 // implemented - rune with max value
|
#define SE_MitigateSpellDamage 161 // implemented - rune with max value
|
||||||
#define SE_MitigateMeleeDamage 162 // implemented - rune with max value
|
#define SE_MitigateMeleeDamage 162 // implemented - rune with max value
|
||||||
#define SE_NegateAttacks 163 // implemented
|
#define SE_NegateAttacks 163 // implemented
|
||||||
|
|||||||
@ -3188,11 +3188,11 @@ int32 Mob::ReduceDamage(int32 damage)
|
|||||||
{
|
{
|
||||||
DisableMeleeRune = true;
|
DisableMeleeRune = true;
|
||||||
int damage_to_reduce = damage * spellbonuses.MeleeThresholdGuard[0] / 100;
|
int damage_to_reduce = damage * spellbonuses.MeleeThresholdGuard[0] / 100;
|
||||||
if(damage_to_reduce > buffs[slot].melee_rune)
|
if(damage_to_reduce >= buffs[slot].melee_rune)
|
||||||
{
|
{
|
||||||
mlog(SPELLS__EFFECT_VALUES, "Mob::ReduceDamage SE_MeleeThresholdGuard %d damage negated, %d"
|
mlog(SPELLS__EFFECT_VALUES, "Mob::ReduceDamage SE_MeleeThresholdGuard %d damage negated, %d"
|
||||||
" damage remaining, fading buff.", damage_to_reduce, buffs[slot].melee_rune);
|
" damage remaining, fading buff.", damage_to_reduce, buffs[slot].melee_rune);
|
||||||
damage -= damage_to_reduce;
|
damage -= buffs[slot].melee_rune;
|
||||||
if(!TryFadeEffect(slot))
|
if(!TryFadeEffect(slot))
|
||||||
BuffFadeBySlot(slot);
|
BuffFadeBySlot(slot);
|
||||||
}
|
}
|
||||||
@ -3212,11 +3212,15 @@ int32 Mob::ReduceDamage(int32 damage)
|
|||||||
if(slot >= 0)
|
if(slot >= 0)
|
||||||
{
|
{
|
||||||
int damage_to_reduce = damage * spellbonuses.MitigateMeleeRune[0] / 100;
|
int damage_to_reduce = damage * spellbonuses.MitigateMeleeRune[0] / 100;
|
||||||
if(damage_to_reduce > buffs[slot].melee_rune)
|
|
||||||
|
if (spellbonuses.MitigateMeleeRune[2] && (damage_to_reduce > spellbonuses.MitigateMeleeRune[2]))
|
||||||
|
damage_to_reduce = spellbonuses.MitigateMeleeRune[2];
|
||||||
|
|
||||||
|
if(spellbonuses.MitigateMeleeRune[3] && (damage_to_reduce >= buffs[slot].melee_rune))
|
||||||
{
|
{
|
||||||
mlog(SPELLS__EFFECT_VALUES, "Mob::ReduceDamage SE_MitigateMeleeDamage %d damage negated, %d"
|
mlog(SPELLS__EFFECT_VALUES, "Mob::ReduceDamage SE_MitigateMeleeDamage %d damage negated, %d"
|
||||||
" damage remaining, fading buff.", damage_to_reduce, buffs[slot].melee_rune);
|
" damage remaining, fading buff.", damage_to_reduce, buffs[slot].melee_rune);
|
||||||
damage -= damage_to_reduce;
|
damage -= buffs[slot].melee_rune;
|
||||||
if(!TryFadeEffect(slot))
|
if(!TryFadeEffect(slot))
|
||||||
BuffFadeBySlot(slot);
|
BuffFadeBySlot(slot);
|
||||||
}
|
}
|
||||||
@ -3224,7 +3228,10 @@ int32 Mob::ReduceDamage(int32 damage)
|
|||||||
{
|
{
|
||||||
mlog(SPELLS__EFFECT_VALUES, "Mob::ReduceDamage SE_MitigateMeleeDamage %d damage negated, %d"
|
mlog(SPELLS__EFFECT_VALUES, "Mob::ReduceDamage SE_MitigateMeleeDamage %d damage negated, %d"
|
||||||
" damage remaining.", damage_to_reduce, buffs[slot].melee_rune);
|
" damage remaining.", damage_to_reduce, buffs[slot].melee_rune);
|
||||||
buffs[slot].melee_rune = (buffs[slot].melee_rune - damage_to_reduce);
|
|
||||||
|
if (spellbonuses.MitigateMeleeRune[3])
|
||||||
|
buffs[slot].melee_rune = (buffs[slot].melee_rune - damage_to_reduce);
|
||||||
|
|
||||||
damage -= damage_to_reduce;
|
damage -= damage_to_reduce;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3286,15 +3293,21 @@ int32 Mob::AffectMagicalDamage(int32 damage, uint16 spell_id, const bool iBuffTi
|
|||||||
if(slot >= 0)
|
if(slot >= 0)
|
||||||
{
|
{
|
||||||
int damage_to_reduce = damage * spellbonuses.MitigateDotRune[0] / 100;
|
int damage_to_reduce = damage * spellbonuses.MitigateDotRune[0] / 100;
|
||||||
if(damage_to_reduce > buffs[slot].dot_rune)
|
|
||||||
|
if (spellbonuses.MitigateDotRune[2] && (damage_to_reduce > spellbonuses.MitigateDotRune[2]))
|
||||||
|
damage_to_reduce = spellbonuses.MitigateDotRune[2];
|
||||||
|
|
||||||
|
if(spellbonuses.MitigateDotRune[3] && (damage_to_reduce >= buffs[slot].dot_rune))
|
||||||
{
|
{
|
||||||
damage -= damage_to_reduce;
|
damage -= buffs[slot].dot_rune;
|
||||||
if(!TryFadeEffect(slot))
|
if(!TryFadeEffect(slot))
|
||||||
BuffFadeBySlot(slot);
|
BuffFadeBySlot(slot);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buffs[slot].dot_rune = (buffs[slot].dot_rune - damage_to_reduce);
|
if (spellbonuses.MitigateDotRune[3])
|
||||||
|
buffs[slot].dot_rune = (buffs[slot].dot_rune - damage_to_reduce);
|
||||||
|
|
||||||
damage -= damage_to_reduce;
|
damage -= damage_to_reduce;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3316,9 +3329,9 @@ int32 Mob::AffectMagicalDamage(int32 damage, uint16 spell_id, const bool iBuffTi
|
|||||||
{
|
{
|
||||||
DisableSpellRune = true;
|
DisableSpellRune = true;
|
||||||
int damage_to_reduce = damage * spellbonuses.SpellThresholdGuard[0] / 100;
|
int damage_to_reduce = damage * spellbonuses.SpellThresholdGuard[0] / 100;
|
||||||
if(damage_to_reduce > buffs[slot].magic_rune)
|
if(damage_to_reduce >= buffs[slot].magic_rune)
|
||||||
{
|
{
|
||||||
damage -= damage_to_reduce;
|
damage -= buffs[slot].magic_rune;
|
||||||
if(!TryFadeEffect(slot))
|
if(!TryFadeEffect(slot))
|
||||||
BuffFadeBySlot(slot);
|
BuffFadeBySlot(slot);
|
||||||
}
|
}
|
||||||
@ -3337,11 +3350,15 @@ int32 Mob::AffectMagicalDamage(int32 damage, uint16 spell_id, const bool iBuffTi
|
|||||||
if(slot >= 0)
|
if(slot >= 0)
|
||||||
{
|
{
|
||||||
int damage_to_reduce = damage * spellbonuses.MitigateSpellRune[0] / 100;
|
int damage_to_reduce = damage * spellbonuses.MitigateSpellRune[0] / 100;
|
||||||
if(damage_to_reduce > buffs[slot].magic_rune)
|
|
||||||
|
if (spellbonuses.MitigateSpellRune[2] && (damage_to_reduce > spellbonuses.MitigateSpellRune[2]))
|
||||||
|
damage_to_reduce = spellbonuses.MitigateSpellRune[2];
|
||||||
|
|
||||||
|
if(spellbonuses.MitigateSpellRune[3] && (damage_to_reduce >= buffs[slot].magic_rune))
|
||||||
{
|
{
|
||||||
mlog(SPELLS__EFFECT_VALUES, "Mob::ReduceDamage SE_MitigateSpellDamage %d damage negated, %d"
|
mlog(SPELLS__EFFECT_VALUES, "Mob::ReduceDamage SE_MitigateSpellDamage %d damage negated, %d"
|
||||||
" damage remaining, fading buff.", damage_to_reduce, buffs[slot].magic_rune);
|
" damage remaining, fading buff.", damage_to_reduce, buffs[slot].magic_rune);
|
||||||
damage -= damage_to_reduce;
|
damage -= buffs[slot].magic_rune;
|
||||||
if(!TryFadeEffect(slot))
|
if(!TryFadeEffect(slot))
|
||||||
BuffFadeBySlot(slot);
|
BuffFadeBySlot(slot);
|
||||||
}
|
}
|
||||||
@ -3349,7 +3366,10 @@ int32 Mob::AffectMagicalDamage(int32 damage, uint16 spell_id, const bool iBuffTi
|
|||||||
{
|
{
|
||||||
mlog(SPELLS__EFFECT_VALUES, "Mob::ReduceDamage SE_MitigateMeleeDamage %d damage negated, %d"
|
mlog(SPELLS__EFFECT_VALUES, "Mob::ReduceDamage SE_MitigateMeleeDamage %d damage negated, %d"
|
||||||
" damage remaining.", damage_to_reduce, buffs[slot].magic_rune);
|
" damage remaining.", damage_to_reduce, buffs[slot].magic_rune);
|
||||||
buffs[slot].magic_rune = (buffs[slot].magic_rune - damage_to_reduce);
|
|
||||||
|
if (spellbonuses.MitigateSpellRune[3])
|
||||||
|
buffs[slot].magic_rune = (buffs[slot].magic_rune - damage_to_reduce);
|
||||||
|
|
||||||
damage -= damage_to_reduce;
|
damage -= damage_to_reduce;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2303,6 +2303,8 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
|||||||
if (newbon->MitigateMeleeRune[0] < effect_value){
|
if (newbon->MitigateMeleeRune[0] < effect_value){
|
||||||
newbon->MitigateMeleeRune[0] = effect_value;
|
newbon->MitigateMeleeRune[0] = effect_value;
|
||||||
newbon->MitigateMeleeRune[1] = buffslot;
|
newbon->MitigateMeleeRune[1] = buffslot;
|
||||||
|
newbon->MitigateMeleeRune[2] = base2;
|
||||||
|
newbon->MitigateMeleeRune[3] = max;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2333,6 +2335,8 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
|||||||
if (newbon->MitigateSpellRune[0] < effect_value){
|
if (newbon->MitigateSpellRune[0] < effect_value){
|
||||||
newbon->MitigateSpellRune[0] = effect_value;
|
newbon->MitigateSpellRune[0] = effect_value;
|
||||||
newbon->MitigateSpellRune[1] = buffslot;
|
newbon->MitigateSpellRune[1] = buffslot;
|
||||||
|
newbon->MitigateSpellRune[2] = base2;
|
||||||
|
newbon->MitigateSpellRune[3] = max;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2342,6 +2346,8 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
|||||||
if (newbon->MitigateDotRune[0] < effect_value){
|
if (newbon->MitigateDotRune[0] < effect_value){
|
||||||
newbon->MitigateDotRune[0] = effect_value;
|
newbon->MitigateDotRune[0] = effect_value;
|
||||||
newbon->MitigateDotRune[1] = buffslot;
|
newbon->MitigateDotRune[1] = buffslot;
|
||||||
|
newbon->MitigateDotRune[2] = base2;
|
||||||
|
newbon->MitigateDotRune[3] = max;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -329,11 +329,11 @@ struct StatBonuses {
|
|||||||
bool NegateEffects; // Check if you contain a buff with negate effect. (only spellbonuses)
|
bool NegateEffects; // Check if you contain a buff with negate effect. (only spellbonuses)
|
||||||
int16 SkillDamageAmount2[HIGHEST_SKILL+2]; // Adds skill specific damage
|
int16 SkillDamageAmount2[HIGHEST_SKILL+2]; // Adds skill specific damage
|
||||||
uint16 NegateAttacks[2]; // 0 = bool HasEffect 1 = Buff Slot
|
uint16 NegateAttacks[2]; // 0 = bool HasEffect 1 = Buff Slot
|
||||||
uint16 MitigateMeleeRune[2]; // 0 = Mitigation value 1 = Buff Slot
|
uint16 MitigateMeleeRune[4]; // 0 = Mitigation value 1 = Buff Slot 2 = Max mitigation per hit 3 = Rune Amt
|
||||||
uint16 MeleeThresholdGuard[3]; // 0 = Mitigation value 1 = Buff Slot 2 = Min damage to trigger.
|
uint16 MeleeThresholdGuard[3]; // 0 = Mitigation value 1 = Buff Slot 2 = Min damage to trigger.
|
||||||
uint16 SpellThresholdGuard[3]; // 0 = Mitigation value 1 = Buff Slot 2 = Min damage to trigger.
|
uint16 SpellThresholdGuard[3]; // 0 = Mitigation value 1 = Buff Slot 2 = Min damage to trigger.
|
||||||
uint16 MitigateSpellRune[2]; // 0 = Mitigation value 1 = Buff Slot
|
uint16 MitigateSpellRune[4]; // 0 = Mitigation value 1 = Buff Slot 2 = Max mitigation per spell 3 = Rune Amt
|
||||||
uint16 MitigateDotRune[2]; // 0 = Mitigation value 1 = Buff Slot
|
uint16 MitigateDotRune[4]; // 0 = Mitigation value 1 = Buff Slot 2 = Max mitigation per tick 3 = Rune Amt
|
||||||
uint32 TriggerMeleeThreshold[3]; // 0 = Spell Effect ID 1 = Buff slot 2 = Damage Amount to Trigger
|
uint32 TriggerMeleeThreshold[3]; // 0 = Spell Effect ID 1 = Buff slot 2 = Damage Amount to Trigger
|
||||||
uint32 TriggerSpellThreshold[3]; // 0 = Spell Effect ID 1 = Buff slot 2 = Damage Amount to Trigger
|
uint32 TriggerSpellThreshold[3]; // 0 = Spell Effect ID 1 = Buff slot 2 = Damage Amount to Trigger
|
||||||
uint16 ManaAbsorbPercentDamage[2]; // 0 = Mitigation value 1 = Buff Slot
|
uint16 ManaAbsorbPercentDamage[2]; // 0 = Mitigation value 1 = Buff Slot
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user