Advertisement
Guest User

Untitled

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