137 lines
3.5 KiB
Python
137 lines
3.5 KiB
Python
import dbg
|
|
import player
|
|
import item
|
|
import net
|
|
import snd
|
|
import ui
|
|
import uiToolTip
|
|
import locale
|
|
|
|
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 locale.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()
|