/// <summary> /// 道具各种操作 /// </summary> /// <param name="buf"></param> private void OnItemChange(KProtoBuf buf) { S2C_ITEM_OPERATE_LIST msg = buf as S2C_ITEM_OPERATE_LIST; if (msg.errcode == 0) { ItemOperateInfoTemp.OperateType weaponOperate = 0; Category category = 0; int pos = 0; ulong uid = 0; List <ulong> ships = new List <ulong>(); for (int i = 0; i < msg.op_list.Count; i++) { ItemOperate itemMsg = msg.op_list[i]; switch ((ItemProcessType)itemMsg.type) { case ItemProcessType.IPTAddItem: //操作顺序不可修改 Category mainType = GetPackageProxy().AddItem(false, itemMsg.uid, itemMsg.tid, itemMsg.parent, itemMsg.pos, itemMsg.count, itemMsg.cur_capacity, itemMsg.reference, itemMsg.create_time); GetPackageProxy().ChangeItemAttr(itemMsg.uid, itemMsg.lv, itemMsg.exp); category = GetPackageProxy().CheckMarkItemAdd(msg.mark, itemMsg.uid); if (category == Category.Weapon) { if (weaponOperate == ItemOperateInfoTemp.OperateType.Remove) { weaponOperate = ItemOperateInfoTemp.OperateType.Replace; pos = itemMsg.pos; uid = itemMsg.uid; } else { weaponOperate = ItemOperateInfoTemp.OperateType.Add; pos = itemMsg.pos; uid = itemMsg.uid; } } if (mainType == Category.Warship) { ships.Add(itemMsg.uid); } // break; case ItemProcessType.IPTDeleteItem: //操作顺序不可修改 category = GetPackageProxy().CheckMarkItemRemove(msg.mark, itemMsg.uid); GetPackageProxy().RemoveItem(itemMsg.uid); if (category == Category.Weapon) { weaponOperate = ItemOperateInfoTemp.OperateType.Remove; pos = itemMsg.pos; uid = itemMsg.uid; } // break; case ItemProcessType.IPTStackChange: GetPackageProxy().ChangeStackCount(itemMsg.uid, itemMsg.count); break; case ItemProcessType.IPTPositionChange: GetPackageProxy().ChangePosition(itemMsg.uid, itemMsg.parent, itemMsg.pos); break; case ItemProcessType.IPTCapacityChange: GetPackageProxy().ChangeContainerSize(itemMsg.uid, itemMsg.cur_capacity); break; } } switch ((ItemOperateType)msg.op_type) { case ItemOperateType.IOTAddItem: GameFacade.Instance.SendNotification(NotificationName.MSG_PACKAGE_ITEM_ADD); break; case ItemOperateType.IOTDestoryItem: GameFacade.Instance.SendNotification(NotificationName.MSG_PACKAGE_ITEM_DESTORY); break; case ItemOperateType.IOTConsumeItem: GameFacade.Instance.SendNotification(NotificationName.MSG_PACKAGE_ITEM_CONSUME); break; case ItemOperateType.IOTMoveItem: GameFacade.Instance.SendNotification(NotificationName.MSG_PACKAGE_ITEM_MOVE); break; case ItemOperateType.IOTSkillChanged: { PlayerSkillProxy skillProxy = GameFacade.Instance.RetrieveProxy(ProxyName.PlayerSkillProxy) as PlayerSkillProxy; skillProxy.RefreshShipSkills(); } break; } if (weaponOperate != 0) { ItemOperateInfoTemp info = new ItemOperateInfoTemp(); info.Category = Category.Weapon; info.Type = weaponOperate; info.Pos = pos; info.UID = uid; GameFacade.Instance.SendNotification(NotificationName.MSG_PACKAGE_ITEM_OPERATE, info); ItemOperateEvent itemEvent = new ItemOperateEvent(); info.Category = Category.Weapon; info.Type = weaponOperate; info.Pos = pos; info.UID = uid; GameplayProxy gameplayProxy = GameFacade.Instance.RetrieveProxy(ProxyName.GameplayProxy) as GameplayProxy; SpacecraftEntity entity = gameplayProxy.GetMainPlayer(); entity?.SendEvent(ComponentEventName.ItemInPackageChanged, itemEvent); } if (ships.Count > 0) { ShipProxy shipProxy = GameFacade.Instance.RetrieveProxy(ProxyName.ShipProxy) as ShipProxy; foreach (ulong id in ships) { shipProxy.ChangeShipPackage(id); } } } }