/// <summary> /// 添加物品 /// </summary> /// <param name="account"></param> /// <param name="role"></param> /// <param name="sid"></param> /// <param name="bytes"></param> /// <returns></returns> private static async Task <BaseResponseData> AddItem() { try { AddItemResult result = new AddItemResult(); if (User.bytes == null) { result.Result = GameEnum.WsResult.ParamsError; return(result); } var data = await InitHelpers.GetPse().DeserializeAsync <AddItemReq>(User.bytes); if (data == null) { result.Result = GameEnum.WsResult.ParamsError; return(result); } var id = data.ItemId; var count = data.Count; return(await BagController.Instance.AddItemToRoleBag(id, count)); } catch (Exception ex) { //日志 throw ex; } }
public UnequipItemResult UnequipItem(byte sourceIndex, out byte index, out byte amount) { index = 0; amount = 0; EQUIP_SLOT fromSlot = (EQUIP_SLOT)sourceIndex; // equip slot is not empty if (!this.equip.ContainsKey(fromSlot)) { return(UnequipItemResult.ERROR); } // move the item into the inventory AddItemResult aRes = this.AddItem(this.equip[fromSlot], out index, out amount); if (aRes == AddItemResult.ERROR) { return(UnequipItemResult.ERROR); } // unequip the item this.equip.Remove(fromSlot); if (aRes == AddItemResult.NEW_INDEX) { return(UnequipItemResult.NEW_INDEX); } else if (aRes == AddItemResult.STACKED) { return(UnequipItemResult.STACKED); } return(UnequipItemResult.ERROR); }
public void OnAddItem(Item nItem, SagaDB.Items.ITEM_UPDATE_REASON reason) { byte index, amount; AddItemResult res = I.inv.AddItem(nItem, out index, out amount); if (res == AddItemResult.ERROR) { Logger.ShowWarning("pc event handler: cannot add item with ID " + nItem.id, null); return; } nItem.index = index; nItem.stack = amount; if (res == AddItemResult.NEW_INDEX) { Packets.Server.AddItem p1 = new SagaMap.Packets.Server.AddItem(); p1.SetContainer(CONTAINER_TYPE.INVENTORY); p1.SetItem(nItem); C.netIO.SendPacket(p1, C.SessionID); MapServer.charDB.NewItem(this.C.Char, nItem); } Packets.Server.UpdateItem p2 = new SagaMap.Packets.Server.UpdateItem(); p2.SetContainer(CONTAINER_TYPE.INVENTORY); p2.SetItemIndex(nItem.index); p2.SetAmount(nItem.stack); p2.SetUpdateType(SagaMap.Packets.Server.ITEM_UPDATE_TYPE.AMOUNT); p2.SetUpdateReason(reason); C.netIO.SendPacket(p2, C.SessionID); MapServer.charDB.UpdateItem(this.C.Char, nItem); }
/// <summary> /// 添加道具进背包 /// </summary> /// <param name="sm"></param> /// <param name="roleId"></param> /// <param name="itemId"></param> /// <param name="count"></param> /// <returns></returns> public async Task <AddItemResult> AddItemToRoleBag(int itemId, long count) { var item = GetItemById(itemId); if (item == null) { return(null); } AddItemResult result = new AddItemResult(); if (!CheckBagSpace(itemId, count)) { result.Result = GameEnum.WsResult.NotEnoughBagSpace; return(result); } var itemCount = new Dictionary <int, long>(); itemCount.Add(itemId, count); result = await AddItemToRoleBag(itemCount); var data = await InitHelpers.GetPse().SerializeAsync(result); await MsgMaker.SendMessage(WSResponseMsgID.AddItemResult, 1, data); //写入队列 return(result); }
public virtual AddItemResult AddItem(T item) { var result = new AddItemResult { Success = true }; _items.AddOrUpdate(item.Id, item, (key, previousItem) => { result.Success = false; result.Error = $"Duplicate item found: {item.Id}. Newest item not added."; return(previousItem); }); return(result); }
private void OnSubmit(object sender, RoutedEventArgs e) { if (CmbProducts.SelectedItem != null && _viewModel.Quantity > 0) { int qty; if (int.TryParse(TxtQty.Text, out qty)) { Result = new AddItemResult { Product = CmbProducts.SelectedItem as Product, Quantity = qty }; DialogResult = true; Close(); } } }
/// <summary> /// 添加道具进用户背包 /// </summary> /// <param name="sm"></param> /// <param name="roleId"></param> /// <param name="itemCount"></param> /// <returns></returns> private async Task <AddItemResult> AddItemToRoleBag(Dictionary <int, long> itemCount) { AddItemResult result = new AddItemResult(); var roleInfo = LogicServer.User.role; var roleBg = LogicServer.User.bag; long oldSocialStatus = 0; foreach (var i in roleBg.Items) { var item = GetItemById(i.Key); if (item != null) { checked { try { if (item.Superposition == 0) //身价值不叠加 { oldSocialStatus += item.Status; } else if (item.Superposition == 1) //叠加 { oldSocialStatus += (item.Status * i.Value.CurCount); } } catch (OverflowException ex) { throw new Exception(ex.Message); } } } } long socialStatus = roleInfo.SocialStatus - oldSocialStatus; //除去背包中所有物品带来的身价值 var curBagCell = roleBg.CurUsedCell; //当前背包所用格子 foreach (var b in itemCount) { var itemTemplate = GetItemById(b.Key); var stackCount = (itemTemplate.Count == 0 ? 1 : itemTemplate.Count); checked { try { if (roleBg.Items.TryGetValue(b.Key, out Model.Data.General.Item value)) //存在 { curBagCell -= value.OnSpace; //去除原先占用的格子 if (stackCount == 1) { value.OnSpace = value.CurCount += b.Value; //当前数量和空间 } else { value.CurCount += b.Value; //当前数量 value.OnSpace = (value.CurCount / stackCount) + 1; } curBagCell += value.OnSpace; //更新加入物品后的格子 } else { Model.Data.General.Item i = new Model.Data.General.Item(); if (stackCount == 1) { i.OnSpace = i.CurCount = b.Value; //当前数量和空间 } else { i.CurCount += b.Value; i.OnSpace = (i.CurCount / stackCount) + 1; } curBagCell += i.OnSpace; //更新加入物品后的格子 roleBg.Items.Add(b.Key, i); } } catch (OverflowException ex) { throw new Exception(ex.Message); } } } roleBg.CurUsedCell = curBagCell; await BagDataHelper.Instance.UpdateBagByRoleId(roleBg, LogicServer.User.role.Id); foreach (var status in roleBg.Items) { var item = GetItemById(status.Key); if (item != null) { checked { try { if (item.Superposition == 0) { socialStatus += item.Status; } else { socialStatus += (item.Status * status.Value.CurCount); } } catch (OverflowException ex) { throw new Exception(ex.Message); } } } } roleInfo.SocialStatus = socialStatus; //身价值更新 await RoleDataHelper.Instance.UpdateRoleByRoleIdAsync(roleInfo.Id, roleInfo); //保存 result.ShenJia = socialStatus; result.BagInfo.CurUsedCell = roleBg.CurUsedCell; foreach (var i in roleBg.Items) { result.BagInfo.Items.Add(i.Key, new LoadRoleBagInfo() { OnSpace = i.Value.OnSpace, CurCount = i.Value.CurCount, }); } return(result); }
public override AddItemResult AddItem(Product item) { var result = new AddItemResult { Success = true }; if (!string.IsNullOrWhiteSpace(item.ParentId)) { if (_items.ContainsKey(item.ParentId)) { var parentProduct = _items[item.ParentId]; if (parentProduct.Variants.All((var) => { return(var.Id != item.Id); })) { parentProduct.Variants.Add(item); _items.AddOrUpdate(parentProduct.Id, parentProduct, (key, previousItem) => { return(parentProduct); }); } else { result.Success = false; result.Error = $"Duplicate item found: {item.Id}. Newest item not added."; } } else if (_variantsAwaitingParents.ContainsKey(item.ParentId)) { var existingList = _variantsAwaitingParents[item.ParentId]; if (existingList.All((var) => { return(var.Id != item.Id); })) { existingList.Add(item); _variantsAwaitingParents.AddOrUpdate(item.ParentId, existingList, (key, previousItem) => { return(existingList); }); } else { result.Success = false; result.Error = $"Duplicate item found: {item.Id}. Newest item not added."; } } else { _variantsAwaitingParents.AddOrUpdate(item.ParentId, new List <Product> { item }, (key, previousItem) => { result.Success = false; result.Error = $"Duplicate item found: {item.Id}. Newest item not added."; return(previousItem); }); } } else { if (_variantsAwaitingParents.ContainsKey(item.Id)) { item.Variants.AddRange(_variantsAwaitingParents[item.Id]); var removedVariants = new List <Product>(); _variantsAwaitingParents.TryRemove(item.Id, out removedVariants); } _items.AddOrUpdate(item.Id, item, (key, previousItem) => { result.Success = false; result.Error = $"Duplicate item found: {item.Id}. Newest item not added."; return(previousItem); }); } return(result); }