protected void NetFuncMergeNonEquipItems(short index1, short index2) { if (!CanDoActions() || index1 >= nonEquipItems.Count || index2 >= nonEquipItems.Count) { return; } CharacterItem nonEquipItem1 = nonEquipItems[index1]; CharacterItem nonEquipItem2 = nonEquipItems[index2]; short maxStack = nonEquipItem2.GetMaxStack(); if (nonEquipItem2.amount + nonEquipItem1.amount <= maxStack) { nonEquipItem2.amount += nonEquipItem1.amount; nonEquipItems[index2] = nonEquipItem2; nonEquipItems.RemoveAt(index1); } else { short mergeAmount = (short)(maxStack - nonEquipItem2.amount); nonEquipItem2.amount = maxStack; nonEquipItem1.amount -= mergeAmount; nonEquipItems[index1] = nonEquipItem1; nonEquipItems[index2] = nonEquipItem2; } }
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; } }