MrP0wers

uicharacter.py

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