marwan99

Untitled

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