Jump to content

M4str0

Member
  • Posts

    25
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by M4str0

  1. hi,i modified the source to implement the horse level 30, however, it is still visible the horse lv 21 even if the horse is 30 lv.

    This source 

    horse_rider.cpp

    Spoiler

    THorseStat c_aHorseStat[HORSE_MAX_LEVEL+1] =
    /*
       int iMinLevel;    // ž½ÂÇÒ ¼ö ÀÖ´Â ÃÖ¼Ò ·¹º§
       int iNPCRace;
       int iMaxHealth;    // ¸»ÀÇ ÃÖ´ë ü·Â
       int iMaxStamina;    // ¸»ÀÇ ÃÖ´ë ½ºÅ׹̳Ê
       int iST;
       int iDX;
       int iHT;
       int iIQ;
       int iDamMean;
       int iDamMin;
       int iDamMax;
       int iDef;
     */
    {
        {  0,    0,    1,    1,    0,    0,    0,    0,    0,    0,    0,    0  },
        { 25,    20101,    3,    4,    26,    35,    18,    9,    54,    43,    64,    32 },    // 1 (ÃʱÞ)
        { 25,    20101,    4,    4,    27,    36,    18,    9,    55,    44,    66,    33 },
        { 25,    20101,    5,    5,    28,    38,    19,    9,    56,    44,    67,    33 },
        { 25,    20101,    7,    5,    29,    39,    19,    10,    57,    45,    68,    34 },
        { 25,    20101,    8,    6,    30,    40,    20,    10,    58,    46,    69,    34 },
        { 25,    20101,    9,    6,    31,    41,    21,    10,    59,    47,    70,    35 },
        { 25,    20101,    11,    7,    32,    42,    21,    11,    60,    48,    72,    36 },
        { 25,    20101,    12,    7,    33,    44,    22,    11,    61,    48,    73,    36 },
        { 25,    20101,    13,    8,    34,    45,    22,    11,    62,    49,    74,    37 },
        { 25,    20101,    15,    10,    35,    46,    23,    12,    63,    50,    75,    37 },
        { 35,    20104,    18,    30,    40,    53,    27,    13,    69,    55,    82,    41 },    // 11 (Áß±Þ)
        { 35,    20104,    19,    35,    41,    54,    27,    14,    70,    56,    84,    42 },
        { 35,    20104,    21,    40,    42,    56,    28,    14,    71,    56,    85,    42 },
        { 35,    20104,    22,    50,    43,    57,    28,    14,    72,    57,    86,    43 },
        { 35,    20104,    24,    55,    44,    58,    29,    15,    73,    58,    87,    43 },
        { 35,    20104,    25,    60,    44,    59,    30,    15,    74,    59,    88,    44 },
        { 35,    20104,    27,    65,    45,    60,    30,    15,    75,    60,    90,    45 },
        { 35,    20104,    28,    70,    46,    62,    31,    15,    76,    60,    91,    45 },
        { 35,    20104,    30,    80,    47,    63,    31,    16,    77,    61,    92,    46 },
        { 35,    20104,    32,    100,    48,    64,    32,    16,    78,    62,    93,    46 },
        { 50,    20107,    35,    120,    53,    71,    36,    18,    84,    67,    100,    50 },    // 21 (°í±Þ)
        { 50,    20107,    36,    125,    55,    74,    37,    18,    86,    68,    103,    51 },
        { 50,    20107,    37,    130,    57,    76,    38,    19,    88,    70,    105,    52 },
        { 50,    20107,    38,    135,    59,    78,    39,    20,    90,    72,    108,    54 },
        { 50,    20107,    40,    140,    60,    80,    40,    20,    91,    72,    109,    54 },
        { 50,    20107,    42,    145,    61,    81,    40,    20,    92,    73,    110,    55 },
        { 50,    20107,    44,    150,    62,    83,    42,    21,    94,    75,    112,    56 },
        { 50,    20107,    46,    160,    63,    84,    42,    21,    95,    76,    114,    57 },
        { 50,    20107,    48,    170,    65,    87,    43,    22,    97,    77,    116,    58 },
        { 50,    20107,    50,    200,    67,    89,    45,    22,    99,    79,    118,    59 },
        { 75,    20401,    50,    120,    53,    89,    45,    22,    99,    79,    118,    60 },    // 30 imperiale
        { 75,    20401,    50,    125,    55,    91,    47,    22,    101,    81,    120,    61 },
        { 75,    20401,    50,    130,    57,    93,    49,    22,    101,    83,    122,    62 },
        { 75,    20401,    55,    135,    59,    95,    49,    23,    101,    85,    124,    64 },
        { 75,    20401,    55,    140,    60,    97,    49,    23,    101,    87,    126,    64 },
        { 75,    20401,    55,    145,    61,    99,    49,    23,    101,    89,    128,    65 },
        { 75,    20401,    60,    150,    62,    101,    51,    24,    101,    91,    130,    66 },
        { 75,    20401,    60,    160,    63,    103,    15,    24,    102,    93,    135,    67 },
        { 75,    20401,    65,    170,    65,    105,    51,    24,    102,    95,    140,    68 },
        { 75,    20401,    65,    200,    67,    107,    51,    25,    103,    97,    150,    70 }
    };
     

    horse_rider.h

    const int HORSE_MAX_LEVEL = 40;

  2. Hi, i have this problem, how to resolve?

    Spoiler

    1229 15:19:16169 :: GRANNY: r:/granny/rt/granny_file_info.cpp(145): File has run-time type tag of 0x8000000f, which doesn't match this version of Granny (0x80000010).  Automatic conversion will be attempted.
    1229 15:19:16677 ::  CTerrain::LoadShadowTexture - ShadowTexture is Empty
    1229 15:19:21287 :: 
    uiInventory.py(line:313) __LoadWindow
    ui.py(line:2709) GetChild

    InventoryWindow.LoadWindow.BindObject - <type 'exceptions.KeyError'>:'Inventory_Tab_03'

    1229 15:19:21287 :: ============================================================================================================
    1229 15:19:21287 :: Abort!!!!
     

    my files:

    inventorywindows.py

    Spoiler

    import uiScriptLocale

    EQUIPMENT_START_INDEX = 180

    window = {
        "name" : "InventoryWindow",

        ## 600 - (width + 오른쪽으로 부터 띄우기 24 px)
        "x" : SCREEN_WIDTH - 176 - 200,
        "y" : SCREEN_HEIGHT - 37 - 565,

        "style" : ("movable", "float",),

        "width" : 176,
        "height" : 565,

        "children" :
        (
            {
                "name" : "board",
                "type" : "board",
                "style" : ("attach",),

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

                "width" : 176,
                "height" : 565,

                "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_PAGE_BUTTON_TOOLTIP_2, "text_horizontal_align":"center" },
                        ),
                    },

                    ## Equipment Slot
                    {
                        "name" : "Equipment_Base",
                        "type" : "image",

                        "x" : 10,
                        "y" : 33,

                        "image" : "d:/ymir work/ui/game/windows/equipment_base.sub",

                        "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":84, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+6, "x":114, "y":52, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+7, "x":2, "y":113, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+8, "x":75, "y":113, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+9, "x":114, "y":1, "width":32, "height":32},
                                            {"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32},
                                        ),
                            },

                            {
                                "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" : 10,
                        "y" : 33 + 191,

                        "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
                        "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
                        "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_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" : 10 + 78,
                        "y" : 33 + 191,

                        "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
                        "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
                        "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_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" : 10,
                        "y" : 33 + 210,

                        "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
                        "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
                        "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
                        "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_3,

                        "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" : 10 + 78,
                        "y" : 33 + 210,

                        "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
                        "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
                        "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
                        "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_4,

                        "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"
                    },

                    ## Print
                    {
                        "name":"Money_Slot",
                        "type":"button",

                        "x":8,
                        "y":28,

                        "horizontal_align":"center",
                        "vertical_align":"bottom",

                        "default_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
                        "over_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
                        "down_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",

                        "children" :
                        (
                            {
                                "name":"Money_Icon",
                                "type":"image",

                                "x":-18,
                                "y":20,

                                "image":"d:/ymir work/ui/game/windows/money_icon.sub",
                            },

                            {
                                "name" : "Money",
                                "type" : "text",

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

                                "horizontal_align" : "right",
                                "text_horizontal_align" : "right",

                                "text" : "123456789",
                            },
                        ),
                    },

                ),
            },
        ),
    }
     

    uiinventory.py

    Spoiler

    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 localeInfo
    import constInfo
    import ime
    import wndMgr

    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()

            if localeInfo.IsARABIC() == 0:
                self.AdjustPositionAndSize()
                    
        def CloseInventory(self):
            self.wndBeltInventoryLayer.Hide()
            self.expandBtn.Show()
            
            if localeInfo.IsARABIC() == 0:
                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))
                
                if localeInfo.IsARABIC() :
                    self.expandBtn.SetPosition(self.expandBtn.GetWidth() - 2, 15)
                    self.wndBeltInventoryLayer.SetPosition(self.wndBeltInventoryLayer.GetWidth() - 5, 0)
                    self.minBtn.SetPosition(self.minBtn.GetWidth() + 3, 15)            
        
                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.isOpenedBeltWindowWhenClosingInventory = 0        # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ

            self.__LoadWindow()

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

        def Show(self):
            self.__LoadWindow()

            ui.ScriptWindow.Show(self)

            # 인벤토리를 닫을 때 코스츔이 열려있었다면 인벤토리를 열 때 코스츔도 같이 열도록 함.
            if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
                self.wndCostume.Show() 

            # 인벤토리를 닫을 때 벨트 인벤토리가 열려있었다면 같이 열도록 함.
            if self.wndBelt:
                self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory)

        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.mallButton = self.GetChild2("MallButton")
                self.DSSButton = self.GetChild2("DSSButton")
                self.costumeButton = self.GetChild2("CostumeButton")
                
                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))

            ## 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.inventoryTab[0].Down()

            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))

            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.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 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()
            
            wndMgr.Hide(self.hWnd)
            
        
        def Close(self):
            self.Hide()

        def SetInventoryPage(self, page):
            self.inventoryTab[self.inventoryPageIndex].SetUp()
            self.inventoryPageIndex = page
            self.inventoryTab[self.inventoryPageIndex].Down()
            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()

        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 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 (app.ENABLE_NEW_EQUIPMENT_SYSTEM and player.IsBeltInventorySlot(local)):
                return local

            return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local

        def RefreshBagSlotWindow(self):
            getItemVNum=player.GetItemIndex
            getItemCount=player.GetItemCount
            setItemVNum=self.wndItem.SetItemSlot
            
            for i in xrange(player.INVENTORY_PAGE_SIZE):
                slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
                
                itemCount = getItemCount(slotNumber)
                # itemCount == 0이면 소켓을 비운다.
                if 0 == itemCount:
                    self.wndItem.ClearSlot(i)
                    continue
                elif 1 == itemCount:
                    itemCount = 0
                    
                itemVnum = getItemVNum(slotNumber)
                setItemVNum(i, itemVnum, itemCount)
                
                ## 자동물약 (HP: #72723 ~ #72726, SP: #72727 ~ #72730) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
                if constInfo.IS_AUTO_POTION(itemVnum):
                    # metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
                    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(slotNumber)
                        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(slotNumber)            
                        
            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()
            self.wndMoney.SetText(localeInfo.NumberToMoneyString(money))

        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_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 player.GetItemIndex(dstItemSlotPos) == player.GetItemIndex(srcItemSlotPos):
                self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0)
                return
            if item.IsRefineScroll(srcItemVID):
                self.RefineItem(srcItemSlotPos, dstItemSlotPos)
                self.wndItem.SetUseMode(FALSE)
            elif item.IsMetin(srcItemVID):
                self.AttachMetinToItem(srcItemSlotPos, dstItemSlotPos)
            elif item.IsDetachScroll(srcItemVID):
                self.DetachMetinFromItem(srcItemSlotPos, dstItemSlotPos)
            elif item.IsKey(srcItemVID):
                self.__Send(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")
             
                ## AIμ¿½AA² °÷AI AaAø ½½·OAI °æ¿i ¾ÆAIAUA≫ ≫c¿eCؼ­ AaAø ½AA²´U - [levites]
                if player.IsEquipmentSlot(dstItemSlotPos):
                    ## μe°i AO´A ¾ÆAIAUAI AaºnAI¶§¸¸
                    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 DetachMetinFromItem(self, scrollSlotPos, targetSlotPos):
            scrollIndex = player.GetItemIndex(scrollSlotPos)
            targetIndex = player.GetItemIndex(targetSlotPos)

            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 constInfo.IS_POWERSNACK(srcItemVNum):
                return True            
            elif item.IsRefineScroll(srcItemVNum):
                return True
            elif item.IsMetin(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 constInfo.IS_POWERSNACK(srcItemVNum):
                if constInfo.IS_MOUNT(player.GetItemIndex(dstSlotPos)):
                    return True
            elif 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.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_TIME_CHARGE_FIX" == useType:                    
                    if self.__CanAddTime(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 __CanAddTime(self, dstSlotPos, mtrlVnum):
            dstItemVNum = player.GetItemIndex(dstSlotPos)
            if dstItemVNum == 0:
                return False

            item.SelectItem(dstItemVNum)
            
            if not item.GetItemSubType() in (item.UNIQUE_SPECIAL_MOUNT_RIDE):
                return False

            curCount = player.GetItemMetinSocket(dstSlotPos, 0)
            maxCount = player.GetItemMetinSocket(dstSlotPos, 1)
            
            if curCount>=maxCount:
                return False

            return True
        
        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 and item.GetItemType() != item.ITEM_TYPE_BELT:
                return False

            if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR) and item.GetItemType() != item.ITEM_TYPE_BELT:
                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 __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)
                #net.SendItemUsePacket(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

            net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)

        def __SendUseItemPacket(self, slotPos):
            # 개인상점 열고 있는 동안 아이템 사용 방지
            if uiPrivateShopBuilder.IsBuildingPrivateShop():
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_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

            net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount)
        
        def SetDragonSoulRefineWindow(self, wndDragonSoulRefine):
            if app.ENABLE_DRAGON_SOUL_SYSTEM:
                self.wndDragonSoulRefine = wndDragonSoulRefine
                
        def OnMoveWindow(self, x, y):
    #        print "Inventory Global Pos : ", self.GetGlobalPosition()
            if self.wndBelt:
    #            print "Belt Global Pos : ", self.wndBelt.GetGlobalPosition()
                self.wndBelt.AdjustPositionAndSize()
                            
     

    locale_interface:

    Spoiler

    ACCEPT    Conferma
    ACCE_ABSORB    Assorbimento dei bonus
    ACCE_COMBINE    Fusione
    ACCE_MAIN    Stola 1
    ACCE_RESULT    Risultato
    ACCE_SERVE    Stola 2
    ATTACH_METIN_INFO    Vuoi utilizzare la Pietra Spirituale?
    ATTACH_METIN_TITLE    Utilizza la Pietra Spirituale
    CANCEL    Interrompi
    CHANGE_PASSWORD_CONFIRM    Conferma nuova pass
    CHANGE_PASSWORD_NEW    Nuova password
    CHANGE_PASSWORD_OLD    Vecchia password
    CHANGE_PASSWORD_TITLE    Modifica password
    CHARACTER_ACTION    Azioni
    CHARACTER_EMOTICON    Emozioni
    CHARACTER_MAIN    Personaggio
    CHARACTER_MUTUAL_ACTION    Azioni interattive
    CHARACTER_NORMAL_ACTION    Azioni normali
    CHARACTER_QUEST    Missioni
    CHARACTER_SKILL    Abilità
    CLOSE    Chiudi
    COSTUME_TITLE    Costumi
    COSTUME_WINDOW_TITLE    Costumi
    CREATE_ATT_GRADE    STR
    CREATE_CREATE    Imposta
    CREATE_DEX_GRADE    DEX
    CREATE_HP    VIT
    CREATE_LAST_POINT    Punti
    CREATE_MAN    Uomo
    CREATE_NAME    Nome
    CREATE_NEXT    Avanti
    CREATE_PREV    Indietro
    CREATE_SEX    Sesso
    CREATE_SHAPE    Aspetto
    CREATE_SP    INT
    CREATE_STAT_RESET    Indietro
    CREATE_WOMAN    Donna
    CUBE_INFO_TITLE    Manuale della rifinitura
    CUBE_REQUIRE_MATERIAL    Materiali necessari
    CUBE_REQUIRE_MATERIAL_OR    oppure
    CUBE_TITLE    Finestra del raffinamento
    DO_REFINE    Raffinamento
    DRAGONSOUL_ACTIVATE    Attiva
    DRAGONSOUL_PAGE_BUTTON_1    Grezzo
    DRAGONSOUL_PAGE_BUTTON_2    Tagliato
    DRAGONSOUL_PAGE_BUTTON_3    Raro
    DRAGONSOUL_PAGE_BUTTON_4    Antico
    DRAGONSOUL_PAGE_BUTTON_5    Leggendario
    DRAGONSOUL_REFINE_WINDOW_TITLE    Finestra del raffinamento
    DRAGONSOUL_TAP_TITLE_1    Diamante del drago
    DRAGONSOUL_TAP_TITLE_2    Rubino del drago
    DRAGONSOUL_TAP_TITLE_3    Giada del drago
    DRAGONSOUL_TAP_TITLE_4    Zaffiro del drago
    DRAGONSOUL_TAP_TITLE_5    Granato del drago
    DRAGONSOUL_TAP_TITLE_6    Onice del drago
    DRAGONSOUL_TITLE    Alchimia delle Pietre del drago
    EMPIRE_EXIT    Fine
    EMPIRE_NEXT    Avanti
    EMPIRE_PREV    Indietro
    EMPIRE_SELECT    Scegli
    EXCHANGE_ACCEPT    Accetta
    EXCHANGE_TITLE    Commercio
    GAMEOPTION_TITLE    Opzioni di gioco
    GAME_EXIT_OBSERVER    Termina modalità spettatore
    GAME_HELP    Aiuto
    GAME_QUEST    Rinuncia
    GAME_SKILL_UP    Aumenta abilità.
    GAME_STAT_UP    Aumenta status
    GRADE    Classe
    GRADE_SELECT    Classe
    GUILD_BASENAME    Nome base
    GUILD_BOARD_ID    Nome
    GUILD_BOARD_REFRESH    Attualizzare(F5)
    GUILD_BOARD_TEXT    Messaggio
    GUILD_BUILDING_CATEGORY_TITLE    Unità di costruzione
    GUILD_BUILDING_CHANGE    Cambia
    GUILD_BUILDING_DIRECTION    Orientamento
    GUILD_BUILDING_GRADE    Posizione
    GUILD_BUILDING_INFO    Info edifici e costi
    GUILD_BUILDING_LIST_TITLE    Lista edifici
    GUILD_BUILDING_LOG    Tronco
    GUILD_BUILDING_NAME    Nome edificio
    GUILD_BUILDING_OPERATE    Uso
    GUILD_BUILDING_PLY    Compensato
    GUILD_BUILDING_POSITION    Posizione
    GUILD_BUILDING_PREVIEW    Anteprima
    GUILD_BUILDING_PRICE    Prezzo
    GUILD_BUILDING_REFRESH    Attualizzare(F5)
    GUILD_BUILDING_STONE    Pietra fond.
    GUILD_BUILDING_TITLE    Edificio della Gilda
    GUILD_CRYSTAL    Cristallo
    GUILD_DEPOSIT    Numeri
    GUILD_DROP_RESOURCE1    qui
    GUILD_DROP_RESOURCE2    Far cadere risorse
    GUILD_GEM    Pietre preziose
    GUILD_GRADE_CHANGE_GRADE_NAME    Nuovo nome di Rango
    GUILD_GRADE_NUM    Nr.
    GUILD_GRADE_PERMISSION_DELETE    Estrometti
    GUILD_GRADE_PERMISSION_JOIN    Invita
    GUILD_GRADE_PERMISSION_NOTICE    Scrivi
    GUILD_GRADE_PERMISSION_SKILL    Abilità
    GUILD_GRADE_RANK    Rango
    GUILD_GRADE_WRITE    Scrivi
    GUILD_INFO    Informazioni della Gilda
    GUILD_INFO_CUR_EXP    Esperienza
    GUILD_INFO_DECALRE_WAR    Dichiara guerra
    GUILD_INFO_ENEMY_GUILD    Gilda nemica
    GUILD_INFO_ENEMY_GUILD_EMPTY    Nessuno
    GUILD_INFO_LEVEL    Livello Gilde
    GUILD_INFO_MARK    Simbolo delle Gilde
    GUILD_INFO_MASTER    Capo
    GUILD_INFO_MASTER_VALUE    Capo
    GUILD_INFO_MEMBER_AVG_LEVEL    Livello medio
    GUILD_INFO_MEMBER_NUM    Numero di membri
    GUILD_INFO_NAME    Nome della Gilda
    GUILD_INFO_NAME_VALUE    Questo è il nome di una Gilda
    GUILD_INFO_OFFER_EXP    Invest.
    GUILD_INFO_REST_EXP    Esperienza necessaria
    GUILD_INFO_UPLOAD_MARK    Carica Stemma
    GUILD_INFO_UPLOAD_SYMBOL    Carica bandiera
    GUILD_MARK    Stemma della gilda
    GUILD_MEMBER_JOB    Classe
    GUILD_MEMBER_KNIGHT    Capo
    GUILD_MEMBER_LEVEL    Livello
    GUILD_MEMBER_NAME    Nome
    GUILD_MEMBER_RANK    Posizione
    GUILD_MEMBER_SPECIFIC_GRAVITY    Invest.
    GUILD_METIN_STONE    Pietra spirituale
    GUILD_MINENAL    Minerale
    GUILD_MONEY    Yang
    GUILD_NAME    Gilda
    GUILD_RESOURCE_INFO    Informazioni delle risorse
    GUILD_SAFE_TITLE    Magazzino Gilda
    GUILD_SKILL_ACTIVE    Attivo
    GUILD_SKIlL_HEAL_GSP    Ricaricare
    GUILD_SKILL_PASSIVE    Passivo
    GUILD_SKILL_POWER    Energia
    GUILD_SKILL_STATE    Abilità della Gilda
    GUILD_SYMBOL    Stemma della Gilda
    GUILD_WAR_ACCEPT    Accettare dichiarazione di guerra
    GUILD_WAR_BATTLE_TYPE    Tipo di lotta
    GUILD_WAR_CTF    Bandiera
    GUILD_WAR_DECLARE    Dichiarare guerra
    GUILD_WAR_ENEMY    Avversario
    GUILD_WAR_NORMAL    Campo
    GUILD_WAR_WARP    Arena
    GUILD_WATER    Acqua
    GUILD_WATER_STONE    Pietra acquatica
    GUILD_WITHDRAW    Prendi
    HELP_ATTACK_KEY    Attacco: tasto sinistro del mouse o barra spaziatrice
    HELP_CHANGE_PK_MODE    Cambiare il tipo di attacco: modifica impostazioni del tasto sinistro del mouse
    HELP_CHARACTER_BUTTON1    (Finestra del personaggio, finestra dell'inventario,
    HELP_CHARACTER_BUTTON2    lista degli amici e opzioni)
    HELP_CONTROL_CAMERA_BY_MIDDLEBUTTON    Modalità telecamera: tasto centrale o destro del mouse
    HELP_CONTROL_CAMERA_BY_RIGHTBUTTON    Modalità telecamera: tasto destro o centrale del mouse
    HELP_EXP    Esperienza
    HELP_FURY    Item Shop Ingame
    HELP_GUILD_WINDOW    Aprire la finestra della Gilda: Alt + G
    HELP_HELP    Mostra aiuto: H
    HELP_HP    Punti vita (HP)
    HELP_MESSENGER_WINDOW    Aprire la lista degli amici: Alt + M
    HELP_MOUSE_LEFT    Funzione del tasto sinistro del mouse
    HELP_MOUSE_RIGHT    Funzione del tasto destro del mouse
    HELP_MOVE_KEY    Movimento personaggio: W, S, A, D o tasti freccia
    HELP_OPEN_CHARACTER    Finestra del personaggio: C
    HELP_OPEN_CHAT    Aprire la finestra di chat: invio
    HELP_OPEN_INVENTORY    Aprire la finestra dell'inventario: I
    HELP_OPEN_LOG    Aprire il protocollo chat (log): L
    HELP_OPEN_MINIMAP    Aprire la mini-mappa: Shift + M
    HELP_OPEN_QUEST    Aprire la finestra delle missioni: N
    HELP_OPEN_SKILL    Aprire la finestra delle abilità: V
    HELP_OPEN_WHISPER    Aprire la chat privata: shift + invio
    HELP_OPEN_ZONEMAP    Aprire la mappa grande: M
    HELP_PICK_ITEM    Raccogliere oggetti: \ o z o il tasto sinistro del mouse
    HELP_QUICKSLOT    Campi di accesso rapido
    HELP_SCREEN_CAPTURE    Fare uno screenshot: Stamp o Print (l'immagine sarà salvata nella cartella "Metin2\screenshot")
    HELP_SHOW_ALL_NAME    Visualizza nome: Alt
    HELP_SP    Punti Mana (PM)
    HELP_SYSTEM_BUTTON    Tasti di sistema
    INVENTORY_PAGE_BUTTON_TOOLTIP_1    1° Inventario
    INVENTORY_PAGE_BUTTON_TOOLTIP_2    2° Inventario
    INVENTORY_PAGE_BUTTON_TOOLTIP_3    3° Inventario
    INVENTORY_PAGE_BUTTON_TOOLTIP_4    4° Inventario
    INVENTORY_TITLE    Inventario
    ITEM_MALL    Item Shop
    LOAD_ERROR    Il file dati è rovinato. Reinstalla il Client. Clicca ora il tasto ESC.
    LOGIN_CONNECT    Collegare
    LOGIN_CONNECTING    Stai per essere collegato al server.
    LOGIN_DEFAULT_SERVERADDR    Nome del server, Canale 1
    LOGIN_EXIT    Termina
    LOGIN_REGION_TITLE    Luogo dove deve essere spedito il conto
    LOGIN_SELECT_BUTTON    Scegli
    LOGIN_SELECT_EXIT    Termina
    LOGIN_SELECT_OK    Ok
    LOGIN_SELECT_TITLE    Scegli server
    MALL_PASSWORD_TITLE    Password
    MALL_TITLE    Magazzino dell'Item Shop
    MARKET_TITLE    Negozio
    MARKLIST_REFRESH    Attualizza
    MARKLIST_TITLE    Registra il logo della Gilda
    MESSAGE    Questo è un messaggio
    MESSENGER_ADD_FRIEND    Aggiungi amico
    MESSENGER_DELETE_FRIEND    Cancella amico
    MESSENGER_MOBILE    Invia SMS
    MESSENGER_OPEN_GUILD    Apri la finestra della Gilda
    MESSENGER_TITLE    Amici
    MESSENGER_USE_GUILD_MOVE_SKILL    Utilizza l'abitlità di movimento della Gilda
    MESSENGER_WHISPER    Chat privata
    MINIMIZE    Minimizza
    MOUSEBUTTON_ATTACK    Attacca
    MOUSEBUTTON_AUTO_ATTACK    Attacca automaticamente
    MOUSEBUTTON_CAMERA    Videocamera
    MOUSEBUTTON_SKILL    Abilità.
    MUSICLIST_TITLE    Scelta della musica
    NO    No
    OK    Ok
    OPTION_ALWAYS_SHOW_NAME    Nome
    OPTION_ALWAYS_SHOW_NAME_OFF    Limitato
    OPTION_ALWAYS_SHOW_NAME_ON    Sempre
    OPTION_BLOCK    Blocca
    OPTION_BLOCK_EXCHANGE    Commercio
    OPTION_BLOCK_FRIEND    Amici
    OPTION_BLOCK_GUILD    Gilda
    OPTION_BLOCK_PARTY    Gruppo
    OPTION_BLOCK_PARTY_REQUEST    Richiesta
    OPTION_BLOCK_WHISPER    Chat privata
    OPTION_CAMERA_DISTANCE    Videocamera
    OPTION_CAMERA_DISTANCE_LONG    Lontano
    OPTION_CAMERA_DISTANCE_SHORT    Vicino
    OPTION_DELETE_MOBILE_BUTTON    Cancella numero di cellulare
    OPTION_EFFECT    Visualizzatore dei bersagli
    OPTION_ENV_EFFECT    Ambiente
    OPTION_ENV_EFFECT_OFF    Off
    OPTION_ENV_EFFECT_ON    On
    OPTION_FOG    Nebbia
    OPTION_FOG_DENSE    Molto
    OPTION_FOG_LIGHT    Poco
    OPTION_FOG_MIDDLE    Media
    OPTION_INPUT_MOBILE_BUTTON    Inserisci il numero di cellulare
    OPTION_MOBILE    Cellulare
    OPTION_MUSIC    Musica
    OPTION_MUSIC_CHANGE    Cambia
    OPTION_MUSIC_DEFAULT_THEMA    Titolo standard di Metin2
    OPTION_NAME_COLOR    Colore Nome
    OPTION_NAME_COLOR_EMPIRE    Nome del regno
    OPTION_NAME_COLOR_NORMAL    Normale
    OPTION_NIGHT_MODE    Notte
    OPTION_NIGHT_MODE_OFF    Off
    OPTION_NIGHT_MODE_ON    On
    OPTION_PVPMODE    Modo PvP
    OPTION_PVPMODE_FREE    Libero
    OPTION_PVPMODE_FREE_TOOLTIP    Puoi attaccare tutti i giocatori.
    OPTION_PVPMODE_GUILD    Gilda
    OPTION_PVPMODE_GUILD_TOOLTIP    Puoi attaccare tutti i giocatori esclusi membri della Gilda.
    OPTION_PVPMODE_PEACE    Pace
    OPTION_PVPMODE_PEACE_TOOLTIP    Non puoi attaccare i giocatori del tuo regno.
    OPTION_PVPMODE_REVENGE    Ostile
    OPTION_PVPMODE_REVENGE_TOOLTIP    Puoi attaccare solo giocatori con gradi diversi dal tuo.
    OPTION_SALESTEXT    Nome del negozio
    OPTION_SALESTEXT_VIEW_OFF    nascondi
    OPTION_SALESTEXT_VIEW_ON    visualizza
    OPTION_SNOW_MODE    Nevicata
    OPTION_SNOW_MODE_OFF    Off
    OPTION_SNOW_MODE_ON    On
    OPTION_SNOW_TEXTURE_MODE    Neve
    OPTION_SNOW_TEXTURE_MODE_OFF    Off
    OPTION_SNOW_TEXTURE_MODE_ON    On
    OPTION_SOUND    Effetti
    OPTION_TARGET_BOARD    Menù bersaglio
    OPTION_TARGET_BOARD_NO_VIEW    Chiudi
    OPTION_TARGET_BOARD_VIEW    Visualizza
    OPTION_TILING    Memoria video
    OPTION_TILING_APPLY    Usa
    OPTION_TILING_CPU    CPU
    OPTION_TILING_GPU    GPU
    OPTION_TITLE    Opzioni
    OPTION_VIEW_CHAT    Righe di Chat
    OPTION_VIEW_CHAT_OFF    nascondi
    OPTION_VIEW_CHAT_ON    visualizza
    PARTY_MEMBER_INFO_NAME    Nome dei membri del gruppo
    PASSWORD_DESC_1    Digita una password,
    PASSWORD_DESC_2    per aprire il magazzino.
    PASSWORD_DESC_3    Hai già cambiato la password?
    PASSWORD_DESC_4    In caso non l'avessi fatto, la tua password è: "000000".
    PASSWORD_DESC_5    Cambia la tua password nel magazzino.
    PASSWORD_TITLE    Salva-PW
    PICK_MONEY_TITLE    Dividi
    PRIVATE_SHOP_CLOSE_BUTTON    Chiudi negozio
    PRIVATE_SHOP_NAME    Nome del negozio
    PRIVATE_SHOP_TITLE    Crea un negozio privato
    REFINE_COST    Costi di miglioramento: 0 Yang
    REFINE_INFO    Probabilità di successo del miglioramento: 100%
    REFINE_MONEY    Tassa sul raffinamento
    REFINE_SELECT    Raffinamento
    REFINE_TTILE    Miglioramenti
    REPORT_VIOLENT_WHISPER    
    RESTART_HERE    Ricomincia qui
    RESTART_TOWN    Ricomincia nella città.
    SAFE_CHANGE_PASSWORD    Modifica password
    SAFE_TITLE    Magazzino
    SELECT_ATT_GRADE    STR
    SELECT_CREATE    Crea
    SELECT_DELETE    Cancella
    SELECT_DEX_GRADE    DEX
    SELECT_EMPIRE_NAME    Nome del Regno
    SELECT_EXIT    Termina
    SELECT_HP    VIT
    SELECT_LEVEL    Livello
    SELECT_METIN_STONE_TITLE    Scegli pietra spirituale
    SELECT_NAME    Nome
    SELECT_NO_GUILD    Nessuna Gilda
    SELECT_PLAYTIME    Tempo gioco (min.)
    SELECT_SELECT    Start
    SELECT_SP    INT
    SELECT_TITLE    Scegli titolo
    SHOP_BUY    Compra
    SHOP_SELL    Vendi
    SHOP_TITLE    Negozio
    SKILL_SUPPORT_TITLE    Abilità standard
    STEP    Grado di chiarezza
    STEP_SELECT    Grado di purezza
    STRENGTH    Rinforza
    STRENGTH_SELECT    Livello
    SYSTEMOPTION_TITLE    Opzioni di sistema
    SYSTEM_CHANGE    Cambia personaggio
    SYSTEM_EXIT    Termina gioco
    SYSTEM_HELP    Aiuto
    SYSTEM_LOGOUT    Sconnetti
    SYSTEM_MALL    Item Shop
    SYSTEM_OPTION    Opzioni di sistema
    TASKBAR_CHARACTER    Personaggio [C/V/B/N]
    TASKBAR_CHAT    Finestra di Chat [Invio]
    TASKBAR_DISABLE    Disattiva
    TASKBAR_DRAGON_SOUL    Alchimia delle Pietre del drago
    TASKBAR_EXPAND    Ingrandisci la finestra
    TASKBAR_INVENTORY    Inventario
    TASKBAR_MESSENGER    Amici [Alt+M]
    TASKBAR_NEXT_QUICKSLOT    Prossimo campo di utilizzo veloce [Shift + Numero, Alt]
    TASKBAR_PREV_QUICKSLOT    Precedente campo di utilizzo veloce [Shift + Numero]
    TASKBAR_SYSTEM    Opzioni[ESC]
    WHISPER_BAN    Blocca
    WHISPER_NAME    Sussurra
    WHISPER_REPORT    
    WHISPER_SEND    Invia
    YES    Sì.
    ZONE_MAP    Mappa grande
    BONUS_PAGE    Pagina Bonus
    CHANGE_BONUS_TITLE    Cambia Bonus
    CHANGE_BONUS_SUBTITLE    Bonus
    CHANGE_BONUS    Gira
     

     

  3. Hi, I have a problem with the file regen, npc, boss .txt.
    If I present in the file listed first, one line (then one mob or group) in the map I find instead three of the same mob or group. Can you tell me what's the problem?

    This is the content of such boss.txt and find below screen of what's going on

    Also in the same map if I do the command / m not appear monsters

    m	433	70	10	10	0	0	1200s	100	1	25020

    2mg1nop.jpg

×
×
  • Create New...

Important Information

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