Jump to content

R3laX

Inactive Member
  • Posts

    12
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by R3laX

  1.        The Metin2 game client is cheap and very weird. I noticed a long time ago when I starting doing the 3D grafic side of the game that when you try to add npc's for example you can't use any vnum you what. The same thing it happens with monster / monster2 / npc2 . You have a limited code to use for each. Maybe a dev you knows himself around the Metin2 client very well could explain why and to post those exact vnum valances for each.

    All I know is that npc vnum starts from 9001 and goes around 9070. never tried to install more. Also npc is from 20001-20599 I think. npc2 starts from 30000 and don't where it ends never tested how much model can add. And it still goes with monsters and monster2.

            I can't explain really why it does this stuff but in the future if you have the same problem try to change the values as well.  

     

    I am gonna do that thx bro

  2.  

     

     

     

    I get an error :

     

     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.

     

     CRaceManager::GetRaceDataPointer: cannot load data by dwRaceIndex 25698

     CPythonCharacterManager::CreateInstance VID[18074] Race[25698]

     

     

    First line with GRANNY: r:/granny/rt ...bla bla bla ... that's not from my model because my model is already converted using ricky92 converter so it is the right version of granny .... so check your client for models that are bad exported.

     

    The second and third line show that you don't know to install a npc. Just to make it clear you can not put any code you want when installing a npc / monster / monster2.

     

    Solution:

    -create a new folder called ' 3dmetin.ro_Samael '. Inside this folder create a new one called ' ymir work ' and inside this folder create a new one called ' npc '. Now extract inside the ' npc ' folder the archive that you've downloaded with my files. Pack everything using EterNexus and put the files in your pack folder from your game client. 

     

    P.S. 

    Don't forget to add in the Index this line:

    *
    3dmetin.ro_Samael

    Now in root.eix / root.epk you will find npclist.txt ... there add this id: 

    9036	3dmetin.ro_Samael

    Pack root put it back in pack folder in your game client and test now. 

     

    P.S. You don't really need to create a new archive , you can just add the folder from inside my archive in the exiting NPC.eix /NPC.epk from your game client. 

     

    *If you fallow this steps and still doesn't work just add me on skype and I will gladly solve your problem.

    Thank you.

     

     

    Dont work for me :(

    I am using the Test Client 402501

    CPythonCharacterManager::CreateInstance VID[17840] Race[25698]

     

    You are doing something wrong. I am using the same files and works perfectly.And beside me others have downloaded and installed the files and work's fine for them. Add me on skype and I will solve your problem.

     

    P.S.

    Again use the code I gave you.Put it after the oldster that is the teleporter codes between 9012 - 9050. The code that you are using for this model is from another class.

     

     

    I dont know why but it work because i change the vnum can you pls explane ?

  3.  

     

    I get an error :

     

     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.

     

     CRaceManager::GetRaceDataPointer: cannot load data by dwRaceIndex 25698

     CPythonCharacterManager::CreateInstance VID[18074] Race[25698]

     

     

    First line with GRANNY: r:/granny/rt ...bla bla bla ... that's not from my model because my model is already converted using ricky92 converter so it is the right version of granny .... so check your client for models that are bad exported.

     

    The second and third line show that you don't know to install a npc. Just to make it clear you can not put any code you want when installing a npc / monster / monster2.

     

    Solution:

    -create a new folder called ' 3dmetin.ro_Samael '. Inside this folder create a new one called ' ymir work ' and inside this folder create a new one called ' npc '. Now extract inside the ' npc ' folder the archive that you've downloaded with my files. Pack everything using EterNexus and put the files in your pack folder from your game client. 

     

    P.S. 

    Don't forget to add in the Index this line:

    *
    3dmetin.ro_Samael

    Now in root.eix / root.epk you will find npclist.txt ... there add this id: 

    9036	3dmetin.ro_Samael

    Pack root put it back in pack folder in your game client and test now. 

     

    P.S. You don't really need to create a new archive , you can just add the folder from inside my archive in the exiting NPC.eix /NPC.epk from your game client. 

     

    *If you fallow this steps and still doesn't work just add me on skype and I will gladly solve your problem.

    Thank you.

     

     

    Dont work for me :( 

    I am using the Test Client 402501

    CPythonCharacterManager::CreateInstance VID[17840] Race[25698]
  4. I get an error :

     

     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.

     

     CRaceManager::GetRaceDataPointer: cannot load data by dwRaceIndex 25698

     CPythonCharacterManager::CreateInstance VID[18074] Race[25698]
  5. And py files?

     

     

    inventorywindow :

    import uiScriptLocale
    import item
     
    EQUIPMENT_START_INDEX = 180
     
    window = {
    	"name" : "InventoryWindow",
     
    	## 600 - (width + ????? ?? ??? 24 px)
    	"x" : SCREEN_WIDTH - 176,
    	"y" : SCREEN_HEIGHT - 37 - 565,
     
    	"style" : ("movable", "float",),
     
    	"width" : 176,
    	"height" : 585,
     
    	"children" :
    	(
    		## Inventory, Equipment Slots
    		{
    			"name" : "board",
    			"type" : "board",
    			"style" : ("attach",),
     
    			"x" : 0,
    			"y" : 0,
     
    			"width" : 176,
    			"height" : 585,
     
    			"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" },
    					),
    				},
     
    				## Equipment Slot
    				{
    					"name" : "Equipment_Base",
    					"type" : "image",
     
    					"x" : 10,
    					"y" : 33,
     
    					"image" : "d:/ymir work/ui/equipment_bg_without_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},
    										## ? ??1
    										##{"index":item.EQUIPMENT_RING1, "x":2, "y":106, "width":32, "height":32},
    										## ? ??2
    										##{"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/Mall_Button_01.tga",
    							"over_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_02.tga",
    							"down_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_03.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" : 10,
    					"y" : 33 + 189,
     
    					"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 + 189,
     
    					"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_2,
     
    					"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_2,
     
    					"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" : 264,
     
    					"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":2,
     
    							"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 :

    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()
    
    		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 __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.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))
    
    		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 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.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 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):
    	            net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count)
    	            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 self.questionDialog:
    			self.questionDialog.Close()
    
    		self.questionDialog = None
    
    	## Slot Event
    	def SelectEmptySlot(self, selectedSlotPos):
    		if constInfo.GET_ITEM_DROP_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_DROP_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.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)
    			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
    
    	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 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 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_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_DROP_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
    			
    		else:
    			self.__SendUseItemPacket(slotIndex)
    
    	def __UseItemQuestionDialog_OnCancel(self):
    		self.OnCloseQuestionDialog()
    
    	def __UseItemQuestionDialog_OnAccept(self):
    		self.__SendUseItemPacket(self.questionDialog.slotIndex)
    
    		if self.questionDialog:
    			self.questionDialog.Close()
    		self.questionDialog = None
    
    	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()
    						
    
  6.  

     

    You did some mistake in game source file. Check it again and second picture shouldn't be. 

     

    Best Regards

    Ellie

     

    I use the Vanilla core

     

     

    Then check your binary again.

     

    Best Regards

    Ellie

     

     

    #pragma once
    #include "../GameLib/ItemData.h"
    
    struct SAffects
    {
    	enum
    	{
    		AFFECT_MAX_NUM = 32,
    	};
    
    	SAffects() : dwAffects(0) {}
    	SAffects(const DWORD & c_rAffects)
    	{
    		__SetAffects(c_rAffects);
    	}
    	int operator = (const DWORD & c_rAffects)
    	{
    		__SetAffects(c_rAffects);
    	}
    
    	BOOL IsAffect(BYTE byIndex)
    	{
    		return dwAffects & (1 << byIndex);
    	}
    
    	void __SetAffects(const DWORD & c_rAffects)
    	{
    		dwAffects = c_rAffects;
    	}
    
    	DWORD dwAffects;
    };
    
    extern std::string g_strGuildSymbolPathName;
    
    const DWORD c_Name_Max_Length = 64;
    const DWORD c_FileName_Max_Length = 128;
    const DWORD c_Short_Name_Max_Length = 32;
    
    const DWORD c_Inventory_Page_Size = 5*9; // x*y
    const DWORD c_Inventory_Page_Count = 4;
    const DWORD c_ItemSlot_Count = c_Inventory_Page_Size * c_Inventory_Page_Count;
    const DWORD c_Equipment_Count = 12;
    
    const DWORD c_Equipment_Start = c_ItemSlot_Count;
    
    const DWORD c_Equipment_Body	= c_Equipment_Start + 0;
    const DWORD c_Equipment_Head	= c_Equipment_Start + 1;
    const DWORD c_Equipment_Shoes	= c_Equipment_Start + 2;
    const DWORD c_Equipment_Wrist	= c_Equipment_Start + 3;
    const DWORD c_Equipment_Weapon	= c_Equipment_Start + 4;
    const DWORD c_Equipment_Neck	= c_Equipment_Start + 5;
    const DWORD c_Equipment_Ear		= c_Equipment_Start + 6;
    const DWORD c_Equipment_Unique1	= c_Equipment_Start + 7;
    const DWORD c_Equipment_Unique2	= c_Equipment_Start + 8;
    const DWORD c_Equipment_Arrow	= c_Equipment_Start + 9;
    const DWORD c_Equipment_Shield	= c_Equipment_Start + 10;
    
    // »õ·Î Ãß°¡µÈ ½Å±Ô ¹ÝÁö & º§Æ®
    // ÀåÂøÇü ¾ÆÀÌÅÛ¿¡ ÇÒ´çÇÒ ¼ö ÀÖ´Â À§Ä¡°¡ ±âÁ¸ Àåºñ, ä±â¶ø Äù½ºÆ® º¸»ó, ÄÚ½ºÆ¬ ½Ã½ºÅÛ µîÀ¸·Î ÀÎÇؼ­ °ø°£ÀÌ Àß·ÁÀÖ´Ù.
    // ÀÌ°Ô ´Ù ä±â¶ø º¸»ó ¹öÇÁ¸¦ ÀåÂø¾ÆÀÌÅÛó·³ ±¸ÇöÇÑ ¤µ¤¢ ¶§¹®¿¡ ³­¸®³µµû... ¤¶¤²
    // 
    // Á¤¸®Çϸé, ±âÁ¸ ÀåºñâµéÀº ¼­¹öDB»ó ¾ÆÀÌÅÛ Æ÷Áö¼ÇÀÌ 90 ~ 102 ÀÌ°í,
    // 2013³â ÃÊ¿¡ »õ·Î Ãß°¡µÇ´Â ½½·ÔµéÀº 111 ~ ºÎÅÍ ½ÃÀÛÇÑ´Ù. Âø¿ë Àåºñ¿¡¼­ ÃÖ´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Â °ªÀº 121 ±îÁöÀÌ°í, 122ºÎÅÍ´Â ¿ëÈ¥¼®¿¡¼­ »ç¿ëÇÑ´Ù.
    #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
    	const DWORD c_New_Equipment_Start = c_Equipment_Start + 21;
    	const DWORD c_New_Equipment_Count = 3;
    	const DWORD c_Equipment_Ring1 = c_New_Equipment_Start + 0;
    	const DWORD c_Equipment_Ring2 = c_New_Equipment_Start + 1;
    	const DWORD c_Equipment_Belt  = c_New_Equipment_Start + 2;;
    #endif
    
    enum EDragonSoulDeckType
    {
    	DS_DECK_1,
    	DS_DECK_2,
    	DS_DECK_MAX_NUM = 2,
    };
    
    enum EDragonSoulGradeTypes
    {
    	DRAGON_SOUL_GRADE_NORMAL,
    	DRAGON_SOUL_GRADE_BRILLIANT,
    	DRAGON_SOUL_GRADE_RARE,
    	DRAGON_SOUL_GRADE_ANCIENT,
    	DRAGON_SOUL_GRADE_LEGENDARY,
    	DRAGON_SOUL_GRADE_MAX,
    
    };
    
    enum EDragonSoulStepTypes
    {
    	DRAGON_SOUL_STEP_LOWEST,
    	DRAGON_SOUL_STEP_LOW,
    	DRAGON_SOUL_STEP_MID,
    	DRAGON_SOUL_STEP_HIGH,
    	DRAGON_SOUL_STEP_HIGHEST,
    	DRAGON_SOUL_STEP_MAX,
    };
    
    #ifdef ENABLE_COSTUME_SYSTEM
    	const DWORD c_Costume_Slot_Start	= c_Equipment_Start + 19;	// [ÁÖÀÇ] ¼ýÀÚ(19) ÇϵåÄÚµù ÁÖÀÇ. ÇöÀç ¼­¹ö¿¡¼­ ÄÚ½ºÃõ ½½·ÔÀº 19ºÎÅÍÀÓ. ¼­¹ö common/length.h ÆÄÀÏÀÇ EWearPositions ¿­°ÅÇü Âü°í.
    	const DWORD	c_Costume_Slot_Body		= c_Costume_Slot_Start + 0;
    	const DWORD	c_Costume_Slot_Hair		= c_Costume_Slot_Start + 1;
    	const DWORD c_Costume_Slot_Count	= 2;
    	const DWORD c_Costume_Slot_End		= c_Costume_Slot_Start + c_Costume_Slot_Count;
    #endif
    
    
    // [ÁÖÀÇ] ¼ýÀÚ(32) ÇϵåÄÚµù ÁÖÀÇ. ÇöÀç ¼­¹ö¿¡¼­ ¿ëÈ¥¼® ½½·ÔÀº 32ºÎÅÍÀÓ. 
    // ¼­¹ö common/length.h ÆÄÀÏÀÇ EWearPositions ¿­°ÅÇüÀÌ 32±îÁö È®ÀåµÉ °ÍÀ» ¿°µÎÇÏ°í(32 ÀÌ»óÀº È®Àå Çϱâ Èûµé°Ô µÇ¾îÀÖÀ½.), 
    // ±× ÀÌÈĺÎÅ͸¦ ¿ëÈ¥¼® ÀåÂø ½½·ÔÀ¸·Î »ç¿ë.
    const DWORD c_Wear_Max = 32;
    const DWORD c_DragonSoul_Equip_Start = c_ItemSlot_Count + c_Wear_Max;
    const DWORD c_DragonSoul_Equip_Slot_Max = 6;
    const DWORD c_DragonSoul_Equip_End = c_DragonSoul_Equip_Start + c_DragonSoul_Equip_Slot_Max * DS_DECK_MAX_NUM;
    
    // NOTE: 2013³â 2¿ù 5ÀÏ ÇöÀç... ¿ëÈ¥¼® µ¥Å©´Â 2°³°¡ Á¸ÀçÇϴµ¥, ÇâÈÄ È®Àå °¡´É¼ºÀÌ À־ 3°³ µ¥Å© ¿©À¯ºÐÀ» ÇÒ´ç ÇØ µÒ. ±× µÚ °ø°£Àº º§Æ® Àκ¥Å丮·Î »ç¿ë
    const DWORD c_DragonSoul_Equip_Reserved_Count = c_DragonSoul_Equip_Slot_Max * 3;		
    
    #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
    	// º§Æ® ¾ÆÀÌÅÛÀÌ Á¦°øÇÏ´Â Àκ¥Å丮
    	const DWORD c_Belt_Inventory_Slot_Start = c_DragonSoul_Equip_End + c_DragonSoul_Equip_Reserved_Count;
    	const DWORD c_Belt_Inventory_Width = 4;
    	const DWORD c_Belt_Inventory_Height= 4;
    	const DWORD c_Belt_Inventory_Slot_Count = c_Belt_Inventory_Width * c_Belt_Inventory_Height;
    	const DWORD c_Belt_Inventory_Slot_End = c_Belt_Inventory_Slot_Start + c_Belt_Inventory_Slot_Count;
    
    	const DWORD c_Inventory_Count	= c_Belt_Inventory_Slot_End;
    #else
    	const DWORD c_Inventory_Count	= c_DragonSoul_Equip_End;
    #endif
    
    // ¿ëÈ¥¼® Àü¿ë Àκ¥Å丮
    const DWORD c_DragonSoul_Inventory_Start = 0;
    const DWORD c_DragonSoul_Inventory_Box_Size = 32;
    const DWORD c_DragonSoul_Inventory_Count = CItemData::DS_SLOT_NUM_TYPES * DRAGON_SOUL_GRADE_MAX * c_DragonSoul_Inventory_Box_Size;
    const DWORD c_DragonSoul_Inventory_End = c_DragonSoul_Inventory_Start + c_DragonSoul_Inventory_Count;
    
    enum ESlotType
    {
    	SLOT_TYPE_NONE,
    	SLOT_TYPE_INVENTORY,
    	SLOT_TYPE_SKILL,
    	SLOT_TYPE_EMOTION,
    	SLOT_TYPE_SHOP,
    	SLOT_TYPE_EXCHANGE_OWNER,
    	SLOT_TYPE_EXCHANGE_TARGET,
    	SLOT_TYPE_QUICK_SLOT,
    	SLOT_TYPE_SAFEBOX,
    	SLOT_TYPE_PRIVATE_SHOP,
    	SLOT_TYPE_MALL,
    	SLOT_TYPE_DRAGON_SOUL_INVENTORY,
    	SLOT_TYPE_MAX,
    };
    
    enum EWindows
    {
    	RESERVED_WINDOW,
    	INVENTORY,				// ±âº» Àκ¥Å丮. (45Ä­ Â¥¸®°¡ 2ÆäÀÌÁö Á¸Àç = 90Ä­)
    	EQUIPMENT,
    	SAFEBOX,
    	MALL,
    	DRAGON_SOUL_INVENTORY,
    	GROUND,					// NOTE: 2013³â 2¿ù5ÀÏ ÇöÀç±îÁö unused.. ¿Ö Àִ°ÅÁö???
    	BELT_INVENTORY,			// NOTE: W2.1 ¹öÀü¿¡ »õ·Î Ãß°¡µÇ´Â º§Æ® ½½·Ô ¾ÆÀÌÅÛÀÌ Á¦°øÇÏ´Â º§Æ® Àκ¥Å丮
    	
    	WINDOW_TYPE_MAX,
    };
    
    enum EDSInventoryMaxNum
    {
    	DS_INVENTORY_MAX_NUM = c_DragonSoul_Inventory_Count,
    	DS_REFINE_WINDOW_MAX_NUM = 15,
    };
    
    #pragma pack (push, 1)
    #define WORD_MAX 0xffff
    
    typedef struct SItemPos
    {
    	BYTE window_type;
    	WORD cell;
        SItemPos ()
        {
    		window_type =     INVENTORY;
    		cell = WORD_MAX;
        }
    	SItemPos (BYTE _window_type, WORD _cell)
        {
            window_type = _window_type;
            cell = _cell;
        }
    
    	// ±âÁ¸¿¡ cellÀÇ ÇüÀ» º¸¸é BYTE°¡ ´ëºÎºÐÀÌÁö¸¸, oi
    	// ¾î¶² ºÎºÐÀº int, ¾î¶² ºÎºÐÀº WORD·Î µÇ¾îÀÖ¾î,
    	// °¡Àå Å« ÀÚ·áÇüÀÎ int·Î ¹Þ´Â´Ù.
      //  int operator=(const int _cell)
      //  {
    		//window_type = INVENTORY;
      //      cell = _cell;
      //      return cell;
      //  }
    	bool IsValidCell()
    	{
    		switch (window_type)
    		{
    		case INVENTORY:
    			return cell < c_Inventory_Count;
    			break;
    		case EQUIPMENT:
    			return cell < c_DragonSoul_Equip_End;
    			break;
    		case DRAGON_SOUL_INVENTORY:
    			return cell < (DS_INVENTORY_MAX_NUM);
    			break;
    		default:
    			return false;
    		}
    	}
    	bool IsEquipCell()
    	{
    		switch (window_type)
    		{
    		case INVENTORY:
    		case EQUIPMENT:
    			return (c_Equipment_Start + c_Wear_Max > cell) && (c_Equipment_Start <= cell);
    			break;
    
    		case BELT_INVENTORY:
    		case DRAGON_SOUL_INVENTORY:
    			return false;
    			break;
    
    		default:
    			return false;
    		}
    	}
    
    #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
    	bool IsBeltInventoryCell()
    	{
    		bool bResult = c_Belt_Inventory_Slot_Start <= cell && c_Belt_Inventory_Slot_End > cell;
    		return bResult;
    	}
    #endif
    
    	bool operator==(const struct SItemPos& rhs) const
    	{
    		return (window_type == rhs.window_type) && (cell == rhs.cell);
    	}
    
    	bool operator<(const struct SItemPos& rhs) const
    	{
    		return (window_type < rhs.window_type) || ((window_type == rhs.window_type) && (cell < rhs.cell));
    	}
    } TItemPos;
    #pragma pack(pop)
    
    const DWORD c_QuickBar_Line_Count = 3;
    const DWORD c_QuickBar_Slot_Count = 12;
    
    const float c_Idle_WaitTime = 5.0f;
    
    const int c_Monster_Race_Start_Number = 6;
    const int c_Monster_Model_Start_Number = 20001;
    
    const float c_fAttack_Delay_Time = 0.2f;
    const float c_fHit_Delay_Time = 0.1f;
    const float c_fCrash_Wave_Time = 0.2f;
    const float c_fCrash_Wave_Distance = 3.0f;
    
    const float c_fHeight_Step_Distance = 50.0f;
    
    enum
    {
    	DISTANCE_TYPE_FOUR_WAY,
    	DISTANCE_TYPE_EIGHT_WAY,
    	DISTANCE_TYPE_ONE_WAY,
    	DISTANCE_TYPE_MAX_NUM,
    };
    
    const float c_fMagic_Script_Version = 1.0f;
    const float c_fSkill_Script_Version = 1.0f;
    const float c_fMagicSoundInformation_Version = 1.0f;
    const float c_fBattleCommand_Script_Version = 1.0f;
    const float c_fEmotionCommand_Script_Version = 1.0f;
    const float c_fActive_Script_Version = 1.0f;
    const float c_fPassive_Script_Version = 1.0f;
    
    // Used by PushMove
    const float c_fWalkDistance = 175.0f;
    const float c_fRunDistance = 310.0f;
    
    #define FILE_MAX_LEN 128
    
    enum
    {
    	ITEM_SOCKET_SLOT_MAX_NUM = 3,
    	ITEM_ATTRIBUTE_SLOT_MAX_NUM = 7,
    };
    
    #pragma pack(push)
    #pragma pack(1)
    
    typedef struct SQuickSlot
    {
    	BYTE Type;
    	BYTE Position;
    } TQuickSlot;
    
    typedef struct TPlayerItemAttribute
    {
        BYTE        bType;
        short       sValue;
    } TPlayerItemAttribute;
    
    typedef struct packet_item
    {
        DWORD       vnum;
        BYTE        count;
    	DWORD		flags;
    	DWORD		anti_flags;
    	long		alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
        TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
    } TItemData;
    
    typedef struct packet_shop_item
    {
        DWORD       vnum;
        DWORD       price;
        BYTE        count;
    	BYTE		display_pos;
    	long		alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
        TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
    } TShopItemData;
    
    #pragma pack(pop)
    
    inline float GetSqrtDistance(int ix1, int iy1, int ix2, int iy2) // By sqrt
    {
    	float dx, dy;
    
    	dx = float(ix1 - ix2);
    	dy = float(iy1 - iy2);
    
    	return sqrtf(dx*dx + dy*dy);
    }
    
    // DEFAULT_FONT
    void DefaultFont_Startup();
    void DefaultFont_Cleanup();
    void DefaultFont_SetName(const char * c_szFontName);
    CResource* DefaultFont_GetResource();
    CResource* DefaultItalicFont_GetResource();
    // END_OF_DEFAULT_FONT
    
    void SetGuildSymbolPath(const char * c_szPathName);
    const char * GetGuildSymbolFileName(DWORD dwGuildID);
    BYTE SlotTypeToInvenType(BYTE bSlotType);
    
  7. First inventory 

    KDWgc.jpg

     

    2

    USLwb.jpg

     

    3

    Cnjwc.jpg

     

    4

    0etKg.jpg

     

     

    Problems :

    The first problem ist that the Inventory choose betwen the 4 pages, i mean with that that the other 3,4 are behind the slots 

     

    The seccond problem that the items look out of the inventory 

     

     

    AND SORRY FOR MY ENGLISH 

  8. Hello,

    I got the problem that i get this message from Navicat : 1130 - host ' MY IP ' is not allowed to connect to this mysql server. its Hamachi please help

     

     

    ~Sorry for bad english 

     

     

    To fix the error : 

     

    you just have to login in the cmd in mysql an just run this commands 

     

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' Enter drücken

    IDENTIFIED BY 'your pw' WITH GRANT OPTION;

×
×
  • 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.