Guest User

Untitled

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