diff --git a/changelog.txt b/changelog.txt index e717b8cf8..68e2d4593 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,10 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50) ------------------------------------------------------- +== 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) +Setting se_max to 1 for SkillDamageTaken effects (127) will allow for stackable mitigation/weakness same as quest function ModSkillDmgTaken. + + == 06/8/2014 == KLS: Changed lua API: eq.get_globals(client, npc) has been removed. Use eq.get_globals(npc, client) instead. There's a bug with something in gcc 4.6.3 (maybe other versions) on x86 that this is attempting to combat. diff --git a/common/spdat.cpp b/common/spdat.cpp index 9bf01d413..013a917f1 100644 --- a/common/spdat.cpp +++ b/common/spdat.cpp @@ -818,7 +818,7 @@ int GetSpellEffectDescNum(uint16 spell_id) return -1; } -DmgShieldType GetDamageShieldType(uint16 spell_id) +DmgShieldType GetDamageShieldType(uint16 spell_id, int32 DSType) { // If we have a DamageShieldType for this spell from the damageshieldtypes table, return that, // else, make a guess, based on the resist type. Default return value is DS_THORNS @@ -841,6 +841,9 @@ DmgShieldType GetDamageShieldType(uint16 spell_id) } } + else if (DSType) + return (DmgShieldType) DSType; + return DS_THORNS; } diff --git a/common/spdat.h b/common/spdat.h index c7452426d..87f51c07a 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -840,7 +840,7 @@ uint32 GetPartialMagicRuneAmount(uint32 spell_id); int CalcPetHp(int levelb, int classb, int STA = 75); const char *GetRandPetName(); int GetSpellEffectDescNum(uint16 spell_id); -DmgShieldType GetDamageShieldType(uint16 spell_id); +DmgShieldType GetDamageShieldType(uint16 spell_id, int32 DSType = 0); bool DetrimentalSpellAllowsRest(uint16 spell_id); uint32 GetNimbusEffect(uint16 spell_id); int32 GetFuriousBash(uint16 spell_id); diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 4699bfef1..bef19ae39 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -1627,7 +1627,12 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne { newbon->DamageShield += effect_value; newbon->DamageShieldSpellID = spell_id; - newbon->DamageShieldType = GetDamageShieldType(spell_id); + //When using npc_spells_effects MAX value can be set to determine DS Type + if (IsAISpellEffect && max) + newbon->DamageShieldType = GetDamageShieldType(spell_id, max); + else + newbon->DamageShieldType = GetDamageShieldType(spell_id); + break; } @@ -1635,7 +1640,11 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne { newbon->ReverseDamageShield += effect_value; newbon->ReverseDamageShieldSpellID = spell_id; - newbon->ReverseDamageShieldType = GetDamageShieldType(spell_id); + + if (IsAISpellEffect && max) + newbon->ReverseDamageShieldType = GetDamageShieldType(spell_id, max); + else + newbon->ReverseDamageShieldType = GetDamageShieldType(spell_id); break; } @@ -1999,10 +2008,21 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne case SE_SkillDamageTaken: { - if(base2 == -1) - newbon->SkillDmgTaken[HIGHEST_SKILL+1] += effect_value; - else - newbon->SkillDmgTaken[base2] += effect_value; + //When using npc_spells_effects if MAX value set, use stackable quest based modifier. + if (IsAISpellEffect && max){ + if(base2 == -1) + SkillDmgTaken_Mod[HIGHEST_SKILL+1] = effect_value; + else + SkillDmgTaken_Mod[base2] = effect_value; + } + else { + + if(base2 == -1) + newbon->SkillDmgTaken[HIGHEST_SKILL+1] += effect_value; + else + newbon->SkillDmgTaken[base2] += effect_value; + + } break; }