Advertisement
Guest User

Untitled

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