diff options
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 12 |
4 files changed, 17 insertions, 8 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 33097fbec95..4b23d64b6ca 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -765,7 +765,7 @@ enum SpellAttr9 : uint32 SPELL_ATTR9_DO_NOT_LOG_AURA_REFRESH = 0x00000008, // TITLE Do Not Log Aura Refresh (client only) SPELL_ATTR9_MISSILE_SPEED_IS_DELAY_IN_SEC = 0x00000010, // TITLE Missile Speed is Delay (in sec) SPELL_ATTR9_IGNORE_TOTEM_REQUIREMENTS_FOR_CASTING = 0x00000020, // TITLE Ignore Totem Requirements for Casting - SPELL_ATTR9_UNK6 = 0x00000040, // TITLE Unknown attribute 6@Attr9 + SPELL_ATTR9_ITEM_CAST_GRANTS_SKILL_GAIN = 0x00000040, // TITLE Item Cast Grants Skill Gain SPELL_ATTR9_UNK7 = 0x00000080, // TITLE Unknown attribute 7@Attr9 SPELL_ATTR9_AIMED_SHOT = 0x00000100, // TITLE Cooldown Ignores Ranged Weapon SPELL_ATTR9_NOT_USABLE_IN_ARENA = 0x00000200, // TITLE Not In Arena diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp index b5c772b539e..b02b7fe9d53 100644 --- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp +++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp @@ -1441,7 +1441,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr9>::ToString(SpellAttr9 value) case SPELL_ATTR9_DO_NOT_LOG_AURA_REFRESH: return { "SPELL_ATTR9_DO_NOT_LOG_AURA_REFRESH", "Do Not Log Aura Refresh (client only)", "" }; case SPELL_ATTR9_MISSILE_SPEED_IS_DELAY_IN_SEC: return { "SPELL_ATTR9_MISSILE_SPEED_IS_DELAY_IN_SEC", "Missile Speed is Delay (in sec)", "" }; case SPELL_ATTR9_IGNORE_TOTEM_REQUIREMENTS_FOR_CASTING: return { "SPELL_ATTR9_IGNORE_TOTEM_REQUIREMENTS_FOR_CASTING", "Ignore Totem Requirements for Casting", "" }; - case SPELL_ATTR9_UNK6: return { "SPELL_ATTR9_UNK6", "Unknown attribute 6@Attr9", "" }; + case SPELL_ATTR9_ITEM_CAST_GRANTS_SKILL_GAIN: return { "SPELL_ATTR9_ITEM_CAST_GRANTS_SKILL_GAIN", "Item Cast Grants Skill Gain", "" }; case SPELL_ATTR9_UNK7: return { "SPELL_ATTR9_UNK7", "Unknown attribute 7@Attr9", "" }; case SPELL_ATTR9_AIMED_SHOT: return { "SPELL_ATTR9_AIMED_SHOT", "Cooldown Ignores Ranged Weapon", "" }; case SPELL_ATTR9_NOT_USABLE_IN_ARENA: return { "SPELL_ATTR9_NOT_USABLE_IN_ARENA", "Not In Arena", "" }; @@ -1485,7 +1485,7 @@ TC_API_EXPORT SpellAttr9 EnumUtils<SpellAttr9>::FromIndex(size_t index) case 3: return SPELL_ATTR9_DO_NOT_LOG_AURA_REFRESH; case 4: return SPELL_ATTR9_MISSILE_SPEED_IS_DELAY_IN_SEC; case 5: return SPELL_ATTR9_IGNORE_TOTEM_REQUIREMENTS_FOR_CASTING; - case 6: return SPELL_ATTR9_UNK6; + case 6: return SPELL_ATTR9_ITEM_CAST_GRANTS_SKILL_GAIN; case 7: return SPELL_ATTR9_UNK7; case 8: return SPELL_ATTR9_AIMED_SHOT; case 9: return SPELL_ATTR9_NOT_USABLE_IN_ARENA; @@ -1526,7 +1526,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr9>::ToIndex(SpellAttr9 value) case SPELL_ATTR9_DO_NOT_LOG_AURA_REFRESH: return 3; case SPELL_ATTR9_MISSILE_SPEED_IS_DELAY_IN_SEC: return 4; case SPELL_ATTR9_IGNORE_TOTEM_REQUIREMENTS_FOR_CASTING: return 5; - case SPELL_ATTR9_UNK6: return 6; + case SPELL_ATTR9_ITEM_CAST_GRANTS_SKILL_GAIN: return 6; case SPELL_ATTR9_UNK7: return 7; case SPELL_ATTR9_AIMED_SHOT: return 8; case SPELL_ATTR9_NOT_USABLE_IN_ARENA: return 9; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 5f74831c43a..923ac1e7f5f 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3856,6 +3856,11 @@ void Spell::_cast(bool skipCheck) player->UpdateCriteria(CriteriaType::CastSpell, m_spellInfo->Id); } + // Spells that don't create items can have this attribute - handle here + if (m_CastItem && m_spellInfo->HasAttribute(SPELL_ATTR9_ITEM_CAST_GRANTS_SKILL_GAIN)) + if (Player* playerCaster = m_caster->ToPlayer()) + playerCaster->UpdateCraftSkill(m_spellInfo); + if (!(_triggeredCastFlags & TRIGGERED_IGNORE_POWER_AND_REAGENT_COST)) { // Powers have to be taken before SendSpellGo diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 9ca92f6e577..a0ce224c9cc 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1385,7 +1385,8 @@ void Spell::DoCreateItem(uint32 itemId, ItemContext context /*= ItemContext::NON } // we succeeded in creating at least one item, so a levelup is possible - player->UpdateCraftSkill(m_spellInfo); + if (!m_CastItem) + player->UpdateCraftSkill(m_spellInfo); } } @@ -1414,7 +1415,8 @@ void Spell::EffectCreateItem2() if (m_spellInfo->IsLootCrafting()) { player->AutoStoreLoot(m_spellInfo->Id, LootTemplates_Spell, context, false, true); - player->UpdateCraftSkill(m_spellInfo); + if (!m_CastItem) + player->UpdateCraftSkill(m_spellInfo); } else // If there's no random loot entries for this spell, pick the item associated with this spell { @@ -2345,7 +2347,7 @@ void Spell::EffectEnchantItemPerm() else { // do not increase skill if vellum used - if (!(m_CastItem && m_CastItem->GetTemplate()->HasFlag(ITEM_FLAG_NO_REAGENT_COST))) + if (!m_CastItem) player->UpdateCraftSkill(m_spellInfo); uint32 enchant_id = effectInfo->MiscValue; @@ -3391,7 +3393,9 @@ void Spell::EffectDisEnchant() if (Player* caster = m_caster->ToPlayer()) { - caster->UpdateCraftSkill(m_spellInfo); + if (!m_CastItem) + caster->UpdateCraftSkill(m_spellInfo); + itemTarget->m_loot.reset(new Loot(caster->GetMap(), itemTarget->GetGUID(), LOOT_DISENCHANTING, nullptr)); itemTarget->m_loot->FillLoot(ASSERT_NOTNULL(itemTarget->GetDisenchantLoot(caster))->ID, LootTemplates_Disenchant, caster, true); caster->SendLoot(*itemTarget->m_loot); |