mirror of
https://github.com/mangosfour/server.git
synced 2025-12-21 19:37:02 +00:00
[10662] Implement partly item looting
* Not deleted normal item loot at first loot window close. * Save current item loot content to DB for later continue looting. * Cleanup spell effect SPELL_EFFECT_OPEN_LOCK check code * Cleanup Player::AutoStoreLoot calls
This commit is contained in:
parent
9a5accf8a9
commit
f48e768a70
21 changed files with 392 additions and 132 deletions
|
|
@ -4989,34 +4989,43 @@ SpellCastResult Spell::CheckCast(bool strict)
|
|||
}
|
||||
case SPELL_EFFECT_OPEN_LOCK:
|
||||
{
|
||||
if( m_spellInfo->EffectImplicitTargetA[i] != TARGET_GAMEOBJECT &&
|
||||
m_spellInfo->EffectImplicitTargetA[i] != TARGET_GAMEOBJECT_ITEM )
|
||||
break;
|
||||
|
||||
if( m_caster->GetTypeId() != TYPEID_PLAYER // only players can open locks, gather etc.
|
||||
// we need a go target in case of TARGET_GAMEOBJECT
|
||||
|| m_spellInfo->EffectImplicitTargetA[i] == TARGET_GAMEOBJECT && !m_targets.getGOTarget()
|
||||
// we need a go target, or an openable item target in case of TARGET_GAMEOBJECT_ITEM
|
||||
|| m_spellInfo->EffectImplicitTargetA[i] == TARGET_GAMEOBJECT_ITEM && !m_targets.getGOTarget() &&
|
||||
(!m_targets.getItemTarget() || m_targets.getItemTarget()->GetOwner() != m_caster ||
|
||||
!m_targets.getItemTarget()->GetProto()->LockID || m_targets.getItemTarget()->HasFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_UNLOCKED)))
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER) // only players can open locks, gather etc.
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
|
||||
// In BattleGround players can use only flags and banners
|
||||
if( ((Player*)m_caster)->InBattleGround() &&
|
||||
!((Player*)m_caster)->CanUseBattleGroundObject() )
|
||||
return SPELL_FAILED_TRY_AGAIN;
|
||||
// we need a go target in case of TARGET_GAMEOBJECT (for other targets acceptable GO and items)
|
||||
if (m_spellInfo->EffectImplicitTargetA[i] == TARGET_GAMEOBJECT)
|
||||
{
|
||||
if (!m_targets.getGOTarget())
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
}
|
||||
|
||||
// get the lock entry
|
||||
uint32 lockId = 0;
|
||||
if (GameObject* go = m_targets.getGOTarget())
|
||||
{
|
||||
// In BattleGround players can use only flags and banners
|
||||
if( ((Player*)m_caster)->InBattleGround() &&
|
||||
!((Player*)m_caster)->CanUseBattleGroundObject() )
|
||||
return SPELL_FAILED_TRY_AGAIN;
|
||||
|
||||
lockId = go->GetGOInfo()->GetLockId();
|
||||
if (!lockId)
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
return SPELL_FAILED_ALREADY_OPEN;
|
||||
}
|
||||
else if(Item* itm = m_targets.getItemTarget())
|
||||
lockId = itm->GetProto()->LockID;
|
||||
else if(Item* item = m_targets.getItemTarget())
|
||||
{
|
||||
// not own (trade?)
|
||||
if (item->GetOwner() != m_caster)
|
||||
return SPELL_FAILED_ITEM_GONE;
|
||||
|
||||
lockId = item->GetProto()->LockID;
|
||||
|
||||
// if already unlocked
|
||||
if (!lockId || item->HasFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_UNLOCKED))
|
||||
return SPELL_FAILED_ALREADY_OPEN;
|
||||
}
|
||||
else
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
|
||||
SkillType skillId = SKILL_NONE;
|
||||
int32 reqSkillValue = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue