import app import net import player import item import ui import uiToolTip import mouseModule import locale import uiCommon import constInfo class RefineDialog(ui.ScriptWindow): makeSocketSuccessPercentage = ( 100, 33, 20, 15, 10, 5, 0 ) upgradeStoneSuccessPercentage = ( 30, 29, 28, 27, 26, 25, 24, 23, 22 ) upgradeArmorSuccessPercentage = ( 99, 66, 33, 33, 33, 33, 33, 33, 33 ) upgradeAccessorySuccessPercentage = ( 99, 88, 77, 66, 33, 33, 33, 33, 33 ) upgradeSuccessPercentage = ( 99, 66, 33, 33, 33, 33, 33, 33, 33 ) def __init__(self): ui.ScriptWindow.__init__(self) self.__LoadScript() self.scrollItemPos = 0 self.targetItemPos = 0 def __LoadScript(self): self.__LoadQuestionDialog() try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "uiscript/refinedialog.py") except: import exception exception.Abort("RefineDialog.__LoadScript.LoadObject") try: self.board = self.GetChild("Board") self.titleBar = self.GetChild("TitleBar") self.successPercentage = self.GetChild("SuccessPercentage") self.GetChild("AcceptButton").SetEvent(self.OpenQuestionDialog) self.GetChild("CancelButton").SetEvent(self.Close) except: import exception exception.Abort("RefineDialog.__LoadScript.BindObject") ## 936 : °³·® È®·ü Ç¥½Ã ¾ÈÇÔ ##if 936 == app.GetDefaultCodePage(): self.successPercentage.Hide() toolTip = uiToolTip.ItemToolTip() toolTip.SetParent(self) toolTip.SetPosition(15, 38) toolTip.SetFollow(FALSE) toolTip.Show() self.toolTip = toolTip self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close)) def __del__(self): ui.ScriptWindow.__del__(self) def __LoadQuestionDialog(self): self.dlgQuestion = ui.ScriptWindow() try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self.dlgQuestion, "uiscript/questiondialog2.py") except: import exception exception.Abort("RefineDialog.__LoadQuestionDialog.LoadScript") try: GetObject=self.dlgQuestion.GetChild GetObject("message1").SetText(locale.REFINE_DESTROY_WARNING) GetObject("message2").SetText(locale.REFINE_WARNING2) GetObject("accept").SetEvent(ui.__mem_func__(self.Accept)) GetObject("cancel").SetEvent(ui.__mem_func__(self.dlgQuestion.Hide)) except: import exception exception.Abort("SelectCharacterWindow.__LoadQuestionDialog.BindObject") def Destroy(self): self.ClearDictionary() self.board = 0 self.successPercentage = 0 self.titleBar = 0 self.toolTip = 0 self.dlgQuestion = 0 def GetRefineSuccessPercentage(self, scrollSlotIndex, itemSlotIndex): if -1 != scrollSlotIndex: if player.IsRefineGradeScroll(scrollSlotIndex): curGrade = player.GetItemGrade(itemSlotIndex) itemIndex = player.GetItemIndex(itemSlotIndex) item.SelectItem(itemIndex) itemType = item.GetItemType() itemSubType = item.GetItemSubType() if item.ITEM_TYPE_METIN == itemType: if curGrade >= len(self.upgradeStoneSuccessPercentage): return 0 return self.upgradeStoneSuccessPercentage[curGrade] elif item.ITEM_TYPE_ARMOR == itemType: if item.ARMOR_BODY == itemSubType: if curGrade >= len(self.upgradeArmorSuccessPercentage): return 0 return self.upgradeArmorSuccessPercentage[curGrade] else: if curGrade >= len(self.upgradeAccessorySuccessPercentage): return 0 return self.upgradeAccessorySuccessPercentage[curGrade] else: if curGrade >= len(self.upgradeSuccessPercentage): return 0 return self.upgradeSuccessPercentage[curGrade] for i in xrange(player.METIN_SOCKET_MAX_NUM+1): if 0 == player.GetItemMetinSocket(itemSlotIndex, i): break return self.makeSocketSuccessPercentage[i] def Open(self, scrollItemPos, targetItemPos): self.scrollItemPos = scrollItemPos self.targetItemPos = targetItemPos percentage = self.GetRefineSuccessPercentage(scrollItemPos, targetItemPos) if 0 == percentage: return self.successPercentage.SetText(locale.REFINE_SUCCESS_PROBALITY % (percentage)) itemIndex = player.GetItemIndex(targetItemPos) self.toolTip.ClearToolTip() metinSlot = [] for i in xrange(player.METIN_SOCKET_MAX_NUM): metinSlot.append(player.GetItemMetinSocket(targetItemPos, i)) self.toolTip.AddItemData(itemIndex, metinSlot) self.UpdateDialog() self.SetTop() self.Show() def UpdateDialog(self): newWidth = self.toolTip.GetWidth() + 30 newHeight = self.toolTip.GetHeight() + 98 self.board.SetSize(newWidth, newHeight) self.titleBar.SetWidth(newWidth-15) self.SetSize(newWidth, newHeight) (x, y) = self.GetLocalPosition() self.SetPosition(x, y) def OpenQuestionDialog(self): percentage = self.GetRefineSuccessPercentage(-1, self.targetItemPos) if 100 == percentage: self.Accept() return self.dlgQuestion.SetTop() self.dlgQuestion.Show() def Accept(self): net.SendItemUseToItemPacket(self.scrollItemPos, self.targetItemPos) self.Close() def Close(self): self.dlgQuestion.Hide() self.Hide() def OnPressEscapeKey(self): self.Close() return TRUE class RefineDialogNew(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.__Initialize() self.isLoaded = FALSE def __Initialize(self): self.dlgQuestion = None self.children = [] self.vnum = 0 self.targetItemPos = 0 self.dialogHeight = 0 self.cost = 0 self.percentage = 0 self.type = 0 def __LoadScript(self): try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "uiscript/refinedialog.py") except: import exception exception.Abort("RefineDialog.__LoadScript.LoadObject") try: self.board = self.GetChild("Board") self.titleBar = self.GetChild("TitleBar") self.probText = self.GetChild("SuccessPercentage") self.costText = self.GetChild("Cost") self.successPercentage = self.GetChild("SuccessPercentage") self.GetChild("AcceptButton").SetEvent(self.OpenQuestionDialog) self.GetChild("CancelButton").SetEvent(self.CancelRefine) except: import exception exception.Abort("RefineDialog.__LoadScript.BindObject") ## 936 : °³·® È®·ü Ç¥½Ã ¾ÈÇÔ ##if 936 == app.GetDefaultCodePage(): self.successPercentage.Hide() toolTip = uiToolTip.ItemToolTip() toolTip.SetParent(self) toolTip.SetFollow(FALSE) toolTip.SetPosition(15, 38) toolTip.Show() self.toolTip = toolTip self.slotList = [] for i in xrange(3): slot = self.__MakeSlot() slot.SetParent(toolTip) slot.SetWindowVerticalAlignCenter() self.slotList.append(slot) itemImage = self.__MakeItemImage() itemImage.SetParent(toolTip) itemImage.SetWindowVerticalAlignCenter() itemImage.SetPosition(-35, 0) self.itemImage = itemImage self.titleBar.SetCloseEvent(ui.__mem_func__(self.CancelRefine)) self.isLoaded = TRUE def __del__(self): ui.ScriptWindow.__del__(self) def __MakeSlot(self): slot = ui.ImageBox() slot.LoadImage("d:/ymir work/ui/public/slot_base.sub") slot.Show() self.children.append(slot) return slot def __MakeItemImage(self): itemImage = ui.ImageBox() itemImage.Show() self.children.append(itemImage) return itemImage def __MakeThinBoard(self): thinBoard = ui.ThinBoard() thinBoard.SetParent(self) thinBoard.Show() self.children.append(thinBoard) return thinBoard def Destroy(self): self.ClearDictionary() self.dlgQuestion = None self.board = 0 self.probText = 0 self.costText = 0 self.titleBar = 0 self.toolTip = 0 self.successPercentage = None self.slotList = [] self.children = [] def Open(self, targetItemPos, nextGradeItemVnum, cost, prob, type): if FALSE == self.isLoaded: self.__LoadScript() self.__Initialize() self.targetItemPos = targetItemPos self.vnum = nextGradeItemVnum self.cost = cost self.percentage = prob self.type = type self.probText.SetText(locale.REFINE_SUCCESS_PROBALITY % (self.percentage)) self.costText.SetText(locale.REFINE_COST % (self.cost)) self.toolTip.ClearToolTip() metinSlot = [] for i in xrange(player.METIN_SOCKET_MAX_NUM): metinSlot.append(player.GetItemMetinSocket(targetItemPos, i)) attrSlot = [] for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM): attrSlot.append(player.GetItemAttribute(targetItemPos, i)) self.toolTip.AddRefineItemData(nextGradeItemVnum, metinSlot, attrSlot) item.SelectItem(nextGradeItemVnum) self.itemImage.LoadImage(item.GetIconImageFileName()) xSlotCount, ySlotCount = item.GetItemSize() for slot in self.slotList: slot.Hide() for i in xrange(min(3, ySlotCount)): self.slotList[i].SetPosition(-35, i*32 - (ySlotCount-1)*16) self.slotList[i].Show() self.dialogHeight = self.toolTip.GetHeight() + 46 self.UpdateDialog() self.SetTop() self.Show() def Close(self): self.dlgQuestion = None self.Hide() def AppendMaterial(self, vnum, count): slot = self.__MakeSlot() slot.SetParent(self) slot.SetPosition(15, self.dialogHeight) itemImage = self.__MakeItemImage() itemImage.SetParent(slot) item.SelectItem(vnum) itemImage.LoadImage(item.GetIconImageFileName()) thinBoard = self.__MakeThinBoard() thinBoard.SetPosition(50, self.dialogHeight) thinBoard.SetSize(191, 20) textLine = ui.TextLine() textLine.SetParent(thinBoard) textLine.SetFontName(locale.UI_DEF_FONT) textLine.SetPackedFontColor(0xffdddddd) textLine.SetText("%s x %02d" % (item.GetItemName(), count)) textLine.SetOutline() textLine.SetFeather(FALSE) textLine.SetWindowVerticalAlignCenter() textLine.SetVerticalAlignCenter() if locale.IsARABIC(): (x,y) = textLine.GetTextSize() textLine.SetPosition(x, 0) else: textLine.SetPosition(15, 0) textLine.Show() self.children.append(textLine) self.dialogHeight += 34 self.UpdateDialog() def UpdateDialog(self): newWidth = self.toolTip.GetWidth() + 60 newHeight = self.dialogHeight + 69 ## 936 : °³·® È®·ü Ç¥½Ã ¾ÈÇÔ ##if 936 == app.GetDefaultCodePage(): newHeight -= 8 if locale.IsARABIC(): self.board.SetPosition( newWidth, 0 ) (x, y) = self.titleBar.GetLocalPosition() self.titleBar.SetPosition( newWidth - 15, y ) self.board.SetSize(newWidth, newHeight) self.toolTip.SetPosition(15 + 35, 38) self.titleBar.SetWidth(newWidth-15) self.SetSize(newWidth, newHeight) (x, y) = self.GetLocalPosition() self.SetPosition(x, y) def OpenQuestionDialog(self): if 100 == self.percentage: self.Accept() return if 5 == self.type: ## ¹«½ÅÀÇ Ãູ¼­ self.Accept() return dlgQuestion = uiCommon.QuestionDialog2() dlgQuestion.SetText2(locale.REFINE_WARNING2) dlgQuestion.SetAcceptEvent(ui.__mem_func__(self.Accept)) dlgQuestion.SetCancelEvent(ui.__mem_func__(dlgQuestion.Close)) if 3 == self.type: ## Çöö dlgQuestion.SetText1(locale.REFINE_DESTROY_WARNING_WITH_BONUS_PERCENT_1) dlgQuestion.SetText2(locale.REFINE_DESTROY_WARNING_WITH_BONUS_PERCENT_2) elif 2 == self.type: ## Ãູ¼­ dlgQuestion.SetText1(locale.REFINE_DOWN_GRADE_WARNING) else: dlgQuestion.SetText1(locale.REFINE_DESTROY_WARNING) dlgQuestion.Open() self.dlgQuestion = dlgQuestion def Accept(self): net.SendRefinePacket(self.targetItemPos, self.type) self.Close() def CancelRefine(self): net.SendRefinePacket(255, 255) self.Close() def OnPressEscapeKey(self): self.CancelRefine() return TRUE