mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 17:27:36 +01:00
*Handle some spell specific which is both food and drink. Source: Mangos
--HG-- branch : trunk
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user