Пример #1
0
    /// <summary>
    /// 在武器变化的时候, 更新当前实装的武器的准星信息
    /// </summary>
    private void UpdateBattleWeapons(IComponentEvent entityEvent)
    {
        ItemOperateEvent itemEvent = entityEvent as ItemOperateEvent;

        Dictionary <ulong, BattleWeaponBase> newBattleWeapons = new Dictionary <ulong, BattleWeaponBase>();

        for (int iWeapon = 0; iWeapon < BATTLE_WEAPON_COUNT; iWeapon++)
        {
            IWeapon weapon = m_SkillProxy.GetWeaponByIndex(iWeapon);
            if (weapon == null)
            {
                continue;
            }

            // 获取iWeapon对应武器的UID
            ulong uid = weapon.GetUID();
            // 查看当前是否有这把武器的准星信息
            if (m_Property.HaveBattleWeapon(uid))
            {
                newBattleWeapons.Add(uid, m_Property.GetBattleWeapon(uid));
            }
            else
            {
                BattleWeaponBase.BattleWeaponType weaponType = BattleWeaponBase.GetBattleWeaponTypeByReticle(weapon.GetConfig().Reticle);
                newBattleWeapons.Add(uid, CreateNewBattleWeapon(weaponType, weapon));
            }
        }

        m_Property.ResetBattleWeapons(newBattleWeapons);
    }
Пример #2
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);
                    }
                }
            }
        }