client/bin/pack/root/uisafebox.py

688 lines
19 KiB
Python
Raw Normal View History

import ui
import mouseModule
import player
import net
import snd
import safebox
import chat
import app
import localeInfo
import uiScriptLocale
class PasswordDialog(ui.ScriptWindow):
def __init__(self):
ui.ScriptWindow.__init__(self)
self.__LoadDialog()
self.sendMessage = "/safebox_password "
def __del__(self):
ui.ScriptWindow.__del__(self)
def __LoadDialog(self):
try:
pyScrLoader = ui.PythonScriptLoader()
# if localeInfo.IsEUROPE()and app.GetLocalePath() != "locale/ca"and app.GetLocalePath() != "locale/sg" :
pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "passworddialog.py")
# else:
# pyScrLoader.LoadScriptFile(self, "uiscript/passworddialog.py")
except:
import exception
exception.Abort("PasswordDialog.__LoadDialog.LoadObject")
try:
self.passwordValue = self.GetChild("password_value")
self.acceptButton = self.GetChild("accept_button")
self.cancelButton = self.GetChild("cancel_button")
self.titleName = self.GetChild("TitleName")
self.GetChild("titlebar").SetCloseEvent(ui.__mem_func__(self.CloseDialog))
except:
import exception
exception.Abort("PasswordDialog.__LoadDialog.BindObject")
self.passwordValue.OnIMEReturn = self.OnAccept
self.passwordValue.OnPressEscapeKey = self.OnCancel
self.acceptButton.SetEvent(ui.__mem_func__(self.OnAccept))
self.cancelButton.SetEvent(ui.__mem_func__(self.OnCancel))
def Destroy(self):
self.ClearDictionary()
self.passwordValue = None
self.acceptButton = None
self.cancelButton = None
self.titleName = None
def SetTitle(self, title):
self.titleName.SetText(title)
def SetSendMessage(self, msg):
self.sendMessage = msg
def ShowDialog(self):
self.passwordValue.SetText("")
self.passwordValue.SetFocus()
self.SetCenterPosition()
self.Show()
def CloseDialog(self):
self.passwordValue.KillFocus()
self.Hide()
def OnAccept(self):
net.SendChatPacket(self.sendMessage + self.passwordValue.GetText())
self.CloseDialog()
return TRUE
def OnCancel(self):
self.CloseDialog()
return TRUE
class ChangePasswordDialog(ui.ScriptWindow):
def __init__(self):
ui.ScriptWindow.__init__(self)
self.__LoadDialog()
def __del__(self):
ui.ScriptWindow.__del__(self)
def __LoadDialog(self):
self.dlgMessage = ui.ScriptWindow()
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self.dlgMessage, "uiscript/popupdialog.py")
self.dlgMessage.GetChild("message").SetText(localeInfo.SAFEBOX_WRONG_PASSWORD)
self.dlgMessage.GetChild("accept").SetEvent(ui.__mem_func__(self.OnCloseMessageDialog))
except:
import exception
exception.Abort("SafeboxWindow.__LoadDialog.LoadObject")
def LoadDialog(self):
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "uiscript/changepassworddialog.py")
except:
import exception
exception.Abort("ChangePasswordDialog.LoadDialog.LoadObject")
try:
self.GetChild("accept_button").SetEvent(ui.__mem_func__(self.OnAccept))
self.GetChild("cancel_button").SetEvent(ui.__mem_func__(self.OnCancel))
self.GetChild("titlebar").SetCloseEvent(ui.__mem_func__(self.OnCancel))
oldPassword = self.GetChild("old_password_value")
newPassword = self.GetChild("new_password_value")
newPasswordCheck = self.GetChild("new_password_check_value")
except:
import exception
exception.Abort("ChangePasswordDialog.LoadDialog.BindObject")
oldPassword.SetTabEvent(lambda arg=1: self.OnNextFocus(arg))
newPassword.SetTabEvent(lambda arg=2: self.OnNextFocus(arg))
newPasswordCheck.SetTabEvent(lambda arg=3: self.OnNextFocus(arg))
oldPassword.SetReturnEvent(lambda arg=1: self.OnNextFocus(arg))
newPassword.SetReturnEvent(lambda arg=2: self.OnNextFocus(arg))
newPasswordCheck.SetReturnEvent(ui.__mem_func__(self.OnAccept))
oldPassword.OnPressEscapeKey = self.OnCancel
newPassword.OnPressEscapeKey = self.OnCancel
newPasswordCheck.OnPressEscapeKey = self.OnCancel
self.oldPassword = oldPassword
self.newPassword = newPassword
self.newPasswordCheck = newPasswordCheck
def OnNextFocus(self, arg):
if 1 == arg:
self.oldPassword.KillFocus()
self.newPassword.SetFocus()
elif 2 == arg:
self.newPassword.KillFocus()
self.newPasswordCheck.SetFocus()
elif 3 == arg:
self.newPasswordCheck.KillFocus()
self.oldPassword.SetFocus()
def Destroy(self):
self.ClearDictionary()
self.dlgMessage.ClearDictionary()
self.oldPassword = None
self.newPassword = None
self.newPasswordCheck = None
def Open(self):
self.oldPassword.SetText("")
self.newPassword.SetText("")
self.newPasswordCheck.SetText("")
self.oldPassword.SetFocus()
self.SetCenterPosition()
self.SetTop()
self.Show()
def Close(self):
self.oldPassword.SetText("")
self.newPassword.SetText("")
self.newPasswordCheck.SetText("")
self.oldPassword.KillFocus()
self.newPassword.KillFocus()
self.newPasswordCheck.KillFocus()
self.Hide()
def OnAccept(self):
oldPasswordText = self.oldPassword.GetText()
newPasswordText = self.newPassword.GetText()
newPasswordCheckText = self.newPasswordCheck.GetText()
if newPasswordText != newPasswordCheckText:
self.dlgMessage.SetCenterPosition()
self.dlgMessage.SetTop()
self.dlgMessage.Show()
return TRUE
net.SendChatPacket("/safebox_change_password %s %s" % (oldPasswordText, newPasswordText))
self.Close()
return TRUE
def OnCancel(self):
self.Close()
return TRUE
def OnCloseMessageDialog(self):
self.newPassword.SetText("")
self.newPasswordCheck.SetText("")
self.newPassword.SetFocus()
self.dlgMessage.Hide()
class SafeboxWindow(ui.ScriptWindow):
BOX_WIDTH = 176
def __init__(self):
ui.ScriptWindow.__init__(self)
self.tooltipItem = None
self.sellingSlotNumber = -1
self.pageButtonList = []
self.curPageIndex = 0
self.isLoaded = 0
self.xSafeBoxStart = 0
self.ySafeBoxStart = 0
self.__LoadWindow()
def __del__(self):
ui.ScriptWindow.__del__(self)
def Show(self):
self.__LoadWindow()
ui.ScriptWindow.Show(self)
def Destroy(self):
self.ClearDictionary()
self.dlgPickMoney.Destroy()
self.dlgPickMoney = None
self.dlgChangePassword.Destroy()
self.dlgChangePassword = None
self.tooltipItem = None
self.wndMoneySlot = None
self.wndMoney = None
self.wndBoard = None
self.wndItem = None
self.pageButtonList = []
def __LoadWindow(self):
if self.isLoaded == 1:
return
self.isLoaded = 1
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "UIScript/SafeboxWindow.py")
from _weakref import proxy
## Item
wndItem = ui.GridSlotWindow()
wndItem.SetParent(self)
wndItem.SetPosition(8, 35)
wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
wndItem.Show()
## PickMoneyDialog
import uiPickMoney
dlgPickMoney = uiPickMoney.PickMoneyDialog()
dlgPickMoney.LoadDialog()
dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
dlgPickMoney.Hide()
## ChangePasswrod
dlgChangePassword = ChangePasswordDialog()
dlgChangePassword.LoadDialog()
dlgChangePassword.Hide()
## Close Button
self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
self.GetChild("ChangePasswordButton").SetEvent(ui.__mem_func__(self.OnChangePassword))
self.GetChild("ExitButton").SetEvent(ui.__mem_func__(self.Close))
self.wndItem = wndItem
self.dlgPickMoney = dlgPickMoney
self.dlgChangePassword = dlgChangePassword
self.wndBoard = self.GetChild("board")
#self.wndMoney = self.GetChild("Money")
#self.wndMoneySlot = self.GetChild("Money_Slot")
#self.wndMoneySlot.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
## Initialize
self.SetTableSize(3)
self.RefreshSafeboxMoney()
def OpenPickMoneyDialog(self):
if mouseModule.mouseController.isAttached():
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
if player.SLOT_TYPE_INVENTORY == mouseModule.mouseController.GetAttachedType():
if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
net.SendSafeboxSaveMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
snd.PlaySound("sound/ui/money.wav")
mouseModule.mouseController.DeattachObject()
else:
curMoney = safebox.GetMoney()
if curMoney <= 0:
return
self.dlgPickMoney.Open(curMoney)
def ShowWindow(self, size):
(self.xSafeBoxStart, self.ySafeBoxStart, z) = player.GetMainCharacterPosition()
self.SetTableSize(size)
self.Show()
def __MakePageButton(self, pageCount):
self.curPageIndex = 0
self.pageButtonList = []
text = "I"
pos = -int(float(pageCount-1)/2 * 52)
for i in xrange(pageCount):
button = ui.RadioButton()
button.SetParent(self)
button.SetUpVisual("d:/ymir work/ui/game/windows/tab_button_middle_01.sub")
button.SetOverVisual("d:/ymir work/ui/game/windows/tab_button_middle_02.sub")
button.SetDownVisual("d:/ymir work/ui/game/windows/tab_button_middle_03.sub")
button.SetWindowHorizontalAlignCenter()
button.SetWindowVerticalAlignBottom()
button.SetPosition(pos, 85)
button.SetText(text)
button.SetEvent(lambda arg=i: self.SelectPage(arg))
button.Show()
self.pageButtonList.append(button)
pos += 52
text += "I"
self.pageButtonList[0].Down()
def SelectPage(self, index):
self.curPageIndex = index
for btn in self.pageButtonList:
btn.SetUp()
self.pageButtonList[index].Down()
self.RefreshSafebox()
def __LocalPosToGlobalPos(self, local):
return self.curPageIndex*safebox.SAFEBOX_PAGE_SIZE + local
def SetTableSize(self, size):
pageCount = max(1, size / safebox.SAFEBOX_SLOT_Y_COUNT)
pageCount = min(3, pageCount)
size = safebox.SAFEBOX_SLOT_Y_COUNT
self.__MakePageButton(pageCount)
self.wndItem.ArrangeSlot(0, safebox.SAFEBOX_SLOT_X_COUNT, size, 32, 32, 0, 0)
self.wndItem.RefreshSlot()
self.wndItem.SetSlotBaseImage("d:/ymir work/ui/public/Slot_Base.sub", 1.0, 1.0, 1.0, 1.0)
wnd_height = 130 + 32 * size
self.wndBoard.SetSize(self.BOX_WIDTH, wnd_height)
self.SetSize(self.BOX_WIDTH, wnd_height)
self.UpdateRect()
def RefreshSafebox(self):
getItemID=safebox.GetItemID
getItemCount=safebox.GetItemCount
setItemID=self.wndItem.SetItemSlot
for i in xrange(safebox.SAFEBOX_PAGE_SIZE):
slotIndex = self.__LocalPosToGlobalPos(i)
itemCount = getItemCount(slotIndex)
if itemCount <= 1:
itemCount = 0
setItemID(i, getItemID(slotIndex), itemCount)
self.wndItem.RefreshSlot()
def RefreshSafeboxMoney(self):
pass
#self.wndMoney.SetText(str(safebox.GetMoney()))
def SetItemToolTip(self, tooltip):
self.tooltipItem = tooltip
def Close(self):
net.SendChatPacket("/safebox_close")
def CommandCloseSafebox(self):
if self.tooltipItem:
self.tooltipItem.HideToolTip()
self.dlgPickMoney.Close()
self.dlgChangePassword.Close()
self.Hide()
## Slot Event
def SelectEmptySlot(self, selectedSlotPos):
selectedSlotPos = self.__LocalPosToGlobalPos(selectedSlotPos)
if mouseModule.mouseController.isAttached():
attachedSlotType = mouseModule.mouseController.GetAttachedType()
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
if player.SLOT_TYPE_SAFEBOX == attachedSlotType:
net.SendSafeboxItemMovePacket(attachedSlotPos, selectedSlotPos, 0)
#snd.PlaySound("sound/ui/drop.wav")
else:
attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
if player.RESERVED_WINDOW == attachedInvenType:
return
if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
net.SendSafeboxSaveMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
snd.PlaySound("sound/ui/money.wav")
else:
net.SendSafeboxCheckinPacket(attachedInvenType, attachedSlotPos, selectedSlotPos)
#snd.PlaySound("sound/ui/drop.wav")
mouseModule.mouseController.DeattachObject()
def SelectItemSlot(self, selectedSlotPos):
selectedSlotPos = self.__LocalPosToGlobalPos(selectedSlotPos)
if mouseModule.mouseController.isAttached():
attachedSlotType = mouseModule.mouseController.GetAttachedType()
if player.SLOT_TYPE_INVENTORY == attachedSlotType:
if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
net.SendSafeboxSaveMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
snd.PlaySound("sound/ui/money.wav")
else:
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
#net.SendSafeboxCheckinPacket(attachedSlotPos, selectedSlotPos)
#snd.PlaySound("sound/ui/drop.wav")
mouseModule.mouseController.DeattachObject()
else:
curCursorNum = app.GetCursor()
if app.SELL == curCursorNum:
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SAFEBOX_SELL_DISABLE_SAFEITEM)
elif app.BUY == curCursorNum:
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SHOP_BUY_INFO)
else:
selectedItemID = safebox.GetItemID(selectedSlotPos)
mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_SAFEBOX, selectedSlotPos, selectedItemID)
snd.PlaySound("sound/ui/pick.wav")
def UseItemSlot(self, slotIndex):
mouseModule.mouseController.DeattachObject()
def __ShowToolTip(self, slotIndex):
if self.tooltipItem:
self.tooltipItem.SetSafeBoxItem(slotIndex)
def OverInItem(self, slotIndex):
slotIndex = self.__LocalPosToGlobalPos(slotIndex)
self.wndItem.SetUsableItem(FALSE)
self.__ShowToolTip(slotIndex)
def OverOutItem(self):
self.wndItem.SetUsableItem(FALSE)
if self.tooltipItem:
self.tooltipItem.HideToolTip()
def OnPickMoney(self, money):
mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_SAFEBOX, money)
def OnChangePassword(self):
self.dlgChangePassword.Open()
def OnPressEscapeKey(self):
self.Close()
return TRUE
def OnUpdate(self):
USE_SAFEBOX_LIMIT_RANGE = 1000
(x, y, z) = player.GetMainCharacterPosition()
if abs(x - self.xSafeBoxStart) > USE_SAFEBOX_LIMIT_RANGE or abs(y - self.ySafeBoxStart) > USE_SAFEBOX_LIMIT_RANGE:
self.Close()
class MallWindow(ui.ScriptWindow):
BOX_WIDTH = 176
def __init__(self):
ui.ScriptWindow.__init__(self)
self.tooltipItem = None
self.sellingSlotNumber = -1
self.pageButtonList = []
self.curPageIndex = 0
self.isLoaded = 0
self.xSafeBoxStart = 0
self.ySafeBoxStart = 0
self.__LoadWindow()
def __del__(self):
ui.ScriptWindow.__del__(self)
def Show(self):
self.__LoadWindow()
ui.ScriptWindow.Show(self)
def Destroy(self):
self.ClearDictionary()
self.tooltipItem = None
self.wndBoard = None
self.wndItem = None
self.pageButtonList = []
def __LoadWindow(self):
if self.isLoaded == 1:
return
self.isLoaded = 1
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "UIScript/MallWindow.py")
from _weakref import proxy
## Item
wndItem = ui.GridSlotWindow()
wndItem.SetParent(self)
wndItem.SetPosition(8, 35)
wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
wndItem.Show()
## Close Button
self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
self.GetChild("ExitButton").SetEvent(ui.__mem_func__(self.Close))
self.wndItem = wndItem
self.wndBoard = self.GetChild("board")
## Initialize
self.SetTableSize(3)
def ShowWindow(self, size):
(self.xSafeBoxStart, self.ySafeBoxStart, z) = player.GetMainCharacterPosition()
self.SetTableSize(size)
self.Show()
def SetTableSize(self, size):
pageCount = max(1, size / safebox.SAFEBOX_SLOT_Y_COUNT)
pageCount = min(3, pageCount)
size = safebox.SAFEBOX_SLOT_Y_COUNT
self.wndItem.ArrangeSlot(0, safebox.SAFEBOX_SLOT_X_COUNT, size, 32, 32, 0, 0)
self.wndItem.RefreshSlot()
self.wndItem.SetSlotBaseImage("d:/ymir work/ui/public/Slot_Base.sub", 1.0, 1.0, 1.0, 1.0)
self.wndBoard.SetSize(self.BOX_WIDTH, 82 + 32*size)
self.SetSize(self.BOX_WIDTH, 85 + 32*size)
self.UpdateRect()
def RefreshMall(self):
getItemID=safebox.GetMallItemID
getItemCount=safebox.GetMallItemCount
setItemID=self.wndItem.SetItemSlot
for i in xrange(safebox.GetMallSize()):
itemID = getItemID(i)
itemCount = getItemCount(i)
if itemCount <= 1:
itemCount = 0
setItemID(i, itemID, itemCount)
self.wndItem.RefreshSlot()
def SetItemToolTip(self, tooltip):
self.tooltipItem = tooltip
def Close(self):
net.SendChatPacket("/mall_close")
def CommandCloseMall(self):
if self.tooltipItem:
self.tooltipItem.HideToolTip()
self.Hide()
## Slot Event
def SelectEmptySlot(self, selectedSlotPos):
if mouseModule.mouseController.isAttached():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MALL_CANNOT_INSERT)
mouseModule.mouseController.DeattachObject()
def SelectItemSlot(self, selectedSlotPos):
if mouseModule.mouseController.isAttached():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MALL_CANNOT_INSERT)
mouseModule.mouseController.DeattachObject()
else:
curCursorNum = app.GetCursor()
selectedItemID = safebox.GetMallItemID(selectedSlotPos)
mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_MALL, selectedSlotPos, selectedItemID)
snd.PlaySound("sound/ui/pick.wav")
def UseItemSlot(self, slotIndex):
mouseModule.mouseController.DeattachObject()
def __ShowToolTip(self, slotIndex):
if self.tooltipItem:
self.tooltipItem.SetMallItem(slotIndex)
def OverInItem(self, slotIndex):
self.__ShowToolTip(slotIndex)
def OverOutItem(self):
self.wndItem.SetUsableItem(FALSE)
if self.tooltipItem:
self.tooltipItem.HideToolTip()
def OnPressEscapeKey(self):
self.Close()
return TRUE
def OnUpdate(self):
USE_SAFEBOX_LIMIT_RANGE = 1000
(x, y, z) = player.GetMainCharacterPosition()
if abs(x - self.xSafeBoxStart) > USE_SAFEBOX_LIMIT_RANGE or abs(y - self.ySafeBoxStart) > USE_SAFEBOX_LIMIT_RANGE:
self.Close()
if __name__ == "__main__":
import app
import wndMgr
import systemSetting
import mouseModule
import grp
import ui
import chr
import background
import player
#wndMgr.SetOutlineFlag(TRUE)
app.SetMouseHandler(mouseModule.mouseController)
app.SetHairColorEnable(TRUE)
wndMgr.SetMouseHandler(mouseModule.mouseController)
wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight())
app.Create("METIN2 CLOSED BETA", systemSetting.GetWidth(), systemSetting.GetHeight(), 1)
mouseModule.mouseController.Create()
wnd = SafeboxWindow()
wnd.ShowWindow(1)
app.Loop()