Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import net
- import player
- import item
- import snd
- import shop
- import chr
- import wndMgr
- import app
- import chat
- import grp
- import ui
- import uiCommon
- import uiPickMoney
- import interfaceModule
- import uiToolTip
- import mouseModule
- import localeInfo
- import constInfo
- g_isEditingOfflineShop = False
- g_itemPriceDict = {}
- g_iRefreshDelay = 5000
- def Clear():
- global g_itemPriceDict
- global g_isEditingOfflineShop
- g_itemPriceDict = {}
- g_isEditingOfflineShop = False
- def IsOfflineShopItemPriceList():
- global g_itemPriceDict
- if g_itemPriceDict:
- return True
- else:
- return False
- def IsEditingOfflineShop():
- global g_isEditingOfflineShop
- if g_isEditingOfflineShop:
- return True
- else:
- return False
- def SetOfflineShopItemPrice(itemVNum, itemPrice):
- global g_itemPriceDict
- g_itemPriceDict[int(itemVNum)]=itemPrice
- def GetOfflineShopItemPrice(itemVNum):
- try:
- global g_itemPriceDict
- return g_itemPriceDict[itemVNum]
- except KeyError:
- return 0
- ###################################################################################################
- ## Offline Shop Sales
- class OfflineShopSalesWindow(ui.ScriptWindow):
- MAX_LINE_COUNT = 11
- def __init__(self):
- ui.ScriptWindow.__init__(self)
- self.isLoaded = 0
- self.SerchItemSlotList = {}
- self.ItemSlotButtonList = {}
- self.tooltipItem = None
- self.__LoadWindow()
- def __del__(self):
- ui.ScriptWindow.__del__(self)
- self.isLoaded = 0
- self.SerchItemSlotList = {}
- self.ItemSlotButtonList = {}
- self.tooltipItem = None
- def __LoadWindow(self):
- if self.isLoaded == 1:
- return
- self.isLoaded = 1
- try:
- pyScrLoader = ui.PythonScriptLoader()
- pyScrLoader.LoadScriptFile(self, "UIScript/OfflineShopSalesWindow.py")
- except:
- import exception
- exception.Abort("OfflineShopSalesWindow.LoadWindow.__LoadScript")
- try:
- self.__BindObject()
- except:
- import exception
- exception.Abort("OfflineShopSalesWindow.LoadWindow.__BindObject")
- try:
- self.__BindEvent()
- except:
- import exception
- exception.Abort("OfflineShopSalesWindow.LoadWindow.__BindEvent")
- self.__MakeResultSlot()
- try:
- self.RefreshList()
- except:
- import exception
- exception.Abort("OfflineShopSalesWindow.RefreshList")
- def __BindObject(self):
- self.board = self.GetChild("board")
- self.scrollbar = self.GetChild("scrollbar")
- def __BindEvent(self):
- self.board.SetCloseEvent(self.Close)
- self.scrollbar.SetUpScrollVisual("d:/ymir work/ui/game/mailbox/scroll_up_arrow_button")
- self.scrollbar.SetDownScrollVisual("d:/ymir work/ui/game/mailbox/scroll_down_arrow_button")
- self.scrollbar.Hide()
- def SetItemToolTip(self, tooltipItem):
- self.tooltipItem = tooltipItem
- def Close(self):
- constInfo.OFFLINE_SHOP_SALES = []
- self.Hide()
- self.isLoaded = 0
- def Destroy(self):
- self.Hide()
- self.ClearDictionary()
- def OnPressEscapeKey(self):
- self.Close()
- return True
- def Show(self):
- self.__LoadWindow()
- ui.ScriptWindow.Show(self)
- self.SetCenterPosition()
- self.SetTop()
- def __MakeResultSlot(self):
- yPos = 0
- for i in range(0, self.MAX_LINE_COUNT):
- yPos = 63 + i * 25
- BuyerNameImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/parameter_slot_04.sub", 20, yPos)
- BuyerNameImage.SetAlpha(0)
- BuyerNameSlot = ui.MakeTextLine(BuyerNameImage)
- self.Children.append(BuyerNameImage)
- self.Children.append(BuyerNameSlot)
- ItemSlotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/parameter_slot_04.sub", 168, yPos)
- ItemSlotImage.SetAlpha(0)
- ItemNameSlot = ui.MakeTextLine(ItemSlotImage)
- self.Children.append(ItemSlotImage)
- self.Children.append(ItemNameSlot)
- CountSlotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/Parameter_Slot_01.sub", 305, yPos)
- CountSlotImage.SetAlpha(0)
- CountSlot = ui.MakeTextLine(CountSlotImage)
- self.Children.append(CountSlotImage)
- self.Children.append(CountSlot)
- PriceSlotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/Parameter_Slot_03.sub", 360, yPos)
- PriceSlotImage.SetAlpha(0)
- PriceSlot = ui.MakeTextLine(PriceSlotImage)
- self.Children.append(PriceSlotImage)
- self.Children.append(PriceSlot)
- DateSlotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/Parameter_Slot_01.sub", 486, yPos)
- DateSlotImage.SetAlpha(0)
- DateSlot = ui.MakeTextLine(DateSlotImage)
- self.Children.append(DateSlotImage)
- self.Children.append(DateSlot)
- anameslotlist = []
- anameslotlist.append(BuyerNameSlot)
- anameslotlist.append(ItemNameSlot)
- anameslotlist.append(CountSlot)
- anameslotlist.append(PriceSlot)
- anameslotlist.append(DateSlot)
- self.SerchItemSlotList[i] = anameslotlist
- itemSlotButtonImage = ui.MakeButton(self, 18, yPos, "", "d:/ymir work/ui/", "tab_01.tga", "tab_02.tga", "tab_02.tga")
- itemSlotButtonImage.Hide()
- itemSlotButtonImage.SetEvent(ui.__mem_func__(self.__SelectItem), i)
- self.Children.append(itemSlotButtonImage)
- TempitemSlotButtonImage = []
- TempitemSlotButtonImage.append(itemSlotButtonImage)
- self.ItemSlotButtonList[i] = TempitemSlotButtonImage
- def GetItemName(self, itemVNum):
- if itemVNum != 0:
- item.SelectItem(itemVNum)
- itemName = item.GetItemName()
- return itemName
- def GetList(self, line):
- SaleList = constInfo.OFFLINE_SHOP_SALES
- SaleListCount = len(SaleList)
- if line < SaleListCount:
- return (
- SaleList[line][0],
- SaleList[line][1],
- SaleList[line][2],
- SaleList[line][3],
- SaleList[line][4],
- SaleList[line][5],
- )
- def FormatSecToDate(self, time):
- import datetime
- return (
- datetime.datetime.fromtimestamp(
- int(time)
- ).strftime("%d %b. %H:%M")
- )
- def RefreshList(self):
- SaleList = constInfo.OFFLINE_SHOP_SALES
- if not SaleList:
- return
- for line, nameSlotList in self.SerchItemSlotList.items():
- if line < len(SaleList):
- buyerName, itemVnum, count, price, date = self.GetList(line)
- nameSlotList[0].SetText(buyerName)
- nameSlotList[1].SetText(self.GetItemName(itemVnum))
- nameSlotList[2].SetText(str(count))
- nameSlotList[3].SetText(self.NumberToMoneyString(price))
- nameSlotList[4].SetText(date)
- self.ItemSlotButtonList[line][0].Show()
- else:
- nameSlotList[0].SetText("")
- nameSlotList[1].SetText("")
- nameSlotList[2].SetText("")
- nameSlotList[3].SetText("")
- nameSlotList[4].SetText("")
- self.ItemSlotButtonList[line][0].Hide()
- if len(SaleList) > self.MAX_LINE_COUNT:
- self.board.SetSize(570 + 15, 350)
- self.scrollbar.SetMiddleBarSize(float(self.MAX_LINE_COUNT) / float(len(SaleList)))
- self.scrollbar.SetScrollBarSize(300)
- self.scrollbar.SetScrollEvent(self.OnScroll)
- self.scrollbar.Show()
- else:
- self.SetSize(570, 350)
- self.scrollbar.Hide()
- def OnScroll(self):
- if not self.SerchItemSlotList:
- return
- SaleList = constInfo.OFFLINE_SHOP_SALES
- if not SaleList:
- return
- dict_len = len(self.SerchItemSlotList)
- pos = int(self.scrollbar.GetPos() * (len(SaleList) - dict_len))
- for line, nameSlotList in self.SerchItemSlotList.items():
- if line < len(SaleList):
- buyerName, itemVnum, count, price, date = self.GetList(line + pos)
- nameSlotList[0].SetText(buyerName)
- nameSlotList[1].SetText(self.GetItemName(itemVnum))
- nameSlotList[2].SetText(str(count))
- nameSlotList[3].SetText(self.NumberToMoneyString(price))
- nameSlotList[4].SetText(date)
- self.ItemSlotButtonList[line][0].Show()
- else:
- nameSlotList[0].SetText("")
- nameSlotList[1].SetText("")
- nameSlotList[2].SetText("")
- nameSlotList[3].SetText("")
- nameSlotList[4].SetText("")
- self.ItemSlotButtonList[line][0].Hide()
- def OnRunMouseWheel(self, len):
- if len > 0:
- self.scrollbar.OnUp()
- else:
- self.scrollbar.OnDown()
- def __SelectItem(self, index):
- # self.Close()
- pass
- def NumberToMoneyString(self,n) :
- if n <= 0 :
- return "0"
- return "%s %s" % ('.'.join([ i-3<0 and str(n)[:i] or str(n)[i-3:i] for i in range(len(str(n))%3, len(str(n))+1, 3) if i ]), "")
- ###################################################################################################
- ## Open Offline Shop
- class OpenOfflineShop(ui.ScriptWindow):
- TOOLTIP_SPECIAL_COLOR = grp.GenerateColor(1.0, 0.7843, 0.0, 1.0)
- REQUIRED_ITEM = [71049, 1]
- TIME_DICT = {
- 1 : [localeInfo.OFFLINE_SHOP_OPEN_TIME_1, 2500000],
- 2 : [localeInfo.OFFLINE_SHOP_OPEN_TIME_2, 5000000],
- 3 : [localeInfo.OFFLINE_SHOP_OPEN_TIME_3, 15000000],
- 4 : [localeInfo.OFFLINE_SHOP_OPEN_TIME_4, 50000000],
- }
- def __init__(self):
- ui.ScriptWindow.__init__(self)
- self.isLoaded = 0
- self.required_item_slot = None
- self.required_item_vnum = 0
- self.required_item_count = 0
- self.tooltip_item = None
- self.money_text_window = None
- self.money_text = 0
- self.time_select_text_window = None
- self.time_select_button = None
- self.time_button_dict = {}
- self.time_select_list_open = False
- self.time_select_window_height = 0
- self.mouse_over_img = None
- self.time_select_text = None
- self.selected_time = 0
- self.interface = None
- self.shopManagerDialog = None
- self.inputDialog = None
- self.tooltip = None
- self.tooltip_button = None
- self.tooltip_list = [
- localeInfo.OFFLINE_SHOP_TOOLTIP_LINE1,
- localeInfo.OFFLINE_SHOP_TOOLTIP_LINE2,
- localeInfo.OFFLINE_SHOP_TOOLTIP_LINE3,
- ]
- self.__LoadWindow()
- def __del__(self):
- ui.ScriptWindow.__del__(self)
- def Show(self):
- self.__LoadWindow()
- ui.ScriptWindow.Show(self)
- self.SetTop()
- def Hide(self):
- wndMgr.Hide(self.hWnd)
- def Close(self):
- if self.tooltip_item:
- self.tooltip_item.HideToolTip()
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- self.Hide()
- def OnPressEscapeKey(self):
- self.Close()
- return True
- def __LoadScript(self, fileName):
- pyScrLoader = ui.PythonScriptLoader()
- pyScrLoader.LoadScriptFile(self, fileName)
- def __LoadWindow(self):
- if self.isLoaded == 1:
- return
- try:
- self.__LoadScript("UIScript/OpenOfflineShopDialog.py")
- except:
- import exception
- exception.Abort("OpenOfflineShop.LoadWindow.__LoadScript")
- try:
- self.__BindObject()
- except:
- import exception
- exception.Abort("OpenOfflineShop.LoadWindow.__BindObject")
- try:
- self.__BindEvent()
- except:
- import exception
- exception.Abort("OpenOfflineShop.LoadWindow.__BindEvent")
- def Destroy(self):
- self.isLoaded = 0
- if self.required_item_window:
- del self.required_item_window
- if self.required_item_slot:
- del self.required_item_slot
- self.required_item_vnum = 0
- self.required_item_count = 0
- self.tooltip_item = None
- if self.money_text_window:
- del self.money_text_window
- if self.money_text:
- del self.money_text
- if self.time_select_text_window:
- del self.time_select_text_window
- if self.time_select_text:
- del self.time_select_text
- if self.selected_time:
- del self.selected_time
- if self.time_select_button:
- del self.time_select_button
- if self.mouse_over_img:
- del self.mouse_over_img
- if self.time_button_dict:
- del self.time_button_dict
- self.time_select_list_open = False
- self.time_select_window_height = 0
- self.interface = None
- self.shopManagerDialog = None
- self.tooltip = None
- self.tooltip_button = None
- self.inputDialog = None
- def __BindObject(self):
- self.tooltip_button = self.GetChild("tooltip_button")
- self.required_item_window = self.GetChild("required_item_window")
- self.required_item_slot = self.GetChild("required_item_slot")
- self.money_text = self.GetChild("money_text")
- self.time_select_text_window = self.GetChild("time_select_text_window")
- self.time_select_text = self.GetChild("time_select_text")
- self.time_select_button = self.GetChild("time_select_button")
- self.time_select_window = self.GetChild("time_select_window")
- self.mouse_over_img = ui.ExpandedImageBox()
- self.mouse_over_img.LoadImage("d:/ymir work/ui/quest_re/button_over.sub")
- self.mouse_over_img.Hide()
- self.__CreateTimeNameButton()
- def __BindEvent(self):
- self.GetChild("title_bar").SetCloseEvent(ui.__mem_func__(self.Close))
- self.GetChild("cancel_button").SetEvent(ui.__mem_func__(self.Close))
- self.GetChild("ok_button").SetEvent(ui.__mem_func__(self.OpenShop))
- self.tooltip = self.__CreateGameTypeToolTip(localeInfo.OFFLINE_SHOP_TOOLTIP_TITLE, self.tooltip_list)
- self.tooltip.SetTop()
- self.tooltip_button.SetToolTipWindow(self.tooltip)
- if self.time_select_text_window:
- self.time_select_text_window.SetEvent(ui.__mem_func__(self.__ClickDungeonSelectButton))
- self.time_select_text_window.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.__ClickDungeonSelectButton))
- if self.time_select_button:
- self.time_select_button.SetEvent(ui.__mem_func__(self.__ClickDungeonSelectButton))
- if self.required_item_slot:
- self.required_item_slot.SetOverInItemEvent(ui.__mem_func__(self.__SlotOverInItem))
- self.required_item_slot.SetOverOutItemEvent(ui.__mem_func__(self.__SlotOverOutItem))
- def SetItemToolTip(self, tooltip_item):
- self.tooltip_item = tooltip_item
- def SetCancelEvent(self, event):
- self.title_bar.SetCloseEvent(event)
- self.cancel_button.SetEvent(event)
- def __CreateGameTypeToolTip(self, title, descList):
- tooltip = uiToolTip.ToolTip()
- tooltip.SetTitle(title)
- tooltip.AppendSpace(7)
- for desc in descList:
- tooltip.AutoAppendTextLine(desc)
- tooltip.AlignHorizonalCenter()
- tooltip.SetTop()
- return tooltip
- def __CreateTimeNameButton(self):
- if not self.time_select_window:
- return
- if not self.TIME_DICT:
- return
- self.selected_time = 1
- self.money_text.SetText(localeInfo.NumberToMoneyString(self.TIME_DICT[1][1]))
- button_height = 16
- dict_len = len(self.TIME_DICT)
- self.time_select_window_height = dict_len * button_height
- for i, key in enumerate(sorted(self.TIME_DICT.iterkeys())):
- button = ui.Button()
- button.SetParent(self.time_select_window)
- button.SetPosition(0, button_height * i)
- if 1 == dict_len:
- button.SetUpVisual("d:/ymir work/ui/game/party_match/button_one.sub")
- button.SetDownVisual("d:/ymir work/ui/game/party_match/button_one.sub")
- button.SetOverVisual("d:/ymir work/ui/game/party_match/button_one.sub")
- elif i == 0:
- button.SetUpVisual("d:/ymir work/ui/game/party_match/button_top.sub")
- button.SetDownVisual("d:/ymir work/ui/game/party_match/button_top.sub")
- button.SetOverVisual("d:/ymir work/ui/game/party_match/button_top.sub")
- elif i == dict_len - 1:
- button.SetUpVisual("d:/ymir work/ui/game/party_match/button_bottom.sub")
- button.SetDownVisual("d:/ymir work/ui/game/party_match/button_bottom.sub")
- button.SetOverVisual("d:/ymir work/ui/game/party_match/button_bottom.sub")
- else:
- button.SetUpVisual("d:/ymir work/ui/game/party_match/button_middle.sub")
- button.SetDownVisual("d:/ymir work/ui/game/party_match/button_middle.sub")
- button.SetOverVisual("d:/ymir work/ui/game/party_match/button_middle.sub")
- button.SetEvent(ui.__mem_func__(self.__ClickDungeonSelect), key)
- button.SetOverEvent(ui.__mem_func__(self.__ClickTimeButtonOver), key)
- button.SetOverOutEvent(ui.__mem_func__(self.__ClickTimeButtonOverOut), key)
- button.SetText(self.TIME_DICT[key][0])
- button.Hide()
- self.time_button_dict[key] = button
- self.__SetSlotRequiredItem(0, self.REQUIRED_ITEM[0], self.REQUIRED_ITEM[1])
- def __ClickTimeButtonOver(self, time_index):
- if not self.mouse_over_img:
- return
- button = self.time_button_dict.get(time_index, 0)
- if 0 == button:
- return
- (button_x, button_y) = button.GetLocalPosition()
- self.mouse_over_img.SetPosition(74 + button_x, 57-4 + button_y )
- self.mouse_over_img.Show()
- def __ClickTimeButtonOverOut(self, time_index):
- if not self.mouse_over_img:
- return
- self.mouse_over_img.Hide()
- def __ClickDungeonSelect(self, time_index):
- if not time_index in self.TIME_DICT:
- return
- for button in self.time_button_dict.values():
- button.Hide()
- self.__DungeonSelectWindow(False)
- self.selected_time = time_index
- if self.time_select_text:
- self.time_select_text.SetText(self.TIME_DICT[time_index][0])
- self.money_text.SetText(localeInfo.NumberToMoneyString(self.TIME_DICT[time_index][1]))
- self.__SetSlotRequiredItem(0, self.REQUIRED_ITEM[0], self.REQUIRED_ITEM[1])
- def __DungeonSelectWindow(self, show):
- if True == show:
- self.time_select_list_open = True
- if self.time_select_window:
- self.time_select_window.SetSize(130, self.time_select_window_height)
- for button in self.time_button_dict.values():
- button.Show()
- else:
- self.time_select_list_open = False
- if self.time_select_window:
- self.time_select_window.SetSize(130, 0)
- for button in self.time_button_dict.values():
- button.Hide()
- def __ClickDungeonSelectButton(self):
- if self.time_select_list_open:
- self.__DungeonSelectWindow(False)
- else:
- self.__DungeonSelectWindow(True)
- def __SetSlotRequiredItem(self, slotIndex, item_vnum, item_count):
- if not self.REQUIRED_ITEM:
- return
- self.required_item_slot.SetItemSlot(slotIndex, item_vnum, item_count)
- self.required_item_vnum = item_vnum
- self.required_item_count = item_count
- item.SelectItem(item_vnum)
- self.tooltip_item = uiToolTip.ItemToolTip()
- self.tooltip_item.AppendTextLine(item.GetItemName(), self.TOOLTIP_SPECIAL_COLOR)
- self.tooltip_item.AppendDescription(item.GetItemDescription(), 26)
- self.tooltip_item.AlignHorizonalCenter()
- def __SlotOverInItem(self):
- if self.tooltip_item:
- if self.required_item_vnum and self.required_item_count:
- self.tooltip_item.ShowToolTip()
- def __SlotOverOutItem(self):
- if self.tooltip_item:
- self.tooltip_item.HideToolTip()
- def BindInterface(self, interface):
- self.interface = interface
- def OpenShop(self):
- if not self.TIME_DICT and not self.selected_time:
- return
- has_item = False
- for i in xrange(player.INVENTORY_PAGE_SIZE * player.INVENTORY_PAGE_COUNT):
- itemVnum = player.GetItemIndex(i)
- itemCount = player.GetItemCount(i)
- if itemVnum == self.REQUIRED_ITEM[0] and itemCount == self.REQUIRED_ITEM[1]:
- has_item = True
- break
- if player.GetElk() < self.TIME_DICT[self.selected_time][1]:
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.OFFLINE_SHOP_OPEN_NO_MONEY % self.TIME_DICT[self.selected_time][0])
- return
- if not has_item:
- item.SelectItem(self.required_item_vnum)
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.OFFLINE_SHOP_OPEN_NO_ITEM % item.GetItemName())
- return
- if self.interface:
- self.interface.OpenOfflineShopInputNameDialog(self.selected_time)
- ###################################################################################################
- ## Offline Shop Manager
- class OfflineShopManagerWindow(ui.ScriptWindow):
- def __init__(self):
- ui.ScriptWindow.__init__(self)
- self.__LoadWindow()
- self.tooltipItem = None
- self.priceInputBoard = None
- self.questionDialog = None
- self.openDialog = None
- self.title = ""
- self.interface = None
- self.shopTime = None
- def __del__(self):
- ui.ScriptWindow.__del__(self)
- def RefreshStatus(self):
- getItemStatus = shop.GetOfflineShopItemStatus
- self.RefreshMoney()
- if IsEditingOfflineShop():
- global g_iRefreshDelay
- net.SendRefreshOfflineShop(g_iRefreshDelay)
- net.SendOfflineShopCheck(g_iRefreshDelay)
- for i in xrange(shop.OFFLINE_SHOP_SLOT_COUNT):
- if getItemStatus(i) == 2:
- self.itemSlotWindow.SetCantMouseEventSlot(i)
- else:
- self.itemSlotWindow.SetCanMouseEventSlot(i)
- def Refresh(self):
- getItemID = shop.GetOfflineShopItemID
- getItemCount = shop.GetOfflineShopItemCount
- getItemStatus = shop.GetOfflineShopItemStatus
- setItemID = self.itemSlotWindow.SetItemSlot
- if IsEditingOfflineShop():
- global g_iRefreshDelay
- net.SendOfflineShopCheck(g_iRefreshDelay)
- iCount = 0
- for i in xrange(shop.OFFLINE_SHOP_SLOT_COUNT):
- idx = i
- if (getItemID(idx) <= 0):
- iCount = iCount + 1
- itemCount = getItemCount(idx)
- if itemCount <= 1:
- itemCount = 0
- setItemID(i, getItemID(idx), itemCount)
- if iCount == shop.OFFLINE_SHOP_SLOT_COUNT:
- self.btnOpen.Show()
- self.btnDestroy.Hide()
- for i in xrange(shop.OFFLINE_SHOP_SLOT_COUNT):
- self.itemSlotWindow.SetCoverButton(i, "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga",\
- "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga",\
- "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga",\
- "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga", False, False)
- self.itemSlotWindow.SetAlwaysRenderCoverButton(i)
- return
- else:
- self.btnDestroy.Show()
- self.btnOpen.Hide()
- wndMgr.RefreshSlot(self.itemSlotWindow.GetWindowHandle())
- def RefreshMoney(self):
- global g_iRefreshDelay
- net.SendRefreshOfflineShopMoney(g_iRefreshDelay)
- money = player.GetCurrentOfflineShopMoney()
- self.wndMoney.SetText(localeInfo.NumberToMoneyString(money))
- def SetItemData(self, pos, itemID, itemCount, itemPrice):
- shop.SetOfflineShopItemData(pos, itemID, itemCount, itemPrice)
- def __LoadWindow(self):
- try:
- pyScrLoader = ui.PythonScriptLoader()
- pyScrLoader.LoadScriptFile(self, "UIScript/OfflineShopManagerDialog.py")
- except:
- import exception
- exception.Abort("OfflineShopManagerWindow.LoadWindow.LoadObject")
- try:
- GetObject = self.GetChild
- self.itemSlotWindow = GetObject("ItemSlot")
- self.titleBar = GetObject("TitleBar")
- self.btnSales = GetObject("SalesHistoryButton")
- self.btnOpen = GetObject("OpenShopButton")
- self.btnDestroy = GetObject("DestroyShopButton")
- self.wndMapIndex = GetObject("ShopLocation")
- self.wndTime = GetObject("ShopTime")
- self.timeIcon = GetObject("ShopTimeIcon")
- self.btnRefresh = GetObject("RefreshButton")
- self.wndMoneySlot = GetObject("MoneySlot")
- self.wndMoney = GetObject("Money")
- except:
- import exception
- exception.Abort("OfflineShopManagerWindow.LoadWindow.BindObject")
- self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
- self.btnSales.SetEvent(ui.__mem_func__(self.OpenSalesWindow))
- self.btnOpen.SetEvent(ui.__mem_func__(self.OpenShop))
- self.btnDestroy.SetEvent(ui.__mem_func__(self.DestroyShop))
- self.btnRefresh.SetEvent(ui.__mem_func__(self.RefreshShop))
- self.itemSlotWindow.SAFE_SetButtonEvent("LEFT", "EMPTY", self.SelectEmptySlot)
- self.itemSlotWindow.SAFE_SetButtonEvent("RIGHT", "EXIST", self.UnselectItemSlot)
- self.itemSlotWindow.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
- self.itemSlotWindow.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
- self.dlgPickMoney = uiPickMoney.PickMoneyDialog()
- self.dlgPickMoney.LoadDialog()
- self.dlgPickMoney.Hide()
- self.wndMoneySlot.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
- def Destroy(self):
- self.ClearDictionary()
- self.itemSlotWindow = None
- self.titleBar = None
- self.priceInputBoard = None
- self.questionDialog = None
- self.openDialog = None
- self.dlgPickMoney.Destroy()
- self.dlgPickMoney = 0
- self.wndMoney = None
- self.wndMoneySlot = None
- def Open(self, isOpen, mapIndex, time):
- global g_isEditingOfflineShop
- if isOpen:
- g_isEditingOfflineShop = True
- self.btnDestroy.Show()
- self.btnOpen.Hide()
- else:
- g_isEditingOfflineShop = False
- self.btnOpen.Show()
- self.btnDestroy.Hide()
- self.wndMapIndex.SetText(constInfo.MapNameByIndex(mapIndex))
- self.shopTime = int(time)
- self.wndMoney.SetText(localeInfo.NumberToMoneyString(player.GetCurrentOfflineShopMoney()))
- self.SetTop()
- self.Show()
- self.RefreshShop()
- def OpenShop(self):
- if self.interface:
- self.interface.OpenOfflineShopInputTimeDialog()
- def OpenSalesWindow(self):
- net.SendChatPacket("/offlineshop_sales")
- def DestroyShop(self):
- questionDialog = uiCommon.QuestionDialog()
- questionDialog.SetText(localeInfo.OFFLINE_SHOP_CLOSE_QUESTION)
- questionDialog.SetAcceptEvent(lambda arg = True: self.AnswerDestroyShop(arg))
- questionDialog.SetCancelEvent(lambda arg = False: self.AnswerDestroyShop(arg))
- questionDialog.Open()
- self.questionDialog = questionDialog
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
- def AnswerDestroyShop(self, flag):
- if flag:
- self.Close()
- net.SendDestroyOfflineShop()
- shop.ClearOfflineShopStock()
- if self.questionDialog:
- self.questionDialog.Close()
- self.questionDialog = None
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- def RefreshShop(self):
- if IsEditingOfflineShop():
- net.SendRefreshOfflineShop()
- net.SendOfflineShopCheck()
- else:
- net.SendRefreshUnsoldItems()
- self.Refresh()
- def Close(self):
- global g_isEditingOfflineShop
- g_isEditingOfflineShop = False
- if self.priceInputBoard:
- self.priceInputBoard.Close()
- if self.questionDialog:
- self.OnCloseQuestionDialog()
- self.title = ""
- self.priceInputBoard = None
- self.Hide()
- if self.dlgPickMoney:
- self.dlgPickMoney.Close()
- def OnPressEscapeKey(self):
- self.Close()
- return True
- def OnPressExitKey(self):
- self.Close()
- return True
- def AcceptInputPrice(self):
- if not self.priceInputBoard:
- return True
- text = self.priceInputBoard.GetText()
- if not text:
- return True
- if not text.isdigit():
- return True
- if int(text) <= 0:
- return True
- attachedInvenType = self.priceInputBoard.sourceWindowType
- sourceSlotPos = self.priceInputBoard.sourceSlotPos
- targetSlotPos = self.priceInputBoard.targetSlotPos
- price = int(self.priceInputBoard.GetText())
- if IsOfflineShopItemPriceList():
- SetOfflineShopItemPrice(self.priceInputBoard.itemVNum, price)
- net.SendAddOfflineShopItem(sourceSlotPos, targetSlotPos, price, attachedInvenType)
- snd.PlaySound("sound/ui/drop.wav")
- #####
- self.CancelInputPrice()
- def CancelInputPrice(self):
- if self.inven:
- page = self.inven.GetInventoryPageIndex() # range 0 ~ 1
- if (page * INVENTORY_PAGE_SIZE) <= pos < ((page + 1) * INVENTORY_PAGE_SIZE): # range 0 ~ 44, 45 ~ 89
- idx = pos - (page * INVENTORY_PAGE_SIZE)
- self.inven.wndItem.SetCanMouseEventSlot(idx)
- self.RefreshShop()
- self.priceInputBoard = None
- return True
- def OpenPickMoneyDialog(self):
- if not mouseModule.mouseController.isAttached():
- curMoney = player.GetCurrentOfflineShopMoney()
- if curMoney <= 0:
- return
- self.dlgPickMoney.SetTitleName(localeInfo.PICK_MONEY_TITLE)
- self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
- self.dlgPickMoney.Open(curMoney)
- self.dlgPickMoney.SetMax(10)
- def OnPickMoney(self, money):
- if money > 0:
- net.SendOfflineShopWithdrawMoney(money)
- self.RefreshMoney()
- def OnCloseQuestionDialog(self):
- if not self.questionDialog:
- return
- self.questionDialog.Close()
- self.questionDialog = None
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- def SelectEmptySlot(self, selectedSlotPos):
- if not IsEditingOfflineShop():
- return
- if self.priceInputBoard:
- return
- isAttached = mouseModule.mouseController.isAttached()
- if isAttached:
- attachedSlotType = mouseModule.mouseController.GetAttachedType()
- attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
- mouseModule.mouseController.DeattachObject()
- if (player.SLOT_TYPE_INVENTORY != attachedSlotType and player.SLOT_TYPE_DRAGON_SOUL_INVENTORY):
- return
- attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
- itemVNum = player.GetItemIndex(attachedInvenType, attachedSlotPos)
- item.SelectItem(itemVNum)
- if item.IsAntiFlag(item.ANTIFLAG_GIVE) or item.IsAntiFlag(item.ANTIFLAG_MYSHOP):
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.PRIVATE_SHOP_CANNOT_SELL_ITEM)
- return
- priceInputBoard = uiCommon.MoneyInputDialog()
- priceInputBoard.SetTitle(localeInfo.PRIVATE_SHOP_INPUT_PRICE_DIALOG_TITLE)
- priceInputBoard.SetAcceptEvent(ui.__mem_func__(self.AcceptInputPrice))
- priceInputBoard.SetCancelEvent(ui.__mem_func__(self.CancelInputPrice))
- priceInputBoard.Open()
- itemPrice = GetOfflineShopItemPrice(itemVNum)
- if itemPrice > 0:
- priceInputBoard.SetValue(itemPrice)
- self.priceInputBoard = priceInputBoard
- self.priceInputBoard.itemVNum = itemVNum
- self.priceInputBoard.sourceWindowType = attachedInvenType
- self.priceInputBoard.sourceSlotPos = attachedSlotPos
- self.priceInputBoard.targetSlotPos = selectedSlotPos
- def UnselectItemSlot(self, selectedSlotPos):
- if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
- return
- self.AskRemoveItem(selectedSlotPos)
- def DropToInventory(self):
- attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
- self.AskBuyItem(attachedSlotPos)
- def AskRemoveItem(self, selectedSlotPos):
- itemIndex = shop.GetOfflineShopItemID(selectedSlotPos)
- item.SelectItem(itemIndex)
- itemName = item.GetItemName()
- questionDialog = uiCommon.QuestionDialog()
- questionDialog.SetText(localeInfo.OFFLINE_SHOP_REMOVE_ITEM_QUESTION % itemName)
- questionDialog.SetAcceptEvent(lambda arg = True : self.AnswerRemoveItem(arg))
- questionDialog.SetCancelEvent(lambda arg = False : self.AnswerRemoveItem(arg))
- questionDialog.Open()
- questionDialog.pos = selectedSlotPos
- self.questionDialog = questionDialog
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
- def AnswerRemoveItem(self, flag):
- if flag:
- pos = self.questionDialog.pos
- if IsEditingOfflineShop():
- net.SendRemoveOfflineShopItem(pos)
- net.SendOfflineShopCheck()
- else:
- net.SendOfflineShopTakeItem(pos)
- self.questionDialog.Close()
- self.questionDialog = None
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- self.RefreshShop()
- def SetItemToolTip(self, tooltipItem):
- self.tooltipItem = tooltipItem
- def OverInItem(self, slotIndex):
- if mouseModule.mouseController.isAttached():
- return
- if None != self.tooltipItem:
- self.tooltipItem.SetOfflineShopItem(slotIndex)
- def OverOutItem(self):
- if None != self.tooltipItem:
- self.tooltipItem.HideToolTip()
- def OnUpdate(self):
- if IsEditingOfflineShop():
- leftSec = max(0, self.shopTime - app.GetGlobalTimeStamp())
- if leftSec > 0:
- self.wndTime.SetText(localeInfo.OFFLINE_SHOP_OPEN_TIME % str(self.__FormatTime(leftSec)))
- else:
- self.wndTime.SetText(localeInfo.OFFLINE_SHOP_CLOSED)
- else:
- self.wndTime.SetText(localeInfo.OFFLINE_SHOP_CLOSED)
- self.RefreshStatus()
- def __FormatTime(self, time):
- m, s = divmod(time, 60)
- h, m = divmod(m, 60)
- return "%1d:%02d:%02d" % (h, m, s)
- ###################################################################################################
- ## Offline Shop
- class OfflineShopDialog(ui.ScriptWindow):
- def __init__(self):
- ui.ScriptWindow.__init__(self)
- self.tooltipItem = 0
- self.xShopStart = 0
- self.yShopStart = 0
- self.questionDialog = None
- self.popup = None
- self.itemBuyQuestionDialog = None
- def __del__(self):
- ui.ScriptWindow.__del__(self)
- def __GetRealIndex(self, i):
- return i # shop.OFFLINE_SHOP_SLOT_COUNT + i
- def Refresh(self):
- getItemID = shop.GetOfflineShopItemID
- getItemVnum = shop.GetOfflineShopItemVnum
- getItemStatus = shop.GetOfflineShopItemStatus
- getItemCount = shop.GetOfflineShopItemCount
- setItemID = self.itemSlotWindow.SetItemSlot
- for i in xrange(shop.OFFLINE_SHOP_SLOT_COUNT):
- idx = self.__GetRealIndex(i)
- itemCount = getItemCount(idx)
- if itemCount <= 1:
- itemCount = 0
- setItemID(i, getItemID(idx), itemCount)
- item.SelectItem(getItemVnum(idx))
- (itemWidth, itemHeight) = item.GetItemSize()
- if getItemStatus(idx) == 2:
- self.itemSlotWindow.SetCantMouseEventSlot(i)
- else:
- self.itemSlotWindow.SetCanMouseEventSlot(i)
- self.viewCount.SetText(localeInfo.OFFLINE_SHOP_VIEWS % shop.GetDisplayedCount())
- wndMgr.RefreshSlot(self.itemSlotWindow.GetWindowHandle())
- def LoadDialog(self):
- try:
- PythonScriptLoader = ui.PythonScriptLoader()
- PythonScriptLoader.LoadScriptFile(self, "UIScript/offlineshopdialog.py")
- except:
- import exception
- exception.Abort("OfflineShopDialog.LoadDialog.LoadObject")
- try:
- GetObject = self.GetChild
- self.itemSlotWindow = GetObject("ItemSlot")
- self.titleBar = GetObject("TitleBar")
- self.titleName = GetObject("TitleName")
- self.viewCount = GetObject("ViewCount")
- except:
- import exception
- exception.Abort("OfflineShopDialog.LoadDialog.BindObject")
- self.itemSlotWindow.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
- self.itemSlotWindow.SAFE_SetButtonEvent("LEFT", "EMPTY", self.SelectEmptySlot)
- self.itemSlotWindow.SAFE_SetButtonEvent("LEFT", "EXIST", self.SelectItemSlot)
- self.itemSlotWindow.SAFE_SetButtonEvent("RIGHT", "EXIST", self.UnselectItemSlot)
- self.itemSlotWindow.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
- self.itemSlotWindow.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
- self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
- self.Refresh()
- def Destroy(self):
- self.Close()
- self.ClearDictionary()
- self.tooltipItem = 0
- self.itemSlotWindow = 0
- self.titleBar = 0
- self.questionDialog = None
- self.popup = None
- def Open(self, vid):
- isPrivateShop = False
- isMainPlayerPrivateShop = False
- isOfflineShop = True
- import chr
- if chr.IsNPC(vid):
- isPrivateShop = False
- else:
- isPrivateShop = True
- if player.IsMainCharacterIndex(vid):
- isMainPlayerPrivateShop = True
- else:
- isMainPlayerPrivateShop = False
- shop.Open(isPrivateShop, isMainPlayerPrivateShop, isOfflineShop)
- self.Refresh()
- self.SetTop()
- self.Show()
- self.titleName.SetText(localeInfo.OFFLINE_SHOP_TITLE % chr.GetNameByVID(vid))
- (self.xShopStart, self.yShopStart, z) = player.GetMainCharacterPosition()
- def Close(self):
- if self.itemBuyQuestionDialog:
- self.itemBuyQuestionDialog.Close()
- self.itemBuyQuestionDialog = None
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- if self.questionDialog:
- self.OnCloseQuestionDialog()
- shop.Close()
- net.SendOfflineShopEndPacket()
- self.CancelShopping()
- self.tooltipItem.HideToolTip()
- self.Hide()
- def OnPressEscapeKey(self):
- self.Close()
- return True
- def OnPressExitKey(self):
- self.Close()
- return True
- def OnBuy(self):
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SHOP_BUY_INFO)
- app.SetCursor(app.BUY)
- def CancelShopping(self):
- app.SetCursor(app.NORMAL)
- def __OnClosePopupDialog(self):
- self.pop = None
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- def OnCloseQuestionDialog(self):
- if not self.questionDialog:
- return
- self.questionDialog.Close()
- self.questionDialog = None
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- def SelectEmptySlot(self, selectedSlotPos):
- isAttached = mouseModule.mouseController.isAttached()
- if isAttached:
- if shop.IsOfflineShop():
- mouseModule.mouseController.DeattachObject()
- return
- def UnselectItemSlot(self, selectedSlotPos):
- if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
- return
- if shop.IsOfflineShop():
- if shop.GetOfflineShopItemStatus(selectedSlotPos) == 0:
- self.AskBuyItem(selectedSlotPos)
- def SelectItemSlot(self, selectedSlotPos):
- if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
- return
- isAttached = mouseModule.mouseController.isAttached()
- if not isAttached:
- if True == shop.IsMainPlayerPrivateShop():
- return
- curCursorNum = app.GetCursor()
- if app.BUY == curCursorNum:
- self.AskBuyItem(selectedSlotPos)
- else:
- selectedItemID = shop.GetOfflineShopItemID(selectedSlotPos)
- itemCount = shop.GetOfflineShopItemCount(selectedSlotPos)
- type = player.SLOT_TYPE_SHOP
- if shop.IsOfflineShop():
- type = player.SLOT_TYPE_OFFLINE_SHOP
- mouseModule.mouseController.AttachObject(self, type, selectedSlotPos, selectedItemID, itemCount)
- mouseModule.mouseController.SetCallBack("INVENTORY", ui.__mem_func__(self.DropToInventory))
- snd.PlaySound("sound/ui/pick.wav")
- def DropToInventory(self):
- attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
- self.AskBuyItem(attachedSlotPos)
- def AskBuyItem(self, slotPos):
- slotPos = self.__GetRealIndex(slotPos)
- itemIndex = shop.GetOfflineShopItemID(slotPos)
- itemPrice = shop.GetOfflineShopItemPrice(slotPos)
- itemCount = shop.GetOfflineShopItemCount(slotPos)
- item.SelectItem(itemIndex)
- itemName = item.GetItemName()
- itemBuyQuestionDialog = uiCommon.QuestionDialog()
- itemBuyQuestionDialog.SetText(localeInfo.DO_YOU_BUY_ITEM(itemName, itemCount, localeInfo.NumberToMoneyString(itemPrice)))
- itemBuyQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerBuyItem(arg))
- itemBuyQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerBuyItem(arg))
- itemBuyQuestionDialog.Open()
- itemBuyQuestionDialog.pos = slotPos
- self.itemBuyQuestionDialog = itemBuyQuestionDialog
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
- def AnswerBuyItem(self, flag):
- if flag:
- pos = self.itemBuyQuestionDialog.pos
- net.SendOfflineShopBuyPacket(pos)
- self.itemBuyQuestionDialog.Close()
- self.itemBuyQuestionDialog = None
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- def SetItemToolTip(self, tooltipItem):
- self.tooltipItem = tooltipItem
- def OverInItem(self, slotIndex):
- slotIndex = self.__GetRealIndex(slotIndex)
- if mouseModule.mouseController.isAttached():
- return
- if 0 != self.tooltipItem:
- self.tooltipItem.SetOfflineShopItem(slotIndex)
- def OverOutItem(self):
- if 0 != self.tooltipItem:
- self.tooltipItem.HideToolTip()
Advertisement
Add Comment
Please, Sign In to add comment