Guest User

Untitled

a guest
Aug 21st, 2021
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 44.22 KB | None | 0 0
  1. import ui
  2. import player
  3. import mouseModule
  4. import net
  5. import app
  6. import snd
  7. import item
  8. import player
  9. import chat
  10. import grp
  11. import uiScriptLocale
  12. import uiRefine
  13. import uiAttachMetin
  14. import uiPickMoney
  15. import uiCommon
  16. import uiPrivateShopBuilder
  17. import uiOfflineShopBuilder
  18. import uiOfflineShop
  19. import localeInfo
  20. import constInfo
  21. import ime
  22. import wndMgr
  23.  
  24. if app.EXCHANGE_CHECKIN_UPDATE:
  25.     import exchange
  26.  
  27. if app.ENABLE_SASH_SYSTEM:
  28.     import sash
  29.  
  30. ITEM_MALL_BUTTON_ENABLE = True
  31. ITEM_FLAG_APPLICABLE = 1 << 14
  32.  
  33. class CostumeWindow(ui.ScriptWindow):
  34.  
  35.     def __init__(self, wndInventory):
  36.         import exception
  37.        
  38.         if not app.ENABLE_COSTUME_SYSTEM:          
  39.             exception.Abort("What do you do?")
  40.             return
  41.  
  42.         if not wndInventory:
  43.             exception.Abort("wndInventory parameter must be set to InventoryWindow")
  44.             return                     
  45.                  
  46.         ui.ScriptWindow.__init__(self)
  47.  
  48.         self.isLoaded = 0
  49.         self.wndInventory = wndInventory;
  50.         self.wndCostumeWindow = None
  51.  
  52.         self.__LoadWindow()
  53.  
  54.     def __del__(self):
  55.         ui.ScriptWindow.__del__(self)
  56.  
  57.     def Show(self):
  58.         self.__LoadWindow()
  59.         self.AdjustPositionAndSize()
  60.         self.RefreshCostumeSlot()
  61.  
  62.         ui.ScriptWindow.Show(self)
  63.  
  64.     def Close(self):
  65.         self.Hide()
  66.  
  67.     def IsOpeningInventory(self):
  68.         return self.wndCostumeWindow.IsShow()
  69.  
  70.     def GetBasePosition(self):
  71.         x, y = self.wndInventory.GetGlobalPosition()
  72.         return x - 137, y ## "x" : SCREEN_WIDTH - 175 - 138, costume window width - 1
  73.  
  74.     def AdjustPositionAndSize(self):
  75.         bx, by = self.GetBasePosition()
  76.  
  77.         if self.IsOpeningInventory():
  78.             self.SetPosition(bx, by)
  79.             self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight())
  80.  
  81.         else:
  82.             self.SetPosition(bx + 138, by);
  83.             self.SetSize(10, self.GetHeight())
  84.  
  85.     def __LoadWindow(self):
  86.         if self.isLoaded == 1:
  87.             return
  88.  
  89.         self.isLoaded = 1
  90.  
  91.         try:
  92.             pyScrLoader = ui.PythonScriptLoader()
  93.             pyScrLoader.LoadScriptFile(self, "UIScript/CostumeWindow.py")
  94.         except:
  95.             import exception
  96.             exception.Abort("CostumeWindow.LoadWindow.LoadObject")
  97.  
  98.         try:
  99.             self.ORIGINAL_WIDTH = self.GetWidth()
  100.             wndEquip = self.GetChild("CostumeSlot")
  101.             self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
  102.             self.wndCostumeWindow = self.GetChild("board")
  103.            
  104.         except:
  105.             import exception
  106.             exception.Abort("CostumeWindow.LoadWindow.BindObject")
  107.  
  108.         ## Equipment
  109.         wndEquip.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem))
  110.         wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem))
  111.         wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
  112.         wndEquip.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))                       
  113.         wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot))
  114.         wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot))
  115.  
  116.         self.wndEquip = wndEquip
  117.  
  118.     def RefreshCostumeSlot(self):
  119.         getItemVNum=player.GetItemIndex
  120.        
  121.         for i in xrange(item.COSTUME_SLOT_COUNT):
  122.             slotNumber = item.COSTUME_SLOT_START + i
  123.             self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0)
  124.  
  125.         self.wndEquip.RefreshSlot()
  126.        
  127. class BeltInventoryWindow(ui.ScriptWindow):
  128.  
  129.     def __init__(self, wndInventory):
  130.         import exception
  131.        
  132.         if not app.ENABLE_NEW_EQUIPMENT_SYSTEM:        
  133.             exception.Abort("What do you do?")
  134.             return
  135.  
  136.         if not wndInventory:
  137.             exception.Abort("wndInventory parameter must be set to InventoryWindow")
  138.             return                     
  139.                  
  140.         ui.ScriptWindow.__init__(self)
  141.  
  142.         self.isLoaded = 0
  143.         self.wndInventory = wndInventory;
  144.        
  145.         self.wndBeltInventoryLayer = None
  146.         self.wndBeltInventorySlot = None
  147.         self.expandBtn = None
  148.         self.minBtn = None
  149.  
  150.         self.__LoadWindow()
  151.  
  152.     def __del__(self):
  153.         ui.ScriptWindow.__del__(self)
  154.  
  155.     def Show(self, openBeltSlot = False):
  156.         self.__LoadWindow()
  157.         self.RefreshSlot()
  158.  
  159.         ui.ScriptWindow.Show(self)
  160.        
  161.         if openBeltSlot:
  162.             self.OpenInventory()
  163.         else:
  164.             self.CloseInventory()
  165.  
  166.     def Close(self):
  167.         self.Hide()
  168.  
  169.     def IsOpeningInventory(self):
  170.         return self.wndBeltInventoryLayer.IsShow()
  171.        
  172.     def OpenInventory(self):
  173.         self.wndBeltInventoryLayer.Show()
  174.         self.expandBtn.Hide()
  175.  
  176.         self.AdjustPositionAndSize()
  177.                
  178.     def CloseInventory(self):
  179.         self.wndBeltInventoryLayer.Hide()
  180.         self.expandBtn.Show()
  181.        
  182.         self.AdjustPositionAndSize()
  183.  
  184.     ## ÇöÀç Àκ¥Å丮 À§Ä¡¸¦ ±âÁØÀ¸·Î BASE À§Ä¡¸¦ °è»ê, ¸®ÅÏ.. ¼ýÀÚ ÇϵåÄÚµùÇϱâ Á¤¸» ½ÈÁö¸¸ ¹æ¹ýÀÌ ¾ø´Ù..
  185.     def GetBasePosition(self):
  186.         x, y = self.wndInventory.GetGlobalPosition()
  187.         return x - 148, y + 241
  188.        
  189.     def AdjustPositionAndSize(self):
  190.         bx, by = self.GetBasePosition()
  191.        
  192.         if self.IsOpeningInventory():          
  193.             self.SetPosition(bx, by)
  194.             self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight())
  195.            
  196.         else:
  197.             self.SetPosition(bx + 138, by);
  198.             self.SetSize(10, self.GetHeight())
  199.  
  200.     def __LoadWindow(self):
  201.         if self.isLoaded == 1:
  202.             return
  203.  
  204.         self.isLoaded = 1
  205.  
  206.         try:
  207.             pyScrLoader = ui.PythonScriptLoader()
  208.             pyScrLoader.LoadScriptFile(self, "UIScript/BeltInventoryWindow.py")
  209.         except:
  210.             import exception
  211.             exception.Abort("CostumeWindow.LoadWindow.LoadObject")
  212.  
  213.         try:
  214.             self.ORIGINAL_WIDTH = self.GetWidth()
  215.             wndBeltInventorySlot = self.GetChild("BeltInventorySlot")
  216.             self.wndBeltInventoryLayer = self.GetChild("BeltInventoryLayer")
  217.             self.expandBtn = self.GetChild("ExpandBtn")
  218.             self.minBtn = self.GetChild("MinimizeBtn")
  219.            
  220.             self.expandBtn.SetEvent(ui.__mem_func__(self.OpenInventory))
  221.             self.minBtn.SetEvent(ui.__mem_func__(self.CloseInventory))
  222.            
  223.             for i in xrange(item.BELT_INVENTORY_SLOT_COUNT):
  224.                 slotNumber = item.BELT_INVENTORY_SLOT_START + i                        
  225.                 wndBeltInventorySlot.SetCoverButton(slotNumber, "d:/ymir work/ui/game/quest/slot_button_01.sub",\
  226.                                                 "d:/ymir work/ui/game/quest/slot_button_01.sub",\
  227.                                                 "d:/ymir work/ui/game/quest/slot_button_01.sub",\
  228.                                                 "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga", False, False)                                 
  229.            
  230.         except:
  231.             import exception
  232.             exception.Abort("CostumeWindow.LoadWindow.BindObject")
  233.  
  234.         ## Equipment
  235.         wndBeltInventorySlot.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem))
  236.         wndBeltInventorySlot.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem))
  237.         wndBeltInventorySlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
  238.         wndBeltInventorySlot.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))                       
  239.         wndBeltInventorySlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot))
  240.         wndBeltInventorySlot.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot))
  241.  
  242.         self.wndBeltInventorySlot = wndBeltInventorySlot
  243.  
  244.     def RefreshSlot(self):
  245.         getItemVNum=player.GetItemIndex
  246.        
  247.         for i in xrange(item.BELT_INVENTORY_SLOT_COUNT):
  248.             slotNumber = item.BELT_INVENTORY_SLOT_START + i
  249.             self.wndBeltInventorySlot.SetItemSlot(slotNumber, getItemVNum(slotNumber), player.GetItemCount(slotNumber))
  250.             self.wndBeltInventorySlot.SetAlwaysRenderCoverButton(slotNumber, True)
  251.            
  252.             avail = "0"
  253.            
  254.             if player.IsAvailableBeltInventoryCell(slotNumber):
  255.                 self.wndBeltInventorySlot.EnableCoverButton(slotNumber)            
  256.             else:
  257.                 self.wndBeltInventorySlot.DisableCoverButton(slotNumber)               
  258.  
  259.         self.wndBeltInventorySlot.RefreshSlot()
  260.  
  261.        
  262. class InventoryWindow(ui.ScriptWindow):
  263.  
  264.     USE_TYPE_TUPLE = ("USE_CLEAN_SOCKET", "USE_CHANGE_ATTRIBUTE", "USE_ADD_ATTRIBUTE", "USE_ADD_ATTRIBUTE2", "USE_ADD_ACCESSORY_SOCKET", "USE_PUT_INTO_ACCESSORY_SOCKET", "USE_PUT_INTO_BELT_SOCKET", "USE_PUT_INTO_RING_SOCKET")
  265.  
  266.     questionDialog = None
  267.     tooltipItem = None
  268.     wndCostume = None
  269.     wndBelt = None
  270.     dlgPickMoney = None
  271.    
  272.     sellingSlotNumber = -1
  273.     isLoaded = 0
  274.     isOpenedCostumeWindowWhenClosingInventory = 0       # Àκ¥Å丮 ´ÝÀ» ¶§ ÄÚ½ºÃõÀÌ ¿­·ÁÀÖ¾ú´ÂÁö ¿©ºÎ-_-; ³×ÀÌ¹Ö ¤¸¤µ
  275.     isOpenedBeltWindowWhenClosingInventory = 0      # Àκ¥Å丮 ´ÝÀ» ¶§ º§Æ® Àκ¥Å丮°¡ ¿­·ÁÀÖ¾ú´ÂÁö ¿©ºÎ-_-; ³×ÀÌ¹Ö ¤¸¤µ
  276.  
  277.     def __init__(self):
  278.         ui.ScriptWindow.__init__(self)
  279.         self.OpenBoniSwitcherEvent = lambda : None
  280.         self.__LoadWindow()
  281.  
  282.     def __del__(self):
  283.         ui.ScriptWindow.__del__(self)
  284.  
  285.     def Show(self):
  286.         self.__LoadWindow()
  287.  
  288.         ui.ScriptWindow.Show(self)
  289.  
  290.         # Àκ¥Å丮¸¦ ´ÝÀ» ¶§ ÄÚ½ºÃõÀÌ ¿­·ÁÀÖ¾ú´Ù¸é Àκ¥Å丮¸¦ ¿­ ¶§ ÄÚ½ºÃõµµ °°ÀÌ ¿­µµ·Ï ÇÔ.
  291.         if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
  292.             self.wndCostume.Show()
  293.  
  294.         # Àκ¥Å丮¸¦ ´ÝÀ» ¶§ º§Æ® Àκ¥Å丮°¡ ¿­·ÁÀÖ¾ú´Ù¸é °°ÀÌ ¿­µµ·Ï ÇÔ.
  295.         if self.wndBelt:
  296.             self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory)
  297.  
  298.     def BindInterfaceClass(self, interface):
  299.         self.interface = interface
  300.        
  301.     def __LoadWindow(self):
  302.         if self.isLoaded == 1:
  303.             return
  304.  
  305.         self.isLoaded = 1
  306.  
  307.         try:
  308.             pyScrLoader = ui.PythonScriptLoader()
  309.  
  310.             if ITEM_MALL_BUTTON_ENABLE:
  311.                 pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "InventoryWindow.py")
  312.             else:
  313.                 pyScrLoader.LoadScriptFile(self, "UIScript/InventoryWindow.py")
  314.         except:
  315.             import exception
  316.             exception.Abort("InventoryWindow.LoadWindow.LoadObject")
  317.  
  318.         try:
  319.             wndItem = self.GetChild("ItemSlot")
  320.             wndEquip = self.GetChild("EquipmentSlot")
  321.             self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
  322.             self.wndMoney = self.GetChild("Money")
  323.             self.wndMoneySlot = self.GetChild("Money_Slot")
  324.  
  325.             self.mallButton = self.GetChild2("MallButton")
  326.             self.LagerButton = self.GetChild2("LagerButton")
  327.             self.DSSButton = self.GetChild2("DSSButton")
  328.             self.costumeButton = self.GetChild2("CostumeButton")
  329.             self.offlineButton = self.GetChild2("OfflineShopButton")
  330.            
  331.             self.inventoryTab = []
  332.             self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))
  333.             self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))
  334.             self.inventoryTab.append(self.GetChild("Inventory_Tab_03"))
  335.             self.inventoryTab.append(self.GetChild("Inventory_Tab_04"))
  336.             #self.inventoryTab.append(self.GetChild("Inventory_Tab_05"))
  337.            
  338.             self.equipmentTab = []
  339.             self.equipmentTab.append(self.GetChild("Equipment_Tab_01"))
  340.             self.equipmentTab.append(self.GetChild("Equipment_Tab_02"))
  341.             self.equipmentTab.append(self.GetChild("Equipment_Tab_03"))
  342.             self.equipmentTab.append(self.GetChild("Equipment_Tab_04"))
  343.             #self.equipmentTab.append(self.GetChild("Equipment_Tab_05"))
  344.  
  345.             if self.costumeButton and not app.ENABLE_COSTUME_SYSTEM:
  346.                 self.costumeButton.Hide()
  347.                 self.costumeButton.Destroy()
  348.                 self.costumeButton = 0
  349.  
  350.             # Belt Inventory Window
  351.             self.wndBelt = None
  352.            
  353.             if app.ENABLE_NEW_EQUIPMENT_SYSTEM:
  354.                 self.wndBelt = BeltInventoryWindow(self)
  355.            
  356.         except:
  357.             import exception
  358.             exception.Abort("InventoryWindow.LoadWindow.BindObject")
  359.  
  360.         ## Item
  361.         wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
  362.         wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
  363.         wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
  364.         wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
  365.         wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  366.         wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  367.  
  368.         ## Equipment
  369.         wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
  370.         wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
  371.         wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
  372.         wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
  373.         wndEquip.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  374.         wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  375.  
  376.         ## PickMoneyDialog
  377.         dlgPickMoney = uiPickMoney.PickMoneyDialog()
  378.         dlgPickMoney.LoadDialog()
  379.         dlgPickMoney.Hide()
  380.  
  381.         ## RefineDialog
  382.         self.refineDialog = uiRefine.RefineDialog()
  383.         self.refineDialog.Hide()
  384.  
  385.         ## AttachMetinDialog
  386.         self.attachMetinDialog = uiAttachMetin.AttachMetinDialog()
  387.         self.attachMetinDialog.Hide()
  388.  
  389.         ## MoneySlot
  390.         self.wndMoneySlot.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
  391.  
  392.         self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))
  393.         self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))
  394.         self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg))
  395.         self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg))
  396.         #self.inventoryTab[4].SetEvent(lambda arg=4: self.SetInventoryPage(arg))
  397.         self.inventoryTab[0].Down()
  398.  
  399.         self.equipmentTab[0].SetEvent(lambda arg=0: self.SetEquipmentPage(arg))
  400.         self.equipmentTab[1].SetEvent(lambda arg=1: self.SetEquipmentPage(arg))
  401.         self.equipmentTab[2].SetEvent(lambda arg=2: self.SetEquipmentPage(arg))
  402.         self.equipmentTab[3].SetEvent(lambda arg=3: self.SetEquipmentPage(arg))
  403.         self.equipmentTab[0].Down()
  404.         self.equipmentTab[0].Hide()
  405.         self.equipmentTab[1].Hide()
  406.         self.equipmentTab[2].Hide()
  407.         self.equipmentTab[3].Hide()
  408.  
  409.         self.wndItem = wndItem
  410.         self.wndEquip = wndEquip
  411.         self.dlgPickMoney = dlgPickMoney
  412.  
  413.         # MallButton
  414.         if self.mallButton:
  415.             self.mallButton.SetEvent(ui.__mem_func__(self.ClickMallButton))
  416.        
  417.         # DepozitButton
  418.         if self.LagerButton:
  419.             self.LagerButton.SetEvent(ui.__mem_func__(self.ClickLagerButton))  
  420.  
  421.         if self.DSSButton:
  422.             self.DSSButton.SetEvent(ui.__mem_func__(self.ClickDSSButton))
  423.        
  424.         # Costume Button
  425.         if self.costumeButton:
  426.             self.costumeButton.SetEvent(ui.__mem_func__(self.ClickCostumeButton))
  427.  
  428.         if self.offlineButton:
  429.             self.offlineButton.SetEvent(ui.__mem_func__(self.ClickOfflineShopButton))
  430.  
  431.         self.wndCostume = None
  432.        
  433.         #####
  434.  
  435.         ## Refresh
  436.         if app.ENABLE_SASH_SYSTEM:
  437.             self.listAttachedSashs = []
  438.         self.SetInventoryPage(0)
  439.         self.SetEquipmentPage(0)
  440.         self.RefreshItemSlot()
  441.         self.RefreshStatus()
  442.  
  443.     def Destroy(self):
  444.         self.ClearDictionary()
  445.  
  446.         self.dlgPickMoney.Destroy()
  447.         self.dlgPickMoney = 0
  448.  
  449.         self.refineDialog.Destroy()
  450.         self.refineDialog = 0
  451.  
  452.         self.attachMetinDialog.Destroy()
  453.         self.attachMetinDialog = 0
  454.  
  455.         self.tooltipItem = None
  456.         self.wndItem = 0
  457.         self.wndEquip = 0
  458.         self.dlgPickMoney = 0
  459.         self.wndMoney = 0
  460.         self.wndMoneySlot = 0
  461.         self.questionDialog = None
  462.         self.mallButton = None
  463.         self.DSSButton = None
  464.         self.interface = None
  465.  
  466.         if self.wndCostume:
  467.             self.wndCostume.Destroy()
  468.             self.wndCostume = 0
  469.            
  470.         if self.wndBelt:
  471.             self.wndBelt.Destroy()
  472.             self.wndBelt = None
  473.            
  474.         self.inventoryTab = []
  475.         self.equipmentTab = []
  476.  
  477.     def Hide(self):
  478.         if None != self.tooltipItem:
  479.             self.tooltipItem.HideToolTip()
  480.  
  481.         if self.wndCostume:
  482.             self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow()           # Àκ¥Å丮 âÀÌ ´ÝÈú ¶§ ÄÚ½ºÃõÀÌ ¿­·Á ÀÖ¾ú´Â°¡?
  483.             self.wndCostume.Close()
  484.  
  485.         if self.wndBelt:
  486.             self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory()     # Àκ¥Å丮 âÀÌ ´ÝÈú ¶§ º§Æ® Àκ¥Å丮µµ ¿­·Á ÀÖ¾ú´Â°¡?
  487.             print "Is Opening Belt Inven?? ", self.isOpenedBeltWindowWhenClosingInventory
  488.             self.wndBelt.Close()
  489.  
  490.         if self.dlgPickMoney:
  491.             self.dlgPickMoney.Close()
  492.  
  493.         self.OnCloseQuestionDialog()
  494.        
  495.         wndMgr.Hide(self.hWnd)
  496.        
  497.    
  498.     def Close(self):
  499.         self.Hide()
  500.  
  501.     def SetInventoryPage(self, page):
  502.         self.inventoryPageIndex = page
  503.         self.inventoryTab[0].SetUp()
  504.         self.inventoryTab[1].SetUp()
  505.         self.inventoryTab[2].SetUp()
  506.         self.inventoryTab[3].SetUp()
  507.         if len(self.inventoryTab) >=page:
  508.             self.inventoryTab[page].Down()
  509.         self.RefreshBagSlotWindow()
  510.  
  511.     def SetEquipmentPage(self, page):
  512.         self.equipmentPageIndex = page
  513.         self.equipmentTab[1-page].SetUp()
  514.         self.RefreshEquipSlotWindow()
  515.  
  516.     if app.EXCHANGE_CHECKIN_UPDATE:
  517.         def SetExchangeWindow(self, wndExchange):
  518.             self.wndExchange = wndExchange
  519.  
  520.         def SetDiceWindow(self, wndDice):
  521.             self.wndDice = wndDice
  522.  
  523.     def ClickMallButton(self):
  524.         print "click_mall_button"
  525.         net.SendChatPacket("/click_mall")
  526.        
  527.     def ClickLagerButton(self):
  528.         import event
  529.         event.QuestButtonClick(1)
  530.  
  531.     # DSSButton
  532.     def ClickDSSButton(self):
  533.         print "click_dss_button"
  534.         self.interface.ToggleDragonSoulWindow()
  535.  
  536.     def ClickCostumeButton(self):
  537.         print "Click Costume Button"
  538.         if self.wndCostume:
  539.             if self.wndCostume.IsShow():
  540.                 self.wndCostume.Hide()
  541.             else:
  542.                 self.wndCostume.Show()
  543.         else:
  544.             self.wndCostume = CostumeWindow(self)
  545.             self.wndCostume.Show()
  546.  
  547.     def ClickOfflineShopButton(self):
  548.         self.interface.ToggleOfflineShopAdminPanelWindow()
  549.  
  550.     def OpenPickMoneyDialog(self):
  551.  
  552.         if mouseModule.mouseController.isAttached():
  553.  
  554.             attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  555.             if player.SLOT_TYPE_SAFEBOX == mouseModule.mouseController.GetAttachedType():
  556.  
  557.                 if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
  558.                     net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
  559.                     snd.PlaySound("sound/ui/money.wav")
  560.  
  561.             mouseModule.mouseController.DeattachObject()
  562.  
  563.         else:
  564.             curMoney = player.GetElk()
  565.  
  566.             if curMoney <= 0:
  567.                 return
  568.  
  569.             self.dlgPickMoney.SetTitleName(localeInfo.PICK_MONEY_TITLE)
  570.             self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
  571.             self.dlgPickMoney.Open(curMoney)
  572.             self.dlgPickMoney.SetMax(7) # Àκ¥Å丮 990000 Á¦ÇÑ ¹ö±× ¼öÁ¤
  573.  
  574.     def OnPickMoney(self, money):
  575.         mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money)
  576.  
  577.     def OnPickItem(self, count):
  578.         itemSlotIndex = self.dlgPickMoney.itemGlobalSlotIndex
  579.         selectedItemVNum = player.GetItemIndex(itemSlotIndex)
  580.         mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, count)
  581.  
  582.     def __InventoryLocalSlotPosToGlobalSlotPos(self, local):
  583.  
  584.         if player.IsEquipmentSlot(local) or player.IsCostumeSlot(local) or player.IsBeltInventorySlot(local):
  585.             return local
  586.  
  587.         return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local
  588.  
  589.     def RefreshBagSlotWindow(self):
  590.         getItemVNum=player.GetItemIndex
  591.         getItemCount=player.GetItemCount
  592.         setItemVNum=self.wndItem.SetItemSlot
  593.        
  594.         for i in xrange(player.INVENTORY_PAGE_SIZE):
  595.             slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
  596.            
  597.             itemCount = getItemCount(slotNumber)
  598.             # itemCount == 0ÀÌ¸é ¼ÒÄÏÀ» ºñ¿î´Ù.
  599.             if 0 == itemCount:
  600.                 self.wndItem.ClearSlot(i)
  601.                 continue
  602.             elif 1 == itemCount:
  603.                 itemCount = 0
  604.                
  605.             itemVnum = getItemVNum(slotNumber)
  606.             setItemVNum(i, itemVnum, itemCount)
  607.            
  608.             ## ÀÚµ¿¹°¾à (HP: #72723 ~ #72726, SP: #72727 ~ #72730) Ư¼öó¸® - ¾ÆÀÌÅÛÀε¥µµ ½½·Ô¿¡ Ȱ¼ºÈ­/ºñȰ¼ºÈ­ Ç¥½Ã¸¦ À§ÇÑ ÀÛ¾÷ÀÓ - [hyo]
  609.             if constInfo.IS_AUTO_POTION(itemVnum):
  610.                 # metinSocket - [0] : Ȱ¼ºÈ­ ¿©ºÎ, [1] : »ç¿ëÇÑ ¾ç, [2] : ÃÖ´ë ¿ë·®
  611.                 metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]  
  612.                
  613.                 if slotNumber >= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex:
  614.                     slotNumber -= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex
  615.                    
  616.                 isActivated = 0 != metinSocket[0]
  617.                
  618.                 if isActivated:
  619.                     self.wndItem.ActivateSlot(slotNumber)
  620.                     potionType = 0;
  621.                     if constInfo.IS_AUTO_POTION_HP(itemVnum):
  622.                         potionType = player.AUTO_POTION_TYPE_HP
  623.                     elif constInfo.IS_AUTO_POTION_SP(itemVnum):
  624.                         potionType = player.AUTO_POTION_TYPE_SP                    
  625.                    
  626.                     usedAmount = int(metinSocket[1])
  627.                     totalAmount = int(metinSocket[2])                  
  628.                     player.SetAutoPotionInfo(potionType, isActivated, (totalAmount - usedAmount), totalAmount, self.__InventoryLocalSlotPosToGlobalSlotPos(i))
  629.                    
  630.                 else:
  631.                     self.wndItem.DeactivateSlot(slotNumber)        
  632.        
  633.             if app.ENABLE_SASH_SYSTEM:
  634.                 slotNumberChecked = 0
  635.                 if not constInfo.IS_AUTO_POTION(itemVnum):
  636.                         self.wndItem.DeactivateSlot(i)
  637.                
  638.                 for j in xrange(sash.WINDOW_MAX_MATERIALS):
  639.                     (isHere, iCell) = sash.GetAttachedItem(j)
  640.                     if isHere:
  641.                         if iCell == slotNumber:
  642.                             self.wndItem.ActivateSlot(i, (36.00 / 255.0), (222.00 / 255.0), (3.00 / 255.0), 1.0)
  643.                             if not slotNumber in self.listAttachedSashs:
  644.                                 self.listAttachedSashs.append(slotNumber)
  645.                            
  646.                             slotNumberChecked = 1
  647.                     else:
  648.                         if slotNumber in self.listAttachedSashs and not slotNumberChecked:
  649.                             self.wndItem.DeactivateSlot(i)
  650.                             self.listAttachedSashs.remove(slotNumber)
  651.                    
  652.         self.wndItem.RefreshSlot()
  653.  
  654.         if self.wndBelt:
  655.             self.wndBelt.RefreshSlot()
  656.  
  657.     def RefreshEquipSlotWindow(self):
  658.         getItemVNum=player.GetItemIndex
  659.         getItemCount=player.GetItemCount
  660.         setItemVNum=self.wndEquip.SetItemSlot
  661.         for i in xrange(player.EQUIPMENT_PAGE_COUNT):
  662.             slotNumber = player.EQUIPMENT_SLOT_START + i
  663.             itemCount = getItemCount(slotNumber)
  664.             if itemCount <= 1:
  665.                 itemCount = 0
  666.             setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount)
  667.  
  668.         if app.ENABLE_NEW_EQUIPMENT_SYSTEM:
  669.             for i in xrange(player.NEW_EQUIPMENT_SLOT_COUNT):
  670.                 slotNumber = player.NEW_EQUIPMENT_SLOT_START + i
  671.                 itemCount = getItemCount(slotNumber)
  672.                 if itemCount <= 1:
  673.                     itemCount = 0
  674.                 setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount)
  675.                 print "ENABLE_NEW_EQUIPMENT_SYSTEM", slotNumber, itemCount, getItemVNum(slotNumber)
  676.  
  677.         self.wndEquip.RefreshSlot()
  678.        
  679.         if self.wndCostume:
  680.             self.wndCostume.RefreshCostumeSlot()
  681.  
  682.     def RefreshItemSlot(self):
  683.         self.RefreshBagSlotWindow()
  684.         self.RefreshEquipSlotWindow()
  685.  
  686.     def RefreshStatus(self):
  687.         money = player.GetElk()
  688.         self.wndMoney.SetText(localeInfo.NumberToMoneyString(money))
  689.  
  690.     def SetItemToolTip(self, tooltipItem):
  691.         self.tooltipItem = tooltipItem
  692.  
  693.     def SellItem(self):    
  694.         if self.sellingSlotitemIndex == player.GetItemIndex(self.sellingSlotNumber):
  695.             if self.sellingSlotitemCount == player.GetItemCount(self.sellingSlotNumber):
  696.                 net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count)
  697.                 snd.PlaySound("sound/ui/money.wav")
  698.         self.OnCloseQuestionDialog()
  699.        
  700.     def OnDetachMetinFromItem(self):
  701.         if None == self.questionDialog:
  702.             return
  703.            
  704.         #net.SendItemUseToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos)     
  705.         self.__SendUseItemToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos)
  706.         self.OnCloseQuestionDialog()
  707.  
  708.     def OnCloseQuestionDialog(self):
  709.         if self.questionDialog:
  710.             self.questionDialog.Close()
  711.  
  712.         self.questionDialog = None
  713.  
  714.     ## Slot Event
  715.     def SelectEmptySlot(self, selectedSlotPos):
  716.         if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:
  717.             return
  718.                    
  719.         selectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(selectedSlotPos)
  720.  
  721.         if mouseModule.mouseController.isAttached():
  722.             attachedSlotType = mouseModule.mouseController.GetAttachedType()
  723.             attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  724.             attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()
  725.             attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
  726.             if player.SLOT_TYPE_INVENTORY == attachedSlotType:
  727.                 itemCount = player.GetItemCount(attachedSlotPos)
  728.                 attachedCount = mouseModule.mouseController.GetAttachedItemCount()
  729.                 self.__SendMoveItemPacket(attachedSlotPos, selectedSlotPos, attachedCount)
  730.  
  731.                 if item.IsRefineScroll(attachedItemIndex):
  732.                     self.wndItem.SetUseMode(False)
  733.  
  734.             elif player.SLOT_TYPE_PRIVATE_SHOP == attachedSlotType:
  735.                 mouseModule.mouseController.RunCallBack("INVENTORY")
  736.  
  737.             elif player.SLOT_TYPE_OFFLINE_SHOP == attachedSlotType:
  738.                 mouseModule.mouseController.RunCallBack("INVENTORY")
  739.  
  740.             elif player.SLOT_TYPE_SHOP == attachedSlotType:
  741.                 net.SendShopBuyPacket(attachedSlotPos)
  742.  
  743.             elif player.SLOT_TYPE_SAFEBOX == attachedSlotType:
  744.  
  745.                 if player.ITEM_MONEY == attachedItemIndex:
  746.                     net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
  747.                     snd.PlaySound("sound/ui/money.wav")
  748.  
  749.                 else:
  750.                     net.SendSafeboxCheckoutPacket(attachedSlotPos, selectedSlotPos)
  751.  
  752.             elif player.SLOT_TYPE_MALL == attachedSlotType:
  753.                 net.SendMallCheckoutPacket(attachedSlotPos, selectedSlotPos)
  754.  
  755.             mouseModule.mouseController.DeattachObject()
  756.  
  757.     def SelectItemSlot(self, itemSlotIndex):
  758.         if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:
  759.             return
  760.  
  761.         itemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(itemSlotIndex)
  762.  
  763.         if mouseModule.mouseController.isAttached():
  764.             attachedSlotType = mouseModule.mouseController.GetAttachedType()
  765.             attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  766.             attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()
  767.             if player.SLOT_TYPE_INVENTORY == attachedSlotType:
  768.                 self.__DropSrcItemToDestItemInInventory(attachedItemVID, attachedSlotPos, itemSlotIndex)
  769.  
  770.             mouseModule.mouseController.DeattachObject()
  771.  
  772.         else:
  773.  
  774.             curCursorNum = app.GetCursor()
  775.             if app.SELL == curCursorNum:
  776.                 self.__SellItem(itemSlotIndex)
  777.                
  778.             elif app.BUY == curCursorNum:
  779.                 chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SHOP_BUY_INFO)
  780.  
  781.             elif app.IsPressed(app.DIK_LALT):
  782.                 link = player.GetItemLink(itemSlotIndex)
  783.                 ime.PasteString(link)
  784.  
  785.             elif app.IsPressed(app.DIK_LSHIFT):
  786.                 itemCount = player.GetItemCount(itemSlotIndex)
  787.                
  788.                 if itemCount > 1:
  789.                     self.dlgPickMoney.SetTitleName(localeInfo.PICK_ITEM_TITLE)
  790.                     self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickItem))
  791.                     self.dlgPickMoney.Open(itemCount)
  792.                     self.dlgPickMoney.itemGlobalSlotIndex = itemSlotIndex
  793.                 #else:
  794.                     #selectedItemVNum = player.GetItemIndex(itemSlotIndex)
  795.                     #mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum)
  796.  
  797.             elif app.IsPressed(app.DIK_LCONTROL):
  798.                 itemIndex = player.GetItemIndex(itemSlotIndex)
  799.  
  800.                 if True == item.CanAddToQuickSlotItem(itemIndex):
  801.                     player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_INVENTORY, itemSlotIndex)
  802.                 else:
  803.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.QUICKSLOT_REGISTER_DISABLE_ITEM)
  804.  
  805.             else:
  806.                 selectedItemVNum = player.GetItemIndex(itemSlotIndex)
  807.                 itemCount = player.GetItemCount(itemSlotIndex)
  808.                 mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount)
  809.                
  810.                 if self.__IsUsableItemToItem(selectedItemVNum, itemSlotIndex):             
  811.                     self.wndItem.SetUseMode(True)
  812.                 else:                  
  813.                     self.wndItem.SetUseMode(False)
  814.  
  815.                 snd.PlaySound("sound/ui/pick.wav")
  816.  
  817.     def __DropSrcItemToDestItemInInventory(self, srcItemVID, srcItemSlotPos, dstItemSlotPos):
  818.         if srcItemSlotPos == dstItemSlotPos:
  819.             return
  820.                    
  821.         if item.IsRefineScroll(srcItemVID):
  822.             self.RefineItem(srcItemSlotPos, dstItemSlotPos)
  823.             self.wndItem.SetUseMode(False)
  824.  
  825.         elif item.IsMetin(srcItemVID):
  826.             self.AttachMetinToItem(srcItemSlotPos, dstItemSlotPos)
  827.  
  828.         elif item.IsDetachScroll(srcItemVID):
  829.             self.DetachMetinFromItem(srcItemSlotPos, dstItemSlotPos)
  830.  
  831.         elif item.IsKey(srcItemVID):
  832.             self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)         
  833.  
  834.         elif (player.GetItemFlags(srcItemSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
  835.             self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)
  836.  
  837.         elif item.GetUseType(srcItemVID) in self.USE_TYPE_TUPLE:
  838.             self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)         
  839.  
  840.         else:
  841.             #snd.PlaySound("sound/ui/drop.wav")
  842.  
  843.             ## À̵¿½ÃŲ °÷ÀÌ ÀåÂø ½½·ÔÀÏ °æ¿ì ¾ÆÀÌÅÛÀ» »ç¿ëÇØ¼­ ÀåÂø ½ÃŲ´Ù - [levites]
  844.             if player.IsEquipmentSlot(dstItemSlotPos):
  845.  
  846.                 ## µé°í ÀÖ´Â ¾ÆÀÌÅÛÀÌ ÀåºñÀ϶§¸¸
  847.                 if item.IsEquipmentVID(srcItemVID):
  848.                     self.__UseItem(srcItemSlotPos)
  849.  
  850.             else:
  851.                 self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0)
  852.                 #net.SendItemMovePacket(srcItemSlotPos, dstItemSlotPos, 0)
  853.  
  854.     def __SellItem(self, itemSlotPos):
  855.         if not player.IsEquipmentSlot(itemSlotPos):
  856.             self.sellingSlotNumber = itemSlotPos
  857.             itemIndex = player.GetItemIndex(itemSlotPos)
  858.             itemCount = player.GetItemCount(itemSlotPos)
  859.            
  860.            
  861.             self.sellingSlotitemIndex = itemIndex
  862.             self.sellingSlotitemCount = itemCount
  863.  
  864.             item.SelectItem(itemIndex)
  865.             itemPrice = item.GetISellItemPrice()
  866.  
  867.             if item.Is1GoldItem():
  868.                 itemPrice = itemCount / itemPrice / 5
  869.             else:
  870.                 itemPrice = itemPrice * itemCount / 5
  871.  
  872.             item.GetItemName(itemIndex)
  873.             itemName = item.GetItemName()
  874.  
  875.             self.questionDialog = uiCommon.QuestionDialog()
  876.             self.questionDialog.SetText(localeInfo.DO_YOU_SELL_ITEM(itemName, itemCount, itemPrice))
  877.             self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.SellItem))
  878.             self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
  879.             self.questionDialog.Open()
  880.             self.questionDialog.count = itemCount
  881.  
  882.     def RefineItem(self, scrollSlotPos, targetSlotPos):
  883.  
  884.         scrollIndex = player.GetItemIndex(scrollSlotPos)
  885.         targetIndex = player.GetItemIndex(targetSlotPos)
  886.  
  887.         if player.REFINE_OK != player.CanRefine(scrollIndex, targetSlotPos):
  888.             return
  889.  
  890.         ###########################################################
  891.         self.__SendUseItemToItemPacket(scrollSlotPos, targetSlotPos)
  892.         #net.SendItemUseToItemPacket(scrollSlotPos, targetSlotPos)
  893.         return
  894.         ###########################################################
  895.  
  896.         ###########################################################
  897.         #net.SendRequestRefineInfoPacket(targetSlotPos)
  898.         #return
  899.         ###########################################################
  900.  
  901.         result = player.CanRefine(scrollIndex, targetSlotPos)
  902.  
  903.         if player.REFINE_ALREADY_MAX_SOCKET_COUNT == result:
  904.             #snd.PlaySound("sound/ui/jaeryun_fail.wav")
  905.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_MORE_SOCKET)
  906.  
  907.         elif player.REFINE_NEED_MORE_GOOD_SCROLL == result:
  908.             #snd.PlaySound("sound/ui/jaeryun_fail.wav")
  909.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NEED_BETTER_SCROLL)
  910.  
  911.         elif player.REFINE_CANT_MAKE_SOCKET_ITEM == result:
  912.             #snd.PlaySound("sound/ui/jaeryun_fail.wav")
  913.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_SOCKET_DISABLE_ITEM)
  914.  
  915.         elif player.REFINE_NOT_NEXT_GRADE_ITEM == result:
  916.             #snd.PlaySound("sound/ui/jaeryun_fail.wav")
  917.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_UPGRADE_DISABLE_ITEM)
  918.  
  919.         elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result:
  920.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM)
  921.  
  922.         if player.REFINE_OK != result:
  923.             return
  924.  
  925.         self.refineDialog.Open(scrollSlotPos, targetSlotPos)
  926.  
  927.     def DetachMetinFromItem(self, scrollSlotPos, targetSlotPos):
  928.         scrollIndex = player.GetItemIndex(scrollSlotPos)
  929.         targetIndex = player.GetItemIndex(targetSlotPos)
  930.         if app.ENABLE_SASH_SYSTEM:
  931.             if not player.CanDetach(scrollIndex, targetSlotPos):
  932.                 item.SelectItem(scrollIndex)
  933.                 if item.GetValue(0) == sash.CLEAN_ATTR_VALUE0:
  934.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SASH_FAILURE_CLEAN)
  935.                 else:
  936.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
  937.                
  938.                 return
  939.         else:
  940.             if not player.CanDetach(scrollIndex, targetSlotPos):
  941.                 chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
  942.                 return
  943.        
  944.         self.questionDialog = uiCommon.QuestionDialog()
  945.         self.questionDialog.SetText(localeInfo.REFINE_DO_YOU_SEPARATE_METIN)
  946.         item.SelectItem(targetIndex)
  947.         if item.GetItemType() == item.ITEM_TYPE_COSTUME and item.GetItemSubType() == item.COSTUME_TYPE_SASH:
  948.             item.SelectItem(scrollIndex)
  949.             if item.GetValue(0) == sash.CLEAN_ATTR_VALUE0:
  950.                 self.questionDialog.SetText(localeInfo.SASH_DO_YOU_CLEAN)
  951.        
  952.         self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnDetachMetinFromItem))
  953.         self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
  954.         self.questionDialog.Open()
  955.         self.questionDialog.sourcePos = scrollSlotPos
  956.         self.questionDialog.targetPos = targetSlotPos
  957.  
  958.     def AttachMetinToItem(self, metinSlotPos, targetSlotPos):
  959.         metinIndex = player.GetItemIndex(metinSlotPos)
  960.         targetIndex = player.GetItemIndex(targetSlotPos)
  961.  
  962.         item.SelectItem(metinIndex)
  963.         itemName = item.GetItemName()
  964.  
  965.         result = player.CanAttachMetin(metinIndex, targetSlotPos)
  966.  
  967.         if player.ATTACH_METIN_NOT_MATCHABLE_ITEM == result:
  968.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_CAN_NOT_ATTACH(itemName))
  969.  
  970.         if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result:
  971.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_SOCKET(itemName))
  972.  
  973.         elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result:
  974.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_GOLD_SOCKET(itemName))
  975.  
  976.         elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result:
  977.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM)
  978.  
  979.         if player.ATTACH_METIN_OK != result:
  980.             return
  981.  
  982.         self.attachMetinDialog.Open(metinSlotPos, targetSlotPos)
  983.  
  984.     def OverOutItem(self):
  985.         self.wndItem.SetUsableItem(False)
  986.         if None != self.tooltipItem:
  987.             self.tooltipItem.HideToolTip()
  988.  
  989.     def OverInItem(self, overSlotPos):
  990.         overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos)
  991.         self.wndItem.SetUsableItem(False)
  992.  
  993.         if mouseModule.mouseController.isAttached():
  994.             attachedItemType = mouseModule.mouseController.GetAttachedType()
  995.             if player.SLOT_TYPE_INVENTORY == attachedItemType:
  996.  
  997.                 attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  998.                 attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex()
  999.                
  1000.                 if self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPos):
  1001.                     self.wndItem.SetUsableItem(True)
  1002.                     self.ShowToolTip(overSlotPos)
  1003.                     return
  1004.                
  1005.         self.ShowToolTip(overSlotPos)
  1006.  
  1007.  
  1008.     def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos):
  1009.         "´Ù¸¥ ¾ÆÀÌÅÛ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾ÆÀÌÅÛÀΰ¡?"
  1010.  
  1011.         if item.IsRefineScroll(srcItemVNum):
  1012.             return True
  1013.         elif item.IsMetin(srcItemVNum):
  1014.             return True
  1015.         elif item.IsDetachScroll(srcItemVNum):
  1016.             return True
  1017.         elif item.IsKey(srcItemVNum):
  1018.             return True
  1019.         elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
  1020.             return True
  1021.         else:
  1022.             if item.GetUseType(srcItemVNum) in self.USE_TYPE_TUPLE:
  1023.                 return True
  1024.            
  1025.         return False
  1026.  
  1027.     def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos):
  1028.         "´ë»ó ¾ÆÀÌÅÛ¿¡ »ç¿ëÇÒ ¼ö Àִ°¡?"
  1029.  
  1030.         if srcSlotPos == dstSlotPos:
  1031.             return False
  1032.  
  1033.         if item.IsRefineScroll(srcItemVNum):
  1034.             if player.REFINE_OK == player.CanRefine(srcItemVNum, dstSlotPos):
  1035.                 return True
  1036.         elif item.IsMetin(srcItemVNum):
  1037.             if player.ATTACH_METIN_OK == player.CanAttachMetin(srcItemVNum, dstSlotPos):
  1038.                 return True
  1039.         elif item.IsDetachScroll(srcItemVNum):
  1040.             if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos):
  1041.                 return True
  1042.         elif item.IsKey(srcItemVNum):
  1043.             if player.CanUnlock(srcItemVNum, dstSlotPos):
  1044.                 return True
  1045.  
  1046.         elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
  1047.             return True
  1048.  
  1049.         else:
  1050.             useType=item.GetUseType(srcItemVNum)
  1051.  
  1052.             if "USE_CLEAN_SOCKET" == useType:
  1053.                 if self.__CanCleanBrokenMetinStone(dstSlotPos):
  1054.                     return True
  1055.             elif "USE_CHANGE_ATTRIBUTE" == useType:
  1056.                 if self.__CanChangeItemAttrList(dstSlotPos):
  1057.                     return True
  1058.             elif "USE_ADD_ATTRIBUTE" == useType:
  1059.                 if self.__CanAddItemAttr(dstSlotPos):
  1060.                     return True
  1061.             elif "USE_ADD_ATTRIBUTE2" == useType:
  1062.                 if self.__CanAddItemAttr(dstSlotPos):
  1063.                     return True
  1064.             elif "USE_ADD_ACCESSORY_SOCKET" == useType:
  1065.                 if self.__CanAddAccessorySocket(dstSlotPos):
  1066.                     return True
  1067.             elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType:                               
  1068.                 if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum):
  1069.                     return True;
  1070.             elif "USE_PUT_INTO_BELT_SOCKET" == useType:                            
  1071.                 dstItemVNum = player.GetItemIndex(dstSlotPos)
  1072.                 print "USE_PUT_INTO_BELT_SOCKET", srcItemVNum, dstItemVNum
  1073.  
  1074.                 item.SelectItem(dstItemVNum)
  1075.        
  1076.                 if item.ITEM_TYPE_BELT == item.GetItemType():
  1077.                     return True
  1078.  
  1079.         return False
  1080.  
  1081.     def __CanCleanBrokenMetinStone(self, dstSlotPos):
  1082.         dstItemVNum = player.GetItemIndex(dstSlotPos)
  1083.         if dstItemVNum == 0:
  1084.             return False
  1085.  
  1086.         item.SelectItem(dstItemVNum)
  1087.        
  1088.         if item.ITEM_TYPE_WEAPON != item.GetItemType():
  1089.             return False
  1090.  
  1091.         for i in xrange(player.METIN_SOCKET_MAX_NUM):
  1092.             if player.GetItemMetinSocket(dstSlotPos, i) == constInfo.ERROR_METIN_STONE:
  1093.                 return True
  1094.  
  1095.         return False
  1096.  
  1097.     def __CanChangeItemAttrList(self, dstSlotPos):
  1098.         dstItemVNum = player.GetItemIndex(dstSlotPos)
  1099.         if dstItemVNum == 0:
  1100.             return False
  1101.  
  1102.         item.SelectItem(dstItemVNum)
  1103.        
  1104.         if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR):  
  1105.             return False
  1106.  
  1107.         for i in xrange(player.METIN_SOCKET_MAX_NUM):
  1108.             if player.GetItemAttribute(dstSlotPos, i) != 0:
  1109.                 return True
  1110.  
  1111.         return False
  1112.  
  1113.     def __CanPutAccessorySocket(self, dstSlotPos, mtrlVnum):
  1114.         dstItemVNum = player.GetItemIndex(dstSlotPos)
  1115.         if dstItemVNum == 0:
  1116.             return False
  1117.  
  1118.         item.SelectItem(dstItemVNum)
  1119.  
  1120.         if item.GetItemType() != item.ITEM_TYPE_ARMOR:
  1121.             return False
  1122.  
  1123.         if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR):
  1124.             return False
  1125.  
  1126.         curCount = player.GetItemMetinSocket(dstSlotPos, 0)
  1127.         maxCount = player.GetItemMetinSocket(dstSlotPos, 1)
  1128.  
  1129.         if mtrlVnum != constInfo.GET_ACCESSORY_MATERIAL_VNUM(dstItemVNum, item.GetItemSubType()):
  1130.             return False
  1131.        
  1132.         if curCount>=maxCount:
  1133.             return False
  1134.  
  1135.         return True
  1136.  
  1137.     def __CanAddAccessorySocket(self, dstSlotPos):
  1138.         dstItemVNum = player.GetItemIndex(dstSlotPos)
  1139.         if dstItemVNum == 0:
  1140.             return False
  1141.  
  1142.         item.SelectItem(dstItemVNum)
  1143.  
  1144.         if item.GetItemType() != item.ITEM_TYPE_ARMOR:
  1145.             return False
  1146.  
  1147.         if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR):
  1148.             return False
  1149.  
  1150.         curCount = player.GetItemMetinSocket(dstSlotPos, 0)
  1151.         maxCount = player.GetItemMetinSocket(dstSlotPos, 1)
  1152.        
  1153.         ACCESSORY_SOCKET_MAX_SIZE = 3
  1154.         if maxCount >= ACCESSORY_SOCKET_MAX_SIZE:
  1155.             return False
  1156.  
  1157.         return True
  1158.  
  1159.     def __CanAddItemAttr(self, dstSlotPos):
  1160.         dstItemVNum = player.GetItemIndex(dstSlotPos)
  1161.         if dstItemVNum == 0:
  1162.             return False
  1163.  
  1164.         item.SelectItem(dstItemVNum)
  1165.        
  1166.         if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR):  
  1167.             return False
  1168.            
  1169.         attrCount = 0
  1170.         for i in xrange(player.METIN_SOCKET_MAX_NUM):
  1171.             if player.GetItemAttribute(dstSlotPos, i) != 0:
  1172.                 attrCount += 1
  1173.  
  1174.         if attrCount<4:
  1175.             return True
  1176.                                
  1177.         return False
  1178.  
  1179.     def ShowToolTip(self, slotIndex):
  1180.         if None != self.tooltipItem:
  1181.             self.tooltipItem.SetInventoryItem(slotIndex)
  1182.  
  1183.     def OnTop(self):
  1184.         if None != self.tooltipItem:
  1185.             self.tooltipItem.SetTop()
  1186.  
  1187.     def OnPressEscapeKey(self):
  1188.         self.Close()
  1189.         return True
  1190.  
  1191.     def UseItemSlot(self, slotIndex):
  1192.         curCursorNum = app.GetCursor()
  1193.         if app.SELL == curCursorNum:
  1194.             return
  1195.         if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():
  1196.             return
  1197.        
  1198.         slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex)
  1199.  
  1200.         if app.EXCHANGE_CHECKIN_UPDATE:
  1201.             if self.wndExchange.IsShow() or self.wndDice.IsShow() and slotIndex < player.EQUIPMENT_SLOT_START:
  1202.                 for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  1203.                     itemVnum = exchange.GetItemVnumFromSelf(i)
  1204.                     if itemVnum != 0:
  1205.                         continue
  1206.  
  1207.                     if not net.SendExchangeItemAddPacket(1, slotIndex, i):
  1208.                         continue
  1209.                     break
  1210.                 return
  1211.        
  1212.         if app.ENABLE_DRAGON_SOUL_SYSTEM:
  1213.             if self.wndDragonSoulRefine.IsShow():
  1214.                 self.wndDragonSoulRefine.AutoSetItem((player.INVENTORY, slotIndex), 1)
  1215.                 return
  1216.        
  1217.         if app.ENABLE_SASH_SYSTEM:
  1218.             if self.isShowSashWindow():
  1219.                 sash.Add(player.INVENTORY, slotIndex, 255)
  1220.                 return
  1221.        
  1222.         self.__UseItem(slotIndex)
  1223.         mouseModule.mouseController.DeattachObject()
  1224.         self.OverOutItem()
  1225.  
  1226.     if app.ENABLE_10X_CHEST_OPEN:
  1227.         def IsTreasureBox(self, slotIndex):
  1228.             itemVnum = player.GetItemIndex(slotIndex)
  1229.             item.SelectItem(itemVnum)
  1230.    
  1231.             if item.GetItemType() == item.ITEM_TYPE_GIFTBOX:
  1232.                 return True
  1233.    
  1234.    
  1235.             ## you can set own treasures which not have item giftbox type, simply add vnums here
  1236.             treasures = {
  1237.                 0: 50011,
  1238.                 1: 50024,
  1239.                 2: 50025,
  1240.                 3: 50031,
  1241.                 4: 50032,
  1242.             }
  1243.    
  1244.             if itemVnum in treasures.values():
  1245.                 return True
  1246.    
  1247.             return False
  1248.    
  1249.         def SendMultipleUseItemPacket(self, slotIndex):
  1250.             for i in xrange(player.GetItemCount(slotIndex)):
  1251.                 self.__SendUseItemPacket(slotIndex)
  1252.    
  1253.     def SetOpenBoniSwitcherEvent(self, event):
  1254.         self.OpenBoniSwitcherEvent = ui.__mem_func__(event)
  1255.  
  1256.     def __UseItem(self, slotIndex):
  1257.         ItemVNum = player.GetItemIndex(slotIndex)
  1258.         item.SelectItem(ItemVNum)
  1259.        
  1260.         if app.ENABLE_10X_CHEST_OPEN:
  1261.             if app.IsPressed(app.DIK_LCONTROL) and self.IsTreasureBox(slotIndex):
  1262.                 self.SendMultipleUseItemPacket(slotIndex)
  1263.                 return
  1264.        
  1265.         if item.IsFlag(item.ITEM_FLAG_CONFIRM_WHEN_USE):
  1266.             self.questionDialog = uiCommon.QuestionDialog()
  1267.             self.questionDialog.SetText(localeInfo.INVENTORY_REALLY_USE_ITEM)
  1268.             self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnAccept))
  1269.             self.questionDialog.SetCancelEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnCancel))
  1270.             self.questionDialog.Open()
  1271.             self.questionDialog.slotIndex = slotIndex
  1272.            
  1273.         else:
  1274.             self.__SendUseItemPacket(slotIndex)
  1275.  
  1276.     def __UseItemQuestionDialog_OnCancel(self):
  1277.         self.OnCloseQuestionDialog()
  1278.  
  1279.     def __UseItemQuestionDialog_OnAccept(self):
  1280.         self.__SendUseItemPacket(self.questionDialog.slotIndex)
  1281.  
  1282.         if self.questionDialog:
  1283.             self.questionDialog.Close()
  1284.         self.questionDialog = None
  1285.  
  1286.     def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos):
  1287.         # °³ÀλóÁ¡ ¿­°í ÀÖ´Â µ¿¾È ¾ÆÀÌÅÛ »ç¿ë ¹æÁö
  1288.         if uiPrivateShopBuilder.IsBuildingPrivateShop():
  1289.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
  1290.             return
  1291.  
  1292.         if (uiOfflineShopBuilder.IsBuildingOfflineShop()):
  1293.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP)
  1294.             return
  1295.            
  1296.         if (uiOfflineShop.IsEditingOfflineShop()):
  1297.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP)
  1298.             return
  1299.  
  1300.         net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)
  1301.  
  1302.     def __SendUseItemPacket(self, slotPos):
  1303.         # °³ÀλóÁ¡ ¿­°í ÀÖ´Â µ¿¾È ¾ÆÀÌÅÛ »ç¿ë ¹æÁö
  1304.         if uiPrivateShopBuilder.IsBuildingPrivateShop():
  1305.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
  1306.             return
  1307.  
  1308.         if (uiOfflineShopBuilder.IsBuildingOfflineShop()):
  1309.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP)
  1310.             return
  1311.            
  1312.         if (uiOfflineShop.IsEditingOfflineShop()):
  1313.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP)
  1314.             return
  1315.  
  1316.         net.SendItemUsePacket(slotPos)
  1317.    
  1318.     def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
  1319.         # °³ÀλóÁ¡ ¿­°í ÀÖ´Â µ¿¾È ¾ÆÀÌÅÛ »ç¿ë ¹æÁö
  1320.         if uiPrivateShopBuilder.IsBuildingPrivateShop():
  1321.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
  1322.             return
  1323.  
  1324.         if (uiOfflineShopBuilder.IsBuildingOfflineShop()):
  1325.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_OFFLINE_SHOP)
  1326.             return
  1327.            
  1328.         if (uiOfflineShop.IsEditingOfflineShop()):
  1329.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_OFFLINE_SHOP)
  1330.             return
  1331.  
  1332.         net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount)
  1333.    
  1334.     def SetDragonSoulRefineWindow(self, wndDragonSoulRefine):
  1335.         if app.ENABLE_DRAGON_SOUL_SYSTEM:
  1336.             self.wndDragonSoulRefine = wndDragonSoulRefine
  1337.            
  1338.     if app.ENABLE_SASH_SYSTEM:
  1339.         def SetSashWindow(self, wndSashCombine, wndSashAbsorption):
  1340.             self.wndSashCombine = wndSashCombine
  1341.             self.wndSashAbsorption = wndSashAbsorption
  1342.  
  1343.         def isShowSashWindow(self):
  1344.             if self.wndSashCombine:
  1345.                 if self.wndSashCombine.IsShow():
  1346.                     return 1
  1347.  
  1348.             if self.wndSashAbsorption:
  1349.                 if self.wndSashAbsorption.IsShow():
  1350.                     return 1
  1351.            
  1352.             return 0
  1353.            
  1354.     def OnMoveWindow(self, x, y):
  1355. #       print "Inventory Global Pos : ", self.GetGlobalPosition()
  1356.         if self.wndBelt:
  1357. #           print "Belt Global Pos : ", self.wndBelt.GetGlobalPosition()
  1358.             self.wndBelt.AdjustPositionAndSize()
  1359.         if self.wndCostume:
  1360.             self.wndCostume.AdjustPositionAndSize()
Advertisement
Add Comment
Please, Sign In to add comment