Advertisement
Guest User

Untitled

a guest
Dec 8th, 2024
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.45 KB | None | 0 0
  1. #(C) 2019 Owsap Productions
  2.  
  3. import app
  4. import ui
  5. import uiToolTip
  6. import grp
  7. import item
  8. import player
  9. import localeInfo
  10. import uiScriptLocale
  11. import uiCommon
  12. import constInfo
  13.  
  14. class DungeonInfo(ui.ScriptWindow):
  15. TOOLTIP_NORMAL_COLOR = grp.GenerateColor(0.9490, 0.9058, 0.7568, 1.0)
  16. TOOLTIP_SPECIAL_COLOR = grp.GenerateColor(1.0, 0.7843, 0.0, 1.0)
  17. ITEM_SLOT_ENABLE = "d:/ymir work/ui/pet/skill_button/skill_enable_button.sub"
  18. MIN_SCROLLBAR_LIST = 10
  19.  
  20. DUNGEON_TYPE = {
  21. 0 : localeInfo.DUNGEON_INFO_TYPE0,
  22. 1 : localeInfo.DUNGEON_INFO_TYPE1,
  23. 2 : localeInfo.DUNGEON_INFO_TYPE2
  24. }
  25.  
  26. DUNGEON_ORGANIZATION = {
  27. 0 : localeInfo.DUNGEON_INFO_ORGANIZATION0,
  28. 1 : localeInfo.DUNGEON_INFO_ORGANIZATION1,
  29. 2 : localeInfo.DUNGEON_INFO_ORGANIZATION2
  30. }
  31.  
  32. DUNGEON_STATUS = {
  33. 0 : localeInfo.DUNGEON_INFO_STATUS0,
  34. 1 : localeInfo.DUNGEON_INFO_STATUS1,
  35. 2 : localeInfo.DUNGEON_INFO_STATUS2
  36. }
  37.  
  38. def __init__(self):
  39. ui.ScriptWindow.__init__(self)
  40.  
  41. self.dungeonIndex = 0
  42. self.dungeonButton = {}
  43. self.dungeonImage = {}
  44. self.dungeonImageIcon = {}
  45. self.dungeonName = {}
  46. self.dungeonStatus = {}
  47. self.dungeonItemToolTip = None
  48. self.questionDialog = None
  49. self.dungeonRankingIndex = None
  50.  
  51. self.isLoaded = False
  52.  
  53. def __del__(self):
  54. ui.ScriptWindow.__del__(self)
  55.  
  56. self.dungeonIndex = 0
  57. self.dungeonButton = {}
  58. self.dungeonImage = {}
  59. self.dungeonImageIcon = {}
  60. self.dungeonName = {}
  61. self.dungeonStatus = {}
  62. self.dungeonItemToolTip = None
  63. self.questionDialog = None
  64. self.dungeonRankingIndex = None
  65.  
  66. self.isLoaded = False
  67.  
  68. def LoadDialog(self):
  69. try:
  70. pyScrLoader = ui.PythonScriptLoader()
  71. pyScrLoader.LoadScriptFile(self, "UIScript/dungeoninfowindow.py")
  72. except:
  73. import exception
  74. exception.Abort("DungeonInfo.LoadDialog.LoadScript")
  75.  
  76. try:
  77. self.dungeonBoard = self.GetChild("DungeonBoard")
  78. self.dungeonBoardTitleBar = self.GetChild("DungeonBoardTitleBar")
  79.  
  80. self.dungeonButtonBoard = self.GetChild("DungeonButtonBoard")
  81. #self.dungeonButtonThinBoard = self.GetChild("DungeonButtonThinBoard")
  82.  
  83. self.dungeonInfoItem = self.GetChild("DungeonInfoItem")
  84. self.dungeonInfoItemSlot = self.GetChild("DungeonInfoItemSlot")
  85.  
  86. self.dungeonScrollBar = self.GetChild("ScrollBar")
  87. self.dungeonInfoBoard = self.GetChild("DungeonInfoBoard")
  88.  
  89. self.dungeonInfoName = self.GetChild("DungeonInfoName")
  90. self.dungeonInfoType = self.GetChild("DungeonInfoType")
  91. self.dungeonInfoOrganization = self.GetChild("DungeonInfoOrganization")
  92. self.dungeonInfoLevelLimit = self.GetChild("DungeonInfoLevelLimit")
  93. self.dungeonInfoPartyMembers = self.GetChild("DungeonInfoPartyMembers")
  94. self.dungeonInfoCooldown = self.GetChild("DungeonInfoCooldown")
  95. self.dungeonInfoDuration = self.GetChild("DungeonInfoDuration")
  96. self.dungeonInfoEntrance = self.GetChild("DungeonInfoEntrance")
  97. self.dungeonInfoStrengthBonus = self.GetChild("DungeonInfoStrengthBonus")
  98. self.dungeonInfoResistanceBonus = self.GetChild("DungeonInfoResistanceBonus")
  99. self.dungeonInfoTotalFinished = self.GetChild("DungeonInfoTotalFinished")
  100. self.dungeonInfoFastestTime = self.GetChild("DungeonInfoFastestTime")
  101. self.dungeonInfoHighestDamage = self.GetChild("DungeonInfoHighestDamage")
  102.  
  103. self.dungeonInfoTeleportButton = self.GetChild("DungeonInfoTeleportButton")
  104. self.closeDungeonBoard = self.GetChild("CloseDungeonBoard")
  105.  
  106. self.dungeonRank1Button = self.GetChild("DungeonRank1Button")
  107. self.dungeonRank2Button = self.GetChild("DungeonRank2Button")
  108. self.dungeonRank3Button = self.GetChild("DungeonRank3Button")
  109.  
  110. except:
  111. import exception
  112. exception.Abort("DungeonInfo.LoadDialog.GetChild")
  113.  
  114. self.dungeonBoardTitleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  115. self.closeDungeonBoard.SetEvent(ui.__mem_func__(self.Close))
  116. self.dungeonInfoTeleportButton.SetEvent(self.TeleportDungeon)
  117.  
  118. self.dungeonInfoItemSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  119. self.dungeonInfoItemSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  120.  
  121. self.dungeonRank1Button.SetEvent(lambda arg = 1: self.OpenRankingBoard(arg))
  122. self.dungeonRank2Button.SetEvent(lambda arg = 2: self.OpenRankingBoard(arg))
  123. self.dungeonRank3Button.SetEvent(lambda arg = 3: self.OpenRankingBoard(arg))
  124.  
  125. self.LoadDungeonButtons()
  126. self.LoadDungeonInfoBoard(self.dungeonIndex)
  127.  
  128. self.isLoaded = True
  129.  
  130. def Close(self):
  131. if 0 != self.dungeonItemToolTip:
  132. self.dungeonItemToolTip.HideToolTip()
  133.  
  134. self.isLoaded = False
  135. self.Hide()
  136.  
  137. def OnPressEscapeKey(self):
  138. self.Close()
  139. return True
  140.  
  141. def Open(self):
  142. if not self.isLoaded:
  143. self.LoadDialog()
  144.  
  145. self.SetCenterPosition()
  146. self.SetTop()
  147. self.Show()
  148.  
  149. def LoadDungeonButtons(self):
  150. if not constInfo.dungeonInfo:
  151. return
  152.  
  153. for index in xrange(min(self.MIN_SCROLLBAR_LIST, len(constInfo.dungeonInfo))):
  154. self.AppendDungeonButton(
  155. index,\
  156. self.dungeonButtonBoard,\
  157. 3, 3 + (38 * index)
  158. )
  159.  
  160. if len(constInfo.dungeonInfo) <= self.MIN_SCROLLBAR_LIST:
  161. self.dungeonScrollBar.SetMiddleBarSize(float(len(constInfo.dungeonInfo)) / float(len(constInfo.dungeonInfo)))
  162. self.dungeonScrollBar.Show()
  163. else:
  164. self.dungeonScrollBar.SetMiddleBarSize(float(self.MIN_SCROLLBAR_LIST) / float(len(constInfo.dungeonInfo)))
  165. self.dungeonScrollBar.Show()
  166.  
  167. self.dungeonScrollBar.SetScrollEvent(self.OnScroll)
  168.  
  169. def OnScroll(self):
  170. button_count = len(self.dungeonButton)
  171. pos = int(self.dungeonScrollBar.GetPos() * (len(constInfo.dungeonInfo) - button_count))
  172.  
  173. self.dungeonButton = {}
  174. self.dungeonImage = {}
  175. self.dungeonImageIcon = {}
  176. self.dungeonName = {}
  177. self.dungeonStatus = {}
  178.  
  179. for idx in xrange(min(self.MIN_SCROLLBAR_LIST, button_count)):
  180. realPos = idx + pos
  181.  
  182. self.AppendDungeonButton(
  183. realPos,\
  184. self.dungeonButtonBoard,\
  185. 3, 3 + (38 * idx)
  186. )
  187.  
  188. if realPos != self.dungeonIndex:
  189. self.dungeonButton[realPos].SetUpVisual("d:/ymir work/ui/game/mailbox/post_default.sub")
  190. self.dungeonButton[realPos].SetOverVisual("d:/ymir work/ui/game/mailbox/post_over.sub")
  191. self.dungeonButton[realPos].SetDownVisual("d:/ymir work/ui/game/mailbox/post_select.sub")
  192.  
  193. def OnRunMouseWheel(self, nLen):
  194. if nLen > 0:
  195. self.dungeonScrollBar.OnUp()
  196. else:
  197. self.dungeonScrollBar.OnDown()
  198.  
  199. def AppendDungeonButton(self, index, parent, x, y):
  200. self.dungeonButton[index] = ui.Button()
  201. self.dungeonButton[index].SetParent(parent)
  202. self.dungeonButton[index].SetUpVisual("d:/ymir work/ui/game/mailbox/post_select.sub")
  203. self.dungeonButton[index].SetOverVisual("d:/ymir work/ui/game/mailbox/post_select.sub")
  204. self.dungeonButton[index].SetDownVisual("d:/ymir work/ui/game/mailbox/post_select.sub")
  205. self.dungeonButton[index].SetPosition(x, y)
  206. self.dungeonButton[index].SetEvent(lambda: self.LoadDungeonInfoBoard(index))
  207. self.dungeonButton[index].Show()
  208.  
  209. self.dungeonImage[index] = ui.ImageBox()
  210. self.dungeonImage[index].SetParent(self.dungeonButton[index])
  211. self.dungeonImage[index].LoadImage("d:/ymir work/ui/game/mailbox/mailbox_icon_empty.sub")
  212. self.dungeonImage[index].SetPosition(1, 2)
  213. self.dungeonImage[index].Show()
  214.  
  215. dungeonMapIndex = constInfo.dungeonInfo[index]['map_index']
  216. dungeonMapName = constInfo.MapNameByIndex(dungeonMapIndex)
  217.  
  218. self.dungeonImageIcon[index] = ui.Button()
  219. self.dungeonImageIcon[index].SetParent(self.dungeonImage[index])
  220. self.dungeonImageIcon[index].SetUpVisual("d:/ymir work/ui/game/dungeon_info/icons/%d.tga" % dungeonMapIndex)
  221. self.dungeonImageIcon[index].SetOverVisual("d:/ymir work/ui/game/dungeon_info/icons/%d.tga" % dungeonMapIndex)
  222. self.dungeonImageIcon[index].SetDownVisual("d:/ymir work/ui/game/dungeon_info/icons/%d.tga" % dungeonMapIndex)
  223. self.dungeonImageIcon[index].SetEvent(lambda: self.LoadDungeonInfoBoard(index))
  224. self.dungeonImageIcon[index].SetPosition(0, 0)
  225. self.dungeonImageIcon[index].Show()
  226.  
  227. self.dungeonName[index] = ui.TextLine()
  228. self.dungeonName[index].SetParent(self.dungeonButton[index])
  229. self.dungeonName[index].SetPosition(40, 10)
  230. self.dungeonName[index].SetText("%s" % dungeonMapName)
  231. self.dungeonName[index].Show()
  232.  
  233. self.dungeonStatus[index] = ui.TextLine()
  234. self.dungeonStatus[index].SetParent(self.dungeonButton[index])
  235. self.dungeonStatus[index].SetPosition(210 - 35, 10)
  236. self.dungeonStatus[index].Show()
  237. self.CheckDungeonStatus(index)
  238.  
  239. def CheckDungeonStatus(self, index):
  240. dungeonStatus = constInfo.dungeonInfo[index]['status']
  241. dungeonMinLevel = constInfo.dungeonInfo[index]['level_limit'][0]
  242. dungeonMaxLevel = constInfo.dungeonInfo[index]['level_limit'][1]
  243.  
  244. if player.GetLevel() < dungeonMinLevel:
  245. self.dungeonStatus[index].SetText(localeInfo.DUNGEON_LEVEL_LIMIT_MIN_PASS)
  246. self.dungeonStatus[index].SetFontColor((255.00 / 255), (0.00 / 255), (0.00 / 255))
  247. elif player.GetLevel() > dungeonMaxLevel:
  248. self.dungeonStatus[index].SetText(localeInfo.DUNGEON_LEVEL_LIMIT_MAX_PASS)
  249. self.dungeonStatus[index].SetFontColor((255.00 / 255), (0.00 / 255), (0.00 / 255))
  250. else:
  251. self.dungeonStatus[index].SetText(self.DUNGEON_STATUS[dungeonStatus])
  252. if dungeonStatus == 1:
  253. self.dungeonStatus[index].SetFontColor((255.00 / 255), (255.00 / 255), (51.00 / 255))
  254. elif dungeonStatus == 2:
  255. self.dungeonStatus[index].SetFontColor((255.00 / 255), (0.00 / 255), (0.00 / 255))
  256. else:
  257. self.dungeonStatus[index].SetFontColor((0.00 / 255), (255.00 / 255), (0.00 / 255))
  258.  
  259. def LoadDungeonInfoBoard(self, index):
  260. self.dungeonIndex = index
  261. dungeonInfo = constInfo.dungeonInfo
  262.  
  263. self.dungeonButton[self.dungeonIndex].SetUpVisual("d:/ymir work/ui/game/mailbox/post_select.sub")
  264. self.dungeonButton[self.dungeonIndex].SetOverVisual("d:/ymir work/ui/game/mailbox/post_select.sub")
  265. self.dungeonButton[self.dungeonIndex].SetDownVisual("d:/ymir work/ui/game/mailbox/post_select.sub")
  266.  
  267. pos = int(self.dungeonScrollBar.GetPos() * (len(dungeonInfo) - len(self.dungeonButton)))
  268. for idx in xrange(len(self.dungeonButton)):
  269. realPos = idx + pos
  270. if realPos != self.dungeonIndex:
  271. self.dungeonButton[realPos].SetUpVisual("d:/ymir work/ui/game/mailbox/post_default.sub")
  272. self.dungeonButton[realPos].SetOverVisual("d:/ymir work/ui/game/mailbox/post_over.sub")
  273. self.dungeonButton[realPos].SetDownVisual("d:/ymir work/ui/game/mailbox/post_select.sub")
  274.  
  275. dungeonStatus = dungeonInfo[self.dungeonIndex]['status']
  276. dungeonType = dungeonInfo[self.dungeonIndex]['type']
  277. dungeonOrganization = dungeonInfo[self.dungeonIndex]['organization']
  278. dungeonLevelMinLimit = dungeonInfo[self.dungeonIndex]['level_limit'][0]
  279. dungeonLevelMaxLimit = dungeonInfo[self.dungeonIndex]['level_limit'][1]
  280. dungeonPartyMemberMinLimit = dungeonInfo[self.dungeonIndex]['party_member_limit'][0]
  281. dungeonPartyMemberMaxLimit = dungeonInfo[self.dungeonIndex]['party_member_limit'][1]
  282. dungeonMapIndex = dungeonInfo[self.dungeonIndex]['map_index']
  283. dungeonCooldown = dungeonInfo[self.dungeonIndex]['cooldown']
  284. dungeonDuration = dungeonInfo[self.dungeonIndex]['duration']
  285. dungeonEntranceMapIndex = dungeonInfo[self.dungeonIndex]['entrance_map_index']
  286. dungeonStrengthBonus = str(dungeonInfo[self.dungeonIndex]['strength_bonus'])
  287. dungeonResistanceBonus = str(dungeonInfo[self.dungeonIndex]['resistance_bonus'])
  288. dungeonItemVnum = dungeonInfo[self.dungeonIndex]['required_item'][0]
  289. dungeonItemCount = dungeonInfo[self.dungeonIndex]['required_item'][1]
  290. dungeonFinished = dungeonInfo[self.dungeonIndex]['finished']
  291. dungeonFastestTime = dungeonInfo[self.dungeonIndex]['fastest_time']
  292. dungeonHighestDamage = dungeonInfo[self.dungeonIndex]['highest_damage']
  293.  
  294. dungeonMapName = constInfo.MapNameByIndex(dungeonMapIndex)
  295. dungeonEntranceMapName = constInfo.MapNameByIndex(dungeonEntranceMapIndex)
  296.  
  297. self.dungeonInfoBoard.LoadImage("d:/ymir work/ui/game/dungeon_info/background/%d.tga" % dungeonMapIndex)
  298.  
  299. self.dungeonInfoName.SetText("%s" % dungeonMapName)
  300. self.dungeonInfoType.SetText("%s : %s" % (uiScriptLocale.DUNGEON_INFO_TYPE, self.DUNGEON_TYPE[dungeonType]))
  301. self.dungeonInfoOrganization.SetText("%s : %s" % (uiScriptLocale.DUNGEON_INFO_ORGANIZATION, self.DUNGEON_ORGANIZATION[dungeonOrganization]))
  302. self.dungeonInfoLevelLimit.SetText("%s : %d - %d" % (uiScriptLocale.DUNGEON_INFO_LEVEL_LIMIT, dungeonLevelMinLimit, dungeonLevelMaxLimit))
  303. self.dungeonInfoPartyMembers.SetText("%s : %d - %d" % (uiScriptLocale.DUNGEON_INFO_PARTY_MEMBERS, dungeonPartyMemberMinLimit, dungeonPartyMemberMaxLimit))
  304. self.dungeonInfoCooldown.SetText("%s : %s" % (uiScriptLocale.DUNGEON_INFO_COOLDOWN, self.FormatTime(dungeonCooldown)))
  305. self.dungeonInfoDuration.SetText("%s : %s" % (uiScriptLocale.DUNGEON_INFO_DURATION, self.FormatTime(dungeonDuration)))
  306. self.dungeonInfoEntrance.SetText("%s : %s" % (uiScriptLocale.DUNGEON_INFO_ENTRANCE, dungeonEntranceMapName))
  307. self.dungeonInfoStrengthBonus.SetText("%s : %s" % (uiScriptLocale.DUNGEON_INFO_STRENGTH, dungeonStrengthBonus))
  308. self.dungeonInfoResistanceBonus.SetText("%s : %s" % (uiScriptLocale.DUNGEON_INFO_RESISTANCE, dungeonResistanceBonus))
  309. self.dungeonInfoTotalFinished.SetText("%s : %d" % (uiScriptLocale.DUNGEON_INFO_TOTAL_FINISHED, dungeonFinished))
  310. self.dungeonInfoFastestTime.SetText("%s : %s" % (uiScriptLocale.DUNGEON_INFO_FASTEST_TIME, self.FormatTime(dungeonFastestTime)))
  311. self.dungeonInfoHighestDamage.SetText("%s : %d" % (uiScriptLocale.DUNGEON_INFO_HIGHEST_DAMAGE, dungeonHighestDamage))
  312.  
  313. if dungeonItemVnum > 0:
  314. self.SetItemSlot(dungeonItemVnum, dungeonItemCount)
  315. else:
  316. self.SetItemSlot(0, 0)
  317. self.dungeonInfoItemSlot.SetCoverButton(0, self.ITEM_SLOT_ENABLE, self.ITEM_SLOT_ENABLE, self.ITEM_SLOT_ENABLE, self.ITEM_SLOT_ENABLE, False, False)
  318. self.dungeonInfoItemSlot.SetAlwaysRenderCoverButton(0)
  319.  
  320. def SetItemSlot(self, itemVnum, itemCount):
  321. itemIndex = itemVnum
  322. itemCount = itemCount
  323.  
  324. self.dungeonInfoItemSlot.SetItemSlot(0, itemIndex, itemCount)
  325. item.SelectItem(itemVnum)
  326.  
  327. self.dungeonItemToolTip = uiToolTip.ItemToolTip()
  328. self.dungeonItemToolTip.AppendTextLine(item.GetItemName(), self.TOOLTIP_SPECIAL_COLOR)
  329. self.dungeonItemToolTip.AppendDescription(item.GetItemDescription(), 26)
  330. self.dungeonItemToolTip.AlignHorizonalCenter()
  331.  
  332. def FormatTime(self, seconds):
  333. if seconds == 0:
  334. return localeInfo.DUNGEON_INFO_NONE
  335.  
  336. m, s = divmod(seconds, 60)
  337. h, m = divmod(m, 60)
  338.  
  339. return "%d:%02d:%02d" % (h, m, s)
  340.  
  341. def OverInItem(self):
  342. if 0 != self.dungeonItemToolTip:
  343. self.dungeonItemToolTip.ShowToolTip()
  344.  
  345. def OverOutItem(self):
  346. if 0 != self.dungeonItemToolTip:
  347. self.dungeonItemToolTip.HideToolTip()
  348.  
  349. def TeleportDungeon(self):
  350. mapIndex = constInfo.dungeonInfo[self.dungeonIndex]['map_index']
  351. mapName = constInfo.MapNameByIndex(mapIndex)
  352.  
  353. self.questionDialog = uiCommon.QuestionDialogWithTimeLimit()
  354. self.questionDialog.Open(localeInfo.DUNGEON_INFO_DO_YOU_TELEPORT % mapName, 5)
  355. self.questionDialog.SetAcceptText(localeInfo.UI_ACCEPT)
  356. self.questionDialog.SetCancelText(localeInfo.UI_DENY)
  357. self.questionDialog.SetAcceptEvent(lambda arg = True: self.AnswerTeleport(arg))
  358. self.questionDialog.SetCancelEvent(lambda arg = False: self.AnswerTeleport(arg))
  359. self.questionDialog.SetCancelOnTimeOver()
  360. self.questionDialog.SetTop()
  361.  
  362. def AnswerTeleport(self, answer):
  363. if not self.questionDialog:
  364. return
  365.  
  366. if answer == True:
  367. import event
  368.  
  369. dungeonMapCoords = constInfo.dungeonInfo[self.dungeonIndex]['map_coords']
  370. x, y = int(dungeonMapCoords[0]), int(dungeonMapCoords[1])
  371.  
  372. constInfo.dungeonData["quest_cmd"] = "WARP#%d#%d" % (x, y)
  373. event.QuestButtonClick(int(constInfo.dungeonData["quest_index"]))
  374.  
  375. self.questionDialog.Close()
  376. self.questionDialog = None
  377.  
  378. def OpenRankingBoard(self, rankType):
  379. if rankType > 0:
  380. mapIndex = constInfo.dungeonInfo[self.dungeonIndex]['map_index']
  381.  
  382. import event
  383. constInfo.dungeonData["quest_cmd"] = "RANKING#%d#%d" % (mapIndex, rankType)
  384. constInfo.dungeonRanking["ranking_type"] = rankType
  385. event.QuestButtonClick(int(constInfo.dungeonData["quest_index"]))
  386.  
  387. def OnUpdate(self):
  388. if constInfo.dungeonInfo and self.dungeonIndex:
  389. if self.dungeonButton:
  390. for idx in xrange(len(self.dungeonButton)):
  391. self.CheckDungeonStatus(idx)
  392.  
  393. class DungeonRank(ui.ScriptWindow):
  394. SLOT_RANKING = 0
  395. SLOT_PLAYER_NAME = 1
  396. SLOT_PLAYER_LEVEL = 2
  397. SLOT_POINT_TYPE = 3
  398.  
  399. MAX_LINE_COUNT = 5
  400.  
  401. def __init__(self):
  402. ui.ScriptWindow.__init__(self)
  403.  
  404. self.NowStartLineNumber = 0
  405. self.dungeonRankingScrollBar = None
  406. self.ResultButtonList = []
  407. self.ResultSlotList = {}
  408. self.MyResultSlotList = []
  409.  
  410. self.isLoaded = False
  411.  
  412. def __del__(self):
  413. ui.ScriptWindow.__del__(self)
  414.  
  415. self.NowStartLineNumber = 0
  416. self.dungeonRankingScrollBar = None
  417. self.ResultButtonList = []
  418. self.ResultSlotList = {}
  419. self.MyResultSlotList = []
  420.  
  421. self.isLoaded = False
  422.  
  423. def LoadDialog(self):
  424. try:
  425. pyScrLoader = ui.PythonScriptLoader()
  426. pyScrLoader.LoadScriptFile(self, "UIScript/dungeonrankingwindow.py")
  427. except:
  428. import exception
  429. exception.Abort("DungeonRank.LoadDialog.LoadScript")
  430.  
  431. try:
  432. self.dungeonRankingTitleBar = self.GetChild("DungeonRankingTitleBar")
  433. self.dungeonRankingTitleName = self.GetChild("DungeonRankingTitleName")
  434. self.dungeonRankingScrollBar = self.GetChild("DungeonRankingScrollBar")
  435.  
  436. self.dungeonRankingResultPosition = self.GetChild("ResultRanking")
  437. self.dungeonRankingResultName = self.GetChild("ResultName")
  438. self.dungeonRankingResultLevel = self.GetChild("ResultLevel")
  439. self.dungeonRankingResultPoints = self.GetChild("ResultPoints")
  440.  
  441. except:
  442. import exception
  443. exception.Abort("DungeonRank.__LoadWindow.SetObject")
  444.  
  445. self.dungeonRankingTitleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  446. self.dungeonRankingScrollBar.SetScrollEvent(ui.__mem_func__(self.OnScrollControl))
  447.  
  448. self.MakeUiBoard()
  449. self.RefreshDungeonRanking()
  450.  
  451. self.isLoaded = True
  452.  
  453. def MakeUiBoard(self):
  454. try:
  455. yPos = 0
  456. for i in range(0, self.MAX_LINE_COUNT+1):
  457. yPos = 65 + i * 24
  458. if i == 5:
  459. yPos += 10
  460.  
  461. ## ¼øÀ§
  462. RankingSlotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/parameter_slot_00.sub", 23, yPos)
  463. RankingSlotImage.SetAlpha(0)
  464. RankingSlot = ui.MakeTextLine(RankingSlotImage)
  465. self.Children.append(RankingSlotImage)
  466. self.Children.append(RankingSlot)
  467.  
  468. ## ±æµå¸í
  469. GuildNameImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/parameter_slot_04.sub", 77, yPos)
  470. GuildNameImage.SetAlpha(0)
  471. GuildNameSlot = ui.MakeTextLine(GuildNameImage)
  472. self.Children.append(GuildNameImage)
  473. self.Children.append(GuildNameSlot)
  474.  
  475. ## Âü¿©Àοø
  476. MemberCountSlotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/parameter_slot_00.sub", 205, yPos)
  477. MemberCountSlotImage.SetAlpha(0)
  478. MemberCountSlot = ui.MakeTextLine(MemberCountSlotImage)
  479. self.Children.append(MemberCountSlotImage)
  480. self.Children.append(MemberCountSlot)
  481.  
  482. ## Ŭ¸®¾î ½Ã°£
  483. ClearTimeSlotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/parameter_slot_00.sub", 270, yPos)
  484. ClearTimeSlotImage.SetAlpha(0)
  485. ClearTimeSlot = ui.MakeTextLine(ClearTimeSlotImage)
  486. self.Children.append(ClearTimeSlotImage)
  487. self.Children.append(ClearTimeSlot)
  488.  
  489. if i < self.MAX_LINE_COUNT:
  490. tempguildlankingslotlist = []
  491. tempguildlankingslotlist.append(RankingSlot)
  492.  
  493. tempguildlankingslotlist.append(GuildNameSlot)
  494. tempguildlankingslotlist.append(MemberCountSlot)
  495. tempguildlankingslotlist.append(ClearTimeSlot)
  496. self.ResultSlotList[i] = tempguildlankingslotlist
  497. else:
  498. self.MyResultSlotList.append(RankingSlot)
  499. self.MyResultSlotList.append(GuildNameSlot)
  500. self.MyResultSlotList.append(MemberCountSlot)
  501. self.MyResultSlotList.append(ClearTimeSlot)
  502.  
  503. ## °á°ú ¸ñ·Ï ¹öÆ°
  504. itemSlotButtonImage = ui.MakeButton(self, 21, yPos, "", "d:/ymir work/ui/game/guild/dragonlairranking/", "ranking_list_button01.sub", "ranking_list_button02.sub", "ranking_list_button02.sub")
  505. itemSlotButtonImage.Show()
  506. itemSlotButtonImage.Disable()
  507. self.Children.append(itemSlotButtonImage)
  508.  
  509. if i < self.MAX_LINE_COUNT:
  510. self.ResultButtonList.append(itemSlotButtonImage)
  511.  
  512. except:
  513. import exception
  514. exception.Abort("GuildWindow_GuildDragonLairWindow.MakeUiBoard")
  515.  
  516. def RefreshDungeonRanking(self):
  517. self.AllClear()
  518.  
  519. dungeonRankingType = constInfo.dungeonRanking["ranking_type"]
  520. dungeonRankingList = constInfo.dungeonRanking["ranking_list"]
  521. dungeonMyRanking = constInfo.dungeonRanking["my_ranking"]
  522.  
  523. if not dungeonRankingList:
  524. return
  525.  
  526. if dungeonRankingType == 1:
  527. self.dungeonRankingTitleName.SetText(uiScriptLocale.DUNGEON_RANKING_TYPE1)
  528. self.dungeonRankingResultPoints.SetText(uiScriptLocale.DUNGEON_RANKING_POINT_TYPE1)
  529. elif dungeonRankingType == 2:
  530. self.dungeonRankingTitleName.SetText(uiScriptLocale.DUNGEON_RANKING_TYPE2)
  531. self.dungeonRankingResultPoints.SetText(uiScriptLocale.DUNGEON_RANKING_POINT_TYPE2)
  532. elif dungeonRankingType == 3:
  533. self.dungeonRankingTitleName.SetText(uiScriptLocale.DUNGEON_RANKING_TYPE3)
  534. self.dungeonRankingResultPoints.SetText(uiScriptLocale.DUNGEON_RANKING_POINT_TYPE3)
  535.  
  536. for line, ResultSlotList in self.ResultSlotList.items():
  537. nowindex = line + self.NowStartLineNumber
  538.  
  539. if nowindex >= len(dungeonRankingList):
  540. break
  541.  
  542. rankingData = dungeonRankingList[nowindex]
  543.  
  544. ResultSlotList[self.SLOT_RANKING].SetText(str(nowindex+1))
  545. ResultSlotList[self.SLOT_PLAYER_NAME].SetText(str(rankingData[0]))
  546. ResultSlotList[self.SLOT_PLAYER_LEVEL].SetText(str(rankingData[1]))
  547. if dungeonRankingType == 2:
  548. ResultSlotList[self.SLOT_POINT_TYPE].SetText(self.FormatTime(rankingData[2]))
  549. else:
  550. ResultSlotList[self.SLOT_POINT_TYPE].SetText(str(rankingData[2]))
  551. self.ResultButtonList[line].Show()
  552.  
  553. if len(dungeonMyRanking) > 0:
  554. myrankingData = dungeonMyRanking[0]
  555.  
  556. self.MyResultSlotList[self.SLOT_RANKING].SetText(str(myrankingData[0]))
  557. self.MyResultSlotList[self.SLOT_PLAYER_NAME].SetText(str(myrankingData[1]))
  558. self.MyResultSlotList[self.SLOT_PLAYER_LEVEL].SetText(str(myrankingData[2]))
  559. if dungeonRankingType == 2:
  560. self.MyResultSlotList[self.SLOT_POINT_TYPE].SetText(self.FormatTime(myrankingData[3]))
  561. else:
  562. self.MyResultSlotList[self.SLOT_POINT_TYPE].SetText(str(myrankingData[3]))
  563. else:
  564. self.MyResultSlotList[self.SLOT_RANKING].SetText("-")
  565. self.MyResultSlotList[self.SLOT_PLAYER_NAME].SetText("-")
  566. self.MyResultSlotList[self.SLOT_PLAYER_LEVEL].SetText("-")
  567. self.MyResultSlotList[self.SLOT_POINT_TYPE].SetText("-")
  568.  
  569. self.dungeonRankingScrollBar.SetMiddleBarSize(float(self.MAX_LINE_COUNT) / float(self.CheckNowItemCount()))
  570.  
  571. def FormatTime(self, seconds):
  572. if seconds == 0:
  573. return 0
  574.  
  575. m, s = divmod(seconds, 60)
  576. h, m = divmod(m, 60)
  577.  
  578. return "%d:%02d:%02d" % (h, m, s)
  579.  
  580. def AllClear(self):
  581. for line, ResultSlotList in self.ResultSlotList.items():
  582. ResultSlotList[self.SLOT_RANKING].SetText("")
  583. ResultSlotList[self.SLOT_PLAYER_NAME].SetText("")
  584. ResultSlotList[self.SLOT_PLAYER_LEVEL].SetText("")
  585. ResultSlotList[self.SLOT_POINT_TYPE].SetText("")
  586. self.ResultButtonList[line].SetUp()
  587. self.ResultButtonList[line].Hide()
  588.  
  589. self.MyResultSlotList[self.SLOT_RANKING].SetText("-")
  590. self.MyResultSlotList[self.SLOT_PLAYER_NAME].SetText("-")
  591. self.MyResultSlotList[self.SLOT_PLAYER_LEVEL].SetText("-")
  592. self.MyResultSlotList[self.SLOT_POINT_TYPE].SetText("-")
  593.  
  594. def Close(self):
  595. self.isLoaded = False
  596. self.Hide()
  597.  
  598. def OnPressEscapeKey(self):
  599. self.Close()
  600. return True
  601.  
  602. def CheckNowItemCount(self):
  603. if len(constInfo.dungeonRanking["ranking_list"]) <= self.MAX_LINE_COUNT:
  604. return self.MAX_LINE_COUNT
  605. else:
  606. return len(constInfo.dungeonRanking["ranking_list"])
  607.  
  608. def OnScrollControl(self):
  609. nowitemcount = 0
  610. if len(constInfo.dungeonRanking["ranking_list"]) <= self.MAX_LINE_COUNT :
  611. nowitemcount = 0
  612. else:
  613. nowitemcount = (len(constInfo.dungeonRanking["ranking_list"]) - self.MAX_LINE_COUNT)
  614.  
  615. pos = self.dungeonRankingScrollBar.GetPos() * nowitemcount
  616.  
  617. if not int(pos) == self.NowStartLineNumber:
  618. self.NowStartLineNumber = int(pos)
  619. self.RefreshDungeonRanking()
  620.  
  621. def OnRunMouseWheel(self, nLen):
  622. if nLen > 0:
  623. self.dungeonRankingScrollBar.OnUp()
  624. else:
  625. self.dungeonRankingScrollBar.OnDown()
  626.  
  627. def Open(self):
  628. if not self.isLoaded:
  629. self.LoadDialog()
  630.  
  631. self.NowStartLineNumber = 0
  632. self.dungeonRankingScrollBar.SetPos(0)
  633.  
  634. self.SetCenterPosition()
  635. self.SetTop()
  636. self.Show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement