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. class RefineDialog(ui.ScriptWindow):
  12. makeSocketSuccessPercentage = ( 100, 33, 20, 15, 10, 5, 0 )
  13. upgradeStoneSuccessPercentage = ( 30, 29, 28, 27, 26, 25, 24, 23, 22 )
  14. upgradeArmorSuccessPercentage = ( 99, 66, 33, 33, 33, 33, 33, 33, 33 )
  15. upgradeAccessorySuccessPercentage = ( 99, 88, 77, 66, 33, 33, 33, 33, 33 )
  16. upgradeSuccessPercentage = ( 99, 66, 33, 33, 33, 33, 33, 33, 33 )
  17. def __init__(self):
  18. ui.ScriptWindow.__init__(self)
  19. self.__LoadScript()
  20. self.scrollItemPos = 0
  21. self.targetItemPos = 0
  22. def __LoadScript(self):
  23. self.__LoadQuestionDialog()
  24. try:
  25. pyScrLoader = ui.PythonScriptLoader()
  26. pyScrLoader.LoadScriptFile(self, "uiscript/refinedialog.py")
  27. except:
  28. import exception
  29. exception.Abort("RefineDialog.__LoadScript.LoadObject")
  30. try:
  31. self.board = self.GetChild("Board")
  32. self.titleBar = self.GetChild("TitleBar")
  33. self.successPercentage = self.GetChild("SuccessPercentage")
  34. self.GetChild("AcceptButton").SetEvent(self.OpenQuestionDialog)
  35. self.GetChild("CancelButton").SetEvent(self.Close)
  36. except:
  37. import exception
  38. exception.Abort("RefineDialog.__LoadScript.BindObject")
  39. ## 936 : 개량 확률 표시 안함
  40. ##if 936 == app.GetDefaultCodePage():
  41. self.successPercentage.Show()
  42. toolTip = uiToolTip.ItemToolTip()
  43. toolTip.SetParent(self)
  44. toolTip.SetPosition(15, 38)
  45. toolTip.SetFollow(FALSE)
  46. toolTip.Show()
  47. self.toolTip = toolTip
  48. self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  49. def __del__(self):
  50. ui.ScriptWindow.__del__(self)
  51. def __LoadQuestionDialog(self):
  52. self.dlgQuestion = ui.ScriptWindow()
  53. try:
  54. pyScrLoader = ui.PythonScriptLoader()
  55. pyScrLoader.LoadScriptFile(self.dlgQuestion, "uiscript/questiondialog2.py")
  56. except:
  57. import exception
  58. exception.Abort("RefineDialog.__LoadQuestionDialog.LoadScript")
  59. try:
  60. GetObject=self.dlgQuestion.GetChild
  61. GetObject("message1").SetText(localeInfo.REFINE_DESTROY_WARNING)
  62. GetObject("message2").SetText(localeInfo.REFINE_WARNING2)
  63. GetObject("accept").SetEvent(ui.__mem_func__(self.Accept))
  64. GetObject("cancel").SetEvent(ui.__mem_func__(self.dlgQuestion.Hide))
  65. except:
  66. import exception
  67. exception.Abort("SelectCharacterWindow.__LoadQuestionDialog.BindObject")
  68. def Destroy(self):
  69. self.ClearDictionary()
  70. self.board = 0
  71. self.successPercentage = 0
  72. self.titleBar = 0
  73. self.toolTip = 0
  74. self.dlgQuestion = 0
  75. def GetRefineSuccessPercentage(self, scrollSlotIndex, itemSlotIndex):
  76. if -1 != scrollSlotIndex:
  77. if player.IsRefineGradeScroll(scrollSlotIndex):
  78. curGrade = player.GetItemGrade(itemSlotIndex)
  79. itemIndex = player.GetItemIndex(itemSlotIndex)
  80. item.SelectItem(itemIndex)
  81. itemType = item.GetItemType()
  82. itemSubType = item.GetItemSubType()
  83. if item.ITEM_TYPE_METIN == itemType:
  84. if curGrade >= len(self.upgradeStoneSuccessPercentage):
  85. return 0
  86. return self.upgradeStoneSuccessPercentage[curGrade]
  87. elif item.ITEM_TYPE_ARMOR == itemType:
  88. if item.ARMOR_BODY == itemSubType:
  89. if curGrade >= len(self.upgradeArmorSuccessPercentage):
  90. return 0
  91. return self.upgradeArmorSuccessPercentage[curGrade]
  92. else:
  93. if curGrade >= len(self.upgradeAccessorySuccessPercentage):
  94. return 0
  95. return self.upgradeAccessorySuccessPercentage[curGrade]
  96. else:
  97. if curGrade >= len(self.upgradeSuccessPercentage):
  98. return 0
  99. return self.upgradeSuccessPercentage[curGrade]
  100. for i in xrange(player.METIN_SOCKET_MAX_NUM+1):
  101. if 0 == player.GetItemMetinSocket(itemSlotIndex, i):
  102. break
  103. return self.makeSocketSuccessPercentage[i]
  104. def Open(self, scrollItemPos, targetItemPos):
  105. self.scrollItemPos = scrollItemPos
  106. self.targetItemPos = targetItemPos
  107. percentage = self.GetRefineSuccessPercentage(scrollItemPos, targetItemPos)
  108. if 0 == percentage:
  109. return
  110. self.successPercentage.SetText(localeInfo.REFINE_SUCCESS_PROBALITY % (percentage))
  111. itemIndex = player.GetItemIndex(targetItemPos)
  112. self.toolTip.ClearToolTip()
  113. metinSlot = []
  114. for i in xrange(player.METIN_SOCKET_MAX_NUM):
  115. metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
  116. self.toolTip.AddItemData(itemIndex, metinSlot)
  117. self.UpdateDialog()
  118. self.SetTop()
  119. self.Show()
  120. def UpdateDialog(self):
  121. newWidth = self.toolTip.GetWidth() + 30
  122. newHeight = self.toolTip.GetHeight() + 98
  123. self.board.SetSize(newWidth, newHeight)
  124. self.titleBar.SetWidth(newWidth-15)
  125. self.SetSize(newWidth, newHeight)
  126. (x, y) = self.GetLocalPosition()
  127. self.SetPosition(x, y)
  128. def OpenQuestionDialog(self):
  129. percentage = self.GetRefineSuccessPercentage(-1, self.targetItemPos)
  130. if 100 == percentage:
  131. self.Accept()
  132. return
  133. self.dlgQuestion.SetTop()
  134. self.dlgQuestion.Show()
  135. def Accept(self):
  136. net.SendItemUseToItemPacket(self.scrollItemPos, self.targetItemPos)
  137. self.Close()
  138. def Close(self):
  139. self.dlgQuestion.Hide()
  140. self.Hide()
  141. def OnPressEscapeKey(self):
  142. self.Close()
  143. return TRUE
  144. class RefineDialogNew(ui.ScriptWindow):
  145. def __init__(self):
  146. ui.ScriptWindow.__init__(self)
  147. self.__Initialize()
  148. self.isLoaded = FALSE
  149. def __Initialize(self):
  150. self.dlgQuestion = None
  151. self.children = []
  152. self.vnum = 0
  153. self.targetItemPos = 0
  154. self.dialogHeight = 0
  155. self.cost = 0
  156. self.percentage = 0
  157. self.type = 0
  158. def __LoadScript(self):
  159. try:
  160. pyScrLoader = ui.PythonScriptLoader()
  161. pyScrLoader.LoadScriptFile(self, "uiscript/refinedialog.py")
  162. except:
  163. import exception
  164. exception.Abort("RefineDialog.__LoadScript.LoadObject")
  165. try:
  166. self.board = self.GetChild("Board")
  167. self.titleBar = self.GetChild("TitleBar")
  168. self.probText = self.GetChild("SuccessPercentage")
  169. self.costText = self.GetChild("Cost")
  170. self.successPercentage = self.GetChild("SuccessPercentage")
  171. self.GetChild("AcceptButton").SetEvent(self.OpenQuestionDialog)
  172. self.GetChild("CancelButton").SetEvent(self.CancelRefine)
  173. except:
  174. import exception
  175. exception.Abort("RefineDialog.__LoadScript.BindObject")
  176. ## 936 : 개량 확률 표시 안함
  177. ##if 936 == app.GetDefaultCodePage():
  178. self.successPercentage.Show()
  179. toolTip = uiToolTip.ItemToolTip()
  180. toolTip.SetParent(self)
  181. toolTip.SetFollow(FALSE)
  182. toolTip.SetPosition(15, 38)
  183. toolTip.Show()
  184. self.toolTip = toolTip
  185. self.slotList = []
  186. for i in xrange(3):
  187. slot = self.__MakeSlot()
  188. slot.SetParent(toolTip)
  189. slot.SetWindowVerticalAlignCenter()
  190. self.slotList.append(slot)
  191. itemImage = self.__MakeItemImage()
  192. itemImage.SetParent(toolTip)
  193. itemImage.SetWindowVerticalAlignCenter()
  194. itemImage.SetPosition(-35, 0)
  195. self.itemImage = itemImage
  196. self.titleBar.SetCloseEvent(ui.__mem_func__(self.CancelRefine))
  197. self.isLoaded = TRUE
  198. def __del__(self):
  199. ui.ScriptWindow.__del__(self)
  200. def __MakeSlot(self):
  201. slot = ui.ImageBox()
  202. slot.LoadImage("d:/ymir work/ui/public/slot_base.sub")
  203. slot.Show()
  204. self.children.append(slot)
  205. return slot
  206. def __MakeItemImage(self):
  207. itemImage = ui.ImageBox()
  208. itemImage.Show()
  209. self.children.append(itemImage)
  210. return itemImage
  211. def __MakeThinBoard(self):
  212. thinBoard = ui.ThinBoard()
  213. thinBoard.SetParent(self)
  214. thinBoard.Show()
  215. self.children.append(thinBoard)
  216. return thinBoard
  217. def Destroy(self):
  218. self.ClearDictionary()
  219. self.dlgQuestion = None
  220. self.board = 0
  221. self.probText = 0
  222. self.costText = 0
  223. self.titleBar = 0
  224. self.toolTip = 0
  225. self.successPercentage = None
  226. self.slotList = []
  227. self.children = []
  228. def Open(self, targetItemPos, nextGradeItemVnum, cost, prob, type):
  229. if FALSE == self.isLoaded:
  230. self.__LoadScript()
  231. self.__Initialize()
  232. self.targetItemPos = targetItemPos
  233. self.vnum = nextGradeItemVnum
  234. self.cost = cost
  235. self.percentage = prob
  236. self.type = type
  237. self.probText.SetText(localeInfo.REFINE_SUCCESS_PROBALITY % (self.percentage))
  238. self.costText.SetText(localeInfo.REFINE_COST % (self.cost))
  239. self.toolTip.ClearToolTip()
  240. metinSlot = []
  241. for i in xrange(player.METIN_SOCKET_MAX_NUM):
  242. metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
  243. attrSlot = []
  244. for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
  245. attrSlot.append(player.GetItemAttribute(targetItemPos, i))
  246. self.toolTip.AddRefineItemData(nextGradeItemVnum, metinSlot, attrSlot)
  247. item.SelectItem(nextGradeItemVnum)
  248. self.itemImage.LoadImage(item.GetIconImageFileName())
  249. xSlotCount, ySlotCount = item.GetItemSize()
  250. for slot in self.slotList:
  251. slot.Hide()
  252. for i in xrange(min(3, ySlotCount)):
  253. self.slotList[i].SetPosition(-35, i*32 - (ySlotCount-1)*16)
  254. self.slotList[i].Show()
  255. self.dialogHeight = self.toolTip.GetHeight() + 46
  256. self.UpdateDialog()
  257. self.SetTop()
  258. self.Show()
  259. def Close(self):
  260. self.dlgQuestion = None
  261. self.Hide()
  262. def AppendMaterial(self, vnum, count):
  263. slot = self.__MakeSlot()
  264. slot.SetParent(self)
  265. slot.SetPosition(15, self.dialogHeight)
  266. itemImage = self.__MakeItemImage()
  267. itemImage.SetParent(slot)
  268. item.SelectItem(vnum)
  269. itemImage.LoadImage(item.GetIconImageFileName())
  270. thinBoard = self.__MakeThinBoard()
  271. thinBoard.SetPosition(50, self.dialogHeight)
  272. thinBoard.SetSize(191, 20)
  273. textLine = ui.TextLine()
  274. textLine.SetParent(thinBoard)
  275. textLine.SetFontName(localeInfo.UI_DEF_FONT)
  276. textLine.SetPackedFontColor(0xffdddddd)
  277. textLine.SetText("%s x %02d" % (item.GetItemName(), count))
  278. textLine.SetOutline()
  279. textLine.SetFeather(FALSE)
  280. textLine.SetWindowVerticalAlignCenter()
  281. textLine.SetVerticalAlignCenter()
  282. if localeInfo.IsARABIC():
  283. (x,y) = textLine.GetTextSize()
  284. textLine.SetPosition(x, 0)
  285. else:
  286. textLine.SetPosition(15, 0)
  287. textLine.Show()
  288. self.children.append(textLine)
  289. self.dialogHeight += 34
  290. self.UpdateDialog()
  291. def UpdateDialog(self):
  292. newWidth = self.toolTip.GetWidth() + 60
  293. newHeight = self.dialogHeight + 69
  294. ## 936 : 개량 확률 표시 안함
  295. ##if 936 == app.GetDefaultCodePage():
  296. newHeight -= 8
  297. if localeInfo.IsARABIC():
  298. self.board.SetPosition( newWidth, 0 )
  299. (x, y) = self.titleBar.GetLocalPosition()
  300. self.titleBar.SetPosition( newWidth - 15, y )
  301. self.board.SetSize(newWidth, newHeight)
  302. self.toolTip.SetPosition(15 + 35, 38)
  303. self.titleBar.SetWidth(newWidth-15)
  304. self.SetSize(newWidth, newHeight)
  305. (x, y) = self.GetLocalPosition()
  306. self.SetPosition(x, y)
  307. def OpenQuestionDialog(self):
  308. if 100 == self.percentage:
  309. self.Accept()
  310. return
  311. if 5 == self.type: ## 무신의 축복서
  312. self.Accept()
  313. return
  314. dlgQuestion = uiCommon.QuestionDialog2()
  315. dlgQuestion.SetText2(localeInfo.REFINE_WARNING2)
  316. dlgQuestion.SetAcceptEvent(ui.__mem_func__(self.Accept))
  317. dlgQuestion.SetCancelEvent(ui.__mem_func__(dlgQuestion.Close))
  318. if 3 == self.type: ## 현철
  319. dlgQuestion.SetText1(localeInfo.REFINE_DESTROY_WARNING_WITH_BONUS_PERCENT_1)
  320. dlgQuestion.SetText2(localeInfo.REFINE_DESTROY_WARNING_WITH_BONUS_PERCENT_2)
  321. elif 2 == self.type: ## 축복서
  322. dlgQuestion.SetText1(localeInfo.REFINE_DOWN_GRADE_WARNING)
  323. else:
  324. dlgQuestion.SetText1(localeInfo.REFINE_DESTROY_WARNING)
  325. dlgQuestion.Open()
  326. self.dlgQuestion = dlgQuestion
  327. def Accept(self):
  328. net.SendRefinePacket(self.targetItemPos, self.type)
  329. self.Close()
  330. def CancelRefine(self):
  331. net.SendRefinePacket(255, 255)
  332. self.Close()
  333. def OnPressEscapeKey(self):
  334. self.CancelRefine()
  335. return TRUE