MrP0wers

uicharacter

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