コード例 #1
0
        /// <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);
                    }
                }
            }
        }