aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2
-rw-r--r--src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp6
-rw-r--r--src/server/game/Spells/Spell.cpp5
-rw-r--r--src/server/game/Spells/SpellEffects.cpp12
4 files changed, 17 insertions, 8 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 78fb3b3ec0b..97f3531d677 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -768,7 +768,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 00ca9c8dd55..aa8d4f38889 100644
--- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
+++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
@@ -1444,7 +1444,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", "" };
@@ -1488,7 +1488,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;
@@ -1529,7 +1529,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 b0a5b3c7cdd..50a53a0cdd0 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -3853,6 +3853,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 f255b272120..74262ac15c4 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -1397,7 +1397,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);
}
}
@@ -1426,7 +1427,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
{
@@ -2357,7 +2359,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;
@@ -3403,7 +3405,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);