uiinventory.py

Înainte de a posta o problemă, caută în acest forum și poate găsești rezolvare.
Avatar utilizator
alex9987
Nivel 2

Nivel 2
Mesaje: 251
Membru din: 07 Iun 2017, 15:47
Regat: Jinno
Aprecieri: 160  
Mulţumiri: 2  
Discord: Copiază ID
Medalii

Cine ma poate ajuta cu un fisier uiinventory.py cel din root care sa aibe implementat si butonul de costume dar si pagina de bonusuri pe dreapta! Nu reusesc sa le fac functionale pe amandoua..doar cate una merge :(

[ Postat de pe iPhone ] Imagine
Avatar utilizator
MariusExygo
Fost Helper

Fost Helper
Mesaje: 2063
Membru din: 09 Mar 2014, 15:47
Server: WildFantasy
Regat: Jinno
Aprecieri: 156  
Mulţumiri: 226  
  Rezolvări prob.: 4
Discord: Copiază ID
 Contact:
Medalii

Pai daca il schimbi pe tot poate e diferit si are erori si nu se potriveste la clientu tau
Afișează semnătura
Avatar utilizator
alex9987
Nivel 2

Nivel 2
Mesaje: 251
Membru din: 07 Iun 2017, 15:47
Regat: Jinno
Aprecieri: 160  
Mulţumiri: 2  
Discord: Copiază ID
Medalii

Pai si atuncia cum pot sa le fac eu sa functioneze si butonu de costume si pagina bonusuri? :(

[ Postat de pe iPhone ] Imagine
Avatar utilizator
[Tupeu]
Membru de Elita

Membru de Elita
Mesaje: 4101
Membru din: 28 Oct 2015, 16:16
Aprecieri: 35  
Mulţumiri: 2304  
 Contact:
Medalii

Acum ai pagina cu bonusuri pe inventar?

Lasa inventorywindow.py aici.
Avatar utilizator
alex9987
Nivel 2

Nivel 2
Mesaje: 251
Membru din: 07 Iun 2017, 15:47
Regat: Jinno
Aprecieri: 160  
Mulţumiri: 2  
Discord: Copiază ID
Medalii

O am dar fara butonu de costume,poti baga tu butonul acela de costume?

[ Postat de pe iPhone ] Imagine
Avatar utilizator
alex9987
Nivel 2

Nivel 2
Mesaje: 251
Membru din: 07 Iun 2017, 15:47
Regat: Jinno
Aprecieri: 160  
Mulţumiri: 2  
Discord: Copiază ID
Medalii

Acesta este uiinveontory.py din root
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 locale
import constInfo
import ime

if locale.IsEUROPE()and app.GetLocalePath() != "locale/sg" or locale.IsYMIR() or locale.IsJAPAN():
ITEM_MALL_BUTTON_ENABLE = TRUE
else:
ITEM_MALL_BUTTON_ENABLE = FALSE

ITEM_FLAG_APPLICABLE = 1 << 14

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

def __init__(self):
ui.ScriptWindow.__init__(self)
self.questionDialog = None
self.tooltipItem = None
self.sellingSlotNumber = -1
self.isLoaded = 0

self.__LoadWindow()

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

def Show(self):
self.__LoadWindow()

ui.ScriptWindow.Show(self)


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")
##BonusPageDialog
self.GetChild("Sword_def_Value").SetText(str(player.GetStatus(69)))
self.GetChild("Twohand_def_Value").SetText(str(player.GetStatus(70)))
self.GetChild("Knife_def_Value").SetText(str(player.GetStatus(71)))
self.GetChild("Bow_def_Value").SetText(str(player.GetStatus(74)))
self.GetChild("Bell_def_Value").SetText(str(player.GetStatus(72)))
self.GetChild("Fan_def_Value").SetText(str(player.GetStatus(73)))
self.GetChild("Magic_def_Value").SetText(str(player.GetStatus(77)))
self.GetChild("Poison_def_Value").SetText(str(player.GetStatus(81)))
self.GetChild("Warrior_def_Value").SetText(str(player.GetStatus(59)))
self.GetChild("Assassin_def_Value").SetText(str(player.GetStatus(60)))
self.GetChild("Sura_def_Value").SetText(str(player.GetStatus(61)))
self.GetChild("Mage_def_Value").SetText(str(player.GetStatus(62)))
self.GetChild("Crit_Value").SetText(str(player.GetStatus(40)))
self.GetChild("Pierce_Value").SetText(str(player.GetStatus(41)))
self.GetChild("Hitdmg_Value").SetText(str(player.GetStatus(122)))
self.GetChild("Skilldmg_Value").SetText(str(player.GetStatus(121)))
self.GetChild("Halfhuman_Value").SetText(str(player.GetStatus(43)))
self.GetChild("Undead_Value").SetText(str(player.GetStatus(47)))
self.GetChild("Devil_Value").SetText(str(player.GetStatus(48)))
self.GetChild("Warrior_str_Value").SetText(str(player.GetStatus(54)))
self.GetChild("Assassin_str_Value").SetText(str(player.GetStatus(55)))
self.GetChild("Sura_str_Value").SetText(str(player.GetStatus(56)))
self.GetChild("Mage_str_Value").SetText(str(player.GetStatus(57)))
##BonusPageDialog
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"))

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

#####

## Refresh
self.SetInventoryPage(0)
self.SetEquipmentPage(0)
self.RefreshItemSlot()
self.RefreshStatus()
self.RefreshBonus()
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.inventoryTab = []
self.equipmentTab = []

def Close(self):
if None != self.tooltipItem:
self.tooltipItem.HideToolTip()

self.OnCloseQuestionDialog()
self.dlgPickMoney.Close()
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")

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(locale.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):
return local

return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local

##BonusPageDialog
def __LoadRefreshBonus(self):
self.RefreshBonus()

def RefreshBonus(self):
try:
self.GetChild("Sword_def_Value").SetText(str(player.GetStatus(69)))
self.GetChild("Twohand_def_Value").SetText(str(player.GetStatus(70)))
self.GetChild("Knife_def_Value").SetText(str(player.GetStatus(71)))
self.GetChild("Bow_def_Value").SetText(str(player.GetStatus(74)))
self.GetChild("Bell_def_Value").SetText(str(player.GetStatus(72)))
self.GetChild("Fan_def_Value").SetText(str(player.GetStatus(73)))
self.GetChild("Magic_def_Value").SetText(str(player.GetStatus(77)))
self.GetChild("Poison_def_Value").SetText(str(player.GetStatus(81)))
self.GetChild("Warrior_def_Value").SetText(str(player.GetStatus(59)))
self.GetChild("Assassin_def_Value").SetText(str(player.GetStatus(60)))
self.GetChild("Sura_def_Value").SetText(str(player.GetStatus(61)))
self.GetChild("Mage_def_Value").SetText(str(player.GetStatus(62)))
self.GetChild("Crit_Value").SetText(str(player.GetStatus(40)))
self.GetChild("Pierce_Value").SetText(str(player.GetStatus(41)))
self.GetChild("Hitdmg_Value").SetText(str(player.GetStatus(122)))
self.GetChild("Skilldmg_Value").SetText(str(player.GetStatus(121)))
self.GetChild("Halfhuman_Value").SetText(str(player.GetStatus(43)))
self.GetChild("Undead_Value").SetText(str(player.GetStatus(47)))
self.GetChild("Devil_Value").SetText(str(player.GetStatus(48)))
self.GetChild("Warrior_str_Value").SetText(str(player.GetStatus(54)))
self.GetChild("Assassin_str_Value").SetText(str(player.GetStatus(55)))
self.GetChild("Sura_str_Value").SetText(str(player.GetStatus(56)))
self.GetChild("Mage_str_Value").SetText(str(player.GetStatus(57)))
except:
import exception
exception.Abort("InventoryWindow.RefreshBonus.BindObject")
##BonusPageDialog
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)
if itemCount <= 1:
itemCount = 0
setItemVNum(i, getItemVNum(slotNumber), itemCount)

self.wndItem.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)

self.wndEquip.RefreshSlot()

def RefreshItemSlot(self):
self.RefreshBagSlotWindow()
self.RefreshEquipSlotWindow()

def RefreshStatus(self):
money = player.GetElk()
self.wndMoney.SetText(locale.NumberToMoneyString(money))

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

def SellItem(self):

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, locale.SHOP_BUY_INFO)

elif app.IsPressed(app.DIK_LALT) or (app.IsPressed(app.DIK_LALT) and app.IsPressed(app.DIK_LSHIFT)):
link = player.GetItemLink(itemSlotIndex)
ime.PasteString(link)

elif app.IsPressed(app.DIK_LSHIFT):
itemCount = player.GetItemCount(itemSlotIndex)

if itemCount > 1:
self.dlgPickMoney.SetTitleName(locale.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, locale.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)

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(locale.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, locale.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, locale.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, locale.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, locale.REFINE_FAILURE_UPGRADE_DISABLE_ITEM)

elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.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, locale.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
return

self.questionDialog = uiCommon.QuestionDialog()
self.questionDialog.SetText(locale.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, locale.REFINE_FAILURE_CAN_NOT_ATTACH(itemName))

if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_SOCKET(itemName))

elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_GOLD_SOCKET(itemName))

elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.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;

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):
if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():
return

slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex)

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(locale.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)
#net.SendItemUsePacket(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, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)

def __SendUseItemPacket(self, slotPos):
# 개인상점 열고 있는 동안 아이템 사용 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemUsePacket(slotPos)

def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
# 개인상점 열고 있는 동안 아이템 사용 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount)

##BonusPageDialog
def OnUpdate(self):
if self.isLoaded == 1:
self.__LoadRefreshBonus()
##BonusPageDialog
Iar acesta inventorywindow.py din locale
import uiScriptLocale

MIDDLE_VALUE_FILE = "d:/ymir work/ui/public/Parameter_Slot_01.sub"
EQUIPMENT_START_INDEX = 90

window = {
"name" : "InventoryWindow",

## 600 - (width + ¿À¸¥ÂÊÀ¸·Î ºÎÅÍ ¶ç¿ì±â 24 px)
"x" : SCREEN_WIDTH - 124 - 176,
"y" : SCREEN_HEIGHT - 37 - 565,

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

"width" : 176+124,
"height" : 565,

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

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

"width" : 176+124,
"height" : 565,

"children" :
(
## Title
{
"name" : "TitleBar",
"type" : "titlebar",
"style" : ("attach",),

"x" : 8,
"y" : 7,

"width" : 161+124,
"color" : "yellow",

"children" :
(
{
"name":"TitleName",
"type":"text",
"x":77+62,
"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/game/windows/equipment_base.sub",

"children" :
(

{
"name" : "EquipmentSlot",
"type" : "slot",

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

"width" : 150,
"height" : 182,

"slot" : (
{"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64},
{"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96},
{"index":EQUIPMENT_START_INDEX+5, "x":114, "y":84, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+6, "x":114, "y":52, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+7, "x":2, "y":113, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+8, "x":75, "y":113, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+9, "x":114, "y":1, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32},
),
},
## MallButton
{
"name" : "MallButton",
"type" : "button",

"x" : 120,
"y" : 150,

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

),
},
##BonusPageDialog
{
"name" : "Bonus_Page",
"type" : "window",
"x" : 166,
"y" : 34,
"width" : 124,
"height" : 565-24,
"children" :
(
{
"name" : "BonusBase1",
"type" : "horizontalbar",
"x" : 4,
"y" : 0,
"width" : 120,
"children" :
(
{
"name" : "bonus_text_1",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "Defensiva",
},
),
},
{
"name" : "Sword_defence",
"type" : "text",
"x" : 5,
"y" : 1*18,
"text" : "Sabie:"
},
{
"name" : "Sword_def",
"type" : "window",
"x" : 72,
"y" : 1*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Sword_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Sword_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Twohand_defence",
"type" : "text",
"x" : 5,
"y" : 2*18,
"text" : "Doua-maini:"
},
{
"name" : "Twohand_def",
"type" : "window",
"x" : 72,
"y" : 2*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Twohand_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Twohand_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Knife_defence",
"type" : "text",
"x" : 5,
"y" : 3*18,
"text" : "Pumnal:"
},
{
"name" : "Knife_def",
"type" : "window",
"x" : 72,
"y" : 3*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Knife_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Knife_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Bow_defence",
"type" : "text",
"x" : 5,
"y" : 4*18,
"text" : "Arc:"
},
{
"name" : "Bow_def",
"type" : "window",
"x" : 72,
"y" : 4*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Bow_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Bow_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Bell_defence",
"type" : "text",
"x" : 5,
"y" : 5*18,
"text" : "Clopot:"
},
{
"name" : "Bell_def",
"type" : "window",
"x" : 72,
"y" : 5*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Bell_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Bell_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Fan_defence",
"type" : "text",
"x" : 5,
"y" : 6*18,
"text" : "Evantai:"
},
{
"name" : "Fan_def",
"type" : "window",
"x" : 72,
"y" : 6*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Fan_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Fan_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Magic_defence",
"type" : "text",
"x" : 5,
"y" : 7*18,
"text" : "Magie:"
},
{
"name" : "Magic_def",
"type" : "window",
"x" : 72,
"y" : 7*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Magic_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Magic_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Poison_defence",
"type" : "text",
"x" : 5,
"y" : 8*18,
"text" : "Otrava:"
},
{
"name" : "Poison_def",
"type" : "window",
"x" : 72,
"y" : 8*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Poison_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Poison_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Warrior_defence",
"type" : "text",
"x" : 5,
"y" : 9*18,
"text" : "Razboinic:"
},
{
"name" : "Warrior_def",
"type" : "window",
"x" : 72,
"y" : 9*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Warrior_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Warrior_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Assassin_defence",
"type" : "text",
"x" : 5,
"y" : 10*18,
"text" : "Ninja:"
},
{
"name" : "Assassin_def",
"type" : "window",
"x" : 72,
"y" : 10*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Assassin_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Assassin_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Sura_defence",
"type" : "text",
"x" : 5,
"y" : 11*18,
"text" : "Sura:"
},
{
"name" : "Sura_def",
"type" : "window",
"x" : 72,
"y" : 11*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Sura_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Sura_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Mage_defence",
"type" : "text",
"x" : 5,
"y" : 12*18,
"text" : "Saman:"
},
{
"name" : "Mage_def",
"type" : "window",
"x" : 72,
"y" : 12*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Mage_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Mage_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "BonusBase2",
"type" : "horizontalbar",
"x" : 4,
"y" : 235,
"width" : 120,
"children" :
(
{
"name" : "bonus_text_1",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "Ofensiva",
},
),
},
{
"name" : "Critical_chance",
"type" : "text",
"x" : 5,
"y" : 235+(1*18),
"text" : "Critica:"
},
{
"name" : "Crit",
"type" : "window",
"x" : 72,
"y" : 235+(1*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Crit_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Crit_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Pierce_chance",
"type" : "text",
"x" : 5,
"y" : 235+(2*18),
"text" : "Patrundere:"
},
{
"name" : "Pierce",
"type" : "window",
"x" : 72,
"y" : 235+(2*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Pierce_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Pierce_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Hit_damage",
"type" : "text",
"x" : 5,
"y" : 235+(3*18),
"text" : "Pg. Med:"
},
{
"name" : "Hitdmg",
"type" : "window",
"x" : 72,
"y" : 235+(3*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Hitdmg_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Hitdmg_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Skill_damage",
"type" : "text",
"x" : 5,
"y" : 235+(4*18),
"text" : "Pg. Comp:"
},
{
"name" : "Skilldmg",
"type" : "window",
"x" : 72,
"y" : 235+(4*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Skilldmg_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Skilldmg_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Halfhumans",
"type" : "text",
"x" : 5,
"y" : 235+(5*18),
"text" : "Semi-Om:"
},
{
"name" : "Halfhuman",
"type" : "window",
"x" : 72,
"y" : 235+(5*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Halfhuman_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Halfhuman_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Undeads",
"type" : "text",
"x" : 5,
"y" : 235+(6*18),
"text" : "Vampiri:"
},
{
"name" : "Undead",
"type" : "window",
"x" : 72,
"y" : 235+(6*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Undead_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Undead_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Devil_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(7*18),
"text" : "Diavol:"
},
{
"name" : "Devil",
"type" : "window",
"x" : 72,
"y" : 235+(7*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Devil_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Devil_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Warrior_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(8*18),
"text" : "Razboinic:"
},
{
"name" : "Warrior_str",
"type" : "window",
"x" : 72,
"y" : 235+(8*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Warrior_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Warrior_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Assassin_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(9*18),
"text" : "Ninja:"
},
{
"name" : "Assassin_str",
"type" : "window",
"x" : 72,
"y" : 235+(9*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Assassin_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Assassin_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Sura_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(10*18),
"text" : "Sura:"
},
{
"name" : "Assassin_str",
"type" : "window",
"x" : 72,
"y" : 235+(10*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Sura_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Sura_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Mage_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(11*18),
"text" : "Saman:"
},
{
"name" : "Mage_str",
"type" : "window",
"x" : 72,
"y" : 235+(11*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Mage_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Mage_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "CopyRight",
"type" : "horizontalbar",
"x" : 4,
"y" : 470,
"width" : 120,
"children" :
(
{
"name" : "(C)",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "Metin2 Aeros",
"r" : 1.0,
"g" : 0.0,
"b" : 0.0,
"a" : 1.0,
},
),
},
),
},

##InventoryTabs
{
"name" : "Inventory_Tab_01",
"type" : "radio_button",

"x" : 10,
"y" : 33 + 191,

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

"children" :
(
{
"name" : "Inventory_Tab_01_Print",
"type" : "text",

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

"all_align" : "center",

"text" : "I",
},
),
},
{
"name" : "Inventory_Tab_02",
"type" : "radio_button",

"x" : 10 + 78,
"y" : 33 + 191,

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

"children" :
(
{
"name" : "Inventory_Tab_02_Print",
"type" : "text",

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

"all_align" : "center",

"text" : "II",
},
),
},

## Item Slot
{
"name" : "ItemSlot",
"type" : "grid_table",

"x" : 8,
"y" : 246,

"start_index" : 0,
"x_count" : 5,
"y_count" : 9,
"x_step" : 32,
"y_step" : 32,

"image" : "d:/ymir work/ui/public/Slot_Base.sub"
},

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

"x":8+20,
"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",
},
),
},

),
},
),
}
Avatar utilizator
[Tupeu]
Membru de Elita

Membru de Elita
Mesaje: 4101
Membru din: 28 Oct 2015, 16:16
Aprecieri: 35  
Mulţumiri: 2304  
 Contact:
Medalii

alex9987 scrie:Acesta este uiinveontory.py din root
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 locale
import constInfo
import ime

if locale.IsEUROPE()and app.GetLocalePath() != "locale/sg" or locale.IsYMIR() or locale.IsJAPAN():
ITEM_MALL_BUTTON_ENABLE = TRUE
else:
ITEM_MALL_BUTTON_ENABLE = FALSE

ITEM_FLAG_APPLICABLE = 1 << 14

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

def __init__(self):
ui.ScriptWindow.__init__(self)
self.questionDialog = None
self.tooltipItem = None
self.sellingSlotNumber = -1
self.isLoaded = 0

self.__LoadWindow()

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

def Show(self):
self.__LoadWindow()

ui.ScriptWindow.Show(self)


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")
##BonusPageDialog
self.GetChild("Sword_def_Value").SetText(str(player.GetStatus(69)))
self.GetChild("Twohand_def_Value").SetText(str(player.GetStatus(70)))
self.GetChild("Knife_def_Value").SetText(str(player.GetStatus(71)))
self.GetChild("Bow_def_Value").SetText(str(player.GetStatus(74)))
self.GetChild("Bell_def_Value").SetText(str(player.GetStatus(72)))
self.GetChild("Fan_def_Value").SetText(str(player.GetStatus(73)))
self.GetChild("Magic_def_Value").SetText(str(player.GetStatus(77)))
self.GetChild("Poison_def_Value").SetText(str(player.GetStatus(81)))
self.GetChild("Warrior_def_Value").SetText(str(player.GetStatus(59)))
self.GetChild("Assassin_def_Value").SetText(str(player.GetStatus(60)))
self.GetChild("Sura_def_Value").SetText(str(player.GetStatus(61)))
self.GetChild("Mage_def_Value").SetText(str(player.GetStatus(62)))
self.GetChild("Crit_Value").SetText(str(player.GetStatus(40)))
self.GetChild("Pierce_Value").SetText(str(player.GetStatus(41)))
self.GetChild("Hitdmg_Value").SetText(str(player.GetStatus(122)))
self.GetChild("Skilldmg_Value").SetText(str(player.GetStatus(121)))
self.GetChild("Halfhuman_Value").SetText(str(player.GetStatus(43)))
self.GetChild("Undead_Value").SetText(str(player.GetStatus(47)))
self.GetChild("Devil_Value").SetText(str(player.GetStatus(48)))
self.GetChild("Warrior_str_Value").SetText(str(player.GetStatus(54)))
self.GetChild("Assassin_str_Value").SetText(str(player.GetStatus(55)))
self.GetChild("Sura_str_Value").SetText(str(player.GetStatus(56)))
self.GetChild("Mage_str_Value").SetText(str(player.GetStatus(57)))
##BonusPageDialog
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"))

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

#####

## Refresh
self.SetInventoryPage(0)
self.SetEquipmentPage(0)
self.RefreshItemSlot()
self.RefreshStatus()
self.RefreshBonus()
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.inventoryTab = []
self.equipmentTab = []

def Close(self):
if None != self.tooltipItem:
self.tooltipItem.HideToolTip()

self.OnCloseQuestionDialog()
self.dlgPickMoney.Close()
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")

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(locale.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):
return local

return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local

##BonusPageDialog
def __LoadRefreshBonus(self):
self.RefreshBonus()

def RefreshBonus(self):
try:
self.GetChild("Sword_def_Value").SetText(str(player.GetStatus(69)))
self.GetChild("Twohand_def_Value").SetText(str(player.GetStatus(70)))
self.GetChild("Knife_def_Value").SetText(str(player.GetStatus(71)))
self.GetChild("Bow_def_Value").SetText(str(player.GetStatus(74)))
self.GetChild("Bell_def_Value").SetText(str(player.GetStatus(72)))
self.GetChild("Fan_def_Value").SetText(str(player.GetStatus(73)))
self.GetChild("Magic_def_Value").SetText(str(player.GetStatus(77)))
self.GetChild("Poison_def_Value").SetText(str(player.GetStatus(81)))
self.GetChild("Warrior_def_Value").SetText(str(player.GetStatus(59)))
self.GetChild("Assassin_def_Value").SetText(str(player.GetStatus(60)))
self.GetChild("Sura_def_Value").SetText(str(player.GetStatus(61)))
self.GetChild("Mage_def_Value").SetText(str(player.GetStatus(62)))
self.GetChild("Crit_Value").SetText(str(player.GetStatus(40)))
self.GetChild("Pierce_Value").SetText(str(player.GetStatus(41)))
self.GetChild("Hitdmg_Value").SetText(str(player.GetStatus(122)))
self.GetChild("Skilldmg_Value").SetText(str(player.GetStatus(121)))
self.GetChild("Halfhuman_Value").SetText(str(player.GetStatus(43)))
self.GetChild("Undead_Value").SetText(str(player.GetStatus(47)))
self.GetChild("Devil_Value").SetText(str(player.GetStatus(48)))
self.GetChild("Warrior_str_Value").SetText(str(player.GetStatus(54)))
self.GetChild("Assassin_str_Value").SetText(str(player.GetStatus(55)))
self.GetChild("Sura_str_Value").SetText(str(player.GetStatus(56)))
self.GetChild("Mage_str_Value").SetText(str(player.GetStatus(57)))
except:
import exception
exception.Abort("InventoryWindow.RefreshBonus.BindObject")
##BonusPageDialog
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)
if itemCount <= 1:
itemCount = 0
setItemVNum(i, getItemVNum(slotNumber), itemCount)

self.wndItem.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)

self.wndEquip.RefreshSlot()

def RefreshItemSlot(self):
self.RefreshBagSlotWindow()
self.RefreshEquipSlotWindow()

def RefreshStatus(self):
money = player.GetElk()
self.wndMoney.SetText(locale.NumberToMoneyString(money))

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

def SellItem(self):

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, locale.SHOP_BUY_INFO)

elif app.IsPressed(app.DIK_LALT) or (app.IsPressed(app.DIK_LALT) and app.IsPressed(app.DIK_LSHIFT)):
link = player.GetItemLink(itemSlotIndex)
ime.PasteString(link)

elif app.IsPressed(app.DIK_LSHIFT):
itemCount = player.GetItemCount(itemSlotIndex)

if itemCount > 1:
self.dlgPickMoney.SetTitleName(locale.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, locale.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)

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(locale.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, locale.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, locale.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, locale.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, locale.REFINE_FAILURE_UPGRADE_DISABLE_ITEM)

elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.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, locale.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
return

self.questionDialog = uiCommon.QuestionDialog()
self.questionDialog.SetText(locale.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, locale.REFINE_FAILURE_CAN_NOT_ATTACH(itemName))

if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_SOCKET(itemName))

elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_GOLD_SOCKET(itemName))

elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.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;

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):
if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():
return

slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex)

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(locale.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)
#net.SendItemUsePacket(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, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)

def __SendUseItemPacket(self, slotPos):
# 개인상점 열고 있는 동안 아이템 사용 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemUsePacket(slotPos)

def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
# 개인상점 열고 있는 동안 아이템 사용 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount)

##BonusPageDialog
def OnUpdate(self):
if self.isLoaded == 1:
self.__LoadRefreshBonus()
##BonusPageDialog
Iar acesta inventorywindow.py din locale
import uiScriptLocale

MIDDLE_VALUE_FILE = "d:/ymir work/ui/public/Parameter_Slot_01.sub"
EQUIPMENT_START_INDEX = 90

window = {
"name" : "InventoryWindow",

## 600 - (width + ¿À¸¥ÂÊÀ¸·Î ºÎÅÍ ¶ç¿ì±â 24 px)
"x" : SCREEN_WIDTH - 124 - 176,
"y" : SCREEN_HEIGHT - 37 - 565,

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

"width" : 176+124,
"height" : 565,

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

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

"width" : 176+124,
"height" : 565,

"children" :
(
## Title
{
"name" : "TitleBar",
"type" : "titlebar",
"style" : ("attach",),

"x" : 8,
"y" : 7,

"width" : 161+124,
"color" : "yellow",

"children" :
(
{
"name":"TitleName",
"type":"text",
"x":77+62,
"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/game/windows/equipment_base.sub",

"children" :
(

{
"name" : "EquipmentSlot",
"type" : "slot",

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

"width" : 150,
"height" : 182,

"slot" : (
{"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64},
{"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96},
{"index":EQUIPMENT_START_INDEX+5, "x":114, "y":84, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+6, "x":114, "y":52, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+7, "x":2, "y":113, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+8, "x":75, "y":113, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+9, "x":114, "y":1, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32},
),
},
## MallButton
{
"name" : "MallButton",
"type" : "button",

"x" : 120,
"y" : 150,

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

),
},
##BonusPageDialog
{
"name" : "Bonus_Page",
"type" : "window",
"x" : 166,
"y" : 34,
"width" : 124,
"height" : 565-24,
"children" :
(
{
"name" : "BonusBase1",
"type" : "horizontalbar",
"x" : 4,
"y" : 0,
"width" : 120,
"children" :
(
{
"name" : "bonus_text_1",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "Defensiva",
},
),
},
{
"name" : "Sword_defence",
"type" : "text",
"x" : 5,
"y" : 1*18,
"text" : "Sabie:"
},
{
"name" : "Sword_def",
"type" : "window",
"x" : 72,
"y" : 1*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Sword_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Sword_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Twohand_defence",
"type" : "text",
"x" : 5,
"y" : 2*18,
"text" : "Doua-maini:"
},
{
"name" : "Twohand_def",
"type" : "window",
"x" : 72,
"y" : 2*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Twohand_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Twohand_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Knife_defence",
"type" : "text",
"x" : 5,
"y" : 3*18,
"text" : "Pumnal:"
},
{
"name" : "Knife_def",
"type" : "window",
"x" : 72,
"y" : 3*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Knife_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Knife_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Bow_defence",
"type" : "text",
"x" : 5,
"y" : 4*18,
"text" : "Arc:"
},
{
"name" : "Bow_def",
"type" : "window",
"x" : 72,
"y" : 4*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Bow_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Bow_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Bell_defence",
"type" : "text",
"x" : 5,
"y" : 5*18,
"text" : "Clopot:"
},
{
"name" : "Bell_def",
"type" : "window",
"x" : 72,
"y" : 5*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Bell_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Bell_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Fan_defence",
"type" : "text",
"x" : 5,
"y" : 6*18,
"text" : "Evantai:"
},
{
"name" : "Fan_def",
"type" : "window",
"x" : 72,
"y" : 6*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Fan_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Fan_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Magic_defence",
"type" : "text",
"x" : 5,
"y" : 7*18,
"text" : "Magie:"
},
{
"name" : "Magic_def",
"type" : "window",
"x" : 72,
"y" : 7*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Magic_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Magic_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Poison_defence",
"type" : "text",
"x" : 5,
"y" : 8*18,
"text" : "Otrava:"
},
{
"name" : "Poison_def",
"type" : "window",
"x" : 72,
"y" : 8*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Poison_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Poison_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Warrior_defence",
"type" : "text",
"x" : 5,
"y" : 9*18,
"text" : "Razboinic:"
},
{
"name" : "Warrior_def",
"type" : "window",
"x" : 72,
"y" : 9*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Warrior_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Warrior_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Assassin_defence",
"type" : "text",
"x" : 5,
"y" : 10*18,
"text" : "Ninja:"
},
{
"name" : "Assassin_def",
"type" : "window",
"x" : 72,
"y" : 10*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Assassin_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Assassin_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Sura_defence",
"type" : "text",
"x" : 5,
"y" : 11*18,
"text" : "Sura:"
},
{
"name" : "Sura_def",
"type" : "window",
"x" : 72,
"y" : 11*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Sura_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Sura_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Mage_defence",
"type" : "text",
"x" : 5,
"y" : 12*18,
"text" : "Saman:"
},
{
"name" : "Mage_def",
"type" : "window",
"x" : 72,
"y" : 12*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Mage_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Mage_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "BonusBase2",
"type" : "horizontalbar",
"x" : 4,
"y" : 235,
"width" : 120,
"children" :
(
{
"name" : "bonus_text_1",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "Ofensiva",
},
),
},
{
"name" : "Critical_chance",
"type" : "text",
"x" : 5,
"y" : 235+(1*18),
"text" : "Critica:"
},
{
"name" : "Crit",
"type" : "window",
"x" : 72,
"y" : 235+(1*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Crit_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Crit_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Pierce_chance",
"type" : "text",
"x" : 5,
"y" : 235+(2*18),
"text" : "Patrundere:"
},
{
"name" : "Pierce",
"type" : "window",
"x" : 72,
"y" : 235+(2*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Pierce_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Pierce_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Hit_damage",
"type" : "text",
"x" : 5,
"y" : 235+(3*18),
"text" : "Pg. Med:"
},
{
"name" : "Hitdmg",
"type" : "window",
"x" : 72,
"y" : 235+(3*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Hitdmg_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Hitdmg_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Skill_damage",
"type" : "text",
"x" : 5,
"y" : 235+(4*18),
"text" : "Pg. Comp:"
},
{
"name" : "Skilldmg",
"type" : "window",
"x" : 72,
"y" : 235+(4*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Skilldmg_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Skilldmg_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Halfhumans",
"type" : "text",
"x" : 5,
"y" : 235+(5*18),
"text" : "Semi-Om:"
},
{
"name" : "Halfhuman",
"type" : "window",
"x" : 72,
"y" : 235+(5*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Halfhuman_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Halfhuman_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Undeads",
"type" : "text",
"x" : 5,
"y" : 235+(6*18),
"text" : "Vampiri:"
},
{
"name" : "Undead",
"type" : "window",
"x" : 72,
"y" : 235+(6*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Undead_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Undead_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Devil_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(7*18),
"text" : "Diavol:"
},
{
"name" : "Devil",
"type" : "window",
"x" : 72,
"y" : 235+(7*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Devil_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Devil_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Warrior_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(8*18),
"text" : "Razboinic:"
},
{
"name" : "Warrior_str",
"type" : "window",
"x" : 72,
"y" : 235+(8*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Warrior_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Warrior_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Assassin_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(9*18),
"text" : "Ninja:"
},
{
"name" : "Assassin_str",
"type" : "window",
"x" : 72,
"y" : 235+(9*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Assassin_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Assassin_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Sura_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(10*18),
"text" : "Sura:"
},
{
"name" : "Assassin_str",
"type" : "window",
"x" : 72,
"y" : 235+(10*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Sura_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Sura_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Mage_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(11*18),
"text" : "Saman:"
},
{
"name" : "Mage_str",
"type" : "window",
"x" : 72,
"y" : 235+(11*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Mage_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Mage_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "CopyRight",
"type" : "horizontalbar",
"x" : 4,
"y" : 470,
"width" : 120,
"children" :
(
{
"name" : "(C)",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "Metin2 Aeros",
"r" : 1.0,
"g" : 0.0,
"b" : 0.0,
"a" : 1.0,
},
),
},
),
},

##InventoryTabs
{
"name" : "Inventory_Tab_01",
"type" : "radio_button",

"x" : 10,
"y" : 33 + 191,

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

"children" :
(
{
"name" : "Inventory_Tab_01_Print",
"type" : "text",

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

"all_align" : "center",

"text" : "I",
},
),
},
{
"name" : "Inventory_Tab_02",
"type" : "radio_button",

"x" : 10 + 78,
"y" : 33 + 191,

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

"children" :
(
{
"name" : "Inventory_Tab_02_Print",
"type" : "text",

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

"all_align" : "center",

"text" : "II",
},
),
},

## Item Slot
{
"name" : "ItemSlot",
"type" : "grid_table",

"x" : 8,
"y" : 246,

"start_index" : 0,
"x_count" : 5,
"y_count" : 9,
"x_step" : 32,
"y_step" : 32,

"image" : "d:/ymir work/ui/public/Slot_Base.sub"
},

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

"x":8+20,
"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",
},
),
},

),
},
),
}
Urca-le pe mega/girlshare.
Avatar utilizator
alex9987
Nivel 2

Nivel 2
Mesaje: 251
Membru din: 07 Iun 2017, 15:47
Regat: Jinno
Aprecieri: 160  
Mulţumiri: 2  
Discord: Copiază ID
Medalii

[Tupeu] scrie:
alex9987 scrie:Acesta este uiinveontory.py din root
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 locale
import constInfo
import ime

if locale.IsEUROPE()and app.GetLocalePath() != "locale/sg" or locale.IsYMIR() or locale.IsJAPAN():
ITEM_MALL_BUTTON_ENABLE = TRUE
else:
ITEM_MALL_BUTTON_ENABLE = FALSE

ITEM_FLAG_APPLICABLE = 1 << 14

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

def __init__(self):
ui.ScriptWindow.__init__(self)
self.questionDialog = None
self.tooltipItem = None
self.sellingSlotNumber = -1
self.isLoaded = 0

self.__LoadWindow()

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

def Show(self):
self.__LoadWindow()

ui.ScriptWindow.Show(self)


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")
##BonusPageDialog
self.GetChild("Sword_def_Value").SetText(str(player.GetStatus(69)))
self.GetChild("Twohand_def_Value").SetText(str(player.GetStatus(70)))
self.GetChild("Knife_def_Value").SetText(str(player.GetStatus(71)))
self.GetChild("Bow_def_Value").SetText(str(player.GetStatus(74)))
self.GetChild("Bell_def_Value").SetText(str(player.GetStatus(72)))
self.GetChild("Fan_def_Value").SetText(str(player.GetStatus(73)))
self.GetChild("Magic_def_Value").SetText(str(player.GetStatus(77)))
self.GetChild("Poison_def_Value").SetText(str(player.GetStatus(81)))
self.GetChild("Warrior_def_Value").SetText(str(player.GetStatus(59)))
self.GetChild("Assassin_def_Value").SetText(str(player.GetStatus(60)))
self.GetChild("Sura_def_Value").SetText(str(player.GetStatus(61)))
self.GetChild("Mage_def_Value").SetText(str(player.GetStatus(62)))
self.GetChild("Crit_Value").SetText(str(player.GetStatus(40)))
self.GetChild("Pierce_Value").SetText(str(player.GetStatus(41)))
self.GetChild("Hitdmg_Value").SetText(str(player.GetStatus(122)))
self.GetChild("Skilldmg_Value").SetText(str(player.GetStatus(121)))
self.GetChild("Halfhuman_Value").SetText(str(player.GetStatus(43)))
self.GetChild("Undead_Value").SetText(str(player.GetStatus(47)))
self.GetChild("Devil_Value").SetText(str(player.GetStatus(48)))
self.GetChild("Warrior_str_Value").SetText(str(player.GetStatus(54)))
self.GetChild("Assassin_str_Value").SetText(str(player.GetStatus(55)))
self.GetChild("Sura_str_Value").SetText(str(player.GetStatus(56)))
self.GetChild("Mage_str_Value").SetText(str(player.GetStatus(57)))
##BonusPageDialog
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"))

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

#####

## Refresh
self.SetInventoryPage(0)
self.SetEquipmentPage(0)
self.RefreshItemSlot()
self.RefreshStatus()
self.RefreshBonus()
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.inventoryTab = []
self.equipmentTab = []

def Close(self):
if None != self.tooltipItem:
self.tooltipItem.HideToolTip()

self.OnCloseQuestionDialog()
self.dlgPickMoney.Close()
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")

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(locale.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):
return local

return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local

##BonusPageDialog
def __LoadRefreshBonus(self):
self.RefreshBonus()

def RefreshBonus(self):
try:
self.GetChild("Sword_def_Value").SetText(str(player.GetStatus(69)))
self.GetChild("Twohand_def_Value").SetText(str(player.GetStatus(70)))
self.GetChild("Knife_def_Value").SetText(str(player.GetStatus(71)))
self.GetChild("Bow_def_Value").SetText(str(player.GetStatus(74)))
self.GetChild("Bell_def_Value").SetText(str(player.GetStatus(72)))
self.GetChild("Fan_def_Value").SetText(str(player.GetStatus(73)))
self.GetChild("Magic_def_Value").SetText(str(player.GetStatus(77)))
self.GetChild("Poison_def_Value").SetText(str(player.GetStatus(81)))
self.GetChild("Warrior_def_Value").SetText(str(player.GetStatus(59)))
self.GetChild("Assassin_def_Value").SetText(str(player.GetStatus(60)))
self.GetChild("Sura_def_Value").SetText(str(player.GetStatus(61)))
self.GetChild("Mage_def_Value").SetText(str(player.GetStatus(62)))
self.GetChild("Crit_Value").SetText(str(player.GetStatus(40)))
self.GetChild("Pierce_Value").SetText(str(player.GetStatus(41)))
self.GetChild("Hitdmg_Value").SetText(str(player.GetStatus(122)))
self.GetChild("Skilldmg_Value").SetText(str(player.GetStatus(121)))
self.GetChild("Halfhuman_Value").SetText(str(player.GetStatus(43)))
self.GetChild("Undead_Value").SetText(str(player.GetStatus(47)))
self.GetChild("Devil_Value").SetText(str(player.GetStatus(48)))
self.GetChild("Warrior_str_Value").SetText(str(player.GetStatus(54)))
self.GetChild("Assassin_str_Value").SetText(str(player.GetStatus(55)))
self.GetChild("Sura_str_Value").SetText(str(player.GetStatus(56)))
self.GetChild("Mage_str_Value").SetText(str(player.GetStatus(57)))
except:
import exception
exception.Abort("InventoryWindow.RefreshBonus.BindObject")
##BonusPageDialog
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)
if itemCount <= 1:
itemCount = 0
setItemVNum(i, getItemVNum(slotNumber), itemCount)

self.wndItem.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)

self.wndEquip.RefreshSlot()

def RefreshItemSlot(self):
self.RefreshBagSlotWindow()
self.RefreshEquipSlotWindow()

def RefreshStatus(self):
money = player.GetElk()
self.wndMoney.SetText(locale.NumberToMoneyString(money))

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

def SellItem(self):

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, locale.SHOP_BUY_INFO)

elif app.IsPressed(app.DIK_LALT) or (app.IsPressed(app.DIK_LALT) and app.IsPressed(app.DIK_LSHIFT)):
link = player.GetItemLink(itemSlotIndex)
ime.PasteString(link)

elif app.IsPressed(app.DIK_LSHIFT):
itemCount = player.GetItemCount(itemSlotIndex)

if itemCount > 1:
self.dlgPickMoney.SetTitleName(locale.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, locale.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)

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(locale.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, locale.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, locale.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, locale.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, locale.REFINE_FAILURE_UPGRADE_DISABLE_ITEM)

elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.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, locale.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
return

self.questionDialog = uiCommon.QuestionDialog()
self.questionDialog.SetText(locale.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, locale.REFINE_FAILURE_CAN_NOT_ATTACH(itemName))

if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_SOCKET(itemName))

elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_GOLD_SOCKET(itemName))

elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.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;

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):
if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():
return

slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex)

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(locale.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)
#net.SendItemUsePacket(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, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)

def __SendUseItemPacket(self, slotPos):
# 개인상점 열고 있는 동안 아이템 사용 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemUsePacket(slotPos)

def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
# 개인상점 열고 있는 동안 아이템 사용 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount)

##BonusPageDialog
def OnUpdate(self):
if self.isLoaded == 1:
self.__LoadRefreshBonus()
##BonusPageDialog
Iar acesta inventorywindow.py din locale
import uiScriptLocale

MIDDLE_VALUE_FILE = "d:/ymir work/ui/public/Parameter_Slot_01.sub"
EQUIPMENT_START_INDEX = 90

window = {
"name" : "InventoryWindow",

## 600 - (width + ¿À¸¥ÂÊÀ¸·Î ºÎÅÍ ¶ç¿ì±â 24 px)
"x" : SCREEN_WIDTH - 124 - 176,
"y" : SCREEN_HEIGHT - 37 - 565,

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

"width" : 176+124,
"height" : 565,

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

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

"width" : 176+124,
"height" : 565,

"children" :
(
## Title
{
"name" : "TitleBar",
"type" : "titlebar",
"style" : ("attach",),

"x" : 8,
"y" : 7,

"width" : 161+124,
"color" : "yellow",

"children" :
(
{
"name":"TitleName",
"type":"text",
"x":77+62,
"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/game/windows/equipment_base.sub",

"children" :
(

{
"name" : "EquipmentSlot",
"type" : "slot",

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

"width" : 150,
"height" : 182,

"slot" : (
{"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64},
{"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96},
{"index":EQUIPMENT_START_INDEX+5, "x":114, "y":84, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+6, "x":114, "y":52, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+7, "x":2, "y":113, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+8, "x":75, "y":113, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+9, "x":114, "y":1, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32},
),
},
## MallButton
{
"name" : "MallButton",
"type" : "button",

"x" : 120,
"y" : 150,

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

),
},
##BonusPageDialog
{
"name" : "Bonus_Page",
"type" : "window",
"x" : 166,
"y" : 34,
"width" : 124,
"height" : 565-24,
"children" :
(
{
"name" : "BonusBase1",
"type" : "horizontalbar",
"x" : 4,
"y" : 0,
"width" : 120,
"children" :
(
{
"name" : "bonus_text_1",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "Defensiva",
},
),
},
{
"name" : "Sword_defence",
"type" : "text",
"x" : 5,
"y" : 1*18,
"text" : "Sabie:"
},
{
"name" : "Sword_def",
"type" : "window",
"x" : 72,
"y" : 1*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Sword_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Sword_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Twohand_defence",
"type" : "text",
"x" : 5,
"y" : 2*18,
"text" : "Doua-maini:"
},
{
"name" : "Twohand_def",
"type" : "window",
"x" : 72,
"y" : 2*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Twohand_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Twohand_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Knife_defence",
"type" : "text",
"x" : 5,
"y" : 3*18,
"text" : "Pumnal:"
},
{
"name" : "Knife_def",
"type" : "window",
"x" : 72,
"y" : 3*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Knife_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Knife_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Bow_defence",
"type" : "text",
"x" : 5,
"y" : 4*18,
"text" : "Arc:"
},
{
"name" : "Bow_def",
"type" : "window",
"x" : 72,
"y" : 4*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Bow_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Bow_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Bell_defence",
"type" : "text",
"x" : 5,
"y" : 5*18,
"text" : "Clopot:"
},
{
"name" : "Bell_def",
"type" : "window",
"x" : 72,
"y" : 5*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Bell_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Bell_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Fan_defence",
"type" : "text",
"x" : 5,
"y" : 6*18,
"text" : "Evantai:"
},
{
"name" : "Fan_def",
"type" : "window",
"x" : 72,
"y" : 6*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Fan_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Fan_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Magic_defence",
"type" : "text",
"x" : 5,
"y" : 7*18,
"text" : "Magie:"
},
{
"name" : "Magic_def",
"type" : "window",
"x" : 72,
"y" : 7*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Magic_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Magic_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Poison_defence",
"type" : "text",
"x" : 5,
"y" : 8*18,
"text" : "Otrava:"
},
{
"name" : "Poison_def",
"type" : "window",
"x" : 72,
"y" : 8*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Poison_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Poison_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Warrior_defence",
"type" : "text",
"x" : 5,
"y" : 9*18,
"text" : "Razboinic:"
},
{
"name" : "Warrior_def",
"type" : "window",
"x" : 72,
"y" : 9*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Warrior_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Warrior_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Assassin_defence",
"type" : "text",
"x" : 5,
"y" : 10*18,
"text" : "Ninja:"
},
{
"name" : "Assassin_def",
"type" : "window",
"x" : 72,
"y" : 10*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Assassin_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Assassin_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Sura_defence",
"type" : "text",
"x" : 5,
"y" : 11*18,
"text" : "Sura:"
},
{
"name" : "Sura_def",
"type" : "window",
"x" : 72,
"y" : 11*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Sura_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Sura_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Mage_defence",
"type" : "text",
"x" : 5,
"y" : 12*18,
"text" : "Saman:"
},
{
"name" : "Mage_def",
"type" : "window",
"x" : 72,
"y" : 12*18,
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Mage_def_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Mage_def_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "BonusBase2",
"type" : "horizontalbar",
"x" : 4,
"y" : 235,
"width" : 120,
"children" :
(
{
"name" : "bonus_text_1",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "Ofensiva",
},
),
},
{
"name" : "Critical_chance",
"type" : "text",
"x" : 5,
"y" : 235+(1*18),
"text" : "Critica:"
},
{
"name" : "Crit",
"type" : "window",
"x" : 72,
"y" : 235+(1*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Crit_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Crit_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Pierce_chance",
"type" : "text",
"x" : 5,
"y" : 235+(2*18),
"text" : "Patrundere:"
},
{
"name" : "Pierce",
"type" : "window",
"x" : 72,
"y" : 235+(2*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Pierce_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Pierce_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Hit_damage",
"type" : "text",
"x" : 5,
"y" : 235+(3*18),
"text" : "Pg. Med:"
},
{
"name" : "Hitdmg",
"type" : "window",
"x" : 72,
"y" : 235+(3*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Hitdmg_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Hitdmg_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Skill_damage",
"type" : "text",
"x" : 5,
"y" : 235+(4*18),
"text" : "Pg. Comp:"
},
{
"name" : "Skilldmg",
"type" : "window",
"x" : 72,
"y" : 235+(4*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Skilldmg_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Skilldmg_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Halfhumans",
"type" : "text",
"x" : 5,
"y" : 235+(5*18),
"text" : "Semi-Om:"
},
{
"name" : "Halfhuman",
"type" : "window",
"x" : 72,
"y" : 235+(5*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Halfhuman_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Halfhuman_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Undeads",
"type" : "text",
"x" : 5,
"y" : 235+(6*18),
"text" : "Vampiri:"
},
{
"name" : "Undead",
"type" : "window",
"x" : 72,
"y" : 235+(6*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Undead_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Undead_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Devil_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(7*18),
"text" : "Diavol:"
},
{
"name" : "Devil",
"type" : "window",
"x" : 72,
"y" : 235+(7*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Devil_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Devil_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Warrior_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(8*18),
"text" : "Razboinic:"
},
{
"name" : "Warrior_str",
"type" : "window",
"x" : 72,
"y" : 235+(8*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Warrior_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Warrior_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Assassin_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(9*18),
"text" : "Ninja:"
},
{
"name" : "Assassin_str",
"type" : "window",
"x" : 72,
"y" : 235+(9*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Assassin_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Assassin_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Sura_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(10*18),
"text" : "Sura:"
},
{
"name" : "Assassin_str",
"type" : "window",
"x" : 72,
"y" : 235+(10*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Sura_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Sura_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "Mage_gegen",
"type" : "text",
"x" : 5,
"y" : 235+(11*18),
"text" : "Saman:"
},
{
"name" : "Mage_str",
"type" : "window",
"x" : 72,
"y" : 235+(11*18),
"width" : 53,
"height" : 19,
"children" :
(
{
"name" : "Mage_str_Slot",
"type" : "image",
"x" : 0,
"y" : 0,
"image" : MIDDLE_VALUE_FILE
},
{
"name" : "Mage_str_Value",
"type" : "text",
"x" : 26,
"y" : 3,
"text" : "999",
"r" : 1.0,
"g" : 1.0,
"b" : 1.0,
"a" : 1.0,
"text_horizontal_align":"center"
},
),
},
{
"name" : "CopyRight",
"type" : "horizontalbar",
"x" : 4,
"y" : 470,
"width" : 120,
"children" :
(
{
"name" : "(C)",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "Metin2 Aeros",
"r" : 1.0,
"g" : 0.0,
"b" : 0.0,
"a" : 1.0,
},
),
},
),
},

##InventoryTabs
{
"name" : "Inventory_Tab_01",
"type" : "radio_button",

"x" : 10,
"y" : 33 + 191,

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

"children" :
(
{
"name" : "Inventory_Tab_01_Print",
"type" : "text",

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

"all_align" : "center",

"text" : "I",
},
),
},
{
"name" : "Inventory_Tab_02",
"type" : "radio_button",

"x" : 10 + 78,
"y" : 33 + 191,

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

"children" :
(
{
"name" : "Inventory_Tab_02_Print",
"type" : "text",

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

"all_align" : "center",

"text" : "II",
},
),
},

## Item Slot
{
"name" : "ItemSlot",
"type" : "grid_table",

"x" : 8,
"y" : 246,

"start_index" : 0,
"x_count" : 5,
"y_count" : 9,
"x_step" : 32,
"y_step" : 32,

"image" : "d:/ymir work/ui/public/Slot_Base.sub"
},

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

"x":8+20,
"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",
},
),
},

),
},
),
}
Urca-le pe mega/girlshare.
Poftim
http://www.girlshare.ro/3489921315.1
http://www.girlshare.ro/3489921316.2
Avatar utilizator
[Tupeu]
Membru de Elita

Membru de Elita
Mesaje: 4101
Membru din: 28 Oct 2015, 16:16
Aprecieri: 35  
Mulţumiri: 2304  
 Contact:
Medalii

Incearca:
Avatar utilizator
alex9987
Nivel 2

Nivel 2
Mesaje: 251
Membru din: 07 Iun 2017, 15:47
Regat: Jinno
Aprecieri: 160  
Mulţumiri: 2  
Discord: Copiază ID
Medalii

[Tupeu] scrie:Incearca:
Eroare syerr
0903 16:28:29727 :: File "networkModule.py", line 233, in SetGamePhase

0903 16:28:29727 :: File "game.py", line 120, in __init__

0903 16:28:29727 :: File "interfaceModule.py", line 258, in MakeInterface

0903 16:28:29728 :: File "interfaceModule.py", line 157, in __MakeWindows

0903 16:28:29728 :: File "uiInventory.py", line 115, in __init__

0903 16:28:29728 :: File "uiInventory.py", line 254, in __LoadWindow

0903 16:28:29728 :: File "uiInventory.py", line 302, in SetInventoryPage

0903 16:28:29728 :: File "uiInventory.py", line 400, in RefreshBagSlotWindow

0903 16:28:29728 :: File "uiInventory.py", line 357, in __InventoryLocalSlotPosToGlobalSlotPos

0903 16:28:29728 :: AttributeError
0903 16:28:29728 :: :
0903 16:28:29728 :: 'module' object has no attribute 'ENABLE_NEW_EQUIPMENT_SYSTEM'
0903 16:28:29728 ::
Închis
Răspunsuri
8
Vizualizări
1621
Răspunsuri
5
Vizualizări
698
Răspunsuri
7
Vizualizări
668
Răspunsuri
2
Vizualizări
65

Înapoi la “Probleme rezolvate”

  • Informaţie
  • Cine este conectat

    Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 50 vizitatori