Advertisement
Guest User

Untitled

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