protected virtual void NetFuncSwapOrMergeNonEquipItems(short index1, short index2) { if (!CanDoActions() || index1 >= nonEquipItems.Count || index2 >= nonEquipItems.Count) { return; } CharacterItem nonEquipItem1 = nonEquipItems[index1]; CharacterItem nonEquipItem2 = nonEquipItems[index2]; if (nonEquipItem1.dataId == nonEquipItem2.dataId && nonEquipItem1.NotEmptySlot() && nonEquipItem2.NotEmptySlot()) { // Merge or swap if (nonEquipItem1.IsFull() || nonEquipItem2.IsFull()) { // Swap NetFuncSwapNonEquipItems(index1, index2); } else { // Merge NetFuncMergeNonEquipItems(index1, index2); } } else { // Swap NetFuncSwapNonEquipItems(index1, index2); } }
protected virtual void NetFuncSwapOrMergeItem(short fromIndex, short toIndex) { if (!CanDoActions() || fromIndex >= NonEquipItems.Count || toIndex >= NonEquipItems.Count) { return; } CharacterItem fromItem = NonEquipItems[fromIndex]; CharacterItem toItem = NonEquipItems[toIndex]; if (!fromItem.NotEmptySlot() || !toItem.NotEmptySlot()) { return; } if (fromItem.dataId.Equals(toItem.dataId) && !fromItem.IsFull() && !toItem.IsFull()) { // Merge if same id and not full short maxStack = toItem.GetMaxStack(); if (toItem.amount + fromItem.amount <= maxStack) { toItem.amount += fromItem.amount; NonEquipItems[fromIndex] = CharacterItem.Empty; NonEquipItems[toIndex] = toItem; } else { short remains = (short)(toItem.amount + fromItem.amount - maxStack); toItem.amount = maxStack; fromItem.amount = remains; NonEquipItems[fromIndex] = fromItem; NonEquipItems[toIndex] = toItem; } } else { // Swap NonEquipItems[fromIndex] = toItem; NonEquipItems[toIndex] = fromItem; } }