NOTE: The patch file won't apply at least on my computer via git bash so you may want to add the lines manually to source.
^ So if you are not fine with that then stop whining for my fixes. Seriously.
This following patch file will fix:
*Divine Shield immunity. More about that here.
*After using Divine Shield, Divine Protection or Hand of Protection you get "a mark" on yourself so you cannot use Avenging Wrath for next 30 seconds. ArcEmu did not use for some weird reason the real spellid for it. So this patch gives the right spellid for the mark.
*Art of War (retribution paladin) talent should only be consumed when you use either Exorcism or Flash of Light. It says that on the tooltip.
*Lava Burst ability no longer ever consumes a Flame Shock debuff off of the target.
*Forbearance, Avenging Wrath marker, Hypothermia, Weakened Soul, Recently Bandaged and Sated are debuffs which are NOT dispellable by ANY means. You get rid of them only by dying or waiting the duration. On ArcEmu Divine Shield removed all this and gave you an immunity against them.
NOTE: Only spell which was not tested was Flame Shock / Lava Burst.
Pastebin link for patch.
Patch file:
diff --git a/src/arcemu-world/HackFixes.cpp b/src/arcemu-world/HackFixes.cpp
index a521460..fc1bb08 100644
--- a/src/arcemu-world/HackFixes.cpp
+++ b/src/arcemu-world/HackFixes.cpp
@@ -2305,35 +2392,96 @@ void ApplyNormalFixes()
if(sp != NULL)
sp->noproc = true;
+ //Paladin - Avenging Wrath marker - Is forced debuff
+ sp = CheckAndReturnSpellEntry(61987);
+ if(sp != NULL)
+ {
+ sp->c_is_flags = SPELL_FLAG_IS_FORCEDDEBUFF;
+ sp->Attributes = ATTRIBUTES_IGNORE_INVULNERABILITY;
+ }
+
//Paladin - Forbearance - Is forced debuff
sp = CheckAndReturnSpellEntry(25771);
if(sp != NULL)
- sp->c_is_flags |= SPELL_FLAG_IS_FORCEDDEBUFF;
+ {
+ sp->c_is_flags = SPELL_FLAG_IS_FORCEDDEBUFF;
+ sp->Attributes = ATTRIBUTES_IGNORE_INVULNERABILITY;
+ }
//Divine Protection
sp = CheckAndReturnSpellEntry(498);
@@ -3356,11 +3505,12 @@ void ApplyNormalFixes()
sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
sp->EffectTriggerSpell[0] = 33619; //!! WRONG spell, we will make direct dmg here
}
- // Weakened Soul - Is forced debuff
+ // Weakened Soul - is debuff
sp = CheckAndReturnSpellEntry(6788);
if(sp != NULL)
{
sp->c_is_flags = SPELL_FLAG_IS_FORCEDDEBUFF;
+ sp->Attributes = ATTRIBUTES_IGNORE_INVULNERABILITY;
}
// Penance
@@ -3510,10 +3660,13 @@ void ApplyNormalFixes()
if(sp != NULL)
sp->casterAuraSpellNot = 57724; //sated debuff
- //Sated
+ // Sated - is debuff
sp = CheckAndReturnSpellEntry(57724);
if(sp != NULL)
- sp->c_is_flags |= SPELL_FLAG_IS_FORCEDDEBUFF;
+ {
+ sp->c_is_flags = SPELL_FLAG_IS_FORCEDDEBUFF;
+ sp->Attributes = ATTRIBUTES_IGNORE_INVULNERABILITY;
+ }
/**********************************************************
* Heroism
@@ -3523,10 +3676,13 @@ void ApplyNormalFixes()
if(sp != NULL)
sp->casterAuraSpellNot = 57723; //sated debuff
- //Sated
+ // Sated - is debuff
sp = CheckAndReturnSpellEntry(57723);
if(sp != NULL)
- sp->c_is_flags |= SPELL_FLAG_IS_FORCEDDEBUFF;
+ {
+ sp->c_is_flags = SPELL_FLAG_IS_FORCEDDEBUFF;
+ sp->Attributes = ATTRIBUTES_IGNORE_INVULNERABILITY;
+ }
/**********************************************************
* Lightning Overload
@@ -4345,10 +4501,13 @@ void ApplyNormalFixes()
if(sp != NULL)
sp->EffectImplicitTargetA[0] = EFF_TARGET_DYNAMIC_OBJECT;
- // Hypothermia: undispellable
+ // Hypothermia - forced debuff
sp = CheckAndReturnSpellEntry(41425);
if(sp != NULL)
+ {
sp->c_is_flags = SPELL_FLAG_IS_FORCEDDEBUFF;
+ sp->Attributes = ATTRIBUTES_IGNORE_INVULNERABILITY;
+ }
// Mage - Permafrost Rank 1
sp = CheckAndReturnSpellEntry(11175);
@@ -6964,6 +7130,14 @@ void ApplyNormalFixes()
sp->procChance = 100;
}
+ // Recently Bandaged - is debuff
+ sp = CheckAndReturnSpellEntry(11196);
+ if(sp != NULL)
+ {
+ sp->c_is_flags = SPELL_FLAG_IS_FORCEDDEBUFF;
+ sp->Attributes = ATTRIBUTES_IGNORE_INVULNERABILITY;
+ }
+
sp = CheckAndReturnSpellEntry(44856); // Bash'ir Phasing Device
if(sp != NULL)
sp->AuraInterruptFlags = AURA_INTERRUPT_ON_LEAVE_AREA;
diff --git a/src/arcemu-world/Unit.cpp b/src/arcemu-world/Unit.cpp
index f84f196..553cb60 100644
--- a/src/arcemu-world/Unit.cpp
+++ b/src/arcemu-world/Unit.cpp
@@ -2526,6 +2516,13 @@ uint32 Unit::HandleProc(uint32 flag, Unit* victim, SpellEntry* CastingSpell, boo
continue;
}
break;
+ case 53489:
+ case 59578: // The Art of War (Paladin talent) should disappear only from flash of light or exorcism
+ {
+ if(CastingSpell->NameHash != SPELL_HASH_FLASH_OF_LIGHT || CastingSpell->NameHash != SPELL_HASH_EXORCISM)
+ continue;
+ }
+ break;
case 65156: // Juggernaut
{
if(CastingSpell->NameHash != SPELL_HASH_MORTAL_STRIKE &&
@@ -4286,7 +4283,9 @@ void Unit::AddAura(Aura* aur)
}
}
- if(aur->GetSpellProto()->School && SchoolImmunityList[aur->GetSpellProto()->School])
+ if(aur->GetSpellProto()->School && SchoolImmunityList[aur->GetSpellProto()->School]
+ && !aur->IsPositive() && aur->GetSpellProto()->Attributes && aur->GetSpellProto()->Attributes != ATTRIBUTES_IGNORE_INVULNERABILITY)
+ // basically if aura is not positive and aura does not have ignore invulnerability flag, delete aura
{
delete aur;
return;
@@ -8098,13 +8109,9 @@ bool Unit::IsCriticalDamageForSpell(Object* victim, SpellEntry* spell)
// HACK!!!
Aura* fs = NULL;
if(victim->IsUnit()
&& spell->NameHash == SPELL_HASH_LAVA_BURST
&& ( fs = TO< Unit* >(victim)->FindAuraByNameHash(SPELL_HASH_FLAME_SHOCK) ) != NULL)
- {
result = true;
- if( !HasAura(55447) ) // Glyph of Flame Shock
- fs->Remove();
- }
return result;
}
diff --git a/src/arcemu-world/Spell.cpp b/src/arcemu-world/Spell.cpp
index 821e3ae..2cf22ff 100644
--- a/src/arcemu-world/Spell.cpp
+++ b/src/arcemu-world/Spell.cpp
@@ -2881,16 +2881,12 @@ void Spell::HandleAddAura(uint64 guid)
uint32 spellid = 0;
if((GetProto()->MechanicsType == MECHANIC_INVULNARABLE && GetProto()->Id != 25771) || GetProto()->Id == 31884) // Cast spell Forbearance
{
if(GetProto()->Id != 31884)
spellid = 25771;
- if(Target->IsPlayer())
- {
- sEventMgr.AddEvent(TO< Player* >(Target), &Player::AvengingWrath, EVENT_PLAYER_AVENGING_WRATH, 30000, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT);
- TO< Player* >(Target)->mAvengingWrath = false;
- }
+ p_caster->CastSpell(unitTarget, 61987, true);
}
else if(GetProto()->MechanicsType == MECHANIC_HEALING && GetProto()->Id != 11196) // Cast spell Recently Bandaged
spellid = 11196;

Help



















