mirror of
https://github.com/mangosfour/server.git
synced 2025-12-21 01:37:05 +00:00
[11203] Implement creating scrolls when enchanting vellum.
Thanks to Lightguard and timmons for original contribution.
This commit is contained in:
parent
fcc09483ad
commit
44fd108745
5 changed files with 60 additions and 6 deletions
|
|
@ -5969,6 +5969,8 @@ SpellCastResult Spell::CheckItems()
|
|||
return SPELL_CAST_OK;
|
||||
|
||||
Player* p_caster = (Player*)m_caster;
|
||||
bool isScrollItem = false;
|
||||
bool isVellumTarget = false;
|
||||
|
||||
// cast item checks
|
||||
if(m_CastItem)
|
||||
|
|
@ -5984,6 +5986,9 @@ SpellCastResult Spell::CheckItems()
|
|||
if(!proto)
|
||||
return SPELL_FAILED_ITEM_NOT_FOUND;
|
||||
|
||||
if (proto->Flags & ITEM_FLAG_ENCHANT_SCROLL)
|
||||
isScrollItem = true;
|
||||
|
||||
for (int i = 0; i < 5; ++i)
|
||||
if (proto->Spells[i].SpellCharges)
|
||||
if(m_CastItem->GetSpellCharges(i) == 0)
|
||||
|
|
@ -6052,9 +6057,15 @@ SpellCastResult Spell::CheckItems()
|
|||
return m_IsTriggeredSpell && !(m_targets.m_targetMask & TARGET_FLAG_TRADE_ITEM)
|
||||
? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_ITEM_GONE;
|
||||
|
||||
isVellumTarget = m_targets.getItemTarget()->GetProto()->IsVellum();
|
||||
if(!m_targets.getItemTarget()->IsFitToSpellRequirements(m_spellInfo))
|
||||
return m_IsTriggeredSpell && !(m_targets.m_targetMask & TARGET_FLAG_TRADE_ITEM)
|
||||
? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_EQUIPPED_ITEM_CLASS;
|
||||
|
||||
// Do not enchant vellum with scroll
|
||||
if (isVellumTarget && isScrollItem)
|
||||
return m_IsTriggeredSpell && !(m_targets.m_targetMask & TARGET_FLAG_TRADE_ITEM)
|
||||
? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_BAD_TARGETS;
|
||||
}
|
||||
// if not item target then required item must be equipped (for triggered case not report error)
|
||||
else
|
||||
|
|
@ -6207,6 +6218,17 @@ SpellCastResult Spell::CheckItems()
|
|||
|
||||
if( targetItem->GetProto()->ItemLevel < m_spellInfo->baseLevel )
|
||||
return SPELL_FAILED_LOWLEVEL;
|
||||
// Check if we can store a new scroll, enchanting vellum has implicit SPELL_EFFECT_CREATE_ITEM
|
||||
if (isVellumTarget && m_spellInfo->EffectItemType[i])
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
// Not allow enchant in trade slot for some enchant type
|
||||
if( targetItem->GetOwner() != m_caster )
|
||||
{
|
||||
|
|
@ -6216,6 +6238,9 @@ SpellCastResult Spell::CheckItems()
|
|||
return SPELL_FAILED_ERROR;
|
||||
if (pEnchant->slot & ENCHANTMENT_CAN_SOULBOUND)
|
||||
return SPELL_FAILED_NOT_TRADEABLE;
|
||||
// cannot replace vellum with scroll in trade slot
|
||||
if (isVellumTarget)
|
||||
return SPELL_FAILED_ITEM_ENCHANT_TRADE_WINDOW;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue