From e07a0d96523ab53cc2f13333cfcb2e5bd34b799b Mon Sep 17 00:00:00 2001 From: nos4r2zod Date: Fri, 21 Aug 2009 05:58:31 +0400 Subject: [PATCH] [8399] Prevent stacking well fed buffs. Signed-off-by: VladimirMangos --- sql/mangos.sql | 11 ++++++++++- sql/updates/8399_01_mangos_spell_elixir.sql | 12 ++++++++++++ sql/updates/Makefile.am | 2 ++ src/game/SharedDefines.h | 2 +- src/game/SpellMgr.cpp | 18 ++++++++++++++++++ src/game/SpellMgr.h | 12 ++++++++---- src/game/Unit.h | 2 +- src/shared/revision_nr.h | 2 +- 8 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 sql/updates/8399_01_mangos_spell_elixir.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 9eccec974..49fc0ed79 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -24,7 +24,7 @@ CREATE TABLE `db_version` ( `version` varchar(120) default NULL, `creature_ai_version` varchar(120) default NULL, `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'; -- @@ -16966,12 +16966,19 @@ INSERT INTO `spell_elixir` VALUES (17627,0x3), (17629,0x3), (17628,0x3), +(18191,0x10), +(18192,0x10), +(18193,0x10), +(18194,0x10), +(18222,0x10), (21920,0x1), +(22730,0x10), (24361,0x2), (24363,0x2), (24382,0x2), (24383,0x2), (24417,0x2), +(25661,0x10), (26276,0x1), (27652,0x2), (27653,0x2), @@ -17014,6 +17021,8 @@ INSERT INTO `spell_elixir` VALUES (45373,0x1), (46837,0xB), (46839,0xB); + + /*!40000 ALTER TABLE `spell_elixir` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/8399_01_mangos_spell_elixir.sql b/sql/updates/8399_01_mangos_spell_elixir.sql new file mode 100644 index 000000000..50eae6424 --- /dev/null +++ b/sql/updates/8399_01_mangos_spell_elixir.sql @@ -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); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index c1d6f7e65..f2fcbd2ae 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -89,6 +89,7 @@ pkgdata_DATA = \ 8397_01_mangos_spell_chain.sql \ 8397_02_mangos_spell_threat.sql \ 8397_03_characters_character_spell.sql \ + 8399_01_mangos_spell_elixir.sql \ README ## Additional files to include when running 'make dist' @@ -158,4 +159,5 @@ EXTRA_DIST = \ 8397_01_mangos_spell_chain.sql \ 8397_02_mangos_spell_threat.sql \ 8397_03_characters_character_spell.sql \ + 8399_01_mangos_spell_elixir.sql \ README diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index e3566a053..955a328ce 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -308,7 +308,7 @@ enum ItemQualities #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_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_UNK1 0x00000002 // 1 diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 0738f1d19..881c50199 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -135,6 +135,14 @@ SpellSpecific GetSpellSpecific(uint32 spellId) 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: { // family flags 18(Molten), 25(Frost/Ice), 28(Mage) @@ -165,6 +173,15 @@ SpellSpecific GetSpellSpecific(uint32 spellId) 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: { // only hunter stings have this @@ -242,6 +259,7 @@ bool IsSingleFromSpellSpecificPerCaster(SpellSpecific spellSpec1,SpellSpecific s case SPELL_JUDGEMENT: case SPELL_PRESENCE: case SPELL_HAND: + case SPELL_WELL_FED: return spellSpec1==spellSpec2; case SPELL_BATTLE_ELIXIR: return spellSpec2==SPELL_BATTLE_ELIXIR diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index e225aa1c3..f1c0a54c0 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -99,6 +99,7 @@ enum SpellSpecific SPELL_FLASK_ELIXIR = 16, SPELL_PRESENCE = 17, SPELL_HAND = 18, + SPELL_WELL_FED = 19 }; SpellSpecific GetSpellSpecific(uint32 spellId); @@ -508,11 +509,12 @@ struct SpellBonusEntry typedef UNORDERED_MAP SpellProcEventMap; typedef UNORDERED_MAP SpellBonusMap; -#define ELIXIR_BATTLE_MASK 0x1 -#define ELIXIR_GUARDIAN_MASK 0x2 +#define ELIXIR_BATTLE_MASK 0x01 +#define ELIXIR_GUARDIAN_MASK 0x02 #define ELIXIR_FLASK_MASK (ELIXIR_BATTLE_MASK|ELIXIR_GUARDIAN_MASK) -#define ELIXIR_UNSTABLE_MASK 0x4 -#define ELIXIR_SHATTRATH_MASK 0x8 +#define ELIXIR_UNSTABLE_MASK 0x04 +#define ELIXIR_SHATTRATH_MASK 0x08 +#define ELIXIR_WELL_FED 0x10 // Some foods have SPELLFAMILY_POTION typedef std::map SpellElixirMap; typedef std::map SpellProcItemEnchantMap; @@ -730,6 +732,8 @@ class SpellMgr return SPELL_BATTLE_ELIXIR; else if(mask & ELIXIR_GUARDIAN_MASK) return SPELL_GUARDIAN_ELIXIR; + else if(mask & ELIXIR_WELL_FED) + return SPELL_WELL_FED; else return SPELL_NORMAL; } diff --git a/src/game/Unit.h b/src/game/Unit.h index 9fc9d5160..cbd827e97 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -73,7 +73,7 @@ enum SpellAuraInterruptFlags AURA_INTERRUPT_FLAG_UNK15 = 0x00008000, // 15 removed by casting a spell? AURA_INTERRUPT_FLAG_UNK16 = 0x00010000, // 16 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_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 diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 257ef43c8..c74623389 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "8398" + #define REVISION_NR "8399" #endif // __REVISION_NR_H__