mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
[8399] Prevent stacking well fed buffs.
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
ab38b58b12
commit
e07a0d9652
8 changed files with 53 additions and 8 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
12
sql/updates/8399_01_mangos_spell_elixir.sql
Normal file
12
sql/updates/8399_01_mangos_spell_elixir.sql
Normal 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);
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<uint32, SpellProcEventEntry> SpellProcEventMap;
|
||||
typedef UNORDERED_MAP<uint32, SpellBonusEntry> 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<uint32, uint8> SpellElixirMap;
|
||||
typedef std::map<uint32, float> 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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "8398"
|
||||
#define REVISION_NR "8399"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue