Çözüldü toplu sandık açmayı engelleme

  • Konuyu açan Konuyu açan TheAdmin33
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 4
  • Gösterim Gösterim 152
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

TheAdmin33

Geliştirme günlüğü olmayan adam
Geliştirici
Yardımsever Üye
Usta Üye
Editör
Mesaj
1.023
Çözümler
58
Beğeni
2.571
Puan
1.849
Ticaret Puanı
0
vatansever2 den sandık içgörü sistemini söktüm gayet güzel çalışıyor ama bu sisteme 2 tane kontrol eklemek istiyorum.

1) Envanter doluysa sandık açmama engeli.

2) Toplu sandık açıldığında envanter dolduysa sandık açmayı durdurma engeli. (örn: 200 sandık var hepsini açmak istediniz ama envanterde 1 tane boş yer var diyelim o sandıktan çıkan 1 eşya envantere gelecek diğerleri komple yere düşecek. Ben bunu engelleme istiyorum)

Bunu nasıl yapabilirim bir fikri olan varmı?

galiba sistemin root dosyasındaki şu kısma kontrol eklemem gerekiyor;

uiChestDrop.py:
Genişlet Daralt Kopyala
    def OnClickOpenButton(self, arg):
        itemCount = 1
        if arg == 2:
            itemCount = 10
        elif arg == 3:
            itemCount = 50
        elif arg == 4:
            itemCount = 100

        (window_type, cell) = self.invItemPos

        itemCount = min(itemCount, player.GetItemCount(window_type, cell))

        for i in xrange(itemCount):
            net.SendItemUsePacket(window_type, cell)

Envanter dolu mu, boş mu, ne kadar boş, ne kadar yer var ? bunun konrolünü nasıl yaparım?
 
Çözüm
Ben slot kontrolü yaptırıyordum

Service.h:
Genişlet Daralt Kopyala
//Ekle
#define CHEST_BLOCK

char_item.cpp:
Genişlet Daralt Kopyala
//Arat
    if (item->GetVnum() == 50200 | item->GetVnum() == 71049)
    {
        if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°Å·¡Ã¢,â°í µîÀ» ¿¬ »óÅ¿¡¼´Â º¸µû¸®,ºñ´Üº¸µû¸®¸¦ »ç¿ëÇÒ¼ö ¾ø½À´Ï´Ù."));
            return false;
        }

    }

//Altına veya üstüne ekle
#ifdef CHEST_BLOCK
    BYTE itemType = item->GetType();
    int iEmptyCell;
    if (item->GetType() == ITEM_GIFTBOX)
    {
        if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("sandik_engel"));
            return false;
        }...
Ben slot kontrolü yaptırıyordum

Service.h:
Genişlet Daralt Kopyala
//Ekle
#define CHEST_BLOCK

char_item.cpp:
Genişlet Daralt Kopyala
//Arat
    if (item->GetVnum() == 50200 | item->GetVnum() == 71049)
    {
        if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°Å·¡Ã¢,â°í µîÀ» ¿¬ »óÅ¿¡¼´Â º¸µû¸®,ºñ´Üº¸µû¸®¸¦ »ç¿ëÇÒ¼ö ¾ø½À´Ï´Ù."));
            return false;
        }

    }

//Altına veya üstüne ekle
#ifdef CHEST_BLOCK
    BYTE itemType = item->GetType();
    int iEmptyCell;
    if (item->GetType() == ITEM_GIFTBOX)
    {
        if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("sandik_engel"));
            return false;
        }
    }
#endif

locale_string.txt:
Genişlet Daralt Kopyala
--Ekle
"sandik_engel";
"Envanterin doluyken sandik acamazsin!";

sandik.png
 
Çözüm
Ben slot kontrolü yaptırıyordum

Service.h:
Genişlet Daralt Kopyala
//Ekle
#define CHEST_BLOCK

char_item.cpp:
Genişlet Daralt Kopyala
//Arat
    if (item->GetVnum() == 50200 | item->GetVnum() == 71049)
    {
        if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°Å·¡Ã¢,â°í µîÀ» ¿¬ »óÅ¿¡¼´Â º¸µû¸®,ºñ´Üº¸µû¸®¸¦ »ç¿ëÇÒ¼ö ¾ø½À´Ï´Ù."));
            return false;
        }

    }

//Altına veya üstüne ekle
#ifdef CHEST_BLOCK
    BYTE itemType = item->GetType();
    int iEmptyCell;
    if (item->GetType() == ITEM_GIFTBOX)
    {
        if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("sandik_engel"));
            return false;
        }
    }
#endif

locale_string.txt:
Genişlet Daralt Kopyala
--Ekle
"sandik_engel";
"Envanterin doluyken sandik acamazsin!";

sandik.png
bende tam söylicektim ki sen resim ekledin :D Bununda o yönü kötü sistemi durdurmuuyor çalıştırmaya devam ediyor ve bir sürü hata mesajı göndriyor. root a kontrol eklemek istiyorum çünkü packet gönderimini engellemek istiyorum. Ama bu kontrolde lazım bunuda ekliyecem teşekkürler
 
Sadece python taraflı istiyorsan aşağıdaki kodu deneyebilirsin.

Python:
Genişlet Daralt Kopyala
    def OnClickOpenButton(self, arg):
        ## Envanter kontrol
        bos_slot = 0
        for i in xrange(player.INVENTORY_SLOT_COUNT):
            idx = player.GetItemIndex(i)
            if idx == 0:
                bos_slot += 1
        ##########
             
        itemCount = 1
        if arg == 2:
            itemCount = 10
        elif arg == 3:
            itemCount = 50
        elif arg == 4:
            itemCount = 100

        (window_type, cell) = self.invItemPos

        itemCount = min(itemCount, player.GetItemCount(window_type, cell))

        if itemCount > bos_slot:
            chat.AppendChat(1, "Bunun için envanterde yeterli alan mevcut degil.")
            return
        else:
            for i in range(itemCount):
                net.SendItemUsePacket(window_type, cell)
 
Sadece python taraflı istiyorsan aşağıdaki kodu deneyebilirsin.

Python:
Genişlet Daralt Kopyala
    def OnClickOpenButton(self, arg):
        ## Envanter kontrol
        bos_slot = 0
        for i in xrange(player.INVENTORY_SLOT_COUNT):
            idx = player.GetItemIndex(i)
            if idx == 0:
                bos_slot += 1
        ##########
          
        itemCount = 1
        if arg == 2:
            itemCount = 10
        elif arg == 3:
            itemCount = 50
        elif arg == 4:
            itemCount = 100

        (window_type, cell) = self.invItemPos

        itemCount = min(itemCount, player.GetItemCount(window_type, cell))

        if itemCount > bos_slot:
            chat.AppendChat(1, "Bunun için envanterde yeterli alan mevcut degil.")
            return
        else:
            for i in range(itemCount):
                net.SendItemUsePacket(window_type, cell)
ben de tam olarak bunu yapmaya çalıştım ama şöyle bir sorun çıktı ; 2 slotu olan itemleride boş slot olarak sayıyor.

şimdilik şöyle bir şey yaptım;

uiChestDrop.py:
Genişlet Daralt Kopyala
    def ChestCountCheck(self):
        ## Envanter kontrol
        bos_slot = 0

        for i in xrange(player.INVENTORY_PAGE_SIZE * player.INVENTORY_PAGE_COUNT):
            Vnum = player.GetItemIndex(i)

            if Vnum == 0:
                bos_slot += 1
            else:
                item.SelectItem(Vnum)
                sizeY = item.GetItemSize()[1]

                if sizeY == 2:
                    bos_slot -= 1
                elif sizeY == 3:
                    bos_slot -= 2

        chat.AppendChat(1, "bos slot: %s" % bos_slot)

        return bos_slot
        ## Envanter kontrol

    def OnClickOpenButton(self, arg):
        itemCount = 1

        if arg == 2:
            itemCount = 10
        elif arg == 3:
            itemCount = 50
        elif arg == 4:
            itemCount = 100

        (window_type, cell) = self.invItemPos

        bos_slot = self.ChestCountCheck()

        itemCount = min(player.GetItemCount(window_type, cell), min(itemCount, bos_slot))

        chat.AppendChat(1, "Count: %s" % itemCount)

        for i in xrange(itemCount):
            net.SendItemUsePacket(window_type, cell)

çalışıyor ama while döngüsüyle tekrar boş slot kontrolü yaptırmam gerek ama kafam allak bullak oldu onuda sonra yaparım.

k envanteri ve item limiti arttırma sistemleri eklendikten sonra bu kontrole çok da gerek kalmaz diye düşünüyorum o yüzden eklemekten vaz geçtim. @Mavi Ruh un vermiş olduğu fix yeterli olur diye düşünüyorum. o yüzden konu kapatılabilir.

oyunda itemin kaç slotluk yer kapladığını söyleyen bir fonksiyon var mı?
 
En son bir moderatör tarafından düzenlenmiş:
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst