mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-25 18:47:35 +00:00
Implemented: SPA 521 EndAbsorbPctDmg
Implemented SE_Endurance_Absorb_Pct_Damage 521 Absorb Damage using Endurance: base1 % (base2 End per 1 HP) Note: Both base1 and base2 need to be divided by 100 for actually value
This commit is contained in:
+1
-1
@@ -861,7 +861,7 @@ typedef enum {
|
|||||||
//#define SE_Attack_Accuracy_Max_Percent 518 //
|
//#define SE_Attack_Accuracy_Max_Percent 518 //
|
||||||
//#define SE_Luck_Amount 519 //
|
//#define SE_Luck_Amount 519 //
|
||||||
//#define SE_Luck_Percent 520 //
|
//#define SE_Luck_Percent 520 //
|
||||||
//#define SE_Endurance_Absorb_Pct_Damage 521 //
|
#define SE_Endurance_Absorb_Pct_Damage 521 //
|
||||||
#define SE_Instant_Mana_Pct 522 //
|
#define SE_Instant_Mana_Pct 522 //
|
||||||
#define SE_Instant_Endurance_Pct 523 //
|
#define SE_Instant_Endurance_Pct 523 //
|
||||||
#define SE_Duration_HP_Pct 524 //
|
#define SE_Duration_HP_Pct 524 //
|
||||||
|
|||||||
+15
-2
@@ -3323,8 +3323,8 @@ int32 Mob::ReduceAllDamage(int32 damage)
|
|||||||
if (damage <= 0)
|
if (damage <= 0)
|
||||||
return damage;
|
return damage;
|
||||||
|
|
||||||
if (spellbonuses.ManaAbsorbPercentDamage[0]) {
|
if (spellbonuses.ManaAbsorbPercentDamage) {
|
||||||
int32 mana_reduced = damage * spellbonuses.ManaAbsorbPercentDamage[0] / 100;
|
int32 mana_reduced = damage * spellbonuses.ManaAbsorbPercentDamage / 100;
|
||||||
if (GetMana() >= mana_reduced) {
|
if (GetMana() >= mana_reduced) {
|
||||||
damage -= mana_reduced;
|
damage -= mana_reduced;
|
||||||
SetMana(GetMana() - mana_reduced);
|
SetMana(GetMana() - mana_reduced);
|
||||||
@@ -3332,6 +3332,19 @@ int32 Mob::ReduceAllDamage(int32 damage)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (spellbonuses.EnduranceAbsorbPercentDamage[0]) {
|
||||||
|
int32 damage_reduced = damage * spellbonuses.EnduranceAbsorbPercentDamage[0] / 10000;
|
||||||
|
int32 endurance_drain = damage_reduced * spellbonuses.EnduranceAbsorbPercentDamage[1] / 10000;
|
||||||
|
if (endurance_drain < 1)
|
||||||
|
endurance_drain = 1;
|
||||||
|
|
||||||
|
if (IsClient() && CastToClient()->GetEndurance() >= endurance_drain) {
|
||||||
|
damage -= damage_reduced;
|
||||||
|
CastToClient()->SetEndurance(CastToClient()->GetEndurance() - endurance_drain);
|
||||||
|
TryTriggerOnValueAmount(false, false, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CheckNumHitsRemaining(NumHit::IncomingDamage);
|
CheckNumHitsRemaining(NumHit::IncomingDamage);
|
||||||
|
|
||||||
return(damage);
|
return(damage);
|
||||||
|
|||||||
+17
-5
@@ -2692,9 +2692,17 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
|
|||||||
|
|
||||||
case SE_ManaAbsorbPercentDamage:
|
case SE_ManaAbsorbPercentDamage:
|
||||||
{
|
{
|
||||||
if (new_bonus->ManaAbsorbPercentDamage[0] < effect_value){
|
if (new_bonus->ManaAbsorbPercentDamage < effect_value){
|
||||||
new_bonus->ManaAbsorbPercentDamage[0] = effect_value;
|
new_bonus->ManaAbsorbPercentDamage = effect_value;
|
||||||
new_bonus->ManaAbsorbPercentDamage[1] = buffslot;
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case SE_Endurance_Absorb_Pct_Damage:
|
||||||
|
{
|
||||||
|
if (new_bonus->EnduranceAbsorbPercentDamage[0] < effect_value) {
|
||||||
|
new_bonus->EnduranceAbsorbPercentDamage[0] = effect_value;
|
||||||
|
new_bonus->EnduranceAbsorbPercentDamage[1] = base2;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -4356,8 +4364,12 @@ void Mob::NegateSpellsBonuses(uint16 spell_id)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SE_ManaAbsorbPercentDamage:
|
case SE_ManaAbsorbPercentDamage:
|
||||||
spellbonuses.ManaAbsorbPercentDamage[0] = effect_value;
|
spellbonuses.ManaAbsorbPercentDamage = effect_value;
|
||||||
spellbonuses.ManaAbsorbPercentDamage[1] = -1;
|
break;
|
||||||
|
|
||||||
|
case SE_Endurance_Absorb_Pct_Damage:
|
||||||
|
spellbonuses.EnduranceAbsorbPercentDamage[0] = effect_value;
|
||||||
|
spellbonuses.EnduranceAbsorbPercentDamage[1] = effect_value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SE_ShieldBlock:
|
case SE_ShieldBlock:
|
||||||
|
|||||||
+2
-1
@@ -494,7 +494,8 @@ struct StatBonuses {
|
|||||||
uint32 MitigateDotRune[4]; // 0 = Mitigation value 1 = Buff Slot 2 = Max mitigation per tick 3 = Rune Amt
|
uint32 MitigateDotRune[4]; // 0 = Mitigation value 1 = Buff Slot 2 = Max mitigation per tick 3 = Rune Amt
|
||||||
bool TriggerMeleeThreshold; // Has Melee Threshhold
|
bool TriggerMeleeThreshold; // Has Melee Threshhold
|
||||||
bool TriggerSpellThreshold; // Has Spell Threshhold
|
bool TriggerSpellThreshold; // Has Spell Threshhold
|
||||||
uint32 ManaAbsorbPercentDamage[2]; // 0 = Mitigation value 1 = Buff Slot
|
uint32 ManaAbsorbPercentDamage; // 0 = Mitigation value
|
||||||
|
int32 EnduranceAbsorbPercentDamage[2]; // 0 = Mitigation value 1 = Percent Endurance drain per HP lost
|
||||||
int32 ShieldBlock; // Chance to Shield Block
|
int32 ShieldBlock; // Chance to Shield Block
|
||||||
int32 BlockBehind; // Chance to Block Behind (with our without shield)
|
int32 BlockBehind; // Chance to Block Behind (with our without shield)
|
||||||
bool CriticalRegenDecay; // increase critical regen chance, decays based on spell level cast
|
bool CriticalRegenDecay; // increase critical regen chance, decays based on spell level cast
|
||||||
|
|||||||
@@ -1162,7 +1162,7 @@ uint32 Lua_StatBonuses::GetMitigateDotRune(int idx) const {
|
|||||||
|
|
||||||
uint32 Lua_StatBonuses::GetManaAbsorbPercentDamage(int idx) const {
|
uint32 Lua_StatBonuses::GetManaAbsorbPercentDamage(int idx) const {
|
||||||
Lua_Safe_Call_Int();
|
Lua_Safe_Call_Int();
|
||||||
return self->ManaAbsorbPercentDamage[idx];
|
return self->ManaAbsorbPercentDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 Lua_StatBonuses::GetImprovedTaunt(int idx) const {
|
int32 Lua_StatBonuses::GetImprovedTaunt(int idx) const {
|
||||||
|
|||||||
Reference in New Issue
Block a user