client/bin/pack/root/uiattachmetin.py

137 lines
3.5 KiB
Python

import dbg
import player
import item
import net
import snd
import ui
import uiToolTip
import localeInfo
class AttachMetinDialog(ui.ScriptWindow):
def __init__(self):
ui.ScriptWindow.__init__(self)
self.__LoadScript()
self.metinItemPos = 0
self.targetItemPos = 0
def __LoadScript(self):
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "uiscript/attachstonedialog.py")
except:
import exception
exception.Abort("AttachStoneDialog.__LoadScript.LoadObject")
try:
self.board = self.GetChild("Board")
self.titleBar = self.GetChild("TitleBar")
self.metinImage = self.GetChild("MetinImage")
self.GetChild("AcceptButton").SetEvent(ui.__mem_func__(self.Accept))
self.GetChild("CancelButton").SetEvent(ui.__mem_func__(self.Close))
except:
import exception
exception.Abort("AttachStoneDialog.__LoadScript.BindObject")
oldToolTip = uiToolTip.ItemToolTip()
oldToolTip.SetParent(self)
oldToolTip.SetPosition(15, 38)
oldToolTip.SetFollow(FALSE)
oldToolTip.Show()
self.oldToolTip = oldToolTip
newToolTip = uiToolTip.ItemToolTip()
newToolTip.SetParent(self)
newToolTip.SetPosition(230 + 20, 38)
newToolTip.SetFollow(FALSE)
newToolTip.Show()
self.newToolTip = newToolTip
self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
def __del__(self):
ui.ScriptWindow.__del__(self)
def Destroy(self):
self.ClearDictionary()
self.board = 0
self.titleBar = 0
self.metinImage = 0
self.toolTip = 0
def CanAttachMetin(self, slot, metin):
if item.METIN_NORMAL == metin:
if player.METIN_SOCKET_TYPE_SILVER == slot or player.METIN_SOCKET_TYPE_GOLD == slot:
return TRUE
elif item.METIN_GOLD == metin:
if player.METIN_SOCKET_TYPE_GOLD == slot:
return TRUE
def Open(self, metinItemPos, targetItemPos):
self.metinItemPos = metinItemPos
self.targetItemPos = targetItemPos
metinIndex = player.GetItemIndex(metinItemPos)
itemIndex = player.GetItemIndex(targetItemPos)
self.oldToolTip.ClearToolTip()
self.newToolTip.ClearToolTip()
item.SelectItem(metinIndex)
## Metin Image
try:
self.metinImage.LoadImage(item.GetIconImageFileName())
except:
dbg.TraceError("AttachMetinDialog.Open.LoadImage - Failed to find item data")
## Old Item ToolTip
metinSlot = []
for i in xrange(player.METIN_SOCKET_MAX_NUM):
metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
self.oldToolTip.AddItemData(itemIndex, metinSlot)
## New Item ToolTip
item.SelectItem(metinIndex)
metinSubType = item.GetItemSubType()
metinSlot = []
for i in xrange(player.METIN_SOCKET_MAX_NUM):
metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
for i in xrange(player.METIN_SOCKET_MAX_NUM):
slotData = metinSlot[i]
if self.CanAttachMetin(slotData, metinSubType):
metinSlot[i] = metinIndex
break
self.newToolTip.AddItemData(itemIndex, metinSlot)
self.UpdateDialog()
self.SetTop()
self.Show()
def UpdateDialog(self):
newWidth = self.newToolTip.GetWidth() + 230 + 15 + 20
newHeight = self.newToolTip.GetHeight() + 98
if localeInfo.IsARABIC():
self.board.SetPosition( newWidth, 0 )
(x,y) = self.titleBar.GetLocalPosition()
self.titleBar.SetPosition( newWidth - 15, y )
self.board.SetSize(newWidth, newHeight)
self.titleBar.SetWidth(newWidth-15)
self.SetSize(newWidth, newHeight)
(x, y) = self.GetLocalPosition()
self.SetPosition(x, y)
def Accept(self):
net.SendItemUseToItemPacket(self.metinItemPos, self.targetItemPos)
snd.PlaySound("sound/ui/metinstone_insert.wav")
self.Close()
def Close(self):
self.Hide()