Guest User

uiCharacter.py

a guest
Jul 22nd, 2025
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 73.52 KB | None | 0 0
  1. import ui
  2. import uiScriptLocale
  3. import app
  4. import net
  5. import dbg
  6. import snd
  7. import player
  8. import mouseModule
  9. import wndMgr
  10. import skill
  11. import playerSettingModule
  12. import quest
  13. import localeInfo
  14. import uiToolTip
  15. import constInfo
  16. import emotion
  17. import chr
  18. if app.ENABLE_DETAILS_UI:
  19. import uiCharacterDetails
  20.  
  21.  
  22. SHOW_ONLY_ACTIVE_SKILL = False
  23. SHOW_LIMIT_SUPPORT_SKILL_LIST = []
  24. HIDE_SUPPORT_SKILL_POINT = False
  25.  
  26. if localeInfo.IsYMIR():
  27. SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140,141,142]
  28. if not localeInfo.IsCHEONMA():
  29. HIDE_SUPPORT_SKILL_POINT = True
  30. SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140,141,142]
  31. elif localeInfo.IsJAPAN() or (localeInfo.IsEUROPE() and app.GetLocalePath() != "locale/ca") and (localeInfo.IsEUROPE() and app.GetLocalePath() != "locale/br"):
  32. HIDE_SUPPORT_SKILL_POINT = True
  33. SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140]
  34. else:
  35. HIDE_SUPPORT_SKILL_POINT = True
  36.  
  37. FACE_IMAGE_DICT = {
  38. playerSettingModule.RACE_WARRIOR_M : "icon/face/warrior_m.tga",
  39. playerSettingModule.RACE_WARRIOR_W : "icon/face/warrior_w.tga",
  40. playerSettingModule.RACE_ASSASSIN_M : "icon/face/assassin_m.tga",
  41. playerSettingModule.RACE_ASSASSIN_W : "icon/face/assassin_w.tga",
  42. playerSettingModule.RACE_SURA_M : "icon/face/sura_m.tga",
  43. playerSettingModule.RACE_SURA_W : "icon/face/sura_w.tga",
  44. playerSettingModule.RACE_SHAMAN_M : "icon/face/shaman_m.tga",
  45. playerSettingModule.RACE_SHAMAN_W : "icon/face/shaman_w.tga",
  46. }
  47. if app.ENABLE_WOLFMAN_CHARACTER:
  48. FACE_IMAGE_DICT.update({playerSettingModule.RACE_WOLFMAN_M : "icon/face/wolfman_m.tga",})
  49.  
  50. def unsigned32(n):
  51. return n & 0xFFFFFFFFL
  52.  
  53. if app.ENABLE_QUEST_RENEWAL:
  54. __author__ = "Owsap"
  55. __copyright__ = "Copyright (C) 2023, Owsap Development"
  56. __website__ = "https://owsap.dev/"
  57.  
  58. #
  59. # GitHub: https://github.com/Owsap
  60. # M2Dev: https://metin2.dev/profile/544-owsap/
  61. #
  62.  
  63. from _weakref import proxy
  64.  
  65. QUEST_LABEL_TAB_COLOR_IMG_DICT = {
  66. quest.QUEST_TYPE_MAIN : "d:/ymir work/ui/quest_re/tabcolor_1_main.tga",
  67. quest.QUEST_TYPE_SUB : "d:/ymir work/ui/quest_re/tabcolor_2_sub.tga",
  68. quest.QUEST_TYPE_LEVELUP : "d:/ymir work/ui/quest_re/tabcolor_3_levelup.tga",
  69. quest.QUEST_TYPE_EVENT : "d:/ymir work/ui/quest_re/tabcolor_4_event.tga",
  70. quest.QUEST_TYPE_COLLECTION : "d:/ymir work/ui/quest_re/tabcolor_5_collection.tga",
  71. quest.QUEST_TYPE_SYSTEM : "d:/ymir work/ui/quest_re/tabcolor_6_system.tga",
  72. quest.QUEST_TYPE_SCROLL : "d:/ymir work/ui/quest_re/tabcolor_7_scroll.tga",
  73. quest.QUEST_TYPE_DAILY : "d:/ymir work/ui/quest_re/tabcolor_8_daily.tga"
  74. }
  75.  
  76. QUEST_LABEL_NAME_DICT = {
  77. quest.QUEST_TYPE_MAIN : uiScriptLocale.QUEST_UI_TEXT_MAIN,
  78. quest.QUEST_TYPE_SUB : uiScriptLocale.QUEST_UI_TEXT_SUB,
  79. quest.QUEST_TYPE_LEVELUP : uiScriptLocale.QUEST_UI_TEXT_LEVELUP,
  80. quest.QUEST_TYPE_EVENT : uiScriptLocale.QUEST_UI_TEXT_EVENT,
  81. quest.QUEST_TYPE_COLLECTION : uiScriptLocale.QUEST_UI_TEXT_COLLECTION,
  82. quest.QUEST_TYPE_SYSTEM : uiScriptLocale.QUEST_UI_TEXT_SYSTEM,
  83. quest.QUEST_TYPE_SCROLL : uiScriptLocale.QUEST_UI_TEXT_SCROLL,
  84. quest.QUEST_TYPE_DAILY : uiScriptLocale.QUEST_UI_TEXT_DAILY
  85. }
  86.  
  87. class QuestDescObject(ui.Window):
  88. WIDTH = 222
  89. HEIGHT = 15
  90.  
  91. DESC_TEXT_MAX_WIDTH = 130 #202
  92.  
  93. def __init__(self, parent, quest_index, desc_data = None):
  94. ui.Window.__init__(self)
  95.  
  96. self.parent = parent
  97. self.quest_index = quest_index
  98. self.desc_data = desc_data
  99.  
  100. self.quest_text = None
  101. self.quest_string_type = quest.QUEST_STRING_TYPE_NORMAL
  102.  
  103. self.SetParent(parent)
  104.  
  105. # Contents window.
  106. contents_window = ui.Window()
  107. contents_window.SetParent(self)
  108. contents_window.SetSize(self.WIDTH, self.HEIGHT)
  109. contents_window.SetPosition(15, 0)
  110. contents_window.Show()
  111. self.contents_window = contents_window
  112.  
  113. # Contents text line.
  114. contents_textline = ui.TextLine()
  115. contents_textline.SetParent(self.contents_window)
  116. contents_textline.SetText(desc_data)
  117. contents_textline.SetPosition(0, 0)
  118. contents_textline.Show()
  119. self.contents_textline = contents_textline
  120.  
  121. ui.Window.Show(self)
  122.  
  123. def __del__(self):
  124. ui.Window.__del__(self)
  125.  
  126. self.parent = None
  127. self.quest_index = None
  128. self.desc_data = None
  129.  
  130. self.quest_text = None
  131. self.quest_string_type = None
  132.  
  133. def SetQuestText(self, text):
  134. if app.GetTextWidth(text) > self.DESC_TEXT_MAX_WIDTH:
  135. string = text[:self.DESC_TEXT_MAX_WIDTH] + "..."
  136. else:
  137. string = text
  138.  
  139. self.quest_text = text
  140. self.contents_textline.SetText(string)
  141.  
  142. def SetQuestStringType(self, type):
  143. self.quest_string_type = type
  144.  
  145. def __UpdateQuestClock(self):
  146. (last_name, last_time) = quest.GetQuestLastTime(self.quest_index)
  147.  
  148. clock_text = localeInfo.QUEST_UNLIMITED_TIME
  149. if len(last_name) > 0:
  150. if last_time <= 0:
  151. clock_text = localeInfo.QUEST_TIMEOVER
  152. else:
  153. second = int(last_time % 60)
  154. minute = int((last_time / 60) % 60)
  155. hour = int((last_time / 60) / 60) % 24
  156.  
  157. clock_text = last_name + " : "
  158.  
  159. if hour > 0:
  160. clock_text += str(hour) + localeInfo.QUEST_HOUR
  161. clock_text += " "
  162.  
  163. if minute > 0:
  164. clock_text += str(minute) + localeInfo.QUEST_MIN
  165.  
  166. if second > 0 and minute < 1:
  167. clock_text += str(second) + localeInfo.QUEST_SEC
  168.  
  169. self.contents_textline.SetText(clock_text)
  170.  
  171. def OnUpdate(self):
  172. if self.quest_string_type == quest.QUEST_STRING_TYPE_CLOCK:
  173. self.__UpdateQuestClock()
  174.  
  175. class QuestObject(ui.Window):
  176. def __init__(self, parent, quest_index, is_confirmed):
  177. ui.Window.__init__(self)
  178.  
  179. self.parent = parent
  180. self.quest_index = quest_index
  181. self.is_confirmed = is_confirmed
  182.  
  183. self.desc_list = []
  184.  
  185. self.SetParent(self.parent)
  186. self.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.__ClickQuest))
  187.  
  188. # Quest line image.
  189. line = ui.ImageBox()
  190. line.LoadImage("d:/ymir work/ui/quest_re/quest_list_line_01.tga")
  191. line.SetParent(self)
  192. line.Hide()
  193. self.line = line
  194.  
  195. # New quest icon.
  196. new_image = ui.ImageBox()
  197. new_image.SetParent(self)
  198. new_image.AddFlag("not_pick")
  199. new_image.SetPosition(3, 4)
  200. new_image.LoadImage("d:/ymir work/ui/quest_re/quest_new.tga")
  201. if not self.is_confirmed:
  202. new_image.Show()
  203. else:
  204. new_image.Hide()
  205. self.new_image = new_image
  206.  
  207. ui.Window.Hide(self)
  208.  
  209. def __del__(self):
  210. ui.Window.__del__(self)
  211.  
  212. self.parent = None
  213. self.quest_index = 0
  214. self.is_confirmed = False
  215.  
  216. self.desc_list = []
  217.  
  218. def AddLine(self):
  219. if not self.desc_list:
  220. return
  221.  
  222. x, y = self.desc_list[-1].GetLocalPosition()
  223.  
  224. if self.line:
  225. self.line.SetPosition(4, y + 15)
  226. self.line.Show()
  227.  
  228. def RemoveLine(self):
  229. self.line.Hide()
  230.  
  231. def ReplaceDesc(self, desc_list):
  232. self.desc_list = []
  233.  
  234. for i, desc_data in enumerate(desc_list):
  235.  
  236. desc_object = QuestDescObject(self, self.quest_index)
  237. desc_object.SetQuestStringType(i)
  238.  
  239. if i == quest.QUEST_STRING_TYPE_CLOCK:
  240. (clock_last_name, clock_last_time) = desc_data
  241.  
  242. clock_text = localeInfo.QUEST_UNLIMITED_TIME
  243. if len(clock_last_name) > 0:
  244. if clock_last_time <= 0:
  245. clock_text = localeInfo.QUEST_TIMEOVER
  246. else:
  247. quest_last_minute = clock_last_time / 60
  248. quest_last_sec = clock_last_time % 60
  249.  
  250. clock_text = clock_last_name + " : "
  251.  
  252. if quest_last_minute > 0:
  253. clock_text += str(quest_last_minute) + localeInfo.QUEST_MIN
  254. if quest_last_sec > 0:
  255. clock_text += " "
  256.  
  257. if quest_last_sec > 0:
  258. clock_text += str(quest_last_sec) + localeInfo.QUEST_SEC
  259.  
  260. desc_object.SetQuestText(clock_text)
  261. self.desc_list.append(desc_object)
  262.  
  263. elif i == quest.QUEST_STRING_TYPE_COUNT:
  264. (quest_counter_name, quest_counter_value) = desc_data
  265.  
  266. if len(quest_counter_name) > 0:
  267. counter_text = ("%s : %d" % (quest_counter_name, quest_counter_value))
  268.  
  269. desc_object.SetQuestText(counter_text)
  270. self.desc_list.append(desc_object)
  271.  
  272. else:
  273. quest_name = desc_data
  274.  
  275. desc_object.SetQuestText(quest_name)
  276. self.desc_list.append(desc_object)
  277.  
  278. def SetPositionIndex(self, pos):
  279. self.quest_index = pos
  280.  
  281. def SetConfirmed(self, is_confirmed):
  282. self.is_confirmed = is_confirmed
  283. if not self.is_confirmed:
  284. self.new_image.Show()
  285. else:
  286. self.new_image.Hide()
  287.  
  288. def IsConfirmed(self):
  289. return self.is_confirmed
  290.  
  291. def Arrange(self):
  292. y = 0
  293. for desc_obj in self.desc_list:
  294. desc_obj.SetPosition(0, y)
  295. y += 15 # Add space between text lines.
  296.  
  297. def __ClickQuest(self):
  298. import event
  299. event.QuestButtonClick(-2147483648 + self.quest_index)
  300.  
  301. # Remove new image from quest object.
  302. self.is_confirmed = True
  303. self.new_image.Hide()
  304.  
  305. if self.parent:
  306. self.parent.CheckNewImage()
  307.  
  308. def GetDescCount(self):
  309. return len(self.desc_list)
  310.  
  311. class QuestCategory(ui.Window):
  312. BOARD_WIDTH = 222
  313. if app.ENABLE_CONQUEROR_LEVEL:
  314. BOARD_HEIGHT = 340
  315. else:
  316. BOARD_HEIGHT = 297
  317.  
  318. TAB_WIDTH = 222
  319. TAB_HEIGHT = 22
  320.  
  321. def __init__(self, clipping_mask_window, parent, quest_type):
  322. self.clipping_mask_window = clipping_mask_window
  323. self.parent = parent
  324. self.quest_type = quest_type
  325.  
  326. # Category position and height.
  327. self.x = 0
  328. self.y = 0
  329. self.height = 0
  330.  
  331. # Dictionary that contains all the quests of this category.
  332. self.quest_dict = {}
  333.  
  334. # Check if the category is on or off.
  335. self.is_on = False
  336.  
  337. ui.Window.__init__(self)
  338.  
  339. self.SetParent(self.clipping_mask_window)
  340. self.SetSize(self.BOARD_WIDTH, self.BOARD_HEIGHT)
  341.  
  342. # Name window that contains all the children.
  343. name_window = ui.Window()
  344. name_window.SetParent(self)
  345. name_window.SetPosition(0, 0)
  346. name_window.SetSize(self.TAB_WIDTH, self.TAB_HEIGHT)
  347. name_window.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.__ClickLabel))
  348. name_window.Show()
  349. self.name_window = name_window
  350.  
  351. # Image of the label.
  352. label_image = ui.ImageBox()
  353. label_image.SetParent(self.name_window)
  354. label_image.AddFlag("not_pick")
  355. label_image.SetPosition(0, 0)
  356. label_image.SetSize(10, 10)
  357. label_image.LoadImage("d:/ymir work/ui/quest_re/quest_tab_01.tga")
  358. if localeInfo.IsARABIC():
  359. label_image.LeftRightReverse()
  360. label_image.Show()
  361. self.label_image = label_image
  362.  
  363. # Opened image icon.
  364. opened_image = ui.ImageBox()
  365. opened_image.SetParent(self.name_window)
  366. opened_image.AddFlag("not_pick")
  367. if localeInfo.IsARABIC():
  368. opened_image.SetPosition(204, 2)
  369. else:
  370. opened_image.SetPosition(4, 2)
  371. opened_image.LoadImage("d:/ymir work/ui/quest_re/quest_up.tga")
  372. opened_image.Hide()
  373. self.opened_image = opened_image
  374.  
  375. # Closed image icon.
  376. closed_image = ui.ImageBox()
  377. closed_image.SetParent(self.name_window)
  378. closed_image.AddFlag("not_pick")
  379. if localeInfo.IsARABIC():
  380. closed_image.SetPosition(204, 2)
  381. else:
  382. closed_image.SetPosition(4, 2)
  383. closed_image.LoadImage("d:/ymir work/ui/quest_re/quest_down.tga")
  384. closed_image.Show()
  385. self.closed_image = closed_image
  386.  
  387. # Quest exist image icon.
  388. quest_exist_image = ui.ImageBox()
  389. quest_exist_image.SetParent(self.name_window)
  390. quest_exist_image.AddFlag("not_pick")
  391. if localeInfo.IsARABIC():
  392. quest_exist_image.SetPosition(21, 12)
  393. else:
  394. quest_exist_image.SetPosition(188, 12)
  395. if quest_type in QUEST_LABEL_TAB_COLOR_IMG_DICT:
  396. quest_exist_image.LoadImage(QUEST_LABEL_TAB_COLOR_IMG_DICT[quest_type])
  397. quest_exist_image.Show()
  398. else:
  399. quest_exist_image.Hide()
  400. self.quest_exist_image = quest_exist_image
  401.  
  402. # Label name.
  403. name_textline = ui.TextLine()
  404. name_textline.SetParent(self.name_window)
  405. if localeInfo.IsARABIC():
  406. name_textline.SetPosition(28, 2)
  407. name_textline.SetWindowHorizontalAlignRight()
  408. name_textline.SetHorizontalAlignLeft()
  409. else:
  410. name_textline.SetPosition(24, 2)
  411. if quest_type in QUEST_LABEL_NAME_DICT:
  412. name_textline.SetText(QUEST_LABEL_NAME_DICT[quest_type])
  413. else:
  414. name_textline.SetText("")
  415. name_textline.SetPackedFontColor(0xffCEC6B5)
  416. name_textline.Show()
  417. self.name_textline = name_textline
  418.  
  419. # New quest icon (green dot)
  420. new_image = ui.ImageBox()
  421. new_image.SetParent(self.name_window)
  422. new_image.AddFlag("not_pick")
  423. new_image.LoadImage("d:/ymir work/ui/quest_re/quest_new.tga")
  424. if quest_type in QUEST_LABEL_NAME_DICT:
  425. new_image.SetPosition(app.GetTextWidth(QUEST_LABEL_NAME_DICT[quest_type]) + 30, 5)
  426. new_image.Show()
  427. else:
  428. new_image.SetPosition(0, 0)
  429. new_image.Hide()
  430. self.new_image = new_image
  431.  
  432. self.__HideQuestExistImage()
  433. self.__HideNewImage()
  434.  
  435. ui.Window.Show(self)
  436.  
  437. def __del__(self):
  438. ui.Window.__del__(self)
  439.  
  440. self.clipping_mask_window = None
  441. self.parent = None
  442. self.quest_type = 0
  443.  
  444. self.x = 0
  445. self.y = 0
  446. self.height = 0
  447.  
  448. self.quest_dict = {}
  449. self.is_on = False
  450.  
  451. self.name_window = None
  452. self.label_image = None
  453. self.opened_image = None
  454. self.closed_image = None
  455. self.quest_exist_image = None
  456. self.name_textline = None
  457. self.new_image = None
  458.  
  459. def __ShowClosedImg(self):
  460. self.opened_image.Hide()
  461. self.closed_image.Show()
  462.  
  463. def __ShowOpendImg(self):
  464. self.closed_image.Hide()
  465. self.opened_image.Show()
  466.  
  467. def __ShowQuestExistImage(self):
  468. self.quest_exist_image.Show()
  469.  
  470. def __HideQuestExistImage(self):
  471. self.quest_exist_image.Hide()
  472.  
  473. def __ShowNewImage(self):
  474. self.new_image.Show()
  475.  
  476. def __HideNewImage(self):
  477. self.new_image.Hide()
  478.  
  479. def OpenCategory(self):
  480. self.__ClickLabel()
  481.  
  482. def CloseCategory(self):
  483. self.is_on = False
  484. for key, item in self.quest_dict.items():
  485. item.Hide()
  486.  
  487. self.__ShowClosedImg()
  488. self.__Arrange()
  489.  
  490. # When clicking on the tab label.
  491. def __ClickLabel(self):
  492. # Prevent trying to open an empty category.
  493. if not self.quest_dict:
  494. self.is_on = False
  495. self.__ShowClosedImg()
  496. return
  497.  
  498. if self.is_on:
  499. self.__ShowClosedImg()
  500. self.is_on = False
  501. else:
  502. self.__ShowOpendImg()
  503. self.is_on = True
  504.  
  505. # Show all the quests from the category.
  506. for key, item in self.quest_dict.items():
  507. item.Show() if self.is_on else item.Hide()
  508.  
  509. self.__Arrange()
  510.  
  511. # Check if there are any confirmed quests in the category.
  512. def CheckNewImage(self):
  513. for key, item in self.quest_dict.items():
  514. if not item.IsConfirmed():
  515. self.__ShowNewImage()
  516. break
  517.  
  518. self.__HideNewImage()
  519.  
  520. # Replace quests in the category.
  521. def ReplaceQuest(self, quest_index, is_confirmed, desc_data_list):
  522. if not quest_index in self.quest_dict:
  523. quest_obj = QuestObject(self, quest_index, is_confirmed)
  524. else:
  525. quest_obj = self.quest_dict[quest_index]
  526.  
  527. quest_obj.ReplaceDesc(desc_data_list)
  528. if app.ENABLE_CLIP_MASK:
  529. quest_obj.SetClippingMaskWindow(self.clipping_mask_window)
  530.  
  531. if self.is_on:
  532. quest_obj.Show()
  533.  
  534. self.quest_dict.update({ quest_index : quest_obj })
  535. if self.quest_dict:
  536. self.__ShowQuestExistImage()
  537.  
  538. if not is_confirmed:
  539. self.__ShowNewImage()
  540. else:
  541. self.__HideNewImage()
  542.  
  543. self.__Arrange()
  544.  
  545. # Delete quests in the category.
  546. def DeleteQuest(self, quest_index):
  547. if quest_index in self.quest_dict:
  548. self.quest_dict[quest_index].Hide()
  549. del self.quest_dict[quest_index]
  550.  
  551. # Check if there are any quests in the dictionary.
  552. if not self.quest_dict:
  553. self.is_on = False
  554.  
  555. self.__ShowClosedImg()
  556.  
  557. self.__HideNewImage()
  558. self.__HideQuestExistImage()
  559.  
  560. self.__Arrange()
  561.  
  562. # Method of arranging all the quests in the category.
  563. def __Arrange(self):
  564. y = self.TAB_HEIGHT # Initial vertical position.
  565. for index, (key, item) in enumerate(self.quest_dict.items()):
  566. quest_desc_count = item.GetDescCount() # Quest description count.
  567. quest_desc_height = quest_desc_count * 15 # Quest description height.
  568. quest_desc_height += 5 # Add and extra gap for the line separator.
  569.  
  570. item.SetSize(self.TAB_WIDTH, quest_desc_height)
  571. item.SetPosition(0, y)
  572. item.Arrange() # Arrange the quest description text lines.
  573.  
  574. # Add line at the penultimate quest object.
  575. if index < len(self.quest_dict) - 1:
  576. item.AddLine()
  577. else:
  578. item.RemoveLine()
  579.  
  580. # Increase vertical position by quest description height.
  581. y += quest_desc_height
  582.  
  583. # Call the parent method for arranging the category positions.
  584. if self.parent:
  585. self.parent.ChildHeightChanged(self.quest_type)
  586.  
  587. # Unused.
  588. def __height_resize_post_process(self, original_function):
  589. pass
  590.  
  591. def IsOn(self):
  592. return self.is_on
  593.  
  594. # Returns the total height of the quest object based on
  595. # each quest description.
  596. def GetQuestObjectHeight(self):
  597. height = 0
  598. for index, (key, item) in enumerate(self.quest_dict.items()):
  599. height += item.GetDescCount() * 15 # Quest description height.
  600. height += 5 # Add and extra gap for the line separator.
  601. return height
  602.  
  603. # Updates the vertical position for the scroll.
  604. def UpdateYPosition(self, pos):
  605. self.SetPosition(self.x, self.y + self.height - pos)
  606.  
  607. def UpdatePosition(self, x, y):
  608. self.x = x; self.y = y
  609. self.SetPosition(self.x, self.y)
  610.  
  611. def SetHeight(self, height):
  612. self.height = height
  613. self.SetPosition(self.x, self.y + self.height)
  614.  
  615. def GetPosition(self):
  616. return self.x, self.y
  617.  
  618. def GetHeight(self):
  619. return self.height
  620.  
  621. class QuestCategoryGroup(ui.Window):
  622. LABEL_HEIGHT = 22
  623. SCROLL_STEP = 18
  624. if app.ENABLE_CONQUEROR_LEVEL:
  625. BOARD_HEIGHT = 340
  626. else:
  627. BOARD_HEIGHT = 297
  628.  
  629. # The constructor method that initializes everything.
  630. def __init__(self, clipping_mask_window, scroll_object):
  631. ui.Window.__init__(self)
  632.  
  633. self.clipping_mask_window = proxy(clipping_mask_window)
  634.  
  635. self.scroll = scroll_object
  636. self.scroll.SetScrollEvent(ui.__mem_func__(self.__ScrollEvent))
  637. self.scroll.SetScrollStep(self.SCROLL_STEP)
  638.  
  639. self.diff_height = 0
  640.  
  641. # Dictionary that contains all the categories.
  642. self.quest_category_dict = {}
  643. for quest_type in QUEST_LABEL_NAME_DICT.keys():
  644. self.quest_category_dict[quest_type] = QuestCategory(self.clipping_mask_window, self, quest_type)
  645. if app.ENABLE_CLIP_MASK:
  646. self.quest_category_dict[quest_type].SetClippingMaskWindow(self.clipping_mask_window)
  647.  
  648. # Arrange all the categories initial position.
  649. self.__Arrange()
  650.  
  651. # Refresh the scroll for its initial position.
  652. self.__RefreshScroll()
  653.  
  654. # The destructor method which is called as soon as
  655. # all references of the object are deleted.
  656. def __del__(self):
  657. ui.Window.__del__(self)
  658.  
  659. self.clipping_mask_window = None
  660. self.scroll = None
  661. self.diff_height = 0
  662.  
  663. self.quest_category_dict = {}
  664.  
  665. # This will replace (update) any quest in a category.
  666. def ReplaceQuest(self, quest_type, quest_index, is_confirmed, desc_data_list):
  667. if quest_type in self.quest_category_dict:
  668. self.quest_category_dict[quest_type].ReplaceQuest(quest_index, is_confirmed, desc_data_list)
  669.  
  670. # Delete and hide the quest from the category.
  671. def DeleteQuest(self, quest_type, quest_index):
  672. if quest_type in self.quest_category_dict:
  673. self.quest_category_dict[quest_type].DeleteQuest(quest_index)
  674.  
  675. # This method is called from the QuestCategory class
  676. # which arranges all the category positions.
  677. def ChildHeightChanged(self, quest_type):
  678. self.__ArrangeAfter(quest_type)
  679. self.__AdjustScrollPos(quest_type)
  680.  
  681. # Scroll event in which while scrolling, the categories
  682. # move vertical along with its children.
  683. def __ScrollEvent(self):
  684. pos = self.scroll.GetPos() * self.diff_height
  685. for key, item in self.quest_category_dict.items():
  686. item.UpdateYPosition(pos)
  687.  
  688. # Refresh the scroll based on the category height.
  689. def __RefreshScroll(self):
  690. self.diff_height = 0
  691.  
  692. label_height = 0; height = 0
  693. if app.ENABLE_CONQUEROR_LEVEL:
  694. reserved_height = 2
  695. else:
  696. reserved_height = 7
  697.  
  698. for key, item in self.quest_category_dict.items():
  699. label_height += self.LABEL_HEIGHT - reserved_height
  700. is_on = item.IsOn()
  701. height += item.GetQuestObjectHeight() if is_on else 0
  702.  
  703. total_height = height + label_height + 12
  704. if total_height >= self.BOARD_HEIGHT:
  705. self.diff_height = height - label_height
  706.  
  707. step_size = float(self.SCROLL_STEP) / self.diff_height
  708. self.scroll.SetScrollStep(step_size)
  709. self.scroll.Show()
  710. else:
  711. self.scroll.Hide()
  712.  
  713. # Unused.
  714. def __AdjustScrollPos(self, quest_type):
  715. pass
  716.  
  717. # Arranges the categories on startup in a closed state.
  718. def __Arrange(self):
  719. for key, item in self.quest_category_dict.iteritems():
  720. item.UpdatePosition(0, self.LABEL_HEIGHT * key)
  721.  
  722. # This arrangement is made when any category is clicked or
  723. # when any other event is made in the quest object board,
  724. # like updating objects or removing them.
  725. def __ArrangeAfter(self, quest_type):
  726. pos = self.scroll.GetPos() * self.diff_height
  727. for key, item in self.quest_category_dict.items():
  728. last_key = key -1; last_item = None; height = 0
  729.  
  730. if last_key in self.quest_category_dict:
  731. last_item = self.quest_category_dict[key - 1]
  732. is_on = last_item.IsOn()
  733. height = last_item.GetQuestObjectHeight() if is_on else 0
  734.  
  735. # Set the height of the category from its base y position
  736. # from the first arrangement "__Arrange", following up
  737. # its height adjustment from its neighbor categories.
  738. item.SetHeight(height + last_item.GetHeight() if last_item else 0)
  739.  
  740. # Update y position for the scroll step when scrolling.
  741. item.UpdateYPosition(pos)
  742.  
  743. # Refreshing the scroll will properly set the scroll step
  744. # size for all categories opened or closed on the board.
  745. # If there is an empty space at the window then there will
  746. # be no need for a scroll bar.
  747. self.__RefreshScroll()
  748.  
  749. # Using the scroll event will snap the last category to
  750. # the bottom of the board preventing empty spaces at the
  751. # end of the window.
  752. self.__ScrollEvent()
  753.  
  754. # Method used for opening a category. (Add-on)
  755. def OpenCategory(self, quest_type, close_all = False):
  756. if close_all:
  757. for key, item in self.quest_category_dict.items():
  758. item.CloseCategory()
  759.  
  760. if quest_type in self.quest_category_dict:
  761. self.quest_category_dict[quest_type].OpenCategory()
  762.  
  763. # Method used for closing a category. (Add-on)
  764. def CloseCategory(self, quest_type):
  765. for key, item in self.quest_category_dict.items():
  766. item.CloseCategory()
  767.  
  768. class CharacterWindow(ui.ScriptWindow):
  769.  
  770. ACTIVE_PAGE_SLOT_COUNT = 9
  771. SUPPORT_PAGE_SLOT_COUNT = 18
  772.  
  773. PAGE_SLOT_COUNT = 12
  774. PAGE_HORSE = 2
  775.  
  776. SKILL_GROUP_NAME_DICT = {
  777. playerSettingModule.JOB_WARRIOR : { 1 : localeInfo.SKILL_GROUP_WARRIOR_1, 2 : localeInfo.SKILL_GROUP_WARRIOR_2, },
  778. playerSettingModule.JOB_ASSASSIN : { 1 : localeInfo.SKILL_GROUP_ASSASSIN_1, 2 : localeInfo.SKILL_GROUP_ASSASSIN_2, },
  779. playerSettingModule.JOB_SURA : { 1 : localeInfo.SKILL_GROUP_SURA_1, 2 : localeInfo.SKILL_GROUP_SURA_2, },
  780. playerSettingModule.JOB_SHAMAN : { 1 : localeInfo.SKILL_GROUP_SHAMAN_1, 2 : localeInfo.SKILL_GROUP_SHAMAN_2, },
  781. }
  782. if app.ENABLE_WOLFMAN_CHARACTER:
  783. SKILL_GROUP_NAME_DICT.update({playerSettingModule.JOB_WOLFMAN : { 1 : localeInfo.JOB_WOLFMAN1, 2 : localeInfo.JOB_WOLFMAN2, },})
  784.  
  785. STAT_DESCRIPTION = {
  786. "HTH" : localeInfo.STAT_TOOLTIP_CON,
  787. "INT" : localeInfo.STAT_TOOLTIP_INT,
  788. "STR" : localeInfo.STAT_TOOLTIP_STR,
  789. "DEX" : localeInfo.STAT_TOOLTIP_DEX,
  790. }
  791.  
  792.  
  793. STAT_MINUS_DESCRIPTION = localeInfo.STAT_MINUS_DESCRIPTION
  794.  
  795. def __init__(self):
  796. if app.ENABLE_DETAILS_UI:
  797. self.chDetailsWnd = None
  798. self.isOpenedDetailsWnd = False
  799. ui.ScriptWindow.__init__(self)
  800. self.state = "STATUS"
  801. if app.ENABLE_CONQUEROR_LEVEL:
  802. self.substate = "BASE"
  803. self.isLoaded = 0
  804.  
  805. self.toolTipSkill = 0
  806.  
  807. self.__Initialize()
  808. self.__LoadWindow()
  809.  
  810. self.statusPlusCommandDict={
  811. "HTH" : "/stat ht",
  812. "INT" : "/stat iq",
  813. "STR" : "/stat st",
  814. "DEX" : "/stat dx",
  815. }
  816.  
  817. self.statusMinusCommandDict={
  818. "HTH-" : "/stat- ht",
  819. "INT-" : "/stat- iq",
  820. "STR-" : "/stat- st",
  821. "DEX-" : "/stat- dx",
  822. }
  823.  
  824. def __del__(self):
  825. ui.ScriptWindow.__del__(self)
  826.  
  827. def __Initialize(self):
  828. self.refreshToolTip = 0
  829. self.curSelectedSkillGroup = 0
  830. self.canUseHorseSkill = -1
  831.  
  832. self.toolTip = None
  833. self.toolTipJob = None
  834. self.toolTipAlignment = None
  835. self.toolTipSkill = None
  836.  
  837. self.faceImage = None
  838. self.statusPlusLabel = None
  839. self.statusPlusValue = None
  840. self.activeSlot = None
  841. self.tabDict = None
  842. self.tabButtonDict = None
  843. self.pageDict = None
  844. self.titleBarDict = None
  845. self.statusPlusButtonDict = None
  846. self.statusMinusButtonDict = None
  847.  
  848. self.skillPageDict = None
  849. if app.ENABLE_QUEST_RENEWAL:
  850. self.questScrollBar = None
  851. self.questPageBoardWnd = None
  852. self.questCategoryGroup = None
  853. else:
  854. self.questShowingStartIndex = 0
  855. self.questScrollBar = None
  856. self.questSlot = None
  857. self.questNameList = None
  858. self.questLastTimeList = None
  859. self.questLastCountList = None
  860. self.skillGroupButton = ()
  861.  
  862. self.activeSlot = None
  863. self.activeSkillPointValue = None
  864. self.supportSkillPointValue = None
  865. self.skillGroupButton1 = None
  866. self.skillGroupButton2 = None
  867. self.activeSkillGroupName = None
  868.  
  869. self.guildNameSlot = None
  870. self.guildNameValue = None
  871. self.characterNameSlot = None
  872. self.characterNameValue = None
  873.  
  874. self.emotionToolTip = None
  875. self.soloEmotionSlot = None
  876. self.dualEmotionSlot = None
  877. if app.ENABLE_CONQUEROR_LEVEL:
  878. self.tabSungmaButtonDict = {}
  879. self.passive_expanded_btn = None
  880.  
  881. def Show(self):
  882. self.__LoadWindow()
  883. if app.ENABLE_DETAILS_UI:
  884. self.__InitCharacterDetailsUIButton()
  885. if self.chDetailsWnd and self.isOpenedDetailsWnd:
  886. self.chDetailsWnd.Show()
  887.  
  888. ui.ScriptWindow.Show(self)
  889.  
  890. if app.ENABLE_MOUSE_WHEEL_TOP_WINDOW:
  891. self.SetTop()
  892. wndMgr.SetWheelTopWindow(self.hWnd)
  893.  
  894. def __LoadScript(self, fileName):
  895. pyScrLoader = ui.PythonScriptLoader()
  896. pyScrLoader.LoadScriptFile(self, fileName)
  897.  
  898. def __BindObject(self):
  899. self.toolTip = uiToolTip.ToolTip()
  900. self.toolTipJob = uiToolTip.ToolTip()
  901. self.toolTipAlignment = uiToolTip.ToolTip(130)
  902.  
  903. self.faceImage = self.GetChild("Face_Image")
  904.  
  905. faceSlot=self.GetChild("Face_Slot")
  906. if 949 == app.GetDefaultCodePage():
  907. faceSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowJobToolTip)
  908. faceSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideJobToolTip)
  909.  
  910. self.statusPlusLabel = self.GetChild("Status_Plus_Label")
  911. self.statusPlusValue = self.GetChild("Status_Plus_Value")
  912.  
  913. self.characterNameSlot = self.GetChild("Character_Name_Slot")
  914. self.characterNameValue = self.GetChild("Character_Name")
  915. self.guildNameSlot = self.GetChild("Guild_Name_Slot")
  916. self.guildNameValue = self.GetChild("Guild_Name")
  917. self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowAlignmentToolTip)
  918. self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideAlignmentToolTip)
  919.  
  920. self.activeSlot = self.GetChild("Skill_Active_Slot")
  921. self.activeSkillPointValue = self.GetChild("Active_Skill_Point_Value")
  922. self.supportSkillPointValue = self.GetChild("Support_Skill_Point_Value")
  923. self.skillGroupButton1 = self.GetChild("Skill_Group_Button_1")
  924. self.skillGroupButton2 = self.GetChild("Skill_Group_Button_2")
  925. self.activeSkillGroupName = self.GetChild("Active_Skill_Group_Name")
  926.  
  927. self.tabDict = {
  928. "STATUS" : self.GetChild("Tab_01"),
  929. "SKILL" : self.GetChild("Tab_02"),
  930. "EMOTICON" : self.GetChild("Tab_03"),
  931. "QUEST" : self.GetChild("Tab_04"),
  932. }
  933.  
  934. self.tabButtonDict = {
  935. "STATUS" : self.GetChild("Tab_Button_01"),
  936. "SKILL" : self.GetChild("Tab_Button_02"),
  937. "EMOTICON" : self.GetChild("Tab_Button_03"),
  938. "QUEST" : self.GetChild("Tab_Button_04")
  939. }
  940.  
  941. self.pageDict = {
  942. "STATUS" : self.GetChild("Character_Page"),
  943. "SKILL" : self.GetChild("Skill_Page"),
  944. "EMOTICON" : self.GetChild("Emoticon_Page"),
  945. "QUEST" : self.GetChild("Quest_Page")
  946. }
  947.  
  948. self.titleBarDict = {
  949. "STATUS" : self.GetChild("Character_TitleBar"),
  950. "SKILL" : self.GetChild("Skill_TitleBar"),
  951. "EMOTICON" : self.GetChild("Emoticon_TitleBar"),
  952. "QUEST" : self.GetChild("Quest_TitleBar")
  953. }
  954.  
  955. self.statusPlusButtonDict = {
  956. "HTH" : self.GetChild("HTH_Plus"),
  957. "INT" : self.GetChild("INT_Plus"),
  958. "STR" : self.GetChild("STR_Plus"),
  959. "DEX" : self.GetChild("DEX_Plus"),
  960. }
  961.  
  962. self.statusMinusButtonDict = {
  963. "HTH-" : self.GetChild("HTH_Minus"),
  964. "INT-" : self.GetChild("INT_Minus"),
  965. "STR-" : self.GetChild("STR_Minus"),
  966. "DEX-" : self.GetChild("DEX_Minus"),
  967. }
  968.  
  969. self.skillPageDict = {
  970. "ACTIVE" : self.GetChild("Skill_Active_Slot"),
  971. "SUPPORT" : self.GetChild("Skill_ETC_Slot"),
  972. "HORSE" : self.GetChild("Skill_Active_Slot"),
  973. }
  974.  
  975. self.skillPageStatDict = {
  976. "SUPPORT" : player.SKILL_SUPPORT,
  977. "ACTIVE" : player.SKILL_ACTIVE,
  978. "HORSE" : player.SKILL_HORSE,
  979. }
  980.  
  981. self.skillGroupButton = (
  982. self.GetChild("Skill_Group_Button_1"),
  983. self.GetChild("Skill_Group_Button_2"),
  984. )
  985.  
  986. if app.ENABLE_CONQUEROR_LEVEL:
  987. self.tabSungmaButtonDict = {
  988. "BASE" : self.GetChild("change_base_button"),
  989. "SUNGMA" : self.GetChild("change_conqueror_button")
  990. }
  991.  
  992. self.SungmaPageDict = {
  993. "BASE" : self.GetChild("base_info"),
  994. "SUNGMA" : self.GetChild("sungma_info"),
  995. }
  996.  
  997. ## TabButton1 (Character)
  998. self.GetChild("Tab_Button_01").SetShowToolTipEvent(ui.__mem_func__(self.__ShowToolTipButton), localeInfo.STAT_TOOLTIP_TAB_CHARACTER)
  999. self.GetChild("Tab_Button_01").SetHideToolTipEvent(ui.__mem_func__(self.__HideToolTip))
  1000. ## TabButton2 (Skill)
  1001. self.GetChild("Tab_Button_02").SetShowToolTipEvent(ui.__mem_func__(self.__ShowToolTipButton), localeInfo.STAT_TOOLTIP_TAB_SKILL)
  1002. self.GetChild("Tab_Button_02").SetHideToolTipEvent(ui.__mem_func__(self.__HideToolTip))
  1003. ## TabButton3 (Emoticon)
  1004. self.GetChild("Tab_Button_03").SetShowToolTipEvent(ui.__mem_func__(self.__ShowToolTipButton), localeInfo.STAT_TOOLTIP_TAB_EMOTICON)
  1005. self.GetChild("Tab_Button_03").SetHideToolTipEvent(ui.__mem_func__(self.__HideToolTip))
  1006. ## TabButton4 (Quest)
  1007. self.GetChild("Tab_Button_04").SetShowToolTipEvent(ui.__mem_func__(self.__ShowToolTipButton), localeInfo.STAT_TOOLTIP_TAB_QUEST)
  1008. self.GetChild("Tab_Button_04").SetHideToolTipEvent(ui.__mem_func__(self.__HideToolTip))
  1009.  
  1010. ## Level
  1011. self.GetChild("Lv_ToolTip").SetShowToolTipEvent(ui.__mem_func__(self.__ShowToolTipButton), localeInfo.STAT_TOOLTIP_LEVEL)
  1012. self.GetChild("Lv_ToolTip").SetHideToolTipEvent(ui.__mem_func__(self.__HideToolTip))
  1013. ## EXP
  1014. self.GetChild("Exp_ToolTip").SetShowToolTipEvent(ui.__mem_func__(self.__ShowToolTipButton), localeInfo.STAT_TOOLTIP_EXP)
  1015. self.GetChild("Exp_ToolTip").SetHideToolTipEvent(ui.__mem_func__(self.__HideToolTip))
  1016.  
  1017. ## Base Level
  1018. self.GetChild("change_base_button").SetShowToolTipEvent(ui.__mem_func__(self.__ShowToolTipButton), localeInfo.STAT_TOOLTIP_BASE_LEVEL)
  1019. self.GetChild("change_base_button").SetHideToolTipEvent(ui.__mem_func__(self.__HideToolTip))
  1020. ## Conqueror Level
  1021. self.GetChild("change_conqueror_button").SetShowToolTipEvent(ui.__mem_func__(self.__ShowToolTipButton), localeInfo.STAT_TOOLTIP_CONQUEROR_LEVEL)
  1022. self.GetChild("change_conqueror_button").SetHideToolTipEvent(ui.__mem_func__(self.__HideToolTip))
  1023. ## Passive Relic
  1024. self.passive_expanded_btn = self.GetChild("passive_expanded_btn")
  1025. self.passive_expanded_btn.SetShowToolTipEvent(ui.__mem_func__(self.__ShowToolTipButton), localeInfo.STAT_TOOLTIP_PASSIVE)
  1026. self.passive_expanded_btn.SetHideToolTipEvent(ui.__mem_func__(self.__HideToolTip))
  1027. self.passive_expanded_btn.Hide()
  1028.  
  1029. ## Char Status Info
  1030. self.GetChild("Char_Info_Status_img").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_STAT : ui.__mem_func__(self.__ShowToolTip)(arg)
  1031. self.GetChild("Char_Info_Status_img").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1032. ## Status Plus Points
  1033. self.GetChild("Status_Plus_Label").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_POINT : ui.__mem_func__(self.__ShowToolTip)(arg)
  1034. self.GetChild("Status_Plus_Label").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1035.  
  1036. ## CON (Constitution)
  1037. self.GetChild("HTH_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_IMG_CON : ui.__mem_func__(self.__ShowToolTip)(arg)
  1038. self.GetChild("HTH_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1039. ## INT (Intelligence)
  1040. self.GetChild("INT_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_IMG_INT : ui.__mem_func__(self.__ShowToolTip)(arg)
  1041. self.GetChild("INT_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1042. ## STR (Strength)
  1043. self.GetChild("STR_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_IMG_STR : ui.__mem_func__(self.__ShowToolTip)(arg)
  1044. self.GetChild("STR_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1045. ## DEX (Dexterity)
  1046. self.GetChild("DEX_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_IMG_DEX : ui.__mem_func__(self.__ShowToolTip)(arg)
  1047. self.GetChild("DEX_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1048.  
  1049. ## HP (Health)
  1050. self.GetChild("HEL_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_HP : ui.__mem_func__(self.__ShowToolTip)(arg)
  1051. self.GetChild("HEL_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1052. ## SP (Stamina)
  1053. self.GetChild("SP_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_SP : ui.__mem_func__(self.__ShowToolTip)(arg)
  1054. self.GetChild("SP_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1055. ## ATT (Attack)
  1056. self.GetChild("ATT_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_ATT : ui.__mem_func__(self.__ShowToolTip)(arg)
  1057. self.GetChild("ATT_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1058. ## DEF (Defense)
  1059. self.GetChild("DEF_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_DEF : ui.__mem_func__(self.__ShowToolTip)(arg)
  1060. self.GetChild("DEF_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1061.  
  1062. ## MSPD (Move Speed)
  1063. self.GetChild("MSPD_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_MOVE_SPEED : ui.__mem_func__(self.__ShowToolTip)(arg)
  1064. self.GetChild("MSPD_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1065. ## ASPD (Attack Speed)
  1066. self.GetChild("ASPD_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_ATT_SPEED : ui.__mem_func__(self.__ShowToolTip)(arg)
  1067. self.GetChild("ASPD_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1068. ## CSPD (Cast Speed)
  1069. self.GetChild("CSPD_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_CAST_SPEED : ui.__mem_func__(self.__ShowToolTip)(arg)
  1070. self.GetChild("CSPD_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1071. ## MATT (Magic Attack)
  1072. self.GetChild("MATT_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_MAG_ATT : ui.__mem_func__(self.__ShowToolTip)(arg)
  1073. self.GetChild("MATT_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1074. ## MDEF (Magic Defense)
  1075. self.GetChild("MDEF_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_MAG_DEF : ui.__mem_func__(self.__ShowToolTip)(arg)
  1076. self.GetChild("MDEF_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1077. ## EF (Evasion Resistance)
  1078. self.GetChild("ER_IMG").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_DODGE_PER : ui.__mem_func__(self.__ShowToolTip)(arg)
  1079. self.GetChild("ER_IMG").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1080.  
  1081. ## Active Skill Point Label
  1082. self.GetChild("Active_Skill_Point_Label").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_POINT : ui.__mem_func__(self.__ShowToolTip)(arg)
  1083. self.GetChild("Active_Skill_Point_Label").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1084. ## Support Skill Point Label
  1085. self.GetChild("Support_Skill_ToolTip").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_SUPPORT_SKILL : ui.__mem_func__(self.__ShowToolTip)(arg)
  1086. self.GetChild("Support_Skill_ToolTip").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1087.  
  1088. self.GetChild("Action_Bar_Img").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_ACTION : ui.__mem_func__(self.__ShowToolTip)(arg)
  1089. self.GetChild("Action_Bar_Img").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1090. self.GetChild("Reaction_Bar_Img").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_REACTION : ui.__mem_func__(self.__ShowToolTip)(arg)
  1091. self.GetChild("Reaction_Bar_Img").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1092. self.GetChild("Special_Action_Bar_Img").OnMouseOverIn = lambda arg = localeInfo.STAT_TOOLTIP_SPECIAL_ACTION : ui.__mem_func__(self.__ShowToolTip)(arg)
  1093. self.GetChild("Special_Action_Bar_Img").OnMouseOverOut = lambda : ui.__mem_func__(self.__HideToolTip)()
  1094.  
  1095. global SHOW_ONLY_ACTIVE_SKILL
  1096. global HIDE_SUPPORT_SKILL_POINT
  1097. if SHOW_ONLY_ACTIVE_SKILL or HIDE_SUPPORT_SKILL_POINT:
  1098. self.GetChild("Support_Skill_Point_Label").Hide()
  1099.  
  1100. self.soloEmotionSlot = self.GetChild("SoloEmotionSlot")
  1101. self.dualEmotionSlot = self.GetChild("DualEmotionSlot")
  1102. self.__SetEmotionSlot()
  1103.  
  1104. if app.ENABLE_QUEST_RENEWAL:
  1105. self.questScrollBar = self.GetChild("Quest_ScrollBar")
  1106. self.questPageBoardWnd = self.GetChild("quest_object_board_window")
  1107. self.questCategoryGroup = QuestCategoryGroup(self.questPageBoardWnd, self.questScrollBar)
  1108. else:
  1109. self.questShowingStartIndex = 0
  1110. self.questScrollBar = self.GetChild("Quest_ScrollBar")
  1111. self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll))
  1112. self.questSlot = self.GetChild("Quest_Slot")
  1113. for i in xrange(quest.QUEST_MAX_NUM):
  1114. self.questSlot.HideSlotBaseImage(i)
  1115. self.questSlot.SetCoverButton(i,\
  1116. "d:/ymir work/ui/game/quest/slot_button_01.sub",\
  1117. "d:/ymir work/ui/game/quest/slot_button_02.sub",\
  1118. "d:/ymir work/ui/game/quest/slot_button_03.sub",\
  1119. "d:/ymir work/ui/game/quest/slot_button_03.sub", True)
  1120.  
  1121. self.questNameList = []
  1122. self.questLastTimeList = []
  1123. self.questLastCountList = []
  1124. for i in xrange(quest.QUEST_MAX_NUM):
  1125. self.questNameList.append(self.GetChild("Quest_Name_0" + str(i)))
  1126. self.questLastTimeList.append(self.GetChild("Quest_LastTime_0" + str(i)))
  1127. self.questLastCountList.append(self.GetChild("Quest_LastCount_0" + str(i)))
  1128.  
  1129. if app.ENABLE_DETAILS_UI:
  1130. self.MainBoard = self.GetChild("board")
  1131. self.ExpandBtn = ui.MakeButton(self.MainBoard, 240, 120, "", "d:/ymir work/ui/game/belt_inventory/", "btn_minimize_normal.tga", "btn_minimize_over.tga", "btn_minimize_down.tga")
  1132. self.ExpandBtn.SetEvent(ui.__mem_func__(self.__ClickExpandButton))
  1133. self.MinimizeBtn = ui.MakeButton(self.MainBoard, 240, 120, "", "d:/ymir work/ui/game/belt_inventory/", "btn_expand_normal.tga", "btn_expand_over.tga", "btn_expand_down.tga")
  1134. self.MinimizeBtn.SetEvent(ui.__mem_func__(self.__ClickMinimizeButton))
  1135.  
  1136. def __SetSkillSlotEvent(self):
  1137. for skillPageValue in self.skillPageDict.itervalues():
  1138. skillPageValue.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  1139. skillPageValue.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectSkill))
  1140. skillPageValue.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
  1141. skillPageValue.SetUnselectItemSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
  1142. skillPageValue.SetUseSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
  1143. skillPageValue.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  1144. skillPageValue.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  1145. skillPageValue.SetPressedSlotButtonEvent(ui.__mem_func__(self.OnPressedSlotButton))
  1146. skillPageValue.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
  1147. "d:/ymir work/ui/game/windows/btn_plus_over.sub",\
  1148. "d:/ymir work/ui/game/windows/btn_plus_down.sub")
  1149.  
  1150. def __SetEmotionSlot(self):
  1151.  
  1152. self.emotionToolTip = uiToolTip.ToolTip()
  1153.  
  1154. for slot in (self.soloEmotionSlot, self.dualEmotionSlot):
  1155. slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  1156. slot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectEmotion))
  1157. slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
  1158. slot.SetUseSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
  1159. slot.SetOverInItemEvent(ui.__mem_func__(self.__OverInEmotion))
  1160. slot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutEmotion))
  1161. slot.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
  1162. "d:/ymir work/ui/game/windows/btn_plus_over.sub",\
  1163. "d:/ymir work/ui/game/windows/btn_plus_down.sub")
  1164.  
  1165. for slotIdx, datadict in emotion.EMOTION_DICT.items():
  1166. emotionIdx = slotIdx
  1167.  
  1168. slot = self.soloEmotionSlot
  1169. if slotIdx > 50:
  1170. slot = self.dualEmotionSlot
  1171.  
  1172. slot.SetEmotionSlot(slotIdx, emotionIdx)
  1173. slot.SetCoverButton(slotIdx)
  1174.  
  1175. def __SelectEmotion(self, slotIndex):
  1176. if not slotIndex in emotion.EMOTION_DICT:
  1177. return
  1178.  
  1179. if app.IsPressed(app.DIK_LCONTROL):
  1180. player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_EMOTION, slotIndex)
  1181. return
  1182.  
  1183. mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_EMOTION, slotIndex, slotIndex)
  1184.  
  1185. def __ClickEmotionSlot(self, slotIndex):
  1186. print "click emotion"
  1187. if not slotIndex in emotion.EMOTION_DICT:
  1188. return
  1189.  
  1190. print "check acting"
  1191. if player.IsActingEmotion():
  1192. return
  1193.  
  1194. command = emotion.EMOTION_DICT[slotIndex]["command"]
  1195. print "command", command
  1196.  
  1197. if slotIndex > 50:
  1198. vid = player.GetTargetVID()
  1199.  
  1200. if 0 == vid or vid == player.GetMainCharacterIndex() or chr.IsNPC(vid) or chr.IsEnemy(vid):
  1201. import chat
  1202. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EMOTION_CHOOSE_ONE)
  1203. return
  1204.  
  1205. command += " " + chr.GetNameByVID(vid)
  1206.  
  1207. print "send_command", command
  1208. net.SendChatPacket(command)
  1209.  
  1210. def ActEmotion(self, emotionIndex):
  1211. self.__ClickEmotionSlot(emotionIndex)
  1212.  
  1213. if app.ENABLE_DETAILS_UI:
  1214. def OnTop(self):
  1215. if self.chDetailsWnd:
  1216. self.chDetailsWnd.SetTop()
  1217. def Hide(self):
  1218. if self.chDetailsWnd:
  1219. self.isOpenedDetailsWnd = self.chDetailsWnd.IsShow()
  1220. self.chDetailsWnd.Close()
  1221. wndMgr.Hide(self.hWnd)
  1222. def __InitCharacterDetailsUIButton(self):
  1223. self.ExpandBtn.Show()
  1224. self.MinimizeBtn.Hide()
  1225.  
  1226. def __ClickExpandButton(self):
  1227. if not self.chDetailsWnd:
  1228. self.chDetailsWnd = uiCharacterDetails.CharacterDetailsUI(self)
  1229. self.chDetailsWnd.Show()
  1230. else:
  1231. self.chDetailsWnd.Show()
  1232.  
  1233. self.ExpandBtn.Hide()
  1234. self.MinimizeBtn.Show()
  1235.  
  1236. def __ClickMinimizeButton(self):
  1237. self.chDetailsWnd.Hide()
  1238. self.MinimizeBtn.Hide()
  1239. self.ExpandBtn.Show()
  1240.  
  1241. def OnMoveWindow(self, x, y):
  1242. if self.chDetailsWnd:
  1243. self.chDetailsWnd.AdjustPosition(x, y)
  1244.  
  1245. def __OverInEmotion(self, slotIndex):
  1246. if self.emotionToolTip:
  1247.  
  1248. if not slotIndex in emotion.EMOTION_DICT:
  1249. return
  1250.  
  1251. self.emotionToolTip.ClearToolTip()
  1252. self.emotionToolTip.SetTitle(emotion.EMOTION_DICT[slotIndex]["name"])
  1253. self.emotionToolTip.AlignHorizonalCenter()
  1254. self.emotionToolTip.ShowToolTip()
  1255.  
  1256. def __OverOutEmotion(self):
  1257. if self.emotionToolTip:
  1258. self.emotionToolTip.HideToolTip()
  1259.  
  1260. def __BindEvent(self):
  1261. for i in xrange(len(self.skillGroupButton)):
  1262. self.skillGroupButton[i].SetEvent(lambda arg=i: self.__SelectSkillGroup(arg))
  1263.  
  1264. if not app.ENABLE_QUEST_RENEWAL:
  1265. self.RefreshQuest()
  1266. self.__HideJobToolTip()
  1267.  
  1268. for (tabKey, tabButton) in self.tabButtonDict.items():
  1269. tabButton.SetEvent(ui.__mem_func__(self.__OnClickTabButton), tabKey)
  1270.  
  1271. if app.ENABLE_CONQUEROR_LEVEL:
  1272. for (tabKey, tabButton) in self.tabSungmaButtonDict.items():
  1273. tabButton.SetEvent(ui.__mem_func__(self.__OnClickTabSungmaButton), tabKey)
  1274. self.tabSungmaButtonDict["SUNGMA"].Hide()
  1275.  
  1276. for (statusPlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  1277. statusPlusButton.SAFE_SetEvent(self.__OnClickStatusPlusButton, statusPlusKey)
  1278. statusPlusButton.ShowToolTip = lambda arg=statusPlusKey: self.__OverInStatButton(arg)
  1279. statusPlusButton.HideToolTip = lambda arg=statusPlusKey: self.__OverOutStatButton()
  1280.  
  1281. for (statusMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  1282. statusMinusButton.SAFE_SetEvent(self.__OnClickStatusMinusButton, statusMinusKey)
  1283. statusMinusButton.ShowToolTip = lambda arg=statusMinusKey: self.__OverInStatMinusButton(arg)
  1284. statusMinusButton.HideToolTip = lambda arg=statusMinusKey: self.__OverOutStatMinusButton()
  1285.  
  1286. for titleBarValue in self.titleBarDict.itervalues():
  1287. if app.ENABLE_DETAILS_UI:
  1288. titleBarValue.SetCloseEvent(ui.__mem_func__(self.Close))
  1289. else:
  1290. titleBarValue.SetCloseEvent(ui.__mem_func__(self.Hide))
  1291.  
  1292. if not app.ENABLE_QUEST_RENEWAL:
  1293. self.questSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectQuest))
  1294.  
  1295. def __LoadWindow(self):
  1296. if self.isLoaded == 1:
  1297. return
  1298.  
  1299. self.isLoaded = 1
  1300.  
  1301. try:
  1302. if localeInfo.IsARABIC() or localeInfo.IsVIETNAM() or localeInfo.IsJAPAN():
  1303. self.__LoadScript(uiScriptLocale.LOCALE_UISCRIPT_PATH + "CharacterWindow.py")
  1304. else:
  1305. self.__LoadScript("UIScript/CharacterWindow.py")
  1306.  
  1307. self.__BindObject()
  1308. self.__BindEvent()
  1309. except:
  1310. import exception
  1311. exception.Abort("CharacterWindow.__LoadWindow")
  1312.  
  1313. #self.tabButtonDict["EMOTICON"].Disable()
  1314. self.SetState("STATUS")
  1315. if app.ENABLE_CONQUEROR_LEVEL:
  1316. self.SetSubState("BASE")
  1317.  
  1318. def Destroy(self):
  1319. self.ClearDictionary()
  1320.  
  1321. self.__Initialize()
  1322.  
  1323. def Close(self):
  1324. if 0 != self.toolTipSkill and None != self.toolTipSkill:
  1325. self.toolTipSkill.Hide()
  1326.  
  1327. if app.ENABLE_DETAILS_UI:
  1328. if self.chDetailsWnd and self.chDetailsWnd.IsShow():
  1329. self.chDetailsWnd.Hide()
  1330.  
  1331. self.Hide()
  1332.  
  1333. if app.ENABLE_MOUSE_WHEEL_TOP_WINDOW:
  1334. wndMgr.ClearWheelTopWindow()
  1335.  
  1336. def SetSkillToolTip(self, toolTipSkill):
  1337. self.toolTipSkill = toolTipSkill
  1338.  
  1339. def __OnClickStatusPlusButton(self, statusKey):
  1340. try:
  1341. statusPlusCommand=self.statusPlusCommandDict[statusKey]
  1342. net.SendChatPacket(statusPlusCommand)
  1343. except KeyError, msg:
  1344. dbg.TraceError("CharacterWindow.__OnClickStatusPlusButton KeyError: %s", msg)
  1345.  
  1346. def __OnClickStatusMinusButton(self, statusKey):
  1347. try:
  1348. statusMinusCommand=self.statusMinusCommandDict[statusKey]
  1349. net.SendChatPacket(statusMinusCommand)
  1350. except KeyError, msg:
  1351. dbg.TraceError("CharacterWindow.__OnClickStatusMinusButton KeyError: %s", msg)
  1352.  
  1353.  
  1354. def __OnClickTabButton(self, stateKey):
  1355. self.SetState(stateKey)
  1356.  
  1357. if app.ENABLE_CONQUEROR_LEVEL:
  1358. def __OnClickTabSungmaButton(self, stateKey):
  1359. self.SetSubState(stateKey)
  1360.  
  1361. def SetState(self, stateKey):
  1362.  
  1363. self.state = stateKey
  1364.  
  1365. for (tabKey, tabButton) in self.tabButtonDict.items():
  1366. if stateKey!=tabKey:
  1367. tabButton.SetUp()
  1368.  
  1369. for tabValue in self.tabDict.itervalues():
  1370. tabValue.Hide()
  1371.  
  1372. for pageValue in self.pageDict.itervalues():
  1373. pageValue.Hide()
  1374.  
  1375. for titleBarValue in self.titleBarDict.itervalues():
  1376. titleBarValue.Hide()
  1377.  
  1378. self.titleBarDict[stateKey].Show()
  1379. self.tabDict[stateKey].Show()
  1380. self.pageDict[stateKey].Show()
  1381.  
  1382.  
  1383. def GetState(self):
  1384. return self.state
  1385.  
  1386. if app.ENABLE_CONQUEROR_LEVEL:
  1387. def SetSubState(self, stateSubKey):
  1388. self.substate = stateSubKey
  1389.  
  1390. for (tabKey, tabButton) in self.tabSungmaButtonDict.items():
  1391. if stateSubKey != tabKey:
  1392. tabButton.SetUp()
  1393.  
  1394. self.tabSungmaButtonDict[stateSubKey].Down()
  1395.  
  1396. for pageValue in self.SungmaPageDict.itervalues():
  1397. pageValue.Hide()
  1398.  
  1399. self.SungmaPageDict[stateSubKey].Show()
  1400.  
  1401. def __GetTotalAtkText(self):
  1402. minAtk=player.GetStatus(player.ATT_MIN)
  1403. maxAtk=player.GetStatus(player.ATT_MAX)
  1404. atkBonus=player.GetStatus(player.ATT_BONUS)
  1405. attackerBonus=player.GetStatus(player.ATTACKER_BONUS)
  1406.  
  1407. if minAtk==maxAtk:
  1408. return "%d" % (minAtk+atkBonus+attackerBonus)
  1409. else:
  1410. return "%d-%d" % (minAtk+atkBonus+attackerBonus, maxAtk+atkBonus+attackerBonus)
  1411.  
  1412. def __GetTotalMagAtkText(self):
  1413. minMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MIN_MAGIC_WEP)
  1414. maxMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MAX_MAGIC_WEP)
  1415.  
  1416. if minMagAtk==maxMagAtk:
  1417. return "%d" % (minMagAtk)
  1418. else:
  1419. return "%d-%d" % (minMagAtk, maxMagAtk)
  1420.  
  1421. def __GetTotalDefText(self):
  1422. defValue=player.GetStatus(player.DEF_GRADE)
  1423. if constInfo.ADD_DEF_BONUS_ENABLE:
  1424. defValue+=player.GetStatus(player.DEF_BONUS)
  1425. return "%d" % (defValue)
  1426.  
  1427. def RefreshStatus(self):
  1428. if self.isLoaded==0:
  1429. return
  1430.  
  1431. try:
  1432. self.GetChild("Level_Value").SetText(str(player.GetStatus(player.LEVEL)))
  1433. self.GetChild("Exp_Value").SetText(str(unsigned32(player.GetEXP())))
  1434. self.GetChild("RestExp_Value").SetText(str(unsigned32(player.GetStatus(player.NEXT_EXP)) - unsigned32(player.GetStatus(player.EXP))))
  1435. self.GetChild("HP_Value").SetText(str(player.GetStatus(player.HP)) + '/' + str(player.GetStatus(player.MAX_HP)))
  1436. self.GetChild("SP_Value").SetText(str(player.GetStatus(player.SP)) + '/' + str(player.GetStatus(player.MAX_SP)))
  1437.  
  1438. self.GetChild("STR_Value").SetText(str(player.GetStatus(player.ST)))
  1439. self.GetChild("DEX_Value").SetText(str(player.GetStatus(player.DX)))
  1440. self.GetChild("HTH_Value").SetText(str(player.GetStatus(player.HT)))
  1441. self.GetChild("INT_Value").SetText(str(player.GetStatus(player.IQ)))
  1442.  
  1443. self.GetChild("ATT_Value").SetText(self.__GetTotalAtkText())
  1444. self.GetChild("DEF_Value").SetText(self.__GetTotalDefText())
  1445.  
  1446. self.GetChild("MATT_Value").SetText(self.__GetTotalMagAtkText())
  1447. #self.GetChild("MATT_Value").SetText(str(player.GetStatus(player.MAG_ATT)))
  1448.  
  1449. self.GetChild("MDEF_Value").SetText(str(player.GetStatus(player.MAG_DEF)))
  1450. self.GetChild("ASPD_Value").SetText(str(player.GetStatus(player.ATT_SPEED)))
  1451. self.GetChild("MSPD_Value").SetText(str(player.GetStatus(player.MOVING_SPEED)))
  1452. self.GetChild("CSPD_Value").SetText(str(player.GetStatus(player.CASTING_SPEED)))
  1453. self.GetChild("ER_Value").SetText(str(player.GetStatus(player.EVADE_RATE)))
  1454.  
  1455. except:
  1456. #import exception
  1457. #exception.Abort("CharacterWindow.RefreshStatus.BindObject")
  1458. ## °ÔÀÓÀÌ Æ¨°Ü ¹ö¸²
  1459. pass
  1460.  
  1461. self.__RefreshStatusPlusButtonList()
  1462. self.__RefreshStatusMinusButtonList()
  1463. self.RefreshAlignment()
  1464.  
  1465. if self.refreshToolTip:
  1466. self.refreshToolTip()
  1467.  
  1468. if app.ENABLE_DETAILS_UI:
  1469. if self.chDetailsWnd and self.chDetailsWnd.IsShow():
  1470. self.chDetailsWnd.RefreshLabel()
  1471.  
  1472. def __RefreshStatusPlusButtonList(self):
  1473. if self.isLoaded==0:
  1474. return
  1475.  
  1476. statusPlusPoint=player.GetStatus(player.STAT)
  1477.  
  1478. if statusPlusPoint>0:
  1479. self.statusPlusValue.SetText(str(statusPlusPoint))
  1480. self.statusPlusLabel.Show()
  1481. self.ShowStatusPlusButtonList()
  1482. else:
  1483. self.statusPlusValue.SetText(str(0))
  1484. self.statusPlusLabel.Hide()
  1485. self.HideStatusPlusButtonList()
  1486.  
  1487. def __RefreshStatusMinusButtonList(self):
  1488. if self.isLoaded==0:
  1489. return
  1490.  
  1491. statusMinusPoint=self.__GetStatMinusPoint()
  1492.  
  1493. if statusMinusPoint>0:
  1494. self.__ShowStatusMinusButtonList()
  1495. else:
  1496. self.__HideStatusMinusButtonList()
  1497.  
  1498. def RefreshAlignment(self):
  1499. point, grade = player.GetAlignmentData()
  1500.  
  1501. import colorInfo
  1502. COLOR_DICT = { 0 : colorInfo.TITLE_RGB_GOOD_4,
  1503. 1 : colorInfo.TITLE_RGB_GOOD_3,
  1504. 2 : colorInfo.TITLE_RGB_GOOD_2,
  1505. 3 : colorInfo.TITLE_RGB_GOOD_1,
  1506. 4 : colorInfo.TITLE_RGB_NORMAL,
  1507. 5 : colorInfo.TITLE_RGB_EVIL_1,
  1508. 6 : colorInfo.TITLE_RGB_EVIL_2,
  1509. 7 : colorInfo.TITLE_RGB_EVIL_3,
  1510. 8 : colorInfo.TITLE_RGB_EVIL_4, }
  1511. colorList = COLOR_DICT.get(grade, colorInfo.TITLE_RGB_NORMAL)
  1512. gradeColor = ui.GenerateColor(colorList[0], colorList[1], colorList[2])
  1513.  
  1514. self.toolTipAlignment.ClearToolTip()
  1515. self.toolTipAlignment.AutoAppendTextLine(localeInfo.TITLE_NAME_LIST[grade], gradeColor)
  1516. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_NAME + str(point))
  1517. self.toolTipAlignment.AlignHorizonalCenter()
  1518.  
  1519. def __ShowStatusMinusButtonList(self):
  1520. for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  1521. statusMinusButton.Show()
  1522.  
  1523. def __HideStatusMinusButtonList(self):
  1524. for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  1525. statusMinusButton.Hide()
  1526.  
  1527. def ShowStatusPlusButtonList(self):
  1528. for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  1529. statusPlusButton.Show()
  1530.  
  1531. def HideStatusPlusButtonList(self):
  1532. for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  1533. statusPlusButton.Hide()
  1534.  
  1535. def SelectSkill(self, skillSlotIndex):
  1536.  
  1537. mouseController = mouseModule.mouseController
  1538.  
  1539. if False == mouseController.isAttached():
  1540.  
  1541. srcSlotIndex = self.__RealSkillSlotToSourceSlot(skillSlotIndex)
  1542. selectedSkillIndex = player.GetSkillIndex(srcSlotIndex)
  1543.  
  1544. if skill.CanUseSkill(selectedSkillIndex):
  1545.  
  1546. if app.IsPressed(app.DIK_LCONTROL):
  1547.  
  1548. player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, srcSlotIndex)
  1549. return
  1550.  
  1551. mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, srcSlotIndex, selectedSkillIndex)
  1552.  
  1553. else:
  1554.  
  1555. mouseController.DeattachObject()
  1556.  
  1557. def SelectEmptySlot(self, SlotIndex):
  1558. mouseModule.mouseController.DeattachObject()
  1559.  
  1560. ## ToolTip
  1561. if app.ENABLE_CONQUEROR_LEVEL:
  1562. def __ShowToolTip(self, desc):
  1563. if not self.toolTip:
  1564. return
  1565.  
  1566. descLen = len(desc)
  1567. self.toolTip.ClearToolTip()
  1568. self.toolTip.SetThinBoardSize(5 * descLen)
  1569. self.toolTip.AutoAppendTextLine(desc)
  1570. self.toolTip.AlignHorizonalCenter()
  1571. self.toolTip.Show()
  1572.  
  1573. def __HideToolTip(self):
  1574. self.__HideStatToolTip()
  1575.  
  1576. def __ShowToolTipButton(self, desc):
  1577. self.__ShowToolTip(desc)
  1578.  
  1579. def __ShowToolTipImg(self, event_type, text):
  1580. if "mouse_over_in" == event_type :
  1581. textLen = len(text)
  1582.  
  1583. self.toolTip.ClearToolTip()
  1584. self.toolTip.SetThinBoardSize(5 * arglen)
  1585. self.toolTip.AppendTextLine(text, 0xffffffff)
  1586. self.toolTip.Show()
  1587. elif "mouse_over_out" == event_type:
  1588. self.__HideToolTip()
  1589.  
  1590. def OverInItem(self, slotNumber):
  1591.  
  1592. if mouseModule.mouseController.isAttached():
  1593. return
  1594.  
  1595. if 0 == self.toolTipSkill:
  1596. return
  1597.  
  1598. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
  1599. skillIndex = player.GetSkillIndex(srcSlotIndex)
  1600. skillLevel = player.GetSkillLevel(srcSlotIndex)
  1601. skillGrade = player.GetSkillGrade(srcSlotIndex)
  1602. skillType = skill.GetSkillType(skillIndex)
  1603.  
  1604. ## ACTIVE
  1605. if skill.SKILL_TYPE_ACTIVE == skillType:
  1606. overInSkillGrade = self.__GetSkillGradeFromSlot(slotNumber)
  1607.  
  1608. if overInSkillGrade == skill.SKILL_GRADE_COUNT-1 and skillGrade == skill.SKILL_GRADE_COUNT:
  1609. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
  1610. elif overInSkillGrade == skillGrade:
  1611. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, overInSkillGrade, skillLevel)
  1612. else:
  1613. self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade)
  1614.  
  1615. else:
  1616. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
  1617.  
  1618. def OverOutItem(self):
  1619. if 0 != self.toolTipSkill and None != self.toolTipSkill:
  1620. self.toolTipSkill.HideToolTip()
  1621.  
  1622. ## Quest
  1623. if not app.ENABLE_QUEST_RENEWAL:
  1624. def __SelectQuest(self, slotIndex):
  1625. questIndex = quest.GetQuestIndex(self.questShowingStartIndex+slotIndex)
  1626.  
  1627. import event
  1628. event.QuestButtonClick(-2147483648 + questIndex)
  1629.  
  1630. if app.ENABLE_QUEST_RENEWAL:
  1631. def RefreshQuest(self, quest_type, quest_index):
  1632. if not self.isLoaded or not self.questCategoryGroup:
  1633. return
  1634.  
  1635. try:
  1636. (quest_type, is_confirmed, quest_name, quest_icon, quest_counter_name, quest_counter_value) = quest.GetQuestData(quest_index)
  1637. (last_clock_name, last_clock_time) = quest.GetQuestLastTime(quest_index)
  1638.  
  1639. if self.questCategoryGroup:
  1640. self.questCategoryGroup.ReplaceQuest(quest_type, quest_index, is_confirmed, [quest_name, [last_clock_name, last_clock_time], [quest_counter_name, quest_counter_value]])
  1641. except TypeError:
  1642. return
  1643.  
  1644. def DeleteQuest(self, quest_type, quest_index):
  1645. self.questCategoryGroup.DeleteQuest(quest_type, quest_index)
  1646.  
  1647. def OpenQuestCategory(self, quest_type, close_all):
  1648. self.questCategoryGroup.OpenCategory(quest_type, close_all)
  1649. else:
  1650. def RefreshQuest(self):
  1651. if self.isLoaded == 0:
  1652. return
  1653.  
  1654. questCount = quest.GetQuestCount()
  1655. questRange = range(quest.QUEST_MAX_NUM)
  1656.  
  1657. if questCount > quest.QUEST_MAX_NUM:
  1658. self.questScrollBar.Show()
  1659. else:
  1660. self.questScrollBar.Hide()
  1661.  
  1662. for i in questRange[:questCount]:
  1663. (questName, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(self.questShowingStartIndex + i)
  1664.  
  1665. self.questNameList[i].SetText(questName)
  1666. self.questNameList[i].Show()
  1667. self.questLastCountList[i].Show()
  1668. self.questLastTimeList[i].Show()
  1669.  
  1670. if len(questCounterName) > 0:
  1671. self.questLastCountList[i].SetText("%s : %d" % (questCounterName, questCounterValue))
  1672. else:
  1673. self.questLastCountList[i].SetText("")
  1674.  
  1675. ## Icon
  1676. self.questSlot.SetSlot(i, i, 1, 1, questIcon)
  1677.  
  1678. for i in questRange[questCount:]:
  1679. self.questNameList[i].Hide()
  1680. self.questLastTimeList[i].Hide()
  1681. self.questLastCountList[i].Hide()
  1682. self.questSlot.ClearSlot(i)
  1683. self.questSlot.HideSlotBaseImage(i)
  1684.  
  1685. self.__UpdateQuestClock()
  1686.  
  1687. def __UpdateQuestClock(self):
  1688. if "QUEST" == self.state:
  1689. # QUEST_LIMIT_COUNT_BUG_FIX
  1690. for i in xrange(min(quest.GetQuestCount(), quest.QUEST_MAX_NUM)):
  1691. # END_OF_QUEST_LIMIT_COUNT_BUG_FIX
  1692. (lastName, lastTime) = quest.GetQuestLastTime(i)
  1693.  
  1694. clockText = localeInfo.QUEST_UNLIMITED_TIME
  1695. if len(lastName) > 0:
  1696. if lastTime <= 0:
  1697. clockText = localeInfo.QUEST_TIMEOVER
  1698. else:
  1699. questLastMinute = lastTime / 60
  1700. questLastSecond = lastTime % 60
  1701.  
  1702. clockText = lastName + " : "
  1703.  
  1704. if questLastMinute > 0:
  1705. clockText += str(questLastMinute) + localeInfo.QUEST_MIN
  1706. if questLastSecond > 0:
  1707. clockText += " "
  1708.  
  1709. if questLastSecond > 0:
  1710. clockText += str(questLastSecond) + localeInfo.QUEST_SEC
  1711.  
  1712. self.questLastTimeList[i].SetText(clockText)
  1713.  
  1714. def __GetStatMinusPoint(self):
  1715. POINT_STAT_RESET_COUNT = 112
  1716. return player.GetStatus(POINT_STAT_RESET_COUNT)
  1717.  
  1718. def __OverInStatMinusButton(self, stat):
  1719. try:
  1720. self.__ShowStatToolTip(self.STAT_MINUS_DESCRIPTION[stat] % self.__GetStatMinusPoint())
  1721. except KeyError:
  1722. pass
  1723.  
  1724. self.refreshToolTip = lambda arg=stat: self.__OverInStatMinusButton(arg)
  1725.  
  1726. def __OverOutStatMinusButton(self):
  1727. self.__HideStatToolTip()
  1728. self.refreshToolTip = 0
  1729.  
  1730. def __OverInStatButton(self, stat):
  1731. try:
  1732. self.__ShowStatToolTip(self.STAT_DESCRIPTION[stat])
  1733. except KeyError:
  1734. pass
  1735.  
  1736. def __OverOutStatButton(self):
  1737. self.__HideStatToolTip()
  1738.  
  1739. def __ShowStatToolTip(self, statDesc):
  1740.  
  1741. if app.ENABLE_CONQUEROR_LEVEL:
  1742. statDescLen = len(statDesc)
  1743. self.toolTip.SetThinBoardSize(5 * statDescLen)
  1744. self.toolTip.AlignHorizonalCenter()
  1745. self.toolTip.ClearToolTip()
  1746. self.toolTip.AppendTextLine(statDesc)
  1747. self.toolTip.Show()
  1748.  
  1749. def __HideStatToolTip(self):
  1750. self.toolTip.Hide()
  1751.  
  1752. def OnPressEscapeKey(self):
  1753. self.Close()
  1754. return True
  1755.  
  1756. def OnUpdate(self):
  1757. if not app.ENABLE_QUEST_RENEWAL:
  1758. self.__UpdateQuestClock()
  1759.  
  1760. ## Skill Process
  1761. def __RefreshSkillPage(self, name, slotCount):
  1762. global SHOW_LIMIT_SUPPORT_SKILL_LIST
  1763.  
  1764. skillPage = self.skillPageDict[name]
  1765.  
  1766. startSlotIndex = skillPage.GetStartIndex()
  1767. if "ACTIVE" == name:
  1768. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  1769. startSlotIndex += slotCount
  1770.  
  1771. getSkillType=skill.GetSkillType
  1772. getSkillIndex=player.GetSkillIndex
  1773. getSkillGrade=player.GetSkillGrade
  1774. getSkillLevel=player.GetSkillLevel
  1775. getSkillLevelUpPoint=skill.GetSkillLevelUpPoint
  1776. getSkillMaxLevel=skill.GetSkillMaxLevel
  1777. for i in xrange(slotCount+1):
  1778.  
  1779. slotIndex = i + startSlotIndex
  1780. skillIndex = getSkillIndex(slotIndex)
  1781.  
  1782. for j in xrange(skill.SKILL_GRADE_COUNT):
  1783. skillPage.ClearSlot(self.__GetRealSkillSlot(j, i))
  1784.  
  1785. if 0 == skillIndex:
  1786. continue
  1787.  
  1788. skillGrade = getSkillGrade(slotIndex)
  1789. skillLevel = getSkillLevel(slotIndex)
  1790. skillType = getSkillType(skillIndex)
  1791.  
  1792. ## ½Â¸¶ ½ºÅ³ ¿¹¿Ü ó¸®
  1793. if player.SKILL_INDEX_RIDING == skillIndex:
  1794. if 1 == skillGrade:
  1795. skillLevel += 19
  1796. elif 2 == skillGrade:
  1797. skillLevel += 29
  1798. elif 3 == skillGrade:
  1799. skillLevel = 40
  1800.  
  1801. skillPage.SetSkillSlotNew(slotIndex, skillIndex, max(skillLevel-1, 0), skillLevel)
  1802. skillPage.SetSlotCount(slotIndex, skillLevel)
  1803.  
  1804. ## ACTIVE
  1805. elif skill.SKILL_TYPE_ACTIVE == skillType:
  1806. for j in xrange(skill.SKILL_GRADE_COUNT):
  1807. realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
  1808. skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
  1809. skillPage.SetCoverButton(realSlotIndex)
  1810.  
  1811. if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT-1):
  1812. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  1813. elif (not self.__CanUseSkillNow()) or (skillGrade != j):
  1814. skillPage.SetSlotCount(realSlotIndex, 0)
  1815. skillPage.DisableCoverButton(realSlotIndex)
  1816. else:
  1817. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  1818.  
  1819. ## ±×¿Ü
  1820. else:
  1821. if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
  1822. realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
  1823. skillPage.SetSkillSlot(realSlotIndex, skillIndex, skillLevel)
  1824. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  1825.  
  1826. if skill.CanUseSkill(skillIndex):
  1827. skillPage.SetCoverButton(realSlotIndex)
  1828.  
  1829.  
  1830. if app.ENABLE_ADDITIONAL_EQUIPMENT_PAGE:
  1831. if player.SKILL_ADDITIONAL_PAGE == skillIndex:
  1832. if skillLevel == 0:
  1833. skillPage.ClearSlot(slotIndex)
  1834. else:
  1835. skillPage.SetSkillSlot(slotIndex, skillIndex, 0)
  1836. skillPage.SetSlotCountNew(slotIndex, skillGrade, 0)
  1837. skillPage.SetCoverButton(slotIndex)
  1838.  
  1839. skillPage.RefreshSlot()
  1840.  
  1841.  
  1842. def RefreshSkill(self):
  1843.  
  1844. if self.isLoaded==0:
  1845. return
  1846.  
  1847. if self.__IsChangedHorseRidingSkillLevel():
  1848. self.RefreshCharacter()
  1849. return
  1850.  
  1851.  
  1852. global SHOW_ONLY_ACTIVE_SKILL
  1853. if SHOW_ONLY_ACTIVE_SKILL:
  1854. self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
  1855. else:
  1856. self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
  1857. self.__RefreshSkillPage("SUPPORT", self.SUPPORT_PAGE_SLOT_COUNT)
  1858.  
  1859. self.RefreshSkillPlusButtonList()
  1860.  
  1861. def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
  1862.  
  1863. ## ½ºÅ³ÀÌ ÀÖÀ¸¸é
  1864. if 0 == skillIndex:
  1865. return False
  1866.  
  1867. ## ·¹º§¾÷ Á¶°ÇÀ» ¸¸Á·ÇÑ´Ù¸é
  1868. if not skill.CanLevelUpSkill(skillIndex, skillLevel):
  1869. return False
  1870.  
  1871. return True
  1872.  
  1873. def __RefreshSkillPlusButton(self, name):
  1874. global HIDE_SUPPORT_SKILL_POINT
  1875. if HIDE_SUPPORT_SKILL_POINT and "SUPPORT" == name:
  1876. return
  1877.  
  1878. slotWindow = self.skillPageDict[name]
  1879. slotWindow.HideAllSlotButton()
  1880.  
  1881. slotStatType = self.skillPageStatDict[name]
  1882. if 0 == slotStatType:
  1883. return
  1884.  
  1885. statPoint = player.GetStatus(slotStatType)
  1886. startSlotIndex = slotWindow.GetStartIndex()
  1887. if "HORSE" == name:
  1888. startSlotIndex += self.ACTIVE_PAGE_SLOT_COUNT
  1889.  
  1890. if statPoint > 0:
  1891. for i in xrange(self.PAGE_SLOT_COUNT):
  1892. slotIndex = i + startSlotIndex
  1893. skillIndex = player.GetSkillIndex(slotIndex)
  1894. skillGrade = player.GetSkillGrade(slotIndex)
  1895. skillLevel = player.GetSkillLevel(slotIndex)
  1896.  
  1897. if skillIndex == 0:
  1898. continue
  1899. if skillGrade != 0:
  1900. continue
  1901.  
  1902. if name == "HORSE":
  1903. if player.GetStatus(player.LEVEL) >= skill.GetSkillLevelLimit(skillIndex):
  1904. if skillLevel < 20:
  1905. slotWindow.ShowSlotButton(self.__GetETCSkillRealSlotIndex(slotIndex))
  1906.  
  1907. else:
  1908. if "SUPPORT" == name:
  1909. if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
  1910. if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
  1911. slotWindow.ShowSlotButton(slotIndex)
  1912. else:
  1913. if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
  1914. slotWindow.ShowSlotButton(slotIndex)
  1915.  
  1916.  
  1917. def RefreshSkillPlusButtonList(self):
  1918.  
  1919. if self.isLoaded==0:
  1920. return
  1921.  
  1922. self.RefreshSkillPlusPointLabel()
  1923.  
  1924. if not self.__CanUseSkillNow():
  1925. return
  1926.  
  1927. try:
  1928. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  1929. self.__RefreshSkillPlusButton("HORSE")
  1930. else:
  1931. self.__RefreshSkillPlusButton("ACTIVE")
  1932.  
  1933. self.__RefreshSkillPlusButton("SUPPORT")
  1934.  
  1935. except:
  1936. import exception
  1937. exception.Abort("CharacterWindow.RefreshSkillPlusButtonList.BindObject")
  1938.  
  1939. def RefreshSkillPlusPointLabel(self):
  1940. if self.isLoaded==0:
  1941. return
  1942.  
  1943. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  1944. activeStatPoint = player.GetStatus(player.SKILL_HORSE)
  1945. self.activeSkillPointValue.SetText(str(activeStatPoint))
  1946.  
  1947. else:
  1948. activeStatPoint = player.GetStatus(player.SKILL_ACTIVE)
  1949. self.activeSkillPointValue.SetText(str(activeStatPoint))
  1950.  
  1951. supportStatPoint = max(0, player.GetStatus(player.SKILL_SUPPORT))
  1952. self.supportSkillPointValue.SetText(str(supportStatPoint))
  1953.  
  1954. ## Skill Level Up Button
  1955. def OnPressedSlotButton(self, slotNumber):
  1956. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
  1957.  
  1958. skillIndex = player.GetSkillIndex(srcSlotIndex)
  1959. curLevel = player.GetSkillLevel(srcSlotIndex)
  1960. maxLevel = skill.GetSkillMaxLevel(skillIndex)
  1961.  
  1962. net.SendChatPacket("/skillup " + str(skillIndex))
  1963.  
  1964. ## Use Skill
  1965. def ClickSkillSlot(self, slotIndex):
  1966.  
  1967. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotIndex)
  1968. skillIndex = player.GetSkillIndex(srcSlotIndex)
  1969. skillType = skill.GetSkillType(skillIndex)
  1970.  
  1971. if not self.__CanUseSkillNow():
  1972. if skill.SKILL_TYPE_ACTIVE == skillType:
  1973. return
  1974.  
  1975. for slotWindow in self.skillPageDict.values():
  1976. if slotWindow.HasSlot(slotIndex):
  1977. if skill.CanUseSkill(skillIndex):
  1978. player.ClickSkillSlot(srcSlotIndex)
  1979. return
  1980.  
  1981. mouseModule.mouseController.DeattachObject()
  1982.  
  1983. ## FIXME : ½ºÅ³À» »ç¿ëÇßÀ»¶§ ½½·Ô ¹øÈ£¸¦ °¡Áö°í ÇØ´ç ½½·ÔÀ» ã¾Æ¼­ ¾÷µ¥ÀÌÆ® ÇÑ´Ù.
  1984. ## ¸Å¿ì ºÒÇÕ¸®. ±¸Á¶ ÀÚü¸¦ °³¼±ÇØ¾ß ÇÒµí.
  1985. def OnUseSkill(self, slotIndex, coolTime):
  1986.  
  1987. skillIndex = player.GetSkillIndex(slotIndex)
  1988. skillType = skill.GetSkillType(skillIndex)
  1989.  
  1990. ## ACTIVE
  1991. if skill.SKILL_TYPE_ACTIVE == skillType:
  1992. skillGrade = player.GetSkillGrade(slotIndex)
  1993. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  1994. ## ETC
  1995. else:
  1996. slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
  1997.  
  1998. for slotWindow in self.skillPageDict.values():
  1999. if slotWindow.HasSlot(slotIndex):
  2000. slotWindow.SetSlotCoolTime(slotIndex, coolTime)
  2001. return
  2002.  
  2003. def OnActivateSkill(self, slotIndex):
  2004.  
  2005. skillGrade = player.GetSkillGrade(slotIndex)
  2006. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  2007.  
  2008. for slotWindow in self.skillPageDict.values():
  2009. if slotWindow.HasSlot(slotIndex):
  2010. if app.ENABLE_ACCE_SYSTEM:
  2011. slotWindow.ActivateSlotOld(slotIndex)
  2012. else:
  2013. slotWindow.ActivateSlot(slotIndex)
  2014.  
  2015. return
  2016.  
  2017. def OnDeactivateSkill(self, slotIndex):
  2018.  
  2019. skillGrade = player.GetSkillGrade(slotIndex)
  2020. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  2021.  
  2022. for slotWindow in self.skillPageDict.values():
  2023. if slotWindow.HasSlot(slotIndex):
  2024. if app.ENABLE_ACCE_SYSTEM:
  2025. slotWindow.DeactivateSlotOld(slotIndex)
  2026. else:
  2027. slotWindow.DeactivateSlot(slotIndex)
  2028. return
  2029.  
  2030. def __ShowJobToolTip(self):
  2031. self.toolTipJob.ShowToolTip()
  2032.  
  2033. def __HideJobToolTip(self):
  2034. self.toolTipJob.HideToolTip()
  2035.  
  2036. def __SetJobText(self, mainJob, subJob):
  2037. if player.GetStatus(player.LEVEL)<5:
  2038. subJob=0
  2039.  
  2040. if 949 == app.GetDefaultCodePage():
  2041. self.toolTipJob.ClearToolTip()
  2042.  
  2043. try:
  2044. jobInfoTitle=localeInfo.JOBINFO_TITLE[mainJob][subJob]
  2045. jobInfoData=localeInfo.JOBINFO_DATA_LIST[mainJob][subJob]
  2046. except IndexError:
  2047. print "uiCharacter.CharacterWindow.__SetJobText(mainJob=%d, subJob=%d)" % (mainJob, subJob)
  2048. return
  2049.  
  2050. self.toolTipJob.AutoAppendTextLine(jobInfoTitle)
  2051. self.toolTipJob.AppendSpace(5)
  2052.  
  2053. for jobInfoDataLine in jobInfoData:
  2054. self.toolTipJob.AutoAppendTextLine(jobInfoDataLine)
  2055.  
  2056. self.toolTipJob.AlignHorizonalCenter()
  2057.  
  2058. def __ShowAlignmentToolTip(self):
  2059. self.toolTipAlignment.ShowToolTip()
  2060.  
  2061. def __HideAlignmentToolTip(self):
  2062. self.toolTipAlignment.HideToolTip()
  2063.  
  2064. def RefreshCharacter(self):
  2065.  
  2066. if self.isLoaded==0:
  2067. return
  2068.  
  2069. ## Name
  2070. try:
  2071. characterName = player.GetName()
  2072. guildName = player.GetGuildName()
  2073. self.characterNameValue.SetText(characterName)
  2074. self.guildNameValue.SetText(guildName)
  2075. if not guildName:
  2076. if localeInfo.IsARABIC():
  2077. self.characterNameSlot.SetPosition(190, 34)
  2078. else:
  2079. self.characterNameSlot.SetPosition(109, 34)
  2080.  
  2081. self.guildNameSlot.Hide()
  2082. else:
  2083. if localeInfo.IsJAPAN():
  2084. self.characterNameSlot.SetPosition(143, 34)
  2085. else:
  2086. self.characterNameSlot.SetPosition(153, 34)
  2087. self.guildNameSlot.Show()
  2088. except:
  2089. import exception
  2090. exception.Abort("CharacterWindow.RefreshCharacter.BindObject")
  2091.  
  2092. race = net.GetMainActorRace()
  2093. group = net.GetMainActorSkillGroup()
  2094. empire = net.GetMainActorEmpire()
  2095.  
  2096. ## Job Text
  2097. job = chr.RaceToJob(race)
  2098. self.__SetJobText(job, group)
  2099.  
  2100. ## FaceImage
  2101. try:
  2102. faceImageName = FACE_IMAGE_DICT[race]
  2103.  
  2104. try:
  2105. self.faceImage.LoadImage(faceImageName)
  2106. except:
  2107. print "CharacterWindow.RefreshCharacter(race=%d, faceImageName=%s)" % (race, faceImageName)
  2108. self.faceImage.Hide()
  2109.  
  2110. except KeyError:
  2111. self.faceImage.Hide()
  2112.  
  2113. ## GroupName
  2114. self.__SetSkillGroupName(race, group)
  2115.  
  2116. ## Skill
  2117. if 0 == group:
  2118. self.__SelectSkillGroup(0)
  2119.  
  2120. else:
  2121. self.__SetSkillSlotData(race, group, empire)
  2122.  
  2123. if self.__CanUseHorseSkill():
  2124. self.__SelectSkillGroup(0)
  2125.  
  2126. def __SetSkillGroupName(self, race, group):
  2127.  
  2128. job = chr.RaceToJob(race)
  2129.  
  2130. if not self.SKILL_GROUP_NAME_DICT.has_key(job):
  2131. return
  2132.  
  2133. nameList = self.SKILL_GROUP_NAME_DICT[job]
  2134.  
  2135. if 0 == group:
  2136. self.skillGroupButton1.SetText(nameList[1])
  2137. self.skillGroupButton2.SetText(nameList[2])
  2138. self.skillGroupButton1.Show()
  2139. self.skillGroupButton2.Show()
  2140. self.activeSkillGroupName.Hide()
  2141. if app.ENABLE_WOLFMAN_CHARACTER and playerSettingModule.RACE_WOLFMAN_M == race:
  2142. self.skillGroupButton2.Hide()
  2143.  
  2144. else:
  2145.  
  2146. if self.__CanUseHorseSkill():
  2147. self.activeSkillGroupName.Hide()
  2148. self.skillGroupButton1.SetText(nameList.get(group, "Noname"))
  2149. self.skillGroupButton2.SetText(localeInfo.SKILL_GROUP_HORSE)
  2150. self.skillGroupButton1.Show()
  2151. self.skillGroupButton2.Show()
  2152.  
  2153. else:
  2154. self.activeSkillGroupName.SetText(nameList.get(group, "Noname"))
  2155. self.activeSkillGroupName.Show()
  2156. self.skillGroupButton1.Hide()
  2157. self.skillGroupButton2.Hide()
  2158.  
  2159. def __SetSkillSlotData(self, race, group, empire=0):
  2160.  
  2161. ## SkillIndex
  2162. playerSettingModule.RegisterSkill(race, group, empire)
  2163.  
  2164. ## Event
  2165. self.__SetSkillSlotEvent()
  2166.  
  2167. ## Refresh
  2168. self.RefreshSkill()
  2169.  
  2170. def __SelectSkillGroup(self, index):
  2171. for btn in self.skillGroupButton:
  2172. btn.SetUp()
  2173. self.skillGroupButton[index].Down()
  2174.  
  2175. if self.__CanUseHorseSkill():
  2176. if 0 == index:
  2177. index = net.GetMainActorSkillGroup()-1
  2178. elif 1 == index:
  2179. index = self.PAGE_HORSE
  2180.  
  2181. self.curSelectedSkillGroup = index
  2182. self.__SetSkillSlotData(net.GetMainActorRace(), index+1, net.GetMainActorEmpire())
  2183.  
  2184. def __CanUseSkillNow(self):
  2185. if 0 == net.GetMainActorSkillGroup():
  2186. return False
  2187.  
  2188. return True
  2189.  
  2190. def __CanUseHorseSkill(self):
  2191.  
  2192. slotIndex = player.GetSkillSlotIndex(player.SKILL_INDEX_RIDING)
  2193.  
  2194. if not slotIndex:
  2195. return False
  2196.  
  2197. grade = player.GetSkillGrade(slotIndex)
  2198. level = player.GetSkillLevel(slotIndex)
  2199. if level < 0:
  2200. level *= -1
  2201. if grade >= 1 and level >= 1:
  2202. return True
  2203.  
  2204. return False
  2205.  
  2206. def __IsChangedHorseRidingSkillLevel(self):
  2207. ret = False
  2208.  
  2209. if -1 == self.canUseHorseSkill:
  2210. self.canUseHorseSkill = self.__CanUseHorseSkill()
  2211.  
  2212. if self.canUseHorseSkill != self.__CanUseHorseSkill():
  2213. ret = True
  2214.  
  2215. self.canUseHorseSkill = self.__CanUseHorseSkill()
  2216. return ret
  2217.  
  2218. def __GetRealSkillSlot(self, skillGrade, skillSlot):
  2219. return skillSlot + min(skill.SKILL_GRADE_COUNT-1, skillGrade)*skill.SKILL_GRADE_STEP_COUNT
  2220.  
  2221. def __GetETCSkillRealSlotIndex(self, skillSlot):
  2222. if skillSlot > 100:
  2223. return skillSlot
  2224. return skillSlot % self.ACTIVE_PAGE_SLOT_COUNT
  2225.  
  2226. def __RealSkillSlotToSourceSlot(self, realSkillSlot):
  2227. if realSkillSlot > 100:
  2228. return realSkillSlot
  2229. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  2230. return realSkillSlot + self.ACTIVE_PAGE_SLOT_COUNT
  2231. return realSkillSlot % skill.SKILL_GRADE_STEP_COUNT
  2232.  
  2233. def __GetSkillGradeFromSlot(self, skillSlot):
  2234. return int(skillSlot / skill.SKILL_GRADE_STEP_COUNT)
  2235.  
  2236. def SelectSkillGroup(self, index):
  2237. self.__SelectSkillGroup(index)
  2238.  
  2239. if app.ENABLE_MOUSE_WHEEL_TOP_WINDOW:
  2240. def OnMouseWheelButtonUp(self):
  2241. if "QUEST" == self.state:
  2242. if self.questScrollBar:
  2243. self.questScrollBar.OnUp()
  2244. return True
  2245.  
  2246. return False
  2247.  
  2248. def OnMouseWheelButtonDown(self):
  2249. if "QUEST" == self.state:
  2250. if self.questScrollBar:
  2251. self.questScrollBar.OnDown()
  2252. return True
  2253.  
  2254. return False
  2255.  
  2256.  
  2257. if not app.ENABLE_QUEST_RENEWAL:
  2258. def OnQuestScroll(self):
  2259. questCount = quest.GetQuestCount()
  2260. scrollLineCount = max(0, questCount - quest.QUEST_MAX_NUM)
  2261. startIndex = int(scrollLineCount * self.questScrollBar.GetPos())
  2262.  
  2263. if startIndex != self.questShowingStartIndex:
  2264. self.questShowingStartIndex = startIndex
  2265. self.RefreshQuest()
  2266.  
Advertisement
Add Comment
Please, Sign In to add comment