mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
[8406] Detect/check stacking of food/drink/elental shileds as spell specifics.
Food/Drink checks base at nos4r2zod's patch code. Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
178c308c5b
commit
f3930cb06f
4 changed files with 75 additions and 17 deletions
|
|
@ -137,11 +137,44 @@ SpellSpecific GetSpellSpecific(uint32 spellId)
|
|||
{
|
||||
case SPELLFAMILY_GENERIC:
|
||||
{
|
||||
// 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
|
||||
if ((spellInfo->AttributesEx2 & SPELL_ATTR_EX2_FOOD_BUFF || spellInfo->SpellIconID == 2560) &&
|
||||
!(spellInfo->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED))
|
||||
return SPELL_WELL_FED;
|
||||
// Food / Drinks (mostly)
|
||||
if(spellInfo->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED)
|
||||
{
|
||||
bool food = false;
|
||||
bool drink = false;
|
||||
for(int i = 0; i < 3; ++i)
|
||||
{
|
||||
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_MANA:
|
||||
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;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 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
|
||||
if ((spellInfo->AttributesEx2 & SPELL_ATTR_EX2_FOOD_BUFF) || spellInfo->SpellIconID == 2560)
|
||||
return SPELL_WELL_FED;
|
||||
}
|
||||
}
|
||||
case SPELLFAMILY_MAGE:
|
||||
{
|
||||
|
|
@ -241,6 +274,8 @@ SpellSpecific GetSpellSpecific(uint32 spellId)
|
|||
return SPELL_NORMAL;
|
||||
}
|
||||
|
||||
|
||||
// target not allow have more one spell specific from same caster
|
||||
bool IsSingleFromSpellSpecificPerCaster(SpellSpecific spellSpec1,SpellSpecific spellSpec2)
|
||||
{
|
||||
switch(spellSpec1)
|
||||
|
|
@ -260,7 +295,16 @@ bool IsSingleFromSpellSpecificPerCaster(SpellSpecific spellSpec1,SpellSpecific s
|
|||
case SPELL_PRESENCE:
|
||||
case SPELL_HAND:
|
||||
case SPELL_WELL_FED:
|
||||
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;
|
||||
|
|
@ -276,6 +320,7 @@ bool IsSingleFromSpellSpecificPerCaster(SpellSpecific spellSpec1,SpellSpecific s
|
|||
}
|
||||
}
|
||||
|
||||
// target not allow have more one ranks from spell from spell specific per target
|
||||
bool IsSingleFromSpellSpecificRanksPerTarget(SpellSpecific spellId_spec, SpellSpecific i_spellId_spec)
|
||||
{
|
||||
switch(spellId_spec)
|
||||
|
|
@ -284,6 +329,7 @@ bool IsSingleFromSpellSpecificRanksPerTarget(SpellSpecific spellId_spec, SpellSp
|
|||
case SPELL_AURA:
|
||||
case SPELL_CURSE:
|
||||
case SPELL_HAND:
|
||||
case SPELL_ELEMENTAL_SHIELD:
|
||||
return spellId_spec==i_spellId_spec;
|
||||
default:
|
||||
return false;
|
||||
|
|
@ -1523,10 +1569,6 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons
|
|||
case SPELLFAMILY_SHAMAN:
|
||||
if( spellInfo_2->SpellFamilyName == SPELLFAMILY_SHAMAN )
|
||||
{
|
||||
// shaman shields
|
||||
if( IsElementalShield(spellInfo_1) && IsElementalShield(spellInfo_2) )
|
||||
return true;
|
||||
|
||||
// Windfury weapon
|
||||
if( spellInfo_1->SpellIconID==220 && spellInfo_2->SpellIconID==220 &&
|
||||
spellInfo_1->SpellFamilyFlags != spellInfo_2->SpellFamilyFlags )
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue