Advertisement
Guest User

Untitled

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