Advertisement
Guest User

uiinventory

a guest
Dec 29th, 2020
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 57.71 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. import exchange
  22. if app.ENABLE_SASH_SYSTEM:
  23.     import sash
  24. if app.ENABLE_CHANGELOOK_SYSTEM:
  25.     import changelook
  26.  
  27. ITEM_MALL_BUTTON_ENABLE = True
  28.  
  29.  
  30.  
  31. ITEM_FLAG_APPLICABLE = 1 << 14
  32.  
  33. class CostumeWindow(ui.ScriptWindow):
  34.  
  35.     def __init__(self, wndInventory):
  36.         import exception
  37.  
  38.         if not app.ENABLE_COSTUME_SYSTEM:
  39.             exception.Abort("What do you do?")
  40.             return
  41.  
  42.         if not wndInventory:
  43.             exception.Abort("wndInventory parameter must be set to InventoryWindow")
  44.             return
  45.  
  46.         ui.ScriptWindow.__init__(self)
  47.  
  48.         self.renderOver = False
  49.  
  50.         self.isLoaded = 0
  51.         self.wndInventory = wndInventory;
  52.  
  53.         self.__LoadWindow()
  54.  
  55.     def __del__(self):
  56.         ui.ScriptWindow.__del__(self)
  57.  
  58.     def Show(self):
  59.         self.__LoadWindow()
  60.         self.RefreshCostumeSlot()
  61.  
  62.         ui.ScriptWindow.Show(self)
  63.  
  64.     def Close(self):
  65.         self.Hide()
  66.  
  67.     def __LoadWindow(self):
  68.         if self.isLoaded == 1:
  69.             return
  70.  
  71.         self.isLoaded = 1
  72.  
  73.         try:
  74.             pyScrLoader = ui.PythonScriptLoader()
  75.             pyScrLoader.LoadScriptFile(self, "UIScript/costumewindow.py")
  76.         except:
  77.             import exception
  78.             exception.Abort("CostumeWindow.LoadWindow.LoadObject")
  79.  
  80.         try:
  81.             wndEquip = self.GetChild("CostumeSlot")
  82.             self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
  83.  
  84.         except:
  85.             import exception
  86.             exception.Abort("CostumeWindow.LoadWindow.BindObject")
  87.  
  88.         ## Equipment
  89.         wndEquip.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem))
  90.         wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem))
  91.         wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
  92.         wndEquip.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
  93.         wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot))
  94.         wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot))
  95.  
  96.         self.wndEquip = wndEquip
  97.  
  98.     def RefreshCostumeSlot(self):
  99.         getItemVNum=player.GetItemIndex
  100.         for i in xrange(item.COSTUME_SLOT_COUNT):
  101.             slotNumber = item.COSTUME_SLOT_START + i
  102.             self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0)
  103.             if app.ENABLE_CHANGELOOK_SYSTEM:
  104.                 itemTransmutedVnum = player.GetItemTransmutation(slotNumber)
  105.                 if itemTransmutedVnum:
  106.                     self.wndEquip.DisableCoverButton(slotNumber)
  107.                 else:
  108.                     self.wndEquip.EnableCoverButton(slotNumber)
  109.        
  110.         slotNumber = item.EQUIPMENT_BELT + 1
  111.         self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0)
  112.         if app.ENABLE_CHANGELOOK_SYSTEM:
  113.             itemTransmutedVnum = player.GetItemTransmutation(slotNumber)
  114.             if itemTransmutedVnum:
  115.                 self.wndEquip.DisableCoverButton(slotNumber)
  116.             else:
  117.                 self.wndEquip.EnableCoverButton(slotNumber)
  118.        
  119.         self.wndEquip.RefreshSlot()
  120.        
  121. class BeltInventoryWindow(ui.ScriptWindow):
  122.  
  123.     def __init__(self, wndInventory):
  124.         import exception
  125.  
  126.         if not app.ENABLE_NEW_EQUIPMENT_SYSTEM:
  127.             exception.Abort("What do you do?")
  128.             return
  129.  
  130.         if not wndInventory:
  131.             exception.Abort("wndInventory parameter must be set to InventoryWindow")
  132.             return
  133.  
  134.         ui.ScriptWindow.__init__(self)
  135.  
  136.         self.isLoaded = 0
  137.         self.wndInventory = wndInventory;
  138.  
  139.         self.renderOver = False
  140.  
  141.         self.wndBeltInventoryLayer = None
  142.         self.wndBeltInventorySlot = None
  143.         self.expandBtn = None
  144.         self.minBtn = None
  145.  
  146.         self.__LoadWindow()
  147.  
  148.     def __del__(self):
  149.         ui.ScriptWindow.__del__(self)
  150.  
  151.     def Show(self, openBeltSlot = False):
  152.         self.__LoadWindow()
  153.         self.RefreshSlot()
  154.  
  155.         ui.ScriptWindow.Show(self)
  156.  
  157.         if openBeltSlot:
  158.             self.OpenInventory()
  159.         else:
  160.             self.CloseInventory()
  161.  
  162.     def Close(self):
  163.         self.Hide()
  164.  
  165.     def IsOpeningInventory(self):
  166.         return self.wndBeltInventoryLayer.IsShow()
  167.  
  168.     def OpenInventory(self):
  169.         self.wndBeltInventoryLayer.Show()
  170.         self.expandBtn.Hide()
  171.  
  172.         if localeInfo.IsARABIC() == 0:
  173.             self.AdjustPositionAndSize()
  174.  
  175.     def CloseInventory(self):
  176.         self.wndBeltInventoryLayer.Hide()
  177.         self.expandBtn.Show()
  178.  
  179.         if localeInfo.IsARABIC() == 0:
  180.             self.AdjustPositionAndSize()
  181.  
  182.     ## 현재 인벤토리 위치를 기준으로 BASE 위치를 계산, 리턴.. 숫자 하드코딩하기 정말 싫지만 방법이 없다..
  183.     def GetBasePosition(self):
  184.         x, y = self.wndInventory.GetGlobalPosition()
  185.         return x - 148, y + 241
  186.  
  187.     def AdjustPositionAndSize(self):
  188.         bx, by = self.GetBasePosition()
  189.  
  190.         if self.IsOpeningInventory():
  191.             self.SetPosition(bx, by)
  192.             self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight())
  193.  
  194.         else:
  195.             self.SetPosition(bx + 138, by);
  196.             self.SetSize(10, self.GetHeight())
  197.  
  198.     def __LoadWindow(self):
  199.         if self.isLoaded == 1:
  200.             return
  201.  
  202.         self.isLoaded = 1
  203.  
  204.         try:
  205.             pyScrLoader = ui.PythonScriptLoader()
  206.             pyScrLoader.LoadScriptFile(self, "UIScript/BeltInventoryWindow.py")
  207.         except:
  208.             import exception
  209.             exception.Abort("CostumeWindow.LoadWindow.LoadObject")
  210.  
  211.         try:
  212.             self.ORIGINAL_WIDTH = self.GetWidth()
  213.             wndBeltInventorySlot = self.GetChild("BeltInventorySlot")
  214.             self.wndBeltInventoryLayer = self.GetChild("BeltInventoryLayer")
  215.             self.expandBtn = self.GetChild("ExpandBtn")
  216.             self.minBtn = self.GetChild("MinimizeBtn")
  217.  
  218.             self.expandBtn.SetEvent(ui.__mem_func__(self.OpenInventory))
  219.             self.minBtn.SetEvent(ui.__mem_func__(self.CloseInventory))
  220.  
  221.             if localeInfo.IsARABIC() :
  222.                 self.expandBtn.SetPosition(self.expandBtn.GetWidth() - 2, 15)
  223.                 self.wndBeltInventoryLayer.SetPosition(self.wndBeltInventoryLayer.GetWidth() - 5, 0)
  224.                 self.minBtn.SetPosition(self.minBtn.GetWidth() + 3, 15)
  225.  
  226.             for i in xrange(item.BELT_INVENTORY_SLOT_COUNT):
  227.                 slotNumber = item.BELT_INVENTORY_SLOT_START + i
  228.                 wndBeltInventorySlot.SetCoverButton(slotNumber, "d:/ymir work/ui/game/quest/slot_button_01.sub",\
  229.                                                 "d:/ymir work/ui/game/quest/slot_button_01.sub",\
  230.                                                 "d:/ymir work/ui/game/quest/slot_button_01.sub",\
  231.                                                 "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga", False, False)
  232.  
  233.         except:
  234.             import exception
  235.             exception.Abort("CostumeWindow.LoadWindow.BindObject")
  236.  
  237.         ## Equipment
  238.         wndBeltInventorySlot.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem))
  239.         wndBeltInventorySlot.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem))
  240.         wndBeltInventorySlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
  241.         wndBeltInventorySlot.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
  242.         wndBeltInventorySlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot))
  243.         wndBeltInventorySlot.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot))
  244.  
  245.         self.wndBeltInventorySlot = wndBeltInventorySlot
  246.  
  247.     def RefreshSlot(self):
  248.         getItemVNum=player.GetItemIndex
  249.  
  250.         for i in xrange(item.BELT_INVENTORY_SLOT_COUNT):
  251.             slotNumber = item.BELT_INVENTORY_SLOT_START + i
  252.             self.wndBeltInventorySlot.SetItemSlot(slotNumber, getItemVNum(slotNumber), player.GetItemCount(slotNumber))
  253.             self.wndBeltInventorySlot.SetAlwaysRenderCoverButton(slotNumber, True)
  254.  
  255.             avail = "0"
  256.  
  257.             if player.IsAvailableBeltInventoryCell(slotNumber):
  258.                 self.wndBeltInventorySlot.EnableCoverButton(slotNumber)
  259.             else:
  260.                 self.wndBeltInventorySlot.DisableCoverButton(slotNumber)
  261.  
  262.         self.wndBeltInventorySlot.RefreshSlot()
  263.  
  264.  
  265. class InventoryWindow(ui.ScriptWindow):
  266.  
  267.     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")
  268.  
  269.     MINIMIZE_INVENTORY = False
  270.  
  271.     questionDialog = None
  272.     tooltipItem = None
  273.     wndCostume = None
  274.     wndBelt = None
  275.     dlgPickMoney = None
  276.     interface = None
  277.     if app.WJ_ENABLE_TRADABLE_ICON:
  278.         bindWnds = []
  279.        
  280.     sellingSlotNumber = -1
  281.     isLoaded = 0
  282.     isOpenedCostumeWindowWhenClosingInventory = 0       # 인벤토리 닫을 때 코스츔이 열려있었는지 여부-_-; 네이밍 ㅈㅅ
  283.     isOpenedBeltWindowWhenClosingInventory = 0      # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ
  284.  
  285.     def __init__(self):
  286.         ui.ScriptWindow.__init__(self)
  287.        
  288.         self.renderOver = False
  289.    
  290.         self.isOpenedBeltWindowWhenClosingInventory = 0     # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ
  291.  
  292.         self.inventoryPageIndex = 0
  293.         self.__LoadWindow()
  294.  
  295.     def __del__(self):
  296.         ui.ScriptWindow.__del__(self)
  297.  
  298.     def Show(self):
  299.         self.__LoadWindow()
  300.  
  301.         ui.ScriptWindow.Show(self)
  302.  
  303.         # 인벤토리를 닫을 때 코스츔이 열려있었다면 인벤토리를 열 때 코스츔도 같이 열도록 함.
  304.         if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
  305.             self.wndCostume.Show()
  306.  
  307.         #if self.wndBelt:
  308.         #   self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory)
  309.  
  310.     def BindInterfaceClass(self, interface):
  311.         self.interface = interface
  312.  
  313.     if app.WJ_ENABLE_TRADABLE_ICON:
  314.         def BindWindow(self, wnd):
  315.             self.bindWnds.append(wnd)
  316.  
  317.     def __LoadWindow(self):
  318.         if self.isLoaded == 1:
  319.             return
  320.  
  321.         self.isLoaded = 1
  322.  
  323.         try:
  324.             pyScrLoader = ui.PythonScriptLoader()
  325.  
  326.             if ITEM_MALL_BUTTON_ENABLE:
  327.                 pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "InventoryWindow.py")
  328.             else:
  329.                 pyScrLoader.LoadScriptFile(self, "UIScript/InventoryWindow.py")
  330.         except:
  331.             import exception
  332.             exception.Abort("InventoryWindow.LoadWindow.LoadObject")
  333.  
  334.         try:
  335.             wndItem = self.GetChild("ItemSlot")
  336.             wndEquip = self.GetChild("EquipmentSlot")
  337.             self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
  338.             self.wndMoney = self.GetChild("Money")
  339.             self.wndMoneySlot = self.GetChild("Money_Slot")
  340.             self.wndGem = self.GetChild("Gem")
  341.             self.wndGemSlot = self.GetChild("Gem_Slot")
  342.             self.mallButton = self.GetChild2("MallButton")
  343.             self.DSSButton = self.GetChild2("DSSButton")
  344.             self.costumeButton = self.GetChild2("CostumeButton")
  345.             self.arrange_button = self.GetChild2("arrange_button")
  346.             self.offlineshop = self.GetChild2("offline_shop")
  347.            
  348.             self.ButonMinimize = self.GetChild2("MinimizeInventory")
  349.             self.ButonMinimize.SetEvent(ui.__mem_func__(self.MinimizeInventory))
  350.            
  351.             self.inventoryTab = []
  352.             self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))
  353.             self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))
  354.             self.inventoryTab.append(self.GetChild("Inventory_Tab_03"))
  355.             self.inventoryTab.append(self.GetChild("Inventory_Tab_04"))
  356.  
  357.             self.equipmentTab = []
  358.             self.equipmentTab.append(self.GetChild("Equipment_Tab_01"))
  359.             self.equipmentTab.append(self.GetChild("Equipment_Tab_02"))
  360.  
  361.             if self.costumeButton and not app.ENABLE_COSTUME_SYSTEM:
  362.                 self.costumeButton.Hide()
  363.                 self.costumeButton.Destroy()
  364.                 self.costumeButton = 0
  365.  
  366.             # Belt Inventory Window
  367.             self.wndBelt = None
  368.  
  369.             if app.ENABLE_NEW_EQUIPMENT_SYSTEM:
  370.                 self.wndBelt = BeltInventoryWindow(self)
  371.  
  372.         except:
  373.             import exception
  374.             exception.Abort("InventoryWindow.LoadWindow.BindObject")
  375.  
  376.         ## Item
  377.         wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
  378.         wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
  379.         wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
  380.         wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
  381.         wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  382.         wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  383.  
  384.         ## Equipment
  385.         wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
  386.         wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
  387.         wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
  388.         wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
  389.         wndEquip.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  390.         wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  391.  
  392.         ## PickMoneyDialog
  393.         dlgPickMoney = uiPickMoney.PickMoneyDialog()
  394.         dlgPickMoney.LoadDialog()
  395.         dlgPickMoney.Hide()
  396.  
  397.         ## RefineDialog
  398.         self.refineDialog = uiRefine.RefineDialog()
  399.         self.refineDialog.Hide()
  400.  
  401.         ## AttachMetinDialog
  402.         if app.WJ_ENABLE_TRADABLE_ICON:  
  403.             self.attachMetinDialog = uiAttachMetin.AttachMetinDialog(self)
  404.             self.BindWindow(self.attachMetinDialog)
  405.         else:
  406.             self.attachMetinDialog = uiAttachMetin.AttachMetinDialog()
  407.         self.attachMetinDialog.Hide()
  408.  
  409.         ## MoneySlot
  410.         self.wndMoneySlot.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
  411.  
  412.         self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))
  413.         self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))
  414.         self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg))
  415.         self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg))
  416.         self.inventoryTab[0].Down()
  417.         self.inventoryPageIndex = 0
  418.  
  419.         self.equipmentTab[0].SetEvent(lambda arg=0: self.SetEquipmentPage(arg))
  420.         self.equipmentTab[1].SetEvent(lambda arg=1: self.SetEquipmentPage(arg))
  421.         self.equipmentTab[0].Down()
  422.         self.equipmentTab[0].Hide()
  423.         self.equipmentTab[1].Hide()
  424.  
  425.         self.wndItem = wndItem
  426.         self.wndEquip = wndEquip
  427.         self.dlgPickMoney = dlgPickMoney
  428.        
  429.         # MallButton
  430.         if self.mallButton:
  431.             self.mallButton.SetEvent(ui.__mem_func__(self.ClickMallButton))
  432.  
  433.         if self.DSSButton:
  434.             self.DSSButton.SetEvent(ui.__mem_func__(self.ClickDSSButton))
  435.  
  436.         # Costume Button
  437.         if self.costumeButton:
  438.             self.costumeButton.SetEvent(ui.__mem_func__(self.ClickCostumeButton))
  439.  
  440.         # Refresh
  441.         if self.arrange_button:
  442.             self.arrange_button.SetEvent(ui.__mem_func__(self.click_arrange))
  443.  
  444.         # OfflineShop
  445.         if self.offlineshop:
  446.             self.offlineshop.SetEvent(ui.__mem_func__(self.ClickOfflineShop))
  447.  
  448.         self.wndCostume = None
  449.  
  450.         #####
  451.  
  452.         ## Refresh
  453.         if app.ENABLE_SASH_SYSTEM:
  454.             self.listAttachedSashs = []
  455.         if app.ENABLE_CHANGELOOK_SYSTEM:
  456.             self.listAttachedCl = []
  457.         self.SetInventoryPage(0)
  458.         self.SetEquipmentPage(0)
  459.         self.RefreshItemSlot()
  460.         self.RefreshStatus()
  461.  
  462.     def MinimizeInventory(self):
  463.         if self.MINIMIZE_INVENTORY == False:
  464.             self.MINIMIZE_INVENTORY = True
  465.         else:
  466.             self.MINIMIZE_INVENTORY = False
  467.            
  468.         self.PageInventory(self.MINIMIZE_INVENTORY)
  469.        
  470.     def PageInventory(self, arg):
  471.         if arg == True:
  472.             self.GetChild("Gem_Slot").Hide()
  473.             self.GetChild("Money_Slot").Show()
  474.         else:
  475.             self.GetChild("Money_Slot").Hide()
  476.             self.GetChild("Gem_Slot").Show()
  477.  
  478.     def Destroy(self):
  479.         self.ClearDictionary()
  480.  
  481.         self.dlgPickMoney.Destroy()
  482.         self.dlgPickMoney = 0
  483.  
  484.         self.refineDialog.Destroy()
  485.         self.refineDialog = 0
  486.  
  487.         self.attachMetinDialog.Destroy()
  488.         self.attachMetinDialog = 0
  489.  
  490.         self.tooltipItem = None
  491.         self.wndItem = 0
  492.         self.wndEquip = 0
  493.         self.dlgPickMoney = 0
  494.         self.wndMoney = 0
  495.         self.wndMoneySlot = 0
  496.         self.wndGem = 0
  497.         self.wndGemSlot = 0
  498.         self.questionDialog = None
  499.         self.mallButton = None
  500.         self.DSSButton = None
  501.         if app.ENABLE_DSS_ACTIVE_EFFECT_BUTTON:
  502.             self.DSSButtonEffect = None
  503.         self.interface = None
  504.         if app.WJ_ENABLE_TRADABLE_ICON:
  505.             self.bindWnds = []
  506.         if app.ENABLE_SPECIAL_STORAGE:
  507.             self.SpecialStorageButton = None
  508.         if self.wndCostume:
  509.             self.wndCostume.Destroy()
  510.             self.wndCostume = 0
  511.  
  512.         if self.wndBelt:
  513.             self.wndBelt.Destroy()
  514.             self.wndBelt = None
  515.            
  516.         self.inventoryTab = []
  517.         self.equipmentTab = []
  518.  
  519.     def Hide(self):
  520.            
  521.         if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS():
  522.             self.OnCloseQuestionDialog()
  523.             return
  524.         if None != self.tooltipItem:
  525.             self.tooltipItem.HideToolTip()
  526.  
  527.         if self.wndCostume:
  528.             self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow()           # 인벤토리 창이 닫힐 때 코스츔이 열려 있었는가?
  529.             self.wndCostume.Close()
  530.  
  531.         if self.wndBelt:
  532.             self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory()     # 인벤토리 창이 닫힐 때 벨트 인벤토리도 열려 있었는가?
  533.             print "Is Opening Belt Inven?? ", self.isOpenedBeltWindowWhenClosingInventory
  534.             self.wndBelt.Close()
  535.  
  536.         if self.dlgPickMoney:
  537.             self.dlgPickMoney.Close()
  538.  
  539.         wndMgr.Hide(self.hWnd)
  540.  
  541.  
  542.     def Close(self):
  543.         self.Hide()
  544.  
  545.     def SetInventoryPage(self, page):
  546.         self.inventoryTab[self.inventoryPageIndex].SetUp()
  547.         self.inventoryPageIndex = page
  548.         self.inventoryTab[self.inventoryPageIndex].Down()
  549.  
  550.         self.RefreshBagSlotWindow()
  551.  
  552.     def SetEquipmentPage(self, page):
  553.         self.equipmentPageIndex = page
  554.         self.equipmentTab[1-page].SetUp()
  555.         self.RefreshEquipSlotWindow()
  556.  
  557.     def ClickMallButton(self):
  558.         print "click_mall_button"
  559.         net.SendChatPacket("/click_mall")
  560.  
  561.     # DSSButton
  562.     def ClickDSSButton(self):
  563.         print "click_dss_button"
  564.         self.interface.ToggleDragonSoulWindow()
  565.  
  566.     def click_arrange(self):
  567.         self.__ClickStartButton()
  568.  
  569.     def ClickOfflineShop(self):
  570.         print "click_open_shop"
  571.         net.SendChatPacket("/open_shop")
  572.  
  573.     def __ClickStartButton(self):
  574.         startQuestionDialog = uiCommon.QuestionDialog2()
  575.         startQuestionDialog.SetText1("Acesta optiune ajuta la stacarea obiectelor din inventar.")
  576.         startQuestionDialog.SetText2("Doresti sa continui aceasta actiune ?")
  577.         startQuestionDialog.SetAcceptEvent(ui.__mem_func__(self.__StartAccept))
  578.         startQuestionDialog.SetCancelEvent(ui.__mem_func__(self.__StartCancel))
  579.         startQuestionDialog.Open()
  580.         self.startQuestionDialog = startQuestionDialog 
  581.    
  582.     def __StartAccept(self):
  583.         net.SendChatPacket("/click_sort_items")
  584.         self.__StartCancel()
  585.        
  586.     def __StartCancel(self):
  587.         self.startQuestionDialog.Close()
  588.  
  589.     if app.ENABLE_DSS_ACTIVE_EFFECT_BUTTON:
  590.         def UseDSSButtonEffect(self, enable):
  591.             if self.DSSButton:
  592.                 DSSButtonEffect = ui.SlotWindow()
  593.                 DSSButtonEffect.AddFlag("attach")
  594.                 DSSButtonEffect.SetParent(self.DSSButton)
  595.                 DSSButtonEffect.SetPosition(3.2, 0)
  596.  
  597.                 DSSButtonEffect.AppendSlot(0, 0, 0, 32, 32)
  598.                 DSSButtonEffect.SetRenderSlot(0)
  599.                 DSSButtonEffect.RefreshSlot()
  600.  
  601.                 if enable == True:
  602.                     DSSButtonEffect.ActivateSlot(0)
  603.                     DSSButtonEffect.Show()
  604.                 else:
  605.                     DSSButtonEffect.DeactivateSlot(0)
  606.                     DSSButtonEffect.Hide()
  607.                 self.DSSButtonEffect = DSSButtonEffect
  608.  
  609.     def ClickCostumeButton(self):
  610.         print "Click Costume Button"
  611.         if self.wndCostume:
  612.             if self.wndCostume.IsShow():
  613.                 self.wndCostume.Hide()
  614.             else:
  615.                 self.wndCostume.Show()
  616.         else:
  617.             self.wndCostume = CostumeWindow(self)
  618.             self.wndCostume.Show()
  619.  
  620.     def OpenPickMoneyDialog(self):
  621.  
  622.         if mouseModule.mouseController.isAttached():
  623.  
  624.             attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  625.             if player.SLOT_TYPE_SAFEBOX == mouseModule.mouseController.GetAttachedType():
  626.  
  627.                 if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
  628.                     net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
  629.                     snd.PlaySound("sound/ui/money.wav")
  630.  
  631.             mouseModule.mouseController.DeattachObject()
  632.  
  633.         else:
  634.             curMoney = player.GetElk()
  635.  
  636.             if curMoney <= 0:
  637.                 return
  638.  
  639.             self.dlgPickMoney.SetTitleName(localeInfo.PICK_MONEY_TITLE)
  640.             self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
  641.             self.dlgPickMoney.Open(curMoney)
  642.             self.dlgPickMoney.SetMax(7) # 인벤토리 990000 제한 버그 수정
  643.  
  644.     def OnPickMoney(self, money):
  645.         mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money)
  646.  
  647.     def OnPickItem(self, count):
  648.         itemSlotIndex = self.dlgPickMoney.itemGlobalSlotIndex
  649.         selectedItemVNum = player.GetItemIndex(itemSlotIndex)
  650.         mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, count)
  651.  
  652.     def __InventoryLocalSlotPosToGlobalSlotPos(self, local):
  653.         if player.IsEquipmentSlot(local) or player.IsCostumeSlot(local) or (app.ENABLE_NEW_EQUIPMENT_SYSTEM and player.IsBeltInventorySlot(local)):
  654.             return local
  655.  
  656.         return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local
  657.  
  658.     def GetInventoryPageIndex(self):
  659.         return self.inventoryPageIndex
  660.  
  661.     if app.WJ_ENABLE_TRADABLE_ICON:
  662.         def RefreshMarkSlots(self, localIndex=None):
  663.             if not self.interface:
  664.                 return
  665.  
  666.             onTopWnd = self.interface.GetOnTopWindow()
  667.             if localIndex:
  668.                 slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(localIndex)
  669.                 if onTopWnd == player.ON_TOP_WND_NONE:
  670.                     self.wndItem.SetUsableSlotOnTopWnd(localIndex)
  671.  
  672.                 elif onTopWnd == player.ON_TOP_WND_SHOP:
  673.                     if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_SELL):
  674.                         self.wndItem.SetUnusableSlotOnTopWnd(localIndex)
  675.                     else:
  676.                         self.wndItem.SetUsableSlotOnTopWnd(localIndex)
  677.  
  678.                 elif onTopWnd == player.ON_TOP_WND_EXCHANGE:
  679.                     if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_GIVE):
  680.                         self.wndItem.SetUnusableSlotOnTopWnd(localIndex)
  681.                     else:
  682.                         self.wndItem.SetUsableSlotOnTopWnd(localIndex)
  683.  
  684.                 elif onTopWnd == player.ON_TOP_WND_PRIVATE_SHOP:
  685.                     if player.IsAntiFlagBySlot(slotNumber, item.ITEM_ANTIFLAG_MYSHOP):
  686.                         self.wndItem.SetUnusableSlotOnTopWnd(localIndex)
  687.                     else:
  688.                         self.wndItem.SetUsableSlotOnTopWnd(localIndex)
  689.  
  690.                 elif onTopWnd == player.ON_TOP_WND_SAFEBOX:
  691.                     if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_SAFEBOX):
  692.                         self.wndItem.SetUnusableSlotOnTopWnd(localIndex)
  693.                     else:
  694.                         self.wndItem.SetUsableSlotOnTopWnd(localIndex)
  695.  
  696.                 return
  697.  
  698.             for i in xrange(player.INVENTORY_PAGE_SIZE):
  699.                 slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
  700.  
  701.                 if onTopWnd == player.ON_TOP_WND_NONE:
  702.                     self.wndItem.SetUsableSlotOnTopWnd(i)
  703.  
  704.                 elif onTopWnd == player.ON_TOP_WND_SHOP:
  705.                     if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_SELL):
  706.                         self.wndItem.SetUnusableSlotOnTopWnd(i)
  707.                     else:
  708.                         self.wndItem.SetUsableSlotOnTopWnd(i)
  709.  
  710.                 elif onTopWnd == player.ON_TOP_WND_EXCHANGE:
  711.                     if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_GIVE):
  712.                         self.wndItem.SetUnusableSlotOnTopWnd(i)
  713.                     else:
  714.                         self.wndItem.SetUsableSlotOnTopWnd(i)
  715.  
  716.                 elif onTopWnd == player.ON_TOP_WND_PRIVATE_SHOP:
  717.                     if player.IsAntiFlagBySlot(slotNumber, item.ITEM_ANTIFLAG_MYSHOP):
  718.                         self.wndItem.SetUnusableSlotOnTopWnd(i)
  719.                     else:
  720.                         self.wndItem.SetUsableSlotOnTopWnd(i)
  721.  
  722.                 elif onTopWnd == player.ON_TOP_WND_SAFEBOX:
  723.                     if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_SAFEBOX):
  724.                         self.wndItem.SetUnusableSlotOnTopWnd(i)
  725.                     else:
  726.                         self.wndItem.SetUsableSlotOnTopWnd(i)
  727.        
  728.     def RefreshBagSlotWindow(self):
  729.         is_activated = 0
  730.         getItemVNum=player.GetItemIndex
  731.         getItemCount=player.GetItemCount
  732.         setItemVNum=self.wndItem.SetItemSlot
  733.  
  734.         for i in xrange(player.INVENTORY_PAGE_SIZE*2):
  735.             slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
  736.  
  737.             itemCount = getItemCount(slotNumber)
  738.  
  739.             if 0 == itemCount:
  740.                 self.wndItem.ClearSlot(i)
  741.                 continue
  742.             elif 1 == itemCount:
  743.                 itemCount = 0
  744.  
  745.             itemVnum = getItemVNum(slotNumber)
  746.             setItemVNum(i, itemVnum, itemCount)
  747.  
  748.             if app.ENABLE_CHANGELOOK_SYSTEM:
  749.                 itemTransmutedVnum = player.GetItemTransmutation(slotNumber)
  750.                 if itemTransmutedVnum:
  751.                     self.wndItem.DisableCoverButton(i)
  752.                 else:
  753.                     self.wndItem.EnableCoverButton(i)
  754.  
  755.             if constInfo.IS_AUTO_POTION(itemVnum):
  756.                 metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
  757.                 if slotNumber >= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex:
  758.                     slotNumber -= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex
  759.                
  760.                 isActivated = 0 != metinSocket[0]
  761.                 if isActivated:
  762.                     self.wndItem.ActivateSlotOld(i)
  763.                     potionType = 0;
  764.                     if constInfo.IS_AUTO_POTION_HP(itemVnum):
  765.                         potionType = player.AUTO_POTION_TYPE_HP
  766.                     elif constInfo.IS_AUTO_POTION_SP(itemVnum):
  767.                         potionType = player.AUTO_POTION_TYPE_SP                    
  768.  
  769.                     usedAmount = int(metinSocket[1])
  770.                     totalAmount = int(metinSocket[2])                  
  771.                     player.SetAutoPotionInfo(potionType, isActivated, (totalAmount - usedAmount), totalAmount, self.__InventoryLocalSlotPosToGlobalSlotPos(i))
  772.                 else:
  773.                     self.wndItem.DeactivateSlotOld(i)
  774.  
  775.             if app.WJ_ENABLE_TRADABLE_ICON:
  776.                 self.RefreshMarkSlots(i)
  777.  
  778.             if app.ENABLE_SASH_SYSTEM or app.ENABLE_CHANGELOOK_SYSTEM:
  779.                 if not constInfo.IS_AUTO_POTION(itemVnum):
  780.                     self.wndItem.DeactivateSlotOld(i)
  781.  
  782.             if app.ENABLE_SASH_SYSTEM:
  783.                 slotNumberChecked = 0
  784.                 if not constInfo.IS_AUTO_POTION(itemVnum):
  785.                     self.wndItem.DeactivateSlot(i)
  786.                
  787.                 for j in xrange(sash.WINDOW_MAX_MATERIALS):
  788.                     (isHere, iCell) = sash.GetAttachedItem(j)
  789.                     if isHere:
  790.                         if iCell == slotNumber:
  791.                             self.wndItem.ActivateSlot(i, (238.00 / 255.0), (11.00 / 255.0), (11.00 / 255.0), 1.0)
  792.                             if not slotNumber in self.listAttachedSashs:
  793.                                 self.listAttachedSashs.append(slotNumber)
  794.  
  795.                             slotNumberChecked = 1
  796.                     else:
  797.                         if slotNumber in self.listAttachedSashs and not slotNumberChecked:
  798.                             self.wndItem.DeactivateSlot(i)
  799.                             self.listAttachedSashs.remove(slotNumber)
  800.  
  801.             if app.ENABLE_CHANGELOOK_SYSTEM:
  802.                 slotClNumberChecked = 0
  803.                 for q in xrange(changelook.WINDOW_MAX_MATERIALS):
  804.                     (isHere, iCell) = changelook.GetAttachedItem(q)
  805.                     if isHere:
  806.                         if iCell == slotNumber:
  807.                             self.wndItem.ActivateSlot(i, (238.00 / 255.0), (11.00 / 255.0), (11.00 / 255.0), 1.0)
  808.                             if not slotNumber in self.listAttachedCl:
  809.                                 self.listAttachedCl.append(slotNumber)
  810.  
  811.                             slotClNumberChecked = 1
  812.                     else:
  813.                         if slotNumber in self.listAttachedCl and not slotClNumberChecked:
  814.                             self.wndItem.DeactivateSlot(i)
  815.                             self.listAttachedCl.remove(slotNumber)
  816.  
  817.             if itemVnum >= 20203 and itemVnum <= 20208:
  818.                 metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
  819.            
  820.                 if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
  821.                     slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
  822.            
  823.                 isActivated = 0 != metinSocket[0]
  824.            
  825.                 if isActivated:
  826.                     self.wndItem.ActivateSlot(slotNumber, (55.00 / 355.0), (315.00 / 255.0), (225.00 / 255.0), 1.0)
  827.                 else:
  828.                     self.wndItem.DeactivateSlot(i)
  829.  
  830. ##Effecte diferite
  831.             if 20202 == itemVnum:
  832.                 metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
  833.            
  834.                 if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
  835.                     slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
  836.            
  837.                 isActivated = 0 != metinSocket[0]
  838.            
  839.                 if isActivated:
  840.                     self.wndItem.ActivateSlot(i, (32.00 / 255.0), (100.00 / 210.0), (0.00 / 255.0), 1.0)
  841.                 else:
  842.                     self.wndItem.DeactivateSlot(i)
  843.  
  844.             if 20201 == itemVnum:
  845.                 metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
  846.            
  847.                 if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
  848.                     slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
  849.            
  850.                 isActivated = 0 != metinSocket[0]
  851.            
  852.                 if isActivated:
  853.                     self.wndItem.ActivateSlot(i, (105.00 / 255.0), (32.00 / 210.0), (156.00 / 255.0), 1.0)
  854.                 else:
  855.                     self.wndItem.DeactivateSlot(i)
  856.  
  857.             if 20209 == itemVnum:
  858.                 metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
  859.            
  860.                 if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
  861.                     slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
  862.            
  863.                 isActivated = 0 != metinSocket[0]
  864.            
  865.                 if isActivated:
  866.                     self.wndItem.ActivateSlot(i, (255.00 / 255.0), (153.00 / 210.0), (51.00 / 255.0), 1.0)
  867.                 else:
  868.                     self.wndItem.DeactivateSlot(i)
  869.  
  870.             if 20210 == itemVnum:
  871.                 metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
  872.            
  873.                 if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
  874.                     slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
  875.            
  876.                 isActivated = 0 != metinSocket[0]
  877.            
  878.                 if isActivated:
  879.                     self.wndItem.ActivateSlot(i, (255.00 / 255.0), (0.00 / 210.0), (0.00 / 255.0), 1.0)
  880.                 else:
  881.                     self.wndItem.DeactivateSlot(i)
  882.  
  883.             if 20211 == itemVnum:
  884.                 metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
  885.            
  886.                 if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
  887.                     slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
  888.            
  889.                 isActivated = 0 != metinSocket[0]
  890.            
  891.                 if isActivated:
  892.                     self.wndItem.ActivateSlot(i, (51.00 / 255.0), (51.00 / 210.0), (255.00 / 255.0), 1.0)
  893.                 else:
  894.                     self.wndItem.DeactivateSlot(i)
  895.  
  896.             if 20212 == itemVnum:
  897.                 metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
  898.            
  899.                 if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
  900.                     slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
  901.            
  902.                 isActivated = 0 != metinSocket[0]
  903.            
  904.                 if isActivated:
  905.                     self.wndItem.ActivateSlot(i, (255.00 / 255.0), (255.00 / 210.0), (255.00 / 255.0), 1.0)
  906.                 else:
  907.                     self.wndItem.DeactivateSlot(i)
  908.  
  909.             if 20213 == itemVnum:
  910.                 metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
  911.            
  912.                 if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
  913.                     slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
  914.            
  915.                 isActivated = 0 != metinSocket[0]
  916.            
  917.                 if isActivated:
  918.                     self.wndItem.ActivateSlot(i, (51.00 / 255.0), (255.00 / 210.0), (51.00 / 255.0), 1.0)
  919.                 else:
  920.                     self.wndItem.DeactivateSlot(i)
  921.  
  922.             if 20214 == itemVnum:
  923.                 metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
  924.            
  925.                 if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
  926.                     slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
  927.            
  928.                 isActivated = 0 != metinSocket[0]
  929.            
  930.                 if isActivated:
  931.                     self.wndItem.ActivateSlot(i, (153.00 / 255.0), (153.00 / 210.0), (0.00 / 255.0), 1.0)
  932.                 else:
  933.                     self.wndItem.DeactivateSlot(i)
  934.         ##Effecte diferite
  935.  
  936.         self.RefreshValue()
  937.         self.wndItem.RefreshSlot()
  938.  
  939.         if self.wndBelt:
  940.             self.wndBelt.RefreshSlot()
  941.  
  942.         if app.WJ_ENABLE_TRADABLE_ICON:
  943.             map(lambda wnd:wnd.RefreshLockedSlot(), self.bindWnds)
  944.  
  945.     def RefreshEquipSlotWindow(self):
  946.         getItemVNum=player.GetItemIndex
  947.         getItemCount=player.GetItemCount
  948.         setItemVNum=self.wndEquip.SetItemSlot
  949.         for i in xrange(player.EQUIPMENT_PAGE_COUNT):
  950.             slotNumber = player.EQUIPMENT_SLOT_START + i
  951.             itemCount = getItemCount(slotNumber)
  952.             if itemCount <= 1:
  953.                 itemCount = 0
  954.            
  955.             setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount)
  956.             if app.ENABLE_CHANGELOOK_SYSTEM:
  957.                 itemTransmutedVnum = player.GetItemTransmutation(slotNumber)
  958.                 if itemTransmutedVnum:
  959.                     self.wndEquip.DisableCoverButton(slotNumber)
  960.                 else:
  961.                     self.wndEquip.EnableCoverButton(slotNumber)
  962.        
  963.         if app.ENABLE_NEW_EQUIPMENT_SYSTEM:
  964.             for i in xrange(player.NEW_EQUIPMENT_SLOT_COUNT):
  965.                 slotNumber = player.NEW_EQUIPMENT_SLOT_START + i
  966.                 itemCount = getItemCount(slotNumber)
  967.                 if itemCount <= 1:
  968.                     itemCount = 0
  969.                
  970.                 setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount)
  971.                 if app.ENABLE_CHANGELOOK_SYSTEM:
  972.                     itemTransmutedVnum = player.GetItemTransmutation(slotNumber)
  973.                     if itemTransmutedVnum:
  974.                         self.wndEquip.DisableCoverButton(slotNumber)
  975.                     else:
  976.                         self.wndEquip.EnableCoverButton(slotNumber)
  977.                
  978.                 print "ENABLE_NEW_EQUIPMENT_SYSTEM", slotNumber, itemCount, getItemVNum(slotNumber)
  979.        
  980.         self.wndEquip.RefreshSlot()
  981.        
  982.         if self.wndCostume:
  983.             self.wndCostume.RefreshCostumeSlot()
  984.  
  985.     def RefreshItemSlot(self):
  986.         self.RefreshBagSlotWindow()
  987.         self.RefreshEquipSlotWindow()
  988.         self.RefreshValue2()
  989.  
  990.     def RefreshStatus(self):
  991.         money = player.GetElk()
  992.         self.wndMoney.SetText(localeInfo.NumberToMoneyString(money))
  993.         gem = player.GetGem()
  994.         self.wndGem.SetText(str(gem))
  995.        
  996.     def SetItemToolTip(self, tooltipItem):
  997.         self.tooltipItem = tooltipItem
  998.  
  999.     def SellItem(self):
  1000.         if self.sellingSlotitemIndex == player.GetItemIndex(self.sellingSlotNumber):
  1001.             if self.sellingSlotitemCount == player.GetItemCount(self.sellingSlotNumber):
  1002.                 ## 용혼석도 팔리게 하는 기능 추가하면서 인자 type 추가
  1003.                 net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count, player.INVENTORY)
  1004.                 snd.PlaySound("sound/ui/money.wav")
  1005.         self.OnCloseQuestionDialog()
  1006.  
  1007.     if app.ENABLE_QUICK_SELL:
  1008.         def QuickSellItem(self, itemSlotIndex):
  1009.             itemIndex = player.GetItemIndex(itemSlotIndex)
  1010.             itemCount = player.GetItemCount(itemSlotIndex)
  1011.             if itemIndex == player.GetItemIndex(itemSlotIndex):
  1012.                 if itemCount == player.GetItemCount(itemSlotIndex):
  1013.                     net.SendShopSellPacketNew(itemSlotIndex, itemCount, player.INVENTORY)
  1014.                     snd.PlaySound("sound/ui/money.wav")
  1015.  
  1016.     def OnDetachMetinFromItem(self):
  1017.         if None == self.questionDialog:
  1018.             return
  1019.  
  1020.         #net.SendItemUseToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos)
  1021.         self.__SendUseItemToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos)
  1022.         self.OnCloseQuestionDialog()
  1023.  
  1024.     def OnCloseQuestionDialog(self):
  1025.         if not self.questionDialog:
  1026.             return
  1027.  
  1028.         self.questionDialog.Close()
  1029.         self.questionDialog = None
  1030.         constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
  1031.  
  1032.     ## Slot Event
  1033.     def SelectEmptySlot(self, selectedSlotPos):
  1034.         if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
  1035.             return
  1036.  
  1037.         selectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(selectedSlotPos)
  1038.  
  1039.         if mouseModule.mouseController.isAttached():
  1040.  
  1041.             attachedSlotType = mouseModule.mouseController.GetAttachedType()
  1042.             attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  1043.             attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()
  1044.             attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
  1045.  
  1046.             if player.SLOT_TYPE_INVENTORY == attachedSlotType:
  1047.                 itemCount = player.GetItemCount(attachedSlotPos)
  1048.                 attachedCount = mouseModule.mouseController.GetAttachedItemCount()
  1049.                 self.__SendMoveItemPacket(attachedSlotPos, selectedSlotPos, attachedCount)
  1050.  
  1051.                 if item.IsRefineScroll(attachedItemIndex):
  1052.                     self.wndItem.SetUseMode(False)
  1053.  
  1054.             elif app.ENABLE_SWITCHBOT and player.SLOT_TYPE_SWITCHBOT == attachedSlotType:
  1055.                 attachedCount = mouseModule.mouseController.GetAttachedItemCount()
  1056.                 net.SendItemMovePacket(player.SWITCHBOT, attachedSlotPos, player.INVENTORY, selectedSlotPos, attachedCount)
  1057.  
  1058.             elif player.SLOT_TYPE_PRIVATE_SHOP == attachedSlotType:
  1059.                 mouseModule.mouseController.RunCallBack("INVENTORY")
  1060.  
  1061.             elif player.SLOT_TYPE_SHOP == attachedSlotType:
  1062.                 net.SendShopBuyPacket(attachedSlotPos)
  1063.  
  1064.             elif player.SLOT_TYPE_SAFEBOX == attachedSlotType:
  1065.  
  1066.                 if player.ITEM_MONEY == attachedItemIndex:
  1067.                     net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
  1068.                     snd.PlaySound("sound/ui/money.wav")
  1069.  
  1070.                 else:
  1071.                     net.SendSafeboxCheckoutPacket(attachedSlotPos, selectedSlotPos)
  1072.  
  1073.             elif player.SLOT_TYPE_MALL == attachedSlotType:
  1074.                 net.SendMallCheckoutPacket(attachedSlotPos, selectedSlotPos)
  1075.  
  1076.             mouseModule.mouseController.DeattachObject()
  1077.  
  1078.     def SelectItemSlot(self, itemSlotIndex):
  1079.         if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
  1080.             return
  1081.  
  1082.         itemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(itemSlotIndex)
  1083.  
  1084.         if mouseModule.mouseController.isAttached():
  1085.             attachedSlotType = mouseModule.mouseController.GetAttachedType()
  1086.             attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  1087.             attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()
  1088.  
  1089.             if app.ENABLE_SPECIAL_STORAGE:
  1090.                 if player.SLOT_TYPE_INVENTORY == attachedSlotType or player.SLOT_TYPE_STONE_INVENTORY == attachedSlotType:
  1091.                     self.__DropSrcItemToDestItemInInventory(attachedItemVID, attachedSlotPos, itemSlotIndex)
  1092.             else:
  1093.                 if player.SLOT_TYPE_INVENTORY == attachedSlotType:
  1094.                     self.__DropSrcItemToDestItemInInventory(attachedItemVID, attachedSlotPos, itemSlotIndex)
  1095.  
  1096.             mouseModule.mouseController.DeattachObject()
  1097.  
  1098.         else:
  1099.  
  1100.             curCursorNum = app.GetCursor()
  1101.             if app.SELL == curCursorNum:
  1102.                 self.__SellItem(itemSlotIndex)
  1103.  
  1104.             elif app.BUY == curCursorNum:
  1105.                 chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SHOP_BUY_INFO)
  1106.  
  1107.             elif app.IsPressed(app.DIK_LALT):
  1108.                 link = player.GetItemLink(itemSlotIndex)
  1109.                 ime.PasteString(link)
  1110.  
  1111.             elif app.IsPressed(app.DIK_LSHIFT):
  1112.                 itemCount = player.GetItemCount(itemSlotIndex)
  1113.  
  1114.                 if itemCount > 1:
  1115.                     self.dlgPickMoney.SetTitleName(localeInfo.PICK_ITEM_TITLE)
  1116.                     self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickItem))
  1117.                     self.dlgPickMoney.Open(itemCount)
  1118.                     self.dlgPickMoney.itemGlobalSlotIndex = itemSlotIndex
  1119.                 #else:
  1120.                     #selectedItemVNum = player.GetItemIndex(itemSlotIndex)
  1121.                     #mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum)
  1122.  
  1123.             elif app.IsPressed(app.DIK_LCONTROL):
  1124.                 itemIndex = player.GetItemIndex(itemSlotIndex)
  1125.  
  1126.                 if True == item.CanAddToQuickSlotItem(itemIndex):
  1127.                     player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_INVENTORY, itemSlotIndex)
  1128.                 else:
  1129.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.QUICKSLOT_REGISTER_DISABLE_ITEM)
  1130.  
  1131.             else:
  1132.                 selectedItemVNum = player.GetItemIndex(itemSlotIndex)
  1133.                 itemCount = player.GetItemCount(itemSlotIndex)
  1134.                 mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount)
  1135.  
  1136.                 if self.__IsUsableItemToItem(selectedItemVNum, itemSlotIndex):
  1137.                     self.wndItem.SetUseMode(True)
  1138.                 else:
  1139.                     self.wndItem.SetUseMode(False)
  1140.  
  1141.                 snd.PlaySound("sound/ui/pick.wav")
  1142.  
  1143.     def __DropSrcItemToDestItemInInventory(self, srcItemVID, srcItemSlotPos, dstItemSlotPos):
  1144.         if app.ENABLE_SPECIAL_STORAGE:
  1145.             if srcItemSlotPos == dstItemSlotPos and not item.IsMetin(srcItemVID):
  1146.                 return
  1147.         else:
  1148.             if srcItemSlotPos == dstItemSlotPos:
  1149.                 return
  1150.  
  1151.         # cyh itemseal 2013 11 08
  1152.         if app.ENABLE_SEALBIND_SYSTEM and item.IsSealScroll(srcItemVID):
  1153.             self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)
  1154.  
  1155.         elif item.IsRefineScroll(srcItemVID):
  1156.             self.RefineItem(srcItemSlotPos, dstItemSlotPos)
  1157.             self.wndItem.SetUseMode(False)
  1158.  
  1159.         elif item.IsMetin(srcItemVID):
  1160.             self.AttachMetinToItem(srcItemSlotPos, dstItemSlotPos)
  1161.  
  1162.         elif item.IsDetachScroll(srcItemVID):
  1163.             self.DetachMetinFromItem(srcItemSlotPos, dstItemSlotPos)
  1164.  
  1165.         elif item.IsKey(srcItemVID):
  1166.             self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)
  1167.  
  1168.         elif (player.GetItemFlags(srcItemSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
  1169.             self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)
  1170.  
  1171.         elif item.GetUseType(srcItemVID) in self.USE_TYPE_TUPLE:
  1172.             self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)
  1173.  
  1174.         else:
  1175.             #snd.PlaySound("sound/ui/drop.wav")
  1176.  
  1177.             ## 이동시킨 곳이 장착 슬롯일 경우 아이템을 사용해서 장착 시킨다 - [levites]
  1178.             if player.IsEquipmentSlot(dstItemSlotPos):
  1179.  
  1180.                 ## 들고 있는 아이템이 장비일때만
  1181.                 if item.IsEquipmentVID(srcItemVID):
  1182.                     self.__UseItem(srcItemSlotPos)
  1183.  
  1184.             else:
  1185.                 self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0)
  1186.                 #net.SendItemMovePacket(srcItemSlotPos, dstItemSlotPos, 0)
  1187.  
  1188.     def __SellItem(self, itemSlotPos):
  1189.         if not player.IsEquipmentSlot(itemSlotPos):
  1190.             self.sellingSlotNumber = itemSlotPos
  1191.             itemIndex = player.GetItemIndex(itemSlotPos)
  1192.             itemCount = player.GetItemCount(itemSlotPos)
  1193.  
  1194.  
  1195.             self.sellingSlotitemIndex = itemIndex
  1196.             self.sellingSlotitemCount = itemCount
  1197.  
  1198.             item.SelectItem(itemIndex)
  1199.             ## 안티 플레그 검사 빠져서 추가
  1200.             ## 20140220
  1201.             if item.IsAntiFlag(item.ANTIFLAG_SELL):
  1202.                 popup = uiCommon.PopupDialog()
  1203.                 popup.SetText(localeInfo.SHOP_CANNOT_SELL_ITEM)
  1204.                 popup.SetAcceptEvent(self.__OnClosePopupDialog)
  1205.                 popup.Open()
  1206.                 self.popup = popup
  1207.                 return
  1208.  
  1209.             itemPrice = item.GetISellItemPrice()
  1210.  
  1211.             if item.Is1GoldItem():
  1212.                 itemPrice = itemCount / itemPrice / 5
  1213.             else:
  1214.                 itemPrice = itemPrice * itemCount / 5
  1215.  
  1216.             item.GetItemName(itemIndex)
  1217.             itemName = item.GetItemName()
  1218.  
  1219.             self.questionDialog = uiCommon.QuestionDialog()
  1220.             self.questionDialog.SetText(localeInfo.DO_YOU_SELL_ITEM(itemName, itemCount, itemPrice))
  1221.             self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.SellItem))
  1222.             self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
  1223.             self.questionDialog.Open()
  1224.             self.questionDialog.count = itemCount
  1225.  
  1226.             constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
  1227.  
  1228.     def __OnClosePopupDialog(self):
  1229.         self.pop = None
  1230.  
  1231.     def RefineItem(self, scrollSlotPos, targetSlotPos):
  1232.  
  1233.         scrollIndex = player.GetItemIndex(scrollSlotPos)
  1234.         targetIndex = player.GetItemIndex(targetSlotPos)
  1235.  
  1236.         if player.REFINE_OK != player.CanRefine(scrollIndex, targetSlotPos):
  1237.             return
  1238.  
  1239.         ###########################################################
  1240.         self.__SendUseItemToItemPacket(scrollSlotPos, targetSlotPos)
  1241.         #net.SendItemUseToItemPacket(scrollSlotPos, targetSlotPos)
  1242.         return
  1243.         ###########################################################
  1244.  
  1245.         ###########################################################
  1246.         #net.SendRequestRefineInfoPacket(targetSlotPos)
  1247.         #return
  1248.         ###########################################################
  1249.  
  1250.         result = player.CanRefine(scrollIndex, targetSlotPos)
  1251.  
  1252.         if player.REFINE_ALREADY_MAX_SOCKET_COUNT == result:
  1253.             #snd.PlaySound("sound/ui/jaeryun_fail.wav")
  1254.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_MORE_SOCKET)
  1255.  
  1256.         elif player.REFINE_NEED_MORE_GOOD_SCROLL == result:
  1257.             #snd.PlaySound("sound/ui/jaeryun_fail.wav")
  1258.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NEED_BETTER_SCROLL)
  1259.  
  1260.         elif player.REFINE_CANT_MAKE_SOCKET_ITEM == result:
  1261.             #snd.PlaySound("sound/ui/jaeryun_fail.wav")
  1262.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_SOCKET_DISABLE_ITEM)
  1263.  
  1264.         elif player.REFINE_NOT_NEXT_GRADE_ITEM == result:
  1265.             #snd.PlaySound("sound/ui/jaeryun_fail.wav")
  1266.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_UPGRADE_DISABLE_ITEM)
  1267.  
  1268.         elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result:
  1269.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM)
  1270.  
  1271.         if player.REFINE_OK != result:
  1272.             return
  1273.  
  1274.         self.refineDialog.Open(scrollSlotPos, targetSlotPos)
  1275.  
  1276.     def DetachMetinFromItem(self, scrollSlotPos, targetSlotPos):
  1277.         scrollIndex = player.GetItemIndex(scrollSlotPos)
  1278.         targetIndex = player.GetItemIndex(targetSlotPos)
  1279.         if app.ENABLE_SASH_SYSTEM and app.ENABLE_CHANGELOOK_SYSTEM:
  1280.             if not player.CanDetach(scrollIndex, targetSlotPos):
  1281.                 item.SelectItem(scrollIndex)
  1282.                 if item.GetValue(0) == sash.CLEAN_ATTR_VALUE0:
  1283.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SASH_FAILURE_CLEAN)
  1284.                 elif item.GetValue(0) == changelook.CLEAN_ATTR_VALUE0:
  1285.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CHANGE_LOOK_FAILURE_CLEAN)
  1286.                 else:
  1287.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
  1288.                
  1289.                 return
  1290.         elif app.ENABLE_SASH_SYSTEM:
  1291.             if not player.CanDetach(scrollIndex, targetSlotPos):
  1292.                 item.SelectItem(scrollIndex)
  1293.                 if item.GetValue(0) == sash.CLEAN_ATTR_VALUE0:
  1294.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SASH_FAILURE_CLEAN)
  1295.                 else:
  1296.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
  1297.  
  1298.                 return
  1299.         elif app.ENABLE_CHANGELOOK_SYSTEM:
  1300.             if not player.CanDetach(scrollIndex, targetSlotPos):
  1301.                 item.SelectItem(scrollIndex)
  1302.                 if item.GetValue(0) == changelook.CLEAN_ATTR_VALUE0:
  1303.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CHANGE_LOOK_FAILURE_CLEAN)
  1304.                 else:
  1305.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
  1306.  
  1307.                 return
  1308.         else:
  1309.             if not player.CanDetach(scrollIndex, targetSlotPos):
  1310.                 chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
  1311.                 return
  1312.        
  1313.         self.questionDialog = uiCommon.QuestionDialog()
  1314.         self.questionDialog.SetText(localeInfo.REFINE_DO_YOU_SEPARATE_METIN)
  1315.         if app.ENABLE_SASH_SYSTEM:
  1316.             item.SelectItem(targetIndex)
  1317.             if item.GetItemType() == item.ITEM_TYPE_COSTUME and item.GetItemSubType() == item.COSTUME_TYPE_SASH:
  1318.                 item.SelectItem(scrollIndex)
  1319.                 if item.GetValue(0) == sash.CLEAN_ATTR_VALUE0:
  1320.                     self.questionDialog.SetText(localeInfo.SASH_DO_YOU_CLEAN)
  1321.  
  1322.         if app.ENABLE_CHANGELOOK_SYSTEM:
  1323.             item.SelectItem(targetIndex)
  1324.             if item.GetItemType() == item.ITEM_TYPE_WEAPON or item.GetItemType() == item.ITEM_TYPE_ARMOR or item.GetItemType() == item.ITEM_TYPE_COSTUME:
  1325.                 item.SelectItem(scrollIndex)
  1326.                 if item.GetValue(0) == changelook.CLEAN_ATTR_VALUE0:
  1327.                     self.questionDialog.SetText(localeInfo.CHANGE_LOOK_DO_YOU_CLEAN)
  1328.  
  1329.         self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnDetachMetinFromItem))
  1330.         self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
  1331.         self.questionDialog.Open()
  1332.         self.questionDialog.sourcePos = scrollSlotPos
  1333.         self.questionDialog.targetPos = targetSlotPos
  1334.        
  1335.     def AttachMetinToItem(self, metinSlotPos, targetSlotPos):
  1336.         if app.ENABLE_SPECIAL_STORAGE:
  1337.             metinIndex = player.GetItemIndex(player.STONE_INVENTORY, metinSlotPos)
  1338.         else:
  1339.             metinIndex = player.GetItemIndex(metinSlotPos)
  1340.         targetIndex = player.GetItemIndex(targetSlotPos)
  1341.  
  1342.         item.SelectItem(metinIndex)
  1343.         itemName = item.GetItemName()
  1344.  
  1345.         result = player.CanAttachMetin(metinIndex, targetSlotPos)
  1346.  
  1347.         if player.ATTACH_METIN_NOT_MATCHABLE_ITEM == result:
  1348.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_CAN_NOT_ATTACH(itemName))
  1349.  
  1350.         if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result:
  1351.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_SOCKET(itemName))
  1352.  
  1353.         elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result:
  1354.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_GOLD_SOCKET(itemName))
  1355.  
  1356.         elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result:
  1357.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM)
  1358.  
  1359.         if player.ATTACH_METIN_OK != result:
  1360.             return
  1361.  
  1362.         self.attachMetinDialog.Open(metinSlotPos, targetSlotPos)
  1363.  
  1364.  
  1365.  
  1366.     def OverOutItem(self):
  1367.         self.wndItem.SetUsableItem(False)
  1368.         if None != self.tooltipItem:
  1369.             self.tooltipItem.HideToolTip()
  1370.  
  1371.     def OverInItem(self, overSlotPos):
  1372.  
  1373.         overSlotPosGlobal = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos)
  1374.         self.wndItem.SetUsableItem(False)
  1375.  
  1376.  
  1377.         if mouseModule.mouseController.isAttached():
  1378.             attachedItemType = mouseModule.mouseController.GetAttachedType()
  1379.             if app.ENABLE_SPECIAL_STORAGE:
  1380.                 if player.SLOT_TYPE_INVENTORY == attachedItemType or player.SLOT_TYPE_STONE_INVENTORY == attachedItemType:
  1381.                     attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  1382.                     attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex()
  1383.    
  1384.                     if self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPosGlobal):
  1385.                         self.wndItem.SetUsableItem(True)
  1386.                         self.wndItem.SetUseMode(True)
  1387.                         self.ShowToolTip(overSlotPosGlobal)
  1388.                         return
  1389.  
  1390.  
  1391.             else:
  1392.                 if player.SLOT_TYPE_INVENTORY == attachedItemType:
  1393.                     attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  1394.                     attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex()
  1395.    
  1396.                     if self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPos):
  1397.                         self.wndItem.SetUsableItem(True)
  1398.                         self.ShowToolTip(overSlotPos)
  1399.                         return
  1400.  
  1401.         self.ShowToolTip(overSlotPosGlobal)
  1402.  
  1403.  
  1404.     def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos):
  1405.         "다른 아이템에 사용할 수 있는 아이템인가?"
  1406.  
  1407.         if item.IsRefineScroll(srcItemVNum):
  1408.             return True
  1409.         elif item.IsMetin(srcItemVNum):
  1410.             return True
  1411.         elif item.IsDetachScroll(srcItemVNum):
  1412.             return True
  1413.         elif item.IsKey(srcItemVNum):
  1414.             return True
  1415.         elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
  1416.             return True
  1417.         else:
  1418.             if item.GetUseType(srcItemVNum) in self.USE_TYPE_TUPLE:
  1419.                 return True
  1420.  
  1421.         return False
  1422.  
  1423.     def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos):
  1424.         "대상 아이템에 사용할 수 있는가?"
  1425.  
  1426.         if app.ENABLE_SPECIAL_STORAGE:
  1427.             if srcSlotPos == dstSlotPos and not item.IsMetin(srcItemVNum):
  1428.                 return False
  1429.         else:
  1430.             if srcSlotPos == dstSlotPos:
  1431.                 return False
  1432.  
  1433.         if item.IsRefineScroll(srcItemVNum):
  1434.             if player.REFINE_OK == player.CanRefine(srcItemVNum, dstSlotPos):
  1435.                 return True
  1436.         elif item.IsMetin(srcItemVNum):
  1437.             if player.ATTACH_METIN_OK == player.CanAttachMetin(srcItemVNum, dstSlotPos):
  1438.                 return True
  1439.         elif item.IsDetachScroll(srcItemVNum):
  1440.             if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos):
  1441.                 return True
  1442.         elif item.IsKey(srcItemVNum):
  1443.             if player.CanUnlock(srcItemVNum, dstSlotPos):
  1444.                 return True
  1445.  
  1446.         elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
  1447.             return True
  1448.  
  1449.         else:
  1450.             useType=item.GetUseType(srcItemVNum)
  1451.  
  1452.             if "USE_CLEAN_SOCKET" == useType:
  1453.                 if self.__CanCleanBrokenMetinStone(dstSlotPos):
  1454.                     return True
  1455.             elif "USE_CHANGE_ATTRIBUTE" == useType:
  1456.                 if self.__CanChangeItemAttrList(dstSlotPos):
  1457.                     return True
  1458.             elif "USE_ADD_ATTRIBUTE" == useType:
  1459.                 if self.__CanAddItemAttr(dstSlotPos):
  1460.                     return True
  1461.             elif "USE_ADD_ATTRIBUTE2" == useType:
  1462.                 if self.__CanAddItemAttr(dstSlotPos):
  1463.                     return True
  1464.             elif "USE_ADD_ACCESSORY_SOCKET" == useType:
  1465.                 if self.__CanAddAccessorySocket(dstSlotPos):
  1466.                     return True
  1467.             elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType:
  1468.                 if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum):
  1469.                     return True;
  1470.             elif "USE_PUT_INTO_BELT_SOCKET" == useType:
  1471.                 dstItemVNum = player.GetItemIndex(dstSlotPos)
  1472.                 print "USE_PUT_INTO_BELT_SOCKET", srcItemVNum, dstItemVNum
  1473.  
  1474.                 item.SelectItem(dstItemVNum)
  1475.  
  1476.                 if item.ITEM_TYPE_BELT == item.GetItemType():
  1477.                     return True
  1478.  
  1479.         return False
  1480.  
  1481.     def __CanCleanBrokenMetinStone(self, dstSlotPos):
  1482.         dstItemVNum = player.GetItemIndex(dstSlotPos)
  1483.         if dstItemVNum == 0:
  1484.             return False
  1485.  
  1486.         item.SelectItem(dstItemVNum)
  1487.  
  1488.         if item.ITEM_TYPE_WEAPON != item.GetItemType():
  1489.             return False
  1490.  
  1491.         for i in xrange(player.METIN_SOCKET_MAX_NUM):
  1492.             if player.GetItemMetinSocket(dstSlotPos, i) == constInfo.ERROR_METIN_STONE:
  1493.                 return True
  1494.  
  1495.         return False
  1496.  
  1497.     def __CanChangeItemAttrList(self, dstSlotPos):
  1498.         dstItemVNum = player.GetItemIndex(dstSlotPos)
  1499.         if dstItemVNum == 0:
  1500.             return False
  1501.  
  1502.         item.SelectItem(dstItemVNum)
  1503.  
  1504.         if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR):
  1505.             return False
  1506.  
  1507.         for i in xrange(player.METIN_SOCKET_MAX_NUM):
  1508.             if player.GetItemAttribute(dstSlotPos, i) != 0:
  1509.                 return True
  1510.  
  1511.         return False
  1512.  
  1513.     def __CanPutAccessorySocket(self, dstSlotPos, mtrlVnum):
  1514.         dstItemVNum = player.GetItemIndex(dstSlotPos)
  1515.         if dstItemVNum == 0:
  1516.             return False
  1517.  
  1518.         item.SelectItem(dstItemVNum)
  1519.  
  1520.         if item.GetItemType() != item.ITEM_TYPE_ARMOR:
  1521.             return False
  1522.  
  1523.         if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR):
  1524.             return False
  1525.  
  1526.         curCount = player.GetItemMetinSocket(dstSlotPos, 0)
  1527.         maxCount = player.GetItemMetinSocket(dstSlotPos, 1)
  1528.  
  1529.         if mtrlVnum != constInfo.GET_ACCESSORY_MATERIAL_VNUM(dstItemVNum, item.GetItemSubType()):
  1530.             return False
  1531.  
  1532.         if curCount>=maxCount:
  1533.             return False
  1534.  
  1535.         return True
  1536.  
  1537.     def __CanAddAccessorySocket(self, dstSlotPos):
  1538.         dstItemVNum = player.GetItemIndex(dstSlotPos)
  1539.         if dstItemVNum == 0:
  1540.             return False
  1541.  
  1542.         item.SelectItem(dstItemVNum)
  1543.  
  1544.         if item.GetItemType() != item.ITEM_TYPE_ARMOR:
  1545.             return False
  1546.  
  1547.         if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR):
  1548.             return False
  1549.  
  1550.         curCount = player.GetItemMetinSocket(dstSlotPos, 0)
  1551.         maxCount = player.GetItemMetinSocket(dstSlotPos, 1)
  1552.  
  1553.         ACCESSORY_SOCKET_MAX_SIZE = 3
  1554.         if maxCount >= ACCESSORY_SOCKET_MAX_SIZE:
  1555.             return False
  1556.  
  1557.         return True
  1558.  
  1559.     def __CanAddItemAttr(self, dstSlotPos):
  1560.         dstItemVNum = player.GetItemIndex(dstSlotPos)
  1561.         if dstItemVNum == 0:
  1562.             return False
  1563.  
  1564.         item.SelectItem(dstItemVNum)
  1565.  
  1566.         if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR):
  1567.             return False
  1568.  
  1569.         attrCount = 0
  1570.         for i in xrange(player.METIN_SOCKET_MAX_NUM):
  1571.             if player.GetItemAttribute(dstSlotPos, i) != 0:
  1572.                 attrCount += 1
  1573.  
  1574.         if attrCount<4:
  1575.             return True
  1576.  
  1577.         return False
  1578.  
  1579.     def ShowToolTip(self, slotIndex):
  1580.         if None != self.tooltipItem:
  1581.             self.tooltipItem.SetInventoryItem(slotIndex)
  1582.  
  1583.     def OnTop(self):
  1584.         if None != self.tooltipItem:
  1585.             self.tooltipItem.SetTop()
  1586.  
  1587.         if app.WJ_ENABLE_TRADABLE_ICON:
  1588.             map(lambda wnd:wnd.RefreshLockedSlot(), self.bindWnds)
  1589.             self.RefreshMarkSlots()
  1590.  
  1591.     def OnPressEscapeKey(self):
  1592.         self.Close()
  1593.         return True
  1594.  
  1595.     def UseItemSlot(self, slotIndex):
  1596.         curCursorNum = app.GetCursor()
  1597.         if app.SELL == curCursorNum:
  1598.             return
  1599.            
  1600.         if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS():
  1601.             return
  1602.  
  1603.         slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex)
  1604.  
  1605.         if app.ENABLE_QUICK_SELL:
  1606.             import shop
  1607.             if app.IsPressed(app.DIK_LSHIFT) or app.IsPressed(app.DIK_RSHIFT):
  1608.                 if shop.IsOpen():
  1609.                     if not shop.IsPrivateShop():
  1610.                         self.QuickSellItem(slotIndex)
  1611.                         return
  1612.  
  1613.         if app.ENABLE_DRAGON_SOUL_SYSTEM:
  1614.             if self.wndDragonSoulRefine.IsShow():
  1615.                 self.wndDragonSoulRefine.AutoSetItem((player.INVENTORY, slotIndex), 1)
  1616.                 return
  1617.        
  1618.         if app.ENABLE_SASH_SYSTEM:
  1619.             if self.isShowSashWindow():
  1620.                 sash.Add(player.INVENTORY, slotIndex, 255)
  1621.                 return
  1622.  
  1623.         if app.ENABLE_CHANGELOOK_SYSTEM:
  1624.             if self.isShowChangeLookWindow():
  1625.                 changelook.Add(player.INVENTORY, slotIndex, 255)
  1626.                 return
  1627.  
  1628.         self.__UseItem(slotIndex)
  1629.         mouseModule.mouseController.DeattachObject()
  1630.         self.OverOutItem()
  1631.  
  1632.     def __UseItem(self, slotIndex):
  1633.         ItemVNum = player.GetItemIndex(slotIndex)
  1634.         item.SelectItem(ItemVNum)
  1635.  
  1636.         if player.GetItemTypeBySlot(slotIndex) == item.ITEM_TYPE_GIFTBOX:
  1637.             if app.ENABLE_SHOW_CHEST_DROP:
  1638.                 if self.interface:
  1639.                     if self.interface.dlgChestDrop:
  1640.                         if not self.interface.dlgChestDrop.IsShow():
  1641.                             self.interface.dlgChestDrop.Open(slotIndex)
  1642.                             net.SendChestDropInfo(slotIndex)
  1643.         elif player.GetItemTypeBySlot(slotIndex) == item.ITEM_TYPE_GACHA:
  1644.             if app.ENABLE_SHOW_CHEST_DROP:
  1645.                 if self.interface:
  1646.                     if self.interface.dlgChestDrop:
  1647.                         if not self.interface.dlgChestDrop.IsShow():
  1648.                             self.interface.dlgChestDrop.Open(slotIndex)
  1649.                             net.SendChestDropInfo(slotIndex)
  1650.         else:
  1651.             net.SendItemUsePacket(slotIndex)
  1652.             #net.SendItemUsePacket(slotIndex)
  1653.  
  1654.     def __UseItemQuestionDialog_OnCancel(self):
  1655.         self.OnCloseQuestionDialog()
  1656.  
  1657.     def __UseItemQuestionDialog_OnAccept(self):
  1658.         self.__SendUseItemPacket(self.questionDialog.slotIndex)
  1659.         self.OnCloseQuestionDialog()
  1660.  
  1661.     def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos):
  1662.         # 개인상점 열고 있는 동안 아이템 사용 방지
  1663.         if uiPrivateShopBuilder.IsBuildingPrivateShop():
  1664.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
  1665.             return
  1666.  
  1667.         net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)
  1668.  
  1669.     def __SendUseItemPacket(self, slotPos):
  1670.         # 개인상점 열고 있는 동안 아이템 사용 방지
  1671.         if uiPrivateShopBuilder.IsBuildingPrivateShop():
  1672.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
  1673.             return
  1674.  
  1675.         net.SendItemUsePacket(slotPos)
  1676.  
  1677.     def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
  1678.         # 개인상점 열고 있는 동안 아이템 사용 방지
  1679.         if uiPrivateShopBuilder.IsBuildingPrivateShop():
  1680.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
  1681.             return
  1682.  
  1683.         net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount)
  1684.  
  1685.     def SetDragonSoulRefineWindow(self, wndDragonSoulRefine):
  1686.         if app.ENABLE_DRAGON_SOUL_SYSTEM:
  1687.             self.wndDragonSoulRefine = wndDragonSoulRefine
  1688.            
  1689.     if app.ENABLE_SASH_SYSTEM:
  1690.         def SetSashWindow(self, wndSashCombine, wndSashAbsorption):
  1691.             self.wndSashCombine = wndSashCombine
  1692.             self.wndSashAbsorption = wndSashAbsorption
  1693.  
  1694.         def isShowSashWindow(self):
  1695.             if self.wndSashCombine:
  1696.                 if self.wndSashCombine.IsShow():
  1697.                     return 1
  1698.  
  1699.             if self.wndSashAbsorption:
  1700.                 if self.wndSashAbsorption.IsShow():
  1701.                     return 1
  1702.            
  1703.             return 0
  1704.            
  1705.     if app.ENABLE_CHANGELOOK_SYSTEM:
  1706.         def SetChangeLookWindow(self, wndChangeLook):
  1707.             self.wndChangeLook = wndChangeLook
  1708.  
  1709.         def isShowChangeLookWindow(self):
  1710.             if self.wndChangeLook:
  1711.                 if self.wndChangeLook.IsShow():
  1712.                     return 1
  1713.  
  1714.             return 0
  1715.  
  1716.     def OnMoveWindow(self, x, y):
  1717. #       print "Inventory Global Pos : ", self.GetGlobalPosition()
  1718.         if self.wndBelt:
  1719. #           print "Belt Global Pos : ", self.wndBelt.GetGlobalPosition()
  1720.             self.wndBelt.AdjustPositionAndSize()
  1721.  
  1722.     def OnRunMouseWheel(self, nLen):
  1723.         if nLen > 0:
  1724.             if self.inventoryPageIndex < 3:
  1725.                 self.SetInventoryPage(self.inventoryPageIndex + 1)
  1726.         else:
  1727.             if self.inventoryPageIndex > 0:
  1728.                 self.SetInventoryPage(self.inventoryPageIndex - 1)
  1729.  
  1730.     def RefreshValue(self):
  1731.         getItemVNum=player.GetItemIndex
  1732.         for i in xrange(player.INVENTORY_PAGE_SIZE):
  1733.             slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
  1734.             if constInfo.ValidateObject(getItemVNum(slotNumber)) == True:
  1735.                 self.wndItem.SetValueItem(i, str(constInfo.ObtainVnum(getItemVNum(slotNumber))))
  1736.  
  1737.                    
  1738.     def RefreshValue2(self):
  1739.         getItemVNum=player.GetItemIndex
  1740.         for i in xrange(player.EQUIPMENT_PAGE_COUNT):
  1741.             slotNumber = player.EQUIPMENT_SLOT_START + i
  1742.             if constInfo.ValidateObject(getItemVNum(slotNumber)) == True:
  1743.                 self.wndEquip.SetValueItem(slotNumber, str(constInfo.ObtainVnum(getItemVNum(slotNumber))))
  1744.  
  1745.         if app.ENABLE_NEW_EQUIPMENT_SYSTEM:
  1746.             for i in xrange(player.NEW_EQUIPMENT_SLOT_COUNT):
  1747.                 slotNumber = player.NEW_EQUIPMENT_SLOT_START + i
  1748.                 if constInfo.ValidateObject(getItemVNum(slotNumber)) == True:
  1749.                     self.wndEquip.SetValueItem(slotNumber, str(constInfo.ObtainVnum(getItemVNum(slotNumber))))
  1750.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement