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. SHOW_ONLY_ACTIVE_SKILL = False
  19. SHOW_LIMIT_SUPPORT_SKILL_LIST = []
  20. HIDE_SUPPORT_SKILL_POINT = False
  21. if app.ENABLE_CONQUEROR_LEVEL:
  22. HIDE_SUPPORT_SKILL_POINT = TRUE
  23. SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140, 132, 133, 134, 246]
  24. else:
  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. [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140, 0, 0, 0, 0]
  28. if not localeInfo.IsCHEONMA():
  29. HIDE_SUPPORT_SKILL_POINT = TRUE
  30. SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140,141,142]
  31. elif localeInfo.IsJAPAN() or (localeInfo.IsEUROPE() and app.GetLocalePath() != "locale/ca") and (localeInfo.IsEUROPE() and app.GetLocalePath() != "locale/br"):
  32. HIDE_SUPPORT_SKILL_POINT = TRUE
  33. SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140]
  34. else:
  35. HIDE_SUPPORT_SKILL_POINT = TRUE
  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. if app.ENABLE_WOLFMAN_CHARACTER:
  47. FACE_IMAGE_DICT.update({playerSettingModule.RACE_WOLFMAN_M : "icon/face/wolfman_m.tga",})
  48. def unsigned32(n):
  49. return n & 0xFFFFFFFFL
  50. class CharacterWindow(ui.ScriptWindow):
  51. if app.ENABLE_CONQUEROR_LEVEL:
  52. ACTIVE_PAGE_SLOT_COUNT = 9
  53. SUPPORT_PAGE_SLOT_COUNT = 18
  54. else:
  55. ACTIVE_PAGE_SLOT_COUNT = 8
  56. SUPPORT_PAGE_SLOT_COUNT = 12
  57. PAGE_SLOT_COUNT = 12
  58. PAGE_HORSE = 2
  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. STAT_DESCRIPTION = {
  68. "HTH" : localeInfo.STAT_TOOLTIP_CON,
  69. "INT" : localeInfo.STAT_TOOLTIP_INT,
  70. "STR" : localeInfo.STAT_TOOLTIP_STR,
  71. "DEX" : localeInfo.STAT_TOOLTIP_DEX,
  72. }
  73. STAT_MINUS_DESCRIPTION = localeInfo.STAT_MINUS_DESCRIPTION
  74. def __init__(self):
  75. self.chDetailsWnd = None
  76. self.isOpenedDetailsWnd = False
  77. ui.ScriptWindow.__init__(self)
  78. self.state = "STATUS"
  79. if app.ENABLE_CONQUEROR_LEVEL:
  80. self.substate = "BASE"
  81. self.statusConquerorPlusCommandDict={
  82. "SMH_STR" : "/conqueror_stat smh_str",
  83. "SMH_HP" : "/conqueror_stat smh_hp",
  84. "SMH_MOVE" : "/conqueror_stat smh_move",
  85. "SMH_INMUNE" : "/conqueror_stat smh_inmune",
  86. }
  87. self.isLoaded = 0
  88. self.toolTipSkill = 0
  89. self.__Initialize()
  90. self.__LoadWindow()
  91. self.statusPlusCommandDict={
  92. "HTH" : "/stat ht",
  93. "INT" : "/stat iq",
  94. "STR" : "/stat st",
  95. "DEX" : "/stat dx",
  96. }
  97. self.statusMinusCommandDict={
  98. "HTH-" : "/stat- ht",
  99. "INT-" : "/stat- iq",
  100. "STR-" : "/stat- st",
  101. "DEX-" : "/stat- dx",
  102. }
  103. def __del__(self):
  104. ui.ScriptWindow.__del__(self)
  105. def __Initialize(self):
  106. self.refreshToolTip = 0
  107. self.curSelectedSkillGroup = 0
  108. self.canUseHorseSkill = -1
  109. self.toolTip = None
  110. self.toolTipJob = None
  111. self.toolTipAlignment = None
  112. self.toolTipSkill = None
  113. self.faceImage = None
  114. self.statusPlusLabel = None
  115. self.statusPlusValue = None
  116. self.activeSlot = None
  117. self.tabDict = None
  118. self.tabButtonDict = None
  119. self.pageDict = None
  120. self.titleBarDict = None
  121. self.statusPlusButtonDict = None
  122. self.statusMinusButtonDict = None
  123. if app.ENABLE_CONQUEROR_LEVEL:
  124. self.statusConquerorPlusButtonDict = None
  125. self.skillPageDict = None
  126. self.questShowingStartIndex = 0
  127. self.questScrollBar = None
  128. self.questSlot = None
  129. self.questNameList = None
  130. self.questLastTimeList = None
  131. self.questLastCountList = None
  132. self.skillGroupButton = ()
  133. self.activeSlot = None
  134. self.activeSkillPointValue = None
  135. self.supportSkillPointValue = None
  136. self.skillGroupButton1 = None
  137. self.skillGroupButton2 = None
  138. self.activeSkillGroupName = None
  139. self.guildNameSlot = None
  140. self.guildNameValue = None
  141. self.characterNameSlot = None
  142. self.characterNameValue = None
  143. self.emotionToolTip = None
  144. self.soloEmotionSlot = None
  145. self.dualEmotionSlot = None
  146. if app.ENABLE_CONQUEROR_LEVEL:
  147. self.toolTipConquerorInfoButton = None
  148. self.tabSungmaButtonDict = None
  149. self.SungmaButton = None
  150. def OnTop(self):
  151. if self.chDetailsWnd:
  152. self.chDetailsWnd.SetTop()
  153. def Hide(self):
  154. if self.chDetailsWnd:
  155. self.isOpenedDetailsWnd = self.chDetailsWnd.IsShow()
  156. self.chDetailsWnd.Close()
  157. wndMgr.Hide(self.hWnd)
  158. def Show(self):
  159. self.__LoadWindow()
  160. self.__InitCharacterDetailsUIButton()
  161. if self.chDetailsWnd and self.isOpenedDetailsWnd:
  162. self.chDetailsWnd.Show()
  163. ui.ScriptWindow.Show(self)
  164. def __LoadScript(self, fileName):
  165. pyScrLoader = ui.PythonScriptLoader()
  166. pyScrLoader.LoadScriptFile(self, fileName)
  167. def __BindObject(self):
  168. self.toolTip = uiToolTip.ToolTip()
  169. self.toolTipJob = uiToolTip.ToolTip()
  170. self.toolTipAlignment = uiToolTip.ToolTip(130)
  171. if app.ENABLE_CONQUEROR_LEVEL:
  172. self.toolTipConquerorInfoButton = uiToolTip.ToolTip()
  173. self.faceImage = self.GetChild("Face_Image")
  174. faceSlot=self.GetChild("Face_Slot")
  175. if 949 == app.GetDefaultCodePage():
  176. faceSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowJobToolTip)
  177. faceSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideJobToolTip)
  178. self.statusPlusLabel = self.GetChild("Status_Plus_Label")
  179. self.statusPlusValue = self.GetChild("Status_Plus_Value")
  180. self.characterNameSlot = self.GetChild("Character_Name_Slot")
  181. self.characterNameValue = self.GetChild("Character_Name")
  182. self.guildNameSlot = self.GetChild("Guild_Name_Slot")
  183. self.guildNameValue = self.GetChild("Guild_Name")
  184. self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowAlignmentToolTip)
  185. self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideAlignmentToolTip)
  186. self.activeSlot = self.GetChild("Skill_Active_Slot")
  187. self.activeSkillPointValue = self.GetChild("Active_Skill_Point_Value")
  188. self.supportSkillPointValue = self.GetChild("Support_Skill_Point_Value")
  189. self.skillGroupButton1 = self.GetChild("Skill_Group_Button_1")
  190. self.skillGroupButton2 = self.GetChild("Skill_Group_Button_2")
  191. self.activeSkillGroupName = self.GetChild("Active_Skill_Group_Name")
  192. self.tabDict = {
  193. "STATUS" : self.GetChild("Tab_01"),
  194. "SKILL" : self.GetChild("Tab_02"),
  195. "EMOTICON" : self.GetChild("Tab_03"),
  196. "QUEST" : self.GetChild("Tab_04"),
  197. }
  198. self.tabButtonDict = {
  199. "STATUS" : self.GetChild("Tab_Button_01"),
  200. "SKILL" : self.GetChild("Tab_Button_02"),
  201. "EMOTICON" : self.GetChild("Tab_Button_03"),
  202. "QUEST" : self.GetChild("Tab_Button_04")
  203. }
  204. self.pageDict = {
  205. "STATUS" : self.GetChild("Character_Page"),
  206. "SKILL" : self.GetChild("Skill_Page"),
  207. "EMOTICON" : self.GetChild("Emoticon_Page"),
  208. "QUEST" : self.GetChild("Quest_Page")
  209. }
  210. self.titleBarDict = {
  211. "STATUS" : self.GetChild("Character_TitleBar"),
  212. "SKILL" : self.GetChild("Skill_TitleBar"),
  213. "EMOTICON" : self.GetChild("Emoticon_TitleBar"),
  214. "QUEST" : self.GetChild("Quest_TitleBar")
  215. }
  216. self.statusPlusButtonDict = {
  217. "HTH" : self.GetChild("HTH_Plus"),
  218. "INT" : self.GetChild("INT_Plus"),
  219. "STR" : self.GetChild("STR_Plus"),
  220. "DEX" : self.GetChild("DEX_Plus"),
  221. }
  222. self.statusMinusButtonDict = {
  223. "HTH-" : self.GetChild("HTH_Minus"),
  224. "INT-" : self.GetChild("INT_Minus"),
  225. "STR-" : self.GetChild("STR_Minus"),
  226. "DEX-" : self.GetChild("DEX_Minus"),
  227. }
  228. self.skillPageDict = {
  229. "ACTIVE" : self.GetChild("Skill_Active_Slot"),
  230. "SUPPORT" : self.GetChild("Skill_ETC_Slot"),
  231. "HORSE" : self.GetChild("Skill_Active_Slot"),
  232. }
  233. self.skillPageStatDict = {
  234. "SUPPORT" : player.SKILL_SUPPORT,
  235. "ACTIVE" : player.SKILL_ACTIVE,
  236. "HORSE" : player.SKILL_HORSE,
  237. }
  238. self.skillGroupButton = (
  239. self.GetChild("Skill_Group_Button_1"),
  240. self.GetChild("Skill_Group_Button_2"),
  241. )
  242. if app.ENABLE_CONQUEROR_LEVEL:
  243. self.tabSungmaButtonDict = {
  244. "BASE" : self.GetChild("change_base_button"),
  245. "SUNGMA" : self.GetChild("change_conqueror_button")
  246. }
  247. self.SungmaPageDict = {
  248. "BASE" : self.GetChild("base_info"),
  249. "SUNGMA" : self.GetChild("sungma_info"),
  250. }
  251. self.statusConquerorPlusButtonDict = {
  252. "SMH_STR" : self.GetChild("sungma_str_plus"),
  253. "SMH_HP" : self.GetChild("sungma_hp_plus"),
  254. "SMH_MOVE" : self.GetChild("sungma_move_plus"),
  255. "SMH_INMUNE" : self.GetChild("sungma_immune_plus"),
  256. }
  257. self.HTH_IMG = self.GetChild("HTH_IMG")
  258. self.INT_IMG = self.GetChild("INT_IMG")
  259. self.STR_IMG = self.GetChild("STR_IMG")
  260. self.DEX_IMG = self.GetChild("DEX_IMG")
  261. self.HTH_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowHTHToolTip)
  262. self.HTH_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideHTHToolTip)
  263. self.INT_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowINTToolTip)
  264. self.INT_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideINTToolTip)
  265. self.STR_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowSTRToolTip)
  266. self.STR_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideSTRToolTip)
  267. self.DEX_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowDEXToolTip)
  268. self.DEX_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideDEXToolTip)
  269. self.MSPD_IMG = self.GetChild("MSPD_IMG")
  270. self.ASPD_IMG = self.GetChild("ASPD_IMG")
  271. self.CSPD_IMG = self.GetChild("CSPD_IMG")
  272. self.MATT_IMG = self.GetChild("MATT_IMG")
  273. self.MDEF_IMG = self.GetChild("MDEF_IMG")
  274. #self.DEX_IMG = self.GetChild("ER_IMG")
  275. self.MSPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowMSPDToolTip)
  276. self.MSPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideMSPDToolTip)
  277. self.ASPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowASPDToolTip)
  278. self.ASPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideASPDToolTip)
  279. self.CSPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowCSPDToolTip)
  280. self.CSPD_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideCSPDToolTip)
  281. self.MATT_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowMATTToolTip)
  282. self.MATT_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideMATTToolTip)
  283. self.MDEF_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowMDEFToolTip)
  284. self.MDEF_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideMDEFToolTip)
  285. global SHOW_ONLY_ACTIVE_SKILL
  286. global HIDE_SUPPORT_SKILL_POINT
  287. if SHOW_ONLY_ACTIVE_SKILL or HIDE_SUPPORT_SKILL_POINT:
  288. self.GetChild("Support_Skill_Point_Label").Hide()
  289. self.soloEmotionSlot = self.GetChild("SoloEmotionSlot")
  290. self.dualEmotionSlot = self.GetChild("DualEmotionSlot")
  291. self.__SetEmotionSlot()
  292. self.questShowingStartIndex = 0
  293. self.questScrollBar = self.GetChild("Quest_ScrollBar")
  294. self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll))
  295. self.questSlot = self.GetChild("Quest_Slot")
  296. for i in xrange(quest.QUEST_MAX_NUM):
  297. self.questSlot.HideSlotBaseImage(i)
  298. self.questSlot.SetCoverButton(i,\
  299. "d:/ymir work/ui/game/quest/slot_button_01.sub",\
  300. "d:/ymir work/ui/game/quest/slot_button_02.sub",\
  301. "d:/ymir work/ui/game/quest/slot_button_03.sub",\
  302. "d:/ymir work/ui/game/quest/slot_button_03.sub", True)
  303. self.questNameList = []
  304. self.questLastTimeList = []
  305. self.questLastCountList = []
  306. for i in xrange(quest.QUEST_MAX_NUM):
  307. self.questNameList.append(self.GetChild("Quest_Name_0" + str(i)))
  308. self.questLastTimeList.append(self.GetChild("Quest_LastTime_0" + str(i)))
  309. self.questLastCountList.append(self.GetChild("Quest_LastCount_0" + str(i)))
  310. self.MainBoard = self.GetChild("board")
  311. 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")
  312. self.ExpandBtn.SetEvent(ui.__mem_func__(self.__ClickExpandButton))
  313. 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")
  314. self.MinimizeBtn.SetEvent(ui.__mem_func__(self.__ClickMinimizeButton))
  315. def __InitCharacterDetailsUIButton(self):
  316. self.ExpandBtn.Show()
  317. self.MinimizeBtn.Hide()
  318. def __ClickExpandButton(self):
  319. #print "__ClickExpandButton"
  320. if not self.chDetailsWnd:
  321. self.chDetailsWnd = uiCharacterDetails.CharacterDetailsUI(self)
  322. self.chDetailsWnd.Show()
  323. else:
  324. self.chDetailsWnd.Show()
  325. self.ExpandBtn.Hide()
  326. self.MinimizeBtn.Show()
  327. def __ClickMinimizeButton(self):
  328. #print "__ClickMinimizeButton"
  329. self.chDetailsWnd.Hide()
  330. self.MinimizeBtn.Hide()
  331. self.ExpandBtn.Show()
  332. def OnMoveWindow(self, x, y):
  333. #print "OnMoveWindow x %s y %s" % (x, y)
  334. if self.chDetailsWnd:
  335. self.chDetailsWnd.AdjustPosition(x, y)
  336. def __SetSkillSlotEvent(self):
  337. for skillPageValue in self.skillPageDict.itervalues():
  338. skillPageValue.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  339. skillPageValue.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectSkill))
  340. skillPageValue.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
  341. skillPageValue.SetUnselectItemSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
  342. skillPageValue.SetUseSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
  343. skillPageValue.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  344. skillPageValue.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  345. skillPageValue.SetPressedSlotButtonEvent(ui.__mem_func__(self.OnPressedSlotButton))
  346. skillPageValue.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. def __SetEmotionSlot(self):
  350. self.emotionToolTip = uiToolTip.ToolTip()
  351. for slot in (self.soloEmotionSlot, self.dualEmotionSlot):
  352. slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  353. slot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectEmotion))
  354. slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
  355. slot.SetUseSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
  356. slot.SetOverInItemEvent(ui.__mem_func__(self.__OverInEmotion))
  357. slot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutEmotion))
  358. slot.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
  359. "d:/ymir work/ui/game/windows/btn_plus_over.sub",\
  360. "d:/ymir work/ui/game/windows/btn_plus_down.sub")
  361. for slotIdx, datadict in emotion.EMOTION_DICT.items():
  362. emotionIdx = slotIdx
  363. slot = self.soloEmotionSlot
  364. if slotIdx > 50:
  365. slot = self.dualEmotionSlot
  366. slot.SetEmotionSlot(slotIdx, emotionIdx)
  367. slot.SetCoverButton(slotIdx)
  368. def __SelectEmotion(self, slotIndex):
  369. if not slotIndex in emotion.EMOTION_DICT:
  370. return
  371. if app.IsPressed(app.DIK_LCONTROL):
  372. player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_EMOTION, slotIndex)
  373. return
  374. mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_EMOTION, slotIndex, slotIndex)
  375. def __ClickEmotionSlot(self, slotIndex):
  376. print "click emotion"
  377. if not slotIndex in emotion.EMOTION_DICT:
  378. return
  379. print "check acting"
  380. if player.IsActingEmotion():
  381. return
  382. command = emotion.EMOTION_DICT[slotIndex]["command"]
  383. print "command", command
  384. if slotIndex > 50:
  385. vid = player.GetTargetVID()
  386. if 0 == vid or vid == player.GetMainCharacterIndex() or chr.IsNPC(vid) or chr.IsEnemy(vid):
  387. import chat
  388. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EMOTION_CHOOSE_ONE)
  389. return
  390. command += " " + chr.GetNameByVID(vid)
  391. print "send_command", command
  392. net.SendChatPacket(command)
  393. def ActEmotion(self, emotionIndex):
  394. self.__ClickEmotionSlot(emotionIndex)
  395. def __OverInEmotion(self, slotIndex):
  396. if self.emotionToolTip:
  397. if not slotIndex in emotion.EMOTION_DICT:
  398. return
  399. self.emotionToolTip.ClearToolTip()
  400. self.emotionToolTip.SetTitle(emotion.EMOTION_DICT[slotIndex]["name"])
  401. self.emotionToolTip.AlignHorizonalCenter()
  402. self.emotionToolTip.ShowToolTip()
  403. def __OverOutEmotion(self):
  404. if self.emotionToolTip:
  405. self.emotionToolTip.HideToolTip()
  406. def __BindEvent(self):
  407. for i in xrange(len(self.skillGroupButton)):
  408. self.skillGroupButton[i].SetEvent(lambda arg=i: self.__SelectSkillGroup(arg))
  409. self.RefreshQuest()
  410. self.__HideJobToolTip()
  411. for (tabKey, tabButton) in self.tabButtonDict.items():
  412. tabButton.SetEvent(ui.__mem_func__(self.__OnClickTabButton), tabKey)
  413. if app.ENABLE_CONQUEROR_LEVEL:
  414. for (tabKey, tabButton) in self.tabSungmaButtonDict.items():
  415. tabButton.SetEvent(ui.__mem_func__(self.__OnClickTabSungmaButton), tabKey)
  416. for (statusPlusKey, statusPlusButton) in self.statusConquerorPlusButtonDict.items():
  417. statusPlusButton.SAFE_SetEvent(self.__OnClickConquerorStatusPlusButton, statusPlusKey)
  418. statusPlusButton.ShowToolTip = lambda arg=statusPlusKey: self.__OverInStatButton(arg)
  419. statusPlusButton.HideToolTip = lambda arg=statusPlusKey: self.__OverOutStatButton()
  420. for (statusPlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  421. statusPlusButton.SAFE_SetEvent(self.__OnClickStatusPlusButton, statusPlusKey)
  422. statusPlusButton.ShowToolTip = lambda arg=statusPlusKey: self.__OverInStatButton(arg)
  423. statusPlusButton.HideToolTip = lambda arg=statusPlusKey: self.__OverOutStatButton()
  424. for (statusMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  425. statusMinusButton.SAFE_SetEvent(self.__OnClickStatusMinusButton, statusMinusKey)
  426. statusMinusButton.ShowToolTip = lambda arg=statusMinusKey: self.__OverInStatMinusButton(arg)
  427. statusMinusButton.HideToolTip = lambda arg=statusMinusKey: self.__OverOutStatMinusButton()
  428. #for titleBarValue in self.titleBarDict.itervalues():
  429. # titleBarValue.SetCloseEvent(ui.__mem_func__(self.Hide))
  430. for titleBarValue in self.titleBarDict.itervalues():
  431. titleBarValue.SetCloseEvent(ui.__mem_func__(self.Close))
  432. self.questSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectQuest))
  433. def __LoadWindow(self):
  434. if self.isLoaded == 1:
  435. return
  436. self.isLoaded = 1
  437. try:
  438. if localeInfo.IsARABIC() or localeInfo.IsVIETNAM() or localeInfo.IsJAPAN():
  439. self.__LoadScript(uiScriptLocale.LOCALE_UISCRIPT_PATH + "CharacterWindow.py")
  440. else:
  441. self.__LoadScript("UIScript/CharacterWindow.py")
  442. self.__BindObject()
  443. self.__BindEvent()
  444. except:
  445. import exception
  446. exception.Abort("CharacterWindow.__LoadWindow")
  447. #self.tabButtonDict["EMOTICON"].Disable()
  448. self.SetState("STATUS")
  449. if app.ENABLE_CONQUEROR_LEVEL:
  450. self.SetSubState("BASE")
  451. def Destroy(self):
  452. self.Hide()
  453. self.ClearDictionary()
  454. self.__Initialize()
  455. def Close(self):
  456. if 0 != self.toolTipSkill:
  457. self.toolTipSkill.Hide()
  458. self.Hide()
  459. def SetSkillToolTip(self, toolTipSkill):
  460. self.toolTipSkill = toolTipSkill
  461. if app.ENABLE_CONQUEROR_LEVEL:
  462. def __OnClickConquerorStatusPlusButton(self, statusKey):
  463. try:
  464. statusConquerorPlusCommand=self.statusConquerorPlusCommandDict[statusKey]
  465. net.SendChatPacket(statusConquerorPlusCommand)
  466. except KeyError, msg:
  467. dbg.TraceError("CharacterWindow.__OnClickStatusPlusButton KeyError: %s", msg)
  468. def __OnClickStatusMinusButton(self, statusKey):
  469. try:
  470. statusMinusCommand=self.statusMinusCommandDict[statusKey]
  471. net.SendChatPacket(statusMinusCommand)
  472. except KeyError, msg:
  473. dbg.TraceError("CharacterWindow.__OnClickStatusMinusButton KeyError: %s", msg)
  474. def __OnClickTabButton(self, stateKey):
  475. self.SetState(stateKey)
  476. if app.ENABLE_CONQUEROR_LEVEL:
  477. def __OnClickTabSungmaButton(self, stateKey):
  478. self.SetSubState(stateKey)
  479. def SetState(self, stateKey):
  480. self.state = stateKey
  481. for (tabKey, tabButton) in self.tabButtonDict.items():
  482. if stateKey!=tabKey:
  483. tabButton.SetUp()
  484. for tabValue in self.tabDict.itervalues():
  485. tabValue.Hide()
  486. for pageValue in self.pageDict.itervalues():
  487. pageValue.Hide()
  488. for titleBarValue in self.titleBarDict.itervalues():
  489. titleBarValue.Hide()
  490. self.titleBarDict[stateKey].Show()
  491. self.tabDict[stateKey].Show()
  492. self.pageDict[stateKey].Show()
  493. def GetState(self):
  494. return self.state
  495. if app.ENABLE_CONQUEROR_LEVEL:
  496. def SetSubState(self, stateSubKey):
  497. self.substate = stateSubKey
  498. for (tabKey, tabButton) in self.tabSungmaButtonDict.items():
  499. if stateSubKey!=tabKey:
  500. tabButton.SetUp()
  501. for pageValue in self.SungmaPageDict.itervalues():
  502. pageValue.Hide()
  503. self.__RefreshStatusPlusButtonList()
  504. self.SungmaPageDict[stateSubKey].Show()
  505. def GetSubState(self):
  506. return self.substate
  507. def __GetTotalAtkText(self):
  508. minAtk=player.GetStatus(player.ATT_MIN)
  509. maxAtk=player.GetStatus(player.ATT_MAX)
  510. atkBonus=player.GetStatus(player.ATT_BONUS)
  511. attackerBonus=player.GetStatus(player.ATTACKER_BONUS)
  512. if minAtk==maxAtk:
  513. return "%d" % (minAtk+atkBonus+attackerBonus)
  514. else:
  515. return "%d-%d" % (minAtk+atkBonus+attackerBonus, maxAtk+atkBonus+attackerBonus)
  516. def __GetTotalMagAtkText(self):
  517. minMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MIN_MAGIC_WEP)
  518. maxMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MAX_MAGIC_WEP)
  519. if minMagAtk==maxMagAtk:
  520. return "%d" % (minMagAtk)
  521. else:
  522. return "%d-%d" % (minMagAtk, maxMagAtk)
  523. def __GetTotalDefText(self):
  524. defValue=player.GetStatus(player.DEF_GRADE)
  525. if constInfo.ADD_DEF_BONUS_ENABLE:
  526. defValue+=player.GetStatus(player.DEF_BONUS)
  527. return "%d" % (defValue)
  528. def RefreshStatus(self):
  529. if self.isLoaded==0:
  530. return
  531. try:
  532. if app.ENABLE_CONQUEROR_LEVEL:
  533. if player.GetStatus(player.CONQUEROR_LEVEL) >= 1:
  534. self.GetChild("Level_Value").SetText(str(player.GetStatus(player.CONQUEROR_LEVEL)))
  535. self.GetChild("Exp_Value").SetText(str(unsigned32(player.GetConquerorEXP())))
  536. self.GetChild("RestExp_Value").SetText(str(unsigned32(player.GetStatus(player.CONQUEROR_NEXT_EXP)) - unsigned32(player.GetStatus(player.CONQUEROR_EXP))))
  537. else:
  538. self.GetChild("Level_Value").SetText(str(player.GetStatus(player.LEVEL)))
  539. self.GetChild("Exp_Value").SetText(str(unsigned32(player.GetEXP())))
  540. self.GetChild("RestExp_Value").SetText(str(unsigned32(player.GetStatus(player.NEXT_EXP)) - unsigned32(player.GetStatus(player.EXP))))
  541. else:
  542. self.GetChild("Level_Value").SetText(str(player.GetStatus(player.LEVEL)))
  543. self.GetChild("Exp_Value").SetText(str(unsigned32(player.GetEXP())))
  544. self.GetChild("RestExp_Value").SetText(str(unsigned32(player.GetStatus(player.NEXT_EXP)) - unsigned32(player.GetStatus(player.EXP))))
  545. self.GetChild("HP_Value").SetText(str(player.GetStatus(player.HP)) + '/' + str(player.GetStatus(player.MAX_HP)))
  546. self.GetChild("SP_Value").SetText(str(player.GetStatus(player.SP)) + '/' + str(player.GetStatus(player.MAX_SP)))
  547. self.GetChild("STR_Value").SetText(str(player.GetStatus(player.ST)))
  548. self.GetChild("DEX_Value").SetText(str(player.GetStatus(player.DX)))
  549. self.GetChild("HTH_Value").SetText(str(player.GetStatus(player.HT)))
  550. self.GetChild("INT_Value").SetText(str(player.GetStatus(player.IQ)))
  551. self.GetChild("ATT_Value").SetText(self.__GetTotalAtkText())
  552. self.GetChild("DEF_Value").SetText(self.__GetTotalDefText())
  553. self.GetChild("MATT_Value").SetText(self.__GetTotalMagAtkText())
  554. #self.GetChild("MATT_Value").SetText(str(player.GetStatus(player.MAG_ATT)))
  555. self.GetChild("MDEF_Value").SetText(str(player.GetStatus(player.MAG_DEF)))
  556. self.GetChild("ASPD_Value").SetText(str(player.GetStatus(player.ATT_SPEED)))
  557. self.GetChild("MSPD_Value").SetText(str(player.GetStatus(player.MOVING_SPEED)))
  558. self.GetChild("CSPD_Value").SetText(str(player.GetStatus(player.CASTING_SPEED)))
  559. self.GetChild("ER_Value").SetText(str(player.GetStatus(player.EVADE_RATE)))
  560. self.GetChild("sungma_str_value").SetText(str(player.GetStatus(player.SUNGMA_STR)))
  561. self.GetChild("sungma_hp_value").SetText(str(player.GetStatus(player.SUNGMA_HP)))
  562. self.GetChild("sungma_move_value").SetText(str(player.GetStatus(player.SUNGMA_MOVE)))
  563. self.GetChild("sungma_immune_value").SetText(str(player.GetStatus(player.SUNGMA_INMUNE)))
  564. except:
  565. #import exception
  566. #exception.Abort("CharacterWindow.RefreshStatus.BindObject")
  567. ## ??? ?? ??
  568. pass
  569. self.__RefreshStatusPlusButtonList()
  570. self.__RefreshStatusMinusButtonList()
  571. self.RefreshAlignment()
  572. if self.refreshToolTip:
  573. self.refreshToolTip()
  574. def __RefreshStatusPlusButtonList(self):
  575. if self.isLoaded==0:
  576. return
  577. if app.ENABLE_CONQUEROR_LEVEL:
  578. if self.GetSubState() == "SUNGMA":
  579. statusPlusPoint=player.GetStatus(player.CONQUEROR_POINT)
  580. else:
  581. statusPlusPoint=player.GetStatus(player.STAT)
  582. else:
  583. statusPlusPoint=player.GetStatus(player.STAT)
  584. if statusPlusPoint>0:
  585. self.statusPlusValue.SetText(str(statusPlusPoint))
  586. self.statusPlusLabel.Show()
  587. self.ShowStatusPlusButtonList()
  588. else:
  589. self.statusPlusValue.SetText(str(0))
  590. self.statusPlusLabel.Hide()
  591. self.HideStatusPlusButtonList()
  592. def __RefreshStatusMinusButtonList(self):
  593. if self.isLoaded==0:
  594. return
  595. statusMinusPoint=self.__GetStatMinusPoint()
  596. if statusMinusPoint>0:
  597. self.__ShowStatusMinusButtonList()
  598. else:
  599. self.__HideStatusMinusButtonList()
  600. def RefreshAlignment(self):
  601. point, grade = player.GetAlignmentData()
  602. import colorInfo
  603. COLOR_DICT = { 0 : colorInfo.TITLE_RGB_GOOD_4,
  604. 1 : colorInfo.TITLE_RGB_GOOD_3,
  605. 2 : colorInfo.TITLE_RGB_GOOD_2,
  606. 3 : colorInfo.TITLE_RGB_GOOD_1,
  607. 4 : colorInfo.TITLE_RGB_NORMAL,
  608. 5 : colorInfo.TITLE_RGB_EVIL_1,
  609. 6 : colorInfo.TITLE_RGB_EVIL_2,
  610. 7 : colorInfo.TITLE_RGB_EVIL_3,
  611. 8 : colorInfo.TITLE_RGB_EVIL_4, }
  612. colorList = COLOR_DICT.get(grade, colorInfo.TITLE_RGB_NORMAL)
  613. gradeColor = ui.GenerateColor(colorList[0], colorList[1], colorList[2])
  614. self.toolTipAlignment.ClearToolTip()
  615. self.toolTipAlignment.AutoAppendTextLine(localeInfo.TITLE_NAME_LIST[grade], gradeColor)
  616. self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_NAME + str(point))
  617. self.toolTipAlignment.AlignHorizonalCenter()
  618. def __ShowStatusMinusButtonList(self):
  619. for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  620. statusMinusButton.Show()
  621. def __HideStatusMinusButtonList(self):
  622. for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
  623. statusMinusButton.Hide()
  624. def ShowStatusPlusButtonList(self):
  625. for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  626. statusPlusButton.Show()
  627. def HideStatusPlusButtonList(self):
  628. for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
  629. statusPlusButton.Hide()
  630. if app.ENABLE_CONQUEROR_LEVEL:
  631. def ShowConquerorStatusPlusButtonList(self):
  632. for (statePlusKey, statusPlusButton) in self.statusConquerorPlusButtonDict.items():
  633. statusPlusButton.Show()
  634. def HideConquerorStatusPlusButtonList(self):
  635. for (statePlusKey, statusPlusButton) in self.statusConquerorPlusButtonDict.items():
  636. statusPlusButton.Hide()
  637. def SelectSkill(self, skillSlotIndex):
  638. mouseController = mouseModule.mouseController
  639. if False == mouseController.isAttached():
  640. srcSlotIndex = self.__RealSkillSlotToSourceSlot(skillSlotIndex)
  641. selectedSkillIndex = player.GetSkillIndex(srcSlotIndex)
  642. if skill.CanUseSkill(selectedSkillIndex):
  643. if app.IsPressed(app.DIK_LCONTROL):
  644. player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, srcSlotIndex)
  645. return
  646. mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, srcSlotIndex, selectedSkillIndex)
  647. else:
  648. mouseController.DeattachObject()
  649. def SelectEmptySlot(self, SlotIndex):
  650. mouseModule.mouseController.DeattachObject()
  651. ## ToolTip
  652. def OverInItem(self, slotNumber):
  653. if mouseModule.mouseController.isAttached():
  654. return
  655. if 0 == self.toolTipSkill:
  656. return
  657. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
  658. skillIndex = player.GetSkillIndex(srcSlotIndex)
  659. skillLevel = player.GetSkillLevel(srcSlotIndex)
  660. skillGrade = player.GetSkillGrade(srcSlotIndex)
  661. skillType = skill.GetSkillType(skillIndex)
  662. ## ACTIVE
  663. if skill.SKILL_TYPE_ACTIVE == skillType:
  664. overInSkillGrade = self.__GetSkillGradeFromSlot(slotNumber)
  665. if overInSkillGrade == skill.SKILL_GRADE_COUNT-1 and skillGrade == skill.SKILL_GRADE_COUNT:
  666. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
  667. elif overInSkillGrade == skillGrade:
  668. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, overInSkillGrade, skillLevel)
  669. else:
  670. self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade)
  671. else:
  672. self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
  673. def OverOutItem(self):
  674. if 0 != self.toolTipSkill:
  675. self.toolTipSkill.HideToolTip()
  676. ## Quest
  677. def __SelectQuest(self, slotIndex):
  678. questIndex = quest.GetQuestIndex(self.questShowingStartIndex+slotIndex)
  679. import event
  680. event.QuestButtonClick(-2147483648 + questIndex)
  681. def RefreshQuest(self):
  682. if self.isLoaded==0:
  683. return
  684. questCount = quest.GetQuestCount()
  685. questRange = range(quest.QUEST_MAX_NUM)
  686. if questCount > quest.QUEST_MAX_NUM:
  687. self.questScrollBar.Show()
  688. else:
  689. self.questScrollBar.Hide()
  690. for i in questRange[:questCount]:
  691. (questName, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(self.questShowingStartIndex+i)
  692. self.questNameList[i].SetText(questName)
  693. self.questNameList[i].Show()
  694. self.questLastCountList[i].Show()
  695. self.questLastTimeList[i].Show()
  696. if len(questCounterName) > 0:
  697. self.questLastCountList[i].SetText("%s : %d" % (questCounterName, questCounterValue))
  698. else:
  699. self.questLastCountList[i].SetText("")
  700. ## Icon
  701. self.questSlot.SetSlot(i, i, 1, 1, questIcon)
  702. for i in questRange[questCount:]:
  703. self.questNameList[i].Hide()
  704. self.questLastTimeList[i].Hide()
  705. self.questLastCountList[i].Hide()
  706. self.questSlot.ClearSlot(i)
  707. self.questSlot.HideSlotBaseImage(i)
  708. self.__UpdateQuestClock()
  709. def __UpdateQuestClock(self):
  710. if "QUEST" == self.state:
  711. # QUEST_LIMIT_COUNT_BUG_FIX
  712. for i in xrange(min(quest.GetQuestCount(), quest.QUEST_MAX_NUM)):
  713. # END_OF_QUEST_LIMIT_COUNT_BUG_FIX
  714. (lastName, lastTime) = quest.GetQuestLastTime(i)
  715. clockText = localeInfo.QUEST_UNLIMITED_TIME
  716. if len(lastName) > 0:
  717. if lastTime <= 0:
  718. clockText = localeInfo.QUEST_TIMEOVER
  719. else:
  720. questLastMinute = lastTime / 60
  721. questLastSecond = lastTime % 60
  722. clockText = lastName + " : "
  723. if questLastMinute > 0:
  724. clockText += str(questLastMinute) + localeInfo.QUEST_MIN
  725. if questLastSecond > 0:
  726. clockText += " "
  727. if questLastSecond > 0:
  728. clockText += str(questLastSecond) + localeInfo.QUEST_SEC
  729. self.questLastTimeList[i].SetText(clockText)
  730. def __GetStatMinusPoint(self):
  731. POINT_STAT_RESET_COUNT = 112
  732. return player.GetStatus(POINT_STAT_RESET_COUNT)
  733. def __OverInStatMinusButton(self, stat):
  734. try:
  735. self.__ShowStatToolTip(self.STAT_MINUS_DESCRIPTION[stat] % self.__GetStatMinusPoint())
  736. except KeyError:
  737. pass
  738. self.refreshToolTip = lambda arg=stat: self.__OverInStatMinusButton(arg)
  739. def __OverOutStatMinusButton(self):
  740. self.__HideStatToolTip()
  741. self.refreshToolTip = 0
  742. def __OverInStatButton(self, stat):
  743. try:
  744. self.__ShowStatToolTip(self.STAT_DESCRIPTION[stat])
  745. except KeyError:
  746. pass
  747. def __OverOutStatButton(self):
  748. self.__HideStatToolTip()
  749. def __ShowStatToolTip(self, statDesc):
  750. self.toolTip.ClearToolTip()
  751. self.toolTip.AppendTextLine(statDesc)
  752. self.toolTip.Show()
  753. def __HideStatToolTip(self):
  754. self.toolTip.Hide()
  755. def OnPressEscapeKey(self):
  756. self.Close()
  757. return True
  758. def OnUpdate(self):
  759. self.__UpdateQuestClock()
  760. ## Skill Process
  761. def __RefreshSkillPage(self, name, slotCount):
  762. global SHOW_LIMIT_SUPPORT_SKILL_LIST
  763. skillPage = self.skillPageDict[name]
  764. startSlotIndex = skillPage.GetStartIndex()
  765. if "ACTIVE" == name:
  766. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  767. startSlotIndex += slotCount
  768. getSkillType=skill.GetSkillType
  769. getSkillIndex=player.GetSkillIndex
  770. getSkillGrade=player.GetSkillGrade
  771. getSkillLevel=player.GetSkillLevel
  772. getSkillLevelUpPoint=skill.GetSkillLevelUpPoint
  773. getSkillMaxLevel=skill.GetSkillMaxLevel
  774. for i in xrange(slotCount+1):
  775. slotIndex = i + startSlotIndex
  776. skillIndex = getSkillIndex(slotIndex)
  777. if app.ENABLE_SLOT_WINDOW_EX:
  778. activeList = {}
  779. cooltmList = {}
  780. for j in xrange(skill.SKILL_GRADE_COUNT):
  781. realSlotIndex = self.__GetRealSkillSlot(j, i)
  782. if app.ENABLE_SLOT_WINDOW_EX:
  783. activeList[realSlotIndex] = skillPage.IsActivatedSlot(realSlotIndex)
  784. cooltmList[realSlotIndex] = skillPage.GetSlotCoolTime(realSlotIndex)
  785. skillPage.ClearSlot(realSlotIndex)
  786. if 0 == skillIndex:
  787. continue
  788. skillGrade = getSkillGrade(slotIndex)
  789. skillLevel = getSkillLevel(slotIndex)
  790. skillType = getSkillType(skillIndex)
  791. if player.SKILL_INDEX_RIDING == skillIndex:
  792. if 1 == skillGrade:
  793. skillLevel += 19
  794. elif 2 == skillGrade:
  795. skillLevel += 29
  796. elif 3 == skillGrade:
  797. skillLevel = 40
  798. skillPage.SetSkillSlotNew(slotIndex, skillIndex, max(skillLevel-1, 0), skillLevel)
  799. skillPage.SetSlotCount(slotIndex, skillLevel)
  800. ## ACTIVE
  801. elif skill.SKILL_TYPE_ACTIVE == skillType:
  802. for j in xrange(skill.SKILL_GRADE_COUNT):
  803. realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
  804. skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
  805. skillPage.SetCoverButton(realSlotIndex)
  806. if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT-1):
  807. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  808. elif (not self.__CanUseSkillNow()) or (skillGrade != j):
  809. skillPage.SetSlotCount(realSlotIndex, 0)
  810. skillPage.DisableCoverButton(realSlotIndex)
  811. else:
  812. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  813. if app.ENABLE_SLOT_WINDOW_EX:
  814. isActive = activeList.get(realSlotIndex, False)
  815. coolTime,elapsedTime = cooltmList.get(realSlotIndex, (0,0))
  816. if isActive:
  817. skillPage.ActivateSlot(realSlotIndex)
  818. if coolTime:
  819. skillPage.SetSlotCoolTime(realSlotIndex, coolTime, elapsedTime)
  820. else:
  821. if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
  822. realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
  823. skillPage.SetSkillSlot(realSlotIndex, skillIndex, skillLevel)
  824. skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
  825. if skill.CanUseSkill(skillIndex):
  826. skillPage.SetCoverButton(realSlotIndex)
  827. skillPage.RefreshSlot()
  828. def RefreshSkill(self):
  829. if self.isLoaded==0:
  830. return
  831. if self.__IsChangedHorseRidingSkillLevel():
  832. self.RefreshCharacter()
  833. return
  834. global SHOW_ONLY_ACTIVE_SKILL
  835. if SHOW_ONLY_ACTIVE_SKILL:
  836. self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
  837. else:
  838. self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
  839. self.__RefreshSkillPage("SUPPORT", self.SUPPORT_PAGE_SLOT_COUNT)
  840. self.RefreshSkillPlusButtonList()
  841. def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
  842. if 0 == skillIndex:
  843. return False
  844. if not skill.CanLevelUpSkill(skillIndex, skillLevel):
  845. return False
  846. return True
  847. def __RefreshSkillPlusButton(self, name):
  848. global HIDE_SUPPORT_SKILL_POINT
  849. if HIDE_SUPPORT_SKILL_POINT and "SUPPORT" == name:
  850. return
  851. slotWindow = self.skillPageDict[name]
  852. slotWindow.HideAllSlotButton()
  853. slotStatType = self.skillPageStatDict[name]
  854. if 0 == slotStatType:
  855. return
  856. statPoint = player.GetStatus(slotStatType)
  857. startSlotIndex = slotWindow.GetStartIndex()
  858. if "HORSE" == name:
  859. startSlotIndex += self.ACTIVE_PAGE_SLOT_COUNT
  860. if statPoint > 0:
  861. for i in xrange(self.PAGE_SLOT_COUNT):
  862. slotIndex = i + startSlotIndex
  863. skillIndex = player.GetSkillIndex(slotIndex)
  864. skillGrade = player.GetSkillGrade(slotIndex)
  865. skillLevel = player.GetSkillLevel(slotIndex)
  866. if skillIndex == 0:
  867. continue
  868. if skillGrade != 0:
  869. continue
  870. if name == "HORSE":
  871. if player.GetStatus(player.LEVEL) >= skill.GetSkillLevelLimit(skillIndex):
  872. if skillLevel < 20:
  873. slotWindow.ShowSlotButton(self.__GetETCSkillRealSlotIndex(slotIndex))
  874. else:
  875. if "SUPPORT" == name:
  876. if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
  877. if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
  878. slotWindow.ShowSlotButton(slotIndex)
  879. else:
  880. if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
  881. slotWindow.ShowSlotButton(slotIndex)
  882. def RefreshSkillPlusButtonList(self):
  883. if self.isLoaded==0:
  884. return
  885. self.RefreshSkillPlusPointLabel()
  886. if not self.__CanUseSkillNow():
  887. return
  888. try:
  889. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  890. self.__RefreshSkillPlusButton("HORSE")
  891. else:
  892. self.__RefreshSkillPlusButton("ACTIVE")
  893. self.__RefreshSkillPlusButton("SUPPORT")
  894. except:
  895. import exception
  896. exception.Abort("CharacterWindow.RefreshSkillPlusButtonList.BindObject")
  897. def RefreshSkillPlusPointLabel(self):
  898. if self.isLoaded==0:
  899. return
  900. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  901. activeStatPoint = player.GetStatus(player.SKILL_HORSE)
  902. self.activeSkillPointValue.SetText(str(activeStatPoint))
  903. else:
  904. activeStatPoint = player.GetStatus(player.SKILL_ACTIVE)
  905. self.activeSkillPointValue.SetText(str(activeStatPoint))
  906. supportStatPoint = max(0, player.GetStatus(player.SKILL_SUPPORT))
  907. self.supportSkillPointValue.SetText(str(supportStatPoint))
  908. ## Skill Level Up Button
  909. def OnPressedSlotButton(self, slotNumber):
  910. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
  911. skillIndex = player.GetSkillIndex(srcSlotIndex)
  912. curLevel = player.GetSkillLevel(srcSlotIndex)
  913. maxLevel = skill.GetSkillMaxLevel(skillIndex)
  914. net.SendChatPacket("/skillup " + str(skillIndex))
  915. ## Use Skill
  916. def ClickSkillSlot(self, slotIndex):
  917. srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotIndex)
  918. skillIndex = player.GetSkillIndex(srcSlotIndex)
  919. skillType = skill.GetSkillType(skillIndex)
  920. if not self.__CanUseSkillNow():
  921. if skill.SKILL_TYPE_ACTIVE == skillType:
  922. return
  923. for slotWindow in self.skillPageDict.values():
  924. if slotWindow.HasSlot(slotIndex):
  925. if skill.CanUseSkill(skillIndex):
  926. player.ClickSkillSlot(srcSlotIndex)
  927. return
  928. mouseModule.mouseController.DeattachObject()
  929. def OnUseSkill(self, slotIndex, coolTime):
  930. skillIndex = player.GetSkillIndex(slotIndex)
  931. skillType = skill.GetSkillType(skillIndex)
  932. ## ACTIVE
  933. if skill.SKILL_TYPE_ACTIVE == skillType:
  934. skillGrade = player.GetSkillGrade(slotIndex)
  935. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  936. ## ETC
  937. else:
  938. slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
  939. for slotWindow in self.skillPageDict.values():
  940. if slotWindow.HasSlot(slotIndex):
  941. slotWindow.SetSlotCoolTime(slotIndex, coolTime)
  942. return
  943. def OnActivateSkill(self, slotIndex):
  944. skillGrade = player.GetSkillGrade(slotIndex)
  945. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  946. for slotWindow in self.skillPageDict.values():
  947. if slotWindow.HasSlot(slotIndex):
  948. slotWindow.ActivateSlot(slotIndex)
  949. return
  950. def OnDeactivateSkill(self, slotIndex):
  951. skillGrade = player.GetSkillGrade(slotIndex)
  952. slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
  953. for slotWindow in self.skillPageDict.values():
  954. if slotWindow.HasSlot(slotIndex):
  955. slotWindow.DeactivateSlot(slotIndex)
  956. return
  957. def __ShowJobToolTip(self):
  958. self.toolTipJob.ShowToolTip()
  959. def __HideJobToolTip(self):
  960. self.toolTipJob.HideToolTip()
  961. def __SetJobText(self, mainJob, subJob):
  962. if player.GetStatus(player.LEVEL)<5:
  963. subJob=0
  964. if 949 == app.GetDefaultCodePage():
  965. self.toolTipJob.ClearToolTip()
  966. try:
  967. jobInfoTitle=localeInfo.JOBINFO_TITLE[mainJob][subJob]
  968. jobInfoData=localeInfo.JOBINFO_DATA_LIST[mainJob][subJob]
  969. except IndexError:
  970. print "uiCharacter.CharacterWindow.__SetJobText(mainJob=%d, subJob=%d)" % (mainJob, subJob)
  971. return
  972. self.toolTipJob.AutoAppendTextLine(jobInfoTitle)
  973. self.toolTipJob.AppendSpace(5)
  974. for jobInfoDataLine in jobInfoData:
  975. self.toolTipJob.AutoAppendTextLine(jobInfoDataLine)
  976. self.toolTipJob.AlignHorizonalCenter()
  977. def __ShowAlignmentToolTip(self):
  978. self.toolTipAlignment.ShowToolTip()
  979. def __HideAlignmentToolTip(self):
  980. self.toolTipAlignment.HideToolTip()
  981. if app.ENABLE_CONQUEROR_LEVEL:
  982. def __ShowHTHToolTip(self):
  983. self.toolTipConquerorInfoButton.ClearToolTip()
  984. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_CON)
  985. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  986. self.toolTipConquerorInfoButton.ShowToolTip()
  987. def __HideHTHToolTip(self):
  988. self.toolTipConquerorInfoButton.HideToolTip()
  989. def __ShowINTToolTip(self):
  990. self.toolTipConquerorInfoButton.ClearToolTip()
  991. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_INT)
  992. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  993. self.toolTipConquerorInfoButton.ShowToolTip()
  994. def __HideINTToolTip(self):
  995. self.toolTipConquerorInfoButton.HideToolTip()
  996. def __ShowSTRToolTip(self):
  997. self.toolTipConquerorInfoButton.ClearToolTip()
  998. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_STR)
  999. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1000. self.toolTipConquerorInfoButton.ShowToolTip()
  1001. def __HideSTRToolTip(self):
  1002. self.toolTipConquerorInfoButton.HideToolTip()
  1003. def __ShowDEXToolTip(self):
  1004. self.toolTipConquerorInfoButton.ClearToolTip()
  1005. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_DEX)
  1006. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1007. self.toolTipConquerorInfoButton.ShowToolTip()
  1008. def __HideDEXToolTip(self):
  1009. self.toolTipConquerorInfoButton.HideToolTip()
  1010. ###############################################################################
  1011. def __ShowBaseToolTip(self):
  1012. self.toolTipConquerorInfoButton.ClearToolTip()
  1013. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_BASE_LEVEL)
  1014. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1015. self.toolTipConquerorInfoButton.ShowToolTip()
  1016. def __HideBaseToolTip(self):
  1017. self.toolTipConquerorInfoButton.HideToolTip()
  1018. ###
  1019. def __ShowSungmaToolTip(self):
  1020. self.toolTipConquerorInfoButton.ClearToolTip()
  1021. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_CONQUEROR_LEVEL)
  1022. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1023. self.toolTipConquerorInfoButton.ShowToolTip()
  1024. def __HideSungmaToolTip(self):
  1025. self.toolTipConquerorInfoButton.HideToolTip()
  1026. ###
  1027. def __ShowMSPDToolTip(self):
  1028. self.toolTipConquerorInfoButton.ClearToolTip()
  1029. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_MOVE_SPEED)
  1030. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1031. self.toolTipConquerorInfoButton.ShowToolTip()
  1032. def __HideMSPDToolTip(self):
  1033. self.toolTipConquerorInfoButton.HideToolTip()
  1034. ####
  1035. def __ShowASPDToolTip(self):
  1036. self.toolTipConquerorInfoButton.ClearToolTip()
  1037. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_ATT_SPEED)
  1038. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1039. self.toolTipConquerorInfoButton.ShowToolTip()
  1040. def __HideASPDToolTip(self):
  1041. self.toolTipConquerorInfoButton.HideToolTip()
  1042. ###
  1043. def __ShowCSPDToolTip(self):
  1044. self.toolTipConquerorInfoButton.ClearToolTip()
  1045. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_CAST_SPEED)
  1046. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1047. self.toolTipConquerorInfoButton.ShowToolTip()
  1048. def __HideCSPDToolTip(self):
  1049. self.toolTipConquerorInfoButton.HideToolTip()
  1050. ###
  1051. def __ShowMATTToolTip(self):
  1052. self.toolTipConquerorInfoButton.ClearToolTip()
  1053. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_MAG_ATT)
  1054. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1055. self.toolTipConquerorInfoButton.ShowToolTip()
  1056. def __HideMATTToolTip(self):
  1057. self.toolTipConquerorInfoButton.HideToolTip()
  1058. ###
  1059. def __ShowMDEFToolTip(self):
  1060. self.toolTipConquerorInfoButton.ClearToolTip()
  1061. self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_MAG_DEF)
  1062. self.toolTipConquerorInfoButton.AlignHorizonalCenter()
  1063. self.toolTipConquerorInfoButton.ShowToolTip()
  1064. def __HideMDEFToolTip(self):
  1065. self.toolTipConquerorInfoButton.HideToolTip()
  1066. ##############################################################################################
  1067. def RefreshCharacter(self):
  1068. if self.isLoaded==0:
  1069. return
  1070. ## Name
  1071. try:
  1072. characterName = player.GetName()
  1073. guildName = player.GetGuildName()
  1074. self.characterNameValue.SetText(characterName)
  1075. self.guildNameValue.SetText(guildName)
  1076. if not guildName:
  1077. if localeInfo.IsARABIC():
  1078. self.characterNameSlot.SetPosition(190, 34)
  1079. else:
  1080. self.characterNameSlot.SetPosition(109, 34)
  1081. self.guildNameSlot.Hide()
  1082. else:
  1083. if localeInfo.IsJAPAN():
  1084. self.characterNameSlot.SetPosition(143, 34)
  1085. else:
  1086. self.characterNameSlot.SetPosition(153, 34)
  1087. self.guildNameSlot.Show()
  1088. except:
  1089. import exception
  1090. exception.Abort("CharacterWindow.RefreshCharacter.BindObject")
  1091. race = net.GetMainActorRace()
  1092. group = net.GetMainActorSkillGroup()
  1093. empire = net.GetMainActorEmpire()
  1094. ## Job Text
  1095. job = chr.RaceToJob(race)
  1096. self.__SetJobText(job, group)
  1097. ## FaceImage
  1098. try:
  1099. faceImageName = FACE_IMAGE_DICT[race]
  1100. try:
  1101. self.faceImage.LoadImage(faceImageName)
  1102. except:
  1103. print "CharacterWindow.RefreshCharacter(race=%d, faceImageName=%s)" % (race, faceImageName)
  1104. self.faceImage.Hide()
  1105. except KeyError:
  1106. self.faceImage.Hide()
  1107. ## GroupName
  1108. self.__SetSkillGroupName(race, group)
  1109. ## Skill
  1110. if 0 == group:
  1111. self.__SelectSkillGroup(0)
  1112. else:
  1113. self.__SetSkillSlotData(race, group, empire)
  1114. if self.__CanUseHorseSkill():
  1115. self.__SelectSkillGroup(0)
  1116. def __SetSkillGroupName(self, race, group):
  1117. job = chr.RaceToJob(race)
  1118. if not self.SKILL_GROUP_NAME_DICT.has_key(job):
  1119. return
  1120. nameList = self.SKILL_GROUP_NAME_DICT[job]
  1121. if 0 == group:
  1122. self.skillGroupButton1.SetText(nameList[1])
  1123. self.skillGroupButton2.SetText(nameList[2])
  1124. self.skillGroupButton1.Show()
  1125. self.skillGroupButton2.Show()
  1126. self.activeSkillGroupName.Hide()
  1127. if app.ENABLE_WOLFMAN_CHARACTER and playerSettingModule.RACE_WOLFMAN_M == race:
  1128. self.skillGroupButton2.Hide()
  1129. else:
  1130. if self.__CanUseHorseSkill():
  1131. self.activeSkillGroupName.Hide()
  1132. self.skillGroupButton1.SetText(nameList.get(group, "Noname"))
  1133. self.skillGroupButton2.SetText(localeInfo.SKILL_GROUP_HORSE)
  1134. self.skillGroupButton1.Show()
  1135. self.skillGroupButton2.Show()
  1136. else:
  1137. self.activeSkillGroupName.SetText(nameList.get(group, "Noname"))
  1138. self.activeSkillGroupName.Show()
  1139. self.skillGroupButton1.Hide()
  1140. self.skillGroupButton2.Hide()
  1141. def __SetSkillSlotData(self, race, group, empire=0):
  1142. ## SkillIndex
  1143. playerSettingModule.RegisterSkill(race, group, empire)
  1144. ## Event
  1145. self.__SetSkillSlotEvent()
  1146. ## Refresh
  1147. self.RefreshSkill()
  1148. def __SelectSkillGroup(self, index):
  1149. for btn in self.skillGroupButton:
  1150. btn.SetUp()
  1151. self.skillGroupButton[index].Down()
  1152. if self.__CanUseHorseSkill():
  1153. if 0 == index:
  1154. index = net.GetMainActorSkillGroup()-1
  1155. elif 1 == index:
  1156. index = self.PAGE_HORSE
  1157. self.curSelectedSkillGroup = index
  1158. self.__SetSkillSlotData(net.GetMainActorRace(), index+1, net.GetMainActorEmpire())
  1159. def __CanUseSkillNow(self):
  1160. if 0 == net.GetMainActorSkillGroup():
  1161. return False
  1162. return True
  1163. def __CanUseHorseSkill(self):
  1164. slotIndex = player.GetSkillSlotIndex(player.SKILL_INDEX_RIDING)
  1165. if not slotIndex:
  1166. return False
  1167. grade = player.GetSkillGrade(slotIndex)
  1168. level = player.GetSkillLevel(slotIndex)
  1169. if level < 0:
  1170. level *= -1
  1171. if grade >= 1 and level >= 1:
  1172. return True
  1173. return False
  1174. def __IsChangedHorseRidingSkillLevel(self):
  1175. ret = False
  1176. if -1 == self.canUseHorseSkill:
  1177. self.canUseHorseSkill = self.__CanUseHorseSkill()
  1178. if self.canUseHorseSkill != self.__CanUseHorseSkill():
  1179. ret = True
  1180. self.canUseHorseSkill = self.__CanUseHorseSkill()
  1181. return ret
  1182. def __GetRealSkillSlot(self, skillGrade, skillSlot):
  1183. return skillSlot + min(skill.SKILL_GRADE_COUNT-1, skillGrade)*skill.SKILL_GRADE_STEP_COUNT
  1184. def __GetETCSkillRealSlotIndex(self, skillSlot):
  1185. if skillSlot > 100:
  1186. return skillSlot
  1187. return skillSlot % self.ACTIVE_PAGE_SLOT_COUNT
  1188. def __RealSkillSlotToSourceSlot(self, realSkillSlot):
  1189. if realSkillSlot > 100:
  1190. return realSkillSlot
  1191. if self.PAGE_HORSE == self.curSelectedSkillGroup:
  1192. return realSkillSlot + self.ACTIVE_PAGE_SLOT_COUNT
  1193. return realSkillSlot % skill.SKILL_GRADE_STEP_COUNT
  1194. def __GetSkillGradeFromSlot(self, skillSlot):
  1195. return int(skillSlot / skill.SKILL_GRADE_STEP_COUNT)
  1196. def SelectSkillGroup(self, index):
  1197. self.__SelectSkillGroup(index)
  1198. def OnQuestScroll(self):
  1199. questCount = quest.GetQuestCount()
  1200. scrollLineCount = max(0, questCount - quest.QUEST_MAX_NUM)
  1201. startIndex = int(scrollLineCount * self.questScrollBar.GetPos())
  1202. if startIndex != self.questShowingStartIndex:
  1203. self.questShowingStartIndex = startIndex
  1204. self.RefreshQuest()