Yardım K Envanteri Slot Marking Uyarlaması

  • Konuyu açan Konuyu açan kostak98
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 9
  • Gösterim Gösterim 139
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

kostak98

Üye
Üye
Mesaj
54
Beğeni
5
Puan
446
Ticaret Puanı
0
Herkese iyi forumlar, zevkine files geliştiriyorum eklediğim sistemlerin hatalarını eksiklerini düzelterek gidiyorum.
Bu kısa bilgiden sonra wndExtendedInventory olarak geçen k envanterini slot marking sistemine uyarlamada sorun yaşıyorum atladığım birşey olmalı sistemdeki wndinventory kodlarına göre uyarlıyorum ama sıfır tepki alıyorum sökebileceğim files yada bilgi sahibi olan yardımcı olmak isteyen varmı? şimdiden teşekkür ederim herşey için.



0224_014836.webp
 

Dosya Eklentileri

  • 1740350958730.webp
    1740350958730.webp
    223,4 KB · Gösterim: 18
k envanteriniz slot olarak mı kategori olarakmı ayrılıyor.
ticaret ve npc lerde çalışıyor k evnanterindeki slotmarking
 
k envanteriniz slot olarak mı kategori olarakmı ayrılıyor.
ticaret ve npc lerde çalışıyor k evnanterindeki slotmarking
 
owsnap k envanteri kullanmanızı öneririm bu slotlamalarda envantere çekmelerde sıkıntı yaşadığını görmüştüm direk olduğu gibi eklenenlerde özellikle bazen itemlerin type değerleri kayıyor aktif oyunda
 
Bu örnekleri inceleyebilirsin.

uishop.py:
Genişlet Daralt Kopyala
    if app.WJ_ENABLE_TRADABLE_ICON:
        def CantSellInvenItem(self, slotIndex):
            itemIndex = player.GetItemIndex(slotIndex)

            if itemIndex:
                return player.IsAntiFlagBySlot(slotIndex, item.ANTIFLAG_SELL)
            return False

        def BindInterface(self, interface):
            from _weakref import proxy
            self.interface = proxy(interface)

        def OnTop(self):
            if not self.interface:
                return

            if shop.IsPrivateShop():
                self.interface.SetOnTopWindow(player.ON_TOP_WND_NONE)
                self.interface.RefreshMarkInventoryBag()
            else:
                self.interface.SetOnTopWindow(player.ON_TOP_WND_SHOP)
                self.interface.RefreshMarkInventoryBag()

uiexchange.py:
Genişlet Daralt Kopyala
if app.WJ_ENABLE_TRADABLE_ICON:
    INVENTORY_PAGE_SIZE = player.INVENTORY_PAGE_SIZE
    if app.ENABLE_SPECIAL_INVENTORY_SYSTEM:
        SPECIAL_INVENTORY_PAGE_SIZE = player.SPECIAL_INVENTORY_PAGE_SIZE

class ExchangeDialog(ui.ScriptWindow):
    def __init__(self):
        ui.ScriptWindow.__init__(self)
        self.TitleName = 0
        self.tooltipItem = 0
        self.xStart = 0
        self.yStart = 0
        self.interface = None
        if app.WJ_ENABLE_TRADABLE_ICON:
            self.inven = None
            if app.ENABLE_SPECIAL_INVENTORY_SYSTEM:
                self.invenSpecial = None

    def __del__(self):
        ui.ScriptWindow.__del__(self)
        if app.WJ_ENABLE_TRADABLE_ICON:
            self.inven = None
            if app.ENABLE_SPECIAL_INVENTORY_SYSTEM:
                self.invenSpecial = None

    def LoadDialog(self):
        PythonScriptLoader = ui.PythonScriptLoader()
        PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog.py")

        ## Owner
        self.OwnerSlot = self.GetChild("Owner_Slot")
        self.OwnerSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectOwnerEmptySlot))
        self.OwnerSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectOwnerItemSlot))
        self.OwnerSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInOwnerItem))
        self.OwnerSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
        self.OwnerMoney = self.GetChild("Owner_Money_Value")
        self.OwnerAcceptLight = self.GetChild("Owner_Accept_Light")
        self.OwnerAcceptLight.Disable()
        self.OwnerMoneyButton = self.GetChild("Owner_Money")
        if not app.ENABLE_CHEQUE_SYSTEM:
            self.OwnerMoneyButton.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))

        ## Target
        self.TargetSlot = self.GetChild("Target_Slot")
        self.TargetSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInTargetItem))
        self.TargetSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
        self.TargetMoney = self.GetChild("Target_Money_Value")
        self.TargetAcceptLight = self.GetChild("Target_Accept_Light")
        self.TargetAcceptLight.Disable()

        ## PickMoneyDialog
        dlgPickMoney = uiPickMoney.PickMoneyDialog()
        dlgPickMoney.LoadDialog()
        dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
        dlgPickMoney.SetTitleName(localeInfo.EXCHANGE_MONEY)
        dlgPickMoney.SetMax(7)
        dlgPickMoney.Hide()
        self.dlgPickMoney = dlgPickMoney

        ## Button
        self.AcceptButton = self.GetChild("Owner_Accept_Button")
        self.AcceptButton.SetToggleDownEvent(ui.__mem_func__(self.AcceptExchange))

        self.TitleName = self.GetChild("TitleName")
        self.GetChild("TitleBar").SetCloseEvent(net.SendExchangeExitPacket)

    def Destroy(self):
        #print "---------------------------------------------------------------------------- DESTROY EXCHANGE"
        self.ClearDictionary()
        self.dlgPickMoney.Destroy()
        self.dlgPickMoney = 0
        self.OwnerSlot = 0
        self.OwnerMoney = 0
        self.OwnerAcceptLight = 0
        self.OwnerMoneyButton = 0
        self.TargetSlot = 0
        self.TargetMoney = 0
        self.TargetAcceptLight = 0
        self.TitleName = 0
        self.AcceptButton = 0
        self.tooltipItem = 0


    def OpenDialog(self):
        if localeInfo.IsEUROPE() or localeInfo.IsYMIR():
            self.TitleName.SetText(localeInfo.EXCHANGE_TITLE % (exchange.GetNameFromTarget(), exchange.GetLevelFromTarget()))
        else:
            self.TitleName.SetText(localeInfo.EXCHANGE_TITLE % (exchange.GetNameFromTarget()))

        self.AcceptButton.Enable()
        self.AcceptButton.SetUp()
        self.SetTop()
        self.Show()

        (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()

        if app.WJ_ENABLE_TRADABLE_ICON:
            self.ItemListIdx = []

    def CloseDialog(self):
        wndMgr.OnceIgnoreMouseLeftButtonUpEvent()

        if 0 != self.tooltipItem:
            self.tooltipItem.HideToolTip()

        self.dlgPickMoney.Close()
        self.Hide()
        if app.WJ_ENABLE_TRADABLE_ICON:
            if self.interface:
                self.interface.SetOnTopWindow(player.ON_TOP_WND_NONE)
                self.interface.RefreshMarkInventoryBag()

            # self.ItemListIdx = None
            self.ItemListIdx = []

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

    def OpenPickMoneyDialog(self):
        if exchange.GetElkFromSelf() > 0:
            chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY)
            return

        self.dlgPickMoney.Open(player.GetElk())

    def OnPickMoney(self, money):
        net.SendExchangeElkAddPacket(money)

    def AcceptExchange(self):
        net.SendExchangeAcceptPacket()
        self.AcceptButton.Disable()

    def SelectOwnerEmptySlot(self, SlotIndex):
        if False == mouseModule.mouseController.isAttached():
            return

        if mouseModule.mouseController.IsAttachedMoney():
            net.SendExchangeElkAddPacket(mouseModule.mouseController.GetAttachedMoneyAmount())
        else:
            attachedSlotType = mouseModule.mouseController.GetAttachedType()

            if (player.SLOT_TYPE_INVENTORY == attachedSlotType
                or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType
                or player.SLOT_TYPE_SKILL_BOOK_INVENTORY == attachedSlotType
                or player.SLOT_TYPE_UPGRADE_ITEMS_INVENTORY == attachedSlotType
                or player.SLOT_TYPE_STONE_INVENTORY == attachedSlotType
                or player.SLOT_TYPE_GIFT_BOX_INVENTORY == attachedSlotType):

                attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
                SrcSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
                DstSlotNumber = SlotIndex

                itemID = player.GetItemIndex(attachedInvenType, SrcSlotNumber)
                item.SelectItem(itemID)

                #if player.IsAntiFlagBySlot(SrcSlotNumber, item.ANTIFLAG_GIVE):
                if item.IsAntiFlag(item.ANTIFLAG_GIVE):
                    chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE)
                    mouseModule.mouseController.DeattachObject()
                    return

                net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber)
                if app.WJ_ENABLE_TRADABLE_ICON:
                    self.ItemListIdx.append(SrcSlotNumber)

        mouseModule.mouseController.DeattachObject()

    def SelectOwnerItemSlot(self, SlotIndex):
        if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
            money = mouseModule.mouseController.GetAttachedItemCount()
            net.SendExchangeElkAddPacket(money)

    def RefreshOwnerSlot(self):
        for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
            itemIndex = exchange.GetItemVnumFromSelf(i)
            itemCount = exchange.GetItemCountFromSelf(i)
            if 1 == itemCount:
                itemCount = 0
            self.OwnerSlot.SetItemSlot(i, itemIndex, itemCount)
        self.OwnerSlot.RefreshSlot()

    def RefreshTargetSlot(self):
        for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
            itemIndex = exchange.GetItemVnumFromTarget(i)
            itemCount = exchange.GetItemCountFromTarget(i)
            if 1 == itemCount:
                itemCount = 0
            self.TargetSlot.SetItemSlot(i, itemIndex, itemCount)

        self.TargetSlot.RefreshSlot()

    def Refresh(self):
        self.RefreshOwnerSlot()
        self.RefreshTargetSlot()
        self.OwnerMoney.SetText(str(exchange.GetElkFromSelf()))
        self.TargetMoney.SetText(str(exchange.GetElkFromTarget()))

        if True == exchange.GetAcceptFromSelf():
            self.OwnerAcceptLight.Down()
        else:
            self.AcceptButton.Enable()
            self.AcceptButton.SetUp()
            self.OwnerAcceptLight.SetUp()

        if True == exchange.GetAcceptFromTarget():
            self.TargetAcceptLight.Down()
        else:
            self.TargetAcceptLight.SetUp()

    def OverInOwnerItem(self, slotIndex):
        if 0 != self.tooltipItem:
            self.tooltipItem.SetExchangeOwnerItem(slotIndex)

    def OverInTargetItem(self, slotIndex):
        if 0 != self.tooltipItem:
            self.tooltipItem.SetExchangeTargetItem(slotIndex)

    def OverOutItem(self):
        if 0 != self.tooltipItem:
            self.tooltipItem.HideToolTip()

    if not app.WJ_ENABLE_TRADABLE_ICON:
        def OnTop(self):
            self.tooltipItem.SetTop()

    def OnUpdate(self):
        USE_EXCHANGE_LIMIT_RANGE = 1000

        (x, y, z) = player.GetMainCharacterPosition()
        if abs(x - self.xStart) > USE_EXCHANGE_LIMIT_RANGE or abs(y - self.yStart) > USE_EXCHANGE_LIMIT_RANGE:
            (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
            net.SendExchangeExitPacket()

        if app.WJ_ENABLE_TRADABLE_ICON:
            if app.ENABLE_SPECIAL_INVENTORY_SYSTEM:
                if not self.inven or not self.invenSpecial:
                    return
            else:
                if not self.inven:
                    return

            page = self.inven.GetInventoryPageIndex() # range 0 ~ 1
            if app.ENABLE_SPECIAL_INVENTORY_SYSTEM:
                special_page = self.invenSpecial.GetInventoryPageIndex()

            for i in self.ItemListIdx:
                if (page * INVENTORY_PAGE_SIZE) <= i < ((page + 1) * INVENTORY_PAGE_SIZE): # range 0 ~ 44, 45 ~ 89
                    lock_idx = i - (page * INVENTORY_PAGE_SIZE)
                    self.inven.wndItem.SetCantMouseEventSlot(lock_idx)

                if app.ENABLE_SPECIAL_INVENTORY_SYSTEM:
                    if self.invenSpecial.GetInventoryType() == 0:
                        if (item.SKILL_BOOK_INVENTORY_SLOT_START + (special_page * SPECIAL_INVENTORY_PAGE_SIZE)) <= i < (item.SKILL_BOOK_INVENTORY_SLOT_START + (((special_page + 1) * SPECIAL_INVENTORY_PAGE_SIZE))):
                            lock_idx = i - (item.SKILL_BOOK_INVENTORY_SLOT_START + (special_page * SPECIAL_INVENTORY_PAGE_SIZE))
                            self.invenSpecial.wndItem.SetCantMouseEventSlot(lock_idx)

                    if self.invenSpecial.GetInventoryType() == 1:
                        if (item.UPGRADE_ITEMS_INVENTORY_SLOT_START + (special_page * SPECIAL_INVENTORY_PAGE_SIZE)) <= i < (item.UPGRADE_ITEMS_INVENTORY_SLOT_START + (((special_page + 1) * SPECIAL_INVENTORY_PAGE_SIZE))):
                            lock_idx = i - (item.UPGRADE_ITEMS_INVENTORY_SLOT_START + (special_page * SPECIAL_INVENTORY_PAGE_SIZE))
                            self.invenSpecial.wndItem.SetCantMouseEventSlot(lock_idx)

                    if self.invenSpecial.GetInventoryType() == 2:
                        if (item.STONE_INVENTORY_SLOT_START + (special_page * SPECIAL_INVENTORY_PAGE_SIZE)) <= i < (item.STONE_INVENTORY_SLOT_START + (((special_page + 1) * SPECIAL_INVENTORY_PAGE_SIZE))):
                            lock_idx = i - (item.STONE_INVENTORY_SLOT_START + (special_page * SPECIAL_INVENTORY_PAGE_SIZE))
                            self.invenSpecial.wndItem.SetCantMouseEventSlot(lock_idx)

                    if self.invenSpecial.GetInventoryType() == 3:
                        if (item.GIFT_BOX_INVENTORY_SLOT_START + (special_page * SPECIAL_INVENTORY_PAGE_SIZE)) <= i < (item.GIFT_BOX_INVENTORY_SLOT_START + (((special_page + 1) * SPECIAL_INVENTORY_PAGE_SIZE))):
                            lock_idx = i - (item.GIFT_BOX_INVENTORY_SLOT_START + (special_page * SPECIAL_INVENTORY_PAGE_SIZE))
                            self.invenSpecial.wndItem.SetCantMouseEventSlot(lock_idx)

    if app.WJ_ENABLE_TRADABLE_ICON:
        def CantTradableItem(self, slotIndex):
            itemIndex = player.GetItemIndex(slotIndex)

            if itemIndex:
                return player.IsAntiFlagBySlot(slotIndex, item.ANTIFLAG_GIVE)

            return False

        def BindInterface(self, interface):
            from _weakref import proxy
            self.interface = proxy(interface)

        def OnTop(self):
            self.tooltipItem.SetTop()
            if not self.interface:
                return

            self.interface.SetOnTopWindow(player.ON_TOP_WND_EXCHANGE)
            self.interface.RefreshMarkInventoryBag()

        def SetInven(self, inven):
            self.inven = inven

        if app.ENABLE_SPECIAL_INVENTORY_SYSTEM:
            def SetSpecialInven(self, invenSpecial):
                self.invenSpecial = invenSpecial

        def AddExchangeItemSlotIndex(self, idx):
            self.ItemListIdx.append(idx)
 
Teşekkür ederim pek çözülecek gibi değil ama bakalım sağol yinede beni aşıyo sanırım biraz uyarlaması ne yaptıysam hiç tepki alamıyorum daha önce bazı şeyleri uyarladım yapabilmiştim ama bunu yapamadım
 
Geri
Üst