425 lines
11 KiB
Python
425 lines
11 KiB
Python
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
|