antiblock
Rodnia | Alpha & Omega

uScared?

Membro
  • Content Count

    257
  • Joined

  • Last visited

  • Days Won

    5

Posts posted by uScared?


  1. Boas pessoal, há cerca de 2 meses atrás iniciei um projeto no qual estou perto de o concluir. Este tópico é apenas uma sondagem para algo que tenho bastantes dúvidas e incertezas.

    Neste momento conto apenas com 2 reinos no meu servidor: Jinno e Shinsoo.

    O que quero saber é, jogariam num servidor onde apenas existem 2 reinos ?

    Sendo tu um jogador de metin, onde só te concentras-te no reino amarelo, jogarias noutro reino ?

     

    Aqui estão os meus pontos de vista para apenas ter 2 reinos:

     

    - Dar utilidade ás wars:

    Se apenas tiver 2 reinos, as guild's irão ter mais gente ( ou não ).

    Concentrar os jogadores apenas em 2 pontos, de modo a obter negocio, dialogo, e como objetivo principal, PVP e reconhecimento para wars.

     

    - Novos eventos:

    Novos eventos onde apenas 2 reinos disputaram, e o melhor ganhará ( maior rivalidade (amigável) entre os reinos.

     

    Um enorme obrigado a todos os que me ajudarem nesta sondagem.


  2. Boas pessoal, alguem me consegue dizer o porquê desta quest estar a dar core dumped ?
    Spoiler
    quest sistem_animale begin
        state start begin
        function Calareste( vnum )    
        when 71114.use or 71116.use or 71118.use or 71120.use
        or 71124.use or 71125.use or 71126.use or 71127.use or 71128.use
        or 71131.use or 71132.use or 71133.use or 71134.use
        or 71137.use or 71138.use or 71139.use or 71140.use begin 
            
            horse.unsummon()
            if pc.get_map_index() == 113 or
            pc.get_map_index() == 222 then    
            
                command ( "unmount" )        
                chat ( "Nu poþi invoca un animal in acest loc." )
            
            return
            end
        sistem_animale.Calareste(item.get_vnum())
        end
        
        when login begin
            if pc.get_map_index() == 113 or
            pc.get_map_index() == 222 then            
                command ( "unmount" )
            return
            end
            
            local vnum, remain_time = pc.get_special_ride_vnum()
            if 0 != vnum then
                if pc.is_polymorphed() then
                    return
                elseif pc.is_riding() then
                    return
                else
                
                command ( "unmount" )
                
                end
            end
        end
    
    
    

     


  3. Vou deixar-te aqui em locale>ui>inventorywindow.py:

    Spoiler
    
    import uiScriptLocale
    import item
    EQUIPMENT_START_INDEX = 180
    window = {
        "name" : "InventoryWindow",
        ## 600 - (width + 오른쪽으로 부터 띄우기 24 px)
        "x" : SCREEN_WIDTH - 220,
        "y" : SCREEN_HEIGHT - 37 - 610,
        "style" : ("movable", "float",),
        "width" : 220,
        "height" : 610,
        "children" :
        (
            ## Inventory, Equipment Slots
            {
                "name" : "board",
                "type" : "board",
                "style" : ("attach",),
                "x" : 0,
                "y" : 0,
                "width" : 220,
                "height" : 610,
                "children" :
                (
                    ## Title
                    {
                        "name" : "TitleBar",
                        "type" : "titlebar",
                        "style" : ("attach",),
                        "x" : 8,
                        "y" : 7,
                        "width" : 161,
                        "color" : "yellow",
                        "children" :
                        (
                            { "name":"TitleName", "type":"text", "x":77, "y":3, "text":uiScriptLocale.INVENTORY_TITLE, "text_horizontal_align":"center" },
                        ),
                    },
                    ## Offline Shop Button
                    {
                        "name" : "OfflineShopButton",
                        "type" : "button",
                        "x" : 170,
                        "y" : 33, #+36
                        "tooltip_text" : uiScriptLocale.TASKBAR_OFFLINE_SHOP,
                        "default_image" : "locale/es/offlineshop/boton1.tga",
                        "over_image" : "locale/es/offlineshop/boton2.tga",
                        "down_image" : "locale/es/offlineshop/boton1.tga",
                    },
                    ## Afisare_bonusuri
                    {
                        "name" : "Alaska_py",
                        "type" : "button",
                        "x" : 170,
                        "y" : 33 + 36,
                        "tooltip_text" : "V.Bonusuri",
                        "default_image" : "Jin_Han/1.tga",
                        "over_image" : "Jin_Han/2.tga",
                        "down_image" : "Jin_Han/1.tga",
                    },
                    ## depozit
                    {
                        "name" : "depozit",
                        "type" : "button",
                        "x" : 170,
                        "y" : 33 + 36 + 36,
                        "tooltip_text" : "Depozit",
                        "default_image" : "Jin_Han/5.tga",
                        "over_image" : "Jin_Han/6.tga",
                        "down_image" : "Jin_Han/5.tga",
                    },
                    ## anti_exp
                    {
                        "name" : "inelexp",
                        "type" : "button",
                        "x" : 170,
                        "y" : 33 + 36 + 36 + 36,
                        "tooltip_text" : "AntiExp",
                        "default_image" : "Jin_Han/7.tga",
                        "over_image" : "Jin_Han/8.tga",
                        "down_image" : "Jin_Han/7.tga",
                    },
                    ## Teleport
                    {
                        "name" : "Telep",
                        "type" : "button",
                        "x" : 170,
                        "y" : 33 + 36 + 36 + 36 + 36,
                        "tooltip_text" : "Teleport",
                        "default_image" : "Jin_Han/9.tga",
                        "over_image" : "Jin_Han/10.tga",
                        "down_image" : "Jin_Han/9.tga",
                    },                
                    ## Depozit
                    {
                        "name" : "VegaS_Switch_Dinos_Perfect_Work",
                        "type" : "button",
                        "x" : 170,
                        "y" : 33 + 36 + 36 + 36 + 36 + 36,
                        "tooltip_text" : "Switchbot",
                        "default_image" : "Jin_Han/s1.tga",
                        "over_image" : "Jin_Han/s1.tga",
                        "down_image" : "Jin_Han/s2.tga",
                    },
                    ## Schimba Echipamentul
                    {
                        "name" : "fastbutton",
                        "type" : "button",
                        "x" : 170,
                        "y" : 33 + 36 + 36 + 36 + 36 + 36 + 36,
                        "tooltip_text" : "Schimba Echipamentul",
                        "default_image" : "Jin_Han/fast.tga",
                        "over_image" : "Jin_Han/fast.tga",
                        "down_image" : "Jin_Han/fast1.tga",
                    },                
        
                    ## Equipment Slot
                    {
                        "name" : "Equipment_Base",
                        "type" : "image",
                        "x" : 10,
                        "y" : 33,
                        "image" : "d:/ymir work/ui/equipment_bg_with_ring.tga",
                        "children" :
                        (
                            {
                                "name" : "EquipmentSlot",
                                "type" : "slot",
                                "x" : 3,
                                "y" : 3,
                                "width" : 150,
                                "height" : 182,
                                "slot" : (
                                            {"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64},
                                            {"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96},
                                            {"index":EQUIPMENT_START_INDEX+5, "x":114, "y":67, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+6, "x":114, "y":35, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+7, "x":2, "y":145, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+8, "x":75, "y":145, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+9, "x":114, "y":2, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32},
                                            {"index":item.EQUIPMENT_RING1, "x":2, "y":106, "width":32, "height":32},
                                            {"index":item.EQUIPMENT_RING2, "x":75, "y":106, "width":32, "height":32},
                                            {"index":item.EQUIPMENT_BELT, "x":39, "y":106, "width":32, "height":32},
                                        ),
                            },
                            ## Dragon Soul Button
                            {
                                "name" : "DSSButton",
                                "type" : "button",
                                "x" : 114,
                                "y" : 107,
                                "tooltip_text" : uiScriptLocale.TASKBAR_DRAGON_SOUL,
                                "default_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_01.tga",
                                "over_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_02.tga",
                                "down_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_03.tga",
                            },                        
                            ## MallButton
                            {
                                "name" : "MallButton",
                                "type" : "button",
                                "x" : 118,
                                "y" : 148,
                                "tooltip_text" : uiScriptLocale.MALL_TITLE,
                                "default_image" : "d:/ymir work/ui/game/TaskBar/ishop.tga",
                                "over_image" : "d:/ymir work/ui/game/TaskBar/ishop1.tga",
                                "down_image" : "d:/ymir work/ui/game/TaskBar/ishop2.tga",
                            },    
                            ## CostumeButton
                            {
                                "name" : "CostumeButton",
                                "type" : "button",
                                "x" : 78,
                                "y" : 5,
                                "tooltip_text" : uiScriptLocale.COSTUME_TITLE,
                                "default_image" : "d:/ymir work/ui/game/taskbar/costume_Button_01.tga",
                                "over_image" : "d:/ymir work/ui/game/taskbar/costume_Button_02.tga",
                                "down_image" : "d:/ymir work/ui/game/taskbar/costume_Button_03.tga",
                            },                        
                            {
                                "name" : "Equipment_Tab_01",
                                "type" : "radio_button",
                                "x" : 86,
                                "y" : 161,
                                "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
                                "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
                                "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
                                "children" :
                                (
                                    {
                                        "name" : "Equipment_Tab_01_Print",
                                        "type" : "text",
                                        "x" : 0,
                                        "y" : 0,
                                        "all_align" : "center",
                                        "text" : "I",
                                    },
                                ),
                            },
                            {
                                "name" : "Equipment_Tab_02",
                                "type" : "radio_button",
                                "x" : 86 + 32,
                                "y" : 161,
                                "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
                                "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
                                "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
                                "children" :
                                (
                                    {
                                        "name" : "Equipment_Tab_02_Print",
                                        "type" : "text",
                                        "x" : 0,
                                        "y" : 0,
                                        "all_align" : "center",
                                        "text" : "II",
                                    },
                                ),
                            },
                        ),
                    },
                    {
                        "name" : "Inventory_Tab_01",
                        "type" : "radio_button",
      
                        "x" : 11,
                        "y" : 33 + 191,
      
                        "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
                        "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
                        "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
                        "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1,
      
                        "children" :
                        (
                            {
                                "name" : "Inventory_Tab_01_Print",
                                "type" : "text",
      
                                "x" : 0,
                                "y" : 0,
      
                                "all_align" : "center",
      
                                "text" : "I",
                            },
                        ),
                    },
                    {
                        "name" : "Inventory_Tab_02",
                        "type" : "radio_button",
      
                        "x" : 13 + 37,
                        "y" : 33 + 191,
      
                        "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
                        "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
                        "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
                        "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2,
      
                        "children" :
                        (
                            {
                                "name" : "Inventory_Tab_02_Print",
                                "type" : "text",
      
                                "x" : 0,
                                "y" : 0,
      
                                "all_align" : "center",
      
                                "text" : "II",
                            },
                        ),
                    },
                    {
                        "name" : "Inventory_Tab_03",
                        "type" : "radio_button",
      
                        "x" : 13 + 77,
                        "y" : 33 + 191,
      
                        "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
                        "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
                        "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
                        "tooltip_text" : "3.Inventar",
      
                        "children" :
                        (
                            {
                                "name" : "Inventory_Tab_03_Print",
                                "type" : "text",
      
                                "x" : 0,
                                "y" : 0,
      
                                "all_align" : "center",
      
                                "text" : "III",
                            },
                        ),
                    },
                    {
                        "name" : "Inventory_Tab_04",
                        "type" : "radio_button",
      
                        "x" : 14 + 116,
                        "y" : 33 + 191,
      
                        "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
                        "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
                        "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
                        "tooltip_text" : "4.Inventar",
      
                        "children" :
                        (
                            {
                                "name" : "Inventory_Tab_04_Print",
                                "type" : "text",
      
                                "x" : 0,
                                "y" : 0,
      
                                "all_align" : "center",
      
                                "text" : "IV",
                            },
                        ),
                    },
                    ## Item Slot
                    {
                        "name" : "ItemSlot",
                        "type" : "grid_table",
                        "x" : 8,
                        "y" : 246,
                        "start_index" : 0,
                        "x_count" : 5,
                        "y_count" : 9,
                        "x_step" : 32,
                        "y_step" : 32,
                        "image" : "d:/ymir work/ui/public/Slot_Base.sub"
                    },
                    
                    ## Sterge Item Din Inventar
                    {
                        "name" : "Sil_Slot",
                        "type" : "image",
                        "x" : 13,
                        "y" : 538,
                        "image" : "locale/es/ui/inventar/brain_sterge_inventar.tga",
                        "children" :
                        (
                            {
                                "name" : "Sil_Slot",
                                "type" : "slot",
                                "x" : 0,
                                "y" : 0,
                                "width" : 32,
                                "height" : 32,
                                "slot" : (
                                            {"index":0, "x":0, "y":0, "width":32, "height":32},
                                        ),
                            },
                        ),
                    },                
                    ## Print
                    {
                        "name":"Money_Slot",
                        "type":"button",
                        "x":50,
                        "y":50,
                        #"horizontal_align":"center",
                        "vertical_align":"bottom",
                        "default_image" : "d:/ymir work/ui/public/parameter_slot_04.sub",
                        "over_image" : "d:/ymir work/ui/public/parameter_slot_04.sub",
                        "down_image" : "d:/ymir work/ui/public/parameter_slot_04.sub",
                        "children" :
                        (
                            {
                                "name" : "Money",
                                "type" : "text",
                                "x" : 3,
                                "y" : 3,
                                "horizontal_align" : "right",
                                "text_horizontal_align" : "right",
                                "text" : "123456789",
                            },
                        ),
                    },
                    {
                        "name":"Premium_Slot",
                        "type":"button",
     
                        "x":50,
                        "y":30,
     
                        #"horizontal_align":"center",
                        "vertical_align":"bottom",
     
                        "default_image" : "d:/ymir work/ui/public/parameter_slot_04.sub",
                        "over_image" : "d:/ymir work/ui/public/parameter_slot_04.sub",
                        "down_image" : "d:/ymir work/ui/public/parameter_slot_04.sub",
     
                        "children" :
                            (
                                {
                                    "name" : "Premium",
                                    "type" : "text",
     
                                    "x" : 3,
                                    "y" : 3,
     
                                    "horizontal_align" : "right",
                                    "text_horizontal_align" : "right",
     
                                    "text" : "AlphaMt2",
                                },
                            ),
                        },
                    
                    {
                        "name":"Mds_Slot",
                        "type":"button",
                        "x":50,
                        "y":70,
                        #"horizontal_align":"center",
                        "vertical_align":"bottom",
                        "default_image" : "d:/ymir work/ui/public/parameter_slot_04.sub",
                        "over_image" : "d:/ymir work/ui/public/parameter_slot_04.sub",
                        "down_image" : "d:/ymir work/ui/public/parameter_slot_04.sub",
                        "children" :
                        (
                            {
                                "name" : "Mds",
                                "type" : "text",
                                "x" : 3,
                                "y" : 3,
                                "horizontal_align" : "right",
                                "text_horizontal_align" : "right",
                                "text" : "123456789 Mds",
                            },
                        ),
                    },
                ),
            },
        ),
    }

     

     

    E aqui está o uiinventory.py

    Spoiler
    Citar
    
    
    import ui
    import player
    import mouseModule
    import net
    import app
    import snd
    import item
    import player
    import chat
    import grp
    import uiScriptLocale
    import uiRefine
    import uiAttachMetin
    import uiPickMoney
    import uiCommon
    import uiPrivateShopBuilder # 개인상점 열동안 ItemMove 방지
    import uiOfflineShopBuilder
    import uiOfflineShop
    import localeInfo
    import constInfo
    import ime
    import wndMgr
    import event
    ITEM_MALL_BUTTON_ENABLE = True
    
    ITEM_FLAG_APPLICABLE = 1 << 14
    class CostumeWindow(ui.ScriptWindow):
        def __init__(self, wndInventory):
            import exception
            
            if not app.ENABLE_COSTUME_SYSTEM:            
                exception.Abort("What do you do?")
                return
            if not wndInventory:
                exception.Abort("wndInventory parameter must be set to InventoryWindow")
                return                        
                      
            ui.ScriptWindow.__init__(self)
            self.isLoaded = 0
            self.wndInventory = wndInventory;
            self.__LoadWindow()
        def __del__(self):
            ui.ScriptWindow.__del__(self)
        def Show(self):
            self.__LoadWindow()
            self.RefreshCostumeSlot()
            ui.ScriptWindow.Show(self)
        def Close(self):
            self.Hide()
        def __LoadWindow(self):
            if self.isLoaded == 1:
                return
            self.isLoaded = 1
            try:
                pyScrLoader = ui.PythonScriptLoader()
                pyScrLoader.LoadScriptFile(self, "UIScript/CostumeWindow.py")
            except:
                import exception
                exception.Abort("CostumeWindow.LoadWindow.LoadObject")
            try:
                wndEquip = self.GetChild("CostumeSlot")
                self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
                
            except:
                import exception
                exception.Abort("CostumeWindow.LoadWindow.BindObject")
            ## Equipment
            wndEquip.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem))
            wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem))
            wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
            wndEquip.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))                        
            wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot))
            wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot))
            self.wndEquip = wndEquip
        def RefreshCostumeSlot(self):
            getItemVNum=player.GetItemIndex
            
            for i in xrange(item.COSTUME_SLOT_COUNT):
                slotNumber = item.COSTUME_SLOT_START + i
                self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0)
            self.wndEquip.RefreshSlot()
            
    class BeltInventoryWindow(ui.ScriptWindow):
        def __init__(self, wndInventory):
            import exception
            
            if not app.ENABLE_NEW_EQUIPMENT_SYSTEM:            
                exception.Abort("What do you do?")
                return
            if not wndInventory:
                exception.Abort("wndInventory parameter must be set to InventoryWindow")
                return                        
                      
            ui.ScriptWindow.__init__(self)
            self.isLoaded = 0
            self.wndInventory = wndInventory;
            
            self.wndBeltInventoryLayer = None
            self.wndBeltInventorySlot = None
            self.expandBtn = None
            self.minBtn = None
            self.__LoadWindow()
        def __del__(self):
            ui.ScriptWindow.__del__(self)
        def Show(self, openBeltSlot = False):
            self.__LoadWindow()
            self.RefreshSlot()
            ui.ScriptWindow.Show(self)
            
            if openBeltSlot:
                self.OpenInventory()
            else:
                self.CloseInventory()
        def Close(self):
            self.Hide()
        def IsOpeningInventory(self):
            return self.wndBeltInventoryLayer.IsShow()
            
        def OpenInventory(self):
            self.wndBeltInventoryLayer.Show()
            self.expandBtn.Hide()
            self.AdjustPositionAndSize()
                    
        def CloseInventory(self):
            self.wndBeltInventoryLayer.Hide()
            self.expandBtn.Show()
            
            self.AdjustPositionAndSize()
        ## 현재 인벤토리 위치를 기준으로 BASE 위치를 계산, 리턴.. 숫자 하드코딩하기 정말 싫지만 방법이 없다..
        def GetBasePosition(self):
            x, y = self.wndInventory.GetGlobalPosition()
            return x - 148, y + 241
            
        def AdjustPositionAndSize(self):
            bx, by = self.GetBasePosition()
            
            if self.IsOpeningInventory():            
                self.SetPosition(bx, by)
                self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight())
                
            else:
                self.SetPosition(bx + 138, by);
                self.SetSize(10, self.GetHeight())
        def __LoadWindow(self):
            if self.isLoaded == 1:
                return
            self.isLoaded = 1
            try:
                pyScrLoader = ui.PythonScriptLoader()
                pyScrLoader.LoadScriptFile(self, "UIScript/BeltInventoryWindow.py")
            except:
                import exception
                exception.Abort("CostumeWindow.LoadWindow.LoadObject")
            try:
                self.ORIGINAL_WIDTH = self.GetWidth()
                wndBeltInventorySlot = self.GetChild("BeltInventorySlot")
                self.wndBeltInventoryLayer = self.GetChild("BeltInventoryLayer")
                self.expandBtn = self.GetChild("ExpandBtn")
                self.minBtn = self.GetChild("MinimizeBtn")
                
                self.expandBtn.SetEvent(ui.__mem_func__(self.OpenInventory))
                self.minBtn.SetEvent(ui.__mem_func__(self.CloseInventory))
                
                for i in xrange(item.BELT_INVENTORY_SLOT_COUNT):
                    slotNumber = item.BELT_INVENTORY_SLOT_START + i                            
                    wndBeltInventorySlot.SetCoverButton(slotNumber,    "d:/ymir work/ui/game/quest/slot_button_01.sub",\
                                                    "d:/ymir work/ui/game/quest/slot_button_01.sub",\
                                                    "d:/ymir work/ui/game/quest/slot_button_01.sub",\
                                                    "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga", False, False)                                    
                
            except:
                import exception
                exception.Abort("CostumeWindow.LoadWindow.BindObject")
            ## Equipment
            wndBeltInventorySlot.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem))
            wndBeltInventorySlot.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem))
            wndBeltInventorySlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
            wndBeltInventorySlot.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))                        
            wndBeltInventorySlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot))
            wndBeltInventorySlot.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot))
            self.wndBeltInventorySlot = wndBeltInventorySlot
        def RefreshSlot(self):
            getItemVNum=player.GetItemIndex
            
            for i in xrange(item.BELT_INVENTORY_SLOT_COUNT):
                slotNumber = item.BELT_INVENTORY_SLOT_START + i
                self.wndBeltInventorySlot.SetItemSlot(slotNumber, getItemVNum(slotNumber), player.GetItemCount(slotNumber))
                self.wndBeltInventorySlot.SetAlwaysRenderCoverButton(slotNumber, True)
                
                avail = "0"
                
                if player.IsAvailableBeltInventoryCell(slotNumber):
                    self.wndBeltInventorySlot.EnableCoverButton(slotNumber)                
                else:
                    self.wndBeltInventorySlot.DisableCoverButton(slotNumber)                
            self.wndBeltInventorySlot.RefreshSlot()
            
    class InventoryWindow(ui.ScriptWindow):
        USE_TYPE_TUPLE = ("USE_CLEAN_SOCKET", "USE_CHANGE_ATTRIBUTE", "USE_ADD_ATTRIBUTE", "USE_ADD_ATTRIBUTE2", "USE_ADD_ACCESSORY_SOCKET", "USE_PUT_INTO_ACCESSORY_SOCKET", "USE_PUT_INTO_BELT_SOCKET", "USE_PUT_INTO_RING_SOCKET")
        questionDialog = None
        tooltipItem = None
        wndCostume = None
        wndBelt = None
        dlgPickMoney = None
        
        sellingSlotNumber = -1
        isLoaded = 0
        isOpenedCostumeWindowWhenClosingInventory = 0        # 인벤토리 닫을 때 코스츔이 열려있었는지 여부-_-; 네이밍 ㅈㅅ
        isOpenedBeltWindowWhenClosingInventory = 0        # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ
        def __init__(self):
            ui.ScriptWindow.__init__(self)
            self.OpenBoniSwitcherEvent = lambda : None
            self.__LoadWindow()
            
        def Alaska_py(self):
            import uifastequip    
            self.fastequip = uifastequip.changeequip()
            self.fastequip.Show()
        def __del__(self):
            ui.ScriptWindow.__del__(self)
            
        def ParolaInventarWnd(self):
            self.ParolaInventar = ui.BoardWithTitleBar()
            self.ParolaInventar.SetSize(180, 100)
            self.ParolaInventar.SetCenterPosition()
            self.ParolaInventar.AddFlag('movable')
            self.ParolaInventar.AddFlag('float')
            self.ParolaInventar.SetTitleName('Inventar')
            self.ParolaInventar.SetCloseEvent(self.InchidereParolaInventar)
            self.ParolaInventar.Show()
                        
            self.TextParola = ui.TextLine()
            self.TextParola.SetParent(self.ParolaInventar)
            self.TextParola.SetDefaultFontName()
            self.TextParola.SetPosition(15, 35)
            self.TextParola.SetFeather()
            self.TextParola.SetText("Parola inventar:")
            self.TextParola.SetOutline()
            self.TextParola.Show()
            
            self.SlotParola = ui.SlotBar()
            self.SlotParola.SetParent(self.ParolaInventar)
            self.SlotParola.SetSize(60, 15)
            self.SlotParola.SetPosition(30, 35)
            self.SlotParola.SetWindowHorizontalAlignCenter()
            self.SlotParola.Show()
            self.CampParola = ui.EditLine()
            self.CampParola.SetParent(self.SlotParola)
            self.CampParola.SetSize(60, 15)
            self.CampParola.SetPosition(4, 1)
            self.CampParola.SetMax(4)
            self.CampParola.SetNumberMode()
            self.CampParola.SetFocus()        
            self.CampParola.Show()
            
            self.ButonParolaOK = ui.Button()
            self.ButonParolaOK.SetParent(self.ParolaInventar)
            self.ButonParolaOK.SetEvent(self.VerificareParola)
            self.ButonParolaOK.SetPosition(46, 67)
            self.ButonParolaOK.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub")
            self.ButonParolaOK.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub")
            self.ButonParolaOK.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub")
            self.ButonParolaOK.SetText("Deblocare")
            self.ButonParolaOK.Show()
            
            self.CampParola.SetReturnEvent(ui.__mem_func__(self.VerificareParola))
            
        def VerificareParola(self):
            self.ParolaInventar.Hide()
            activare_skill2 = constInfo.SECURIATE_QUESTINDEX
            constInfo.NegotFereastraNume = self.CampParola.GetText()
            event.QuestButtonClick(activare_skill2)
            
        def InchidereParolaInventar(self):
            self.ParolaInventar.Hide()
            
        def Show(self):
            if constInfo.SECURIATE_CONT == 0:
                self.__LoadWindow()
                ui.ScriptWindow.Show(self)
                
                if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
                    self.wndCostume.Show() 
                if self.wndBelt:
                    self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory)
            else:
                self.ParolaInventarWnd()
        def BindInterfaceClass(self, interface):
            self.interface = interface
            
        def __LoadWindow(self):
            if self.isLoaded == 1:
                return
            self.isLoaded = 1
            try:
                pyScrLoader = ui.PythonScriptLoader()
                if ITEM_MALL_BUTTON_ENABLE:
                    pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "InventoryWindow.py")
                else:
                    pyScrLoader.LoadScriptFile(self, "UIScript/InventoryWindow.py")
            except:
                import exception
                exception.Abort("InventoryWindow.LoadWindow.LoadObject")
            try:
                wndItem = self.GetChild("ItemSlot")
                wndEquip = self.GetChild("EquipmentSlot")
                self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
                self.wndMoney = self.GetChild("Money")
                self.wndMoneySlot = self.GetChild("Money_Slot")
                self.wndMds = self.GetChild("Mds")
                self.wndMdsSlot = self.GetChild("Mds_Slot")
                self.mallButton = self.GetChild2("MallButton")
                self.DSSButton = self.GetChild2("DSSButton")
                self.costumeButton = self.GetChild2("CostumeButton")
                
                Alaska_py_button = self.GetChild("fastbutton")
                Alaska_py_button.SetEvent(ui.__mem_func__(self.Alaska_py))
                Alaska_py_button.SetToolTipText("Schimba")
                
                self.VegaS_Switch_Dinos_Perfect_Work = self.GetChild2("VegaS_Switch_Dinos_Perfect_Work")            
                self.Telep = self.GetChild2("Telep")
                self.depozit = self.GetChild2("depozit")
                self.Alaska_py = self.GetChild2("Alaska_py")
                self.inelexp = self.GetChild2("inelexp")
                self.offlineShopButton = self.GetChild2("OfflineShopButton")
                
                self.inventoryTab = []
                self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))
                self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))
                self.inventoryTab.append(self.GetChild("Inventory_Tab_03"))
                self.inventoryTab.append(self.GetChild("Inventory_Tab_04"))
                self.equipmentTab = []
                self.equipmentTab.append(self.GetChild("Equipment_Tab_01"))
                self.equipmentTab.append(self.GetChild("Equipment_Tab_02"))
                if self.costumeButton and not app.ENABLE_COSTUME_SYSTEM:
                    self.costumeButton.Hide()
                    self.costumeButton.Destroy()
                    self.costumeButton = 0
                # Belt Inventory Window
                self.wndBelt = None
                
                if app.ENABLE_NEW_EQUIPMENT_SYSTEM:
                    self.wndBelt = BeltInventoryWindow(self)
                
            except:
                import exception
                exception.Abort("InventoryWindow.LoadWindow.BindObject")
                
            ## Item
            wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
            wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
            wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
            wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
            wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
            wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
            ## Equipment
            wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
            wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
            wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
            wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
            wndEquip.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
            wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
            self.GetChild("Sil_Slot").SetSelectEmptySlotEvent(ui.__mem_func__(self.SilEmptySlot))        
            ## PickMoneyDialog
            dlgPickMoney = uiPickMoney.PickMoneyDialog()
            dlgPickMoney.LoadDialog()
            dlgPickMoney.Hide()
            ## RefineDialog
            self.refineDialog = uiRefine.RefineDialog()
            self.refineDialog.Hide()
            ## AttachMetinDialog
            self.attachMetinDialog = uiAttachMetin.AttachMetinDialog()
            self.attachMetinDialog.Hide()
            ## MoneySlot
            self.wndMoneySlot.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
            self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))
            self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))
            self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg))
            self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg))
            self.inventoryPageIndex = 0
            self.equipmentTab[0].SetEvent(lambda arg=0: self.SetEquipmentPage(arg))
            self.equipmentTab[1].SetEvent(lambda arg=1: self.SetEquipmentPage(arg))
            self.equipmentTab[0].Down()
            self.equipmentTab[0].Hide()
            self.equipmentTab[1].Hide()
            self.wndItem = wndItem
            self.wndEquip = wndEquip
            self.dlgPickMoney = dlgPickMoney
            # MallButton
            if self.mallButton:
                self.mallButton.SetEvent(ui.__mem_func__(self.ClickMallButton))
                
            if self.DSSButton:
                self.DSSButton.SetEvent(ui.__mem_func__(self.ClickDSSButton))             
            
            # Costume Button
            if self.costumeButton:
                self.costumeButton.SetEvent(ui.__mem_func__(self.ClickCostumeButton))
            if self.VegaS_Switch_Dinos_Perfect_Work:
                self.VegaS_Switch_Dinos_Perfect_Work.SetEvent(ui.__mem_func__(self.Functie_VegaS_Switch_Perfect_Work))
                
            #Telep
            if self.Telep:
                self.Telep.SetEvent(ui.__mem_func__(self.ClickTelep))
            #Depozit
            if self.depozit:
                self.depozit.SetEvent(ui.__mem_func__(self.Clickdepozit))
            #Bonusuri
            if self.Alaska_py:
                self.Alaska_py.SetEvent(ui.__mem_func__(self.ClickAlaska_py))
            #Inel_AntiExp
            if self.inelexp:
                self.inelexp.SetEvent(ui.__mem_func__(self.Clickinelexp))            
                
            # Offline Shop Button
            if (self.offlineShopButton):
                self.offlineShopButton.SetEvent(ui.__mem_func__(self.ClickOfflineShopButton))
            self.wndCostume = None
            
             #####
            ## Refresh
            self.SetInventoryPage(0)
            self.SetEquipmentPage(0)
            self.RefreshItemSlot()
            self.RefreshStatus()
        def Destroy(self):
            self.ClearDictionary()
            self.dlgPickMoney.Destroy()
            self.dlgPickMoney = 0
            self.refineDialog.Destroy()
            self.refineDialog = 0
            self.attachMetinDialog.Destroy()
            self.attachMetinDialog = 0
            self.tooltipItem = None
            self.wndItem = 0
            self.wndEquip = 0
            self.dlgPickMoney = 0
            self.wndMoney = 0
            self.wndMoneySlot = 0
            self.wndMds = 0
            self.wndMdsSlot = 0
            self.questionDialog = None
            self.mallButton = None
            self.DSSButton = None
            self.interface = None
            if self.wndCostume:
                self.wndCostume.Destroy()
                self.wndCostume = 0
                
            if self.wndBelt:
                self.wndBelt.Destroy()
                self.wndBelt = None
                
            self.inventoryTab = []
            self.equipmentTab = []
        def SilEmptySlot(self):
            if mouseModule.mouseController.isAttached():
                attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
                itemIndex = player.GetItemIndex(attachedSlotPos)
                if player.SLOT_TYPE_INVENTORY == mouseModule.mouseController.GetAttachedType():
                    item.SelectItem(itemIndex)
                    itemDropQuestionDialog = uiCommon.QuestionDialog()
                    miktar_pls = player.GetItemCount(attachedSlotPos)
                    if miktar_pls != 1:
                        itemDropQuestionDialog.SetText(("%dx %s Doriti sa stergeti itemul respectiv?" % (miktar_pls, item.GetItemName())))
                    else:
                        itemDropQuestionDialog.SetText(("%s Se va sterge sunteti de acord?" % (item.GetItemName())))
                    itemDropQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self.SilItem(arg, attachedSlotPos))
                    itemDropQuestionDialog.SetCancelEvent(lambda arg = FALSE: self.SilItem(arg, attachedSlotPos))
                    itemDropQuestionDialog.Open()
                    self.itemDropQuestionDialog = itemDropQuestionDialog
                    mouseModule.mouseController.DeattachObject()
            else:
                warn = uiCommon.PopupDialog()
                warn.SetText("Ai sters:")
                warn.Open()
        def SilItem(self, answer, attachedSlotPos):
            if not self.itemDropQuestionDialog:
                return 
            if answer:
                constInfo.ItemSil_Slot = attachedSlotPos
                event.QuestButtonClick(constInfo.ItemSil_Index)
                snd.PlaySound('sound/ui/drop.wav')
            self.itemDropQuestionDialog.Close()
            self.itemDropQuestionDialog = None        
            
        def Hide(self):
            if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS():
                self.OnCloseQuestionDialog()
                return
            if None != self.tooltipItem:
                self.tooltipItem.HideToolTip()
            if self.wndCostume:
                self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow()            # 인벤토리 창이 닫힐 때 코스츔이 열려 있었는가?
                self.wndCostume.Close()
     
            if self.wndBelt:
                self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory()        # 인벤토리 창이 닫힐 때 벨트 인벤토리도 열려 있었는가?
                print "Is Opening Belt Inven?? ", self.isOpenedBeltWindowWhenClosingInventory
                self.wndBelt.Close()
      
            if self.dlgPickMoney:
                self.dlgPickMoney.Close()
            self.OnCloseQuestionDialog()
            
            wndMgr.Hide(self.hWnd)
            
        
        def Close(self):
            self.Hide()
        def SetInventoryPage(self, page):
            self.inventoryTab[self.inventoryPageIndex].SetUp()
            self.inventoryPageIndex = page
            self.RefreshBagSlotWindow()
        def SetEquipmentPage(self, page):
            self.equipmentPageIndex = page
            self.equipmentTab[1-page].SetUp()
            self.RefreshEquipSlotWindow()
        def ClickMallButton(self):
            print "click_mall_button"
            net.SendChatPacket("/click_mall")
            
        # DSSButton
        def ClickDSSButton(self):
            print "click_dss_button"
            self.interface.ToggleDragonSoulWindow()
            
        # Offline Shop Button
        def ClickOfflineShopButton(self):
            print "click_offline_shop_button"
            self.interface.ToggleOfflineShopAdminPanelWindow()
        def ClickCostumeButton(self):
            print "Click Costume Button"
            if self.wndCostume:
                if self.wndCostume.IsShow(): 
                    self.wndCostume.Hide()
                else:
                    self.wndCostume.Show()
            else:
                self.wndCostume = CostumeWindow(self)
                self.wndCostume.Show()
        def Functie_VegaS_Switch_Perfect_Work(self):
            constInfo.SWITCHBOT = 1            
                
        #Telep
        def ClickTelep(self):
            import event
            qid = constInfo.Telepqin
            event.QuestButtonClick(qid)            
        #Depozit
        def Clickdepozit(self):
            import event
            qid = constInfo.depozitqin
            event.QuestButtonClick(qid)
        #Bonusuri
        def ClickAlaska_py(self):
            import uibonuspage
            uibonuspage.BonusBoardDialog().Show()
        #inelexp
        def Clickinelexp(self):
            import event
            qid = constInfo.inelexpqin
            event.QuestButtonClick(qid)            
                
        def OpenPickMoneyDialog(self):
            if mouseModule.mouseController.isAttached():
                attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
                if player.SLOT_TYPE_SAFEBOX == mouseModule.mouseController.GetAttachedType():
                    if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
                        net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
                        snd.PlaySound("sound/ui/money.wav")
                mouseModule.mouseController.DeattachObject()
            else:
                curMoney = player.GetElk()
                if curMoney <= 0:
                    return
                self.dlgPickMoney.SetTitleName(localeInfo.PICK_MONEY_TITLE)
                self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
                self.dlgPickMoney.Open(curMoney)
                self.dlgPickMoney.SetMax(7) # 인벤토리 990000 제한 버그 수정
        def OnPickMoney(self, money):
            mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money)
        def OnPickItem(self, count):
            itemSlotIndex = self.dlgPickMoney.itemGlobalSlotIndex
            selectedItemVNum = player.GetItemIndex(itemSlotIndex)
            mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, count)
        def __InventoryLocalSlotPosToGlobalSlotPos(self, local):
            if player.IsEquipmentSlot(local) or player.IsCostumeSlot(local) or player.IsBeltInventorySlot(local):
                return local
            return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local
        def RefreshBagSlotWindow(self):
            is_activated = 0
            getItemVNum=player.GetItemIndex
            getItemCount=player.GetItemCount
            setItemVNum=self.wndItem.SetItemSlot
            for i in xrange(player.INVENTORY_PAGE_SIZE*2):
                slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
                itemCount = getItemCount(slotNumber)
                if 0 == itemCount:
                    self.wndItem.ClearSlot(i)
                    continue
                elif 1 == itemCount:
                    itemCount = 0
                
                itemVnum = getItemVNum(slotNumber)
                setItemVNum(i, itemVnum, itemCount)
                if constInfo.IS_AUTO_POTION(itemVnum):
                    metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
                    if slotNumber >= player.INVENTORY_PAGE_SIZE:
                        slotNumber -= player.INVENTORY_PAGE_SIZE
                    
                    isActivated = 0 != metinSocket[0]
                    if isActivated:
                        self.wndItem.ActivateSlot(i)
                        potionType = 0;
                        if constInfo.IS_AUTO_POTION_HP(itemVnum):
                            potionType = player.AUTO_POTION_TYPE_HP
                        elif constInfo.IS_AUTO_POTION_SP(itemVnum):
                            potionType = player.AUTO_POTION_TYPE_SP                        
                        
                        usedAmount = int(metinSocket[1])
                        totalAmount = int(metinSocket[2])                    
                        player.SetAutoPotionInfo(potionType, isActivated, (totalAmount - usedAmount), totalAmount, self.__InventoryLocalSlotPosToGlobalSlotPos(i))
                    else:
                        self.wndItem.DeactivateSlot(i)
                elif constInfo.IS_ACCE_ITEM(itemVnum, 1) == True:
                    metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
                    isActivated = metinSocket[0]
                    if isActivated == 1:
                        player.SetAcceInfo(isActivated, i)
                        self.wndItem.ActivateAcceSlot(i)
                    else:
                        self.wndItem.DeactivateAcceSlot(i)
            
            self.wndItem.RefreshSlot()
            if self.wndBelt:
                self.wndBelt.RefreshSlot()
        def RefreshEquipSlotWindow(self):
            getItemVNum=player.GetItemIndex
            getItemCount=player.GetItemCount
            setItemVNum=self.wndEquip.SetItemSlot
            for i in xrange(player.EQUIPMENT_PAGE_COUNT):
                slotNumber = player.EQUIPMENT_SLOT_START + i
                itemCount = getItemCount(slotNumber)
                if itemCount <= 1:
                    itemCount = 0
                setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount)
            if app.ENABLE_NEW_EQUIPMENT_SYSTEM:
                for i in xrange(player.NEW_EQUIPMENT_SLOT_COUNT):
                    slotNumber = player.NEW_EQUIPMENT_SLOT_START + i
                    itemCount = getItemCount(slotNumber)
                    if itemCount <= 1:
                        itemCount = 0
                    setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount)
                    print "ENABLE_NEW_EQUIPMENT_SYSTEM", slotNumber, itemCount, getItemVNum(slotNumber)
                    
    
            self.wndEquip.RefreshSlot()
            
            if self.wndCostume:
                self.wndCostume.RefreshCostumeSlot()
        def RefreshItemSlot(self):
            self.RefreshBagSlotWindow()
            self.RefreshEquipSlotWindow()
        def RefreshStatus ( self ):
            money = player . GetElk ()
            if money <= 100000000 :
                self . wndMoney . SetFontColor ( 1.0 , 0.2 , 0.2 )
            elif money >= 100000001 and money <= 1000000000 :
                self . wndMoney . SetFontColor ( 1.0 , 0.6 , 0.2 )
            elif money >= 1000000001 and money <= 1500000000 :
                self . wndMoney . SetFontColor ( 1.0 , 1.0 , 0.2 )
            elif money >= 1500000001 :
                self . wndMoney . SetFontColor ( 0.6 , 1.0 , 0.2 )
            self . wndMoney . SetText ( localeInfo . NumberToMoneyString ( money ))
            
        def OnUpdate(self):
            import constInfo
            self.wndMds.SetText(str(constInfo.mds) + " PTC")
        def SetItemToolTip(self, tooltipItem):
            self.tooltipItem = tooltipItem
        def SellItem(self):
            if self.sellingSlotitemIndex == player.GetItemIndex(self.sellingSlotNumber):
                if self.sellingSlotitemCount == player.GetItemCount(self.sellingSlotNumber):
                    ## 용혼석도 팔리게 하는 기능 추가하면서 인자 type 추가
                    net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count, player.INVENTORY)
                    snd.PlaySound("sound/ui/money.wav")
            self.OnCloseQuestionDialog()
            
        def OnDetachMetinFromItem(self):
            if None == self.questionDialog:
                return
                
            #net.SendItemUseToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos)        
            self.__SendUseItemToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos)
            self.OnCloseQuestionDialog()
        def OnCloseQuestionDialog(self):
            if not self.questionDialog:
                return
            
            self.questionDialog.Close()
            self.questionDialog = None
            constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
        ## Slot Event
        def SelectEmptySlot(self, selectedSlotPos):
            if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
                return
            selectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(selectedSlotPos)
            if mouseModule.mouseController.isAttached():
                attachedSlotType = mouseModule.mouseController.GetAttachedType()
                attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
                attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()
                attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
                if player.SLOT_TYPE_INVENTORY == attachedSlotType:
                    itemCount = player.GetItemCount(attachedSlotPos)
                    attachedCount = mouseModule.mouseController.GetAttachedItemCount()
                    self.__SendMoveItemPacket(attachedSlotPos, selectedSlotPos, attachedCount)
                    if item.IsRefineScroll(attachedItemIndex):
                        self.wndItem.SetUseMode(False)
                elif player.SLOT_TYPE_PRIVATE_SHOP == attachedSlotType:
                    mouseModule.mouseController.RunCallBack("INVENTORY")
                    
                elif player.SLOT_TYPE_OFFLINE_SHOP == attachedSlotType:
                    mouseModule.mouseController.RunCallBack("INVENTORY")
                elif player.SLOT_TYPE_SHOP == attachedSlotType:
                    net.SendShopBuyPacket(attachedSlotPos)
                elif player.SLOT_TYPE_SAFEBOX == attachedSlotType:
                    if player.ITEM_MONEY == attachedItemIndex:
                        net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
                        snd.PlaySound("sound/ui/money.wav")
                    else:
                        net.SendSafeboxCheckoutPacket(attachedSlotPos, selectedSlotPos)
                elif player.SLOT_TYPE_MALL == attachedSlotType:
                    net.SendMallCheckoutPacket(attachedSlotPos, selectedSlotPos)
                mouseModule.mouseController.DeattachObject()
        def SelectItemSlot(self, itemSlotIndex):
            if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
                return
            itemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(itemSlotIndex)
            if mouseModule.mouseController.isAttached():
                attachedSlotType = mouseModule.mouseController.GetAttachedType()
                attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
                attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()
                if player.SLOT_TYPE_INVENTORY == attachedSlotType:
                    self.__DropSrcItemToDestItemInInventory(attachedItemVID, attachedSlotPos, itemSlotIndex)
                mouseModule.mouseController.DeattachObject()
            else:
                curCursorNum = app.GetCursor()
                if app.SELL == curCursorNum:
                    self.__SellItem(itemSlotIndex)
                    
                elif app.BUY == curCursorNum:
                    chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SHOP_BUY_INFO)
                elif app.IsPressed(app.DIK_LALT):
                    link = player.GetItemLink(itemSlotIndex)
                    ime.PasteString(link)
                elif app.IsPressed(app.DIK_LSHIFT):
                    itemCount = player.GetItemCount(itemSlotIndex)
                    
                    if itemCount > 1:
                        self.dlgPickMoney.SetTitleName(localeInfo.PICK_ITEM_TITLE)
                        self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickItem))
                        self.dlgPickMoney.Open(itemCount)
                        self.dlgPickMoney.itemGlobalSlotIndex = itemSlotIndex
                    #else:
                        #selectedItemVNum = player.GetItemIndex(itemSlotIndex)
                        #mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum)
                elif app.IsPressed(app.DIK_LCONTROL):
                    itemIndex = player.GetItemIndex(itemSlotIndex)
                    if True == item.CanAddToQuickSlotItem(itemIndex):
                        player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_INVENTORY, itemSlotIndex)
                    else:
                        chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.QUICKSLOT_REGISTER_DISABLE_ITEM)
                else:
                    selectedItemVNum = player.GetItemIndex(itemSlotIndex)
                    itemCount = player.GetItemCount(itemSlotIndex)
                    mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount)
                    
                    if self.__IsUsableItemToItem(selectedItemVNum, itemSlotIndex):                
                        self.wndItem.SetUseMode(True)
                    else:                    
                        self.wndItem.SetUseMode(False)
                    snd.PlaySound("sound/ui/pick.wav")
        def __DropSrcItemToDestItemInInventory(self, srcItemVID, srcItemSlotPos, dstItemSlotPos):
            if srcItemSlotPos == dstItemSlotPos:
                return
                        
            if item.IsRefineScroll(srcItemVID):
                self.RefineItem(srcItemSlotPos, dstItemSlotPos)
                self.wndItem.SetUseMode(False)
            elif item.IsMetin(srcItemVID):
                self.AttachMetinToItem(srcItemSlotPos, dstItemSlotPos)
                
            elif item.IsCostumeScroll(srcItemVID):
                self.CostumeMetinFromItem(srcItemSlotPos, dstItemSlotPos)            
            elif item.IsDetachScroll(srcItemVID):
                self.DetachMetinFromItem(srcItemSlotPos, dstItemSlotPos)
            elif item.IsKey(srcItemVID):
                self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)            
            elif (player.GetItemFlags(srcItemSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
                self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)
            elif item.GetUseType(srcItemVID) in self.USE_TYPE_TUPLE:
                self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)            
            else:
                #snd.PlaySound("sound/ui/drop.wav")
                ## 이동시킨 곳이 장착 슬롯일 경우 아이템을 사용해서 장착 시킨다 - [levites]
                if player.IsEquipmentSlot(dstItemSlotPos):
                    ## 들고 있는 아이템이 장비일때만
                    if item.IsEquipmentVID(srcItemVID):
                        self.__UseItem(srcItemSlotPos)
                else:
                    self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0)
                    #net.SendItemMovePacket(srcItemSlotPos, dstItemSlotPos, 0)
        def __SellItem(self, itemSlotPos):
            if not player.IsEquipmentSlot(itemSlotPos):
                self.sellingSlotNumber = itemSlotPos
                itemIndex = player.GetItemIndex(itemSlotPos)
                itemCount = player.GetItemCount(itemSlotPos)
                
                
                self.sellingSlotitemIndex = itemIndex
                self.sellingSlotitemCount = itemCount
                item.SelectItem(itemIndex)
                ## 안티 플레그 검사 빠져서 추가
                ## 20140220
                if item.IsAntiFlag(item.ANTIFLAG_SELL):
                    popup = uiCommon.PopupDialog()
                    popup.SetText(localeInfo.SHOP_CANNOT_SELL_ITEM)
                    popup.SetAcceptEvent(self.__OnClosePopupDialog)
                    popup.Open()
                    self.popup = popup
                    return            
                itemPrice = item.GetISellItemPrice()
                if item.Is1GoldItem():
                    itemPrice = itemCount / itemPrice / 5
                else:
                    itemPrice = itemPrice * itemCount / 5
                item.GetItemName(itemIndex)
                itemName = item.GetItemName()
                self.questionDialog = uiCommon.QuestionDialog()
                self.questionDialog.SetText(localeInfo.DO_YOU_SELL_ITEM(itemName, itemCount, itemPrice))
                self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.SellItem))
                self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
                self.questionDialog.Open()
                self.questionDialog.count = itemCount
                constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
        def __OnClosePopupDialog(self):
            self.pop = None            
                
        def RefineItem(self, scrollSlotPos, targetSlotPos):
            scrollIndex = player.GetItemIndex(scrollSlotPos)
            targetIndex = player.GetItemIndex(targetSlotPos)
            if player.REFINE_OK != player.CanRefine(scrollIndex, targetSlotPos):
                return
            ###########################################################
            self.__SendUseItemToItemPacket(scrollSlotPos, targetSlotPos)
            #net.SendItemUseToItemPacket(scrollSlotPos, targetSlotPos)
            return
            ###########################################################
            ###########################################################
            #net.SendRequestRefineInfoPacket(targetSlotPos)
            #return
            ###########################################################
            result = player.CanRefine(scrollIndex, targetSlotPos)
            if player.REFINE_ALREADY_MAX_SOCKET_COUNT == result:
                #snd.PlaySound("sound/ui/jaeryun_fail.wav")
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_MORE_SOCKET)
            elif player.REFINE_NEED_MORE_GOOD_SCROLL == result:
                #snd.PlaySound("sound/ui/jaeryun_fail.wav")
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NEED_BETTER_SCROLL)
            elif player.REFINE_CANT_MAKE_SOCKET_ITEM == result:
                #snd.PlaySound("sound/ui/jaeryun_fail.wav")
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_SOCKET_DISABLE_ITEM)
            elif player.REFINE_NOT_NEXT_GRADE_ITEM == result:
                #snd.PlaySound("sound/ui/jaeryun_fail.wav")
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_UPGRADE_DISABLE_ITEM)
            elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result:
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM)
            if player.REFINE_OK != result:
                return
            self.refineDialog.Open(scrollSlotPos, targetSlotPos)
        def CostumeMetinFromItem(self, scrollSlotPos, targetSlotPos):
            scrollIndex = player.GetItemIndex(scrollSlotPos)
            targetIndex = player.GetItemIndex(targetSlotPos)
            self.__SendUseItemToItemPacket(scrollSlotPos, targetSlotPos)        
            
        def DetachMetinFromItem(self, scrollSlotPos, targetSlotPos):
            scrollIndex = player.GetItemIndex(scrollSlotPos)
            targetIndex = player.GetItemIndex(targetSlotPos)
            if constInfo.IS_ACCE_ITEM_DETACH(scrollIndex) == True:
                item.SelectItem(targetIndex)
                if item.GetItemSubType() == item.COSTUME_TYPE_ACCE:
                    if self.GetAcceAttribute(targetSlotPos) == 0:
                        return
                    
                    self.questionDialog = uiCommon.QuestionDialog()
                    self.questionDialog.SetText(localeInfo.ACCE_DO_YOU_REMOVE_ATTR)
                    self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnDetachMetinFromItem))
                    self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
                    self.questionDialog.Open()
                    self.questionDialog.sourcePos = scrollSlotPos
                    self.questionDialog.targetPos = targetSlotPos
                else:
                    return
            else:
                if not player.CanDetach(scrollIndex, targetSlotPos):
                    chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
                    return
            
                self.questionDialog = uiCommon.QuestionDialog()
                self.questionDialog.SetText(localeInfo.REFINE_DO_YOU_SEPARATE_METIN)
                self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnDetachMetinFromItem))
                self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
                self.questionDialog.Open()
                self.questionDialog.sourcePos = scrollSlotPos
                self.questionDialog.targetPos = targetSlotPos
        def AttachMetinToItem(self, metinSlotPos, targetSlotPos):
            metinIndex = player.GetItemIndex(metinSlotPos)
            targetIndex = player.GetItemIndex(targetSlotPos)
            item.SelectItem(metinIndex)
            itemName = item.GetItemName()
            result = player.CanAttachMetin(metinIndex, targetSlotPos)
            if player.ATTACH_METIN_NOT_MATCHABLE_ITEM == result:
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_CAN_NOT_ATTACH(itemName))
            if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result:
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_SOCKET(itemName))
            elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result:
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_GOLD_SOCKET(itemName))
            elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result:
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM)
            if player.ATTACH_METIN_OK != result:
                return
            self.attachMetinDialog.Open(metinSlotPos, targetSlotPos)
    
            
        def OverOutItem(self):
            self.wndItem.SetUsableItem(False)
            if None != self.tooltipItem:
                self.tooltipItem.HideToolTip()
        def OverInItem(self, overSlotPos):
            overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos)
            self.wndItem.SetUsableItem(False)
            if mouseModule.mouseController.isAttached():
                attachedItemType = mouseModule.mouseController.GetAttachedType()
                if player.SLOT_TYPE_INVENTORY == attachedItemType:
                    attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
                    attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex()
                    
                    if self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPos):
                        self.wndItem.SetUsableItem(True)
                        self.ShowToolTip(overSlotPos)
                        return
                    
            self.ShowToolTip(overSlotPos)
    
        def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos):
            "다른 아이템에 사용할 수 있는 아이템인가?"
            if item.IsRefineScroll(srcItemVNum):
                return True
            elif item.IsMetin(srcItemVNum):
                return True
            elif item.IsCostumeScroll(srcItemVNum):
                return True            
            elif item.IsDetachScroll(srcItemVNum):
                return True
            elif item.IsKey(srcItemVNum):
                return True
            elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
                return True
            else:
                if item.GetUseType(srcItemVNum) in self.USE_TYPE_TUPLE:
                    return True
                
            return False
        def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos):
            "대상 아이템에 사용할 수 있는가?"
            if srcSlotPos == dstSlotPos:
                return False
            if item.IsRefineScroll(srcItemVNum):
                if player.REFINE_OK == player.CanRefine(srcItemVNum, dstSlotPos):
                    return True
            elif item.IsMetin(srcItemVNum):
                if player.ATTACH_METIN_OK == player.CanAttachMetin(srcItemVNum, dstSlotPos):
                    return True
            elif item.IsCostumeScroll(srcItemVNum):
                if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos):
                    return True                
            elif item.IsDetachScroll(srcItemVNum):
                if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos):
                    return True
            elif item.IsKey(srcItemVNum):
                if player.CanUnlock(srcItemVNum, dstSlotPos):
                    return True
            elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
                return True
            else:
                useType=item.GetUseType(srcItemVNum)
                if "USE_CLEAN_SOCKET" == useType:
                    if self.__CanCleanBrokenMetinStone(dstSlotPos):
                        return True
                elif "USE_CHANGE_ATTRIBUTE" == useType:
                    if self.__CanChangeItemAttrList(dstSlotPos):
                        return True
                elif "USE_ADD_ATTRIBUTE" == useType:
                    if self.__CanAddItemAttr(dstSlotPos):
                        return True
                elif "USE_ADD_ATTRIBUTE2" == useType:
                    if self.__CanAddItemAttr(dstSlotPos):
                        return True
                elif "USE_ADD_ACCESSORY_SOCKET" == useType:
                    if self.__CanAddAccessorySocket(dstSlotPos):
                        return True
                elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType:                                
                    if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum):
                        return True;
                elif "USE_PUT_INTO_BELT_SOCKET" == useType:                                
                    dstItemVNum = player.GetItemIndex(dstSlotPos)
                    print "USE_PUT_INTO_BELT_SOCKET", srcItemVNum, dstItemVNum
                    item.SelectItem(dstItemVNum)
            
                    if item.ITEM_TYPE_BELT == item.GetItemType():
                        return True
                    
            return False
        def __CanCleanBrokenMetinStone(self, dstSlotPos):
            dstItemVNum = player.GetItemIndex(dstSlotPos)
            if dstItemVNum == 0:
                return False
            item.SelectItem(dstItemVNum)
            
            if item.ITEM_TYPE_WEAPON != item.GetItemType():
                return False
            for i in xrange(player.METIN_SOCKET_MAX_NUM):
                if player.GetItemMetinSocket(dstSlotPos, i) == constInfo.ERROR_METIN_STONE:
                    return True
            return False
        def __CanChangeItemAttrList(self, dstSlotPos):
            dstItemVNum = player.GetItemIndex(dstSlotPos)
            if dstItemVNum == 0:
                return False
            item.SelectItem(dstItemVNum)
            
            if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR):     
                return False
            for i in xrange(player.METIN_SOCKET_MAX_NUM):
                if player.GetItemAttribute(dstSlotPos, i) != 0:
                    return True
            return False
        def __CanPutAccessorySocket(self, dstSlotPos, mtrlVnum):
            dstItemVNum = player.GetItemIndex(dstSlotPos)
            if dstItemVNum == 0:
                return False
            item.SelectItem(dstItemVNum)
            if item.GetItemType() != item.ITEM_TYPE_ARMOR:
                return False
            if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR):
                return False
            curCount = player.GetItemMetinSocket(dstSlotPos, 0)
            maxCount = player.GetItemMetinSocket(dstSlotPos, 1)
            if mtrlVnum != constInfo.GET_ACCESSORY_MATERIAL_VNUM(dstItemVNum, item.GetItemSubType()):
                return False
            
            if curCount>=maxCount:
                return False
            return True
        def __CanAddAccessorySocket(self, dstSlotPos):
            dstItemVNum = player.GetItemIndex(dstSlotPos)
            if dstItemVNum == 0:
                return False
            item.SelectItem(dstItemVNum)
            if item.GetItemType() != item.ITEM_TYPE_ARMOR:
                return False
            if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR):
                return False
            curCount = player.GetItemMetinSocket(dstSlotPos, 0)
            maxCount = player.GetItemMetinSocket(dstSlotPos, 1)
            
            ACCESSORY_SOCKET_MAX_SIZE = 3
            if maxCount >= ACCESSORY_SOCKET_MAX_SIZE:
                return False
            return True
        def __CanAddItemAttr(self, dstSlotPos):
            dstItemVNum = player.GetItemIndex(dstSlotPos)
            if dstItemVNum == 0:
                return False
            item.SelectItem(dstItemVNum)
            
            if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR):     
                return False
                
            attrCount = 0
            for i in xrange(player.METIN_SOCKET_MAX_NUM):
                if player.GetItemAttribute(dstSlotPos, i) != 0:
                    attrCount += 1
            if attrCount<4:
                return True
                                    
            return False
        def ShowToolTip(self, slotIndex):
            if None != self.tooltipItem:
                self.tooltipItem.SetInventoryItem(slotIndex)
        def OnTop(self):
            if None != self.tooltipItem:
                self.tooltipItem.SetTop()
        def OnPressEscapeKey(self):
            self.Close()
            return True
        def UseItemSlot(self, slotIndex):
        
            curCursorNum = app.GetCursor()
            if app.SELL == curCursorNum:
                return
            if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS():
                return
            slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex)
            if app.ENABLE_DRAGON_SOUL_SYSTEM:
                if self.wndDragonSoulRefine.IsShow():
                    self.wndDragonSoulRefine.AutoSetItem((player.INVENTORY, slotIndex), 1)
                    return
     
            self.__UseItem(slotIndex)
            mouseModule.mouseController.DeattachObject()
            self.OverOutItem()
        def SetOpenBoniSwitcherEvent(self, event):
            self.OpenBoniSwitcherEvent = ui.__mem_func__(event)
        def __UseItem(self, slotIndex):
            ItemVNum = player.GetItemIndex(slotIndex)
            item.SelectItem(ItemVNum)
            if item.IsFlag(item.ITEM_FLAG_CONFIRM_WHEN_USE):
                self.questionDialog = uiCommon.QuestionDialog()
                self.questionDialog.SetText(localeInfo.INVENTORY_REALLY_USE_ITEM)
                self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnAccept))
                self.questionDialog.SetCancelEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnCancel))
                self.questionDialog.Open()
                self.questionDialog.slotIndex = slotIndex
                constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
                
            else:
                self.__SendUseItemPacket(slotIndex)
        def __UseItemQuestionDialog_OnCancel(self):
            self.OnCloseQuestionDialog()
        def __UseItemQuestionDialog_OnAccept(self):
            self.__SendUseItemPacket(self.questionDialog.slotIndex)
            self.OnCloseQuestionDialog()    
        def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos):
            # 개인상점 열고 있는 동안 아이템 사용 방지
            if uiPrivateShopBuilder.IsBuildingPrivateShop():
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
                return
                
            if (uiOfflineShopBuilder.IsBuildingOfflineShop()):
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP)
                return
                
            if (uiOfflineShop.IsEditingOfflineShop()):
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP)
                return
            net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)
        def __SendUseItemPacket(self, slotPos):
            # 개인상점 열고 있는 동안 아이템 사용 방지
            if uiPrivateShopBuilder.IsBuildingPrivateShop():
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
                return
                
            if (uiOfflineShopBuilder.IsBuildingOfflineShop()):
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP)
                return
                
            if (uiOfflineShop.IsEditingOfflineShop()):
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP)
                return
            net.SendItemUsePacket(slotPos)
        
        def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
            # 개인상점 열고 있는 동안 아이템 사용 방지
            if uiPrivateShopBuilder.IsBuildingPrivateShop():
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
                return
                
            if (uiOfflineShopBuilder.IsBuildingOfflineShop()):
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_OFFLINE_SHOP)
                return
                
            if (uiOfflineShop.IsEditingOfflineShop()):
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_OFFLINE_SHOP)
                return
            net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount)
        
        def SetDragonSoulRefineWindow(self, wndDragonSoulRefine):
            if app.ENABLE_DRAGON_SOUL_SYSTEM:
                self.wndDragonSoulRefine = wndDragonSoulRefine
        def GetAcceAttribute(self, srcSlotPos):
            result = 0
            attrSlot = []
            for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
                attrSlot.append(player.GetItemAttribute(srcSlotPos, i))
                
            if 0 != attrSlot:
                for c in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
                    type = attrSlot[c][0]
                    if type != 0:
                        result = result + 1
            
            return result
                
        def OnMoveWindow(self, x, y):
    #        print "Inventory Global Pos : ", self.GetGlobalPosition()
            if self.wndBelt:
    #            print "Belt Global Pos : ", self.wndBelt.GetGlobalPosition()
                self.wndBelt.AdjustPositionAndSize()            

     


     

    Portanto como vês, não há ai nenhum Lovele ou PTC..


  4. Boas pessoal, tou a utilizar files 40k, se utilizra o comando /mount_test funciona com todas, mas se utilizar o item, ele vai lá para cima para o slot ( equipado ) mas não monta a montada.

    Deixo aqui a quest em .lua:

    Alguem sabe como resolver isso ?

    Spoiler

    ------------------------------------------------------------
    --------  

    
     Montarias Oficiais By: Edson.B.Junior    --------
    ------------------------------------------------------------
    quest ride begin
        state start begin
            function Ride(vnum, remain_time)
                ride_info = {
    -------------------------------------------------------------------------------------------------------------------------------
                    ---------------------------------------------------------------------------------------------------------------
                    -- ID do Item | ID da Montaria | Tempo | Bonus | Qt do Bonus | Level | Remover item sim ou não - True or False
                    ---------------------------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------------------------------------------
                    [71114] = {20110, 60*10, apply.DEF_GRADE_BONUS, 75, 75, true},
                    --[71115] = {00000, 60*10, apply.NONE, 0, 1, true },
                    [71116] = {20111, 60*10, apply.DEF_GRADE_BONUS, 100, 80, true},
                    --[71117] = {00000, 60*10, apply.NONE, 0, 1, true },
                    [71118] = {20112, 60*10, apply.DEF_GRADE_BONUS, 125, 85, true},
                    --[71119] = {00000, 60*10, apply.NONE, 0, 1, true },
                    [71120] = {20113, 60*10, apply.DEF_GRADE_BONUS, 200, 85, true},
                    --[71121] = {00000, 60*10, apply.NONE, 0, 1, true },
    -------------------------------- 2592000
                    [71124] = {20114, item.get_socket(2)*60, apply.EXP_DOUBLE_BONUS, 20, 1, false},        --Item Shop
                    [71125] = {20115, 60*60*24*30, apply.ATTBONUS_MONSTER, 20, 20, false},
                    [71126] = {20116, 60*60*24*30, apply.CRITICAL_PCT, 10, 20, false},
                    [71127] = {20117, 60*60*24*30, apply.CRITICAL_PCT, 10, 20, false},
                    [71128] = {20118, 60*60*24*30, apply.NORMAL_HIT_DEFEND_BONUS, 10, 20, false},
    -------------------------------- 
                    [71131] = {20119, 60*60*24*7, apply.MOV_SPEED, 60, 1, false},
                    [71132] = {20119, 60*60*24*15, apply.MOV_SPEED, 60, 1, false},
                    [71133] = {20119, 60*60*24*30, apply.MOV_SPEED, 60, 1, false},
                    [71134] = {20119, 60*60*24*60, apply.MOV_SPEED, 60, 1, false},
    -------------------------------- 
                    [71137] = {20120, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false},
                    [71138] = {20121, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false},
                    [71139] = {20122, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false},
                    [71140] = {20123, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false},
                    [71141] = {20124, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false},
                    [71142] = {20125, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false},
    -------------------------------- 
                    [71161] = {20219, 60*60*24*30, apply.MOV_SPEED, 60, 1, false},
                    [71164] = {20220, 60*60*24*30, apply.MOV_SPEED, 60, 1, false},
                    [71165] = {20221, 60*60*24*30, apply.MOV_SPEED, 60, 1, false},
                    [71166] = {20222, 60*60*24*30, apply.MOV_SPEED, 60, 1, false},
                    [71171] = {20227, 60*60*24*30, apply.MOV_SPEED, 60, 1, false},
                    [71172] = {20226, 60*60*24*30, apply.MOV_SPEED, 60, 1, false},
                    [71176] = {20231, 60*60*24*30, apply.MOV_SPEED, 30, 1, false},
                    [71177] = {20232, 60*60*24*30, apply.MOV_SPEED, 30, 1, false},
                    [71182] = {20233, 60*60*24*30, apply.MOV_SPEED, 30, 1, false},
                    [71183] = {20234, 60*60*24*30, apply.MOV_SPEED, 30, 1, false},
                    [71184] = {20235, 60*60*24*30, apply.MOV_SPEED, 30, 1, false},
                    [71185] = {20236, 60*60*24*30, apply.MOV_SPEED, 30, 1, false},
                    [71186] = {20237, 60*60*24*30, apply.MOV_SPEED, 30, 1, false},
                    [71187] = {20238, 60*60*24*30, apply.MOV_SPEED, 30, 1, false},
    -------------------------------- 
                    [71192] = {20239, 60*60*24*30, apply.MOV_SPEED, 20, 1, false},
                    [71193] = {20240, 60*60*24*30, apply.MOV_SPEED, 20, 1, false},
    -------------------------------------------------------------------------------------------------------------------------------
                    ---------------------------------------------------------------------------------------------------------------
                    [52001] = {20201, 60*60*24*7, apply.NONE, 0, 0, false},
                    [52002] = {20201, 60*60*24*7, apply.NONE, 0, 0, false},
                    [52003] = {20201, 60*60*24*7, apply.NONE, 0, 0, false},
                    [52004] = {20201, 60*60*24*7, apply.NONE, 0, 0, false},
                    [52005] = {20201, 60*60*24*7, apply.NONE, 0, 0, false},
                    [52006] = {20205, 60*60*24*15, apply.ATTBONUS_MONSTER, 3, 0, false},
                    [52007] = {20205, 60*60*24*15, apply.MALL_EXPBONUS, 3, 0, false},
                    [52008] = {20205, 60*60*24*15, apply.MAX_HP, 250, 0, false},
                    [52009] = {20205, 60*60*24*15, apply.DEF_GRADE_BONUS, 50, 0, false},
                    [52010] = {20205, 60*60*24*15, apply.ATT_GRADE_BONUS, 30, 0, false},
                    [52011] = {20209, 60*60*24*30, apply.ATTBONUS_MONSTER, 5, 0, false},
                    [52012] = {20209, 60*60*24*30, apply.MALL_EXPBONUS, 5, 0, false},
                    [52013] = {20209, 60*60*24*30, apply.MAX_HP, 500, 0, false},
                    [52014] = {20209, 60*60*24*30, apply.DEF_GRADE_BONUS, 150, 0, false},
                    [52015] = {20209, 60*60*24*30, apply.ATT_GRADE_BONUS, 100, 0, false},
    ---------------------------
                    [52016]    = {20202, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52017] = {20202, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52018] = {20202, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52019] = {20202, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52020] = {20202, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52021] = {20206, 60*60*24*365, apply.ATTBONUS_MONSTER, 3, 0, false},
                    [52022] = {20206, 60*60*24*365, apply.MALL_EXPBONUS, 3, 0, false},
                    [52023] = {20206, 60*60*24*365, apply.MAX_HP, 250, 0, false},
                    [52024] = {20206, 60*60*24*365, apply.DEF_GRADE_BONUS, 50, 0, false},
                    [52025] = {20206, 60*60*24*365, apply.ATT_GRADE_BONUS, 30, 0, false},
                    [52026] = {20210, 60*60*24*365, apply.ATTBONUS_MONSTER, 5, 0, false},
                    [52027] = {20210, 60*60*24*365, apply.MALL_EXPBONUS, 5, 0, false},
                    [52028] = {20210, 60*60*24*365, apply.MAX_HP, 500, 0, false},
                    [52029] = {20210, 60*60*24*365, apply.DEF_GRADE_BONUS, 150, 0, false},
                    [52030] = {20210, 60*60*24*365, apply.ATT_GRADE_BONUS, 100, 0, false},
    ---------------------------
                    [52031]= {20204, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52032]= {20204, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52033]= {20204, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52034]= {20204, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52035]= {20204, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52036]= {20208, 60*60*24*365, apply.ATTBONUS_MONSTER, 3, 0, false},
                    [52037]= {20208, 60*60*24*365, apply.MALL_EXPBONUS, 3, 0, false},
                    [52038]= {20208, 60*60*24*365, apply.MAX_HP, 250, 0, false},
                    [52039]= {20208, 60*60*24*365, apply.DEF_GRADE_BONUS, 50, 0, false},
                    [52040]= {20208, 60*60*24*365, apply.ATT_GRADE_BONUS, 30, 0, false},
                    [52041]= {20212, 60*60*24*365, apply.ATTBONUS_MONSTER, 5, 0, false},
                    [52042]= {20212, 60*60*24*365, apply.MALL_EXPBONUS, 5, 0, false},
                    [52043]= {20212, 60*60*24*365, apply.MAX_HP, 500, 0, false},
                    [52044]= {20212, 60*60*24*365, apply.DEF_GRADE_BONUS, 150, 0, false},
                    [52045]= {20212, 60*60*24*365, apply.ATT_GRADE_BONUS, 100, 0, false},
    ---------------------------
                    [52046]= {20203, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52047]= {20203, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52048]= {20203, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52049]= {20203, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52050]= {20203, 60*60*24*365, apply.NONE, 0, 0, false},
                    [52051]= {20207, 60*60*24*365, apply.ATTBONUS_MONSTER, 3, 0, false},
                    [52052]= {20207, 60*60*24*365, apply.MALL_EXPBONUS, 3, 0, false},
                    [52053]= {20207, 60*60*24*365, apply.MAX_HP, 250, 0, false},
                    [52054]= {20207, 60*60*24*365, apply.DEF_GRADE_BONUS, 50, 0, false},
                    [52055]= {20207, 60*60*24*365, apply.ATT_GRADE_BONUS, 30, 0, false},
                    [52056]= {20211, 60*60*24*365, apply.ATTBONUS_MONSTER, 5, 0, false},
                    [52057]= {20211, 60*60*24*365, apply.MALL_EXPBONUS, 5, 0, false},
                    [52058]= {20211, 60*60*24*365, apply.MAX_HP, 500, 0, false},
                    [52059]= {20211, 60*60*24*365, apply.DEF_GRADE_BONUS, 150, 0, false},
                    [52060]= {20211, 60*60*24*365, apply.ATT_GRADE_BONUS, 100, 0, false},
    -------------------------------------------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------------------------------------------
                }
                if pc.level < ride_info[vnum][5] then
                    say("")
                    say_title("Olá "..pc.get_name())
                    say("")
                    say("Seu nível é muito baixo para usar essa montaria! ")
                    say("Você não é capaz de doma-la... ")
                    say("")
                    return
                -- elseif pc.is_polymorphed() then
                    -- say("")
                    -- say_title("Olá "..pc.get_name())
                    -- say("")
                    -- say("Não é permitido o uso da montaria, enquanto estiver transformado! ")
                    -- say("")
                    -- return
                -- elseif pc.is_riding() then
                    -- say("")
                    -- say_title("Olá "..pc.get_name())
                    -- say("")
                    -- say("Não é permitido o uso da montaria, quando está montado")
                    -- say("")
                    -- return
                else
                    if ride_info[vnum][2] == 0 and remain_time != 0 then
                        pc.mount(ride_info[vnum][1], remain_time*60)
                        pc.mount_bonus( ride_info[vnum][3], ride_info[vnum][4], remain_time*60)
                    else
                        pc.mount(ride_info[vnum][1], ride_info[vnum][2] )
                        pc.mount_bonus(ride_info[vnum][3], ride_info[vnum][4], ride_info[vnum][2])
                    end
                    -- pc.mount(ride_info[vnum][1], ride_info[vnum][2])
                    -- pc.mount_bonus(ride_info[vnum][3], ride_info[vnum][4], ride_info[vnum][2])
                    if true == ride_info[vnum][6] then
                        pc.remove_item(vnum, 1)
                    end
                end
            end
            when 71114.use or 71115.use or 71116.use or 71117.use or 71118.use or 71119.use or 71120.use or 71121.use or 
                71124.use or  71125.use or 71126.use or 71127.use or 71128.use or 71137.use or 71138.use or 71139.use or 71140.use or 71141.use or 71142.use or 
                71161.use or 71164.use or 71165.use or 71166.use or 71171.use or 71172.use or 71176.use or 71177.use or 71182.use or 71183.use or 71184.use or 
                71185.use or 71186.use or 71187.use or 71131.use or 71132.use or 71133.use or 71134.use or 71192.use or 71193.use begin
                if pc.get_map_index() == 110 or pc.get_map_index() == 111 or pc.get_map_index() == 112 or pc.get_map_index() == 113 or
                    pc.get_map_index() == 118 or pc.get_map_index() == 119 or pc.get_map_index() == 120 or pc.get_map_index() == 122 or
                    pc.get_map_index() == 123 or pc.get_map_index() == 124 or pc.get_map_index() == 126 or pc.get_map_index() == 127 or
                    pc.get_map_index() == 128 and not pc.is_gm() then
                    say("")
                    say_title("Olá "..pc.get_name())
                    say("")
                    say("Não é permitido o uso da montaria neste local. ")
                    return
                end
                if pc.is_polymorphed() then
                    syschat("Não é permitido o uso da montaria, enquanto estiver transformado! ")
                elseif false == pc.is_riding() then
                     if true == horse.is_summon() then
                        horse.unsummon()
                    end
                    ride.Ride(item.vnum, 0)
                else
                    pc.unmount()
                end
            end
            when 52001.use or 52002.use or 52003.use or 52004.use or 52005.use  or 52006.use or 52007.use or 52008.use or 52009.use or 52010.use  or 52011.use or 
                52012.use or 52013.use or 52014.use or 52015.use or 52016.use or 52017.use or 52018.use or 52019.use or 52020.use  or 52021.use or 52022.use or 
                52023.use or 52024.use or 52025.use  or 52026.use or 52027.use or 52028.use or 52029.use or 52030.use or 52031.use or 52032.use or 52033.use or 
                52034.use or 52035.use  or 52036.use or 52037.use or 52038.use or 52039.use or 52040.use or 52041.use or 52042.use or 52043.use or 52044.use or 
                52045.use or 52046.use or 52047.use or 52048.use or 52049.use or 52050.use or  52051.use or 52052.use or 52053.use or 52054.use or 52055.use or 
                52056.use or 52057.use or 52058.use or 52059.use or 52060.use begin
                if pc.get_map_index() == 110 or pc.get_map_index() == 111 or pc.get_map_index() == 112 or pc.get_map_index() == 113 or
                    pc.get_map_index() == 118 or pc.get_map_index() == 119 or pc.get_map_index() == 120 or pc.get_map_index() == 122 or
                    pc.get_map_index() == 123 or pc.get_map_index() == 124 or pc.get_map_index() == 126 or pc.get_map_index() == 127 or
                    pc.get_map_index() == 128 and not pc.is_gm() then
                    say("")
                    say_title("Olá "..pc.get_name())
                    say("")
                    say("Não é permitido o uso da montaria neste local. ")
                    return
                end
                -- if pc.get_armor() == 11901 or pc.get_armor() == 11902 then
                    -- say("")
                    -- say_title("Olá "..pc.get_name())
                    -- say("")
                    -- say("Não é permitido montar usando Smoking")
                    -- say("")
                    -- return
                -- elseif pc.get_armor() == 11903 or pc.get_armor() == 11904 then
                    -- say("")
                    -- say_title("Olá "..pc.get_name())
                    -- say("")
                    -- say("Não é permitido montar usando Vestido de Noiva")
                    -- say("")
                    -- return
                -- end
                if pc.is_polymorphed() then
                    syschat("Não é permitido o uso da montaria, enquanto estiver transformado! ")
                elseif false == pc.is_riding() then
                    if true == horse.is_summon() then
                        horse.unsummon()
                    end
                    ride.Ride(item.vnum, 0)
                else
                    pc.unmount()
                end
            end
            when login begin
                local vnum, remain_time = pc.get_special_ride_vnum()
                if 0 != vnum then
                    ride.Ride(vnum, remain_time)
                end
            end
        end
    end
    

     

     


  5. Boas pessoal, eu ando há procura da source para as files 40k do maxmi, alguem me consegue arranjar o link ?

    Queria editar umas files completas.. Implementar shops offline, alquimia, trajes, e isso tudo

    Portanto, comvém ter a source xD

    E como não estou muito por dentro das melhores sources venho pedir-vos a vossa opinião/link.

     


  6. Feito isso, o cliente desliga antes de entrar na personagem.

     

    syserr do cliente metin2rage:

     

    0213 01:28:08165 :: 
    networkModule.py(line:200) SetSelectCharacterPhase
    system.py(line:130) __pack_import
    system.py(line:110) _process_result
    introSelect.py(line:25) <module>
    system.py(line:130) __pack_import
    system.py(line:110) _process_result
    uiCharacter.py(line:43) <module>
     
    networkModule.SetSelectCharacterPhase - <type 'exceptions.AttributeError'>:'module' object has no attribute 'RACE_WOLFMAN_M'
     
    0213 01:28:08165 :: ============================================================================================================
    0213 01:28:08165 :: Abort!!!!