.txt İtem Set Bonus System

  • Konuyu açan Konuyu açan enes turan
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 23
  • Gösterim Gösterim 2K
Güncelleme:
son ve en stabil hali.


char_affect.cpp:
Genişlet Daralt Kopyala
//arat
#define IS_NO_SAVE_AFFECT(type)

//define içerisine ekle
|| (type) == AFFECT_SET_ITEM

//arat
bool CHARACTER::RemoveAffect(CAffect * pkAff)

//altında bul
    if (AFFECT_REVIVE_INVISIBLE != pkAff->dwType)
    {
        ComputePoints();
    }
//değiştir
    #if defined(__SET_ITEM__) //// @fixme
        if (pkAff->dwType != AFFECT_SET_ITEM && pkAff->dwType != AFFECT_REVIVE_INVISIBLE)
            ComputePoints();
        else
            UpdatePacket();
    #else
        if (pkAff->dwType != AFFECT_REVIVE_INVISIBLE)
            ComputePoints();
        else
            UpdatePacket();
    #endif

char.cpp:
Genişlet Daralt Kopyala
//kod bloğunu değiştir
#if defined(__SET_ITEM__)
void CHARACTER::RefreshItemSetBonus()
{
    RemoveAffect(AFFECT_SET_ITEM);

    bool bSetBonus = false;
    for (const auto& [bSetValue, vItems] : ITEM_MANAGER::Instance().GetItemSetItemMap())
    {
        BYTE bWearCount = 0;

        const auto& rkItemSetValueMap = ITEM_MANAGER::Instance().GetItemSetValueMap();
        if (rkItemSetValueMap.empty())
            break;

        const auto& ItemSetValueMap = rkItemSetValueMap.find(bSetValue);
        if (ItemSetValueMap == rkItemSetValueMap.end())
            continue;

        for (const auto& [bSetType, kItemTuple] : vItems)
        {
            LPITEM pItem = nullptr;
            LPITEM pUnique1 = nullptr;
            LPITEM pUnique2 = nullptr;

            switch (bSetType)
            {
                case SET_ITEM_COSTUME_BODY:
                    pItem = GetWear(WEAR_COSTUME_BODY);
                    break;

                case SET_ITEM_COSTUME_HAIR:
                    pItem = GetWear(WEAR_COSTUME_HAIR);
                    break;

                case SET_ITEM_COSTUME_MOUNT:
                    pItem = GetWear(WEAR_COSTUME_MOUNT);
                    break;

                case SET_ITEM_COSTUME_ACCE:
                    pItem = GetWear(WEAR_COSTUME_ACCE);
                    break;

                case SET_ITEM_COSTUME_WEAPON:
                    pItem = GetWear(WEAR_COSTUME_WEAPON);
                    break;

                case SET_ITEM_UNIQUE:
                    pUnique1 = GetWear(WEAR_UNIQUE1);
                    pUnique2 = GetWear(WEAR_UNIQUE2);
                    break;
            }

            const auto& [dwMinVnum, dwMaxVnum, bRange] = kItemTuple;

            if (pUnique1 && CHECK_VNUM_RANGE(pUnique1->GetVnum(), dwMinVnum, dwMaxVnum, bRange))
                ++bWearCount;

            if (pUnique2 && CHECK_VNUM_RANGE(pUnique2->GetVnum(), dwMinVnum, dwMaxVnum, bRange))
                ++bWearCount;

            if (pItem && CHECK_VNUM_RANGE(pItem->GetVnum(), dwMinVnum, dwMaxVnum, bRange))
                ++bWearCount;

            for (const auto& [bCount, vSetBonus] : ItemSetValueMap->second)
            {
                if (bWearCount != bCount)
                {
                    bSetBonus = false;
                    continue;
                }

                for (const auto& [wApplyType, lApplyValue] : vSetBonus)
                {
                    AddAffect(AFFECT_SET_ITEM, aApplyInfo[wApplyType].bPointType, lApplyValue, 0, INFINITE_AFFECT_DURATION, 0, true, true);
                    bSetBonus = true;
                }
            }
        }

        if (bSetBonus)
            break;
    }
}
#endif

isteğe göre bunuda yapabilirsiniz.
bineğe sürekli in & bin yapıldığında oluşacak lag için bir düzenleme.


char.cpp:
Genişlet Daralt Kopyala
//ara
void CHARACTER::MountVnum(DWORD vnum)

//altında bul
    ComputePoints();
//değiştir
    ComputeBattlePoints();//fixme
Thank you for constantly updating the system.
Also thank you for sharing the updates with us <3
 
Uyarı: Bu konu açıldığından bu yana baya zaman geçmiş.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.
Geri
Üst