Aura.Channel.World.Inventory.CreatureInventory.CheckLeftHand C# (CSharp) 메소드

CheckLeftHand() 개인적인 메소드

Unequips item in left hand/magazine, if item in right hand is moved.
private CheckLeftHand ( Item item, Pocket source, Pocket target ) : void
item Item
source Pocket
target Pocket
리턴 void
		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);
				}
			}
		}