Advertisement
Guest User

Untitled

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