[8399] Prevent stacking well fed buffs.

Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
nos4r2zod 2009-08-21 05:58:31 +04:00 committed by VladimirMangos
parent ab38b58b12
commit e07a0d9652
8 changed files with 53 additions and 8 deletions

View file

@ -24,7 +24,7 @@ CREATE TABLE `db_version` (
`version` varchar(120) default NULL, `version` varchar(120) default NULL,
`creature_ai_version` varchar(120) default NULL, `creature_ai_version` varchar(120) default NULL,
`cache_id` int(10) default '0', `cache_id` int(10) default '0',
`required_8397_02_mangos_spell_threat` bit(1) default NULL `required_8399_01_mangos_spell_elixir` bit(1) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
-- --
@ -16966,12 +16966,19 @@ INSERT INTO `spell_elixir` VALUES
(17627,0x3), (17627,0x3),
(17629,0x3), (17629,0x3),
(17628,0x3), (17628,0x3),
(18191,0x10),
(18192,0x10),
(18193,0x10),
(18194,0x10),
(18222,0x10),
(21920,0x1), (21920,0x1),
(22730,0x10),
(24361,0x2), (24361,0x2),
(24363,0x2), (24363,0x2),
(24382,0x2), (24382,0x2),
(24383,0x2), (24383,0x2),
(24417,0x2), (24417,0x2),
(25661,0x10),
(26276,0x1), (26276,0x1),
(27652,0x2), (27652,0x2),
(27653,0x2), (27653,0x2),
@ -17014,6 +17021,8 @@ INSERT INTO `spell_elixir` VALUES
(45373,0x1), (45373,0x1),
(46837,0xB), (46837,0xB),
(46839,0xB); (46839,0xB);
/*!40000 ALTER TABLE `spell_elixir` ENABLE KEYS */; /*!40000 ALTER TABLE `spell_elixir` ENABLE KEYS */;
UNLOCK TABLES; UNLOCK TABLES;

View file

@ -0,0 +1,12 @@
ALTER TABLE db_version CHANGE COLUMN required_8397_02_mangos_spell_threat required_8399_01_mangos_spell_elixir bit;
-- Well Fed (SPELLFAMILY_POTION)
DELETE FROM spell_elixir WHERE entry IN (18191, 18192, 18193, 18194, 18222, 22730, 25661);
INSERT INTO spell_elixir (entry, mask) VALUES
(18191,0x10),
(18192,0x10),
(18193,0x10),
(18194,0x10),
(18222,0x10),
(22730,0x10),
(25661,0x10);

View file

@ -89,6 +89,7 @@ pkgdata_DATA = \
8397_01_mangos_spell_chain.sql \ 8397_01_mangos_spell_chain.sql \
8397_02_mangos_spell_threat.sql \ 8397_02_mangos_spell_threat.sql \
8397_03_characters_character_spell.sql \ 8397_03_characters_character_spell.sql \
8399_01_mangos_spell_elixir.sql \
README README
## Additional files to include when running 'make dist' ## Additional files to include when running 'make dist'
@ -158,4 +159,5 @@ EXTRA_DIST = \
8397_01_mangos_spell_chain.sql \ 8397_01_mangos_spell_chain.sql \
8397_02_mangos_spell_threat.sql \ 8397_02_mangos_spell_threat.sql \
8397_03_characters_character_spell.sql \ 8397_03_characters_character_spell.sql \
8399_01_mangos_spell_elixir.sql \
README README

View file

@ -308,7 +308,7 @@ enum ItemQualities
#define SPELL_ATTR_EX2_UNK28 0x10000000 // 28 no breaks stealth if it fails?? #define SPELL_ATTR_EX2_UNK28 0x10000000 // 28 no breaks stealth if it fails??
#define SPELL_ATTR_EX2_CANT_CRIT 0x20000000 // 29 Spell can't crit #define SPELL_ATTR_EX2_CANT_CRIT 0x20000000 // 29 Spell can't crit
#define SPELL_ATTR_EX2_UNK30 0x40000000 // 30 #define SPELL_ATTR_EX2_UNK30 0x40000000 // 30
#define SPELL_ATTR_EX2_UNK31 0x80000000 // 31 #define SPELL_ATTR_EX2_FOOD_BUFF 0x80000000 // 31 Food or Drink Buff (like Well Fed)
#define SPELL_ATTR_EX3_UNK0 0x00000001 // 0 #define SPELL_ATTR_EX3_UNK0 0x00000001 // 0
#define SPELL_ATTR_EX3_UNK1 0x00000002 // 1 #define SPELL_ATTR_EX3_UNK1 0x00000002 // 1

View file

@ -135,6 +135,14 @@ SpellSpecific GetSpellSpecific(uint32 spellId)
switch(spellInfo->SpellFamilyName) switch(spellInfo->SpellFamilyName)
{ {
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;
}
case SPELLFAMILY_MAGE: case SPELLFAMILY_MAGE:
{ {
// family flags 18(Molten), 25(Frost/Ice), 28(Mage) // family flags 18(Molten), 25(Frost/Ice), 28(Mage)
@ -165,6 +173,15 @@ SpellSpecific GetSpellSpecific(uint32 spellId)
break; break;
} }
case SPELLFAMILY_PRIEST:
{
// "Well Fed" buff from Blessed Sunfruit, Blessed Sunfruit Juice, Alterac Spring Water
if ((spellInfo->Attributes & SPELL_ATTR_CASTABLE_WHILE_SITTING)==0 &&
(spellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_AUTOATTACK) &&
(spellInfo->SpellIconID == 52 || spellInfo->SpellIconID == 79))
return SPELL_WELL_FED;
break;
}
case SPELLFAMILY_HUNTER: case SPELLFAMILY_HUNTER:
{ {
// only hunter stings have this // only hunter stings have this
@ -242,6 +259,7 @@ bool IsSingleFromSpellSpecificPerCaster(SpellSpecific spellSpec1,SpellSpecific s
case SPELL_JUDGEMENT: case SPELL_JUDGEMENT:
case SPELL_PRESENCE: case SPELL_PRESENCE:
case SPELL_HAND: case SPELL_HAND:
case SPELL_WELL_FED:
return spellSpec1==spellSpec2; return spellSpec1==spellSpec2;
case SPELL_BATTLE_ELIXIR: case SPELL_BATTLE_ELIXIR:
return spellSpec2==SPELL_BATTLE_ELIXIR return spellSpec2==SPELL_BATTLE_ELIXIR

View file

@ -99,6 +99,7 @@ enum SpellSpecific
SPELL_FLASK_ELIXIR = 16, SPELL_FLASK_ELIXIR = 16,
SPELL_PRESENCE = 17, SPELL_PRESENCE = 17,
SPELL_HAND = 18, SPELL_HAND = 18,
SPELL_WELL_FED = 19
}; };
SpellSpecific GetSpellSpecific(uint32 spellId); SpellSpecific GetSpellSpecific(uint32 spellId);
@ -508,11 +509,12 @@ struct SpellBonusEntry
typedef UNORDERED_MAP<uint32, SpellProcEventEntry> SpellProcEventMap; typedef UNORDERED_MAP<uint32, SpellProcEventEntry> SpellProcEventMap;
typedef UNORDERED_MAP<uint32, SpellBonusEntry> SpellBonusMap; typedef UNORDERED_MAP<uint32, SpellBonusEntry> SpellBonusMap;
#define ELIXIR_BATTLE_MASK 0x1 #define ELIXIR_BATTLE_MASK 0x01
#define ELIXIR_GUARDIAN_MASK 0x2 #define ELIXIR_GUARDIAN_MASK 0x02
#define ELIXIR_FLASK_MASK (ELIXIR_BATTLE_MASK|ELIXIR_GUARDIAN_MASK) #define ELIXIR_FLASK_MASK (ELIXIR_BATTLE_MASK|ELIXIR_GUARDIAN_MASK)
#define ELIXIR_UNSTABLE_MASK 0x4 #define ELIXIR_UNSTABLE_MASK 0x04
#define ELIXIR_SHATTRATH_MASK 0x8 #define ELIXIR_SHATTRATH_MASK 0x08
#define ELIXIR_WELL_FED 0x10 // Some foods have SPELLFAMILY_POTION
typedef std::map<uint32, uint8> SpellElixirMap; typedef std::map<uint32, uint8> SpellElixirMap;
typedef std::map<uint32, float> SpellProcItemEnchantMap; typedef std::map<uint32, float> SpellProcItemEnchantMap;
@ -730,6 +732,8 @@ class SpellMgr
return SPELL_BATTLE_ELIXIR; return SPELL_BATTLE_ELIXIR;
else if(mask & ELIXIR_GUARDIAN_MASK) else if(mask & ELIXIR_GUARDIAN_MASK)
return SPELL_GUARDIAN_ELIXIR; return SPELL_GUARDIAN_ELIXIR;
else if(mask & ELIXIR_WELL_FED)
return SPELL_WELL_FED;
else else
return SPELL_NORMAL; return SPELL_NORMAL;
} }

View file

@ -73,7 +73,7 @@ enum SpellAuraInterruptFlags
AURA_INTERRUPT_FLAG_UNK15 = 0x00008000, // 15 removed by casting a spell? AURA_INTERRUPT_FLAG_UNK15 = 0x00008000, // 15 removed by casting a spell?
AURA_INTERRUPT_FLAG_UNK16 = 0x00010000, // 16 AURA_INTERRUPT_FLAG_UNK16 = 0x00010000, // 16
AURA_INTERRUPT_FLAG_MOUNTING = 0x00020000, // 17 removed by mounting AURA_INTERRUPT_FLAG_MOUNTING = 0x00020000, // 17 removed by mounting
AURA_INTERRUPT_FLAG_NOT_SEATED = 0x00040000, // 18 removed by standing up AURA_INTERRUPT_FLAG_NOT_SEATED = 0x00040000, // 18 removed by standing up (used by food and drink mostly and sleep/Fake Death like)
AURA_INTERRUPT_FLAG_CHANGE_MAP = 0x00080000, // 19 leaving map/getting teleported AURA_INTERRUPT_FLAG_CHANGE_MAP = 0x00080000, // 19 leaving map/getting teleported
AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION = 0x00100000, // 20 removed by auras that make you invulnerable, or make other to loose selection on you AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION = 0x00100000, // 20 removed by auras that make you invulnerable, or make other to loose selection on you
AURA_INTERRUPT_FLAG_UNK21 = 0x00200000, // 21 AURA_INTERRUPT_FLAG_UNK21 = 0x00200000, // 21

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "8398" #define REVISION_NR "8399"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__