Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.71 KB | None | 0 0
  1. import app
  2. import ui
  3. import uiToolTip
  4. import uiCommon
  5. import mouseModule
  6. import constInfo
  7. import localeInfo
  8. import net
  9. import player
  10. import item
  11. import chr
  12. import effect
  13. import dbg
  14. import background
  15. import grp
  16. import chat
  17. import pack
  18. import wndMgr
  19. import nonplayer
  20. import uiScriptLocale
  21. from datetime import datetime
  22.  
  23. from _weakref import proxy
  24.  
  25. ROOT_PATH = "d:/ymir work/ui/game/battle_pass/"
  26. MISSION_PATH = "d:/ymir work/ui/game/battle_pass/mission/"
  27.  
  28. RANKING_MAX_NUM = 9
  29. MISSION_REWARD_COUNT = 3
  30.  
  31. BATTLE_PASS_NAMES = {
  32. 1 : "November 2019",
  33. }
  34.  
  35. MISSION_INFO_DICT = { }
  36.  
  37. class MissionScrollBar(ui.DragButton):
  38. def __init__(self):
  39. ui.DragButton.__init__(self)
  40. self.AddFlag("float")
  41. self.AddFlag("movable")
  42. self.AddFlag("restrict_x")
  43.  
  44. self.eventScroll = lambda *arg: None
  45. self.currentPos = 0.0
  46. self.scrollStep = 0.20
  47.  
  48. def __del__(self):
  49. ui.DragButton.__del__(self)
  50. self.currentPos = 0.0
  51. self.scrollStep = 0.20
  52. self.eventScroll = lambda *arg: None
  53.  
  54. def SetScrollEvent(self, event):
  55. self.eventScroll = event
  56.  
  57. def SetScrollStep(self, step):
  58. self.scrollStep = step
  59.  
  60. def SetPos(self, pos):
  61. pos = max(0.0, pos)
  62. pos = min(1.0, pos)
  63.  
  64. yPos = float(pos * 165) # restrictedHeight - imageHeight - 3
  65.  
  66. self.SetPosition(11, yPos + 3) # restrictedY
  67. self.OnMove()
  68.  
  69. def GetPos(self):
  70. return self.currentPos
  71.  
  72. def OnUp(self):
  73. self.SetPos(self.currentPos - self.scrollStep)
  74.  
  75. def OnDown(self):
  76. self.SetPos(self.currentPos + self.scrollStep)
  77.  
  78. def OnMove(self):
  79. (xLocal, yLocal) = self.GetLocalPosition()
  80. self.currentPos = float(yLocal - 3) / float(165)
  81.  
  82. self.eventScroll()
  83.  
  84. class ListBoxMissions(ui.Window):
  85. class Item(ui.Window):
  86. def __init__(self, missionId):
  87. ui.Window.__init__(self)
  88. self.SetWindowName("ListBoxMissions_Item")
  89. self.bIsSelected = False
  90. self.missionId = missionId
  91. self.percentActual = 0
  92. self.percentTotal = 0
  93. self.rewardCount = 0
  94. self.missionInfo1 = 0
  95. self.xBase, self.yBase = 0, 0
  96.  
  97. self.tooltipItem = uiToolTip.ItemToolTip()
  98. self.tooltipItem.Hide()
  99.  
  100. self.listImages = []
  101. self.rewardList = [[0, 0], [0, 0], [0, 0]]
  102. self.rewardImages = []
  103. self.rewardListCount = []
  104.  
  105. iconName = MISSION_PATH + "mission_%d_small.tga" % (missionId)
  106. if not pack.Exist(iconName):
  107. iconName = ROOT_PATH + "mission_small_clean.tga"
  108.  
  109. bgImage = ui.MakeExpandedImageBox(self, ROOT_PATH + "mission_bg_normal.tga", 0, 0, "not_pick")
  110. iconImage = ui.MakeExpandedImageBox(bgImage, iconName, 1, 1, "not_pick")
  111. bgGauge = ui.MakeExpandedImageBox(bgImage, ROOT_PATH + "mission_progress_empty.tga", 47, 28, "not_pick")
  112. bgGaugeFull = ui.MakeExpandedImageBox(bgGauge, ROOT_PATH + "mission_progress_full.tga", 8, 2, "not_pick")
  113. bgGaugeFull.SetWindowName("gaugeFull")
  114.  
  115. self.listImages.append(bgImage)
  116. self.listImages.append(iconImage)
  117. self.listImages.append(bgGauge)
  118. self.listImages.append(bgGaugeFull)
  119.  
  120. for i in xrange(MISSION_REWARD_COUNT):
  121. rewardImage = ui.MakeExpandedImageBox(self, "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga", 187 + (32 * i), 6)
  122. rewardImage.SetEvent(ui.__mem_func__(self.OverInItem), "MOUSE_OVER_IN", i)
  123. rewardImage.SetEvent(ui.__mem_func__(self.OverOutItem), "MOUSE_OVER_OUT")
  124. self.rewardImages.append(rewardImage)
  125.  
  126. itemCount = ui.NumberLine()
  127. itemCount.SetParent(rewardImage)
  128. itemCount.SetWindowName("itemCount_%d" % i)
  129. itemCount.SetHorizontalAlignRight()
  130. itemCount.SetPosition(32 - 4, 32 - 10)
  131. itemCount.Show()
  132. self.rewardListCount.append(itemCount)
  133.  
  134. self.missionName = ui.MakeTextLineNew(bgImage, 53, 6, "")
  135.  
  136. def __del__(self):
  137. ui.Window.__del__(self)
  138. self.bIsSelected = False
  139. self.missionId = 0
  140. self.percentActual = 0
  141. self.percentTotal = 0
  142. self.rewardCount = 0
  143. self.missionInfo1 = 0
  144. self.xBase, self.yBase = 0, 0
  145. self.missionName = None
  146. self.tooltipItem = None
  147.  
  148. self.listImages = []
  149. self.rewardList = [[0, 0], [0, 0], [0, 0]]
  150. self.rewardImages = []
  151. self.rewardListCount = []
  152.  
  153. def OverInItem(self, eventType, rewardIndex):
  154. if self.tooltipItem:
  155. self.tooltipItem.ClearToolTip()
  156. if self.rewardList[rewardIndex][0]:
  157. self.tooltipItem.AddItemData(self.rewardList[rewardIndex][0], metinSlot = [0 for i in xrange(player.METIN_SOCKET_MAX_NUM)])
  158. self.tooltipItem.ShowToolTip()
  159.  
  160. def OverOutItem(self):
  161. if self.tooltipItem:
  162. self.tooltipItem.HideToolTip()
  163.  
  164. def SetBasePosition(self, x, y):
  165. self.xBase = x
  166. self.yBase = y
  167.  
  168. def GetBasePosition(self):
  169. return (self.xBase, self.yBase)
  170.  
  171. def GetMissionId(self):
  172. return self.missionId
  173.  
  174. def OnMouseLeftButtonUp(self):
  175. self.Select()
  176.  
  177. def Select(self):
  178. self.bIsSelected = True
  179. self.parent.SetSelectedMission(self.missionId)
  180.  
  181. if len(self.listImages) > 0:
  182. self.listImages[0].LoadImage(ROOT_PATH + "mission_bg_selected.tga")
  183.  
  184. def Deselect(self):
  185. self.bIsSelected = False
  186.  
  187. if len(self.listImages) > 0:
  188. self.listImages[0].LoadImage(ROOT_PATH + "mission_bg_normal.tga")
  189.  
  190. def SetProgress(self, progressActual, pregressTotal):
  191. self.percentActual = progressActual
  192. self.percentTotal = pregressTotal
  193.  
  194. self.UpdateGauge()
  195.  
  196. def UpdateProgress(self, newProgress):
  197. if newProgress >= self.percentActual:
  198. self.percentActual = newProgress
  199. self.UpdateGauge()
  200. else:
  201. chat.AppendChat(chat.CHAT_TYPE_INFO, "[Error]: Update progress error, new progress is lower than old progress.")
  202.  
  203. def UpdateGauge(self):
  204. for image in self.listImages:
  205. if image.GetWindowName() == "gaugeFull":
  206. if self.percentActual == self.percentTotal:
  207. image.LoadImage(ROOT_PATH + "mission_progress_full.tga")
  208. else:
  209. if self.percentActual <= int(self.percentTotal / 2):
  210. image.LoadImage(ROOT_PATH + "mission_progress_low.tga")
  211. else:
  212. image.LoadImage(ROOT_PATH + "mission_progress_middle.tga")
  213.  
  214. def IsCompleted(self):
  215. if self.percentActual >= self.percentTotal:
  216. return True
  217.  
  218. return False
  219.  
  220. def SetMissionName(self, missionName):
  221. if self.missionName:
  222. self.missionName.SetText(missionName)
  223.  
  224. def SetMissionInfo1(self, missionInfo):
  225. self.missionInfo1 = missionInfo
  226.  
  227. def GetMissionInfo(self):
  228. return (self.missionInfo1, self.percentActual, self.percentTotal)
  229.  
  230. def AddMissionReward(self, itemVnum, itemCount):
  231. if self.rewardCount == -1:
  232. return
  233.  
  234. if itemVnum and itemCount > 0:
  235. if self.rewardCount < len(self.rewardImages):
  236. item.SelectItem(itemVnum)
  237. self.rewardImages[self.rewardCount].LoadImage(item.GetIconImageFileName())
  238. self.rewardListCount[self.rewardCount].SetNumber(str(itemCount))
  239. self.rewardList[self.rewardCount] = [itemVnum, itemCount]
  240. self.rewardCount += 1
  241. else:
  242. self.rewardCount = -1
  243.  
  244. def Show(self):
  245. ui.Window.Show(self)
  246.  
  247. def SetParent(self, parent):
  248. ui.Window.SetParent(self, parent)
  249. self.parent = proxy(parent)
  250.  
  251. def OnRender(self):
  252. xList, yList = self.parent.GetGlobalPosition()
  253.  
  254. for item in self.listImages + self.rewardImages:
  255. if item.GetWindowName() == "gaugeFull":
  256. if self.percentTotal == 0:
  257. self.percentTotal = 1
  258. item.SetClipRect(0.0, yList, -1.0 + float(self.percentActual) / float(self.percentTotal), yList + self.parent.GetHeight(), True)
  259. else:
  260. item.SetClipRect(xList, yList, xList + self.parent.GetWidth(), yList + self.parent.GetHeight())
  261.  
  262. if self.missionName:
  263. xText, yText = self.missionName.GetGlobalPosition()
  264. wText, hText = self.missionName.GetTextSize()
  265.  
  266. if yText < yList or (yText + hText > yList + self.parent.GetHeight()):
  267. self.missionName.Hide()
  268. else:
  269. self.missionName.Show()
  270.  
  271. for count in self.rewardListCount:
  272. xList, yList = self.parent.GetGlobalPosition()
  273. xText, yText = count.GetGlobalPosition()
  274. wText, hText = count.GetWidth(), 7
  275.  
  276. if yText < yList or (yText + hText > yList + self.parent.GetHeight()):
  277. count.Hide()
  278. else:
  279. count.Show()
  280.  
  281. def __init__(self):
  282. ui.Window.__init__(self)
  283. self.SetWindowName("ListBoxMissions")
  284. self.itemList = []
  285.  
  286. self.selectedMission = 0
  287.  
  288. def __del__(self):
  289. ui.Window.__del__(self)
  290.  
  291. self.itemList = []
  292.  
  293. self.selectedMission = 0
  294. self.globalParent = None
  295.  
  296. def SetSelectedMission(self, missionId):
  297. self.selectedMission = missionId
  298.  
  299. for itemH in self.itemList:
  300. if itemH.GetMissionId() != self.selectedMission:
  301. itemH.Deselect()
  302.  
  303. if self.globalParent:
  304. self.globalParent.SetMissionInfo(self.selectedMission)
  305.  
  306. def GetSelectedMission(self):
  307. return self.selectedMission
  308.  
  309. def SelectMission(self, missionId):
  310. for item in self.itemList:
  311. if missionId == item.GetMissionId():
  312. item.Select()
  313.  
  314. def HaveMission(self, missionId):
  315. for item in self.itemList:
  316. if missionId == item.GetMissionId():
  317. return True
  318.  
  319. return False
  320.  
  321. def GetMissionInfo(self, missionId):
  322. for item in self.itemList:
  323. if missionId == item.GetMissionId():
  324. return item.GetMissionInfo()
  325.  
  326. return (0, 0, 0)
  327.  
  328. def GetMissionCount(self):
  329. return len(self.itemList)
  330.  
  331. def GetCompletedMissionCount(self):
  332. completedCount = 0
  333. for item in self.itemList:
  334. if item.IsCompleted():
  335. completedCount += 1
  336.  
  337. return completedCount
  338.  
  339. def SetProgress(self, missionId, progressActual, pregressTotal):
  340. for item in self.itemList:
  341. if missionId == item.GetMissionId():
  342. item.SetProgress(progressActual, pregressTotal)
  343.  
  344. def UpdateProgress(self, missionId, newProgress):
  345. for item in self.itemList:
  346. if missionId == item.GetMissionId():
  347. item.UpdateProgress(newProgress)
  348.  
  349. def AddMissionReward(self, missionId, itemVnum, itemCount):
  350. for item in self.itemList:
  351. if missionId == item.GetMissionId():
  352. item.AddMissionReward(itemVnum, itemCount)
  353.  
  354. def SetGlobalParent(self, parent):
  355. self.globalParent = proxy(parent)
  356.  
  357. def OnScroll(self, scrollPos):
  358. totalHeight = 0
  359. for itemH in self.itemList:
  360. totalHeight += itemH.GetHeight()
  361.  
  362. totalHeight -= self.GetHeight()
  363.  
  364. for i in xrange(len(self.itemList)):
  365. x, y = self.itemList[i].GetLocalPosition()
  366. xB, yB = self.itemList[i].GetBasePosition()
  367. setPos = yB - int(scrollPos * totalHeight)
  368. self.itemList[i].SetPosition(xB, setPos)
  369.  
  370. def AppendMission(self, itemHeight, missionId, missionName, missionInfo1):
  371. item = self.Item(missionId)
  372. item.SetParent(self)
  373. item.SetSize(self.GetWidth() - 3, itemHeight)
  374. item.SetMissionName(missionName)
  375. item.SetMissionInfo1(missionInfo1)
  376.  
  377. if len(self.itemList) == 0:
  378. item.SetPosition(0, 0)
  379. item.SetBasePosition(0, 0)
  380. else:
  381. x, y = self.itemList[-1].GetLocalPosition()
  382. item.SetPosition(0, y + self.itemList[-1].GetHeight())
  383. item.SetBasePosition(0, y + self.itemList[-1].GetHeight())
  384.  
  385. item.Show()
  386. self.itemList.append(item)
  387.  
  388. class BattlePassWindow(ui.ScriptWindow):
  389. def __init__(self):
  390. ui.ScriptWindow.__init__(self)
  391.  
  392. self.Initialize()
  393. self.LoadMissionList()
  394. self.LoadWindow()
  395.  
  396. def Initialize(self):
  397. self.board = None
  398. self.titleBar = None
  399. self.titleName = None
  400. self.scrollBar = None
  401. self.tooltipItem = None
  402.  
  403. self.currentState = "MISSION"
  404. self.tabButtonDict = None
  405.  
  406. self.rankingButton = None
  407. self.rewardButton = None
  408.  
  409. self.scrollBarWindow = None
  410. self.missionWindow = None
  411. self.rankingWindow = None
  412.  
  413. self.missionNameText = None
  414. self.totalProgressGauge = None
  415. self.bgImageMission = None
  416. self.rewardItems = None
  417.  
  418. self.loadingBackground = None
  419. self.loadingAnimation = None
  420.  
  421. self.missionInfoDict = {}
  422. self.generalInfoDict = {}
  423.  
  424. self.rankingImages = []
  425. self.rankingSpecialImages = []
  426. self.rankingTexts = {}
  427. self.rankingInfo = {}
  428. self.rewardDict = {}
  429.  
  430. self.battlePassID = 0
  431. self.battlePassEndTime = 0
  432. self.rewardSlotIndex = 0
  433.  
  434. self.currentRankingPage = 1
  435. self.firstPrevButton = None
  436. self.prevButton = None
  437. self.nextButton = None
  438. self.lastNextButton = None
  439. self.pageButtonList = [ None, None, None, None, None ]
  440.  
  441. def __del__(self):
  442. ui.ScriptWindow.__del__(self)
  443.  
  444. def SetItemToolTip(self, itemTooltip):
  445. self.tooltipItem = itemTooltip
  446.  
  447. def LoadMissionList(self):
  448. try:
  449. #lines = open(app.GetLocalePath() + "/battle_pass.txt", "r").readlines()
  450. lines = open("lib/battle_pass.txt", "r").readlines()#try
  451. except:
  452. import exception
  453. exception.Abort("LoadMissionList Failed")
  454.  
  455. for line in lines:
  456. tokens = line[:-1].split("\t")
  457. if len(tokens) == 0 or not tokens[0]:
  458. continue
  459.  
  460. if tokens[0] == "#":
  461. continue
  462.  
  463. MISSION_INFO_DICT[int(tokens[0])] = [ tokens[1], tokens[2], tokens[3], tokens[4], tokens[5], tokens[6] ]
  464.  
  465. def LoadWindow(self):
  466. try:
  467. pyScrLoader = ui.PythonScriptLoader()
  468. pyScrLoader.LoadScriptFile(self, "UIScript/BattlePassWindow.py")
  469. except:
  470. import exception
  471. exception.Abort("BattlePassWindow.LoadDialog.LoadScript")
  472.  
  473. try:
  474. self.board = self.GetChild("board")
  475. self.titleBar = self.GetChild("TitleBar")
  476. self.titleName = self.GetChild("TitleName")
  477.  
  478. self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  479.  
  480. self.tabButtonDict = {
  481. "MISSION" : [
  482. self.GetChild("tab_button_01"),
  483. self.GetChild("tab_01"),
  484. self.GetChild("BorderInfoMission")
  485. ],
  486. "GENERAL" : [
  487. self.GetChild("tab_button_02"),
  488. self.GetChild("tab_02"),
  489. self.GetChild("BorderInfoGeneral")
  490. ]
  491. }
  492.  
  493. for i in xrange(5):
  494. self.generalInfoDict[i] = self.GetChild("general_text_%d" % int(i))
  495.  
  496. for j in xrange(7):
  497. self.missionInfoDict[j] = self.GetChild("mission_text_%d" % int(j))
  498.  
  499. self.missionNameText = self.GetChild("missionTitleText")
  500. self.totalProgressGauge = self.GetChild("gaugeImage")
  501.  
  502. self.scrollBarWindow = self.GetChild("BorderScroll")
  503. self.missionWindow = self.GetChild("BorderMissions")
  504. self.rankingWindow = self.GetChild("BorderRanking")
  505.  
  506. self.rankingButton = self.GetChild("RankingButton")
  507. self.rewardButton = self.GetChild("RewardButton")
  508. self.bgImageMission = self.GetChild("bgImageMission")
  509. self.rewardItems = self.GetChild("RewardItems")
  510.  
  511. self.firstPrevButton = self.GetChild("first_prev_button")
  512. self.prevButton = self.GetChild("prev_button")
  513. self.nextButton = self.GetChild("next_button")
  514. self.lastNextButton = self.GetChild("last_next_button")
  515.  
  516. for i in xrange(5):
  517. self.pageButtonList[i] = self.GetChild("page%d_button" % int(i + 1))
  518. except:
  519. import exception
  520. exception.Abort("BattlePassWindow.LoadDialog.BindObject")
  521.  
  522. self.rankingWindow.Hide()
  523.  
  524. for (tabKey, tabButton) in self.tabButtonDict.items():
  525. tabButton[0].SetEvent(ui.__mem_func__(self.OnClickTabButton), tabKey)
  526.  
  527. self.rankingButton.SetEvent(ui.__mem_func__(self.OnClickRankingButton))
  528. self.rewardButton.SetEvent(ui.__mem_func__(self.OnClickRewardButton))
  529. self.rewardButton.Disable()
  530.  
  531. self.firstPrevButton.SetEvent(ui.__mem_func__(self.OnClickRankingFirstPrevButton))
  532. self.prevButton.SetEvent(ui.__mem_func__(self.OnClickRankingPrevButton))
  533. self.nextButton.SetEvent(ui.__mem_func__(self.OnClickRankingNextButton))
  534. self.lastNextButton.SetEvent(ui.__mem_func__(self.OnClickRankingLastNextButton))
  535.  
  536. for i in xrange(len(self.pageButtonList)):
  537. self.pageButtonList[i].SetEvent(ui.__mem_func__(self.ClickPageButton), i)
  538.  
  539. self.rewardItems.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  540. self.rewardItems.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  541.  
  542. self.scrollBar = MissionScrollBar()
  543. self.scrollBar.SetParent(self.scrollBarWindow)
  544. self.scrollBar.SetScrollEvent(ui.__mem_func__(self.OnScroll))
  545. self.scrollBar.SetUpVisual(ROOT_PATH + "scroll_bar.tga")
  546. self.scrollBar.SetOverVisual(ROOT_PATH + "scroll_bar.tga")
  547. self.scrollBar.SetDownVisual(ROOT_PATH + "scroll_bar.tga")
  548. self.scrollBar.SetRestrictMovementArea(11, 3, 6, 249)
  549. self.scrollBar.SetPosition(11, 3)
  550. self.scrollBar.Show()
  551.  
  552. self.missionList = ListBoxMissions()
  553. self.missionList.SetParent(self.missionWindow)
  554. self.missionList.SetGlobalParent(self)
  555. self.missionList.SetPosition(4, 4)
  556. self.missionList.SetSize(300, 249) # 290(H) without scrollbar, 249(W) with Render
  557. self.missionList.Show()
  558.  
  559. self.CreateRankingItems()
  560.  
  561. def GetTextByInfo(self, missionId, info_1):
  562. if missionId in [1, 3]:
  563. return nonplayer.GetMonsterName(info_1)
  564. elif missionId in [2, 4]:
  565. return str(info_1)
  566. elif missionId in [5, 6, 7, 8, 9, 10]:
  567. item.SelectItem(info_1)
  568. return item.GetItemName()
  569.  
  570. return ""
  571.  
  572. def SetMissionInfo(self, missionId):
  573. missionName = MISSION_INFO_DICT[missionId][0] if MISSION_INFO_DICT.has_key(missionId) else "Unknown name"
  574.  
  575. self.missionNameText.SetText(missionName)
  576.  
  577. (info_1, info_2, info_3) = self.missionList.GetMissionInfo(missionId)
  578.  
  579. if info_2 >= info_3:
  580. self.missionInfoDict[0].SetText("Status: |cff82ff7d|H|hCompleted|h|r")
  581. else:
  582. self.missionInfoDict[0].SetText("Status: |cfffeff7d|H|hIn progress|h|r")
  583.  
  584. textInfo = self.GetTextByInfo(missionId, info_1)
  585. if textInfo != "":
  586. self.missionInfoDict[1].SetText(MISSION_INFO_DICT[missionId][2] % textInfo)
  587. self.missionInfoDict[4].SetText(MISSION_INFO_DICT[missionId][3] % textInfo)
  588. else:
  589. self.missionInfoDict[1].SetText(MISSION_INFO_DICT[missionId][2])
  590. self.missionInfoDict[4].SetText(MISSION_INFO_DICT[missionId][3])
  591.  
  592. self.missionInfoDict[2].SetText(MISSION_INFO_DICT[missionId][1] % localeInfo.AddPointToNumberString(int(info_3 - info_2)))
  593. self.missionInfoDict[3].SetText("Procent: %.1f%%" % float(info_2 * 100 / info_3))
  594.  
  595. self.missionInfoDict[5].SetText(MISSION_INFO_DICT[missionId][4])
  596. self.missionInfoDict[6].SetText(MISSION_INFO_DICT[missionId][5])
  597.  
  598. self.missionInfoDict[4].SetTextColor(0xfff8ffce)
  599. self.missionInfoDict[5].SetTextColor(0xfff8ffce)
  600. self.missionInfoDict[6].SetTextColor(0xfff8ffce)
  601.  
  602. imageName = MISSION_PATH + "mission_%d_big.tga" % (missionId)
  603. if not pack.Exist(imageName):
  604. imageName = ROOT_PATH + "mission_big_clean.tga"
  605.  
  606. self.bgImageMission.LoadImage(imageName)
  607.  
  608. def AddReward(self, itemVnum, itemCount):
  609. if self.rewardItems:
  610. self.rewardItems.SetItemSlot(self.rewardSlotIndex, itemVnum, itemCount)
  611. self.rewardDict[self.rewardSlotIndex] = [itemVnum, itemCount]
  612.  
  613. self.rewardSlotIndex += 1 if self.rewardSlotIndex != 2 else 2
  614.  
  615. def AddMission(self, missionType, missionInfo1, missionInfo2, missionInfo3):
  616. if self.missionList:
  617. if self.missionList.HaveMission(missionType):
  618. self.missionList.SetProgress(missionType, missionInfo3, missionInfo2)
  619. else:
  620. missionName = MISSION_INFO_DICT[missionType][0] if MISSION_INFO_DICT.has_key(missionType) else "Unknown name"
  621. self.missionList.AppendMission(47, missionType, missionName, missionInfo1)
  622. self.missionList.SetProgress(missionType, missionInfo3, missionInfo2)
  623.  
  624. def UpdateMission(self, missionType, newProgress):
  625. if self.missionList:
  626. if self.missionList.HaveMission(missionType):
  627. self.missionList.UpdateProgress(missionType, newProgress)
  628. if self.missionList.GetSelectedMission() == missionType:
  629. self.SetMissionInfo(missionType)
  630. self.RefreshGeneralInfo()
  631. #else:
  632. # chat.AppendChat(chat.CHAT_TYPE_INFO, "[Error]: Can't update mission progress.")
  633.  
  634. def AddMissionReward(self, missionType, itemVnum, itemCount):
  635. if self.missionList:
  636. self.missionList.AddMissionReward(missionType, itemVnum, itemCount)
  637.  
  638. def OnScroll(self):
  639. if self.missionList:
  640. self.missionList.OnScroll(self.scrollBar.GetPos())
  641.  
  642. def OnClickTabButton(self, stateKey):
  643. self.currentState = stateKey
  644.  
  645. for tabKey, tabButton in self.tabButtonDict.items():
  646. if stateKey != tabKey:
  647. tabButton[0].SetUp()
  648.  
  649. tabButton[1].Hide()
  650. tabButton[2].Hide()
  651.  
  652. self.tabButtonDict[stateKey][1].Show()
  653. self.tabButtonDict[stateKey][2].Show()
  654.  
  655. if stateKey == "GENERAL":
  656. self.RefreshGeneralInfo()
  657.  
  658. self.OnClickRankingButton(True)
  659.  
  660. def SetBattlePassInfo(self, battlePassID, endTime):
  661. self.battlePassID = battlePassID
  662.  
  663. if endTime > 0:
  664. self.battlePassEndTime = app.GetGlobalTimeStamp() + endTime
  665.  
  666. def RefreshGeneralInfo(self):
  667. if self.missionList:
  668. if self.generalInfoDict.has_key(0) and BATTLE_PASS_NAMES.has_key(self.battlePassID):
  669. self.generalInfoDict[0].SetText("Name: %s" % str(BATTLE_PASS_NAMES[self.battlePassID]))
  670.  
  671. missionCount = self.missionList.GetMissionCount()
  672. completedMissionCount = self.missionList.GetCompletedMissionCount()
  673. if self.generalInfoDict.has_key(1):
  674. self.generalInfoDict[1].SetText("Quest count: %d" % missionCount)
  675.  
  676. if self.generalInfoDict.has_key(2):
  677. self.generalInfoDict[2].SetText("Completed quests: %d" % completedMissionCount)
  678.  
  679. if missionCount == completedMissionCount:
  680. self.rewardButton.Enable()
  681. self.rewardButton.EnableFlash()
  682.  
  683. if self.totalProgressGauge:
  684. self.totalProgressGauge.SetPercentage(completedMissionCount, missionCount)
  685.  
  686. def OnClickRewardButton(self):
  687. net.SendBattlePassAction(2)
  688.  
  689. def OnClickRankingButton(self, isHide = False):
  690. if self.rankingWindow.IsShow() or isHide:
  691. self.rankingWindow.Hide()
  692. self.missionWindow.Show()
  693. self.scrollBarWindow.Show()
  694. else:
  695. self.rankingWindow.Show()
  696. self.missionWindow.Hide()
  697. self.scrollBarWindow.Hide()
  698.  
  699. if self.rankingInfo.has_key(1):
  700. self.RefreshRankingInfo()
  701. else:
  702. net.SendBattlePassAction(3)
  703.  
  704. def OnClickRankingFirstPrevButton(self):
  705. self.currentRankingPage = 1
  706. self.RefreshRankingInfo()
  707.  
  708. def OnClickRankingPrevButton(self):
  709. prevPage = max(1, self.currentRankingPage - 1)
  710. self.currentRankingPage = prevPage
  711. self.RefreshRankingInfo()
  712.  
  713. def OnClickRankingNextButton(self):
  714. nextPage = min(5, self.currentRankingPage + 1)
  715. self.currentRankingPage = nextPage
  716. self.RefreshRankingInfo()
  717.  
  718. def OnClickRankingLastNextButton(self):
  719. self.currentRankingPage = 5
  720. self.RefreshRankingInfo()
  721.  
  722. def ClickPageButton(self, pageIndex):
  723. toPage = int(self.pageButtonList[pageIndex].GetText())
  724. if toPage > 5:
  725. return
  726.  
  727. if toPage == self.currentRankingPage:
  728. return
  729.  
  730. self.currentRankingPage = toPage
  731. self.RefreshRankingInfo()
  732.  
  733. def GetPageByPos(self, pos):
  734. return int(pos / 10) + 1
  735.  
  736. def GetRealPos(self, pos):
  737. return ((pos - 1) if pos < 10 else (pos % 10))
  738.  
  739. def AddRanking(self, pos, playerName, finishTime):
  740. page = self.GetPageByPos(pos)
  741. if not self.rankingInfo.has_key(page):
  742. self.rankingInfo[page] = {}
  743.  
  744. realPos = self.GetRealPos(pos)
  745. self.rankingInfo[page][realPos] = { "pos" : pos, "name" : playerName, "time" : finishTime }
  746.  
  747. def RefreshRanking(self):
  748. self.RefreshRankingInfo()
  749.  
  750. if self.loadingBackground:
  751. self.loadingBackground.Hide()
  752.  
  753. if self.loadingAnimation:
  754. self.loadingAnimation.Hide()
  755.  
  756. def RefreshRankingInfo(self):
  757. for image in self.rankingSpecialImages:
  758. if self.currentRankingPage == 1:
  759. image.Show()
  760. else:
  761. image.Hide()
  762.  
  763. if self.rankingInfo.has_key(self.currentRankingPage):
  764. for i in xrange(RANKING_MAX_NUM):
  765. if self.rankingInfo[self.currentRankingPage].has_key(i):
  766. self.rankingTexts[i]["pos"].SetText(str(self.rankingInfo[self.currentRankingPage][i]["pos"]))
  767. self.rankingTexts[i]["name"].SetText(self.rankingInfo[self.currentRankingPage][i]["name"])
  768.  
  769. stringTime = datetime.fromtimestamp(self.rankingInfo[self.currentRankingPage][i]["time"]).strftime('%Y-%m-%d %H:%M')
  770. self.rankingTexts[i]["time"].SetText(str(stringTime))
  771. else:
  772. self.rankingTexts[i]["pos"].SetText("")
  773. self.rankingTexts[i]["name"].SetText("")
  774. self.rankingTexts[i]["time"].SetText("")
  775. else:
  776. for i in xrange(RANKING_MAX_NUM):
  777. self.rankingTexts[i]["pos"].SetText("")
  778. self.rankingTexts[i]["name"].SetText("")
  779. self.rankingTexts[i]["time"].SetText("")
  780.  
  781. self.RefreshPagination()
  782.  
  783. def RefreshPagination(self):
  784. for page in self.pageButtonList:
  785. if int(page.GetText()) == self.currentRankingPage:
  786. page.Down()
  787. page.Disable()
  788. else:
  789. page.SetUp()
  790. page.Enable()
  791.  
  792. def CreateRankingItems(self):
  793. for i in xrange(RANKING_MAX_NUM):
  794. #imageName = ROOT_PATH + "ranking_item_over.tga" if name == player.GetName() else ROOT_PATH + "ranking_item_normal.tga"
  795. itemImage = ui.MakeImageBox(self.rankingWindow, ROOT_PATH + "ranking_item_normal.tga", 3, 25 + (i * 23))
  796. self.rankingImages.append(itemImage)
  797.  
  798. if i < 3:
  799. imageBorder = ui.MakeImageBox(itemImage, ROOT_PATH + "place_%s_border.tga" % (int(i+1)), 0, 0)
  800. self.rankingSpecialImages.append(imageBorder)
  801.  
  802. self.rankingTexts[i] = {
  803. "pos" : ui.MakeTextLine(itemImage, False, False, 21, 9),
  804. "name" : ui.MakeTextLine(itemImage, False, False, 110, 9),
  805. "time" : ui.MakeTextLine(itemImage, False, False, 240, 9)
  806. }
  807.  
  808. if not self.loadingBackground:
  809. self.loadingBackground = ui.ImageBox()
  810. self.loadingBackground.SetParent(self.rankingWindow)
  811. self.loadingBackground.SetPosition(2, 2)
  812. self.loadingBackground.LoadImage(ROOT_PATH + "loading_background.tga")
  813. self.loadingBackground.Show()
  814.  
  815. if not self.loadingAnimation:
  816. self.loadingAnimation = ui.AniImageBox()
  817. self.loadingAnimation.SetParent(self.rankingWindow)
  818. self.loadingAnimation.SetDelay(5)
  819.  
  820. for i in xrange(12):
  821. self.loadingAnimation.AppendImage("d:/ymir work/ui/game/battle_pass/big_loading/%d.tga" % i)
  822.  
  823. self.loadingAnimation.Show()
  824.  
  825. def OnRunMouseWheel(self, nLen):
  826. x, y = self.GetMouseLocalPosition()
  827.  
  828. if not self.scrollBar or not self.scrollBar.IsShow():
  829. return
  830.  
  831. if nLen > 0 and self.scrollBar:
  832. self.scrollBar.OnUp()
  833. else:
  834. self.scrollBar.OnDown()
  835.  
  836. def OverInItem(self, slotPos):
  837. if self.tooltipItem:
  838. self.tooltipItem.ClearToolTip()
  839. if self.rewardDict.has_key(slotPos):
  840. self.tooltipItem.AddItemData(self.rewardDict[slotPos][0], metinSlot = [0 for i in xrange(player.METIN_SOCKET_MAX_NUM)])
  841. self.tooltipItem.ShowToolTip()
  842.  
  843. def OverOutItem(self):
  844. if self.tooltipItem:
  845. self.tooltipItem.HideToolTip()
  846.  
  847. def OnUpdate(self):
  848. if self.currentState == "GENERAL":
  849. if self.generalInfoDict.has_key(3):
  850. if self.battlePassEndTime > 0:
  851. leftTime = localeInfo.SecondToDHMB(self.battlePassEndTime - app.GetGlobalTimeStamp())
  852. self.generalInfoDict[3].SetText("Remaining time: %s" % str(leftTime))
  853.  
  854. def Destroy(self):
  855. self.ClearDictionary()
  856. self.Initialize()
  857.  
  858. def Open(self):
  859. self.SetSize(537, 297)
  860. self.board.SetSize(537, 297)
  861. self.titleBar.SetWidth(522)
  862. self.titleName.SetPosition(522 / 2, 3)
  863.  
  864. for (tabKey, tabButton) in self.tabButtonDict.items():
  865. for tab in tabButton:
  866. tab.Show()
  867.  
  868. self.OnClickTabButton("MISSION")
  869.  
  870. if self.missionList:
  871. self.missionList.SelectMission(1)
  872.  
  873. if self.scrollBar:
  874. missionCount = self.missionList.GetMissionCount()
  875. if missionCount <= 5:
  876. self.scrollBar.Hide()
  877. else:
  878. self.scrollBar.SetScrollStep(float(1.0 / missionCount))
  879.  
  880. self.Show()
  881. self.SetCenterPosition()
  882. self.SetTop()
  883.  
  884. def OpenRanking(self):
  885. self.rankingWindow.Show()
  886. self.missionWindow.Hide()
  887. self.scrollBarWindow.Hide()
  888. self.RefreshRanking()
  889.  
  890. self.SetSize(325, 297)
  891. self.board.SetSize(325, 297)
  892. self.titleBar.SetWidth(310)
  893. self.titleName.SetPosition(310 / 2, 3)
  894.  
  895. for (tabKey, tabButton) in self.tabButtonDict.items():
  896. for tab in tabButton:
  897. tab.Hide()
  898.  
  899. self.Show()
  900. self.SetCenterPosition()
  901. self.SetTop()
  902.  
  903. def Close(self):
  904. if self.tooltipItem:
  905. self.tooltipItem.HideToolTip()
  906.  
  907. self.Hide()
  908.  
  909. def OnPressEscapeKey(self):
  910. self.Close()
  911. return True
  912.  
  913. class BattlePassButton(ui.Window):
  914. def __init__(self):
  915. ui.Window.__init__(self)
  916.  
  917. self.SetPosition(wndMgr.GetScreenWidth() - 110, 175)
  918. self.SetSize(85, 23)
  919.  
  920. self.requestEndTime = 0
  921. self.openButton = None
  922. self.loadingImage = None
  923. self.Initialize()
  924.  
  925. def __del__(self):
  926. ui.Window.__del__(self)
  927.  
  928. def Destroy(self):
  929. self.openButton = None
  930.  
  931. def Initialize(self):
  932. self.openButton = ui.Button()
  933. self.openButton.SetParent(self)
  934. self.openButton.SetPosition(0, 0)
  935. self.openButton.SetUpVisual(ROOT_PATH + "battle_pass_normal.tga")
  936. self.openButton.SetOverVisual(ROOT_PATH + "battle_pass_over.tga")
  937. self.openButton.SetDownVisual(ROOT_PATH + "battle_pass_down.tga")
  938. self.openButton.SetEvent(ui.__mem_func__(self.RequestOpenBattlePass))
  939. self.openButton.Hide()
  940.  
  941. self.loadingImage = ui.AniImageBox()
  942. self.loadingImage.SetParent(self)
  943. self.loadingImage.SetDelay(6)
  944.  
  945. for i in xrange(12):
  946. self.loadingImage.AppendImage(ROOT_PATH + "loading/%d.tga" % int(i))
  947.  
  948. self.loadingImage.SetPosition(0, 0)
  949. self.loadingImage.Hide()
  950.  
  951. def BindInterface(self, interface):
  952. self.interface = interface
  953.  
  954. def RequestOpenBattlePass(self):
  955. if self.interface:
  956. if self.interface.wndBattlePass:
  957. if self.interface.wndBattlePass.IsShow():
  958. self.interface.wndBattlePass.Close()
  959. return
  960.  
  961. net.SendBattlePassAction(1)
  962.  
  963. self.openButton.Hide()
  964. self.loadingImage.Show()
  965. self.requestEndTime = app.GetGlobalTimeStamp() + 5
  966.  
  967. def OnUpdate(self):
  968. if self.requestEndTime > 0:
  969. if self.requestEndTime - app.GetGlobalTimeStamp() <= 0:
  970. self.CompleteLoading()
  971. self.requestEndTime = 0
  972.  
  973. def CompleteLoading(self):
  974. self.requestEndTime = 0
  975. self.openButton.Show()
  976. self.loadingImage.Hide()
  977.  
  978. def ShowButton(self):
  979. if self.openButton:
  980. self.openButton.Show()
  981.  
  982. def HideButton(self):
  983. if self.openButton:
  984. self.openButton.Hide()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement