Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def GetCurrentItemGrid(self):
- itemGrid = [[False for cell in xrange(player.INVENTORY_PAGE_SIZE)] for page in xrange(player.INVENTORY_PAGE_COUNT)]
- for page in xrange(player.INVENTORY_PAGE_COUNT):
- for cell in xrange(player.INVENTORY_PAGE_SIZE):
- realCell = page * player.INVENTORY_PAGE_SIZE + cell
- itemVnum = player.GetItemIndex(realCell)
- if itemVnum != 0:
- item.SelectItem(itemVnum)
- (width, height) = item.GetItemSize()
- for i in xrange(height):
- itemGrid[page][cell + (i * 5)] = True
- return itemGrid
- def FindEmptyCellForSize(self, itemGrid, size):
- for page in xrange(player.INVENTORY_PAGE_COUNT):
- for cell in xrange(player.INVENTORY_PAGE_SIZE):
- if itemGrid[page][cell] == False:
- check = True
- for i in xrange(size):
- checkCell = cell + 5 * i
- try:
- if itemGrid[page][checkCell] == True:
- check = False
- break
- except IndexError:
- check = False
- break
- if check:
- return cell + page * player.INVENTORY_PAGE_SIZE
- return -1
- def __CanStackItem(self, itemVnum):
- item.SelectItem(itemVnum)
- if item.IsFlag(item.ITEM_FLAG_STACKABLE) and not item.IsAntiFlag(item.ITEM_ANTIFLAG_STACK):
- return True
- return False
- def __OnClickSortButton(self):
- inventoryCopy = []
- for cell in xrange(player.INVENTORY_PAGE_COUNT * player.INVENTORY_PAGE_SIZE):
- itemVnum = player.GetItemIndex(cell)
- if itemVnum != 0:
- inventoryCopy.append({"vnum" : itemVnum, "count" : player.GetItemCount(cell), "cell" : cell})
- else:
- inventoryCopy.append({"vnum" : 0, "count" : 0, "cell" : cell})
- itemGrid = self.GetCurrentItemGrid()
- for page in xrange(player.INVENTORY_PAGE_COUNT):
- for cell in xrange(player.INVENTORY_PAGE_SIZE):
- realCell = page * player.INVENTORY_PAGE_SIZE + cell
- itemVnum = inventoryCopy[realCell]["vnum"]
- itemCount = inventoryCopy[realCell]["count"]
- metinSlot = [player.GetItemMetinSocket(realCell, i) for i in xrange(player.METIN_SOCKET_MAX_NUM)]
- if itemVnum == 0 or itemCount >= 200 or not self.__CanStackItem(itemVnum):
- continue
- for checkCell in xrange(realCell):
- checkItemVnum = inventoryCopy[checkCell]["vnum"]
- checkItemCount = inventoryCopy[checkCell]["count"]
- checkMetinSlot = [player.GetItemMetinSocket(checkCell, i) for i in xrange(player.METIN_SOCKET_MAX_NUM)]
- if checkItemVnum == 0 or checkItemCount >= 200 or not self.__CanStackItem(checkItemVnum) or checkMetinSlot != metinSlot or checkItemVnum != itemVnum:
- continue
- self.__SendMoveItemPacket(realCell, checkCell, itemCount)
- inventoryCopy[realCell]["count"] -= 200 - checkItemCount
- inventoryCopy[checkCell]["count"] = min(200, checkItemCount + itemCount)
- if inventoryCopy[realCell]["count"] <= 0:
- inventoryCopy[realCell]["vnum"] = 0
- inventoryCopy[realCell]["count"] = 0
- itemGrid[page][cell] = False
- else:
- item.SelectItem(itemVnum)
- emptyCell = self.FindEmptyCellForSize(itemGrid, item.GetItemSize()[1])
- self.__SendMoveItemPacket(realCell, emptyCell, itemCount)
- item.SelectItem(inventoryCopy[realCell]["vnum"])
- (width, height) = item.GetItemSize()
- inventoryCopy[emptyCell]["vnum"] = inventoryCopy[realCell]["vnum"]
- inventoryCopy[emptyCell]["count"] = inventoryCopy[realCell]["count"]
- inventoryCopy[emptyCell]["cell"] = realCell
- inventoryCopy[realCell]["vnum"] = 0
- inventoryCopy[realCell]["count"] = 0
- for i in xrange(height):
- itemGrid[page][cell + i * 5] = False
- itemGrid[page][cell + i * 5] = True
- break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement