Advertisement
Guest User

Untitled

a guest
Feb 24th, 2018
448
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.59 KB | None | 0 0
  1.     def GetCurrentItemGrid(self):
  2.         itemGrid = [[False for cell in xrange(player.INVENTORY_PAGE_SIZE)] for page in xrange(player.INVENTORY_PAGE_COUNT)]
  3.         for page in xrange(player.INVENTORY_PAGE_COUNT):
  4.             for cell in xrange(player.INVENTORY_PAGE_SIZE):
  5.                 realCell = page * player.INVENTORY_PAGE_SIZE + cell
  6.                 itemVnum = player.GetItemIndex(realCell)
  7.                 if itemVnum != 0:
  8.                     item.SelectItem(itemVnum)
  9.                     (width, height) = item.GetItemSize()
  10.                     for i in xrange(height):
  11.                         itemGrid[page][cell + (i * 5)] = True
  12.         return itemGrid
  13.  
  14.     def FindEmptyCellForSize(self, itemGrid, size):
  15.         for page in xrange(player.INVENTORY_PAGE_COUNT):
  16.             for cell in xrange(player.INVENTORY_PAGE_SIZE):
  17.                 if itemGrid[page][cell] == False:
  18.                     check = True
  19.                     for i in xrange(size):
  20.                         checkCell = cell + 5 * i
  21.                         try:
  22.                             if itemGrid[page][checkCell] == True:
  23.                                 check = False
  24.                                 break
  25.                         except IndexError:
  26.                             check = False
  27.                             break
  28.  
  29.                     if check:
  30.                         return cell + page * player.INVENTORY_PAGE_SIZE
  31.         return -1
  32.  
  33.     def __CanStackItem(self, itemVnum):
  34.         item.SelectItem(itemVnum)
  35.         if item.IsFlag(item.ITEM_FLAG_STACKABLE) and not item.IsAntiFlag(item.ITEM_ANTIFLAG_STACK):
  36.             return True
  37.  
  38.         return False
  39.  
  40.     def __OnClickSortButton(self):
  41.         inventoryCopy = []
  42.         for cell in xrange(player.INVENTORY_PAGE_COUNT * player.INVENTORY_PAGE_SIZE):
  43.             itemVnum = player.GetItemIndex(cell)
  44.             if itemVnum != 0:
  45.                 inventoryCopy.append({"vnum" : itemVnum, "count" : player.GetItemCount(cell), "cell" : cell})
  46.             else:
  47.                 inventoryCopy.append({"vnum" : 0, "count" : 0, "cell" : cell})
  48.  
  49.         itemGrid = self.GetCurrentItemGrid()
  50.  
  51.         for page in xrange(player.INVENTORY_PAGE_COUNT):
  52.             for cell in xrange(player.INVENTORY_PAGE_SIZE):
  53.                 realCell = page * player.INVENTORY_PAGE_SIZE + cell
  54.                 itemVnum = inventoryCopy[realCell]["vnum"]
  55.                 itemCount = inventoryCopy[realCell]["count"]
  56.                 metinSlot = [player.GetItemMetinSocket(realCell, i) for i in xrange(player.METIN_SOCKET_MAX_NUM)]
  57.  
  58.                 if itemVnum == 0 or itemCount >= 200 or not self.__CanStackItem(itemVnum):
  59.                     continue
  60.  
  61.                 for checkCell in xrange(realCell):
  62.                     checkItemVnum = inventoryCopy[checkCell]["vnum"]
  63.                     checkItemCount = inventoryCopy[checkCell]["count"]
  64.                     checkMetinSlot = [player.GetItemMetinSocket(checkCell, i) for i in xrange(player.METIN_SOCKET_MAX_NUM)]
  65.  
  66.                     if checkItemVnum == 0 or checkItemCount >= 200 or not self.__CanStackItem(checkItemVnum) or checkMetinSlot != metinSlot or checkItemVnum != itemVnum:
  67.                         continue
  68.  
  69.                     self.__SendMoveItemPacket(realCell, checkCell, itemCount)
  70.  
  71.                     inventoryCopy[realCell]["count"] -= 200 - checkItemCount
  72.                     inventoryCopy[checkCell]["count"] = min(200, checkItemCount + itemCount)
  73.  
  74.                     if inventoryCopy[realCell]["count"] <= 0:
  75.                         inventoryCopy[realCell]["vnum"] = 0
  76.                         inventoryCopy[realCell]["count"] = 0
  77.                         itemGrid[page][cell] = False
  78.                     else:
  79.                         item.SelectItem(itemVnum)
  80.                         emptyCell = self.FindEmptyCellForSize(itemGrid, item.GetItemSize()[1])
  81.                         self.__SendMoveItemPacket(realCell, emptyCell, itemCount)
  82.  
  83.                         item.SelectItem(inventoryCopy[realCell]["vnum"])
  84.                         (width, height) = item.GetItemSize()
  85.                         inventoryCopy[emptyCell]["vnum"] = inventoryCopy[realCell]["vnum"]
  86.                         inventoryCopy[emptyCell]["count"] = inventoryCopy[realCell]["count"]
  87.                         inventoryCopy[emptyCell]["cell"] = realCell
  88.                         inventoryCopy[realCell]["vnum"] = 0
  89.                         inventoryCopy[realCell]["count"] = 0
  90.                         for i in xrange(height):
  91.                             itemGrid[page][cell + i * 5] = False
  92.                             itemGrid[page][cell + i * 5] = True
  93.                     break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement