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_QUEST_RENEWAL:
  19. import math, uiQuest
  20. SHOW_ONLY_ACTIVE_SKILL = FALSE
  21. SHOW_LIMIT_SUPPORT_SKILL_LIST = []
  22. HIDE_SUPPORT_SKILL_POINT = FALSE
  23. if app.ENABLE_CONQUEROR_LEVEL:
  24. HIDE_SUPPORT_SKILL_POINT = TRUE
  25. SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140, 132, 133, 134, 246]
  26. else:
  27. if localeInfo.IsYMIR():
  28. SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140,141,142]
  29. [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140, 0, 0, 0, 0]
  30. if not localeInfo.IsCHEONMA():
  31. HIDE_SUPPORT_SKILL_POINT = TRUE
  32. SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140,141,142]
  33. elif localeInfo.IsJAPAN() or (localeInfo.IsEUROPE() and app.GetLocalePath() != "locale/ca") and (localeInfo.IsEUROPE() and app.GetLocalePath() != "locale/br"):
  34. HIDE_SUPPORT_SKILL_POINT = TRUE
  35. SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140]
  36. else:
  37. HIDE_SUPPORT_SKILL_POINT = TRUE
  38. FACE_IMAGE_DICT = {
  39. playerSettingModule.RACE_WARRIOR_M : "icon/face/warrior_m.tga",
  40. playerSettingModule.RACE_WARRIOR_W : "icon/face/warrior_w.tga",
  41. playerSettingModule.RACE_ASSASSIN_M : "icon/face/assassin_m.tga",
  42. playerSettingModule.RACE_ASSASSIN_W : "icon/face/assassin_w.tga",
  43. playerSettingModule.RACE_SURA_M : "icon/face/sura_m.tga",
  44. playerSettingModule.RACE_SURA_W : "icon/face/sura_w.tga",
  45. playerSettingModule.RACE_SHAMAN_M : "icon/face/shaman_m.tga",
  46. playerSettingModule.RACE_SHAMAN_W : "icon/face/shaman_w.tga",
  47. }
  48. if app.ENABLE_WOLFMAN_CHARACTER:
  49. FACE_IMAGE_DICT.update({playerSettingModule.RACE_WOLFMAN_M : "icon/face/wolfman_m.tga",})
  50. def unsigned32(n):
  51. return n & 0xFFFFFFFFL
  52. if app.ENABLE_QUEST_RENEWAL:
  53. quest_slot_listbar = {
  54. "name" : "Quest_Slot",
  55. "type" : "listbar",
  56. "x" : 0,
  57. "y" : 0,
  58. "width" : 210,
  59. "height" : 20,
  60. "text" : "Quest title",
  61. "align" : "left",
  62. "horizontal_align" : "left",
  63. "vertical_align" : "left",
  64. "text_horizontal_align" : "left",
  65. "all_align" : "left",
  66. "text_height": 40
  67. }
  68. quest_lable_expend_img_path_dict = {
  69. 0: "d:/ymir work/ui/quest_re/tabcolor_1_main.tga",
  70. 1: "d:/ymir work/ui/quest_re/tabcolor_2_sub.tga",
  71. 2: "d:/ymir work/ui/quest_re/tabcolor_3_levelup.tga",
  72. 3: "d:/ymir work/ui/quest_re/tabcolor_4_event.tga",
  73. 4: "d:/ymir work/ui/quest_re/tabcolor_5_collection.tga",
  74. 5: "d:/ymir work/ui/quest_re/tabcolor_6_system.tga",
  75. 6: "d:/ymir work/ui/quest_re/tabcolor_7_scroll.tga",
  76. 7: "d:/ymir work/ui/quest_re/tabcolor_8_daily.tga"
  77. }
  78. quest_label_dict = {
  79. 0 : uiScriptLocale.QUEST_UI_TEXT_MAIN,
  80. 1 : uiScriptLocale.QUEST_UI_TEXT_SUB,
  81. 2 : uiScriptLocale.QUEST_UI_TEXT_LEVELUP,
  82. 3 : uiScriptLocale.QUEST_UI_TEXT_EVENT,
  83. 4 : uiScriptLocale.QUEST_UI_TEXT_COLLECTION,
  84. 5 : uiScriptLocale.QUEST_UI_TEXT_SYSTEM,
  85. 6 : uiScriptLocale.QUEST_UI_TEXT_SCROLL,
  86. 7 : uiScriptLocale.QUEST_UI_TEXT_DAILY,
  87. }
  88. class CharacterWindow(ui.ScriptWindow):
  89. if app.ENABLE_CONQUEROR_LEVEL:
  90. ACTIVE_PAGE_SLOT_COUNT = 8
  91. SUPPORT_PAGE_SLOT_COUNT = 12
  92. PAGE_SLOT_COUNT = 12
  93. PAGE_HORSE = 2
  94. SKILL_GROUP_NAME_DICT = {
  95. playerSettingModule.JOB_WARRIOR : { 1 : localeInfo.SKILL_GROUP_WARRIOR_1, 2 : localeInfo.SKILL_GROUP_WARRIOR_2, },
  96. playerSettingModule.JOB_ASSASSIN : { 1 : localeInfo.SKILL_GROUP_ASSASSIN_1, 2 : localeInfo.SKILL_GROUP_ASSASSIN_2, },
  97. playerSettingModule.JOB_SURA : { 1 : localeInfo.SKILL_GROUP_SURA_1, 2 : localeInfo.SKILL_GROUP_SURA_2, },
  98. playerSettingModule.JOB_SHAMAN : { 1 : localeInfo.SKILL_GROUP_SHAMAN_1, 2 : localeInfo.SKILL_GROUP_SHAMAN_2, },
  99. }
  100. if app.ENABLE_WOLFMAN_CHARACTER:
  101. SKILL_GROUP_NAME_DICT.update({playerSettingModule.JOB_WOLFMAN : { 1 : localeInfo.JOB_WOLFMAN1, 2 : localeInfo.JOB_WOLFMAN2, },})
  102. STAT_DESCRIPTION = {
  103. "HTH" : localeInfo.STAT_TOOLTIP_CON,
  104. "INT" : localeInfo.STAT_TOOLTIP_INT,
  105. "STR" : localeInfo.STAT_TOOLTIP_STR,
  106. "DEX" : localeInfo.STAT_TOOLTIP_DEX,
  107. }
  108. STAT_MINUS_DESCRIPTION = localeInfo.STAT_MINUS_DESCRIPTION
  109. if app.ENABLE_QUEST_RENEWAL:
  110. MAX_QUEST_PAGE_HEIGHT = 293.5
  111. def __init__(self):
  112. ui.ScriptWindow.__init__(self)
  113. if app.ENABLE_QUEST_RENEWAL:
  114. self.isQuestCategoryLoad = False
  115. self.state = "STATUS"
  116. if app.ENABLE_CONQUEROR_LEVEL:
  117. self.substate = "BASE"
  118. self.statusConquerorPlusCommandDict={
  119. "SMH_STR" : "/conqueror_stat smh_str",
  120. "SMH_HP" : "/conqueror_stat smh_hp",
  121. "SMH_MOVE" : "/conqueror_stat smh_move",
  122. "SMH_INMUNE" : "/conqueror_stat smh_inmune",
  123. }
  124. self.isLoaded = 0
  125. self.toolTipSkill = 0
  126. self.__Initialize()
  127. self.__LoadWindow()
  128. self.statusPlusCommandDict={
  129. "HTH" : "/stat ht",
  130. "INT" : "/stat iq",
  131. "STR" : "/stat st",
  132. "DEX" : "/stat dx",
  133. }
  134. self.statusMinusCommandDict={
  135. "HTH-" : "/stat- ht",
  136. "INT-" : "/stat- iq",
  137. "STR-" : "/stat- st",
  138. "DEX-" : "/stat- dx",
  139. }
  140. def __del__(self):
  141. ui.ScriptWindow.__del__(self)
  142. def __Initialize(self):
  143. self.refreshToolTip = 0
  144. self.curSelectedSkillGroup = 0
  145. self.canUseHorseSkill = -1
  146. self.toolTip = None
  147. self.toolTipJob = None
  148. self.toolTipAlignment = None
  149. self.toolTipSkill = None
  150. self.faceImage = None
  151. self.statusPlusLabel = None
  152. self.statusPlusValue = None
  153. self.activeSlot = None
  154. self.tabDict = None
  155. self.tabButtonDict = None
  156. self.pageDict = None
  157. self.titleBarDict = None
  158. self.statusPlusButtonDict = None
  159. self.statusMinusButtonDict = None
  160. if app.ENABLE_CONQUEROR_LEVEL:
  161. self.statusConquerorPlusButtonDict = None
  162. self.skillPageDict = None
  163. if app.ENABLE_QUEST_RENEWAL:
  164. self.questScrollBar = None
  165. self.questLastScrollPosition = 0
  166. self.questPage = None
  167. self.questTitleBar = None
  168. self.questSlotList = []
  169. self.questCategory = {}
  170. self.questCategoryList = []
  171. self.questColorList = {
  172. "green" : 0xFF83C055,
  173. "blue": 0xFF45678D,
  174. "golden": 0xFFCAB62F,
  175. "default_title": 0xFFCEC6B5
  176. }
  177. self.questOpenedCategories = []
  178. self.questMaxOpenedCategories = 1
  179. self.questClicked = []
  180. self.questIndexMap = {}
  181. self.questCounterList = []
  182. self.questClockList = []
  183. self.questSeparatorList = []
  184. self.displayY = 0
  185. self.baseCutY = 0
  186. self.questCategoryRenderPos = []
  187. self.questSlideWnd = {}
  188. self.questSlideWndNewKey = 0
  189. else:
  190. self.questShowingStartIndex = 0
  191. self.questScrollBar = None
  192. self.questSlot = None
  193. self.questNameList = None
  194. self.questLastTimeList = None
  195. self.questLastCountList = None
  196. self.skillGroupButton = ()
  197. self.activeSlot = None
  198. self.activeSkillPointValue = None
  199. self.supportSkillPointValue = None
  200. self.skillGroupButton1 = None
  201. self.skillGroupButton2 = None
  202. self.activeSkillGroupName = None
  203. self.guildNameSlot = None
  204. self.guildNameValue = None
  205. self.characterNameSlot = None
  206. self.characterNameValue = None
  207. self.emotionToolTip = None
  208. self.soloEmotionSlot = None
  209. self.dualEmotionSlot = None
  210. if app.ENABLE_CONQUEROR_LEVEL:
  211. self.toolTipConquerorInfoButton = None
  212. self.tabSungmaButtonDict = None
  213. self.SungmaButton = None
  214. if app.ENABLE_EMOJI_UPDATE:
  215. self.specialEmotionSlot = None
  216. def Show(self):
  217. self.__LoadWindow()
  218. ui.ScriptWindow.Show(self)
  219. def __LoadScript(self, fileName):
  220. pyScrLoader = ui.PythonScriptLoader()
  221. pyScrLoader.LoadScriptFile(self, fileName)
  222. def __BindObject(self):
  223. self.toolTip = uiToolTip.ToolTip()
  224. self.toolTipJob = uiToolTip.ToolTip()
  225. self.toolTipAlignment = uiToolTip.ToolTip(130)
  226. if app.ENABLE_CONQUEROR_LEVEL:
  227. self.toolTipConquerorInfoButton = uiToolTip.ToolTip()
  228. self.faceImage = self.GetChild("Face_Image")
  229. faceSlot=self.GetChild("Face_Slot")
  230. if 949 == app.GetDefaultCodePage():
  231. faceSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowJobToolTip)
  232. faceSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideJobToolTip)
  233. self.statusPlusLabel = self.GetChild("Status_Plus_Label")
  234. self.statusPlusValue = self.GetChild("Status_Plus_Value")
  235. self.characterNameSlot = self.GetChild("Character_Name_Slot")
  236. self.characterNameValue = self.GetChild("Character_Name")
  237. self.guildNameSlot = self.GetChild("Guild_Name_Slot")
  238. self.guildNameValue = self.GetChild("Guild_Name")
  239. self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowAlignmentToolTip)
  240. self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideAlignmentToolTip)
  241. self.activeSlot = self.GetChild("Skill_Active_Slot")
  242. self.activeSkillPointValue = self.GetChild("Active_Skill_Point_Value")
  243. self.supportSkillPointValue = self.GetChild("Support_Skill_Point_Value")
  244. self.skillGroupButton1 = self.GetChild("Skill_Group_Button_1")
  245. self.skillGroupButton2 = self.GetChild("Skill_Group_Button_2")
  246. self.activeSkillGroupName = self.GetChild("Active_Skill_Group_Name")
  247. if app.ENABLE_QUEST_RENEWAL:
  248. self.questScrollBar = self.GetChild("Quest_ScrollBar")
  249. self.questPage = self.GetChild("Quest_Page")
  250. self.questTitleBar = self.GetChild("Quest_TitleBar")
  251. self.quest_page_board_window = self.GetChild("quest_page_board_window")
  252. self.quest_object_board_window = self.GetChild("quest_object_board_window")
  253. self.tabDict = {
  254. "STATUS" : self.GetChild("Tab_01"),
  255. "SKILL" : self.GetChild("Tab_02"),
  256. "EMOTICON" : self.GetChild("Tab_03"),
  257. "QUEST" : self.GetChild("Tab_04"),
  258. }
  259. self.tabButtonDict = {
  260. "STATUS" : self.GetChild("Tab_Button_01"),
  261. "SKILL" : self.GetChild("Tab_Button_02"),
  262. "EMOTICON" : self.GetChild("Tab_Button_03"),
  263. "QUEST" : self.GetChild("Tab_Button_04")
  264. }
  265. self.pageDict = {
  266. "STATUS" : self.GetChild("Character_Page"),
  267. "SKILL" : self.GetChild("Skill_Page"),
  268. "EMOTICON" : self.GetChild("Emoticon_Page"),
  269. "QUEST" : self.GetChild("Quest_Page")
  270. }
  271. self.titleBarDict = {
  272. "STATUS" : self.GetChild("Character_TitleBar"),
  273. "SKILL" : self.GetChild("Skill_TitleBar"),
  274. "EMOTICON" : self.GetChild("Emoticon_TitleBar"),
  275. "QUEST" : self.GetChild("Quest_TitleBar")
  276. }
  277. self.statusPlusButtonDict = {
  278. "HTH" : self.GetChild("HTH_Plus"),
  279. "INT" : self.GetChild("INT_Plus"),
  280. "STR" : self.GetChild("STR_Plus"),
  281. "DEX" : self.GetChild("DEX_Plus"),
  282. }
  283. self.statusMinusButtonDict = {
  284. "HTH-" : self.GetChild("HTH_Minus"),
  285. "INT-" : self.GetChild("INT_Minus"),
  286. "STR-" : self.GetChild("STR_Minus"),
  287. "DEX-" : self.GetChild("DEX_Minus"),
  288. }
  289. self.skillPageDict = {
  290. "ACTIVE" : self.GetChild("Skill_Active_Slot"),
  291. "SUPPORT" : self.GetChild("Skill_ETC_Slot"),
  292. "HORSE" : self.GetChild("Skill_Active_Slot"),
  293. }
  294. self.skillPageStatDict = {
  295. "SUPPORT" : player.SKILL_SUPPORT,
  296. "ACTIVE" : player.SKILL_ACTIVE,
  297. "HORSE" : player.SKILL_HORSE,
  298. }
  299. self.skillGroupButton = (
  300. self.GetChild("Skill_Group_Button_1"),
  301. self.GetChild("Skill_Group_Button_2"),
  302. )
  303. if app.ENABLE_CONQUEROR_LEVEL:
  304. self.tabSungmaButtonDict = {
  305. "BASE" : self.GetChild("change_base_button"),
  306. "SUNGMA" : self.GetChild("change_conqueror_button")
  307. }
  308. self.SungmaPageDict = {
  309. "BASE" : self.GetChild("base_info"),
  310. "SUNGMA" : self.GetChild("sungma_info"),
  311. }
  312. self.statusConquerorPlusButtonDict = {
  313. "SMH_STR" : self.GetChild("sungma_str_plus"),
  314. "SMH_HP" : self.GetChild("sungma_hp_plus"),
  315. "SMH_MOVE" : self.GetChild("sungma_move_plus"),
  316. "SMH_INMUNE" : self.GetChild("sungma_immune_plus"),
  317. }
  318. self.HTH_IMG = self.GetChild("HTH_IMG")
  319. self.INT_IMG = self.GetChild("INT_IMG")
  320. self.STR_IMG = self.GetChild("STR_IMG")
  321. self.DEX_IMG = self.GetChild("DEX_IMG")
  322. self.HTH_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowHTHToolTip)
  323. self.HTH_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideHTHToolTip)
  324. self.INT_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowINTToolTip)
  325. self.INT_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideINTToolTip)
  326. self.STR_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowSTRToolTip)
  327. self.STR_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideSTRToolTip)
  328. self.DEX_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowDEXToolTip)
  329. self.DEX_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideDEXToolTip)
  330. self.MSPD_IMG = self.GetChild("MSPD_IMG")
  331. self.ASPD_IMG = self.GetChild("ASPD_IMG")
  332. self.CSPD_IMG = self.GetChild("CSPD_IMG")
  333. self.MATT_IMG = self.GetChild("MATT_IMG")
  334. self.MDEF_IMG = self.GetChild("MDEF_IMG")
  335. [HASH=4621]#self.DEX_IMG[/HASH] = self.GetChild("ER_IMG")
  336. self.MSPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowMSPDToolTip)
  337. self.MSPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideMSPDToolTip)
  338. self.ASPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowASPDToolTip)
  339. self.ASPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideASPDToolTip)
  340. self.CSPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowCSPDToolTip)
  341. self.CSPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideCSPDToolTip)
  342. self.MATT_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowMATTToolTip)
  343. self.MATT_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideMATTToolTip)
  344. self.MDEF_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowMDEFToolTip)
  345. self.MDEF_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideMDEFToolTip)
  346. global SHOW_ONLY_ACTIVE_SKILL
  347. global HIDE_SUPPORT_SKILL_POINT
  348. if SHOW_ONLY_ACTIVE_SKILL or HIDE_SUPPORT_SKILL_POINT:
  349. self.GetChild("Support_Skill_Point_Label").Hide()
  350. self.soloEmotionSlot = self.GetChild("SoloEmotionSlot")
  351. self.dualEmotionSlot = self.GetChild("DualEmotionSlot")
  352. if app.ENABLE_EMOJI_UPDATE:
  353. self.specialEmotionSlot = self.GetChild("SpecialEmotionSlot")
  354. self.__SetEmotionSlot()
  355. if app.ENABLE_QUEST_RENEWAL:
  356. self.questScrollBar.SetParent(self.quest_page_board_window)
  357. for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
  358. self.questCategory = ui.SubTitleBar()
  359. self.questCategory.SetParent(self.questPage)
  360. self.questCategory.MakeSubTitleBar(210, "red")
  361. self.questCategory.SetText(quest_label_dict[i])
  362. self.questCategory.SetSize(210, 16)
  363. self.questCategory.SetPosition(13, 0)
  364. self.questCategoryList.append(self.questCategory)
  365. self.questCategoryRenderPos.append(0)
  366. self.questScrollBar.SetParent(self.questPage)
  367. self.RearrangeQuestCategories(xrange(quest.QUEST_CATEGORY_MAX_NUM))
  368. else:
  369. self.questShowingStartIndex = 0
  370. self.questScrollBar = self.GetChild("Quest_ScrollBar")
  371. self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll))
  372. self.questSlot = self.GetChild("Quest_Slot")
  373. for i in xrange(quest.QUEST_MAX_NUM):
  374. self.questSlot.HideSlotBaseImage(i)
  375. self.questSlot.SetCoverButton(i,\
  376. "d:/ymir work/ui/game/quest/slot_button_01.sub",\
  377. "d:/ymir work/ui/game/quest/slot_button_02.sub",\
  378. "d:/ymir work/ui/game/quest/slot_button_03.sub",\
  379. "d:/ymir work/ui/game/quest/slot_button_03.sub", True)
  380. self.questNameList = []
  381. self.questLastTimeList = []
  382. self.questLastCountList = []
  383. for i in xrange(quest.QUEST_MAX_NUM):
  384. self.questNameList.append(self.GetChild("Quest_Name_0" + str(i)))
  385. self.questLastTimeList.append(self.GetChild("Quest_LastTime_0" + str(i)))
  386. self.questLastCountList.append(self.GetChild("Quest_LastCount_0" + str(i)))
  387. def __SetSkillSlotEvent(self):
  388. for skillPageValue in self.skillPageDict.itervalues():
  389. skillPageValue.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  390. skillPageValue.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectSkill))
  391. skillPageValue.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
  392. skillPageValue.SetUnselectItemSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
  393. skillPageValue.SetUseSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
  394. skillPageValue.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  395. skillPageValue.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  396. skillPageValue.SetPressedSlotButtonEvent(ui.__mem_func__(self.OnPressedSlotButton))
  397. skillPageValue.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
  398. "d:/ymir work/ui/game/windows/btn_plus_over.sub",\
  399. "d:/ymir work/ui/game/windows/btn_plus_down.sub")
  400. def __SetEmotionSlot(self):
  401. self.emotionToolTip = uiToolTip.ToolTip()
  402. for slot in (self.soloEmotionSlot, self.dualEmotionSlot, self.specialEmotionSlot):#ENABLE_EMOJI_UPDATE
  403. slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  404. slot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectEmotion))
  405. slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
  406. slot.SetUseSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
  407. slot.SetOverInItemEvent(ui.__mem_func__(self.__OverInEmotion))
  408. slot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutEmotion))
  409. slot.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
  410. "d:/ymir work/ui/game/windows/btn_plus_over.sub",\
  411. "d:/ymir work/ui/game/windows/btn_plus_down.sub")
  412. for slotIdx, datadict in emotion.EMOTION_DICT.items():
  413. emotionIdx = slotIdx
  414. slot = self.soloEmotionSlot
  415. if app.ENABLE_EMOJI_UPDATE:
  416. if slotIdx > 50 and slotIdx < 101:
  417. slot = self.dualEmotionSlot
  418. elif slotIdx >= 101:
  419. slot = self.specialEmotionSlot
  420. else:
  421. if slotIdx > 50:
  422. slot = self.dualEmotionSlot
  423. slot.SetEmotionSlot(slotIdx, emotionIdx)
  424. slot.SetCoverButton(slotIdx)
  425. def __SelectEmotion(self, slotIndex):
  426. if not slotIndex in emotion.EMOTION_DICT:
  427. return
  428. if app.IsPressed(app.DIK_LCONTROL):
  429. player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_EMOTION, slotIndex)
  430. return
  431. mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_EMOTION, slotIndex, slotIndex)
  432. def __ClickEmotionSlot(self, slotIndex):
  433. print "click emotion"
  434. if not slotIndex in emotion.EMOTION_DICT:
  435. return
  436. print "check acting"
  437. if player.IsActingEmotion():
  438. return
  439. command = emotion.EMOTION_DICT[slotIndex]["command"]
  440. print "command", command
  441. if slotIndex > 50 and slotIndex < 101:#ENABLE_EMOJI_UPDATE
  442. vid = player.GetTargetVID()
  443. if 0 == vid or vid == player.GetMainCharacterIndex() or chr.IsNPC(vid) or chr.IsEnemy(vid):
  444. import chat
  445. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EMOTION_CHOOSE_ONE)
  446. return
  447. command += " " + chr.GetNameByVID(vid)
  448. print "send_command", command
  449. net.SendChatPacket(command)
  450. def ActEmotion(self, emotionIndex):
  451. self.__ClickEmotionSlot(emotionIndex)
  452. def __OverInEmotion(self, slotIndex):
  453. if self.emotionToolTip:
  454. if not slotIndex in emotion.EMOTION_DICT:
  455. return
  456. self.emotionToolTip.ClearToolTip()
  457. self.emotionToolTip.SetTitle(emotion.EMOTION_DICT[slotIndex]["name"])
  458. self.emotionToolTip.AlignHorizonalCenter()
  459. self.emotionToolTip.ShowToolTip()
  460. def __OverOutEmotion(self):
  461. if self.emotionToolTip:
  462. self.emotionToolTip.HideToolTip()
  463. def __BindEvent(self):
  464. for i in xrange(len(self.skillGroupButton)):
  465. self.skillGroupButton[i].SetEvent(lambda arg=i: self.__SelectSkillGroup(arg))
  466. self.RefreshQuest()
  467. self.__HideJobToolTip()
  468. for (tabKey, tabButton) in self.tabButtonDict.items():
  469. tabButton.SetEvent(ui.__mem_func__(self.__OnClickTabButton), tabKey)
  470. if app.ENABLE_CONQUEROR_LEVEL:
  471. for (tabKey, tabButton) in self.tabSungmaButtonDict.items():
  472. tabButton.SetEvent(ui.__mem_func__(self.__OnClickTabSungmaButton), tabKey)
  473. for (statusPlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  474. statusPlusButton.SAFE_SetEvent(self.__OnClickStatusPlusButton, statusPlusKey)
  475. statusPlusButton.ShowToolTip = lambda arg=statusPlusKey: self.__OverInStatButton(arg)
  476. statusPlusButton.HideToolTip = lambda arg=statusPlusKey: self.__OverOutStatButton()
  477. for (statusMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  478. statusMinusButton.SAFE_SetEvent(self.__OnClickStatusMinusButton, statusMinusKey)
  479. statusMinusButton.ShowToolTip = lambda arg=statusMinusKey: self.__OverInStatMinusButton(arg)
  480. statusMinusButton.HideToolTip = lambda arg=statusMinusKey: self.__OverOutStatMinusButton()
  481. for titleBarValue in self.titleBarDict.itervalues():
  482. titleBarValue.SetCloseEvent(ui.__mem_func__(self.Hide))
  483. if app.ENABLE_QUEST_RENEWAL:
  484. self.questTitleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  485. self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScrollQuest))
  486. for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
  487. self.questCategoryList[i].SetEvent(ui.__mem_func__(self.__OnClickQuestCategoryButton), i)
  488. else:
  489. self.questSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectQuest))
  490. def __LoadWindow(self):
  491. if self.isLoaded == 1:
  492. return
  493. self.isLoaded = 1
  494. try:
  495. self.__LoadScript("UIScript/CharacterWindow.py")
  496. self.__BindObject()
  497. self.__BindEvent()
  498. except:
  499. import exception
  500. exception.Abort("CharacterWindow.__LoadWindow")
  501. [HASH=4622]#self.tabButtonDict[/HASH]["EMOTICON"].Disable()
  502. self.SetState("STATUS")
  503. if app.ENABLE_CONQUEROR_LEVEL:
  504. self.SetSubState("BASE")
  505. def Destroy(self):
  506. self.ClearDictionary()
  507. self.__Initialize()
  508. def Close(self):
  509. if 0 != self.toolTipSkill:
  510. self.toolTipSkill.Hide()
  511. if app.ENABLE_QUEST_RENEWAL:
  512. if self.questSlideWndNewKey > 0:
  513. if self.questSlideWnd[self.questSlideWndNewKey-1] is not None:
  514. self.questSlideWnd[self.questSlideWndNewKey-1].CloseSelf()
  515. self.Hide()
  516. def SetSkillToolTip(self, toolTipSkill):
  517. self.toolTipSkill = toolTipSkill
  518. if app.ENABLE_CONQUEROR_LEVEL:
  519. def __OnClickConquerorStatusPlusButton(self, statusKey):
  520. try:
  521. statusConquerorPlusCommand=self.statusConquerorPlusCommandDict[statusKey]
  522. net.SendChatPacket(statusConquerorPlusCommand)
  523. except KeyError, msg:
  524. dbg.TraceError("CharacterWindow.__OnClickStatusPlusButton KeyError: %s", msg)
  525. def __OnClickStatusPlusButton(self, statusKey):
  526. try:
  527. statusPlusCommand=self.statusPlusCommandDict[statusKey]
  528. net.SendChatPacket(statusPlusCommand)
  529. except KeyError, msg:
  530. dbg.TraceError("CharacterWindow.__OnClickStatusPlusButton KeyError: %s", msg)
  531. def __OnClickStatusMinusButton(self, statusKey):
  532. try:
  533. statusMinusCommand=self.statusMinusCommandDict[statusKey]
  534. net.SendChatPacket(statusMinusCommand)
  535. except KeyError, msg:
  536. dbg.TraceError("CharacterWindow.__OnClickStatusMinusButton KeyError: %s", msg)
  537. def __OnClickTabButton(self, stateKey):
  538. self.SetState(stateKey)
  539. if app.ENABLE_CONQUEROR_LEVEL:
  540. def __OnClickTabSungmaButton(self, stateKey):
  541. self.SetSubState(stateKey)
  542. def SetState(self, stateKey):
  543. self.state = stateKey
  544. if app.ENABLE_QUEST_RENEWAL:
  545. if stateKey != "QUEST":
  546. self.questPage.Hide()
  547. if self.questSlideWndNewKey > 0:
  548. if self.questSlideWnd[self.questSlideWndNewKey-1] is not None:
  549. self.questSlideWnd[self.questSlideWndNewKey-1].CloseSelf()
  550. else:
  551. self.__LoadQuestCategory()
  552. for (tabKey, tabButton) in self.tabButtonDict.items():
  553. if stateKey!=tabKey:
  554. tabButton.SetUp()
  555. for tabValue in self.tabDict.itervalues():
  556. tabValue.Hide()
  557. for pageValue in self.pageDict.itervalues():
  558. pageValue.Hide()
  559. for titleBarValue in self.titleBarDict.itervalues():
  560. titleBarValue.Hide()
  561. self.titleBarDict[stateKey].Show()
  562. self.tabDict[stateKey].Show()
  563. self.pageDict[stateKey].Show()
  564. def GetState(self):
  565. return self.state
  566. if app.ENABLE_CONQUEROR_LEVEL:
  567. def SetSubState(self, stateSubKey):
  568. self.substate = stateSubKey
  569. for (tabKey, tabButton) in self.tabSungmaButtonDict.items():
  570. if stateSubKey!=tabKey:
  571. tabButton.SetUp()
  572. for pageValue in self.SungmaPageDict.itervalues():
  573. pageValue.Hide()
  574. self.__RefreshStatusPlusButtonList()
  575. self.SungmaPageDict[stateSubKey].Show()
  576. def GetSubState(self):
  577. return self.substate
  578. def __GetTotalAtkText(self):
  579. minAtk=player.GetStatus(player.ATT_MIN)
  580. maxAtk=player.GetStatus(player.ATT_MAX)
  581. atkBonus=player.GetStatus(player.ATT_BONUS)
  582. attackerBonus=player.GetStatus(player.ATTACKER_BONUS)
  583. if minAtk==maxAtk:
  584. return "%d" % (minAtk+atkBonus+attackerBonus)
  585. else:
  586. return "%d-%d" % (minAtk+atkBonus+attackerBonus, maxAtk+atkBonus+attackerBonus)
  587. def __GetTotalMagAtkText(self):
  588. minMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MIN_MAGIC_WEP)
  589. maxMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MAX_MAGIC_WEP)
  590. if minMagAtk==maxMagAtk:
  591. return "%d" % (minMagAtk)
  592. else:
  593. return "%d-%d" % (minMagAtk, maxMagAtk)
  594. def __GetTotalDefText(self):
  595. defValue=player.GetStatus(player.DEF_GRADE)
  596. if constInfo.ADD_DEF_BONUS_ENABLE:
  597. defValue+=player.GetStatus(player.DEF_BONUS)
  598. return "%d" % (defValue)
  599. def RefreshStatus(self):
  600. if self.isLoaded==0:
  601. return
  602. try:
  603. if app.ENABLE_CONQUEROR_LEVEL:
  604. if player.GetStatus(player.CONQUEROR_LEVEL) >= 1:
  605. self.GetChild("Level_Value").SetText(str(player.GetStatus(player.CONQUEROR_LEVEL)))
  606. self.GetChild("Exp_Value").SetText(str(unsigned32(player.GetConquerorEXP())))
  607. self.GetChild("RestExp_Value").SetText(str(unsigned32(player.GetStatus(player.CONQUEROR_NEXT_EXP)) - unsigned32(player.GetStatus(player.CONQUEROR_EXP))))
  608. else:
  609. self.GetChild("Level_Value").SetText(str(player.GetStatus(player.LEVEL)))
  610. self.GetChild("Exp_Value").SetText(str(unsigned32(player.GetEXP())))
  611. self.GetChild("RestExp_Value").SetText(str(unsigned32(player.GetStatus(player.NEXT_EXP)) - unsigned32(player.GetStatus(player.EXP))))
  612. self.GetChild("HP_Value").SetText(str(player.GetStatus(player.HP)) + '/' + str(player.GetStatus(player.MAX_HP)))
  613. self.GetChild("SP_Value").SetText(str(player.GetStatus(player.SP)) + '/' + str(player.GetStatus(player.MAX_SP)))
  614. self.GetChild("STR_Value").SetText(str(player.GetStatus(player.ST)))
  615. self.GetChild("DEX_Value").SetText(str(player.GetStatus(player.DX)))
  616. self.GetChild("HTH_Value").SetText(str(player.GetStatus(player.HT)))
  617. self.GetChild("INT_Value").SetText(str(player.GetStatus(player.IQ)))
  618. self.GetChild("ATT_Value").SetText(self.__GetTotalAtkText())
  619. self.GetChild("DEF_Value").SetText(self.__GetTotalDefText())
  620. self.GetChild("MATT_Value").SetText(self.__GetTotalMagAtkText())
  621. [HASH=4623]#self.GetChild([/HASH]"MATT_Value").SetText(str(player.GetStatus(player.MAG_ATT)))
  622. self.GetChild("MDEF_Value").SetText(str(player.GetStatus(player.MAG_DEF)))
  623. self.GetChild("ASPD_Value").SetText(str(player.GetStatus(player.ATT_SPEED)))
  624. self.GetChild("MSPD_Value").SetText(str(player.GetStatus(player.MOVING_SPEED)))
  625. self.GetChild("CSPD_Value").SetText(str(player.GetStatus(player.CASTING_SPEED)))
  626. self.GetChild("ER_Value").SetText(str(player.GetStatus(player.EVADE_RATE)))
  627. except:
  628. [HASH=4624]#import[/HASH] exception
  629. [HASH=4625]#exception.Abort([/HASH]"CharacterWindow.RefreshStatus.BindObject")
  630. ## 게임이 튕겨 버림
  631. pass
  632. self.__RefreshStatusPlusButtonList()
  633. self.__RefreshStatusMinusButtonList()
  634. self.RefreshAlignment()
  635. if self.refreshToolTip:
  636. self.refreshToolTip()
  637. def __RefreshStatusPlusButtonList(self):
  638. if self.isLoaded==0:
  639. return
  640. if app.ENABLE_CONQUEROR_LEVEL:
  641. if self.GetSubState() == "SUNGMA":
  642. statusPlusPoint=player.GetStatus(player.CONQUEROR_POINT)
  643. else:
  644. statusPlusPoint=player.GetStatus(player.STAT)
  645. else:
  646. statusPlusPoint=player.GetStatus(player.STAT)
  647. if statusPlusPoint>0:
  648. self.statusPlusValue.SetText(str(statusPlusPoint))
  649. self.statusPlusLabel.Show()
  650. self.ShowStatusPlusButtonList()
  651. else:
  652. self.statusPlusValue.SetText(str(0))
  653. self.statusPlusLabel.Hide()
  654. self.HideStatusPlusButtonList()
  655. def __RefreshStatusMinusButtonList(self):
  656. if self.isLoaded==0:
  657. return
  658. statusMinusPoint=self.__GetStatMinusPoint()
  659. if statusMinusPoint>0:
  660. self.__ShowStatusMinusButtonList()
  661. else:
  662. self.__HideStatusMinusButtonList()
  663. def RefreshAlignment(self):
  664. point, grade = player.GetAlignmentData()
  665. import colorInfo
  666. COLOR_DICT = { 0 : colorInfo.TITLE_RGB_GOOD_4,
  667. 1 : colorInfo.TITLE_RGB_GOOD_3,
  668. 2 : colorInfo.TITLE_RGB_GOOD_2,
  669. 3 : colorInfo.TITLE_RGB_GOOD_1,
  670. 4 : colorInfo.TITLE_RGB_NORMAL,
  671. 5 : colorInfo.TITLE_RGB_EVIL_1,
  672. 6 : colorInfo.TITLE_RGB_EVIL_2,
  673. 7 : colorInfo.TITLE_RGB_EVIL_3,
  674. 8 : colorInfo.TITLE_RGB_EVIL_4, }
  675. colorList = COLOR_DICT.get(grade, colorInfo.TITLE_RGB_NORMAL)
  676. gradeColor = ui.GenerateColor(colorList[0], colorList[1], colorList[2])
  677. self.toolTipAlignment.ClearToolTip()
  678. self.toolTipAlignment.AutoAppendTextLine(localeInfo.TITLE_NAME_LIST[grade], gradeColor)
  679. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_NAME + str(point))
  680. self.toolTipAlignment.AlignHorizonalCenter()
  681. def __ShowStatusMinusButtonList(self):
  682. for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  683. statusMinusButton.Show()
  684. def __HideStatusMinusButtonList(self):
  685. for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  686. statusMinusButton.Hide()
  687. def ShowStatusPlusButtonList(self):
  688. for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  689. statusPlusButton.Show()
  690. def HideStatusPlusButtonList(self):
  691. for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  692. statusPlusButton.Hide()
  693. if app.ENABLE_CONQUEROR_LEVEL:
  694. def ShowConquerorStatusPlusButtonList(self):
  695. for (statePlusKey, statusPlusButton) in self.statusConquerorPlusButtonDict.items():
  696. statusPlusButton.Show()
  697. def HideConquerorStatusPlusButtonList(self):
  698. for (statePlusKey, statusPlusButton) in self.statusConquerorPlusButtonDict.items():
  699. statusPlusButton.Hide()
  700. def SelectSkill(self, skillSlotIndex):
  701. mouseController = mouseModule.mouseController
  702. if False == mouseController.isAttached():
  703. srcSlotIndex = self.__RealSkillSlotToSourceSlot(skillSlotIndex)
  704. selectedSkillIndex = player.GetSkillIndex(srcSlotIndex)
  705. if skill.CanUseSkill(selectedSkillIndex):
  706. if app.IsPressed(app.DIK_LCONTROL):
  707. player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, srcSlotIndex)
  708. return
  709. mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, srcSlotIndex, selectedSkillIndex)
  710. else:
  711. mouseController.DeattachObject()
  712. def SelectEmptySlot(self, SlotIndex):
  713. mouseModule.mouseController.DeattachObject()
  714. ## ToolTip
  715. def OverInItem(self, slotNumber):
  716. if mouseModule.mouseController.isAttached():
  717. return
  718. if 0 == self.toolTipSkill:
  719. return
  720. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
  721. skillIndex = player.GetSkillIndex(srcSlotIndex)
  722. skillLevel = player.GetSkillLevel(srcSlotIndex)
  723. skillGrade = player.GetSkillGrade(srcSlotIndex)
  724. skillType = skill.GetSkillType(skillIndex)
  725. ## ACTIVE
  726. if skill.SKILL_TYPE_ACTIVE == skillType:
  727. overInSkillGrade = self.__GetSkillGradeFromSlot(slotNumber)
  728. if overInSkillGrade == skill.SKILL_GRADE_COUNT-1 and skillGrade == skill.SKILL_GRADE_COUNT:
  729. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
  730. elif overInSkillGrade == skillGrade:
  731. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, overInSkillGrade, skillLevel)
  732. else:
  733. self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade)
  734. else:
  735. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
  736. def OverOutItem(self):
  737. if 0 != self.toolTipSkill:
  738. self.toolTipSkill.HideToolTip()
  739. ## Quest
  740. def __SelectQuest(self, slotIndex):
  741. if app.ENABLE_QUEST_RENEWAL:
  742. questIndex = self.questIndexMap[slotIndex]
  743. if not questIndex in self.questClicked:
  744. self.questClicked.append(questIndex)
  745. else:
  746. questIndex = quest.GetQuestIndex(self.questShowingStartIndex + slotIndex)
  747. import event
  748. event.QuestButtonClick(-2147483648 + questIndex)
  749. def RefreshQuest(self):
  750. if app.ENABLE_QUEST_RENEWAL:
  751. if self.isLoaded == 0 or self.state != "QUEST":
  752. return
  753. for cat in self.questOpenedCategories:
  754. self.RefreshQuestCategory(cat)
  755. self.RefreshQuestCategoriesCount()
  756. else:
  757. if self.isLoaded==0:
  758. return
  759. self.OnQuestScroll()
  760. questCount = quest.GetQuestCount()
  761. questRange = range(quest.QUEST_MAX_NUM)
  762. if questCount > quest.QUEST_MAX_NUM:
  763. self.questScrollBar.Show()
  764. else:
  765. self.questScrollBar.Hide()
  766. for i in questRange[:questCount]:
  767. (questName, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(self.questShowingStartIndex + i)
  768. self.questNameList[i].SetText(questName)
  769. self.questNameList[i].Show()
  770. self.questLastCountList[i].Show()
  771. self.questLastTimeList[i].Show()
  772. if len(questCounterName) > 0:
  773. self.questLastCountList[i].SetText("%s : %d" % (questCounterName, questCounterValue))
  774. else:
  775. self.questLastCountList[i].SetText("")
  776. ## Icon
  777. self.questSlot.SetSlot(i, i, 1, 1, questIcon)
  778. for i in questRange[questCount:]:
  779. self.questNameList[i].Hide()
  780. self.questLastTimeList[i].Hide()
  781. self.questLastCountList[i].Hide()
  782. self.questSlot.ClearSlot(i)
  783. self.questSlot.HideSlotBaseImage(i)
  784. self.__UpdateQuestClock()
  785. def __UpdateQuestClock(self):
  786. if "QUEST" == self.state:
  787. if app.ENABLE_QUEST_RENEWAL:
  788. for clock in self.questClockList:
  789. clockText = localeInfo.QUEST_UNLIMITED_TIME
  790. if clock.GetProperty("idx"):
  791. (lastName, lastTime) = quest.GetQuestLastTime(clock.GetProperty("idx"))
  792. if len(lastName) > 0:
  793. if lastTime <= 0:
  794. clockText = localeInfo.QUEST_TIMEOVER
  795. else:
  796. questLastMinute = lastTime / 60
  797. questLastSecond = lastTime % 60
  798. clockText = lastName + " : "
  799. if questLastMinute > 0:
  800. clockText += str(questLastMinute) + localeInfo.QUEST_MIN
  801. if questLastSecond > 0:
  802. clockText += " "
  803. if questLastSecond > 0:
  804. clockText += str(questLastSecond) + localeInfo.QUEST_SEC
  805. clock.SetText(clockText)
  806. else:
  807. # QUEST_LIMIT_COUNT_BUG_FIX
  808. for i in xrange(min(quest.GetQuestCount(), quest.QUEST_MAX_NUM)):
  809. # END_OF_QUEST_LIMIT_COUNT_BUG_FIX
  810. (lastName, lastTime) = quest.GetQuestLastTime(i + self.questShowingStartIndex)
  811. clockText = localeInfo.QUEST_UNLIMITED_TIME
  812. if len(lastName) > 0:
  813. if lastTime <= 0:
  814. clockText = localeInfo.QUEST_TIMEOVER
  815. else:
  816. questLastMinute = lastTime / 60
  817. questLastSecond = lastTime % 60
  818. clockText = lastName + " : "
  819. if questLastMinute > 0:
  820. clockText += str(questLastMinute) + localeInfo.QUEST_MIN
  821. if questLastSecond > 0:
  822. clockText += " "
  823. if questLastSecond > 0:
  824. clockText += str(questLastSecond) + localeInfo.QUEST_SEC
  825. self.questLastTimeList[i].SetText(clockText)
  826. def __GetStatMinusPoint(self):
  827. POINT_STAT_RESET_COUNT = 112
  828. return player.GetStatus(POINT_STAT_RESET_COUNT)
  829. def __OverInStatMinusButton(self, stat):
  830. try:
  831. self.__ShowStatToolTip(self.STAT_MINUS_DESCRIPTION[stat] % self.__GetStatMinusPoint())
  832. except KeyError:
  833. pass
  834. self.refreshToolTip = lambda arg=stat: self.__OverInStatMinusButton(arg)
  835. def __OverOutStatMinusButton(self):
  836. self.__HideStatToolTip()
  837. self.refreshToolTip = 0
  838. def __OverInStatButton(self, stat):
  839. try:
  840. self.__ShowStatToolTip(self.STAT_DESCRIPTION[stat])
  841. except KeyError:
  842. pass
  843. def __OverOutStatButton(self):
  844. self.__HideStatToolTip()
  845. def __ShowStatToolTip(self, statDesc):
  846. self.toolTip.ClearToolTip()
  847. self.toolTip.AppendTextLine(statDesc)
  848. self.toolTip.Show()
  849. def __HideStatToolTip(self):
  850. self.toolTip.Hide()
  851. def OnPressEscapeKey(self):
  852. if app.ENABLE_QUEST_RENEWAL:
  853. if self.questSlideWndNewKey > 0:
  854. if self.questSlideWnd[self.questSlideWndNewKey-1] is not None:
  855. self.questSlideWnd[self.questSlideWndNewKey-1].OnPressEscapeKey()
  856. self.Close()
  857. return True
  858. def OnUpdate(self):
  859. self.__UpdateQuestClock()
  860. ## Skill Process
  861. def __RefreshSkillPage(self, name, slotCount):
  862. global SHOW_LIMIT_SUPPORT_SKILL_LIST
  863. skillPage = self.skillPageDict[name]
  864. startSlotIndex = skillPage.GetStartIndex()
  865. if "ACTIVE" == name:
  866. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  867. startSlotIndex += slotCount
  868. getSkillType=skill.GetSkillType
  869. getSkillIndex=player.GetSkillIndex
  870. getSkillGrade=player.GetSkillGrade
  871. getSkillLevel=player.GetSkillLevel
  872. getSkillLevelUpPoint=skill.GetSkillLevelUpPoint
  873. getSkillMaxLevel=skill.GetSkillMaxLevel
  874. for i in xrange(slotCount+1):
  875. slotIndex = i + startSlotIndex
  876. skillIndex = getSkillIndex(slotIndex)
  877. if app.ENABLE_SLOT_WINDOW_EX:
  878. activeList = {}
  879. cooltmList = {}
  880. for j in xrange(skill.SKILL_GRADE_COUNT):
  881. realSlotIndex = self.__GetRealSkillSlot(j, i)
  882. if app.ENABLE_SLOT_WINDOW_EX:
  883. activeList[realSlotIndex] = skillPage.IsActivatedSlot(realSlotIndex)
  884. cooltmList[realSlotIndex] = skillPage.GetSlotCoolTime(realSlotIndex)
  885. skillPage.ClearSlot(realSlotIndex)
  886. if 0 == skillIndex:
  887. continue
  888. skillGrade = getSkillGrade(slotIndex)
  889. skillLevel = getSkillLevel(slotIndex)
  890. skillType = getSkillType(skillIndex)
  891. ## 승마 스킬 예외 처리
  892. if player.SKILL_INDEX_RIDING == skillIndex:
  893. if 1 == skillGrade:
  894. skillLevel += 19
  895. elif 2 == skillGrade:
  896. skillLevel += 29
  897. elif 3 == skillGrade:
  898. skillLevel = 40
  899. skillPage.SetSkillSlotNew(slotIndex, skillIndex, max(skillLevel-1, 0), skillLevel)
  900. skillPage.SetSlotCount(slotIndex, skillLevel)
  901. ## ACTIVE
  902. elif skill.SKILL_TYPE_ACTIVE == skillType:
  903. for j in xrange(skill.SKILL_GRADE_COUNT):
  904. realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
  905. skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
  906. skillPage.SetCoverButton(realSlotIndex)
  907. if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT-1):
  908. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  909. elif (not self.__CanUseSkillNow()) or (skillGrade != j):
  910. skillPage.SetSlotCount(realSlotIndex, 0)
  911. skillPage.DisableCoverButton(realSlotIndex)
  912. else:
  913. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  914. if app.ENABLE_SLOT_WINDOW_EX:
  915. isActive = activeList.get(realSlotIndex, False)
  916. coolTime,elapsedTime = cooltmList.get(realSlotIndex, (0,0))
  917. if isActive:
  918. skillPage.ActivateSlot(realSlotIndex)
  919. if coolTime:
  920. skillPage.SetSlotCoolTime(realSlotIndex, coolTime, elapsedTime)
  921. ## 그외
  922. else:
  923. if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
  924. realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
  925. skillPage.SetSkillSlot(realSlotIndex, skillIndex, skillLevel)
  926. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  927. if skill.CanUseSkill(skillIndex):
  928. skillPage.SetCoverButton(realSlotIndex)
  929. skillPage.RefreshSlot()
  930. def RefreshSkill(self):
  931. if self.isLoaded==0:
  932. return
  933. if self.__IsChangedHorseRidingSkillLevel():
  934. self.RefreshCharacter()
  935. return
  936. global SHOW_ONLY_ACTIVE_SKILL
  937. if SHOW_ONLY_ACTIVE_SKILL:
  938. self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
  939. else:
  940. self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
  941. self.__RefreshSkillPage("SUPPORT", self.SUPPORT_PAGE_SLOT_COUNT)
  942. self.RefreshSkillPlusButtonList()
  943. def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
  944. ## 스킬이 있으면
  945. if 0 == skillIndex:
  946. return False
  947. ## 레벨업 조건을 만족한다면
  948. if not skill.CanLevelUpSkill(skillIndex, skillLevel):
  949. return False
  950. return True
  951. def __RefreshSkillPlusButton(self, name):
  952. global HIDE_SUPPORT_SKILL_POINT
  953. if HIDE_SUPPORT_SKILL_POINT and "SUPPORT" == name:
  954. return
  955. slotWindow = self.skillPageDict[name]
  956. slotWindow.HideAllSlotButton()
  957. slotStatType = self.skillPageStatDict[name]
  958. if 0 == slotStatType:
  959. return
  960. statPoint = player.GetStatus(slotStatType)
  961. startSlotIndex = slotWindow.GetStartIndex()
  962. if "HORSE" == name:
  963. startSlotIndex += self.ACTIVE_PAGE_SLOT_COUNT
  964. if statPoint > 0:
  965. for i in xrange(self.PAGE_SLOT_COUNT):
  966. slotIndex = i + startSlotIndex
  967. skillIndex = player.GetSkillIndex(slotIndex)
  968. skillGrade = player.GetSkillGrade(slotIndex)
  969. skillLevel = player.GetSkillLevel(slotIndex)
  970. if skillIndex == 0:
  971. continue
  972. if skillGrade != 0:
  973. continue
  974. if name == "HORSE":
  975. if player.GetStatus(player.LEVEL) >= skill.GetSkillLevelLimit(skillIndex):
  976. if skillLevel < 20:
  977. slotWindow.ShowSlotButton(self.__GetETCSkillRealSlotIndex(slotIndex))
  978. else:
  979. if "SUPPORT" == name:
  980. if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
  981. if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
  982. slotWindow.ShowSlotButton(slotIndex)
  983. else:
  984. if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
  985. slotWindow.ShowSlotButton(slotIndex)
  986. def RefreshSkillPlusButtonList(self):
  987. if self.isLoaded==0:
  988. return
  989. self.RefreshSkillPlusPointLabel()
  990. if not self.__CanUseSkillNow():
  991. return
  992. try:
  993. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  994. self.__RefreshSkillPlusButton("HORSE")
  995. else:
  996. self.__RefreshSkillPlusButton("ACTIVE")
  997. self.__RefreshSkillPlusButton("SUPPORT")
  998. except:
  999. import exception
  1000. exception.Abort("CharacterWindow.RefreshSkillPlusButtonList.BindObject")
  1001. def RefreshSkillPlusPointLabel(self):
  1002. if self.isLoaded==0:
  1003. return
  1004. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  1005. activeStatPoint = player.GetStatus(player.SKILL_HORSE)
  1006. self.activeSkillPointValue.SetText(str(activeStatPoint))
  1007. else:
  1008. activeStatPoint = player.GetStatus(player.SKILL_ACTIVE)
  1009. self.activeSkillPointValue.SetText(str(activeStatPoint))
  1010. supportStatPoint = max(0, player.GetStatus(player.SKILL_SUPPORT))
  1011. self.supportSkillPointValue.SetText(str(supportStatPoint))
  1012. ## Skill Level Up Button
  1013. def OnPressedSlotButton(self, slotNumber):
  1014. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
  1015. skillIndex = player.GetSkillIndex(srcSlotIndex)
  1016. curLevel = player.GetSkillLevel(srcSlotIndex)
  1017. maxLevel = skill.GetSkillMaxLevel(skillIndex)
  1018. net.SendChatPacket("/skillup " + str(skillIndex))
  1019. ## Use Skill
  1020. def ClickSkillSlot(self, slotIndex):
  1021. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotIndex)
  1022. skillIndex = player.GetSkillIndex(srcSlotIndex)
  1023. skillType = skill.GetSkillType(skillIndex)
  1024. if not self.__CanUseSkillNow():
  1025. if skill.SKILL_TYPE_ACTIVE == skillType:
  1026. return
  1027. for slotWindow in self.skillPageDict.values():
  1028. if slotWindow.HasSlot(slotIndex):
  1029. if skill.CanUseSkill(skillIndex):
  1030. player.ClickSkillSlot(srcSlotIndex)
  1031. return
  1032. mouseModule.mouseController.DeattachObject()
  1033. ## FIXME : 스킬을 사용했을때 슬롯 번호를 가지고 해당 슬롯을 찾아서 업데이트 한다.
  1034. ## 매우 불합리. 구조 자체를 개선해야 할듯.
  1035. def OnUseSkill(self, slotIndex, coolTime):
  1036. skillIndex = player.GetSkillIndex(slotIndex)
  1037. skillType = skill.GetSkillType(skillIndex)
  1038. ## ACTIVE
  1039. if skill.SKILL_TYPE_ACTIVE == skillType:
  1040. skillGrade = player.GetSkillGrade(slotIndex)
  1041. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  1042. ## ETC
  1043. else:
  1044. slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
  1045. for slotWindow in self.skillPageDict.values():
  1046. if slotWindow.HasSlot(slotIndex):
  1047. slotWindow.SetSlotCoolTime(slotIndex, coolTime)
  1048. return
  1049. def OnActivateSkill(self, slotIndex):
  1050. skillGrade = player.GetSkillGrade(slotIndex)
  1051. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  1052. for slotWindow in self.skillPageDict.values():
  1053. if slotWindow.HasSlot(slotIndex):
  1054. if app.ENABLE_ACCE_SYSTEM:
  1055. slotWindow.ActivateSlotOld(slotIndex)
  1056. else:
  1057. slotWindow.ActivateSlot(slotIndex)
  1058. return
  1059. def OnDeactivateSkill(self, slotIndex):
  1060. skillGrade = player.GetSkillGrade(slotIndex)
  1061. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  1062. for slotWindow in self.skillPageDict.values():
  1063. if slotWindow.HasSlot(slotIndex):
  1064. if app.ENABLE_ACCE_SYSTEM:
  1065. slotWindow.DeactivateSlotOld(slotIndex)
  1066. else:
  1067. slotWindow.DeactivateSlot(slotIndex)
  1068. return
  1069. def __ShowJobToolTip(self):
  1070. self.toolTipJob.ShowToolTip()
  1071. def __HideJobToolTip(self):
  1072. self.toolTipJob.HideToolTip()
  1073. def __SetJobText(self, mainJob, subJob):
  1074. if player.GetStatus(player.LEVEL)<5:
  1075. subJob=0
  1076. if 949 == app.GetDefaultCodePage():
  1077. self.toolTipJob.ClearToolTip()
  1078. try:
  1079. jobInfoTitle=localeInfo.JOBINFO_TITLE[mainJob][subJob]
  1080. jobInfoData=localeInfo.JOBINFO_DATA_LIST[mainJob][subJob]
  1081. except IndexError:
  1082. print "uiCharacter.CharacterWindow.__SetJobText(mainJob=%d, subJob=%d)" % (mainJob, subJob)
  1083. return
  1084. self.toolTipJob.AutoAppendTextLine(jobInfoTitle)
  1085. self.toolTipJob.AppendSpace(5)
  1086. for jobInfoDataLine in jobInfoData:
  1087. self.toolTipJob.AutoAppendTextLine(jobInfoDataLine)
  1088. self.toolTipJob.AlignHorizonalCenter()
  1089. def __ShowAlignmentToolTip(self):
  1090. self.toolTipAlignment.ShowToolTip()
  1091. def __HideAlignmentToolTip(self):
  1092. self.toolTipAlignment.HideToolTip()
  1093. if app.ENABLE_CONQUEROR_LEVEL:
  1094. def __ShowHTHToolTip(self):
  1095. self.toolTipConquerorInfoButton.ClearToolTip()
  1096. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_CON)
  1097. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1098. self.toolTipConquerorInfoButton.ShowToolTip()
  1099. def __HideHTHToolTip(self):
  1100. self.toolTipConquerorInfoButton.HideToolTip()
  1101. def __ShowINTToolTip(self):
  1102. self.toolTipConquerorInfoButton.ClearToolTip()
  1103. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_INT)
  1104. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1105. self.toolTipConquerorInfoButton.ShowToolTip()
  1106. def __HideINTToolTip(self):
  1107. self.toolTipConquerorInfoButton.HideToolTip()
  1108. def __ShowSTRToolTip(self):
  1109. self.toolTipConquerorInfoButton.ClearToolTip()
  1110. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_STR)
  1111. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1112. self.toolTipConquerorInfoButton.ShowToolTip()
  1113. def __HideSTRToolTip(self):
  1114. self.toolTipConquerorInfoButton.HideToolTip()
  1115. def __ShowDEXToolTip(self):
  1116. self.toolTipConquerorInfoButton.ClearToolTip()
  1117. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_DEX)
  1118. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1119. self.toolTipConquerorInfoButton.ShowToolTip()
  1120. def __HideDEXToolTip(self):
  1121. self.toolTipConquerorInfoButton.HideToolTip()
  1122. ###############################################################################
  1123. def __ShowBaseToolTip(self):
  1124. self.toolTipConquerorInfoButton.ClearToolTip()
  1125. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_BASE_LEVEL)
  1126. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1127. self.toolTipConquerorInfoButton.ShowToolTip()
  1128. def __HideBaseToolTip(self):
  1129. self.toolTipConquerorInfoButton.HideToolTip()
  1130. ###
  1131. def __ShowSungmaToolTip(self):
  1132. self.toolTipConquerorInfoButton.ClearToolTip()
  1133. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_CONQUEROR_LEVEL)
  1134. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1135. self.toolTipConquerorInfoButton.ShowToolTip()
  1136. def __HideSungmaToolTip(self):
  1137. self.toolTipConquerorInfoButton.HideToolTip()
  1138. ###
  1139. def __ShowMSPDToolTip(self):
  1140. self.toolTipConquerorInfoButton.ClearToolTip()
  1141. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_MOVE_SPEED)
  1142. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1143. self.toolTipConquerorInfoButton.ShowToolTip()
  1144. def __HideMSPDToolTip(self):
  1145. self.toolTipConquerorInfoButton.HideToolTip()
  1146. ####
  1147. def __ShowASPDToolTip(self):
  1148. self.toolTipConquerorInfoButton.ClearToolTip()
  1149. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_ATT_SPEED)
  1150. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1151. self.toolTipConquerorInfoButton.ShowToolTip()
  1152. def __HideASPDToolTip(self):
  1153. self.toolTipConquerorInfoButton.HideToolTip()
  1154. ###
  1155. def __ShowCSPDToolTip(self):
  1156. self.toolTipConquerorInfoButton.ClearToolTip()
  1157. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_CAST_SPEED)
  1158. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1159. self.toolTipConquerorInfoButton.ShowToolTip()
  1160. def __HideCSPDToolTip(self):
  1161. self.toolTipConquerorInfoButton.HideToolTip()
  1162. ###
  1163. def __ShowMATTToolTip(self):
  1164. self.toolTipConquerorInfoButton.ClearToolTip()
  1165. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_MAG_ATT)
  1166. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1167. self.toolTipConquerorInfoButton.ShowToolTip()
  1168. def __HideMATTToolTip(self):
  1169. self.toolTipConquerorInfoButton.HideToolTip()
  1170. ###
  1171. def __ShowMDEFToolTip(self):
  1172. self.toolTipConquerorInfoButton.ClearToolTip()
  1173. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_MAG_DEF)
  1174. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1175. self.toolTipConquerorInfoButton.ShowToolTip()
  1176. def __HideMDEFToolTip(self):
  1177. self.toolTipConquerorInfoButton.HideToolTip()
  1178. ##############################################################################################
  1179. def RefreshCharacter(self):
  1180. if self.isLoaded==0:
  1181. return
  1182. ## Name
  1183. try:
  1184. characterName = player.GetName()
  1185. guildName = player.GetGuildName()
  1186. self.characterNameValue.SetText(characterName)
  1187. self.guildNameValue.SetText(guildName)
  1188. if not guildName:
  1189. if localeInfo.IsARABIC():
  1190. self.characterNameSlot.SetPosition(190, 34)
  1191. else:
  1192. self.characterNameSlot.SetPosition(109, 34)
  1193. self.guildNameSlot.Hide()
  1194. else:
  1195. if localeInfo.IsJAPAN():
  1196. self.characterNameSlot.SetPosition(143, 34)
  1197. else:
  1198. self.characterNameSlot.SetPosition(153, 34)
  1199. self.guildNameSlot.Show()
  1200. except:
  1201. import exception
  1202. exception.Abort("CharacterWindow.RefreshCharacter.BindObject")
  1203. race = net.GetMainActorRace()
  1204. group = net.GetMainActorSkillGroup()
  1205. empire = net.GetMainActorEmpire()
  1206. ## Job Text
  1207. job = chr.RaceToJob(race)
  1208. self.__SetJobText(job, group)
  1209. ## FaceImage
  1210. try:
  1211. faceImageName = FACE_IMAGE_DICT[race]
  1212. try:
  1213. self.faceImage.LoadImage(faceImageName)
  1214. except:
  1215. print "CharacterWindow.RefreshCharacter(race=%d, faceImageName=%s)" % (race, faceImageName)
  1216. self.faceImage.Hide()
  1217. except KeyError:
  1218. self.faceImage.Hide()
  1219. ## GroupName
  1220. self.__SetSkillGroupName(race, group)
  1221. ## Skill
  1222. if 0 == group:
  1223. self.__SelectSkillGroup(0)
  1224. else:
  1225. self.__SetSkillSlotData(race, group, empire)
  1226. if self.__CanUseHorseSkill():
  1227. self.__SelectSkillGroup(0)
  1228. def __SetSkillGroupName(self, race, group):
  1229. job = chr.RaceToJob(race)
  1230. if not self.SKILL_GROUP_NAME_DICT.has_key(job):
  1231. return
  1232. nameList = self.SKILL_GROUP_NAME_DICT[job]
  1233. if 0 == group:
  1234. self.skillGroupButton1.SetText(nameList[1])
  1235. self.skillGroupButton2.SetText(nameList[2])
  1236. self.skillGroupButton1.Show()
  1237. self.skillGroupButton2.Show()
  1238. self.activeSkillGroupName.Hide()
  1239. ## 수인족은 직군이 하나이므로 한개만 표시
  1240. if app.ENABLE_WOLFMAN_CHARACTER and playerSettingModule.RACE_WOLFMAN_M == race:
  1241. self.skillGroupButton2.Hide()
  1242. else:
  1243. if self.__CanUseHorseSkill():
  1244. self.activeSkillGroupName.Hide()
  1245. self.skillGroupButton1.SetText(nameList.get(group, "Noname"))
  1246. self.skillGroupButton2.SetText(localeInfo.SKILL_GROUP_HORSE)
  1247. self.skillGroupButton1.Show()
  1248. self.skillGroupButton2.Show()
  1249. else:
  1250. self.activeSkillGroupName.SetText(nameList.get(group, "Noname"))
  1251. self.activeSkillGroupName.Show()
  1252. self.skillGroupButton1.Hide()
  1253. self.skillGroupButton2.Hide()
  1254. def __SetSkillSlotData(self, race, group, empire=0):
  1255. ## SkillIndex
  1256. playerSettingModule.RegisterSkill(race, group, empire)
  1257. ## Event
  1258. self.__SetSkillSlotEvent()
  1259. ## Refresh
  1260. self.RefreshSkill()
  1261. def __SelectSkillGroup(self, index):
  1262. for btn in self.skillGroupButton:
  1263. btn.SetUp()
  1264. self.skillGroupButton[index].Down()
  1265. if self.__CanUseHorseSkill():
  1266. if 0 == index:
  1267. index = net.GetMainActorSkillGroup()-1
  1268. elif 1 == index:
  1269. index = self.PAGE_HORSE
  1270. self.curSelectedSkillGroup = index
  1271. self.__SetSkillSlotData(net.GetMainActorRace(), index+1, net.GetMainActorEmpire())
  1272. def __CanUseSkillNow(self):
  1273. if 0 == net.GetMainActorSkillGroup():
  1274. return False
  1275. return True
  1276. def __CanUseHorseSkill(self):
  1277. slotIndex = player.GetSkillSlotIndex(player.SKILL_INDEX_RIDING)
  1278. if not slotIndex:
  1279. return False
  1280. grade = player.GetSkillGrade(slotIndex)
  1281. level = player.GetSkillLevel(slotIndex)
  1282. if level < 0:
  1283. level *= -1
  1284. if grade >= 1 and level >= 1:
  1285. return True
  1286. return False
  1287. def __IsChangedHorseRidingSkillLevel(self):
  1288. ret = False
  1289. if -1 == self.canUseHorseSkill:
  1290. self.canUseHorseSkill = self.__CanUseHorseSkill()
  1291. if self.canUseHorseSkill != self.__CanUseHorseSkill():
  1292. ret = True
  1293. self.canUseHorseSkill = self.__CanUseHorseSkill()
  1294. return ret
  1295. def __GetRealSkillSlot(self, skillGrade, skillSlot):
  1296. return skillSlot + min(skill.SKILL_GRADE_COUNT-1, skillGrade)*skill.SKILL_GRADE_STEP_COUNT
  1297. def __GetETCSkillRealSlotIndex(self, skillSlot):
  1298. if skillSlot > 100:
  1299. return skillSlot
  1300. return skillSlot % self.ACTIVE_PAGE_SLOT_COUNT
  1301. def __RealSkillSlotToSourceSlot(self, realSkillSlot):
  1302. if realSkillSlot > 100:
  1303. return realSkillSlot
  1304. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  1305. return realSkillSlot + self.ACTIVE_PAGE_SLOT_COUNT
  1306. return realSkillSlot % skill.SKILL_GRADE_STEP_COUNT
  1307. def __GetSkillGradeFromSlot(self, skillSlot):
  1308. return int(skillSlot / skill.SKILL_GRADE_STEP_COUNT)
  1309. def SelectSkillGroup(self, index):
  1310. self.__SelectSkillGroup(index)
  1311. def OnQuestScroll(self):
  1312. questCount = quest.GetQuestCount()
  1313. scrollLineCount = max(0, questCount - quest.QUEST_MAX_NUM)
  1314. startIndex = int(scrollLineCount * self.questScrollBar.GetPos())
  1315. if startIndex != self.questShowingStartIndex:
  1316. self.questShowingStartIndex = startIndex
  1317. self.RefreshQuest()
  1318. if app.ENABLE_QUEST_RENEWAL:
  1319. def __OnScrollQuest(self):
  1320. if self.state != "QUEST":
  1321. return
  1322. curPos = self.questScrollBar.GetPos()
  1323. if math.fabs(curPos - self.questLastScrollPosition) >= 0.001:
  1324. self.RerenderQuestPage()
  1325. self.questLastScrollPosition = curPos
  1326. def ResetQuestScroll(self):
  1327. self.questScrollBar.Hide()
  1328. if self.questScrollBar.GetPos() != 0:
  1329. self.questScrollBar.SetPos(0)
  1330. def RerenderQuestPage(self):
  1331. overflowingY = self.displayY - self.MAX_QUEST_PAGE_HEIGHT
  1332. if overflowingY < 0:
  1333. overflowingY = 0
  1334. self.baseCutY = math.ceil(overflowingY * self.questScrollBar.GetPos())
  1335. self.displayY = 0
  1336. self.RearrangeQuestCategories(xrange(quest.QUEST_CATEGORY_MAX_NUM))
  1337. self.RefreshQuestCategory()
  1338. if overflowingY > 0:
  1339. if (len(self.questOpenedCategories)) == 0:
  1340. self.ResetQuestScroll()
  1341. else:
  1342. self.questScrollBar.Show()
  1343. else:
  1344. self.ResetQuestScroll()
  1345. def __LoadQuestCategory(self):
  1346. self.questPage.Show()
  1347. if self.isLoaded == 0:
  1348. return
  1349. for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
  1350. category = self.questCategoryList[i]
  1351. categoryName = category.GetProperty("name")
  1352. if not categoryName:
  1353. category.SetProperty("name", category.GetText())
  1354. categoryName = category.GetText()
  1355. questCount = self.GetQuestCountInCategory(i)
  1356. self.questCategoryList[i].SetTextAlignLeft(categoryName + " (" + str(questCount) + ")")
  1357. self.questCategoryList[i].SetTextColor(self.GetQuestCategoryColor(i))
  1358. self.questCategoryList[i].SetQuestLabel(quest_lable_expend_img_path_dict[i], self.GetQuestCountInCategory(i))
  1359. self.questCategoryList[i].Show()
  1360. self.RefreshQuestCategory()
  1361. if self.isQuestCategoryLoad == False:
  1362. self.questScrollBar.Hide()
  1363. else:
  1364. self.RerenderQuestPage()
  1365. self.isQuestCategoryLoad = True
  1366. def GetQuestCategoryColor(self, category):
  1367. return self.questColorList["default_title"]
  1368. def GetQuestProperties(self, questName):
  1369. findString = {
  1370. "*" : "blue",
  1371. "&" : "green",
  1372. "~" : "golden"
  1373. }
  1374. if questName[0] in findString:
  1375. return (questName[1:], findString[questName[0]])
  1376. return (questName, None)
  1377. def IsQuestCategoryOpen(self, category):
  1378. return (category in self.questOpenedCategories)
  1379. def ToggleCategory(self, category):
  1380. if self.IsQuestCategoryOpen(category):
  1381. self.CloseQuestCategory(category)
  1382. else:
  1383. self.OpenQuestCategory(category)
  1384. def RearrangeQuestCategories(self, categoryRange):
  1385. i = 0
  1386. for i in categoryRange:
  1387. if (self.displayY - self.baseCutY) >= 0 and (self.displayY - self.baseCutY) < self.MAX_QUEST_PAGE_HEIGHT - 20:
  1388. self.questCategoryList[i].SetPosition(13, (self.displayY - self.baseCutY) + 10)
  1389. self.questCategoryList[i].Show()
  1390. else:
  1391. self.questCategoryList[i].Hide()
  1392. self.displayY += 20
  1393. self.questCategoryRenderPos[i] = self.displayY
  1394. def CloseQuestCategory(self, category):
  1395. self.questCategoryList[category].CloseCategory(self.GetQuestCountInCategory(category))
  1396. if category in self.questOpenedCategories:
  1397. self.questOpenedCategories.remove(category)
  1398. for currentSlot in self.questSlotList:
  1399. if currentSlot.GetProperty("category") == category:
  1400. currentSlot.Hide()
  1401. self.displayY -= currentSlot.GetHeight()
  1402. self.RerenderQuestPage()
  1403. def OpenQuestCategory(self, category):
  1404. if self.GetQuestCountInCategory(category) == 0:
  1405. return
  1406. while len(self.questOpenedCategories) >= self.questMaxOpenedCategories:
  1407. openedCategories = self.questOpenedCategories.pop()
  1408. self.CloseQuestCategory(openedCategories)
  1409. self.questCategoryList[category].OpenCategory(self.GetQuestCountInCategory(category))
  1410. self.questOpenedCategories.append(category)
  1411. self.RefreshQuestCategory(category)
  1412. self.RerenderQuestPage()
  1413. def RefreshQuestCategory(self, category = -1):
  1414. if self.isLoaded == 0 or self.state != "QUEST":
  1415. return
  1416. categories = []
  1417. if category == -1:
  1418. categories = self.questOpenedCategories
  1419. elif not category in self.questOpenedCategories:
  1420. self.OpenQuestCategory(category)
  1421. return
  1422. else:
  1423. categories.append(category)
  1424. for currentCategory in categories:
  1425. self.displayY = self.questCategoryRenderPos[currentCategory]
  1426. self.LoadCategory(currentCategory)
  1427. self.RearrangeQuestCategories(xrange(currentCategory + 1, quest.QUEST_CATEGORY_MAX_NUM))
  1428. def RefreshQuestCategoriesCount(self):
  1429. for category in xrange(quest.QUEST_CATEGORY_MAX_NUM):
  1430. categoryName = self.questCategoryList[category].GetProperty("name")
  1431. questCount = self.GetQuestCountInCategory(category)
  1432. self.questCategoryList[category].SetTextAlignLeft(categoryName + " (" + str(questCount) + ")")
  1433. def RefreshQuest(self):
  1434. if self.isLoaded == 0 or self.state != "QUEST":
  1435. return
  1436. for category in self.questOpenedCategories:
  1437. self.RefreshQuestCategory(category)
  1438. self.RefreshQuestCategoriesCount()
  1439. def CreateQuestSlot(self, name):
  1440. for questSlot in self.questSlotList:
  1441. if questSlot.GetWindowName() == name:
  1442. return questSlot
  1443. pyScrLoader = ui.PythonScriptLoader()
  1444. slot = ui.ListBar()
  1445. pyScrLoader.LoadElementListBar(slot, quest_slot_listbar, self.questPage)
  1446. slot.SetParent(self.quest_page_board_window)
  1447. slot.SetWindowName(name)
  1448. slot.Hide()
  1449. self.questSlotList.append(slot)
  1450. return slot
  1451. def SetQuest(self, slot, questID, questName, questCounterName, questCounterValue):
  1452. (name, color) = self.GetQuestProperties(questName)
  1453. slot.SetTextAlignLeft(name, 20)
  1454. if color:
  1455. slot.SetTextColor(self.questColorList[color])
  1456. slot.SetEvent(ui.__mem_func__(self.__SelectQuest), questID)
  1457. slot.SetWindowHorizontalAlignLeft()
  1458. slot.Show()
  1459. def LoadCategory(self, category):
  1460. self.questIndexMap = {}
  1461. self.questCounterList = []
  1462. self.questClockList = []
  1463. self.questSeparatorList = []
  1464. for questSlot in self.questSlotList:
  1465. questSlot.Hide()
  1466. questCount = 0
  1467. for questIdx in self.GetQuestsInCategory(category):
  1468. questCount += 1
  1469. (questID, questIndex, questName, questCategory, _, questCounterName, questCounterValue) = questIdx
  1470. (lastName, lastTime) = quest.GetQuestLastTime(questID)
  1471. slot = self.CreateQuestSlot("QuestSlotList_" + str(questCategory) + "_" + str(questID))
  1472. slot.SetPosition(0, (self.displayY - self.baseCutY))
  1473. slot.SetParent(self.quest_page_board_window)
  1474. baseDisplayY = self.displayY
  1475. ## -- Quest Counter
  1476. hasCounter = False
  1477. if questCounterName != "":
  1478. self.displayY += 15
  1479. counter = ui.TextLine()
  1480. counter.SetParent(slot)
  1481. counter.SetPosition(20, 20 - 2.5)
  1482. counter.SetText(questCounterName + ": " + str(questCounterValue))
  1483. counter.Show()
  1484. self.questCounterList.append(counter)
  1485. hasCounter = True
  1486. ## -- Quest Counter
  1487. ## -- Quest Clock
  1488. self.displayY += 15
  1489. clockText = localeInfo.QUEST_UNLIMITED_TIME
  1490. if len(lastName) > 0:
  1491. if lastTime <= 0:
  1492. clockText = localeInfo.QUEST_TIMEOVER
  1493. else:
  1494. questLastMinute = lastTime / 60
  1495. questLastSecond = lastTime % 60
  1496. clockText = lastName + " : "
  1497. if questLastMinute > 0:
  1498. clockText += str(questLastMinute) + localeInfo.QUEST_MIN
  1499. if questLastSecond > 0:
  1500. clockText += " "
  1501. if questLastSecond > 0:
  1502. clockText += str(questLastSecond) + localeInfo.QUEST_SEC
  1503. clock = ui.TextLine()
  1504. clock.SetParent(slot)
  1505. clock.SetPosition(20, 20 + (int(hasCounter) * 14) - 2.5)
  1506. clock.SetText(clockText)
  1507. clock.SetProperty("idx", questID)
  1508. self.questClockList.append(clock)
  1509. clock.Show()
  1510. ## -- Quest Clock
  1511. ## -- Quest Separator
  1512. self.displayY += 5
  1513. if questCount < self.GetQuestCountInCategory(category):
  1514. seperator = ui.ImageBox()
  1515. seperator.SetParent(slot)
  1516. seperator.SetPosition(4, 20 + (int(hasCounter) * 14 - 2.5) + 15)
  1517. seperator.LoadImage("d:/ymir work/ui/quest_re/quest_list_line_01.tga")
  1518. seperator.Show()
  1519. self.questSeparatorList.append(seperator)
  1520. ## -- Quest Separator
  1521. slot.SetProperty("category", questCategory)
  1522. if questIndex in self.questClicked:
  1523. slot.OnClickEvent()
  1524. if (baseDisplayY - self.baseCutY) + 2 >= 0 and (baseDisplayY - self.baseCutY) + 2 < self.MAX_QUEST_PAGE_HEIGHT - 30:
  1525. self.questIndexMap[questID] = questIndex
  1526. self.SetQuest(slot, questID, questName, questCounterName, questCounterValue)
  1527. self.displayY += 15
  1528. newList = []
  1529. for questSlot in self.questSlotList:
  1530. if questSlot.IsShow():
  1531. newList.append(questSlot)
  1532. self.questSlotList = newList
  1533. def __OnClickQuestCategoryButton(self, category):
  1534. self.ToggleCategory(category)
  1535. def GetQuestsInCategory(self, category, retCount = False):
  1536. questList = []
  1537. count = 0
  1538. for i in xrange(quest.GetQuestCount()):
  1539. (questIndex, questName, questCategory, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(i)
  1540. if questCategory == category:
  1541. count += 1
  1542. questList.append((i, questIndex, questName, questCategory, questIcon, questCounterName, questCounterValue))
  1543. if retCount:
  1544. return count
  1545. return questList
  1546. def GetQuestCountInCategory(self, category):
  1547. return self.GetQuestsInCategory(category, True)