321 lines
9.2 KiB
Python
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
|