mrstairs

Untitled

Apr 11th, 2025
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 95.42 KB | None | 0 0
  1. import pEQxF5FeyAG8NnBBx7fB as app
  2. import YEakbeqssJ5Pcg4Vg5NZ as net
  3. import cK89yFxpVW7hKAFe5t68 as chr
  4. import BEdUvHtApaSvnv3E63cu as chrmgr
  5. import tfL4qLeMqxZA5P4Pw5YA as player
  6. import work as ui
  7. import uiScriptLocale
  8. import dbg
  9. #import snd
  10. import mouseModule
  11. import wndMgr
  12. import skill
  13. import playereffectrun as playerSettingModule
  14. import quest
  15. import localeInfo
  16. import uiToolTip
  17. import constInfo
  18. import emotion
  19. import chat
  20. import grp
  21. import item
  22. import uiemojitranslate
  23. import uicharacterdetails
  24. if app.ENABLE_SKILL_COLOR_SYSTEM:
  25. import uiSkillColor
  26. if app.ENABLE_QUEST_RENEWAL:
  27. import math, uiQuest
  28.  
  29. SHOW_LIMIT_SUPPORT_SKILL_LIST = [122,121, 124, 126, 127,]
  30.  
  31. FACE_IMAGE_DICT = {
  32. playerSettingModule.RACE_WARRIOR_M : "icon/face/warrior_m.tga",
  33. playerSettingModule.RACE_WARRIOR_W : "icon/face/warrior_w.tga",
  34. playerSettingModule.RACE_ASSASSIN_M : "icon/face/assassin_m.tga",
  35. playerSettingModule.RACE_ASSASSIN_W : "icon/face/assassin_w.tga",
  36. playerSettingModule.RACE_SURA_M : "icon/face/sura_m.tga",
  37. playerSettingModule.RACE_SURA_W : "icon/face/sura_w.tga",
  38. playerSettingModule.RACE_SHAMAN_M : "icon/face/shaman_m.tga",
  39. playerSettingModule.RACE_SHAMAN_W : "icon/face/shaman_w.tga",
  40. }
  41. def unsigned32(n):
  42. return n & 0xFFFFFFFFL
  43.  
  44. if app.ENABLE_QUEST_RENEWAL:
  45. quest_slot_listbar = {
  46. "name" : "Quest_Slot",
  47. "type" : "listbar",
  48.  
  49. "x" : 0,
  50. "y" : 0,
  51.  
  52. "width" : 210,
  53. "height" : 20,
  54.  
  55. "text" : "Quest title",
  56. "align" : "left",
  57.  
  58. "horizontal_align" : "left",
  59. "vertical_align" : "left",
  60. "text_horizontal_align" : "left",
  61. "all_align" : "left",
  62.  
  63. "text_height": 40
  64. }
  65.  
  66. quest_lable_expend_img_path_dict = {
  67. 0: "d:/ymir work/ui/quest_re/tabcolor_1_main.tga",
  68. 1: "d:/ymir work/ui/quest_re/tabcolor_2_sub.tga",
  69. 2: "d:/ymir work/ui/quest_re/tabcolor_3_levelup.tga",
  70. 3: "d:/ymir work/ui/quest_re/tabcolor_4_event.tga",
  71. 4: "d:/ymir work/ui/quest_re/tabcolor_5_collection.tga",
  72. 5: "d:/ymir work/ui/quest_re/tabcolor_6_system.tga",
  73. 6: "d:/ymir work/ui/quest_re/tabcolor_7_scroll.tga",
  74. 7: "d:/ymir work/ui/quest_re/tabcolor_8_daily.tga",
  75. 8: "d:/ymir work/ui/quest_re/tabcolor_8_daily.tga"
  76. }
  77.  
  78. quest_label_dict = {
  79. 0 : localeInfo.QUEST_CATEGORY_00,
  80. 1 : localeInfo.QUEST_CATEGORY_01,
  81. 2 : localeInfo.QUEST_CATEGORY_02,
  82. 3 : localeInfo.QUEST_CATEGORY_03,
  83. 4 : localeInfo.QUEST_CATEGORY_04,
  84. 5 : localeInfo.QUEST_CATEGORY_05,
  85. 6 : localeInfo.QUEST_CATEGORY_06,
  86. 7 : localeInfo.QUEST_CATEGORY_07,
  87. 8 : "GM Panel",
  88. }
  89.  
  90. class CharacterPageCreateBonus(ui.ScriptWindow):
  91. def __init__(self):
  92. ui.ScriptWindow.__init__(self)
  93. self.__Initialize()
  94. self.__LoadWindow()
  95.  
  96. def __Initialize(self):
  97. self.base_pos = (0, 0)
  98. self.bonus_name = None
  99. self.bonus_value = None
  100. self.apply_value = None
  101.  
  102. def __del__(self):
  103. ui.ScriptWindow.__del__(self)
  104.  
  105. def __LoadWindow(self):
  106. pyScrLoader = ui.PythonScriptLoader()
  107. pyScrLoader.LoadScriptFile(self, "UIScript/characterwindowbonusstruct.py")
  108. self.bonus_name = self.GetChild("bonus_name")
  109. self.bonus_value = self.GetChild("bonus_value")
  110.  
  111. return self
  112.  
  113. def SetBasePosition(self, x, y):
  114. self.base_pos = (x, y)
  115. self.SetPosition(x, y)
  116.  
  117. def GetBasePosition(self):
  118. return self.base_pos
  119.  
  120. def SetName(self, name):
  121. self.bonus_name.SetText(str(name))
  122.  
  123. def SetApplyValue(self, value):
  124. self.apply_value = value
  125.  
  126. def RefreshApplyValue(self):
  127. if self.apply_value != None:
  128. value = 0
  129. if self.apply_value == -1:
  130. value = player.GetStatus(player.POINT_BLUE_PLAYER_KILLED) + player.GetStatus(player.POINT_YELLOW_PLAYER_KILLED) + player.GetStatus(player.POINT_RED_PLAYER_KILLED)
  131. else:
  132. value = player.GetStatus(self.apply_value)
  133. self.bonus_value.SetText("{}".format(value))
  134.  
  135. class CharacterWindow(ui.ScriptWindow):
  136. if app.ENABLE_SKILLS_LEVEL_OVER_P:
  137. SKILL_GRADE_SLOT_COUNT = 3
  138.  
  139. POSITIVE_COLOR = grp.GenerateColor(0.5411, 0.7254, 0.5568, 1.0)
  140.  
  141. ACTIVE_PAGE_SLOT_COUNT = 8
  142. SUPPORT_PAGE_SLOT_COUNT = 18
  143. HORSE_SLOT_COUNT = 6
  144.  
  145. PAGE_SLOT_COUNT = 18
  146. PAGE_HORSE = 2
  147.  
  148. SKILL_GROUP_NAME_DICT = {
  149. playerSettingModule.JOB_WARRIOR : { 1 : localeInfo.SKILL_GROUP_WARRIOR_1, 2 : localeInfo.SKILL_GROUP_WARRIOR_2, },
  150. playerSettingModule.JOB_ASSASSIN : { 1 : localeInfo.SKILL_GROUP_ASSASSIN_1, 2 : localeInfo.SKILL_GROUP_ASSASSIN_2, },
  151. playerSettingModule.JOB_SURA : { 1 : localeInfo.SKILL_GROUP_SURA_1, 2 : localeInfo.SKILL_GROUP_SURA_2, },
  152. playerSettingModule.JOB_SHAMAN : { 1 : localeInfo.SKILL_GROUP_SHAMAN_1, 2 : localeInfo.SKILL_GROUP_SHAMAN_2, },
  153. }
  154.  
  155. STAT_DESCRIPTION = {
  156. "HTH" : localeInfo.STAT_TOOLTIP_CON,
  157. "INT" : localeInfo.STAT_TOOLTIP_INT,
  158. "STR" : localeInfo.STAT_TOOLTIP_STR,
  159. "DEX" : localeInfo.STAT_TOOLTIP_DEX,
  160. }
  161.  
  162.  
  163. STAT_MINUS_DESCRIPTION = localeInfo.STAT_MINUS_DESCRIPTION
  164.  
  165. if app.ENABLE_QUEST_RENEWAL:
  166. MAX_QUEST_PAGE_HEIGHT = 336.5
  167.  
  168. def __init__(self):
  169. if app.ENABLE_QUEST_RENEWAL:
  170. self.isQuestCategoryLoad = False
  171.  
  172. if app.ENABLE_SKILL_COLOR_SYSTEM:
  173. self.skillColorWnd = None
  174. self.skillColorButton = []
  175.  
  176. ui.ScriptWindow.__init__(self)
  177. self.state = "STATUS"
  178. self.isLoaded = 0
  179.  
  180. self.toolTipSkill = 0
  181.  
  182. self.character_actual_page = 0
  183.  
  184. self.__Initialize()
  185. self.__LoadWindow()
  186.  
  187. self.statusPlusCommandDict={
  188. "HTH" : "/stat_val ht ",
  189. "INT" : "/stat_val iq ",
  190. "STR" : "/stat_val st ",
  191. "DEX" : "/stat_val dx ",
  192. }
  193.  
  194. self.statusMinusCommandDict={
  195. "HTH-" : "/stat- ht",
  196. "INT-" : "/stat- iq",
  197. "STR-" : "/stat- st",
  198. "DEX-" : "/stat- dx",
  199. }
  200.  
  201. def __del__(self):
  202. ui.ScriptWindow.__del__(self)
  203.  
  204. def __Initialize(self):
  205. self.refreshToolTip = 0
  206. self.curSelectedSkillGroup = 0
  207. self.canUseHorseSkill = -1
  208.  
  209. self.toolTip = None
  210. self.toolTipJob = None
  211. self.toolTipJobPartyBonus = None
  212. self.toolTipAlignment = None
  213. self.toolTipSkill = None
  214.  
  215. self.faceImage = None
  216. self.statusPlusLabel = None
  217. self.statusPlusValue = None
  218. self.activeSlot = None
  219. self.tabDict = None
  220. self.tabButtonDict = None
  221. self.tabCharacterPageDict = None
  222. self.pageDict = None
  223. self.titleBarDict = None
  224. self.statusPlusButtonDict = None
  225. self.statusMinusButtonDict = None
  226. self.statusImageDic = None
  227.  
  228. self.skillPageDict = None
  229. if app.ENABLE_QUEST_RENEWAL:
  230. self.questScrollBar = None
  231. self.questLastScrollPosition = 0
  232. self.questPage = None
  233. self.questTitleBar = None
  234. self.questSlotList = []
  235. self.questCategory = {}
  236. self.questCategoryList = []
  237.  
  238. self.questColorList = {
  239. "green" : 0xFF83C055,
  240. "blue": 0xFF45678D,
  241. "golden": 0xFFCAB62F,
  242. "default_title": 0xFFCEC6B5
  243. }
  244.  
  245. self.questOpenedCategories = []
  246. self.questMaxOpenedCategories = 1
  247.  
  248. self.questClicked = []
  249. self.questIndexMap = {}
  250. self.questCounterList = []
  251. self.questClockList = []
  252. self.questSeparatorList = []
  253.  
  254. self.displayY = 0
  255. self.baseCutY = 0
  256. self.questCategoryRenderPos = []
  257.  
  258. self.questSlideWnd = {}
  259. self.questSlideWndNewKey = 0
  260. else:
  261. self.questShowingStartIndex = 0
  262. self.questScrollBar = None
  263. self.questSlot = None
  264. self.questNameList = None
  265. self.questLastTimeList = None
  266. self.questLastCountList = None
  267. self.skillGroupButton = ()
  268.  
  269. self.bonusPageItemsInfo = {}
  270. self.bonusPageObjectManage = {}
  271. self.bonusPageCategoryList = []
  272. self.bonusPageCategoryBasePos = []
  273. self.bonusPageObjectList = []
  274. self.bonusPageSelectedCategory = -1
  275.  
  276. self.infoSpecialPageItemsInfo = {}
  277. self.infoSpecialPageObjectManage = {}
  278. self.infoSpecialPageCategoryList = []
  279. self.infoSpecialPageCategoryBasePos = []
  280. self.infoSpecialPageObjectList = []
  281. self.infoSpecialPageSelectedCategory = -1
  282.  
  283. self.activeSlot = None
  284. self.activeSkillPointValue = None
  285. self.supportSkillPointValue = None
  286. self.horseSkillPointValue = None
  287. self.skillGroupButton1 = None
  288. self.skillGroupButton2 = None
  289. self.activeSkillGroupName = None
  290.  
  291. self.guildNameSlot = None
  292. self.guildNameValue = None
  293. self.characterNameSlot = None
  294. self.characterNameValue = None
  295.  
  296. self.emotionToolTip = None
  297. self.soloEmotionSlot = None
  298. self.dualEmotionSlot = None
  299. self.specialEmotionSlot = None
  300. self.specialEmotionSlot2 = None
  301. self.prevButton = None
  302. self.nextButton = None
  303. self.currentPageBack = None
  304. self.currentPageText = None
  305. self.currentPage = 1
  306. self.wndCharacterDetails = None
  307. self.wndCharacterDetailsButton = None
  308. self.interface = None
  309. if app.ENABLE_WINDOW_SLIDE_EFFECT:
  310. self.EnableSlidingEffect()
  311.  
  312. def Show(self):
  313. self.__LoadWindow()
  314. ui.ScriptWindow.Show(self)
  315.  
  316. def __LoadScript(self, fileName):
  317. pyScrLoader = ui.PythonScriptLoader()
  318. pyScrLoader.LoadScriptFile(self, fileName)
  319.  
  320. def __BindObject(self):
  321. self.toolTip = uiToolTip.ToolTip()
  322. self.toolTipJob = uiToolTip.ToolTip()
  323. self.toolTipJobPartyBonus = uiToolTip.ToolTip()
  324. self.toolTipAlignment = uiToolTip.ToolTip(130)
  325.  
  326. self.faceImage = self.GetChild("Face_Image")
  327.  
  328. faceSlot=self.GetChild("Face_Slot")
  329. self.statusPlusLabel = self.GetChild("Status_Plus_Label")
  330. self.statusPlusValue = self.GetChild("Status_Plus_Value")
  331.  
  332. self.characterNameSlot = self.GetChild("Character_Name_Slot")
  333. self.characterNameValue = self.GetChild("Character_Name")
  334. self.guildNameSlot = self.GetChild("Guild_Name_Slot")
  335. self.guildNameValue = self.GetChild("Guild_Name")
  336. self.characterNameSlot.SAFE_SetEvent(self.__ShowAlignmentToolTip, "MOUSE_OVER_IN")
  337. self.characterNameSlot.SAFE_SetEvent(self.__HideAlignmentToolTip, "MOUSE_OVER_OUT")
  338.  
  339. self.activeSlot = self.GetChild("Skill_Active_Slot")
  340. self.activeSkillPointValue = self.GetChild("Active_Skill_Point_Value")
  341. self.supportSkillPointValue = self.GetChild("Support_Skill_Point_Value")
  342. self.horseSkillPointValue = self.GetChild("horse_Skill_Point_Value")
  343. self.skillGroupButton1 = self.GetChild("Skill_Group_Button_1")
  344. self.skillGroupButton2 = self.GetChild("Skill_Group_Button_2")
  345. self.activeSkillGroupName = self.GetChild("Active_Skill_Group_Name")
  346.  
  347. if app.ENABLE_QUEST_RENEWAL:
  348. self.questScrollBar = self.GetChild("Quest_ScrollBar")
  349. self.questPage = self.GetChild("Quest_Page")
  350. self.questTitleBar = self.GetChild("Quest_TitleBar")
  351. self.quest_page_board_window = self.GetChild("quest_page_board_window")
  352. self.quest_object_board_window = self.GetChild("quest_object_board_window")
  353.  
  354. self.tabDict = {
  355. "STATUS" : self.GetChild("Tab_01"),
  356. "SKILL" : self.GetChild("Tab_02"),
  357. "EMOTICON" : self.GetChild("Tab_03"),
  358. "QUEST" : self.GetChild("Tab_04"),
  359. }
  360.  
  361. self.tabButtonDict = {
  362. "STATUS" : self.GetChild("Tab_Button_01"),
  363. "SKILL" : self.GetChild("Tab_Button_02"),
  364. "EMOTICON" : self.GetChild("Tab_Button_03"),
  365. "QUEST" : self.GetChild("Tab_Button_04"),
  366. }
  367.  
  368. self.tabCharacterPageDict = {
  369. 0 : self.GetChild("change_status_button"),
  370. 1 : self.GetChild("change_bonus_button"),
  371. 2 : self.GetChild("change_other_button"),
  372. }
  373.  
  374.  
  375. self.pageDict = {
  376. "STATUS" : self.GetChild("Character_Page"),
  377. "SKILL" : self.GetChild("Skill_Page"),
  378. "EMOTICON" : self.GetChild("Emoticon_Page"),
  379. "QUEST" : self.GetChild("Quest_Page")
  380. }
  381.  
  382. self.titleBarDict = {
  383. "STATUS" : self.GetChild("Character_TitleBar"),
  384. "SKILL" : self.GetChild("Skill_TitleBar"),
  385. "EMOTICON" : self.GetChild("Emoticon_TitleBar"),
  386. "QUEST" : self.GetChild("Quest_TitleBar")
  387. }
  388.  
  389. self.statusPlusButtonDict = {
  390. "HTH" : self.GetChild("HTH_Plus"),
  391. "INT" : self.GetChild("INT_Plus"),
  392. "STR" : self.GetChild("STR_Plus"),
  393. "DEX" : self.GetChild("DEX_Plus"),
  394. }
  395.  
  396. self.statusMinusButtonDict = {
  397. "HTH-" : self.GetChild("HTH_Minus"),
  398. "INT-" : self.GetChild("INT_Minus"),
  399. "STR-" : self.GetChild("STR_Minus"),
  400. "DEX-" : self.GetChild("DEX_Minus"),
  401. }
  402.  
  403. self.skillPageDict = {
  404. "ACTIVE" : self.GetChild("Skill_Active_Slot"),
  405. "SUPPORT" : self.GetChild("Skill_ETC_Slot"),
  406. "HORSE" : self.GetChild("Skill_HORSE_Slot"),
  407. }
  408.  
  409. self.skillPageStatDict = {
  410. "SUPPORT" : player.SKILL_SUPPORT,
  411. "ACTIVE" : player.SKILL_ACTIVE,
  412. "HORSE" : player.SKILL_HORSE,
  413. }
  414.  
  415. self.labelPageStatDict = {
  416. "SUPPORT" : self.GetChild("Support_Skill_Point_Label"),
  417. "ACTIVE" : self.GetChild("Active_Skill_Point_Label"),
  418. "HORSE" : self.GetChild("horse_Skill_Point_Label"),
  419. }
  420.  
  421. self.skillGroupButton = (
  422. self.GetChild("Skill_Group_Button_1"),
  423. self.GetChild("Skill_Group_Button_2"),
  424. )
  425.  
  426. self.wndCharacterDetailsButton = ui.MakeButtonNew(self, self.GetWidth()-13, (self.GetHeight()-108)/2, "", \
  427. "d:/ymir work/ui/game/belt_inventory/", \
  428. "btn_minimize_normal.tga", \
  429. "btn_minimize_over.tga", \
  430. "btn_minimize_down.tga")
  431. self.wndCharacterDetailsButton.SetEvent(ui.__mem_func__(self.ToggleCharacterDetails))
  432. self.wndCharacterDetails = uicharacterdetails.CharacterDetailsUI()
  433. self.statusImageDic = {
  434. #status lado esquerod
  435. "HTH" : (self.GetChild("HTH_IMG"), 0),
  436. "INT" : (self.GetChild("INT_IMG"), 0),
  437. "STR" : (self.GetChild("STR_IMG"), 0),
  438. "DEX" : (self.GetChild("DEX_IMG"), 0),
  439.  
  440. #status do lado direito
  441. "VIDA" : (self.GetChild("HEL_IMG"), 1),
  442. "MANA" : (self.GetChild("SP_IMG"), 1),
  443. "VATAQUE" : (self.GetChild("ATT_IMG"), 1),
  444. "DEFESA" : (self.GetChild("DEF_IMG"), 1),
  445.  
  446. #status de baixo
  447. "MSPD" : (self.GetChild("MSPD_IMG"), 2),
  448. "ASPD" : (self.GetChild("ASPD_IMG"), 2),
  449. "CSPD" : (self.GetChild("CSPD_IMG"), 2),
  450. "MATT" : (self.GetChild("MATT_IMG"), 2),
  451. "MDEF" : (self.GetChild("MDEF_IMG"), 2),
  452. "ER" : (self.GetChild("ER_IMG"), 2),
  453.  
  454. #outros
  455. "STAT_TITLE" : (self.GetChild("Char_Info_Status_img"), 3),
  456. "AVAIBLE_STAT_POINT" : (self.GetChild("Status_Plus_Label"), 3),
  457.  
  458. #skills page
  459. "ACTIVE_SKILL_POINTS" : (self.GetChild("Active_Skill_Point_Label"), 4),
  460. "HORSE_SKILL_TOOLTIP" : (self.GetChild("horse_skill_tooltip"), 4),
  461. "HORSE_SKILL_POINTS" : (self.GetChild("horse_Skill_Point_Label"), 4),
  462. #emoticon page
  463. "NORMAL_EMOTION " : (self.GetChild("Action_Bar_Img"), 5),
  464. "DUO_EMOTION " : (self.GetChild("Reaction_Bar_Img"), 5),
  465. "SPECIAL_EMOTION " : (self.GetChild("Special_Action_Bar_Img"), 5),
  466.  
  467. #others page
  468. "BONUS_PAGE " : (self.GetChild("bonus_base_tooltip_image"), 6),
  469. "OTHER_PAGE " : (self.GetChild("special_base_tooltip_image"), 6),
  470. }
  471.  
  472. self.characterPageDict = {
  473. 0 : self.GetChild("status_window"),
  474. 1 : self.GetChild("bonus_window"),
  475. 2 : self.GetChild("special_other_window")
  476. }
  477.  
  478. self.bonusPageItemsInfo = {
  479. 0 : {
  480. "B�nus de Dano" :
  481. [
  482. (localeInfo.DETAILS_1, item.GetApplyPoint(item.APPLY_ATTBONUS_HUMAN)),
  483. (localeInfo.DETAILS_3, item.GetApplyPoint(item.APPLY_ATTBONUS_ORC)),
  484. (localeInfo.DETAILS_4, item.GetApplyPoint(item.APPLY_ATTBONUS_UNDEAD)),
  485. (localeInfo.DETAILS_5, item.GetApplyPoint(item.APPLY_ATTBONUS_MONSTER)),
  486. (localeInfo.DETAILS_7, item.GetApplyPoint(item.APPLY_ATTBONUS_ANIMAL)),
  487. (localeInfo.DETAILS_8, item.GetApplyPoint(item.APPLY_ATTBONUS_MILGYO)),
  488. (localeInfo.DETAILS_9, item.GetApplyPoint(item.APPLY_ATTBONUS_DEVIL)),
  489. # (localeInfo.DETAILS_95, item.GetApplyPoint(item.APPLY_ATTBONUS_INSECT)),
  490. (localeInfo.DETAILS_10, item.GetApplyPoint(item.APPLY_ATTBONUS_BOSS)),
  491. (localeInfo.DETAILS_11, item.GetApplyPoint(item.APPLY_ATTBONUS_METIN)),
  492. (localeInfo.DETAILS_12, item.GetApplyPoint(item.APPLY_ATT_GRADE_BONUS)),
  493. (localeInfo.DETAILS_14, item.GetApplyPoint(item.APPLY_NORMAL_HIT_DAMAGE_BONUS)),
  494. (localeInfo.DETAILS_16, item.GetApplyPoint(item.APPLY_SKILL_DAMAGE_BONUS)),
  495. (localeInfo.DETAILS_18, item.GetApplyPoint(item.APPLY_MELEE_MAGIC_ATTBONUS_PER)),
  496. (localeInfo.DETAILS_19, item.GetApplyPoint(item.APPLY_MAGIC_ATTBONUS_PER)),
  497. (localeInfo.DETAILS_20, item.GetApplyPoint(item.APPLY_CRITICAL_PCT)),
  498. (localeInfo.DETAILS_21, item.GetApplyPoint(item.APPLY_PENETRATE_PCT)),
  499. # (localeInfo.DETAILS_91, item.GetApplyPoint(item.APPLY_CRITICAL_PVM_PCT)),
  500. # (localeInfo.DETAILS_92, item.GetApplyPoint(item.APPLY_PENETRATE_PVM_PCT)),
  501. # (localeInfo.DETAILS_77, item.GetApplyPoint(item.APPLY_PENETRATE_MAGIC_PCT)),
  502. (localeInfo.DETAILS_78, item.GetApplyPoint(item.APPLY_ATTBONUS_ELEC)),
  503. (localeInfo.DETAILS_79, item.GetApplyPoint(item.APPLY_ATTBONUS_ICE)),
  504. (localeInfo.DETAILS_80, item.GetApplyPoint(item.APPLY_ATTBONUS_DARK)),
  505. (localeInfo.DETAILS_81, item.GetApplyPoint(item.APPLY_ATTBONUS_FIRE)),
  506. (localeInfo.DETAILS_82, item.GetApplyPoint(item.APPLY_ATTBONUS_WIND)),
  507. (localeInfo.DETAILS_83, item.GetApplyPoint(item.APPLY_ATTBONUS_EARTH)),
  508. (localeInfo.DETAILS_36, item.GetApplyPoint(item.APPLY_ATTBONUS_WARRIOR)),
  509. (localeInfo.DETAILS_37, item.GetApplyPoint(item.APPLY_ATTBONUS_ASSASSIN)),
  510. (localeInfo.DETAILS_38, item.GetApplyPoint(item.APPLY_ATTBONUS_SURA)),
  511. (localeInfo.DETAILS_39, item.GetApplyPoint(item.APPLY_ATTBONUS_SHAMAN)),
  512. ],
  513. },
  514. 1 : {
  515. "B�nus de Defesa" :
  516. [
  517. (localeInfo.DETAILS_13, item.GetApplyPoint(item.APPLY_DEF_GRADE_BONUS)),
  518. (localeInfo.DETAILS_15, item.GetApplyPoint(item.APPLY_NORMAL_HIT_DEFEND_BONUS)),
  519. (localeInfo.DETAILS_17, item.GetApplyPoint(item.APPLY_SKILL_DEFEND_BONUS)),
  520. # (localeInfo.DETAILS_22, item.GetApplyPoint(item.APPLY_RESIST_CRITIAL_HITS)),
  521. # (localeInfo.DETAILS_23, item.GetApplyPoint(item.APPLY_RESIST_PENETRATE_HITS)),
  522. # (localeInfo.DETAILS_96, item.GetApplyPoint(item.APPLY_RESIST_BOSSES)),
  523. (localeInfo.DETAILS_76, item.GetApplyPoint(item.APPLY_RESIST_MAGIC)),
  524. (localeInfo.DETAILS_24, item.GetApplyPoint(item.APPLY_RESIST_ELEC)),
  525. (localeInfo.DETAILS_25, item.GetApplyPoint(item.APPLY_RESIST_ICE)),
  526. (localeInfo.DETAILS_26, item.GetApplyPoint(item.APPLY_RESIST_DARK)),
  527. (localeInfo.DETAILS_27, item.GetApplyPoint(item.APPLY_RESIST_FIRE)),
  528. (localeInfo.DETAILS_28, item.GetApplyPoint(item.APPLY_RESIST_WIND)),
  529. (localeInfo.DETAILS_29, item.GetApplyPoint(item.APPLY_RESIST_EARTH)),
  530. (localeInfo.DETAILS_41, item.GetApplyPoint(item.APPLY_RESIST_WARRIOR)),
  531. (localeInfo.DETAILS_42, item.GetApplyPoint(item.APPLY_RESIST_ASSASSIN)),
  532. (localeInfo.DETAILS_43, item.GetApplyPoint(item.APPLY_RESIST_SURA)),
  533. (localeInfo.DETAILS_44, item.GetApplyPoint(item.APPLY_RESIST_SHAMAN)),
  534. (localeInfo.DETAILS_90, item.GetApplyPoint(item.APPLY_RESIST_HUMAN)),
  535. (localeInfo.DETAILS_46, item.GetApplyPoint(item.APPLY_RESIST_SWORD)),
  536. (localeInfo.DETAILS_48, item.GetApplyPoint(item.APPLY_RESIST_TWOHAND)),
  537. (localeInfo.DETAILS_47, item.GetApplyPoint(item.APPLY_RESIST_DAGGER)),
  538. (localeInfo.DETAILS_50, item.GetApplyPoint(item.APPLY_RESIST_BELL)),
  539. (localeInfo.DETAILS_51, item.GetApplyPoint(item.APPLY_RESIST_FAN)),
  540. (localeInfo.DETAILS_52, item.GetApplyPoint(item.APPLY_RESIST_BOW)),
  541. ],
  542. },
  543. 2 : {
  544. "Outros B�nus" :
  545. [
  546. (localeInfo.DETAILS_53, item.GetApplyPoint(item.APPLY_STUN_PCT)),
  547. (localeInfo.DETAILS_54, item.GetApplyPoint(item.APPLY_SLOW_PCT)),
  548. (localeInfo.DETAILS_55, item.GetApplyPoint(item.APPLY_POISON_PCT)),
  549. (localeInfo.DETAILS_56, item.GetApplyPoint(item.APPLY_POISON_REDUCE)),
  550. (localeInfo.DETAILS_59, item.GetApplyPoint(item.APPLY_STEAL_HP)),
  551. (localeInfo.DETAILS_60, item.GetApplyPoint(item.APPLY_STEAL_SP)),
  552. (localeInfo.DETAILS_61, item.GetApplyPoint(item.APPLY_HP_REGEN)),
  553. (localeInfo.DETAILS_62, item.GetApplyPoint(item.APPLY_SP_REGEN)),
  554. (localeInfo.DETAILS_63, item.GetApplyPoint(item.APPLY_BLOCK)),
  555. (localeInfo.DETAILS_64, item.GetApplyPoint(item.APPLY_DODGE)),
  556. # (localeInfo.DETAILS_93, item.GetApplyPoint(item.APPLY_RUPTURE_BLOCK)),
  557. # (localeInfo.DETAILS_94, item.GetApplyPoint(item.APPLY_RUPTURE_DODGE)),
  558. (localeInfo.DETAILS_65, item.GetApplyPoint(item.APPLY_REFLECT_MELEE)),
  559. (localeInfo.DETAILS_66, item.GetApplyPoint(item.APPLY_KILL_HP_RECOVER)),
  560. (localeInfo.DETAILS_67, item.GetApplyPoint(item.APPLY_KILL_SP_RECOVER)),
  561. (localeInfo.DETAILS_68, item.GetApplyPoint(item.APPLY_EXP_DOUBLE_BONUS)),
  562. (localeInfo.DETAILS_69, item.GetApplyPoint(item.APPLY_GOLD_DOUBLE_BONUS)),
  563. (localeInfo.DETAILS_70, item.GetApplyPoint(item.APPLY_ITEM_DROP_BONUS)),
  564. ],
  565. },
  566. 3 : {
  567. "B�nus Percentuais" :
  568. [
  569. (localeInfo.DETAILS_71, item.GetApplyPoint(item.APPLY_MALL_ATTBONUS)),
  570. (localeInfo.DETAILS_72, item.GetApplyPoint(item.APPLY_MALL_DEFBONUS)),
  571. (localeInfo.DETAILS_73, item.GetApplyPoint(item.APPLY_MALL_EXPBONUS)),
  572. (localeInfo.DETAILS_74, item.GetApplyPoint(item.APPLY_MALL_ITEMBONUS)),
  573. (localeInfo.DETAILS_75, item.GetApplyPoint(item.APPLY_MALL_GOLDBONUS)),
  574. ],
  575. },
  576. 4 : {
  577. "Rupturas Ofensivas" :
  578. [
  579. (localeInfo.DETAILS_71, item.GetApplyPoint(item.APPLY_MALL_ATTBONUS)),
  580. (localeInfo.DETAILS_72, item.GetApplyPoint(item.APPLY_MALL_DEFBONUS)),
  581. (localeInfo.DETAILS_73, item.GetApplyPoint(item.APPLY_MALL_EXPBONUS)),
  582. (localeInfo.DETAILS_74, item.GetApplyPoint(item.APPLY_MALL_ITEMBONUS)),
  583. (localeInfo.DETAILS_75, item.GetApplyPoint(item.APPLY_MALL_GOLDBONUS)),
  584. ],
  585. },
  586. }
  587.  
  588. self.infoSpecialPageItemsInfo = {
  589. 0 : {
  590. "Estat�sticas PvM" :
  591. [
  592. (localeInfo.DETAILS_71, item.GetApplyPoint(item.APPLY_MALL_ATTBONUS)),
  593. (localeInfo.DETAILS_72, item.GetApplyPoint(item.APPLY_MALL_DEFBONUS)),
  594. (localeInfo.DETAILS_73, item.GetApplyPoint(item.APPLY_MALL_EXPBONUS)),
  595. (localeInfo.DETAILS_74, item.GetApplyPoint(item.APPLY_MALL_ITEMBONUS)),
  596. (localeInfo.DETAILS_75, item.GetApplyPoint(item.APPLY_MALL_GOLDBONUS)),
  597. ],
  598. },
  599. 1 : {
  600. "Estat�sticas PvP" :
  601. [
  602. (localeInfo.DETAILS_71, item.GetApplyPoint(item.APPLY_MALL_ATTBONUS)),
  603. (localeInfo.DETAILS_72, item.GetApplyPoint(item.APPLY_MALL_DEFBONUS)),
  604. (localeInfo.DETAILS_73, item.GetApplyPoint(item.APPLY_MALL_EXPBONUS)),
  605. (localeInfo.DETAILS_74, item.GetApplyPoint(item.APPLY_MALL_ITEMBONUS)),
  606. (localeInfo.DETAILS_75, item.GetApplyPoint(item.APPLY_MALL_GOLDBONUS)),
  607. ],
  608. },
  609. }
  610.  
  611. self.bonusPageObjectManage = {
  612. "label" : self.GetChild("bonus_base_image"),
  613. "scrollbar" : self.GetChild("bonus_scrollbar"),
  614. "max_height" : 213,
  615. "scroll_distance" : 0,
  616. }
  617. self.bonusPageObjectManage["scrollbar"].Hide()
  618.  
  619. self.infoSpecialPageObjectManage = {
  620. "label" : self.GetChild("special_base_image"),
  621. "scrollbar" : self.GetChild("special_scrollbar"),
  622. "max_height" : 213,
  623. "scroll_distance" : 0,
  624. }
  625. self.infoSpecialPageObjectManage["scrollbar"].Hide()
  626.  
  627. for _, label in self.labelPageStatDict.items():
  628. label.Hide()
  629.  
  630. self.GetChild("Support_Skill_Point_Label").Hide()
  631.  
  632. self.soloEmotionSlot = self.GetChild("SoloEmotionSlot")
  633. self.dualEmotionSlot = self.GetChild("DualEmotionSlot")
  634. self.specialEmotionSlot = self.GetChild("SpecialEmotionSlot")
  635. self.specialEmotionSlot2 = self.GetChild("SpecialEmotionSlot2")
  636. self.prevButton = self.GetChild("prev_button")
  637. self.nextButton = self.GetChild("next_button")
  638. self.currentPageBack = self.GetChild("CurrentPageBack")
  639. self.currentPageText = self.GetChild("CurrentPage")
  640. self.__SetEmotionSlot()
  641. self.RefreshEmotionPage()
  642.  
  643.  
  644. if app.ENABLE_QUEST_RENEWAL:
  645. self.questScrollBar.SetParent(self.quest_page_board_window)
  646. for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
  647. self.questCategory = ui.SubTitleBar()
  648. self.questCategory.SetParent(self.questPage)
  649. self.questCategory.MakeSubTitleBar(210, "red")
  650. self.questCategory.SetText(quest_label_dict[i])
  651. self.questCategory.SetSize(210, 16)
  652. self.questCategory.SetPosition(13, 0)
  653. self.questCategoryList.append(self.questCategory)
  654.  
  655. self.questCategoryRenderPos.append(0)
  656.  
  657. self.questScrollBar.SetParent(self.questPage)
  658. self.RearrangeQuestCategories(xrange(quest.QUEST_CATEGORY_MAX_NUM))
  659. else:
  660. self.questShowingStartIndex = 0
  661. self.questScrollBar = self.GetChild("Quest_ScrollBar")
  662. self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll))
  663. self.questSlot = self.GetChild("Quest_Slot")
  664. for i in xrange(quest.QUEST_MAX_NUM):
  665. self.questSlot.HideSlotBaseImage(i)
  666. self.questSlot.SetCoverButton(i,\
  667. "d:/ymir work/ui/game/quest/slot_button_01.sub",\
  668. "d:/ymir work/ui/game/quest/slot_button_02.sub",\
  669. "d:/ymir work/ui/game/quest/slot_button_03.sub",\
  670. "d:/ymir work/ui/game/quest/slot_button_03.sub", True)
  671.  
  672. self.questNameList = []
  673. self.questLastTimeList = []
  674. self.questLastCountList = []
  675. for i in xrange(quest.QUEST_MAX_NUM):
  676. self.questNameList.append(self.GetChild("Quest_Name_0" + str(i)))
  677. self.questLastTimeList.append(self.GetChild("Quest_LastTime_0" + str(i)))
  678. self.questLastCountList.append(self.GetChild("Quest_LastCount_0" + str(i)))
  679.  
  680. def ToggleCharacterDetails(self):
  681. if self.wndCharacterDetails.IsShow():
  682. self.wndCharacterDetails.Close()
  683. self.wndCharacterDetailsButton.SetUpVisual("d:/ymir work/ui/game/belt_inventory/btn_minimize_normal.tga")
  684. self.wndCharacterDetailsButton.SetOverVisual("d:/ymir work/ui/game/belt_inventory/btn_minimize_over.tga")
  685. self.wndCharacterDetailsButton.SetDownVisual("d:/ymir work/ui/game/belt_inventory/btn_minimize_down.tga")
  686. else:
  687. self.wndCharacterDetails.Show()
  688. self.wndCharacterDetailsButton.SetUpVisual("d:/ymir work/ui/game/belt_inventory/btn_expand_normal.tga")
  689. self.wndCharacterDetailsButton.SetOverVisual("d:/ymir work/ui/game/belt_inventory/btn_expand_over.tga")
  690. self.wndCharacterDetailsButton.SetDownVisual("d:/ymir work/ui/game/belt_inventory/btn_expand_down.tga")
  691.  
  692. def OnMoveWindow(self, x, y):
  693. self.chWndPos = x, y
  694.  
  695.  
  696. if app.ENABLE_QUEST_RENEWAL:
  697. if self.questSlideWndNewKey-1 >= 0:
  698. if self.questSlideWnd[self.questSlideWndNewKey-1] is not None:
  699. self.questSlideWnd[self.questSlideWndNewKey-1].AdjustPositionAndSize()
  700.  
  701. def __SetSkillSlotEvent(self):
  702. for skillPageValue in self.skillPageDict.itervalues():
  703. skillPageValue.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  704. skillPageValue.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectSkill))
  705. skillPageValue.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
  706. skillPageValue.SetUnselectItemSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
  707. skillPageValue.SetUseSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
  708. skillPageValue.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  709. skillPageValue.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  710. skillPageValue.SetPressedSlotButtonEvent(ui.__mem_func__(self.OnPressedSlotButton))
  711. skillPageValue.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
  712. "d:/ymir work/ui/game/windows/btn_plus_over.sub",\
  713. "d:/ymir work/ui/game/windows/btn_plus_down.sub")
  714.  
  715. def OnClickPrevPage(self):
  716. if self.currentPage == 2:
  717. self.currentPage = self.currentPage - 1
  718. self.currentPageText.SetText(str(self.currentPage))
  719. self.RefreshEmotionPage()
  720.  
  721. def OnClickNextPage(self):
  722. if self.currentPage == 1:
  723. self.currentPage = self.currentPage + 1
  724. self.currentPageText.SetText(str(self.currentPage))
  725. self.RefreshEmotionPage()
  726.  
  727. def RefreshEmotionPage(self):
  728. if self.currentPage == 1:
  729. self.specialEmotionSlot.Show()
  730. self.specialEmotionSlot2.Hide()
  731. else:
  732. self.specialEmotionSlot.Hide()
  733. self.specialEmotionSlot2.Show()
  734.  
  735. def __SetEmotionSlot(self):
  736. self.prevButton.SetEvent(ui.__mem_func__(self.OnClickPrevPage))
  737. self.nextButton.SetEvent(ui.__mem_func__(self.OnClickNextPage))
  738. self.currentPageText.SetText(str(self.currentPage))
  739.  
  740. self.emotionToolTip = uiToolTip.ToolTip()
  741.  
  742. for slot in (self.soloEmotionSlot, self.dualEmotionSlot, self.specialEmotionSlot, self.specialEmotionSlot2):
  743. slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  744. slot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectEmotion))
  745. slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
  746. slot.SetUseSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
  747. slot.SetOverInItemEvent(ui.__mem_func__(self.__OverInEmotion))
  748. slot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutEmotion))
  749. slot.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
  750. "d:/ymir work/ui/game/windows/btn_plus_over.sub",\
  751. "d:/ymir work/ui/game/windows/btn_plus_down.sub")
  752.  
  753. for slotIdx, datadict in emotion.EMOTION_DICT.items():
  754. emotionIdx = slotIdx
  755.  
  756. slot = self.soloEmotionSlot
  757.  
  758. if slotIdx > 50 and slotIdx <= 60:
  759. slot = self.dualEmotionSlot
  760. if slotIdx > 60 and slotIdx <= 72:
  761. slot = self.specialEmotionSlot
  762. if slotIdx > 72:
  763. slot = self.specialEmotionSlot2
  764.  
  765. slot.SetEmotionSlot(slotIdx, emotionIdx)
  766. slot.SetCoverButton(slotIdx)
  767.  
  768. if app.ENABLE_PREMIUM_SYSTEM:
  769. if not player.IsPremium() and slotIdx > 60:
  770. slot.SetCoverButton(slotIdx, "d:/ymir work/ui/pet/skill_button/skill_enable_button.sub", "d:/ymir work/ui/pet/skill_button/skill_enable_button.sub", "d:/ymir work/ui/pet/skill_button/skill_enable_button.sub")
  771.  
  772. self.soloEmotionSlot.SetSlot(24, 2, 32, 32, skill.GetEmptySkill())
  773. for i in xrange(3):
  774. self.dualEmotionSlot.SetSlot(54+i, 2, 32, 32, skill.GetEmptySkill())
  775. for i in xrange(3):
  776. self.specialEmotionSlot2.SetSlot(82+i, 2, 32, 32, skill.GetEmptySkill())
  777.  
  778. def __SelectEmotion(self, slotIndex):
  779. if not slotIndex in emotion.EMOTION_DICT:
  780. return
  781.  
  782. if app.IsPressed(app.DIK_LCONTROL):
  783. player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_EMOTION, slotIndex)
  784. return
  785.  
  786. mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_EMOTION, slotIndex, slotIndex)
  787.  
  788. def __ClickEmotionSlot(self, slotIndex):
  789. if not slotIndex in emotion.EMOTION_DICT:
  790. return
  791.  
  792. if player.IsActingEmotion():
  793. return
  794.  
  795. command = emotion.EMOTION_DICT[slotIndex]["command"]
  796.  
  797. if slotIndex > 50 and slotIndex <= 60:
  798. vid = player.GetTargetVID()
  799.  
  800. if 0 == vid or vid == player.GetMainCharacterIndex() or chr.IsNPC(vid) or chr.IsEnemy(vid):
  801. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EMOTION_CHOOSE_ONE)
  802. return
  803.  
  804. command += " " + chr.GetNameByVID(vid)
  805.  
  806. net.SendChatPacket(command)
  807.  
  808. def ActEmotion(self, emotionIndex):
  809. self.__ClickEmotionSlot(emotionIndex)
  810.  
  811. def __OverInEmotion(self, slotIndex):
  812. if self.emotionToolTip:
  813.  
  814. if not slotIndex in emotion.EMOTION_DICT:
  815. return
  816.  
  817. self.emotionToolTip.ClearToolTip()
  818. self.emotionToolTip.SetTitle(emotion.EMOTION_DICT[slotIndex]["name"])
  819. self.emotionToolTip.AlignHorizonalCenter()
  820. self.emotionToolTip.ShowToolTip()
  821.  
  822. def __OverOutEmotion(self):
  823. if self.emotionToolTip:
  824. self.emotionToolTip.HideToolTip()
  825.  
  826. def __BindEvent(self):
  827. for i in xrange(len(self.skillGroupButton)):
  828. self.skillGroupButton[i].SetEvent(ui.__mem_func__(self.__SelectSkillGroup),i)
  829.  
  830. self.RefreshQuest()
  831. self.__HideJobToolTip()
  832.  
  833. for (tabKey, tabButton) in self.tabButtonDict.items():
  834. tabButton.SetEvent(ui.__mem_func__(self.__OnClickTabButton), tabKey)
  835.  
  836. for (tabCharacterKey, tabCharacterButton) in self.tabCharacterPageDict.items():
  837. tabCharacterButton.SetEvent(ui.__mem_func__(self.SetStatusPage), tabCharacterKey)
  838. tabCharacterButton.ShowToolTip = lambda arg=tabCharacterKey: self.__OverInCharacterButton(arg)
  839. tabCharacterButton.HideToolTip = lambda arg=tabCharacterKey: self.__OverOutCharacterButton()
  840.  
  841. if tabCharacterKey == 1 or tabCharacterKey == 2:
  842. tabCharacterButton.Hide()
  843.  
  844. for (statusPlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  845. statusPlusButton.SAFE_SetEvent(self.__OnClickStatusPlusButton, statusPlusKey)
  846. statusPlusButton.SetShowToolTipEvent(ui.__mem_func__(self.__OverInStatButton), statusPlusKey)
  847. statusPlusButton.SetHideToolTipEvent(ui.__mem_func__(self.__OverOutStatButton), statusPlusKey)
  848.  
  849. for (statusMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  850. statusMinusButton.SAFE_SetEvent(self.__OnClickStatusMinusButton, statusMinusKey)
  851. statusMinusButton.SetShowToolTipEvent(ui.__mem_func__(self.__OverInStatMinusButton), statusMinusKey)
  852. statusMinusButton.SetHideToolTipEvent(ui.__mem_func__(self.__OverOutStatMinusButton), statusMinusKey)
  853.  
  854. for titleBarValue in self.titleBarDict.itervalues():
  855. titleBarValue.SetCloseEvent(ui.__mem_func__(self.Close))
  856.  
  857. for statusImageKey in self.statusImageDic.keys():
  858. statusImageButton, statusImageDescKey = self.statusImageDic[statusImageKey]
  859. statusImageButton.SAFE_SetEvent(self.__OverInStatusImage, "MOUSE_OVER_IN", statusImageKey, statusImageDescKey)
  860. statusImageButton.SAFE_SetEvent(self.__OverOutStatusImage, "MOUSE_OVER_OUT")
  861.  
  862. if app.ENABLE_QUEST_RENEWAL:
  863. self.questTitleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  864. self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScrollQuest))
  865.  
  866. for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
  867. self.questCategoryList[i].SetEvent(ui.__mem_func__(self.__OnClickQuestCategoryButton), i)
  868. else:
  869. self.questSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectQuest))
  870.  
  871. self.bonusPageObjectManage["scrollbar"].SetScrollEvent(ui.__mem_func__(self.__OnScrollBonusPage))
  872. self.infoSpecialPageObjectManage["scrollbar"].SetScrollEvent(ui.__mem_func__(self.__OnScrollSpecialPage))
  873.  
  874. def __LoadWindow(self):
  875. if self.isLoaded == 1:
  876. return
  877.  
  878. self.isLoaded = 1
  879.  
  880. try:
  881. self.__LoadScript("UIScript/CharacterWindow.py")
  882. self.__BindObject()
  883. self.__BindEvent()
  884. except:
  885. import exception
  886. exception.Abort("CharacterWindow.__LoadWindow")
  887.  
  888. self.SetState("STATUS")
  889. self.SetStatusPage(self.character_actual_page)
  890. self.__LoadBonusPagesCategory()
  891. self.__LoadStaticInfoPagesCategory()
  892.  
  893. x, y = self.GetGlobalPosition()
  894. #if self.interface and self.interface.wndPartyBonusWindow:
  895.  
  896. self.SelectSkill(0, True)
  897.  
  898. def Destroy(self):
  899. self.ClearDictionary()
  900. if app.ENABLE_PARTY_RENEW_SELECTION:
  901. if self.interface.wndPartyBonusWindow:
  902. self.interface.wndPartyBonusWindow.Close()
  903. self.wndCharacterDetails.Close()
  904. self.wndCharacterDetails.Destroy()
  905. self.__Initialize()
  906.  
  907. ########################################
  908. ########################################
  909. ########################################
  910. ########################################
  911. ########################################
  912. ########################################
  913. ########################################
  914. ########################################
  915. OBJECT_PARM_HEIGHT = 20
  916.  
  917. def __LoadBonusPagesCategory(self): #Cria as categorias e armazena-as numa lista
  918. for (index, info) in self.bonusPageItemsInfo.items():
  919. name = list(info.keys())[0]
  920. bonus = info[name]
  921. separator = ui.SubTitleBar()
  922. separator.SetParent(self.bonusPageObjectManage["label"])
  923. separator.MakeSubTitleBar(210, "red")
  924. separator.SetSize(210, 16)
  925. separator.SetPosition(3, 3+(18 * index) + (2 * index))
  926. separator.SetTextAlignLeft(name)
  927. separator.SetQuestLabel(quest_lable_expend_img_path_dict[index], len(bonus))
  928. separator.SetMiniImageNorm("d:/ymir work/ui/game/windows/red_icon_bonus.sub")
  929. separator.SetMiniImageOpen("d:/ymir work/ui/game/windows/red_icon_bonus.sub")
  930. separator.SetEvent(ui.__mem_func__(self.__OnClickBonusPageSeparator), index, bonus)
  931. separator.Show()
  932. self.bonusPageCategoryList.append((separator, bonus))
  933.  
  934. def GetBonusBoardEndPosition(self): #Retorna a posi��o do fim da board dos b�nus
  935. #s� d� return � altura da board devido �s posi��es serem trabalhadas localmente
  936. return self.bonusPageObjectManage["max_height"]
  937.  
  938. def GetFirstBonusPageObjectPosition(self): #Retorna a posi��o do primeiro objeto da p�gina
  939. return (self.bonusPageCategoryList[0][0].GetLocalPosition()[1])
  940.  
  941. def GetLastBonusPageObjectPosition(self): #Retorna a posi��o do �ltimo elemento da p�gina
  942. #se estiver aberta a �ltima p�gina, o �ltimo elemento � o �ltimo quadro de b�nus
  943. if (self.bonusPageSelectedCategory +1) == len(self.bonusPageCategoryList):
  944. return (self.bonusPageObjectList[-1].GetLocalPosition()[1] + self.OBJECT_PARM_HEIGHT)
  945.  
  946. #se n�o estiver retorna a posi�ao da �ltima categoria
  947. return (self.bonusPageCategoryList[-1][0].GetLocalPosition()[1] + self.bonusPageCategoryList[-1][0].GetHeight())
  948.  
  949. def GetOpenedCategorySize(self): #Retorna o tamanho da categoria aberta (A CONTAR DO PRIMEIRO AO �LTIMO OBJETO)
  950. return (self.bonusPageObjectList[-1].GetLocalPosition()[1] + self.OBJECT_PARM_HEIGHT) - self.bonusPageObjectList[0].GetLocalPosition()[1]
  951.  
  952. def RefreshCategoryBasePosition(self): #Atualiza as posi��es bases das categorias
  953. self.bonusPageCategoryBasePos = [] #Elimina todas as antigas posi��es
  954. for (label, _) in self.bonusPageCategoryList: #Descobre e armazena a posi��o base das categorias
  955. self.bonusPageCategoryBasePos.append(label.GetLocalPosition())
  956.  
  957. def RefreshScrollDistance(self): #Atualiza a dist�ncia entre o �ltimo objeto e o fim da board
  958. distance = self.GetLastBonusPageObjectPosition() - self.GetBonusBoardEndPosition()
  959. self.bonusPageObjectManage["scroll_distance"] = distance
  960.  
  961. def RefreshScrollBarState(self): #Atualiza o estado da scrollbar
  962. self.bonusPageObjectManage["scrollbar"].SetPos(0) #Inicializa a posi��o da scroll
  963. canShowScroll = bool(self.GetLastBonusPageObjectPosition() > self.GetBonusBoardEndPosition())
  964. self.bonusPageObjectManage["scrollbar"].Show() if canShowScroll else self.bonusPageObjectManage["scrollbar"].Hide()
  965.  
  966. def RefreshBonusPageItemInfo(self): #Usado para dar reload aos b�nus (chamado pela interfaceModule)
  967. for bonusObject in self.bonusPageObjectList:
  968. bonusObject.RefreshApplyValue()
  969.  
  970. def CloseAllBonusPageCat(self): #Reseta a p�gina dos b�nus
  971. for object in self.bonusPageObjectList: object.Hide() #Esconde todos os objetos tempor�rios
  972. for ((label, _), index) in zip(self.bonusPageCategoryList, xrange(len(self.bonusPageCategoryList))):
  973. label.SetPosition(3, 3+(18 * index) + (2 * index)) #Retorna as categorias �s suas posi��es inicias
  974. label.Show()
  975. label.SetTop()
  976.  
  977. self.bonusPageObjectList = [] #Elimina os objetos tempor�rios
  978.  
  979. def SetBonusPageCategory(self, category): #Atribui a categoria atual
  980. self.bonusPageSelectedCategory = category
  981.  
  982. #Quando se clica num separador (catIndex - index da categoria na lista, bonus - array com os bonus)
  983. def __OnClickBonusPageSeparator(self, catIndex, bonus):
  984. #Fecha a categoria e reseta a p�gina de b�nus caso o jogador tenha presionado numa categoria j� aberta
  985. if self.bonusPageSelectedCategory == catIndex:
  986. self.SetBonusPageCategory(-1)
  987. self.CloseAllBonusPageCat()
  988. self.bonusPageObjectManage["scrollbar"].Hide()
  989. return
  990.  
  991. self.CloseAllBonusPageCat() #Reseta a p�gina e atribui a nova categoria
  992. self.SetBonusPageCategory(catIndex)
  993.  
  994. catLabel = self.bonusPageCategoryList[catIndex][0] #Retorna o objeto da categoria escolhida
  995. catLabel_x, catLabel_y = catLabel.GetLocalPosition() #Retorna a posi��o da categoria escolhida
  996.  
  997. for (bonus_info, index) in zip(bonus, xrange(len(bonus))): #Cria os objetos (bonus)
  998. tmpCreatedObject = CharacterPageCreateBonus()
  999. tmpCreatedObject.SetParent(self.bonusPageObjectManage["label"])
  1000. tmpCreatedObject.SetBasePosition(catLabel_x, catLabel_y + 25 + (self.OBJECT_PARM_HEIGHT* index) + (3 * index))
  1001. bonusDesc, bonusType = bonus_info
  1002. tmpCreatedObject.SetName(bonusDesc)
  1003. tmpCreatedObject.SetApplyValue(bonusType)
  1004. tmpCreatedObject.RefreshApplyValue()
  1005. tmpCreatedObject.Show()
  1006. tmpCreatedObject.SetTop()
  1007. self.bonusPageObjectList.append(tmpCreatedObject)
  1008.  
  1009. categorySize = self.GetOpenedCategorySize() #Retorna o tamanho da categoria aberta
  1010. for ((label, _), labelKey) in zip(self.bonusPageCategoryList, xrange(len(self.bonusPageCategoryList))):
  1011. if labelKey <= catIndex: continue #S� interessa categorias que estejam abaixo da categoria aberta
  1012.  
  1013. label_x, label_y = label.GetLocalPosition()
  1014. #incrementa (self.OBJECT_PARM_HEIGHT/2) para o �ltimo objeto n�o ficar "colado" � pr�xima categoria
  1015. label.SetPosition(label_x, label_y + categorySize + (self.OBJECT_PARM_HEIGHT/2))
  1016.  
  1017. self.RefreshCategoryBasePosition() #D� refresh �s posi��es base das categorias
  1018. self.RefreshScrollDistance() #D� refresh � dist�ncia entre o �ltimo objeto e o fim da board
  1019. self.RefreshScrollBarState() #D� refresh ao estado da scrollbar
  1020. self.CheckBonusPageRect() #Atualiza o ret�ngulo de renderiza��o da p�gina
  1021.  
  1022. def __OnScrollBonusPage(self):
  1023. scrollDistance = self.bonusPageObjectManage["scroll_distance"] #Retorna a dist�ncia entre o ultimo elemento e a board
  1024. scrollPos = self.bonusPageObjectManage["scrollbar"].GetPos() #Retorna a posi��o da scrol (0.0-1.0)
  1025.  
  1026. #Dist�ncia que os objetos se mexem, calcula a porpo��o da dist�ncia relativamente � posi��o da scrollbar
  1027. heightDistance = scrollPos * scrollDistance
  1028.  
  1029. for bonusObject in self.bonusPageObjectList:
  1030. bonusObject_x, bonusObject_y = bonusObject.GetBasePosition() #Retorna a posi��o base dos objetos
  1031. bonusObject.SetPosition(bonusObject_x, bonusObject_y - heightDistance)
  1032.  
  1033. for categoryKey in xrange(len(self.bonusPageCategoryList)):
  1034. catObject = self.bonusPageCategoryList[categoryKey][0] #Retorna a label
  1035. category_x, category_y = self.bonusPageCategoryBasePos[categoryKey] #Retorna a posi��o base das categorias
  1036. catObject.SetPosition(category_x, category_y - heightDistance)
  1037.  
  1038. self.CheckBonusPageRect() #Atualiza o ret�ngulo de renderiza��o da p�gina
  1039.  
  1040. def CheckBonusPageRect(self): #Atualiza o ret�ngulo de renderiza��o da p�gina
  1041. def CanShow(posY, height):
  1042. if posY < 1 or posY + height > self.GetBonusBoardEndPosition():
  1043. return False
  1044. return True
  1045.  
  1046. for bonusObject in self.bonusPageObjectList:
  1047. bonusObject_x, bonusObject_y = bonusObject.GetLocalPosition()
  1048. bonusObject_height = bonusObject.GetHeight()
  1049.  
  1050. bonusObject.Show() if CanShow(bonusObject_y, bonusObject_height) else bonusObject.Hide()
  1051.  
  1052. for (label, _) in self.bonusPageCategoryList:
  1053. blabel_x, label_y = label.GetLocalPosition()
  1054. label_height = label.GetHeight()
  1055.  
  1056. label.Show() if CanShow(label_y, label_height) else label.Hide()
  1057.  
  1058. def __LoadStaticInfoPagesCategory(self): #Cria as categorias e armazena-as numa lista
  1059. for (index, info) in self.infoSpecialPageItemsInfo.items():
  1060. name = list(info.keys())[0]
  1061. bonus = info[name]
  1062. separator = ui.SubTitleBar()
  1063. separator.SetParent(self.infoSpecialPageObjectManage["label"])
  1064. separator.MakeSubTitleBar(210, "red")
  1065. separator.SetSize(210, 16)
  1066. separator.SetPosition(3, 3+(18 * index) + (2 * index))
  1067. separator.SetTextAlignLeft(name)
  1068. separator.SetQuestLabel(quest_lable_expend_img_path_dict[index], len(bonus))
  1069. separator.SetMiniImageNorm("d:/ymir work/ui/game/windows/blue_incon_bonus.sub")
  1070. separator.SetMiniImageOpen("d:/ymir work/ui/game/windows/blue_incon_bonus.sub")
  1071. separator.SetEvent(ui.__mem_func__(self.__OnClickSpecialPageSeparator), index, bonus)
  1072. separator.Show()
  1073. self.infoSpecialPageCategoryList.append((separator, bonus))
  1074.  
  1075. def GetSpecialBoardEndPosition(self): #Retorna a posi��o do fim da board dos b�nus
  1076. #s� d� return � altura da board devido �s posi��es serem trabalhadas localmente
  1077. return self.infoSpecialPageObjectManage["max_height"]
  1078.  
  1079. def GetFirstSpecialPageObjectPosition(self): #Retorna a posi��o do primeiro objeto da p�gina
  1080. return (self.infoSpecialPageCategoryList[0][0].GetLocalPosition()[1])
  1081.  
  1082. def GetLastSpecialPageObjectPosition(self): #Retorna a posi��o do �ltimo elemento da p�gina
  1083. #se estiver aberta a �ltima p�gina, o �ltimo elemento � o �ltimo quadro de b�nus
  1084. if (self.infoSpecialPageSelectedCategory +1) == len(self.infoSpecialPageCategoryList):
  1085. return (self.infoSpecialPageObjectList[-1].GetLocalPosition()[1] + self.OBJECT_PARM_HEIGHT)
  1086.  
  1087. #se n�o estiver retorna a posi�ao da �ltima categoria
  1088. return (self.infoSpecialPageCategoryList[-1][0].GetLocalPosition()[1] + self.infoSpecialPageCategoryList[-1][0].GetHeight())
  1089.  
  1090. def GetOpenedSpecialCategorySize(self): #Retorna o tamanho da categoria aberta (A CONTAR DO PRIMEIRO AO �LTIMO OBJETO)
  1091. return (self.infoSpecialPageObjectList[-1].GetLocalPosition()[1] + self.OBJECT_PARM_HEIGHT) - self.infoSpecialPageObjectList[0].GetLocalPosition()[1]
  1092.  
  1093. def RefreshSpecialCategoryBasePosition(self): #Atualiza as posi��es bases das categorias
  1094. self.infoSpecialPageCategoryBasePos = [] #Elimina todas as antigas posi��es
  1095. for (label, _) in self.infoSpecialPageCategoryList: #Descobre e armazena a posi��o base das categorias
  1096. self.infoSpecialPageCategoryBasePos.append(label.GetLocalPosition())
  1097.  
  1098. def RefreshSpecialScrollDistance(self): #Atualiza a dist�ncia entre o �ltimo objeto e o fim da board
  1099. distance = self.GetLastSpecialPageObjectPosition() - self.GetSpecialBoardEndPosition()
  1100. self.infoSpecialPageObjectManage["scroll_distance"] = distance
  1101.  
  1102. def RefreshSpecialScrollBarState(self): #Atualiza o estado da scrollbar
  1103. self.infoSpecialPageObjectManage["scrollbar"].SetPos(0) #Inicializa a posi��o da scroll
  1104. canShowScroll = bool(self.GetLastSpecialPageObjectPosition() > self.GetSpecialBoardEndPosition())
  1105. self.infoSpecialPageObjectManage["scrollbar"].Show() if canShowScroll else self.infoSpecialPageObjectManage["scrollbar"].Hide()
  1106.  
  1107. def RefreshSpecialPageItemInfo(self): #Usado para dar reload aos b�nus (chamado pela interfaceModule)
  1108. for bonusObject in self.infoSpecialPageObjectList:
  1109. bonusObject.RefreshApplyValue()
  1110.  
  1111. def CloseAllSpecialPageCat(self): #Reseta a p�gina dos b�nus
  1112. for object in self.infoSpecialPageObjectList: object.Hide() #Esconde todos os objetos tempor�rios
  1113. for ((label, _), index) in zip(self.infoSpecialPageCategoryList, xrange(len(self.infoSpecialPageCategoryList))):
  1114. label.SetPosition(3, 3+(18 * index) + (2 * index)) #Retorna as categorias �s suas posi��es inicias
  1115. label.Show()
  1116. label.SetTop()
  1117.  
  1118. self.infoSpecialPageObjectList = [] #Elimina os objetos tempor�rios
  1119.  
  1120. def SetSpecialPageCategory(self, category): #Atribui a categoria atual
  1121. self.infoSpecialPageSelectedCategory = category
  1122.  
  1123. #Quando se clica num separador (catIndex - index da categoria na lista, bonus - array com os bonus)
  1124. def __OnClickSpecialPageSeparator(self, catIndex, bonus):
  1125. #Fecha a categoria e reseta a p�gina de b�nus caso o jogador tenha presionado numa categoria j� aberta
  1126. if self.infoSpecialPageSelectedCategory == catIndex:
  1127. self.SetSpecialPageCategory(-1)
  1128. self.CloseAllSpecialPageCat()
  1129. self.infoSpecialPageObjectManage["scrollbar"].Hide()
  1130. return
  1131.  
  1132. self.CloseAllSpecialPageCat() #Reseta a p�gina e atribui a nova categoria
  1133. self.SetSpecialPageCategory(catIndex)
  1134.  
  1135. catLabel = self.infoSpecialPageCategoryList[catIndex][0] #Retorna o objeto da categoria escolhida
  1136. catLabel_x, catLabel_y = catLabel.GetLocalPosition() #Retorna a posi��o da categoria escolhida
  1137.  
  1138. for (bonus_info, index) in zip(bonus, xrange(len(bonus))): #Cria os objetos (bonus)
  1139. tmpCreatedObject = CharacterPageCreateBonus()
  1140. tmpCreatedObject.SetParent(self.infoSpecialPageObjectManage["label"])
  1141. tmpCreatedObject.SetBasePosition(catLabel_x, catLabel_y + 25 + (self.OBJECT_PARM_HEIGHT* index) + (3 * index))
  1142. bonusDesc, bonusType = bonus_info
  1143. tmpCreatedObject.SetName(bonusDesc)
  1144. tmpCreatedObject.SetApplyValue(bonusType)
  1145. tmpCreatedObject.RefreshApplyValue()
  1146. tmpCreatedObject.Show()
  1147. tmpCreatedObject.SetTop()
  1148. self.infoSpecialPageObjectList.append(tmpCreatedObject)
  1149.  
  1150. categorySize = self.GetOpenedSpecialCategorySize() #Retorna o tamanho da categoria aberta
  1151. for ((label, _), labelKey) in zip(self.infoSpecialPageCategoryList, xrange(len(self.infoSpecialPageCategoryList))):
  1152. if labelKey <= catIndex: continue #S� interessa categorias que estejam abaixo da categoria aberta
  1153.  
  1154. label_x, label_y = label.GetLocalPosition()
  1155. #incrementa (self.OBJECT_PARM_HEIGHT/2) para o �ltimo objeto n�o ficar "colado" � pr�xima categoria
  1156. label.SetPosition(label_x, label_y + categorySize + (self.OBJECT_PARM_HEIGHT/2))
  1157.  
  1158. self.RefreshSpecialCategoryBasePosition() #D� refresh �s posi��es base das categorias
  1159. self.RefreshSpecialScrollDistance() #D� refresh � dist�ncia entre o �ltimo objeto e o fim da board
  1160. self.RefreshSpecialScrollBarState() #D� refresh ao estado da scrollbar
  1161. self.CheckSpecialPageRect() #Atualiza o ret�ngulo de renderiza��o da p�gina
  1162.  
  1163. def __OnScrollSpecialPage(self):
  1164. scrollDistance = self.infoSpecialPageObjectManage["scroll_distance"] #Retorna a dist�ncia entre o ultimo elemento e a board
  1165. scrollPos = self.infoSpecialPageObjectManage["scrollbar"].GetPos() #Retorna a posi��o da scrol (0.0-1.0)
  1166.  
  1167. #Dist�ncia que os objetos se mexem, calcula a porpo��o da dist�ncia relativamente � posi��o da scrollbar
  1168. heightDistance = scrollPos * scrollDistance
  1169.  
  1170. for bonusObject in self.infoSpecialPageObjectList:
  1171. bonusObject_x, bonusObject_y = bonusObject.GetBasePosition() #Retorna a posi��o base dos objetos
  1172. bonusObject.SetPosition(bonusObject_x, bonusObject_y - heightDistance)
  1173.  
  1174. for categoryKey in xrange(len(self.infoSpecialPageCategoryList)):
  1175. catObject = self.infoSpecialPageCategoryList[categoryKey][0] #Retorna a label
  1176. category_x, category_y = self.infoSpecialPageCategoryBasePos[categoryKey] #Retorna a posi��o base das categorias
  1177. catObject.SetPosition(category_x, category_y - heightDistance)
  1178.  
  1179. self.CheckSpecialPageRect() #Atualiza o ret�ngulo de renderiza��o da p�gina
  1180.  
  1181. def CheckSpecialPageRect(self): #Atualiza o ret�ngulo de renderiza��o da p�gina
  1182. def CanShow(posY, height):
  1183. if posY < 1 or posY + height > self.GetSpecialBoardEndPosition():
  1184. return False
  1185. return True
  1186.  
  1187. for bonusObject in self.infoSpecialPageObjectList:
  1188. bonusObject_x, bonusObject_y = bonusObject.GetLocalPosition()
  1189. bonusObject_height = bonusObject.GetHeight()
  1190.  
  1191. bonusObject.Show() if CanShow(bonusObject_y, bonusObject_height) else bonusObject.Hide()
  1192.  
  1193. for (label, _) in self.infoSpecialPageCategoryList:
  1194. blabel_x, label_y = label.GetLocalPosition()
  1195. label_height = label.GetHeight()
  1196.  
  1197. label.Show() if CanShow(label_y, label_height) else label.Hide()
  1198.  
  1199. ########################################
  1200. ########################################
  1201. ########################################
  1202. ########################################
  1203. ########################################
  1204. ########################################
  1205. ########################################
  1206. ########################################
  1207.  
  1208. def Close(self):
  1209. if self.toolTipSkill:
  1210. self.toolTipSkill.Hide()
  1211. if app.ENABLE_PARTY_RENEW_SELECTION:
  1212. if self.interface.wndPartyBonusWindow:
  1213. if self.interface.wndPartyBonusWindow.IsShow():
  1214. self.interface.wndPartyBonusWindow.Close()
  1215.  
  1216. if self.wndCharacterDetails.IsShow():
  1217. self.ToggleCharacterDetails()
  1218.  
  1219. if app.ENABLE_QUEST_RENEWAL:
  1220. if self.questSlideWndNewKey > 0:
  1221. if self.questSlideWnd[self.questSlideWndNewKey-1] is not None:
  1222. self.questSlideWnd[self.questSlideWndNewKey-1].CloseSelf()
  1223.  
  1224. if app.ENABLE_SKILL_COLOR_SYSTEM:
  1225. if self.skillColorWnd and self.skillColorWnd.IsShow():
  1226. self.skillColorWnd.Hide()
  1227.  
  1228. self.Hide()
  1229.  
  1230. def BindInterfaceClass(self, interface):
  1231. self.interface = interface
  1232.  
  1233. def SetSkillToolTip(self, toolTipSkill):
  1234. self.toolTipSkill = toolTipSkill
  1235.  
  1236. def __OnClickStatusPlusButton(self, statusKey):
  1237. cmd = self.statusPlusCommandDict[statusKey]
  1238.  
  1239. if app.IsPressed(app.DIK_LCONTROL):
  1240. cmd = cmd + "10"
  1241. else:
  1242. cmd = cmd + "1"
  1243.  
  1244. net.SendChatPacket(cmd)
  1245.  
  1246. def __OnClickStatusMinusButton(self, statusKey):
  1247. try:
  1248. statusMinusCommand=self.statusMinusCommandDict[statusKey]
  1249. net.SendChatPacket(statusMinusCommand)
  1250. except KeyError, msg:
  1251. dbg.TraceError("CharacterWindow.__OnClickStatusMinusButton KeyError: %s", msg)
  1252.  
  1253. def __OnClickTabButton(self, stateKey):
  1254. self.SetState(stateKey)
  1255.  
  1256. def GetStatusPage(self):
  1257. return self.character_actual_page
  1258.  
  1259. def SetStatusPage(self, statusPage):
  1260. if self.state != "STATUS":
  1261. return
  1262.  
  1263. self.character_actual_page = statusPage
  1264. for key, label in self.characterPageDict.items():
  1265. label.Show() if key == statusPage else label.Hide()
  1266.  
  1267. for key_b, button in self.tabCharacterPageDict.items():
  1268. button.SetUp() if key_b != statusPage else button.Down()
  1269.  
  1270. def SetState(self, stateKey):
  1271. self.state = stateKey
  1272.  
  1273. # if app.ENABLE_PARTY_RENEW_SELECTION:
  1274. # if stateKey != "SKILL":
  1275. # if self.interface:
  1276. # self.interface.TogglePartyBonusWindow(True)
  1277. self.SelectSkill(0, True)
  1278.  
  1279. if app.ENABLE_QUEST_RENEWAL:
  1280. if stateKey != "QUEST":
  1281. self.questPage.Hide()
  1282. if self.questSlideWndNewKey > 0:
  1283. if self.questSlideWnd[self.questSlideWndNewKey-1] is not None:
  1284. self.questSlideWnd[self.questSlideWndNewKey-1].CloseSelf()
  1285. else:
  1286. self.__LoadQuestCategory()
  1287.  
  1288. for (tabKey, tabButton) in self.tabButtonDict.items():
  1289. if stateKey!=tabKey:
  1290. tabButton.SetUp()
  1291.  
  1292. for tabValue in self.tabDict.itervalues():
  1293. tabValue.Hide()
  1294.  
  1295. for pageValue in self.pageDict.itervalues():
  1296. pageValue.Hide()
  1297.  
  1298. for titleBarValue in self.titleBarDict.itervalues():
  1299. titleBarValue.Hide()
  1300.  
  1301. if stateKey == "STATUS":
  1302. self.SetStatusPage(0)
  1303.  
  1304. self.titleBarDict[stateKey].Show()
  1305. self.tabDict[stateKey].Show()
  1306. self.pageDict[stateKey].Show()
  1307.  
  1308.  
  1309. def GetState(self):
  1310. return self.state
  1311.  
  1312. def __GetTotalAtkText(self):
  1313. minAtk=player.GetStatus(player.ATT_MIN)
  1314. maxAtk=player.GetStatus(player.ATT_MAX)
  1315. atkBonus=player.GetStatus(player.ATT_BONUS)
  1316. attackerBonus=player.GetStatus(player.ATTACKER_BONUS)
  1317. min = int(minAtk+atkBonus)
  1318. max = int(maxAtk+atkBonus)
  1319. attack = int(attackerBonus)
  1320. groupbonusattack = self.GetChild("ATT_Slot")
  1321.  
  1322. if attack != 0:
  1323. groupbonusattack.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowJobToolTipBonus)
  1324. groupbonusattack.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideJobToolTipBonus)
  1325. else:
  1326. groupbonusattack.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__HideJobToolTipBonus)
  1327.  
  1328. if minAtk == maxAtk:
  1329. if attack == 0:
  1330. return "%s" % (min)
  1331. else:
  1332. return "%s |cff00ff00|h+ (%s)" % (min, attack)
  1333. else:
  1334. if attack == 0:
  1335. return "%s - %s" % (min, max)
  1336. else:
  1337. return "%s - %s |cff00ff00|h+ (%s)" % (min, max, attack)
  1338.  
  1339. def __ShowJobToolTipBonus(self):
  1340. self.toolTipJobPartyBonus.ClearToolTip()
  1341. self.toolTipJobPartyBonus.AppendTextLine("Party bonus: Attack value", self.POSITIVE_COLOR)
  1342. self.toolTipJobPartyBonus.ShowToolTip()
  1343.  
  1344. def __HideJobToolTipBonus(self):
  1345. self.toolTipJobPartyBonus.HideToolTip()
  1346.  
  1347. def __GetTotalMagAtkText(self):
  1348. minMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MIN_MAGIC_WEP)
  1349. maxMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MAX_MAGIC_WEP)
  1350.  
  1351. if minMagAtk==maxMagAtk:
  1352. return "%s" % (localeInfo.AddPointToNumberString(minMagAtk))
  1353. else:
  1354. return "%s-%s" % (localeInfo.AddPointToNumberString(minMagAtk), localeInfo.AddPointToNumberString(maxMagAtk))
  1355.  
  1356. def __GetTotalDefText(self):
  1357. defValue=player.GetStatus(player.DEF_GRADE)
  1358. if constInfo.ADD_DEF_BONUS_ENABLE:
  1359. defValue+=player.GetStatus(player.DEF_BONUS)
  1360. return "%s" % (localeInfo.AddPointToNumberString(defValue))
  1361.  
  1362. def RefreshStatus(self):
  1363. if self.isLoaded==0:
  1364. return
  1365.  
  1366. try:
  1367. # self.GetChild("Level_Value").SetFontName(localeInfo.UI_BOLD_FONT)
  1368. self.GetChild("Level_Value").SetText(str(player.GetStatus(player.LEVEL)))
  1369. # self.GetChild("Exp_Value").SetFontName(localeInfo.UI_BOLD_FONT)
  1370. self.GetChild("Exp_Value").SetText(localeInfo.AddPointToNumberString(unsigned32(player.GetEXP())))
  1371. # self.GetChild("RestExp_Value").SetFontName(localeInfo.UI_BOLD_FONT)
  1372. self.GetChild("RestExp_Value").SetText(localeInfo.AddPointToNumberString(unsigned32(player.GetStatus(player.NEXT_EXP)) - unsigned32(player.GetStatus(player.EXP))))
  1373. self.GetChild("HP_Value").SetText(localeInfo.AddPointToNumberString(player.GetStatus(player.HP)) + '/' + localeInfo.AddPointToNumberString(player.GetStatus(player.MAX_HP)))
  1374. self.GetChild("SP_Value").SetText(localeInfo.AddPointToNumberString(player.GetStatus(player.SP)) + '/' + localeInfo.AddPointToNumberString(player.GetStatus(player.MAX_SP)))
  1375.  
  1376. self.GetChild("STR_Value").SetText(localeInfo.AddPointToNumberString(player.GetStatus(player.ST)))
  1377. self.GetChild("DEX_Value").SetText(localeInfo.AddPointToNumberString(player.GetStatus(player.DX)))
  1378. self.GetChild("HTH_Value").SetText(localeInfo.AddPointToNumberString(player.GetStatus(player.HT)))
  1379. self.GetChild("INT_Value").SetText(localeInfo.AddPointToNumberString(player.GetStatus(player.IQ)))
  1380.  
  1381. self.GetChild("ATT_Value").SetText(self.__GetTotalAtkText())
  1382. self.GetChild("DEF_Value").SetText(self.__GetTotalDefText())
  1383.  
  1384. self.GetChild("MATT_Value").SetText(self.__GetTotalMagAtkText())
  1385.  
  1386. self.GetChild("MDEF_Value").SetText(localeInfo.AddPointToNumberString(player.GetStatus(player.MAG_DEF)))
  1387. self.GetChild("ASPD_Value").SetText(localeInfo.AddPointToNumberString(player.GetStatus(player.ATT_SPEED)))
  1388. self.GetChild("MSPD_Value").SetText(localeInfo.AddPointToNumberString(player.GetStatus(player.MOVING_SPEED)))
  1389. self.GetChild("CSPD_Value").SetText(localeInfo.AddPointToNumberString(player.GetStatus(player.CASTING_SPEED)))
  1390. self.GetChild("ER_Value").SetText(localeInfo.AddPointToNumberString(player.GetStatus(player.EVADE_RATE)))
  1391.  
  1392. except:
  1393. pass
  1394.  
  1395. self.__RefreshStatusPlusButtonList()
  1396. self.__RefreshStatusMinusButtonList()
  1397. self.RefreshAlignment()
  1398. self.wndCharacterDetails.RefreshBonuses()
  1399.  
  1400. if self.refreshToolTip:
  1401. self.refreshToolTip()
  1402.  
  1403. self.RefreshBonusPageItemInfo()
  1404. self.RefreshSpecialPageItemInfo()
  1405.  
  1406. def __RefreshStatusPlusButtonList(self):
  1407. if self.isLoaded==0:
  1408. return
  1409.  
  1410. statusPlusPoint=player.GetStatus(player.STAT)
  1411.  
  1412. if statusPlusPoint>0:
  1413. self.statusPlusValue.SetText(str(statusPlusPoint))
  1414. self.statusPlusLabel.Show()
  1415. self.ShowStatusPlusButtonList()
  1416. else:
  1417. self.statusPlusValue.SetText(str(0))
  1418. self.statusPlusLabel.Hide()
  1419. self.HideStatusPlusButtonList()
  1420.  
  1421. def __RefreshStatusMinusButtonList(self):
  1422. if self.isLoaded==0:
  1423. return
  1424.  
  1425. statusMinusPoint=self.__GetStatMinusPoint()
  1426.  
  1427. if statusMinusPoint>0:
  1428. self.__ShowStatusMinusButtonList()
  1429. else:
  1430. self.__HideStatusMinusButtonList()
  1431.  
  1432. def RefreshAlignment(self):
  1433. point, grade = player.GetAlignmentData()
  1434.  
  1435. import colorInfo
  1436. COLOR_DICT = { 0 : colorInfo.TITLE_RGB_GOOD_4,
  1437. 1 : colorInfo.TITLE_RGB_GOOD_3,
  1438. 2 : colorInfo.TITLE_RGB_GOOD_2,
  1439. 3 : colorInfo.TITLE_RGB_GOOD_1,
  1440. 4 : colorInfo.TITLE_RGB_NORMAL,
  1441. 5 : colorInfo.TITLE_RGB_EVIL_1,
  1442. 6 : colorInfo.TITLE_RGB_EVIL_2,
  1443. 7 : colorInfo.TITLE_RGB_EVIL_3,
  1444. 8 : colorInfo.TITLE_RGB_EVIL_4, }
  1445. colorList = COLOR_DICT.get(grade, colorInfo.TITLE_RGB_NORMAL)
  1446. gradeColor = ui.GenerateColor(colorList[0], colorList[1], colorList[2])
  1447.  
  1448. self.toolTipAlignment.ClearToolTip()
  1449. self.toolTipAlignment.AutoAppendTextLine(localeInfo.TITLE_NAME_LIST[grade], gradeColor)
  1450. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_NAME + str(point))
  1451. NORMAL_COLOR = 0xFF37CDD2
  1452. if point >= 1000 and point <= 3999:
  1453. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_BONUS_1, NORMAL_COLOR)
  1454. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_BONUS_2, NORMAL_COLOR)
  1455. elif point >= 4000 and point <= 7999:
  1456. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_BONUS_3, NORMAL_COLOR)
  1457. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_BONUS_4, NORMAL_COLOR)
  1458. elif point >= 8000 and point <= 11999:
  1459. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_BONUS_5, NORMAL_COLOR)
  1460. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_BONUS_6, NORMAL_COLOR)
  1461. elif point >= 12000:
  1462. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_BONUS_7, NORMAL_COLOR)
  1463. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_BONUS_8, NORMAL_COLOR)
  1464. else:
  1465. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_BONUS_0, NORMAL_COLOR)
  1466. #endif
  1467.  
  1468. self.toolTipAlignment.AlignHorizonalCenter()
  1469.  
  1470.  
  1471. def __ShowStatusMinusButtonList(self):
  1472. for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  1473. statusMinusButton.Show()
  1474.  
  1475. def __HideStatusMinusButtonList(self):
  1476. for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  1477. statusMinusButton.Hide()
  1478.  
  1479. def ShowStatusPlusButtonList(self):
  1480. for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  1481. statusPlusButton.Show()
  1482.  
  1483. def HideStatusPlusButtonList(self):
  1484. for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  1485. statusPlusButton.Hide()
  1486.  
  1487. def SelectSkill(self, skillSlotIndex, isForce = False):
  1488. if app.ENABLE_PARTY_RENEW_SELECTION:
  1489. if skillSlotIndex == 0 and isForce:
  1490. x, y = self.GetGlobalPosition()
  1491.  
  1492. if self.interface:
  1493. if self.interface.wndPartyBonusWindow.IsShow():
  1494. return
  1495.  
  1496. self.interface.TogglePartyBonusWindow()
  1497. self.interface.wndPartyBonusWindow.AdjustPosition(x, y + 410)
  1498.  
  1499. return
  1500.  
  1501. mouseController = mouseModule.mouseController
  1502.  
  1503. if False == mouseController.isAttached():
  1504. srcSlotIndex = self.__RealSkillSlotToSourceSlot(skillSlotIndex)
  1505. selectedSkillIndex = player.GetSkillIndex(srcSlotIndex)
  1506.  
  1507. if skill.CanUseSkill(selectedSkillIndex):
  1508. if app.IsPressed(app.DIK_LCONTROL):
  1509. player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, srcSlotIndex)
  1510. return
  1511.  
  1512. mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, srcSlotIndex, selectedSkillIndex)
  1513. else:
  1514. mouseController.DeattachObject()
  1515.  
  1516. def SelectEmptySlot(self, SlotIndex):
  1517. mouseModule.mouseController.DeattachObject()
  1518.  
  1519. def OverInItem(self, slotNumber):
  1520. if mouseModule.mouseController.isAttached():
  1521. return
  1522.  
  1523. if not self.toolTipSkill:
  1524. return
  1525.  
  1526. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
  1527. skillIndex = player.GetSkillIndex(srcSlotIndex)
  1528. skillLevel = player.GetSkillLevel(srcSlotIndex)
  1529. skillGrade = player.GetSkillGrade(srcSlotIndex)
  1530. skillType = skill.GetSkillType(skillIndex)
  1531. if skill.SKILL_TYPE_ACTIVE == skillType:
  1532. overInSkillGrade = self.__GetSkillGradeFromSlot(slotNumber)
  1533. if overInSkillGrade == skill.SKILL_GRADE_COUNT-1 and skillGrade == skill.SKILL_GRADE_COUNT:
  1534. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
  1535. elif overInSkillGrade == skillGrade:
  1536. if app.ENABLE_SKILLS_LEVEL_OVER_P and skillGrade == 2:
  1537. self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade + 1)
  1538. else:
  1539. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, overInSkillGrade, skillLevel)
  1540. elif app.ENABLE_SKILLS_LEVEL_OVER_P and overInSkillGrade == skill.SKILL_GRADE_COUNT-2 and skillGrade >= skill.SKILL_GRADE_COUNT-1:
  1541. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
  1542. else:
  1543. if app.ENABLE_SKILLS_LEVEL_OVER_P and overInSkillGrade == 1 and skillGrade == 2:
  1544. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, overInSkillGrade + 1, skillLevel)
  1545. elif app.ENABLE_SKILLS_LEVEL_OVER_P and overInSkillGrade == 2 and skillGrade < 3:
  1546. self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade + 1)
  1547. else:
  1548. self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade)
  1549. else:
  1550. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
  1551.  
  1552. def OverOutItem(self):
  1553. if 0 != self.toolTipSkill:
  1554. self.toolTipSkill.HideToolTip()
  1555.  
  1556. ## Quest
  1557. def __SelectQuest(self, slotIndex):
  1558. if app.ENABLE_QUEST_RENEWAL:
  1559. questIndex = self.questIndexMap[slotIndex]
  1560.  
  1561. if not questIndex in self.questClicked:
  1562. self.questClicked.append(questIndex)
  1563. else:
  1564. questIndex = quest.GetQuestIndex(self.questShowingStartIndex + slotIndex)
  1565.  
  1566. import event
  1567. event.QuestButtonClick(-2147483648 + questIndex)
  1568.  
  1569. def RefreshQuest(self):
  1570. if app.ENABLE_QUEST_RENEWAL:
  1571. if self.isLoaded == 0 or self.state != "QUEST":
  1572. return
  1573.  
  1574. for cat in self.questOpenedCategories:
  1575. self.RefreshQuestCategory(cat)
  1576.  
  1577. self.RefreshQuestCategoriesCount()
  1578. else:
  1579. if self.isLoaded==0:
  1580. return
  1581.  
  1582. self.OnQuestScroll()
  1583.  
  1584. questCount = quest.GetQuestCount()
  1585. questRange = range(quest.QUEST_MAX_NUM)
  1586.  
  1587. if questCount > quest.QUEST_MAX_NUM:
  1588. self.questScrollBar.Show()
  1589. else:
  1590. self.questScrollBar.Hide()
  1591.  
  1592. for i in questRange[:questCount]:
  1593. (questName, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(self.questShowingStartIndex + i)
  1594.  
  1595. if questName[0] == "*":
  1596. questName = questName[1:]
  1597.  
  1598. self.questNameList[i].SetText(questName)
  1599. self.questNameList[i].Show()
  1600. self.questLastCountList[i].Show()
  1601. self.questLastTimeList[i].Show()
  1602.  
  1603. if len(questCounterName) > 0:
  1604. self.questLastCountList[i].SetText("%s : %d" % (questCounterName, questCounterValue))
  1605. else:
  1606. self.questLastCountList[i].SetText("")
  1607.  
  1608. ## Icon
  1609. self.questSlot.SetSlot(i, i, 1, 1, questIcon)
  1610.  
  1611. for i in questRange[questCount:]:
  1612. self.questNameList[i].Hide()
  1613. self.questLastTimeList[i].Hide()
  1614. self.questLastCountList[i].Hide()
  1615. self.questSlot.ClearSlot(i)
  1616. self.questSlot.HideSlotBaseImage(i)
  1617.  
  1618. self.__UpdateQuestClock()
  1619.  
  1620. if app.ENABLE_SCROLL_MOUSE:
  1621. def OnRunMouseWheel(self, nLen):
  1622. if self.state == "STATUS" and self.GetStatusPage() == 1:
  1623. if self.bonusPageObjectManage["scrollbar"].IsShow():
  1624. self.bonusPageObjectManage["scrollbar"].RunMouseWheel(nLen)
  1625. elif self.state == "STATUS" and self.GetStatusPage() == 2:
  1626. if self.infoSpecialPageObjectManage["scrollbar"].IsShow():
  1627. self.infoSpecialPageObjectManage["scrollbar"].RunMouseWheel(nLen)
  1628. elif self.state == "QUEST":
  1629. if self.questScrollBar.IsShow():
  1630. self.questScrollBar.RunMouseWheel(nLen)
  1631. return True
  1632.  
  1633. def __UpdateQuestClock(self):
  1634. if "QUEST" == self.state:
  1635. if app.ENABLE_QUEST_RENEWAL:
  1636. for clock in self.questClockList:
  1637. clockText = localeInfo.QUEST_UNLIMITED_TIME
  1638.  
  1639. if clock.GetProperty("idx"):
  1640. (lastName, lastTime) = quest.GetQuestLastTime(clock.GetProperty("idx"))
  1641.  
  1642. if len(lastName) > 0:
  1643. if lastTime <= 0:
  1644. clockText = localeInfo.QUEST_TIMEOVER
  1645. else:
  1646. questLastMinute = lastTime / 60
  1647. questLastSecond = lastTime % 60
  1648.  
  1649. clockText = lastName + " : "
  1650.  
  1651. if questLastMinute > 0:
  1652. clockText += str(questLastMinute) + localeInfo.QUEST_MIN
  1653. if questLastSecond > 0:
  1654. clockText += " "
  1655.  
  1656. if questLastSecond > 0:
  1657. clockText += str(questLastSecond) + localeInfo.QUEST_SEC
  1658.  
  1659. clock.SetText(clockText)
  1660. else:
  1661. # QUEST_LIMIT_COUNT_BUG_FIX
  1662. for i in xrange(min(quest.GetQuestCount(), quest.QUEST_MAX_NUM)):
  1663. # END_OF_QUEST_LIMIT_COUNT_BUG_FIX
  1664. (lastName, lastTime) = quest.GetQuestLastTime(i + self.questShowingStartIndex)
  1665.  
  1666. clockText = localeInfo.QUEST_UNLIMITED_TIME
  1667. if len(lastName) > 0:
  1668.  
  1669. if lastTime <= 0:
  1670. clockText = localeInfo.QUEST_TIMEOVER
  1671. else:
  1672. questLastMinute = lastTime / 60
  1673. questLastSecond = lastTime % 60
  1674.  
  1675. clockText = lastName + " : "
  1676.  
  1677. if questLastMinute > 0:
  1678. clockText += str(questLastMinute) + localeInfo.QUEST_MIN
  1679. if questLastSecond > 0:
  1680. clockText += " "
  1681.  
  1682. if questLastSecond > 0:
  1683. clockText += str(questLastSecond) + localeInfo.QUEST_SEC
  1684.  
  1685. self.questLastTimeList[i].SetText(clockText)
  1686.  
  1687. def __GetStatMinusPoint(self):
  1688. POINT_STAT_RESET_COUNT = 112
  1689. return player.GetStatus(POINT_STAT_RESET_COUNT)
  1690.  
  1691. def __OverInStatMinusButton(self, stat):
  1692. try:
  1693. self.__ShowStatToolTip(self.STAT_MINUS_DESCRIPTION[stat] % self.__GetStatMinusPoint())
  1694. except KeyError:
  1695. pass
  1696.  
  1697. self.refreshToolTip = lambda arg=stat: self.__OverInStatMinusButton(arg)
  1698.  
  1699. def __OverOutStatMinusButton(self):
  1700. self.__HideStatToolTip()
  1701. self.refreshToolTip = 0
  1702.  
  1703. def __OverInStatButton(self, stat):
  1704. try:
  1705. self.__ShowStatToolTip(self.STAT_DESCRIPTION[stat], uiemojitranslate.EMOJI_CHARACTER_STATS_ADD % ("|Eemoji/key_ctrl|e", "|Eemoji/key_lclick|e"), True)
  1706. except KeyError:
  1707. pass
  1708.  
  1709. def __OverOutStatButton(self):
  1710. self.__HideStatToolTip()
  1711.  
  1712. def __OverInCharacterButton(self, stat):
  1713. m_text_tooltip = [localeInfo.STATUS_PAGE_TOOLTIP, localeInfo.BONUS_PAGE_TOOLTIP, localeInfo.OTHER_PAGE_TOOLTIP]
  1714. self.toolTip.ClearToolTip()
  1715. self.toolTip.AutoAppendNewTextLine(m_text_tooltip[stat])
  1716. self.toolTip.Show()
  1717.  
  1718. def __OverOutCharacterButton(self):
  1719. self.toolTip.Hide()
  1720.  
  1721. def __ShowStatToolTip(self, statDesc, statDesc2 = False, arg2 = False):
  1722. self.toolTip.ClearToolTip()
  1723. self.toolTip.AppendTextLine(statDesc)
  1724.  
  1725. if arg2 == True:
  1726. self.toolTip.AppendTextLine(statDesc2)
  1727.  
  1728. self.toolTip.Show()
  1729.  
  1730. def __HideStatToolTip(self):
  1731. self.toolTip.Hide()
  1732.  
  1733. def __OverInStatusImage(self, event, stat, statType):
  1734. try:
  1735. manage_desc = []
  1736. if statType == 0:
  1737. manage_desc = localeInfo.STAT_IMAGE_DESCRIPTION
  1738. elif statType == 1:
  1739. manage_desc = localeInfo.STAT_IMAGE_MAIN_DESCRIPTION
  1740. elif statType == 2:
  1741. manage_desc = localeInfo.STAT_IMAGE_OTHER_DESCRIPTION
  1742. elif statType == 3:
  1743. manage_desc = localeInfo.STATE_IMAGE_OTHER_INFO_DESC
  1744. elif statType == 4:
  1745. manage_desc = localeInfo.SKILL_PAGE_IMAGE_INFO_DESC
  1746. elif statType == 5:
  1747. manage_desc = localeInfo.EMOTICON_PAGE_IMAGE_INFO_DESC
  1748. elif statType == 6:
  1749. manage_desc = localeInfo.INFO_CHARACTER_PAGE_DESC
  1750.  
  1751. self.__ShowStateImageTooltip(manage_desc[stat])
  1752. except KeyError:
  1753. pass
  1754.  
  1755. def __OverOutStatusImage(self):
  1756. self.__HideStatImageToolTip()
  1757.  
  1758. def __ShowStateImageTooltip(self, statDesc):
  1759. self.toolTip.ClearToolTip()
  1760. self.toolTip.AutoAppendNewTextLine(statDesc)
  1761. self.toolTip.Show()
  1762.  
  1763. def __HideStatImageToolTip(self):
  1764. self.toolTip.Hide()
  1765.  
  1766. def OnPressEscapeKey(self):
  1767. if app.ENABLE_QUEST_RENEWAL:
  1768. if self.questSlideWndNewKey > 0:
  1769. if self.questSlideWnd[self.questSlideWndNewKey-1] is not None:
  1770. self.questSlideWnd[self.questSlideWndNewKey-1].OnPressEscapeKey()
  1771.  
  1772. self.Close()
  1773. return True
  1774.  
  1775. def OnUpdate(self):
  1776. self.__UpdateQuestClock()
  1777.  
  1778. if app.ENABLE_SKILL_COLOR_SYSTEM:
  1779. if self.skillColorWnd:
  1780. self.__UpdateSkillColorPosition()
  1781.  
  1782. def RefreshNormalSkillCoolTime(self, skillPage, slotCount):
  1783. startSlotIndex = skillPage.GetStartIndex()
  1784.  
  1785. getSkillType=skill.GetSkillType
  1786. getSkillIndex=player.GetSkillIndex
  1787. getSkillGrade=player.GetSkillGrade
  1788. getSkillLevel=player.GetSkillLevel
  1789.  
  1790. for i in xrange(slotCount+1):
  1791. slotIndex = i + startSlotIndex
  1792. skillIndex = getSkillIndex(slotIndex)
  1793.  
  1794. if 0 == skillIndex:
  1795. continue
  1796.  
  1797. skillGrade = getSkillGrade(slotIndex)
  1798. skillLevel = getSkillLevel(slotIndex)
  1799. skillType = getSkillType(skillIndex)
  1800.  
  1801. slot_index_old = None
  1802. for j in xrange(skill.SKILL_GRADE_COUNT):
  1803. realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
  1804. if(skillGrade != j):
  1805. slot_index_old = realSlotIndex
  1806. else:
  1807. # if slot_index_old:
  1808. # skillPage.UpdateSlotCoolTime(skillType, realSlotIndex, slot_index_old)
  1809. break
  1810. self.__RestoreSlotCoolTime(skillPage)
  1811.  
  1812. ## Skill Process
  1813. def __RefreshSkillPage(self, name, slotCount):
  1814. global SHOW_LIMIT_SUPPORT_SKILL_LIST
  1815. skillPage = self.skillPageDict[name]
  1816. startSlotIndex = skillPage.GetStartIndex()
  1817.  
  1818. getSkillType = skill.GetSkillType
  1819. getSkillIndex = player.GetSkillIndex
  1820. getSkillGrade = player.GetSkillGrade
  1821. getSkillLevel = player.GetSkillLevel
  1822. getSkillMaxLevel = skill.GetSkillMaxLevel
  1823. getSkillLevelUpPoint = skill.GetSkillLevelUpPoint
  1824. if app.ENABLE_SKILLS_LEVEL_OVER_P:
  1825. refresh = 0
  1826.  
  1827. for i in xrange(slotCount + 1):
  1828. slotIndex = i + startSlotIndex
  1829. skillIndex = getSkillIndex(slotIndex)
  1830. if not app.ENABLE_SKILLS_LEVEL_OVER_P:
  1831. for j in xrange(skill.SKILL_GRADE_COUNT):
  1832. skillPage.ClearSlot(self.__GetRealSkillSlot(j, i))
  1833. else:
  1834. if not refresh and skillIndex >= 137 and skillIndex <= 140:
  1835. for w in xrange(slotCount + 1):
  1836. for q in xrange(skill.SKILL_GRADE_COUNT):
  1837. skillPage.ClearSlot(self.__GetRealSkillSlot(q, w))
  1838.  
  1839. refresh = 1
  1840.  
  1841. if app.ENABLE_SKILLS_LEVEL_OVER_P:
  1842. if slotIndex == 7 or slotIndex == 8:
  1843. for j in xrange(skill.SKILL_GRADE_COUNT):
  1844. skillPage.ClearSlot(self.__GetRealSkillSlot(j, slotIndex))
  1845.  
  1846. if not skillIndex:
  1847. continue
  1848.  
  1849. skillType = getSkillType(skillIndex)
  1850. skillGrade = getSkillGrade(slotIndex)
  1851. skillLevel = getSkillLevel(slotIndex)
  1852.  
  1853. if skillIndex == player.SKILL_INDEX_RIDING:
  1854. if app.ENABLE_SKILLS_LEVEL_OVER_P:
  1855. skGrade = 0
  1856. if skillLevel >= 11 and skillLevel < 20:
  1857. skGrade = 1
  1858. elif skillGrade == 1:
  1859. skGrade = 2
  1860.  
  1861. if skillGrade == 1:
  1862. skillLevel += 19
  1863. elif skillGrade == 2:
  1864. skillLevel += 29
  1865. elif skillGrade == 3:
  1866. skillLevel = 40
  1867.  
  1868. skGr = max(skillLevel - 1, 0)
  1869. if app.ENABLE_SKILLS_LEVEL_OVER_P:
  1870. skGr = skGrade
  1871.  
  1872. skillPage.SetSkillSlotNew(slotIndex, skillIndex, skGr, skillLevel)
  1873. skillPage.SetSlotCount(slotIndex, skillLevel)
  1874. elif skill.SKILL_TYPE_ACTIVE==skillType:
  1875. for j in xrange(self.SKILL_GRADE_SLOT_COUNT):
  1876. realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
  1877.  
  1878. if (skillGrade >= self.SKILL_GRADE_SLOT_COUNT) and j == (self.SKILL_GRADE_SLOT_COUNT-1):
  1879. skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, skillGrade, skillLevel)
  1880. skillPage.SetCoverButton(realSlotIndex)
  1881. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  1882. else:
  1883. skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
  1884. skillPage.SetCoverButton(realSlotIndex)
  1885. if (not self.__CanUseSkillNow()) or (skillGrade != j):
  1886. skillPage.SetSlotCount(realSlotIndex, 0)
  1887. skillPage.DisableCoverButton(realSlotIndex)
  1888. else:
  1889. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  1890. else:
  1891. if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
  1892. realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
  1893. skillPage.SetSkillSlot(realSlotIndex, skillIndex, skillLevel)
  1894. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  1895. if skill.CanUseSkill(skillIndex):
  1896. skillPage.SetCoverButton(realSlotIndex)
  1897.  
  1898. skillPage.RefreshSlot()
  1899.  
  1900. self.__RestoreSlotCoolTime(skillPage)
  1901.  
  1902. if app.ENABLE_SKILL_COLOR_SYSTEM:
  1903. if "ACTIVE" == name:
  1904. self.__CreateSkillColorButton(skillPage)
  1905.  
  1906. def __RestoreSlotCoolTime(self, skillPage):
  1907. skillPage.RestoreSlotCoolTime(skill.SKILL_TYPE_ACTIVE)
  1908. skillPage.RestoreSlotCoolTime(skill.SKILL_TYPE_HORSE)
  1909.  
  1910. def RefreshSkill(self):
  1911. if self.isLoaded==0:
  1912. return
  1913.  
  1914. if self.__IsChangedHorseRidingSkillLevel():
  1915. self.RefreshCharacter()
  1916. return
  1917.  
  1918. self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
  1919. self.__RefreshSkillPage("HORSE", self.HORSE_SLOT_COUNT)
  1920. self.__RefreshSkillPage("SUPPORT", self.SUPPORT_PAGE_SLOT_COUNT)
  1921.  
  1922. self.RefreshSkillPlusButtonList()
  1923.  
  1924. def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
  1925. if 0 == skillIndex:
  1926. return False
  1927.  
  1928. if not skill.CanLevelUpSkill(skillIndex, skillLevel):
  1929. return False
  1930.  
  1931. return True
  1932.  
  1933. def __RefreshSkillPlusButton(self, name):
  1934. if "SUPPORT" == name:
  1935. return
  1936.  
  1937. slotWindow = self.skillPageDict[name]
  1938. slotWindow.HideAllSlotButton()
  1939.  
  1940. labelWindow = self.labelPageStatDict[name]
  1941. slotStatType = self.skillPageStatDict[name]
  1942. if 0 == slotStatType:
  1943. return
  1944.  
  1945. statPoint = player.GetStatus(slotStatType)
  1946. startSlotIndex = slotWindow.GetStartIndex()
  1947. if "HORSE" == name:
  1948. startSlotIndex += self.ACTIVE_PAGE_SLOT_COUNT
  1949.  
  1950. if statPoint > 0:
  1951. labelWindow.Show()
  1952. for i in xrange(self.PAGE_SLOT_COUNT):
  1953. slotIndex = i + startSlotIndex
  1954. skillIndex = player.GetSkillIndex(slotIndex)
  1955. skillGrade = player.GetSkillGrade(slotIndex)
  1956. skillLevel = player.GetSkillLevel(slotIndex)
  1957.  
  1958. if skillIndex == 0:
  1959. continue
  1960. if skillGrade != 0:
  1961. continue
  1962.  
  1963. if name == "HORSE":
  1964. if player.GetStatus(player.LEVEL) >= skill.GetSkillLevelLimit(skillIndex):
  1965. if skillLevel < 20:
  1966. slotWindow.ShowSlotButton(self.__GetETCSkillRealSlotIndex(slotIndex))
  1967. else:
  1968. if "SUPPORT" == name:
  1969. if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
  1970. if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
  1971. slotWindow.ShowSlotButton(slotIndex)
  1972. else:
  1973. if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
  1974. slotWindow.ShowSlotButton(slotIndex)
  1975. else:
  1976. labelWindow.Hide()
  1977.  
  1978. if app.ENABLE_SKILL_COLOR_SYSTEM:
  1979. def __CreateSkillColorButton(self, parent):
  1980. self.skillColorButton = []
  1981.  
  1982. xPos, yPos = 0, 0
  1983. for idx in xrange(self.PAGE_SLOT_COUNT):
  1984. skillSlot = idx
  1985. if skillSlot < 6:
  1986. if (skillSlot % 2) == 0:
  1987. xPos = 75
  1988. yPos = 4 + (skillSlot / 2 * 36)
  1989. else:
  1990. xPos = 187
  1991. yPos = 4 + (skillSlot / 2 * 36)
  1992.  
  1993. skillIndex = player.GetSkillIndex(skillSlot + 1)
  1994. skillMaxGrade = 3
  1995.  
  1996. if len(self.skillColorButton) == skillSlot:
  1997. self.skillColorButton.append([])
  1998. self.skillColorButton[skillSlot] = ui.Button()
  1999. self.skillColorButton[skillSlot].SetParent(parent)
  2000. self.skillColorButton[skillSlot].SetUpVisual("d:/ymir work/ui/skillcolor/skill_color_button_default.tga")
  2001. self.skillColorButton[skillSlot].SetOverVisual("d:/ymir work/ui/skillcolor/skill_color_button_over.tga")
  2002. self.skillColorButton[skillSlot].SetDownVisual("d:/ymir work/ui/skillcolor/skill_color_button_down.tga")
  2003. self.skillColorButton[skillSlot].SetPosition(xPos, yPos)
  2004. self.skillColorButton[skillSlot].SetEvent(lambda arg = skillSlot, arg2 = skillIndex: self.__OnPressSkillColorButton(arg, arg2))
  2005. if player.GetSkillGrade(skillSlot + 1) >= skillMaxGrade:
  2006. self.skillColorButton[skillSlot].Show()
  2007. else:
  2008. self.skillColorButton[skillSlot].Hide()
  2009. else:
  2010. self.skillColorButton[skillSlot].SetPosition(xPos, yPos)
  2011.  
  2012. def __UpdateSkillColorPosition(self):
  2013. x, y = self.GetGlobalPosition()
  2014. self.skillColorWnd.SetPosition(x + 250, y)
  2015.  
  2016. def __OnPressSkillColorButton(self, skillSlot, skillIndex):
  2017. self.skillColorWnd = uiSkillColor.SkillColorWindow(skillSlot, skillIndex)
  2018.  
  2019. if self.skillColorWnd and not self.skillColorWnd.IsShow():
  2020. self.skillColorWnd.Show()
  2021.  
  2022. def RefreshSkillPlusButtonList(self):
  2023. if self.isLoaded==0:
  2024. return
  2025.  
  2026. self.RefreshSkillPlusPointLabel()
  2027.  
  2028. if not self.__CanUseSkillNow():
  2029. return
  2030.  
  2031. try:
  2032. self.__RefreshSkillPlusButton("HORSE")
  2033. self.__RefreshSkillPlusButton("ACTIVE")
  2034. self.__RefreshSkillPlusButton("SUPPORT")
  2035.  
  2036. except:
  2037. import exception
  2038. exception.Abort("CharacterWindow.RefreshSkillPlusButtonList.BindObject")
  2039.  
  2040. def RefreshSkillPlusPointLabel(self):
  2041. if self.isLoaded==0:
  2042. return
  2043.  
  2044. activeStatPoint = player.GetStatus(player.SKILL_ACTIVE)
  2045. self.activeSkillPointValue.SetText(str(activeStatPoint))
  2046.  
  2047. horseStatPoint = player.GetStatus(player.SKILL_HORSE)
  2048. self.horseSkillPointValue.SetText(str(horseStatPoint))
  2049.  
  2050. supportStatPoint = max(0, player.GetStatus(player.SKILL_SUPPORT))
  2051. self.supportSkillPointValue.SetText(str(supportStatPoint))
  2052.  
  2053. def OnPressedSlotButton(self, slotNumber):
  2054. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
  2055.  
  2056. skillIndex = player.GetSkillIndex(srcSlotIndex)
  2057. curLevel = player.GetSkillLevel(srcSlotIndex)
  2058. maxLevel = skill.GetSkillMaxLevel(skillIndex)
  2059.  
  2060. net.SendChatPacket("/skillup " + str(skillIndex))
  2061.  
  2062. def ClickSkillSlot(self, slotIndex):
  2063.  
  2064. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotIndex)
  2065. skillIndex = player.GetSkillIndex(srcSlotIndex)
  2066.  
  2067. if 0 == skillIndex:
  2068. return
  2069.  
  2070. skillType = skill.GetSkillType(skillIndex)
  2071.  
  2072. if not self.__CanUseSkillNow():
  2073. if skill.SKILL_TYPE_ACTIVE == skillType:
  2074. return
  2075.  
  2076. for slotWindow in self.skillPageDict.values():
  2077. if slotWindow.HasSlot(slotIndex):
  2078. if skill.CanUseSkill(skillIndex):
  2079. player.ClickSkillSlot(srcSlotIndex)
  2080. return
  2081.  
  2082. mouseModule.mouseController.DeattachObject()
  2083.  
  2084. def OnUseSkill(self, slotIndex, coolTime):
  2085.  
  2086. skillIndex = player.GetSkillIndex(slotIndex)
  2087.  
  2088. if 0 == skillIndex:
  2089. return
  2090.  
  2091. skillType = skill.GetSkillType(skillIndex)
  2092. if skill.SKILL_TYPE_ACTIVE == skillType:
  2093. skillGrade = player.GetSkillGrade(slotIndex)
  2094. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  2095. else:
  2096. slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
  2097.  
  2098. for slotWindow in self.skillPageDict.values():
  2099. if slotWindow.HasSlot(slotIndex):
  2100. slotWindow.StoreSlotCoolTime(skillType, slotIndex, coolTime)
  2101. self.__RestoreSlotCoolTime(slotWindow)
  2102. return
  2103.  
  2104. def OnActivateSkill(self, slotIndex):
  2105. skillGrade = player.GetSkillGrade(slotIndex)
  2106. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  2107.  
  2108. for slotWindow in self.skillPageDict.values():
  2109. if slotWindow.HasSlot(slotIndex):
  2110. slotWindow.ActivateSlot(slotIndex)
  2111. return
  2112.  
  2113. self.RefreshSkill()
  2114.  
  2115. def OnDeactivateSkill(self, slotIndex):
  2116. skillGrade = player.GetSkillGrade(slotIndex)
  2117. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  2118.  
  2119. for slotWindow in self.skillPageDict.values():
  2120. if slotWindow.HasSlot(slotIndex):
  2121. slotWindow.DeactivateSlot(slotIndex)
  2122. return
  2123.  
  2124. self.RefreshSkill()
  2125.  
  2126. def __ShowJobToolTip(self):
  2127. self.toolTipJob.ShowToolTip()
  2128.  
  2129. def __HideJobToolTip(self):
  2130. self.toolTipJob.HideToolTip()
  2131.  
  2132. def __SetJobText(self, mainJob, subJob):
  2133. if player.GetStatus(player.LEVEL) < 5:
  2134. subJob=0
  2135.  
  2136. def __ShowAlignmentToolTip(self):
  2137. self.toolTipAlignment.ShowToolTip()
  2138.  
  2139. def __HideAlignmentToolTip(self):
  2140. self.toolTipAlignment.HideToolTip()
  2141.  
  2142. def RefreshCharacter(self):
  2143. if self.isLoaded==0:
  2144. return
  2145.  
  2146. try:
  2147. characterName = player.GetName()
  2148. guildName = player.GetGuildName()
  2149. self.characterNameValue.SetText(characterName)
  2150. self.guildNameValue.SetText(guildName)
  2151. if not guildName:
  2152. self.characterNameSlot.SetPosition(109, 34)
  2153.  
  2154. self.guildNameSlot.Hide()
  2155. else:
  2156. self.characterNameSlot.SetPosition(153, 34)
  2157. self.guildNameSlot.Show()
  2158. except:
  2159. import exception
  2160. exception.Abort("CharacterWindow.RefreshCharacter.BindObject")
  2161.  
  2162. race = net.GetMainActorRace()
  2163. group = net.GetMainActorSkillGroup()
  2164. empire = net.GetMainActorEmpire()
  2165.  
  2166. job = chr.RaceToJob(race)
  2167. self.__SetJobText(job, group)
  2168.  
  2169. try:
  2170. faceImageName = FACE_IMAGE_DICT[race]
  2171.  
  2172. try:
  2173. self.faceImage.LoadImage(faceImageName)
  2174. except:
  2175. self.faceImage.Hide()
  2176.  
  2177. except KeyError:
  2178. self.faceImage.Hide()
  2179.  
  2180. self.__SetSkillGroupName(race, group)
  2181.  
  2182. if 0 == group:
  2183. self.__SelectSkillGroup(0)
  2184.  
  2185. else:
  2186. self.__SetSkillSlotData(race, group, empire)
  2187.  
  2188. def __SetSkillGroupName(self, race, group):
  2189. job = chr.RaceToJob(race)
  2190.  
  2191. if not self.SKILL_GROUP_NAME_DICT.has_key(job):
  2192. return
  2193.  
  2194. nameList = self.SKILL_GROUP_NAME_DICT[job]
  2195.  
  2196. if 0 == group:
  2197. self.skillGroupButton1.SetText(nameList[1])
  2198. self.skillGroupButton2.SetText(nameList[2])
  2199. self.skillGroupButton1.Show()
  2200. self.skillGroupButton2.Show()
  2201. self.activeSkillGroupName.Hide()
  2202.  
  2203. else:
  2204. self.activeSkillGroupName.SetText(nameList.get(group, "Noname"))
  2205. self.activeSkillGroupName.Show()
  2206. self.skillGroupButton1.Hide()
  2207. self.skillGroupButton2.Hide()
  2208.  
  2209. def __SetSkillSlotData(self, race, group, empire=0):
  2210. playerSettingModule.RegisterSkill(race, group, empire)
  2211. self.__SetSkillSlotEvent()
  2212. self.RefreshSkill()
  2213.  
  2214. def __SelectSkillGroup(self, index):
  2215. for btn in self.skillGroupButton:
  2216. btn.SetUp()
  2217. self.skillGroupButton[index].Down()
  2218.  
  2219. self.curSelectedSkillGroup = index
  2220. self.__SetSkillSlotData(net.GetMainActorRace(), index+1, net.GetMainActorEmpire())
  2221.  
  2222. def __CanUseSkillNow(self):
  2223. if 0 == net.GetMainActorSkillGroup():
  2224. return False
  2225. return True
  2226.  
  2227. def __CanUseHorseSkill(self):
  2228.  
  2229. slotIndex = player.GetSkillSlotIndex(player.SKILL_INDEX_RIDING)
  2230.  
  2231. if not slotIndex:
  2232. return False
  2233.  
  2234. grade = player.GetSkillGrade(slotIndex)
  2235. level = player.GetSkillLevel(slotIndex)
  2236. if level < 0:
  2237. level *= -1
  2238. if grade >= 1 and level >= 1:
  2239. return True
  2240. return False
  2241.  
  2242. def __IsChangedHorseRidingSkillLevel(self):
  2243. ret = False
  2244.  
  2245. if -1 == self.canUseHorseSkill:
  2246. self.canUseHorseSkill = self.__CanUseHorseSkill()
  2247.  
  2248. if self.canUseHorseSkill != self.__CanUseHorseSkill():
  2249. ret = True
  2250.  
  2251. self.canUseHorseSkill = self.__CanUseHorseSkill()
  2252. return ret
  2253.  
  2254. if app.ENABLE_SKILLS_LEVEL_OVER_P:
  2255. def __GetRealSkillSlot(self, skillGrade, skillSlot):
  2256. return skillSlot + min(self.SKILL_GRADE_SLOT_COUNT-1, skillGrade)*skill.SKILL_GRADE_STEP_COUNT
  2257. else:
  2258. def __GetRealSkillSlot(self, skillGrade, skillSlot):
  2259. # _min = skill.SKILL_GRADE_COUNT - 1
  2260. # if app.ENABLE_SKILLS_LEVEL_OVER_P:
  2261. # _min -= 1
  2262. # if skillGrade == 2:
  2263. # skillGrade -= 1
  2264.  
  2265. # __calc = skillSlot + min(_min, skillGrade) * skill.SKILL_GRADE_STEP_COUNT
  2266. # return __calc
  2267. return skillSlot + min(skill.SKILL_GRADE_COUNT-1, skillGrade)*skill.SKILL_GRADE_STEP_COUNT
  2268.  
  2269. def __GetETCSkillRealSlotIndex(self, skillSlot):
  2270. if skillSlot > 100:
  2271. return skillSlot
  2272. return skillSlot % self.ACTIVE_PAGE_SLOT_COUNT
  2273.  
  2274. def __RealSkillSlotToSourceSlot(self, realSkillSlot):
  2275. if realSkillSlot > 100:
  2276. return realSkillSlot
  2277. return realSkillSlot % skill.SKILL_GRADE_STEP_COUNT
  2278.  
  2279. def __GetSkillGradeFromSlot(self, skillSlot):
  2280. return int(skillSlot / skill.SKILL_GRADE_STEP_COUNT)
  2281.  
  2282. def SelectSkillGroup(self, index):
  2283. self.__SelectSkillGroup(index)
  2284.  
  2285. def OnQuestScroll(self):
  2286. questCount = quest.GetQuestCount()
  2287. scrollLineCount = max(0, questCount - quest.QUEST_MAX_NUM)
  2288. startIndex = int(scrollLineCount * self.questScrollBar.GetPos())
  2289.  
  2290. if startIndex != self.questShowingStartIndex:
  2291. self.questShowingStartIndex = startIndex
  2292. self.RefreshQuest()
  2293.  
  2294. if app.ENABLE_QUEST_RENEWAL:
  2295. def __OnScrollQuest(self):
  2296. if self.state != "QUEST":
  2297. return
  2298.  
  2299. curPos = self.questScrollBar.GetPos()
  2300. if math.fabs(curPos - self.questLastScrollPosition) >= 0.001:
  2301. self.RerenderQuestPage()
  2302. self.questLastScrollPosition = curPos
  2303.  
  2304. def ResetQuestScroll(self):
  2305. self.questScrollBar.Hide()
  2306.  
  2307. if self.questScrollBar.GetPos() != 0:
  2308. self.questScrollBar.SetPos(0)
  2309.  
  2310. def RerenderQuestPage(self):
  2311. overflowingY = self.displayY - self.MAX_QUEST_PAGE_HEIGHT
  2312. if overflowingY < 0:
  2313. overflowingY = 0
  2314.  
  2315. self.baseCutY = math.ceil(overflowingY * self.questScrollBar.GetPos())
  2316. self.displayY = 0
  2317. self.RearrangeQuestCategories(xrange(quest.QUEST_CATEGORY_MAX_NUM))
  2318. self.RefreshQuestCategory()
  2319.  
  2320. if overflowingY > 0:
  2321. if (len(self.questOpenedCategories)) == 0:
  2322. self.ResetQuestScroll()
  2323. else:
  2324. self.questScrollBar.Show()
  2325. else:
  2326. self.ResetQuestScroll()
  2327.  
  2328. def __LoadQuestCategory(self):
  2329. self.questPage.Show()
  2330.  
  2331. if self.isLoaded == 0:
  2332. return
  2333.  
  2334. for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
  2335. category = self.questCategoryList[i]
  2336.  
  2337. categoryName = category.GetProperty("name")
  2338. if not categoryName:
  2339. category.SetProperty("name", category.GetText())
  2340. categoryName = category.GetText()
  2341.  
  2342. questCount = self.GetQuestCountInCategory(i)
  2343. self.questCategoryList[i].SetTextAlignLeft(categoryName + " (" + str(questCount) + ")")
  2344. self.questCategoryList[i].SetTextColor(self.GetQuestCategoryColor(i))
  2345. self.questCategoryList[i].SetQuestLabel(quest_lable_expend_img_path_dict[i], self.GetQuestCountInCategory(i))
  2346. self.questCategoryList[i].Show()
  2347.  
  2348. self.RefreshQuestCategory()
  2349. if self.isQuestCategoryLoad == False:
  2350. self.questScrollBar.Hide()
  2351. else:
  2352. self.RerenderQuestPage()
  2353.  
  2354. self.isQuestCategoryLoad = True
  2355.  
  2356. def GetQuestCategoryColor(self, category):
  2357. return self.questColorList["default_title"]
  2358.  
  2359. def GetQuestProperties(self, questName):
  2360. findString = {
  2361. "*" : "blue",
  2362. "&" : "green",
  2363. "~" : "golden"
  2364. }
  2365.  
  2366. if questName[0] in findString:
  2367. return (questName[1:], findString[questName[0]])
  2368.  
  2369. return (questName, None)
  2370.  
  2371. def IsQuestCategoryOpen(self, category):
  2372. return (category in self.questOpenedCategories)
  2373.  
  2374. def ToggleCategory(self, category):
  2375. if self.IsQuestCategoryOpen(category):
  2376. self.CloseQuestCategory(category)
  2377. else:
  2378. self.OpenQuestCategory(category)
  2379.  
  2380. def RearrangeQuestCategories(self, categoryRange):
  2381. i = 0
  2382. for i in categoryRange:
  2383. if (self.displayY - self.baseCutY) >= 0 and (self.displayY - self.baseCutY) < self.MAX_QUEST_PAGE_HEIGHT - 20:
  2384. self.questCategoryList[i].SetPosition(13, (self.displayY - self.baseCutY) + 10)
  2385. self.questCategoryList[i].Show()
  2386. else:
  2387. self.questCategoryList[i].Hide()
  2388.  
  2389. self.displayY += 20
  2390. self.questCategoryRenderPos[i] = self.displayY
  2391.  
  2392. def CloseQuestCategory(self, category):
  2393. self.questCategoryList[category].CloseCategory(self.GetQuestCountInCategory(category))
  2394.  
  2395. if category in self.questOpenedCategories:
  2396. self.questOpenedCategories.remove(category)
  2397.  
  2398. for currentSlot in self.questSlotList:
  2399. if currentSlot.GetProperty("category") == category:
  2400. currentSlot.Hide()
  2401. self.displayY -= currentSlot.GetHeight()
  2402.  
  2403. self.RerenderQuestPage()
  2404.  
  2405. def OpenQuestCategory(self, category):
  2406. if self.GetQuestCountInCategory(category) == 0:
  2407. return
  2408.  
  2409. while len(self.questOpenedCategories) >= self.questMaxOpenedCategories:
  2410. openedCategories = self.questOpenedCategories.pop()
  2411. self.CloseQuestCategory(openedCategories)
  2412.  
  2413. self.questCategoryList[category].OpenCategory(self.GetQuestCountInCategory(category))
  2414. self.questOpenedCategories.append(category)
  2415. self.RefreshQuestCategory(category)
  2416. self.RerenderQuestPage()
  2417.  
  2418. def RefreshQuestCategory(self, category = -1):
  2419. if self.isLoaded == 0 or self.state != "QUEST":
  2420. return
  2421.  
  2422. categories = []
  2423. if category == -1:
  2424. categories = self.questOpenedCategories
  2425. elif not category in self.questOpenedCategories:
  2426. self.OpenQuestCategory(category)
  2427. return
  2428. else:
  2429. categories.append(category)
  2430.  
  2431. for currentCategory in categories:
  2432. self.displayY = self.questCategoryRenderPos[currentCategory]
  2433.  
  2434. self.LoadCategory(currentCategory)
  2435. self.RearrangeQuestCategories(xrange(currentCategory + 1, quest.QUEST_CATEGORY_MAX_NUM))
  2436.  
  2437. def RefreshQuestCategoriesCount(self):
  2438. for category in xrange(quest.QUEST_CATEGORY_MAX_NUM):
  2439. categoryName = self.questCategoryList[category].GetProperty("name")
  2440. questCount = self.GetQuestCountInCategory(category)
  2441. self.questCategoryList[category].SetTextAlignLeft(categoryName + " (" + str(questCount) + ")")
  2442. #self.questCategoryList[category].SetQuestLabel(quest_lable_expend_img_path_dict[category], questCount)
  2443. # if questCount <= 0:
  2444. # self.CloseQuestCategory(category)
  2445.  
  2446. def RefreshQuest(self):
  2447. if self.isLoaded == 0 or self.state != "QUEST":
  2448. return
  2449.  
  2450. for category in self.questOpenedCategories:
  2451. self.RefreshQuestCategory(category)
  2452.  
  2453. self.RefreshQuestCategoriesCount()
  2454.  
  2455. def CreateQuestSlot(self, name):
  2456. for questSlot in self.questSlotList:
  2457. if questSlot.GetWindowName() == name:
  2458. return questSlot
  2459.  
  2460. pyScrLoader = ui.PythonScriptLoader()
  2461. slot = ui.ListBar()
  2462. pyScrLoader.LoadElementListBar(slot, quest_slot_listbar, self.questPage)
  2463.  
  2464. slot.SetParent(self.quest_page_board_window)
  2465. slot.SetWindowName(name)
  2466. slot.Hide()
  2467. self.questSlotList.append(slot)
  2468. return slot
  2469.  
  2470. def SetQuest(self, slot, questID, questName, questCounterName, questCounterValue):
  2471. (name, color) = self.GetQuestProperties(questName)
  2472. slot.SetTextAlignLeft(name, 20)
  2473. if color:
  2474. slot.SetTextColor(self.questColorList[color])
  2475. slot.SetEvent(ui.__mem_func__(self.__SelectQuest), questID)
  2476. slot.SetWindowHorizontalAlignLeft()
  2477. slot.Show()
  2478.  
  2479. def LoadCategory(self, category):
  2480. self.questIndexMap = {}
  2481. self.questCounterList = []
  2482. self.questClockList = []
  2483. self.questSeparatorList = []
  2484.  
  2485. for questSlot in self.questSlotList:
  2486. questSlot.Hide()
  2487.  
  2488. questCount = 0
  2489. for questIdx in self.GetQuestsInCategory(category):
  2490. questCount += 1
  2491. (questID, questIndex, questName, questCategory, _, questCounterName, questCounterValue) = questIdx
  2492. (lastName, lastTime) = quest.GetQuestLastTime(questID)
  2493.  
  2494. slot = self.CreateQuestSlot("QuestSlotList_" + str(questCategory) + "_" + str(questID))
  2495.  
  2496. slot.SetPosition(0, (self.displayY - self.baseCutY))
  2497. slot.SetParent(self.quest_page_board_window)
  2498. baseDisplayY = self.displayY
  2499.  
  2500. ## -- Quest Counter
  2501. hasCounter = False
  2502. if questCounterName != "":
  2503. self.displayY += 15
  2504.  
  2505. counter = ui.TextLine()
  2506. counter.SetParent(slot)
  2507. counter.SetPosition(20, 20 - 2.5)
  2508. counter.SetText(questCounterName + ": " + str(questCounterValue))
  2509. counter.Show()
  2510.  
  2511. self.questCounterList.append(counter)
  2512. hasCounter = True
  2513. ## -- Quest Counter
  2514.  
  2515. ## -- Quest Clock
  2516. self.displayY += 15
  2517.  
  2518. clockText = localeInfo.QUEST_UNLIMITED_TIME
  2519. if len(lastName) > 0:
  2520. if lastTime <= 0:
  2521. clockText = localeInfo.QUEST_TIMEOVER
  2522. else:
  2523. questLastMinute = lastTime / 60
  2524. questLastSecond = lastTime % 60
  2525.  
  2526. clockText = lastName + " : "
  2527.  
  2528. if questLastMinute > 0:
  2529. clockText += str(questLastMinute) + localeInfo.QUEST_MIN
  2530. if questLastSecond > 0:
  2531. clockText += " "
  2532.  
  2533. if questLastSecond > 0:
  2534. clockText += str(questLastSecond) + localeInfo.QUEST_SEC
  2535.  
  2536. clock = ui.TextLine()
  2537. clock.SetParent(slot)
  2538. clock.SetPosition(20, 20 + (int(hasCounter) * 14) - 2.5)
  2539. clock.SetText(clockText)
  2540. clock.SetProperty("idx", questID)
  2541. self.questClockList.append(clock)
  2542. clock.Show()
  2543. ## -- Quest Clock
  2544.  
  2545. ## -- Quest Separator
  2546. self.displayY += 5
  2547. if questCount < self.GetQuestCountInCategory(category):
  2548. seperator = ui.ImageBox()
  2549. seperator.SetParent(slot)
  2550. seperator.SetPosition(4, 20 + (int(hasCounter) * 14 - 2.5) + 15)
  2551. seperator.LoadImage("d:/ymir work/ui/quest_re/quest_list_line_01.tga")
  2552. seperator.Show()
  2553. self.questSeparatorList.append(seperator)
  2554. ## -- Quest Separator
  2555.  
  2556. slot.SetProperty("category", questCategory)
  2557.  
  2558. if questIndex in self.questClicked:
  2559. slot.OnClickEvent()
  2560.  
  2561. if (baseDisplayY - self.baseCutY) + 2 >= 0 and (baseDisplayY - self.baseCutY) + 2 < self.MAX_QUEST_PAGE_HEIGHT - 30:
  2562. self.questIndexMap[questID] = questIndex
  2563. self.SetQuest(slot, questID, questName, questCounterName, questCounterValue)
  2564.  
  2565. self.displayY += 15
  2566.  
  2567. newList = []
  2568. for questSlot in self.questSlotList:
  2569. if questSlot.IsShow():
  2570. newList.append(questSlot)
  2571.  
  2572. self.questSlotList = newList
  2573.  
  2574. def __OnClickQuestCategoryButton(self, category):
  2575. self.ToggleCategory(category)
  2576.  
  2577. def GetQuestsInCategory(self, category, retCount = False):
  2578. questList = []
  2579. count = 0
  2580. for i in xrange(quest.GetQuestCount()):
  2581. (questIndex, questName, questCategory, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(i)
  2582. if questCategory == category:
  2583. count += 1
  2584. questList.append((i, questIndex, questName, questCategory, questIcon, questCounterName, questCounterValue))
  2585.  
  2586. if retCount:
  2587. return count
  2588.  
  2589. return questList
  2590.  
  2591. def GetQuestCountInCategory(self, category):
  2592. return self.GetQuestsInCategory(category, True)
  2593.  
  2594. def OnMoveWindow(self, x, y):
  2595. if app.ENABLE_PARTY_RENEW_SELECTION:
  2596. if self.interface:
  2597. if self.interface.wndPartyBonusWindow:
  2598. x, y = self.GetGlobalPosition()
  2599. self.interface.wndPartyBonusWindow.AdjustPosition(x, y + 410)
  2600.  
  2601. if self.wndCharacterDetails:
  2602. x, y = self.GetGlobalPosition()
  2603. self.wndCharacterDetails.AdjustPosition(x+250,y)
  2604.  
Advertisement
Add Comment
Please, Sign In to add comment