private void CheckLeftHand(Item item, Pocket source, Pocket target)
{
var pocketOfInterest = Pocket.None;
if (source == Pocket.RightHand1 || source == Pocket.RightHand2)
pocketOfInterest = source;
if (target == Pocket.RightHand1 || target == Pocket.RightHand2)
pocketOfInterest = target;
if (pocketOfInterest == Pocket.None)
return;
// Check LeftHand first, switch to Magazine if it's empty
lock (_pockets)
{
var leftPocket = pocketOfInterest + 2; // Left Hand 1/2
var leftItem = _pockets[leftPocket].GetItemAt(0, 0);
if (leftItem == null)
{
leftPocket += 2; // Magazine 1/2
leftItem = _pockets[leftPocket].GetItemAt(0, 0);
// Nothing to remove
if (leftItem == null)
return;
}
// Special handling of shield-likes (shields, books, etc)
if (leftItem.IsShieldLike)
{
// If right hand item is something that can be combined with
// a shield, the unequipping must be canceled. Things that
// don't go with shields include bows and 2H weapons,
// possibly more.
// TODO: Is there a better way to check this?
if (!item.IsBow && !item.IsTwoHand)
return;
}
// Try inventory first.
// TODO: List of pockets stuff can be auto-moved to.
var success = _pockets[Pocket.Inventory].Add(leftItem);
// Fallback, temp inv
if (!success)
success = _pockets[Pocket.Temporary].Add(leftItem);
if (success)
{
_pockets[leftPocket].Remove(leftItem);
Send.ItemMoveInfo(_creature, leftItem, leftPocket, null);
if (_creature.Region != Region.Limbo)
Send.EquipmentMoved(_creature, leftPocket);
this.OnUnequip(leftItem);
}
}
}