Başlangıçta İtem Verme Sistemi(json)

TheAdmin33

Ah, bu şarkıların gözü kör olsun
Geliştirici
Yardımsever Üye
Usta Üye
Editör
Mesaj
1.492
Çözümler
84
Beğeni
6.655
Puan
2.859
Ticaret Puanı
0
Ekran Alıntısı.webp




Yeni oluşturulan karakterlerin, belirlemiş olduğunuz item’lara (eşyalar) sahip şekilde oyuna başlamasını sağlar. İsterseniz bu item’ların karaktere giydirilmiş (donatılmış) olarak gelmesini de sağlayabilirsiniz. Ayrıca başlangıç item’ları için adet, bonuslar ve taşlar (soketler, yani süreli eşyalar) gibi özellikleri de ayarlayabilirsiniz.

Bu işlev yalnızca PlayerCreate (karakter oluşturulduğunda) sırasında çağrılır ve tetiklenir. Bu nedenle, eşyaların iki kez verilmesini önlemek için ayrıca bir görev bayrağına ihtiyaç yoktur. Tabloda yapılan değişikliklerden sonra sunucuyu yeniden başlatmanıza gerek yoktur; sadece /reload g komutunu kullanmanız yeterlidir.

Tek can sıkıcı kısım, ekipmanlar için her öğenin yerleştirileceği tam yuva dizinlerini (slot) belirtmek zorunda olmanızdır.

Burayı görüntülemek için üye girişi yapmalı veya kayıt olmalısınız.


 
Son düzenleme:
Sistem ekledim fakat içindeki jsona süreli item ekleyince 0 dakika olarak gözüküyor. Çünkü sistem unix time olarak hesaplama yapıyor buda günümüz zamanına 20 günlük item ekleyince denk gelmiyor. Eğer binek kostüm bu item_type kullanıyorsa ITEM_COSTUME İnput_db içerisine eklediğimiz şu kodun

C++:
Genişlet Daralt Kopyala
            std::copy(item.sockets.begin(), item.sockets.end(), t.alSockets);
            std::copy(item.attrs.begin(), item.attrs.end(), t.aAttr);

altına bunu ekleyin direkt item protadan çeksin.

C++:
Genişlet Daralt Kopyala
            const TItemTable* pTable = ITEM_MANAGER::instance().GetTable(item.vnum);
            if (pTable)
            {
                for (int i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
                {
                    if (pTable->aLimits[i].bType == LIMIT_REAL_TIME)
                    {
                        if (t.alSockets[0] == 0)
                            t.alSockets[0] = time(0) + pTable->aLimits[i].lValue;
                        break;
                    }
                    else if (pTable->aLimits[i].bType == LIMIT_REAL_TIME_START_FIRST_USE)
                    {
                        if (t.alSockets[0] == 0)
                            t.alSockets[0] = pTable->aLimits[i].lValue;
                        break;
                    }
                    else if (pTable->aLimits[i].bType == LIMIT_TIMER_BASED_ON_WEAR)
                    {
                        if (t.alSockets[0] == 0)
                            t.alSockets[0] = pTable->aLimits[i].lValue;
                        break;
                    }
                }
            }
 
Son düzenleme:
Geri
Üst