Advertisement
Guest User

uiiventory.py

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