kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
farkmt2official 1
farkmt2official
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Hikaye Ekle
Kostüm Süre Uzatma Sistemi

Altın Konu Kostüm Süre Uzatma Sistemi V3

indirmek için izniniz yok
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!

V1:
Kısıtlama koymadım. Binek, silah kostümü, zırh kostümü, saç kostümü ne varsa üzerine sürüklediğinizde süresi artar.
Süre değişkenini protodan değiştirebilirsiniz. Yapmanız gereken value0 değerini değiştirmek.
Source den süreyi gün olarak ayarladım.1 yazarsanız 1 gün, 10 yazarsanız 10gün olur.
Süre uzatma eşyasının miktarını arttırabilirsiniz. 7,14,30 gün şeklinde. Yapmanız gereken char_item ile uiinventory'ye yeni eşyaların vnumlarını ilave etmek.

V2:
Özel ikon yaptım.
7 güne ilaveten 14 ve 30 gün olan 2 adet kostüm uzatma ekledim.
Kostüm uzatmalara Eklenecek süre bilgisi ekledim.

V3:
Süre uzatma limiti eklendi.(365)
Süresi 0 olan kostümlere süre verilmesi çözümlendi.
Kuşak hatası çözümlendi.
REAL_TIME_FIRST_USE(süresi takıldıktan sonra azalmaya başlayan) olan eşyalara süre verme ile ilgili hata giderildi.





Beğenip yorum atmayı unutmayın.
1582332798283.gif


SQL kullananlar için
insert into item_proto (`vnum`, `type`, `subtype`, `name`, `locale_name`, `gold`, `shop_buy_price`, `weight`, `size`, `flag`, `wearflag`, `antiflag`, `immuneflag`, `refined_vnum`, `refine_set`, `magic_pct`, `socket_pct`, `addon_type`, `specular`, `limittype0`, `limitvalue0`, `limittype1`, `limitvalue1`, `applytype0`, `applyvalue0`, `applytype1`, `applyvalue1`, `applytype2`, `applyvalue2`, `value0`, `value1`, `value2`, `value3`, `value4`, `value5` ) values (84014, 3, 10, "KOSTUM_SURE_UZATMA", "Sure Uzat", 0, 0, 0, 1, 8192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 );
insert into item_proto (`vnum`, `type`, `subtype`, `name`, `locale_name`, `gold`, `shop_buy_price`, `weight`, `size`, `flag`, `wearflag`, `antiflag`, `immuneflag`, `refined_vnum`, `refine_set`, `magic_pct`, `socket_pct`, `addon_type`, `specular`, `limittype0`, `limitvalue0`, `limittype1`, `limitvalue1`, `applytype0`, `applyvalue0`, `applytype1`, `applyvalue1`, `applytype2`, `applyvalue2`, `value0`, `value1`, `value2`, `value3`, `value4`, `value5` ) values (84015, 3, 10, "KOSTUM_SURE_UZATMA", "Sure Uzat", 0, 0, 0, 1, 8192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0 );
insert into item_proto (`vnum`, `type`, `subtype`, `name`, `locale_name`, `gold`, `shop_buy_price`, `weight`, `size`, `flag`, `wearflag`, `antiflag`, `immuneflag`, `refined_vnum`, `refine_set`, `magic_pct`, `socket_pct`, `addon_type`, `specular`, `limittype0`, `limitvalue0`, `limittype1`, `limitvalue1`, `applytype0`, `applyvalue0`, `applytype1`, `applyvalue1`, `applytype2`, `applyvalue2`, `value0`, `value1`, `value2`, `value3`, `value4`, `value5` ) values (84016, 3, 10, "KOSTUM_SURE_UZATMA", "Sure Uzat", 0, 0, 0, 1, 8192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0 );
 
Son düzenleme:

En Çok Reaksiyon Alan Mesajlar

Kendim files geliştirdiğim için bi güzellik yapayım dedim buraya da ekleyeyim dedim.

PythonItem.cpp aç ve ekle:

Kod:
#ifdef ENABLE_EXTENDING_COSTUME_TIME
bool CPythonItem::IsAddTimeCostumeItem(const uint32_t dwVnum) const
{
    constexpr std::array<uint32_t, 3> add_item_vnum = {
        static_cast<uint32_t>(EAddCostumeTimeItem::ADD_TIME_COSTUME_ITEM_7),
        static_cast<uint32_t>(EAddCostumeTimeItem::ADD_TIME_COSTUME_ITEM_14),
        static_cast<uint32_t>(EAddCostumeTimeItem::ADD_TIME_COSTUME_ITEM_30)
    };

    return std::find(add_item_vnum.begin(), add_item_vnum.end(), dwVnum) != add_item_vnum.end();
}
#endif

PythonItem.h aç ve ekle:

Kod:
#ifdef ENABLE_EXTENDING_COSTUME_TIME
        bool    IsAddTimeCostumeItem(const uint32_t dwVnum) const;
#endif

PythonItemModule.cpp aç ve ekle:

Kod:
#ifdef ENABLE_EXTENDING_COSTUME_TIME
PyObject* itemAddTimeCostumeItem(PyObject* poSelf, PyObject* poArgs)
{
    int iItemVID;
    if (!PyTuple_GetInteger(poArgs, 0, &iItemVID))
        return Py_BadArgument();

    CItemManager::Instance().SelectItemData(iItemVID);
    CItemData* pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
    if (!pItemData)
        return Py_BuildException("Can't find select item data");

    return Py_BuildValue("b", CPythonItem::Instance().IsAddTimeCostumeItem(pItemData->GetIndex()));
}
#endif

Modul içine ekle:

Kod:
#ifdef ENABLE_EXTENDING_COSTUME_TIME
        { "AddTimeCostumeItem",                itemAddTimeCostumeItem,                    METH_VARARGS },
#endif

PythonPlayerModule.cpp aç ve Ekle:

Kod:
#ifdef ENABLE_EXTENDING_COSTUME_TIME
PyObject * playerCanAddTimeCostumeItem(PyObject * poSelf, PyObject * poArgs)
{
    TItemPos TargetSlotIndex;
    if (!PyTuple_GetInteger(poArgs, 0, &TargetSlotIndex.cell))
        return Py_BadArgument();

    int iTargetItemIndex = CPythonPlayer::Instance().GetItemIndex(TargetSlotIndex);
    CItemManager::Instance().SelectItemData(iTargetItemIndex);
    CItemData * pTargetItemData = CItemManager::Instance().GetSelectedItemDataPointer();
    if (!pTargetItemData)
        return Py_BuildException("Can't find item data");
    
    if (pTargetItemData->GetType() == CItemData::EItemType::ITEM_TYPE_COSTUME)
    {
        switch (pTargetItemData->GetSubType())
        {
            case CItemData::ECostumeSubTypes::COSTUME_BODY:
            case CItemData::ECostumeSubTypes::COSTUME_HAIR:
            case CItemData::ECostumeSubTypes::COSTUME_WEAPON:
                return Py_BuildValue("i", TRUE);
            break;
        }
    }

    return Py_BuildValue("i", FALSE);
}
#endif

modul içine ekle:

Kod:
#ifdef ENABLE_EXTENDING_COSTUME_TIME
        { "CanAddTimeCostumeItem",                    playerCanAddTimeCostumeItem,                METH_VARARGS },
#endif

GameType.h aç ve ekle:

Kod:
#ifdef ENABLE_EXTENDING_COSTUME_TIME
enum class EAddCostumeTimeItem : uint32_t
{
    ADD_TIME_COSTUME_ITEM_7 = 84014,
    ADD_TIME_COSTUME_ITEM_14 = 84015,
    ADD_TIME_COSTUME_ITEM_30 = 84016,
};
#endif

DERLE

uiInventory.py aç ve değiştir:


Kod:
        elif app.ENABLE_EXTENDING_COSTUME_TIME and item.AddTimeCostumeItem(srcItemVID):
            self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)

Tekrar Değiştir:

Kod:
        elif app.ENABLE_EXTENDING_COSTUME_TIME and item.AddTimeCostumeItem(srcItemVNum):
                return True

Tekrar değiştir:

Kod:
        elif app.ENABLE_EXTENDING_COSTUME_TIME and item.AddTimeCostumeItem(srcItemVNum) and player.CanAddTimeCostumeItem(dstSlotPos):
            return True

Char_Item.cpp aç ve değiştir:

Kod:
#ifdef ENABLE_EXTENDING_COSTUME_TIME
                            case static_cast<uint32_t>(EAddCostumeTimeItem::ADD_TIME_COSTUME_ITEM_7):
                            case static_cast<uint32_t>(EAddCostumeTimeItem::ADD_TIME_COSTUME_ITEM_14):
                            case static_cast<uint32_t>(EAddCostumeTimeItem::ADD_TIME_COSTUME_ITEM_30):
                            {
                                auto* item2 = GetItem(DestCell);
                            
                                if (!IsValidItemPosition(DestCell) || !item2)
                                    return false;
                            
                                if (item2->IsExchanging() || item2->IsEquipped())
                                    return false;
                            
                                if (item2->GetType() != ITEM_COSTUME)
                                {
                                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can only extend the duration of the costumes."));
                                    return false;
                                }
                                
                                if (item2->GetSubType() != COSTUME_BODY && item2->GetSubType() != COSTUME_HAIR && item2->GetSubType() != COSTUME_WEAPON)
                                {
                                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Not a valid type of costume. Use only for clothing, hair and weapons."));
                                    return false;
                                }
                                
                                constexpr int day = 60 * 60 * 24;
                                constexpr int limit_time = day * 365; // bir yıllık sınır
                            
                                auto existing_duration = item2->GetSocket(0);
                                auto additional_duration = item->GetValue(0) * day;
                                auto new_duration = existing_duration + additional_duration;
                                
                                if (existing_duration == 0 || (new_duration - time(0) >= limit_time))
                                {
                                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("No more suras can be added to this item."));
                                    return false;
                                }
                            
                                ITEM_MANAGER::instance().RemoveItem(item);
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Added time to costume."));
                                item2->SetSocket(0, new_duration);
                            }
                            break;
#endif

Common/Lenght.h aç ve ekle:

Kod:
#ifdef ENABLE_EXTENDING_COSTUME_TIME
enum class EAddCostumeTimeItem : uint32_t
{
    ADD_TIME_COSTUME_ITEM_7 = 84014,
    ADD_TIME_COSTUME_ITEM_14 = 84015,
    ADD_TIME_COSTUME_ITEM_30 = 84016,
};
#endif

Hayırlı Olsun.
Eline sağlık kanka ama keske int_64t diye değişken oluşturacağına direk parametreye yazsaydin.Bu sayede sinirlamalar biraz daha gevşek olurdu ve tek sınırlama foksiyonun parametresinde ki değişkeni olurdu
Fark etmez. int64t = long. Item socket değişkeni zaten long tipinde tutuluyor. Hiçbir farkı yok, kod en mantıklısı. Fakat unutmamak lazım kullanıcı için sınır belirlemek her zaman sağlıklıdır. Teşekkürler paylaşım için.
C++:
long        GetSocket(int i)    { return m_alSockets[i];    }
Dostum Petler için nasıl bi yol izleye biliriz süre eklemek için 53001 den itibaren olan petleri
Pet in item type ı öğrenin.

uiinventory'de bu kısıma
if item.GetItemType() == item.ITEM_TYPE_COSTUME:
ve char_item'da bu kısıma girin.
if (item2->GetType() != ITEM_COSTUME)
Subtype'dan da kontrol etmeniz gerekebilir.

if item.GetItemType() == item.XXX and item.GetItemSubType() == item.XXX:
if (item2->GetType() != XX && item2->GetSubType() != XX)

İkisini kombine etmek için yani hem kostümlerin hemde petin süresini uzatması için

if item.GetItemType() == item.ITEM_TYPE_COSTUME or item.GetItemType() == item.XXX and item.GetItemSubType() == item.XXX:
if (item2->GetType() != ITEM_COSTUME || (item2->GetType() != XX && item2->GetSubType() != XX))
V1:
Kısıtlama koymadım. Binek, silah kostümü, zırh kostümü, saç kostümü ne varsa üzerine sürüklediğinizde süresi artar.
Süre değişkenini protodan değiştirebilirsiniz. Yapmanız gereken value0 değerini değiştirmek.
Source den süreyi gün olarak ayarladım.1 yazarsanız 1 gün, 10 yazarsanız 10gün olur.
Süre uzatma eşyasının miktarını arttırabilirsiniz. 7,14,30 gün şeklinde. Yapmanız gereken char_item ile uiinventory'ye yeni eşyaların vnumlarını ilave etmek.

V2:
Özel ikon yaptım.
7 güne ilaveten 14 ve 30 gün olan 2 adet kostüm uzatma ekledim.
Kostüm uzatmalara Eklenecek süre bilgisi ekledim.

Beğenip yorum atmayı unutmayın.

Ekli dosyayı görüntüle 2762

SQL kullananlar için

Paylaşım için teşekkürler.
 
Son düzenleme:
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst