diff options
author | megamage <none@none> | 2009-08-24 20:17:33 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-08-24 20:17:33 -0500 |
commit | 0175da87e47a7a6baeb4f6a5776e8dadde5d15b2 (patch) | |
tree | 965d617115305ed30819d99a130b7dad4a9e3e1b /src | |
parent | 19bfa37ec6e63252df1dea09a2560a18eaef17f3 (diff) |
*Handle some spell specific which is both food and drink. Source: Mangos
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/SpellAuraDefines.h | 2 | ||||
-rw-r--r-- | src/game/SpellAuras.cpp | 4 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 57 | ||||
-rw-r--r-- | src/game/SpellMgr.h | 25 | ||||
-rw-r--r-- | src/game/Unit.cpp | 4 |
5 files changed, 61 insertions, 31 deletions
diff --git a/src/game/SpellAuraDefines.h b/src/game/SpellAuraDefines.h index 0822b95db94..ffcbdacda34 100644 --- a/src/game/SpellAuraDefines.h +++ b/src/game/SpellAuraDefines.h @@ -66,7 +66,7 @@ enum AuraType SPELL_AURA_MOD_INVISIBILITY = 18, SPELL_AURA_MOD_INVISIBILITY_DETECTION = 19, SPELL_AURA_OBS_MOD_HEALTH = 20, //20,21 unofficial - SPELL_AURA_OBS_MOD_ENERGY = 21, + SPELL_AURA_OBS_MOD_POWER = 21, SPELL_AURA_MOD_RESISTANCE = 22, SPELL_AURA_PERIODIC_TRIGGER_SPELL = 23, SPELL_AURA_PERIODIC_ENERGIZE = 24, diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 344dd7f733a..54464b521f7 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -74,7 +74,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]= &Aura::HandleInvisibility, // 18 SPELL_AURA_MOD_INVISIBILITY &Aura::HandleInvisibilityDetect, // 19 SPELL_AURA_MOD_INVISIBILITY_DETECTION &Aura::HandleAuraModTotalHealthPercentRegen, // 20 SPELL_AURA_OBS_MOD_HEALTH - &Aura::HandleAuraModTotalEnergyPercentRegen, // 21 SPELL_AURA_OBS_MOD_ENERGY + &Aura::HandleAuraModTotalEnergyPercentRegen, // 21 SPELL_AURA_OBS_MOD_POWER &Aura::HandleAuraModResistance, // 22 SPELL_AURA_MOD_RESISTANCE &Aura::HandlePeriodicTriggerSpell, // 23 SPELL_AURA_PERIODIC_TRIGGER_SPELL &Aura::HandlePeriodicEnergize, // 24 SPELL_AURA_PERIODIC_ENERGIZE @@ -6081,7 +6081,7 @@ void AuraEffect::PeriodicTick() } break; } - case SPELL_AURA_OBS_MOD_ENERGY: + case SPELL_AURA_OBS_MOD_POWER: { if(GetMiscValue() < 0) return; diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index d9a5aec6529..373459f4015 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -469,20 +469,40 @@ SpellSpecific GetSpellSpecific(uint32 spellId) { case SPELLFAMILY_GENERIC: { - //food/drink - if (spellInfo->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED) + // Food / Drinks (mostly) + if(spellInfo->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED) { + bool food = false; + bool drink = false; for(int i = 0; i < 3; ++i) - if( spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_POWER_REGEN - || spellInfo->EffectApplyAuraName[i] == SPELL_AURA_OBS_MOD_ENERGY) - return SPELL_DRINK; - else if ( spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_REGEN - || spellInfo->EffectApplyAuraName[i] == SPELL_AURA_OBS_MOD_HEALTH) - return SPELL_FOOD; + { + switch(spellInfo->EffectApplyAuraName[i]) + { + // Food + case SPELL_AURA_MOD_REGEN: + case SPELL_AURA_OBS_MOD_HEALTH: + food = true; + break; + // Drink + case SPELL_AURA_MOD_POWER_REGEN: + case SPELL_AURA_OBS_MOD_POWER: + drink = true; + break; + default: + break; + } + } + + if(food && drink) + return SPELL_FOOD_AND_DRINK; + else if(food) + return SPELL_FOOD; + else if(drink) + return SPELL_DRINK; } // Well Fed buffs (must be exclusive with Food / Drink replenishment effects, or else Well Fed will cause them to be removed) // SpellIcon 2560 is Spell 46687, does not have this flag - else if (spellInfo->AttributesEx2 & SPELL_ATTR_EX2_FOOD_BUFF || spellInfo->SpellIconID == 2560) + else if ((spellInfo->AttributesEx2 & SPELL_ATTR_EX2_FOOD_BUFF) || spellInfo->SpellIconID == 2560) return SPELL_WELL_FED; // this may be a hack //else if((spellInfo->AttributesEx2 & SPELL_ATTR_EX2_FOOD_BUFF) @@ -639,7 +659,8 @@ SpellSpecific GetSpellSpecific(uint32 spellId) return SPELL_NORMAL; } -bool IsSingleFromSpellSpecificPerCaster(uint32 spellSpec1,uint32 spellSpec2) +// target not allow have more one spell specific from same caster +bool IsSingleFromSpellSpecificPerCaster(SpellSpecific spellSpec1,SpellSpecific spellSpec2) { switch(spellSpec1) { @@ -659,7 +680,7 @@ bool IsSingleFromSpellSpecificPerCaster(uint32 spellSpec1,uint32 spellSpec2) } } -bool IsSingleFromSpellSpecificPerTarget(uint32 spellSpec1,uint32 spellSpec2) +bool IsSingleFromSpellSpecificPerTarget(SpellSpecific spellSpec1, SpellSpecific spellSpec2) { switch(spellSpec1) { @@ -671,14 +692,22 @@ bool IsSingleFromSpellSpecificPerTarget(uint32 spellSpec1,uint32 spellSpec2) case SPELL_MAGE_POLYMORPH: case SPELL_PRESENCE: case SPELL_WELL_FED: - case SPELL_DRINK: - case SPELL_FOOD: case SPELL_CHARM: case SPELL_SCROLL: case SPELL_WARRIOR_ENRAGE: case SPELL_MAGE_ARCANE_BRILLANCE: case SPELL_PRIEST_DIVINE_SPIRIT: return spellSpec1==spellSpec2; + case SPELL_FOOD: + return spellSpec2==SPELL_FOOD + || spellSpec2==SPELL_FOOD_AND_DRINK; + case SPELL_DRINK: + return spellSpec2==SPELL_DRINK + || spellSpec2==SPELL_FOOD_AND_DRINK; + case SPELL_FOOD_AND_DRINK: + return spellSpec2==SPELL_FOOD + || spellSpec2==SPELL_DRINK + || spellSpec2==SPELL_FOOD_AND_DRINK; case SPELL_BATTLE_ELIXIR: return spellSpec2==SPELL_BATTLE_ELIXIR || spellSpec2==SPELL_FLASK_ELIXIR; @@ -3054,7 +3083,7 @@ bool SpellMgr::CanAurasStack(SpellEntry const *spellInfo_1, SpellEntry const *sp case SPELL_AURA_PERIODIC_MANA_LEECH: case SPELL_AURA_PERIODIC_LEECH: case SPELL_AURA_POWER_BURN_MANA: - case SPELL_AURA_OBS_MOD_ENERGY: + case SPELL_AURA_OBS_MOD_POWER: case SPELL_AURA_OBS_MOD_HEALTH: case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE: return true; diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 4b5de9287ac..934f63a1684 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -116,16 +116,17 @@ enum SpellSpecific SPELL_FLASK_ELIXIR = 16, SPELL_WARLOCK_CORRUPTION= 17, SPELL_WELL_FED = 18, - SPELL_DRINK = 19, - SPELL_FOOD = 20, - SPELL_PRESENCE = 21, - SPELL_CHARM = 22, - SPELL_SCROLL = 23, - SPELL_MAGE_ARCANE_BRILLANCE = 24, - SPELL_WARRIOR_ENRAGE = 25, - SPELL_PRIEST_DIVINE_SPIRIT = 26, - SPELL_HAND = 27, - SPELL_PHASE = 28, + SPELL_FOOD = 19, + SPELL_DRINK = 20, + SPELL_FOOD_AND_DRINK = 21, + SPELL_PRESENCE = 22, + SPELL_CHARM = 23, + SPELL_SCROLL = 24, + SPELL_MAGE_ARCANE_BRILLANCE = 25, + SPELL_WARRIOR_ENRAGE = 26, + SPELL_PRIEST_DIVINE_SPIRIT = 27, + SPELL_HAND = 28, + SPELL_PHASE = 29, }; #define SPELL_LINKED_MAX_SPELLS 200000 @@ -251,8 +252,8 @@ inline bool IsLootCraftingSpell(SpellEntry const *spellInfo) } bool IsHigherHankOfSpell(uint32 spellId_1,uint32 spellId_2); -bool IsSingleFromSpellSpecificPerCaster(uint32 spellSpec1, uint32 spellSpec2); -bool IsSingleFromSpellSpecificPerTarget(uint32 spellSpec1, uint32 spellSpec2); +bool IsSingleFromSpellSpecificPerCaster(SpellSpecific spellSpec1, SpellSpecific spellSpec2); +bool IsSingleFromSpellSpecificPerTarget(SpellSpecific spellSpec1, SpellSpecific spellSpec2); bool IsPassiveSpell(uint32 spellId); bool IsAutocastableSpell(uint32 spellId); diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index d5c2068ea6c..7ad3dc983dd 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4652,7 +4652,7 @@ void Unit::SendPeriodicAuraLog(SpellPeriodicAuraLogInfo *pInfo) data << uint32(pInfo->overDamage); // overheal? data << uint8(pInfo->critical); // new 3.1.2 critical tick break; - case SPELL_AURA_OBS_MOD_ENERGY: + case SPELL_AURA_OBS_MOD_POWER: case SPELL_AURA_PERIODIC_ENERGIZE: data << uint32(aura->GetMiscValue()); // power type data << uint32(pInfo->damage); // damage @@ -12818,7 +12818,7 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag } break; } - case SPELL_AURA_OBS_MOD_ENERGY: + case SPELL_AURA_OBS_MOD_POWER: sLog.outDebug("ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id,(isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId()); if (HandleObsModEnergyAuraProc(pTarget, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown)) { |