metin2clean e94957cd33 client
2024-06-01 15:32:17 -05:00

321 lines
9.2 KiB
Python

import ui
import net
import grp
import snd
import item
import acce
import player
import uiToolTip
import localeInfo
import uiInventory
import mouseModule
import uiScriptLocale
class CombineWindow(ui.ScriptWindow):
def __init__(self):
ui.ScriptWindow.__init__(self)
self.isLoaded = 0
self.PositionOut = 0
self.PositionStartX = 0
self.PositionStartY = 0
def __del__(self):
ui.ScriptWindow.__del__(self)
@ui.WindowDestroy
def Destroy(self):
self.ClearAllSlots()
self.ClearDictionary()
self.titleBar = None
self.btnAccept = None
self.btnCancel = None
self.acceSlot = None
self.needMoney = None
self.Result = None
self.PositionOut = 0
self.PositionStartX = 0
self.PositionStartY = 0
def LoadWindow(self):
if self.isLoaded:
return
self.isLoaded = 1
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "uiscript/acce_combinewindow.py")
except:
import exception
exception.Abort("Acce_CombineWindow.LoadDialog.LoadScript")
try:
self.titleBar = self.GetChild("TitleBar")
self.btnAccept = self.GetChild("AcceptButton")
self.btnCancel = self.GetChild("CancelButton")
self.needMoney = self.GetChild("NeedMoney")
self.Result = self.GetChild("Result")
self.acceSlot = self.GetChild("AcceSlot")
except:
import exception
exception.Abort("Acce_CombineWindow.LoadDialog.BindObject")
self.acceSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.OnSelectEmptySlot))
self.acceSlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.OnSelectItemSlot))
self.acceSlot.SetUseSlotEvent(ui.__mem_func__(self.OnSelectItemSlot))
self.acceSlot.SetOverInItemEvent(ui.__mem_func__(self.OnOverInItem))
self.acceSlot.SetOverOutItemEvent(ui.__mem_func__(self.OnOverOutItem))
self.titleBar.SetCloseEvent(ui.__mem_func__(self.OnClose))
self.btnCancel.SetEvent(ui.__mem_func__(self.OnClose))
self.btnAccept.SetEvent(ui.__mem_func__(self.OnAccept))
self.tooltipItem = None
def SetItemToolTip(self, itemTooltip):
self.tooltipItem = itemTooltip
def IsOpened(self):
if self.IsShow() and self.isLoaded:
return True
return False
def ClearAllSlots(self):
acce.Clear()
if self.acceSlot:
for i in xrange(acce.WINDOW_MAX_MATERIALS + 1):
self.acceSlot.ClearSlot(i)
def Open(self):
self.PositionOut = 0
(self.PositionStartX, self.PositionStartY, z) = player.GetMainCharacterPosition()
self.needMoney.SetText(localeInfo.ACCE_REFINE_COST % (acce.GetPrice()))
self.ClearAllSlots()
self.SetCenterPosition()
self.Show()
def Close(self):
if self.tooltipItem:
self.tooltipItem.HideToolTip()
self.Hide()
def OnClose(self):
acce.SendCloseRequest()
def OnPressEscapeKey(self):
self.OnClose()
return True
def OnAccept(self):
acce.SendRefineRequest()
def OnUpdate(self):
LIMIT_RANGE = acce.LIMIT_RANGE
(x, y, z) = player.GetMainCharacterPosition()
if abs(x - self.PositionStartX) >= LIMIT_RANGE or abs(y - self.PositionStartY) >= LIMIT_RANGE:
if not self.PositionOut:
self.PositionOut += 1
self.OnClose()
def OnSelectEmptySlot(self, selectedSlotPos):
isAttached = mouseModule.mouseController.isAttached()
if not isAttached or selectedSlotPos == acce.WINDOW_MAX_MATERIALS:
return
attachedSlotType = mouseModule.mouseController.GetAttachedType()
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
mouseModule.mouseController.DeattachObject()
if attachedSlotType == player.SLOT_TYPE_INVENTORY and attachedInvenType == player.INVENTORY:
acce.Add(attachedInvenType, attachedSlotPos, selectedSlotPos)
def OnSelectItemSlot(self, selectedSlotPos):
if selectedSlotPos == acce.WINDOW_MAX_MATERIALS:
return
mouseModule.mouseController.DeattachObject()
acce.Remove(selectedSlotPos)
def OnOverInItem(self, selectedSlotPos):
if self.tooltipItem:
if selectedSlotPos == acce.WINDOW_MAX_MATERIALS:
(isHere, iCell) = acce.GetAttachedItem(0)
if isHere:
self.tooltipItem.ClearToolTip()
self.tooltipItem.SetInventoryItem(iCell)#fix apply glitch
self.tooltipItem.SetAcceResultItem(iCell)
else:
(isHere, iCell) = acce.GetAttachedItem(selectedSlotPos)
if isHere:
self.tooltipItem.SetInventoryItem(iCell)
def OnOverOutItem(self):
if self.tooltipItem:
self.tooltipItem.HideToolTip()
def Refresh(self, iAct):
self.needMoney.SetText(localeInfo.ACCE_REFINE_COST % (acce.GetPrice()))
self.acceSlot.ClearSlot(acce.WINDOW_MAX_MATERIALS)
for i in xrange(acce.WINDOW_MAX_MATERIALS):
self.acceSlot.ClearSlot(i)
(isHere, iCell) = acce.GetAttachedItem(i)
if isHere:
self.acceSlot.SetItemSlot(i, player.GetItemIndex(iCell), 0)
if i == int(acce.WINDOW_MAX_MATERIALS - 1):
(itemVnum, MinAbs, MaxAbs) = acce.GetResultItem()
if not itemVnum:
break
self.acceSlot.SetItemSlot(i + 1, itemVnum, 0)
break
class AbsorbWindow(ui.ScriptWindow):
def __init__(self):
ui.ScriptWindow.__init__(self)
self.isLoaded = 0
self.PositionOut = 0
self.PositionStartX = 0
self.PositionStartY = 0
def __del__(self):
ui.ScriptWindow.__del__(self)
@ui.WindowDestroy
def Destroy(self):
self.ClearDictionary()
self.titleBar = None
self.btnAccept = None
self.btnCancel = None
self.acceSlot = None
self.PositionOut = 0
self.PositionStartX = 0
self.PositionStartY = 0
def LoadWindow(self):
if self.isLoaded:
return
self.isLoaded = 1
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "uiscript/acce_absorbwindow.py")
except:
import exception
exception.Abort("Acce_AbsorbtionWindow.LoadDialog.LoadScript")
try:
self.titleBar = self.GetChild("TitleBar")
self.btnAccept = self.GetChild("AcceptButton")
self.btnCancel = self.GetChild("CancelButton")
self.acceSlot = self.GetChild("AcceSlot")
except:
import exception
exception.Abort("Acce_AbsorbtionWindow.LoadDialog.BindObject")
self.acceSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.OnSelectEmptySlot))
self.acceSlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.OnSelectItemSlot))
self.acceSlot.SetUseSlotEvent(ui.__mem_func__(self.OnSelectItemSlot))
self.acceSlot.SetOverInItemEvent(ui.__mem_func__(self.OnOverInItem))
self.acceSlot.SetOverOutItemEvent(ui.__mem_func__(self.OnOverOutItem))
self.titleBar.SetCloseEvent(ui.__mem_func__(self.OnClose))
self.btnCancel.SetEvent(ui.__mem_func__(self.OnClose))
self.btnAccept.SetEvent(ui.__mem_func__(self.OnAccept))
self.tooltipItem = None
def SetItemToolTip(self, itemTooltip):
self.tooltipItem = itemTooltip
def IsOpened(self):
if self.IsShow() and self.isLoaded:
return True
return False
def Open(self):
self.PositionOut = 0
(self.PositionStartX, self.PositionStartY, z) = player.GetMainCharacterPosition()
for i in xrange(acce.WINDOW_MAX_MATERIALS + 1):
self.acceSlot.ClearSlot(i)
self.SetCenterPosition()
self.Show()
def Close(self):
if self.tooltipItem:
self.tooltipItem.HideToolTip()
self.Hide()
def OnClose(self):
acce.SendCloseRequest()
def OnPressEscapeKey(self):
self.OnClose()
return True
def OnAccept(self):
acce.SendRefineRequest()
def OnUpdate(self):
LIMIT_RANGE = acce.LIMIT_RANGE
(x, y, z) = player.GetMainCharacterPosition()
if abs(x - self.PositionStartX) >= LIMIT_RANGE or abs(y - self.PositionStartY) >= LIMIT_RANGE:
if not self.PositionOut:
self.PositionOut += 1
self.OnClose()
def OnSelectEmptySlot(self, selectedSlotPos):
isAttached = mouseModule.mouseController.isAttached()
if not isAttached or selectedSlotPos == acce.WINDOW_MAX_MATERIALS:
return
attachedSlotType = mouseModule.mouseController.GetAttachedType()
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
mouseModule.mouseController.DeattachObject()
if attachedSlotType == player.SLOT_TYPE_INVENTORY and attachedInvenType == player.INVENTORY:
acce.Add(attachedInvenType, attachedSlotPos, selectedSlotPos)
def OnSelectItemSlot(self, selectedSlotPos):
if selectedSlotPos == acce.WINDOW_MAX_MATERIALS:
return
mouseModule.mouseController.DeattachObject()
acce.Remove(selectedSlotPos)
def OnOverInItem(self, selectedSlotPos):
if self.tooltipItem:
if selectedSlotPos == acce.WINDOW_MAX_MATERIALS:
(isHere1, iCell1) = acce.GetAttachedItem(0)
(isHere2, iCell2) = acce.GetAttachedItem(1)
if isHere1 and isHere2:
self.tooltipItem.ClearToolTip()
self.tooltipItem.SetInventoryItem(iCell1)#fix apply glitch
self.tooltipItem.SetAcceResultAbsItem(iCell1, iCell2)
else:
(isHere, iCell) = acce.GetAttachedItem(selectedSlotPos)
if isHere:
self.tooltipItem.SetInventoryItem(iCell)
def OnOverOutItem(self):
if self.tooltipItem:
self.tooltipItem.HideToolTip()
def Refresh(self, iAct):
self.acceSlot.ClearSlot(acce.WINDOW_MAX_MATERIALS)
for i in xrange(acce.WINDOW_MAX_MATERIALS):
self.acceSlot.ClearSlot(i)
(isHere, iCell) = acce.GetAttachedItem(i)
if isHere:
self.acceSlot.SetItemSlot(i, player.GetItemIndex(iCell), 0)
if i == int(acce.WINDOW_MAX_MATERIALS - 1):
(itemVnum, MinAbs, MaxAbs) = acce.GetResultItem()
if not itemVnum:
break
self.acceSlot.SetItemSlot(i + 1, itemVnum, 0)
break