mrstairs

Untitled

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