import ui import mouseModule import player import net import snd import safebox import chat import app import locale 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 locale.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(locale.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, locale.SAFEBOX_SELL_DISABLE_SAFEITEM) elif app.BUY == curCursorNum: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.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, locale.MALL_CANNOT_INSERT) mouseModule.mouseController.DeattachObject() def SelectItemSlot(self, selectedSlotPos): if mouseModule.mouseController.isAttached(): chat.AppendChat(chat.CHAT_TYPE_INFO, locale.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()