@ndr31
-
Posts
35 -
Joined
-
Last visited
-
Feedback
0%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by @ndr31
-
-
-
-
-
Try to put the animation on the npc model and see if the animation is the right one
-
Could you check if the wait.gr2 animation for this npc is really the wait.gr2 and not the run.gr2?
-
Hi, i have this problem when i close the inventory(the inventory remains open) or exit the client:
https://metin2.download/picture/OO4rBkP9nSGzZOzGeiSJviVi98IIXGJx/.pngSyserr:
0120 17:45:16005 :: Traceback (most recent call last): 0120 17:45:16005 :: File "ui.py", line 1905, in CallEvent 0120 17:45:16005 :: File "ui.py", line 85, in __call__ 0120 17:45:16005 :: File "ui.py", line 67, in __call__ 0120 17:45:16005 :: File "uiInventory.py", line 746, in Close 0120 17:45:16005 :: File "uiInventory.py", line 724, in Hide 0120 17:45:16005 :: AttributeError 0120 17:45:16005 :: : 0120 17:45:16005 :: 'SlotWindow' object has no attribute 'Close' 0120 17:45:16005 ::
UiInventory.py:
Spoilerimport ui import player import mouseModule import net import app import snd import item import player import chat import grp import uiScriptLocale import uiRefine import uiAttachMetin import uiPickMoney import uiCommon import uiPrivateShopBuilder # 개인상점 열동안 ItemMove 방지 import localeInfo import constInfo import ime import ui import wndMgr import exchange import uiSearchShop import uiNewShop if app.ENABLE_SASH_SYSTEM: import sash if app.ENABLE_BIOLOG_SYSTEM: import uiprofessionalbiolog, uiToolTip if app.ENABLE_CHANGELOOK_SYSTEM: import changelook from _weakref import proxy from switchbot import Bot import switchbot import interfaceModule ITEM_MALL_BUTTON_ENABLE = True ITEM_FLAG_APPLICABLE = 1 << 14 class CostumeWindow(ui.ScriptWindow): def __init__(self, wndInventory): import exception if not app.ENABLE_COSTUME_SYSTEM: exception.Abort("What do you do?") return if not wndInventory: exception.Abort("wndInventory parameter must be set to InventoryWindow") return ui.ScriptWindow.__init__(self) self.isLoaded = 0 self.wndInventory = wndInventory; self.__LoadWindow() def __del__(self): ui.ScriptWindow.__del__(self) def Show(self): self.__LoadWindow() self.RefreshCostumeSlot() ui.ScriptWindow.Show(self) def Close(self): self.Hide() if app.WJ_ENABLE_PICKUP_ITEM_EFFECT: def HighlightSlot(self, slot): if not slot in self.listHighlightedSlot: self.listHighlightedSlot.append(slot) def __LoadWindow(self): if self.isLoaded == 1: return self.isLoaded = 1 try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "UIScript/costumewindow.py") except: import exception exception.Abort("CostumeWindow.LoadWindow.LoadObject") try: wndEquip = self.GetChild("CostumeSlot") self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close)) except: import exception exception.Abort("CostumeWindow.LoadWindow.BindObject") ## Equipment wndEquip.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem)) wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem)) wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot)) wndEquip.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot)) wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot)) wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot)) self.wndEquip = wndEquip def RefreshCostumeSlot(self): getItemVNum=player.GetItemIndex for i in xrange(item.COSTUME_SLOT_COUNT): slotNumber = item.COSTUME_SLOT_START + i self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0) if app.ENABLE_CHANGELOOK_SYSTEM: itemTransmutedVnum = player.GetItemTransmutation(slotNumber) if itemTransmutedVnum: self.wndEquip.DisableCoverButton(slotNumber) else: self.wndEquip.EnableCoverButton(slotNumber) slotNumber = item.EQUIPMENT_BELT + 1 self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0) if app.ENABLE_CHANGELOOK_SYSTEM: itemTransmutedVnum = player.GetItemTransmutation(slotNumber) if itemTransmutedVnum: self.wndEquip.DisableCoverButton(slotNumber) else: self.wndEquip.EnableCoverButton(slotNumber) self.wndEquip.RefreshSlot() class BeltInventoryWindow(ui.ScriptWindow): def __init__(self, wndInventory): import exception if not app.ENABLE_NEW_EQUIPMENT_SYSTEM: exception.Abort("What do you do?") return if not wndInventory: exception.Abort("wndInventory parameter must be set to InventoryWindow") return ui.ScriptWindow.__init__(self) self.isLoaded = 0 self.wndInventory = wndInventory; self.wndBeltInventoryLayer = None self.wndBeltInventorySlot = None self.expandBtn = None self.minBtn = None self.__LoadWindow() def __del__(self): ui.ScriptWindow.__del__(self) def Show(self, openBeltSlot = False): self.__LoadWindow() self.RefreshSlot() ui.ScriptWindow.Show(self) if openBeltSlot: self.OpenInventory() else: self.CloseInventory() def Close(self): self.Hide() if app.WJ_ENABLE_PICKUP_ITEM_EFFECT: def HighlightSlot(self, slot): if not slot in self.listHighlightedSlot: self.listHighlightedSlot.append(slot) def IsOpeningInventory(self): return self.wndBeltInventoryLayer.IsShow() def OpenInventory(self): self.wndBeltInventoryLayer.Show() self.expandBtn.Hide() if localeInfo.IsARABIC() == 0: self.AdjustPositionAndSize() def CloseInventory(self): self.wndBeltInventoryLayer.Hide() self.expandBtn.Show() if localeInfo.IsARABIC() == 0: self.AdjustPositionAndSize() ## 현재 인벤토리 위치를 기준으로 BASE 위치를 계산, 리턴.. 숫자 하드코딩하기 정말 싫지만 방법이 없다.. if app.ENABLE_BIOLOG_SYSTEM: def GetBasePosition(self): x, y = self.wndInventory.GetGlobalPosition() return x - 148+20, y + 385 else: def GetBasePosition(self): x, y = self.wndInventory.GetGlobalPosition() return x - 148+20, y + 241 def AdjustPositionAndSize(self): bx, by = self.GetBasePosition() if self.IsOpeningInventory(): self.SetPosition(bx, by) self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight()) else: self.SetPosition(bx + 138, by); self.SetSize(10, self.GetHeight()) def __LoadWindow(self): if self.isLoaded == 1: return self.isLoaded = 1 try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "UIScript/BeltInventoryWindow.py") except: import exception exception.Abort("CostumeWindow.LoadWindow.LoadObject") try: self.ORIGINAL_WIDTH = self.GetWidth() wndBeltInventorySlot = self.GetChild("BeltInventorySlot") self.wndBeltInventoryLayer = self.GetChild("BeltInventoryLayer") self.expandBtn = self.GetChild("ExpandBtn") self.minBtn = self.GetChild("MinimizeBtn") self.expandBtn.SetEvent(ui.__mem_func__(self.OpenInventory)) self.minBtn.SetEvent(ui.__mem_func__(self.CloseInventory)) if localeInfo.IsARABIC() : self.expandBtn.SetPosition(self.expandBtn.GetWidth() - 2, 15) self.wndBeltInventoryLayer.SetPosition(self.wndBeltInventoryLayer.GetWidth() - 5, 0) self.minBtn.SetPosition(self.minBtn.GetWidth() + 3, 15) for i in xrange(item.BELT_INVENTORY_SLOT_COUNT): slotNumber = item.BELT_INVENTORY_SLOT_START + i wndBeltInventorySlot.SetCoverButton(slotNumber, "d:/ymir work/ui/game/quest/slot_button_01.sub",\ "d:/ymir work/ui/game/quest/slot_button_01.sub",\ "d:/ymir work/ui/game/quest/slot_button_01.sub",\ "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga", False, False) except: import exception exception.Abort("CostumeWindow.LoadWindow.BindObject") ## Equipment wndBeltInventorySlot.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem)) wndBeltInventorySlot.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem)) wndBeltInventorySlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot)) wndBeltInventorySlot.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot)) wndBeltInventorySlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot)) wndBeltInventorySlot.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot)) self.wndBeltInventorySlot = wndBeltInventorySlot def RefreshSlot(self): getItemVNum=player.GetItemIndex for i in xrange(item.BELT_INVENTORY_SLOT_COUNT): slotNumber = item.BELT_INVENTORY_SLOT_START + i self.wndBeltInventorySlot.SetItemSlot(slotNumber, getItemVNum(slotNumber), player.GetItemCount(slotNumber)) self.wndBeltInventorySlot.SetAlwaysRenderCoverButton(slotNumber, True) avail = "0" if player.IsAvailableBeltInventoryCell(slotNumber): self.wndBeltInventorySlot.EnableCoverButton(slotNumber) else: self.wndBeltInventorySlot.DisableCoverButton(slotNumber) self.wndBeltInventorySlot.RefreshSlot() if app.ENABLE_BIOLOG_SYSTEM: ################################################################### # title_name : Professional Biolog System # date_created : 2016.08.07 # filename : uiInventory.py # author : VegaS # version_actual : Version 0.2.8 # class CollectInventoryWindow(ui.ScriptWindow): def __init__(self, wndInventory): import exception if not wndInventory: exception.Abort("wndInventory parameter must be set to CollectInventoryWindow") return ui.ScriptWindow.__init__(self) self.isLoaded = 0 self.updated = 0 self.wndInventory = wndInventory; self.tooltipItem = uiToolTip.ItemToolTip() self.tooltipItem.Hide() self.wndBeltInventoryLayer = None self.wndBeltInventorySlot = None self.expandBtn = None self.minBtn = None self.gameWindow = None self.__LoadWindow() def __del__(self): ui.ScriptWindow.__del__(self) def Show(self, openBeltSlot = False): self.__LoadWindow() ui.ScriptWindow.Show(self) if openBeltSlot: self.OpenInventory() else: self.CloseInventory() def Close(self): self.Hide() def IsOpeningInventory(self): return self.wndBeltInventoryLayer.IsShow() def OpenInventory(self): self.wndBeltInventoryLayer.Show() self.expandBtn.Hide() self.AdjustPositionAndSize() def CloseInventory(self): self.wndBeltInventoryLayer.Hide() self.expandBtn.Show() self.AdjustPositionAndSize() def GetBasePosition(self): x, y = self.wndInventory.GetGlobalPosition() return x - 148+20, y + 260 def AdjustPositionAndSize(self): bx, by = self.GetBasePosition() if self.IsOpeningInventory(): self.SetPosition(bx, by) self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight()) else: self.SetPosition(bx + 138, by); self.SetSize(10, self.GetHeight()) def __LoadWindow(self): if self.isLoaded == 1: return self.isLoaded = 1 try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "UIScript/biolog_collectinventorywindow.py") except: import exception exception.Abort("CollectInventoryWindow.LoadWindow.LoadObject") try: self.ORIGINAL_WIDTH = self.GetWidth()-4 self.wndBeltInventoryLayer = self.GetChild("BeltInventoryLayer") self.wndItem = self.GetChild("BeltInventorySlot") self.time_value = self.GetChild("time_value") self.biolog_count = self.GetChild("count_value") self.expandBtn = self.GetChild("ExpandBtn") self.minBtn = self.GetChild("MinimizeBtn") self.sendBtn = self.GetChild("send_biolog") self.expandBtn.SetEvent(ui.__mem_func__(self.OpenInventory)) self.minBtn.SetEvent(ui.__mem_func__(self.CloseInventory)) self.wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) self.wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) except: import exception exception.Abort("CollectInventoryWindow.LoadWindow.BindObject") if self.sendBtn: self.sendBtn.SetEvent(ui.__mem_func__(self.AcceptBiolog)) def SetItem(self, arg1, arg2, arg3): self.wndItem.SetItemSlot(0, int(uiprofessionalbiolog.BIOLOG_BINARY_LOADED["vnum"][0]), 0) def AcceptBiolog(self): net.SendChatPacket("/biolog") def SetTime(self, time): time_collect = time - app.GetGlobalTimeStamp() if time_collect < 0: time_collect = 0 if time_collect == 1: self.wndLeftTime = uiprofessionalbiolog.Biolog_TimeExpired() self.wndLeftTime.OpenWindow() self.wndLeftTime.Show() self.time_value.SetText(localeInfo.FormatTime(time_collect)) def OnUpdate(self): self.SetTime(int(uiprofessionalbiolog.BIOLOG_BINARY_LOADED["time"][0])) self.SetItem(0, uiprofessionalbiolog.BIOLOG_BINARY_LOADED["vnum"][0], 0) self.biolog_count.SetText(uiprofessionalbiolog.BIOLOG_BINARY_LOADED['countActual'][0] + "/" + uiprofessionalbiolog.BIOLOG_BINARY_LOADED['countNeed'][0]) def OverInItem(self): if uiprofessionalbiolog.BIOLOG_BINARY_LOADED["vnum"][0]: self.tooltipItem.SetItemToolTip(uiprofessionalbiolog.BIOLOG_BINARY_LOADED["vnum"][0]) def OverOutItem(self): if self.tooltipItem: self.tooltipItem.HideToolTip() class InventoryWindow(ui.ScriptWindow): if app.ENABLE_COSTUME_ATTR_SYSTEM: USE_TYPE_TUPLE = ("USE_CLEAN_SOCKET", "USE_CHANGE_ATTRIBUTE", "USE_ADD_ATTRIBUTE", "USE_ADD_ATTRIBUTE2", "USE_ADD_ACCESSORY_SOCKET", "USE_PUT_INTO_ACCESSORY_SOCKET", "USE_PUT_INTO_BELT_SOCKET", "USE_PUT_INTO_RING_SOCKET", "USE_COSTUME_ENCHANT", "USE_COSTUME_TRANSFORM", "USE_SPECIAL") else: USE_TYPE_TUPLE = ("USE_CLEAN_SOCKET", "USE_CHANGE_ATTRIBUTE", "USE_ADD_ATTRIBUTE", "USE_ADD_ATTRIBUTE2", "USE_ADD_ACCESSORY_SOCKET", "USE_PUT_INTO_ACCESSORY_SOCKET", "USE_PUT_INTO_BELT_SOCKET", "USE_PUT_INTO_RING_SOCKET", "USE_SPECIAL") questionDialog = None tooltipItem = None wndCostume = None wndBelt = None if app.ENABLE_BIOLOG_SYSTEM: wndCollect = None dlgPickMoney = None interface = None if app.WJ_ENABLE_TRADABLE_ICON: bindWnds = [] sellingSlotNumber = -1 isLoaded = 0 equipmentPageIndex = 0 isOpenedCostumeWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 코스츔이 열려있었는지 여부-_-; 네이밍 ㅈㅅ if app.ENABLE_BIOLOG_SYSTEM: isOpenedCollectWindowWhenClosingInventory = 0 isOpenedBeltWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ def __init__(self): ui.ScriptWindow.__init__(self) self.isOpenedBeltWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ self.uiSearchShop=uiSearchShop.ShopSearch() self.switchbot = Bot() self.__LoadWindow() def __del__(self): ui.ScriptWindow.__del__(self) def Show(self): self.__LoadWindow() ui.ScriptWindow.Show(self) # 인벤토리를 닫을 때 코스츔이 열려있었다면 인벤토리를 열 때 코스츔도 같이 열도록 함. if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume: self.wndCostume.Show() if app.ENABLE_BIOLOG_SYSTEM: if self.wndCollect: self.wndCollect.Show(self.isOpenedCollectWindowWhenClosingInventory) # Belt System if self.wndBelt: self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory) job = player.GetJob() if job == 1: if self.wndEquip: self.wndEquip.Hide() if self.wndEquipNinja: self.wndEquipNinja.Show() if self.wndEquipBase: self.wndEquipBase.LoadImage("inventory/new_equipment_bg_ninja.tga") else: if self.wndEquip: self.wndEquip.Show() if self.wndEquipNinja: self.wndEquipNinja.Hide() if self.wndEquipBase: self.wndEquipBase.LoadImage("inventory/new_equipment_bg.tga") def BindInterfaceClass(self, interface): self.interface = interface if app.WJ_ENABLE_TRADABLE_ICON: def BindWindow(self, wnd): self.bindWnds.append(wnd) def __LoadWindow(self): if self.isLoaded == 1: return self.isLoaded = 1 try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "UIScript/InventoryWindow.py") except: import exception exception.Abort("InventoryWindow.LoadWindow.LoadObject") try: wndItem = self.GetChild("ItemSlot") wndCostume = self.GetChild("CostumeSlot") wndEquip = self.GetChild("EquipmentSlot") wndEquipNinja = self.GetChild("EquipmentSlotNinja") self.wndEquipBase = self.GetChild("Equipment_Base") self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close)) self.DSSButton = self.GetChild2("DSSButton") self.SpecialStorageButton = self.GetChild2("SpecialStorageButton") # self.INFOCHESTButton = self.GetChild2("INFOCHESTButton") self.costumeButton = self.GetChild2("CostumeButton") self.arrange_button = self.GetChild2("arrange_button") self.inventoryTab = [] for i in xrange(player.INVENTORY_PAGE_COUNT): self.inventoryTab.append(self.GetChild("Inventory_Tab_%02d" % (i+1))) self.equipmentTab = [] self.equipmentTab.append(self.GetChild("Equipment_Tab_01")) self.equipmentTab.append(self.GetChild("Equipment_Tab_02")) if self.costumeButton and not app.ENABLE_COSTUME_SYSTEM: self.costumeButton.Hide() self.costumeButton.Destroy() self.costumeButton = 0 # Belt Inventory Window self.wndBelt = None if app.ENABLE_NEW_EQUIPMENT_SYSTEM: self.wndBelt = BeltInventoryWindow(self) if app.ENABLE_BIOLOG_SYSTEM: self.wndCollect = None self.wndCollect = CollectInventoryWindow(self) except: import exception exception.Abort("InventoryWindow.LoadWindow.BindObject") ## Item wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot)) wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot)) wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) for tmpSlot in [wndEquip, wndCostume]: tmpSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot)) tmpSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot)) tmpSlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot)) tmpSlot.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot)) tmpSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) tmpSlot.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)) wndEquipNinja.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot)) wndEquipNinja.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot)) wndEquipNinja.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndEquipNinja.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndEquipNinja.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) wndEquipNinja.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) ## PickMoneyDialog dlgPickMoney = uiPickMoney.PickMoneyDialog() dlgPickMoney.LoadDialog() dlgPickMoney.Hide() ## RefineDialog self.refineDialog = uiRefine.RefineDialog() self.refineDialog.Hide() ## AttachMetinDialog if app.WJ_ENABLE_TRADABLE_ICON: self.attachMetinDialog = uiAttachMetin.AttachMetinDialog(self) self.BindWindow(self.attachMetinDialog) else: self.attachMetinDialog = uiAttachMetin.AttachMetinDialog() self.attachMetinDialog.Hide() ## MoneySlot #self.wndMoneySlot.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog)) for i in xrange(player.INVENTORY_PAGE_COUNT): self.inventoryTab[i].SetEvent(lambda arg=i: self.SetInventoryPage(arg)) self.inventoryTab[0].Down() self.inventoryCategoryObjects = [self.GetChild("equipment_window"), self.GetChild("costume_window")] index = 0 for button in self.equipmentTab: button.SetEvent(lambda arg=index: self.SetEquipmentPage(arg)) index += 1 self.wndItem = wndItem self.wndEquip = wndEquip self.wndCostume = wndCostume self.wndEquipNinja = wndEquipNinja self.dlgPickMoney = dlgPickMoney # MallButton # if self.mallButton: # self.mallButton.SetEvent(ui.__mem_func__(self.ClickMallButton)) if self.DSSButton: self.DSSButton.SetEvent(ui.__mem_func__(self.ClickDSSButton)) if self.SpecialStorageButton: self.SpecialStorageButton.SetEvent(ui.__mem_func__(self.ClickSpecialStorageButton)) # if self.OFFButton: # self.OFFButton.SetEvent(ui.__mem_func__(self.ClickOFFButton)) # if self.SWITCHButton: # self.SWITCHButton.SetEvent(ui.__mem_func__(self.SwitchBot)) # if self.INFOCHESTButton: # self.INFOCHESTButton.SetEvent(ui.__mem_func__(self.InfoChest)) # Costume Button if self.costumeButton: self.costumeButton.SetEvent(ui.__mem_func__(self.ClickCostumeButton)) if self.arrange_button: self.arrange_button.SetEvent(ui.__mem_func__(self.click_arrange)) #self.wndCostume = None if app.WJ_ENABLE_PICKUP_ITEM_EFFECT: self.listHighlightedSlot = [] ##### ## Refresh if app.ENABLE_SASH_SYSTEM: self.listAttachedSashs = [] if app.ENABLE_CHANGELOOK_SYSTEM: self.listAttachedCl = [] self.SetInventoryPage(0) self.SetEquipmentPage(self.equipmentPageIndex) self.RefreshItemSlot() self.RefreshStatus() def Destroy(self): self.ClearDictionary() self.dlgPickMoney.Destroy() self.dlgPickMoney = 0 self.refineDialog.Destroy() self.refineDialog = 0 self.attachMetinDialog.Destroy() self.attachMetinDialog = 0 self.tooltipItem = None self.wndItem = 0 self.wndEquip = 0 self.wndCostume = 0 self.wndEquipNinja = 0 self.dlgPickMoney = 0 #self.wndMoney = 0 #self.wndMoneySlot = 0 self.questionDialog = None self.arrange_button = None # self.mallButton = None self.DSSButton = None # self.OFFButton = None # self.SWITCHButton = None # self.INFOCHESTButton = None self.interface = None if app.WJ_ENABLE_TRADABLE_ICON: self.bindWnds = [] if self.wndCostume: self.wndCostume.Destroy() self.wndCostume = 0 if self.wndBelt: self.wndBelt.Destroy() self.wndBelt = None if app.ENABLE_BIOLOG_SYSTEM: if self.wndCollect: self.wndCollect.Destroy() self.wndCollect = None if self.uiSearchShop: self.uiSearchShop.Destroy() self.uiSearchShop = None self.inventoryTab = [] self.equipmentTab = [] def Hide(self): if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS(): self.OnCloseQuestionDialog() return if None != self.tooltipItem: self.tooltipItem.HideToolTip() if self.wndCostume: self.wndCostume.Close() if app.ENABLE_BIOLOG_SYSTEM: if self.wndCollect: self.isOpenedCollectWindowWhenClosingInventory = self.wndCollect.IsOpeningInventory() print "Is opening Biolog Inventory", self.isOpenedCollectWindowWhenClosingInventory self.wndCollect.Close() if self.wndBelt: self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory() # 인벤토리 창이 닫힐 때 벨트 인벤토리도 열려 있었는가? print "Is Opening Belt Inven?? ", self.isOpenedBeltWindowWhenClosingInventory self.wndBelt.Close() if self.dlgPickMoney: self.dlgPickMoney.Close() self.OnCloseQuestionDialog() wndMgr.Hide(self.hWnd) def Close(self): self.Hide() if app.WJ_ENABLE_PICKUP_ITEM_EFFECT: def HighlightSlot(self, slot): if not slot in self.listHighlightedSlot: self.listHighlightedSlot.append(slot) def SetInventoryPage(self, page): self.inventoryPageIndex = page for i in xrange(player.INVENTORY_PAGE_COUNT): if i!=page: self.inventoryTab[i].SetUp() self.RefreshBagSlotWindow() def SetEquipmentPage(self, page): self.equipmentPageIndex = page for button_key in xrange(len(self.equipmentTab)): tmpButton = self.equipmentTab[button_key] tmpButton.SetUp() if button_key != page else tmpButton.Down() for key in xrange(len(self.inventoryCategoryObjects)): tmpObject = self.inventoryCategoryObjects[key] tmpObject.Hide() if key != page else tmpObject.Show() self.RefreshEquipSlotWindow() self.RefreshCostumeSlotWindow() # def ClickMallButton(self): # print "click_mall_button" # net.SendChatPacket("/click_mall") # DSSButton # def ClickOFFButton(self): # print "click_off_button" # import uiNewShop # net.SendChatPacket("/open_shop") def ClickDSSButton(self): self.interface.ToggleDragonSoulWindow() def ClickSpecialStorageButton(self): self.interface.ToggleSpecialStorageWindow() # def SwitchBot(self): # self.interface.ToggleSpecialStorageWindow() # def InfoChest(self): # self.meniuinventar = uiInventoryMenue.InventoryMenueDialog() # self.meniuinventar.Show() def click_arrange(self): self.__ClickStartButton() def __ClickStartButton(self): startQuestionDialog = uiCommon.QuestionDialog2() startQuestionDialog.SetText1("Acesta optiune ajuta la stacarea obiectelor din inventar.") startQuestionDialog.SetText2("Doresti sa continui aceasta actiune ?") startQuestionDialog.SetAcceptEvent(ui.__mem_func__(self.__StartAccept)) startQuestionDialog.SetCancelEvent(ui.__mem_func__(self.__StartCancel)) startQuestionDialog.Open() self.startQuestionDialog = startQuestionDialog def __StartAccept(self): net.SendChatPacket("/click_sort_items") self.__StartCancel() def __StartCancel(self): self.startQuestionDialog.Close() def ClickCostumeButton(self): print "Click Costume Button" if self.wndCostume: if self.wndCostume.IsShow(): self.wndCostume.Hide() else: self.wndCostume.Show() else: self.wndCostume = CostumeWindow(self) self.wndCostume.Show() def OpenPickMoneyDialog(self): if mouseModule.mouseController.isAttached(): attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() if player.SLOT_TYPE_SAFEBOX == mouseModule.mouseController.GetAttachedType(): if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex(): net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount()) snd.PlaySound("sound/ui/money.wav") mouseModule.mouseController.DeattachObject() else: curMoney = player.GetElk() if curMoney <= 0: return self.dlgPickMoney.SetTitleName(localeInfo.PICK_MONEY_TITLE) self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney)) self.dlgPickMoney.Open(curMoney) self.dlgPickMoney.SetMax(7) # 인벤토리 990000 제한 버그 수정 def OnPickMoney(self, money): mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money) def OnPickItem(self, count): itemSlotIndex = self.dlgPickMoney.itemGlobalSlotIndex selectedItemVNum = player.GetItemIndex(itemSlotIndex) mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, count) def __InventoryLocalSlotPosToGlobalSlotPos(self, local): if player.IsEquipmentSlot(local) or player.IsCostumeSlot(local) or (app.ENABLE_NEW_EQUIPMENT_SYSTEM and player.IsBeltInventorySlot(local)): return local return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local def GetInventoryPageIndex(self): return self.inventoryPageIndex if app.WJ_ENABLE_TRADABLE_ICON: def RefreshMarkSlots(self, localIndex=None): if not self.interface: return onTopWnd = self.interface.GetOnTopWindow() if localIndex: slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(localIndex) if onTopWnd == player.ON_TOP_WND_NONE: self.wndItem.SetUsableSlotOnTopWnd(localIndex) elif onTopWnd == player.ON_TOP_WND_SHOP: if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_SELL): self.wndItem.SetUnusableSlotOnTopWnd(localIndex) else: self.wndItem.SetUsableSlotOnTopWnd(localIndex) elif onTopWnd == player.ON_TOP_WND_EXCHANGE: if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_GIVE): self.wndItem.SetUnusableSlotOnTopWnd(localIndex) else: self.wndItem.SetUsableSlotOnTopWnd(localIndex) elif onTopWnd == player.ON_TOP_WND_PRIVATE_SHOP: if player.IsAntiFlagBySlot(slotNumber, item.ITEM_ANTIFLAG_MYSHOP): self.wndItem.SetUnusableSlotOnTopWnd(localIndex) else: self.wndItem.SetUsableSlotOnTopWnd(localIndex) elif onTopWnd == player.ON_TOP_WND_SAFEBOX: if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_SAFEBOX): self.wndItem.SetUnusableSlotOnTopWnd(localIndex) else: self.wndItem.SetUsableSlotOnTopWnd(localIndex) return for i in xrange(player.INVENTORY_PAGE_SIZE): slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i) if onTopWnd == player.ON_TOP_WND_NONE: self.wndItem.SetUsableSlotOnTopWnd(i) elif onTopWnd == player.ON_TOP_WND_SHOP: if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_SELL): self.wndItem.SetUnusableSlotOnTopWnd(i) else: self.wndItem.SetUsableSlotOnTopWnd(i) elif onTopWnd == player.ON_TOP_WND_EXCHANGE: if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_GIVE): self.wndItem.SetUnusableSlotOnTopWnd(i) else: self.wndItem.SetUsableSlotOnTopWnd(i) elif onTopWnd == player.ON_TOP_WND_PRIVATE_SHOP: if player.IsAntiFlagBySlot(slotNumber, item.ITEM_ANTIFLAG_MYSHOP): self.wndItem.SetUnusableSlotOnTopWnd(i) else: self.wndItem.SetUsableSlotOnTopWnd(i) elif onTopWnd == player.ON_TOP_WND_SAFEBOX: if player.IsAntiFlagBySlot(slotNumber, item.ANTIFLAG_SAFEBOX): self.wndItem.SetUnusableSlotOnTopWnd(i) else: self.wndItem.SetUsableSlotOnTopWnd(i) def RefreshBagSlotWindow(self): is_activated = 0 getItemVNum=player.GetItemIndex getItemCount=player.GetItemCount setItemVNum=self.wndItem.SetItemSlot for i in xrange(player.INVENTORY_PAGE_SIZE*2): slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i) itemCount = getItemCount(slotNumber) if 0 == itemCount: self.wndItem.ClearSlot(i) continue elif 1 == itemCount: itemCount = 0 itemVnum = getItemVNum(slotNumber) setItemVNum(i, itemVnum, itemCount) if app.ENABLE_CHANGELOOK_SYSTEM: itemTransmutedVnum = player.GetItemTransmutation(slotNumber) if itemTransmutedVnum: self.wndItem.DisableCoverButton(i) else: self.wndItem.EnableCoverButton(i) if constInfo.IS_AUTO_POTION(itemVnum): metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)] if slotNumber >= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex: slotNumber -= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex isActivated = 0 != metinSocket[0] if isActivated: self.wndItem.ActivateSlotOld(i) potionType = 0; if constInfo.IS_AUTO_POTION_HP(itemVnum): potionType = player.AUTO_POTION_TYPE_HP elif constInfo.IS_AUTO_POTION_SP(itemVnum): potionType = player.AUTO_POTION_TYPE_SP usedAmount = int(metinSocket[1]) totalAmount = int(metinSocket[2]) player.SetAutoPotionInfo(potionType, isActivated, (totalAmount - usedAmount), totalAmount, self.__InventoryLocalSlotPosToGlobalSlotPos(i)) else: self.wndItem.DeactivateSlotOld(i) elif app.WJ_ENABLE_PICKUP_ITEM_EFFECT: if slotNumber in self.listHighlightedSlot: self.wndItem.ActivateSlot(i) if app.WJ_ENABLE_TRADABLE_ICON: self.RefreshMarkSlots(i) if app.ENABLE_SASH_SYSTEM or app.ENABLE_CHANGELOOK_SYSTEM: if not constInfo.IS_AUTO_POTION(itemVnum): self.wndItem.DeactivateSlotOld(i) if app.ENABLE_SASH_SYSTEM: slotNumberChecked = 0 if not constInfo.IS_AUTO_POTION(itemVnum): if app.WJ_ENABLE_PICKUP_ITEM_EFFECT: if not slotNumber in self.listHighlightedSlot: self.wndItem.DeactivateSlot(i) else: self.wndItem.DeactivateSlot(i) for j in xrange(sash.WINDOW_MAX_MATERIALS): (isHere, iCell) = sash.GetAttachedItem(j) if isHere: if iCell == slotNumber: self.wndItem.ActivateSlot(i, (238.00 / 255.0), (11.00 / 255.0), (11.00 / 255.0), 1.0) if not slotNumber in self.listAttachedSashs: self.listAttachedSashs.append(slotNumber) slotNumberChecked = 1 else: if slotNumber in self.listAttachedSashs and not slotNumberChecked: self.wndItem.DeactivateSlot(i) self.listAttachedSashs.remove(slotNumber) if app.ENABLE_CHANGELOOK_SYSTEM: slotClNumberChecked = 0 for q in xrange(changelook.WINDOW_MAX_MATERIALS): (isHere, iCell) = changelook.GetAttachedItem(q) if isHere: if iCell == slotNumber: self.wndItem.ActivateSlot(i, (238.00 / 255.0), (11.00 / 255.0), (11.00 / 255.0), 1.0) if not slotNumber in self.listAttachedCl: self.listAttachedCl.append(slotNumber) slotClNumberChecked = 1 else: if slotNumber in self.listAttachedCl and not slotClNumberChecked: self.wndItem.DeactivateSlot(i) self.listAttachedCl.remove(slotNumber) self.wndItem.RefreshSlot() if self.wndBelt: self.wndBelt.RefreshSlot() if app.WJ_ENABLE_TRADABLE_ICON: map(lambda wnd:wnd.RefreshLockedSlot(), self.bindWnds) def RefreshEquipSlotWindow(self): getItemVNum=player.GetItemIndex getItemCount=player.GetItemCount job = player.GetJob() for i in xrange(player.EQUIPMENT_PAGE_COUNT): slotNumber = player.EQUIPMENT_SLOT_START + i itemCount = getItemCount(slotNumber) if itemCount <= 1: itemCount = 0 if job == 1: self.wndEquipNinja.SetItemSlot(slotNumber, getItemVNum(slotNumber), itemCount) else: self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), itemCount) if app.ENABLE_CHANGELOOK_SYSTEM: itemTransmutedVnum = player.GetItemTransmutation(slotNumber) if job == 1: if itemTransmutedVnum: self.wndEquipNinja.DisableCoverButton(slotNumber) else: self.wndEquipNinja.EnableCoverButton(slotNumber) else: if itemTransmutedVnum: self.wndEquip.DisableCoverButton(slotNumber) else: self.wndEquip.EnableCoverButton(slotNumber) if app.ENABLE_NEW_EQUIPMENT_SYSTEM: for i in xrange(player.NEW_EQUIPMENT_SLOT_COUNT): slotNumber = player.NEW_EQUIPMENT_SLOT_START + i itemCount = getItemCount(slotNumber) if itemCount <= 1: itemCount = 0 if job == 1: self.wndEquipNinja.SetItemSlot(slotNumber, getItemVNum(slotNumber), itemCount) else: self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), itemCount) if app.ENABLE_CHANGELOOK_SYSTEM: itemTransmutedVnum = player.GetItemTransmutation(slotNumber) if job == 1: if itemTransmutedVnum: self.wndEquipNinja.DisableCoverButton(slotNumber) else: self.wndEquipNinja.EnableCoverButton(slotNumber) else: if itemTransmutedVnum: self.wndEquip.DisableCoverButton(slotNumber) else: self.wndEquip.EnableCoverButton(slotNumber) if job == 1: self.wndEquipNinja.RefreshSlot() else: self.wndEquip.RefreshSlot() if self.wndCostume: self.wndCostume.RefreshSlot() def RefreshCostumeSlotWindow(self): getItemVNum = player.GetItemIndex v_slot = [item.COSTUME_SLOT_WEAPON, item.COSTUME_SLOT_START,\ item.COSTUME_SLOT_START+1, item.COSTUME_SLOT_START+3,\ item.COSTUME_SLOT_START+2]#, item.EQUIPMENT_PET] for slotNumber in v_slot: self.wndCostume.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0) if app.ENABLE_CHANGELOOK_SYSTEM: itemTransmutedVnum = player.GetItemTransmutation(slotNumber) if not itemTransmutedVnum: self.wndEquip.EnableCoverButton(slotNumber) else: self.wndEquip.DisableCoverButton(slotNumber) self.wndCostume.RefreshSlot() def RefreshItemSlot(self): self.RefreshBagSlotWindow() self.RefreshEquipSlotWindow() self.RefreshCostumeSlotWindow() def RefreshStatus(self): money = player.GetElk() def ActivateDragonSoul(self, deck): if deck == 0: if self.DSSButton: self.DSSButton.SetUpVisual("d:/ymir work/ui/dragonsoul/deck1_1.tga") self.DSSButton.SetOverVisual("d:/ymir work/ui/dragonsoul/deck1_2.tga") self.DSSButton.SetDownVisual("d:/ymir work/ui/dragonsoul/deck1_3.tga") else: if self.DSSButton: self.DSSButton.SetUpVisual("d:/ymir work/ui/dragonsoul/deck2_1.tga") self.DSSButton.SetOverVisual("d:/ymir work/ui/dragonsoul/deck2_2.tga") self.DSSButton.SetDownVisual("d:/ymir work/ui/dragonsoul/deck2_3.tga") def DeactivateDragonSoul(self): if self.DSSButton: self.DSSButton.SetUpVisual("d:/ymir work/ui/dragonsoul/ds_01.tga") self.DSSButton.SetOverVisual("d:/ymir work/ui/dragonsoul/ds_02.tga") self.DSSButton.SetDownVisual("d:/ymir work/ui/dragonsoul/ds_03.tga") def SetItemToolTip(self, tooltipItem): self.tooltipItem = tooltipItem def SellItem(self): if self.sellingSlotitemIndex == player.GetItemIndex(self.sellingSlotNumber): if self.sellingSlotitemCount == player.GetItemCount(self.sellingSlotNumber): ## 용혼석도 팔리게 하는 기능 추가하면서 인자 type 추가 net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count, player.INVENTORY) snd.PlaySound("sound/ui/money.wav") self.OnCloseQuestionDialog() def OnDetachMetinFromItem(self): if None == self.questionDialog: return #net.SendItemUseToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos) self.__SendUseItemToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos) self.OnCloseQuestionDialog() def OnCloseQuestionDialog(self): if not self.questionDialog: return self.questionDialog.Close() self.questionDialog = None constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0) ## Slot Event def SelectEmptySlot(self, selectedSlotPos): if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1: return selectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(selectedSlotPos) if mouseModule.mouseController.isAttached(): attachedSlotType = mouseModule.mouseController.GetAttachedType() attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemCount = mouseModule.mouseController.GetAttachedItemCount() attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex() if player.SLOT_TYPE_INVENTORY == attachedSlotType: itemCount = player.GetItemCount(attachedSlotPos) attachedCount = mouseModule.mouseController.GetAttachedItemCount() self.__SendMoveItemPacket(attachedSlotPos, selectedSlotPos, attachedCount) if item.IsRefineScroll(attachedItemIndex): self.wndItem.SetUseMode(False) elif player.SLOT_TYPE_PRIVATE_SHOP == attachedSlotType: mouseModule.mouseController.RunCallBack("INVENTORY") elif player.SLOT_TYPE_SHOP == attachedSlotType: net.SendShopBuyPacket(attachedSlotPos) elif player.SLOT_TYPE_SAFEBOX == attachedSlotType: if player.ITEM_MONEY == attachedItemIndex: net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount()) snd.PlaySound("sound/ui/money.wav") else: net.SendSafeboxCheckoutPacket(attachedSlotPos, selectedSlotPos) elif player.SLOT_TYPE_MALL == attachedSlotType: net.SendMallCheckoutPacket(attachedSlotPos, selectedSlotPos) mouseModule.mouseController.DeattachObject() def SelectItemSlot(self, itemSlotIndex): if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1: return itemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(itemSlotIndex) if mouseModule.mouseController.isAttached(): attachedSlotType = mouseModule.mouseController.GetAttachedType() attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex() if app.ENABLE_SPECIAL_STORAGE: if player.SLOT_TYPE_INVENTORY == attachedSlotType or player.SLOT_TYPE_STONE_INVENTORY == attachedSlotType: self.__DropSrcItemToDestItemInInventory(attachedItemVID, attachedSlotPos, itemSlotIndex) else: if player.SLOT_TYPE_INVENTORY == attachedSlotType: self.__DropSrcItemToDestItemInInventory(attachedItemVID, attachedSlotPos, itemSlotIndex) mouseModule.mouseController.DeattachObject() else: curCursorNum = app.GetCursor() if app.SELL == curCursorNum: self.__SellItem(itemSlotIndex) elif app.BUY == curCursorNum: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SHOP_BUY_INFO) elif app.IsPressed(app.DIK_LALT): link = player.GetItemLink(itemSlotIndex) ime.PasteString(link) elif app.IsPressed(app.DIK_LSHIFT): itemCount = player.GetItemCount(itemSlotIndex) if itemCount > 1: self.dlgPickMoney.SetTitleName(localeInfo.PICK_ITEM_TITLE) self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickItem)) self.dlgPickMoney.Open(itemCount) self.dlgPickMoney.itemGlobalSlotIndex = itemSlotIndex #else: #selectedItemVNum = player.GetItemIndex(itemSlotIndex) #mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum) elif app.IsPressed(app.DIK_LCONTROL): itemIndex = player.GetItemIndex(itemSlotIndex) if True == item.CanAddToQuickSlotItem(itemIndex): player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_INVENTORY, itemSlotIndex) else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.QUICKSLOT_REGISTER_DISABLE_ITEM) else: selectedItemVNum = player.GetItemIndex(itemSlotIndex) itemCount = player.GetItemCount(itemSlotIndex) mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount) if self.__IsUsableItemToItem(selectedItemVNum, itemSlotIndex): self.wndItem.SetUseMode(True) else: self.wndItem.SetUseMode(False) snd.PlaySound("sound/ui/pick.wav") def UseTransportBox(self): self.__SendUseItemToItemPacket(self.questionDialog.src, self.questionDialog.dst) self.OnCloseQuestionDialog() def UseProtein(self): self.__SendUseItemToItemPacket(self.questionDialog.src, self.questionDialog.dst) self.OnCloseQuestionDialog() def __DropSrcItemToDestItemInInventory(self, srcItemVID, srcItemSlotPos, dstItemSlotPos): if app.ENABLE_SPECIAL_STORAGE: if srcItemSlotPos == dstItemSlotPos and not item.IsMetin(srcItemVID): return else: if srcItemSlotPos == dstItemSlotPos: return if srcItemVID >= 55701 and srcItemVID <= 55708 and player.GetItemIndex(dstItemSlotPos) == 55002: self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText("Vrei sa adaugi insotitorul in cutia de transport?") self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.UseTransportBox)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.src = srcItemSlotPos self.questionDialog.dst = dstItemSlotPos if srcItemVID == 55001 and player.GetItemIndex(dstItemSlotPos) >= 55701 and player.GetItemIndex(dstItemSlotPos) <= 55708: self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText("Vrei sa hranesti insotitorul?") self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.UseProtein)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.src = srcItemSlotPos self.questionDialog.dst = dstItemSlotPos if srcItemVID == 71051 and player.GetItemIndex(dstItemSlotPos) >= 70500 and player.GetItemIndex(dstItemSlotPos) <= 70509: self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText("Vrei sa adaugi sufletele pe acest item?") self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.UseProtein)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.src = srcItemSlotPos self.questionDialog.dst = dstItemSlotPos if srcItemVID == 71051 and player.GetItemIndex(dstItemSlotPos) >= 9600 and player.GetItemIndex(dstItemSlotPos) <= 10770: self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText("Vrei sa adaugi sufletele pe acest item?") self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.UseProtein)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.src = srcItemSlotPos self.questionDialog.dst = dstItemSlotPos if srcItemVID == 71052 and player.GetItemIndex(dstItemSlotPos) >= 70500 and player.GetItemIndex(dstItemSlotPos) <= 70509: self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText("Vrei sa adaugi sufletele pe acest item?") self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.UseProtein)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.src = srcItemSlotPos self.questionDialog.dst = dstItemSlotPos if srcItemVID == 71052 and player.GetItemIndex(dstItemSlotPos) >= 9600 and player.GetItemIndex(dstItemSlotPos) <= 10770: self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText("Vrei sa adaugi sufletele pe acest item?") self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.UseProtein)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.src = srcItemSlotPos self.questionDialog.dst = dstItemSlotPos if srcItemVID >= 91021 and srcItemVID <= 91029 and player.GetItemIndex(dstItemSlotPos) >= 91010 and player.GetItemIndex(dstItemSlotPos) <= 91020: self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText("Sigur vrei sa folosesti acest item?") self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.UseProtein)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.src = srcItemSlotPos self.questionDialog.dst = dstItemSlotPos # cyh itemseal 2013 11 08 if app.ENABLE_SEALBIND_SYSTEM and item.IsSealScroll(srcItemVID): self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) elif item.IsRefineScroll(srcItemVID): self.RefineItem(srcItemSlotPos, dstItemSlotPos) self.wndItem.SetUseMode(False) elif item.IsMetin(srcItemVID): self.AttachMetinToItem(srcItemSlotPos, dstItemSlotPos) elif item.IsDetachScroll(srcItemVID): self.DetachMetinFromItem(srcItemSlotPos, dstItemSlotPos) elif item.IsKey(srcItemVID): self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) elif (player.GetItemFlags(srcItemSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE: self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) elif item.GetUseType(srcItemVID) in self.USE_TYPE_TUPLE: self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) else: #snd.PlaySound("sound/ui/drop.wav") ## 이동시킨 곳이 장착 슬롯일 경우 아이템을 사용해서 장착 시킨다 - [levites] if player.IsEquipmentSlot(dstItemSlotPos): ## 들고 있는 아이템이 장비일때만 if item.IsEquipmentVID(srcItemVID): self.__UseItem(srcItemSlotPos) else: self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0) #net.SendItemMovePacket(srcItemSlotPos, dstItemSlotPos, 0) def __SellItem(self, itemSlotPos): if not player.IsEquipmentSlot(itemSlotPos): self.sellingSlotNumber = itemSlotPos itemIndex = player.GetItemIndex(itemSlotPos) itemCount = player.GetItemCount(itemSlotPos) self.sellingSlotitemIndex = itemIndex self.sellingSlotitemCount = itemCount item.SelectItem(itemIndex) ## 안티 플레그 검사 빠져서 추가 ## 20140220 if item.IsAntiFlag(item.ANTIFLAG_SELL): popup = uiCommon.PopupDialog() popup.SetText(localeInfo.SHOP_CANNOT_SELL_ITEM) popup.SetAcceptEvent(self.__OnClosePopupDialog) popup.Open() self.popup = popup return itemPrice = item.GetISellItemPrice() if item.Is1GoldItem(): itemPrice = itemCount / itemPrice / 5 else: itemPrice = itemPrice * itemCount / 5 item.GetItemName(itemIndex) itemName = item.GetItemName() self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(localeInfo.DO_YOU_SELL_ITEM(itemName, itemCount, itemPrice)) self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.SellItem)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.count = itemCount constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1) def __OnClosePopupDialog(self): self.pop = None def RefineItem(self, scrollSlotPos, targetSlotPos): scrollIndex = player.GetItemIndex(scrollSlotPos) targetIndex = player.GetItemIndex(targetSlotPos) if player.REFINE_OK != player.CanRefine(scrollIndex, targetSlotPos): return if app.ENABLE_REFINE_RENEWAL: constInfo.AUTO_REFINE_TYPE = 1 constInfo.AUTO_REFINE_DATA["ITEM"][0] = scrollSlotPos constInfo.AUTO_REFINE_DATA["ITEM"][1] = targetSlotPos ########################################################### self.__SendUseItemToItemPacket(scrollSlotPos, targetSlotPos) #net.SendItemUseToItemPacket(scrollSlotPos, targetSlotPos) return ########################################################### ########################################################### #net.SendRequestRefineInfoPacket(targetSlotPos) #return ########################################################### result = player.CanRefine(scrollIndex, targetSlotPos) if player.REFINE_ALREADY_MAX_SOCKET_COUNT == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_MORE_SOCKET) elif player.REFINE_NEED_MORE_GOOD_SCROLL == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NEED_BETTER_SCROLL) elif player.REFINE_CANT_MAKE_SOCKET_ITEM == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_SOCKET_DISABLE_ITEM) elif player.REFINE_NOT_NEXT_GRADE_ITEM == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_UPGRADE_DISABLE_ITEM) elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM) if player.REFINE_OK != result: return self.refineDialog.Open(scrollSlotPos, targetSlotPos) def DetachMetinFromItem(self, scrollSlotPos, targetSlotPos): scrollIndex = player.GetItemIndex(scrollSlotPos) targetIndex = player.GetItemIndex(targetSlotPos) if app.ENABLE_SASH_SYSTEM and app.ENABLE_CHANGELOOK_SYSTEM: if not player.CanDetach(scrollIndex, targetSlotPos): item.SelectItem(scrollIndex) if item.GetValue(0) == sash.CLEAN_ATTR_VALUE0: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SASH_FAILURE_CLEAN) elif item.GetValue(0) == changelook.CLEAN_ATTR_VALUE0: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CHANGE_LOOK_FAILURE_CLEAN) else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM) return elif app.ENABLE_SASH_SYSTEM: if not player.CanDetach(scrollIndex, targetSlotPos): item.SelectItem(scrollIndex) if item.GetValue(0) == sash.CLEAN_ATTR_VALUE0: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SASH_FAILURE_CLEAN) else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM) return elif app.ENABLE_CHANGELOOK_SYSTEM: if not player.CanDetach(scrollIndex, targetSlotPos): item.SelectItem(scrollIndex) if item.GetValue(0) == changelook.CLEAN_ATTR_VALUE0: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CHANGE_LOOK_FAILURE_CLEAN) else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM) return else: if not player.CanDetach(scrollIndex, targetSlotPos): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM) return self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(localeInfo.REFINE_DO_YOU_SEPARATE_METIN) if app.ENABLE_SASH_SYSTEM: item.SelectItem(targetIndex) if item.GetItemType() == item.ITEM_TYPE_COSTUME and item.GetItemSubType() == item.COSTUME_TYPE_SASH: item.SelectItem(scrollIndex) if item.GetValue(0) == sash.CLEAN_ATTR_VALUE0: self.questionDialog.SetText(localeInfo.SASH_DO_YOU_CLEAN) if app.ENABLE_CHANGELOOK_SYSTEM: item.SelectItem(targetIndex) if item.GetItemType() == item.ITEM_TYPE_WEAPON or item.GetItemType() == item.ITEM_TYPE_ARMOR or item.GetItemType() == item.ITEM_TYPE_COSTUME: item.SelectItem(scrollIndex) if item.GetValue(0) == changelook.CLEAN_ATTR_VALUE0: self.questionDialog.SetText(localeInfo.CHANGE_LOOK_DO_YOU_CLEAN) 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): if app.ENABLE_SPECIAL_STORAGE: metinIndex = player.GetItemIndex(player.STONE_INVENTORY, metinSlotPos) else: metinIndex = player.GetItemIndex(metinSlotPos) targetIndex = player.GetItemIndex(targetSlotPos) item.SelectItem(metinIndex) itemName = item.GetItemName() result = player.CanAttachMetin(metinIndex, targetSlotPos) if player.ATTACH_METIN_NOT_MATCHABLE_ITEM == result: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_CAN_NOT_ATTACH(itemName)) if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_SOCKET(itemName)) elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_GOLD_SOCKET(itemName)) elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM) if player.ATTACH_METIN_OK != result: return self.attachMetinDialog.Open(metinSlotPos, targetSlotPos) def OverOutItem(self): self.wndItem.SetUsableItem(False) if None != self.tooltipItem: self.tooltipItem.HideToolTip() def OverInItem(self, overSlotPos): if app.WJ_ENABLE_PICKUP_ITEM_EFFECT: stat = 0 slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos) itemVnum = player.GetItemIndex(slotNumber) if constInfo.IS_AUTO_POTION(itemVnum): metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)] if slotNumber >= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex: slotNumber -= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex isActivated = 0 != metinSocket[0] if isActivated: stat = 1 if not stat: if slotNumber in self.listHighlightedSlot: self.wndItem.DeactivateSlot(overSlotPos) try: if app.ENABLE_SASH_SYSTEM: if not slotNumber in self.listAttachedSashs: self.listHighlightedSlot.remove(slotNumber) else: self.listHighlightedSlot.remove(slotNumber) except: pass overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos) self.wndItem.SetUsableItem(False) if mouseModule.mouseController.isAttached(): attachedItemType = mouseModule.mouseController.GetAttachedType() if app.ENABLE_SPECIAL_STORAGE: if player.SLOT_TYPE_INVENTORY == attachedItemType or player.SLOT_TYPE_STONE_INVENTORY == attachedItemType: attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex() if self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPos): self.wndItem.SetUsableItem(True) self.wndItem.SetUseMode(True) self.ShowToolTip(overSlotPos) return else: 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 srcItemVNum >= 55701 and srcItemVNum <= 55708: return True if srcItemVNum >= 91010 and srcItemVNum <= 91015: return True if srcItemVNum == 55001: return True if srcItemVNum == 71051: return True if srcItemVNum == 71052: return True if srcItemVNum >= 91021 and srcItemVNum <= 91029: return True 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 srcItemVNum >= 55701 and srcItemVNum <= 55708 and player.GetItemIndex(dstSlotPos) == 55002: return True if srcItemVNum == 55001 and player.GetItemIndex(dstSlotPos) >= 55701 and player.GetItemIndex(dstSlotPos) <= 55708: return True if srcItemVNum == 71051 and player.GetItemIndex(dstSlotPos) >= 70500 and player.GetItemIndex(dstSlotPos) <= 70509: return True if srcItemVNum == 71051 and player.GetItemIndex(dstSlotPos) >= 9600 and player.GetItemIndex(dstSlotPos) <= 10770: return True if srcItemVNum == 71052 and player.GetItemIndex(dstSlotPos) >= 70500 and player.GetItemIndex(dstSlotPos) <= 70509: return True if srcItemVNum == 71052 and player.GetItemIndex(dstSlotPos) >= 9600 and player.GetItemIndex(dstSlotPos) <= 10770: return True if srcItemVNum >= 91021 and srcItemVNum <= 91029 and player.GetItemIndex(dstSlotPos) >= 91010 and player.GetItemIndex(dstSlotPos) <= 91020: return True if app.ENABLE_SPECIAL_STORAGE: if srcSlotPos == dstSlotPos and not item.IsMetin(srcItemVNum): return False else: if srcSlotPos == dstSlotPos: return False if item.IsRefineScroll(srcItemVNum): if player.REFINE_OK == player.CanRefine(srcItemVNum, dstSlotPos): return True elif item.IsMetin(srcItemVNum): if player.ATTACH_METIN_OK == player.CanAttachMetin(srcItemVNum, dstSlotPos): return True elif item.IsDetachScroll(srcItemVNum): if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos): return True elif item.IsKey(srcItemVNum): if player.CanUnlock(srcItemVNum, dstSlotPos): return True elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE: return True else: useType=item.GetUseType(srcItemVNum) if "USE_CLEAN_SOCKET" == useType: if self.__CanCleanBrokenMetinStone(dstSlotPos): return True elif "USE_CHANGE_ATTRIBUTE" == useType: if self.__CanChangeItemAttrList(dstSlotPos): return True elif "USE_ADD_ATTRIBUTE" == useType: if self.__CanAddItemAttr(dstSlotPos): return True elif "USE_ADD_ATTRIBUTE2" == useType: if self.__CanAddItemAttr(dstSlotPos): return True elif "USE_ADD_ACCESSORY_SOCKET" == useType: if self.__CanAddAccessorySocket(dstSlotPos): return True elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType: if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum): return True elif "USE_PUT_INTO_BELT_SOCKET" == useType: dstItemVNum = player.GetItemIndex(dstSlotPos) print "USE_PUT_INTO_BELT_SOCKET", srcItemVNum, dstItemVNum elif useType == "USE_COSTUME_ENCHANT" or useType == "USE_COSTUME_TRANSFORM": if not app.ENABLE_COSTUME_ATTR_SYSTEM: return FALSE dstItemVNum = player.GetItemIndex(dstSlotPos) item.SelectItem(dstItemVNum) if item.GetItemType() == item.ITEM_TYPE_COSTUME: return TRUE item.SelectItem(dstItemVNum) if item.ITEM_TYPE_BELT == item.GetItemType(): return True return False def __CanCleanBrokenMetinStone(self, dstSlotPos): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return False item.SelectItem(dstItemVNum) if item.ITEM_TYPE_WEAPON != item.GetItemType(): return False for i in xrange(player.METIN_SOCKET_MAX_NUM): if player.GetItemMetinSocket(dstSlotPos, i) == constInfo.ERROR_METIN_STONE: return True return False def __CanChangeItemAttrList(self, dstSlotPos): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return False item.SelectItem(dstItemVNum) if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR, item.ITEM_TYPE_RING): return False for i in xrange(player.METIN_SOCKET_MAX_NUM): if player.GetItemAttribute(dstSlotPos, i) != 0: return True return False def __CanAddSoulToItem(self, dstSlotPos): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return False item.SelectItem(dstItemVNum) if item.GetItemType() == item.ITEM_TYPE_ARMOR: 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, item.ITEM_TYPE_RING): 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() if app.WJ_ENABLE_TRADABLE_ICON: map(lambda wnd:wnd.RefreshLockedSlot(), self.bindWnds) self.RefreshMarkSlots() def OnPressEscapeKey(self): self.Close() return True def UseItemSlot(self, slotIndex): curCursorNum = app.GetCursor() if app.SELL == curCursorNum: return if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS(): return slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex) if app.ENABLE_DRAGON_SOUL_SYSTEM: if self.wndDragonSoulRefine.IsShow(): self.wndDragonSoulRefine.AutoSetItem((player.INVENTORY, slotIndex), 1) return if app.ENABLE_SASH_SYSTEM: if self.isShowSashWindow(): sash.Add(player.INVENTORY, slotIndex, 255) return if app.ENABLE_CHANGELOOK_SYSTEM: if self.isShowChangeLookWindow(): changelook.Add(player.INVENTORY, slotIndex, 255) return self.__UseItem(slotIndex) mouseModule.mouseController.DeattachObject() self.OverOutItem() def IsTreasureBox(self, slotIndex): itemVnum = player.GetItemIndex(slotIndex) item.SelectItem(itemVnum) if item.GetItemType() == item.ITEM_TYPE_GIFTBOX: return True treasures = { 0: 50011, 1: 50024, 2: 50025, 3: 50031, 4: 50032, } if itemVnum in treasures.values(): return True return False def SendMultipleUseItemPacket(self, slotIndex): for i in xrange(player.GetItemCount(slotIndex)): self.__SendUseItemPacket(slotIndex) def __UseItem(self, slotIndex): ItemVNum = player.GetItemIndex(slotIndex) item.SelectItem(ItemVNum) if ItemVNum == 39116: self.searchbtn2() if ItemVNum == 39117: self.searchbtn2() #Open all stack of treasure box with CTRL + RIGHT CLICK - hunterukh 9.march.2017 if app.IsPressed(app.DIK_LCONTROL) and self.IsTreasureBox(slotIndex): self.SendMultipleUseItemPacket(slotIndex) return if item.IsFlag(item.ITEM_FLAG_CONFIRM_WHEN_USE): net.SendItemUsePacket(slotIndex) elif player.GetItemTypeBySlot(slotIndex) == item.ITEM_TYPE_GIFTBOX: if app.ENABLE_SHOW_CHEST_DROP: if self.interface: if self.interface.dlgChestDrop: if not self.interface.dlgChestDrop.IsShow(): self.interface.dlgChestDrop.Open(slotIndex) net.SendChestDropInfo(slotIndex) elif player.GetItemTypeBySlot(slotIndex) == item.ITEM_TYPE_GACHA: if app.ENABLE_SHOW_CHEST_DROP: if self.interface: if self.interface.dlgChestDrop: if not self.interface.dlgChestDrop.IsShow(): self.interface.dlgChestDrop.Open(slotIndex) net.SendChestDropInfo(slotIndex) else: # self.__SendUseItemPacket(slotIndex) net.SendItemUsePacket(slotIndex) def searchbtn2(self): self.testasd = uiSearchShop.ShopSearch() self.testasd.Show() def __UseItemQuestionDialog_OnCancel(self): self.OnCloseQuestionDialog() def __UseItemQuestionDialog_OnAccept(self): self.__SendUseItemPacket(self.questionDialog.slotIndex) self.OnCloseQuestionDialog() def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos): # 개인상점 열고 있는 동안 아이템 사용 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos) def __SendUseItemPacket(self, slotPos): # 개인상점 열고 있는 동안 아이템 사용 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemUsePacket(slotPos) def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount): # 개인상점 열고 있는 동안 아이템 사용 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount) def SetDragonSoulRefineWindow(self, wndDragonSoulRefine): if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoulRefine = wndDragonSoulRefine if app.ENABLE_SASH_SYSTEM: def SetSashWindow(self, wndSashCombine, wndSashAbsorption): self.wndSashCombine = wndSashCombine self.wndSashAbsorption = wndSashAbsorption def isShowSashWindow(self): if self.wndSashCombine: if self.wndSashCombine.IsShow(): return 1 if self.wndSashAbsorption: if self.wndSashAbsorption.IsShow(): return 1 return 0 if app.ENABLE_CHANGELOOK_SYSTEM: def SetChangeLookWindow(self, wndChangeLook): self.wndChangeLook = wndChangeLook def isShowChangeLookWindow(self): if self.wndChangeLook: if self.wndChangeLook.IsShow(): return 1 return 0 def OnMoveWindow(self, x, y): # print "Inventory Global Pos : ", self.GetGlobalPosition() if self.wndBelt: # print "Belt Global Pos : ", self.wndBelt.GetGlobalPosition() self.wndBelt.AdjustPositionAndSize() if app.ENABLE_BIOLOG_SYSTEM: if self.wndCollect: self.wndCollect.AdjustPositionAndSize()
-
can you upload them on another site?
-
-
Can you reupload it?
On 4/3/2015 at 1:37 PM, Dimmi said: -
what do you mean?
-
-
-
6 minutes ago, joshi said:
https://www.youtube.com/watch?v=AoTrXiKWJEA
It's cool for me.
But language is poland but have video.
Good luck.
When i put the ip, user and password and then "Wygeneruj" gives me this error "Index was outside the bounds of the array."
-
Hi, someone have a script to convert SQL item_proto and mob_proto to .TXT data?
-
-
-
RO:
Am incercat sa folosesc Dump_proto ca sa fac mob_proto client si am eroarea asta la dump_proto :
Si in syserr
0804 23:20:05409 :: CPythonNonPlayer::LoadNonPlayerData: invalid size 360315 check data format. 0804 23:20:05409 :: LoadLocaleData - LoadMobProto(locale/es/mob_proto) Error
EN:
I've tryed to use Dump_proto to make mob_proto for client but at the end of log, when use dump_proto, this error appear :
and in syserr, in client
0804 23:20:05409 :: CPythonNonPlayer::LoadNonPlayerData: invalid size 360315 check data format. 0804 23:20:05409 :: LoadLocaleData - LoadMobProto(locale/es/mob_proto) Error
-
I do not have that on my server..
-
When i click on an alchemy stone, they don't put on the slot, but instead on i click on a belt, it appear in the belt slot and the first slot in the alchemy window.
Can you help me? You have a gif above. Thank you for your help.
Spoiler -
How can i move the sash slot from costume window to inventory window, just in line with the arrow slot:? https://metin2.download/picture/tQ9BT2T7JbwGCuaJFWI3b842k9khxw8W/.png
I have add this to inventorywindow.py:
in the start of the fille: COSTUME_START_INDEX = item.COSTUME_SLOT_START
an to the slot function, this: {"index":COSTUME_START_INDEX+2, "x":75, "y":20, "width":32, "height":32}, -
Thank you a lot. You're the best!
-
Hi there, sorry for bothering you, but i'm searching for Gaya Sistem from Metin2 Official.
I just want to move the yang string from inventory to the new box from the ringh corner. Thanks a lot to all who can help! -
Have anyone GAYA SYSTEM filles?
-
Thanks. I solved this error.. If anyone want the solution, just pm me
Problem on inventory close
in Community Support - Questions & Answers
Posted
up!