Exemple #1
0
        /// <summary>初始化新的角色的所有物品</summary>
        public void InitCharacter(
            int netId,
            int charId,
            out E_Bag resBag,
            out E_StoreHouse resStoreHouse,
            out E_EquipmentRegion resEqRegion
            )
        {
            // 若角色已经初始化
            if (m_bagDict.ContainsKey(netId))
            {
                resBag        = GetBag(netId);
                resStoreHouse = GetStoreHouse(netId);
                resEqRegion   = GetEquiped(netId);
                return;
            }
            // 初始化背包, 仓库, 装备区
            resBag        = m_bagPool.GetInstance();
            resStoreHouse = m_storeHousePool.GetInstance();
            resEqRegion   = m_equipmentRegionPool.GetInstance();

            E_Item[] itemInBag, itemInStoreHouse, itemEquiped;
            m_ddh.GetAndResetCharacterItemInstance(charId, out itemInBag, out itemInStoreHouse, out itemEquiped);
            resBag.Reset(itemInBag);
            resStoreHouse.Reset(itemInStoreHouse);
            resEqRegion.Reset(itemEquiped);

            // 索引各区域
            m_bagDict[netId]             = resBag as E_Bag;
            m_storeHouseDict[netId]      = resStoreHouse as E_StoreHouse;
            m_equipmentRegionDict[netId] = resEqRegion as E_EquipmentRegion;

            // 地面物品视野
            m_characterGroundItemSightDict.TryAdd(netId, new List <E_GroundItem> ());
        }
Exemple #2
0
        public void CommandApplyTakeOffEquipmentItem(int netId, long realId)
        {
            E_Character       charObj  = EM_Character.s_instance.GetCharacterByNetworkId(netId);
            E_EquipmentRegion eqRegion = EM_Item.s_instance.GetEquiped(netId);
            E_Bag             bag      = EM_Item.s_instance.GetBag(netId);

            if (charObj == null || eqRegion == null || bag == null)
            {
                return;
            }
            // 得到装备
            short posInEqRegion;
            var   eq = eqRegion.GetItemByRealId(realId, out posInEqRegion) as E_EquipmentItem;

            if (eq == null)
            {
                return;
            }
            // 寻找背包空插槽
            E_EmptyItem bagSlot;
            var         bagPos = bag.GetEmptySlot(out bagSlot);

            if (bagPos < 0 || bagSlot == null)
            {
                return;
            }
            NotifyCharacterSwapItemPlace(netId, charObj.m_characterId, bag, bagPos, bagSlot, eqRegion, posInEqRegion, eq);
            // 装备脱下改变Attr
            GL_CharacterAttribute.s_instance.NotifyConcreteAttributeMinus(charObj, EquipmentToAttrList(eq));
            // client TODO: 所有角色的卸除装备接口
            m_networkService.SendServerCommand(SC_ApplyAllChangeEquipment.Instance(EM_Sight.s_instance.GetInSightCharacterNetworkId(netId, true), netId, eq.m_ItemId));
        }
Exemple #3
0
        /// <summary>
        /// 获取装备区
        /// </summary>
        public E_EquipmentRegion GetEquiped(int netId)
        {
            E_EquipmentRegion er = null;

            m_equipmentRegionDict.TryGetValue(netId, out er);
            return(er);
        }
Exemple #4
0
        public void CommandApplyUseEquipmentItem(int netId, long realId)
        {
            E_Character       charObj  = EM_Character.s_instance.GetCharacterByNetworkId(netId);
            E_EquipmentRegion eqRegion = EM_Item.s_instance.GetEquiped(netId);
            E_Bag             bag      = EM_Item.s_instance.GetBag(netId);

            if (charObj == null || eqRegion == null || bag == null)
            {
                return;
            }
            short posInBag = -1;
            var   eq       = bag.GetItemByRealId(realId, out posInBag) as E_EquipmentItem;

            if (eq == null)
            {
                return;
            }
            // 该位置原有装备卸下
            E_Item oriItem;
            short  oriPos = eqRegion.GetEquipmentByEquipPosition(eq.m_EquipmentPosition, out oriItem);

            if (oriPos < 0 || oriItem == null)
            {
                return;
            }
            if (oriItem.m_Type == ItemType.EQUIPMENT)
            {
                GL_CharacterAttribute.s_instance.NotifyConcreteAttributeMinus(charObj, EquipmentToAttrList(oriItem as E_EquipmentItem));
            }
            // 装备穿上Attr
            GL_CharacterAttribute.s_instance.NotifyConcreteAttributeAdd(charObj, EquipmentToAttrList(eq));
            NotifyCharacterSwapItemPlace(charObj.m_networkId, charObj.m_characterId, eqRegion, oriPos, oriItem, bag, posInBag, eq);
            // client
            m_networkService.SendServerCommand(SC_ApplyAllChangeEquipment.Instance(EM_Sight.s_instance.GetInSightCharacterNetworkId(netId, true), netId, eq.m_ItemId));
        }