From d35be7f4c1c075c16a51a7b3d2a7bf64867bd215 Mon Sep 17 00:00:00 2001 From: x3n Date: Mon, 17 Jan 2011 11:54:13 +0100 Subject: [PATCH] [11023] Implement support for threat multiplier and AP based threat bonus for spells. * Higher ranks are now automatically filled when not listed in spell_threat * Added some loading checks to detect inconsistent data Signed-off-by: Lynx3d --- sql/mangos.sql | 238 ++++++++++--------- sql/updates/11023_01_mangos_spell_threat.sql | 5 + sql/updates/Makefile.am | 2 + src/game/Spell.cpp | 14 +- src/game/SpellAuras.cpp | 10 +- src/game/SpellEffects.cpp | 2 +- src/game/SpellMgr.cpp | 84 +++++-- src/game/SpellMgr.h | 28 ++- src/game/Unit.cpp | 24 +- src/game/Unit.h | 4 +- src/shared/revision_nr.h | 2 +- src/shared/revision_sql.h | 2 +- 12 files changed, 238 insertions(+), 177 deletions(-) create mode 100644 sql/updates/11023_01_mangos_spell_threat.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index ece6cd044..e901b2941 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_11018_01_mangos_command` bit(1) default NULL + `required_11023_01_mangos_spell_threat` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -17629,6 +17629,8 @@ DROP TABLE IF EXISTS `spell_threat`; CREATE TABLE `spell_threat` ( `entry` mediumint(8) unsigned NOT NULL, `Threat` smallint(6) NOT NULL, + `multiplier` float NOT NULL default '1' COMMENT 'threat multiplier for damage/healing', + `ap_bonus` float NOT NULL default '0' COMMENT 'additional threat bonus from attack power', PRIMARY KEY (`entry`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED; @@ -17639,123 +17641,123 @@ CREATE TABLE `spell_threat` ( LOCK TABLES `spell_threat` WRITE; /*!40000 ALTER TABLE `spell_threat` DISABLE KEYS */; INSERT INTO `spell_threat` VALUES -(72,293), -(78,20), -(99,42), -(284,39), -(285,59), -(469,40), -(676,104), -(770,108), -(845,10), -(1160,16), -(1608,78), -(1672,180), -(1715,61), -(1735,42), -(2048,70), -(2139,300), -(5242,26), -(6190,26), -(6192,32), -(6343,17), -(6572,155), -(6673,18), -(6574,195), -(6807,322), -(6808,322), -(6809,322), -(7369,40), -(7372,101), -(7373,141), -(7379,235), -(7386,100), -(8198,40), -(8204,64), -(8205,96), -(8972,322), -(9490,42), -(9745,322), -(9747,42), -(9880,322), -(9881,322), -(9898,42), -(11549,40), -(11550,48), -(11551,56), -(11554,30), -(11555,37), -(11556,43), -(11564,98), -(11565,118), -(11566,137), -(11567,145), -(11580,143), -(11581,180), -(11600,275), -(11601,315), -(11608,60), -(11609,70), -(11775,395), -(14921,415), -(16857,108), -(17735,200), -(17750,300), -(17751,450), -(17752,600), -(20569,100), -(20736,100), -(20925,20), -(20927,30), -(20928,40), -(23922,160), -(23923,190), -(23924,220), -(23925,250), -(24394,580), -(24583,5), -(25202,50), -(25203,55), -(25231,130), -(25258,286), -(25264,215), -(25269,400), -(25286,175), -(25288,355), -(25289,62), -(26996,322), -(26998,42), -(27179,54), -(29704,230), -(29707,196), -(30324,220), -(30356,323), -(30357,483), -(33745,285), -(33878,129), -(33986,180), -(33987,232), -(47436,78), -(47437,63), -(47439,60), -(47440,80), -(47449,236), -(47450,259), -(47487,520), -(47488,770), -(47497,101), -(47498,101), -(47501,235), -(47502,260), -(47519,180), -(47520,225), -(48479,322), -(48480,322), -(48559,42), -(48560,42), -(48567,285), -(48568,285), -(57823,500); +( 72, 293, 1, 0), +( 78, 20, 1, 0), +( 99, 42, 1, 0), +( 284, 39, 1, 0), +( 285, 59, 1, 0), +( 469, 40, 1, 0), +( 676, 104, 1, 0), +( 770, 108, 1, 0), +( 845, 10, 1, 0), +( 1160, 16, 1, 0), +( 1608, 78, 1, 0), +( 1672, 180, 1, 0), +( 1715, 61, 1, 0), +( 1735, 42, 1, 0), +( 2048, 70, 1, 0), +( 2139, 300, 1, 0), +( 5242, 26, 1, 0), +( 6190, 26, 1, 0), +( 6192, 32, 1, 0), +( 6343, 17, 1, 0), +( 6572, 155, 1, 0), +( 6673, 18, 1, 0), +( 6574, 195, 1, 0), +( 6807, 322, 1, 0), +( 6808, 322, 1, 0), +( 6809, 322, 1, 0), +( 7369, 40, 1, 0), +( 7372, 101, 1, 0), +( 7373, 141, 1, 0), +( 7379, 235, 1, 0), +( 7386, 100, 1, 0), +( 8198, 40, 1, 0), +( 8204, 64, 1, 0), +( 8205, 96, 1, 0), +( 8972, 322, 1, 0), +( 9490, 42, 1, 0), +( 9745, 322, 1, 0), +( 9747, 42, 1, 0), +( 9880, 322, 1, 0), +( 9881, 322, 1, 0), +( 9898, 42, 1, 0), +(11549, 40, 1, 0), +(11550, 48, 1, 0), +(11551, 56, 1, 0), +(11554, 30, 1, 0), +(11555, 37, 1, 0), +(11556, 43, 1, 0), +(11564, 98, 1, 0), +(11565, 118, 1, 0), +(11566, 137, 1, 0), +(11567, 145, 1, 0), +(11580, 143, 1, 0), +(11581, 180, 1, 0), +(11600, 275, 1, 0), +(11601, 315, 1, 0), +(11608, 60, 1, 0), +(11609, 70, 1, 0), +(11775, 395, 1, 0), +(14921, 415, 1, 0), +(16857, 108, 1, 0), +(17735, 200, 1, 0), +(17750, 300, 1, 0), +(17751, 450, 1, 0), +(17752, 600, 1, 0), +(20569, 100, 1, 0), +(20736, 100, 1, 0), +(20925, 20, 1, 0), +(20927, 30, 1, 0), +(20928, 40, 1, 0), +(23922, 160, 1, 0), +(23923, 190, 1, 0), +(23924, 220, 1, 0), +(23925, 250, 1, 0), +(24394, 580, 1, 0), +(24583, 5, 1, 0), +(25202, 50, 1, 0), +(25203, 55, 1, 0), +(25231, 130, 1, 0), +(25258, 286, 1, 0), +(25264, 215, 1, 0), +(25269, 400, 1, 0), +(25286, 175, 1, 0), +(25288, 355, 1, 0), +(25289, 62, 1, 0), +(26996, 322, 1, 0), +(26998, 42, 1, 0), +(27179, 54, 1, 0), +(29704, 230, 1, 0), +(29707, 196, 1, 0), +(30324, 220, 1, 0), +(30356, 323, 1, 0), +(30357, 483, 1, 0), +(33745, 285, 1, 0), +(33878, 129, 1, 0), +(33986, 180, 1, 0), +(33987, 232, 1, 0), +(47436, 78, 1, 0), +(47437, 63, 1, 0), +(47439, 60, 1, 0), +(47440, 80, 1, 0), +(47449, 236, 1, 0), +(47450, 259, 1, 0), +(47487, 520, 1, 0), +(47488, 770, 1, 0), +(47497, 101, 1, 0), +(47498, 101, 1, 0), +(47501, 235, 1, 0), +(47502, 260, 1, 0), +(47519, 180, 1, 0), +(47520, 225, 1, 0), +(48479, 322, 1, 0), +(48480, 322, 1, 0), +(48559, 42, 1, 0), +(48560, 42, 1, 0), +(48567, 285, 1, 0), +(48568, 285, 1, 0), +(57823, 500, 1, 0); /*!40000 ALTER TABLE `spell_threat` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/11023_01_mangos_spell_threat.sql b/sql/updates/11023_01_mangos_spell_threat.sql new file mode 100644 index 000000000..31c5fb781 --- /dev/null +++ b/sql/updates/11023_01_mangos_spell_threat.sql @@ -0,0 +1,5 @@ +ALTER TABLE db_version CHANGE COLUMN required_11018_01_mangos_command required_11023_01_mangos_spell_threat bit; + +ALTER TABLE spell_threat ADD COLUMN multiplier FLOAT NOT NULL DEFAULT 1.0 COMMENT 'threat multiplier for damage/healing' AFTER Threat; + +ALTER TABLE spell_threat ADD COLUMN ap_bonus FLOAT NOT NULL DEFAULT 0.0 COMMENT 'additional threat bonus from attack power' AFTER multiplier; diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 781c2e2b6..bf4b1c7da 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -153,6 +153,7 @@ pkgdata_DATA = \ 10998_01_mangos_spell_proc_event.sql \ 11002_01_mangos_spell_proc_event.sql \ 11018_01_mangos_command.sql \ + 11023_01_mangos_spell_threat.sql \ README ## Additional files to include when running 'make dist' @@ -286,4 +287,5 @@ EXTRA_DIST = \ 10998_01_mangos_spell_proc_event.sql \ 11002_01_mangos_spell_proc_event.sql \ 11018_01_mangos_command.sql \ + 11023_01_mangos_spell_threat.sql \ README diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 92ace68be..3943b8800 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1023,7 +1023,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target) int32 gain = caster->DealHeal(unitTarget, addhealth, m_spellInfo, crit, absorb); if (real_caster) - unitTarget->getHostileRefManager().threatAssist(real_caster, float(gain) * 0.5f, m_spellInfo); + unitTarget->getHostileRefManager().threatAssist(real_caster, float(gain) * 0.5f * sSpellMgr.GetSpellThreatMultiplier(m_spellInfo), m_spellInfo); } // Do damage and triggers else if (m_damage) @@ -4225,14 +4225,18 @@ void Spell::HandleThreatSpells(uint32 spellId) if(!m_targets.getUnitTarget()->CanHaveThreatList()) return; - uint16 threat = sSpellMgr.GetSpellThreat(spellId); + SpellThreatEntry const* threatEntry = sSpellMgr.GetSpellThreatEntry(spellId); - if(!threat) + if(!threatEntry || (!threatEntry->threat && threatEntry->ap_bonus == 0.0f)) return; - m_targets.getUnitTarget()->AddThreat(m_caster, float(threat), false, GetSpellSchoolMask(m_spellInfo), m_spellInfo); + float threat = threatEntry->threat; + if (threatEntry->ap_bonus != 0.0f) + threat += threatEntry->ap_bonus * m_caster->GetTotalAttackPowerValue(GetWeaponAttackType(m_spellInfo)); - DEBUG_FILTER_LOG(LOG_FILTER_SPELL_CAST, "Spell %u, rank %u, added an additional %i threat", spellId, sSpellMgr.GetSpellRank(spellId), threat); + m_targets.getUnitTarget()->AddThreat(m_caster, threat, false, GetSpellSchoolMask(m_spellInfo), m_spellInfo); + + DEBUG_FILTER_LOG(LOG_FILTER_SPELL_CAST, "Spell %u, rank %u, added an additional %f threat", spellId, sSpellMgr.GetSpellRank(spellId), threat); } void Spell::HandleEffects(Unit *pUnitTarget,Item *pItemTarget,GameObject *pGOTarget,SpellEffectIndex i, float DamageMultiplier) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index bdacfe71a..976ee60f3 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -6879,7 +6879,7 @@ void Aura::PeriodicTick() pCaster->CalculateHealAbsorb(heal, &absorbHeal); int32 gain = pCaster->DealHeal(pCaster, heal - absorbHeal, spellProto, false, absorbHeal); - pCaster->getHostileRefManager().threatAssist(pCaster, gain * 0.5f, spellProto); + pCaster->getHostileRefManager().threatAssist(pCaster, gain * 0.5f * sSpellMgr.GetSpellThreatMultiplier(spellProto), spellProto); break; } case SPELL_AURA_PERIODIC_HEAL: @@ -6951,7 +6951,7 @@ void Aura::PeriodicTick() if( BattleGround *bg = ((Player*)pCaster)->GetBattleGround() ) bg->UpdatePlayerScore(((Player*)pCaster), SCORE_HEALING_DONE, gain); - target->getHostileRefManager().threatAssist(pCaster, float(gain) * 0.5f, spellProto); + target->getHostileRefManager().threatAssist(pCaster, float(gain) * 0.5f * sSpellMgr.GetSpellThreatMultiplier(spellProto), spellProto); // heal for caster damage if(target != pCaster && spellProto->SpellVisual[0] == 163) @@ -7091,7 +7091,7 @@ void Aura::PeriodicTick() int32 gain = target->ModifyPower(power,pdamage); if(Unit* pCaster = GetCaster()) - target->getHostileRefManager().threatAssist(pCaster, float(gain) * 0.5f, spellProto); + target->getHostileRefManager().threatAssist(pCaster, float(gain) * 0.5f * sSpellMgr.GetSpellThreatMultiplier(spellProto), spellProto); break; } case SPELL_AURA_OBS_MOD_MANA: @@ -7117,7 +7117,7 @@ void Aura::PeriodicTick() int32 gain = target->ModifyPower(POWER_MANA, pdamage); if(Unit* pCaster = GetCaster()) - target->getHostileRefManager().threatAssist(pCaster, float(gain) * 0.5f, spellProto); + target->getHostileRefManager().threatAssist(pCaster, float(gain) * 0.5f * sSpellMgr.GetSpellThreatMultiplier(spellProto), spellProto); break; } case SPELL_AURA_POWER_BURN_MANA: @@ -7179,7 +7179,7 @@ void Aura::PeriodicTick() int32 gain = target->ModifyHealth(m_modifier.m_amount); if (Unit *caster = GetCaster()) - target->getHostileRefManager().threatAssist(caster, float(gain) * 0.5f, spellProto); + target->getHostileRefManager().threatAssist(caster, float(gain) * 0.5f * sSpellMgr.GetSpellThreatMultiplier(spellProto), spellProto); break; } case SPELL_AURA_MOD_POWER_REGEN: diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 54af75f90..7b62010df 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -3538,7 +3538,7 @@ void Spell::EffectHealPct(SpellEffectIndex /*eff_idx*/) unitTarget->CalculateHealAbsorb(addhealth, &absorb); int32 gain = caster->DealHeal(unitTarget, addhealth - absorb, m_spellInfo, false, absorb); - unitTarget->getHostileRefManager().threatAssist(caster, float(gain) * 0.5f, m_spellInfo); + unitTarget->getHostileRefManager().threatAssist(caster, float(gain) * 0.5f * sSpellMgr.GetSpellThreatMultiplier(m_spellInfo), m_spellInfo); } } diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 96ca7378e..6988ea900 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1636,26 +1636,77 @@ void SpellMgr::LoadSpellElixirs() sLog.outString( ">> Loaded %u spell elixir definitions", count ); } +struct DoSpellThreat +{ + DoSpellThreat(SpellThreatMap& _threatMap) : threatMap(_threatMap), count(0) {} + void operator() (uint32 spell_id) + { + SpellThreatEntry const &ste = state->second; + // add ranks only for not filled data (spells adding flat threat are usually different for ranks) + SpellThreatMap::const_iterator spellItr = threatMap.find(spell_id); + if (spellItr == threatMap.end()) + threatMap[spell_id] = ste; + + // just assert that entry is not redundant + else + { + SpellThreatEntry const& r_ste = spellItr->second; + if (ste.threat == r_ste.threat && ste.multiplier == r_ste.multiplier && ste.ap_bonus == r_ste.ap_bonus) + sLog.outErrorDb("Spell %u listed in `spell_threat` as custom rank has same data as Rank 1, so redundant", spell_id); + } + } + const char* TableName() { return "spell_threat"; } + bool IsValidCustomRank(SpellThreatEntry const &ste, uint32 entry, uint32 first_id) + { + if (!ste.threat) + { + sLog.outErrorDb("Spell %u listed in `spell_threat` is not first rank (%u) in chain and has no threat", entry, first_id); + // prevent loading unexpected data + return false; + } + return true; + } + void AddEntry(SpellThreatEntry const &ste, SpellEntry const *spell) + { + threatMap[spell->Id] = ste; + + // flat threat bonus and attack power bonus currently only work properly when all + // effects have same targets, otherwise, we'd need to seperate it by effect index + if (ste.threat || ste.ap_bonus != 0.f) + { + const uint32 *targetA = spell->EffectImplicitTargetA; + const uint32 *targetB = spell->EffectImplicitTargetB; + if ((targetA[EFFECT_INDEX_1] && targetA[EFFECT_INDEX_1] != targetA[EFFECT_INDEX_0]) || + (targetA[EFFECT_INDEX_2] && targetA[EFFECT_INDEX_2] != targetA[EFFECT_INDEX_0])) + sLog.outErrorDb("Spell %u listed in `spell_threat` has effects with different targets, threat may be assigned incorrectly", spell->Id); + } + ++count; + } + bool HasEntry(uint32 spellId) { return threatMap.count(spellId) > 0; } + bool SetStateToEntry(uint32 spellId) { return (state = threatMap.find(spellId)) != threatMap.end(); } + + SpellThreatMap& threatMap; + SpellThreatMap::const_iterator state; + uint32 count; +}; + void SpellMgr::LoadSpellThreats() { mSpellThreatMap.clear(); // need for reload case - uint32 count = 0; - - // 0 1 - QueryResult *result = WorldDatabase.Query("SELECT entry, Threat FROM spell_threat"); + // 0 1 2 3 + QueryResult *result = WorldDatabase.Query("SELECT entry, Threat, multiplier, ap_bonus FROM spell_threat"); if( !result ) { - barGoLink bar( 1 ); - bar.step(); - sLog.outString(); - sLog.outString( ">> Loaded %u aggro generating spells", count ); + sLog.outString( ">> No spell threat entries loaded."); return; } + SpellRankHelper rankHelper(*this, mSpellThreatMap); + barGoLink bar( (int)result->GetRowCount() ); do @@ -1665,23 +1716,22 @@ void SpellMgr::LoadSpellThreats() bar.step(); uint32 entry = fields[0].GetUInt32(); - uint16 Threat = fields[1].GetUInt16(); - if (!sSpellStore.LookupEntry(entry)) - { - sLog.outErrorDb("Spell %u listed in `spell_threat` does not exist", entry); - continue; - } + SpellThreatEntry ste; + ste.threat = fields[1].GetUInt16(); + ste.multiplier = fields[2].GetFloat(); + ste.ap_bonus = fields[3].GetFloat(); - mSpellThreatMap[entry] = Threat; + rankHelper.RecordRank(ste, entry); - ++count; } while( result->NextRow() ); + rankHelper.FillHigherRanks(); + delete result; sLog.outString(); - sLog.outString( ">> Loaded %u aggro generating spells", count ); + sLog.outString( ">> Loaded %u spell threat entries", rankHelper.worker.count ); } bool SpellMgr::IsRankSpellDueToSpell(SpellEntry const *spellInfo_1,uint32 spellId_2) const diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 21379815c..2f67d27b8 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -622,9 +622,16 @@ typedef UNORDERED_MAP SpellBonusMap; #define ELIXIR_SHATTRATH_MASK 0x08 #define ELIXIR_WELL_FED 0x10 // Some foods have SPELLFAMILY_POTION +struct SpellThreatEntry +{ + uint16 threat; + float multiplier; + float ap_bonus; +}; + typedef std::map SpellElixirMap; typedef std::map SpellProcItemEnchantMap; -typedef std::map SpellThreatMap; +typedef std::map SpellThreatMap; // Spell script target related declarations (accessed using SpellMgr functions) enum SpellTargetType @@ -846,13 +853,24 @@ class SpellMgr return SPELL_NORMAL; } - uint16 GetSpellThreat(uint32 spellid) const + SpellThreatEntry const* GetSpellThreatEntry(uint32 spellid) const { SpellThreatMap::const_iterator itr = mSpellThreatMap.find(spellid); - if(itr==mSpellThreatMap.end()) - return 0; + if (itr != mSpellThreatMap.end()) + return &itr->second; - return itr->second; + return NULL; + } + + float GetSpellThreatMultiplier(SpellEntry const *spellInfo) const + { + if (!spellInfo) + return 1.0f; + + if (SpellThreatEntry const *entry = GetSpellThreatEntry(spellInfo->Id)) + return entry->multiplier; + + return 1.0f; } // Spell proc events diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 38b78c167..3a42cbfed 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -293,7 +293,7 @@ void Unit::Update( uint32 update_diff, uint32 p_time ) { if(!IsInWorld()) return; - + /*if(p_time > m_AurasCheck) { m_AurasCheck = 2000; @@ -953,10 +953,8 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa } if (pVictim->GetTypeId() != TYPEID_PLAYER) { - if(spellProto && IsDamageToThreatSpell(spellProto)) - pVictim->AddThreat(this, float(damage*2), (cleanDamage && cleanDamage->hitOutCome == MELEE_HIT_CRIT), damageSchoolMask, spellProto); - else - pVictim->AddThreat(this, float(damage), (cleanDamage && cleanDamage->hitOutCome == MELEE_HIT_CRIT), damageSchoolMask, spellProto); + float threat = damage * sSpellMgr.GetSpellThreatMultiplier(spellProto); + pVictim->AddThreat(this, threat, (cleanDamage && cleanDamage->hitOutCome == MELEE_HIT_CRIT), damageSchoolMask, spellProto); } else // victim is a player { @@ -7185,22 +7183,6 @@ bool Unit::IsImmuneToSpellEffect(SpellEntry const* spellInfo, SpellEffectIndex i return false; } -bool Unit::IsDamageToThreatSpell(SpellEntry const * spellInfo) const -{ - if (!spellInfo) - return false; - - uint32 family = spellInfo->SpellFamilyName; - uint64 flags = spellInfo->SpellFamilyFlags; - - if ((family == 5 && flags == 256) || //Searing Pain - (family == 6 && flags == 8192) || //Mind Blast - (family == 11 && flags == 1048576)) //Earth Shock - return true; - - return false; -} - /** * Calculates caster part of melee damage bonuses, * also includes different bonuses dependent from target auras diff --git a/src/game/Unit.h b/src/game/Unit.h index 7a4e16771..54716120e 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1450,8 +1450,6 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void CastSpell(float x, float y, float z, uint32 spellId, bool triggered, Item *castItem = NULL, Aura* triggeredByAura = NULL, ObjectGuid originalCaster = ObjectGuid(), SpellEntry const* triggeredBy = NULL); void CastSpell(float x, float y, float z, SpellEntry const *spellInfo, bool triggered, Item *castItem = NULL, Aura* triggeredByAura = NULL, ObjectGuid originalCaster = ObjectGuid(), SpellEntry const* triggeredBy = NULL); - bool IsDamageToThreatSpell(SpellEntry const * spellInfo) const; - void DeMorph(); void SendAttackStateUpdate(CalcDamageInfo *damageInfo); @@ -2151,4 +2149,4 @@ inline void Unit::SendMonsterMoveByPath(Path const& path, uint32 star SendMessageToSet(&data, true); } -#endif \ No newline at end of file +#endif diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8b414f21d..0f1c9620c 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 "11022" + #define REVISION_NR "11023" #endif // __REVISION_NR_H__ diff --git a/src/shared/revision_sql.h b/src/shared/revision_sql.h index bd2f54ac3..5cba55f0a 100644 --- a/src/shared/revision_sql.h +++ b/src/shared/revision_sql.h @@ -1,6 +1,6 @@ #ifndef __REVISION_SQL_H__ #define __REVISION_SQL_H__ #define REVISION_DB_CHARACTERS "required_10973_01_characters_game_event_status" - #define REVISION_DB_MANGOS "required_11018_01_mangos_command" + #define REVISION_DB_MANGOS "required_11023_01_mangos_spell_threat" #define REVISION_DB_REALMD "required_10008_01_realmd_realmd_db_version" #endif // __REVISION_SQL_H__