Envanter Efsun Kontrolü

  • Konuyu açan Konuyu açan Sparkz
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 2
  • Gösterim Gösterim 62

Sparkz

Üye
Üye
Mesaj
47
Beğeni
11
Puan
71
Ticaret Puanı
0
Merhaba arkadaşlar bugün yaşadığım bir problemi çözdüm ve muhtemelen bu problemi başkalarıda yaşayacak. Problem envanter efsun nesnesi arttırma kağıdı ve kutsama küresi için uygunluk kontrolü yani sürüklendiğinde yeşil veya kırmızı göstermesi. Problem 71084 , 71085 ve 70024 kodlu itemlerde yaşanıyor kaynakta problem yok ama görsel olarak biraz takıntılı olan kişiler için bu kodlar problemi ortadan kaldırır.

Not: Tam uygunluk kontrolü vardır. Örneğin eşyada hiç efsun yoksa efsun nesnesi sürüklendiğinde kırmızı gösterir veya kutsama küresi eşyaya sürüklendiğinde sadece 4 efsun ekliyse yeşil olur aksi halde hep kırmızı.

Yapılacak değişiklikler : def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos): ve def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos): komple bu kodlar değişecek ve yeni fonksiyonlar eklenecek;

uiinventory.py:
Genişlet Daralt Kopyala
    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
        elif constInfo.ENABLE_SELF_STACK_SCROLLS and srcItemVNum in (71052,71051,71084,71085,70024):
            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 constInfo.ENABLE_SELF_STACK_SCROLLS and player.GetItemIndex(dstSlotPos) == srcItemVNum:
                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

        # 71084, 71085, 70024 özel kuralları
        elif srcItemVNum in (71084, 71085, 70024):
            dstVnum = player.GetItemIndex(dstSlotPos)
            if not self.__IsWeaponOrArmor(dstVnum):
                return False

            attr_count = self.__GetAttrCount(dstSlotPos)

            if srcItemVNum == 71085:
                return attr_count < 5
            if srcItemVNum == 71084:
                return attr_count > 0
            if srcItemVNum == 70024:
                return attr_count == 4

        elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
            return True

        elif constInfo.ENABLE_SELF_STACK_SCROLLS and srcItemVNum in (71052,71051,71084,71085,70024):
            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)
                item.SelectItem(dstItemVNum)
                if item.ITEM_TYPE_BELT == item.GetItemType():
                    return True
            elif app.ENABLE_USE_COSTUME_ATTR and "USE_CHANGE_COSTUME_ATTR" == useType:
                if self.__CanChangeCostumeAttrList(dstSlotPos):
                    return True
            elif app.ENABLE_USE_COSTUME_ATTR and "USE_RESET_COSTUME_ATTR" == useType:
                if self.__CanResetCostumeAttr(dstSlotPos):
                    return True

        return False

    def __DropSrcItemToDestItemInInventory(self, srcItemVID, srcItemSlotPos, dstItemSlotPos):
        if srcItemSlotPos == dstItemSlotPos:
            return

        if app.ENABLE_SOULBIND_SYSTEM and item.IsSealScroll(srcItemVID):
            self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)

        elif item.IsRefineScroll(srcItemVID):
            if constInfo.ENABLE_SELF_STACK_SCROLLS and player.GetItemIndex(srcItemSlotPos) == player.GetItemIndex(dstItemSlotPos):
                self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos,0)
            else:
                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)

        elif constInfo.ENABLE_SELF_STACK_SCROLLS and srcItemVID in (71052,71051,71084,71085,70024):
            self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)

        else:
            if player.IsEquipmentSlot(dstItemSlotPos):
                if item.IsEquipmentVID(srcItemVID):
                    self.__UseItem(srcItemSlotPos)
            else:
                self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0)

    def __get_attr_limit(self):
        try:
            return player.ATTRIBUTE_SLOT_MAX_NUM
        except:
            return 7

    def __GetAttrCount(self, dstSlotPos):
        limit = self.__get_attr_limit()
        cnt = 0
        for i in xrange(limit):
            if player.GetItemAttribute(dstSlotPos, i)[0] != 0:
                cnt += 1
        return cnt

    def __IsWeaponOrArmor(self, vnum):
        if vnum == 0:
            return False
        item.SelectItem(vnum)
        t = item.GetItemType()
        return t == item.ITEM_TYPE_WEAPON or t == item.ITEM_TYPE_ARMOR
 
Son düzenleme:
Geri
Üst