Jump to content

Red

Premium
  • Posts

    71
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by Red

  1. Hello people I want to know if I can create a private server metin2 a basic thing just to develop my server and a VPN like these(links below), and if so which ones would you recommend something cheap nothing much just that for 4/5 friends do some tests.
    Another question you need to correct FreeBSD ? What I mean is to have the server you need the machine to have FreeBSD

    I already have in mind this two :

    https://www.ovh.pt/vps/vps-ssd.xml

    https://blazingfast.io/vps

    But i dont know if they have the requirements for create a server

    Thank you for your help,
    LikeAG6

  2. 48 minutes ago, Mind Rapist said:

    Hey :)

    So to remove these you need to edit your uiGameOption.py in root folder and gameOption.py in uiscript I think it's pretty easy to realize which lines you need to remove/comment out.

    Btw, epic interface!!! Can I have download link please?

    Kind regards ~ Mind Rapist

    Yeah i'll post there the interface let me solved this problem i'll upload.

     

    You got the interface here,

     

  3. So i got a solutions with help with a friend, so if somebody got the same problem you must go to

    locale -> taskbar.py and delete 

     {
                "name" : "VectorsEfsunButton",
                "type" : "button",

                "x" : SCREEN_WIDTH - 178,
                "y" : 3 + Y_ADD_POSITION,

                "tooltip_text" : "Efsun Botu",

                "default_image" : "d:/ymir work/ui/Vectorsefs1.tga",
                "over_image" : "d:/ymir work/ui/Vectorsefs2.tga",
                "down_image" : "d:/ymir work/ui/Vectorsefs1.tga",
            },

    then go to root -> uitaskbar.py and delete

     

    toggleButtonDict[TaskBar.BUTTON_VECTORS]=self.GetChild("VectorsEfsunButton")
    BUTTON_VECTORS = 5

    interfacemodule.py and delete

    self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_VECTORS, ui.__mem_func__(self.Vectors))

    and last one you go to constinfo.py and delete

    VectorsEfsunTaskbar = 0


     

    Thanks for everyone who tried help me.

  4. 2 hours ago, Artnesor said:

    You have to add empty line at the end of file.

    I'll try

     

    Result:

    999e3990257b448aa6ac82d51907e474.png

    Edit1: I think i solved that error.

    Now when i try login the client closes.

    0803 01:35:06784 :: 
    networkModule.py(line:208) SetSelectCharacterPhase
    system.py(line:130) __pack_import
    system.py(line:110) _process_result
    introSelect.py(line:30) ?
    system.py(line:130) __pack_import
    system.py(line:110) _process_result
    interfaceModule.py(line:10) ?
    system.py(line:130) __pack_import

    networkModule.SetSelectCharacterPhase - exceptions.SyntaxError:invalid syntax (line 1142)

    0803 01:35:06784 :: ============================================================================================================
    0803 01:35:06784 :: Abort!!!!


     

  5. I already removed everything but keep the same error

     

    syserr

     

    0802 16:53:07173 :: 
    networkModule.py(line:208) SetSelectCharacterPhase
    system.py(line:130) __pack_import
    system.py(line:110) _process_result
    introSelect.py(line:30) ?
    system.py(line:130) __pack_import
    system.py(line:110) _process_result
    interfaceModule.py(line:10) ?
    system.py(line:130) __pack_import

    networkModule.SetSelectCharacterPhase - exceptions.SyntaxError:invalid syntax (line 1136)

    0802 16:53:07173 :: ============================================================================================================
    0802 16:53:07173 :: Abort!!!!


     

     

    Some tips?

     

  6. But i remove the same thing on the taskbar.ui?

    Now i put ID and PW and client goes down,

    syserr:

    0802 16:32:13827 :: 
    networkModule.py(line:208) SetSelectCharacterPhase
    system.py(line:130) __pack_import
    system.py(line:110) _process_result
    introSelect.py(line:30) ?
    system.py(line:130) __pack_import
    system.py(line:110) _process_result
    interfaceModule.py(line:10) ?
    system.py(line:130) __pack_import

    networkModule.SetSelectCharacterPhase - exceptions.SyntaxError:invalid syntax (line 1136)

    0802 16:32:13827 :: ============================================================================================================
    0802 16:32:13827 :: Abort!!!!

  7. uitaskbar

     

    import ui
    import net
    import item
    import skill
    import localeInfo
    import wndMgr
    import player
    import constInfo
    import mouseModule
    import uiScriptLocale
    import app

    MOUSE_SETTINGS = [0, 0]

    def InitMouseButtonSettings(left, right):
        global MOUSE_SETTINGS
        MOUSE_SETTINGS = [left, right]

    def SetMouseButtonSetting(dir, event):
        global MOUSE_SETTINGS
        MOUSE_SETTINGS[dir] = event
        
    def GetMouseButtonSettings():
        global MOUSE_SETTINGS
        return MOUSE_SETTINGS

    def SaveMouseButtonSettings():
        global MOUSE_SETTINGS
        open("mouse.cfg", "w").write("%s\t%s" % tuple(MOUSE_SETTINGS))

    def LoadMouseButtonSettings():
        global MOUSE_SETTINGS
        tokens = open("mouse.cfg", "r").read().split()

        if len(tokens) != 2:
            raise RuntimeError, "MOUSE_SETTINGS_FILE_ERROR"

        MOUSE_SETTINGS[0] = int(tokens[0])
        MOUSE_SETTINGS[1] = int(tokens[1])

    def unsigned32(n):
        return n & 0xFFFFFFFFL

    #-------------------Giftbox Begin------------------------------

    class GiftBox(ui.ScriptWindow):
        class TextToolTip(ui.Window):
            def __init__(self):
                ui.Window.__init__(self, "TOP_MOST")
                self.SetWindowName("GiftBox")
                textLine = ui.TextLine()
                textLine.SetParent(self)
                textLine.SetHorizontalAlignCenter()
                textLine.SetOutline()
                textLine.Show()
                self.textLine = textLine

            def __del__(self):
                ui.Window.__del__(self)

            def SetText(self, text):
                self.textLine.SetText(text)

            def OnRender(self):
                (mouseX, mouseY) = wndMgr.GetMousePosition()
                self.textLine.SetPosition(mouseX, mouseY - 15)

        def __init__(self):
            #print "NEW TASKBAR  ----------------------------------------------------------------------------"
            ui.ScriptWindow.__init__(self)
            self.tooltipGift = self.TextToolTip()
            self.tooltipGift.Show()
            
        def __del__(self):
            #print "---------------------------------------------------------------------------- DELETE TASKBAR"
            ui.ScriptWindow.__del__(self)

        def LoadWindow(self):
            try:
                pyScrLoader = ui.PythonScriptLoader()
                pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "giftbox.py")
            except:
                import exception
                exception.Abort("GiftBox.LoadWindow.LoadObject")        

            self.giftBoxIcon = self.GetChild("GiftBox_Icon")
            self.giftBoxToolTip = self.GetChild("GiftBox_ToolTip")
        
        def Destroy(self):        
            self.giftBoxIcon = 0
            self.giftBoxToolTip = 0        
                
    #-------------------Giftbox End------------------------------

    class EnergyBar(ui.ScriptWindow):
        class TextToolTip(ui.Window):
            def __init__(self):
                ui.Window.__init__(self, "TOP_MOST")
                self.SetWindowName("EnergyBar")
                textLine = ui.TextLine()
                textLine.SetParent(self)
                textLine.SetHorizontalAlignCenter()
                textLine.SetOutline()
                textLine.Show()
                self.textLine = textLine

            def __del__(self):
                ui.Window.__del__(self)

            def SetText(self, text):
                self.textLine.SetText(text)

            def OnRender(self):
                (mouseX, mouseY) = wndMgr.GetMousePosition()
                self.textLine.SetPosition(mouseX, mouseY - 15)

        def __init__(self):
            #print "NEW TASKBAR  ----------------------------------------------------------------------------"
            ui.ScriptWindow.__init__(self)
            self.tooltipEnergy = self.TextToolTip()
            self.tooltipEnergy.Show()
            
        def __del__(self):
            #print "---------------------------------------------------------------------------- DELETE TASKBAR"
            ui.ScriptWindow.__del__(self)

        def LoadWindow(self):
            try:
                pyScrLoader = ui.PythonScriptLoader()
                pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "EnergyBar.py")
            except:
                import exception
                exception.Abort("EnergyBar.LoadWindow.LoadObject")

            self.energyEmpty = self.GetChild("EnergyGauge_Empty")
            self.energyHungry = self.GetChild("EnergyGauge_Hungry")
            self.energyFull = self.GetChild("EnergyGauge_Full")

            self.energyGaugeBoard = self.GetChild("EnergyGauge_Board")
            self.energyGaugeToolTip = self.GetChild("EnergyGauge_ToolTip")

            
        def Destroy(self):        
            self.energyEmpty = None
            self.energyHungry = None
            self.energyFull = None
            self.energyGaugeBoard = 0
            self.energyGaugeToolTip = 0
            self.tooltipEnergy = 0

        ## Gauge
        def RefreshStatus(self):
            pointEnergy = player.GetStatus (player.ENERGY)
            leftTimeEnergy = player.GetStatus (player.ENERGY_END_TIME) - app.GetGlobalTimeStamp()
            # 충기환 지속 시간 = 2시간.
            self.SetEnergy (pointEnergy, leftTimeEnergy, 7200)
                
        def SetEnergy (self, point, leftTime, maxTime):
            leftTime = max (leftTime, 0)
            maxTime = max (maxTime, 0)
                
            self.energyEmpty.Hide()
            self.energyHungry.Hide()
            self.energyFull.Hide()
        
            if leftTime == 0:
                self.energyEmpty.Show()
            elif ((leftTime * 100) / maxTime) < 15:
                self.energyHungry.Show()
            else:
                self.energyFull.Show()
                
            self.tooltipEnergy.SetText("%s" % (localeInfo.TOOLTIP_ENERGY(point)))

        def OnUpdate(self):
            if TRUE == self.energyGaugeToolTip.IsIn():
                self.RefreshStatus()
                self.tooltipEnergy.Show()
            else:
                self.tooltipEnergy.Hide()

    class ExpandedTaskBar(ui.ScriptWindow):
        BUTTON_DRAGON_SOUL = 0
        def __init__(self):
            ui.Window.__init__(self)
            self.SetWindowName("ExpandedTaskBar")
        
        def LoadWindow(self):
            try:
                pyScrLoader = ui.PythonScriptLoader()
                pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "ExpandedTaskBar.py")
            except:
                import exception
                exception.Abort("ExpandedTaskBar.LoadWindow.LoadObject")

            self.expandedTaskBarBoard = self.GetChild("ExpanedTaskBar_Board")

            self.toggleButtonDict = {}
            self.toggleButtonDict[ExpandedTaskBar.BUTTON_DRAGON_SOUL] = self.GetChild("DragonSoulButton")
            self.toggleButtonDict[ExpandedTaskBar.BUTTON_DRAGON_SOUL].SetParent(self)
        
        def SetTop(self):
            super(ExpandedTaskBar, self).SetTop()    
            for button in self.toggleButtonDict.values():
                button.SetTop()
        
        def Show(self):
            ui.ScriptWindow.Show(self)
        
        def Close(self):
            self.Hide()
        
        def SetToolTipText(self, eButton, text):
            self.toggleButtonDict[eButton].SetToolTipText(text)
            
        def SetToggleButtonEvent(self, eButton, kEventFunc):
            self.toggleButtonDict[eButton].SetEvent(kEventFunc)

        def OnPressEscapeKey(self):
            self.Close()
            return TRUE
        
    class TaskBar(ui.ScriptWindow):

        BUTTON_CHARACTER = 0
        BUTTON_INVENTORY = 1
        BUTTON_MESSENGER = 2
        BUTTON_SYSTEM = 3
        BUTTON_CHAT = 4
        BUTTON_VECTORS = 5
        BUTTON_EXPAND = 4
        IS_EXPANDED = FALSE

        MOUSE_BUTTON_LEFT = 0
        MOUSE_BUTTON_RIGHT = 1
        NONE = 255

        EVENT_MOVE = 0
        EVENT_ATTACK = 1
        EVENT_MOVE_AND_ATTACK = 2
        EVENT_CAMERA = 3
        EVENT_SKILL = 4
        EVENT_AUTO = 5

        GAUGE_WIDTH = 95
        GAUGE_HEIGHT = 13

        QUICKPAGE_NUMBER_FILENAME = [
            "d:/ymir work/ui/game/taskbar/1.sub",
            "d:/ymir work/ui/game/taskbar/2.sub",
            "d:/ymir work/ui/game/taskbar/3.sub",
            "d:/ymir work/ui/game/taskbar/4.sub",
        ]

        #gift icon show and hide
        def ShowGift(self):
            if not localeInfo.IsBRAZIL():
                self.wndGiftBox.Show()
        
        def HideGift(self):
            self.wndGiftBox.Hide()

        class TextToolTip(ui.Window):
            def __init__(self):
                ui.Window.__init__(self, "TOP_MOST")

                textLine = ui.TextLine()
                textLine.SetParent(self)
                textLine.SetHorizontalAlignCenter()
                textLine.SetOutline()
                textLine.Show()
                self.textLine = textLine

            def __del__(self):
                ui.Window.__del__(self)

            def SetText(self, text):
                self.textLine.SetText(text)

            def OnRender(self):
                (mouseX, mouseY) = wndMgr.GetMousePosition()
                self.textLine.SetPosition(mouseX, mouseY - 15)

        class SkillButton(ui.SlotWindow):

            def __init__(self):
                ui.SlotWindow.__init__(self)

                self.event = 0
                self.arg = 0

                self.slotIndex = 0
                self.skillIndex = 0

                slotIndex = 0
                wndMgr.SetSlotBaseImage(self.hWnd, "d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0)
                wndMgr.AppendSlot(self.hWnd, slotIndex, 0, 0, 32, 32)
                self.SetCoverButton(slotIndex,    "d:/ymir work/ui/public/slot_cover_button_01.sub",\
                                                "d:/ymir work/ui/public/slot_cover_button_02.sub",\
                                                "d:/ymir work/ui/public/slot_cover_button_03.sub",\
                                                "d:/ymir work/ui/public/slot_cover_button_04.sub", TRUE, FALSE)
                self.SetSize(32, 32)

            def __del__(self):
                ui.SlotWindow.__del__(self)

            def Destroy(self):
                if 0 != self.tooltipSkill:
                    self.tooltipSkill.HideToolTip()

            def RefreshSkill(self):
                if 0 != self.slotIndex:
                    self.SetSkill(self.slotIndex)

            def SetSkillToolTip(self, tooltip):
                self.tooltipSkill = tooltip

            def SetSkill(self, skillSlotNumber):
                slotNumber = 0
                skillIndex = player.GetSkillIndex(skillSlotNumber)
                skillGrade = player.GetSkillGrade(skillSlotNumber)
                skillLevel = player.GetSkillLevel(skillSlotNumber)
                skillType = skill.GetSkillType(skillIndex)

                self.skillIndex = skillIndex
                if 0 == self.skillIndex:
                    self.ClearSlot(slotNumber)
                    return

                self.slotIndex = skillSlotNumber

                self.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel)
                self.SetSlotCountNew(slotNumber, skillGrade, skillLevel)

                ## NOTE : CoolTime 체크
                if player.IsSkillCoolTime(skillSlotNumber):
                    (coolTime, elapsedTime) = player.GetSkillCoolTime(skillSlotNumber)
                    self.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)

                ## NOTE : Activate 되어 있다면 아이콘도 업데이트
                if player.IsSkillActive(skillSlotNumber):
                    self.ActivateSlot(slotNumber)

            def SetSkillEvent(self, event, arg=0):
                self.event = event
                self.arg = arg

            def GetSkillIndex(self):
                return self.skillIndex

            def GetSlotIndex(self):
                return self.slotIndex

            def Activate(self, coolTime):
                self.SetSlotCoolTime(0, coolTime)

                if skill.IsToggleSkill(self.skillIndex):
                    self.ActivateSlot(0)

            def Deactivate(self):
                if skill.IsToggleSkill(self.skillIndex):
                    self.DeactivateSlot(0)

            def OnOverInItem(self, dummy):
                self.tooltipSkill.SetSkill(self.skillIndex)

            def OnOverOutItem(self):
                self.tooltipSkill.HideToolTip()

            def OnSelectItemSlot(self, dummy):
                if 0 != self.event:
                    if 0 != self.arg:
                        self.event(self.arg)
                    else:
                        self.event()

        def __init__(self):
            #print "NEW TASKBAR  ----------------------------------------------------------------------------"

            ui.ScriptWindow.__init__(self, "TOP_MOST")

            self.quickPageNumImageBox = None
            self.tooltipItem = 0
            self.tooltipSkill = 0
            self.mouseModeButtonList = [ ui.ScriptWindow("TOP_MOST"), ui.ScriptWindow("TOP_MOST") ]

            self.tooltipHP = self.TextToolTip()
            self.tooltipHP.Show()
            self.tooltipSP = self.TextToolTip()
            self.tooltipSP.Show()
            self.tooltipST = self.TextToolTip()
            self.tooltipST.Show()
            self.tooltipEXP = self.TextToolTip()
            self.tooltipEXP.Show()
            
            self.skillCategoryNameList = [ "ACTIVE_1", "ACTIVE_2", "ACTIVE_3" ]
            self.skillPageStartSlotIndexDict = {
                "ACTIVE_1" : 1, 
                "ACTIVE_2" : 21, 
                "ACTIVE_3" : 41, 
            }

            self.selectSkillButtonList = []
            
            self.lastUpdateQuickSlot = 0
            self.SetWindowName("TaskBar")

        def __del__(self):
            #print "---------------------------------------------------------------------------- DELETE TASKBAR"
            ui.ScriptWindow.__del__(self)

        def LoadWindow(self):
            try:
                pyScrLoader = ui.PythonScriptLoader()

                if constInfo.IN_GAME_SHOP_ENABLE:
                    pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "TaskBar.py")
                else:
                    pyScrLoader.LoadScriptFile(self, "UIScript/TaskBar.py")
                pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT], "UIScript/MouseButtonWindow.py")
                pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT], "UIScript/RightMouseButtonWindow.py")
            except:
                import exception
                exception.Abort("TaskBar.LoadWindow.LoadObject")

            self.quickslot = []
            self.quickslot.append(self.GetChild("quick_slot_1"))
            self.quickslot.append(self.GetChild("quick_slot_2"))
            for slot in self.quickslot:
                slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
                slot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptyQuickSlot))
                slot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemQuickSlot))
                slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.UnselectItemQuickSlot))
                slot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
                slot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))

            toggleButtonDict = {}
            toggleButtonDict[TaskBar.BUTTON_CHARACTER]=self.GetChild("CharacterButton")
            toggleButtonDict[TaskBar.BUTTON_VECTORS]=self.GetChild("VectorsEfsunButton")
            toggleButtonDict[TaskBar.BUTTON_INVENTORY]=self.GetChild("InventoryButton")
            toggleButtonDict[TaskBar.BUTTON_MESSENGER]=self.GetChild("MessengerButton")
            toggleButtonDict[TaskBar.BUTTON_SYSTEM]=self.GetChild("SystemButton")
            
            # ChatButton, ExpandButton 둘 중 하나는 반드시 존재한다.
            try:
                toggleButtonDict[TaskBar.BUTTON_CHAT]=self.GetChild("ChatButton")
            except:
                toggleButtonDict[TaskBar.BUTTON_EXPAND]=self.GetChild("ExpandButton")
                TaskBar.IS_EXPANDED = TRUE
            

            if localeInfo.IsARABIC():
                systemButton = toggleButtonDict[TaskBar.BUTTON_SYSTEM]
                if systemButton.ToolTipText:
                    tx, ty = systemButton.ToolTipText.GetLocalPosition()
                    tw = systemButton.ToolTipText.GetWidth() 
                    systemButton.ToolTipText.SetPosition(-tw/2, ty)


            expGauge = []
            expGauge.append(self.GetChild("EXPGauge_01"))
            expGauge.append(self.GetChild("EXPGauge_02"))
            expGauge.append(self.GetChild("EXPGauge_03"))
            expGauge.append(self.GetChild("EXPGauge_04"))

            for exp in expGauge:
                exp.SetSize(0, 0)

          
            self.quickPageNumImageBox=self.GetChild("QuickPageNumber")

            self.GetChild("QuickPageUpButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageUpButton))
            self.GetChild("QuickPageDownButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageDownButton))

            mouseLeftButtonModeButton = self.GetChild("LeftMouseButton")
            mouseRightButtonModeButton = self.GetChild("RightMouseButton")
            mouseLeftButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleLeftMouseButtonModeWindow))        
            mouseRightButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow))
            self.curMouseModeButton = [ mouseLeftButtonModeButton, mouseRightButtonModeButton ]

            (xLocalRight, yLocalRight) = mouseRightButtonModeButton.GetLocalPosition()
            self.curSkillButton = self.SkillButton()
            self.curSkillButton.SetParent(self)
            self.curSkillButton.SetPosition(xLocalRight, 3)
            self.curSkillButton.SetSkillEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow))
            self.curSkillButton.Hide()

            (xLeft, yLeft) = mouseLeftButtonModeButton.GetGlobalPosition()
            (xRight, yRight) = mouseRightButtonModeButton.GetGlobalPosition()
            leftModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT]
            leftModeButtonList.SetPosition(xLeft, yLeft - leftModeButtonList.GetHeight()-5)
            rightModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT]
            rightModeButtonList.SetPosition(xRight - rightModeButtonList.GetWidth() + 32, yRight - rightModeButtonList.GetHeight()-5)
            rightModeButtonList.GetChild("button_skill").SetEvent(lambda adir=self.MOUSE_BUTTON_RIGHT, aevent=self.EVENT_SKILL: self.SelectMouseButtonEvent(adir, aevent))
            rightModeButtonList.GetChild("button_skill").Hide()

            mouseImage = ui.ImageBox("TOP_MOST")
            mouseImage.AddFlag("float")
            mouseImage.LoadImage("d:/ymir work/ui/game/taskbar/mouse_button_camera_01.sub")
            mouseImage.SetPosition(xRight, wndMgr.GetScreenHeight() - 34)
            mouseImage.Hide()
            self.mouseImage = mouseImage

            dir = self.MOUSE_BUTTON_LEFT
            wnd = self.mouseModeButtonList[dir]
            wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent))
            wnd.GetChild("button_auto_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_AUTO: self.SelectMouseButtonEvent(adir, aevent))
            wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent))

            dir = self.MOUSE_BUTTON_RIGHT
            wnd = self.mouseModeButtonList[dir]
            wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent))
            wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent))

            self.toggleButtonDict = toggleButtonDict
            self.expGauge = expGauge

            if constInfo.IN_GAME_SHOP_ENABLE:
                self.rampageGauge1  = self.GetChild("RampageGauge")
                self.rampageGauge1.OnMouseOverIn = ui.__mem_func__(self.__RampageGauge_OverIn)
                self.rampageGauge2 = self.GetChild("RampageGauge2")
                self.rampageGauge2.OnMouseOverOut = ui.__mem_func__(self.__RampageGauge_OverOut)
                self.rampageGauge2.OnMouseLeftButtonUp = ui.__mem_func__(self.__RampageGauge_Click)
                print "[DEBUG]: constInfo.IN_GAME_SHOP_ENABLE / self.rampageGauge1",constInfo.IN_GAME_SHOP_ENABLE, self.rampageGauge1
                self.__RampageGauge_OverOut()

            self.hpGauge = self.GetChild("HPGauge")
            self.mpGauge = self.GetChild("SPGauge")
            self.stGauge = self.GetChild("STGauge")
            self.hpRecoveryGaugeBar = self.GetChild("HPRecoveryGaugeBar")
            self.spRecoveryGaugeBar = self.GetChild("SPRecoveryGaugeBar")

            self.hpGaugeBoard=self.GetChild("HPGauge_Board")
            self.mpGaugeBoard=self.GetChild("SPGauge_Board")
            self.stGaugeBoard=self.GetChild("STGauge_Board")
            self.expGaugeBoard=self.GetChild("EXP_Gauge_Board")
            
            #giftbox object
            wndGiftBox = GiftBox()
            wndGiftBox.LoadWindow()
            self.wndGiftBox = wndGiftBox
        
            self.__LoadMouseSettings()
            self.RefreshStatus()
            self.RefreshQuickSlot()

        def __RampageGauge_OverIn(self):
            print "rampage_over_in"
            self.rampageGauge2.Show()
            self.rampageGauge1.Hide()

        def __RampageGauge_OverOut(self):
            print "rampage_over_out"
            self.rampageGauge2.Hide()
            self.rampageGauge1.Show()

        def __RampageGauge_Click(self):
            print "rampage_up"
            net.SendChatPacket("/in_game_mall")
            # gift icon hide when click mall icon
            self.wndGiftBox.Hide()    

        def __LoadMouseSettings(self):
            try:
                LoadMouseButtonSettings()
                (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()
                if not self.__IsInSafeMouseButtonSettingRange(mouseLeftButtonEvent) or not self.__IsInSafeMouseButtonSettingRange(mouseRightButtonEvent):
                        raise RuntimeError, "INVALID_MOUSE_BUTTON_SETTINGS"
            except:
                InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA)
                (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()

            try:
                self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT,    mouseLeftButtonEvent)
                self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT,    mouseRightButtonEvent)
            except:
                InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA)
                (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()

                self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT,    mouseLeftButtonEvent)
                self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT,    mouseRightButtonEvent)

        def __IsInSafeMouseButtonSettingRange(self, arg):
            return arg >= self.EVENT_MOVE and arg <= self.EVENT_AUTO

        def Destroy(self):        
            SaveMouseButtonSettings()

            self.ClearDictionary()
            self.mouseModeButtonList[0].ClearDictionary()
            self.mouseModeButtonList[1].ClearDictionary()
            self.mouseModeButtonList = 0
            self.curMouseModeButton = 0
            self.curSkillButton = 0
            self.selectSkillButtonList = 0


            self.expGauge = None
            self.hpGauge = None
            self.mpGauge = None
            self.stGauge = None
            self.hpRecoveryGaugeBar = None
            self.spRecoveryGaugeBar = None
        
            self.tooltipItem = 0
            self.tooltipSkill = 0
            self.quickslot = 0
            self.toggleButtonDict = 0

            self.hpGaugeBoard = 0
            self.mpGaugeBoard = 0
            self.stGaugeBoard = 0
            
            self.expGaugeBoard = 0

            self.tooltipHP = 0
            self.tooltipSP = 0
            self.tooltipST = 0
            self.tooltipEXP = 0

            self.mouseImage = None

        def __OnClickQuickPageUpButton(self):
            player.SetQuickPage(player.GetQuickPage()-1)

        def __OnClickQuickPageDownButton(self):
            player.SetQuickPage(player.GetQuickPage()+1)

        def SetToggleButtonEvent(self, eButton, kEventFunc):
            self.toggleButtonDict[eButton].SetEvent(kEventFunc)

        def SetItemToolTip(self, tooltipItem):
            self.tooltipItem = tooltipItem

        def SetSkillToolTip(self, tooltipSkill):
            self.tooltipSkill = tooltipSkill
            self.curSkillButton.SetSkillToolTip(self.tooltipSkill)

        ## Mouse Image
        def ShowMouseImage(self):
            self.mouseImage.SetTop()
            self.mouseImage.Show()

        def HideMouseImage(self):
            player.SetQuickCameraMode(FALSE)
            self.mouseImage.Hide()

        ## Gauge
        def RefreshStatus(self):
            curHP = player.GetStatus(player.HP)
            maxHP = player.GetStatus(player.MAX_HP)
            curSP = player.GetStatus(player.SP)
            maxSP = player.GetStatus(player.MAX_SP)
            curEXP = unsigned32(player.GetStatus(player.EXP))
            nextEXP = unsigned32(player.GetStatus(player.NEXT_EXP))
            recoveryHP = player.GetStatus(player.HP_RECOVERY)
            recoverySP = player.GetStatus(player.SP_RECOVERY)
            
            self.RefreshStamina()

            self.SetHP(curHP, recoveryHP, maxHP)
            self.SetSP(curSP, recoverySP, maxSP)
            self.SetExperience(curEXP, nextEXP)
            
        def RefreshStamina(self):
            curST = player.GetStatus(player.STAMINA)
            maxST = player.GetStatus(player.MAX_STAMINA)
            self.SetST(curST, maxST)

        def RefreshSkill(self):
            self.curSkillButton.RefreshSkill()
            for button in self.selectSkillButtonList:
                button.RefreshSkill()

        def SetHP(self, curPoint, recoveryPoint, maxPoint):
            curPoint = min(curPoint, maxPoint)
            if maxPoint > 0:
                self.hpGauge.SetPercentage(curPoint, maxPoint)
                self.tooltipHP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_HP, curPoint, maxPoint))

                if 0 == recoveryPoint:
                    self.hpRecoveryGaugeBar.Hide()
                else:
                    destPoint = min(maxPoint, curPoint + recoveryPoint)
                    newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
                    self.hpRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
                    self.hpRecoveryGaugeBar.Show()

        def SetSP(self, curPoint, recoveryPoint, maxPoint):
            curPoint = min(curPoint, maxPoint)
            if maxPoint > 0:
                self.mpGauge.SetPercentage(curPoint, maxPoint)
                self.tooltipSP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_SP, curPoint, maxPoint))

                if 0 == recoveryPoint:
                    self.spRecoveryGaugeBar.Hide()
                else:
                    destPoint = min(maxPoint, curPoint + recoveryPoint)
                    newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
                    self.spRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
                    self.spRecoveryGaugeBar.Show()

        def SetST(self, curPoint, maxPoint):
            curPoint = min(curPoint, maxPoint)
            if maxPoint > 0:
                self.stGauge.SetPercentage(curPoint, maxPoint)
                self.tooltipST.SetText("%s : %d / %d" % (localeInfo.TASKBAR_ST, curPoint, maxPoint))

        def SetExperience(self, curPoint, maxPoint):

            curPoint = min(curPoint, maxPoint)
            curPoint = max(curPoint, 0)
            maxPoint = max(maxPoint, 0)

            quarterPoint = maxPoint / 4
            FullCount = 0

            if 0 != quarterPoint:
                FullCount = min(4, curPoint / quarterPoint)

            for i in xrange(4):
                self.expGauge.Hide()

            for i in xrange(FullCount):
                self.expGauge.SetRenderingRect(0.0, 0.0, 0.0, 0.0)
                self.expGauge.Show()

            if 0 != quarterPoint:
                if FullCount < 4:
                    Percentage = float(curPoint % quarterPoint) / quarterPoint - 1.0
                    self.expGauge[FullCount].SetRenderingRect(0.0, Percentage, 0.0, 0.0)
                    self.expGauge[FullCount].Show()

            #####
            self.tooltipEXP.SetText("%s : %.2f%%" % (localeInfo.TASKBAR_EXP, float(curPoint) / max(1, float(maxPoint)) * 100))
        
            
        ## QuickSlot
        def RefreshQuickSlot(self):

            pageNum = player.GetQuickPage()

            try:
                self.quickPageNumImageBox.LoadImage(TaskBar.QUICKPAGE_NUMBER_FILENAME[pageNum])
            except:
                pass

            startNumber = 0
            for slot in self.quickslot:

                for i in xrange(4):

                    slotNumber = i+startNumber

                    (Type, Position) = player.GetLocalQuickSlot(slotNumber)

                    if player.SLOT_TYPE_NONE == Type:
                        slot.ClearSlot(slotNumber)
                        continue

                    if player.SLOT_TYPE_INVENTORY == Type:

                        itemIndex = player.GetItemIndex(Position)
                        itemCount = player.GetItemCount(Position)
                        if itemCount <= 1:
                            itemCount = 0
                        
                        ## 자동물약 (#72723, #72724) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
                        if constInfo.IS_AUTO_POTION(itemIndex):
                            # metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
                            metinSocket = [player.GetItemMetinSocket(Position, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
                            
                            if 0 != int(metinSocket[0]):
                                slot.ActivateSlot(slotNumber)
                            else:
                                slot.DeactivateSlot(slotNumber)
                        
                        slot.SetItemSlot(slotNumber, itemIndex, itemCount)

                    elif player.SLOT_TYPE_SKILL == Type:

                        skillIndex = player.GetSkillIndex(Position)
                        if 0 == skillIndex:
                            slot.ClearSlot(slotNumber)
                            continue

                        skillType = skill.GetSkillType(skillIndex)
                        if skill.SKILL_TYPE_GUILD == skillType:
                            import guild
                            skillGrade = 0
                            skillLevel = guild.GetSkillLevel(Position)

                        else:
                            skillGrade = player.GetSkillGrade(Position)
                            skillLevel = player.GetSkillLevel(Position)

                        slot.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel)
                        slot.SetSlotCountNew(slotNumber, skillGrade, skillLevel)
                        slot.SetCoverButton(slotNumber)

                        ## NOTE : CoolTime 체크
                        if player.IsSkillCoolTime(Position):
                            (coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
                            slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)

                        ## NOTE : Activate 되어 있다면 아이콘도 업데이트
                        if player.IsSkillActive(Position):
                            slot.ActivateSlot(slotNumber)

                    elif player.SLOT_TYPE_EMOTION == Type:

                        emotionIndex = Position
                        slot.SetEmotionSlot(slotNumber, emotionIndex)
                        slot.SetCoverButton(slotNumber)
                        slot.SetSlotCount(slotNumber, 0)

                slot.RefreshSlot()
                startNumber += 4

        def canAddQuickSlot(self, Type, slotNumber):

            if player.SLOT_TYPE_INVENTORY == Type:

                itemIndex = player.GetItemIndex(slotNumber)
                return item.CanAddToQuickSlotItem(itemIndex)

            return TRUE

        def AddQuickSlot(self, localSlotIndex):
            AttachedSlotType = mouseModule.mouseController.GetAttachedType()
            AttachedSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
            AttachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()

            if player.SLOT_TYPE_QUICK_SLOT == AttachedSlotType:
                player.RequestMoveGlobalQuickSlotToLocalQuickSlot(AttachedSlotNumber, localSlotIndex)

            elif player.SLOT_TYPE_EMOTION == AttachedSlotType:

                player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedItemIndex)

            elif TRUE == self.canAddQuickSlot(AttachedSlotType, AttachedSlotNumber):

                ## Online Code
                player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedSlotNumber)
            
            mouseModule.mouseController.DeattachObject()
            self.RefreshQuickSlot()

        def SelectEmptyQuickSlot(self, slotIndex):

            if TRUE == mouseModule.mouseController.isAttached():
                self.AddQuickSlot(slotIndex)

        def SelectItemQuickSlot(self, localQuickSlotIndex):

            if TRUE == mouseModule.mouseController.isAttached():
                self.AddQuickSlot(localQuickSlotIndex)

            else:
                globalQuickSlotIndex=player.LocalQuickSlotIndexToGlobalQuickSlotIndex(localQuickSlotIndex)
                mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_QUICK_SLOT, globalQuickSlotIndex, globalQuickSlotIndex)

        def UnselectItemQuickSlot(self, localSlotIndex):

            if FALSE == mouseModule.mouseController.isAttached():
                player.RequestUseLocalQuickSlot(localSlotIndex)
                return

            elif mouseModule.mouseController.isAttached():
                mouseModule.mouseController.DeattachObject()
                return


        def OnUseSkill(self, usedSlotIndex, coolTime):

            QUICK_SLOT_SLOT_COUNT = 4
            slotIndex = 0

            ## Current Skill Button
            if usedSlotIndex == self.curSkillButton.GetSlotIndex():
                self.curSkillButton.Activate(coolTime)

            ## Quick Slot
            for slotWindow in self.quickslot:

                for i in xrange(QUICK_SLOT_SLOT_COUNT):

                    (Type, Position) = player.GetLocalQuickSlot(slotIndex)

                    if Type == player.SLOT_TYPE_SKILL:
                        if usedSlotIndex == Position:
                            slotWindow.SetSlotCoolTime(slotIndex, coolTime)
                            return

                    slotIndex += 1

        def OnActivateSkill(self, usedSlotIndex):
            slotIndex = 0

            ## Current Skill Button
            if usedSlotIndex == self.curSkillButton.GetSlotIndex():
                self.curSkillButton.Deactivate()

            ## Quick Slot
            for slotWindow in self.quickslot:

                for i in xrange(4):

                    (Type, Position) = player.GetLocalQuickSlot(slotIndex)

                    if Type == player.SLOT_TYPE_SKILL:
                        if usedSlotIndex == Position:
                            slotWindow.ActivateSlot(slotIndex)
                            return

                    slotIndex += 1

        def OnDeactivateSkill(self, usedSlotIndex):
            slotIndex = 0

            ## Current Skill Button
            if usedSlotIndex == self.curSkillButton.GetSlotIndex():
                self.curSkillButton.Deactivate()

            ## Quick Slot
            for slotWindow in self.quickslot:

                for i in xrange(4):

                    (Type, Position) = player.GetLocalQuickSlot(slotIndex)

                    if Type == player.SLOT_TYPE_SKILL:
                        if usedSlotIndex == Position:
                            slotWindow.DeactivateSlot(slotIndex)
                            return

                    slotIndex += 1

        ## ToolTip
        def OverInItem(self, slotNumber):
            if mouseModule.mouseController.isAttached():
                return

            (Type, Position) = player.GetLocalQuickSlot(slotNumber)

            if player.SLOT_TYPE_INVENTORY == Type:
                self.tooltipItem.SetInventoryItem(Position)
                self.tooltipSkill.HideToolTip()

            elif player.SLOT_TYPE_SKILL == Type:

                skillIndex = player.GetSkillIndex(Position)
                skillType = skill.GetSkillType(skillIndex)

                if skill.SKILL_TYPE_GUILD == skillType:
                    import guild
                    skillGrade = 0
                    skillLevel = guild.GetSkillLevel(Position)

                else:
                    skillGrade = player.GetSkillGrade(Position)
                    skillLevel = player.GetSkillLevel(Position)

                self.tooltipSkill.SetSkillNew(Position, skillIndex, skillGrade, skillLevel)
                self.tooltipItem.HideToolTip()

        def OverOutItem(self):
            if 0 != self.tooltipItem:
                self.tooltipItem.HideToolTip()
            if 0 != self.tooltipSkill:
                self.tooltipSkill.HideToolTip()

        def OnUpdate(self):
            if app.GetGlobalTime() - self.lastUpdateQuickSlot > 500:
                self.lastUpdateQuickSlot = app.GetGlobalTime()
                self.RefreshQuickSlot()

            if TRUE == self.hpGaugeBoard.IsIn():
                self.tooltipHP.Show()
            else:
                self.tooltipHP.Hide()

            if TRUE == self.mpGaugeBoard.IsIn():
                self.tooltipSP.Show()
            else:
                self.tooltipSP.Hide()

            if TRUE == self.stGaugeBoard.IsIn():
                self.tooltipST.Show()
            else:
                self.tooltipST.Hide()
            
            if TRUE == self.expGaugeBoard.IsIn():
                self.tooltipEXP.Show()
            else:
                self.tooltipEXP.Hide()
            
        ## Skill
        def ToggleLeftMouseButtonModeWindow(self):

            wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT]

            if TRUE == wndMouseButtonMode.IsShow():

                wndMouseButtonMode.Hide()

            else:
                wndMouseButtonMode.Show()

        def ToggleRightMouseButtonModeWindow(self):

            wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT]

            if TRUE == wndMouseButtonMode.IsShow():

                wndMouseButtonMode.Hide()
                self.CloseSelectSkill()

            else:
                wndMouseButtonMode.Show()
                self.OpenSelectSkill()

        def OpenSelectSkill(self):

            PAGE_SLOT_COUNT = 6

            (xSkillButton, y) = self.curSkillButton.GetGlobalPosition()
            y -= (37 + 32 + 1)

            for key in self.skillCategoryNameList:

                appendCount = 0
                startNumber = self.skillPageStartSlotIndexDict[key]
                x = xSkillButton

                getSkillIndex=player.GetSkillIndex
                getSkillLevel=player.GetSkillLevel
                for i in xrange(PAGE_SLOT_COUNT):

                    skillIndex = getSkillIndex(startNumber+i)
                    skillLevel = getSkillLevel(startNumber+i)

                    if 0 == skillIndex:
                        continue
                    if 0 == skillLevel:
                        continue
                    if skill.IsStandingSkill(skillIndex):
                        continue

                    ## FIXME : 스킬 하나당 슬롯 하나씩 할당하는건 아무리 봐도 부하가 크다.
                    ##         이 부분은 시간을 나면 고치도록. - [levites]
                    skillButton = self.SkillButton()
                    skillButton.SetSkill(startNumber+i)
                    skillButton.SetPosition(x, y)
                    skillButton.SetSkillEvent(ui.__mem_func__(self.CloseSelectSkill), startNumber+i+1)
                    skillButton.SetSkillToolTip(self.tooltipSkill)
                    skillButton.SetTop()
                    skillButton.Show()
                    self.selectSkillButtonList.append(skillButton)

                    appendCount += 1
                    x -= 32

                if appendCount > 0:
                    y -= 32

        def CloseSelectSkill(self, slotIndex=-1):

            self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT].Hide()
            for button in self.selectSkillButtonList:
                button.Destroy()

            self.selectSkillButtonList = []

            if -1 != slotIndex:
                self.curSkillButton.Show()
                self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide()
                player.SetMouseFunc(player.MBT_RIGHT, player.MBF_SKILL)
                player.ChangeCurrentSkillNumberOnly(slotIndex-1)
            else:
                self.curSkillButton.Hide()
                self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Show()

        def SelectMouseButtonEvent(self, dir, event):
            SetMouseButtonSetting(dir, event)

            self.CloseSelectSkill()
            self.mouseModeButtonList[dir].Hide()

            btn = 0
            type = self.NONE
            func = self.NONE
            tooltip_text = ""        
            
            if self.MOUSE_BUTTON_LEFT == dir:
                type = player.MBT_LEFT

            elif self.MOUSE_BUTTON_RIGHT == dir:
                type = player.MBT_RIGHT

            if self.EVENT_MOVE == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_move")
                func = player.MBF_MOVE
                tooltip_text = localeInfo.TASKBAR_MOVE
            elif self.EVENT_ATTACK == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_attack")
                func = player.MBF_ATTACK
                tooltip_text = localeInfo.TASKBAR_ATTACK
            elif self.EVENT_AUTO == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_auto_attack")
                func = player.MBF_AUTO
                tooltip_text = localeInfo.TASKBAR_AUTO
            elif self.EVENT_MOVE_AND_ATTACK == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_move_and_attack")
                func = player.MBF_SMART
                tooltip_text = localeInfo.TASKBAR_ATTACK
            elif self.EVENT_CAMERA == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_camera")
                func = player.MBF_CAMERA
                tooltip_text = localeInfo.TASKBAR_CAMERA
            elif self.EVENT_SKILL == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_skill")
                func = player.MBF_SKILL
                tooltip_text = localeInfo.TASKBAR_SKILL

            if 0 != btn:
                self.curMouseModeButton[dir].SetToolTipText(tooltip_text, 0, -18)
                self.curMouseModeButton[dir].SetUpVisual(btn.GetUpVisualFileName())
                self.curMouseModeButton[dir].SetOverVisual(btn.GetOverVisualFileName())
                self.curMouseModeButton[dir].SetDownVisual(btn.GetDownVisualFileName())
                self.curMouseModeButton[dir].Show()

            player.SetMouseFunc(type, func)

        def OnChangeCurrentSkill(self, skillSlotNumber):
            self.curSkillButton.SetSkill(skillSlotNumber)
            self.curSkillButton.Show()
            self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide()

  8. taskbar.py

     

    import uiScriptLocale
    import app

    ROOT = "d:/ymir work/ui/game/"

    #Y_ADD_POSITION = -2
    Y_ADD_POSITION = 0

    window = {
        "name" : "TaskBar",

        "x" : 0,
        "y" : SCREEN_HEIGHT - 37,

        "width" : SCREEN_WIDTH,
        "height" : 37,

        "children" :
        (
            ## Board
            {
                "name" : "Base_Board_01",
                "type" : "expanded_image",

                "x" : 263,
                "y" : 0,

                "rect" : (0.0, 0.0, float(SCREEN_WIDTH - 263 - 256) / 256.0, 0.0),

                "image" : "d:/ymir work/ui/pattern/TaskBar_Base.tga"
            },

            ## Gauge
            {
                "name" : "Gauge_Board",
                "type" : "image",

                "x" : 0,
                "y" : -10 + Y_ADD_POSITION,

                "image" : ROOT + "taskbar/gauge.sub",

                "children" :
                (
                    {
                        "name" : "RampageGauge",
                        "type" : "ani_image",

                        "x" : 8,
                        "y" : 4,
                        "width"  : 40,
                        "height" : 40,

                        "delay" : 6,

                        "images" :
                        (
                            "locale/tr/ui/Mall/00.sub",
                            "locale/tr/ui/Mall/01.sub",
                            "locale/tr/ui/Mall/02.sub",
                            "locale/tr/ui/Mall/03.sub",
                            "locale/tr/ui/Mall/04.sub",
                            "locale/tr/ui/Mall/05.sub",
                            "locale/tr/ui/Mall/06.sub",
                            "locale/tr/ui/Mall/07.sub",
                            "locale/tr/ui/Mall/08.sub",
                            "locale/tr/ui/Mall/09.sub",
                            "locale/tr/ui/Mall/11.sub",
                            "locale/tr/ui/Mall/12.sub",
                            "locale/tr/ui/Mall/13.sub",
                            "locale/tr/ui/Mall/14.sub",
                            "locale/tr/ui/Mall/15.sub",
                            "locale/tr/ui/Mall/16.sub",
                        )
                    },
                    {
                        "name" : "RampageGauge2",
                        "type" : "ani_image",

                        "x" : 8,
                        "y" : 4,
                        "width"  : 40,
                        "height" : 40,

                        "delay" : 6,

                        "images" :
                        (
                            "locale/tr/ui/Mall/00.sub",
                            "locale/tr/ui/Mall/01.sub",
                            "locale/tr/ui/Mall/02.sub",
                            "locale/tr/ui/Mall/03.sub",
                            "locale/tr/ui/Mall/04.sub",
                            "locale/tr/ui/Mall/05.sub",
                            "locale/tr/ui/Mall/06.sub",
                            "locale/tr/ui/Mall/07.sub",
                            "locale/tr/ui/Mall/08.sub",
                            "locale/tr/ui/Mall/09.sub",
                            "locale/tr/ui/Mall/11.sub",
                            "locale/tr/ui/Mall/12.sub",
                            "locale/tr/ui/Mall/13.sub",
                            "locale/tr/ui/Mall/14.sub",
                            "locale/tr/ui/Mall/15.sub",
                            "locale/tr/ui/Mall/16.sub",
                        )
                    },
                    {
                        ## 툴팁을 띄우기 위한 윈도우
                        "name" : "HPGauge_Board",
                        "type" : "window",

                        "x" : 59,
                        "y" : 14,

                        "width" : 95,
                        "height" : 11,

                        "children" :
                        (
                            {
                                "name" : "HPRecoveryGaugeBar",
                                "type" : "bar",

                                "x" : 0,
                                "y" : 0,
                                "width" : 95,
                                "height" : 13,
                                "color" : 0x55ff0000,
                            },
                            {
                                "name" : "HPGauge",
                                "type" : "ani_image",

                                "x" : 0,
                                "y" : 0,

                                "delay" : 6,

                                "images" :
                                (
                                    "D:/Ymir Work/UI/Pattern/HPGauge/01.tga",
                                    "D:/Ymir Work/UI/Pattern/HPGauge/02.tga",
                                    "D:/Ymir Work/UI/Pattern/HPGauge/03.tga",
                                    "D:/Ymir Work/UI/Pattern/HPGauge/04.tga",
                                    "D:/Ymir Work/UI/Pattern/HPGauge/05.tga",
                                    "D:/Ymir Work/UI/Pattern/HPGauge/06.tga",
                                    "D:/Ymir Work/UI/Pattern/HPGauge/07.tga",
                                ),
                            },
                        ),
                    },
                    {
                        ## 툴팁을 띄우기 위한 윈도우
                        "name" : "SPGauge_Board",
                        "type" : "window",

                        "x" : 59,
                        "y" : 24,

                        "width" : 95,
                        "height" : 11,

                        "children" :
                        (
                            {
                                "name" : "SPRecoveryGaugeBar",
                                "type" : "bar",

                                "x" : 0,
                                "y" : 0,
                                "width" : 95,
                                "height" : 13,
                                "color" : 0x550000ff,
                            },
                            {
                                "name" : "SPGauge",
                                "type" : "ani_image",

                                "x" : 0,
                                "y" : 0,

                                "delay" : 6,

                                "images" :
                                (
                                    "D:/Ymir Work/UI/Pattern/SPGauge/01.tga",
                                    "D:/Ymir Work/UI/Pattern/SPGauge/02.tga",
                                    "D:/Ymir Work/UI/Pattern/SPGauge/03.tga",
                                    "D:/Ymir Work/UI/Pattern/SPGauge/04.tga",
                                    "D:/Ymir Work/UI/Pattern/SPGauge/05.tga",
                                    "D:/Ymir Work/UI/Pattern/SPGauge/06.tga",
                                    "D:/Ymir Work/UI/Pattern/SPGauge/07.tga",
                                ),
                            },
                        ),
                    },
                    {
                        ## 툴팁을 띄우기 위한 윈도우
                        "name" : "STGauge_Board",
                        "type" : "window",

                        "x" : 59,
                        "y" : 38,

                        "width" : 95,
                        "height" : 6,

                        "children" :
                        (
                            {
                                "name" : "STGauge",
                                "type" : "ani_image",

                                "x" : 0,
                                "y" : 0,

                                "delay" : 6,

                                "images" :
                                (
                                    "D:/Ymir Work/UI/Pattern/STGauge/01.tga",
                                    "D:/Ymir Work/UI/Pattern/STGauge/02.tga",
                                    "D:/Ymir Work/UI/Pattern/STGauge/03.tga",
                                    "D:/Ymir Work/UI/Pattern/STGauge/04.tga",
                                    "D:/Ymir Work/UI/Pattern/STGauge/05.tga",
                                    "D:/Ymir Work/UI/Pattern/STGauge/06.tga",
                                    "D:/Ymir Work/UI/Pattern/STGauge/07.tga",
                                ),
                            },
                        ),
                    },

                ),
            },
            {
                "name" : "EXP_Gauge_Board",
                "type" : "image",

                "x" : 158,
                "y" : 0 + Y_ADD_POSITION,

                "image" : ROOT + "taskbar/exp_gauge.sub",

                "children" :
                (
                    {
                        "name" : "EXPGauge_01",
                        "type" : "expanded_image",

                        "x" : 5,
                        "y" : 9,

                        "image" : ROOT + "TaskBar/EXP_Gauge_Point.sub",
                    },
                    {
                        "name" : "EXPGauge_02",
                        "type" : "expanded_image",

                        "x" : 30,
                        "y" : 9,

                        "image" : ROOT + "TaskBar/EXP_Gauge_Point.sub",
                    },
                    {
                        "name" : "EXPGauge_03",
                        "type" : "expanded_image",

                        "x" : 55,
                        "y" : 9,

                        "image" : ROOT + "TaskBar/EXP_Gauge_Point.sub",
                    },
                    {
                        "name" : "EXPGauge_04",
                        "type" : "expanded_image",

                        "x" : 80,
                        "y" : 9,

                        "image" : ROOT + "TaskBar/EXP_Gauge_Point.sub",
                    },
                ),
            },

            ## Mouse Button
            {
                "name" : "LeftMouseButton",
                "type" : "button",

                "x" : SCREEN_WIDTH/2 - 128,
                "y" : 3 + Y_ADD_POSITION,

                "default_image" : ROOT + "TaskBar/Mouse_Button_Move_01.sub",
                "over_image" : ROOT + "TaskBar/Mouse_Button_Move_02.sub",
                "down_image" : ROOT + "TaskBar/Mouse_Button_Move_03.sub",
            },
            {
                "name" : "RightMouseButton",
                "type" : "button",

                "x" : SCREEN_WIDTH/2 + 128 + 66 + 11,
                "y" : 3 + Y_ADD_POSITION,

                "default_image" : ROOT + "TaskBar/Mouse_Button_Move_01.sub",
                "over_image" : ROOT + "TaskBar/Mouse_Button_Move_02.sub",
                "down_image" : ROOT + "TaskBar/Mouse_Button_Move_03.sub",
            },

            ## Button
            {
                "name" : "CharacterButton",
                "type" : "button",

                "x" : SCREEN_WIDTH - 144,
                "y" : 3 + Y_ADD_POSITION,

                "tooltip_text" : uiScriptLocale.TASKBAR_CHARACTER,

                "default_image" : ROOT + "TaskBar/Character_Button_01.sub",
                "over_image" : ROOT + "TaskBar/Character_Button_02.sub",
                "down_image" : ROOT + "TaskBar/Character_Button_03.sub",
            },
            {
                "name" : "InventoryButton",
                "type" : "button",

                "x" : SCREEN_WIDTH - 110,
                "y" : 3 + Y_ADD_POSITION,

                "tooltip_text" : uiScriptLocale.TASKBAR_INVENTORY,

                "default_image" : ROOT + "TaskBar/Inventory_Button_01.sub",
                "over_image" : ROOT + "TaskBar/Inventory_Button_02.sub",
                "down_image" : ROOT + "TaskBar/Inventory_Button_03.sub",
            },
            {
                "name" : "VectorsEfsunButton",
                "type" : "button",

                "x" : SCREEN_WIDTH - 178,
                "y" : 3 + Y_ADD_POSITION,

                "tooltip_text" : "Efsun Botu",

                "default_image" : "d:/ymir work/ui/Vectorsefs1.tga",
                "over_image" : "d:/ymir work/ui/Vectorsefs2.tga",
                "down_image" : "d:/ymir work/ui/Vectorsefs1.tga",
            },
            {
                "name" : "MessengerButton",
                "type" : "button",

                "x" : SCREEN_WIDTH - 76,
                "y" : 3 + Y_ADD_POSITION,

                "tooltip_text" : uiScriptLocale.TASKBAR_MESSENGER,

                "default_image" : ROOT + "TaskBar/Community_Button_01.sub",
                "over_image" : ROOT + "TaskBar/Community_Button_02.sub",
                "down_image" : ROOT + "TaskBar/Community_Button_03.sub",
            },
            {
                "name" : "SystemButton",
                "type" : "button",

                "x" : SCREEN_WIDTH - 42,
                "y" : 3 + Y_ADD_POSITION,

                "tooltip_text" : uiScriptLocale.TASKBAR_SYSTEM,

                "default_image" : ROOT + "TaskBar/System_Button_01.sub",
                "over_image" : ROOT + "TaskBar/System_Button_02.sub",
                "down_image" : ROOT + "TaskBar/System_Button_03.sub",
            },

            ## QuickBar
            {
                "name" : "quickslot_board",
                "type" : "window",

                "x" : SCREEN_WIDTH/2 - 128 + 32 + 10,
                "y" : 0 + Y_ADD_POSITION,

                "width" : 256 + 14 + 2 + 11,
                "height" : 37,

                "children" :
                (
                    {
                        # ExpandButton은 기존에 ChatButton이었으나, ChatButton의 효용성이 적다 판단하여
                        # ExpandButton으로 바뀐 것이다.
                        "name" : "ExpandButton",
                        "type" : "button",

                        "x" : 128,
                        "y" : 1,
                        "tooltip_text" : uiScriptLocale.TASKBAR_EXPAND,
                        
                        
                        "default_image" : ROOT + "TaskBar/Chat_Button_01.sub",
                        "over_image" : ROOT + "TaskBar/Chat_Button_02.sub",
                        "down_image" : ROOT + "TaskBar/Chat_Button_03.sub",
                    },
                    {
                        "name" : "quick_slot_1",
                        "type" : "grid_table",

                        "start_index" : 0,

                        "x" : 0,
                        "y" : 3,

                        "x_count" : 4,
                        "y_count" : 1,
                        "x_step" : 32,
                        "y_step" : 32,

                        "image" : "d:/ymir work/ui/Public/Slot_Base.sub",
                        "image_r" : 1.0,
                        "image_g" : 1.0,
                        "image_b" : 1.0,
                        "image_a" : 1.0,

                        "children" :
                        (
                            { "name" : "slot_1", "type" : "image", "x" : 3, "y" : 3, "image" : "d:/ymir work/ui/game/taskbar/1.sub", },
                            { "name" : "slot_2", "type" : "image", "x" : 35, "y" : 3, "image" : "d:/ymir work/ui/game/taskbar/2.sub", },
                            { "name" : "slot_3", "type" : "image", "x" : 67, "y" : 3, "image" : "d:/ymir work/ui/game/taskbar/3.sub", },
                            { "name" : "slot_4", "type" : "image", "x" : 99, "y" : 3, "image" : "d:/ymir work/ui/game/taskbar/4.sub", },
                        ),
                    },
                    {
                        "name" : "quick_slot_2",
                        "type" : "grid_table",

                        "start_index" : 4,

                        "x" : 128 + 14,
                        "y" : 3,

                        "x_count" : 4,
                        "y_count" : 1,
                        "x_step" : 32,
                        "y_step" : 32,

                        "image" : "d:/ymir work/ui/Public/Slot_Base.sub",
                        "image_r" : 1.0,
                        "image_g" : 1.0,
                        "image_b" : 1.0,
                        "image_a" : 1.0,

                        "children" :
                        (
                            { "name" : "slot_5", "type" : "image", "x" : 3, "y" : 3, "image" : "d:/ymir work/ui/game/taskbar/f1.sub", },
                            { "name" : "slot_6", "type" : "image", "x" : 35, "y" : 3, "image" : "d:/ymir work/ui/game/taskbar/f2.sub", },
                            { "name" : "slot_7", "type" : "image", "x" : 67, "y" : 3, "image" : "d:/ymir work/ui/game/taskbar/f3.sub", },
                            { "name" : "slot_8", "type" : "image", "x" : 99, "y" : 3, "image" : "d:/ymir work/ui/game/taskbar/f4.sub", },
                        ),
                    },
                    {
                        "name" : "QuickSlotBoard",
                        "type" : "window",

                        "x" : 128+14+128+2,
                        "y" : 0,
                        "width" : 11,
                        "height" : 37,
                        "children" :
                        (
                            {
                                "name" : "QuickSlotNumberBox",
                                "type" : "image",                            
                                "x" : 1,
                                "y" : 15,
                                "image" : ROOT + "taskbar/QuickSlot_Button_Board.sub",
                            },
                            {
                                "name" : "QuickPageUpButton",
                                "type" : "button",
                                "tooltip_text" : uiScriptLocale.TASKBAR_PREV_QUICKSLOT,
                                "x" : 1,
                                "y" : 9,
                                "default_image" : ROOT + "TaskBar/QuickSlot_UpButton_01.sub",
                                "over_image" : ROOT + "TaskBar/QuickSlot_UpButton_02.sub",
                                "down_image" : ROOT + "TaskBar/QuickSlot_UpButton_03.sub",
                            },

                            { 
                                "name" : "QuickPageNumber", 
                                "type" : "image",                             
                                "x" : 3, "y" : 15, "image" : "d:/ymir work/ui/game/taskbar/1.sub", 
                            },
                            {
                                "name" : "QuickPageDownButton",
                                "type" : "button",
                                "tooltip_text" : uiScriptLocale.TASKBAR_NEXT_QUICKSLOT,

                                "x" : 1,
                                "y" : 24,

                                "default_image" : ROOT + "TaskBar/QuickSlot_DownButton_01.sub",
                                "over_image" : ROOT + "TaskBar/QuickSlot_DownButton_02.sub",
                                "down_image" : ROOT + "TaskBar/QuickSlot_DownButton_03.sub",
                            },
        
                        ),
                    },
                ),
            },

        ),
    }
     

    uitaskbar.py

     

    import ui
    import net
    import item
    import skill
    import localeInfo
    import wndMgr
    import player
    import constInfo
    import mouseModule
    import uiScriptLocale
    import app

    MOUSE_SETTINGS = [0, 0]

    def InitMouseButtonSettings(left, right):
        global MOUSE_SETTINGS
        MOUSE_SETTINGS = [left, right]

    def SetMouseButtonSetting(dir, event):
        global MOUSE_SETTINGS
        MOUSE_SETTINGS[dir] = event
        
    def GetMouseButtonSettings():
        global MOUSE_SETTINGS
        return MOUSE_SETTINGS

    def SaveMouseButtonSettings():
        global MOUSE_SETTINGS
        open("mouse.cfg", "w").write("%s\t%s" % tuple(MOUSE_SETTINGS))

    def LoadMouseButtonSettings():
        global MOUSE_SETTINGS
        tokens = open("mouse.cfg", "r").read().split()

        if len(tokens) != 2:
            raise RuntimeError, "MOUSE_SETTINGS_FILE_ERROR"

        MOUSE_SETTINGS[0] = int(tokens[0])
        MOUSE_SETTINGS[1] = int(tokens[1])

    def unsigned32(n):
        return n & 0xFFFFFFFFL

    #-------------------Giftbox Begin------------------------------

    class GiftBox(ui.ScriptWindow):
        class TextToolTip(ui.Window):
            def __init__(self):
                ui.Window.__init__(self, "TOP_MOST")
                self.SetWindowName("GiftBox")
                textLine = ui.TextLine()
                textLine.SetParent(self)
                textLine.SetHorizontalAlignCenter()
                textLine.SetOutline()
                textLine.Show()
                self.textLine = textLine

            def __del__(self):
                ui.Window.__del__(self)

            def SetText(self, text):
                self.textLine.SetText(text)

            def OnRender(self):
                (mouseX, mouseY) = wndMgr.GetMousePosition()
                self.textLine.SetPosition(mouseX, mouseY - 15)

        def __init__(self):
            #print "NEW TASKBAR  ----------------------------------------------------------------------------"
            ui.ScriptWindow.__init__(self)
            self.tooltipGift = self.TextToolTip()
            self.tooltipGift.Show()
            
        def __del__(self):
            #print "---------------------------------------------------------------------------- DELETE TASKBAR"
            ui.ScriptWindow.__del__(self)

        def LoadWindow(self):
            try:
                pyScrLoader = ui.PythonScriptLoader()
                pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "giftbox.py")
            except:
                import exception
                exception.Abort("GiftBox.LoadWindow.LoadObject")        

            self.giftBoxIcon = self.GetChild("GiftBox_Icon")
            self.giftBoxToolTip = self.GetChild("GiftBox_ToolTip")
        
        def Destroy(self):        
            self.giftBoxIcon = 0
            self.giftBoxToolTip = 0        
                
    #-------------------Giftbox End------------------------------

    class EnergyBar(ui.ScriptWindow):
        class TextToolTip(ui.Window):
            def __init__(self):
                ui.Window.__init__(self, "TOP_MOST")
                self.SetWindowName("EnergyBar")
                textLine = ui.TextLine()
                textLine.SetParent(self)
                textLine.SetHorizontalAlignCenter()
                textLine.SetOutline()
                textLine.Show()
                self.textLine = textLine

            def __del__(self):
                ui.Window.__del__(self)

            def SetText(self, text):
                self.textLine.SetText(text)

            def OnRender(self):
                (mouseX, mouseY) = wndMgr.GetMousePosition()
                self.textLine.SetPosition(mouseX, mouseY - 15)

        def __init__(self):
            #print "NEW TASKBAR  ----------------------------------------------------------------------------"
            ui.ScriptWindow.__init__(self)
            self.tooltipEnergy = self.TextToolTip()
            self.tooltipEnergy.Show()
            
        def __del__(self):
            #print "---------------------------------------------------------------------------- DELETE TASKBAR"
            ui.ScriptWindow.__del__(self)

        def LoadWindow(self):
            try:
                pyScrLoader = ui.PythonScriptLoader()
                pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "EnergyBar.py")
            except:
                import exception
                exception.Abort("EnergyBar.LoadWindow.LoadObject")

            self.energyEmpty = self.GetChild("EnergyGauge_Empty")
            self.energyHungry = self.GetChild("EnergyGauge_Hungry")
            self.energyFull = self.GetChild("EnergyGauge_Full")

            self.energyGaugeBoard = self.GetChild("EnergyGauge_Board")
            self.energyGaugeToolTip = self.GetChild("EnergyGauge_ToolTip")

            
        def Destroy(self):        
            self.energyEmpty = None
            self.energyHungry = None
            self.energyFull = None
            self.energyGaugeBoard = 0
            self.energyGaugeToolTip = 0
            self.tooltipEnergy = 0

        ## Gauge
        def RefreshStatus(self):
            pointEnergy = player.GetStatus (player.ENERGY)
            leftTimeEnergy = player.GetStatus (player.ENERGY_END_TIME) - app.GetGlobalTimeStamp()
            # 충기환 지속 시간 = 2시간.
            self.SetEnergy (pointEnergy, leftTimeEnergy, 7200)
                
        def SetEnergy (self, point, leftTime, maxTime):
            leftTime = max (leftTime, 0)
            maxTime = max (maxTime, 0)
                
            self.energyEmpty.Hide()
            self.energyHungry.Hide()
            self.energyFull.Hide()
        
            if leftTime == 0:
                self.energyEmpty.Show()
            elif ((leftTime * 100) / maxTime) < 15:
                self.energyHungry.Show()
            else:
                self.energyFull.Show()
                
            self.tooltipEnergy.SetText("%s" % (localeInfo.TOOLTIP_ENERGY(point)))

        def OnUpdate(self):
            if TRUE == self.energyGaugeToolTip.IsIn():
                self.RefreshStatus()
                self.tooltipEnergy.Show()
            else:
                self.tooltipEnergy.Hide()

    class ExpandedTaskBar(ui.ScriptWindow):
        BUTTON_DRAGON_SOUL = 0
        def __init__(self):
            ui.Window.__init__(self)
            self.SetWindowName("ExpandedTaskBar")
        
        def LoadWindow(self):
            try:
                pyScrLoader = ui.PythonScriptLoader()
                pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "ExpandedTaskBar.py")
            except:
                import exception
                exception.Abort("ExpandedTaskBar.LoadWindow.LoadObject")

            self.expandedTaskBarBoard = self.GetChild("ExpanedTaskBar_Board")

            self.toggleButtonDict = {}
            self.toggleButtonDict[ExpandedTaskBar.BUTTON_DRAGON_SOUL] = self.GetChild("DragonSoulButton")
            self.toggleButtonDict[ExpandedTaskBar.BUTTON_DRAGON_SOUL].SetParent(self)
        
        def SetTop(self):
            super(ExpandedTaskBar, self).SetTop()    
            for button in self.toggleButtonDict.values():
                button.SetTop()
        
        def Show(self):
            ui.ScriptWindow.Show(self)
        
        def Close(self):
            self.Hide()
        
        def SetToolTipText(self, eButton, text):
            self.toggleButtonDict[eButton].SetToolTipText(text)
            
        def SetToggleButtonEvent(self, eButton, kEventFunc):
            self.toggleButtonDict[eButton].SetEvent(kEventFunc)

        def OnPressEscapeKey(self):
            self.Close()
            return TRUE
        
    class TaskBar(ui.ScriptWindow):

        BUTTON_CHARACTER = 0
        BUTTON_INVENTORY = 1
        BUTTON_MESSENGER = 2
        BUTTON_SYSTEM = 3
        BUTTON_CHAT = 4
        BUTTON_VECTORS = 5
        BUTTON_EXPAND = 4
        IS_EXPANDED = FALSE

        MOUSE_BUTTON_LEFT = 0
        MOUSE_BUTTON_RIGHT = 1
        NONE = 255

        EVENT_MOVE = 0
        EVENT_ATTACK = 1
        EVENT_MOVE_AND_ATTACK = 2
        EVENT_CAMERA = 3
        EVENT_SKILL = 4
        EVENT_AUTO = 5

        GAUGE_WIDTH = 95
        GAUGE_HEIGHT = 13

        QUICKPAGE_NUMBER_FILENAME = [
            "d:/ymir work/ui/game/taskbar/1.sub",
            "d:/ymir work/ui/game/taskbar/2.sub",
            "d:/ymir work/ui/game/taskbar/3.sub",
            "d:/ymir work/ui/game/taskbar/4.sub",
        ]

        #gift icon show and hide
        def ShowGift(self):
            if not localeInfo.IsBRAZIL():
                self.wndGiftBox.Show()
        
        def HideGift(self):
            self.wndGiftBox.Hide()

        class TextToolTip(ui.Window):
            def __init__(self):
                ui.Window.__init__(self, "TOP_MOST")

                textLine = ui.TextLine()
                textLine.SetParent(self)
                textLine.SetHorizontalAlignCenter()
                textLine.SetOutline()
                textLine.Show()
                self.textLine = textLine

            def __del__(self):
                ui.Window.__del__(self)

            def SetText(self, text):
                self.textLine.SetText(text)

            def OnRender(self):
                (mouseX, mouseY) = wndMgr.GetMousePosition()
                self.textLine.SetPosition(mouseX, mouseY - 15)

        class SkillButton(ui.SlotWindow):

            def __init__(self):
                ui.SlotWindow.__init__(self)

                self.event = 0
                self.arg = 0

                self.slotIndex = 0
                self.skillIndex = 0

                slotIndex = 0
                wndMgr.SetSlotBaseImage(self.hWnd, "d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0)
                wndMgr.AppendSlot(self.hWnd, slotIndex, 0, 0, 32, 32)
                self.SetCoverButton(slotIndex,    "d:/ymir work/ui/public/slot_cover_button_01.sub",\
                                                "d:/ymir work/ui/public/slot_cover_button_02.sub",\
                                                "d:/ymir work/ui/public/slot_cover_button_03.sub",\
                                                "d:/ymir work/ui/public/slot_cover_button_04.sub", TRUE, FALSE)
                self.SetSize(32, 32)

            def __del__(self):
                ui.SlotWindow.__del__(self)

            def Destroy(self):
                if 0 != self.tooltipSkill:
                    self.tooltipSkill.HideToolTip()

            def RefreshSkill(self):
                if 0 != self.slotIndex:
                    self.SetSkill(self.slotIndex)

            def SetSkillToolTip(self, tooltip):
                self.tooltipSkill = tooltip

            def SetSkill(self, skillSlotNumber):
                slotNumber = 0
                skillIndex = player.GetSkillIndex(skillSlotNumber)
                skillGrade = player.GetSkillGrade(skillSlotNumber)
                skillLevel = player.GetSkillLevel(skillSlotNumber)
                skillType = skill.GetSkillType(skillIndex)

                self.skillIndex = skillIndex
                if 0 == self.skillIndex:
                    self.ClearSlot(slotNumber)
                    return

                self.slotIndex = skillSlotNumber

                self.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel)
                self.SetSlotCountNew(slotNumber, skillGrade, skillLevel)

                ## NOTE : CoolTime 체크
                if player.IsSkillCoolTime(skillSlotNumber):
                    (coolTime, elapsedTime) = player.GetSkillCoolTime(skillSlotNumber)
                    self.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)

                ## NOTE : Activate 되어 있다면 아이콘도 업데이트
                if player.IsSkillActive(skillSlotNumber):
                    self.ActivateSlot(slotNumber)

            def SetSkillEvent(self, event, arg=0):
                self.event = event
                self.arg = arg

            def GetSkillIndex(self):
                return self.skillIndex

            def GetSlotIndex(self):
                return self.slotIndex

            def Activate(self, coolTime):
                self.SetSlotCoolTime(0, coolTime)

                if skill.IsToggleSkill(self.skillIndex):
                    self.ActivateSlot(0)

            def Deactivate(self):
                if skill.IsToggleSkill(self.skillIndex):
                    self.DeactivateSlot(0)

            def OnOverInItem(self, dummy):
                self.tooltipSkill.SetSkill(self.skillIndex)

            def OnOverOutItem(self):
                self.tooltipSkill.HideToolTip()

            def OnSelectItemSlot(self, dummy):
                if 0 != self.event:
                    if 0 != self.arg:
                        self.event(self.arg)
                    else:
                        self.event()

        def __init__(self):
            #print "NEW TASKBAR  ----------------------------------------------------------------------------"

            ui.ScriptWindow.__init__(self, "TOP_MOST")

            self.quickPageNumImageBox = None
            self.tooltipItem = 0
            self.tooltipSkill = 0
            self.mouseModeButtonList = [ ui.ScriptWindow("TOP_MOST"), ui.ScriptWindow("TOP_MOST") ]

            self.tooltipHP = self.TextToolTip()
            self.tooltipHP.Show()
            self.tooltipSP = self.TextToolTip()
            self.tooltipSP.Show()
            self.tooltipST = self.TextToolTip()
            self.tooltipST.Show()
            self.tooltipEXP = self.TextToolTip()
            self.tooltipEXP.Show()
            
            self.skillCategoryNameList = [ "ACTIVE_1", "ACTIVE_2", "ACTIVE_3" ]
            self.skillPageStartSlotIndexDict = {
                "ACTIVE_1" : 1, 
                "ACTIVE_2" : 21, 
                "ACTIVE_3" : 41, 
            }

            self.selectSkillButtonList = []
            
            self.lastUpdateQuickSlot = 0
            self.SetWindowName("TaskBar")

        def __del__(self):
            #print "---------------------------------------------------------------------------- DELETE TASKBAR"
            ui.ScriptWindow.__del__(self)

        def LoadWindow(self):
            try:
                pyScrLoader = ui.PythonScriptLoader()

                if constInfo.IN_GAME_SHOP_ENABLE:
                    pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "TaskBar.py")
                else:
                    pyScrLoader.LoadScriptFile(self, "UIScript/TaskBar.py")
                pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT], "UIScript/MouseButtonWindow.py")
                pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT], "UIScript/RightMouseButtonWindow.py")
            except:
                import exception
                exception.Abort("TaskBar.LoadWindow.LoadObject")

            self.quickslot = []
            self.quickslot.append(self.GetChild("quick_slot_1"))
            self.quickslot.append(self.GetChild("quick_slot_2"))
            for slot in self.quickslot:
                slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
                slot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptyQuickSlot))
                slot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemQuickSlot))
                slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.UnselectItemQuickSlot))
                slot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
                slot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))

            toggleButtonDict = {}
            toggleButtonDict[TaskBar.BUTTON_CHARACTER]=self.GetChild("CharacterButton")
            toggleButtonDict[TaskBar.BUTTON_VECTORS]=self.GetChild("VectorsEfsunButton")
            toggleButtonDict[TaskBar.BUTTON_INVENTORY]=self.GetChild("InventoryButton")
            toggleButtonDict[TaskBar.BUTTON_MESSENGER]=self.GetChild("MessengerButton")
            toggleButtonDict[TaskBar.BUTTON_SYSTEM]=self.GetChild("SystemButton")
            
            # ChatButton, ExpandButton 둘 중 하나는 반드시 존재한다.
            try:
                toggleButtonDict[TaskBar.BUTTON_CHAT]=self.GetChild("ChatButton")
            except:
                toggleButtonDict[TaskBar.BUTTON_EXPAND]=self.GetChild("ExpandButton")
                TaskBar.IS_EXPANDED = TRUE
            

            if localeInfo.IsARABIC():
                systemButton = toggleButtonDict[TaskBar.BUTTON_SYSTEM]
                if systemButton.ToolTipText:
                    tx, ty = systemButton.ToolTipText.GetLocalPosition()
                    tw = systemButton.ToolTipText.GetWidth() 
                    systemButton.ToolTipText.SetPosition(-tw/2, ty)


            expGauge = []
            expGauge.append(self.GetChild("EXPGauge_01"))
            expGauge.append(self.GetChild("EXPGauge_02"))
            expGauge.append(self.GetChild("EXPGauge_03"))
            expGauge.append(self.GetChild("EXPGauge_04"))

            for exp in expGauge:
                exp.SetSize(0, 0)

          
            self.quickPageNumImageBox=self.GetChild("QuickPageNumber")

            self.GetChild("QuickPageUpButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageUpButton))
            self.GetChild("QuickPageDownButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageDownButton))

            mouseLeftButtonModeButton = self.GetChild("LeftMouseButton")
            mouseRightButtonModeButton = self.GetChild("RightMouseButton")
            mouseLeftButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleLeftMouseButtonModeWindow))        
            mouseRightButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow))
            self.curMouseModeButton = [ mouseLeftButtonModeButton, mouseRightButtonModeButton ]

            (xLocalRight, yLocalRight) = mouseRightButtonModeButton.GetLocalPosition()
            self.curSkillButton = self.SkillButton()
            self.curSkillButton.SetParent(self)
            self.curSkillButton.SetPosition(xLocalRight, 3)
            self.curSkillButton.SetSkillEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow))
            self.curSkillButton.Hide()

            (xLeft, yLeft) = mouseLeftButtonModeButton.GetGlobalPosition()
            (xRight, yRight) = mouseRightButtonModeButton.GetGlobalPosition()
            leftModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT]
            leftModeButtonList.SetPosition(xLeft, yLeft - leftModeButtonList.GetHeight()-5)
            rightModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT]
            rightModeButtonList.SetPosition(xRight - rightModeButtonList.GetWidth() + 32, yRight - rightModeButtonList.GetHeight()-5)
            rightModeButtonList.GetChild("button_skill").SetEvent(lambda adir=self.MOUSE_BUTTON_RIGHT, aevent=self.EVENT_SKILL: self.SelectMouseButtonEvent(adir, aevent))
            rightModeButtonList.GetChild("button_skill").Hide()

            mouseImage = ui.ImageBox("TOP_MOST")
            mouseImage.AddFlag("float")
            mouseImage.LoadImage("d:/ymir work/ui/game/taskbar/mouse_button_camera_01.sub")
            mouseImage.SetPosition(xRight, wndMgr.GetScreenHeight() - 34)
            mouseImage.Hide()
            self.mouseImage = mouseImage

            dir = self.MOUSE_BUTTON_LEFT
            wnd = self.mouseModeButtonList[dir]
            wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent))
            wnd.GetChild("button_auto_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_AUTO: self.SelectMouseButtonEvent(adir, aevent))
            wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent))

            dir = self.MOUSE_BUTTON_RIGHT
            wnd = self.mouseModeButtonList[dir]
            wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent))
            wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent))

            self.toggleButtonDict = toggleButtonDict
            self.expGauge = expGauge

            if constInfo.IN_GAME_SHOP_ENABLE:
                self.rampageGauge1  = self.GetChild("RampageGauge")
                self.rampageGauge1.OnMouseOverIn = ui.__mem_func__(self.__RampageGauge_OverIn)
                self.rampageGauge2 = self.GetChild("RampageGauge2")
                self.rampageGauge2.OnMouseOverOut = ui.__mem_func__(self.__RampageGauge_OverOut)
                self.rampageGauge2.OnMouseLeftButtonUp = ui.__mem_func__(self.__RampageGauge_Click)
                print "[DEBUG]: constInfo.IN_GAME_SHOP_ENABLE / self.rampageGauge1",constInfo.IN_GAME_SHOP_ENABLE, self.rampageGauge1
                self.__RampageGauge_OverOut()

            self.hpGauge = self.GetChild("HPGauge")
            self.mpGauge = self.GetChild("SPGauge")
            self.stGauge = self.GetChild("STGauge")
            self.hpRecoveryGaugeBar = self.GetChild("HPRecoveryGaugeBar")
            self.spRecoveryGaugeBar = self.GetChild("SPRecoveryGaugeBar")

            self.hpGaugeBoard=self.GetChild("HPGauge_Board")
            self.mpGaugeBoard=self.GetChild("SPGauge_Board")
            self.stGaugeBoard=self.GetChild("STGauge_Board")
            self.expGaugeBoard=self.GetChild("EXP_Gauge_Board")
            
            #giftbox object
            wndGiftBox = GiftBox()
            wndGiftBox.LoadWindow()
            self.wndGiftBox = wndGiftBox
        
            self.__LoadMouseSettings()
            self.RefreshStatus()
            self.RefreshQuickSlot()

        def __RampageGauge_OverIn(self):
            print "rampage_over_in"
            self.rampageGauge2.Show()
            self.rampageGauge1.Hide()

        def __RampageGauge_OverOut(self):
            print "rampage_over_out"
            self.rampageGauge2.Hide()
            self.rampageGauge1.Show()

        def __RampageGauge_Click(self):
            print "rampage_up"
            net.SendChatPacket("/in_game_mall")
            # gift icon hide when click mall icon
            self.wndGiftBox.Hide()    

        def __LoadMouseSettings(self):
            try:
                LoadMouseButtonSettings()
                (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()
                if not self.__IsInSafeMouseButtonSettingRange(mouseLeftButtonEvent) or not self.__IsInSafeMouseButtonSettingRange(mouseRightButtonEvent):
                        raise RuntimeError, "INVALID_MOUSE_BUTTON_SETTINGS"
            except:
                InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA)
                (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()

            try:
                self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT,    mouseLeftButtonEvent)
                self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT,    mouseRightButtonEvent)
            except:
                InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA)
                (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()

                self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT,    mouseLeftButtonEvent)
                self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT,    mouseRightButtonEvent)

        def __IsInSafeMouseButtonSettingRange(self, arg):
            return arg >= self.EVENT_MOVE and arg <= self.EVENT_AUTO

        def Destroy(self):        
            SaveMouseButtonSettings()

            self.ClearDictionary()
            self.mouseModeButtonList[0].ClearDictionary()
            self.mouseModeButtonList[1].ClearDictionary()
            self.mouseModeButtonList = 0
            self.curMouseModeButton = 0
            self.curSkillButton = 0
            self.selectSkillButtonList = 0


            self.expGauge = None
            self.hpGauge = None
            self.mpGauge = None
            self.stGauge = None
            self.hpRecoveryGaugeBar = None
            self.spRecoveryGaugeBar = None
        
            self.tooltipItem = 0
            self.tooltipSkill = 0
            self.quickslot = 0
            self.toggleButtonDict = 0

            self.hpGaugeBoard = 0
            self.mpGaugeBoard = 0
            self.stGaugeBoard = 0
            
            self.expGaugeBoard = 0

            self.tooltipHP = 0
            self.tooltipSP = 0
            self.tooltipST = 0
            self.tooltipEXP = 0

            self.mouseImage = None

        def __OnClickQuickPageUpButton(self):
            player.SetQuickPage(player.GetQuickPage()-1)

        def __OnClickQuickPageDownButton(self):
            player.SetQuickPage(player.GetQuickPage()+1)

        def SetToggleButtonEvent(self, eButton, kEventFunc):
            self.toggleButtonDict[eButton].SetEvent(kEventFunc)

        def SetItemToolTip(self, tooltipItem):
            self.tooltipItem = tooltipItem

        def SetSkillToolTip(self, tooltipSkill):
            self.tooltipSkill = tooltipSkill
            self.curSkillButton.SetSkillToolTip(self.tooltipSkill)

        ## Mouse Image
        def ShowMouseImage(self):
            self.mouseImage.SetTop()
            self.mouseImage.Show()

        def HideMouseImage(self):
            player.SetQuickCameraMode(FALSE)
            self.mouseImage.Hide()

        ## Gauge
        def RefreshStatus(self):
            curHP = player.GetStatus(player.HP)
            maxHP = player.GetStatus(player.MAX_HP)
            curSP = player.GetStatus(player.SP)
            maxSP = player.GetStatus(player.MAX_SP)
            curEXP = unsigned32(player.GetStatus(player.EXP))
            nextEXP = unsigned32(player.GetStatus(player.NEXT_EXP))
            recoveryHP = player.GetStatus(player.HP_RECOVERY)
            recoverySP = player.GetStatus(player.SP_RECOVERY)
            
            self.RefreshStamina()

            self.SetHP(curHP, recoveryHP, maxHP)
            self.SetSP(curSP, recoverySP, maxSP)
            self.SetExperience(curEXP, nextEXP)
            
        def RefreshStamina(self):
            curST = player.GetStatus(player.STAMINA)
            maxST = player.GetStatus(player.MAX_STAMINA)
            self.SetST(curST, maxST)

        def RefreshSkill(self):
            self.curSkillButton.RefreshSkill()
            for button in self.selectSkillButtonList:
                button.RefreshSkill()

        def SetHP(self, curPoint, recoveryPoint, maxPoint):
            curPoint = min(curPoint, maxPoint)
            if maxPoint > 0:
                self.hpGauge.SetPercentage(curPoint, maxPoint)
                self.tooltipHP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_HP, curPoint, maxPoint))

                if 0 == recoveryPoint:
                    self.hpRecoveryGaugeBar.Hide()
                else:
                    destPoint = min(maxPoint, curPoint + recoveryPoint)
                    newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
                    self.hpRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
                    self.hpRecoveryGaugeBar.Show()

        def SetSP(self, curPoint, recoveryPoint, maxPoint):
            curPoint = min(curPoint, maxPoint)
            if maxPoint > 0:
                self.mpGauge.SetPercentage(curPoint, maxPoint)
                self.tooltipSP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_SP, curPoint, maxPoint))

                if 0 == recoveryPoint:
                    self.spRecoveryGaugeBar.Hide()
                else:
                    destPoint = min(maxPoint, curPoint + recoveryPoint)
                    newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
                    self.spRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
                    self.spRecoveryGaugeBar.Show()

        def SetST(self, curPoint, maxPoint):
            curPoint = min(curPoint, maxPoint)
            if maxPoint > 0:
                self.stGauge.SetPercentage(curPoint, maxPoint)
                self.tooltipST.SetText("%s : %d / %d" % (localeInfo.TASKBAR_ST, curPoint, maxPoint))

        def SetExperience(self, curPoint, maxPoint):

            curPoint = min(curPoint, maxPoint)
            curPoint = max(curPoint, 0)
            maxPoint = max(maxPoint, 0)

            quarterPoint = maxPoint / 4
            FullCount = 0

            if 0 != quarterPoint:
                FullCount = min(4, curPoint / quarterPoint)

            for i in xrange(4):
                self.expGauge.Hide()

            for i in xrange(FullCount):
                self.expGauge.SetRenderingRect(0.0, 0.0, 0.0, 0.0)
                self.expGauge.Show()

            if 0 != quarterPoint:
                if FullCount < 4:
                    Percentage = float(curPoint % quarterPoint) / quarterPoint - 1.0
                    self.expGauge[FullCount].SetRenderingRect(0.0, Percentage, 0.0, 0.0)
                    self.expGauge[FullCount].Show()

            #####
            self.tooltipEXP.SetText("%s : %.2f%%" % (localeInfo.TASKBAR_EXP, float(curPoint) / max(1, float(maxPoint)) * 100))
        
            
        ## QuickSlot
        def RefreshQuickSlot(self):

            pageNum = player.GetQuickPage()

            try:
                self.quickPageNumImageBox.LoadImage(TaskBar.QUICKPAGE_NUMBER_FILENAME[pageNum])
            except:
                pass

            startNumber = 0
            for slot in self.quickslot:

                for i in xrange(4):

                    slotNumber = i+startNumber

                    (Type, Position) = player.GetLocalQuickSlot(slotNumber)

                    if player.SLOT_TYPE_NONE == Type:
                        slot.ClearSlot(slotNumber)
                        continue

                    if player.SLOT_TYPE_INVENTORY == Type:

                        itemIndex = player.GetItemIndex(Position)
                        itemCount = player.GetItemCount(Position)
                        if itemCount <= 1:
                            itemCount = 0
                        
                        ## 자동물약 (#72723, #72724) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
                        if constInfo.IS_AUTO_POTION(itemIndex):
                            # metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
                            metinSocket = [player.GetItemMetinSocket(Position, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
                            
                            if 0 != int(metinSocket[0]):
                                slot.ActivateSlot(slotNumber)
                            else:
                                slot.DeactivateSlot(slotNumber)
                        
                        slot.SetItemSlot(slotNumber, itemIndex, itemCount)

                    elif player.SLOT_TYPE_SKILL == Type:

                        skillIndex = player.GetSkillIndex(Position)
                        if 0 == skillIndex:
                            slot.ClearSlot(slotNumber)
                            continue

                        skillType = skill.GetSkillType(skillIndex)
                        if skill.SKILL_TYPE_GUILD == skillType:
                            import guild
                            skillGrade = 0
                            skillLevel = guild.GetSkillLevel(Position)

                        else:
                            skillGrade = player.GetSkillGrade(Position)
                            skillLevel = player.GetSkillLevel(Position)

                        slot.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel)
                        slot.SetSlotCountNew(slotNumber, skillGrade, skillLevel)
                        slot.SetCoverButton(slotNumber)

                        ## NOTE : CoolTime 체크
                        if player.IsSkillCoolTime(Position):
                            (coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
                            slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)

                        ## NOTE : Activate 되어 있다면 아이콘도 업데이트
                        if player.IsSkillActive(Position):
                            slot.ActivateSlot(slotNumber)

                    elif player.SLOT_TYPE_EMOTION == Type:

                        emotionIndex = Position
                        slot.SetEmotionSlot(slotNumber, emotionIndex)
                        slot.SetCoverButton(slotNumber)
                        slot.SetSlotCount(slotNumber, 0)

                slot.RefreshSlot()
                startNumber += 4

        def canAddQuickSlot(self, Type, slotNumber):

            if player.SLOT_TYPE_INVENTORY == Type:

                itemIndex = player.GetItemIndex(slotNumber)
                return item.CanAddToQuickSlotItem(itemIndex)

            return TRUE

        def AddQuickSlot(self, localSlotIndex):
            AttachedSlotType = mouseModule.mouseController.GetAttachedType()
            AttachedSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
            AttachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()

            if player.SLOT_TYPE_QUICK_SLOT == AttachedSlotType:
                player.RequestMoveGlobalQuickSlotToLocalQuickSlot(AttachedSlotNumber, localSlotIndex)

            elif player.SLOT_TYPE_EMOTION == AttachedSlotType:

                player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedItemIndex)

            elif TRUE == self.canAddQuickSlot(AttachedSlotType, AttachedSlotNumber):

                ## Online Code
                player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedSlotNumber)
            
            mouseModule.mouseController.DeattachObject()
            self.RefreshQuickSlot()

        def SelectEmptyQuickSlot(self, slotIndex):

            if TRUE == mouseModule.mouseController.isAttached():
                self.AddQuickSlot(slotIndex)

        def SelectItemQuickSlot(self, localQuickSlotIndex):

            if TRUE == mouseModule.mouseController.isAttached():
                self.AddQuickSlot(localQuickSlotIndex)

            else:
                globalQuickSlotIndex=player.LocalQuickSlotIndexToGlobalQuickSlotIndex(localQuickSlotIndex)
                mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_QUICK_SLOT, globalQuickSlotIndex, globalQuickSlotIndex)

        def UnselectItemQuickSlot(self, localSlotIndex):

            if FALSE == mouseModule.mouseController.isAttached():
                player.RequestUseLocalQuickSlot(localSlotIndex)
                return

            elif mouseModule.mouseController.isAttached():
                mouseModule.mouseController.DeattachObject()
                return


        def OnUseSkill(self, usedSlotIndex, coolTime):

            QUICK_SLOT_SLOT_COUNT = 4
            slotIndex = 0

            ## Current Skill Button
            if usedSlotIndex == self.curSkillButton.GetSlotIndex():
                self.curSkillButton.Activate(coolTime)

            ## Quick Slot
            for slotWindow in self.quickslot:

                for i in xrange(QUICK_SLOT_SLOT_COUNT):

                    (Type, Position) = player.GetLocalQuickSlot(slotIndex)

                    if Type == player.SLOT_TYPE_SKILL:
                        if usedSlotIndex == Position:
                            slotWindow.SetSlotCoolTime(slotIndex, coolTime)
                            return

                    slotIndex += 1

        def OnActivateSkill(self, usedSlotIndex):
            slotIndex = 0

            ## Current Skill Button
            if usedSlotIndex == self.curSkillButton.GetSlotIndex():
                self.curSkillButton.Deactivate()

            ## Quick Slot
            for slotWindow in self.quickslot:

                for i in xrange(4):

                    (Type, Position) = player.GetLocalQuickSlot(slotIndex)

                    if Type == player.SLOT_TYPE_SKILL:
                        if usedSlotIndex == Position:
                            slotWindow.ActivateSlot(slotIndex)
                            return

                    slotIndex += 1

        def OnDeactivateSkill(self, usedSlotIndex):
            slotIndex = 0

            ## Current Skill Button
            if usedSlotIndex == self.curSkillButton.GetSlotIndex():
                self.curSkillButton.Deactivate()

            ## Quick Slot
            for slotWindow in self.quickslot:

                for i in xrange(4):

                    (Type, Position) = player.GetLocalQuickSlot(slotIndex)

                    if Type == player.SLOT_TYPE_SKILL:
                        if usedSlotIndex == Position:
                            slotWindow.DeactivateSlot(slotIndex)
                            return

                    slotIndex += 1

        ## ToolTip
        def OverInItem(self, slotNumber):
            if mouseModule.mouseController.isAttached():
                return

            (Type, Position) = player.GetLocalQuickSlot(slotNumber)

            if player.SLOT_TYPE_INVENTORY == Type:
                self.tooltipItem.SetInventoryItem(Position)
                self.tooltipSkill.HideToolTip()

            elif player.SLOT_TYPE_SKILL == Type:

                skillIndex = player.GetSkillIndex(Position)
                skillType = skill.GetSkillType(skillIndex)

                if skill.SKILL_TYPE_GUILD == skillType:
                    import guild
                    skillGrade = 0
                    skillLevel = guild.GetSkillLevel(Position)

                else:
                    skillGrade = player.GetSkillGrade(Position)
                    skillLevel = player.GetSkillLevel(Position)

                self.tooltipSkill.SetSkillNew(Position, skillIndex, skillGrade, skillLevel)
                self.tooltipItem.HideToolTip()

        def OverOutItem(self):
            if 0 != self.tooltipItem:
                self.tooltipItem.HideToolTip()
            if 0 != self.tooltipSkill:
                self.tooltipSkill.HideToolTip()

        def OnUpdate(self):
            if app.GetGlobalTime() - self.lastUpdateQuickSlot > 500:
                self.lastUpdateQuickSlot = app.GetGlobalTime()
                self.RefreshQuickSlot()

            if TRUE == self.hpGaugeBoard.IsIn():
                self.tooltipHP.Show()
            else:
                self.tooltipHP.Hide()

            if TRUE == self.mpGaugeBoard.IsIn():
                self.tooltipSP.Show()
            else:
                self.tooltipSP.Hide()

            if TRUE == self.stGaugeBoard.IsIn():
                self.tooltipST.Show()
            else:
                self.tooltipST.Hide()
            
            if TRUE == self.expGaugeBoard.IsIn():
                self.tooltipEXP.Show()
            else:
                self.tooltipEXP.Hide()
            
        ## Skill
        def ToggleLeftMouseButtonModeWindow(self):

            wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT]

            if TRUE == wndMouseButtonMode.IsShow():

                wndMouseButtonMode.Hide()

            else:
                wndMouseButtonMode.Show()

        def ToggleRightMouseButtonModeWindow(self):

            wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT]

            if TRUE == wndMouseButtonMode.IsShow():

                wndMouseButtonMode.Hide()
                self.CloseSelectSkill()

            else:
                wndMouseButtonMode.Show()
                self.OpenSelectSkill()

        def OpenSelectSkill(self):

            PAGE_SLOT_COUNT = 6

            (xSkillButton, y) = self.curSkillButton.GetGlobalPosition()
            y -= (37 + 32 + 1)

            for key in self.skillCategoryNameList:

                appendCount = 0
                startNumber = self.skillPageStartSlotIndexDict[key]
                x = xSkillButton

                getSkillIndex=player.GetSkillIndex
                getSkillLevel=player.GetSkillLevel
                for i in xrange(PAGE_SLOT_COUNT):

                    skillIndex = getSkillIndex(startNumber+i)
                    skillLevel = getSkillLevel(startNumber+i)

                    if 0 == skillIndex:
                        continue
                    if 0 == skillLevel:
                        continue
                    if skill.IsStandingSkill(skillIndex):
                        continue

                    ## FIXME : 스킬 하나당 슬롯 하나씩 할당하는건 아무리 봐도 부하가 크다.
                    ##         이 부분은 시간을 나면 고치도록. - [levites]
                    skillButton = self.SkillButton()
                    skillButton.SetSkill(startNumber+i)
                    skillButton.SetPosition(x, y)
                    skillButton.SetSkillEvent(ui.__mem_func__(self.CloseSelectSkill), startNumber+i+1)
                    skillButton.SetSkillToolTip(self.tooltipSkill)
                    skillButton.SetTop()
                    skillButton.Show()
                    self.selectSkillButtonList.append(skillButton)

                    appendCount += 1
                    x -= 32

                if appendCount > 0:
                    y -= 32

        def CloseSelectSkill(self, slotIndex=-1):

            self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT].Hide()
            for button in self.selectSkillButtonList:
                button.Destroy()

            self.selectSkillButtonList = []

            if -1 != slotIndex:
                self.curSkillButton.Show()
                self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide()
                player.SetMouseFunc(player.MBT_RIGHT, player.MBF_SKILL)
                player.ChangeCurrentSkillNumberOnly(slotIndex-1)
            else:
                self.curSkillButton.Hide()
                self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Show()

        def SelectMouseButtonEvent(self, dir, event):
            SetMouseButtonSetting(dir, event)

            self.CloseSelectSkill()
            self.mouseModeButtonList[dir].Hide()

            btn = 0
            type = self.NONE
            func = self.NONE
            tooltip_text = ""        
            
            if self.MOUSE_BUTTON_LEFT == dir:
                type = player.MBT_LEFT

            elif self.MOUSE_BUTTON_RIGHT == dir:
                type = player.MBT_RIGHT

            if self.EVENT_MOVE == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_move")
                func = player.MBF_MOVE
                tooltip_text = localeInfo.TASKBAR_MOVE
            elif self.EVENT_ATTACK == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_attack")
                func = player.MBF_ATTACK
                tooltip_text = localeInfo.TASKBAR_ATTACK
            elif self.EVENT_AUTO == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_auto_attack")
                func = player.MBF_AUTO
                tooltip_text = localeInfo.TASKBAR_AUTO
            elif self.EVENT_MOVE_AND_ATTACK == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_move_and_attack")
                func = player.MBF_SMART
                tooltip_text = localeInfo.TASKBAR_ATTACK
            elif self.EVENT_CAMERA == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_camera")
                func = player.MBF_CAMERA
                tooltip_text = localeInfo.TASKBAR_CAMERA
            elif self.EVENT_SKILL == event:
                btn = self.mouseModeButtonList[dir].GetChild("button_skill")
                func = player.MBF_SKILL
                tooltip_text = localeInfo.TASKBAR_SKILL

            if 0 != btn:
                self.curMouseModeButton[dir].SetToolTipText(tooltip_text, 0, -18)
                self.curMouseModeButton[dir].SetUpVisual(btn.GetUpVisualFileName())
                self.curMouseModeButton[dir].SetOverVisual(btn.GetOverVisualFileName())
                self.curMouseModeButton[dir].SetDownVisual(btn.GetDownVisualFileName())
                self.curMouseModeButton[dir].Show()

            player.SetMouseFunc(type, func)

        def OnChangeCurrentSkill(self, skillSlotNumber):
            self.curSkillButton.SetSkill(skillSlotNumber)
            self.curSkillButton.Show()
            self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide()

     

    I dont know why, but th uitaskbar is into the spoiler in the end

  9. nQ2AHSm.png

    Hey,
    Well I wonder how I can remove this icon in the serverfiles maxmi 4.1 in this case the client.
    I have tried to remove some lines in game.py, constinfo.py, and taskbar.py but without success because when I try to go after the loading screen does not advance, gets stuck in the loading screen image.
    I hope someone here can help me,
    Thank you.

×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.