aboutsummaryrefslogtreecommitdiff
path: root/src/game/Spell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Spell.cpp')
-rw-r--r--src/game/Spell.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 9590322617f..d0e6b0f8ede 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -590,8 +590,11 @@ void Spell::FillTargetMap()
if(Guardian* pet = m_caster->GetGuardianPet())
tmpUnitMap.push_back(pet);
break;
- /*case SPELL_EFFECT_ENCHANT_ITEM:
- case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY:
+ case SPELL_EFFECT_ENCHANT_ITEM:
+ // add caster as unit target-needed by vellums to define who gets item
+ AddUnitTarget(m_caster, i);
+ break;
+ /*case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY:
case SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC:
case SPELL_EFFECT_DISENCHANT:
case SPELL_EFFECT_PROSPECTING:
@@ -3505,6 +3508,10 @@ void Spell::TakeReagents()
if(m_IsTriggeredSpell) // reagents used in triggered spell removed by original spell or don't must be removed.
return;
+ if (m_CastItem)
+ if (m_CastItem->GetProto()->Flags & ITEM_FLAGS_NO_REAGENT_CAST)
+ return;
+
if (m_caster->GetTypeId() != TYPEID_PLAYER)
return;
@@ -5004,6 +5011,23 @@ SpellCastResult Spell::CheckItems()
break;
}
case SPELL_EFFECT_ENCHANT_ITEM:
+ if(m_spellInfo->EffectItemType[i] && m_targets.getItemTarget()
+ && (m_targets.getItemTarget()->IsWeaponVellum() || m_targets.getItemTarget()->IsArmorVellum()))
+ {
+ // cannot enchant vellum for other player
+ if (m_targets.getItemTarget()->GetOwner()!=m_caster)
+ return SPELL_FAILED_NOT_TRADEABLE;
+ // do not allow to enchant vellum from scroll made by vellum-prevent exploit
+ if (m_CastItem && m_CastItem->GetProto()->Flags & ITEM_FLAGS_NO_REAGENT_CAST)
+ return SPELL_FAILED_TOTEM_CATEGORY;
+ ItemPosCountVec dest;
+ uint8 msg = p_caster->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, m_spellInfo->EffectItemType[i], 1 );
+ if (msg != EQUIP_ERR_OK )
+ {
+ p_caster->SendEquipError( msg, NULL, NULL );
+ return SPELL_FAILED_DONT_REPORT;
+ }
+ }
case SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC:
{
Item* targetItem = m_targets.getItemTarget();