Register for your free account! | Forgot your password?

Go Back   elitepvpers › Popular Games › Metin2 › Metin2 Private Server
You last visited: Today at 00:57

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[HELP] Python problem - new value in inventory

Discussion on [HELP] Python problem - new value in inventory within the Metin2 Private Server forum part of the Metin2 category.

Reply
 
Old   #1
 
WyppyOne's Avatar
 
elite*gold: 120
Join Date: Jul 2012
Posts: 219
Received Thanks: 6
[HELP] Python problem - new value in inventory

I tried with this tut :


I hope isnt advertisement ...

OK,so i tried with that tutorial above to add a new line in inventory for coins ( not MD )

Uiinventory.py
PHP Code:
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.wndAP = self.GetChild("AP_much")
            
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.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[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
.wndAP = 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.inventoryPageIndex = page
        self
.inventoryTab[1-page].SetUp()
        
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(locale.NumberToMoneyString(money))
        
self.wndAP.SetText("%s PO" % (str(constInfo.ACHIEV_POINTS)))

    
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
                 
        
elif 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)
            
## 안티 플레그 검사 빠져서 추가
            ## 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 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_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() 
Game.py
PHP Code:
def __ServerCommand_Build(self):
        
serverCommandList={
            
"ConsoleEnable"            : self.__Console_Enable,
            
"DayMode"                : self.__DayMode_Update, 
            
"depozit_index"            :self.__depozit_questindex,
            
"antiexp_index"            :self.__antiexp_questindex,
            
"teleporter_index"        :self.__teleporter_questindex,
            
"PRESERVE_DayMode"        : self.__PRESERVE_DayMode_Update, 
            
"CloseRestartWindow"    : self.__RestartDialog_Close,
            
"OpenPrivateShop"        : self.__PrivateShop_Open,
            
"PartyHealReady"        : self.PartyHealReady,
            
"ShowMeSafeboxPassword"    : self.AskSafeboxPassword,
            
"CloseSafebox"            : self.CommandCloseSafebox,

            
# ITEM_MALL
            
"CloseMall"                : self.CommandCloseMall,
            
"ShowMeMallPassword"    : self.AskMallPassword,
            
"item_mall"                : self.__ItemMall_Open,
            
# END_OF_ITEM_MALL

            
"RefineSuceeded"        : self.RefineSuceededMessage,
            
"RefineFailed"            : self.RefineFailedMessage,
            
"xmas_snow"                : self.__XMasSnow_Enable,
            
"xmas_boom"                : self.__XMasBoom_Enable,
            
"xmas_song"                : self.__XMasSong_Enable,
            
"xmas_tree"                : self.__XMasTree_Enable,
            
"newyear_boom"            : self.__XMasBoom_Enable,
            
"PartyRequest"            : self.__PartyRequestQuestion,
            
"PartyRequestDenied"    : self.__PartyRequestDenied,
            
"horse_state"            : self.__Horse_UpdateState,
            
"hide_horse_state"        : self.__Horse_HideState,
            
"WarUC"                    : self.__GuildWar_UpdateMemberCount,
            
"test_server"            : self.__EnableTestServerFlag,
            
"mall"            : self.__InGameShop_Show,

            
# WEDDING
            
"lover_login"            : self.__LoginLover,
            
"lover_logout"            : self.__LogoutLover,
            
"lover_near"            : self.__LoverNear,
            
"lover_far"                : self.__LoverFar,
            
"lover_divorce"            : self.__LoverDivorce,
            
"PlayMusic"                : self.__PlayMusic,
            
# END_OF_WEDDING

            # PRIVATE_SHOP_PRICE_LIST
            
"MyShopPriceList"        : self.__PrivateShop_PriceList,
            
# END_OF_PRIVATE_SHOP_PRICE_LIST
            #ACHIEVMENT
            
"OsiagnieciaPunkty"        : self.__Achievment,
            
"achiev"                : self.__ShowAchiev, #type|level/mob/boss|points
        
}

        
self.serverCommander=stringCommander.Analyzer()
        for 
serverCommandItem in serverCommandList.items():
            
self.serverCommander.SAFE_RegisterCallBack(
                
serverCommandItem[0], serverCommandItem[1]
            )

    
def BINARY_ServerCommand_Run(self, line):
        
#dbg.TraceError(line)
        
try:
            
#print " BINARY_ServerCommand_Run", line
            
return self.serverCommander.Run(line)
        
except RuntimeError, msg:
            
dbg.TraceError(msg)
            return 
0

    def __ProcessPreservedServerCommand
(self):
        try:
            
command = net.GetPreservedServerCommand()
            while 
command:
                print 
" __ProcessPreservedServerCommand", command
                self
.serverCommander.Run(command)
                
command = net.GetPreservedServerCommand()
        
except RuntimeError, msg:
            
dbg.TraceError(msg)
            return 
0

    def PartyHealReady
(self):
        
self.interface.PartyHealReady()

    
def AskSafeboxPassword(self):
        
self.interface.AskSafeboxPassword()

    
# ITEM_MALL
    
def AskMallPassword(self):
        
self.interface.AskMallPassword()

    
def __ItemMall_Open(self):
        
self.interface.OpenItemMall();

    
def CommandCloseMall(self):
        
self.interface.CommandCloseMall()
    
# END_OF_ITEM_MALL

    
def RefineSuceededMessage(self):
        
snd.PlaySound("sound/ui/make_soket.wav")
        
self.PopupMessage(localeInfo.REFINE_SUCCESS)

    
def RefineFailedMessage(self):
        
snd.PlaySound("sound/ui/jaeryun_fail.wav")
        
self.PopupMessage(localeInfo.REFINE_FAILURE)

    
def CommandCloseSafebox(self):
        
self.interface.CommandCloseSafebox()

    
# PRIVATE_SHOP_PRICE_LIST
    
def __PrivateShop_PriceList(self, itemVNum, itemPrice):
        
uiPrivateShopBuilder.SetPrivateShopItemPrice(itemVNum, itemPrice)    
    
# END_OF_PRIVATE_SHOP_PRICE_LIST

    
def __Horse_HideState(self):
        
self.affectShower.SetHorseState(0, 0, 0)

    
def __Horse_UpdateState(self, level, health, battery):
        
self.affectShower.SetHorseState(int(level), int(health), int(battery))

    
def __IsXMasMap(self):
        
mapDict = ( "metin2_map_n_flame_01",
                    
"metin2_map_n_desert_01",
                    
"metin2_map_spiderdungeon",
                    
"metin2_map_deviltower1", )

        if 
background.GetCurrentMapName() in mapDict:
            return 
False

        
return True

    def __XMasSnow_Enable
(self, mode):

        
self.__XMasSong_Enable(mode)

        if 
"1"==mode:

            if 
not self.__IsXMasMap():
                return

            print 
"XMAS_SNOW ON"
            
background.EnableSnow(1)

        else:
            print 
"XMAS_SNOW OFF"
            
background.EnableSnow(0)

    
def __XMasBoom_Enable(self, mode):
        if 
"1"==mode:

            if 
not self.__IsXMasMap():
                return

            print 
"XMAS_BOOM ON"
            
self.__DayMode_Update("dark")
            
self.enableXMasBoom = True
            self
.startTimeXMasBoom = app.GetTime()
        else:
            print 
"XMAS_BOOM OFF"
            
self.__DayMode_Update("light")
            
self.enableXMasBoom = False

    def __XMasTree_Enable
(self, grade):

        print 
"XMAS_TREE ", grade
        background
.SetXMasTree(int(grade))

    
def __XMasSong_Enable(self, mode):
        if 
"1"==mode:
            print 
"XMAS_SONG ON"

            
XMAS_BGM = "xmas.mp3"

            
if app.IsExistFile("BGM/" + XMAS_BGM)==1:
                if 
musicInfo.fieldMusic != "":
                    
snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic)

                
musicInfo.fieldMusic=XMAS_BGM
                snd
.FadeInMusic("BGM/" + musicInfo.fieldMusic)

        else:
            print 
"XMAS_SONG OFF"

            
if musicInfo.fieldMusic != "":
                
snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic)

            
musicInfo.fieldMusic=musicInfo.METIN2THEMA
            snd
.FadeInMusic("BGM/" + musicInfo.fieldMusic)

    
def __RestartDialog_Close(self):
        
self.interface.CloseRestartDialog()

    
def __Console_Enable(self):
        
constInfo.CONSOLE_ENABLE = True
        self
.consoleEnable = True
        app
.EnableSpecialCameraMode()
        
ui.EnablePaste(True)

    
## PrivateShop
    
def __PrivateShop_Open(self):
        
self.interface.OpenPrivateShopInputNameDialog()

    
def BINARY_PrivateShop_Appear(self, vid, text):
        
self.interface.AppearPrivateShop(vid, text)

    
def BINARY_PrivateShop_Disappear(self, vid):
        
self.interface.DisappearPrivateShop(vid)

    
## DayMode
    
def __PRESERVE_DayMode_Update(self, mode):
        if 
"light"==mode:
            
background.SetEnvironmentData(0)
        
elif "dark"==mode:

            if 
not self.__IsXMasMap():
                return

            
background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
            
background.SetEnvironmentData(1)

    
def __DayMode_Update(self, mode):
        if 
"light"==mode:
            
self.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToLight)
        
elif "dark"==mode:

            if 
not self.__IsXMasMap():
                return

            
self.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToDark)

    
def __DayMode_OnCompleteChangeToLight(self):
        
background.SetEnvironmentData(0)
        
self.curtain.FadeIn()

    
def __DayMode_OnCompleteChangeToDark(self):
        
background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
        
background.SetEnvironmentData(1)
        
self.curtain.FadeIn()

    
## XMasBoom
    
def __XMasBoom_Update(self):

        
self.BOOM_DATA_LIST = ( (2, 5), (5, 2), (7, 3), (10, 3), (20, 5) )
        if 
self.indexXMasBoom >= len(self.BOOM_DATA_LIST):
            return

        
boomTime = self.BOOM_DATA_LIST[self.indexXMasBoom][0]
        
boomCount = self.BOOM_DATA_LIST[self.indexXMasBoom][1]

        if 
app.GetTime() - self.startTimeXMasBoom > boomTime:

            
self.indexXMasBoom += 1

            
for i in xrange(boomCount):
                
self.__XMasBoom_Boom()

    
def __XMasBoom_Boom(self):
        
x, y, z = player.GetMainCharacterPosition()
        
randX = app.GetRandom(-150, 150)
        
randY = app.GetRandom(-150, 150)

        
snd.PlaySound3D(x+randX, -y+randY, z, "sound/common/etc/salute.mp3")

    
def __PartyRequestQuestion(self, vid):
        
vid = int(vid)
        
partyRequestQuestionDialog = uiCommon.QuestionDialog()
        
partyRequestQuestionDialog.SetText(chr.GetNameByVID(vid) + localeInfo.PARTY_DO_YOU_ACCEPT)
        
partyRequestQuestionDialog.SetAcceptText(localeInfo.UI_ACCEPT)
        
partyRequestQuestionDialog.SetCancelText(localeInfo.UI_DENY)
        
partyRequestQuestionDialog.SetAcceptEvent(lambda arg=True: self.__AnswerPartyRequest(arg))
        
partyRequestQuestionDialog.SetCancelEvent(lambda arg=False: self.__AnswerPartyRequest(arg))
        
partyRequestQuestionDialog.Open()
        
partyRequestQuestionDialog.vid = vid
        self
.partyRequestQuestionDialog = partyRequestQuestionDialog

    def __AnswerPartyRequest
(self, answer):
        if 
not self.partyRequestQuestionDialog:
            return

        
vid = self.partyRequestQuestionDialog.vid

        
if answer:
            
net.SendChatPacket("/party_request_accept " + str(vid))
        else:
            
net.SendChatPacket("/party_request_deny " + str(vid))

        
self.partyRequestQuestionDialog.Close()
        
self.partyRequestQuestionDialog = None

    def __PartyRequestDenied
(self):
        
self.PopupMessage(localeInfo.PARTY_REQUEST_DENIED)

    
def __EnableTestServerFlag(self):
        
app.EnableTestServerFlag()

    
def __InGameShop_Show(self, url):
        if 
constInfo.IN_GAME_SHOP_ENABLE:
            
self.interface.OpenWebWindow(url)

    
# WEDDING
    
def __LoginLover(self):
        if 
self.interface.wndMessenger:
            
self.interface.wndMessenger.OnLoginLover()

    
def __LogoutLover(self):
        if 
self.interface.wndMessenger:
            
self.interface.wndMessenger.OnLogoutLover()
        if 
self.affectShower:
            
self.affectShower.HideLoverState()

    
def __LoverNear(self):
        if 
self.affectShower:
            
self.affectShower.ShowLoverState()

    
def __LoverFar(self):
        if 
self.affectShower:
            
self.affectShower.HideLoverState()

    
def __LoverDivorce(self):
        if 
self.interface.wndMessenger:
            
self.interface.wndMessenger.ClearLoverInfo()
        if 
self.affectShower:
            
self.affectShower.ClearLoverState()

    
def __PlayMusic(self, flag, filename):
        
flag = int(flag)
        if 
flag:
            
snd.FadeOutAllMusic()
            
musicInfo.SaveLastPlayFieldMusic()
            
snd.FadeInMusic("BGM/" + filename)
        else:
            
snd.FadeOutAllMusic()
            
musicInfo.LoadLastPlayFieldMusic()
            
snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)

    
# END_OF_WEDDING

    # Maxmi Start
    
def __menubg(self):
        if 
constInfo.MENU_BG == 0:
            
constInfo.MENU_BG = 1
            self
.menu_bg.Show()
            
self.Activare_Menu.Hide()
            
self.Dezactivare_Menu.Show()
        else:
            
constInfo.MENU_BG = 0
            self
.menu_bg.Hide()
            
self.Activare_Menu.Show()
            
self.Dezactivare_Menu.Hide()
    
def __BonusPage(self):
        
import PaginaBonusuri
        
global BPisLodaded
        
try:
            if 
BPisLodaded == 0:
                
BPisLodaded = 1
                exec 
'PaginaBonusuri.BonusBoardDialog().Show()'
            
else:
                
exec 'PaginaBonusuri.BonusBoardDialog().Hide()'
                
BPisLodaded = 0
        except ImportError
:
            
import dbg,app
            dbg
.Trace('PaginaBonusuri.py Importing error')
            
app.Abort
    def __uiswitchbonus
(self):
        
import uiSwitchBonus
        self
.BoniSwitcher = uiSwitchBonus.OptionDialog() 
        
self.BoniSwitcher.Show()
    
def __depozit_questindex(self, value):
        
constInfo.DEPOZIT_QUESTINDEX = int(value)
    
def __activare_depozit(self):
        
activare_depozit = constInfo.DEPOZIT_QUESTINDEX
        event
.QuestButtonClick(activare_depozit) 
    
def __antiexp_questindex(self, value1):
        
constInfo.ANTIEXP_QUESTINDEX = int(value1)
    
def __activare_antiexp(self):
        
activare_antiexp = constInfo.ANTIEXP_QUESTINDEX
        event
.QuestButtonClick(activare_antiexp)
    
def __teleporter_questindex(self, value2):
        
constInfo.TELEPORTER_QUESTINDEX = int(value2)
    
def __activare_teleporter(self):
        
activare_teleporter = constInfo.TELEPORTER_QUESTINDEX
        event
.QuestButtonClick(activare_teleporter)
    
# Maxmi Son
    
    
def __Achievment(self, point=0):
        
constInfo.ACHIEV_POINTS = int(point)
        
    
def __ShowAchiev(self, data=None):
        
self.dlgAchievment.Show(str(data)) #0-achiev/1-friend 
I deleted first part of game.py because was too long

Sysser :
PHP Code:
0307 20:22:29455 :: 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.
0307 20:22:49991 :: Traceback (most recent call last):

0307 20:22:49991 ::   File "networkModule.py", line 247, in SetGamePhase

0307 20:22:49991 ::   File "game.py", line 100, in __init__

0307 20:22:49992 ::   File "interfaceModule.py", line 288, in MakeInterface

0307 20:22:49992 ::   File "interfaceModule.py", line 172, in __MakeWindows

0307 20:22:49992 ::   File "uiInventory.py", line 262, in __init__

0307 20:22:49992 ::   File "uiInventory.py", line 399, in __LoadWindow

0307 20:22:49992 ::   File "uiInventory.py", line 611, in RefreshStatus

0307 20:22:49993 :: NameError
0307 20:22:49993 :: : 
0307 20:22:49993 :: global name '
locale' is not defined
0307 20:22:49993 :: 
Game.py : search for :
PHP Code:
#ACHIEVMENT
            
"OsiagnieciaPunkty"        : self.__Achievment,
            
"achiev"                : self.__ShowAchiev, #type|level/mob/boss|points 
The def are at the bottom of the file

Uiinventory.py : search for :
PHP Code:
self.wndAP 
WyppyOne is offline  
Old   #2
 
elite*gold: 0
Join Date: Jan 2014
Posts: 268
Received Thanks: 373
Just replace all the "locale."-parts with "localeInfo."

Kind Regards
Lefloyd is offline  
Reply


Similar Threads Similar Threads
[Release]Inventory Safebox [C++ && Python]
12/21/2014 - Metin2 PServer Guides & Strategies - 13 Replies
#closerequest
[Selling] Inventory Password -| Python
09/04/2014 - Metin2 Trading - 1 Replies
KFWorksİ System; Password,Mysql in register. Güvenlik Sistemi By Fatihbab34? - YouTube Skype : fatih.sakarya00
Python inventory bonus- problem
03/16/2014 - Metin2 Private Server - 0 Replies
Hi , can someone add me python inventory bonus dialog to my client files please ? ? Because everytime i have got problem :( Thanks. Here is my Uiinventory.py: import ui import player import mouseModule import net import app import snd
[Python]Inventory manager + crashfileunpacker
04/13/2013 - Metin2 Private Server - 0 Replies
edit .
[PYTHON] inventory bonus
07/08/2012 - Metin2 Private Server - 0 Replies
xxxxxxxx



All times are GMT +2. The time now is 00:58.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.