Jump to content

GooM

Inactive Member
  • Posts

    1
  • Joined

  • Last visited

  • Feedback

    0%

About GooM

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

GooM's Achievements

Rookie

Rookie (2/16)

  • Reacting Well
  • Conversation Starter
  • One Year In
  • Week One Done
  • One Month Later

Recent Badges

0

Reputation

  1. hello i have a proplem with combobox text in type of search like : weapons and armors and stuuf , the text are going out of the combobox i tryed for 2 weaks i read the hole file 5 times and i cant fine the method thats can edit the setpositon , this is an image for the problem : [Hidden Content] $$$$$$$$$$ - I CAN PAY IF I HAVE TO - $$$$$$$$$$$$$$$ and if it will make it easer to fix or something this is the ( uiofflineshop.py ) and if coure the file is working fine for english but i need to setpositon to arabic as you can see if __USE_DYNAMIC_MODULE__: import pyapi import offlineshop import ui app = __import__(pyapi.GetModuleName("app")) import item player = __import__(pyapi.GetModuleName("player")) import dbg import uicommon import uitooltip import ime import snd import uipickmoney import grp import mousemodule #import renderTarget import wndMgr import localeinfo ENABLE_ITEM_WITHDRAW_QUESTION_SHOP_SAFEBOX = False SUBTYPE_NOSET = 255 SEARCH_RESULT_LIMIT = 250 COLOR_TEXT_SHORTCUT = grp.GenerateColor(1.0,1.0,0.5,1.0) YANG_PER_CHEQUE = 1000000000 ENABLE_CHEQUE_SYSTEM = 0 ENABLE_WOLFMAN_CHARACTER = 0 ENABLE_MOUNT_COSTUME_SYSTEM = 0 ENABLE_ACCE_COSTUME_SYSTEM = 0 ENABLE_WEAPON_COSTUME_SYSTEM = 0 ENABLE_MAGIC_REDUCTION_SYSTEM = 0 try: if app.ENABLE_CHEQUE_SYSTEM: ENABLE_CHEQUE_SYSTEM = 1 except: pass try: if app.ENABLE_WOLFMAN_CHARACTER: ENABLE_WOLFMAN_CHARACTER = 1 except: pass try: if app.ENABLE_MOUNT_COSTUME_SYSTEM: ENABLE_MOUNT_COSTUME_SYSTEM = 1 except: pass try: if app.ENABLE_ACCE_COSTUME_SYSTEM: ENABLE_ACCE_COSTUME_SYSTEM = 1 except: pass try: if app.ENABLE_WEAPON_COSTUME_SYSTEM: ENABLE_WEAPON_COSTUME_SYSTEM = 1 except: pass try: if app.ENABLE_MAGIC_REDUCTION_SYSTEM: ENABLE_MAGIC_REDUCTION_SYSTEM = 1 except: pass #globals methods used to know if are making a new shop (inventory stuff) def IsBuildingShop(): interface = offlineshop.GetOfflineshopBoard() if not interface: return False return interface.IsBuildingShop() def IsSaleSlot(win,slot): interface = offlineshop.GetOfflineshopBoard() if not interface: return False return interface.IsForSaleSlot(win,slot) #auctions def IsForAuctionSlot(win,slot): interface = offlineshop.GetOfflineshopBoard() if not interface: return False return interface.IsForAuctionSlot(win, slot) def IsBuildingAuction(): interface = offlineshop.GetOfflineshopBoard() if not interface: return False return interface.IsBuildingAuction() def PutsError(line): dbg.TraceError("offlineshop interface error : %s "%line) def NumberToString(num): if num < 0: return "-" + NumberToString(-num) parts = [] while num >= 1000: parts.insert(0,"%03d"%(num%1000)) num = num//1000 parts.insert(0,"%d"%num) return '.'.join(parts) def GetDurationString(dur): days = dur // (24 * 60) hours = (dur//60)%24 minutes = dur%60 res = " " if days > 0: res += localeinfo.OFFLINESHOP_DAY_TEXT%days + " " if hours > 0: res += localeinfo.OFFLINESHOP_HOUR_TEXT%hours + " " if minutes > 0: res += localeinfo.OFFLINESHOP_MINUTE_TEXT%minutes if days == 0 and hours == 0 and minutes == 0: return localeinfo.OFFLINESHOP_MINUTE_TEXT%0 return res def MakeSlotInfo(window, slotIndex, yang, cheque=0): res = {} itemIndex = player.GetItemIndex(window, slotIndex) itemCount = player.GetItemCount(window, slotIndex) res["slot"] = slotIndex res["window"]= window res["vnum"] = itemIndex res["count"] = itemCount res["socket"]= {} res["attr"] = {} res['locked_attr'] = player.GetItemAttrLocked(window, slotIndex) try: if ENABLE_CHANGELOOK_SYSTEM: res['trans'] = player.GetItemTransmutation(window, slotIndex) except: pass if ENABLE_CHEQUE_SYSTEM: res['cheque'] = cheque for x in xrange(player.ATTRIBUTE_SLOT_MAX_NUM): attr = player.GetItemAttribute(window, slotIndex, x) res['attr'][x] = {} res['attr'][x]["type"] = attr[0] res['attr'][x]["value"] = attr[1] for x in xrange(player.METIN_SOCKET_MAX_NUM): res['socket'][x] = player.GetItemMetinSocket(window, slotIndex, x) res["price"] = yang return res def MakeOfferCancelButton(): btn = ui.Button() btn.SetUpVisual("offlineshop/myoffers/deleteoffer_default.png") btn.SetDownVisual("offlineshop/myoffers/deleteoffer_down.png") btn.SetOverVisual("offlineshop/myoffers/deleteoffer_over.png") btn.Show() return btn def MakeOfferViewImage(isView): flag = "0" if isView: flag="1" img = ui.ImageBox() img.LoadImage("offlineshop/myoffers/viewicon_%s.png"%flag) img.Show() return img def MakeDefaultEmptySlot(event = None): slot = Slot(False) if event: slot.SetOnMouseLeftButtonUpEvent(event) return slot def GetBestOfferPriceYang(lst): if not lst: return 0 max =0 for info in lst: if info['price_yang'] > max: max = info['price_yang'] return max def SortByDatetime(lst): def CustomSortByDatetime(a,b): def CmpFunc(a,b): if a > b: return -1 if b > a: return 1 return 0 keys = ('year' , 'month' , 'day', 'hour', 'minute') for k in keys: if a[k] != b[k]: return CmpFunc(a[k] , b[k]) return 0 lst.sort(cmp=CustomSortByDatetime) def SortOffersByPrice(lst): def CustomSortByOfferPrice(a,b): price_a = a.get('price_yang', 0) price_b = b.get('price_yang', 0) if price_a > price_b: return -1 if price_b < price_b: return 1 return 0 lst.sort(cmp=CustomSortByOfferPrice) return lst class TableWindow(ui.Window): def __init__(self, col, row, width, height, realw, realh): ui.Window.__init__(self) self.rows = row self.columns = col self.width = width self.height = height ui.Window.SetSize(self, realw, realh) def __del__(self): ui.Window.__del__(self) def __GetCoordByPos(self, col,row, child): stepx = self.width/self.columns stepy = self.height/self.rows x = stepx * col y = stepy * row x += stepx/2 - child.GetWidth() /2 y += stepy/2 - child.GetHeight()/2 return x,y def SetTableElement(self, column , row, child= None): if self.rows <= row: PutsError("cannot SetTableElement on row %d"%row) return if self.columns <= column: PutsError("cannot SetTableElement on column %d (row %d )"%(column,row)) return if child == None: return x,y = self.__GetCoordByPos(column, row, child) child.SetParent(self) child.SetPosition( x, y) child.Show() class TableWindowWithScrollbar(TableWindow): SCROLLBAR_HORIZONTAL = 0 SCROLLBAR_VERTICAL = 1 def __init__(self, w, h , columns, rows, scrollbar=0): htable = h if scrollbar == self.SCROLLBAR_VERTICAL else h-18 wtable = w if scrollbar == self.SCROLLBAR_HORIZONTAL else w -18 TableWindow.__init__(self , columns, rows , wtable, htable, w ,h) self.childrenDict = {} self.scrollbar = None self.rows_count = rows self.columns_count = columns self.total_row = 0 self.elementCount = 0 self.defaultCreate = None self.defaultCreateArgs = None self.defaultChildren = [] self.__loadScrollbar(scrollbar) self.ClearElement() def __del__(self): self.childrenDict = {} self.scrollbar = None self.defaultCreate = None self.defaultCreateArgs = None self.defaultChildren = [] TableWindow.__del__(self) def __loadScrollbar(self, scrollbar): if scrollbar == self.SCROLLBAR_VERTICAL: template = { 'button1' : { 'default' : 'offlineshop/scrollbar/vertical/button1_default.png', 'over' : 'offlineshop/scrollbar/vertical/button1_over.png', 'down' : 'offlineshop/scrollbar/vertical/button1_down.png', }, 'button2' : { 'default' : 'offlineshop/scrollbar/vertical/button2_default.png', 'over' : 'offlineshop/scrollbar/vertical/button2_over.png', 'down' : 'offlineshop/scrollbar/vertical/button2_down.png', }, 'middle' : { 'default' : 'offlineshop/scrollbar/vertical/middle_default.png', 'over' : 'offlineshop/scrollbar/vertical/middle_over.png', 'down' : 'offlineshop/scrollbar/vertical/middle_down.png', }, 'base' : "offlineshop/scrollbar/vertical/base_image.png", 'onscroll' : self.__refreshViewList, 'parent' : self, 'orientation' : ui.CustomScrollBar.VERTICAL, 'align' : {'mode': ui.CustomScrollBar.RIGHT,}, } else: template = { 'button1' : { 'default' : 'offlineshop/scrollbar/horizontal/button1_default.png', 'over' : 'offlineshop/scrollbar/horizontal/button1_over.png', 'down' : 'offlineshop/scrollbar/horizontal/button1_down.png', }, 'button2' : { 'default' : 'offlineshop/scrollbar/horizontal/button2_default.png', 'over' : 'offlineshop/scrollbar/horizontal/button2_over.png', 'down' : 'offlineshop/scrollbar/horizontal/button2_down.png', }, 'middle' : { 'default' : 'offlineshop/scrollbar/horizontal/middle_default.png', 'over' : 'offlineshop/scrollbar/horizontal/middle_over.png', 'down' : 'offlineshop/scrollbar/horizontal/middle_down.png', }, 'base' : "offlineshop/scrollbar/horizontal/base_image.png", 'onscroll' : self.__refreshViewList, 'parent' : self, 'orientation' : ui.CustomScrollBar.HORIZONTAL, 'align' : {'mode':ui.CustomScrollBar.BOTTOM,}, } self.scrollbar = ui.CustomScrollBar(template) def SetElement(self, column, row, child): if not row in self.childrenDict: self.childrenDict[row] = {} self.childrenDict[row][column] = child self.__refreshViewList() def SetDefaultCreateChild(self, func, *args): self.defaultCreate = func self.defaultCreateArgs = args def __refreshViewList(self): if self.scrollbar.orientation == ui.CustomScrollBar.VERTICAL: if len(self.childrenDict.keys()) <= self.rows_count: self.scrollbar.Hide() else: self.scrollbar.Show() init_row = self.__getInitRow() for row, dct in self.childrenDict.items(): for column, child in dct.items(): if row < init_row or row >= init_row + self.rows_count: child.Hide() continue self.SetTableElement(column, row-init_row , child) #updated 25-01-2020 #topatch for s in self.defaultChildren: s.Destroy() self.defaultChildren = [] if self.defaultCreate: for row in xrange(init_row, init_row + self.rows_count): for col in xrange(self.columns_count): if not row in self.childrenDict or not col in self.childrenDict[row]: defaultChild = self.defaultCreate(*self.defaultCreateArgs) if self.defaultCreateArgs else self.defaultCreate() defaultChild.Show() self.SetTableElement(col, row - init_row, defaultChild) self.defaultChildren.append(defaultChild) elif self.scrollbar.orientation == ui.CustomScrollBar.HORIZONTAL: if len(self.childrenDict.get(0, [])) <= self.columns_count: self.scrollbar.Hide() else: self.scrollbar.Show() init_column = self.__getInitColumn() end_column = init_column+ self.columns_count # norm_column = xrange(0, self.columns_count) for dct in self.childrenDict.values(): for elm in dct.values(): elm.Hide() for col in xrange(init_column, end_column): for row, dct in self.childrenDict.items(): if col in dct: self.SetTableElement(col-init_column, row , dct[col]) dct[col].Show() #updated 25-01-2020 #topatch for s in self.defaultChildren: s.Destroy() self.defaultChildren = [] if self.defaultCreate: for row in xrange(0, self.rows_count): for col in xrange(init_column, end_column): if not row in self.childrenDict or not col in self.childrenDict[row]: defaultChild = self.defaultCreate(*self.defaultCreateArgs) if self.defaultCreateArgs else self.defaultCreate() defaultChild.Show() self.SetTableElement(col-init_column, row, defaultChild) self.defaultChildren.append(defaultChild) def __getInitRow(self): if not self.scrollbar.IsShow(): return 0 return int((len(self.childrenDict.keys()) - self.rows_count ) * self.scrollbar.GetPos()) def __getInitColumn(self): if not self.scrollbar.IsShow(): return 0 return int((len(self.childrenDict.get(0,[])) - self.columns_count ) * self.scrollbar.GetPos()) def __AdjustScrollbarStep(self): total_slots = self.rows_count*self.columns_count extra_element = self.elementCount - (total_slots) if extra_element <= 0: return if self.scrollbar.orientation == ui.CustomScrollBar.HORIZONTAL: extra_col = int(extra_element // self.rows_count) if extra_element % self.rows_count != 0: extra_col += 1 self.scrollbar.SetScrollStep(1.0 / float(extra_col+1)) else: extra_row_count = int(extra_element/self.columns_count) if extra_element % self.columns_count != 0: extra_row_count += 1 self.scrollbar.SetScrollStep(1.0/float(extra_row_count+1)) def ClearElement(self): for a in self.childrenDict.values(): for child in a.values(): child.Hide() self.childrenDict = {} self.elementCount = 0 self.__refreshViewList() def AddElement(self, child): normElement = self.columns_count*self.rows_count if self.elementCount < normElement or self.scrollbar.orientation == ui.CustomScrollBar.VERTICAL: column = self.elementCount%self.columns_count row = self.elementCount//self.columns_count else: index = self.elementCount - normElement row = index % self.rows_count column= index //self.rows_count column += self.columns_count self.SetElement(column, row, child) self.elementCount += 1 self.__AdjustScrollbarStep() def GetElementDict(self): return self.childrenDict class Slot(ui.Window): def __init__(self, isSold=False): ui.Window.__init__(self) self.background = None self.background_sold = None self.iconImage = None self.countText = None self.upgradeImage = None self.slotInfo = {} self.index = 0 self.eventClick = None self.childrens = [] self.__loadBackground(isSold) print("initializing Slot") #updated 25-01-2020 #topatch def __del__(self): self.__clear() ui.Window.__del__(self) #updated 25-01-2020 #topatch def __clear(self): self.background = None self.iconImage = None self.countText = None self.upgradeImage = None self.background_sold = None ui.Window.SetOnMouseLeftButtonUpEvent(self, None) if self.background: self.background.SetOnMouseLeftButtonUpEvent(None) if self.iconImage: self.iconImage.SetOnMouseLeftButtonUpEvent(None) if self.countText: self.countText.SetOnMouseLeftButtonUpEvent(None) if self.upgradeImage: self.upgradeImage.SetOnMouseLeftButtonUpEvent(None) if self.background_sold: self.background_sold.SetOnMouseLeftButtonUpEvent(None) self.slotInfo = {} self.index = 0 self.eventClick = None self.childrens = [] #updated 25-01-2020 #topatch def Destroy(self): self.__clear() def __loadBackground(self, isSold): bg = ui.ImageBox() bg.LoadImage("offlineshop/slot/base_image.png") bg.SetParent(self) bg.SetPosition(0,0) bg.Show() self.SetSize(bg.GetWidth(), bg.GetHeight()) self.background = bg sold = ui.ImageBox() sold.LoadImage("offlineshop/slot/base_image_sold.png") sold.SetParent(self.background) sold.SetPosition(0, 0) if isSold: sold.Show() else: sold.Hide() self.background_sold = sold def SetInfo(self, info): self.slotInfo = info self.SetSlot(info["vnum"] , info["count"]) def GetInfo(self): return self.slotInfo def SetSlot(self, itemvnum, itemcount): item.SelectItem(itemvnum) image = item.GetIconImageFileName() name = item.GetItemName() self.__SetItemIconImage(image) self.__SetItemCount(itemcount) self.__SetUpgradeByName(name) def SetIndex(self, index): self.index = index def GetIndex(self): return self.index def SetSold(self, flag): if flag: self.background_sold.Show() else: self.background_sold.Hide() def __GetIconPosition(self, image): w = image.GetWidth() h = image.GetHeight() return (self.background.GetWidth()/2 - w/2, self.background.GetHeight()/2 - h/2) def __SetItemIconImage(self, icon): image = ui.ImageBox() image.LoadImage(icon) image.SetParent(self.background) x,y = self.__GetIconPosition(image) image.SetPosition(x,y) image.Show() self.iconImage = image def __GetCountPosition(self): x,y = self.iconImage.GetLocalPosition() x += self.iconImage.GetWidth()/2 y += self.iconImage.GetHeight() return (x,y) def __SetItemCount(self, count): if count <= 1: self.countText = None return countText = ui.TextLine() countText.SetParent(self.background) x,y = self.__GetCountPosition() countText.SetPosition(x,y) countText.SetHorizontalAlignCenter() countText.SetText("x"+str(count)) countText.Show() self.countText = countText def __GetUpgradeImagePosition(self,img): w = img.GetWidth() h = img.GetHeight() bw = self.background.GetWidth() bh = self.background.GetHeight() return (bw - (w+5), bh-(h+5)) def __SetUpgradeByName(self, name): name = name.strip() if len(name) > 2: if name[-2] == '+': if name[-1].isdigit(): value = int(name[-1]) upgrade = ui.ImageBox() upgrade.LoadImage("offlineshop/slot/upgrade/%d.png"%value) upgrade.SetParent(self.background) x,y = self.__GetUpgradeImagePosition(upgrade) upgrade.SetPosition(x,y) upgrade.Show() self.upgradeImage = upgrade def SetOnMouseLeftButtonUpEvent(self, event): self.eventClick = event ui.Window.SetOnMouseLeftButtonUpEvent(self, self.__OnClick) if self.background: self.background.SetOnMouseLeftButtonUpEvent(self.__OnClick) if self.iconImage: self.iconImage.SetOnMouseLeftButtonUpEvent(self.__OnClick) if self.countText: self.countText.SetOnMouseLeftButtonUpEvent(self.__OnClick) if self.upgradeImage: self.upgradeImage.SetOnMouseLeftButtonUpEvent(self.__OnClick) if self.background_sold: self.background_sold.SetOnMouseLeftButtonUpEvent(self.__OnClick) def __OnClick(self): if self.eventClick!=None: self.eventClick(self) def IsInSlot(self): if not self.IsShow(): return False if self.IsIn(): return True if self.background: if self.background.IsIn(): return True if self.iconImage: if self.iconImage.IsIn(): return True if self.countText: if self.countText.IsIn(): return True if self.upgradeImage: if self.upgradeImage.IsIn(): return True if self.background_sold: if self.background_sold.IsShow() and self.background_sold.IsIn(): return True if self.childrens: for child in self.childrens: if child.IsIn(): return True return False def AppendChild(self, child): child.SetParent(self.background) self.childrens.append(child) class Offer(ui.Window): def __init__(self, info): ui.Window.__init__(self) self.bgImage = None self.guestName = None self.priceText = None self.acceptButton = None self.deleteButton = None self.itemText = None self.info = {} self.index = 0 self.is_accept = 0 self.acceptEvent = None self.deniedEvent = None self.info = info self.index = info["id"] self.is_accept = info["is_accept"] self.__loadBackground() self.__loadButtons() self.SetGuestName(info['buyer_name']) self.SetPriceYang(info["price"]) def __del__(self): self.bgImage = None self.guestName = None self.priceText = None self.acceptButton = None self.deleteButton = None self.itemText = None self.info = {} self.index = 0 self.is_accept = 0 self.acceptEvent = None self.deniedEvent = None ui.Window.__del__(self) def __loadBackground(self): bg = ui.ImageBox() bg.SetParent(self) bg.SetPosition(0,0) bg.LoadImage("offlineshop/offer/base_image.png") bg.Show() self.SetSize(bg.GetWidth(), bg.GetHeight()) self.bgImage = bg def SetGuestName(self, name): text = ui.TextLine() text.SetParent(self.bgImage) text.SetPosition(77 , 0) text.SetHorizontalAlignCenter() text.Show() text.SetText(name) self.guestName = text def SetPriceYang(self, yang): text = ui.TextLine() text.SetParent(self.bgImage) text.SetPosition(355 , 0) # text.SetHorizontalAlignCenter() text.Show() text.SetText(localeinfo.NumberToMoneyString(yang)) self.priceText = text def SetItemName(self, name): text = ui.TextLine() text.SetParent(self.bgImage) text.SetPosition(239 , 0) text.SetHorizontalAlignCenter() text.Show() text.SetText(name) self.itemText = text def __loadButtons(self): if self.info["is_accept"]: return #accept button = ui.Button() button.SetParent(self.bgImage) button.SetPosition(self.bgImage.GetWidth() - 50, 0) path = "offlineshop/offer/accept_%s.png" button.SetUpVisual(path%"default") button.SetOverVisual(path%"over") button.SetDownVisual(path%"down") button.Show() self.acceptButton = button #denied button = ui.Button() button.SetParent(self.bgImage) button.SetPosition(self.bgImage.GetWidth() - 30, 0) path = "offlineshop/offer/cancel_%s.png" button.SetUpVisual(path%"default") button.SetOverVisual(path%"over") button.SetDownVisual(path%"down") button.Show() self.deleteButton = button def SetAcceptButtonEvent(self, event): if self.acceptButton: self.acceptButton.SAFE_SetEvent(self.__OnAccept) self.acceptEvent = event def SetDeleteButtonEvent(self, event): if self.deleteButton: self.deleteButton.SAFE_SetEvent(self.__OnCancel) self.deniedEvent = event def GetInfo(self): return self.info def __OnAccept(self): if self.acceptEvent: self.acceptEvent(self) def __OnCancel(self): if self.deniedEvent: self.deniedEvent(self) class AuctionOffer(ui.Window): def __init__(self, info): ui.Window.__init__(self) self.background = None self.ownerName = None self.offerText = None self.__LoadWindow(info) def __del__(self): self.background = None self.ownerName = None self.offerText = None ui.Window.__del__(self) def __LoadWindow(self, info): name = info["buyer_name"] best_yang = info['price_yang'] self.__LoadBackground() self.__LoadOwnerName(name) self.__LoadOfferText(best_yang) def GetInfo(self): return self.info def __LoadBackground(self): bg = ui.ImageBox() bg.LoadImage("offlineshop/shoplist/shoplist_element_default.png") bg.SetParent(self) bg.SetPosition(0, 0) bg.Show() self.SetSize(bg.GetWidth(), bg.GetHeight()) self.background = bg def __LoadOwnerName(self, ownerName): if not ownerName: return text = ui.TextLine() text.SetParent(self.background) text.SetPosition(186, 1) text.SetHorizontalAlignCenter() text.SetText(ownerName) text.Show() self.ownerName = text def __LoadOfferText(self, yang): text = ui.TextLine() text.SetParent(self.background) text.SetPosition(403, 1) text.SetHorizontalAlignCenter() text.SetText(localeinfo.NumberToMoneyString(yang)) text.Show() self.offerText = text class MyOffer(ui.Window): def __init__(self, info): ui.Window.__init__(self) self.info = info self.clear() self.__LoadBackground() self.__LoadOwnerName() self.__LoadOfferText() self.__LoadSlot() self.__LoadCancelButton() def clear(self): self.background = None self.ownerName = None self.offerText = None self.slot = None self.cancelButton = None self.cancelButtonEvent = None self.bar1 = None self.bar2 = None self.text1 = None self.text2 = None def __del__(self): self.clear() ui.Window.__del__(self) def __LoadBackground(self): bg = ui.ImageBox() bg.SetParent(self) bg.SetPosition(0,0) bg.LoadImage("offlineshop/myoffers/offer_base_image.png") bg.Show() self.SetSize(bg.GetWidth(), bg.GetHeight()) self.background = bg bar1 = ui.Bar() bar1.SetSize(59, 12) bar1.SetColor(0x00000000) bar1.SetParent(self.background) bar1.Show() self.bar1 = bar1 self.bar1.SetPosition(59, 39) text1 = ui.TextLine() text1.SetParent(self.bar1) text1.SetPosition(0, 0) text1.SetText(localeinfo.SUBTEXT_OFFLINESHOP_TEXT15) text1.Show() self.text1 = text1 bar2 = ui.Bar() bar2.SetSize(59, 12) bar2.SetColor(0x00000000) bar2.SetParent(self.background) bar2.Show() self.bar2 = bar2 self.bar2.SetPosition(59, 63) text2 = ui.TextLine() text2.SetParent(self.bar2) text2.SetPosition(0, 0) text2.SetText(localeinfo.SUBTEXT_OFFLINESHOP_TEXT16) text2.Show() self.text2 = text2 def __LoadOwnerName(self): text = ui.TextLine() text.SetParent(self.background) text.SetPosition(175, 38) text.SetHorizontalAlignCenter() text.SetText(self.info.get('shop_name', "")) text.Show() self.ownerName = text def __LoadOfferText(self): text = ui.TextLine() text.SetParent(self.background) text.SetPosition(175, 60) text.SetHorizontalAlignCenter() text.SetText(NumberToString(self.info.get('price', ""))) text.Show() self.offerText = text def __LoadSlot(self): slot = Slot(self.info['is_accept']) slot.SetInfo(self.info['item']) slot.SetParent(self.background) slot.SetPosition(9,4) slot.Show() self.slot = slot def __LoadCancelButton(self): button = ui.Button() button.SetParent(self.background) button.SetPosition(self.GetWidth()/2, 46 + 40) button.SetUpVisual("d:/ymir work/ui/public/small_button_01.sub") button.SetDownVisual("d:/ymir work/ui/public/small_button_03.sub") button.SetOverVisual("d:/ymir work/ui/public/small_button_02.sub") button.SetText(localeinfo.OFFLINESHOP_MYOFFERS_CANCEL_BUTTON_TEXT) button.Show() button.SAFE_SetEvent(self.__OnClickCancelButton) self.cancelButton = button def SetCancelButtonEvent(self, event): self.cancelButtonEvent = event def __OnClickCancelButton(self): if self.cancelButtonEvent: self.cancelButtonEvent(self.info['offer_id']) def IsInSlot(self): return self.slot.IsInSlot() def GetIndex(self): return self.info['offer_id'] #updated 25-01-2020 #topatch def DisableCancelButton(self): if self.cancelButton: self.cancelButton.Hide() class AuctionListElement(ui.Window): def __init__(self, info): ui.Window.__init__(self) self.ownerName = None self.durationText = None self.offerCountText = None self.owner_id = -1 self.info = info self.button = None self.buttonEvent = None self.bestYangText = None self.__LoadWindow(info) def __del__(self): self.ownerName = None self.durationText = None self.offerCountText = None self.owner_id = -1 self.info = {} self.button = None self.buttonEvent = None self.bestYangText = None ui.Window.__del__(self) def __LoadWindow(self, info): owner_id = info["owner_id"] duration = info["duration"] count = info["offer_count"] name = info["owner_name"] best_yang = info['best_yang'] self.owner_id = owner_id self.__LoadOpenAuctionButton() self.__LoadOwnerName(name) self.__LoadDuration(duration) self.__LoadCount(count) self.__LoadBestYang(best_yang) def SetIndex(self,index): self.owner_id = index def GetIndex(self): return self.owner_id def GetInfo(self): return self.info def SetOnClickOpenShopButton(self, event): self.openShopButton.SAFE_SetEvent(self.__OnClickOpenShop) self.openShopButtonEvent = event def __LoadOwnerName(self, ownerName): if not ownerName: return text = ui.TextLine() text.SetParent(self.button) text.SetPosition(85, 0) text.SetHorizontalAlignCenter() text.SetText(ownerName) text.Show() self.ownerName = text def __LoadDuration(self, duration): text = ui.TextLine() text.SetParent(self.button) text.SetPosition(344, 0) text.SetHorizontalAlignCenter() text.SetText(GetDurationString(duration)) text.Show() self.durationText = text def __LoadCount(self, count): text = ui.TextLine() text.SetParent(self.button) text.SetPosition(480, 0) text.SetHorizontalAlignCenter() text.SetText(str(count)) text.Show() self.offerCountText = text def __LoadBestYang(self, yang): text = ui.TextLine() text.SetParent(self.button) text.SetPosition(217, 0) text.SetHorizontalAlignCenter() text.SetText(localeinfo.NumberToMoneyString(yang)) text.Show() self.bestYangText = text def SetOnClickOpenAuctionButton(self, event): self.button.SAFE_SetEvent(self.__OnClickMe) self.buttonEvent = event def __OnClickMe(self): if self.buttonEvent: self.buttonEvent(self.owner_id) def __LoadOpenAuctionButton(self): button = ui.Button() button.SetParent(self) button.SetUpVisual("offlineshop/shoplist/shoplist_element_default.png") button.SetDownVisual("offlineshop/shoplist/shoplist_element_down.png") button.SetOverVisual("offlineshop/shoplist/shoplist_element_over.png") button.SetPosition(0, 0) button.Show() self.SetSize(button.GetWidth(), button.GetHeight()) self.button = button def IsInSlot(self): if self.IsIn(): return True if self.ownerName: if self.ownerName.IsIn(): return True if self.durationText: if self.durationText.IsIn(): return True if self.offerCountText: if self.offerCountText.IsIn(): return True if self.button: if self.button.IsIn(): return True return False class ShopListElement(ui.Window): def __init__(self , info): ui.Window.__init__(self) self.ownerName = None self.shopName = None self.durationText = None self.countText = None self.openShopButton = None self.openShopButtonEvent = None self.owner_id = -1 self.__LoadWindow(info) def __del__(self): self.ownerName = None self.shopName = None self.durationText = None self.countText = None self.openShopButton = None self.openShopButtonEvent = None self.owner_id = -1 ui.Window.__del__(self) def __LoadWindow(self, info): owner_id = info["owner_id"] duration = info["duration"] count = info["count"] name = info["name"] ownerName = name[:name.find('@')] if '@' in name else "NONAME" name = name[name.find('@')+1:] if '@' in name else name self.owner_id = owner_id self.__LoadOpenShopButton() self.__LoadOwnerName(ownerName) self.__LoadShopName(name) self.__LoadDuration(duration) self.__LoadCount(count) def SetOnClickOpenShopButton(self, event): self.openShopButton.SAFE_SetEvent(self.__OnClickOpenShop) self.openShopButtonEvent = event def __OnClickOpenShop(self): if self.openShopButtonEvent: self.openShopButtonEvent(self.owner_id) def __LoadOpenShopButton(self): button = ui.Button() button.SetParent(self) button.SetUpVisual("offlineshop/shoplist/shoplist_element_default.png") button.SetDownVisual("offlineshop/shoplist/shoplist_element_down.png") button.SetOverVisual("offlineshop/shoplist/shoplist_element_over.png") button.SetPosition(0, 0) button.Show() self.SetSize(button.GetWidth(), button.GetHeight()) self.openShopButton = button def __LoadOwnerName(self ,ownerName): if not ownerName: return text = ui.TextLine() text.SetParent(self.openShopButton) text.SetPosition(48 , 2) text.SetHorizontalAlignCenter() text.SetText(ownerName) text.Show() self.ownerName = text def __LoadShopName(self ,name): text = ui.TextLine() text.SetParent(self.openShopButton) text.SetPosition(198 , 2) text.SetHorizontalAlignCenter() text.SetText(name) text.Show() self.shopName = text def __LoadDuration(self ,duration): text = ui.TextLine() text.SetParent(self.openShopButton) text.SetPosition(358 , 2) text.SetHorizontalAlignCenter() text.SetText(GetDurationString(duration)) text.Show() self.durationText = text def __LoadCount(self ,count): text = ui.TextLine() text.SetParent(self.openShopButton) text.SetPosition(480 , 2) text.SetHorizontalAlignCenter() text.SetText(str(count)) text.Show() self.countText = text class Suggestions(): def __init__(self): self.inputBox = None self.comboBox = None self.mainDict = {} self.tempDict = {} self.isRefreshing = False self.isSelecting = False def SetInputBox(self, box): box.OnIMEUpdate = self.__OnUpdateInputBox self.inputBox = box def SetComboBox(self, box): box.SetEvent(ui.__mem_func__(self.__OnSelectItem)) box.ClearItem() box.SetCurrentItem(localeinfo.OFFLINESHOP_NAME_SUGGESTION_UNSELECT) self.comboBox = box def SetMainDict(self, inDict): def getUnrefined(st): pos = st.find('+') if pos == -1: return st if pos > len(st) -4 and pos > 4: return st[:pos] return st cleanDict = {} inserted = [] for name , vnum in inDict.items(): unrefined = getUnrefined(name).lower().strip() if unrefined in inserted: continue cleanDict[unrefined] = vnum inserted.append(unrefined) self.mainDict = cleanDict def __OnUpdateInputBox(self): snd.PlaySound("sound/ui/type.wav") ui.TextLine.SetText(self.inputBox, ime.GetText(self.inputBox.bCodePage)) self.__RefreshComboBox() def __RefreshComboBox(self): if self.isSelecting: return self.isRefreshing = True self.tempDict = {} inputText = self.inputBox.GetText().lower().strip() if len(inputText) < 3: return self.comboBox.ClearItem() self.comboBox.SetCurrentItem(localeinfo.OFFLINESHOP_NAME_SUGGESTION_UNSELECT) idx = 0 for k,v in self.mainDict.items(): if inputText in k.lower(): self.tempDict[idx] = k self.comboBox.InsertItem(idx, k) idx += 1 if idx == 20: break self.isRefreshing = False def __OnSelectItem(self, index): if self.isRefreshing: return self.isSelecting = True self.inputBox.SetText(self.tempDict[index]) self.isSelecting = False def __del__(self): self.inputBox = None self.comboBox = None self.mainDict = {} self.tempDict = {} def Clear(self): self.comboBox.ClearItem() self.comboBox.SetCurrentItem(localeinfo.OFFLINESHOP_NAME_SUGGESTION_UNSELECT) class SuggestionElement(ui.Button): def __init__(self): self.clickEvent = None self.index = 0 ui.Button.__init__(self) def __del__(self): self.clickEvent = None ui.Button.__del__(self) def SetClickEvent(self, event): self.clickEvent = event self.SAFE_SetEvent(self.__OnClickMe) def __OnClickMe(self): if self.clickEvent: self.clickEvent(self.index) def SetElement(self, index, text): self.index = index self.SetText(text) class SuggestionSelector(ui.Window): def __init__(self, element = 8, template = 'big'): ui.Window.__init__(self) self.scrollbar = None self.background = None self.valuesDict = {} self.onSelectEvent = None self.elements = [] self.template = template self.__loadBackground() self.__loadElements(element) self.__loadScrollbar() def __loadBackground(self): bg = ui.ImageBox() if self.template == 'big': bg.LoadImage("offlineshop/searchfilter/attribute_selector_base_image.png") else: bg.LoadImage("offlineshop/searchfilter/grade_selector_base_image.png") bg.SetParent(self) bg.SetPosition(0,0) bg.Show() self.background = bg self.SetSize(bg.GetWidth() , bg.GetHeight()) def __loadElements(self, count): for x in xrange(count): element = SuggestionElement() element.SetParent(self.background) element.SetPosition(0, x * 16) if self.template == 'big': element.SetUpVisual("offlineshop/searchfilter/attribute_default.png") element.SetDownVisual("offlineshop/searchfilter/attribute_down.png") element.SetOverVisual("offlineshop/searchfilter/attribute_over.png") else: element.SetUpVisual("offlineshop/searchfilter/grade_element_default.png") element.SetDownVisual("offlineshop/searchfilter/grade_element_down.png") element.SetOverVisual("offlineshop/searchfilter/grade_element_over.png") element.Show() element.SetClickEvent(self.__OnSelectElement) self.elements.append(element) def __loadScrollbar(self): scroll = ui.ScrollBar() scroll.SetParent(self.background) scroll.SetPosition(self.GetWidth()-10, 0) scroll.SetScrollBarSize(self.GetHeight()) scroll.SetScrollEvent(self.__OnScroll) scroll.Show() self.scrollbar = scroll def __OnSelectElement(self, index): if self.onSelectEvent: self.onSelectEvent(index) def __OnScroll(self): self.__refreshViewList() def __refreshViewList(self): if len(self.elements) >= len(self.valuesDict): self.scrollbar.Hide() else: self.scrollbar.Show() pos = self.scrollbar.GetPos() initIndex = int(pos * (len(self.valuesDict) - len(self.elements) )) if len(self.elements) >= len(self.valuesDict): initIndex = 0 sorted_key = self.valuesDict.keys() sorted_key.sort() for x in xrange(initIndex , initIndex + len(self.elements)): index = sorted_key[x] text = self.valuesDict[index] self.elements[x-initIndex].SetElement(index, text) def SetValueDict(self, dct): self.valuesDict = dct self.__refreshViewList() def SetSelectEvent(self, event): self.onSelectEvent = event def __del__(self): self.background = None self.elements = [] self.scrollbar = None self.onSelectEvent = None ui.Window.__del__(self) class FilterHistoryElement(ui.Window): def __init__(self, info): ui.Window.__init__(self) self.button = None self.datetext = None self.timetext = None self.counttext = None self.buttonEvent = None self.info = {} self.__loadButton() self.__loadDateText(info) self.__loadTimeText(info) self.__loadCountText(info) self.info = info def GetInfo(self): return self.info def SetButtonEvent(self , event): self.buttonEvent = event self.button.SAFE_SetEvent(self.__OnClickMe) def __OnClickMe(self): if self.buttonEvent: self.buttonEvent(self) def __loadButton(self): button = ui.Button() button.SetParent(self) button.SetPosition(0,0) path = "offlineshop/searchhistory/element_%s.png" button.SetUpVisual(path%"default") button.SetDownVisual(path%"down") button.SetOverVisual(path%"over") button.Show() self.SetSize(button.GetWidth(), button.GetHeight()) self.button = button def __loadDateText(self,info): text = ui.TextLine() text.SetParent(self.button) text.SetPosition(60, 3) day = info["day"] month = info["month"] year = info["year"] text.SetText("%02d - %02d - %d "%(day, month, year)) text.Show() self.datetext = text def __loadTimeText(self, info): text = ui.TextLine() text.SetParent(self.button) text.SetPosition(190+75, 3) hour = info["hour"] minute = info["minute"] text.SetText("%02d : %02d " % (hour, minute)) text.Show() self.timetext = text def __loadCountText(self, info): text = ui.TextLine() text.SetParent(self.button) text.SetPosition(485, 3) count = info["count"] text.SetText(" %d " % (count)) text.SetHorizontalAlignCenter() text.Show() self.counttext = text def __del__(self): self.button = None self.datetext = None self.timetext = None self.counttext = None self.buttonEvent= None ui.Window.__del__(self) def IsInSlot(self): if not self.IsShow(): return False if self.IsIn(): return True if self.button: if self.button.IsIn(): return True if self.datetext: if self.datetext.IsIn(): return True if self.timetext: if self.timetext.IsIn(): return True if self.counttext: if self.counttext.IsIn(): return True return False def GetIndex(self): return self.info['id'] class FilterPatternElement(ui.Window): def __init__(self, info): ui.Window.__init__(self) self.button = None self.datetext = None self.nametext = None self.buttonEvent = None self.info = {} self.__loadButton() self.__loadDateText(info) self.__loadNameText(info) self.info = info def GetInfo(self): return self.info def SetButtonEvent(self , event): self.buttonEvent = event self.button.SAFE_SetEvent(self.__OnClickMe) def __OnClickMe(self): if self.buttonEvent: self.buttonEvent(self) def __loadButton(self): button = ui.Button() button.SetParent(self) button.SetPosition(0,0) path = "offlineshop/searchhistory/element_%s.png" button.SetUpVisual(path%"default") button.SetDownVisual(path%"down") button.SetOverVisual(path%"over") button.Show() self.SetSize(button.GetWidth(), button.GetHeight()) self.button = button def __loadDateText(self,info): text = ui.TextLine() text.SetParent(self.button) text.SetPosition(352, 3) day = info["day"] month = info["month"] year = info["year"] hour = info["hour"] minute = info["minute"] text.SetText("%02d - %02d - %d %02d : %02d"%(day, month, year, hour, minute)) text.Show() self.datetext = text def __loadNameText(self, info): text = ui.TextLine() text.SetParent(self.button) text.SetPosition(20, 3) text.SetText(info["name"]) text.Show() self.nametext = text def __del__(self): self.button = None self.datetext = None self.nametext = None self.buttonEvent = None ui.Window.__del__(self) def IsInSlot(self): if not self.IsShow(): return False if self.IsIn(): return True if self.button: if self.button.IsIn(): return True if self.datetext: if self.datetext.IsIn(): return True if self.nametext: if self.nametext.IsIn(): return True return False def GetIndex(self): return self.info['id'] class NewOfflineShopBoard(ui.ScriptWindow): #constants BOARD_KEYS = ("create_shop" , "my_shop", "open_shop", "shop_list", "search_history", ) ITEM_TYPES = { item.ITEM_TYPE_NONE : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET, }, item.ITEM_TYPE_WEAPON : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_WEAPON, "subtypes" : { item.WEAPON_SWORD : localeinfo.OFFLINESHOP_COMBOBOX_WEAPON_SWORD, item.WEAPON_DAGGER : localeinfo.OFFLINESHOP_COMBOBOX_WEAPON_DAGGER, item.WEAPON_BOW : localeinfo.OFFLINESHOP_COMBOBOX_WEAPON_BOW, item.WEAPON_TWO_HANDED : localeinfo.OFFLINESHOP_COMBOBOX_WEAPON_TWO_HANDED, item.WEAPON_BELL : localeinfo.OFFLINESHOP_COMBOBOX_WEAPON_BELL, item.WEAPON_FAN : localeinfo.OFFLINESHOP_COMBOBOX_WEAPON_FAN, }, }, item.ITEM_TYPE_ARMOR : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_ARMOR, "subtypes" : { item.ARMOR_BODY : localeinfo.OFFLINESHOP_COMBOBOX_ARMOR_BODY, item.ARMOR_HEAD : localeinfo.OFFLINESHOP_COMBOBOX_ARMOR_HEAD, item.ARMOR_SHIELD : localeinfo.OFFLINESHOP_COMBOBOX_ARMOR_SHIELD, item.ARMOR_WRIST : localeinfo.OFFLINESHOP_COMBOBOX_ARMOR_WRIST, item.ARMOR_FOOTS : localeinfo.OFFLINESHOP_COMBOBOX_ARMOR_FOOTS, item.ARMOR_NECK : localeinfo.OFFLINESHOP_COMBOBOX_ARMOR_NECK, item.ARMOR_EAR : localeinfo.OFFLINESHOP_COMBOBOX_ARMOR_EAR, }, }, item.ITEM_TYPE_METIN : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_METIN, }, item.ITEM_TYPE_FISH : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_FISH, }, item.ITEM_TYPE_SKILLBOOK : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_SKILLBOOK, }, item.ITEM_TYPE_BLEND : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_BLEND, }, item.ITEM_TYPE_DS : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_DS, }, item.ITEM_TYPE_RING : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_RING, }, item.ITEM_TYPE_BELT : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_BELT, }, item.ITEM_TYPE_METIN : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_METIN, }, item.ITEM_TYPE_GIFTBOX : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_GIFTBOX, }, item.ITEM_TYPE_COSTUME : { "name" : localeinfo.OFFLINESHOP_TYPE_COMBOBOX_COSTUME, "subtypes" : { item.COSTUME_TYPE_BODY : localeinfo.OFFLINESHOP_COMBOBOX_COSTUME_BODY, item.COSTUME_TYPE_HAIR : localeinfo.OFFLINESHOP_COMBOBOX_COSTUME_HAIR, }, }, item.ITEM_TYPE_MATERIAL :{ "name": localeinfo.OFFLINESHOP_TYPE_COMBOBOX_REFINE, }, } if ENABLE_WOLFMAN_CHARACTER: ITEM_TYPES[item.ITEM_TYPE_WEAPON]["subtypes"][item.WEAPON_CLAW] = localeinfo.OFFLINESHOP_COMBOBOX_WEAPON_CLAW if ENABLE_MOUNT_COSTUME_SYSTEM: ITEM_TYPES[item.ITEM_TYPE_COSTUME][item.COSTUME_TYPE_MOUNT] = localeinfo.OFFLINESHOP_COMBOBOX_COSTUME_MOUNT if ENABLE_ACCE_COSTUME_SYSTEM: ITEM_TYPES[item.ITEM_TYPE_COSTUME][item.COSTUME_TYPE_ACCE] = localeinfo.OFFLINESHOP_COMBOBOX_COSTUME_ACCE if ENABLE_WEAPON_COSTUME_SYSTEM: ITEM_TYPES[item.ITEM_TYPE_COSTUME][item.COSTUME_TYPE_WEAPON] = localeinfo.OFFLINESHOP_COMBOBOX_COSTUME_WEAPON RARITY_GRADES = { -1 : localeinfo.OFFLINESHOP_RARITY_ITEM_UNSET, item.RARITY_COMMON : localeinfo.RARITY_ITEM_COMMON, item.RARITY_EPIC : localeinfo.RARITY_ITEM_EPIC, item.RARITY_LEGENDARY : localeinfo.RARITY_ITEM_LEGENDARY, item.RARITY_ANTIQUE : localeinfo.RARITY_ITEM_ANTIQUE, item.RARITY_MISTIC : localeinfo.RARITY_ITEM_MISTIC, } #members ATTRIBUTES = { 0 : localeinfo.OFFLINESHOP_ATTR_UNSET, item.APPLY_MAX_HP : localeinfo.OFFLINESHOP_ATTR_MAX_HP, item.APPLY_MAX_SP : localeinfo.OFFLINESHOP_ATTR_MAX_SP, item.APPLY_CON : localeinfo.OFFLINESHOP_ATTR_CON, item.APPLY_INT : localeinfo.OFFLINESHOP_ATTR_INT, item.APPLY_STR : localeinfo.OFFLINESHOP_ATTR_STR, item.APPLY_DEX : localeinfo.OFFLINESHOP_ATTR_DEX, item.APPLY_ATT_SPEED : localeinfo.OFFLINESHOP_ATTR_ATT_SPEED, item.APPLY_MOV_SPEED : localeinfo.OFFLINESHOP_ATTR_MOV_SPEED, item.APPLY_CAST_SPEED : localeinfo.OFFLINESHOP_ATTR_CAST_SPEED, item.APPLY_HP_REGEN : localeinfo.OFFLINESHOP_ATTR_HP_REGEN, item.APPLY_SP_REGEN : localeinfo.OFFLINESHOP_ATTR_SP_REGEN, item.APPLY_POISON_PCT : localeinfo.OFFLINESHOP_ATTR_APPLY_POISON_PCT, item.APPLY_STUN_PCT : localeinfo.OFFLINESHOP_ATTR_APPLY_STUN_PCT, item.APPLY_SLOW_PCT : localeinfo.OFFLINESHOP_ATTR_APPLY_SLOW_PCT, item.APPLY_CRITICAL_PCT : localeinfo.OFFLINESHOP_ATTR_APPLY_CRITICAL_PCT, item.APPLY_PENETRATE_PCT : localeinfo.OFFLINESHOP_ATTR_APPLY_PENETRATE_PCT, item.APPLY_ATTBONUS_WARRIOR : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_WARRIOR, item.APPLY_ATTBONUS_ASSASSIN : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_ASSASSIN, item.APPLY_ATTBONUS_SURA : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_SURA, item.APPLY_ATTBONUS_SHAMAN : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_SHAMAN, item.APPLY_ATTBONUS_MONSTER : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_MONSTER, item.APPLY_ATTBONUS_HUMAN : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_HUMAN, item.APPLY_ATTBONUS_ANIMAL : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_ANIMAL, item.APPLY_ATTBONUS_ORC : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_ORC, item.APPLY_ATTBONUS_MILGYO : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_MILGYO, item.APPLY_ATTBONUS_UNDEAD : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_UNDEAD, item.APPLY_ATTBONUS_DEVIL : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_DEVIL, item.APPLY_STEAL_HP : localeinfo.OFFLINESHOP_ATTR_APPLY_STEAL_HP, item.APPLY_STEAL_SP : localeinfo.OFFLINESHOP_ATTR_APPLY_STEAL_SP, item.APPLY_MANA_BURN_PCT : localeinfo.OFFLINESHOP_ATTR_APPLY_MANA_BURN_PCT, item.APPLY_DAMAGE_SP_RECOVER : localeinfo.OFFLINESHOP_ATTR_APPLY_DAMAGE_SP_RECOVER, item.APPLY_BLOCK : localeinfo.OFFLINESHOP_ATTR_APPLY_BLOCK, item.APPLY_DODGE : localeinfo.OFFLINESHOP_ATTR_APPLY_DODGE, item.APPLY_RESIST_SWORD : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_SWORD, item.APPLY_RESIST_TWOHAND : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_TWOHAND, item.APPLY_RESIST_DAGGER : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_DAGGER, item.APPLY_RESIST_BELL : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_BELL, item.APPLY_RESIST_FAN : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_FAN, item.APPLY_RESIST_BOW : localeinfo.OFFLINESHOP_ATTR_RESIST_BOW, # item.APPLY_RESIST_FIRE : localeinfo.OFFLINESHOP_ATTR_RESIST_FIRE, # item.APPLY_RESIST_ELEC : localeinfo.OFFLINESHOP_ATTR_RESIST_ELEC, item.APPLY_RESIST_MAGIC : localeinfo.OFFLINESHOP_ATTR_RESIST_MAGIC, # item.APPLY_RESIST_WIND : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_WIND, item.APPLY_REFLECT_MELEE : localeinfo.OFFLINESHOP_ATTR_APPLY_REFLECT_MELEE, # item.APPLY_REFLECT_CURSE : localeinfo.OFFLINESHOP_ATTR_APPLY_REFLECT_CURSE, item.APPLY_POISON_REDUCE : localeinfo.OFFLINESHOP_ATTR_APPLY_POISON_REDUCE, # item.APPLY_KILL_SP_RECOVER : localeinfo.OFFLINESHOP_ATTR_APPLY_KILL_SP_RECOVER, item.APPLY_EXP_DOUBLE_BONUS : localeinfo.OFFLINESHOP_ATTR_APPLY_EXP_DOUBLE_BONUS, item.APPLY_GOLD_DOUBLE_BONUS : localeinfo.OFFLINESHOP_ATTR_APPLY_GOLD_DOUBLE_BONUS, item.APPLY_ITEM_DROP_BONUS : localeinfo.OFFLINESHOP_ATTR_APPLY_ITEM_DROP_BONUS, # item.APPLY_POTION_BONUS : localeinfo.OFFLINESHOP_ATTR_APPLY_POTION_BONUS, # item.APPLY_KILL_HP_RECOVER : localeinfo.OFFLINESHOP_ATTR_APPLY_KILL_HP_RECOVER, item.APPLY_IMMUNE_STUN : localeinfo.OFFLINESHOP_ATTR_APPLY_IMMUNE_STUN, item.APPLY_IMMUNE_SLOW : localeinfo.OFFLINESHOP_ATTR_APPLY_IMMUNE_SLOW, item.APPLY_IMMUNE_FALL : localeinfo.OFFLINESHOP_ATTR_APPLY_IMMUNE_FALL, # item.APPLY_BOW_DISTANCE : localeinfo.OFFLINESHOP_ATTR_BOW_DISTANCE, item.APPLY_DEF_GRADE_BONUS : localeinfo.OFFLINESHOP_ATTR_DEF_GRADE, item.APPLY_ATT_GRADE_BONUS : localeinfo.OFFLINESHOP_ATTR_ATT_GRADE, # item.APPLY_MAGIC_ATT_GRADE : localeinfo.OFFLINESHOP_ATTR_MAGIC_ATT_GRADE, # item.APPLY_MAGIC_DEF_GRADE : localeinfo.OFFLINESHOP_ATTR_MAGIC_DEF_GRADE, # item.APPLY_MAX_STAMINA : localeinfo.OFFLINESHOP_ATTR_MAX_STAMINA, # item.APPLY_MALL_ATTBONUS : localeinfo.OFFLINESHOP_ATTR_MALL_ATTBONUS, # item.APPLY_MALL_DEFBONUS : localeinfo.OFFLINESHOP_ATTR_MALL_DEFBONUS, # item.APPLY_MALL_EXPBONUS : localeinfo.OFFLINESHOP_ATTR_MALL_EXPBONUS, # item.APPLY_MALL_ITEMBONUS : localeinfo.OFFLINESHOP_ATTR_MALL_ITEMBONUS, # item.APPLY_MALL_GOLDBONUS : localeinfo.OFFLINESHOP_ATTR_MALL_GOLDBONUS, item.APPLY_SKILL_DAMAGE_BONUS : localeinfo.OFFLINESHOP_ATTR_SKILL_DAMAGE_BONUS, item.APPLY_NORMAL_HIT_DAMAGE_BONUS : localeinfo.OFFLINESHOP_ATTR_NORMAL_HIT_DAMAGE_BONUS, item.APPLY_SKILL_DEFEND_BONUS : localeinfo.OFFLINESHOP_ATTR_SKILL_DEFEND_BONUS, item.APPLY_NORMAL_HIT_DEFEND_BONUS : localeinfo.OFFLINESHOP_ATTR_NORMAL_HIT_DEFEND_BONUS, # item.APPLY_PC_BANG_EXP_BONUS : localeinfo.OFFLINESHOP_ATTR_MALL_EXPBONUS_P_STATIC, # item.APPLY_PC_BANG_DROP_BONUS : localeinfo.OFFLINESHOP_ATTR_MALL_ITEMBONUS_P_STATIC, # item.APPLY_RESIST_WARRIOR : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_WARRIOR, # item.APPLY_RESIST_ASSASSIN : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_ASSASSIN, # item.APPLY_RESIST_SURA : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_SURA, # item.APPLY_RESIST_SHAMAN : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_SHAMAN, # item.APPLY_MAX_HP_PCT : localeinfo.OFFLINESHOP_ATTR_APPLY_MAX_HP_PCT, # item.APPLY_MAX_SP_PCT : localeinfo.OFFLINESHOP_ATTR_APPLY_MAX_SP_PCT, # item.APPLY_ENERGY : localeinfo.OFFLINESHOP_ATTR_ENERGY, # item.APPLY_COSTUME_ATTR_BONUS : localeinfo.OFFLINESHOP_ATTR_COSTUME_ATTR_BONUS, # item.APPLY_MAGIC_ATTBONUS_PER : localeinfo.OFFLINESHOP_ATTR_MAGIC_ATTBONUS_PER, # item.APPLY_MELEE_MAGIC_ATTBONUS_PER : localeinfo.OFFLINESHOP_ATTR_MELEE_MAGIC_ATTBONUS_PER, # item.APPLY_RESIST_ICE : localeinfo.OFFLINESHOP_ATTR_RESIST_ICE, # item.APPLY_RESIST_EARTH : localeinfo.OFFLINESHOP_ATTR_RESIST_EARTH, # item.APPLY_RESIST_DARK : localeinfo.OFFLINESHOP_ATTR_RESIST_DARK, # item.APPLY_ANTI_CRITICAL_PCT : localeinfo.OFFLINESHOP_ATTR_ANTI_CRITICAL_PCT, # item.APPLY_ANTI_PENETRATE_PCT : localeinfo.OFFLINESHOP_ATTR_ANTI_PENETRATE_PCT, } if ENABLE_WOLFMAN_CHARACTER: ATTRIBUTES.update({ item.APPLY_BLEEDING_PCT : localeinfo.OFFLINESHOP_ATTR_APPLY_BLEEDING_PCT, item.APPLY_BLEEDING_REDUCE : localeinfo.OFFLINESHOP_ATTR_APPLY_BLEEDING_REDUCE, item.APPLY_ATTBONUS_WOLFMAN : localeinfo.OFFLINESHOP_ATTR_APPLY_ATTBONUS_WOLFMAN, item.APPLY_RESIST_CLAW : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_CLAW, item.APPLY_RESIST_WOLFMAN : localeinfo.OFFLINESHOP_ATTR_APPLY_RESIST_WOLFMAN, }) if ENABLE_MAGIC_REDUCTION_SYSTEM: ATTRIBUTES.update({ item.APPLY_RESIST_MAGIC_REDUCTION : localeinfo.OFFLINESHOP_ATTR_RESIST_MAGIC_REDUCTION, }) try: if app.__ENABLE_FIFTH_STATUS__: ATTRIBUTES[item.APPLY_RES] = localeinfo.OFFLINESHOP_ATTR_RES ATTRIBUTES[item.APPLY_HARDNESS_GRADE] = localeinfo.OFFLINESHOP_ATTR_HARDNESS_GRADE except: pass def __init__(self): ui.ScriptWindow.__init__(self) self.clear() offlineshop.SetOfflineshopBoard(self) self.__loadWindow() def clear(self): # menu self.MyShopButton = None self.ListOfShopButton = None self.SearchFilterButton = None self.SearchHistoryButton = None self.MyPatternsButton = None self.MyAuctionButton = None self.ListOfAuctionsButton = None # common self.pageBoards = {} self.pageCategory = "my_shop" self.updateEvents = {} self.itemTooltip = None self.popupMessage = None self.ShopItemForSale = [] self.ShopItemSold = [] self.EditPriceSlot = None self.AddItemSlotIndex = -1 self.CommonInputPriceDlg = None self.CommonQuestionDlg = None self.CommonPickValuteDlg = None self.TitleBar = None # filtering self.SearchFilterShopItemResult = [] self.FilterHistory = [] self.FilterPatterns = {} # shoplist self.ShopList = [] self.ShopOpenInfo = {} self.ShopListTable = None # create shop member self.InsertedItems = [] self.CreateShopNameEdit = None self.CreateShopDaysCountText = None self.CreateShopHoursCountText = None self.CreateShopItemsTable = None self.CreateShopItemsInfos = {} # myshop page member self.MyShopItemsTable = None self.MyShopShopTitle = None self.MyShopShopDuration = None self.MyShopCloseButton = None self.MyShopEditNameDlg = None self.MyShopOffers = None self.MyShopOffersTable = None # open shop page member self.OpenShopItemsTable = None self.OpenShopBackToListButton = None self.OpenShopShopTitle = None self.OpenShopShopDuration = None self.OpenShopBuyItemID = -1 self.BuyPriceSeenTotal = 0 # search & filter page self.SearchFilterItemsNameDict = {} self.SearchFilterCheckBoxesRace = {} self.SearchFilterCheckBoxes = {} self.SearchFilterAttributeButtons = [] self.SearchFilterComboBoxSuggestion = None self.SearchFilterSuggestionObj = None self.SearchFilterItemNameInput = None self.SearchFilterItemLevelStart = None self.SearchFilterItemLevelEnd = None self.SearchFilterItemYangMin = None self.SearchFilterItemYangMax = None self.SearchFilterResetFilterButton = None self.SearchFilterSavePatternButton = None self.SearchFilterStartSearch = None self.ShowGradeFilterButton = None self.GradeFilterWindow = None self.HideGradeFilterButton = None self.GradeFilterBackground = None self.GradeFilterCheckBox = None self.GradeFilterSuggestions = None self.GradeFilterButtonSelect = None self.GradeFilterWindowSettings = {} self.GradeFilterSuggestionsIndex = -1 self.SearchFilterResultItemsTable = None # Search History page self.SearchHistoryTable = None # mypattern page self.SearchPatternsTable = None self.SearchPatternsInputNameDlg = None # shop safebox self.ShopSafeboxItems = [] self.ShopSafeboxItemsTable = None self.ShopSafeboxValuteAmount=0 self.ShopSafeboxValuteText = None self.ShopSafeboxWithdrawYangButton = None if ENABLE_CHEQUE_SYSTEM: self.ShopSafeboxValuteTextCheque = None # my offers page self.MyOffersList = None self.MyOffersTable = None # my auction page self.MyAuctionInfo = {} self.MyAuctionOffers = [] self.MyAuctionOfferTable = None self.MyAuctionOwnerName = None self.MyAuctionDuration = None self.MyAuctionBestOffer = None self.MyAuctionMinRaise = None self.MyAuctionSlot = None # open auction page self.OpenAuctionInfo = {} self.OpenAuctionOffers = [] self.OpenAuctionOfferTable = None self.OpenAuctionOwnerName = None self.OpenAuctionDuration = None self.OpenAuctionBestOffer = None self.OpenAuctionMinRaise = None self.OpenAuctionSlot = None # auctionlist self.AuctionListInfo = {} self.AuctionListTable = None # create auction page self.CreateAuctionCreateAuctionButton = None self.CreateAuctionDaysInput = None self.CreateAuctionStartingPriceInput = None self.CreateAuctionSlot = None self.CreateAuctionDaysIncreaseButton = None self.CreateAuctionDaysDecreaseButton = None #refresh symbol self.RefreshSymbol = None if app.KASMIR_PAKET_SYSTEM: #self.wndRender = None #self.wndRenderPreview = None self.KasmirNpc = 0 self.btnIncRender = None self.btnDecRender = None def Destroy(self): self.Hide() self.clear() self.ClearDictionary() #offlineshop-updated 05/08/19 def OnPressEscapeKey(self): self.Close() return True def __del__(self): self.Destroy() print("------------ DESTROYED OFFLINESHOP INTERFACE ------------") ui.ScriptWindow.__del__(self) def __loadWindow(self): pyLoader = ui.PythonScriptLoader() pyLoader.LoadScriptFile(self , "uiscript/offlineshopwindow.py") childDict = { "create_shop" : "MyShopBoardNoShop", "my_shop" : "MyShopBoard", "open_shop" : "ListOfShop_OpenShop", "shop_list" : "ListOfShop_List", "shop_safebox" : "ShopSafeboxPage", "my_offers" : "MyOffersPage", "search_history" : "SearchHistoryBoard", "my_patterns" : "MyPatternsBoard", "search_filter" : "SearchFilterBoard", "my_auction" : "MyAuction", "auction_list" : "AuctionList", "open_auction" : "OpenAuction", "create_auction" : "CreateAuction", } self.pageBoards = {} for k, v in childDict.items(): self.pageBoards[k] = self.GetChild(v) self.pageBoards[k].Hide() if app.KASMIR_PAKET_SYSTEM: self.KasmirNpc = 30000 self.btnIncRender = self.GetChild("IncreaseStyleButton") self.btnDecRender = self.GetChild("DecreaseStyleButton") self.btnIncRender.Hide() self.btnIncRender.SAFE_SetEvent(self.OnClickIncBtn) self.btnDecRender.SAFE_SetEvent(self.OnClickDecBtn) self.btnDecRender.Hide() #self.wndRender = ui.ThinBoard() #self.wndRender.SetParent(self.pageBoards["create_shop"]) #self.wndRender.SetSize(100, 100) #self.wndRender.SetPosition(self.pageBoards["create_shop"].GetWidth() - 160, 12) #self.wndRender.Show() #self.wndRenderPreview = ui.RenderTarget() #self.wndRenderPreview.SetParent(self.wndRender) #self.wndRenderPreview.SetSize(90, 90) #self.wndRenderPreview.SetPosition(4, 4) #self.wndRenderPreview.SetRenderTarget(2) #self.wndRenderPreview.Show() #renderTarget.SetBackground(2, "d:/ymir work/ui/game/myshop_deco/model_view_bg.sub") #renderTarget.SetVisibility(2, True) #renderTarget.SelectModel(2, self.KasmirNpc) #refresh symbol self.RefreshSymbol = self.GetChild("RefreshSymbol") #create shop page # self.HowToInsertItemText = self.GetChild("HowToInsertItems") self.CreateShopNameEdit = self.GetChild("ShopNameInput") self.CreateShopDaysCountText = self.GetChild("DaysCountText") self.CreateShopHoursCountText = self.GetChild("HoursCountText") self.CreateShopIncreaseDaysButton = self.GetChild("IncreaseDaysButton") self.CreateShopDecreaseDaysButton = self.GetChild("DecreaseDaysButton") self.CreateShopIncreaseHoursButton = self.GetChild("IncreaseHoursButton") self.CreateShopDecreaseHoursButton = self.GetChild("DecreaseHoursButton") self.CreateShopButton = self.GetChild("CreateShopButton") self.CreateShopIncreaseDaysButton.SAFE_SetEvent(self.__OnClickCreateShopIncreaseDaysButton) self.CreateShopDecreaseDaysButton.SAFE_SetEvent(self.__OnClickCreateShopDecreaseDaysButton) self.CreateShopIncreaseHoursButton.SAFE_SetEvent(self.__OnClickCreateShopIncreaseHoursButton) self.CreateShopDecreaseHoursButton.SAFE_SetEvent(self.__OnClickCreateShopDecreaseHoursButton) self.CreateShopButton.SAFE_SetEvent(self.__OnClickCreateShopButton) self.__MakeCreateShopItemsTable() #myshop page self.MyShopShopDuration = self.GetChild("MyShopShopDuration") self.MyShopShopTitle = self.GetChild("MyShopShopTitle") self.MyShopCloseButton = self.GetChild("MyShopCloseButton") self.MyShopEditTitleButton = self.GetChild("MyShopEditTitleButton") self.__MakeMyShopItemsTable() self.__MakeMyShopOffersTable() self.MyShopCloseButton.SAFE_SetEvent(self.__OnClickCloseButton) self.MyShopEditTitleButton.SAFE_SetEvent(self.__OnClickMyShopEditNameButton) self.MyShopEditNameDlg = uicommon.InputDialogWithDescription() self.MyShopEditNameDlg.SetMaxLength(35) self.MyShopEditNameDlg.SetDescription(localeinfo.OFFLINESHOP_EDIT_SHOPNAME_DESCRIPTION) self.MyShopEditNameDlg.SetAcceptEvent(self.__OnAcceptChangeShopNameDlg) self.MyShopEditNameDlg.SetCancelEvent(self.__OnCancelChangeShopNameDlg) self.MyShopEditNameDlg.SetTitle(localeinfo.OFFLINESHOP_EDIT_SHOPNAME_TITLE) self.MyShopEditNameDlg.Hide() #shoplist page self.__MakeShopListTable() #OpenShop page self.OpenShopBackToListButton = self.GetChild("OpenShopBackToListButton") self.OpenShopShopTitle = self.GetChild("OpenShopShopTitle") self.OpenShopShopDuration = self.GetChild("OpenShopShopDuration") self.CommonQuestionDlg = uicommon.QuestionDialog() self.CommonPickValuteDlg = uipickmoney.PickMoneyDialog() self.CommonPickValuteDlg.LoadDialog() self.OpenShopBackToListButton.SAFE_SetEvent(self.__OnClickShopListPage) self.__MakeOpenShopItemsTable() self.TitleBar = self.GetChild("TitleBar") self.TitleBar.SetCloseEvent(self.Close) #changepage buttons self.MyShopButton = self.GetChild("MyShopButton") self.ListOfShopButton = self.GetChild("ListOfShopButton") self.ShopSafeboxButton = self.GetChild("ShopSafeboxButton") self.MyOffersPageButton = self.GetChild("MyOffersPageButton") self.SearchFilterButton = self.GetChild("SearchFilterButton") self.SearchHistoryButton = self.GetChild("SearchHistoryButton") self.MyPatternsButton = self.GetChild("MyPatternsButton") self.MyAuctionButton = self.GetChild("MyAuctionButton") self.ListOfAuctionsButton = self.GetChild("ListOfAuctionsButton") #events setting self.MyShopButton.SAFE_SetEvent(self.__OnClickMyShopPage) self.ListOfShopButton.SAFE_SetEvent(self.__OnClickShopListPage) self.ShopSafeboxButton.SAFE_SetEvent(self.__OnClickShopSafeboxPage) self.MyOffersPageButton.SAFE_SetEvent(self.__OnClickMyOffersPage) self.SearchFilterButton.SAFE_SetEvent(self.__OnClickSearchFilterPage) self.SearchHistoryButton.SAFE_SetEvent(self.__OnClickSearchHistoryPage) self.MyPatternsButton.SAFE_SetEvent(self.__OnClickMyPatternsPage) self.MyAuctionButton.SAFE_SetEvent(self.__OnClickMyAuctionPage) self.ListOfAuctionsButton.SAFE_SetEvent(self.__OnClickAuctionListPage) #updateEvents self.updateEvents = { "my_shop" : self.__OnUpdateMyShopPage, "create_shop" : self.__OnUpdateCreateShopPage, "open_shop" : self.__OnUpdateOpenShopPage, "search_filter" : self.__OnUpdateSearchFilterPage, "shop_safebox" : self.__OnUpdateShopSafeboxPage, "my_offers" : self.__OnUpdateMyOffersPage, "search_history": self.__OnUpdateSearchHistoryPage, "my_patterns" : self.__OnUpdateMyPatternPage, "create_auction": self.__OnUpdateCreateAuctionPage, "my_auction" : self.__OnUpdateMyAuctionPage, "open_auction" : self.__OnUpdateOpenAuctionPage, "auction_list" : self.__OnUpdateAuctionListPage, } #item tooltip tooltip = uitooltip.ItemToolTip(width=300) tooltip.ClearToolTip() tooltip.SetFollow(True) tooltip.Hide() self.itemTooltip = tooltip #popup message popup = uicommon.PopupDialog() popup.SetWidth(250) popup.Hide() self.popupMessage = popup #input price self.CommonInputPriceDlg = uicommon.MoneyInputDialogCheque() if ENABLE_CHEQUE_SYSTEM else uicommon.MoneyInputDialog() self.CommonInputPriceDlg.SetAcceptEvent(self.__OnAcceptInputPrice) self.CommonInputPriceDlg.SetCancelEvent(self.__OnCancelInputPrice) #search filter page offlineshop.RefreshItemNameMap() self.__MakeSearchFilterResultItemsTable() self.SearchFilterItemNameInput = self.GetChild("SearchFilterItemNameInput") self.SearchFilterItemLevelStart = self.GetChild("SearchFilterItemLevelStart") self.SearchFilterItemLevelEnd = self.GetChild("SearchFilterItemLevelEnd") self.SearchFilterItemYangMin = self.GetChild("SearchFilterItemYangMin") self.SearchFilterItemYangMax = self.GetChild("SearchFilterItemYangMax") self.SearchFilterResetFilterButton = self.GetChild("SearchFilterResetFilterButton") self.SearchFilterSavePatternButton = self.GetChild("SearchFilterSavePatternButton") self.SearchFilterStartSearch = self.GetChild("SearchFilterStartSearch") self.__MakeGradeFilterWindow() self.__MakeSearchFilterCheckBoxes() self.SearchFilterComboBoxSuggestion = ui.ComboBox() self.SearchFilterComboBoxSuggestion.SetParent(self.pageBoards["search_filter"]) self.SearchFilterComboBoxSuggestion.SetPosition(75,50) self.SearchFilterComboBoxSuggestion.SetSize(130,17) self.SearchFilterComboBoxSuggestion.Show() self.SearchFilterSuggestionObj = Suggestions() self.SearchFilterSuggestionObj.SetComboBox(self.SearchFilterComboBoxSuggestion) self.SearchFilterSuggestionObj.SetInputBox(self.SearchFilterItemNameInput) self.SearchFilterSuggestionObj.SetMainDict(self.SearchFilterItemsNameDict) self.SearchFilterResetFilterButton.SAFE_SetEvent(self.__OnClickSearchFilterResetFilterButton) self.SearchFilterSavePatternButton.SAFE_SetEvent(self.__OnClickSearchFilterSavePatternButton) self.SearchFilterStartSearch.SAFE_SetEvent(self.__OnClickSearchFilterStartSearch) #subtype self.SearchFilterSubTypeComboBox = ui.ComboBox() self.SearchFilterSubTypeComboBox.SetParent(self.pageBoards["search_filter"]) self.SearchFilterSubTypeComboBox.SetPosition(220,50) self.SearchFilterSubTypeComboBox.SetSize(100,17) self.SearchFilterSubTypeComboBox.Show() self.SearchFilterSubTypeComboBox.InsertItem(SUBTYPE_NOSET , localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) self.SearchFilterSubTypeComboBox.SetCurrentItem(localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) #type self.SearchFilterTypeComboBox = ui.ComboBox() self.SearchFilterTypeComboBox.SetParent(self.pageBoards["search_filter"]) self.SearchFilterTypeComboBox.SetPosition(220,29) self.SearchFilterTypeComboBox.SetSize(100,17) self.SearchFilterTypeComboBox.Show() #insert types for k,v in self.ITEM_TYPES.items(): self.SearchFilterTypeComboBox.InsertItem(k, v["name"]) self.SearchFilterTypeComboBox.SetCurrentItem(localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) self.SearchFilterTypeComboBox.SetEvent(self.__OnSelectSearchFilterTypeComboBox) self.SearchFilterSubTypeComboBox.SetEvent(self.__OnSelectSearchFilterSubTypeComboBox) self.SearchFilterTypeComboBoxIndex = 0 self.SearchFilterSubTypeComboBoxIndex = SUBTYPE_NOSET #attributes for i in xrange(player.ATTRIBUTE_SLOT_NORM_NUM): self.SearchFilterAttributeButtons.append(self.GetChild("SearchFilterAttributeButton%d"%(i+1))) self.SearchFilterAttributeButtons[i].SAFE_SetEvent(self.__OnClickSearchFilterAttributeButton, i) self.SearchFilterAttributeButtons[i].SetText(self.ATTRIBUTES[0]) selector = SuggestionSelector() selector.SetParent(self.pageBoards["search_filter"]) selector.SetSelectEvent(self.__OnSelectSearchFilterSuggestionSelector) selector.SetValueDict(self.ATTRIBUTES) selector.Hide() self.SearchFilterSuggestionSelector = selector self.SearchFilterAttributeSetting = [0 for x in xrange(player.ATTRIBUTE_SLOT_NORM_NUM)] #search history page self.__MakeSearchHistoryTable() #search pattern page self.__MakeSearchPatternsTable() self.SearchPatternsInputNameDlg = uicommon.InputDialogWithDescription() self.SearchPatternsInputNameDlg.SetMaxLength(25) self.SearchPatternsInputNameDlg.SetDescription(localeinfo.OFFLINESHOP_MY_PATTERN_INSERT_NAME_DESC) self.SearchPatternsInputNameDlg.SetAcceptEvent(self.__OnAcceptMyPatternInputName) self.SearchPatternsInputNameDlg.SetCancelEvent(self.__OnCancelMyPatternInputName) self.SearchPatternsInputNameDlg.SetTitle(localeinfo.OFFLINESHOP_MY_PATTERN_INSERT_NAME_TITLE) self.SearchPatternsInputNameDlg.Hide() #safebox page self.__MakeShopSafeboxItemsTable() self.ShopSafeboxValuteText = self.GetChild("ShopSafeboxValuteText") self.ShopSafeboxWithdrawYangButton = self.GetChild("ShopSafeboxWithdrawYangButton") self.ShopSafeboxWithdrawYangButton.SAFE_SetEvent(self.__OnClickShopSafeboxWithdrawYang) if ENABLE_CHEQUE_SYSTEM: self.ShopSafeboxValuteTextCheque= self.GetChild("ShopSafeboxValuteTextCheque") #myoffers page self.__MakeMyOffersTable() #myAuction page self.MyAuctionOwnerName = self.GetChild("MyAuction_OwnerName") self.MyAuctionDuration = self.GetChild("MyAuction_Duration") self.MyAuctionBestOffer = self.GetChild("MyAuction_BestOffer") self.MyAuctionMinRaise = self.GetChild("MyAuction_MinRaise") self.__MakeMyAuctionOffersTable() #open auction page self.OpenAuctionOwnerName = self.GetChild("OpenAuction_OwnerName") self.OpenAuctionDuration = self.GetChild("OpenAuction_Duration") self.OpenAuctionBestOffer = self.GetChild("OpenAuction_BestOffer") self.OpenAuctionMinRaise = self.GetChild("OpenAuction_MinRaise") #updated 11.01.2020 self.OpenAuctionBackToListButton = self.GetChild("OpenAuctionBackToListButton") self.OpenAuctionBackToListButton.SAFE_SetEvent(self.__OnClickAuctionListPage) if ENABLE_CHEQUE_SYSTEM: self.ShopSafeboxValuteTextCheque= self.GetChild("ShopSafeboxValuteTextCheque") self.__MakeOpenAuctionOffersTable() #auction list page self.__MakeAuctionListTable() #create auction page self.CreateAuctionCreateAuctionButton = self.GetChild("CreateAuctionCreateAuctionButton") self.CreateAuctionDaysInput = self.GetChild("CreateAuctionDaysInput") self.CreateAuctionStartingPriceInput = self.GetChild("CreateAuctionStartingPriceInput") self.CreateAuctionWindowPos =-1 self.CreateAuctionSlotPos=-1 self.CreateAuctionDaysDecreaseButton = self.GetChild("CreateAuctionIncreaseDaysButton") self.CreateAuctionDaysIncreaseButton = self.GetChild("CreateAuctionDecreaseDaysButton") self.CreateAuctionCreateAuctionButton.SAFE_SetEvent(self.__OnClickCreateAuctionButton) self.CreateAuctionDaysDecreaseButton.SAFE_SetEvent(self.__OnClickCreateAuctionDaysDecreaseButton) self.CreateAuctionDaysIncreaseButton.SAFE_SetEvent(self.__OnClickCreateAuctionDaysIncreaseButton) self.CloseMyAuction = self.GetChild("MyAuction_Close") self.CloseMyAuction.SAFE_SetEvent(self.__OnClickMyAuctionClose) self.__MakeCreateAuctionSlot() #fixing escape key items = ( self.CreateShopNameEdit, self.SearchFilterItemNameInput, self.SearchFilterItemLevelStart, self.SearchFilterItemLevelEnd, self.SearchFilterItemYangMin, self.SearchFilterItemYangMax, self.CreateAuctionStartingPriceInput, ) autokill = lambda arg: arg.KillFocus() for item in items: item.OnPressEscapeKey = lambda : autokill(item) self.__UpdateAttachedWindows() if app.KASMIR_PAKET_SYSTEM: def OnClickIncBtn(self): if self.pageBoards["create_shop"].IsShow(): if self.KasmirNpc >= 30007: self.KasmirNpc = 30000 else: self.KasmirNpc += 1 #renderTarget.SelectModel(2, self.KasmirNpc) def OnClickDecBtn(self): if self.pageBoards["create_shop"].IsShow(): if self.KasmirNpc <= 30000: self.KasmirNpc = 30007 else: self.KasmirNpc -= 1 #renderTarget.SelectModel(2, self.KasmirNpc) def OnTop(self): if self.pageCategory == "search_filter": if self.ShowGradeFilterButton and self.ShowGradeFilterButton.IsShow(): self.ShowGradeFilterButton.SetTop() def Open(self): events = { "my_shop" : self.__OnClickMyShopPage, "open_shop" : self.__OnClickShopListPage, "shop_list" : self.__OnClickShopListPage, "shop_safebox" : self.__OnClickShopSafeboxPage, "my_offers" : self.__OnClickMyOffersPage, "search_history" : self.__OnClickSearchHistoryPage, "my_patterns" : self.__OnClickMyPatternsPage, "search_filter" : self.__OnClickSearchFilterPage, "my_auction" : self.__OnClickMyAuctionPage, "auction_list" : self.__OnClickAuctionListPage, "open_auction" : self.__OnClickAuctionListPage, } if self.pageCategory in events.keys(): events[self.pageCategory]() if app.KASMIR_PAKET_SYSTEM: if self.pageBoards["create_shop"].IsShow() or self.pageCategory == "my_shop": #if self.wndRenderPreview: self.KasmirNpc = 30000 #renderTarget.SelectModel(2, self.KasmirNpc) self.Show() def Close(self): self.Hide() self.itemTooltip.Hide() self.MyShopEditNameDlg.Hide() self.CommonQuestionDlg.Hide() self.CommonPickValuteDlg.Hide() self.CommonInputPriceDlg.Hide() offlineshop.SendCloseBoard() if self.pageCategory == "search_filter": if self.ShowGradeFilterButton: self.ShowGradeFilterButton.Hide() if self.GradeFilterWindow: self.GradeFilterWindow.Hide() if self.GradeFilterSuggestions: self.GradeFilterSuggestions.Hide() def __ResetCreateShopPage(self): # self.HowToInsertItemText.Show() self.CreateShopItemsTable.ClearElement() self.CreateShopItemsInfos = {} def OnMoveWindow(self, x, y): if self.pageCategory == "search_filter": self.__UpdateAttachedWindows() def __MakeCreateShopItemsTable(self): board = self.pageBoards["create_shop"] table = TableWindowWithScrollbar(575, 325, 11,3, TableWindowWithScrollbar.SCROLLBAR_HORIZONTAL) table.SetParent(board) table.SetPosition(25, 115) table.SetDefaultCreateChild(MakeDefaultEmptySlot, self.__OnClickCreateShopEmptySlot) table.Show() self.CreateShopItemsTable = table def __MakeMyShopItemsTable(self): board = self.pageBoards["my_shop"] table = TableWindowWithScrollbar(588, 324, 11,3, TableWindowWithScrollbar.SCROLLBAR_HORIZONTAL) table.SetParent(board) table.SetPosition(17, 49) table.SetDefaultCreateChild(MakeDefaultEmptySlot, self.__OnClickMyShopEmptySlot) table.Show() self.MyShopItemsTable = table def __MakeMyShopOffersTable(self): board = self.pageBoards["my_shop"] table = TableWindowWithScrollbar(585, 114, 1,5 , TableWindowWithScrollbar.SCROLLBAR_VERTICAL) table.SetParent(board) table.SetPosition(20, 395) table.Show() self.MyShopOffersTable = table def __MakeShopListTable(self): board = self.pageBoards["shop_list"] table = TableWindowWithScrollbar(570, 476, 1, 23, TableWindowWithScrollbar.SCROLLBAR_VERTICAL) table.SetParent(board) table.SetPosition(30, 26) table.Show() self.ShopListTable = table def __MakeOpenShopItemsTable(self): board = self.pageBoards["open_shop"] table = TableWindowWithScrollbar(584, 440, 11,4, TableWindowWithScrollbar.SCROLLBAR_HORIZONTAL) table.SetParent(board) table.SetPosition(20,55) table.SetDefaultCreateChild(MakeDefaultEmptySlot) table.Show() self.OpenShopItemsTable = table def __MakeOpenAuctionOffersTable(self): board = self.pageBoards["open_auction"] table = TableWindowWithScrollbar(580, 340, 1, 20, TableWindowWithScrollbar.SCROLLBAR_VERTICAL) table.SetParent(board) table.SetPosition(16, 159) table.Show() self.OpenAuctionOfferTable = table def __MakeMyAuctionOffersTable(self): board = self.pageBoards["my_auction"] table = TableWindowWithScrollbar(580, 340, 1,20, TableWindowWithScrollbar.SCROLLBAR_VERTICAL) table.SetParent(board) table.SetPosition(16, 159) table.Show() self.MyAuctionOfferTable = table def __MakeAuctionListTable(self): board = self.pageBoards["auction_list"] table = TableWindowWithScrollbar(581, 471, 1, 20, TableWindowWithScrollbar.SCROLLBAR_VERTICAL) table.SetParent(board) table.SetPosition(21, 28) table.Show() self.AuctionListTable = table def __GradeFilterOnTop(self): if self.GradeFilterSuggestions and self.GradeFilterSuggestions.IsShow(): self.GradeFilterSuggestions.SetTop() def __MakeGradeFilterWindow(self): button = ui.Button() button.SetUpVisual("offlineshop/searchfilter/grade_filter/expand_grade_filter_default.png") button.SetDownVisual("offlineshop/searchfilter/grade_filter/expand_grade_filter_down.png") button.SetOverVisual("offlineshop/searchfilter/grade_filter/expand_grade_filter_over.png") button.SAFE_SetEvent(self.__OnClickShowGradeFilterButton) button.Hide() button.AddFlag("float") self.ShowGradeFilterButton = button window = ui.Board() window.SetSize(132,86) window.AddFlag("float") window.OnTop = self.__GradeFilterOnTop self.GradeFilterWindow = window hide_button = ui.Button() hide_button.SAFE_SetEvent(self.__OnClickHideGradeFilterButton) hide_button.SetUpVisual("offlineshop/searchfilter/grade_filter/reduce_grade_filter_default.png") hide_button.SetDownVisual("offlineshop/searchfilter/grade_filter/reduce_grade_filter_down.png") hide_button.SetOverVisual("offlineshop/searchfilter/grade_filter/reduce_grade_filter_over.png") hide_button.SetParent(self.GradeFilterWindow) hide_button.SetPosition(self.GradeFilterWindow.GetWidth()-hide_button.GetWidth(), 4) hide_button.Show() self.HideGradeFilterButton = hide_button background = ui.ImageBox() background.LoadImage("offlineshop/searchfilter/grade_filter.png") background.Show() background.SetParent(self.GradeFilterWindow) background.SetWindowHorizontalAlignCenter() background.SetWindowVerticalAlignCenter() background.SetPosition(-1,0) self.GradeFilterBackground = background checkbox = ui.OfflineShopCheckBox({'base' : "offlineshop/checkbox/base.png", 'tip' : "offlineshop/checkbox/tip.png",}) checkbox.SetParent(self.GradeFilterBackground) checkbox.SetPosition(9,3) checkbox.Show() self.GradeFilterCheckBox = checkbox select_button = ui.Button() select_button.SetUpVisual("offlineshop/searchfilter/grade_filter/grade_selector_default.png") select_button.SetDownVisual("offlineshop/searchfilter/grade_filter/grade_selector_down.png") select_button.SetOverVisual("offlineshop/searchfilter/grade_filter/grade_selector_over.png") select_button.SetParent(self.GradeFilterBackground) select_button.SetPosition(0,0) select_button.SetWindowHorizontalAlignCenter() select_button.SetWindowVerticalAlignCenter() select_button.SetText(self.RARITY_GRADES[-1]) select_button.SAFE_SetEvent(self.__OnClickGradeSelectButton) select_button.Show() self.GradeFilterButtonSelect = select_button selector = SuggestionSelector(len(self.RARITY_GRADES), 'small') selector.AddFlag("float") selector.SetSelectEvent(self.__OnSelectSearchFilterGradeSelector) selector.SetValueDict(self.RARITY_GRADES) selector.Hide() self.GradeFilterSuggestions = selector self.GradeFilterWindowSettings = {'state': 'hidden', 'x' : self.GetWidth() - self.GradeFilterWindow.GetWidth() , 'y' : 50} def __MakeSearchFilterCheckBoxes(self): positions = { "name" : { "x" : 20, "y" : 9, }, "type" : { "x" : 222, "y" : 9, }, "price" : { "x" : 224, "y" : 83, }, "level" : { "x" : 338, "y" : 9, }, "wear" : { "x" : 20, "y" : 83, }, "attr" : { "x" : 404, "y" : 9, }, } if ENABLE_WOLFMAN_CHARACTER: race = { "warrior" : { "x" : 66+18, "y" : 88, }, "assassin" : { "x" : 66+18, "y" : 114, }, "sura" : { "x" : 139+10, "y" : 88, }, "shaman" : { "x" : 139+10, "y" : 114, }, "wolfman" : { "x" : 20, "y" : 114, }, } else: race = { "warrior" : { "x" : 66, "y" : 88, }, "assassin" : { "x" : 66, "y" : 114, }, "sura" : { "x" : 139, "y" : 88, }, "shaman" : { "x" : 139, "y" : 114, }, } for k, v in positions.items(): checkbox = ui.OfflineShopCheckBox({'base' : "offlineshop/checkbox/base.png", 'tip' : "offlineshop/checkbox/tip.png",}) checkbox.SetParent(self.pageBoards["search_filter"]) checkbox.SetPosition(v["x"] , v["y"]) checkbox.Show() self.SearchFilterCheckBoxes[k] = checkbox for k, v in race.items(): checkbox = ui.OfflineShopCheckBox({'base' : "offlineshop/checkbox/%s_base.png"%k , 'tip' : "offlineshop/checkbox/%s_tip.png"%k,}) checkbox.SetParent(self.pageBoards["search_filter"]) checkbox.SetPosition(v["x"] , v["y"]) checkbox.Show() checkbox.Enable() self.SearchFilterCheckBoxesRace[k] = checkbox def __MakeSearchFilterResultItemsTable(self): board = self.pageBoards["search_filter"] table = TableWindowWithScrollbar(585, 329, 11, 3, TableWindowWithScrollbar.SCROLLBAR_HORIZONTAL) table.SetParent(board) table.SetPosition(14,153) table.SetDefaultCreateChild(MakeDefaultEmptySlot) table.ClearElement() table.Show() self.SearchFilterResultItemsTable = table def __MakeSearchHistoryTable(self): board = self.pageBoards["search_history"] table = TableWindowWithScrollbar(585, 470, 1, 20 , TableWindowWithScrollbar.SCROLLBAR_VERTICAL) table.SetParent(board) table.SetPosition(13, 32) table.Show() self.SearchHistoryTable = table def __MakeSearchPatternsTable(self): board = self.pageBoards["my_patterns"] table = TableWindowWithScrollbar(585, 470, 1, 20, TableWindowWithScrollbar.SCROLLBAR_VERTICAL) table.SetParent(board) table.SetPosition(13, 36) table.Show() self.SearchPatternsTable = table def __MakeShopSafeboxItemsTable(self): board = self.pageBoards["shop_safebox"] table = TableWindowWithScrollbar(582, 443, 11, 4, TableWindowWithScrollbar.SCROLLBAR_HORIZONTAL) table.SetParent(board) table.SetPosition(18, 50) table.SetDefaultCreateChild(MakeDefaultEmptySlot) table.Show() self.ShopSafeboxItemsTable = table def __MakeMyOffersTable(self): board = self.pageBoards["my_offers"] table = TableWindowWithScrollbar(584, 445, 2, 4, TableWindowWithScrollbar.SCROLLBAR_VERTICAL) table.SetParent(board) table.SetPosition(18, 50) table.Show() self.MyOffersTable = table def OnClickAuctionSlot(self, slot): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL) and self.CreateAuctionSlotPos != -1: if mousemodule.mouseController.isAttached(): mousemodule.mouseController.DeattachObject() self.CreateAuctionWindowPos =-1 self.CreateAuctionSlotPos=-1 self.__MakeCreateAuctionSlot() if self.itemTooltip: self.itemTooltip.ClearToolTip() self.itemTooltip.Hide() else: if mousemodule.mouseController.isAttached(): attachedSlotType = mousemodule.mouseController.GetAttachedType() attachedSlotPos = mousemodule.mouseController.GetAttachedSlotNumber() itemIndex = player.GetItemIndex(attachedSlotPos) item.SelectItem(itemIndex) if not item.IsAntiFlag(item.ANTIFLAG_GIVE) and not item.IsAntiFlag(item.ANTIFLAG_MYSHOP): if app.ENABLE_EXTRA_INVENTORY: if attachedSlotType != player.SLOT_TYPE_INVENTORY and attachedSlotType != SLOT_TYPE_EXTRA_INVENTORY: mousemodule.mouseController.DeattachObject() return else: if attachedSlotType != player.SLOT_TYPE_INVENTORY: mousemodule.mouseController.DeattachObject() return self.AuctionBuilding_AddInventoryItem(attachedSlotPos) else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeinfo.OFFLINESHOP_CANT_SELECT_ITEM_DURING_BUILING) mousemodule.mouseController.DeattachObject() def __MakeCreateAuctionSlot(self): if self.CreateAuctionSlot: self.CreateAuctionSlot.Destroy() del self.CreateAuctionSlot slot = Slot() slot.Show() slot.SetParent(self.pageBoards['create_auction']) slot.SetPosition(430,152) slot.SetOnMouseLeftButtonUpEvent(self.OnClickAuctionSlot) self.CreateAuctionSlot = slot def __MakeMyAuctionSlot(self, info): if self.MyAuctionSlot: del self.MyAuctionSlot slot = Slot() slot.SetParent(self.pageBoards['my_auction']) slot.SetPosition(339+54,97-73) slot.SetInfo(info) slot.Show() self.MyAuctionSlot = slot def __MakeOpenAuctionSlot(self, info): if self.OpenAuctionSlot: del self.OpenAuctionSlot slot = Slot() slot.SetParent(self.pageBoards['open_auction']) slot.SetPosition(339+54,97-73) slot.SetInfo(info) slot.Show() slot.SetOnMouseLeftButtonUpEvent(self.__OnClickOpenAuctionMakeOffer) self.OpenAuctionSlot = slot def __UpdateGradeFilterEffect(self): state = self.GradeFilterWindowSettings.get('state', None) if state == 'showing': x,y = self.GetGlobalPosition() max_x = self.GetWidth() -3 xpos = self.GradeFilterWindowSettings.get('x', 0) ypos = self.GradeFilterWindowSettings.get('y', 0) xpos = min(max_x, xpos + 3) self.GradeFilterWindowSettings['x'] = xpos self.GradeFilterWindow.SetPosition(x + xpos, y + ypos) self.SetTop() if max_x == xpos: self.GradeFilterWindowSettings['state'] = 'on_view' elif state == 'hiding': x,y = self.GetGlobalPosition() min_x = self.GetWidth() - self.GradeFilterWindow.GetWidth() xpos = self.GradeFilterWindowSettings.get('x', 0) ypos = self.GradeFilterWindowSettings.get('y', 0) xpos = max(min_x, xpos - 3) self.GradeFilterWindowSettings['x'] = xpos self.GradeFilterWindow.SetPosition(x + xpos, y + ypos) self.SetTop() if min_x == xpos: self.GradeFilterWindowSettings['state'] = 'hidden' self.ShowGradeFilterButton.Show() self.ShowGradeFilterButton.SetTop() def __UpdateAttachedWindows(self): x,y = self.GetGlobalPosition() if self.ShowGradeFilterButton: self.ShowGradeFilterButton.SetPosition(x + self.GetWidth() - 10, y + 61 - 6) self.ShowGradeFilterButton.SetTop() if self.GradeFilterWindow: xpos = self.GradeFilterWindowSettings.get('x', 0) ypos = self.GradeFilterWindowSettings.get('y', 0) self.GradeFilterWindow.SetPosition(x + xpos, y + ypos) if self.GradeFilterSuggestions and self.GradeFilterSuggestions.IsShow(): x,y = self.GradeFilterButtonSelect.GetGlobalPosition() self.GradeFilterSuggestions.SetPosition(x, y + 17) def __OnClickCreateShopIncreaseDaysButton(self): days = int(self.CreateShopDaysCountText.GetText()) if days == offlineshop.OFFLINESHOP_MAX_DAYS: self.CreateShopDaysCountText.SetText("0") else: self.CreateShopDaysCountText.SetText(str(days+1)) def __OnClickCreateShopDecreaseDaysButton(self): days = int(self.CreateShopDaysCountText.GetText()) if days == 0: self.CreateShopDaysCountText.SetText(str(offlineshop.OFFLINESHOP_MAX_DAYS)) else: self.CreateShopDaysCountText.SetText(str(days-1)) def __OnClickCreateShopIncreaseHoursButton(self): hours = int(self.CreateShopHoursCountText.GetText()) if hours == offlineshop.OFFLINESHOP_MAX_HOURS: self.CreateShopHoursCountText.SetText("0") else: self.CreateShopHoursCountText.SetText(str(hours+1)) def __OnClickCreateShopDecreaseHoursButton(self): hours = int(self.CreateShopHoursCountText.GetText()) if hours == 0: self.CreateShopHoursCountText.SetText(str(offlineshop.OFFLINESHOP_MAX_HOURS)) else: self.CreateShopHoursCountText.SetText(str(hours-1)) def __OnClickCloseButton(self): offlineshop.SendForceCloseShop() def __OnClickMyShopEditNameButton(self): self.MyShopEditNameDlg.inputValue.SetText("") self.MyShopEditNameDlg.Open() def __OnClickMyShopPage(self): self.__OnChangePage() offlineshop.SendCloseBoard() offlineshop.SendOpenShopOwner() self.EnableRefreshSymbol() def __OnClickShopListPage(self): self.__OnChangePage() offlineshop.SendCloseBoard() offlineshop.SendRequestShopList() self.EnableRefreshSymbol() def __OnClickShopSafeboxPage(self): self.__OnChangePage() offlineshop.SendCloseBoard() offlineshop.SendSafeboxOpen() self.EnableRefreshSymbol() def __OnClickMyOffersPage(self): self.__OnChangePage() offlineshop.SendCloseBoard() offlineshop.SendOfferListRequest() self.EnableRefreshSymbol() def __OnClickSearchFilterPage(self): self.__OnChangePage() offlineshop.SendCloseBoard() self.pageCategory = "search_filter" for page in self.pageBoards.values(): page.Hide() self.pageBoards["search_filter"].Show() if self.ShowGradeFilterButton and self.GradeFilterWindowSettings['state'] == 'hidden': self.ShowGradeFilterButton.Show() self.ShowGradeFilterButton.SetTop() if self.GradeFilterWindowSettings['state'] != 'hidden': self.GradeFilterWindow.Show() self.__UpdateAttachedWindows() def __OnSelectSearchFilterTypeComboBox(self, index): self.SearchFilterSubTypeComboBox.ClearItem() self.SearchFilterSubTypeComboBox.InsertItem(SUBTYPE_NOSET , localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) if index == 0: self.SearchFilterTypeComboBoxIndex = 0 self.SearchFilterTypeComboBox.SetCurrentItem(localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) self.SearchFilterSubTypeComboBox.SetCurrentItem(localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) self.SearchFilterSubTypeComboBoxIndex = SUBTYPE_NOSET return self.SearchFilterTypeComboBoxIndex = index self.SearchFilterTypeComboBox.SetCurrentItem(self.ITEM_TYPES[index]['name']) if self.ITEM_TYPES.has_key(index) and self.ITEM_TYPES[index].has_key('subtypes'): for sub, name in self.ITEM_TYPES[index]['subtypes'].items(): self.SearchFilterSubTypeComboBox.InsertItem(sub, name) else: self.SearchFilterSubTypeComboBox.SetCurrentItem(localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) self.SearchFilterSubTypeComboBoxIndex = SUBTYPE_NOSET def __OnSelectSearchFilterSubTypeComboBox(self, index): if index == SUBTYPE_NOSET: self.SearchFilterSubTypeComboBox.SetCurrentItem(localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) self.SearchFilterSubTypeComboBoxIndex = SUBTYPE_NOSET return self.SearchFilterSubTypeComboBoxIndex = index self.SearchFilterSubTypeComboBox.SetCurrentItem(self.ITEM_TYPES[self.SearchFilterTypeComboBoxIndex]['subtypes'][index]) def __OnSelectSearchFilterGradeSelector(self, index): self.GradeFilterButtonSelect.SetText(self.RARITY_GRADES[index]) self.GradeFilterSuggestionsIndex = index self.GradeFilterSuggestions.Hide() def __OnSelectSearchFilterSuggestionSelector(self, index): self.SearchFilterAttributeButtons[self.SearchFilterAttributeButtonIndex].SetText(self.ATTRIBUTES[index]) self.SearchFilterAttributeSetting[self.SearchFilterAttributeButtonIndex] = index self.SearchFilterAttributeButtonIndex = -1 self.SearchFilterSuggestionSelector.Hide() def __OnClickSearchFilterAttributeButton(self, index): if self.SearchFilterSuggestionSelector.IsShow(): self.SearchFilterSuggestionSelector.Hide() self.SearchFilterAttributeButtonIndex = -1 else: self.SearchFilterAttributeButtonIndex = index x,y = self.SearchFilterAttributeButtons[index].GetLocalPosition() y += self.SearchFilterAttributeButtons[index].GetHeight() self.SearchFilterSuggestionSelector.SetPosition(x,y) self.SearchFilterSuggestionSelector.Show() def __OnClickSearchHistoryPage(self): self.__OnChangePage() offlineshop.SendCloseBoard() self.pageCategory = "search_history" for v in self.pageBoards.values(): v.Hide() self.pageBoards["search_history"].Show() self.RefreshSearchHistoryPage() def __OnClickMyPatternsPage(self): self.__OnChangePage() offlineshop.SendCloseBoard() for v in self.pageBoards.values(): v.Hide() self.pageBoards["my_patterns"].Show() self.pageCategory = "my_patterns" self.RefreshMyPatternsPage() def __OnClickSearchPatternElement(self, element): info = element.GetInfo() self.__SetSearchFilterPattern(info) offlineshop.UpdateLastUseFilterPattern(info["id"]) def __OnClickMyAuctionPage(self): self.__OnChangePage() offlineshop.SendCloseBoard() offlineshop.SendAuctionOpenMy() self.EnableRefreshSymbol() self.__OnCheckCreateAuctionSlot() def __OnClickAuctionListPage(self): self.__OnChangePage() offlineshop.SendCloseBoard() offlineshop.SendAuctionListRequest() self.EnableRefreshSymbol() def __OnChangePage(self): if self.pageCategory == "search_filter": self.ShowGradeFilterButton.Hide() self.GradeFilterWindow.Hide() self.GradeFilterSuggestions.Hide() self.__UpdateAttachedWindows() def __OnClickCreateAuctionButton(self): if self.CreateAuctionWindowPos == -1: return if self.CreateAuctionSlotPos == -1: return daystext = self.CreateAuctionDaysInput.GetText() days = int(daystext) if daystext and daystext.isdigit() else 0 if 0 == days or offlineshop.OFFLINESHOP_MAX_DAYS<days: self.__PopupMessage(localeinfo.OFFLINESHOP_CREATE_SHOP_INVALID_DURATION) return pricetext = self.CreateAuctionStartingPriceInput.GetText() price = long(pricetext) if pricetext and pricetext.isdigit() else 0 if price <= 0: self.__PopupMessage(localeinfo.OFFLINESHOP_CREATE_AUCTION_INVALID_PRICE) return offlineshop.SendAuctionCreate(self.CreateAuctionWindowPos, self.CreateAuctionSlotPos, price, days*24*60) self.EnableRefreshSymbol() def __OnClickCreateAuctionDaysDecreaseButton(self): days = int(self.CreateAuctionDaysInput.GetText()) if days ==0: self.CreateAuctionDaysInput.SetText(str(offlineshop.OFFLINESHOP_MAX_DAYS)) else: self.CreateAuctionDaysInput.SetText(str(days-1)) def __OnClickMyAuctionClose(self): offlineshop.CloseMyAuction() def __OnClickCreateAuctionDaysIncreaseButton(self): days = int(self.CreateAuctionDaysInput.GetText()) if days == offlineshop.OFFLINESHOP_MAX_DAYS: self.CreateAuctionDaysInput.SetText("0") else: self.CreateAuctionDaysInput.SetText(str(days + 1)) def __OnClickSearchFilterResetFilterButton(self): # combobox for k, v in self.SearchFilterCheckBoxes.items(): v.Disable() # raceflags for v in self.SearchFilterCheckBoxesRace.values(): v.Enable() # type/subtype self.SearchFilterTypeComboBox.SetCurrentItem(localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) self.SearchFilterTypeComboBoxIndex = 0 self.SearchFilterSubTypeComboBox.SetCurrentItem(localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) self.SearchFilterSubTypeComboBoxIndex = SUBTYPE_NOSET # name self.SearchFilterItemNameInput.SetText("") self.SearchFilterSuggestionObj.Clear() # level self.SearchFilterItemLevelStart.SetText("") self.SearchFilterItemLevelEnd.SetText("") # price self.SearchFilterItemYangMin.SetText("") self.SearchFilterItemYangMax.SetText("") # attributes for x in xrange(player.ATTRIBUTE_SLOT_NORM_NUM): self.SearchFilterAttributeButtons[x].SetText(localeinfo.OFFLINESHOP_ATTR_UNSET) self.SearchFilterAttributeSetting[x] = 0 self.SearchFilterResultItemsTable.ClearElement() #offlineshop-updated 04/08/19 self.__OnSelectSearchFilterTypeComboBox(0) self.__OnSelectSearchFilterSubTypeComboBox(SUBTYPE_NOSET) def __OnClickSearchFilterSavePatternButton(self): bActiveOne = False for v in self.SearchFilterCheckBoxes.values(): if v.IsEnabled(): bActiveOne = True break if self.GradeFilterWindow and self.GradeFilterWindow.IsShow() and self.GradeFilterCheckBox.IsEnabled(): bActiveOne = True if not bActiveOne: self.__PopupMessage(localeinfo.OFFLINESHOP_NO_FILTER_ACTIVE_MESSAGE) return if not self.SearchPatternsInputNameDlg.IsShow(): self.SearchPatternsInputNameDlg.inputValue.SetText("") self.SearchPatternsInputNameDlg.Open() def __OnClickSearchFilterStartSearch(self): bActiveOne = False for v in self.SearchFilterCheckBoxes.values(): if v.IsEnabled(): bActiveOne = True break if self.GradeFilterWindow and self.GradeFilterWindow.IsShow() and self.GradeFilterCheckBox.IsEnabled(): bActiveOne = True if not bActiveOne: self.__PopupMessage(localeinfo.OFFLINESHOP_NO_FILTER_ACTIVE_MESSAGE) return if self.SearchFilterCheckBoxes["name"].IsEnabled(): if not self.SearchFilterItemNameInput.GetText(): self.__PopupMessage(localeinfo.OFFLINESHOP_SEARCH_FILTER_NAME_NOSET) return if self.SearchFilterCheckBoxes["price"].IsEnabled(): if self.SearchFilterItemYangMin.GetText()=="0" and self.SearchFilterItemYangMax.GetText()=="0": self.__PopupMessage(localeinfo.OFFLINESHOP_SEARCH_PRICE_ERROR) return if self.SearchFilterCheckBoxes["level"].IsEnabled(): if self.SearchFilterItemLevelStart.GetText() == "0" and self.SearchFilterItemLevelEnd.GetText() == "0": self.__PopupMessage(localeinfo.OFFLINESHOP_SEARCH_LEVEL_ERROR) return if self.GradeFilterWindow and self.GradeFilterCheckBox.IsEnabled(): grade = self.GradeFilterSuggestionsIndex if grade == -1: self.__PopupMessage(localeinfo.OFFLINESHOP_SEARCH_RARITY_ERROR) return self.SearchFilterLastUsedSetting = self.GetSearchFilterSettings() offlineshop.SendFilterRequest(*self.SearchFilterLastUsedSetting) self.EnableRefreshSymbol() def __OnClickShowGradeFilterButton(self): self.GradeFilterWindowSettings['state'] = 'showing' self.ShowGradeFilterButton.Hide() self.GradeFilterWindow.Show() self.SetTop() def __OnClickGradeSelectButton(self): self.GradeFilterSuggestions.Show() self.GradeFilterSuggestions.SetTop() x,y = self.GradeFilterButtonSelect.GetGlobalPosition() self.GradeFilterSuggestions.SetPosition(x, y + 17) def __OnClickHideGradeFilterButton(self): self.GradeFilterWindowSettings['state'] = 'hiding' if self.GradeFilterSuggestions: self.GradeFilterSuggestions.Hide() def __OnClickFilterHistoryElement(self , element): info = element.GetInfo() self.__SetSearchFilterPattern(info) def __OnClickDeleteMyOfferButton(self, id): offer = None for element in self.MyOffersList: if element["offer_id"] == id: offer = element break if not offer: return accepttext = localeinfo.OFFLINESHOP_CANCEL_OFFER_QUESTION_ACCEPT canceltext = localeinfo.OFFLINESHOP_CANCEL_OFFER_QUESTION_CANCEL question = localeinfo.OFFLINESHOP_CANCEL_OFFER_QUESTION self.MyOffersCancelOfferInfo = (offer['offer_id'], offer['owner_id']) self.__OpenQuestionDialog(len(question)*6 , accepttext, canceltext, self.__OnAcceptCancelOfferQuestion, self.__OnCancelCancelOfferQuestion, question) def __SetSearchFilterPattern(self, info): self.__OnClickSearchFilterPage() # combobox for k, v in self.SearchFilterCheckBoxes.items(): v.Disable() # raceflags raceFlags = { "warrior" :item.ITEM_ANTIFLAG_WARRIOR, "assassin" :item.ITEM_ANTIFLAG_ASSASSIN, "sura" :item.ITEM_ANTIFLAG_SURA, "shaman": item.ITEM_ANTIFLAG_SHAMAN, } flag = info["filter_wearflag"] for k, v in raceFlags.items(): if flag & v != 0: self.SearchFilterCheckBoxesRace[k].Disable() if not self.SearchFilterCheckBoxes["wear"].IsEnabled(): self.SearchFilterCheckBoxes["wear"].Enable() else: self.SearchFilterCheckBoxesRace[k].Enable() # type/subtype if info["filter_type"] == 0: self.SearchFilterTypeComboBox.SetCurrentItem(localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) self.SearchFilterTypeComboBoxIndex = 0 self.SearchFilterSubTypeComboBox.SetCurrentItem(localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) self.SearchFilterSubTypeComboBoxIndex = SUBTYPE_NOSET else: if not self.SearchFilterCheckBoxes["type"].IsEnabled(): self.SearchFilterCheckBoxes["type"].Enable() typeCategory = self.ITEM_TYPES[info["filter_type"]] self.SearchFilterTypeComboBox.SetCurrentItem(typeCategory["name"]) self.SearchFilterTypeComboBoxIndex = info["filter_type"] subtype = info["filter_subtype"] if subtype != SUBTYPE_NOSET and typeCategory.has_key('subtypes'): self.SearchFilterSubTypeComboBox.SetCurrentItem(typeCategory['subtypes'][subtype]) self.SearchFilterSubTypeComboBoxIndex = subtype else: self.SearchFilterSubTypeComboBox.SetCurrentItem(localeinfo.OFFLINESHOP_TYPE_COMBOBOX_NOSET) self.SearchFilterSubTypeComboBoxIndex = SUBTYPE_NOSET # name if info["filter_name"]: self.SearchFilterCheckBoxes["name"].Enable() self.SearchFilterItemNameInput.SetText(info["filter_name"]) # level levelmin = info["level"]["start"] levelmax = info["level"]["end"] if levelmin != 0: self.SearchFilterCheckBoxes["level"].Enable() self.SearchFilterItemLevelStart.SetText(str(levelmin)) if levelmax != 0: self.SearchFilterCheckBoxes["level"].Enable() self.SearchFilterItemLevelEnd.SetText(str(levelmax)) # price yangmin = info["price"]["start"] yangmax = info["price"]["end"] if yangmin != 0: self.SearchFilterCheckBoxes["price"].Enable() self.SearchFilterItemYangMin.SetText(str(yangmin)) if yangmax != 0: self.SearchFilterCheckBoxes["price"].Enable() self.SearchFilterItemYangMax.SetText(str(yangmax)) #rarity rarity = info['rarity'] if rarity == -1 or not rarity in self.RARITY_GRADES: if self.GradeFilterCheckBox and self.GradeFilterCheckBox.IsEnabled(): self.GradeFilterCheckBox.Disable() if self.GradeFilterWindow and self.GradeFilterWindow.IsShow(): self.__OnClickHideGradeFilterButton() else: if self.GradeFilterCheckBox and not self.GradeFilterCheckBox.IsEnabled(): self.GradeFilterCheckBox.Enable() if self.GradeFilterButtonSelect: self.GradeFilterButtonSelect.SetText(self.RARITY_GRADES[rarity]) if self.GradeFilterWindow and self.GradeFilterWindow.IsShow() == False: self.__OnClickShowGradeFilterButton() self.GradeFilterSuggestionsIndex = rarity # attributes attrs = info["attr"]["type"] attr_actived = [v for v in attrs if v != 0] for x in xrange(player.ATTRIBUTE_SLOT_NORM_NUM): self.SearchFilterAttributeButtons[x].SetText(localeinfo.OFFLINESHOP_ATTR_UNSET) self.SearchFilterAttributeSetting[x] = 0 if attr_actived: self.SearchFilterCheckBoxes["attr"].Enable() idx = 0 for attr in attr_actived: self.SearchFilterAttributeButtons[idx].SetText(self.ATTRIBUTES[attr]) self.SearchFilterAttributeSetting[idx] = attr idx += 1 def __PopupMessage(self, message): self.popupMessage.SetText(message) self.popupMessage.Open() def __OpenQuestionDialog(self , width, accepttext, canceltext, acceptevent, cancelevent, text): self.CommonQuestionDlg.SetAcceptText(accepttext) self.CommonQuestionDlg.SetCancelText(canceltext) self.CommonQuestionDlg.SAFE_SetAcceptEvent(acceptevent) self.CommonQuestionDlg.SAFE_SetCancelEvent(cancelevent) self.CommonQuestionDlg.SetText(text) self.CommonQuestionDlg.SetWidth(width) self.CommonQuestionDlg.Open() if ENABLE_CHEQUE_SYSTEM: def __OnPickValute(self, title, acceptEvent, maxValue, maxCheque, max=13): self.CommonPickValuteDlg.SetMax(max) self.CommonPickValuteDlg.SetTitleName(title) self.CommonPickValuteDlg.SetAcceptEvent(acceptEvent) self.CommonPickValuteDlg.Open(maxValue, maxCheque) else: def __OnPickValute(self, title, acceptEvent, maxValue, max=13): self.CommonPickValuteDlg.SetMax(max) self.CommonPickValuteDlg.SetTitleName(title) self.CommonPickValuteDlg.SetAcceptEvent(acceptEvent) self.CommonPickValuteDlg.Open(maxValue) def OnShowPage(self): showEvents = { "my_shop" : self.__OnClickMyShopPage, } if self.pageCategory in showEvents: showEvents[self.pageCategory]() def BINARY_EnableRefreshSymbol(self): if self.IsShow(): self.EnableRefreshSymbol() def EnableRefreshSymbol(self): self.RefreshSymbol.Show() def DisableRefreshSymbol(self): self.RefreshSymbol.Hide() def ShopListClear(self): self.ShopList = [] def ShopListAddItem( self, owner_id, duration , count , name): newelement = {} newelement["owner_id"] = owner_id newelement["duration"] = duration newelement["count"] = count newelement["name"] = name self.ShopList.append(newelement) def ShopListShow(self): self.RefreshShopListPage() self.DisableRefreshSymbol() def OpenShop( self, owner_id, duration, count, name): self.ShopItemSold = [] self.ShopItemForSale = [] self.ShopOpenInfo["owner_id"] = owner_id self.ShopOpenInfo["duration"] = duration self.ShopOpenInfo["count"] = count self.ShopOpenInfo["name"] = name self.ShopOpenInfo["my_shop"] = False def OpenShopItem_Alloc(self): self.ShopItemForSale.append({}) def OpenShopItem_SetValue( self, key, index, *args): if key == "id": self.ShopItemForSale[index][key] = args[0] elif key == "vnum" or key == 'trans' or key == 'locked_attr': self.ShopItemForSale[index][key] = args[0] elif key == "count": self.ShopItemForSale[index][key] = args[0] elif key == "attr": if not key in self.ShopItemForSale[index]: self.ShopItemForSale[index][key] = {} attr_index = args[0] attr_type = args[1] attr_value = args[2] self.ShopItemForSale[index][key][attr_index] = {} self.ShopItemForSale[index][key][attr_index]["type"] = attr_type self.ShopItemForSale[index][key][attr_index]["value"] = attr_value elif key == "socket": if not key in self.ShopItemForSale[index]: self.ShopItemForSale[index][key] = {} socket_index = args[0] socket_val = args[1] self.ShopItemForSale[index][key][socket_index] = socket_val elif key == "price" or key == 'cheque': self.ShopItemForSale[index][key] = args[0] def OpenShop_End(self): self.RefreshOpenShopPage() self.DisableRefreshSymbol() if not self.IsShow(): self.Show() def OpenShopOwner_Start( self, owner_id, duration , count , name): self.ShopItemSold = [] self.ShopItemForSale = [] self.MyShopOffers = [] self.ShopOpenInfo["owner_id"] = owner_id self.ShopOpenInfo["duration"] = duration self.ShopOpenInfo["count"] = count self.ShopOpenInfo["name"] = name self.ShopOpenInfo["my_shop"] = True def OpenShopOwner_End(self): self.DisableRefreshSymbol() self.RefreshMyShopPage() if not self.IsShow(): self.Show() def OpenShopOwnerItem_Alloc(self): self.ShopItemForSale.append({}) def OpenShopOwnerItem_SetValue( self, key, index, *args): if key == "id": self.ShopItemForSale[index][key] = args[0] elif key == "vnum" or key == 'trans' or key == 'locked_attr': self.ShopItemForSale[index][key] = args[0] elif key == "count": self.ShopItemForSale[index][key] = args[0] elif key == "attr": if not key in self.ShopItemForSale[index]: self.ShopItemForSale[index][key] = {} attr_index = args[0] attr_type = args[1] attr_value = args[2] self.ShopItemForSale[index][key][attr_index] = {} self.ShopItemForSale[index][key][attr_index]["type"] = attr_type self.ShopItemForSale[index][key][attr_index]["value"] = attr_value elif key == "socket": if not key in self.ShopItemForSale[index]: self.ShopItemForSale[index][key] = {} socket_index = args[0] socket_val = args[1] self.ShopItemForSale[index][key][socket_index] = socket_val elif key == "price" or key == 'cheque': self.ShopItemForSale[index][key] = args[0] def OpenShopOwner_SetOffer(self, itemid , buyerid, offerid, price, is_accept, buyer_name ): newoffer = {} newoffer["id"] = offerid newoffer["item_id"] = itemid newoffer["buyer_id"] = buyerid newoffer["price"] = price newoffer["is_accept"] = is_accept newoffer['buyer_name'] = buyer_name self.MyShopOffers.append(newoffer) def OpenShopOwnerItemSold_Alloc( self ): self.ShopItemSold.append({}) def OpenShopOwnerItemSold_SetValue( self, key , index , *args): if key == "id": self.ShopItemSold[index][key] = args[0] elif key == "vnum" or key == 'trans' or key == 'locked_attr': self.ShopItemSold[index][key] = args[0] elif key == "count": self.ShopItemSold[index][key] = args[0] elif key == "attr": if not key in self.ShopItemSold[index]: self.ShopItemSold[index][key] = {} attr_index = args[0] attr_type = args[1] attr_value = args[2] self.ShopItemSold[index][key][attr_index] = {} self.ShopItemSold[index][key][attr_index]["type"] = attr_type self.ShopItemSold[index][key][attr_index]["value"] = attr_value elif key == "socket": if not key in self.ShopItemSold[index]: self.ShopItemSold[index][key] = {} socket_index = args[0] socket_val = args[1] self.ShopItemSold[index][key][socket_index] = socket_val elif key == "price" or key == 'cheque': self.ShopItemSold[index][key] = args[0] def OpenShopOwnerItemSold_Show( self): pass def OpenShopOwnerNoShop(self): for v in self.pageBoards.values(): v.Hide() self.pageBoards["create_shop"].Show() self.pageCategory = "create_shop" self.DisableRefreshSymbol() self.__ResetCreateShopPage() def ClearItemNames(self): self.SearchFilterItemsNameDict = {} def AppendItemName(self, vnum, name): self.SearchFilterItemsNameDict[name] = vnum def ShopClose( self): pass def ShopFilterResult( self , size): self.SearchFilterShopItemResult = [] def ShopFilterResultItem_Alloc(self): self.SearchFilterShopItemResult.append({}) def ShopFilterResultItem_SetValue( self, key, index, *args): if key in ( "id", "vnum", "count", "price", "owner", 'trans', 'cheque', 'locked_attr'): self.SearchFilterShopItemResult[index][key] = args[0] elif key == "attr": if not key in self.SearchFilterShopItemResult[index]: self.SearchFilterShopItemResult[index][key] = {} attr_index = args[0] attr_type = args[1] attr_value = args[2] self.SearchFilterShopItemResult[index][key][attr_index] = {} self.SearchFilterShopItemResult[index][key][attr_index]["type"] = attr_type self.SearchFilterShopItemResult[index][key][attr_index]["value"] = attr_value elif key == "socket": if not key in self.SearchFilterShopItemResult[index]: self.SearchFilterShopItemResult[index][key] = {} socket_index = args[0] socket_val = args[1] self.SearchFilterShopItemResult[index][key][socket_index] = socket_val def ShopFilterResult_Show(self): self.SearchFilterResultItemsTable.ClearElement() for info in self.SearchFilterShopItemResult: slot = Slot() slot.SetInfo(info) slot.SetIndex((info["id"], info["owner"])) slot.SetOnMouseLeftButtonUpEvent(self.__OnLeftClickSearchFilterShopResultItem) slot.Show() self.SearchFilterResultItemsTable.AddElement(slot) if len(self.SearchFilterShopItemResult) == SEARCH_RESULT_LIMIT: self.__PopupMessage(localeinfo.OFFLINESHOP_SEARCH_RISE_LIMIT%SEARCH_RESULT_LIMIT) setting = self.GetSearchFilterSettings() setting = (len(self.SearchFilterShopItemResult),) + setting offlineshop.AppendNewFilterHistory(*setting) self.DisableRefreshSymbol() def OfferReceived( self, offer_id , notified, accepted, owner_id, offerer_id, item_id, yang): pass def OfferAccept( self, offer_id , notified, accepted, owner_id, offerer_id, item_id, yang): pass def ClearFilterHistory(self): self.FilterHistory = [] def AllocFilterHistory( self): self.FilterHistory.append({'id' : len(self.FilterHistory)}) def SetFilterHistoryValue( self, key, *args): elm = self.FilterHistory[-1] if key == "datetime": elm["minute"] = args[0] elm["hour"] = args[1] elm["day"] = args[2] elm["month"] = args[3] elm["year"] = args[4] elif key in ('count' , 'filter_type' , 'filter_subtype', 'filter_name' ,'filter_wearflag','rarity'): elm[key] = args[0] elif key in ('filter_price_yang_start', 'filter_price_yang_end'): if not 'price' in elm: elm['price'] = {} elm['price'][key.replace('filter_price_yang_', '')] = args[0] elif key in ('filter_level_start', 'filter_level_end'): if not 'level' in elm: elm['level'] = {} elm['level'][key.replace('filter_level_', '')] = args[0] elif key in ('filter_attr_type' , 'filter_attr_value'): if not 'attr' in elm: elm['attr'] = {} elm['attr']['type'] = [0 for x in xrange(offlineshop.FILTER_ATTRIBUTE_NUM)] elm['attr']['value'] = [0 for x in xrange(offlineshop.FILTER_ATTRIBUTE_NUM)] elm['attr'][key.replace('filter_attr_', '')][args[0]] = args[1] def ClearFilterPatterns( self): self.FilterPatterns = {} def AllocFilterPattern( self , id): self.FilterPatterns[id] = {"id": id,} def SetFilterPatternValue( self, key, idx, *args): elm = self.FilterPatterns[idx] if key == "datetime": elm["minute"] = args[0] elm["hour"] = args[1] elm["day"] = args[2] elm["month"] = args[3] elm["year"] = args[4] elif key in ('filter_type' , 'filter_subtype', 'filter_name' ,'filter_wearflag', 'name', 'rarity'): elm[key] = args[0] elif key in ('filter_price_yang_start', 'filter_price_yang_end'): if not 'price' in elm: elm['price'] = {} elm['price'][key.replace('filter_price_yang_', '')] = args[0] elif key in ('filter_level_start', 'filter_level_end'): if not 'level' in elm: elm['level'] = {} elm['level'][key.replace('filter_level_', '')] = args[0] elif key in ('filter_attr_type' , 'filter_attr_value'): if not 'attr' in elm: elm['attr'] = {} elm['attr']['type'] = [0 for x in xrange(offlineshop.FILTER_ATTRIBUTE_NUM)] elm['attr']['value'] = [0 for x in xrange(offlineshop.FILTER_ATTRIBUTE_NUM)] elm['attr'][key.replace('filter_attr_', '')][args[0]] = args[1] def GetSearchFilterSettings(self): name = "" raceflag = 0 type = 0 subtype = SUBTYPE_NOSET levelmin = 0 levelmax = 0 yangmin = 0 yangmax = 0 rarity = -1 attributes = tuple([(0,0) for x in xrange(player.ATTRIBUTE_SLOT_NORM_NUM)]) if self.SearchFilterCheckBoxes["name"].IsEnabled(): name = self.SearchFilterItemNameInput.GetText() if self.SearchFilterCheckBoxes["type"].IsEnabled(): type = self.SearchFilterTypeComboBoxIndex subtype = self.SearchFilterSubTypeComboBoxIndex if self.SearchFilterCheckBoxes["price"].IsEnabled(): yangminst = self.SearchFilterItemYangMin.GetText() yangmaxst = self.SearchFilterItemYangMax.GetText() if yangminst and yangminst.isdigit(): yangmin = long(yangminst) if yangmaxst and yangmaxst.isdigit(): yangmax = long(yangmaxst) if self.SearchFilterCheckBoxes["level"].IsEnabled(): levelminst = self.SearchFilterItemLevelStart.GetText() levelmaxst = self.SearchFilterItemLevelEnd.GetText() if levelminst and levelminst.isdigit(): levelmin = int(levelminst) if levelmaxst and levelmaxst.isdigit(): levelmax = int(levelmaxst) if self.SearchFilterCheckBoxes["wear"].IsEnabled(): raceFlagDct = { "warrior" : item.ITEM_ANTIFLAG_WARRIOR, "assassin" : item.ITEM_ANTIFLAG_ASSASSIN, "sura" : item.ITEM_ANTIFLAG_SURA, "shaman" : item.ITEM_ANTIFLAG_SHAMAN, } if ENABLE_WOLFMAN_CHARACTER: raceFlagDct.update({ "wolfman" : item.ITEM_ANTIFLAG_WOLFMAN, }) for k,v in raceFlagDct.items(): if not self.SearchFilterCheckBoxesRace[k].IsEnabled(): raceflag |= v if self.SearchFilterCheckBoxes["attr"].IsEnabled(): attributes = tuple([(self.SearchFilterAttributeSetting[x],0) for x in xrange(player.ATTRIBUTE_SLOT_NORM_NUM)]) if self.GradeFilterWindow and self.GradeFilterWindow.IsShow() and self.GradeFilterCheckBox.IsEnabled(): rarity = self.GradeFilterSuggestionsIndex return (type, subtype, name, (yangmin,yangmax), (levelmin, levelmax), raceflag, attributes, rarity) def __IsSaleableSlot(self, win , pos): if win == player.INVENTORY: if player.IsEquipmentSlot(pos): return False if self.pageCategory in ("create_shop", "my_shop" ) and self.IsForSaleSlot(win, pos): return False if self.pageCategory == "create_auction" and self.IsForAuctionSlot(win,pos): return False try: if app.ENABLE_EXTRA_INVENTORY: if not win in (player.INVENTORY, player.DRAGON_SOUL_INVENTORY, player.EXTRA_INVENTORY): return False else: if not win in (player.INVENTORY, player.DRAGON_SOUL_INVENTORY): return False except: if not win in (player.INVENTORY, player.DRAGON_SOUL_INVENTORY): return False try: if ENABLE_SOULBIND_SYSTEM: itemSealDate = player.GetItemSealDate(win, pos) if itemSealDate != item.E_SEAL_DATE_DEFAULT_TIMESTAMP: return False except: pass itemIndex = player.GetItemIndex(win,pos) if itemIndex == 0: return False item.SelectItem(itemIndex) if item.IsAntiFlag(item.ITEM_ANTIFLAG_MYSHOP) or item.IsAntiFlag(item.ITEM_ANTIFLAG_GIVE): return False return True def ShopBuilding_AddInventoryItem(self, slot): if player.GetItemIndex(player.INVENTORY, slot) ==0: return if player.IsEquipmentSlot(slot): return if self.IsForSaleSlot(player.INVENTORY,slot): return if self.__IsSaleableSlot(player.INVENTORY, slot): self.OpenInsertPriceDialog(player.INVENTORY,slot) def ShopBuilding_AddItem(self, win, pos): if self.__IsSaleableSlot(win, pos): self.OpenInsertPriceDialog(win,pos) def AuctionBuilding_AddInventoryItem(self, slot): if player.GetItemIndex(player.INVENTORY, slot) ==0: return if player.IsEquipmentSlot(slot): return if self.IsForAuctionSlot(player.INVENTORY, slot): return self.__OnSetCreateAuctionSlot(player.INVENTORY, slot) def AuctionBuilding_AddItem(self, win, pos): if self.__IsSaleableSlot(win, pos): self.__OnSetCreateAuctionSlot(win, pos) def SearchFilter_BuyFromSearch(self, ownerid, itemid): #patchme if self.pageCategory != 'search_filter': return for item in self.SearchFilterShopItemResult: if item['id'] == itemid and item['owner'] == ownerid: self.SearchFilterShopItemResult.remove(item) break self.SearchFilterResultItemsTable.ClearElement() for info in self.SearchFilterShopItemResult: slot = Slot() slot.SetInfo(info) slot.SetIndex((info["id"], info["owner"])) slot.SetOnMouseLeftButtonUpEvent(self.__OnLeftClickSearchFilterShopResultItem) slot.Show() self.SearchFilterResultItemsTable.AddElement(slot) def ShopSafebox_Clear(self): self.ShopSafeboxItems = [] self.ShopSafeboxItemsTable.ClearElement() if ENABLE_CHEQUE_SYSTEM: def ShopSafebox_SetValutes(self, yang, cheque): self.ShopSafeboxValuteAmount = (yang, cheque) self.ShopSafeboxValuteText.SetText(localeinfo.NumberToMoneyString(yang)) self.ShopSafeboxValuteTextCheque.SetText(localeinfo.NumberToChequeString(cheque)) else: def ShopSafebox_SetValutes(self, yang): self.ShopSafeboxValuteAmount = yang self.ShopSafeboxValuteText.SetText(localeinfo.NumberToMoneyString(yang)) def ShopSafebox_AllocItem(self): self.ShopSafeboxItems.append({}) def ShopSafebox_SetValue(self, key , *args): elm = self.ShopSafeboxItems[-1] if key in ("id", "vnum", "count", 'trans', 'cheque', 'locked_attr'): elm[key] = args[0] elif key == "socket": if not key in elm: elm[key] = [0 for x in xrange(player.METIN_SOCKET_MAX_NUM)] elm[key][args[0]] = args[1] elif key in ("attr_type", "attr_value"): if not 'attr' in elm: elm['attr'] = {} if not args[0] in elm['attr']: elm['attr'][args[0]] = {} elm['attr'][args[0]][key.replace('attr_','')] = args[1] def ShopSafebox_RefreshEnd(self): for item in self.ShopSafeboxItems: slot = Slot() slot.SetIndex(item["id"]) slot.SetInfo(item) slot.SetOnMouseLeftButtonUpEvent(self.__OnLeftClickShopSafeboxItem) slot.Show() self.ShopSafeboxItemsTable.AddElement(slot) if not self.pageBoards["shop_safebox"].IsShow(): self.pageCategory = "shop_safebox" for page in self.pageBoards.values(): page.Hide() self.pageBoards["shop_safebox"].Show() self.DisableRefreshSymbol() def OfferList_Clear(self): self.MyOffersList = [] def OfferList_AddOffer(self , shopname, offer_id, buyer_id, owner_id, item_id, yang, is_notified, is_accept): self.MyOffersList.append({}) elm = self.MyOffersList[-1] if '@' in shopname: shopname = shopname[shopname.find('@') + 1:] elm["shop_name"] = shopname elm["offer_id"] = offer_id elm["buyer_id"] = buyer_id elm["owner_id"] = owner_id elm["item_id"] = item_id elm["price"] = yang elm["is_notified"] = is_notified elm["is_accept"] = is_accept def OfferList_ItemSetValue(self, key , *args): offer = self.MyOffersList[-1] if not offer.has_key('item'): offer['item']={} elm = offer['item'] if key in ("id", "vnum", "count", "owner", "price", 'trans', 'locked_attr'): elm[key] = args[0] elif key == "socket": if not key in elm: elm[key] = [0 for x in xrange(player.METIN_SOCKET_MAX_NUM)] elm[key][args[0]] = args[1] elif key in ("attr_type", "attr_value"): if not 'attr' in elm: elm['attr'] = {} if not args[0] in elm['attr']: elm['attr'][args[0]] = {} elm['attr'][args[0]][key.replace('attr_','')] = args[1] def OfferList_End(self): self.RefreshMyOffersPage() self.DisableRefreshSymbol() def AuctionList_Clear(self): self.AuctionListInfo = [] self.AuctionListTable.ClearElement() def AuctionList_Alloc(self): self.AuctionListInfo.append({"item":{},}) def AuctionList_SetInto(self, ownerid, owner_name, duration, init_yang, best_yang, offer_count): elm = self.AuctionListInfo[-1] info = { "owner_id" : ownerid, "owner_name" : owner_name, "duration" : duration, "init_yang" : init_yang, "best_yang" : best_yang, "offer_count" : offer_count, } for k,v in info.items(): elm[k] = v def AuctionList_SetItemInfo(self, vnum, count, *args): elm = self.AuctionListInfo[-1]['item'] elm['count'] = count elm['vnum'] = vnum try: if ENABLE_CHANGELOOK_SYSTEM and len(args) !=0 : elm['trans'] = args[0] except: pass if app.ATTR_LOCK: def AuctionList_SetItemLockedAttr(self, attr): elm = self.AuctionListInfo[-1]['item'] elm['locked_attr'] = attr def AuctionList_SetItemSocket(self, index, value): elm = self.AuctionListInfo[-1]['item'] if not 'socket' in elm: elm['socket'] = [0 for x in xrange(player.METIN_SOCKET_MAX_NUM)] elm['socket'][index] = value def AuctionList_SetItemAttribute(self, key, index, value): elm = self.AuctionListInfo[-1]['item'] if not 'attr' in elm: elm['attr'] = [{'type' :0, 'value': 0,} for x in xrange(player.ATTRIBUTE_SLOT_MAX_NUM)] elm['attr'][index][key] = value def AuctionList_End(self): self.RefreshAuctionListPage() self.DisableRefreshSymbol() def AuctionList_End_Owner(self): self.RefreshAuctionListPage() self.CreateAuctionWindowPos =-1 self.CreateAuctionSlotPos=-1 self.CreateAuctionDaysInput.SetText("0") self.CreateAuctionStartingPriceInput.SetText("") self.__MakeCreateAuctionSlot() self.MyAuction_NoAuction() def MyAuction_Clear(self): self.MyAuctionInfo = {'item':{},} def MyAuction_SetInto(self, owner_id, owner_name, duration, init_yang): info = { "owner_id" : owner_id, "owner_name" : owner_name, "duration" : duration, "init_yang" : init_yang, } for k ,v in info.items(): self.MyAuctionInfo[k] = v def MyAuction_SetItemInfo(self, vnum, count, *args): elm = self.MyAuctionInfo['item'] elm['vnum'] = vnum elm['count'] = count try: if ENABLE_CHANGELOOK_SYSTEM and len(args)>0: elm['trans'] = args[0] except: pass if app.ATTR_LOCK: def MyAuction_SetItemLockedAttr(self, attr): elm = self.MyAuctionInfo['item'] elm['locked_attr'] = attr def MyAuction_SetItemSocket(self, index , value): elm = self.MyAuctionInfo['item'] if not 'socket' in elm: elm['socket'] = [0 for x in xrange(player.METIN_SOCKET_MAX_NUM)] elm['socket'][index] = value def MyAuction_SetItemAttribute(self, key , index , value): elm = self.MyAuctionInfo['item'] if not 'attr' in elm: elm['attr'] = [{'type' :0, 'value': 0,} for x in xrange(player.ATTRIBUTE_SLOT_MAX_NUM)] elm['attr'][index][key] = value def MyAuction_AddOffer(self, buyer_id, buyer_name, owner_id, price_yang): if not 'offers' in self.MyAuctionInfo: self.MyAuctionInfo['offers'] = [] new = {} new['buyer_name'] = buyer_name new['price_yang'] = price_yang self.MyAuctionInfo['offers'].append(new) def MyAuction_End(self): self.RefreshMyAuctionPage() self.DisableRefreshSymbol() def OpenAuction_Clear(self): self.OpenAuctionInfo = {'item':{},} def OpenAuction_SetInto(self, owner_id, owner_name, duration, init_yang): info = { "owner_id" : owner_id, "owner_name" : owner_name, "duration" : duration, "init_yang" : init_yang, } for k ,v in info.items(): self.OpenAuctionInfo[k] = v if app.ATTR_LOCK: def OpenAuction_SetItemLockedAttr(self, attr): elm = self.OpenAuctionInfo['item'] elm['locked_attr'] = attr def OpenAuction_SetItemInfo(self, vnum, count, *args): elm = self.OpenAuctionInfo['item'] elm['vnum'] = vnum elm['count'] = count try: if ENABLE_CHANGELOOK_SYSTEM and len(args!=0): elm['trans'] = args[0] except: pass def OpenAuction_SetItemSocket(self, index , value): elm = self.OpenAuctionInfo['item'] if not 'socket' in elm: elm['socket'] = [0 for x in xrange(player.METIN_SOCKET_MAX_NUM)] elm['socket'][index] = value def OpenAuction_SetItemAttribute(self, key , index , value): elm = self.OpenAuctionInfo['item'] if not 'attr' in elm: elm['attr'] = [{'type' :0, 'value': 0,} for x in xrange(player.ATTRIBUTE_SLOT_MAX_NUM)] elm['attr'][index][key] = value def OpenAuction_AddOffer(self, buyer_id, buyer_name, owner_id, price_yang): if not 'offers' in self.OpenAuctionInfo: self.OpenAuctionInfo['offers'] = [] new = {} new['buyer_name'] = buyer_name new['price_yang'] = price_yang self.OpenAuctionInfo['offers'].append(new) def OpenAuction_End(self): self.RefreshOpenAuctionPage() self.DisableRefreshSymbol() def MyAuction_NoAuction(self): self.pageCategory = "create_auction" for page in self.pageBoards.values(): page.Hide() self.pageBoards['create_auction'].Show() self.DisableRefreshSymbol() def OpenInsertPriceDialog(self, win, slot): self.AddItemSlotIndex = (win,slot) self.CommonInputPriceDlg.Open() def __OnAcceptMyShopAcceptOffer(self): offlineshop.SendOfferAccept(self.MyShopAcceptOfferID) self.CommonQuestionDlg.Hide() self.MyShopAcceptOfferID = -1 def __OnCancelMyShopAcceptOffer(self): self.CommonQuestionDlg.Hide() self.MyShopAcceptOfferID = -1 def __OnAcceptMyShopCancelOffer(self): offlineshop.SendOfferCancel(self.MyShopCancelOfferID, self.ShopOpenInfo['owner_id']) self.CommonQuestionDlg.Hide() self.MyShopCancelOfferID = -1 def __OnCancelMyShopCancelOffer(self): self.CommonQuestionDlg.Hide() self.MyShopCancelOfferID = -1 def __OnCancelCancelOfferQuestion(self): self.CommonQuestionDlg.Hide() self.MyOffersCancelOfferInfo = [] def __OnAcceptCancelOfferQuestion(self): info = self.MyOffersCancelOfferInfo offlineshop.SendOfferCancel(info[0], info[1]) self.CommonQuestionDlg.Hide() self.MyOffersCancelOfferInfo = [] def __OnAcceptInputPrice(self): yang = self.CommonInputPriceDlg.GetText() if not yang.isdigit(): return yang = int(yang) if not ENABLE_CHEQUE_SYSTEM: if yang == 0: return if ENABLE_CHEQUE_SYSTEM: cheque = self.CommonInputPriceDlg.GetChequeText() if cheque.isdigit(): cheque = int(cheque) else: cheque = 0 if yang == 0 and cheque == 0: return if self.pageCategory == "create_shop" and self.AddItemSlotIndex != -1: slot = Slot() slot.SetIndex(self.AddItemSlotIndex) if ENABLE_CHEQUE_SYSTEM: slot.SetInfo(MakeSlotInfo(self.AddItemSlotIndex[0] , self.AddItemSlotIndex[1], yang, cheque)) else: slot.SetInfo(MakeSlotInfo(self.AddItemSlotIndex[0] , self.AddItemSlotIndex[1], yang)) slot.SetOnMouseLeftButtonUpEvent(self.__OnLeftClickInsertedItem) slot.Show() self.CreateShopItemsTable.AddElement(slot) self.CreateShopItemsInfos[slot.GetIndex()] = slot.GetInfo() self.CommonInputPriceDlg.Hide() # if self.HowToInsertItemText.IsShow(): # self.HowToInsertItemText.Hide() self.AddItemSlotIndex = -1 elif self.pageCategory == "create_shop" and self.EditPriceSlot != None: slot = self.EditPriceSlot index = slot.GetIndex() info = slot.GetInfo() info["price"] = yang if ENABLE_CHEQUE_SYSTEM: info['cheque'] = cheque self.CreateShopItemsInfos[slot.GetIndex()] = info self.EditPriceSlot = None self.CommonInputPriceDlg.Hide() elif self.pageCategory == "my_shop" and self.AddItemSlotIndex != -1: if ENABLE_CHEQUE_SYSTEM: offlineshop.SendAddItem(self.AddItemSlotIndex[0], self.AddItemSlotIndex[1], yang, cheque) else: offlineshop.SendAddItem(self.AddItemSlotIndex[0], self.AddItemSlotIndex[1], yang) self.AddItemSlotIndex = -1 self.CommonInputPriceDlg.Hide() elif self.pageCategory == "my_shop" and self.EditPriceSlot != None: slot = self.EditPriceSlot index = slot.GetIndex() if ENABLE_CHEQUE_SYSTEM: offlineshop.SendEditItem(index, yang, cheque) else: offlineshop.SendEditItem(index, yang) self.CommonInputPriceDlg.Hide() self.EditPriceSlot = None def __OnCancelInputPrice(self): self.CommonInputPriceDlg.Hide() self.AddItemSlotIndex = -1 self.EditPriceSlot = None def __OnAcceptOpenShopBuyItemQuestion(self): self.CommonQuestionDlg.Hide() offlineshop.SendBuyItem(self.ShopOpenInfo["owner_id"], self.OpenShopBuyItemID, self.BuyPriceSeenTotal) import chat chat.AppendChat(1, "%s %s %s" % (self.ShopOpenInfo["owner_id"], self.OpenShopBuyItemID, str(self.BuyPriceSeenTotal))) self.OpenShopBuyItemID = -1 def __OnCancelOpenShopBuyItemQuestion(self): self.CommonQuestionDlg.Hide() self.OpenShopBuyItemID = -1 def __OnAcceptSearchFilterBuyItemQuestion(self): id,owner = self.SearchFilterResultClickedInfo offlineshop.SendBuyItemFromSearch(owner, id, self.BuyPriceSeenTotal) self.CommonQuestionDlg.Hide() self.SearchFilterResultClickedInfo = [] def __OnCancelSearchFilterBuyItemQuestion(self): self.CommonQuestionDlg.Hide() self.SearchFilterResultClickedInfo = [] def __OnAcceptChangeShopNameDlg(self): newname = self.MyShopEditNameDlg.GetText() self.MyShopEditNameDlg.Hide() offlineshop.SendChangeName(newname) def __OnCancelChangeShopNameDlg(self): self.MyShopEditNameDlg.Hide() def __OnAcceptMyPatternInputName(self): name = self.SearchPatternsInputNameDlg.GetText() self.SearchPatternsInputNameDlg.Hide() if name: setting = self.GetSearchFilterSettings() setting = (name,) + setting offlineshop.AppendNewFilterPattern(*setting) self.__PopupMessage(localeinfo.OFFLINESHOP_PATTERN_SAVED_SUCCESS) def __OnCancelMyPatternInputName(self): self.SearchPatternsInputNameDlg.Hide() def __OnAcceptShopSafeboxGetItemQuestion(self): self.CommonQuestionDlg.Hide() offlineshop.SendSafeboxGetItem(self.ShopSafeboxGetItemIndex) self.ShopSafeboxGetItemIndex = -1 def __OnCancelShopSafeboxGetItemQuestion(self): self.CommonQuestionDlg.Hide() self.ShopSafeboxGetItemIndex = -1 if ENABLE_CHEQUE_SYSTEM: def __OnAcceptShopSafeboxGetValuteInput(self , yang, cheque): offlineshop.SendSafeboxGetValutes(yang, cheque) else: def __OnAcceptShopSafeboxGetValuteInput(self , yang): offlineshop.SendSafeboxGetValutes(yang) if ENABLE_CHEQUE_SYSTEM: def __OnAcceptMakeOffer(self, yang, cheque): offlineshop.SendOfferCreate(self.MakeOfferOwnerID, self.MakeOfferItemID, yang, cheque) self.MakeOfferOwnerID = -1 self.MakeOfferItemID = -1 else: def __OnAcceptMakeOffer(self, yang): offlineshop.SendOfferCreate(self.MakeOfferOwnerID, self.MakeOfferItemID, yang) self.MakeOfferOwnerID = -1 self.MakeOfferItemID = -1 def __OnClickCreateShopButton(self): shopname = self.CreateShopNameEdit.GetText() if not shopname: self.__PopupMessage(localeinfo.OFFLINESHOP_CREATE_SHOP_NO_NAME_INSERTED) return days = int(self.CreateShopDaysCountText.GetText()) hours = int(self.CreateShopHoursCountText.GetText()) totaltime = days * 24 * 60 totaltime += hours * 60 if totaltime > offlineshop.OFFLINESHOP_MAX_MINUTES or totaltime <= 0: self.__PopupMessage(localeinfo.OFFLINESHOP_CREATE_SHOP_INVALID_DURATION) return elements = self.CreateShopItemsTable.GetElementDict() if not elements: self.__PopupMessage(localeinfo.OFFLINESHOP_CREATE_SHOP_NO_ITEMS_INSERTED) return itemLst = [] for dct in elements.values(): for item in dct.values(): info = item.GetInfo() if ENABLE_CHEQUE_SYSTEM: tupleinfo = (info["window"], info["slot"] , info["price"] , info.get('cheque', 0)) else: tupleinfo = (info["window"], info["slot"] , info["price"] ) itemLst.append(tupleinfo) itemTuple = tuple(itemLst) if app.KASMIR_PAKET_SYSTEM: offlineshop.SendShopCreate(shopname, totaltime, self.KasmirNpc, itemTuple) else: offlineshop.SendShopCreate(shopname, totaltime, itemTuple) self.EnableRefreshSymbol() if app.KASMIR_PAKET_SYSTEM: def OpeningFailded(self): self.DisableRefreshSymbol() if self.pageBoards["create_shop"].IsShow(): self.KasmirNpc = 30000 #renderTarget.SelectModel(2, self.KasmirNpc) def __OnLeftClickInsertedItem(self, slot): if mousemodule.mouseController.isAttached(): if self.pageCategory == "create_shop": self.__OnClickCreateShopEmptySlot() elif self.pageCategory == "my_shop": self.__OnClickMyShopEmptySlot() return if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): self.__OnRemoveShopItem(slot) else: self.EditPriceSlot = slot self.CommonInputPriceDlg.Open() def __OnLeftClickShopItem(self, slot): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): itemid = slot.GetIndex() ownerid = self.ShopOpenInfo["owner_id"] self.__OnMakeShopItemOffer(itemid, ownerid) else: self.OpenShopBuyItemID = slot.GetIndex() info = slot.GetInfo() self.BuyPriceSeenTotal = info['price'] if ENABLE_CHEQUE_SYSTEM: self.BuyPriceSeenTotal += info.get('cheque', 0) * YANG_PER_CHEQUE item.SelectItem(info["vnum"]) name = item.GetItemName() count = info["count"] yang = info["price"] if ENABLE_CHEQUE_SYSTEM: cheque = info["cheque"] if count > 1: if ENABLE_CHEQUE_SYSTEM: text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION_COUNT2 % (name, count, yang, cheque) else: text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION_COUNT % (name, count, yang) else: if ENABLE_CHEQUE_SYSTEM: text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION2 % (name, yang, cheque) else: text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION % (name, yang) width = 6 * len(text) accept_text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION_ACCEPT cancel_text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION_CANCEL accept_event= self.__OnAcceptOpenShopBuyItemQuestion cancel_event= self.__OnCancelOpenShopBuyItemQuestion self.__OpenQuestionDialog(width, accept_text, cancel_text, accept_event, cancel_event, text) def __OnLeftClickSearchFilterShopResultItem(self, slot): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_LCONTROL): itemid,ownerid = slot.GetIndex() self.__OnMakeShopItemOffer(itemid, ownerid) else: self.SearchFilterResultClickedInfo = slot.GetIndex() info = slot.GetInfo() self.BuyPriceSeenTotal = info['price'] if ENABLE_CHEQUE_SYSTEM: self.BuyPriceSeenTotal += info.get('cheque', 0) * YANG_PER_CHEQUE item.SelectItem(info["vnum"]) name = item.GetItemName() count = info["count"] yang = info["price"] if ENABLE_CHEQUE_SYSTEM: cheque = info["cheque"] if count > 1: if ENABLE_CHEQUE_SYSTEM: text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION_COUNT2 % (name, count, yang, cheque) else: text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION_COUNT % (name, count, yang) else: if ENABLE_CHEQUE_SYSTEM: text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION2 % (name, yang, cheque) else: text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION % (name, yang) width = 6 * len(text) accept_text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION_ACCEPT cancel_text = localeinfo.OFFLINESHOP_BUY_ITEM_QUESTION_CANCEL accept_event = self.__OnAcceptSearchFilterBuyItemQuestion cancel_event = self.__OnCancelSearchFilterBuyItemQuestion self.__OpenQuestionDialog(width, accept_text, cancel_text, accept_event, cancel_event, text) def __OnClickCreateShopEmptySlot(self, *args): if not mousemodule.mouseController.isAttached(): return type = mousemodule.mouseController.GetAttachedType() slot = mousemodule.mouseController.GetAttachedSlotNumber() #tofix slot type to window type type = player.SlotTypeToInvenType(type) mousemodule.mouseController.DeattachObject() self.ShopBuilding_AddItem(type,slot) def __OnClickMyShopEmptySlot(self, *args): # todebug print("my shop shop empty slot") if not mousemodule.mouseController.isAttached(): return type = mousemodule.mouseController.GetAttachedType() slot = mousemodule.mouseController.GetAttachedSlotNumber() #tofix slot type to window type type = player.SlotTypeToInvenType(type) mousemodule.mouseController.DeattachObject() self.ShopBuilding_AddItem(type,slot) def __OnClickShopListOpenShop(self, id): offlineshop.SendOpenShop(id) def __OnClickOpenAuctionMakeOffer(self, slot): if ENABLE_CHEQUE_SYSTEM: self.__OnPickValute(localeinfo.OFFLINESHOP_AUCTION_MAKE_OFFER, self.__OnClickAcceptOpenAuctionPickValute, player.GetElk(), player.GetCheque()) else: self.__OnPickValute(localeinfo.OFFLINESHOP_AUCTION_MAKE_OFFER, self.__OnClickAcceptOpenAuctionPickValute, player.GetElk()) if ENABLE_CHEQUE_SYSTEM: def __OnClickAcceptOpenAuctionPickValute(self, yang, cheque): if not self.OpenAuctionInfo.has_key('min_raise'): return if (yang + (cheque * YANG_PER_CHEQUE)) < self.OpenAuctionInfo['min_raise']: self.__PopupMessage(localeinfo.OFFLINESHOP_AUCTION_MIN_RAISE%NumberToString(self.OpenAuctionInfo['min_raise']) ) return offlineshop.SendAuctionAddOffer(self.OpenAuctionInfo['owner_id'] , yang, cheque) else: def __OnClickAcceptOpenAuctionPickValute(self, yang): if not self.OpenAuctionInfo.has_key('min_raise'): return if yang < self.OpenAuctionInfo['min_raise']: self.__PopupMessage(localeinfo.OFFLINESHOP_AUCTION_MIN_RAISE%NumberToString(self.OpenAuctionInfo['min_raise']) ) return offlineshop.SendAuctionAddOffer(self.OpenAuctionInfo['owner_id'] , yang) def __OnClickShopSafeboxWithdrawYang(self): maxval = self.ShopSafeboxValuteAmount if ENABLE_CHEQUE_SYSTEM: self.__OnPickValute(localeinfo.OFFLINESHOP_SAFEBOX_GET_VALUTE_TITLE, self.__OnAcceptShopSafeboxGetValuteInput, maxval[0], maxval[1]) else: self.__OnPickValute(localeinfo.OFFLINESHOP_SAFEBOX_GET_VALUTE_TITLE, self.__OnAcceptShopSafeboxGetValuteInput, maxval) def __OnClickMyShopOfferAcceptButton(self, offer): self.MyShopAcceptOfferID = offer.GetInfo()['id'] question = localeinfo.OFFLINESHOP_ACCEPT_OFFER_QUESTION accepttext = localeinfo.OFFLINESHOP_ACCEPT_OFFER_QUESTION_ACCEPT canceltext = localeinfo.OFFLINESHOP_ACCEPT_OFFER_QUESTION_CANCEL self.__OpenQuestionDialog(len(question)*6 , accepttext, canceltext, self.__OnAcceptMyShopAcceptOffer, self.__OnCancelMyShopAcceptOffer, question) def __OnClickMyShopOfferCancelButton(self, offer): self.MyShopCancelOfferID = offer.GetInfo()['id'] question = localeinfo.OFFLINESHOP_CANCEL_OFFER_QUESTION accepttext = localeinfo.OFFLINESHOP_CANCEL_OFFER_QUESTION_ACCEPT canceltext = localeinfo.OFFLINESHOP_CANCEL_OFFER_QUESTION_CANCEL self.__OpenQuestionDialog(len(question) * 6, accepttext, canceltext, self.__OnAcceptMyShopCancelOffer, self.__OnCancelMyShopCancelOffer, question) def __OnClickOpenAuctionButton(self, idx): offlineshop.SendAuctionOpenAuction(idx) self.EnableRefreshSymbol() def __OnLeftClickShopSafeboxItem(self, slot): id = slot.GetIndex() self.ShopSafeboxGetItemIndex = id if ENABLE_ITEM_WITHDRAW_QUESTION_SHOP_SAFEBOX: info = slot.GetInfo() vnum = info["vnum"] count = info["count"] item.SelectItem(vnum) name = item.GetItemName() if count > 1: text = localeinfo.OFFLINESHOP_SHOP_SAFEBOX_QUESTION_GET_ITEM_COUNT%(name,count) else: text = localeinfo.OFFLINESHOP_SHOP_SAFEBOX_QUESTION_GET_ITEM%name width = len(text)*6 self.__OpenQuestionDialog(width, localeinfo.OFFLINESHOP_SHOP_SAFEBOX_ACCEPT, localeinfo.OFFLINESHOP_SAFEBOX_CANCEL, self.__OnAcceptShopSafeboxGetItemQuestion, self.__OnCancelShopSafeboxGetItemQuestion, text) else: self.__OnAcceptShopSafeboxGetItemQuestion() def __OnRemoveShopItem(self, slot): if self.pageCategory == "create_shop": self.__OnRemoveShopItemCreateShopPage(slot) elif self.pageCategory == "my_shop": self.__OnRemoveShopItemMyShop(slot) def __OnRemoveShopItemCreateShopPage(self, slot): slot.Hide() del self.CreateShopItemsInfos[slot.GetIndex()] self.CreateShopItemsTable.ClearElement() for k, v in self.CreateShopItemsInfos.items(): newslot = Slot() newslot.SetIndex(k) newslot.SetInfo(v) newslot.SetOnMouseLeftButtonUpEvent(self.__OnLeftClickInsertedItem) newslot.Show() self.CreateShopItemsTable.AddElement(newslot) def __OnRemoveShopItemMyShop(self, slot): offlineshop.SendRemoveItem(slot.GetIndex()) def __OnMakeShopItemOffer(self , itemid , ownerid): self.MakeOfferItemID = itemid self.MakeOfferOwnerID= ownerid title = localeinfo.OFFLINESHOP_MAKE_OFFER_TITLE if ENABLE_CHEQUE_SYSTEM: self.__OnPickValute(title, self.__OnAcceptMakeOffer, player.GetElk(), player.GetCheque()) else: self.__OnPickValute(title, self.__OnAcceptMakeOffer, player.GetElk()) def __OnSetCreateAuctionSlot(self, win,slot): vnum = player.GetItemIndex(win,slot) if vnum ==0: return item.SelectItem(vnum) if item.IsAntiFlag(item.ITEM_ANTIFLAG_MYSHOP) or item.IsAntiFlag(item.ITEM_ANTIFLAG_GIVE): return self.CreateAuctionWindowPos = win self.CreateAuctionSlotPos = slot count = player.GetItemCount(win,slot) attrs = [{"type" : player.GetItemAttribute(win, slot, x)[0], "value" : player.GetItemAttribute(win, slot, x)[1]} for x in xrange(player.ATTRIBUTE_SLOT_MAX_NUM)] sockets = [player.GetItemMetinSocket(win,slot,x) for x in xrange(player.METIN_SOCKET_MAX_NUM)] if app.ATTR_LOCK: locked_attr = player.GetItemAttrLocked(win,slot) try: if ENABLE_CHANGELOOK_SYSTEM: trans = player.GetItemTransmutation(win, slot) except: pass info = { "vnum" : vnum, "count" : count, 'attr' : attrs, 'socket' : sockets, } if app.ATTR_LOCK: info.update({ 'locked_attr' : locked_attr,}) try: if ENABLE_CHANGELOOK_SYSTEM: info.update({ 'trans' : trans, }) except: pass self.CreateAuctionSlot.SetInfo(info) self.CreateAuctionSlot.SetOnMouseLeftButtonUpEvent(self.OnClickAuctionSlot) def IsBuildingShop(self): return self.IsShow() and (self.pageCategory == "create_shop" or self.pageCategory=="my_shop") def IsForSaleSlot(self,win,slot): idx = (win,slot) if not self.pageCategory=="create_shop" or not self.IsShow(): return False if not self.CreateShopItemsTable: return False elementDict = self.CreateShopItemsTable.GetElementDict() for dct in elementDict.values(): for value in dct.values(): if value.GetIndex() == idx: return True return False def IsBuildingAuction(self): if not self.IsShow(): return False if self.pageCategory != "create_auction": return False return True def IsForAuctionSlot(self, win, slot): if not self.IsShow(): return False if self.pageCategory != "create_auction": return False return self.CreateAuctionWindowPos == win and self.CreateAuctionSlotPos == slot def __SetTooltip(self,info,canRemove=False): infocolor = COLOR_TEXT_SHORTCUT is_building = self.IsBuildingShop() self.itemTooltip.ClearToolTip() sockets = [info["socket"][num] for num in xrange(player.METIN_SOCKET_MAX_NUM)] attrs = [(info["attr"][num]['type'], info["attr"][num]['value']) for num in xrange(player.ATTRIBUTE_SLOT_MAX_NUM)] if app.ATTR_LOCK: self.itemTooltip.AddItemData(info["vnum"], sockets, attrs, lockedattr = info.get('locked_attr', -1)) else: self.itemTooltip.AddItemData(info["vnum"], sockets, attrs) try: if ENABLE_CHANGELOOK_SYSTEM: trans = info.get('trans',0) if trans !=0 and trans != -1: self.itemTooltip.AppendTransmutation(0,0, trans) except: pass if self.pageCategory in ("open_shop", "my_shop", "search_filter", "create_shop"): self.itemTooltip.AppendPrice(info["price"]) if ENABLE_CHEQUE_SYSTEM: cheque = info.get('cheque',0) if cheque!=0: self.itemTooltip.AppendSellingChequePrice(cheque) if is_building and not info.get('sold', False): self.itemTooltip.AppendSpace(10) self.itemTooltip.AppendTextLine(localeinfo.OFFLINESHOP_BUILDING_LEFT_CLICK_EDIT_PRICE, infocolor) self.itemTooltip.AppendTextLine(localeinfo.OFFLINESHOP_BUILDING_LEFT_CLICK_CTRL_REMOVE_ITEM, infocolor) elif self.pageCategory == "open_shop" or self.pageCategory == "search_filter": self.itemTooltip.AppendSpace(10) self.itemTooltip.AppendTextLine(localeinfo.OFFLINESHOP_OPEN_SHOP_LEFT_CLICK_BUY_ITEM, infocolor) self.itemTooltip.AppendTextLine(localeinfo.OFFLINESHOP_OPEN_SHOP_LEFT_CLICK_MAKE_OFFER, infocolor) elif self.pageCategory == "shop_safebox": self.itemTooltip.AppendSpace(10) self.itemTooltip.AppendTextLine(localeinfo.OFFLINESHOP_SAFEBOX_TOOLTIP_GETITEM, infocolor) elif canRemove: self.itemTooltip.AppendTextLine(localeinfo.OFFLINESHOP_BUILDING_LEFT_CLICK_CTRL_REMOVE_ITEM, infocolor) def __SetTooltipMyOffer(self, offer): slot = offer.slot self.__SetTooltip(slot.GetInfo()) index = offer.info['offer_id'] for elm in self.MyOffersList: if elm['offer_id'] == index: self.itemTooltip.AppendSpace(10) self.itemTooltip.AppendPrice(elm['item']['price']) self.itemTooltip.AppendTextLine(localeinfo.OFFLINESHOP_MY_OFFER_OFFER_TEXT%localeinfo.NumberToMoneyString(elm['price'])) break def __SetTooltipSearch(self, element): appendLine = lambda arg : ( uitooltip.ToolTip.AutoAppendTextLine(self.itemTooltip, arg), self.itemTooltip.AlignHorizonalCenter()) self.itemTooltip.ClearToolTip() info = element.info name = info.get('filter_name', "") wearflag = info.get('filter_wearflag', 0) price_min = info.get('price', {}).get('start', 0) price_max = info.get('price', {}).get('end', 0) level_min = info.get('level', {}).get('start',0) level_max = info.get('level', {}).get('end',0) type = info.get('filter_type', 0) subtype = info.get('filter_subtype', 255) attrs = info.get('attr') rarity = info.get('rarity', -1) #name if name: appendLine(localeinfo.OFFLINESHOP_TOOLTIP_NAME_INFO +" "+ name) #type if type: type_phrase = localeinfo.OFFLINESHOP_TOOLTIP_TYPE_INFO+ " " type_phrase += self.ITEM_TYPES[type]['name'] if subtype != SUBTYPE_NOSET and self.ITEM_TYPES[type].has_key('subtypes'): type_phrase += ", "+self.ITEM_TYPES[type]['subtypes'][subtype] appendLine(type_phrase) #price if price_min or price_max: price_phrase = localeinfo.OFFLINESHOP_TOOLTIP_PRICE_INFO + " " if price_min and price_max: price_phrase += NumberToString(price_min) + " - "+ localeinfo.NumberToMoneyString(price_max) elif price_min: price_phrase += " > "+ localeinfo.NumberToMoneyString(price_min) elif price_max: price_phrase += " < "+ localeinfo.NumberToMoneyString(price_max) appendLine(price_phrase) #level if level_min or level_max: level_phrase = localeinfo.OFFLINESHOP_TOOLTIP_LEVEL_INFO + " " if level_min and level_max: level_phrase += "%d - %d"%(level_min, level_max) elif level_min: level_phrase += " >= %d"%level_min elif level_max: level_phrase += " <= %d"%level_max appendLine(level_phrase) #wear raceFlagDct = { item.ITEM_ANTIFLAG_WARRIOR : localeinfo.OFFLINESHOP_WEAR_WARRIOR, item.ITEM_ANTIFLAG_ASSASSIN : localeinfo.OFFLINESHOP_WEAR_ASSASSIN, item.ITEM_ANTIFLAG_SURA : localeinfo.OFFLINESHOP_WEAR_SURA, item.ITEM_ANTIFLAG_SHAMAN : localeinfo.OFFLINESHOP_WEAR_SHAMAN, } if ENABLE_WOLFMAN_CHARACTER: raceFlagDct.update({ item.ITEM_ANTIFLAG_WOLFMAN: localeinfo.OFFLINESHOP_WEAR_WOLFMAN, }) wearphrase = "" for k ,v in raceFlagDct.items(): if not wearflag & k: if wearphrase: wearphrase += ", " wearphrase += v if wearphrase: wearphrase = localeinfo.OFFLINESHOP_TOOLTIP_WEAR_INFO + wearphrase appendLine(wearphrase) if rarity != -1 and rarity in self.RARITY_GRADES: appendLine(localeinfo.OFFLINESHOP_TOOLTIP_RARITY_INFO + self.RARITY_GRADES[rarity] ) #attribute attribute_phrase = "" for type in attrs['type']: if type != 0: if attribute_phrase: attribute_phrase += ', ' attribute_phrase += self.ATTRIBUTES[type] if attribute_phrase: attribute_phrase = localeinfo.OFFLINESHOP_TOOLTIP_ATTR_INFO +' '+attribute_phrase appendLine(attribute_phrase) self.itemTooltip.ShowToolTip() def __SetTooltipAuctionList(self, element): itemInfo = element.GetInfo()['item'] self.__SetTooltip(itemInfo) def OnUpdate(self): if self.pageCategory in self.updateEvents: self.updateEvents[self.pageCategory]() def __OnUpdateMyShopPage(self): self.__RefreshingTooltip(self.MyShopItemsTable) def __OnUpdateCreateShopPage(self): self.__RefreshingTooltip(self.CreateShopItemsTable) def __OnUpdateOpenShopPage(self): self.__RefreshingTooltip(self.OpenShopItemsTable) def __OnUpdateSearchFilterPage(self): self.__RefreshingTooltip(self.SearchFilterResultItemsTable) self.__UpdateGradeFilterEffect() def __OnUpdateSearchHistoryPage(self): self.__RefreshingTooltip(self.SearchHistoryTable , self.__SetTooltipSearch) def __OnUpdateMyPatternPage(self): self.__RefreshingTooltip(self.SearchPatternsTable, self.__SetTooltipSearch) def __OnUpdateShopSafeboxPage(self): self.__RefreshingTooltip(self.ShopSafeboxItemsTable) def __OnUpdateMyOffersPage(self): self.__RefreshingTooltip(self.MyOffersTable, self.__SetTooltipMyOffer) def __OnUpdateCreateAuctionPage(self): if self.CreateAuctionSlot.IsShow(): if self.itemTooltip.IsShow(): if not self.CreateAuctionSlot.IsInSlot(): self.itemTooltip.Hide() else: if self.CreateAuctionSlot.IsInSlot() and self.CreateAuctionSlot.GetInfo(): self.__SetTooltip(self.CreateAuctionSlot.GetInfo(), True) if self.CreateAuctionSlot.GetInfo(): last_check = getattr(self, "LastCreateAuctionCheck", 0) if last_check == 0 or app.GetTime() - 0.5 > last_check: self.LastCreateAuctionCheck = app.GetTime() self.__OnCheckCreateAuctionSlot() def __OnUpdateMyAuctionPage(self): if self.MyAuctionSlot.IsShow(): if self.itemTooltip.IsShow(): if not self.MyAuctionSlot.IsInSlot(): self.itemTooltip.Hide() else: if self.MyAuctionSlot.IsInSlot() and self.MyAuctionSlot.GetInfo(): self.__SetTooltip(self.MyAuctionSlot.GetInfo()) def __OnUpdateOpenAuctionPage(self): if self.OpenAuctionSlot.IsShow(): if self.itemTooltip.IsShow(): if not self.OpenAuctionSlot.IsInSlot(): self.itemTooltip.Hide() else: if self.OpenAuctionSlot.IsInSlot() and self.OpenAuctionSlot.GetInfo(): self.__SetTooltip(self.OpenAuctionSlot.GetInfo()) self.itemTooltip.AppendTextLine(localeinfo.OFFLINESHOP_TOOLTIP_LEFT_CLICK_MAKE_OFFER) def __OnUpdateAuctionListPage(self): self.__RefreshingTooltip(self.AuctionListTable, self.__SetTooltipAuctionList) def __OnCheckCreateAuctionSlot(self): slot = self.CreateAuctionSlotPos win = self.CreateAuctionWindowPos info = self.CreateAuctionSlot.GetInfo() vnum = info.get('vnum', 0) count = info.get('count', 0) slot_vnum = player.GetItemIndex(win,slot) slot_count = player.GetItemCount(win,slot) if vnum != slot_vnum or count != slot_count: self.__ResetCreateAuctionSlot() def __ResetCreateAuctionSlot(self): self.__MakeCreateAuctionSlot() self.CreateAuctionWindowPos = -1 self.CreateAuctionSlotPos = -1 def __RefreshingTooltip(self, table, event = None): if not self.itemTooltip.IsShow(): elementDict = table.GetElementDict() for dct in elementDict.values(): for value in dct.values(): if value.IsInSlot(): self.slotTooltipIndex = value.GetIndex() if event == None: self.__SetTooltip(value.GetInfo()) else: event(value) return self.itemTooltip.Hide() self.slotTooltipIndex = -1 else: elementDict = table.GetElementDict() for dct in elementDict.values(): for value in dct.values(): if value.IsInSlot(): if self.slotTooltipIndex == value.GetIndex(): return self.slotTooltipIndex = value.GetIndex() if event == None: self.__SetTooltip(value.GetInfo()) else: event(value) return self.itemTooltip.Hide() self.slotTooltipIndex = -1 def RefreshMyShopPage(self): #page self.pageCategory = "my_shop" for board in self.pageBoards.values(): board.Hide() self.pageBoards["my_shop"].Show() name = self.ShopOpenInfo["name"] # title&duration if '@' in name: name = name[name.find('@')+1:] self.MyShopShopTitle.SetText(name + " " + localeinfo.OFFLINESHOP_ITEMS_COUNT_TEXT%self.ShopOpenInfo["count"]) self.MyShopShopDuration.SetText(GetDurationString(self.ShopOpenInfo["duration"])) #items table self.MyShopItemsTable.ClearElement() for item_info in self.ShopItemForSale: slot = Slot() slot.SetInfo(item_info) slot.SetIndex(item_info["id"]) slot.SetOnMouseLeftButtonUpEvent(self.__OnLeftClickInsertedItem) slot.Show() self.MyShopItemsTable.AddElement(slot) for item_info in self.ShopItemSold: item_info["sold"] = True slot = Slot(isSold=True) slot.SetInfo(item_info) slot.SetIndex(item_info["id"]) slot.Show() self.MyShopItemsTable.AddElement(slot) #offers self.MyShopOffersTable.ClearElement() for info in self.MyShopOffers: # find item name itemname = "" for saleitem in self.ShopItemForSale: if saleitem["id"] == info["item_id"]: item.SelectItem(saleitem["vnum"]) itemname = item.GetItemName() break if not itemname: continue offer = Offer(info) offer.Show() offer.SetItemName(itemname) if not info["is_accept"]: offer.SetAcceptButtonEvent(self.__OnClickMyShopOfferAcceptButton) offer.SetDeleteButtonEvent(self.__OnClickMyShopOfferCancelButton) self.MyShopOffersTable.AddElement(offer) def RefreshShopListPage(self): self.pageCategory = "shop_list" for board in self.pageBoards.values(): board.Hide() self.pageBoards["shop_list"].Show() self.ShopListTable.ClearElement() for shop in self.ShopList: element = ShopListElement(shop) element.SetOnClickOpenShopButton(self.__OnClickShopListOpenShop) element.Show() self.ShopListTable.AddElement(element) if self.itemTooltip.IsShow(): self.itemTooltip.Hide() def RefreshOpenShopPage(self): self.pageCategory = "open_shop" for board in self.pageBoards.values(): board.Hide() self.pageBoards["open_shop"].Show() self.OpenShopItemsTable.ClearElement() for info in self.ShopItemForSale: slot = Slot() slot.SetInfo(info) slot.SetIndex(info["id"]) slot.SetOnMouseLeftButtonUpEvent(self.__OnLeftClickShopItem) slot.Show() self.OpenShopItemsTable.AddElement(slot) name = self.ShopOpenInfo["name"] duration = self.ShopOpenInfo["duration"] if '@' in name: name = name[name.find('@')+1:] self.OpenShopShopTitle.SetText(name+ " " + localeinfo.OFFLINESHOP_ITEMS_COUNT_TEXT%self.ShopOpenInfo["count"]) self.OpenShopShopDuration.SetText(GetDurationString(duration)) def RefreshSearchHistoryPage(self): self.SearchHistoryTable.ClearElement() offlineshop.RefreshFilterHistory() SortByDatetime(self.FilterHistory) for elm in self.FilterHistory: newElement = FilterHistoryElement(elm) newElement.SetButtonEvent(self.__OnClickFilterHistoryElement) newElement.Show() self.SearchHistoryTable.AddElement(newElement) def RefreshMyPatternsPage(self): self.SearchPatternsTable.ClearElement() offlineshop.RefreshFilterPatterns() lst = self.FilterPatterns.values() SortByDatetime(lst) for v in lst: pattern = FilterPatternElement(v) pattern.SetButtonEvent(self.__OnClickSearchPatternElement) pattern.Show() self.SearchPatternsTable.AddElement(pattern) def RefreshMyOffersPage(self): self.pageCategory = "my_offers" for board in self.pageBoards.values(): board.Hide() self.pageBoards["my_offers"].Show() self.MyOffersTable.ClearElement() for info in self.MyOffersList: offer = MyOffer(info) offer.Show() offer.SetCancelButtonEvent(self.__OnClickDeleteMyOfferButton) slot = offer.slot if not info['is_accept']: viewImage = MakeOfferViewImage(info['is_notified']) slot.AppendChild(viewImage) viewImage.SetPosition(5,5) viewImage.Show() #updated 25-01-2020 #topatch else: offer.DisableCancelButton() self.MyOffersTable.AddElement(offer) def RefreshAuctionListPage(self): self.pageCategory = "auction_list" for board in self.pageBoards.values(): board.Hide() self.pageBoards["auction_list"].Show() self.AuctionListTable.ClearElement() for info in self.AuctionListInfo: elm = AuctionListElement(info) elm.Show() elm.SetIndex(info['owner_id']) elm.SetOnClickOpenAuctionButton(self.__OnClickOpenAuctionButton) self.AuctionListTable.AddElement(elm) def RefreshMyAuctionPage(self): self.pageCategory = "my_auction" for board in self.pageBoards.values(): board.Hide() self.pageBoards["my_auction"].Show() self.MyAuctionOfferTable.ClearElement() if 'offers' in self.MyAuctionInfo: for info in SortOffersByPrice(self.MyAuctionInfo['offers']): elm = AuctionOffer(info) elm.Show() self.MyAuctionOfferTable.AddElement(elm) best_price = GetBestOfferPriceYang(self.MyAuctionInfo.get('offers', [])) if best_price ==0: min_raise = self.MyAuctionInfo['init_yang'] else: if best_price < 1000: min_raise = best_price + 1000 else: min_raise = long(float(best_price)*1.1) self.MyAuctionBestOffer.SetText(localeinfo.NumberToMoneyString(best_price)) self.MyAuctionDuration.SetText(GetDurationString(self.MyAuctionInfo['duration'])) self.MyAuctionMinRaise.SetText(localeinfo.NumberToMoneyString(min_raise)) self.MyAuctionOwnerName.SetText(self.MyAuctionInfo['owner_name']) if 'item' in self.MyAuctionInfo: self.__MakeMyAuctionSlot(self.MyAuctionInfo['item']) def RefreshOpenAuctionPage(self): self.pageCategory = "open_auction" for board in self.pageBoards.values(): board.Hide() self.pageBoards["open_auction"].Show() self.OpenAuctionOfferTable.ClearElement() if 'offers' in self.OpenAuctionInfo: for info in SortOffersByPrice(self.OpenAuctionInfo['offers']): elm = AuctionOffer(info) elm.Show() self.OpenAuctionOfferTable.AddElement(elm) best_price = GetBestOfferPriceYang(self.OpenAuctionInfo.get('offers' , [])) if best_price == 0: min_raise = self.OpenAuctionInfo['init_yang'] else: if best_price < 1000: min_raise = best_price + 1000 else: min_raise = long(float(best_price) * 1.1) self.OpenAuctionInfo['min_raise'] = min_raise self.OpenAuctionBestOffer.SetText(localeinfo.NumberToMoneyString(best_price)) self.OpenAuctionDuration.SetText(GetDurationString(self.OpenAuctionInfo['duration'])) self.OpenAuctionMinRaise.SetText(localeinfo.NumberToMoneyString(min_raise)) self.OpenAuctionOwnerName.SetText(self.OpenAuctionInfo['owner_name']) if 'item' in self.OpenAuctionInfo: self.__MakeOpenAuctionSlot(self.OpenAuctionInfo['item'])
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.