1. import app
  2. import net
  3. import player
  4. import item
  5. import ui
  6. import uiToolTip
  7. import mouseModule
  8. import localeInfo
  9. import uiCommon
  10. import constInfo
  11. if app.ENABLE_REFINE_ABILITY:
  12. import refine_ability
  13. class RefineDialog(ui.ScriptWindow):
  14. makeSocketSuccessPercentage = ( 100, 33, 20, 15, 10, 5, 0 )
  15. upgradeStoneSuccessPercentage = ( 30, 29, 28, 27, 26, 25, 24, 23, 22 )
  16. upgradeArmorSuccessPercentage = ( 99, 66, 33, 33, 33, 33, 33, 33, 33 )
  17. upgradeAccessorySuccessPercentage = ( 99, 88, 77, 66, 33, 33, 33, 33, 33 )
  18. upgradeSuccessPercentage = ( 99, 66, 33, 33, 33, 33, 33, 33, 33 )
  19. def __init__(self):
  20. ui.ScriptWindow.__init__(self)
  21. self.__LoadScript()
  22. self.scrollItemPos = 0
  23. self.targetItemPos = 0
  24. def __LoadScript(self):
  25. self.__LoadQuestionDialog()
  26. try:
  27. pyScrLoader = ui.PythonScriptLoader()
  28. pyScrLoader.LoadScriptFile(self, "uiscript/refinedialog.py")
  29. except:
  30. import exception
  31. exception.Abort("RefineDialog.__LoadScript.LoadObject")
  32. try:
  33. self.board = self.GetChild("Board")
  34. self.titleBar = self.GetChild("TitleBar")
  35. self.successPercentage = self.GetChild("SuccessPercentage")
  36. self.GetChild("AcceptButton").SetEvent(self.OpenQuestionDialog)
  37. self.GetChild("CancelButton").SetEvent(self.Close)
  38. except:
  39. import exception
  40. exception.Abort("RefineDialog.__LoadScript.BindObject")
  41. ## 936 : 개량 확률 표시 안함
  42. ##if 936 == app.GetDefaultCodePage():
  43. if constInfo.ENABLE_REFINE_PCT:
  44. self.successPercentage.Show()
  45. else:
  46. self.successPercentage.Hide()
  47. toolTip = uiToolTip.ItemToolTip()
  48. toolTip.SetParent(self)
  49. toolTip.SetPosition(15, 38)
  50. toolTip.SetFollow(False)
  51. toolTip.Show()
  52. self.toolTip = toolTip
  53. self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  54. def __del__(self):
  55. ui.ScriptWindow.__del__(self)
  56. def __LoadQuestionDialog(self):
  57. self.dlgQuestion = ui.ScriptWindow()
  58. try:
  59. pyScrLoader = ui.PythonScriptLoader()
  60. pyScrLoader.LoadScriptFile(self.dlgQuestion, "uiscript/questiondialog2.py")
  61. except:
  62. import exception
  63. exception.Abort("RefineDialog.__LoadQuestionDialog.LoadScript")
  64. try:
  65. GetObject=self.dlgQuestion.GetChild
  66. GetObject("message1").SetText(localeInfo.REFINE_DESTROY_WARNING)
  67. GetObject("message2").SetText(localeInfo.REFINE_WARNING2)
  68. GetObject("accept").SetEvent(ui.__mem_func__(self.Accept))
  69. GetObject("cancel").SetEvent(ui.__mem_func__(self.dlgQuestion.Hide))
  70. except:
  71. import exception
  72. exception.Abort("SelectCharacterWindow.__LoadQuestionDialog.BindObject")
  73. def Destroy(self):
  74. self.ClearDictionary()
  75. self.board = 0
  76. self.successPercentage = 0
  77. self.titleBar = 0
  78. self.toolTip = 0
  79. self.dlgQuestion = 0
  80. if app.ENABLE_REFINE_RENEWAL:
  81. def __InitializeOpen(self):
  82. self.children = []
  83. self.vnum = 0
  84. self.targetItemPos = 0
  85. self.dialogHeight = 0
  86. self.cost = 0
  87. self.percentage = 0
  88. self.type = 0
  89. self.xRefineStart = 0
  90. self.yRefineStart = 0
  91. def GetRefineSuccessPercentage(self, scrollSlotIndex, itemSlotIndex):
  92. if -1 != scrollSlotIndex:
  93. if player.IsRefineGradeScroll(scrollSlotIndex):
  94. curGrade = player.GetItemGrade(itemSlotIndex)
  95. itemIndex = player.GetItemIndex(itemSlotIndex)
  96. item.SelectItem(itemIndex)
  97. itemType = item.GetItemType()
  98. itemSubType = item.GetItemSubType()
  99. if item.ITEM_TYPE_METIN == itemType:
  100. if curGrade >= len(self.upgradeStoneSuccessPercentage):
  101. return 0
  102. return self.upgradeStoneSuccessPercentage[curGrade]
  103. elif item.ITEM_TYPE_ARMOR == itemType:
  104. if item.ARMOR_BODY == itemSubType:
  105. if curGrade >= len(self.upgradeArmorSuccessPercentage):
  106. return 0
  107. return self.upgradeArmorSuccessPercentage[curGrade]
  108. else:
  109. if curGrade >= len(self.upgradeAccessorySuccessPercentage):
  110. return 0
  111. return self.upgradeAccessorySuccessPercentage[curGrade]
  112. else:
  113. if curGrade >= len(self.upgradeSuccessPercentage):
  114. return 0
  115. return self.upgradeSuccessPercentage[curGrade]
  116. for i in xrange(player.METIN_SOCKET_MAX_NUM+1):
  117. if 0 == player.GetItemMetinSocket(itemSlotIndex, i):
  118. break
  119. return self.makeSocketSuccessPercentage[i]
  120. def Open(self, scrollItemPos, targetItemPos):
  121. self.scrollItemPos = scrollItemPos
  122. self.targetItemPos = targetItemPos
  123. percentage = self.GetRefineSuccessPercentage(scrollItemPos, targetItemPos)
  124. if 0 == percentage:
  125. return
  126. if app.ENABLE_REFINE_ABILITY:
  127. added_percentage = refine_ability.GetAddedPercentage()
  128. over_percentage = 0
  129. if self.percentage + added_percentage > 100:
  130. over_percentage = self.percentage + added_percentage - 100
  131. added_percentage = refine_ability.GetAddedPercentage()
  132. self.successPercentage.SetText("%s: %i%s (+%i%s)" % (localeInfo.REFINE_SUCCESS_PROBALITY_NEW, percentage, "%", added_percentage-over_percentage, "%"))
  133. else:
  134. self.successPercentage.SetText(localeInfo.REFINE_SUCCESS_PROBALITY % (percentage))
  135. itemIndex = player.GetItemIndex(targetItemPos)
  136. self.toolTip.ClearToolTip()
  137. metinSlot = []
  138. for i in xrange(player.METIN_SOCKET_MAX_NUM):
  139. metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
  140. self.toolTip.AddItemData(itemIndex, metinSlot)
  141. self.UpdateDialog()
  142. self.SetTop()
  143. self.Show()
  144. def UpdateDialog(self):
  145. newWidth = self.toolTip.GetWidth() + 30
  146. newHeight = self.toolTip.GetHeight() + 98
  147. self.board.SetSize(newWidth, newHeight)
  148. self.titleBar.SetWidth(newWidth-15)
  149. self.SetSize(newWidth, newHeight)
  150. (x, y) = self.GetLocalPosition()
  151. self.SetPosition(x, y)
  152. def OpenQuestionDialog(self):
  153. if app.ENABLE_REFINE_ABILITY:
  154. percentage = (self.GetRefineSuccessPercentage(-1, self.targetItemPos)+refine_ability.GetAddedPercentage())
  155. else:
  156. percentage = self.GetRefineSuccessPercentage(-1, self.targetItemPos)
  157. if percentage >= 100:
  158. self.Accept()
  159. return
  160. self.dlgQuestion.SetTop()
  161. self.dlgQuestion.Show()
  162. def Accept(self):
  163. net.SendItemUseToItemPacket(self.scrollItemPos, self.targetItemPos)
  164. self.Close()
  165. def Close(self):
  166. self.dlgQuestion.Hide()
  167. self.Hide()
  168. def OnPressEscapeKey(self):
  169. self.Close()
  170. return True
  171. class RefineDialogNew(ui.ScriptWindow):
  172. def __init__(self):
  173. ui.ScriptWindow.__init__(self)
  174. self.__Initialize()
  175. self.isLoaded = False
  176. def __Initialize(self):
  177. self.dlgQuestion = None
  178. self.children = []
  179. self.vnum = 0
  180. self.targetItemPos = 0
  181. self.dialogHeight = 0
  182. self.cost = 0
  183. self.percentage = 0
  184. self.type = 0
  185. def __LoadScript(self):
  186. try:
  187. pyScrLoader = ui.PythonScriptLoader()
  188. pyScrLoader.LoadScriptFile(self, "uiscript/refinedialog.py")
  189. except:
  190. import exception
  191. exception.Abort("RefineDialog.__LoadScript.LoadObject")
  192. try:
  193. self.board = self.GetChild("Board")
  194. self.titleBar = self.GetChild("TitleBar")
  195. self.probText = self.GetChild("SuccessPercentage")
  196. self.costText = self.GetChild("Cost")
  197. self.successPercentage = self.GetChild("SuccessPercentage")
  198. self.GetChild("AcceptButton").SetEvent(self.OpenQuestionDialog)
  199. self.GetChild("CancelButton").SetEvent(self.CancelRefine)
  200. except:
  201. import exception
  202. exception.Abort("RefineDialog.__LoadScript.BindObject")
  203. ## 936 : 개량 확률 표시 안함
  204. ##if 936 == app.GetDefaultCodePage():
  205. if constInfo.ENABLE_REFINE_PCT:
  206. self.successPercentage.Show()
  207. else:
  208. self.successPercentage.Hide()
  209. toolTip = uiToolTip.ItemToolTip()
  210. toolTip.SetParent(self)
  211. toolTip.SetFollow(False)
  212. toolTip.SetPosition(15, 38)
  213. toolTip.Show()
  214. self.toolTip = toolTip
  215. self.slotList = []
  216. for i in xrange(3):
  217. slot = self.__MakeSlot()
  218. slot.SetParent(toolTip)
  219. slot.SetWindowVerticalAlignCenter()
  220. self.slotList.append(slot)
  221. itemImage = self.__MakeItemImage()
  222. itemImage.SetParent(toolTip)
  223. itemImage.SetWindowVerticalAlignCenter()
  224. itemImage.SetPosition(-35, 0)
  225. self.itemImage = itemImage
  226. self.titleBar.SetCloseEvent(ui.__mem_func__(self.CancelRefine))
  227. self.isLoaded = True
  228. if constInfo.ENABLE_FAST_REFINE:
  229. self.checkBox = ui.CheckBox()
  230. self.checkBox.SetParent(self)
  231. self.checkBox.SetPosition(0, 65)
  232. self.checkBox.SetWindowHorizontalAlignCenter()
  233. self.checkBox.SetWindowVerticalAlignBottom()
  234. self.checkBox.SetEvent(ui.__mem_func__(self.AutoRefine), "ON_CHECK", True)
  235. self.checkBox.SetEvent(ui.__mem_func__(self.AutoRefine), "ON_UNCKECK", False)
  236. self.checkBox.SetCheckStatus(constInfo.IS_AUTO_REFINE)
  237. self.checkBox.SetTextInfo(uiScriptLocale.UPGRADE)
  238. self.checkBox.Show()
  239. def __del__(self):
  240. ui.ScriptWindow.__del__(self)
  241. def __MakeSlot(self):
  242. slot = ui.ImageBox()
  243. slot.LoadImage("d:/ymir work/ui/public/slot_base.sub")
  244. slot.Show()
  245. self.children.append(slot)
  246. return slot
  247. def __MakeItemImage(self):
  248. itemImage = ui.ImageBox()
  249. itemImage.Show()
  250. self.children.append(itemImage)
  251. return itemImage
  252. def __MakeThinBoard(self):
  253. thinBoard = ui.ThinBoard()
  254. thinBoard.SetParent(self)
  255. thinBoard.Show()
  256. self.children.append(thinBoard)
  257. return thinBoard
  258. def Destroy(self):
  259. self.ClearDictionary()
  260. self.dlgQuestion = None
  261. self.board = 0
  262. self.probText = 0
  263. self.costText = 0
  264. self.titleBar = 0
  265. self.toolTip = 0
  266. self.successPercentage = None
  267. self.slotList = []
  268. self.children = []
  269. if constInfo.ENABLE_FAST_REFINE:
  270. def __InitializeOpen(self):
  271. self.children = []
  272. self.vnum = 0
  273. self.targetItemPos = 0
  274. self.dialogHeight = 0
  275. self.cost = 0
  276. self.percentage = 0
  277. self.type = 0
  278. self.xRefineStart = 0
  279. self.yRefineStart = 0
  280. def Open(self, targetItemPos, nextGradeItemVnum, cost, prob, type):
  281. if False == self.isLoaded:
  282. self.__LoadScript()
  283. if constInfo.ENABLE_FAST_REFINE:
  284. self.__InitializeOpen()
  285. else:
  286. self.__Initialize()
  287. self.targetItemPos = targetItemPos
  288. self.vnum = nextGradeItemVnum
  289. self.cost = cost
  290. self.percentage = prob
  291. self.type = type
  292. if app.ENABLE_REFINE_ABILITY:
  293. added_percentage = refine_ability.GetAddedPercentage()
  294. over_percentage = 0
  295. if self.percentage + added_percentage > 100:
  296. over_percentage = self.percentage + added_percentage - 100
  297. self.probText.SetText("%s: %i%s (+%i%s)" % (localeInfo.REFINE_SUCCESS_PROBALITY_NEW, self.percentage, "%", added_percentage - over_percentage, "%")) #ENABLE_REFINE_ABILITY
  298. else:
  299. self.probText.SetText(localeInfo.REFINE_SUCCESS_PROBALITY % (self.percentage))
  300. self.costText.SetText(localeInfo.REFINE_COST % (self.cost))
  301. self.toolTip.ClearToolTip()
  302. metinSlot = []
  303. for i in xrange(player.METIN_SOCKET_MAX_NUM):
  304. metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
  305. attrSlot = []
  306. for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
  307. attrSlot.append(player.GetItemAttribute(targetItemPos, i))
  308. self.toolTip.AddRefineItemData(nextGradeItemVnum, metinSlot, attrSlot)
  309. item.SelectItem(nextGradeItemVnum)
  310. self.itemImage.LoadImage(item.GetIconImageFileName())
  311. xSlotCount, ySlotCount = item.GetItemSize()
  312. for slot in self.slotList:
  313. slot.Hide()
  314. for i in xrange(min(3, ySlotCount)):
  315. self.slotList[i].SetPosition(-35, i*32 - (ySlotCount-1)*16)
  316. self.slotList[i].Show()
  317. self.dialogHeight = self.toolTip.GetHeight() + 46
  318. self.UpdateDialog()
  319. self.SetTop()
  320. self.Show()
  321. def Close(self):
  322. self.dlgQuestion = None
  323. self.Hide()
  324. def AppendMaterial(self, vnum, count):
  325. slot = self.__MakeSlot()
  326. slot.SetParent(self)
  327. slot.SetPosition(15, self.dialogHeight)
  328. itemImage = self.__MakeItemImage()
  329. itemImage.SetParent(slot)
  330. item.SelectItem(vnum)
  331. itemImage.LoadImage(item.GetIconImageFileName())
  332. thinBoard = self.__MakeThinBoard()
  333. thinBoard.SetPosition(50, self.dialogHeight)
  334. thinBoard.SetSize(191, 20)
  335. textLine = ui.TextLine()
  336. textLine.SetParent(thinBoard)
  337. textLine.SetFontName(localeInfo.UI_DEF_FONT)
  338. textLine.SetPackedFontColor(0xffdddddd)
  339. textLine.SetText("%s x %02d" % (item.GetItemName(), count))
  340. textLine.SetOutline()
  341. textLine.SetFeather(False)
  342. textLine.SetWindowVerticalAlignCenter()
  343. textLine.SetVerticalAlignCenter()
  344. if localeInfo.IsARABIC():
  345. (x,y) = textLine.GetTextSize()
  346. textLine.SetPosition(x, 0)
  347. else:
  348. textLine.SetPosition(15, 0)
  349. textLine.Show()
  350. self.children.append(textLine)
  351. self.dialogHeight += 34
  352. self.UpdateDialog()
  353. def UpdateDialog(self):
  354. newWidth = self.toolTip.GetWidth() + 60
  355. newHeight = self.dialogHeight + 85
  356. ## 936 : 개량 확률 표시 안함
  357. ##if 936 == app.GetDefaultCodePage():
  358. newHeight -= 8
  359. if localeInfo.IsARABIC():
  360. self.board.SetPosition( newWidth, 0 )
  361. (x, y) = self.titleBar.GetLocalPosition()
  362. self.titleBar.SetPosition( newWidth - 15, y )
  363. self.board.SetSize(newWidth, newHeight)
  364. self.toolTip.SetPosition(15 + 35, 38)
  365. self.titleBar.SetWidth(newWidth-15)
  366. self.SetSize(newWidth, newHeight)
  367. (x, y) = self.GetLocalPosition()
  368. self.SetPosition(x, y)
  369. def OpenQuestionDialog(self):
  370. if app.ENABLE_REFINE_ABILITY:
  371. self.percentage += refine_ability.GetAddedPercentage()
  372. if self.percentage >= 100:
  373. self.Accept()
  374. return
  375. if 5 == self.type: ## 무신의 축복서
  376. self.Accept()
  377. return
  378. dlgQuestion = uiCommon.QuestionDialog2()
  379. dlgQuestion.SetText2(localeInfo.REFINE_WARNING2)
  380. dlgQuestion.SetAcceptEvent(ui.__mem_func__(self.Accept))
  381. dlgQuestion.SetCancelEvent(ui.__mem_func__(dlgQuestion.Close))
  382. if 3 == self.type: ## 현철
  383. dlgQuestion.SetText1(localeInfo.REFINE_DESTROY_WARNING_WITH_BONUS_PERCENT_1)
  384. dlgQuestion.SetText2(localeInfo.REFINE_DESTROY_WARNING_WITH_BONUS_PERCENT_2)
  385. elif 2 == self.type: ## 축복서
  386. dlgQuestion.SetText1(localeInfo.REFINE_DOWN_GRADE_WARNING)
  387. else:
  388. dlgQuestion.SetText1(localeInfo.REFINE_DESTROY_WARNING)
  389. dlgQuestion.Open()
  390. self.dlgQuestion = dlgQuestion
  391. def Accept(self):
  392. if constInfo.ENABLE_FAST_REFINE:
  393. net.SendRefinePacket(self.targetItemPos, self.type)
  394. else:
  395. net.SendRefinePacket(self.targetItemPos, self.type)
  396. self.Close()
  397. if constInfo.ENABLE_FAST_REFINE:
  398. def AutoRefine(self, checkType, autoFlag):
  399. constInfo.IS_AUTO_REFINE = autoFlag
  400. def CheckRefine(self, isFail):
  401. if constInfo.IS_AUTO_REFINE == True:
  402. if constInfo.AUTO_REFINE_TYPE == 1:
  403. if constInfo.AUTO_REFINE_DATA["ITEM"][0] != -1 and constInfo.AUTO_REFINE_DATA["ITEM"][1] != -1:
  404. scrollIndex = player.GetItemIndex(constInfo.AUTO_REFINE_DATA["ITEM"][0])
  405. itemIndex = player.GetItemIndex(constInfo.AUTO_REFINE_DATA["ITEM"][1])
  406. # chat.AppendChat(chat.CHAT_TYPE_INFO, "%d %d" % (itemIndex, int(itemIndex %10)))
  407. if scrollIndex == 0 or (itemIndex % 10 == 8 and not isFail):
  408. self.Close()
  409. else:
  410. net.SendItemUseToItemPacket(constInfo.AUTO_REFINE_DATA["ITEM"][0], constInfo.AUTO_REFINE_DATA["ITEM"][1])
  411. elif constInfo.AUTO_REFINE_TYPE == 2:
  412. npcData = constInfo.AUTO_REFINE_DATA["NPC"]
  413. if npcData[0] != 0 and npcData[1] != -1 and npcData[2] != -1 and npcData[3] != 0:
  414. itemIndex = player.GetItemIndex(npcData[1], npcData[2])
  415. if (itemIndex % 10 == 8 and not isFail) or isFail:
  416. self.Close()
  417. else:
  418. net.SendGiveItemPacket(npcData[0], npcData[1], npcData[2], npcData[3])
  419. else:
  420. self.Close()
  421. else:
  422. self.Close()
  423. def CancelRefine(self):
  424. net.SendRefinePacket(255, 255)
  425. self.Close()
  426. if constInfo.ENABLE_FAST_REFINE:
  427. constInfo.AUTO_REFINE_TYPE = 0
  428. constInfo.AUTO_REFINE_DATA = {
  429. "ITEM" : [-1, -1],
  430. "NPC" : [0, -1, -1, 0]
  431. }
  432. def OnPressEscapeKey(self):
  433. self.CancelRefine()
  434. return True