/// <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> ()); }
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)); }
/// <summary> /// 获取装备区 /// </summary> public E_EquipmentRegion GetEquiped(int netId) { E_EquipmentRegion er = null; m_equipmentRegionDict.TryGetValue(netId, out er); return(er); }
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)); }