public void transferFrom(L2Player player, List <int[]> transfer, bool update) { InventoryUpdate iu = update ? new InventoryUpdate() : null; List <int> nulled = new List <int>(); foreach (L2Item item in Items.Values) { foreach (int[] itemd in transfer) { if (item.ObjID == itemd[0]) { bool ex = false; foreach (L2Item itp in player.getAllItems()) { if (itp.Template.ItemID == item.Template.ItemID) { ex = true; break; } } if (item.Template.isStackable()) { if (itemd[1] >= item.Count) { nulled.Add(itemd[0]); if (ex) { foreach (L2Item itp in player.getAllItems()) { if (itp.Template.ItemID == item.Template.ItemID) { itp.Count += item.Count; itp.sql_update(); if (update) { iu.addModItem(itp); } break; } } item.sql_delete(); } else { item.Location = L2Item.L2ItemLocation.inventory; player.Inventory.Items.Add(item.ObjID, item); item.sql_update(); if (update) { iu.addNewItem(item); } } } else { item.Count -= itemd[1]; if (ex) { foreach (L2Item itp in player.getAllItems()) { if (itp.Template.ItemID == item.Template.ItemID) { itp.Count += itemd[1]; itp.sql_update(); if (update) { iu.addModItem(itp); } break; } } } else { L2Item ins = new L2Item(item.Template); ins.Count = itemd[1]; ins.Location = L2Item.L2ItemLocation.inventory; player.Inventory.Items.Add(ins.ObjID, ins); ins.sql_insert(_owner.ObjID); if (update) { iu.addNewItem(ins); } } } } else { nulled.Add(itemd[0]); item.Location = L2Item.L2ItemLocation.inventory; player.Inventory.Items.Add(item.ObjID, item); item.sql_update(); if (update) { iu.addNewItem(item); } } foreach (QuestInfo qi in _owner._quests) { if (!qi.completed) { qi._template.onEarnItem(_owner, qi.stage, item.Template.ItemID); } } } } } lock (Items) { foreach (int itemd in nulled) { Items.Remove(itemd); } } }
public void transferHere(L2Player target, List <long[]> items, bool update) { InventoryUpdate iuTarget = update ? new InventoryUpdate() : null; InventoryUpdate iuMe = update ? new InventoryUpdate() : null; List <int> nulled = new List <int>(); foreach (L2Item item in target.Inventory.Items.Values) { foreach (long[] itemd in items) { if (item.ObjID == itemd[0]) { bool ex = false; foreach (L2Item itp in Items.Values) { if (itp.Template.ItemID == item.Template.ItemID) { ex = true; break; } } if (item.Template.isStackable()) { if (itemd[1] >= item.Count) { nulled.Add((int)itemd[0]); if (ex) { foreach (L2Item itp in Items.Values) { if (itp.Template.ItemID == item.Template.ItemID) { itp.Count += item.Count; itp.sql_update(); if (update) { iuMe.addModItem(itp); } break; } } item.sql_delete(); } else { item.Location = L2Item.L2ItemLocation.inventory; Items.Add(item.ObjID, item); item.sql_update(); if (update) { iuMe.addNewItem(item); } } if (update) { iuTarget.addDelItem(item); } } else { item.Count -= itemd[1]; if (ex) { foreach (L2Item itp in Items.Values) { if (itp.Template.ItemID == item.Template.ItemID) { itp.Count += itemd[1]; if (update) { iuMe.addModItem(itp); } break; } } } else { L2Item ins = new L2Item(item.Template); ins.Count = itemd[1]; ins.Location = L2Item.L2ItemLocation.inventory; Items.Add(ins.ObjID, ins); ins.sql_insert(target.ObjID); if (update) { iuMe.addNewItem(ins); } } if (update) { iuTarget.addModItem(item); } } } else { nulled.Add((int)itemd[0]); item.Location = L2Item.L2ItemLocation.inventory; Items.Add(item.ObjID, item); item.sql_update(); if (update) { iuTarget.addDelItem(item); iuMe.addNewItem(item); } } } } } lock (target.Inventory.Items) { foreach (int itemd in nulled) { target.Inventory.Items.Remove(itemd); } } if (update) { target.sendPacket(iuTarget); _owner.sendPacket(iuMe); } }