Advertisement
Guest User

Untitled

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