Yardım item ayırma sistemi sanni k envantere uyarlama

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

legendxxx

Üye
Üye
Mesaj
99
Çözümler
4
Beğeni
19
Puan
434
Ticaret Puanı
0
Merhaba arkadaşlar item ayırma sistemi ekledim sanni k envanterde ayırmıyor itemleri normal envantere göndermeye çalışıyor yardımcı olabilecek varmı

Kod:
Genişlet Daralt Kopyala
int CHARACTER::GetEmptySpecialInventoryFromIndex(WORD index, BYTE itemSize) const //SPLIT ITEMS
{
    for (WORD i = SPECIAL_INVENTORY_SLOT_START; i < SPECIAL_INVENTORY_SLOT_END; ++i)
        if (IsEmptySpecialItemGrid(TItemPos (INVENTORY, i), itemSize))
            return i;
    return -1;
}
 
Çözüm
sanni ek envantere uyumlu item ayırma

char.h:
Genişlet Daralt Kopyala
        int                GetEmptyInventoryFromIndex(WORD index, BYTE itemSize) const; //SPLIT ITEMS
        int                GetEmptyBookInventoryFromIndex(WORD index, BYTE itemSize) const; //SPLIT ITEMS
        int                GetEmptyUpgradeInventoryFromIndex(WORD index, BYTE itemSize) const; //SPLIT ITEMS

cmd_general.cpp:
Genişlet Daralt Kopyala
ACMD(do_split_items) //SPLIT ITEMS
{
    if (!ch)
        return;
  
    const char *line;
    char arg1[256], arg2[256], arg3[256];
    line = two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
    one_argument(line, arg3, sizeof(arg3));
  
    if (!*arg1 || !*arg2 || !*arg3)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Wrong command use.");
        return;
    }...
Kodlarda hata olabilir diye dusunuyorum hic ekleme yapmadım fakat paylasılan kodlar söküldügü icin eksiklik olabiliyor bu nedenle bende orjinal dosya olması lazımdı onu deneme yaparak birde deneyin hocam 1 saate kadar konuya dahil ederim.
 
Kodlarda hata olabilir diye dusunuyorum hic ekleme yapmadım fakat paylasılan kodlar söküldügü icin eksiklik olabiliyor bu nedenle bende orjinal dosya olması lazımdı onu deneme yaparak birde deneyin hocam 1 saate kadar konuya dahil ederim.
bekliyorum hocam sagolasın
 
sanni ek envantere uyumlu item ayırma

char.h:
Genişlet Daralt Kopyala
        int                GetEmptyInventoryFromIndex(WORD index, BYTE itemSize) const; //SPLIT ITEMS
        int                GetEmptyBookInventoryFromIndex(WORD index, BYTE itemSize) const; //SPLIT ITEMS
        int                GetEmptyUpgradeInventoryFromIndex(WORD index, BYTE itemSize) const; //SPLIT ITEMS

cmd_general.cpp:
Genişlet Daralt Kopyala
ACMD(do_split_items) //SPLIT ITEMS
{
    if (!ch)
        return;
  
    const char *line;
    char arg1[256], arg2[256], arg3[256];
    line = two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
    one_argument(line, arg3, sizeof(arg3));
  
    if (!*arg1 || !*arg2 || !*arg3)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Wrong command use.");
        return;
    }
  
    if (!ch->CanWarp())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Close all windows and wait a few seconds, before using this.");
        return;
    }
  
    WORD count = 0; //zamien se to na bajta jak nie masz zwiekszonych slotów.
    WORD cell = 0;
    WORD destCell = 0;
  
    str_to_number(cell, arg1);
    str_to_number(count, arg2);
    str_to_number(destCell, arg3);
  
    LPITEM item = ch->GetInventoryItem(cell);
    if (item != NULL)
    {
        WORD itemCount = item->GetCount(); //to tez se kurwa zamien na byte'a jak nie masz slotów zwiekszonych.
        while (itemCount > 0)
        {
            if (count > itemCount)
                count = itemCount;
          

            int iEmptyPosition;

            if (destCell >= SPECIAL_INVENTORY_SKILLBOOK_START && destCell < SPECIAL_INVENTORY_SKILLBOOK_END)
            {
                iEmptyPosition = ch->GetEmptyBookInventoryFromIndex(destCell, item->GetSize());               
            }
            else if (destCell >= SPECIAL_INVENTORY_MATERIAL_START && destCell < SPECIAL_INVENTORY_MATERIAL_END)
            {
                iEmptyPosition = ch->GetEmptyUpgradeInventoryFromIndex(destCell, item->GetSize());               
            }         
            else {
                iEmptyPosition = ch->GetEmptyInventoryFromIndex(destCell, item->GetSize());
            }
          
            //int iEmptyPosition = ch->GetEmptyInventoryFromIndex(destCell, item->GetSize());

          
            if (iEmptyPosition == -1)
                break;
          
            itemCount -= count;
            ch->MoveItem(TItemPos(INVENTORY, cell), TItemPos(INVENTORY, iEmptyPosition), count);
        }
    }
}

char_item.cpp:
Genişlet Daralt Kopyala
int CHARACTER::GetEmptyInventoryFromIndex(WORD index, BYTE itemSize) const //SPLIT ITEMS
{
    if (index > INVENTORY_MAX_NUM)
        return -1;
      
    for (WORD i = index; i < INVENTORY_MAX_NUM; ++i)
        if (IsEmptyItemGrid(TItemPos (INVENTORY, i), itemSize))
            return i;
    return -1;
}

int CHARACTER::GetEmptyBookInventoryFromIndex(WORD index, BYTE itemSize) const //SPLIT ITEMS
{
    for (WORD i = SPECIAL_INVENTORY_SKILLBOOK_START; i < SPECIAL_INVENTORY_SKILLBOOK_END; ++i)
        if (IsEmptySpecialItemGrid(TItemPos (INVENTORY, i), itemSize))
            return i;     
    return -1;
}

int CHARACTER::GetEmptyUpgradeInventoryFromIndex(WORD index, BYTE itemSize) const //SPLIT ITEMS
{
    for (WORD i = SPECIAL_INVENTORY_MATERIAL_START; i < SPECIAL_INVENTORY_MATERIAL_END; ++i)
        if (IsEmptySpecialItemGrid(TItemPos (INVENTORY, i), itemSize))
            return i;     
    return -1;
}
 
Çözüm
Geri
Üst