public static bool CanAdd(this ItemPackage package, IEnumerable <ItemAsset.MaterialItem> list) { int[] sum = new int[(int)ItemPackage.ESlotType.Max]; foreach (ItemAsset.MaterialItem mi in list) { int type = (int)ItemPackage.GetSlotType(mi.protoId); if (type < sum.Length) { sum[type] += SlotListHelper.SlotListAccessor.GetNeedSlotCount(mi.protoId, mi.count); } } for (int i = 0; i < sum.Length; i++) { SlotList slotList = package.GetSlotList((ItemPackage.ESlotType)i); if (slotList.GetVacancyCount() < sum[i]) { return(false); } } return(true); }
public static bool Add(this ItemPackage package, int prototypeId, int count, bool newFlag = false) { if (count <= 0) { return(false); } SlotList accessor = package.GetSlotList(ItemPackage.GetSlotType(prototypeId)); if (null == accessor) { return(false); } if (ItemProto.Mgr.Instance.Get(prototypeId).maxStackNum > 1) { return(accessor.Add(prototypeId, count, newFlag)); } else { bool result = true; for (int i = 0; i < count; i++) { if (result) { result = accessor.Add(ItemMgr.Instance.CreateItem(prototypeId), newFlag); } else { accessor.Add(ItemMgr.Instance.CreateItem(prototypeId), newFlag); } } return(result); } }
public static bool CanAdd(this ItemPackage package, int prototypeId, int count) { SlotList accessor = package.GetSlotList(ItemPackage.GetSlotType(prototypeId)); if (null == accessor) { return(false); } return(accessor.CanAdd(prototypeId, count)); }
public static bool DestroyItem(this ItemPackage package, ItemObject item, int count) { if (count <= 0) { return(false); } if (item.GetCount() < count) { return(false); } SlotList accessor = package.GetSlotList(ItemPackage.GetSlotType(item.protoId)); return(accessor.DestroyItem(item.instanceId, count)); }
public static bool Set(this ItemPackage package, int prototypeId, int count) { if (count <= 0) { return(false); } SlotList accessor = package.GetSlotList(ItemPackage.GetSlotType(prototypeId)); if (null == accessor) { return(false); } return(accessor.Set(prototypeId, count)); }
public static bool AddAsOneItem(this ItemPackage package, int prototypeId, int count, bool newFlag = false) { if (count <= 0) { return(false); } SlotList accessor = package.GetSlotList(ItemPackage.GetSlotType(prototypeId)); if (null == accessor) { return(false); } return(accessor.AddAsNew(prototypeId, count, newFlag)); }
public SlotList GetSlotList(int prototypeId) { ItemProto itemData = ItemProto.GetItemData(prototypeId); if (itemData == null) { return(null); } if (itemData.category == quest_item) { return(_missionPak.GetSlotList(ItemPackage.GetSlotType(prototypeId))); } else { return(_playerPak.GetSlotList(ItemPackage.GetSlotType(prototypeId))); } }
public static bool DestroyItem(this ItemPackage package, int instanceId, int count) { if (count <= 0) { return(false); } ItemObject item = ItemMgr.Instance.Get(instanceId); if (item.stackCount < count) { return(false); } SlotList accessor = package.GetSlotList(ItemPackage.GetSlotType(item.protoId)); return(accessor.DestroyItem(instanceId, count)); }
public void OnDropItem(Grid_N grid) { if (this.mRepairMachine.m_Repair != null && this.mRepairMachine.m_Repair.IsRepairingM) { return; } if (SelectItem_N.Instance.Place == ItemPlaceType.IPT_HotKeyBar || SelectItem_N.Instance.Place == ItemPlaceType.IPT_Repair) { return; } //lz-2016.09.19 如果是ISO就返回,营地修理机不支持修ISO if (WhiteCat.CreationHelper.GetCreationItemClass(SelectItem_N.Instance.ItemObj) != WhiteCat.CreationItemClass.None) { //lz-2016.10.23 增加只能在基地修理的提示 PeTipMsg.Register(PELocalization.GetString(8000843), PeTipMsg.EMsgLevel.Warning); return; } ActiveWnd(); Repair dragRepairItem = SelectItem_N.Instance.ItemObj.GetCmpt <Repair>(); if (dragRepairItem == null) { return; } if (dragRepairItem.protoData.repairMaterialList == null || dragRepairItem.protoData.repairMaterialList.Count == 0) { return; } //多人模式 if (Pathea.PeGameMgr.IsMulti) { int[] itemlist = new int[1]; itemlist[0] = SelectItem_N.Instance.ItemObj.instanceId; _net.InsertItemList(itemlist); return; } else { //lz-2016.07.29 在修理机拖入物品的时候,如果里面有东西就先尝试取出里面的物品到背包,执行成功的时候再放进新的物品 if (null == mRepairItem.ItemObj) { UpdateItem(dragRepairItem); SelectItem_N.Instance.RemoveOriginItem(); SelectItem_N.Instance.SetItem(null); } else { //lz-2016.10.19 如果拖动的Item和放置的Item是同一类型,就直接交换ItemObj数据 ItemPackage.ESlotType dropType = ItemPackage.GetSlotType(mRepairItem.ItemObj.protoId); ItemPackage.ESlotType dragType = ItemPackage.GetSlotType(dragRepairItem.itemObj.protoId); if (dropType == dragType && null != SelectItem_N.Instance.Grid) { if (SelectItem_N.Instance.Grid.onGridsExchangeItem != null) { SelectItem_N.Instance.Grid.onGridsExchangeItem(SelectItem_N.Instance.Grid, mRepairItem.ItemObj); UpdateItem(dragRepairItem); SelectItem_N.Instance.SetItem(null); } } //lz-2016.10.19 如果不是同一类型,或者没有Grid,就先添加,后移除 else { if (TryAddCurRepairItemToPlayerPackage()) { UpdateItem(dragRepairItem); SelectItem_N.Instance.RemoveOriginItem(); SelectItem_N.Instance.SetItem(null); } } } } }
void OnDropItem(Grid_N grid) { //1.check if (SelectItem_N.Instance.Place == ItemPlaceType.IPT_HotKeyBar && SelectItem_N.Instance.Place == ItemPlaceType.IPT_Null) { SelectItem_N.Instance.SetItem(null); return; } if (onCheckItem != null && !onCheckItem(SelectItem_N.Instance.ItemObj, ECheckItemType.OnDrop)) { return; } //2.send 3.do if (GameConfig.IsMultiMode) { OnDropItemMulti(grid, m_Index); return; } ItemObject dragitem = SelectItem_N.Instance.ItemObj; if (dragitem == null) { return; } ItemObject dropItem = grid.ItemObj; ItemObject oldItem = grid.ItemObj; if (dropItem == null) { grid.SetItem(dragitem); if (OnItemChanged != null) { OnItemChanged(dragitem, oldItem, m_Index); } SelectItem_N.Instance.RemoveOriginItem(); SelectItem_N.Instance.SetItem(null); } else { Pathea.PlayerPackageCmpt pkg = Pathea.PeCreature.Instance.mainPlayer.GetCmpt <Pathea.PlayerPackageCmpt>(); ItemPackage.ESlotType dropType = ItemPackage.GetSlotType(dropItem.protoId); ItemPackage.ESlotType dragType = ItemPackage.GetSlotType(dragitem.protoId); //lz-2016.10.18 如果拖动的Item和放置的Item是同一类型,就直接交换ItemObj数据 if (dropType == dragType && null != SelectItem_N.Instance.Grid) { if (SelectItem_N.Instance.Grid.onGridsExchangeItem != null) { SelectItem_N.Instance.Grid.onGridsExchangeItem(SelectItem_N.Instance.Grid, dropItem); grid.SetItem(dragitem); SelectItem_N.Instance.SetItem(null); if (OnItemChanged != null) { OnItemChanged(dragitem, oldItem, m_Index); } } } //lz-2016.10.18 如果不是同一类型,或者没有Grid,就先添加,后移除 else if (pkg.package.CanAdd(dropItem)) { pkg.package.AddItem(dropItem); grid.SetItem(dragitem); SelectItem_N.Instance.RemoveOriginItem(); SelectItem_N.Instance.SetItem(null); } if (OnItemChanged != null) { OnItemChanged(dragitem, oldItem, m_Index); } } }
void OnDropItem(Grid_N grid) { //lz-2016.11.16 当前包裹数据为空的时候直接返回 if (CSUI_MainWndCtrl.Instance == null || grid == null || null == m_CurPack) { return; } if (!CSUI_MainWndCtrl.IsWorking()) { return; } if (!m_IsWorking) { if (OpStatusEvent != null) { OpStatusEvent(EEventType.CantWork, CSUtils.GetEntityName(CSConst.etStorage), null); } return; } if (null == SelectItem_N.Instance.ItemObj || SelectItem_N.Instance.Place == ItemPlaceType.IPT_HotKeyBar) { SelectItem_N.Instance.SetItem(null); return; } if (grid.ItemObj == null) { switch (SelectItem_N.Instance.Place) { default: if (GameConfig.IsMultiMode) { if (SelectItem_N.Instance.GridMask != GridMask.GM_Mission) { if (m_storage == null) { if (SelectItem_N.Instance.Place == ItemPlaceType.IPT_Bag) { PlayerNetwork.mainPlayer.RequestPersonalStorageStore(SelectItem_N.Instance.ItemObj.instanceId, grid.ItemIndex); } else if (SelectItem_N.Instance.Place == ItemPlaceType.IPT_NPCStorage) { PlayerNetwork.mainPlayer.RequestPersonalStorageExchange(SelectItem_N.Instance.ItemObj.instanceId, SelectItem_N.Instance.Index, grid.ItemIndex); } } else { if (SelectItem_N.Instance.Place == ItemPlaceType.IPT_Bag) { m_storage._ColonyObj._Network.STO_Store(grid.ItemIndex, SelectItem_N.Instance.ItemObj); } else if (SelectItem_N.Instance.Place == ItemPlaceType.IPT_CSStorage) { m_storage._ColonyObj._Network.STO_Exchange(SelectItem_N.Instance.ItemObj.instanceId, SelectItem_N.Instance.Index, grid.ItemIndex); } return; } if (OpStatusEvent != null) { OpStatusEvent(EEventType.PutItemInto, SelectItem_N.Instance.ItemObj.protoData.GetName(), CSUtils.GetEntityName(CSConst.etStorage)); } } } else { if (SelectItem_N.Instance.GridMask != GridMask.GM_Mission) { SelectItem_N.Instance.RemoveOriginItem(); grid.SetItem(SelectItem_N.Instance.ItemObj); m_CurPack[grid.ItemIndex] = SelectItem_N.Instance.ItemObj; if (OpStatusEvent != null) { OpStatusEvent(EEventType.PutItemInto, SelectItem_N.Instance.ItemObj.protoData.GetName(), CSUtils.GetEntityName(CSConst.etStorage)); } } } SelectItem_N.Instance.SetItem(null); break; } } else { if (GameConfig.IsMultiMode) { if (m_storage == null) { if (SelectItem_N.Instance.Place == ItemPlaceType.IPT_NPCStorage) { PlayerNetwork.mainPlayer.RequestPersonalStorageExchange(SelectItem_N.Instance.ItemObj.instanceId, SelectItem_N.Instance.Index, grid.ItemIndex); } } else { if (SelectItem_N.Instance.Place == ItemPlaceType.IPT_CSStorage) { m_storage._ColonyObj._Network.STO_Exchange(SelectItem_N.Instance.ItemObj.instanceId, SelectItem_N.Instance.Index, grid.ItemIndex); } return; } } else { Pathea.PlayerPackageCmpt pkg = Pathea.PeCreature.Instance.mainPlayer.GetCmpt <Pathea.PlayerPackageCmpt>(); ItemObject dragItem = SelectItem_N.Instance.ItemObj; ItemObject dropItem = grid.ItemObj; ItemPackage.ESlotType dropType = ItemPackage.GetSlotType(dropItem.protoId); ItemPackage.ESlotType dragType = ItemPackage.GetSlotType(dragItem.protoId); //lz-2016.10.18 如果拖动的Item和放置的Item是同一类型,就直接交换ItemObj数据 if (dropType == dragType && null != SelectItem_N.Instance.Grid) { if (SelectItem_N.Instance.Grid.onGridsExchangeItem != null) { SelectItem_N.Instance.Grid.onGridsExchangeItem(SelectItem_N.Instance.Grid, dropItem); grid.SetItem(dragItem); m_CurPack[grid.ItemIndex] = grid.ItemObj; SelectItem_N.Instance.SetItem(null); } } //lz-2016.10.18 如果不是同一类型,或者没有Grid,就先添加,后移除 else if (pkg.package.CanAdd(dropItem)) { pkg.package.AddItem(dropItem); grid.SetItem(dragItem); SelectItem_N.Instance.RemoveOriginItem(); SelectItem_N.Instance.SetItem(null); } } } }