OYUN GÜNDEMİ

Metin2 Başlangıç İtemini Sourceden verme ve Süreli İtem Sorunu Çözümü

Metin2 sunucu geliştiren birçok kişinin karşılaştığı sorunlardan biri başlangıçta verilen süreli itemlerin envantere gelir gelmez silinmesi problemidir. Bu sorun özellikle başlangıç itemlerini source üzerinden düzenleyen PvP server sahiplerinde sık görülür.

Begginer%27s_Guide_02 Metin2 Başlangıç İtemini Sourceden verme ve Süreli İtem Sorunu Çözümü

Sorunun temel nedeni, süreli itemlerde expire (süre bitişi) bilgisinin socket alanına yazılmamasıdır.

Bu nedenle item envantere girer girmez sistem tarafından süresi dolmuş kabul edilir ve otomatik olarak silinir.

 Metin2 Başlangıç İtemini Sourceden verme ve Süreli İtem Sorunu Çözümü

Bu rehberde Metin2 başlangıç itemlerinde süre hatası nasıl düzeltilir ve source üzerinden nasıl doğru şekilde uygulanır detaylı olarak anlatacağız.


Sorunun Sebebi

Metin2’de süreli itemler çalışırken sistem şu mantığı kullanır:

  • Süreli itemlerin bitiş zamanı socket alanına yazılır
  • Bu değer genellikle Unix time formatında tutulur
  • Eğer socket değeri boş veya yanlış ise item süresi bitmiş kabul edilir

Başlangıç itemleri oluşturulurken bu değer yazılmadığında şu sorun ortaya çıkar:

✔ Item envantere gelir
✔ Sistem süreyi kontrol eder
✔ Süre bulunamaz
✔ Item silinir

Bu yüzden başlangıç item sistemine duration alanı eklenmesi gerekir.

input_db.cpp:

   TPlayerItem t;
    memset(&t, 0, sizeof(TPlayerItem));

    t.window = INVENTORY;
    t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
    t.count = 1;

    struct SInitialItem
    {
        BYTE window;     // EQUIPMENT / INVENTORY
        short pos;       // WEAR_* veya inventory slot
        DWORD count;
        DWORD dwVnum;
        DWORD duration;
  
        long socket0;
        long socket1;
        long socket2;
        long socket3;
  
        BYTE attr_type0; short attr_value0;
        BYTE attr_type1; short attr_value1;
        BYTE attr_type2; short attr_value2;
        BYTE attr_type3; short attr_value3;
        BYTE attr_type4; short attr_value4;
    };

    const int MAX_INITIAL_ITEM = 17;
  
    static SInitialItem initialItems[JOB_MAX_NUM][MAX_INITIAL_ITEM] =
    {
        // WARRIOR
        {////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
            {EQUIPMENT, WEAR_BODY,   1, 9001,  0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_HEAD,   1, 12209, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_FOOTS,  1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_WEAPON, 1, 19,    0,0,0,0, 15,10,0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_NECK,   1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_EAR,    1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
            {INVENTORY, 0,           1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
            {INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
        },
        // ASSASSIN
        {////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
            {EQUIPMENT, WEAR_BODY,   1, 9002,  0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_HEAD,   1, 12349, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_FOOTS,  1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_WEAPON, 1, 1009,  0,0,0,0, 15,10,0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_NECK,   1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_EAR,    1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
            {INVENTORY, 0,           1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
            {INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
        },
        // SURA
        {////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
            {EQUIPMENT, WEAR_BODY,   1, 9003,  0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_HEAD,   1, 12489, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_FOOTS,  1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_WEAPON, 1, 19,    0,0,0,0, 15,10,0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_NECK,   1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_EAR,    1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
            {INVENTORY, 0,           1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
            {INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
        },
        // SHAMAN
        {////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
            {EQUIPMENT, WEAR_BODY,   1, 9004,  0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_HEAD,   1, 12629, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_FOOTS,  1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_WEAPON, 1, 7009,  0,0,0,0, 15,10,0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_NECK,   1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_EAR,    1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
            {INVENTORY, 0,           1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
            {INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
            {INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
            {INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
        },
    };

    unsigned job = pPacketDB->player.byJob;
    RaceToJob(job, &job);

    for (int i = 0; i < MAX_INITIAL_ITEM; ++i)
    {
        if (initialItems[job][i].dwVnum == 0)
            continue;
  
        memset(&t, 0, sizeof(TPlayerItem));
  
        t.id     = ITEM_MANAGER::instance().GetNewID();
        t.owner  = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
        t.window = initialItems[job][i].window;
        t.vnum   = initialItems[job][i].dwVnum;
        t.count  = initialItems[job][i].count;
      
        // ?? HEM EQUIPMENT HEM INVENTORY AYNI MANTIK
        t.pos = initialItems[job][i].pos;
        // SOCKET
        t.alSockets[0] = initialItems[job][i].socket0;
        t.alSockets[1] = initialItems[job][i].socket1;
        t.alSockets[2] = initialItems[job][i].socket2;
        t.alSockets[3] = initialItems[job][i].socket3;

        if (initialItems[job][i].duration > 0)
        {
            // Güvenli expire socket
            t.alSockets[0] = time(0) + initialItems[job][i].duration;
        }


        // ATTR (efsunu BOZMADIK)
        t.aAttr[0].bType = initialItems[job][i].attr_type0;
        t.aAttr[0].sValue = initialItems[job][i].attr_value0;
        t.aAttr[1].bType = initialItems[job][i].attr_type1;
        t.aAttr[1].sValue = initialItems[job][i].attr_value1;
        t.aAttr[2].bType = initialItems[job][i].attr_type2;
        t.aAttr[2].sValue = initialItems[job][i].attr_value2;
        t.aAttr[3].bType = initialItems[job][i].attr_type3;
        t.aAttr[3].sValue = initialItems[job][i].attr_value3;
        t.aAttr[4].bType = initialItems[job][i].attr_type4;
        t.aAttr[4].sValue = initialItems[job][i].attr_value4;
  
    if ((t.window == INVENTORY && t.pos >= 0 && t.pos < INVENTORY_MAX_NUM) ||
        (t.window == EQUIPMENT))
    {
        db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_SAVE, 0, sizeof(TPlayerItem));
        db_clientdesc->Packet(&t, sizeof(TPlayerItem));
    }

    }
    LogManager::instance().CharLog(pack.player.dwID, 0, 0, 0, "CREATE PLAYER", "", d->GetHostName());
}

Kanıt Görseli:

288699_f34315d946b8ee0d5421f86c127a9b95 Metin2 Başlangıç İtemini Sourceden verme ve Süreli İtem Sorunu Çözümü

Paylaş :

Bu Kategoriden

Metin2 Gelişmiş Chat Bot Sistemi: Sunucunuzun Sohbetini Canlandırın 31.05.2026 Metin2 Cinsiyet Değiştirme Quest Sistemi: Sorunsuz Çalışan Güncel Kod 09.05.2026 Metin2 sistem ekleme aracı ile source dosyalarına otomatik kod uygulama ve patch sürecini gösteren arayüz görseli. Metin2 Sistem Ekleme Aracı: Kodları Otomatik Uygulayan Yardımcı Program 09.05.2026 Metin2 ruh taşı scripti ile Grand Master beceri geliştirme sistemini anlatan Seungryong Vadisi görseli. Metin2 Ruh Taşı Scripti: Tek Seferde Çoklu Grand Master Eğitimi 06.05.2026
Okuma Önerisi

Benzer rehberlere ve güncel oyun içeriklerine göz atabilirsin.

Okumaya Devam Et

5 Haziran 2026 Metin2 PVP sunucuları 5 Haziran 2026 Metin2 PVP Sunucuları | İnziva2, Hilal2, ZeroMT2, Valerya2, Arvis2 01.06.2026 Pokemon Go Haziran 2026 etkinlikleri: Frigibax Community Day duyuru görseli Pokemon Go Haziran 2026 Etkinlikleri: Frigibax Community Day, Raid Boss’lar ve Daha Fazlası 01.06.2026 Forza Horizon 6 en iyi arabalar rehberi: McLaren P1 ıslak yolda hızla ilerliyor Forza Horizon 6 En İyi Arabalar: Her Yarış Tipine Göre Öneriler 01.06.2026 Forza Horizon 6 Tokyo Tower konumu: Beyaz bir araç Tokyo Tower’ın dibinde park halinde Forza Horizon 6 Tokyo Tower Nerede? Fotoğraf Görevi Konumu 01.06.2026

Hızlı Geçiş

Rehber Haber Önizleme Mobil Oyun