Guest User

uiOfflineShop.py

a guest
Sep 21st, 2020
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 37.39 KB | None | 0 0
  1. import net
  2. import player
  3. import item
  4. import snd
  5. import shop
  6. import chr
  7. import wndMgr
  8. import app
  9. import chat
  10. import grp
  11. import ui
  12. import uiCommon
  13. import uiPickMoney
  14. import interfaceModule
  15. import uiToolTip
  16. import mouseModule
  17. import localeInfo
  18. import constInfo
  19.  
  20. g_isEditingOfflineShop = False
  21. g_itemPriceDict = {}
  22. g_iRefreshDelay = 5000
  23.  
  24. def Clear():
  25. global g_itemPriceDict
  26. global g_isEditingOfflineShop
  27. g_itemPriceDict = {}
  28. g_isEditingOfflineShop = False
  29.  
  30. def IsOfflineShopItemPriceList():
  31. global g_itemPriceDict
  32. if g_itemPriceDict:
  33. return True
  34. else:
  35. return False
  36.  
  37. def IsEditingOfflineShop():
  38. global g_isEditingOfflineShop
  39. if g_isEditingOfflineShop:
  40. return True
  41. else:
  42. return False
  43.  
  44. def SetOfflineShopItemPrice(itemVNum, itemPrice):
  45. global g_itemPriceDict
  46. g_itemPriceDict[int(itemVNum)]=itemPrice
  47.  
  48. def GetOfflineShopItemPrice(itemVNum):
  49. try:
  50. global g_itemPriceDict
  51. return g_itemPriceDict[itemVNum]
  52. except KeyError:
  53. return 0
  54.  
  55. ###################################################################################################
  56. ## Offline Shop Sales
  57. class OfflineShopSalesWindow(ui.ScriptWindow):
  58. MAX_LINE_COUNT = 11
  59.  
  60. def __init__(self):
  61. ui.ScriptWindow.__init__(self)
  62. self.isLoaded = 0
  63. self.SerchItemSlotList = {}
  64. self.ItemSlotButtonList = {}
  65. self.tooltipItem = None
  66. self.__LoadWindow()
  67.  
  68. def __del__(self):
  69. ui.ScriptWindow.__del__(self)
  70. self.isLoaded = 0
  71. self.SerchItemSlotList = {}
  72. self.ItemSlotButtonList = {}
  73. self.tooltipItem = None
  74.  
  75. def __LoadWindow(self):
  76. if self.isLoaded == 1:
  77. return
  78.  
  79. self.isLoaded = 1
  80.  
  81. try:
  82. pyScrLoader = ui.PythonScriptLoader()
  83. pyScrLoader.LoadScriptFile(self, "UIScript/OfflineShopSalesWindow.py")
  84. except:
  85. import exception
  86. exception.Abort("OfflineShopSalesWindow.LoadWindow.__LoadScript")
  87.  
  88. try:
  89. self.__BindObject()
  90. except:
  91. import exception
  92. exception.Abort("OfflineShopSalesWindow.LoadWindow.__BindObject")
  93.  
  94. try:
  95. self.__BindEvent()
  96. except:
  97. import exception
  98. exception.Abort("OfflineShopSalesWindow.LoadWindow.__BindEvent")
  99.  
  100. self.__MakeResultSlot()
  101.  
  102. try:
  103. self.RefreshList()
  104. except:
  105. import exception
  106. exception.Abort("OfflineShopSalesWindow.RefreshList")
  107.  
  108. def __BindObject(self):
  109. self.board = self.GetChild("board")
  110. self.scrollbar = self.GetChild("scrollbar")
  111.  
  112. def __BindEvent(self):
  113. self.board.SetCloseEvent(self.Close)
  114.  
  115. self.scrollbar.SetUpScrollVisual("d:/ymir work/ui/game/mailbox/scroll_up_arrow_button")
  116. self.scrollbar.SetDownScrollVisual("d:/ymir work/ui/game/mailbox/scroll_down_arrow_button")
  117. self.scrollbar.Hide()
  118.  
  119. def SetItemToolTip(self, tooltipItem):
  120. self.tooltipItem = tooltipItem
  121.  
  122. def Close(self):
  123. constInfo.OFFLINE_SHOP_SALES = []
  124.  
  125. self.Hide()
  126. self.isLoaded = 0
  127.  
  128. def Destroy(self):
  129. self.Hide()
  130. self.ClearDictionary()
  131.  
  132. def OnPressEscapeKey(self):
  133. self.Close()
  134. return True
  135.  
  136. def Show(self):
  137. self.__LoadWindow()
  138. ui.ScriptWindow.Show(self)
  139. self.SetCenterPosition()
  140. self.SetTop()
  141.  
  142. def __MakeResultSlot(self):
  143. yPos = 0
  144. for i in range(0, self.MAX_LINE_COUNT):
  145. yPos = 63 + i * 25
  146.  
  147. BuyerNameImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/parameter_slot_04.sub", 20, yPos)
  148. BuyerNameImage.SetAlpha(0)
  149. BuyerNameSlot = ui.MakeTextLine(BuyerNameImage)
  150. self.Children.append(BuyerNameImage)
  151. self.Children.append(BuyerNameSlot)
  152.  
  153. ItemSlotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/parameter_slot_04.sub", 168, yPos)
  154. ItemSlotImage.SetAlpha(0)
  155. ItemNameSlot = ui.MakeTextLine(ItemSlotImage)
  156. self.Children.append(ItemSlotImage)
  157. self.Children.append(ItemNameSlot)
  158.  
  159. CountSlotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/Parameter_Slot_01.sub", 305, yPos)
  160. CountSlotImage.SetAlpha(0)
  161. CountSlot = ui.MakeTextLine(CountSlotImage)
  162. self.Children.append(CountSlotImage)
  163. self.Children.append(CountSlot)
  164.  
  165. PriceSlotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/Parameter_Slot_03.sub", 360, yPos)
  166. PriceSlotImage.SetAlpha(0)
  167. PriceSlot = ui.MakeTextLine(PriceSlotImage)
  168. self.Children.append(PriceSlotImage)
  169. self.Children.append(PriceSlot)
  170.  
  171. DateSlotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/Parameter_Slot_01.sub", 486, yPos)
  172. DateSlotImage.SetAlpha(0)
  173. DateSlot = ui.MakeTextLine(DateSlotImage)
  174. self.Children.append(DateSlotImage)
  175. self.Children.append(DateSlot)
  176.  
  177. anameslotlist = []
  178. anameslotlist.append(BuyerNameSlot)
  179. anameslotlist.append(ItemNameSlot)
  180. anameslotlist.append(CountSlot)
  181. anameslotlist.append(PriceSlot)
  182. anameslotlist.append(DateSlot)
  183.  
  184. self.SerchItemSlotList[i] = anameslotlist
  185.  
  186. itemSlotButtonImage = ui.MakeButton(self, 18, yPos, "", "d:/ymir work/ui/", "tab_01.tga", "tab_02.tga", "tab_02.tga")
  187. itemSlotButtonImage.Hide()
  188. itemSlotButtonImage.SetEvent(ui.__mem_func__(self.__SelectItem), i)
  189. self.Children.append(itemSlotButtonImage)
  190.  
  191. TempitemSlotButtonImage = []
  192. TempitemSlotButtonImage.append(itemSlotButtonImage)
  193. self.ItemSlotButtonList[i] = TempitemSlotButtonImage
  194.  
  195. def GetItemName(self, itemVNum):
  196. if itemVNum != 0:
  197. item.SelectItem(itemVNum)
  198. itemName = item.GetItemName()
  199. return itemName
  200.  
  201. def GetList(self, line):
  202. SaleList = constInfo.OFFLINE_SHOP_SALES
  203. SaleListCount = len(SaleList)
  204.  
  205. if line < SaleListCount:
  206. return (
  207. SaleList[line][0],
  208. SaleList[line][1],
  209. SaleList[line][2],
  210. SaleList[line][3],
  211. SaleList[line][4],
  212. SaleList[line][5],
  213. )
  214.  
  215. def FormatSecToDate(self, time):
  216. import datetime
  217. return (
  218. datetime.datetime.fromtimestamp(
  219. int(time)
  220. ).strftime("%d %b. %H:%M")
  221. )
  222.  
  223. def RefreshList(self):
  224. SaleList = constInfo.OFFLINE_SHOP_SALES
  225. if not SaleList:
  226. return
  227.  
  228. for line, nameSlotList in self.SerchItemSlotList.items():
  229. if line < len(SaleList):
  230. buyerName, itemVnum, count, price, date = self.GetList(line)
  231. nameSlotList[0].SetText(buyerName)
  232. nameSlotList[1].SetText(self.GetItemName(itemVnum))
  233. nameSlotList[2].SetText(str(count))
  234. nameSlotList[3].SetText(self.NumberToMoneyString(price))
  235. nameSlotList[4].SetText(date)
  236.  
  237. self.ItemSlotButtonList[line][0].Show()
  238. else:
  239. nameSlotList[0].SetText("")
  240. nameSlotList[1].SetText("")
  241. nameSlotList[2].SetText("")
  242. nameSlotList[3].SetText("")
  243. nameSlotList[4].SetText("")
  244. self.ItemSlotButtonList[line][0].Hide()
  245.  
  246. if len(SaleList) > self.MAX_LINE_COUNT:
  247. self.board.SetSize(570 + 15, 350)
  248. self.scrollbar.SetMiddleBarSize(float(self.MAX_LINE_COUNT) / float(len(SaleList)))
  249. self.scrollbar.SetScrollBarSize(300)
  250. self.scrollbar.SetScrollEvent(self.OnScroll)
  251. self.scrollbar.Show()
  252. else:
  253. self.SetSize(570, 350)
  254. self.scrollbar.Hide()
  255.  
  256. def OnScroll(self):
  257. if not self.SerchItemSlotList:
  258. return
  259.  
  260. SaleList = constInfo.OFFLINE_SHOP_SALES
  261. if not SaleList:
  262. return
  263.  
  264. dict_len = len(self.SerchItemSlotList)
  265. pos = int(self.scrollbar.GetPos() * (len(SaleList) - dict_len))
  266.  
  267. for line, nameSlotList in self.SerchItemSlotList.items():
  268. if line < len(SaleList):
  269. buyerName, itemVnum, count, price, date = self.GetList(line + pos)
  270. nameSlotList[0].SetText(buyerName)
  271. nameSlotList[1].SetText(self.GetItemName(itemVnum))
  272. nameSlotList[2].SetText(str(count))
  273. nameSlotList[3].SetText(self.NumberToMoneyString(price))
  274. nameSlotList[4].SetText(date)
  275. self.ItemSlotButtonList[line][0].Show()
  276. else:
  277. nameSlotList[0].SetText("")
  278. nameSlotList[1].SetText("")
  279. nameSlotList[2].SetText("")
  280. nameSlotList[3].SetText("")
  281. nameSlotList[4].SetText("")
  282. self.ItemSlotButtonList[line][0].Hide()
  283.  
  284. def OnRunMouseWheel(self, len):
  285. if len > 0:
  286. self.scrollbar.OnUp()
  287. else:
  288. self.scrollbar.OnDown()
  289.  
  290. def __SelectItem(self, index):
  291. # self.Close()
  292. pass
  293.  
  294. def NumberToMoneyString(self,n) :
  295. if n <= 0 :
  296. return "0"
  297.  
  298. return "%s %s" % ('.'.join([ i-3<0 and str(n)[:i] or str(n)[i-3:i] for i in range(len(str(n))%3, len(str(n))+1, 3) if i ]), "")
  299.  
  300. ###################################################################################################
  301. ## Open Offline Shop
  302. class OpenOfflineShop(ui.ScriptWindow):
  303. TOOLTIP_SPECIAL_COLOR = grp.GenerateColor(1.0, 0.7843, 0.0, 1.0)
  304. REQUIRED_ITEM = [71049, 1]
  305. TIME_DICT = {
  306. 1 : [localeInfo.OFFLINE_SHOP_OPEN_TIME_1, 2500000],
  307. 2 : [localeInfo.OFFLINE_SHOP_OPEN_TIME_2, 5000000],
  308. 3 : [localeInfo.OFFLINE_SHOP_OPEN_TIME_3, 15000000],
  309. 4 : [localeInfo.OFFLINE_SHOP_OPEN_TIME_4, 50000000],
  310. }
  311.  
  312. def __init__(self):
  313. ui.ScriptWindow.__init__(self)
  314. self.isLoaded = 0
  315.  
  316. self.required_item_slot = None
  317. self.required_item_vnum = 0
  318. self.required_item_count = 0
  319. self.tooltip_item = None
  320.  
  321. self.money_text_window = None
  322. self.money_text = 0
  323.  
  324. self.time_select_text_window = None
  325. self.time_select_button = None
  326. self.time_button_dict = {}
  327. self.time_select_list_open = False
  328. self.time_select_window_height = 0
  329. self.mouse_over_img = None
  330. self.time_select_text = None
  331. self.selected_time = 0
  332.  
  333. self.interface = None
  334. self.shopManagerDialog = None
  335. self.inputDialog = None
  336.  
  337. self.tooltip = None
  338. self.tooltip_button = None
  339. self.tooltip_list = [
  340. localeInfo.OFFLINE_SHOP_TOOLTIP_LINE1,
  341. localeInfo.OFFLINE_SHOP_TOOLTIP_LINE2,
  342. localeInfo.OFFLINE_SHOP_TOOLTIP_LINE3,
  343. ]
  344.  
  345. self.__LoadWindow()
  346.  
  347. def __del__(self):
  348. ui.ScriptWindow.__del__(self)
  349.  
  350. def Show(self):
  351. self.__LoadWindow()
  352. ui.ScriptWindow.Show(self)
  353. self.SetTop()
  354.  
  355. def Hide(self):
  356. wndMgr.Hide(self.hWnd)
  357.  
  358. def Close(self):
  359. if self.tooltip_item:
  360. self.tooltip_item.HideToolTip()
  361.  
  362. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
  363. self.Hide()
  364.  
  365. def OnPressEscapeKey(self):
  366. self.Close()
  367. return True
  368.  
  369. def __LoadScript(self, fileName):
  370. pyScrLoader = ui.PythonScriptLoader()
  371. pyScrLoader.LoadScriptFile(self, fileName)
  372.  
  373. def __LoadWindow(self):
  374. if self.isLoaded == 1:
  375. return
  376.  
  377. try:
  378. self.__LoadScript("UIScript/OpenOfflineShopDialog.py")
  379. except:
  380. import exception
  381. exception.Abort("OpenOfflineShop.LoadWindow.__LoadScript")
  382.  
  383. try:
  384. self.__BindObject()
  385. except:
  386. import exception
  387. exception.Abort("OpenOfflineShop.LoadWindow.__BindObject")
  388.  
  389. try:
  390. self.__BindEvent()
  391. except:
  392. import exception
  393. exception.Abort("OpenOfflineShop.LoadWindow.__BindEvent")
  394.  
  395. def Destroy(self):
  396. self.isLoaded = 0
  397.  
  398. if self.required_item_window:
  399. del self.required_item_window
  400.  
  401. if self.required_item_slot:
  402. del self.required_item_slot
  403.  
  404. self.required_item_vnum = 0
  405. self.required_item_count = 0
  406. self.tooltip_item = None
  407.  
  408. if self.money_text_window:
  409. del self.money_text_window
  410.  
  411. if self.money_text:
  412. del self.money_text
  413.  
  414. if self.time_select_text_window:
  415. del self.time_select_text_window
  416.  
  417. if self.time_select_text:
  418. del self.time_select_text
  419.  
  420. if self.selected_time:
  421. del self.selected_time
  422.  
  423. if self.time_select_button:
  424. del self.time_select_button
  425.  
  426. if self.mouse_over_img:
  427. del self.mouse_over_img
  428.  
  429. if self.time_button_dict:
  430. del self.time_button_dict
  431.  
  432. self.time_select_list_open = False
  433. self.time_select_window_height = 0
  434.  
  435. self.interface = None
  436. self.shopManagerDialog = None
  437.  
  438. self.tooltip = None
  439. self.tooltip_button = None
  440.  
  441. self.inputDialog = None
  442.  
  443. def __BindObject(self):
  444. self.tooltip_button = self.GetChild("tooltip_button")
  445.  
  446. self.required_item_window = self.GetChild("required_item_window")
  447. self.required_item_slot = self.GetChild("required_item_slot")
  448.  
  449. self.money_text = self.GetChild("money_text")
  450.  
  451. self.time_select_text_window = self.GetChild("time_select_text_window")
  452. self.time_select_text = self.GetChild("time_select_text")
  453. self.time_select_button = self.GetChild("time_select_button")
  454. self.time_select_window = self.GetChild("time_select_window")
  455.  
  456. self.mouse_over_img = ui.ExpandedImageBox()
  457. self.mouse_over_img.LoadImage("d:/ymir work/ui/quest_re/button_over.sub")
  458. self.mouse_over_img.Hide()
  459.  
  460. self.__CreateTimeNameButton()
  461.  
  462. def __BindEvent(self):
  463. self.GetChild("title_bar").SetCloseEvent(ui.__mem_func__(self.Close))
  464. self.GetChild("cancel_button").SetEvent(ui.__mem_func__(self.Close))
  465. self.GetChild("ok_button").SetEvent(ui.__mem_func__(self.OpenShop))
  466.  
  467. self.tooltip = self.__CreateGameTypeToolTip(localeInfo.OFFLINE_SHOP_TOOLTIP_TITLE, self.tooltip_list)
  468. self.tooltip.SetTop()
  469. self.tooltip_button.SetToolTipWindow(self.tooltip)
  470.  
  471. if self.time_select_text_window:
  472. self.time_select_text_window.SetEvent(ui.__mem_func__(self.__ClickDungeonSelectButton))
  473. self.time_select_text_window.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.__ClickDungeonSelectButton))
  474.  
  475. if self.time_select_button:
  476. self.time_select_button.SetEvent(ui.__mem_func__(self.__ClickDungeonSelectButton))
  477.  
  478. if self.required_item_slot:
  479. self.required_item_slot.SetOverInItemEvent(ui.__mem_func__(self.__SlotOverInItem))
  480. self.required_item_slot.SetOverOutItemEvent(ui.__mem_func__(self.__SlotOverOutItem))
  481.  
  482. def SetItemToolTip(self, tooltip_item):
  483. self.tooltip_item = tooltip_item
  484.  
  485. def SetCancelEvent(self, event):
  486. self.title_bar.SetCloseEvent(event)
  487. self.cancel_button.SetEvent(event)
  488.  
  489. def __CreateGameTypeToolTip(self, title, descList):
  490. tooltip = uiToolTip.ToolTip()
  491. tooltip.SetTitle(title)
  492. tooltip.AppendSpace(7)
  493.  
  494. for desc in descList:
  495. tooltip.AutoAppendTextLine(desc)
  496.  
  497. tooltip.AlignHorizonalCenter()
  498. tooltip.SetTop()
  499. return tooltip
  500.  
  501. def __CreateTimeNameButton(self):
  502. if not self.time_select_window:
  503. return
  504.  
  505. if not self.TIME_DICT:
  506. return
  507.  
  508. self.selected_time = 1
  509. self.money_text.SetText(localeInfo.NumberToMoneyString(self.TIME_DICT[1][1]))
  510.  
  511. button_height = 16
  512. dict_len = len(self.TIME_DICT)
  513. self.time_select_window_height = dict_len * button_height
  514.  
  515. for i, key in enumerate(sorted(self.TIME_DICT.iterkeys())):
  516. button = ui.Button()
  517. button.SetParent(self.time_select_window)
  518. button.SetPosition(0, button_height * i)
  519.  
  520. if 1 == dict_len:
  521. button.SetUpVisual("d:/ymir work/ui/game/party_match/button_one.sub")
  522. button.SetDownVisual("d:/ymir work/ui/game/party_match/button_one.sub")
  523. button.SetOverVisual("d:/ymir work/ui/game/party_match/button_one.sub")
  524. elif i == 0:
  525. button.SetUpVisual("d:/ymir work/ui/game/party_match/button_top.sub")
  526. button.SetDownVisual("d:/ymir work/ui/game/party_match/button_top.sub")
  527. button.SetOverVisual("d:/ymir work/ui/game/party_match/button_top.sub")
  528. elif i == dict_len - 1:
  529. button.SetUpVisual("d:/ymir work/ui/game/party_match/button_bottom.sub")
  530. button.SetDownVisual("d:/ymir work/ui/game/party_match/button_bottom.sub")
  531. button.SetOverVisual("d:/ymir work/ui/game/party_match/button_bottom.sub")
  532. else:
  533. button.SetUpVisual("d:/ymir work/ui/game/party_match/button_middle.sub")
  534. button.SetDownVisual("d:/ymir work/ui/game/party_match/button_middle.sub")
  535. button.SetOverVisual("d:/ymir work/ui/game/party_match/button_middle.sub")
  536.  
  537. button.SetEvent(ui.__mem_func__(self.__ClickDungeonSelect), key)
  538. button.SetOverEvent(ui.__mem_func__(self.__ClickTimeButtonOver), key)
  539. button.SetOverOutEvent(ui.__mem_func__(self.__ClickTimeButtonOverOut), key)
  540. button.SetText(self.TIME_DICT[key][0])
  541. button.Hide()
  542.  
  543. self.time_button_dict[key] = button
  544.  
  545. self.__SetSlotRequiredItem(0, self.REQUIRED_ITEM[0], self.REQUIRED_ITEM[1])
  546.  
  547. def __ClickTimeButtonOver(self, time_index):
  548. if not self.mouse_over_img:
  549. return
  550.  
  551. button = self.time_button_dict.get(time_index, 0)
  552. if 0 == button:
  553. return
  554.  
  555. (button_x, button_y) = button.GetLocalPosition()
  556. self.mouse_over_img.SetPosition(74 + button_x, 57-4 + button_y )
  557. self.mouse_over_img.Show()
  558.  
  559. def __ClickTimeButtonOverOut(self, time_index):
  560. if not self.mouse_over_img:
  561. return
  562.  
  563. self.mouse_over_img.Hide()
  564.  
  565. def __ClickDungeonSelect(self, time_index):
  566. if not time_index in self.TIME_DICT:
  567. return
  568.  
  569. for button in self.time_button_dict.values():
  570. button.Hide()
  571.  
  572. self.__DungeonSelectWindow(False)
  573.  
  574. self.selected_time = time_index
  575.  
  576. if self.time_select_text:
  577. self.time_select_text.SetText(self.TIME_DICT[time_index][0])
  578. self.money_text.SetText(localeInfo.NumberToMoneyString(self.TIME_DICT[time_index][1]))
  579.  
  580. self.__SetSlotRequiredItem(0, self.REQUIRED_ITEM[0], self.REQUIRED_ITEM[1])
  581.  
  582. def __DungeonSelectWindow(self, show):
  583. if True == show:
  584. self.time_select_list_open = True
  585. if self.time_select_window:
  586. self.time_select_window.SetSize(130, self.time_select_window_height)
  587.  
  588. for button in self.time_button_dict.values():
  589. button.Show()
  590. else:
  591. self.time_select_list_open = False
  592. if self.time_select_window:
  593. self.time_select_window.SetSize(130, 0)
  594.  
  595. for button in self.time_button_dict.values():
  596. button.Hide()
  597.  
  598. def __ClickDungeonSelectButton(self):
  599. if self.time_select_list_open:
  600. self.__DungeonSelectWindow(False)
  601. else:
  602. self.__DungeonSelectWindow(True)
  603.  
  604. def __SetSlotRequiredItem(self, slotIndex, item_vnum, item_count):
  605. if not self.REQUIRED_ITEM:
  606. return
  607.  
  608. self.required_item_slot.SetItemSlot(slotIndex, item_vnum, item_count)
  609. self.required_item_vnum = item_vnum
  610. self.required_item_count = item_count
  611.  
  612. item.SelectItem(item_vnum)
  613.  
  614. self.tooltip_item = uiToolTip.ItemToolTip()
  615. self.tooltip_item.AppendTextLine(item.GetItemName(), self.TOOLTIP_SPECIAL_COLOR)
  616. self.tooltip_item.AppendDescription(item.GetItemDescription(), 26)
  617. self.tooltip_item.AlignHorizonalCenter()
  618.  
  619. def __SlotOverInItem(self):
  620. if self.tooltip_item:
  621. if self.required_item_vnum and self.required_item_count:
  622. self.tooltip_item.ShowToolTip()
  623.  
  624. def __SlotOverOutItem(self):
  625. if self.tooltip_item:
  626. self.tooltip_item.HideToolTip()
  627.  
  628. def BindInterface(self, interface):
  629. self.interface = interface
  630.  
  631. def OpenShop(self):
  632. if not self.TIME_DICT and not self.selected_time:
  633. return
  634.  
  635. has_item = False
  636. for i in xrange(player.INVENTORY_PAGE_SIZE * player.INVENTORY_PAGE_COUNT):
  637. itemVnum = player.GetItemIndex(i)
  638. itemCount = player.GetItemCount(i)
  639. if itemVnum == self.REQUIRED_ITEM[0] and itemCount == self.REQUIRED_ITEM[1]:
  640. has_item = True
  641. break
  642.  
  643. if player.GetElk() < self.TIME_DICT[self.selected_time][1]:
  644. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.OFFLINE_SHOP_OPEN_NO_MONEY % self.TIME_DICT[self.selected_time][0])
  645. return
  646.  
  647. if not has_item:
  648. item.SelectItem(self.required_item_vnum)
  649. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.OFFLINE_SHOP_OPEN_NO_ITEM % item.GetItemName())
  650. return
  651.  
  652. if self.interface:
  653. self.interface.OpenOfflineShopInputNameDialog(self.selected_time)
  654.  
  655. ###################################################################################################
  656. ## Offline Shop Manager
  657. class OfflineShopManagerWindow(ui.ScriptWindow):
  658. def __init__(self):
  659. ui.ScriptWindow.__init__(self)
  660.  
  661. self.__LoadWindow()
  662. self.tooltipItem = None
  663. self.priceInputBoard = None
  664. self.questionDialog = None
  665. self.openDialog = None
  666. self.title = ""
  667. self.interface = None
  668. self.shopTime = None
  669.  
  670. def __del__(self):
  671. ui.ScriptWindow.__del__(self)
  672.  
  673. def RefreshStatus(self):
  674. getItemStatus = shop.GetOfflineShopItemStatus
  675.  
  676. self.RefreshMoney()
  677. if IsEditingOfflineShop():
  678. global g_iRefreshDelay
  679. net.SendRefreshOfflineShop(g_iRefreshDelay)
  680. net.SendOfflineShopCheck(g_iRefreshDelay)
  681.  
  682. for i in xrange(shop.OFFLINE_SHOP_SLOT_COUNT):
  683. if getItemStatus(i) == 2:
  684. self.itemSlotWindow.SetCantMouseEventSlot(i)
  685. else:
  686. self.itemSlotWindow.SetCanMouseEventSlot(i)
  687.  
  688. def Refresh(self):
  689. getItemID = shop.GetOfflineShopItemID
  690. getItemCount = shop.GetOfflineShopItemCount
  691. getItemStatus = shop.GetOfflineShopItemStatus
  692. setItemID = self.itemSlotWindow.SetItemSlot
  693.  
  694. if IsEditingOfflineShop():
  695. global g_iRefreshDelay
  696. net.SendOfflineShopCheck(g_iRefreshDelay)
  697.  
  698. iCount = 0
  699. for i in xrange(shop.OFFLINE_SHOP_SLOT_COUNT):
  700. idx = i
  701.  
  702. if (getItemID(idx) <= 0):
  703. iCount = iCount + 1
  704.  
  705. itemCount = getItemCount(idx)
  706. if itemCount <= 1:
  707. itemCount = 0
  708. setItemID(i, getItemID(idx), itemCount)
  709.  
  710. if iCount == shop.OFFLINE_SHOP_SLOT_COUNT:
  711. self.btnOpen.Show()
  712. self.btnDestroy.Hide()
  713.  
  714. for i in xrange(shop.OFFLINE_SHOP_SLOT_COUNT):
  715. self.itemSlotWindow.SetCoverButton(i, "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga",\
  716. "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga",\
  717. "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga",\
  718. "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga", False, False)
  719. self.itemSlotWindow.SetAlwaysRenderCoverButton(i)
  720. return
  721. else:
  722. self.btnDestroy.Show()
  723. self.btnOpen.Hide()
  724.  
  725. wndMgr.RefreshSlot(self.itemSlotWindow.GetWindowHandle())
  726.  
  727. def RefreshMoney(self):
  728. global g_iRefreshDelay
  729. net.SendRefreshOfflineShopMoney(g_iRefreshDelay)
  730.  
  731. money = player.GetCurrentOfflineShopMoney()
  732. self.wndMoney.SetText(localeInfo.NumberToMoneyString(money))
  733.  
  734. def SetItemData(self, pos, itemID, itemCount, itemPrice):
  735. shop.SetOfflineShopItemData(pos, itemID, itemCount, itemPrice)
  736.  
  737. def __LoadWindow(self):
  738. try:
  739. pyScrLoader = ui.PythonScriptLoader()
  740. pyScrLoader.LoadScriptFile(self, "UIScript/OfflineShopManagerDialog.py")
  741. except:
  742. import exception
  743. exception.Abort("OfflineShopManagerWindow.LoadWindow.LoadObject")
  744.  
  745. try:
  746. GetObject = self.GetChild
  747. self.itemSlotWindow = GetObject("ItemSlot")
  748. self.titleBar = GetObject("TitleBar")
  749. self.btnSales = GetObject("SalesHistoryButton")
  750. self.btnOpen = GetObject("OpenShopButton")
  751. self.btnDestroy = GetObject("DestroyShopButton")
  752. self.wndMapIndex = GetObject("ShopLocation")
  753. self.wndTime = GetObject("ShopTime")
  754. self.timeIcon = GetObject("ShopTimeIcon")
  755. self.btnRefresh = GetObject("RefreshButton")
  756.  
  757. self.wndMoneySlot = GetObject("MoneySlot")
  758. self.wndMoney = GetObject("Money")
  759.  
  760. except:
  761. import exception
  762. exception.Abort("OfflineShopManagerWindow.LoadWindow.BindObject")
  763.  
  764. self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  765. self.btnSales.SetEvent(ui.__mem_func__(self.OpenSalesWindow))
  766. self.btnOpen.SetEvent(ui.__mem_func__(self.OpenShop))
  767. self.btnDestroy.SetEvent(ui.__mem_func__(self.DestroyShop))
  768. self.btnRefresh.SetEvent(ui.__mem_func__(self.RefreshShop))
  769.  
  770. self.itemSlotWindow.SAFE_SetButtonEvent("LEFT", "EMPTY", self.SelectEmptySlot)
  771. self.itemSlotWindow.SAFE_SetButtonEvent("RIGHT", "EXIST", self.UnselectItemSlot)
  772. self.itemSlotWindow.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  773. self.itemSlotWindow.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  774.  
  775. self.dlgPickMoney = uiPickMoney.PickMoneyDialog()
  776. self.dlgPickMoney.LoadDialog()
  777. self.dlgPickMoney.Hide()
  778.  
  779. self.wndMoneySlot.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
  780.  
  781. def Destroy(self):
  782. self.ClearDictionary()
  783.  
  784. self.itemSlotWindow = None
  785. self.titleBar = None
  786. self.priceInputBoard = None
  787. self.questionDialog = None
  788. self.openDialog = None
  789.  
  790. self.dlgPickMoney.Destroy()
  791. self.dlgPickMoney = 0
  792.  
  793. self.wndMoney = None
  794. self.wndMoneySlot = None
  795.  
  796. def Open(self, isOpen, mapIndex, time):
  797. global g_isEditingOfflineShop
  798. if isOpen:
  799. g_isEditingOfflineShop = True
  800. self.btnDestroy.Show()
  801. self.btnOpen.Hide()
  802. else:
  803. g_isEditingOfflineShop = False
  804. self.btnOpen.Show()
  805. self.btnDestroy.Hide()
  806.  
  807. self.wndMapIndex.SetText(constInfo.MapNameByIndex(mapIndex))
  808. self.shopTime = int(time)
  809. self.wndMoney.SetText(localeInfo.NumberToMoneyString(player.GetCurrentOfflineShopMoney()))
  810.  
  811. self.SetTop()
  812. self.Show()
  813.  
  814. self.RefreshShop()
  815.  
  816. def OpenShop(self):
  817. if self.interface:
  818. self.interface.OpenOfflineShopInputTimeDialog()
  819.  
  820. def OpenSalesWindow(self):
  821. net.SendChatPacket("/offlineshop_sales")
  822.  
  823. def DestroyShop(self):
  824. questionDialog = uiCommon.QuestionDialog()
  825. questionDialog.SetText(localeInfo.OFFLINE_SHOP_CLOSE_QUESTION)
  826. questionDialog.SetAcceptEvent(lambda arg = True: self.AnswerDestroyShop(arg))
  827. questionDialog.SetCancelEvent(lambda arg = False: self.AnswerDestroyShop(arg))
  828. questionDialog.Open()
  829. self.questionDialog = questionDialog
  830.  
  831. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
  832.  
  833. def AnswerDestroyShop(self, flag):
  834. if flag:
  835. self.Close()
  836. net.SendDestroyOfflineShop()
  837. shop.ClearOfflineShopStock()
  838.  
  839. if self.questionDialog:
  840. self.questionDialog.Close()
  841. self.questionDialog = None
  842.  
  843. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
  844.  
  845. def RefreshShop(self):
  846. if IsEditingOfflineShop():
  847. net.SendRefreshOfflineShop()
  848. net.SendOfflineShopCheck()
  849. else:
  850. net.SendRefreshUnsoldItems()
  851.  
  852. self.Refresh()
  853.  
  854. def Close(self):
  855. global g_isEditingOfflineShop
  856. g_isEditingOfflineShop = False
  857.  
  858. if self.priceInputBoard:
  859. self.priceInputBoard.Close()
  860.  
  861. if self.questionDialog:
  862. self.OnCloseQuestionDialog()
  863.  
  864. self.title = ""
  865. self.priceInputBoard = None
  866. self.Hide()
  867.  
  868. if self.dlgPickMoney:
  869. self.dlgPickMoney.Close()
  870.  
  871. def OnPressEscapeKey(self):
  872. self.Close()
  873. return True
  874.  
  875. def OnPressExitKey(self):
  876. self.Close()
  877. return True
  878.  
  879. def AcceptInputPrice(self):
  880. if not self.priceInputBoard:
  881. return True
  882.  
  883. text = self.priceInputBoard.GetText()
  884.  
  885. if not text:
  886. return True
  887.  
  888. if not text.isdigit():
  889. return True
  890.  
  891. if int(text) <= 0:
  892. return True
  893.  
  894. attachedInvenType = self.priceInputBoard.sourceWindowType
  895. sourceSlotPos = self.priceInputBoard.sourceSlotPos
  896. targetSlotPos = self.priceInputBoard.targetSlotPos
  897.  
  898. price = int(self.priceInputBoard.GetText())
  899.  
  900. if IsOfflineShopItemPriceList():
  901. SetOfflineShopItemPrice(self.priceInputBoard.itemVNum, price)
  902.  
  903. net.SendAddOfflineShopItem(sourceSlotPos, targetSlotPos, price, attachedInvenType)
  904.  
  905. snd.PlaySound("sound/ui/drop.wav")
  906.  
  907. #####
  908.  
  909. self.CancelInputPrice()
  910.  
  911. def CancelInputPrice(self):
  912.  
  913. if self.inven:
  914. page = self.inven.GetInventoryPageIndex() # range 0 ~ 1
  915.  
  916. if (page * INVENTORY_PAGE_SIZE) <= pos < ((page + 1) * INVENTORY_PAGE_SIZE): # range 0 ~ 44, 45 ~ 89
  917. idx = pos - (page * INVENTORY_PAGE_SIZE)
  918. self.inven.wndItem.SetCanMouseEventSlot(idx)
  919.  
  920. self.RefreshShop()
  921.  
  922. self.priceInputBoard = None
  923. return True
  924.  
  925. def OpenPickMoneyDialog(self):
  926. if not mouseModule.mouseController.isAttached():
  927. curMoney = player.GetCurrentOfflineShopMoney()
  928.  
  929. if curMoney <= 0:
  930. return
  931.  
  932. self.dlgPickMoney.SetTitleName(localeInfo.PICK_MONEY_TITLE)
  933. self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
  934. self.dlgPickMoney.Open(curMoney)
  935. self.dlgPickMoney.SetMax(10)
  936.  
  937. def OnPickMoney(self, money):
  938. if money > 0:
  939. net.SendOfflineShopWithdrawMoney(money)
  940. self.RefreshMoney()
  941.  
  942. def OnCloseQuestionDialog(self):
  943. if not self.questionDialog:
  944. return
  945.  
  946. self.questionDialog.Close()
  947. self.questionDialog = None
  948. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
  949.  
  950. def SelectEmptySlot(self, selectedSlotPos):
  951. if not IsEditingOfflineShop():
  952. return
  953.  
  954. if self.priceInputBoard:
  955. return
  956.  
  957. isAttached = mouseModule.mouseController.isAttached()
  958. if isAttached:
  959. attachedSlotType = mouseModule.mouseController.GetAttachedType()
  960. attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  961. mouseModule.mouseController.DeattachObject()
  962.  
  963. if (player.SLOT_TYPE_INVENTORY != attachedSlotType and player.SLOT_TYPE_DRAGON_SOUL_INVENTORY):
  964. return
  965.  
  966. attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  967.  
  968. itemVNum = player.GetItemIndex(attachedInvenType, attachedSlotPos)
  969. item.SelectItem(itemVNum)
  970.  
  971. if item.IsAntiFlag(item.ANTIFLAG_GIVE) or item.IsAntiFlag(item.ANTIFLAG_MYSHOP):
  972. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.PRIVATE_SHOP_CANNOT_SELL_ITEM)
  973. return
  974.  
  975. priceInputBoard = uiCommon.MoneyInputDialog()
  976. priceInputBoard.SetTitle(localeInfo.PRIVATE_SHOP_INPUT_PRICE_DIALOG_TITLE)
  977. priceInputBoard.SetAcceptEvent(ui.__mem_func__(self.AcceptInputPrice))
  978. priceInputBoard.SetCancelEvent(ui.__mem_func__(self.CancelInputPrice))
  979. priceInputBoard.Open()
  980.  
  981. itemPrice = GetOfflineShopItemPrice(itemVNum)
  982. if itemPrice > 0:
  983. priceInputBoard.SetValue(itemPrice)
  984.  
  985. self.priceInputBoard = priceInputBoard
  986. self.priceInputBoard.itemVNum = itemVNum
  987. self.priceInputBoard.sourceWindowType = attachedInvenType
  988. self.priceInputBoard.sourceSlotPos = attachedSlotPos
  989. self.priceInputBoard.targetSlotPos = selectedSlotPos
  990.  
  991. def UnselectItemSlot(self, selectedSlotPos):
  992. if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
  993. return
  994.  
  995. self.AskRemoveItem(selectedSlotPos)
  996.  
  997. def DropToInventory(self):
  998. attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  999. self.AskBuyItem(attachedSlotPos)
  1000.  
  1001. def AskRemoveItem(self, selectedSlotPos):
  1002. itemIndex = shop.GetOfflineShopItemID(selectedSlotPos)
  1003.  
  1004. item.SelectItem(itemIndex)
  1005. itemName = item.GetItemName()
  1006.  
  1007. questionDialog = uiCommon.QuestionDialog()
  1008. questionDialog.SetText(localeInfo.OFFLINE_SHOP_REMOVE_ITEM_QUESTION % itemName)
  1009. questionDialog.SetAcceptEvent(lambda arg = True : self.AnswerRemoveItem(arg))
  1010. questionDialog.SetCancelEvent(lambda arg = False : self.AnswerRemoveItem(arg))
  1011. questionDialog.Open()
  1012. questionDialog.pos = selectedSlotPos
  1013. self.questionDialog = questionDialog
  1014.  
  1015. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
  1016.  
  1017. def AnswerRemoveItem(self, flag):
  1018. if flag:
  1019. pos = self.questionDialog.pos
  1020. if IsEditingOfflineShop():
  1021. net.SendRemoveOfflineShopItem(pos)
  1022. net.SendOfflineShopCheck()
  1023. else:
  1024. net.SendOfflineShopTakeItem(pos)
  1025.  
  1026. self.questionDialog.Close()
  1027. self.questionDialog = None
  1028.  
  1029. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
  1030.  
  1031. self.RefreshShop()
  1032.  
  1033. def SetItemToolTip(self, tooltipItem):
  1034. self.tooltipItem = tooltipItem
  1035.  
  1036. def OverInItem(self, slotIndex):
  1037. if mouseModule.mouseController.isAttached():
  1038. return
  1039.  
  1040. if None != self.tooltipItem:
  1041. self.tooltipItem.SetOfflineShopItem(slotIndex)
  1042.  
  1043. def OverOutItem(self):
  1044. if None != self.tooltipItem:
  1045. self.tooltipItem.HideToolTip()
  1046.  
  1047. def OnUpdate(self):
  1048. if IsEditingOfflineShop():
  1049. leftSec = max(0, self.shopTime - app.GetGlobalTimeStamp())
  1050. if leftSec > 0:
  1051. self.wndTime.SetText(localeInfo.OFFLINE_SHOP_OPEN_TIME % str(self.__FormatTime(leftSec)))
  1052. else:
  1053. self.wndTime.SetText(localeInfo.OFFLINE_SHOP_CLOSED)
  1054. else:
  1055. self.wndTime.SetText(localeInfo.OFFLINE_SHOP_CLOSED)
  1056.  
  1057. self.RefreshStatus()
  1058.  
  1059. def __FormatTime(self, time):
  1060. m, s = divmod(time, 60)
  1061. h, m = divmod(m, 60)
  1062. return "%1d:%02d:%02d" % (h, m, s)
  1063.  
  1064. ###################################################################################################
  1065. ## Offline Shop
  1066. class OfflineShopDialog(ui.ScriptWindow):
  1067. def __init__(self):
  1068. ui.ScriptWindow.__init__(self)
  1069. self.tooltipItem = 0
  1070. self.xShopStart = 0
  1071. self.yShopStart = 0
  1072. self.questionDialog = None
  1073. self.popup = None
  1074. self.itemBuyQuestionDialog = None
  1075.  
  1076. def __del__(self):
  1077. ui.ScriptWindow.__del__(self)
  1078.  
  1079. def __GetRealIndex(self, i):
  1080. return i # shop.OFFLINE_SHOP_SLOT_COUNT + i
  1081.  
  1082. def Refresh(self):
  1083. getItemID = shop.GetOfflineShopItemID
  1084. getItemVnum = shop.GetOfflineShopItemVnum
  1085. getItemStatus = shop.GetOfflineShopItemStatus
  1086. getItemCount = shop.GetOfflineShopItemCount
  1087. setItemID = self.itemSlotWindow.SetItemSlot
  1088.  
  1089. for i in xrange(shop.OFFLINE_SHOP_SLOT_COUNT):
  1090. idx = self.__GetRealIndex(i)
  1091. itemCount = getItemCount(idx)
  1092. if itemCount <= 1:
  1093. itemCount = 0
  1094. setItemID(i, getItemID(idx), itemCount)
  1095.  
  1096. item.SelectItem(getItemVnum(idx))
  1097. (itemWidth, itemHeight) = item.GetItemSize()
  1098.  
  1099. if getItemStatus(idx) == 2:
  1100. self.itemSlotWindow.SetCantMouseEventSlot(i)
  1101. else:
  1102. self.itemSlotWindow.SetCanMouseEventSlot(i)
  1103.  
  1104. self.viewCount.SetText(localeInfo.OFFLINE_SHOP_VIEWS % shop.GetDisplayedCount())
  1105. wndMgr.RefreshSlot(self.itemSlotWindow.GetWindowHandle())
  1106.  
  1107. def LoadDialog(self):
  1108. try:
  1109. PythonScriptLoader = ui.PythonScriptLoader()
  1110. PythonScriptLoader.LoadScriptFile(self, "UIScript/offlineshopdialog.py")
  1111. except:
  1112. import exception
  1113. exception.Abort("OfflineShopDialog.LoadDialog.LoadObject")
  1114.  
  1115. try:
  1116. GetObject = self.GetChild
  1117. self.itemSlotWindow = GetObject("ItemSlot")
  1118. self.titleBar = GetObject("TitleBar")
  1119. self.titleName = GetObject("TitleName")
  1120. self.viewCount = GetObject("ViewCount")
  1121.  
  1122. except:
  1123. import exception
  1124. exception.Abort("OfflineShopDialog.LoadDialog.BindObject")
  1125.  
  1126. self.itemSlotWindow.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  1127. self.itemSlotWindow.SAFE_SetButtonEvent("LEFT", "EMPTY", self.SelectEmptySlot)
  1128. self.itemSlotWindow.SAFE_SetButtonEvent("LEFT", "EXIST", self.SelectItemSlot)
  1129. self.itemSlotWindow.SAFE_SetButtonEvent("RIGHT", "EXIST", self.UnselectItemSlot)
  1130.  
  1131. self.itemSlotWindow.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  1132. self.itemSlotWindow.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  1133.  
  1134. self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  1135.  
  1136. self.Refresh()
  1137.  
  1138. def Destroy(self):
  1139. self.Close()
  1140. self.ClearDictionary()
  1141.  
  1142. self.tooltipItem = 0
  1143. self.itemSlotWindow = 0
  1144. self.titleBar = 0
  1145. self.questionDialog = None
  1146. self.popup = None
  1147.  
  1148. def Open(self, vid):
  1149. isPrivateShop = False
  1150. isMainPlayerPrivateShop = False
  1151. isOfflineShop = True
  1152.  
  1153. import chr
  1154. if chr.IsNPC(vid):
  1155. isPrivateShop = False
  1156. else:
  1157. isPrivateShop = True
  1158.  
  1159. if player.IsMainCharacterIndex(vid):
  1160. isMainPlayerPrivateShop = True
  1161. else:
  1162. isMainPlayerPrivateShop = False
  1163.  
  1164. shop.Open(isPrivateShop, isMainPlayerPrivateShop, isOfflineShop)
  1165.  
  1166. self.Refresh()
  1167. self.SetTop()
  1168.  
  1169. self.Show()
  1170.  
  1171. self.titleName.SetText(localeInfo.OFFLINE_SHOP_TITLE % chr.GetNameByVID(vid))
  1172.  
  1173. (self.xShopStart, self.yShopStart, z) = player.GetMainCharacterPosition()
  1174.  
  1175. def Close(self):
  1176. if self.itemBuyQuestionDialog:
  1177. self.itemBuyQuestionDialog.Close()
  1178. self.itemBuyQuestionDialog = None
  1179. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
  1180.  
  1181. if self.questionDialog:
  1182. self.OnCloseQuestionDialog()
  1183.  
  1184. shop.Close()
  1185. net.SendOfflineShopEndPacket()
  1186. self.CancelShopping()
  1187. self.tooltipItem.HideToolTip()
  1188. self.Hide()
  1189.  
  1190. def OnPressEscapeKey(self):
  1191. self.Close()
  1192. return True
  1193.  
  1194. def OnPressExitKey(self):
  1195. self.Close()
  1196. return True
  1197.  
  1198. def OnBuy(self):
  1199. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SHOP_BUY_INFO)
  1200. app.SetCursor(app.BUY)
  1201.  
  1202. def CancelShopping(self):
  1203. app.SetCursor(app.NORMAL)
  1204.  
  1205. def __OnClosePopupDialog(self):
  1206. self.pop = None
  1207. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
  1208.  
  1209. def OnCloseQuestionDialog(self):
  1210. if not self.questionDialog:
  1211. return
  1212.  
  1213. self.questionDialog.Close()
  1214. self.questionDialog = None
  1215. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
  1216.  
  1217. def SelectEmptySlot(self, selectedSlotPos):
  1218. isAttached = mouseModule.mouseController.isAttached()
  1219. if isAttached:
  1220. if shop.IsOfflineShop():
  1221. mouseModule.mouseController.DeattachObject()
  1222. return
  1223.  
  1224. def UnselectItemSlot(self, selectedSlotPos):
  1225. if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
  1226. return
  1227.  
  1228. if shop.IsOfflineShop():
  1229. if shop.GetOfflineShopItemStatus(selectedSlotPos) == 0:
  1230. self.AskBuyItem(selectedSlotPos)
  1231.  
  1232. def SelectItemSlot(self, selectedSlotPos):
  1233. if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
  1234. return
  1235.  
  1236. isAttached = mouseModule.mouseController.isAttached()
  1237. if not isAttached:
  1238. if True == shop.IsMainPlayerPrivateShop():
  1239. return
  1240.  
  1241. curCursorNum = app.GetCursor()
  1242. if app.BUY == curCursorNum:
  1243. self.AskBuyItem(selectedSlotPos)
  1244. else:
  1245. selectedItemID = shop.GetOfflineShopItemID(selectedSlotPos)
  1246. itemCount = shop.GetOfflineShopItemCount(selectedSlotPos)
  1247.  
  1248. type = player.SLOT_TYPE_SHOP
  1249. if shop.IsOfflineShop():
  1250. type = player.SLOT_TYPE_OFFLINE_SHOP
  1251.  
  1252. mouseModule.mouseController.AttachObject(self, type, selectedSlotPos, selectedItemID, itemCount)
  1253. mouseModule.mouseController.SetCallBack("INVENTORY", ui.__mem_func__(self.DropToInventory))
  1254. snd.PlaySound("sound/ui/pick.wav")
  1255.  
  1256. def DropToInventory(self):
  1257. attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  1258. self.AskBuyItem(attachedSlotPos)
  1259.  
  1260. def AskBuyItem(self, slotPos):
  1261. slotPos = self.__GetRealIndex(slotPos)
  1262.  
  1263. itemIndex = shop.GetOfflineShopItemID(slotPos)
  1264. itemPrice = shop.GetOfflineShopItemPrice(slotPos)
  1265. itemCount = shop.GetOfflineShopItemCount(slotPos)
  1266.  
  1267. item.SelectItem(itemIndex)
  1268. itemName = item.GetItemName()
  1269.  
  1270. itemBuyQuestionDialog = uiCommon.QuestionDialog()
  1271. itemBuyQuestionDialog.SetText(localeInfo.DO_YOU_BUY_ITEM(itemName, itemCount, localeInfo.NumberToMoneyString(itemPrice)))
  1272.  
  1273. itemBuyQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerBuyItem(arg))
  1274. itemBuyQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerBuyItem(arg))
  1275. itemBuyQuestionDialog.Open()
  1276. itemBuyQuestionDialog.pos = slotPos
  1277. self.itemBuyQuestionDialog = itemBuyQuestionDialog
  1278.  
  1279. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
  1280.  
  1281. def AnswerBuyItem(self, flag):
  1282. if flag:
  1283. pos = self.itemBuyQuestionDialog.pos
  1284. net.SendOfflineShopBuyPacket(pos)
  1285.  
  1286. self.itemBuyQuestionDialog.Close()
  1287. self.itemBuyQuestionDialog = None
  1288.  
  1289. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
  1290.  
  1291. def SetItemToolTip(self, tooltipItem):
  1292. self.tooltipItem = tooltipItem
  1293.  
  1294. def OverInItem(self, slotIndex):
  1295. slotIndex = self.__GetRealIndex(slotIndex)
  1296. if mouseModule.mouseController.isAttached():
  1297. return
  1298.  
  1299. if 0 != self.tooltipItem:
  1300. self.tooltipItem.SetOfflineShopItem(slotIndex)
  1301.  
  1302. def OverOutItem(self):
  1303. if 0 != self.tooltipItem:
  1304. self.tooltipItem.HideToolTip()
Advertisement
Add Comment
Please, Sign In to add comment