mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-18 11:21:29 +00:00
Re-Implemented SE_TriggerMeleeThreshold and SE_TriggerSpellThreshold correctly - Trigger spell if owner of buff
takes more than the specified damage amount in a SINGLE hit, then fade the buff.
This commit is contained in:
parent
35e72692c1
commit
542c0913d6
@ -4,6 +4,8 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
|||||||
Kayen: Implemented SE_Sanctuary - Places caster at bottom hate list, effect fades if caster cast spell on targets other than self.
|
Kayen: Implemented SE_Sanctuary - Places caster at bottom hate list, effect fades if caster cast spell on targets other than self.
|
||||||
Kayen: Implemented SE_ResourceTap - Coverts a percent of dmg from dmg spells(DD/DoT) to hp/mana/end.
|
Kayen: Implemented SE_ResourceTap - Coverts a percent of dmg from dmg spells(DD/DoT) to hp/mana/end.
|
||||||
Kayen: Implemented SE_FactionModPct - Modifies faction gains and losses by percent.
|
Kayen: Implemented SE_FactionModPct - Modifies faction gains and losses by percent.
|
||||||
|
Kayen: Re-Implemented SE_TriggerMeleeThreshold and SE_TriggerSpellThreshold correctly - Trigger spell if owner of buff
|
||||||
|
takes more than the specified damage amount in a SINGLE hit, then fade the buff.
|
||||||
|
|
||||||
== 06/25/2014 ==
|
== 06/25/2014 ==
|
||||||
Kayen: Updated SE_Hate (Renamed from SE_Hate2) to now properly work for instant +/- hate spells.
|
Kayen: Updated SE_Hate (Renamed from SE_Hate2) to now properly work for instant +/- hate spells.
|
||||||
|
|||||||
@ -600,8 +600,8 @@ typedef enum {
|
|||||||
#define SE_MitigateDotDamage 450 // implemented DOT spell mitigation rune with max value
|
#define SE_MitigateDotDamage 450 // implemented DOT spell mitigation rune with max value
|
||||||
#define SE_MeleeThresholdGuard 451 // implemented Partial Melee Rune that only is lowered if melee hits are over X amount of damage
|
#define SE_MeleeThresholdGuard 451 // implemented Partial Melee Rune that only is lowered if melee hits are over X amount of damage
|
||||||
#define SE_SpellThresholdGuard 452 // implemented Partial Spell Rune that only is lowered if spell hits are over X amount of damage
|
#define SE_SpellThresholdGuard 452 // implemented Partial Spell Rune that only is lowered if spell hits are over X amount of damage
|
||||||
#define SE_TriggerMeleeThreshold 453 // implemented Trigger effect on X amount of melee damage taken
|
#define SE_TriggerMeleeThreshold 453 // implemented Trigger effect on X amount of melee damage taken in a single hit
|
||||||
#define SE_TriggerSpellThreshold 454 // implemented Trigger effect on X amount of spell damage taken
|
#define SE_TriggerSpellThreshold 454 // implemented Trigger effect on X amount of spell damage taken in a single hit
|
||||||
#define SE_AddHatePct 455 // implemented Modify total hate by %
|
#define SE_AddHatePct 455 // implemented Modify total hate by %
|
||||||
#define SE_AddHateOverTimePct 456 // implemented Modify total hate by % over time.
|
#define SE_AddHateOverTimePct 456 // implemented Modify total hate by % over time.
|
||||||
#define SE_ResourceTap 457 // implemented Coverts a percent of dmg from dmg spells(DD/DoT) to hp/mana/end.
|
#define SE_ResourceTap 457 // implemented Coverts a percent of dmg from dmg spells(DD/DoT) to hp/mana/end.
|
||||||
|
|||||||
@ -3251,20 +3251,6 @@ int32 Mob::ReduceDamage(int32 damage)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spellbonuses.TriggerMeleeThreshold[2]){
|
|
||||||
slot = spellbonuses.TriggerMeleeThreshold[1];
|
|
||||||
|
|
||||||
if (slot >= 0) {
|
|
||||||
if(damage > buffs[slot].melee_rune) {
|
|
||||||
if(!TryFadeEffect(slot))
|
|
||||||
BuffFadeBySlot(slot);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
buffs[slot].melee_rune = (buffs[slot].melee_rune - damage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(damage < 1)
|
if(damage < 1)
|
||||||
return -6;
|
return -6;
|
||||||
|
|
||||||
@ -3393,20 +3379,6 @@ int32 Mob::AffectMagicalDamage(int32 damage, uint16 spell_id, const bool iBuffTi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spellbonuses.TriggerSpellThreshold[2]){
|
|
||||||
slot = spellbonuses.TriggerSpellThreshold[1];
|
|
||||||
|
|
||||||
if (slot >= 0) {
|
|
||||||
if(damage > buffs[slot].magic_rune) {
|
|
||||||
if(!TryFadeEffect(slot))
|
|
||||||
BuffFadeBySlot(slot);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
buffs[slot].magic_rune = (buffs[slot].magic_rune - damage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(damage < 1)
|
if(damage < 1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -3599,6 +3571,8 @@ void Mob::CommonDamage(Mob* attacker, int32 &damage, const uint16 spell_id, cons
|
|||||||
if(spell_id == SPELL_UNKNOWN) {
|
if(spell_id == SPELL_UNKNOWN) {
|
||||||
damage = ReduceDamage(damage);
|
damage = ReduceDamage(damage);
|
||||||
mlog(COMBAT__HITS, "Melee Damage reduced to %d", damage);
|
mlog(COMBAT__HITS, "Melee Damage reduced to %d", damage);
|
||||||
|
ReduceAllDamage(damage);
|
||||||
|
TryTriggerThreshHold(damage, SE_TriggerMeleeThreshold, attacker);
|
||||||
} else {
|
} else {
|
||||||
int32 origdmg = damage;
|
int32 origdmg = damage;
|
||||||
damage = AffectMagicalDamage(damage, spell_id, iBuffTic, attacker);
|
damage = AffectMagicalDamage(damage, spell_id, iBuffTic, attacker);
|
||||||
@ -3610,14 +3584,13 @@ void Mob::CommonDamage(Mob* attacker, int32 &damage, const uint16 spell_id, cons
|
|||||||
//Kayen: Probably need to add a filter for this - Not sure if this msg is correct but there should be a message for spell negate/runes.
|
//Kayen: Probably need to add a filter for this - Not sure if this msg is correct but there should be a message for spell negate/runes.
|
||||||
Message(263, "%s tries to cast on YOU, but YOUR magical skin absorbs the spell.",attacker->GetCleanName());
|
Message(263, "%s tries to cast on YOU, but YOUR magical skin absorbs the spell.",attacker->GetCleanName());
|
||||||
}
|
}
|
||||||
|
ReduceAllDamage(damage);
|
||||||
|
TryTriggerThreshHold(damage, SE_TriggerSpellThreshold, attacker);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skill_used)
|
if (skill_used)
|
||||||
CheckNumHitsRemaining(NUMHIT_IncomingHitSuccess);
|
CheckNumHitsRemaining(NUMHIT_IncomingHitSuccess);
|
||||||
|
|
||||||
ReduceAllDamage(damage);
|
|
||||||
|
|
||||||
if(IsClient() && CastToClient()->sneaking){
|
if(IsClient() && CastToClient()->sneaking){
|
||||||
CastToClient()->sneaking = false;
|
CastToClient()->sneaking = false;
|
||||||
SendAppearancePacket(AT_Sneak, 0);
|
SendAppearancePacket(AT_Sneak, 0);
|
||||||
|
|||||||
@ -2425,24 +2425,12 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
|||||||
}
|
}
|
||||||
|
|
||||||
case SE_TriggerMeleeThreshold:
|
case SE_TriggerMeleeThreshold:
|
||||||
{
|
newbon->TriggerMeleeThreshold = true;
|
||||||
if (newbon->TriggerMeleeThreshold[2] < base2){
|
|
||||||
newbon->TriggerMeleeThreshold[0] = effect_value;
|
|
||||||
newbon->TriggerMeleeThreshold[1] = buffslot;
|
|
||||||
newbon->TriggerMeleeThreshold[2] = base2;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case SE_TriggerSpellThreshold:
|
case SE_TriggerSpellThreshold:
|
||||||
{
|
newbon->TriggerSpellThreshold = true;
|
||||||
if (newbon->TriggerSpellThreshold[2] < base2){
|
|
||||||
newbon->TriggerSpellThreshold[0] = effect_value;
|
|
||||||
newbon->TriggerSpellThreshold[1] = buffslot;
|
|
||||||
newbon->TriggerSpellThreshold[2] = base2;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case SE_ShieldBlock:
|
case SE_ShieldBlock:
|
||||||
newbon->ShieldBlock += effect_value;
|
newbon->ShieldBlock += effect_value;
|
||||||
@ -4218,15 +4206,11 @@ void Mob::NegateSpellsBonuses(uint16 spell_id)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SE_TriggerMeleeThreshold:
|
case SE_TriggerMeleeThreshold:
|
||||||
spellbonuses.TriggerMeleeThreshold[0] = effect_value;
|
spellbonuses.TriggerMeleeThreshold = effect_value;
|
||||||
spellbonuses.TriggerMeleeThreshold[1] = effect_value;
|
|
||||||
spellbonuses.TriggerMeleeThreshold[2] = effect_value;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SE_TriggerSpellThreshold:
|
case SE_TriggerSpellThreshold:
|
||||||
spellbonuses.TriggerSpellThreshold[0] = effect_value;
|
spellbonuses.TriggerSpellThreshold = effect_value;
|
||||||
spellbonuses.TriggerSpellThreshold[1] = effect_value;
|
|
||||||
spellbonuses.TriggerSpellThreshold[2] = effect_value;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SE_DivineAura:
|
case SE_DivineAura:
|
||||||
|
|||||||
@ -3452,8 +3452,7 @@ bool Mob::TryFadeEffect(int slot)
|
|||||||
{
|
{
|
||||||
for(int i = 0; i < EFFECT_COUNT; i++)
|
for(int i = 0; i < EFFECT_COUNT; i++)
|
||||||
{
|
{
|
||||||
if (spells[buffs[slot].spellid].effectid[i] == SE_CastOnWearoff || spells[buffs[slot].spellid].effectid[i] == SE_EffectOnFade
|
if (spells[buffs[slot].spellid].effectid[i] == SE_CastOnWearoff || spells[buffs[slot].spellid].effectid[i] == SE_EffectOnFade)
|
||||||
|| spells[buffs[slot].spellid].effectid[i] == SE_TriggerMeleeThreshold || spells[buffs[slot].spellid].effectid[i] == SE_TriggerSpellThreshold)
|
|
||||||
{
|
{
|
||||||
uint16 spell_id = spells[buffs[slot].spellid].base[i];
|
uint16 spell_id = spells[buffs[slot].spellid].base[i];
|
||||||
BuffFadeBySlot(slot);
|
BuffFadeBySlot(slot);
|
||||||
|
|||||||
@ -230,6 +230,7 @@ public:
|
|||||||
void SpellProjectileEffect();
|
void SpellProjectileEffect();
|
||||||
bool TrySpellProjectile(Mob* spell_target, uint16 spell_id);
|
bool TrySpellProjectile(Mob* spell_target, uint16 spell_id);
|
||||||
void ResourceTap(int32 damage, uint16 spell_id);
|
void ResourceTap(int32 damage, uint16 spell_id);
|
||||||
|
void TryTriggerThreshHold(int32 damage, int effect_id, Mob* attacker);
|
||||||
|
|
||||||
//Buff
|
//Buff
|
||||||
void BuffProcess();
|
void BuffProcess();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user